cobrili-client 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/api-registry.ts","../src/xml-utils.ts","../src/client.ts"],"sourcesContent":["/**\n * @cobrili/api-adapter\n *\n * Modern TypeScript API adapter for Cobrili REST API\n * Works in both Browser and Node.js environments\n */\n\n// Main client\nexport { CobriliClient, createCobriliClient } from './client';\n\n// Registry\nexport { API_METHODS, API_TYPES, type FieldDefinition, type InferRequest, type InferResponse } from './api-registry';\n\n// Types\nexport type {\n\t// Config\n\tCobriliConfig,\n\tApiResponse,\n\tCobriliError,\n\n\t// Field types\n\tFieldType,\n\n\t// Entities\n\tLoginUser,\n\tAnonymousLoginData,\n\tGroupDataWithoutUsersAndRights,\n\tNavigationEntry,\n\tBreadCrumbEntry,\n\tAdditionalContent,\n\tRelatedTopicInfo,\n\tHelpsetInfo,\n\tSearchQueryParameters,\n\tSearchResult,\n\tSearchHistoryEntry,\n\tHistoryEntry,\n\tBookmarkEntry,\n\tBookmarkData,\n\tLocalizedEntry,\n\tTopicInfo,\n\tSearchSuggestion,\n\tSearchResultWithMetadata,\n\tFacetChange,\n\tExecutedSearch,\n\tTopicType,\n\tSearchSuggestionsSettings,\n\tMetaKeyDefinition,\n\tNavigationEntryWithMetaData,\n\tNavigationEntryWithMetaDataList,\n\tBreadCrumbEntryWithMetaData,\n\tBreadCrumbWithMetaDataEntry,\n\tMetaDataDefinition,\n\tUserInfo,\n\tCustomSetting,\n\tGroupData,\n\tRelatedTopicWithLinks,\n\tRelatedTopicWithLinkInfo,\n\tRawNavigationEntry,\n\tChildTopicInfo,\n\tChildTopicBasedOnMetadata,\n\tSynonymEntry,\n\tHistoryEntryExtended,\n\tStartUpMetaValuePair,\n\tStartExtendedSearchResponse,\n\tMetaValuesForTopicEntry,\n\tMetaValuePair,\n} from './api-registry';\n\n// XML utilities (for advanced use)\nexport { parseXml, serializeXml, createRequestXml, parseResponseXml, escapeXml, unescapeXml, type XmlNode } from './xml-utils';\n","/**\r\n * Cobrili API Definitions\r\n *\r\n * This file defines all available API methods. To add a new API method:\r\n * 1. Add the request/response types to types.ts\r\n * 2. Add a new entry to the API_METHODS object below\r\n *\r\n * Each method definition specifies:\r\n * - method: The server-side method name (optional, defaults to capitalized key)\r\n * - requestType: The XML request type name (optional, defaults to method + \"Request\")\r\n * - requestFields: Fields to serialize in the request\r\n * - responseFields: Fields to parse from the response\r\n */\r\n\r\n// ============================================================================\r\n// Base Types\r\n// ============================================================================\r\n\r\nexport interface CobriliConfig {\r\n\t/** API base URL (e.g., 'http://localhost:5000') */\r\n\tbaseUrl: string;\r\n\t/** API endpoint path (default: '/api/cobrili') */\r\n\tendpoint?: string;\r\n\t/** Request timeout in milliseconds (default: 30000) */\r\n\ttimeout?: number;\r\n\t/** Custom headers to include in all requests */\r\n\theaders?: Record<string, string>;\r\n\t/** Enable debug logging */\r\n\tdebug?: boolean;\r\n}\r\n\r\nexport type ApiResponse<T> = { data: T; error?: never } | { data?: never; error: CobriliError };\r\n\r\nexport interface CobriliError {\r\n\tcode: string;\r\n\tmessage: string;\r\n\tdetails?: any;\r\n}\r\n\r\n// ============================================================================\r\n// Entity Definitions\r\n// ============================================================================\r\n\r\nexport interface LoginUser {\r\n\tusername: string;\r\n\tpassword?: string;\r\n}\r\n\r\nexport interface AnonymousLoginData {\r\n\tAnonymous_ID: string;\r\n}\r\n\r\nexport interface GroupDataWithoutUsersAndRights {\r\n\tgroupID: number;\r\n\tgroupName: string;\r\n\tdescription: string;\r\n}\r\n\r\nexport interface NavigationEntry {\r\n\ttitle: string;\r\n\thelpsetID: number;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\tchildren?: any; // NavigationEntryList\r\n\tnextNavID?: number;\r\n\tprevNavID?: number;\r\n\tparentNavID?: number;\r\n\thasChildren: boolean;\r\n\tisPlaceHolderForContainedHelpset: boolean;\r\n\tisMetaDataDrivenNavigationEntry: boolean;\r\n}\r\n\r\nexport interface BreadCrumbEntry {\r\n\tnavigationID: number;\r\n\ttopicID: number;\r\n\ttitle: string;\r\n\tlongTitle: string;\r\n}\r\n\r\nexport interface AdditionalContent {\r\n\tcontent: string;\r\n\tcontentSource: string;\r\n}\r\n\r\nexport interface RelatedTopicInfo {\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\ttitle: string;\r\n\tmetaData?: TopicMetaData;\r\n}\r\n\r\nexport interface MetaValuesList {\r\n\tmetaValues: string[];\r\n}\r\n\r\nexport interface TopicMetaData {\r\n\t// Parsed as a dictionary (legacy code immediately unwraps MetaValuesList.metaValues)\r\n\tmetaData: Record<string, string[]>;\r\n}\r\n\r\nexport interface HelpsetInfo {\r\n\thelpsetId: number;\r\n\tname: string;\r\n\tuniqueIdentifier: string;\r\n\texternalID: string;\r\n\tmetaData?: any; // Map of string → MetaValuesList\r\n\tmasterHelpSetApplicationIdentifier: string;\r\n\ttopicDirectory: string;\r\n\thelpsetType: string;\r\n}\r\n\r\nexport interface SearchQueryParameters {\r\n\tsearchString: string;\r\n\tsearchLanguage: string;\r\n\tmaxResults: number;\r\n\tsearchType: string;\r\n\tanalyzerName: string;\r\n\tsearchInHelpsets: number[];\r\n}\r\n\r\nexport interface SearchResult {\r\n\tcontent: string;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\thelpsetID: number;\r\n\tluceneScore: number;\r\n}\r\n\r\nexport interface SearchHistoryEntry {\r\n\tsearchID: number;\r\n\thitRangeBegin: number;\r\n\thitRangeEnd: number;\r\n}\r\n\r\nexport interface HistoryEntry {\r\n\ttitle: string;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\tpageType: string;\r\n\tscrollPosition: number;\r\n\tsearchHistoryEntry?: SearchHistoryEntry;\r\n}\r\n\r\nexport interface BookmarkEntry {\r\n\tbookmarkID: number;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\tbookmarkTitle: string;\r\n\texternalTopicID: string;\r\n\tuniqueHelpsetID: string;\r\n}\r\n\r\nexport interface BookmarkData {\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\ttitle: string;\r\n}\r\n\r\nexport interface LocalizedEntry {\r\n\tmetaValue: string;\r\n\tlocalizedValue: string;\r\n}\r\n\r\nexport interface TopicInfo {\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\thelpsetID: number;\r\n\ttitle: string;\r\n\ttarget: string;\r\n}\r\n\r\nexport interface SearchSuggestion {\r\n\tterm: string;\r\n\tweight: number;\r\n}\r\n\r\nexport interface SearchResultWithMetadata {\r\n\tcontent: string;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\thelpsetID: number;\r\n\tluceneScore: number;\r\n\trequestedMetaData: MetaValuePair[];\r\n}\r\n\r\nexport interface FacetChange {\r\n\tmetaKey: string;\r\n\tmetaValue: string;\r\n\tchanges: number;\r\n\tchangeAsText: string;\r\n}\r\n\r\nexport interface FacetInputData {\r\n\tmetaKey: string;\r\n\tmetaValue: string;\r\n\taddFacet: boolean;\r\n}\r\n\r\nexport interface FacetResultsForSearch {\r\n\tsearchID: number;\r\n\tfacetResults: FacetChange[];\r\n}\r\n\r\nexport interface FacetResultsExtended {\r\n\tfacetResultsForEachSearch: FacetResultsForSearch[];\r\n\tcombinedResults: FacetChange[];\r\n}\r\n\r\nexport interface ExecutedSearch {\r\n\tsearchID: number;\r\n\tsearchString: string;\r\n\ttimestamp: number;\r\n\tnumberOfResults: number;\r\n}\r\n\r\nexport interface TopicType {\r\n\ttopicType: string;\r\n}\r\n\r\nexport interface SearchSuggestionsSettings {\r\n\tmaxSuggestions: number;\r\n\tminChars: number;\r\n}\r\n\r\nexport interface MetaKeyDefinition {\r\n\tmetaKeyID: number;\r\n\tmetaKey: string;\r\n\tdisplayName: string;\r\n}\r\n\r\nexport interface NavigationEntryWithMetaData {\r\n\ttitle: string;\r\n\thelpsetID: number;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\tchildren: NavigationEntryWithMetaDataList;\r\n\tnextNavID?: number;\r\n\tprevNavID?: number;\r\n\tparentNavID?: number;\r\n\thasChildren: boolean;\r\n\tisPlaceHolderForContainedHelpset: boolean;\r\n\tcobriliLink: string;\r\n\trequestedMetaData: MetaValuePair[];\r\n\tisMetaDataDrivenNavigationEntry: boolean;\r\n}\r\n\r\nexport interface NavigationEntryWithMetaDataList {\r\n\tentries: NavigationEntryWithMetaData[];\r\n}\r\n\r\nexport interface BreadCrumbWithMetaDataEntry {\r\n\ttitle: string;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\tlongTitle: string;\r\n\tcobriliLink: string;\r\n\trequestedMetaData: MetaValuePair[];\r\n}\r\n\r\nexport type BreadCrumbEntryWithMetaData = BreadCrumbWithMetaDataEntry;\r\n\r\nexport interface MetaDataDefinition {\r\n\tmetaKey: string;\r\n\tdisplayName: string;\r\n\tpossibleValues: string[];\r\n}\r\n\r\nexport interface UserInfo {\r\n\tuserID: number;\r\n\tuserName: string;\r\n\tuserFullName: string;\r\n\temailAddress: string;\r\n\tisAdmin: boolean;\r\n\tisAnonymous: boolean;\r\n\tstate: number;\r\n\tgroups: GroupDataWithoutUsersAndRights[];\r\n}\r\n\r\nexport interface CustomSetting {\r\n\tkey: string;\r\n\tvalue: string;\r\n}\r\n\r\nexport interface GroupData {\r\n\tgroupID: number;\r\n\tgroupName: string;\r\n\tdescription?: string;\r\n\tusers: number[];\r\n\trights: Record<string, GroupRights>;\r\n}\r\n\r\nexport interface RelatedTopicWithLinks extends RelatedTopicInfo {\r\n\tcobriliLink: string;\r\n}\r\n\r\nexport interface RelatedTopicWithLinkInfo {\r\n\tnormalRelatedTopicInfo: RelatedTopicInfo;\r\n\tcobriliLink: string;\r\n}\r\n\r\nexport interface RawNavigationEntry {\r\n\tnavigationID: number;\r\n\ttopicID: number;\r\n\tparentNavigationID: number;\r\n\ttitle: string;\r\n\tsortOrder: number;\r\n}\r\n\r\nexport interface ChildTopicBasedOnMetadata {\r\n\ttopicID: number;\r\n\tlinkToTopic: string;\r\n\ttitle: string;\r\n}\r\n\r\nexport interface ChildTopicInfo {\r\n\ttitle: string;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\thasChildren: boolean;\r\n\tlinkToTopic: string;\r\n}\r\n\r\nexport interface SynonymEntry {\r\n\tword: string;\r\n\tsynonyms: string[];\r\n}\r\n\r\nexport interface FileTransport {\r\n\tfilePath: string;\r\n\towns: boolean;\r\n\tcreationDate?: number;\r\n\tmodificationDate?: number;\r\n\tTransportedFileName: string;\r\n}\r\n\r\nexport interface StartExtendedSearchRequest {\r\n\tsearchInTopicTypes: string;\r\n\tsearchString: string;\r\n\tsearchParameters?: SearchQueryParameters;\r\n\tmatchSimilarWords: boolean;\r\n\tusedLuceneAnalyzer?: string;\r\n\tsearchLanguage?: string;\r\n\tsearchBelowTheseTopics: number[];\r\n}\r\n\r\nexport interface ImportHelpsetStorageRequest {\r\n\tzipfile: FileTransport;\r\n}\r\n\r\nexport interface GetMetaDataDefinitionsForCustomerCriteriaRequest {\r\n\tcustomerType: string;\r\n\tcriteria: string[];\r\n}\r\n\r\nexport interface MetaKeyWithID {\r\n\tmetaKeyID: number;\r\n\tmetaKeyName: string;\r\n}\r\n\r\nexport interface MetaValuePair {\r\n\tmetaKey: string;\r\n\tmetaValue: string;\r\n}\r\n\r\nexport interface MetaValuesForTopicEntry {\r\n\texternalTopicID: string;\r\n\ttopicID: number;\r\n\tnavigationID: number;\r\n\tmetaValues: MetaValuePair[];\r\n}\r\n\r\nexport interface MetaValueForGroupRightEntry {\r\n\tmetaKeyID: number;\r\n\tmetaValue: string;\r\n}\r\n\r\nexport interface GroupRights {\r\n\tmetaDataBasedRights: MetaValueForGroupRightEntry[];\r\n}\r\n\r\nexport interface GroupDataWithoutUsers {\r\n\tgroupID: number;\r\n\tgroupName: string;\r\n\trights: Record<string, GroupRights>;\r\n}\r\n\r\nexport interface UserData {\r\n\tuserID: number;\r\n\tuserName: string;\r\n\tpassword?: string;\r\n\tuserFullName?: string;\r\n\tuserType: string;\r\n\temailAdress?: string;\r\n\tgroups: GroupDataWithoutUsers[];\r\n\tstate: number;\r\n\tcreationTimestamp: number;\r\n\tvalidFromTimestamp?: number;\r\n\tvalidToTimestamp?: number;\r\n}\r\n\r\nexport interface SearchProposalResult {\r\n\tchangedSearchForWithSynonyms: string;\r\n\tsearchID: number;\r\n\tnumberOfHits: Record<string, number>;\r\n}\r\n\r\nexport interface LoggingInformation {\r\n\tLoggingFile: string;\r\n\tLoggingLevel: number;\r\n\tMaxLoggingSize: number;\r\n\tDebugMode: boolean;\r\n\tLoggingAdvancedFeatures: number;\r\n}\r\n\r\nexport interface MSSQL_DatabaseSettings {\r\n\tserverName: string;\r\n\tdatabaseName: string;\r\n\tuserName: string;\r\n\tpassword: string;\r\n\tintegratedSecurity: boolean;\r\n}\r\n\r\nexport interface DatabaseSettings {\r\n\tdatabaseType: string;\r\n\tMSSQL_DatabaseSettings?: MSSQL_DatabaseSettings;\r\n}\r\n\r\nexport interface HistoryEntryExtended extends HistoryEntry {\r\n\tscrollPosition: number;\r\n\thitRangeBegin: number;\r\n\thitRangeEnd: number;\r\n\tsearchHistoryEntry?: SearchHistoryEntry;\r\n}\r\n\r\nexport interface StartUpMetaValuePair {\r\n\tmetaKey: string;\r\n\tmetaValue: string;\r\n}\r\n\r\nexport interface StartExtendedSearchResponse {\r\n\tsearchID: number;\r\n\tnumberOfHits: Record<string, number> | Array<string | number>;\r\n}\r\n\r\n// ============================================================================\r\n// Type Definitions & Inference\r\n// ============================================================================\r\n\r\nexport type TypeMap = {\r\n\tstring: string;\r\n\tdouble: number;\r\n\tint: number;\r\n\tboolean: boolean;\r\n\tobject: any;\r\n\tarray: any[];\r\n\tstringArray: string[];\r\n\tstringMap: Record<string, string>;\r\n\tmap: Record<string, any>;\r\n\r\n\t// Complex Types\r\n\tLoginUser: LoginUser;\r\n\tAnonymousLoginData: AnonymousLoginData;\r\n\tGroupDataWithoutUsersAndRights: GroupDataWithoutUsersAndRights;\r\n\tGroupDataWithoutUsers: GroupDataWithoutUsers;\r\n\tUserData: UserData;\r\n\tGroupRights: GroupRights;\r\n\tMetaValuePair: MetaValuePair;\r\n\tMetaValuesList: MetaValuesList;\r\n\tTopicMetaData: TopicMetaData;\r\n\tMetaValuesForTopicEntry: MetaValuesForTopicEntry;\r\n\tMetaKeyWithID: MetaKeyWithID;\r\n\tMetaValueForGroupRightEntry: MetaValueForGroupRightEntry;\r\n\tStartExtendedSearchRequest: StartExtendedSearchRequest;\r\n\tImportHelpsetStorageRequest: ImportHelpsetStorageRequest;\r\n\tGetMetaDataDefinitionsForCustomerCriteriaRequest: GetMetaDataDefinitionsForCustomerCriteriaRequest;\r\n\tSearchProposalResult: SearchProposalResult;\r\n\tNavigationEntry: NavigationEntry;\r\n\tBreadCrumbEntry: BreadCrumbEntry;\r\n\tAdditionalContent: AdditionalContent;\r\n\tRelatedTopicInfo: RelatedTopicInfo;\r\n\tRelatedTopicWithLinkInfo: RelatedTopicWithLinkInfo;\r\n\tHelpsetInfo: HelpsetInfo;\r\n\tSearchQueryParameters: SearchQueryParameters;\r\n\tSearchResult: SearchResult;\r\n\tSearchResultWithMetadata: SearchResultWithMetadata;\r\n\tSearchHistoryEntry: SearchHistoryEntry;\r\n\tHistoryEntry: HistoryEntry;\r\n\tBookmarkEntry: BookmarkEntry;\r\n\tBookmarkData: BookmarkData;\r\n\tLocalizedEntry: LocalizedEntry;\r\n\tTopicInfo: TopicInfo;\r\n\tSearchSuggestion: SearchSuggestion;\r\n\tFacetChange: FacetChange;\r\n\tExecutedSearch: ExecutedSearch;\r\n\tTopicType: TopicType;\r\n\tSearchSuggestionsSettings: SearchSuggestionsSettings;\r\n\tMetaKeyDefinition: MetaKeyDefinition;\r\n\tNavigationEntryWithMetaData: NavigationEntryWithMetaData;\r\n\tNavigationEntryWithMetaDataList: NavigationEntryWithMetaDataList;\r\n\tBreadCrumbWithMetaDataEntry: BreadCrumbWithMetaDataEntry;\r\n\tBreadCrumbEntryWithMetaData: BreadCrumbEntryWithMetaData;\r\n\tMetaDataDefinition: MetaDataDefinition;\r\n\tUserInfo: UserInfo;\r\n\tCustomSetting: CustomSetting;\r\n\tGroupData: GroupData;\r\n\tRelatedTopicWithLinks: RelatedTopicWithLinks;\r\n\tRawNavigationEntry: RawNavigationEntry;\r\n\tChildTopicInfo: ChildTopicInfo;\r\n\tChildTopicBasedOnMetadata: ChildTopicBasedOnMetadata;\r\n\tSynonymEntry: SynonymEntry;\r\n\tHistoryEntryExtended: HistoryEntryExtended;\r\n\tFileTransport: FileTransport;\r\n\tLoggingInformation: LoggingInformation;\r\n\tDatabaseSettings: DatabaseSettings;\r\n\tMSSQL_DatabaseSettings: MSSQL_DatabaseSettings;\r\n\tStartUpMetaValuePair: StartUpMetaValuePair;\r\n\tStartExtendedSearchResponse: StartExtendedSearchResponse;\r\n\r\n\t// Add more as needed... fallback to any if missing\r\n\t[key: string]: any;\r\n};\r\n\r\nexport type FieldType = keyof TypeMap;\r\n\r\nexport interface FieldDefinition {\r\n\tname: string;\r\n\ttype: FieldType;\r\n\tkeytype?: string;\r\n\toptional?: boolean;\r\n\tobjectType?: string;\r\n\titemType?: FieldType;\r\n\titemObjectType?: string;\r\n\txmlTag?: string;\r\n\tvarname?: string;\r\n\txmlType?: string;\r\n\tisBase64?: boolean;\r\n\tvarkeytype?: string;\r\n\tvartype?: string;\r\n\tdefaultValue?: any;\r\n}\r\n\r\n// Helper to create typed fields\r\nconst field = <T extends FieldType, O extends string = string>(\r\n\tname: string,\r\n\ttype: T,\r\n\toptions?: {\r\n\t\toptional?: boolean;\r\n\t\tobjectType?: O;\r\n\t\titemType?: FieldType;\r\n\t\titemObjectType?: O;\r\n\t\tkeytype?: string;\r\n\t\txmlTag?: string;\r\n\t\tvarname?: string;\r\n\t\txmlType?: string;\r\n\t\tisBase64?: boolean;\r\n\t\tvarkeytype?: string;\r\n\t\tvartype?: string;\r\n\t\tdefaultValue?: any;\r\n\t}\r\n) => ({ name, type, ...options }) as const;\r\n\r\n// Inference Types\r\nexport type InferFieldType<F> = F extends { optional: true } ? InferType<F> | undefined : InferType<F>;\r\n\r\ntype InferType<F> = F extends { type: 'array'; itemObjectType: infer O }\r\n\t? O extends keyof TypeMap\r\n\t\t? TypeMap[O][]\r\n\t\t: any[]\r\n\t: F extends { type: 'array'; itemType: infer I }\r\n\t\t? I extends keyof TypeMap\r\n\t\t\t? TypeMap[I][]\r\n\t\t\t: any[]\r\n\t\t: F extends { type: 'object'; objectType: infer O }\r\n\t\t\t? O extends keyof TypeMap\r\n\t\t\t\t? TypeMap[O]\r\n\t\t\t\t: any\r\n\t\t\t: F extends { type: keyof TypeMap }\r\n\t\t\t\t? TypeMap[F['type']]\r\n\t\t\t\t: unknown;\r\n\r\nexport type InferRequest<M extends keyof typeof API_METHODS> = {\r\n\t[K in (typeof API_METHODS)[M]['requestFields'][number] as K['name']]: InferFieldType<K>;\r\n};\r\n\r\nexport type InferResponse<M extends keyof typeof API_METHODS> = {\r\n\t[K in (typeof API_METHODS)[M]['responseFields'][number] as K['name']]: InferFieldType<K>;\r\n};\r\n\r\n// ============================================================================\r\n// API Method Definitions\r\n// ============================================================================\r\n\r\nexport const API_METHODS = {\r\n\t// ==========================================================================\r\n\t// Authentication\r\n\t// ==========================================================================\r\n\r\n\tlogin: {\r\n\t\trequestFields: [\r\n\t\t\tfield('loginUser', 'object', { optional: true, objectType: 'LoginUser', xmlTag: 'LoginUser', varname: 'login_user' }),\r\n\t\t\tfield('anonymousUser', 'object', { optional: true, objectType: 'AnonymousLoginData', xmlTag: 'AnonymousLoginData', varname: 'anonymous_user' }),\r\n\t\t],\r\n\t\tresponseFields: [\r\n\t\t\tfield('userID', 'double'),\r\n\t\t\tfield('userName', 'string'),\r\n\t\t\tfield('userFullName', 'string'),\r\n\t\t\tfield('userType', 'string'),\r\n\t\t\tfield('groups', 'array', { itemObjectType: 'GroupDataWithoutUsersAndRights' }),\r\n\t\t],\r\n\t\tcategory: 'Authentication',\r\n\t\tdescription: 'Authenticate a user (regular or anonymous)' },\r\n\r\n\tlogout: {\r\n\t\trequestFields: [field('not_used_at_the_moment', 'boolean', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Authentication',\r\n\t\tdescription: 'Log out the current user' },\r\n\r\n\t// ==========================================================================\r\n\t// Navigation\r\n\t// ==========================================================================\r\n\r\n\tgetNavigation: {\r\n\t\trequestFields: [field('currentNavigationID', 'double', { })],\r\n\t\tresponseFields: [field('navigationEntries', 'array', { itemObjectType: 'NavigationEntry', xmlTag: 'navigationEntries' })],\r\n\t\tcategory: 'Navigation',\r\n\t\tdescription: 'Get navigation tree for the current position' },\r\n\r\n\tgetBreadCrumb: {\r\n\t\tmethod: 'GetBreadCrumb',\r\n\t\trequestType: 'GetBreadcrumbRequest',\r\n\t\trequestFields: [field('navigationID', 'double', { })],\r\n\t\tresponseFields: [field('breadcrumbs', 'array', { itemObjectType: 'BreadCrumbEntry' }), field('breadCrumbStartBehavior', 'string')],\r\n\t\tcategory: 'Navigation',\r\n\t\tdescription: 'Get breadcrumb trail for the given navigation ID' },\r\n\r\n\tgetNextPage: {\r\n\t\trequestFields: [field('navigationID', 'double', { })],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double'), field('topicTitle', 'string')],\r\n\t\tcategory: 'Navigation',\r\n\t\tdescription: 'Get the next page in navigation order' },\r\n\r\n\tgetPreviousPage: {\r\n\t\trequestFields: [field('navigationID', 'double', { })],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double'), field('topicTitle', 'string')],\r\n\t\tcategory: 'Navigation',\r\n\t\tdescription: 'Get the previous page in navigation order' },\r\n\r\n\tnavigateToTopic: {\r\n\t\trequestFields: [field('topicID', 'double', { }), field('navigationID', 'double', { })],\r\n\t\tresponseFields: [field('activeHelpsetHasBeenChanged', 'boolean')],\r\n\t\tcategory: 'Navigation',\r\n\t\tdescription: 'Navigate to a specific topic' },\r\n\r\n\t// ==========================================================================\r\n\t// Content\r\n\t// ==========================================================================\r\n\r\n\tgetContent: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('content', 'string'), field('extraContents', 'array', { optional: true, itemObjectType: 'AdditionalContent' })],\r\n\t\tcategory: 'Content',\r\n\t\tdescription: 'Get HTML content for a topic' },\r\n\r\n\tgetTemplate: {\r\n\t\trequestFields: [field('templateType', 'string', { keytype: 'TemplateTypesEnum'})],\r\n\t\tresponseFields: [field('content', 'string')],\r\n\t\tcategory: 'Content',\r\n\t\tdescription: 'Get a template by type' },\r\n\r\n\thasTemplate: {\r\n\t\trequestFields: [field('templateType', 'string', { keytype: 'TemplateTypesEnum'})],\r\n\t\tresponseFields: [field('hasTemplate', 'boolean', { xmlTag: 'templateExists' })],\r\n\t\tcategory: 'Content',\r\n\t\tdescription: 'Check if a template exists' },\r\n\r\n\t// ==========================================================================\r\n\t// Topics\r\n\t// ==========================================================================\r\n\r\n\tgetTopicForExternalId: {\r\n\t\trequestFields: [field('externalIdForTopic', 'string', { }), field('externalIdForHelpset', 'string', { }), field('metaData', 'stringMap')],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double')],\r\n\t\tcategory: 'Topics',\r\n\t\tdescription: 'Find a topic by its external ID' },\r\n\r\n\tgetExternalIdForTopic: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('externalIdForTopic', 'string'), field('externalIdForHelpset', 'string'), field('metaDataForHelpset', 'stringArray')],\r\n\t\tcategory: 'Topics',\r\n\t\tdescription: 'Get external ID for a topic' },\r\n\r\n\tgetTitleForTopic: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('title', 'string'), field('externalTopicID', 'string')],\r\n\t\tcategory: 'Topics',\r\n\t\tdescription: 'Get the title of a topic' },\r\n\r\n\tgetHomeTopicId: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double')],\r\n\t\tcategory: 'Topics',\r\n\t\tdescription: 'Get the home topic for a helpset' },\r\n\r\n\tgetRelatedTopics: {\r\n\t\trequestFields: [field('currentTopicID', 'double', { }), field('withMetaData', 'boolean', { }), field('wantedMetaKeys', 'stringArray'), field('localizeMetaValues', 'boolean', { })],\r\n\t\tresponseFields: [field('relatedTopics', 'array', { itemObjectType: 'RelatedTopicInfo' })],\r\n\t\tcategory: 'Topics',\r\n\t\tdescription: 'Get related topics for a given topic' },\r\n\r\n\t// ==========================================================================\r\n\t// Helpsets\r\n\t// ==========================================================================\r\n\r\n\tgetAllHelpsets: {\r\n\t\trequestFields: [field('masterHelpSetApplicationIdentifier', 'string', { }), field('withMetadata', 'boolean', { xmlTag: 'with_metadata' })],\r\n\t\tresponseFields: [field('helpsetInfos', 'array', { itemObjectType: 'HelpsetInfo', xmlTag: 'helpsetInfos' })],\r\n\t\tcategory: 'Helpsets',\r\n\t\tdescription: 'Get all helpsets for a master helpset' },\r\n\r\n\tgetHelpsetInfoForTopic: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('helpsetInfo', 'object', { objectType: 'HelpsetInfo' })],\r\n\t\tcategory: 'Helpsets',\r\n\t\tdescription: 'Get helpset info for a topic' },\r\n\r\n\tgetHelpsetInfoForActiveHelpset: {\r\n\t\trequestFields: [field('notUsed', 'boolean', { })],\r\n\t\tresponseFields: [field('helpsetInfo', 'object', { objectType: 'HelpsetInfo', xmlTag: 'HelpsetInfo' })],\r\n\t\tcategory: 'Helpsets',\r\n\t\tdescription: 'Get info for the currently active helpset' },\r\n\r\n\tswitchMasterHelpSet: {\r\n\t\trequestFields: [\r\n\t\t\tfield('masterHelpSetApplicationIdentifier', 'string', { }),\r\n\t\t\tfield('initActiveHelpset', 'boolean', { }),\r\n\t\t\tfield('externalHelpsetID_forActiveHelpset', 'string', { optional: true}),\r\n\t\t],\r\n\t\tresponseFields: [\r\n\t\t\tfield('pathToIndexHTHML', 'string'),\r\n\t\t\tfield('masterHelpsetDescription', 'stringMap'),\r\n\t\t\tfield('startTopicID', 'double', { xmlTag: 'root_topic_id' }),\r\n\t\t\tfield('activeHelpsetID', 'double', { xmlTag: 'masterHelpSetId' })\r\n\t\t],\r\n\t\tcategory: 'Helpsets',\r\n\t\tdescription: 'Switch to a different master helpset' },\r\n\r\n\t// ==========================================================================\r\n\t// Search\r\n\t// ==========================================================================\r\n\r\n\tstartSearch: {\r\n\t\trequestFields: [field('searchString', 'string', { }), field('searchParameters', 'object', { objectType: 'SearchQueryParameters' })],\r\n\t\tresponseFields: [field('searchID', 'double'), field('numberOfHits', 'int')],\r\n\t\tcategory: 'Search',\r\n\t\tdescription: 'Start a new search' },\r\n\r\n\tgetSearchResults: {\r\n\t\trequestFields: [field('searchID', 'double', { }), field('hitRangeBegin', 'int', { }), field('hitRangeEnd', 'int', { })],\r\n\t\tresponseFields: [field('results', 'array', { itemObjectType: 'SearchResult' })],\r\n\t\tcategory: 'Search',\r\n\t\tdescription: 'Get search results for a search ID' },\r\n\r\n\t// ==========================================================================\r\n\t// History\r\n\t// ==========================================================================\r\n\r\n\trecordHistoryEntry: {\r\n\t\trequestFields: [\r\n\t\t\tfield('topicID', 'double', { }),\r\n\t\t\tfield('navigationID', 'double', { }),\r\n\t\t\tfield('pageType', 'string', { keytype: 'HistoryEntryPageType'}),\r\n\t\t\tfield('searchHistoryEntry', 'object', { optional: true, objectType: 'SearchHistoryEntry', varname: 'searchHistoryEntry' }),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'History',\r\n\t\tdescription: 'Record a history entry' },\r\n\r\n\tgetHistoryList: {\r\n\t\trequestFields: [field('not_used_at_the_moment', 'boolean', { })],\r\n\t\tresponseFields: [field('historyStackPointer', 'int'), field('entries', 'array', { itemObjectType: 'HistoryEntry' })],\r\n\t\tcategory: 'History',\r\n\t\tdescription: 'Get the history list' },\r\n\r\n\thistoryForward: {\r\n\t\trequestFields: [field('steps', 'int', { })],\r\n\t\tresponseFields: [field('historyEntry', 'object', { objectType: 'HistoryEntry', xmlTag: 'HistoryEntry', varname: 'historyEntry' })],\r\n\t\tcategory: 'History',\r\n\t\tdescription: 'Go forward in history' },\r\n\r\n\thistoryBack: {\r\n\t\trequestFields: [field('steps', 'int', { })],\r\n\t\tresponseFields: [field('historyEntry', 'object', { objectType: 'HistoryEntry', xmlTag: 'HistoryEntry', varname: 'historyEntry' })],\r\n\t\tcategory: 'History',\r\n\t\tdescription: 'Go back in history' },\r\n\r\n\t// ==========================================================================\r\n\t// Bookmarks\r\n\t// ==========================================================================\r\n\r\n\taddBookmark: {\r\n\t\trequestFields: [field('topicID', 'double', { }), field('navigationID', 'double', { }), field('bookmarkTitle', 'string', { })],\r\n\t\tresponseFields: [field('bookmarkEntry', 'object', { objectType: 'BookmarkEntry', xmlTag: 'BookmarkEntry', varname: 'bookmarkEntry' })],\r\n\t\tcategory: 'Bookmarks',\r\n\t\tdescription: 'Add a bookmark' },\r\n\r\n\tdeleteBookmark: {\r\n\t\trequestFields: [field('bookmarkID', 'double', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Bookmarks',\r\n\t\tdescription: 'Delete a bookmark' },\r\n\r\n\trenameBookmark: {\r\n\t\trequestFields: [field('bookmarkID', 'double', { }), field('bookmarkTitle', 'string', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Bookmarks',\r\n\t\tdescription: 'Rename a bookmark' },\r\n\r\n\tgetBookmarkList: {\r\n\t\trequestFields: [field('not_used_at_the_moment', 'boolean', { })],\r\n\t\tresponseFields: [field('entries', 'array', { itemObjectType: 'BookmarkEntry', xmlTag: 'entries' })],\r\n\t\tcategory: 'Bookmarks',\r\n\t\tdescription: 'Get all bookmarks for a user' },\r\n\r\n\tisInBookmarks: {\r\n\t\trequestFields: [field('topicID', 'double', { }), field('navigationID', 'double', { })],\r\n\t\tresponseFields: [field('isBookmarked', 'boolean'), field('entry', 'object', { optional: true, objectType: 'BookmarkEntry', xmlTag: 'BookmarkEntry', varname: 'entry' })],\r\n\t\tcategory: 'Bookmarks',\r\n\t\tdescription: 'Check if a topic is bookmarked' },\r\n\r\n\t// ==========================================================================\r\n\t// Metadata\r\n\t// ==========================================================================\r\n\r\n\tgetUsedMetaValues: {\r\n\t\trequestFields: [\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('externalHelpsetID', 'string', { optional: true }),\r\n\t\t\tfield('localizeMetaValues', 'boolean', { }),\r\n\t\t\tfield('sortMetaValues', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('values', 'stringArray', { optional: true }), field('sortedAndLocalizedEntries', 'array', { itemObjectType: 'LocalizedEntry', optional: true })],\r\n\t\tcategory: 'Metadata',\r\n\t\tdescription: 'Get used metadata values' },\r\n\r\n\tchangeMetadataForHelpset: {\r\n\t\trequestFields: [\r\n\t\t\tfield('currentTopicID', 'double', { }),\r\n\t\t\tfield('currentNavigationID', 'double', { }),\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('metaValue', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('newTopicID', 'double'), field('newNavigationID', 'double')],\r\n\t\tcategory: 'Metadata',\r\n\t\tdescription: 'Change metadata filter for current helpset' },\r\n\r\n\tgetMetaKeyWhichRepresentsLanguage: {\r\n\t\trequestFields: [field('notUsed', 'boolean', { })],\r\n\t\tresponseFields: [field('metaKey', 'string')],\r\n\t\tcategory: 'Metadata',\r\n\t\tdescription: 'Get the metadata key that represents language' },\r\n\r\n\t// ==========================================================================\r\n\t// GUI Language\r\n\t// ==========================================================================\r\n\r\n\tswitchGUILan: {\r\n\t\trequestFields: [field('lan', 'string', { })],\r\n\t\tresponseFields: [field('result', 'boolean')],\r\n\t\tcategory: 'GUI Language',\r\n\t\tdescription: 'Switch GUI language' },\r\n\r\n\tgetCurrentGUILanguage: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('guiLanguage', 'string')],\r\n\t\tcategory: 'GUI Language',\r\n\t\tdescription: 'Get current GUI language' },\r\n\r\n\t// ==========================================================================\r\n\t// Resources\r\n\t// ==========================================================================\r\n\r\n\tgetResourceStrings: {\r\n\t\trequestFields: [field('wantedResourceIds', 'stringArray', { }), field('wantedLanguage', 'string', { })],\r\n\t\tresponseFields: [field('resourceStringsInWantedLanguage', 'stringArray')],\r\n\t\tcategory: 'Resources',\r\n\t\tdescription: 'Get resource strings for localization' },\r\n\r\n\t// ==========================================================================\r\n\t// Cobrili Links\r\n\t// ==========================================================================\r\n\r\n\tgetCobriliLinkForTopicId: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('cobriliLink', 'string')],\r\n\t\tcategory: 'Cobrili Links',\r\n\t\tdescription: 'Generate a Cobrili link for a topic' },\r\n\r\n\t// ==========================================================================\r\n\t// Configuration\r\n\t// ==========================================================================\r\n\r\n\tgetConfigurationData: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('metaKeyForLanguage', 'string'), field('defaultGuiLanguage', 'string'), field('searchFacetKeys', 'stringArray')],\r\n\t\tcategory: 'Configuration',\r\n\t\tdescription: 'Get configuration data' },\r\n\r\n\tgetCurrentCobriliVersion: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('version', 'string'), field('buildDate', 'string')],\r\n\t\tcategory: 'Configuration',\r\n\t\tdescription: 'Get current Cobrili version' },\r\n\r\n\t// ==========================================================================\r\n\t// Helpset Import/Export/Management\r\n\t// ==========================================================================\r\n\r\n\timportHelpset: {\r\n\t\trequestFields: [\r\n\t\t\tfield('zipDocument', 'object', { objectType: 'FileTransport', varname: 'zipDocument' }),\r\n\t\t\tfield('withDialog', 'boolean', { }),\r\n\t\t\tfield('overwriteExistingHelpset', 'boolean', { }),\r\n\t\t\tfield('uri_to_webapp_for_refresh_cache_after_helpset_import', 'string', { optional: true}),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean'), field('helpsetID', 'double'), field('message', 'string')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Import a helpset from a ZIP file' },\r\n\r\n\timportMasterHelpset: {\r\n\t\trequestFields: [\r\n\t\t\tfield('masterHelpSetApplicationIdentifier', 'string', { }),\r\n\t\t\tfield('masterHelpset', 'object', { objectType: 'FileTransport', varname: 'masterHelpset' }),\r\n\t\t\tfield('withDialog', 'boolean', { }),\r\n\t\t\tfield('overwriteExistingMasterHelpset', 'boolean', { }),\r\n\t\t\tfield('forceOverwrite', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean'), field('masterHelpsetID', 'double')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Import a master helpset' },\r\n\r\n\tcreateMasterHelpSet: {\r\n\t\trequestFields: [\r\n\t\t\tfield('masterHelpSetApplicationIdentifier', 'string', { }),\r\n\t\t\tfield('masterHelpSetStoreDirectory', 'string', { }),\r\n\t\t\tfield('loggingInfo', 'object', { optional: true, objectType: 'LoggingInformation', varname: 'loggingInfo' }),\r\n\t\t\tfield('defaultGuiLanguage', 'string', { }),\r\n\t\t\tfield('databaseSettings', 'object', { optional: true, objectType: 'DatabaseSettings', varname: 'databaseSettings' }),\r\n\t\t],\r\n\t\tresponseFields: [field('masterHelpSetID', 'double'), field('isNew', 'boolean')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Create a new master helpset or return existing' },\r\n\r\n\tdeleteHelpset: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Delete a helpset' },\r\n\r\n\tdeleteHelpsetsByExternalID: {\r\n\t\trequestFields: [field('externalHelpsetID', 'string', { }), field('metaData', 'stringMap', { })],\r\n\t\tresponseFields: [field('not_used_at_the_moment', 'boolean')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Delete helpsets by external ID' },\r\n\r\n\tdeleteHelpsetByZipNameOrPath: {\r\n\t\trequestFields: [field('zipFileNameOrPath', 'string', { })],\r\n\t\tresponseFields: [field('not_used_at_the_moment', 'boolean')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Delete a helpset by zip name or path' },\r\n\r\n\timportHelpsets: {\r\n\t\trequestFields: [\r\n\t\t\tfield('listOfHelpsets', 'array', { itemObjectType: 'FileTransport', varname: 'listOfHelpsets' }),\r\n\t\t\tfield('withDialog', 'boolean', { }),\r\n\t\t\tfield('overwriteExistingHelpset', 'boolean', { }),\r\n\t\t\tfield('uri_to_webapp_for_refresh_cache_after_helpset_import', 'string', { optional: true}),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean'), field('importedCount', 'int')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Import multiple helpsets from a folder' },\r\n\r\n\tcheckMasterHelpsetID: {\r\n\t\trequestFields: [field('masterHelpSetApplicationIdentifier', 'string', { })],\r\n\t\tresponseFields: [field('isValid', 'boolean'), field('masterHelpsetID', 'double')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Check if master helpset ID is valid' },\r\n\r\n\tloadActiveHelpset: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('loadedSuccessfully', 'boolean')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Load active helpset for navigation (required before GetNavigation/GetBreadcrumb)' },\r\n\r\n\tgetHelpsetInfosExtended: {\r\n\t\trequestFields: [field('onlyNotContainedHelpsets', 'boolean', { }), field('withMetaData', 'boolean', { })],\r\n\t\tresponseFields: [field('helpsetInfos', 'array', { itemObjectType: 'HelpsetInfo' })],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Get helpset infos with extended filtering' },\r\n\r\n\texportHelpsetStorage: {\r\n\t\trequestFields: [field('notUsed', 'boolean', { })],\r\n\t\tresponseFields: [field('zipFileData', 'string')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Export helpset storage as ZIP' },\r\n\r\n\timportHelpsetStorage: {\r\n\t\trequestFields: [field('zipfile', 'object', { objectType: 'FileTransport', varname: 'zipfile' })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Import helpset storage from ZIP' },\r\n\r\n\tgetAllTopicsOfHelpset: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('entries', 'array', { itemObjectType: 'TopicInfo', varname: 'entries' })],\r\n\t\tcategory: 'Helpset Import/Export/Management',\r\n\t\tdescription: 'Get all topics of a helpset' },\r\n\r\n\t// ==========================================================================\r\n\t// Search Extended\r\n\t// ==========================================================================\r\n\r\n\tgetSearchData: {\r\n\t\trequestFields: [field('searchID', 'double', { })],\r\n\t\tresponseFields: [field('searchString', 'string'), field('searchParameters', 'object', { objectType: 'SearchQueryParameters' }), field('numberOfResults', 'int')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get search parameters for a search ID' },\r\n\r\n\tgetSuggestionsForSearchInput: {\r\n\t\trequestFields: [field('searchInput', 'string', { })],\r\n\t\tresponseFields: [field('suggestions', 'stringArray'), field('lastSearches', 'stringArray'), field('searchInput', 'string')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get search suggestions' },\r\n\r\n\tgetChangeInNumberOfSearchResultsForFacet: {\r\n\t\trequestFields: [\r\n\t\t\tfield('searchID', 'double', { }),\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('metaValue', 'string', { }),\r\n\t\t\tfield('addFacet', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('searchID', 'double'), field('changes', 'int'), field('changeAsText', 'string')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get result count change for a facet' },\r\n\r\n\tgetUsedLuceneQueryAsString: {\r\n\t\trequestFields: [field('searchID', 'double', { })],\r\n\t\tresponseFields: [field('luceneQuery', 'string')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get Lucene query as string' },\r\n\r\n\tgetMetaKeysWhichBehaveAsSearchFacets: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('facetKeys', 'stringArray')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get metadata keys that behave as search facets' },\r\n\r\n\tgetSuggestionsForSearchInputWithParameters: {\r\n\t\tmethod: 'GetSuggestionsForSearchInputWithParameters',\r\n\t\trequestType: 'StartSearchRequest',\r\n\t\trequestFields: [field('searchString', 'string', { }), field('searchParameters', 'object', { objectType: 'SearchQueryParameters', varname: 'searchParameters' })],\r\n\t\tresponseFields: [field('suggestions', 'stringArray'), field('lastSearches', 'stringArray'), field('searchInput', 'string')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get search suggestions with parameters' },\r\n\r\n\trebuildSearchIndex: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('not_used', 'boolean')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Rebuild the search index' },\r\n\r\n\tstartSearchWithLuceneAnalyzer: {\r\n\t\trequestFields: [\r\n\t\t\tfield('searchString', 'string', { }),\r\n\t\t\tfield('searchParameters', 'object', { objectType: 'SearchQueryParameters', optional: true, varname: 'searchParameters' }),\r\n\t\t\tfield('matchSimilarWords', 'boolean', { }),\r\n\t\t\tfield('usedLuceneAnalyzer', 'string', { optional: true}),\r\n\t\t],\r\n\t\tresponseFields: [field('searchID', 'double'), field('numberOfHits', 'int')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Start search with specific Lucene analyzer' },\r\n\r\n\tcheckSearchIndex: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('operationSucceeded', 'boolean')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Check and optionally repair search index' },\r\n\r\n\tgetSearchResultsWithMetadata: {\r\n\t\trequestFields: [\r\n\t\t\tfield('searchID', 'double', { }),\r\n\t\t\tfield('hitRangeBegin', 'int', { }),\r\n\t\t\tfield('hitRangeEnd', 'int', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('results', 'array', { itemObjectType: 'SearchResultWithMetadata' })],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get search results with metadata' },\r\n\r\n\tgetAllChangesInNumberOfSearchResultsForFacets: {\r\n\t\trequestFields: [field('searchID', 'double', { }), field('facets', 'array', { itemObjectType: 'FacetInputData', varname: 'facets' })],\r\n\t\tresponseFields: [field('facetResults', 'array', { itemObjectType: 'FacetChange', varname: 'facetResults' })],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get all facet changes for search' },\r\n\r\n\tstartSearchForGivenLanguage: {\r\n\t\tmethod: 'StartSearch_ForGivenLanguage',\r\n\t\trequestType: 'StartSearch_ForGivenLanguageRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('searchString', 'string', { }),\r\n\t\t\tfield('searchParameters', 'object', { objectType: 'SearchQueryParameters', optional: true, varname: 'searchParameters' }),\r\n\t\t\tfield('givenLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('searchID', 'double'), field('numberOfHits', 'int')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Start search for a given language' },\r\n\r\n\tgetExecutedSearches: {\r\n\t\trequestFields: [field('dateStart', 'double', { }), field('dateEnd', 'double', { })],\r\n\t\tresponseFields: [field('searches', 'array', { itemObjectType: 'ExecutedSearch' })],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get executed searches in date range' },\r\n\r\n\tstartExtendedSearch: {\r\n\t\trequestFields: [\r\n\t\t\tfield('searchInTopicTypes', 'string', { keytype: 'SearchInTopicTypesEnum'}),\r\n\t\t\tfield('searchString', 'string', { }),\r\n\t\t\tfield('searchParameters', 'object', { objectType: 'SearchQueryParameters', optional: true, varname: 'searchParameters' }),\r\n\t\t\tfield('matchSimilarWords', 'boolean', { }),\r\n\t\t\tfield('usedLuceneAnalyzer', 'string', { optional: true}),\r\n\t\t\tfield('searchLanguage', 'string', { optional: true}),\r\n\t\t\tfield('searchBelowTheseTopics', 'array', { itemType: 'double', varname: 'searchBelowTheseTopics'}),\r\n\t\t],\r\n\t\tresponseFields: [field('searchID', 'double'), field('numberOfResults', 'int')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Start extended search with topic types' },\r\n\r\n\tgetSearchResultsExtended: {\r\n\t\trequestFields: [\r\n\t\t\tfield('searchID', 'double', { }),\r\n\t\t\tfield('getResultsForTopicTypes', 'string', { keytype: 'SearchInTopicTypesEnum'}),\r\n\t\t\tfield('hitRangeBegin', 'int', { }),\r\n\t\t\tfield('hitRangeEnd', 'int', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('results', 'array', { itemObjectType: 'SearchResultWithMetadata' })],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get extended search results' },\r\n\r\n\tgetAllChangesInNumberOfSearchResultsForFacetsExtended: {\r\n\t\trequestFields: [field('searchIDs', 'array', { itemType: 'double'}), field('facets', 'array', { itemObjectType: 'FacetInputData', varname: 'facets' })],\r\n\t\tresponseFields: [\r\n\t\t\tfield('facetResultsForEachSearch', 'array', { itemObjectType: 'FacetResultsForSearch' }),\r\n\t\t\tfield('combinedResults', 'array', { itemObjectType: 'FacetChange' }),\r\n\t\t],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get facet changes for extended search' },\r\n\r\n\tstartSearchWithSearchProposals: {\r\n\t\trequestFields: [field('data', 'object', { objectType: 'StartExtendedSearchRequest', xmlTag: 'StartExtendedSearchRequest', varname: 'data' })],\r\n\t\tresponseFields: [\r\n\t\t\tfield('data', 'object', { objectType: 'StartExtendedSearchResponse', xmlTag: 'StartExtendedSearchResponse', varname: 'data' }),\r\n\t\t\tfield('propsals', 'array', { itemObjectType: 'SearchProposalResult' }),\r\n\t\t],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Start search with proposals' },\r\n\r\n\tgetSearchSettings: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('SearchSettings', 'object')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get search settings' },\r\n\r\n\tgetSearchTermChangedByAnalyzer: {\r\n\t\trequestFields: [\r\n\t\t\tfield('searchTerm', 'string', { }),\r\n\t\t\tfield('analyzerName', 'string', { }),\r\n\t\t\tfield('searchLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('changedSearchTerm', 'string')],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Get search term transformed by analyzer' },\r\n\r\n\tsearchInRDFData: {\r\n\t\trequestFields: [field('searchID', 'double', { }), field('usedRDFSearchType', 'string', { })],\r\n\t\tresponseFields: [field('results', 'array', { itemObjectType: 'SearchResult' })],\r\n\t\tcategory: 'Search Extended',\r\n\t\tdescription: 'Search in RDF data' },\r\n\r\n\t// ==========================================================================\r\n\t// History Extended\r\n\t// ==========================================================================\r\n\r\n\tupdateCurrentHistoryEntry: {\r\n\t\trequestFields: [field('scrollPosition', 'int', { }), field('hitRangeBegin', 'int', { }), field('hitRangeEnd', 'int', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'History Extended',\r\n\t\tdescription: 'Update current history entry scroll position' },\r\n\r\n\trecordHistoryEntryExtended: {\r\n\t\trequestFields: [\r\n\t\t\tfield('topicID', 'double', { }),\r\n\t\t\tfield('navigationID', 'double', { }),\r\n\t\t\tfield('pageType', 'string', { }),\r\n\t\t\tfield('searchHistoryEntry', 'object', { optional: true, objectType: 'SearchHistoryEntry' }),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'History Extended',\r\n\t\tdescription: 'Record extended history entry' },\r\n\r\n\thistoryForwardExtended: {\r\n\t\tmethod: 'HistoryForwardExtended',\r\n\t\trequestType: 'HistoryForwardRequest',\r\n\t\trequestFields: [field('steps', 'int', { })],\r\n\t\tresponseFields: [field('entry', 'object', { objectType: 'HistoryEntryExtended' })],\r\n\t\tcategory: 'History Extended',\r\n\t\tdescription: 'Go forward in history (extended)' },\r\n\r\n\thistoryBackExtended: {\r\n\t\tmethod: 'HistoryBackExtended',\r\n\t\trequestType: 'HistoryBackRequest',\r\n\t\trequestFields: [field('steps', 'int', { })],\r\n\t\tresponseFields: [field('entry', 'object', { objectType: 'HistoryEntryExtended' })],\r\n\t\tcategory: 'History Extended',\r\n\t\tdescription: 'Go back in history (extended)' },\r\n\r\n\tgetHistoryListExtended: {\r\n\t\tmethod: 'GetHistoryListExtended',\r\n\t\trequestType: 'GetHistoryListRequest',\r\n\t\trequestFields: [field('not_used_at_the_moment', 'boolean', { })],\r\n\t\tresponseFields: [field('entries', 'array', { itemObjectType: 'HistoryEntryExtended' }), field('currentPosition', 'int')],\r\n\t\tcategory: 'History Extended',\r\n\t\tdescription: 'Get extended history list' },\r\n\r\n\tupdateCurrentHistoryEntryExtended: {\r\n\t\trequestFields: [\r\n\t\t\tfield('scrollPosition', 'int', { }),\r\n\t\t\tfield('hitRangeBegin', 'int', { }),\r\n\t\t\tfield('hitRangeEnd', 'int', { }),\r\n\t\t\tfield('hitRangeBeginVideo', 'int', { }),\r\n\t\t\tfield('hitRangeEndVideo', 'int', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'History Extended',\r\n\t\tdescription: 'Update extended history entry' },\r\n\r\n\t// ==========================================================================\r\n\t// Metadata Extended\r\n\t// ==========================================================================\r\n\r\n\tgetAllowedMetaKeysForMasterhelpset: {\r\n\t\trequestFields: [field('masterHelpSetApplicationIdentifier', 'string', { })],\r\n\t\tresponseFields: [field('metaKeys', 'array', { itemObjectType: 'MetaKeyDefinition' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get allowed metadata keys for master helpset' },\r\n\r\n\tgetPossibleMetaValuesByMetaKeyID: {\r\n\t\tmethod: 'GetPossibleMetaValuesByMetaKeyId',\r\n\t\trequestType: 'GetPossibleMetaValuesByMetaKeyIdRequest',\r\n\t\trequestFields: [field('metaKeyId', 'double', { })],\r\n\t\tresponseFields: [field('metaKeyId', 'double'), field('values', 'stringArray')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get possible values by meta key ID' },\r\n\r\n\tgetPossibleMetaValues: {\r\n\t\trequestFields: [field('metaKey', 'string', { })],\r\n\t\tresponseFields: [field('metaKeyId', 'double'), field('values', 'stringArray')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get possible metadata values' },\r\n\r\n\tgetUsedMetaValuesFilteredByOtherMetaValues: {\r\n\t\trequestFields: [\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('filteredBy', 'stringMap', { }),\r\n\t\t\tfield('localizeMetaValues', 'boolean', { }),\r\n\t\t\tfield('sortMetaValues', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('entries', 'array', { itemObjectType: 'LocalizedEntry' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get filtered metadata values' },\r\n\r\n\tgetHelpsetInfosForMetadata: {\r\n\t\trequestFields: [field('metaValues', 'stringMap', { })],\r\n\t\tresponseFields: [field('helpsetInfos', 'array', { itemObjectType: 'HelpsetInfo' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get helpset infos for metadata' },\r\n\r\n\tgetMetaValueForTopic: {\r\n\t\trequestFields: [field('metaKey', 'string', { }), field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('metaValue', 'string')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata value for topic' },\r\n\r\n\tgetAvailableLanguagesForMetaData: {\r\n\t\trequestFields: [field('metaKey', 'string', { }), field('metaValue', 'string', { })],\r\n\t\tresponseFields: [field('languages', 'stringArray')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get available languages for metadata' },\r\n\r\n\tgetStartUpMetaValues: {\r\n\t\trequestFields: [field('metaKey', 'string', { })],\r\n\t\tresponseFields: [field('metaData', 'object')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get startup meta values' },\r\n\r\n\tsetStartUpMetaValues: {\r\n\t\trequestFields: [field('metaValues', 'array', { itemObjectType: 'StartUpMetaValuePair', varname: 'metaValues'})],\r\n\t\tresponseFields: [field('not_used', 'boolean')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Set startup meta values' },\r\n\r\n\tgetNavigationWithMetaData: {\r\n\t\trequestFields: [\r\n\t\t\tfield('currentNavigationID', 'double', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t\tfield('useHelpsetMetadataFallback', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('navigationEntries', 'array', { itemObjectType: 'NavigationEntryWithMetaData' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get navigation with metadata' },\r\n\r\n\tgetBreadCrumbWithMetaData: {\r\n\t\tmethod: 'GetBreadcrumbWithMetaData',\r\n\t\trequestType: 'GetBreadcrumbWithMetaDataRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('navigationID', 'double', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t\tfield('useHelpsetMetadataFallback', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('breadcrumbs', 'array', { itemObjectType: 'BreadCrumbWithMetaDataEntry' }), field('breadCrumbStartBehavior', 'string')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get breadcrumb with metadata' },\r\n\r\n\tgetChildTopicsBasedOnMetadataOfGivenTopic: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('childTopicEntries', 'array', { itemObjectType: 'ChildTopicBasedOnMetadata' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get child topics based on metadata' },\r\n\r\n\tgetHelpsetInfoForExternalIDAndMetaData: {\r\n\t\trequestFields: [field('externalHelpsetID', 'string', { }), field('metaData', 'stringMap', { })],\r\n\t\tresponseFields: [field('helpsetInfo', 'object', { objectType: 'HelpsetInfo' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get helpset info by external ID and metadata' },\r\n\r\n\tgetAllMetaValuesForTopic: {\r\n\t\trequestFields: [field('metaKey', 'string', { }), field('topicID', 'double', { optional: true})],\r\n\t\tresponseFields: [field('metaValues', 'stringArray')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get all metadata values for topic' },\r\n\r\n\tgetUsedMetaValuesForGivenLanguage: {\r\n\t\tmethod: 'GetUsedMetaValues_ForGivenLanguage',\r\n\t\trequestType: 'GetUsedMetaValues_ForGivenLanguageRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('externalHelpsetID', 'string', { optional: true }),\r\n\t\t\tfield('localizeMetaValues', 'boolean', { }),\r\n\t\t\tfield('sortMetaValues', 'boolean', { }),\r\n\t\t\tfield('givenLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('values', 'stringArray'), field('sortedAndLocalizedEntries', 'array', { itemObjectType: 'LocalizedEntry' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata values for language' },\r\n\r\n\tgetUsedMetaValuesFilteredByOtherMetaValuesForGivenLanguage: {\r\n\t\tmethod: 'GetUsedMetaValuesFilteredByOtherMetaValues_ForGivenLanguage',\r\n\t\trequestType: 'GetUsedMetaValuesFilteredByOtherMetaValues_ForGivenLanguageRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('filteredBy', 'stringMap', { }),\r\n\t\t\tfield('localizeMetaValues', 'boolean', { }),\r\n\t\t\tfield('sortMetaValues', 'boolean', { }),\r\n\t\t\tfield('givenLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('values', 'stringArray'), field('sortedAndLocalizedEntries', 'array', { itemObjectType: 'LocalizedEntry' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get filtered metadata values for language' },\r\n\r\n\tgetNavigationWithMetaDataForGivenLanguage: {\r\n\t\tmethod: 'GetNavigationWithMetaData_ForGivenLanguage',\r\n\t\trequestType: 'GetNavigationWithMetaData_ForGivenLanguageRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('currentNavigationID', 'double', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t\tfield('useHelpsetMetadataFallback', 'boolean', { }),\r\n\t\t\tfield('givenLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('navigationEntries', 'array', { itemObjectType: 'NavigationEntryWithMetaData' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get navigation with metadata for language' },\r\n\r\n\tgetBreadCrumbWithMetaDataForGivenLanguage: {\r\n\t\tmethod: 'GetBreadcrumbWithMetaData_ForGivenLanguage',\r\n\t\trequestType: 'GetBreadcrumbWithMetaData_ForGivenLanguageRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('navigationID', 'double', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t\tfield('useHelpsetMetadataFallback', 'boolean', { }),\r\n\t\t\tfield('givenLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('breadcrumbs', 'array', { itemObjectType: 'BreadCrumbWithMetaDataEntry' }), field('breadCrumbStartBehavior', 'string')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get breadcrumb with metadata for language' },\r\n\r\n\tgetMetaValuesForFacets: {\r\n\t\trequestFields: [field('facetName', 'string', { })],\r\n\t\tresponseFields: [field('values', 'stringArray')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata values for facets' },\r\n\r\n\tgetMetaValuesForFacetsForGivenLanguage: {\r\n\t\tmethod: 'GetMetaValuesForFacets_ForGivenLanguage',\r\n\t\trequestType: 'GetMetaValuesForFacets_ForGivenLanguageRequest',\r\n\t\trequestFields: [field('facetName', 'string', { }), field('givenLanguage', 'string', { })],\r\n\t\tresponseFields: [field('values', 'stringArray')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata values for facets for language' },\r\n\r\n\tgetMetaKeysWhichBehaveAsVisibilityRights: {\r\n\t\tmethod: 'GetMetaKeysWhichBehaveAsVisiblityRights',\r\n\t\trequestType: 'GetMetaKeysWhichBehaveAsVisiblityRightsRequest',\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('metaKeys', 'array', { itemObjectType: 'MetaKeyWithID', varname: 'metaKeys' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata keys for visibility rights' },\r\n\r\n\tgetMetaDataDefinitionsForCustomerCriteria: {\r\n\t\trequestFields: [\r\n\t\t\tfield('customerType', 'string', { keytype: 'CustomerDefinitionEnum'}),\r\n\t\t\tfield('criteria', 'stringArray', { varname: 'criteria', keytype: 'vector'}),\r\n\t\t],\r\n\t\tresponseFields: [field('definitions', 'array', { itemObjectType: 'MetaDataDefinition' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata definitions for customer criteria' },\r\n\r\n\tsetCurrentMetaDataSetForSession: {\r\n\t\trequestFields: [field('metaData', 'array', { itemObjectType: 'MetaValuePair', keytype: 'vector'})],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Set current metadata set for session' },\r\n\r\n\tgetCurrentMetaDataSetForSession: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('metaData', 'object')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get current metadata set for session' },\r\n\r\n\taddToCurrentMetaDataSetForSession: {\r\n\t\trequestFields: [field('metaKey', 'string', { }), field('metaValue', 'string', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Add to current metadata set for session' },\r\n\r\n\tremoveFromCurrentMetaDataSetForSession: {\r\n\t\trequestFields: [field('metaKey', 'string', { }), field('metaValue', 'string', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Remove from current metadata set for session' },\r\n\r\n\tgetMetaKeysWhichAreConfiguredForContentFiltering: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('metaKeys', 'array', { itemObjectType: 'MetaKeyWithID', varname: 'metaKeys' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata keys for content filtering' },\r\n\r\n\tgetMetaValuesForTopics: {\r\n\t\trequestFields: [\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t\tfield('withMetadataFromHelpset', 'boolean', { }),\r\n\t\t\tfield('externalTopicIDs', 'stringArray', { keytype: 'vector'}),\r\n\t\t],\r\n\t\tresponseFields: [field('result', 'array', { itemObjectType: 'MetaValuesForTopicEntry', varname: 'result' })],\r\n\t\tcategory: 'Metadata Extended',\r\n\t\tdescription: 'Get metadata values for multiple topics' },\r\n\r\n\t// ==========================================================================\r\n\t// User Management\r\n\t// ==========================================================================\r\n\r\n\tgetLoggedInUserInfo: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [\r\n\t\t\tfield('userID', 'double'),\r\n\t\t\tfield('userName', 'string'),\r\n\t\t\tfield('userFullName', 'string'),\r\n\t\t\tfield('userType', 'string'),\r\n\t\t\tfield('emailAdress', 'string'),\r\n\t\t\tfield('groups', 'array', { itemObjectType: 'GroupDataWithoutUsers', varname: 'groups' }),\r\n\t\t],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Get info about logged in user' },\r\n\r\n\tcreateUser: {\r\n\t\trequestFields: [\r\n\t\t\tfield('userName', 'string', { }),\r\n\t\t\tfield('password', 'string', { }),\r\n\t\t\tfield('userFullName', 'string', { optional: true }),\r\n\t\t\tfield('emailAdress', 'string', { optional: true }),\r\n\t\t\tfield('state', 'int', { }),\r\n\t\t\tfield('creationTimestamp', 'double', { }),\r\n\t\t\tfield('validFromTimestamp', 'double', { optional: true }),\r\n\t\t\tfield('validToTimestamp', 'double', { optional: true }),\r\n\t\t],\r\n\t\tresponseFields: [field('user', 'object', { objectType: 'UserData', xmlTag: 'UserData', varname: 'user' })],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Create a new user' },\r\n\r\n\tchangePassword: {\r\n\t\trequestFields: [\r\n\t\t\tfield('oldPassword', 'string', { xmlType: 'SiriusBase64String', varname: 'old_password', isBase64: true}),\r\n\t\t\tfield('newPassword', 'string', { xmlType: 'SiriusBase64String', varname: 'new_password', isBase64: true}),\r\n\t\t],\r\n\t\tresponseFields: [field('passwordChanged', 'boolean')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Change password' },\r\n\r\n\tdeleteUser: {\r\n\t\trequestFields: [field('userID', 'double', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Delete a user' },\r\n\r\n\tmodifyUser: {\r\n\t\trequestFields: [field('user', 'object', { objectType: 'UserInfo' })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Modify a user' },\r\n\r\n\tgetAllUsers: {\r\n\t\trequestFields: [field('withAnonymousUsers', 'boolean', { })],\r\n\t\tresponseFields: [field('users', 'array', { itemObjectType: 'UserInfo' })],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Get all users' },\r\n\r\n\tcreateSelfRegisteredUser: {\r\n\t\trequestFields: [\r\n\t\t\tfield('loginName', 'string', { }),\r\n\t\t\tfield('email', 'string', { }),\r\n\t\t\tfield('passwordBase64Encoded', 'string', { xmlTag: 'password_base64_encoded'}),\r\n\t\t\tfield('serverDomainURL', 'string', { }),\r\n\t\t\tfield('realName', 'string', { }),\r\n\t\t\tfield('additionalDataForRegistrationProcess', 'string', { optional: true }),\r\n\t\t],\r\n\t\tresponseFields: [field('not_used', 'boolean')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Create self-registered user' },\r\n\r\n\tactivateSelfRegisteredUser: {\r\n\t\trequestFields: [field('userName', 'string', { }), field('activationToken', 'string', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Activate a self-registered user' },\r\n\r\n\tstartForgotPasswordProcess: {\r\n\t\trequestFields: [\r\n\t\t\tfield('email', 'string', { }),\r\n\t\t\tfield('serverDomainURL', 'string', { }),\r\n\t\t\tfield('additionalDataForForgotPasswordProcess', 'string', { optional: true }),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Start forgot password process' },\r\n\r\n\tfinishForgotPasswordProcess: {\r\n\t\trequestFields: [\r\n\t\t\tfield('token', 'string', { }),\r\n\t\t\tfield('passwordBase64Encoded', 'string', { xmlTag: 'password_base64_encoded'}),\r\n\t\t\tfield('additionalDataForForgotPasswordProcess', 'string', { optional: true }),\r\n\t\t],\r\n\t\tresponseFields: [field('username', 'string')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Finish forgot password process' },\r\n\r\n\tgetAllCustomUserSettingsForUserID: {\r\n\t\trequestFields: [field('userID', 'double', { })],\r\n\t\tresponseFields: [field('settings', 'array', { itemObjectType: 'CustomSetting' })],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Get all custom settings for user' },\r\n\r\n\tperformActionAfterOpenIDAuthentification: {\r\n\t\trequestFields: [field('data', 'string', { })],\r\n\t\tresponseFields: [field('success', 'boolean'), field('userID', 'double')],\r\n\t\tcategory: 'User Management',\r\n\t\tdescription: 'Perform action after OpenID auth' },\r\n\r\n\t// ==========================================================================\r\n\t// Group/Rights Management\r\n\t// ==========================================================================\r\n\r\n\tgetAllGroups: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('groups', 'array', { itemObjectType: 'GroupData' })],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Get all groups' },\r\n\r\n\tcreateGroup: {\r\n\t\trequestFields: [field('groupData', 'object', { objectType: 'GroupData', xmlTag: 'GroupData', varname: 'groupData' })],\r\n\t\tresponseFields: [field('groupID', 'double')],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Create a group' },\r\n\r\n\tmodifyGroup: {\r\n\t\trequestFields: [field('groupData', 'object', { objectType: 'GroupData' })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Modify a group' },\r\n\r\n\tdeleteGroup: {\r\n\t\trequestFields: [field('groupID', 'double', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Delete a group' },\r\n\r\n\tupdateGroupRights: {\r\n\t\trequestFields: [\r\n\t\t\tfield('groupID', 'double', { }),\r\n\t\t\tfield('rightsType', 'string', { }),\r\n\t\t\tfield('updateData', 'array', { itemObjectType: 'MetaValueForGroupRightEntry', keytype: 'vector'}),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Update group rights' },\r\n\r\n\tgetGroupRights: {\r\n\t\trequestFields: [field('groupID', 'double', { }), field('rightsType', 'string', { })],\r\n\t\tresponseFields: [field('rights', 'object')],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Get group rights' },\r\n\r\n\tprecompileFacetsBasedOnGroupRights: {\r\n\t\trequestFields: [field('callOptimizeImportData', 'boolean', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tcategory: 'Group/Rights Management',\r\n\t\tdescription: 'Precompile facets based on group rights' },\r\n\r\n\t// ==========================================================================\r\n\t// Settings & Configuration\r\n\t// ==========================================================================\r\n\r\n\tgetCustomUserSetting: {\r\n\t\trequestFields: [field('keyForValue', 'string', { })],\r\n\t\tresponseFields: [field('keyForValue', 'string'), field('value', 'string')],\r\n\t\tcategory: 'Settings & Configuration',\r\n\t\tdescription: 'Get custom user setting' },\r\n\r\n\tsetCustomUserSetting: {\r\n\t\trequestFields: [field('keyForValue', 'string', { }), field('value', 'string', { })],\r\n\t\tresponseFields: [field('operationSucceeded', 'boolean')],\r\n\t\tcategory: 'Settings & Configuration',\r\n\t\tdescription: 'Set custom user setting' },\r\n\r\n\tgetCustomGlobalSetting: {\r\n\t\trequestFields: [field('keyForValue', 'string', { })],\r\n\t\tresponseFields: [field('keyForValue', 'string'), field('value', 'string')],\r\n\t\tcategory: 'Settings & Configuration',\r\n\t\tdescription: 'Get custom global setting' },\r\n\r\n\tsetCustomGlobalSetting: {\r\n\t\trequestFields: [field('keyForValue', 'string', { }), field('value', 'string', { })],\r\n\t\tresponseFields: [field('operationSucceeded', 'boolean')],\r\n\t\tcategory: 'Settings & Configuration',\r\n\t\tdescription: 'Set custom global setting' },\r\n\r\n\t// ==========================================================================\r\n\t// GUI/Language Extended\r\n\t// ==========================================================================\r\n\r\n\tisValidGUILanguage: {\r\n\t\trequestFields: [field('lanCode', 'string', { })],\r\n\t\tresponseFields: [field('isValid', 'boolean')],\r\n\t\tcategory: 'GUI/Language Extended',\r\n\t\tdescription: 'Check if GUI language is valid' },\r\n\r\n\tgetGUILanguageFromDatabase: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('guiLanguage', 'string')],\r\n\t\tcategory: 'GUI/Language Extended',\r\n\t\tdescription: 'Get GUI language from database' },\r\n\r\n\tgetResourceStringMap: {\r\n\t\tmethod: 'GetResourceStringMap',\r\n\t\trequestType: 'GetResourceStringsRequest',\r\n\t\trequestFields: [field('wantedResourceIds', 'stringArray', { }), field('wantedLanguage', 'string', { })],\r\n\t\tresponseFields: [field('resourceStringsInWantedLanguage', 'stringArray')],\r\n\t\tcategory: 'GUI/Language Extended',\r\n\t\tdescription: 'Get resource strings as map' },\r\n\r\n\t// ==========================================================================\r\n\t// Topic/Navigation Extended\r\n\t// ==========================================================================\r\n\r\n\tgetAdditionalInfoAboutHelpset: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('info', 'object')],\r\n\t\tcategory: 'Topic/Navigation Extended',\r\n\t\tdescription: 'Get additional helpset info' },\r\n\r\n\tisValidHelpsetID: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('isValid', 'boolean')],\r\n\t\tcategory: 'Topic/Navigation Extended',\r\n\t\tdescription: 'Check if helpset ID is valid' },\r\n\r\n\tisValidTopicID: {\r\n\t\trequestFields: [field('topicID', 'string', { })],\r\n\t\tresponseFields: [field('isValid', 'boolean')],\r\n\t\tcategory: 'Topic/Navigation Extended',\r\n\t\tdescription: 'Check if topic ID is valid' },\r\n\r\n\tgetProtocolHandlerPrefix: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('prefix', 'string')],\r\n\t\tdescription: 'Get protocol handler prefix' },\r\n\r\n\tgetHomeTopicExternalId: {\r\n\t\trequestFields: [field('helpsetExternalID', 'string', { })],\r\n\t\tresponseFields: [field('externalId', 'string')],\r\n\t\tdescription: 'Get home topic external ID' },\r\n\r\n\tgetHelpsetInfosForExternalID: {\r\n\t\trequestFields: [field('externalHelpsetID', 'string', { })],\r\n\t\tresponseFields: [field('helpsets', 'array', { itemObjectType: 'HelpsetInfo' })],\r\n\t\tdescription: 'Get helpset infos by external ID' },\r\n\r\n\tgetCurrentActiveTopicID: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double')],\r\n\t\tdescription: 'Get current active topic ID' },\r\n\r\n\tgetExternalIdForTopicIgnoreContainerHelpsets: {\r\n\t\tmethod: 'GetExternalIdForTopic_IgnoreContainerHelpsets',\r\n\t\trequestType: 'GetExternalIdForTopic_IgnoreContainerHelpsetsRequest',\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('externalId', 'string'), field('externalHelpsetId', 'string')],\r\n\t\tdescription: 'Get external ID ignoring container helpsets' },\r\n\r\n\tgetChildTopics: {\r\n\t\trequestFields: [field('navigationID', 'double', { }), field('metaData_for_contained_helpset_resolving', 'stringMap', { })],\r\n\t\tresponseFields: [field('entries', 'array', { itemObjectType: 'ChildTopicInfo' })],\r\n\t\tdescription: 'Get child topics' },\r\n\r\n\tgetTopicForExternalIdForGivenLanguage: {\r\n\t\tmethod: 'GetTopicForExternalId_ForGivenLanguage',\r\n\t\trequestType: 'GetTopicForExternalId_ForGivenLanguageRequest',\r\n\t\trequestFields: [\r\n\t\t\tfield('externalIdForTopic', 'string', { }),\r\n\t\t\tfield('externalIdForHelpset', 'string', { }),\r\n\t\t\tfield('metaData', 'stringMap', { }),\r\n\t\t\tfield('givenLanguage', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double'), field('helpsetID', 'double')],\r\n\t\tdescription: 'Get topic for external ID for language' },\r\n\r\n\tgetRelatedTopicsWithLinks: {\r\n\t\trequestFields: [\r\n\t\t\tfield('currentTopicID', 'double', { }),\r\n\t\t\tfield('withMetaData', 'boolean', { }),\r\n\t\t\tfield('wantedMetaKeys', 'stringArray', { }),\r\n\t\t\tfield('localizeMetaValues', 'boolean', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('relatedTopics', 'array', { itemObjectType: 'RelatedTopicWithLinkInfo' })],\r\n\t\tdescription: 'Get related topics with links' },\r\n\r\n\tgetTopicInfo: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('topicInfo', 'object', { objectType: 'TopicInfo' })],\r\n\t\tdescription: 'Get topic info' },\r\n\r\n\tisTopicVisible: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('isVisible', 'boolean')],\r\n\t\tdescription: 'Check if topic is visible' },\r\n\r\n\tgetAllPossibleTopicsForExternalTopicID: {\r\n\t\trequestFields: [field('externalTopicID', 'string', { }), field('metaData', 'stringMap', { })],\r\n\t\tresponseFields: [field('topics', 'array', { itemObjectType: 'TopicInfo' })],\r\n\t\tdescription: 'Get all possible topics for external ID' },\r\n\r\n\tgetRDFRelatedTopics: {\r\n\t\trequestFields: [\r\n\t\t\tfield('topicID', 'double', { }),\r\n\t\t\tfield('metaKey', 'string', { }),\r\n\t\t\tfield('sparqlQueryName', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('topics', 'array', { itemObjectType: 'TopicInfo' })],\r\n\t\tdescription: 'Get RDF related topics' },\r\n\r\n\tgetTopicInfoForUniqueTopicID: {\r\n\t\trequestFields: [field('uniqueTopicID', 'string', { })],\r\n\t\tresponseFields: [field('topicInfo', 'object', { objectType: 'TopicInfo' })],\r\n\t\tdescription: 'Get topic info for unique topic ID' },\r\n\r\n\tgetRawNavigationEntriesForHelpset: {\r\n\t\trequestFields: [field('helpsetID', 'double', { })],\r\n\t\tresponseFields: [field('entries', 'array', { itemObjectType: 'RawNavigationEntry' })],\r\n\t\tdescription: 'Get raw navigation entries for helpset' },\r\n\r\n\tgetDatabaseIDsForCobriliLink: {\r\n\t\trequestFields: [field('cobriliLink', 'string', { })],\r\n\t\tresponseFields: [field('topicID', 'double'), field('navigationID', 'double'), field('helpsetID', 'double')],\r\n\t\tdescription: 'Get database IDs for Cobrili link' },\r\n\r\n\tgetSynonymList: {\r\n\t\trequestFields: [field('language', 'string', { })],\r\n\t\tresponseFields: [field('synonyms', 'array', { itemObjectType: 'SynonymEntry' })],\r\n\t\tdescription: 'Get synonym list' },\r\n\r\n\t// ==========================================================================\r\n\t// Bookmark Extended\r\n\t// ==========================================================================\r\n\r\n\tdeleteBookmarkByTopicID: {\r\n\t\trequestFields: [field('topicID', 'double', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tdescription: 'Delete bookmark by topic ID' },\r\n\r\n\taddBookmarkForUser: {\r\n\t\trequestFields: [field('userId', 'double', { }), field('bookmark', 'object', { objectType: 'BookmarkData' })],\r\n\t\tresponseFields: [field('bookmarkID', 'double'), field('success', 'boolean')],\r\n\t\tdescription: 'Add bookmark for a user' },\r\n\r\n\t// ==========================================================================\r\n\t// System/Admin\r\n\t// ==========================================================================\r\n\r\n\tgetLastCobriliErrorCode: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('errorCode', 'string')],\r\n\t\tdescription: 'Get last Cobrili error code' },\r\n\r\n\tgetErrorLinkForErrorCode: {\r\n\t\trequestFields: [field('cobriliErrorCode', 'string', { })],\r\n\t\tresponseFields: [field('errorLink', 'string')],\r\n\t\tdescription: 'Get error link for error code' },\r\n\r\n\tcanApplicationDisplayData: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('canDisplay', 'boolean')],\r\n\t\tdescription: 'Check if application can display data' },\r\n\r\n\tmakeDatabaseUpdate: {\r\n\t\trequestFields: [\r\n\t\t\tfield('dbUpdateFile', 'string', { }),\r\n\t\t\tfield('withDialog', 'boolean', { }),\r\n\t\t\tfield('masterHelpsetID', 'string', { }),\r\n\t\t],\r\n\t\tresponseFields: [field('not_used', 'boolean')],\r\n\t\tdescription: 'Make database update' },\r\n\r\n\tclearStaticCaches: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tdescription: 'Clear static caches' },\r\n\r\n\trefreshStaticCaches: {\r\n\t\trequestFields: [\r\n\t\t\tfield('secretToken', 'string', { }),\r\n\t\t\tfield('uniqueHelpsetIdentifier', 'string', { }),\r\n\t\t\tfield('deletedHelpsetID', 'double', { }),\r\n\t\t\tfield('deletedHelpsetExternalID', 'string', { }),\r\n\t\t\tfield('deletedHelpsetLanguage', 'string', { }),\r\n\t\t\tfield('deletedTopicIDs', 'array', { itemType: 'double', keytype: 'vector'}),\r\n\t\t\tfield('deletedNavigationIDs', 'array', { itemType: 'double', keytype: 'vector'}),\r\n\t\t],\r\n\t\tresponseFields: [field('success', 'boolean')],\r\n\t\tdescription: 'Refresh static caches' },\r\n\r\n\texportDataForTest: {\r\n\t\trequestFields: [field('not_used', 'boolean', { })],\r\n\t\tresponseFields: [field('testData', 'string', { })],\r\n\t\tdescription: 'Export data for test' },\r\n\r\n\tgetStateOfLongRunningOperation: {\r\n\t\trequestFields: [field('long_runnning_operation_id', 'int', { keytype: 'long'})],\r\n\t\tresponseFields: [field('operationState', 'string', { }), field('operationProgress', 'int', { }), field('operationStateMessage', 'string', { })],\r\n\t\tdescription: 'Get state of long running operation' },\r\n\r\n\tgetResultOfLongRunningOperation: {\r\n\t\trequestFields: [field('long_runnning_operation_id', 'int', { keytype: 'long'})],\r\n\t\tresponseFields: [field('string_result', 'string', { }), field('fileTransport', 'object', { objectType: 'FileTransport', xmlTag: 'FileTransport', varname: 'fileTransport' })],\r\n\t\tdescription: 'Get result of long running operation' },\r\n\r\n\tsendFeedbackEmail: {\r\n\t\trequestFields: [field('emailContent', 'string', { }), field('userEmailAdress', 'string', { })],\r\n\t\tresponseFields: [field('not_used', 'boolean', { })],\r\n\t\tdescription: 'Send feedback email' } } as const;\r\n\r\nexport const API_TYPES = {\r\n\tLoginUser: [field('username', 'string', { }), field('password', 'string', { xmlType: 'SiriusBase64String', varname: 'password', isBase64: true})],\r\n\tAnonymousLoginData: [field('Anonymous_ID', 'string', { })],\r\n\tMetaValuePair: [field('metaKey', 'string', { }), field('metaValue', 'string', { })],\r\n\tStartUpMetaValuePair: [field('metaKey', 'string', { }), field('metaValue', 'string', { })],\r\n\tMetaValuesForTopicEntry: [\r\n\t\tfield('externalTopicID', 'string', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('metaValues', 'array', { itemObjectType: 'MetaValuePair', varname: 'metaValues'}),\r\n\t],\r\n\tMetaKeyWithID: [field('metaKeyID', 'double', { }), field('metaKeyName', 'string', { })],\r\n\tMetaValueForGroupRightEntry: [field('metaKeyID', 'double', { }), field('metaValue', 'string', { })],\r\n\tGroupRights: [field('metaDataBasedRights', 'array', { itemObjectType: 'MetaValueForGroupRightEntry', varname: 'metaDataBasedRights', keytype: 'vector'})],\r\n\tGroupDataWithoutUsers: [field('groupID', 'double', { }), field('groupName', 'string', { }), field('rights', 'map', { varkeytype: 'RightsTypesEnum', vartype: 'GroupRights' })],\r\n\tGroupData: [\r\n\t\tfield('groupID', 'double', { }),\r\n\t\tfield('groupName', 'string', { }),\r\n\t\tfield('users', 'array', { itemType: 'double', varname: 'users'}),\r\n\t\tfield('rights', 'map', { varkeytype: 'RightsTypesEnum', vartype: 'GroupRights' }),\r\n\t],\r\n\tUserData: [\r\n\t\tfield('userID', 'double', { }),\r\n\t\tfield('userName', 'string', { }),\r\n\t\tfield('password', 'string', { optional: true}),\r\n\t\tfield('userFullName', 'string', { optional: true}),\r\n\t\tfield('userType', 'string', { keytype: 'UserRolesEnum'}),\r\n\t\tfield('emailAdress', 'string', { optional: true}),\r\n\t\tfield('groups', 'array', { itemObjectType: 'GroupDataWithoutUsers', varname: 'groups', keytype: 'vector'}),\r\n\t\tfield('state', 'int', { keytype: 'UserStateFlag'}),\r\n\t\tfield('creationTimestamp', 'double', { }),\r\n\t\tfield('validFromTimestamp', 'double', { optional: true }),\r\n\t\tfield('validToTimestamp', 'double', { optional: true }),\r\n\t],\r\n\tSearchProposalResult: [field('changedSearchForWithSynonyms', 'string', { }), field('searchID', 'double', { }), field('numberOfHits', 'map', { varkeytype: 'TopicType', vartype: 'int' })],\r\n\tStartExtendedSearchRequest: [\r\n\t\tfield('searchInTopicTypes', 'string', { keytype: 'SearchInTopicTypesEnum'}),\r\n\t\tfield('searchString', 'string', { }),\r\n\t\tfield('searchParameters', 'object', { objectType: 'SearchQueryParameters', optional: true, varname: 'searchParameters' }),\r\n\t\tfield('matchSimilarWords', 'boolean', { }),\r\n\t\tfield('usedLuceneAnalyzer', 'string', { optional: true}),\r\n\t\tfield('searchLanguage', 'string', { optional: true}),\r\n\t\tfield('searchBelowTheseTopics', 'array', { itemType: 'double', varname: 'searchBelowTheseTopics'}),\r\n\t],\r\n\tStartExtendedSearchResponse: [field('searchID', 'double', { }), field('numberOfHits', 'map', { varkeytype: 'AlpTString', vartype: 'int' })],\r\n\tImportHelpsetStorageRequest: [field('zipfile', 'object', { objectType: 'FileTransport', varname: 'zipfile' })],\r\n\tGetMetaDataDefinitionsForCustomerCriteriaRequest: [field('customerType', 'string', { keytype: 'CustomerDefinitionEnum'}), field('criteria', 'stringArray', { varname: 'criteria'})],\r\n\tFileTransport: [\r\n\t\tfield('filePath', 'string', { }),\r\n\t\tfield('owns', 'boolean', { }),\r\n\t\tfield('creationDate', 'double', { optional: true}),\r\n\t\tfield('modificationDate', 'double', { optional: true}),\r\n\t\tfield('TransportedFileName', 'string', { }),\r\n\t],\r\n\tLoggingInformation: [\r\n\t\tfield('LoggingFile', 'string', { }),\r\n\t\tfield('LoggingLevel', 'int', { keytype: 'UINT'}),\r\n\t\tfield('MaxLoggingSize', 'int', { keytype: 'DWORD'}),\r\n\t\tfield('DebugMode', 'boolean', { }),\r\n\t\tfield('LoggingAdvancedFeatures', 'int', { }),\r\n\t],\r\n\tMSSQL_DatabaseSettings: [field('serverName', 'string', { }), field('databaseName', 'string', { }), field('userName', 'string', { }), field('password', 'string', { }), field('integratedSecurity', 'boolean', { })],\r\n\tDatabaseSettings: [\r\n\t\tfield('databaseType', 'string', { keytype: 'DatabaseTypeEnum'}),\r\n\t\tfield('MSSQL_DatabaseSettings', 'object', { optional: true, objectType: 'MSSQL_DatabaseSettings', varname: 'MSSQL_DatabaseSettings' }),\r\n\t],\r\n\tHistoryEntryExtended: [\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('title', 'string', { }),\r\n\t\tfield('timestamp', 'double', { }),\r\n\t\tfield('helpsetID', 'double', { }),\r\n\t\tfield('scrollPosition', 'int', { }),\r\n\t\tfield('hitRangeBegin', 'int', { }),\r\n\t\tfield('hitRangeEnd', 'int', { }),\r\n\t\tfield('searchHistoryEntry', 'object', { objectType: 'SearchHistoryEntry', varname: 'searchHistoryEntry' }),\r\n\t],\r\n\tHistoryEntry: [field('topicID', 'double', { }), field('navigationID', 'double', { }), field('title', 'string', { }), field('timestamp', 'double', { }), field('helpsetID', 'double', { })],\r\n\tBookmarkEntry: [field('bookmarkID', 'double', { }), field('topicID', 'double', { }), field('navigationID', 'double', { }), field('title', 'string', { }), field('creationTimestamp', 'double', { })],\r\n\tNavigationEntry: [\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('parentNavigationID', 'double', { }),\r\n\t\tfield('title', 'string', { }),\r\n\t\tfield('hasChildren', 'boolean', { }),\r\n\t\tfield('target', 'string', { }),\r\n\t\tfield('iconName', 'string', { }),\r\n\t\tfield('isTopicVisible', 'boolean', { }),\r\n\t],\r\n\tMetaValuesList: [field('metaValues', 'stringArray', { varname: 'metaValues'})],\r\n\tTopicMetaData: [field('metaData', 'map', { varkeytype: 'AlpTString', vartype: 'MetaValuesList' })],\r\n\tBreadCrumbEntry: [field('title', 'string', { }), field('topicID', 'double', { }), field('navigationID', 'double', { }), field('longTitle', 'string', { })],\r\n\tAdditionalContent: [field('content', 'string', { }), field('targetName', 'string', { })],\r\n\tRelatedTopicInfo: [\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('title', 'string', { }),\r\n\t\tfield('metaData', 'object', { optional: true, objectType: 'TopicMetaData', xmlTag: 'TopicMetaData', varname: 'metaData' }),\r\n\t],\r\n\tHelpsetInfo: [\r\n\t\tfield('helpsetId', 'double', { xmlTag: 'helpsetId' }),\r\n\t\tfield('name', 'string', { }),\r\n\t\tfield('uniqueIdentifier', 'string', { }),\r\n\t\tfield('externalID', 'string', { }),\r\n\t\tfield('metaData', 'stringMap', { optional: true }),\r\n\t\tfield('masterHelpSetApplicationIdentifier', 'string', { }),\r\n\t\tfield('topicDirectory', 'string', { optional: true }),\r\n\t\tfield('helpsetType', 'string', { }),\r\n\t],\r\n\tSearchResult: [\r\n\t\tfield('content', 'string', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('helpsetID', 'double', { }),\r\n\t\tfield('luceneScore', 'double', { }),\r\n\t],\r\n\tLocalizedEntry: [field('metaValue', 'string', { }), field('localizedValue', 'string', { })],\r\n\tTopicInfo: [field('topicID', 'double', { }), field('navigationID', 'double', { }), field('helpsetID', 'double', { }), field('title', 'string', { }), field('target', 'string', { })],\r\n\tSearchSuggestion: [field('term', 'string', { }), field('weight', 'double', { })],\r\n\tMetaKeyDefinition: [field('metaKeyID', 'double', { }), field('metaKey', 'string', { }), field('displayName', 'string', { })],\r\n\tNavigationEntryWithMetaData: [\r\n\t\tfield('title', 'string', { }),\r\n\t\tfield('helpsetID', 'double', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('children', 'object', { objectType: 'NavigationEntryWithMetaDataList', xmlTag: 'NavigationEntryWithMetaDataList', varname: 'children' }),\r\n\t\tfield('nextNavID', 'double', { optional: true}),\r\n\t\tfield('prevNavID', 'double', { optional: true}),\r\n\t\tfield('parentNavID', 'double', { optional: true}),\r\n\t\tfield('hasChildren', 'boolean', { }),\r\n\t\tfield('isPlaceHolderForContainedHelpset', 'boolean', { }),\r\n\t\tfield('cobriliLink', 'string', { }),\r\n\t\tfield('requestedMetaData', 'array', { itemObjectType: 'MetaValuePair'}),\r\n\t\tfield('isMetaDataDrivenNavigationEntry', 'boolean', { }),\r\n\t],\r\n\tNavigationEntryWithMetaDataList: [field('entries', 'array', { itemObjectType: 'NavigationEntryWithMetaData'})],\r\n\tBreadCrumbWithMetaDataEntry: [\r\n\t\tfield('title', 'string', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('longTitle', 'string', { }),\r\n\t\tfield('cobriliLink', 'string', { }),\r\n\t\tfield('requestedMetaData', 'array', { itemObjectType: 'MetaValuePair'}),\r\n\t],\r\n\tBreadCrumbEntryWithMetaData: [\r\n\t\tfield('title', 'string', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('longTitle', 'string', { }),\r\n\t\tfield('cobriliLink', 'string', { }),\r\n\t\tfield('requestedMetaData', 'array', { itemObjectType: 'MetaValuePair'}),\r\n\t],\r\n\tMetaDataDefinition: [field('metaKey', 'string', { }), field('displayName', 'string', { }), field('possibleValues', 'array', { itemType: 'string'})],\r\n\tUserInfo: [\r\n\t\tfield('userID', 'double', { }),\r\n\t\tfield('userName', 'string', { }),\r\n\t\tfield('userFullName', 'string', { }),\r\n\t\tfield('emailAdress', 'string', { }),\r\n\t\tfield('isAdmin', 'boolean', { }),\r\n\t\tfield('isAnonymous', 'boolean', { }),\r\n\t\tfield('state', 'int', { keytype: 'UserStateFlag'}),\r\n\t\tfield('groups', 'array', { itemObjectType: 'GroupDataWithoutUsersAndRights'}),\r\n\t],\r\n\tGroupDataWithoutUsersAndRights: [field('groupID', 'double', { }), field('groupName', 'string', { }), field('description', 'string', { })],\r\n\tCustomSetting: [field('key', 'string', { }), field('value', 'string', { })],\r\n\tRelatedTopicWithLinks: [field('topicID', 'double', { }), field('navigationID', 'double', { }), field('title', 'string', { }), field('target', 'string', { }), field('cobriliLink', 'string', { })],\r\n\tRelatedTopicWithLinkInfo: [field('normalRelatedTopicInfo', 'object', { objectType: 'RelatedTopicInfo', varname: 'normalRelatedTopicInfo' }), field('cobriliLink', 'string', { })],\r\n\tRawNavigationEntry: [field('navigationID', 'double', { }), field('topicID', 'double', { }), field('parentNavigationID', 'double', { }), field('title', 'string', { }), field('sortOrder', 'int', { })],\r\n\tChildTopicBasedOnMetadata: [field('topicID', 'double', { }), field('linkToTopic', 'string', { }), field('title', 'string', { })],\r\n\tChildTopicInfo: [field('title', 'string', { }), field('topicID', 'double', { }), field('navigationID', 'double', { }), field('hasChildren', 'boolean', { }), field('linkToTopic', 'string', { })],\r\n\tSynonymEntry: [field('word', 'string', { }), field('synonyms', 'array', { itemType: 'string'})],\r\n\tSearchResultWithMetadata: [\r\n\t\tfield('content', 'string', { }),\r\n\t\tfield('topicID', 'double', { }),\r\n\t\tfield('navigationID', 'double', { }),\r\n\t\tfield('helpsetID', 'double', { }),\r\n\t\tfield('luceneScore', 'double', { }),\r\n\t\tfield('requestedMetaData', 'array', { itemObjectType: 'MetaValuePair'}),\r\n\t],\r\n\tFacetChange: [field('metaKey', 'string', { }), field('metaValue', 'string', { }), field('changes', 'int', { }), field('changeAsText', 'string', { })],\r\n\tFacetInputData: [field('metaKey', 'string', { }), field('metaValue', 'string', { }), field('addFacet', 'boolean', { })],\r\n\tFacetResultsForSearch: [field('searchID', 'double', { }), field('facetResults', 'array', { itemObjectType: 'FacetChange'})],\r\n\tExecutedSearch: [field('searchID', 'double', { }), field('searchString', 'string', { }), field('timestamp', 'double', { }), field('numberOfResults', 'int', { })],\r\n\tTopicType: [field('topicType', 'string', { keytype: 'SearchInTopicTypesEnum'})],\r\n\tSearchSuggestionsSettings: [field('maxSuggestions', 'int', { }), field('minChars', 'int', { })],\r\n\tBookmarkData: [field('topicID', 'double', { }), field('navigationID', 'double', { }), field('title', 'string', { })],\r\n\tSearchQueryParameters: [\r\n\t\tfield('searchString', 'string', { }),\r\n\t\tfield('searchLanguage', 'string', { }),\r\n\t\tfield('maxResults', 'int', { }),\r\n\t\tfield('searchType', 'string', { keytype: 'SearchTypeEnum'}),\r\n\t\tfield('analyzerName', 'string', { }),\r\n\t\tfield('searchInHelpsets', 'array', { itemType: 'double'}),\r\n\t],\r\n\tSearchHistoryEntry: [field('searchID', 'double', { }), field('hitRangeBegin', 'int', { }), field('hitRangeEnd', 'int', { })] } as const;\r\n\r\n// Type for method names\r\nexport type ApiMethodName = keyof typeof API_METHODS;\r\n","/**\r\n * XML Utilities for Cobrili API\r\n *\r\n * Provides XML serialization and deserialization compatible with the Cobrili server.\r\n * Works in both Browser and Node.js environments.\r\n */\r\n\r\nimport { type FieldDefinition, type FieldType, API_TYPES } from './api-registry';\r\n\r\n// ============================================================================\r\n// XML Node Type\r\n// ============================================================================\r\n\r\nexport interface XmlNode {\r\n\tname: string;\r\n\tattributes: Record<string, string>;\r\n\tchildren: XmlNode[];\r\n\tvalue: string | null;\r\n}\r\n\r\n// ============================================================================\r\n// XML Parser (works in both Browser and Node.js)\r\n// ============================================================================\r\n\r\n/**\r\n * Parse XML string to XmlNode tree\r\n */\r\nexport function parseXml(xmlString: string): XmlNode {\r\n\t// Try browser DOMParser first\r\n\tif (typeof DOMParser !== 'undefined') {\r\n\t\treturn parseXmlBrowser(xmlString);\r\n\t}\r\n\t// Fallback to simple parser for Node.js\r\n\treturn parseXmlSimple(xmlString);\r\n}\r\n\r\nfunction parseXmlBrowser(xmlString: string): XmlNode {\r\n\tconst parser = new DOMParser();\r\n\tconst doc = parser.parseFromString(xmlString, 'text/xml');\r\n\tconst root = doc.documentElement;\r\n\r\n\tif (!root) {\r\n\t\tthrow new Error('Invalid XML: no root element');\r\n\t}\r\n\r\n\treturn parseElement(root);\r\n}\r\n\r\nfunction parseElement(element: Element): XmlNode {\r\n\tconst node: XmlNode = {\r\n\t\tname: element.tagName,\r\n\t\tattributes: {},\r\n\t\tchildren: [],\r\n\t\tvalue: null,\r\n\t};\r\n\r\n\t// Parse attributes\r\n\tfor (let i = 0; i < element.attributes.length; i++) {\r\n\t\tconst attr = element.attributes[i];\r\n\t\tnode.attributes[attr.name] = attr.value;\r\n\t}\r\n\r\n\t// Parse children\r\n\tfor (let i = 0; i < element.childNodes.length; i++) {\r\n\t\tconst child = element.childNodes[i];\r\n\r\n\t\tif (child.nodeType === 1) {\r\n\t\t\t// Element node\r\n\t\t\tnode.children.push(parseElement(child as Element));\r\n\t\t} else if (child.nodeType === 3) {\r\n\t\t\t// Text node\r\n\t\t\tconst text = child.nodeValue?.trim();\r\n\t\t\tif (text) {\r\n\t\t\t\tif (element.childNodes.length === 1) {\r\n\t\t\t\t\tnode.value = child.nodeValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n}\r\n\r\n/**\r\n * Simple XML parser for Node.js (basic implementation)\r\n */\r\nfunction parseXmlSimple(xmlString: string): XmlNode {\r\n\t// Remove XML declaration\r\n\txmlString = xmlString.replace(/<\\?xml[^?]*\\?>/g, '').trim();\r\n\r\n\t// Strip comments\r\n\txmlString = xmlString.replace(/<!--([\\s\\S]*?)-->/g, '').trim();\r\n\r\n\t// Convert CDATA to raw text\r\n\txmlString = xmlString.replace(/<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/g, (_, cdata) => String(cdata));\r\n\r\n\tconst parseTag = (str: string, start: number): { node: XmlNode; end: number } | null => {\r\n\t\t// Find opening tag\r\n\t\tconst tagStart = str.indexOf('<', start);\r\n\t\tif (tagStart === -1) return null;\r\n\r\n\t\tconst tagEnd = str.indexOf('>', tagStart);\r\n\t\tif (tagEnd === -1) return null;\r\n\r\n\t\tconst tagContent = str.slice(tagStart + 1, tagEnd);\r\n\t\tconst isSelfClosing = tagContent.endsWith('/');\r\n\t\tconst tagParts = (isSelfClosing ? tagContent.slice(0, -1) : tagContent).trim().split(/\\s+/);\r\n\t\tconst tagName = tagParts[0];\r\n\r\n\t\t// Parse attributes (support colons/hyphens; double or single quotes)\r\n\t\tconst attributes: Record<string, string> = {};\r\n\t\tconst attrRegex = /([^\\s=]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\r\n\t\tlet attrMatch;\r\n\t\twhile ((attrMatch = attrRegex.exec(tagContent)) !== null) {\r\n\t\t\tconst name = attrMatch[1];\r\n\t\t\tconst rawValue = attrMatch[3] ?? attrMatch[4] ?? '';\r\n\t\t\tattributes[name] = unescapeXml(rawValue);\r\n\t\t}\r\n\r\n\t\tconst node: XmlNode = {\r\n\t\t\tname: tagName,\r\n\t\t\tattributes,\r\n\t\t\tchildren: [],\r\n\t\t\tvalue: null,\r\n\t\t};\r\n\r\n\t\tif (isSelfClosing) {\r\n\t\t\treturn { node, end: tagEnd + 1 };\r\n\t\t}\r\n\r\n\t\t// Find closing tag and parse content\r\n\t\tconst closingTag = `</${tagName}>`;\r\n\t\tlet depth = 1;\r\n\t\tlet pos = tagEnd + 1;\r\n\t\tconst contentStart = pos;\r\n\r\n\t\twhile (depth > 0 && pos < str.length) {\r\n\t\t\tconst nextOpen = str.indexOf(`<${tagName}`, pos);\r\n\t\t\tconst nextClose = str.indexOf(closingTag, pos);\r\n\r\n\t\t\tif (nextClose === -1) break;\r\n\r\n\t\t\tif (nextOpen !== -1 && nextOpen < nextClose) {\r\n\t\t\t\tdepth++;\r\n\t\t\t\tpos = nextOpen + tagName.length + 1;\r\n\t\t\t} else {\r\n\t\t\t\tdepth--;\r\n\t\t\t\tif (depth === 0) {\r\n\t\t\t\t\tconst content = str.slice(contentStart, nextClose).trim();\r\n\r\n\t\t\t\t\t// Check if content has child elements\r\n\t\t\t\t\tif (content.startsWith('<')) {\r\n\t\t\t\t\t\tlet childPos = 0;\r\n\t\t\t\t\t\twhile (childPos < content.length) {\r\n\t\t\t\t\t\t\tconst childResult = parseTag(content, childPos);\r\n\t\t\t\t\t\t\tif (childResult) {\r\n\t\t\t\t\t\t\t\tnode.children.push(childResult.node);\r\n\t\t\t\t\t\t\t\tchildPos = childResult.end;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (content) {\r\n\t\t\t\t\t\tnode.value = unescapeXml(content);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn { node, end: nextClose + closingTag.length };\r\n\t\t\t\t}\r\n\t\t\t\tpos = nextClose + closingTag.length;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn { node, end: str.length };\r\n\t};\r\n\r\n\tconst result = parseTag(xmlString, 0);\r\n\tif (!result) {\r\n\t\tthrow new Error('Invalid XML');\r\n\t}\r\n\treturn result.node;\r\n}\r\n\r\n// ============================================================================\r\n// XML Serializer\r\n// ============================================================================\r\n\r\n/**\r\n * Serialize XmlNode tree to XML string\r\n */\r\nexport function serializeXml(node: XmlNode): string {\r\n\treturn '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>' + serializeNode(node);\r\n}\r\n\r\nfunction serializeNode(node: XmlNode): string {\r\n\tlet result = `<${node.name}`;\r\n\r\n\t// Add attributes\r\n\tfor (const [key, value] of Object.entries(node.attributes)) {\r\n\t\tresult += ` ${key}=\"${escapeXml(value)}\"`;\r\n\t}\r\n\r\n\tresult += '>';\r\n\r\n\t// Add children or value\r\n\tif (node.children.length > 0) {\r\n\t\tfor (const child of node.children) {\r\n\t\t\tresult += serializeNode(child);\r\n\t\t}\r\n\t} else if (node.value !== null) {\r\n\t\tresult += escapeXml(node.value);\r\n\t}\r\n\r\n\tresult += `</${node.name}>`;\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Escape special XML characters\r\n */\r\nexport function escapeXml(str: string): string {\r\n\treturn str.replace(/[<>&'\"]/g, (c) => {\r\n\t\tswitch (c) {\r\n\t\t\tcase '<':\r\n\t\t\t\treturn '&lt;';\r\n\t\t\tcase '>':\r\n\t\t\t\treturn '&gt;';\r\n\t\t\tcase '&':\r\n\t\t\t\treturn '&amp;';\r\n\t\t\tcase \"'\":\r\n\t\t\t\treturn '&apos;';\r\n\t\t\tcase '\"':\r\n\t\t\t\treturn '&quot;';\r\n\t\t\tdefault:\r\n\t\t\t\treturn c;\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Unescape XML special characters\r\n */\r\nexport function unescapeXml(str: string): string {\r\n\treturn str.replace(/(&quot;|&lt;|&gt;|&amp;|&apos;)/g, (c) => {\r\n\t\tswitch (c) {\r\n\t\t\tcase '&lt;':\r\n\t\t\t\treturn '<';\r\n\t\t\tcase '&gt;':\r\n\t\t\t\treturn '>';\r\n\t\t\tcase '&amp;':\r\n\t\t\t\treturn '&';\r\n\t\t\tcase '&apos;':\r\n\t\t\t\treturn \"'\";\r\n\t\t\tcase '&quot;':\r\n\t\t\t\treturn '\"';\r\n\t\t\tdefault:\r\n\t\t\t\treturn c;\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// ============================================================================\r\n// Request Builder\r\n// ============================================================================\r\n\r\n/**\r\n * Create XML request node\r\n */\r\nexport function createRequestXml(namespace: string, requestType: string, fields: FieldDefinition[], data: Record<string, unknown>): XmlNode {\r\n\tconst rootNode: XmlNode = {\r\n\t\tname: namespace,\r\n\t\tattributes: {},\r\n\t\tchildren: [],\r\n\t\tvalue: null,\r\n\t};\r\n\r\n\tconst requestNode: XmlNode = {\r\n\t\tname: requestType,\r\n\t\tattributes: {},\r\n\t\tchildren: [],\r\n\t\tvalue: null,\r\n\t};\r\n\r\n\trootNode.children.push(requestNode);\r\n\r\n\t// Add fields\r\n\tfor (const field of fields) {\r\n\t\tconst value = data[field.name] ?? field.defaultValue;\r\n\r\n\t\tif (value === undefined || value === null) {\r\n\t\t\tif (field.optional) continue;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst fieldNode = createFieldNode(field, value);\r\n\t\tif (fieldNode) {\r\n\t\t\trequestNode.children.push(fieldNode);\r\n\t\t}\r\n\t}\r\n\r\n\treturn rootNode;\r\n}\r\n\r\nfunction createFieldNode(field: FieldDefinition, value: unknown): XmlNode | null {\r\n\t// Use xmlTag if provided, otherwise field name\r\n\tconst nodeName = field.xmlTag || field.name;\r\n\r\n\tconst node: XmlNode = {\r\n\t\tname: nodeName,\r\n\t\tattributes: { keytype: field.keytype || getKeyType(field.type) },\r\n\t\tchildren: [],\r\n\t\tvalue: null,\r\n\t};\r\n\r\n\t// Add varname attribute if present\r\n\tif (field.varname) {\r\n\t\tnode.attributes.varname = field.varname;\r\n\t}\r\n\r\n\t// Handle special XML types (like SiriusBase64String)\r\n\tif (field.xmlType === 'SiriusBase64String') {\r\n\t\t// Wrapper node\r\n\t\tnode.name = field.xmlType;\r\n\t\tdelete node.attributes.keytype; // Wrapper usually doesn't have keytype\r\n\t\tif (field.varname) node.attributes.varname = field.varname;\r\n\r\n\t\t// Content node\r\n\t\tconst contentNode: XmlNode = {\r\n\t\t\tname: 'content',\r\n\t\t\tattributes: { keytype: 'AlpTString' },\r\n\t\t\tchildren: [],\r\n\t\t\tvalue: field.isBase64 ? toBase64(String(value)) : String(value),\r\n\t\t};\r\n\t\tnode.children.push(contentNode);\r\n\t\treturn node;\r\n\t}\r\n\r\n\tswitch (field.type) {\r\n\t\tcase 'string':\r\n\t\t\tnode.value = field.isBase64 ? toBase64(String(value)) : String(value);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'number':\r\n\t\tcase 'double':\r\n\t\t\tnode.value = String(value);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'int':\r\n\t\t\tnode.value = String(Math.floor(value as number));\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'boolean':\r\n\t\t\tnode.value = value ? 'true' : 'false';\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'stringArray': {\r\n\t\t\tnode.attributes.keytype = field.keytype || 'list';\r\n\t\t\tnode.attributes.varkeytype = 'AlpTString';\r\n\t\t\tconst strArr = value as string[];\r\n\t\t\tfor (const item of strArr) {\r\n\t\t\t\tnode.children.push({\r\n\t\t\t\t\tname: field.name, // Use field.name instead of field.xmlTag || field.name\r\n\t\t\t\t\tattributes: { keytype: 'AlpTString' },\r\n\t\t\t\t\tchildren: [],\r\n\t\t\t\t\tvalue: item,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcase 'stringMap': {\r\n\t\t\t// Map serialization: keytype=\"map\" varkeytype=\"AlpTString\" vartype=\"AlpTString\"\r\n\t\t\t// Children are alternating key/value pairs with same element name\r\n\t\t\tnode.attributes.keytype = field.keytype || 'map';\r\n\t\t\tnode.attributes.varkeytype = 'AlpTString';\r\n\t\t\tnode.attributes.vartype = 'AlpTString';\r\n\t\t\tconst mapValue = value as Record<string, string>;\r\n\t\t\tfor (const [key, val] of Object.entries(mapValue)) {\r\n\t\t\t\t// Key element\r\n\t\t\t\tnode.children.push({\r\n\t\t\t\t\tname: field.name,\r\n\t\t\t\t\tattributes: { keytype: 'AlpTString' },\r\n\t\t\t\t\tchildren: [],\r\n\t\t\t\t\tvalue: key,\r\n\t\t\t\t});\r\n\t\t\t\t// Value element\r\n\t\t\t\tnode.children.push({\r\n\t\t\t\t\tname: field.name,\r\n\t\t\t\t\tattributes: { keytype: 'AlpTString' },\r\n\t\t\t\t\tchildren: [],\r\n\t\t\t\t\tvalue: val,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcase 'map': {\r\n\t\t\tnode.attributes.keytype = field.keytype || 'map';\r\n\t\t\tnode.attributes.varkeytype = field.varkeytype || 'AlpTString';\r\n\t\t\tnode.attributes.vartype = field.vartype || 'AlpTString';\r\n\t\t\tconst genericMapValue = value as Record<string, any>;\r\n\r\n\t\t\tfor (const [key, val] of Object.entries(genericMapValue)) {\r\n\t\t\t\t// Key element\r\n\t\t\t\tnode.children.push({\r\n\t\t\t\t\tname: field.name,\r\n\t\t\t\t\tattributes: { keytype: field.varkeytype || 'AlpTString' },\r\n\t\t\t\t\tchildren: [],\r\n\t\t\t\t\tvalue: key,\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Value element\r\n\t\t\t\tif (field.vartype && (API_TYPES as any)[field.vartype]) {\r\n\t\t\t\t\t// Complex type\r\n\t\t\t\t\tconst valueNode: XmlNode = {\r\n\t\t\t\t\t\tname: field.name,\r\n\t\t\t\t\t\tattributes: { keytype: field.vartype },\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tconst objectRootNode: XmlNode = {\r\n\t\t\t\t\t\tname: field.vartype,\r\n\t\t\t\t\t\tattributes: {},\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t};\r\n\t\t\t\t\t// Set varname to field name (e.g. 'rights')\r\n\t\t\t\t\tobjectRootNode.attributes.varname = field.name;\r\n\r\n\t\t\t\t\tconst objFields = (API_TYPES as any)[field.vartype] as FieldDefinition[];\r\n\t\t\t\t\tconst objValue = val as Record<string, unknown>;\r\n\r\n\t\t\t\t\tfor (const childField of objFields) {\r\n\t\t\t\t\t\tconst childValue = objValue[childField.name];\r\n\t\t\t\t\t\tif (childValue !== undefined && childValue !== null) {\r\n\t\t\t\t\t\t\tconst childNode = createFieldNode(childField, childValue);\r\n\t\t\t\t\t\t\tif (childNode) {\r\n\t\t\t\t\t\t\t\tobjectRootNode.children.push(childNode);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvalueNode.children.push(objectRootNode);\r\n\t\t\t\t\tnode.children.push(valueNode);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Simple type\r\n\t\t\t\t\tnode.children.push({\r\n\t\t\t\t\t\tname: field.name,\r\n\t\t\t\t\t\tattributes: { keytype: field.vartype || 'AlpTString' },\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t\tvalue: String(val),\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcase 'array': {\r\n\t\t\tnode.attributes.keytype = field.keytype || 'list';\r\n\t\t\tif (field.itemObjectType) {\r\n\t\t\t\tnode.attributes.varkeytype = field.itemObjectType;\r\n\t\t\t} else if (field.itemType) {\r\n\t\t\t\tnode.attributes.varkeytype = getKeyType(field.itemType);\r\n\t\t\t}\r\n\r\n\t\t\tif (Array.isArray(value)) {\r\n\t\t\t\tfor (const item of value) {\r\n\t\t\t\t\t// Legacy CobriliData generator behavior:\r\n\t\t\t\t\t// - list of primitives: children reuse the container tag name\r\n\t\t\t\t\t// - list of objects: children are the object type tag name\r\n\t\t\t\t\tif (field.itemObjectType && (API_TYPES as any)[field.itemObjectType]) {\r\n\t\t\t\t\t\tconst itemNode: XmlNode = {\r\n\t\t\t\t\t\t\tname: field.itemObjectType,\r\n\t\t\t\t\t\t\tattributes: { keytype: field.itemObjectType, varname: field.varname || field.name },\r\n\t\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tconst objFields = (API_TYPES as any)[field.itemObjectType] as FieldDefinition[];\r\n\t\t\t\t\t\tconst objValue = item as Record<string, unknown>;\r\n\r\n\t\t\t\t\t\tfor (const childField of objFields) {\r\n\t\t\t\t\t\t\tconst childValue = objValue[childField.name];\r\n\t\t\t\t\t\t\tif (childValue !== undefined && childValue !== null) {\r\n\t\t\t\t\t\t\t\tconst childNode = createFieldNode(childField, childValue);\r\n\t\t\t\t\t\t\t\tif (childNode) itemNode.children.push(childNode);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tnode.children.push(itemNode);\r\n\t\t\t\t\t} else if (field.itemType) {\r\n\t\t\t\t\t\tconst itemName = field.xmlTag || field.name;\r\n\t\t\t\t\t\tnode.children.push({\r\n\t\t\t\t\t\t\tname: itemName,\r\n\t\t\t\t\t\t\tattributes: { keytype: getKeyType(field.itemType) },\r\n\t\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t\t\tvalue: String(item),\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcase 'object':\r\n\t\t\t// Check if we have a definition for this object type\r\n\t\t\tif (field.objectType && (API_TYPES as any)[field.objectType]) {\r\n\t\t\t\tconst objFields = (API_TYPES as any)[field.objectType] as FieldDefinition[];\r\n\t\t\t\tconst objValue = value as Record<string, unknown>;\r\n\r\n\t\t\t\tfor (const childField of objFields) {\r\n\t\t\t\t\tconst childValue = objValue[childField.name];\r\n\t\t\t\t\tif (childValue !== undefined && childValue !== null) {\r\n\t\t\t\t\t\tconst childNode = createFieldNode(childField, childValue);\r\n\t\t\t\t\t\tif (childNode) {\r\n\t\t\t\t\t\t\tnode.children.push(childNode);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Fallback to simple object serialization\r\n\t\t\t\tif (typeof value === 'object' && value !== null) {\r\n\t\t\t\t\tconst objValue = value as Record<string, unknown>;\r\n\t\t\t\t\tfor (const [key, val] of Object.entries(objValue)) {\r\n\t\t\t\t\t\tif (val !== undefined && val !== null) {\r\n\t\t\t\t\t\t\tconst childNode: XmlNode = {\r\n\t\t\t\t\t\t\t\tname: key,\r\n\t\t\t\t\t\t\t\tattributes: { keytype: inferKeyType(val) },\r\n\t\t\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t\t\t\tvalue: String(val),\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tnode.children.push(childNode);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\treturn node;\r\n}\r\n\r\nfunction toBase64(str: string): string {\r\n\tif (typeof btoa === 'function') {\r\n\t\treturn btoa(str);\r\n\t}\r\n\tif (typeof Buffer !== 'undefined') {\r\n\t\treturn Buffer.from(str).toString('base64');\r\n\t}\r\n\treturn str;\r\n}\r\n\r\nfunction getKeyType(type: FieldType): string {\r\n\tswitch (type) {\r\n\t\tcase 'string':\r\n\t\t\treturn 'AlpTString';\r\n\t\tcase 'number':\r\n\t\t\treturn 'double';\r\n\t\tcase 'double':\r\n\t\t\treturn 'double';\r\n\t\tcase 'int':\r\n\t\t\treturn 'int';\r\n\t\tcase 'boolean':\r\n\t\t\treturn 'bool';\r\n\t\tcase 'array':\r\n\t\t\treturn 'list';\r\n\t\tcase 'object':\r\n\t\t\treturn 'object';\r\n\t\tdefault:\r\n\t\t\treturn 'AlpTString';\r\n\t}\r\n}\r\n\r\nfunction inferKeyType(value: unknown): string {\r\n\tif (typeof value === 'string') return 'AlpTString';\r\n\tif (typeof value === 'number') return Number.isInteger(value) ? 'int' : 'double';\r\n\tif (typeof value === 'boolean') return 'bool';\r\n\treturn 'AlpTString';\r\n}\r\n\r\n// ============================================================================\r\n// Response Parser\r\n// ============================================================================\r\n\r\n/**\r\n * Parse XML response to JavaScript object\r\n */\r\nexport function parseResponseXml(xmlNode: XmlNode, fields: FieldDefinition[]): Record<string, unknown> {\r\n\tconst result: Record<string, unknown> = {};\r\n\r\n\t// Helper to check if a node contains any of the expected fields\r\n\tconst expectedTags = new Set(fields.map((f) => f.xmlTag || f.name));\r\n\tconst expectedVarnames = new Set(fields.map((f) => f.varname).filter(Boolean) as string[]);\r\n\tconst hasExpectedFields = (node: XmlNode): boolean => {\r\n\t\treturn node.children.some((child) => expectedTags.has(child.name) || (child.attributes.varname && expectedVarnames.has(child.attributes.varname)));\r\n\t};\r\n\r\n\t// Wrappers that are always skipped unless they are fields\r\n\tconst pureWrappers = new Set(['Envelope', 'Body', 'CobriliData', 'return', 'Result']);\r\n\r\n\t// Wrappers that might be fields (ambiguous)\r\n\tconst ambiguousWrappers = new Set(['Success']);\r\n\r\n\tlet current = xmlNode;\r\n\tlet depth = 0;\r\n\tconst MAX_DEPTH = 10;\r\n\r\n\twhile (depth < MAX_DEPTH) {\r\n\t\t// 1. If we see expected fields, we are likely at the right place\r\n\t\tif (hasExpectedFields(current)) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t// 2. Look for a child to drill down into\r\n\t\tlet nextNode: XmlNode | undefined;\r\n\r\n\t\t// Priority 1: Pure wrappers\r\n\t\tnextNode = current.children.find((c) => pureWrappers.has(c.name));\r\n\r\n\t\t// Priority 2: Response nodes (e.g. LoginResponse)\r\n\t\tif (!nextNode) {\r\n\t\t\tnextNode = current.children.find((c) => c.name.endsWith('Response'));\r\n\t\t}\r\n\r\n\t\t// Priority 3: Ambiguous wrappers (only if not a field)\r\n\t\tif (!nextNode) {\r\n\t\t\tconst ambiguousChild = current.children.find((c) => ambiguousWrappers.has(c.name));\r\n\t\t\tif (ambiguousChild) {\r\n\t\t\t\t// Only drill down if this ambiguous name is NOT an expected field\r\n\t\t\t\tconst isField = fields.some((f) => f.name === ambiguousChild.name);\r\n\t\t\t\tif (!isField) {\r\n\t\t\t\t\tnextNode = ambiguousChild;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (nextNode) {\r\n\t\t\tcurrent = nextNode;\r\n\t\t\tdepth++;\r\n\t\t} else {\r\n\t\t\t// No known wrapper found. Stop here.\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tconst responseNode = current;\r\n\r\n\t// Create maps of field definitions for quick lookup\r\n\tconst fieldByTag = new Map<string, FieldDefinition>();\r\n\tconst fieldByVarname = new Map<string, FieldDefinition>();\r\n\tfor (const field of fields) {\r\n\t\tfieldByTag.set(field.name, field);\r\n\t\tfieldByTag.set(field.xmlTag || field.name, field);\r\n\t\tif (field.varname) {\r\n\t\t\tfieldByVarname.set(field.varname, field);\r\n\t\t}\r\n\t}\r\n\r\n\t// Parse each child node\r\n\tfor (const child of responseNode.children) {\r\n\t\tconst field = fieldByTag.get(child.name) || (child.attributes.varname ? fieldByVarname.get(child.attributes.varname) : undefined);\r\n\r\n\t\tif (field) {\r\n\t\t\tresult[field.name] = parseFieldValue(child, field);\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\t// Auto-detect type from attributes or value.\r\n\t\t// If a varname is present, prefer it as the key (matches CobriliData.js behavior).\r\n\t\tconst parsed = autoParseField(child);\r\n\t\tif (child.attributes.varname) {\r\n\t\t\tresult[child.attributes.varname] = parsed;\r\n\t\t\tif (child.attributes.varname !== child.name) {\r\n\t\t\t\tresult[child.name] = parsed;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tresult[child.name] = parsed;\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction parseFieldValue(node: XmlNode, field: FieldDefinition): unknown {\r\n\tswitch (field.type) {\r\n\t\tcase 'string':\r\n\t\t\treturn node.value || '';\r\n\r\n\t\tcase 'number':\r\n\t\tcase 'double':\r\n\t\t\treturn node.value ? parseFloat(node.value) : 0;\r\n\r\n\t\tcase 'int':\r\n\t\t\treturn node.value ? parseInt(node.value, 10) : 0;\r\n\r\n\t\tcase 'boolean':\r\n\t\t\treturn node.value === 'true';\r\n\r\n\t\tcase 'stringArray':\r\n\t\t\treturn node.children.map((child) => child.value || '');\r\n\r\n\t\tcase 'array': {\r\n\t\t\t// Respect schema if available; otherwise fall back to heuristics.\r\n\t\t\tif (field.itemObjectType && (API_TYPES as any)[field.itemObjectType]) {\r\n\t\t\t\treturn node.children.map((child) => {\r\n\t\t\t\t\t// Items are usually object nodes\r\n\t\t\t\t\tconst itemField: FieldDefinition = { name: field.itemObjectType!, type: 'object', objectType: field.itemObjectType };\r\n\t\t\t\t\treturn parseFieldValue(child, itemField) as any;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (field.itemType) {\r\n\t\t\t\treturn node.children.map((child) => {\r\n\t\t\t\t\t// Primitive list items are nodes; parse using their keytype when present\r\n\t\t\t\t\tconst value = autoParseField(child);\r\n\t\t\t\t\t// If autoParseField couldn't coerce (e.g. missing keytype), coerce using itemType\r\n\t\t\t\t\tif (typeof value === 'string') {\r\n\t\t\t\t\t\tswitch (field.itemType) {\r\n\t\t\t\t\t\t\tcase 'int':\r\n\t\t\t\t\t\t\t\treturn parseInt(value, 10) || 0;\r\n\t\t\t\t\t\t\tcase 'double':\r\n\t\t\t\t\t\t\tcase 'number':\r\n\t\t\t\t\t\t\t\treturn parseFloat(value) || 0;\r\n\t\t\t\t\t\t\tcase 'boolean':\r\n\t\t\t\t\t\t\t\treturn value === 'true';\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn node.children.map((child) => autoParseField(child));\r\n\t\t}\r\n\r\n\t\tcase 'object': {\r\n\t\t\tconst obj: Record<string, unknown> = {};\r\n\t\t\tif (field.objectType && (API_TYPES as any)[field.objectType]) {\r\n\t\t\t\tconst objFields = (API_TYPES as any)[field.objectType] as FieldDefinition[];\r\n\t\t\t\tconst byTag = new Map<string, FieldDefinition>();\r\n\t\t\t\tconst byVarname = new Map<string, FieldDefinition>();\r\n\t\t\t\tfor (const f of objFields) {\r\n\t\t\t\t\tbyTag.set(f.name, f);\r\n\t\t\t\t\tbyTag.set(f.xmlTag || f.name, f);\r\n\t\t\t\t\tif (f.varname) byVarname.set(f.varname, f);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const child of node.children) {\r\n\t\t\t\t\tconst f = byTag.get(child.name) || (child.attributes.varname ? byVarname.get(child.attributes.varname) : undefined);\r\n\t\t\t\t\tif (f) {\r\n\t\t\t\t\t\tobj[f.name] = parseFieldValue(child, f);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst key = child.attributes.varname || child.name;\r\n\t\t\t\t\t\tobj[key] = autoParseField(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn obj;\r\n\t\t\t}\r\n\r\n\t\t\tfor (const child of node.children) {\r\n\t\t\t\tconst key = child.attributes.varname || child.name;\r\n\t\t\t\tobj[key] = autoParseField(child);\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\tcase 'stringMap': {\r\n\t\t\tconst parsed = parseMapNode(node, {\r\n\t\t\t\tkeyField: { name: 'key', type: 'string' },\r\n\t\t\t\tvalueField: { name: 'value', type: 'string' },\r\n\t\t\t});\r\n\t\t\treturn parsed as Record<string, string>;\r\n\t\t}\r\n\r\n\t\tcase 'map': {\r\n\t\t\tconst keyField = inferMapFieldDefinition(field.varkeytype);\r\n\t\t\tconst valueField = inferMapFieldDefinition(field.vartype);\r\n\t\t\tconst parsed = parseMapNode(node, { keyField, valueField });\r\n\r\n\t\t\t// Legacy parity: TopicMetaData.metaData is a map<string, MetaValuesList> but legacy\r\n\t\t\t// code immediately unwraps to map<string, string[]>.\r\n\t\t\tif (field.vartype === 'MetaValuesList') {\r\n\t\t\t\tconst unwrapped: Record<string, unknown> = {};\r\n\t\t\t\tfor (const [k, v] of Object.entries(parsed)) {\r\n\t\t\t\t\tif (v && typeof v === 'object' && 'metaValues' in (v as any) && Array.isArray((v as any).metaValues)) {\r\n\t\t\t\t\t\tunwrapped[k] = (v as any).metaValues;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tunwrapped[k] = v;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn unwrapped;\r\n\t\t\t}\r\n\r\n\t\t\treturn parsed;\r\n\t\t}\r\n\r\n\t\tdefault:\r\n\t\t\treturn node.value;\r\n\t}\r\n}\r\n\r\nfunction inferMapFieldDefinition(typeName?: string): FieldDefinition | undefined {\r\n\tif (!typeName) return undefined;\r\n\r\n\t// Object type (defined in registry)\r\n\tif ((API_TYPES as any)[typeName]) {\r\n\t\treturn { name: typeName, type: 'object', objectType: typeName };\r\n\t}\r\n\r\n\t// Primitive-ish / special types\r\n\tswitch (typeName) {\r\n\t\tcase 'AlpTString':\r\n\t\tcase 'string':\r\n\t\t\treturn { name: typeName, type: 'string' };\r\n\t\tcase 'double':\r\n\t\tcase 'number':\r\n\t\t\treturn { name: typeName, type: 'double' };\r\n\t\tcase 'int':\r\n\t\t\treturn { name: typeName, type: 'int' };\r\n\t\tcase 'boolean':\r\n\t\tcase 'bool':\r\n\t\t\treturn { name: typeName, type: 'boolean' };\r\n\t\tcase 'stringArray':\r\n\t\t\treturn { name: typeName, type: 'stringArray' };\r\n\t\tdefault:\r\n\t\t\treturn undefined;\r\n\t}\r\n}\r\n\r\nfunction parseMapNode(\r\n\tnode: XmlNode,\r\n\topts: { keyField?: FieldDefinition; valueField?: FieldDefinition } = {},\r\n): Record<string, unknown> {\r\n\tconst result: Record<string, unknown> = {};\r\n\tconst children = node.children;\r\n\r\n\tconst tryUnwrapMetaValuesListLike = (value: unknown): unknown => {\r\n\t\t// Common legacy shape (seen in GetAllTopicsOfHelpset metaData when schema is missing):\r\n\t\t// { KEY: [ { metaValues: \"BHBSB\" } ] } or { KEY: [ { metaValues: [\"BHBSB\"] } ] }\r\n\t\tconst normalizeToStrings = (v: unknown): string[] => {\r\n\t\t\tif (typeof v === 'string') return [v];\r\n\t\t\tif (Array.isArray(v)) return v.filter((x): x is string => typeof x === 'string');\r\n\t\t\treturn [];\r\n\t\t};\r\n\r\n\t\tconst unwrapObject = (obj: any): string[] | null => {\r\n\t\t\tif (!obj || typeof obj !== 'object') return null;\r\n\t\t\tif (!('metaValues' in obj)) return null;\r\n\t\t\treturn normalizeToStrings(obj.metaValues);\r\n\t\t};\r\n\r\n\t\t// Single object {metaValues: ...}\r\n\t\tconst direct = unwrapObject(value as any);\r\n\t\tif (direct) {\r\n\t\t\treturn direct.length === 1 ? direct[0] : direct;\r\n\t\t}\r\n\r\n\t\t// Array of objects [{metaValues: ...}, ...]\r\n\t\tif (Array.isArray(value) && value.length > 0) {\r\n\t\t\tconst all = value\r\n\t\t\t\t.map((v) => unwrapObject(v as any))\r\n\t\t\t\t.filter((v): v is string[] => Array.isArray(v));\r\n\t\t\tif (all.length === value.length) {\r\n\t\t\t\tconst flattened = all.flat();\r\n\t\t\t\tif (flattened.length === 1) return flattened[0];\r\n\t\t\t\treturn flattened;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t};\r\n\r\n\tfor (let i = 0; i + 1 < children.length; i += 2) {\r\n\t\tconst keyNode = children[i];\r\n\t\tconst valueNode = children[i + 1];\r\n\r\n\t\tconst parsedKey = opts.keyField ? parseFieldValue(keyNode, opts.keyField) : autoParseField(keyNode);\r\n\t\tconst key = typeof parsedKey === 'string' ? parsedKey : String(parsedKey);\r\n\t\tif (!key) continue;\r\n\r\n\t\tlet value = opts.valueField ? parseFieldValue(valueNode, opts.valueField) : autoParseField(valueNode);\r\n\t\t// Only apply heuristic unwrapping when we don't have schema information.\r\n\t\tif (!opts.valueField) {\r\n\t\t\tvalue = tryUnwrapMetaValuesListLike(value);\r\n\t\t}\r\n\t\tresult[key] = value;\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction autoParseField(node: XmlNode): unknown {\r\n\tconst keytype = node.attributes.keytype;\r\n\r\n\tconst hasChildren = node.children.length > 0;\r\n\tconst hasTextValue = node.value !== null && node.value !== undefined && node.value !== '';\r\n\r\n\tconst parseObjectArray = (children: XmlNode[]): Record<string, unknown>[] => {\r\n\t\treturn children.map((child) => {\r\n\t\t\tconst obj: Record<string, unknown> = {};\r\n\t\t\tfor (const grandChild of child.children) {\r\n\t\t\t\tconst key = grandChild.attributes.varname || grandChild.name;\r\n\t\t\t\tobj[key] = autoParseField(grandChild);\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t});\r\n\t};\r\n\r\n\t// Handle lists\r\n\t// Only treat as list if explicitly marked, or if the structure strongly suggests a list\r\n\t// (e.g. repeated same-named children like <content><UserInfo>...</UserInfo><UserInfo>...</UserInfo></content>).\r\n\tif (keytype === 'list' || keytype === 'vector') {\r\n\t\tif (!hasChildren) return [];\r\n\r\n\t\tconst firstChildName = node.children[0]?.name;\r\n\t\tconst allSameName = !!firstChildName && node.children.every((c) => c.name === firstChildName);\r\n\r\n\t\t// Array of objects\r\n\t\tif (allSameName && node.children.every((c) => c.children.length > 0)) {\r\n\t\t\treturn parseObjectArray(node.children);\r\n\t\t}\r\n\r\n\t\t// Simple value array\r\n\t\tif (node.children.every((c) => c.value !== null)) {\r\n\t\t\treturn node.children.map((c) => c.value);\r\n\t\t}\r\n\r\n\t\t// Fallback: list of parsed children\r\n\t\treturn node.children.map((child) => autoParseField(child));\r\n\t}\r\n\r\n\t// Handle maps (alternating key/value children)\r\n\tif (keytype === 'map') {\r\n\t\treturn parseMapNode(node);\r\n\t}\r\n\r\n\t// If the node has children and no text value, it is usually an object, not a list.\r\n\t// However, if all children have the same name, treat it as a list even without keytype=list.\r\n\tif (hasChildren && !hasTextValue) {\r\n\t\t// If explicitly marked as map, do NOT treat as a list even if children repeat.\r\n\t\tif (keytype === 'map') {\r\n\t\t\treturn parseMapNode(node);\r\n\t\t}\r\n\r\n\t\tconst firstChildName = node.children[0]?.name;\r\n\t\tconst allSameName = !!firstChildName && node.children.every((c) => c.name === firstChildName);\r\n\r\n\t\tif (allSameName) {\r\n\t\t\t// Array of objects\r\n\t\t\tif (node.children.every((c) => c.children.length > 0)) {\r\n\t\t\t\treturn parseObjectArray(node.children);\r\n\t\t\t}\r\n\r\n\t\t\t// Simple value array\r\n\t\t\tif (node.children.every((c) => c.value !== null)) {\r\n\t\t\t\treturn node.children.map((c) => c.value);\r\n\t\t\t}\r\n\r\n\t\t\treturn node.children.map((child) => autoParseField(child));\r\n\t\t}\r\n\r\n\t\t// Object node\r\n\t\tconst obj: Record<string, unknown> = {};\r\n\t\tfor (const child of node.children) {\r\n\t\t\tconst key = child.attributes.varname || child.name;\r\n\t\t\tobj[key] = autoParseField(child);\r\n\t\t}\r\n\t\treturn obj;\r\n\t}\r\n\r\n\t// Parse based on keytype\r\n\tswitch (keytype) {\r\n\t\tcase 'AlpTString':\r\n\t\t\treturn node.value || '';\r\n\r\n\t\tcase 'double':\r\n\t\t\treturn node.value ? parseFloat(node.value) : 0;\r\n\r\n\t\tcase 'int':\r\n\t\tcase 'UINT':\r\n\t\tcase 'DWORD':\r\n\t\tcase 'long':\r\n\t\t\treturn node.value ? parseInt(node.value, 10) : 0;\r\n\r\n\t\tcase 'bool':\r\n\t\t\treturn node.value === 'true';\r\n\r\n\t\tdefault:\r\n\t\t\t// Try to infer from value\r\n\t\t\tif (node.value === null && node.children.length > 0) {\r\n\t\t\t\tconst obj: Record<string, unknown> = {};\r\n\t\t\t\tfor (const child of node.children) {\r\n\t\t\t\t\tobj[child.name] = autoParseField(child);\r\n\t\t\t\t}\r\n\t\t\t\treturn obj;\r\n\t\t\t}\r\n\t\t\treturn node.value;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check if response is an exception\r\n */\r\nexport function isExceptionResponse(xmlNode: XmlNode): boolean {\r\n\treturn xmlNode.name === 'GeneralException' || xmlNode.children[0]?.children[0]?.name === 'ServerActionFailedException';\r\n}\r\n\r\n/**\r\n * Extract exception details from response\r\n */\r\nexport function extractException(xmlNode: XmlNode): { code: string; message: string; details?: any } {\r\n\tif (xmlNode.name === 'GeneralException') {\r\n\t\tconst messageNode = xmlNode.children.find((c) => c.name === 'message');\r\n\t\tconst codeNode = xmlNode.children.find((c) => c.name === 'code');\r\n\t\treturn {\r\n\t\t\tcode: codeNode?.value || 'GENERAL_EXCEPTION',\r\n\t\t\tmessage: messageNode?.value || 'Unknown error',\r\n\t\t\tdetails: autoParseField(xmlNode),\r\n\t\t};\r\n\t}\r\n\r\n\t// ServerActionFailedException\r\n\t// Check if it's directly the node or nested\r\n\tlet exceptionNode: XmlNode | undefined;\r\n\tif (xmlNode.name === 'ServerActionFailedException') {\r\n\t\texceptionNode = xmlNode;\r\n\t} else if (xmlNode.children[0]?.children[0]?.name === 'ServerActionFailedException') {\r\n\t\texceptionNode = xmlNode.children[0].children[0];\r\n\t}\r\n\r\n\tif (exceptionNode) {\r\n\t\t// Try to parse the CServerActionFailedList structure\r\n\t\tconst listNode = exceptionNode.children.find((c) => c.name === 'CServerActionFailedList');\r\n\t\tif (listNode) {\r\n\t\t\tconst contentNode = listNode.children.find((c) => c.name === 'content');\r\n\t\t\tif (contentNode) {\r\n\t\t\t\t// Parse all items\r\n\t\t\t\tconst items = contentNode.children.map((itemNode) => {\r\n\t\t\t\t\tconst item: Record<string, any> = {};\r\n\t\t\t\t\titemNode.children.forEach((c) => {\r\n\t\t\t\t\t\t// Clean up property names (remove prefixes like mstr_, me_, ml_)\r\n\t\t\t\t\t\tconst cleanName = c.name.replace(/^(mstr_|me_|ml_|mb_)/, '');\r\n\t\t\t\t\t\titem[cleanName] = c.value;\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn item;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst firstItem = items[0];\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcode: firstItem?.message || 'SERVER_ERROR', // me_message usually contains the error code/id\r\n\t\t\t\t\tmessage: firstItem?.message || 'Server action failed',\r\n\t\t\t\t\tdetails: items,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fallback to standard message/errorCode fields\r\n\t\tconst messageNode = exceptionNode.children.find((c) => c.name === 'message');\r\n\t\tconst codeNode = exceptionNode.children.find((c) => c.name === 'errorCode');\r\n\t\treturn {\r\n\t\t\tcode: codeNode?.value || 'SERVER_ERROR',\r\n\t\t\tmessage: messageNode?.value || 'Server action failed',\r\n\t\t\tdetails: autoParseField(exceptionNode),\r\n\t\t};\r\n\t}\r\n\r\n\treturn { code: 'UNKNOWN', message: 'Unknown error', details: xmlNode };\r\n}\r\n","/**\r\n * Cobrili API Client\r\n *\r\n * A modern ES6/TypeScript API client for the Cobrili REST API.\r\n * Works in both Browser and Node.js environments.\r\n */\r\n\r\nimport { API_METHODS, type InferRequest, type InferResponse, type CobriliConfig, type ApiResponse } from './api-registry';\r\nimport { createRequestXml, serializeXml, parseXml, parseResponseXml, isExceptionResponse, extractException, type XmlNode } from './xml-utils';\r\n\r\n// Define the interface for the client to include all dynamic methods\r\nexport type CobriliClientInterface = {\r\n\t[K in keyof typeof API_METHODS]: (params: InferRequest<K>) => Promise<ApiResponse<InferResponse<K>>>;\r\n} & {\r\n\tcall<K extends keyof typeof API_METHODS>(method: K, params: InferRequest<K>): Promise<ApiResponse<InferResponse<K>>>;\r\n\tgetConfig(): Required<CobriliConfig>;\r\n\tsetConfig(config: Partial<CobriliConfig>): void;\r\n\tinit(hash?: string): Promise<any>;\r\n};\r\n\r\nconst DEFAULT_CONFIG: Required<CobriliConfig> = {\r\n\tbaseUrl: 'http://localhost:5000',\r\n\tendpoint: '/api/cobrili',\r\n\ttimeout: 30000,\r\n\theaders: {},\r\n\tdebug: false,\r\n};\r\n\r\nexport class CobriliClient {\r\n\tprivate config: Required<CobriliConfig>;\r\n\tprivate initialized = false;\r\n\tprivate initPromise: Promise<any> | null = null;\r\n\r\n\tprivate unwrapSuccessPayload(payload: unknown): unknown {\r\n\t\tif (!payload || typeof payload !== 'object') return payload;\r\n\t\tconst record = payload as Record<string, unknown>;\r\n\r\n\t\tconst unwrapSingleItemArray = (value: unknown): unknown => {\r\n\t\t\tif (Array.isArray(value) && value.length === 1) return value[0];\r\n\t\t\treturn value;\r\n\t\t};\r\n\r\n\t\t// Common explicit wrapper\r\n\t\tif ('SuccessObject' in record) {\r\n\t\t\treturn unwrapSingleItemArray(record.SuccessObject);\r\n\t\t}\r\n\r\n\t\t// Heuristic wrapper used by some endpoints where the varname becomes the key,\r\n\t\t// e.g. { GetCobriliLinkForTopicIdResponseSuccess: [...] }\r\n\t\tconst keys = Object.keys(record);\r\n\t\tif (keys.length === 1) {\r\n\t\t\tconst key = keys[0];\r\n\t\t\tconst value = record[key];\r\n\t\t\tconst looksLikeSuccessWrapper = /(^|Response)Success$/.test(key) && key !== 'success';\r\n\t\t\tif (looksLikeSuccessWrapper && typeof value !== 'boolean') {\r\n\t\t\t\treturn unwrapSingleItemArray(value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn payload;\r\n\t}\r\n\r\n\tconstructor(config: CobriliConfig) {\r\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\r\n\r\n\t\t// Start initialization immediately (don't wait for first API call)\r\n\t\tthis.init();\r\n\r\n\t\t// Return a proxy to handle dynamic method calls\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: (target, prop) => {\r\n\t\t\t\tif (prop in target) {\r\n\t\t\t\t\treturn (target as any)[prop];\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof prop === 'string' && prop in API_METHODS) {\r\n\t\t\t\t\treturn (params: any) => target.call(prop as any, params);\r\n\t\t\t\t}\r\n\t\t\t\treturn undefined;\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tpublic setConfig(config: Partial<CobriliConfig>): void {\r\n\t\tthis.config = { ...this.config, ...config };\r\n\t}\r\n\r\n\tpublic getConfig(): Required<CobriliConfig> {\r\n\t\treturn { ...this.config };\r\n\t}\r\n\r\n\t/**\r\n\t * Initialize the Cobrili session. This is called automatically on the first API request.\r\n\t * You can also call it explicitly if you want to control when initialization happens.\r\n\t */\r\n\tpublic async init(hash = ''): Promise<any> {\r\n\t\tif (this.initialized) {\r\n\t\t\treturn { alreadyInitialized: true };\r\n\t\t}\r\n\r\n\t\t// If init is already in progress, wait for it\r\n\t\tif (this.initPromise) {\r\n\t\t\treturn this.initPromise;\r\n\t\t}\r\n\r\n\t\tthis.initPromise = this.performInit(hash);\r\n\t\ttry {\r\n\t\t\tconst result = await this.initPromise;\r\n\t\t\tthis.initialized = true;\r\n\t\t\treturn result;\r\n\t\t} catch (error) {\r\n\t\t\tthis.initPromise = null;\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async performInit(hash: string): Promise<any> {\r\n\t\tconst url = `${this.config.baseUrl}${this.config.endpoint}/init`;\r\n\t\t\r\n\t\tconst response = await fetch(url, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json; charset=utf-8',\r\n\t\t\t\t...this.config.headers,\r\n\t\t\t},\r\n\t\t\tcredentials: 'include',\r\n\t\t\tbody: JSON.stringify(hash),\r\n\t\t});\r\n\t\t\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Init failed: ${response.status} ${response.statusText}`);\r\n\t\t}\r\n\t\t\r\n\t\tconst initData = await response.json();\r\n\r\n\t\t// Mark as initialized so we can make API calls\r\n\t\tthis.initialized = true;\r\n\r\n\t\treturn initData;\r\n\t}\r\n\r\n\tprivate async ensureInitialized(): Promise<void> {\r\n\t\tif (!this.initialized) {\r\n\t\t\tawait this.init();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async call<K extends keyof typeof API_METHODS>(methodName: K, params: InferRequest<K>): Promise<ApiResponse<InferResponse<K>>> {\r\n\t\t// Ensure session is initialized before making any API call\r\n\t\tawait this.ensureInitialized();\r\n\r\n\t\tconst methodDef = API_METHODS[methodName];\r\n\t\tif (!methodDef) {\r\n\t\t\treturn {\r\n\t\t\t\terror: {\r\n\t\t\t\t\tcode: 'INVALID_METHOD',\r\n\t\t\t\t\tmessage: `Unknown API method: ${String(methodName)}`,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Determine method name and request type (default to convention if not specified)\r\n\t\tconst apiMethod = (methodDef as any).method || String(methodName).charAt(0).toUpperCase() + String(methodName).slice(1);\r\n\t\tconst requestType = (methodDef as any).requestType || `${apiMethod}Request`;\r\n\r\n\t\ttry {\r\n\t\t\t// 1. Create XML Request\r\n\t\t\tconst requestNode = createRequestXml('CobriliData', requestType, methodDef.requestFields as any, params as Record<string, unknown>);\r\n\t\t\tconst xmlRequest = serializeXml(requestNode);\r\n\r\n\t\t\t// Wrap XML in JSON envelope\r\n\t\t\tconst jsonPayload = JSON.stringify({\r\n\t\t\t\tmethodName: apiMethod,\r\n\t\t\t\trequestData: xmlRequest,\r\n\t\t\t});\r\n\r\n\t\t\t// 2. Send Request\r\n\t\t\tconst response = await this.sendHttpRequest(apiMethod, jsonPayload);\r\n\r\n\t\t\t// 3. Parse Response\r\n\t\t\ttry {\r\n\t\t\t\tconst xmlNode: XmlNode = parseXml(response);\r\n\r\n\t\t\t\t// Check for error in response\r\n\t\t\t\tif (isExceptionResponse(xmlNode)) {\r\n\t\t\t\t\tconst exception = extractException(xmlNode);\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\terror: {\r\n\t\t\t\t\t\t\tcode: exception.code,\r\n\t\t\t\t\t\t\tmessage: exception.message,\r\n\t\t\t\t\t\t\tdetails: exception.details,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst parsedResponse = parseResponseXml(xmlNode, methodDef.responseFields as any);\r\n\t\t\t\tconst unwrapped = this.unwrapSuccessPayload(parsedResponse);\r\n\t\t\t\treturn { data: unwrapped as InferResponse<K> };\r\n\t\t\t} catch (parseError) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\terror: {\r\n\t\t\t\t\t\tcode: 'PARSE_ERROR',\r\n\t\t\t\t\t\tmessage: parseError instanceof Error ? parseError.message : 'Failed to parse XML response',\r\n\t\t\t\t\t\tdetails: response,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\treturn {\r\n\t\t\t\terror: {\r\n\t\t\t\t\tcode: 'CLIENT_ERROR',\r\n\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async sendHttpRequest(method: string, body: string): Promise<string> {\r\n\t\tconst controller = new AbortController();\r\n\t\tconst timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(`${this.config.baseUrl}${this.config.endpoint}?method=${method}`, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t\t...(this.config.headers || {}),\r\n\t\t\t\t},\r\n\t\t\t\tbody: body,\r\n\t\t\t\tsignal: controller.signal,\r\n\t\t\t\tcredentials: 'include', // Include cookies for session management\r\n\t\t\t});\r\n\r\n\t\t\tif (!response.ok) {\r\n\t\t\t\tthrow new Error(`HTTP Error: ${response.status} ${response.statusText}`);\r\n\t\t\t}\r\n\r\n\t\t\treturn await response.text();\r\n\t\t} finally {\r\n\t\t\tclearTimeout(timeoutId);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Factory function to create a typed client\r\nexport function createCobriliClient(config: CobriliConfig): CobriliClientInterface {\r\n\treturn new CobriliClient(config) as unknown as CobriliClientInterface;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC8hBA,MAAM,QAAQ,CACb,MACA,MACA,aAcK,EAAE,MAAM,MAAM,GAAG,QAAQ;AAiCxB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA,IAK1B,OAAO;AAAA,MACN,eAAe;AAAA,QACd,MAAM,aAAa,UAAU,EAAE,UAAU,MAAM,YAAY,aAAa,QAAQ,aAAa,SAAS,aAAa,CAAC;AAAA,QACpH,MAAM,iBAAiB,UAAU,EAAE,UAAU,MAAM,YAAY,sBAAsB,QAAQ,sBAAsB,SAAS,iBAAiB,CAAC;AAAA,MAC/I;AAAA,MACA,gBAAgB;AAAA,QACf,MAAM,UAAU,QAAQ;AAAA,QACxB,MAAM,YAAY,QAAQ;AAAA,QAC1B,MAAM,gBAAgB,QAAQ;AAAA,QAC9B,MAAM,YAAY,QAAQ;AAAA,QAC1B,MAAM,UAAU,SAAS,EAAE,gBAAgB,iCAAiC,CAAC;AAAA,MAC9E;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,IAA6C;AAAA,IAE3D,QAAQ;AAAA,MACP,eAAe,CAAC,MAAM,0BAA0B,WAAW,CAAE,CAAC,CAAC;AAAA,MAC/D,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA2B;AAAA;AAAA;AAAA;AAAA,IAMzC,eAAe;AAAA,MACd,eAAe,CAAC,MAAM,uBAAuB,UAAU,CAAE,CAAC,CAAC;AAAA,MAC3D,gBAAgB,CAAC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,mBAAmB,QAAQ,oBAAoB,CAAC,CAAC;AAAA,MACxH,UAAU;AAAA,MACV,aAAa;AAAA,IAA+C;AAAA,IAE7D,eAAe;AAAA,MACd,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,MACpD,gBAAgB,CAAC,MAAM,eAAe,SAAS,EAAE,gBAAgB,kBAAkB,CAAC,GAAG,MAAM,2BAA2B,QAAQ,CAAC;AAAA,MACjI,UAAU;AAAA,MACV,aAAa;AAAA,IAAmD;AAAA,IAEjE,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,MACpD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,GAAG,MAAM,cAAc,QAAQ,CAAC;AAAA,MAC3G,UAAU;AAAA,MACV,aAAa;AAAA,IAAwC;AAAA,IAEtD,iBAAiB;AAAA,MAChB,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,MACpD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,GAAG,MAAM,cAAc,QAAQ,CAAC;AAAA,MAC3G,UAAU;AAAA,MACV,aAAa;AAAA,IAA4C;AAAA,IAE1D,iBAAiB;AAAA,MAChB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,MACrF,gBAAgB,CAAC,MAAM,+BAA+B,SAAS,CAAC;AAAA,MAChE,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA;AAAA;AAAA;AAAA,IAM7C,YAAY;AAAA,MACX,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,iBAAiB,SAAS,EAAE,UAAU,MAAM,gBAAgB,oBAAoB,CAAC,CAAC;AAAA,MACrI,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,gBAAgB,UAAU,EAAE,SAAS,oBAAmB,CAAC,CAAC;AAAA,MAChF,gBAAgB,CAAC,MAAM,WAAW,QAAQ,CAAC;AAAA,MAC3C,UAAU;AAAA,MACV,aAAa;AAAA,IAAyB;AAAA,IAEvC,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,gBAAgB,UAAU,EAAE,SAAS,oBAAmB,CAAC,CAAC;AAAA,MAChF,gBAAgB,CAAC,MAAM,eAAe,WAAW,EAAE,QAAQ,iBAAiB,CAAC,CAAC;AAAA,MAC9E,UAAU;AAAA,MACV,aAAa;AAAA,IAA6B;AAAA;AAAA;AAAA;AAAA,IAM3C,uBAAuB;AAAA,MACtB,eAAe,CAAC,MAAM,sBAAsB,UAAU,CAAE,CAAC,GAAG,MAAM,wBAAwB,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,WAAW,CAAC;AAAA,MACxI,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MAC5E,UAAU;AAAA,MACV,aAAa;AAAA,IAAkC;AAAA,IAEhD,uBAAuB;AAAA,MACtB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,sBAAsB,QAAQ,GAAG,MAAM,wBAAwB,QAAQ,GAAG,MAAM,sBAAsB,aAAa,CAAC;AAAA,MAC3I,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA,IAE5C,kBAAkB;AAAA,MACjB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,SAAS,QAAQ,GAAG,MAAM,mBAAmB,QAAQ,CAAC;AAAA,MAC7E,UAAU;AAAA,MACV,aAAa;AAAA,IAA2B;AAAA,IAEzC,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MAC5E,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,kBAAkB;AAAA,MACjB,eAAe,CAAC,MAAM,kBAAkB,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,WAAW,CAAE,CAAC,GAAG,MAAM,kBAAkB,aAAa,GAAG,MAAM,sBAAsB,WAAW,CAAE,CAAC,CAAC;AAAA,MAClL,gBAAgB,CAAC,MAAM,iBAAiB,SAAS,EAAE,gBAAgB,mBAAmB,CAAC,CAAC;AAAA,MACxF,UAAU;AAAA,MACV,aAAa;AAAA,IAAuC;AAAA;AAAA;AAAA;AAAA,IAMrD,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,sCAAsC,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,WAAW,EAAE,QAAQ,gBAAgB,CAAC,CAAC;AAAA,MACzI,gBAAgB,CAAC,MAAM,gBAAgB,SAAS,EAAE,gBAAgB,eAAe,QAAQ,eAAe,CAAC,CAAC;AAAA,MAC1G,UAAU;AAAA,MACV,aAAa;AAAA,IAAwC;AAAA,IAEtD,wBAAwB;AAAA,MACvB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,eAAe,UAAU,EAAE,YAAY,cAAc,CAAC,CAAC;AAAA,MAC9E,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,gCAAgC;AAAA,MAC/B,eAAe,CAAC,MAAM,WAAW,WAAW,CAAE,CAAC,CAAC;AAAA,MAChD,gBAAgB,CAAC,MAAM,eAAe,UAAU,EAAE,YAAY,eAAe,QAAQ,cAAc,CAAC,CAAC;AAAA,MACrG,UAAU;AAAA,MACV,aAAa;AAAA,IAA4C;AAAA,IAE1D,qBAAqB;AAAA,MACpB,eAAe;AAAA,QACd,MAAM,sCAAsC,UAAU,CAAE,CAAC;AAAA,QACzD,MAAM,qBAAqB,WAAW,CAAE,CAAC;AAAA,QACzC,MAAM,sCAAsC,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACxE;AAAA,MACA,gBAAgB;AAAA,QACf,MAAM,oBAAoB,QAAQ;AAAA,QAClC,MAAM,4BAA4B,WAAW;AAAA,QAC7C,MAAM,gBAAgB,UAAU,EAAE,QAAQ,gBAAgB,CAAC;AAAA,QAC3D,MAAM,mBAAmB,UAAU,EAAE,QAAQ,kBAAkB,CAAC;AAAA,MACjE;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,IAAuC;AAAA;AAAA;AAAA;AAAA,IAMrD,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,oBAAoB,UAAU,EAAE,YAAY,wBAAwB,CAAC,CAAC;AAAA,MAClI,gBAAgB,CAAC,MAAM,YAAY,QAAQ,GAAG,MAAM,gBAAgB,KAAK,CAAC;AAAA,MAC1E,UAAU;AAAA,MACV,aAAa;AAAA,IAAqB;AAAA,IAEnC,kBAAkB;AAAA,MACjB,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,iBAAiB,OAAO,CAAE,CAAC,GAAG,MAAM,eAAe,OAAO,CAAE,CAAC,CAAC;AAAA,MACtH,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,eAAe,CAAC,CAAC;AAAA,MAC9E,UAAU;AAAA,MACV,aAAa;AAAA,IAAqC;AAAA;AAAA;AAAA;AAAA,IAMnD,oBAAoB;AAAA,MACnB,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,YAAY,UAAU,EAAE,SAAS,uBAAsB,CAAC;AAAA,QAC9D,MAAM,sBAAsB,UAAU,EAAE,UAAU,MAAM,YAAY,sBAAsB,SAAS,qBAAqB,CAAC;AAAA,MAC1H;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAyB;AAAA,IAEvC,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,0BAA0B,WAAW,CAAE,CAAC,CAAC;AAAA,MAC/D,gBAAgB,CAAC,MAAM,uBAAuB,KAAK,GAAG,MAAM,WAAW,SAAS,EAAE,gBAAgB,eAAe,CAAC,CAAC;AAAA,MACnH,UAAU;AAAA,MACV,aAAa;AAAA,IAAuB;AAAA,IAErC,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,SAAS,OAAO,CAAE,CAAC,CAAC;AAAA,MAC1C,gBAAgB,CAAC,MAAM,gBAAgB,UAAU,EAAE,YAAY,gBAAgB,QAAQ,gBAAgB,SAAS,eAAe,CAAC,CAAC;AAAA,MACjI,UAAU;AAAA,MACV,aAAa;AAAA,IAAwB;AAAA,IAEtC,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,SAAS,OAAO,CAAE,CAAC,CAAC;AAAA,MAC1C,gBAAgB,CAAC,MAAM,gBAAgB,UAAU,EAAE,YAAY,gBAAgB,QAAQ,gBAAgB,SAAS,eAAe,CAAC,CAAC;AAAA,MACjI,UAAU;AAAA,MACV,aAAa;AAAA,IAAqB;AAAA;AAAA;AAAA;AAAA,IAMnC,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,iBAAiB,UAAU,CAAE,CAAC,CAAC;AAAA,MAC5H,gBAAgB,CAAC,MAAM,iBAAiB,UAAU,EAAE,YAAY,iBAAiB,QAAQ,iBAAiB,SAAS,gBAAgB,CAAC,CAAC;AAAA,MACrI,UAAU;AAAA,MACV,aAAa;AAAA,IAAiB;AAAA,IAE/B,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,cAAc,UAAU,CAAE,CAAC,CAAC;AAAA,MAClD,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAoB;AAAA,IAElC,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,cAAc,UAAU,CAAE,CAAC,GAAG,MAAM,iBAAiB,UAAU,CAAE,CAAC,CAAC;AAAA,MACzF,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAoB;AAAA,IAElC,iBAAiB;AAAA,MAChB,eAAe,CAAC,MAAM,0BAA0B,WAAW,CAAE,CAAC,CAAC;AAAA,MAC/D,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,iBAAiB,QAAQ,UAAU,CAAC,CAAC;AAAA,MAClG,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,eAAe;AAAA,MACd,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,MACrF,gBAAgB,CAAC,MAAM,gBAAgB,SAAS,GAAG,MAAM,SAAS,UAAU,EAAE,UAAU,MAAM,YAAY,iBAAiB,QAAQ,iBAAiB,SAAS,QAAQ,CAAC,CAAC;AAAA,MACvK,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA;AAAA;AAAA;AAAA,IAM/C,mBAAmB;AAAA,MAClB,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,qBAAqB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,QACvD,MAAM,sBAAsB,WAAW,CAAE,CAAC;AAAA,QAC1C,MAAM,kBAAkB,WAAW,CAAE,CAAC;AAAA,MACvC;AAAA,MACA,gBAAgB,CAAC,MAAM,UAAU,eAAe,EAAE,UAAU,KAAK,CAAC,GAAG,MAAM,6BAA6B,SAAS,EAAE,gBAAgB,kBAAkB,UAAU,KAAK,CAAC,CAAC;AAAA,MACtK,UAAU;AAAA,MACV,aAAa;AAAA,IAA2B;AAAA,IAEzC,0BAA0B;AAAA,MACzB,eAAe;AAAA,QACd,MAAM,kBAAkB,UAAU,CAAE,CAAC;AAAA,QACrC,MAAM,uBAAuB,UAAU,CAAE,CAAC;AAAA,QAC1C,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MACjC;AAAA,MACA,gBAAgB,CAAC,MAAM,cAAc,QAAQ,GAAG,MAAM,mBAAmB,QAAQ,CAAC;AAAA,MAClF,UAAU;AAAA,MACV,aAAa;AAAA,IAA6C;AAAA,IAE3D,mCAAmC;AAAA,MAClC,eAAe,CAAC,MAAM,WAAW,WAAW,CAAE,CAAC,CAAC;AAAA,MAChD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,CAAC;AAAA,MAC3C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgD;AAAA;AAAA;AAAA;AAAA,IAM9D,cAAc;AAAA,MACb,eAAe,CAAC,MAAM,OAAO,UAAU,CAAE,CAAC,CAAC;AAAA,MAC3C,gBAAgB,CAAC,MAAM,UAAU,SAAS,CAAC;AAAA,MAC3C,UAAU;AAAA,MACV,aAAa;AAAA,IAAsB;AAAA,IAEpC,uBAAuB;AAAA,MACtB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAA2B;AAAA;AAAA;AAAA;AAAA,IAMzC,oBAAoB;AAAA,MACnB,eAAe,CAAC,MAAM,qBAAqB,eAAe,CAAE,CAAC,GAAG,MAAM,kBAAkB,UAAU,CAAE,CAAC,CAAC;AAAA,MACtG,gBAAgB,CAAC,MAAM,mCAAmC,aAAa,CAAC;AAAA,MACxE,UAAU;AAAA,MACV,aAAa;AAAA,IAAwC;AAAA;AAAA;AAAA;AAAA,IAMtD,0BAA0B;AAAA,MACzB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAAsC;AAAA;AAAA;AAAA;AAAA,IAMpD,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,sBAAsB,QAAQ,GAAG,MAAM,sBAAsB,QAAQ,GAAG,MAAM,mBAAmB,aAAa,CAAC;AAAA,MACtI,UAAU;AAAA,MACV,aAAa;AAAA,IAAyB;AAAA,IAEvC,0BAA0B;AAAA,MACzB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,aAAa,QAAQ,CAAC;AAAA,MACzE,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA;AAAA;AAAA;AAAA,IAM5C,eAAe;AAAA,MACd,eAAe;AAAA,QACd,MAAM,eAAe,UAAU,EAAE,YAAY,iBAAiB,SAAS,cAAc,CAAC;AAAA,QACtF,MAAM,cAAc,WAAW,CAAE,CAAC;AAAA,QAClC,MAAM,4BAA4B,WAAW,CAAE,CAAC;AAAA,QAChD,MAAM,wDAAwD,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAC1F;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,GAAG,MAAM,aAAa,QAAQ,GAAG,MAAM,WAAW,QAAQ,CAAC;AAAA,MACtG,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,qBAAqB;AAAA,MACpB,eAAe;AAAA,QACd,MAAM,sCAAsC,UAAU,CAAE,CAAC;AAAA,QACzD,MAAM,iBAAiB,UAAU,EAAE,YAAY,iBAAiB,SAAS,gBAAgB,CAAC;AAAA,QAC1F,MAAM,cAAc,WAAW,CAAE,CAAC;AAAA,QAClC,MAAM,kCAAkC,WAAW,CAAE,CAAC;AAAA,QACtD,MAAM,kBAAkB,WAAW,CAAE,CAAC;AAAA,MACvC;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,GAAG,MAAM,mBAAmB,QAAQ,CAAC;AAAA,MAChF,UAAU;AAAA,MACV,aAAa;AAAA,IAA0B;AAAA,IAExC,qBAAqB;AAAA,MACpB,eAAe;AAAA,QACd,MAAM,sCAAsC,UAAU,CAAE,CAAC;AAAA,QACzD,MAAM,+BAA+B,UAAU,CAAE,CAAC;AAAA,QAClD,MAAM,eAAe,UAAU,EAAE,UAAU,MAAM,YAAY,sBAAsB,SAAS,cAAc,CAAC;AAAA,QAC3G,MAAM,sBAAsB,UAAU,CAAE,CAAC;AAAA,QACzC,MAAM,oBAAoB,UAAU,EAAE,UAAU,MAAM,YAAY,oBAAoB,SAAS,mBAAmB,CAAC;AAAA,MACpH;AAAA,MACA,gBAAgB,CAAC,MAAM,mBAAmB,QAAQ,GAAG,MAAM,SAAS,SAAS,CAAC;AAAA,MAC9E,UAAU;AAAA,MACV,aAAa;AAAA,IAAiD;AAAA,IAE/D,eAAe;AAAA,MACd,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAmB;AAAA,IAEjC,4BAA4B;AAAA,MAC3B,eAAe,CAAC,MAAM,qBAAqB,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,aAAa,CAAG,CAAC,CAAC;AAAA,MAC/F,gBAAgB,CAAC,MAAM,0BAA0B,SAAS,CAAC;AAAA,MAC3D,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA,IAE/C,8BAA8B;AAAA,MAC7B,eAAe,CAAC,MAAM,qBAAqB,UAAU,CAAE,CAAC,CAAC;AAAA,MACzD,gBAAgB,CAAC,MAAM,0BAA0B,SAAS,CAAC;AAAA,MAC3D,UAAU;AAAA,MACV,aAAa;AAAA,IAAuC;AAAA,IAErD,gBAAgB;AAAA,MACf,eAAe;AAAA,QACd,MAAM,kBAAkB,SAAS,EAAE,gBAAgB,iBAAiB,SAAS,iBAAiB,CAAC;AAAA,QAC/F,MAAM,cAAc,WAAW,CAAE,CAAC;AAAA,QAClC,MAAM,4BAA4B,WAAW,CAAE,CAAC;AAAA,QAChD,MAAM,wDAAwD,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAC1F;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,GAAG,MAAM,iBAAiB,KAAK,CAAC;AAAA,MAC3E,UAAU;AAAA,MACV,aAAa;AAAA,IAAyC;AAAA,IAEvD,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,sCAAsC,UAAU,CAAE,CAAC,CAAC;AAAA,MAC1E,gBAAgB,CAAC,MAAM,WAAW,SAAS,GAAG,MAAM,mBAAmB,QAAQ,CAAC;AAAA,MAChF,UAAU;AAAA,MACV,aAAa;AAAA,IAAsC;AAAA,IAEpD,mBAAmB;AAAA,MAClB,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,sBAAsB,SAAS,CAAC;AAAA,MACvD,UAAU;AAAA,MACV,aAAa;AAAA,IAAmF;AAAA,IAEjG,yBAAyB;AAAA,MACxB,eAAe,CAAC,MAAM,4BAA4B,WAAW,CAAE,CAAC,GAAG,MAAM,gBAAgB,WAAW,CAAE,CAAC,CAAC;AAAA,MACxG,gBAAgB,CAAC,MAAM,gBAAgB,SAAS,EAAE,gBAAgB,cAAc,CAAC,CAAC;AAAA,MAClF,UAAU;AAAA,MACV,aAAa;AAAA,IAA4C;AAAA,IAE1D,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,WAAW,WAAW,CAAE,CAAC,CAAC;AAAA,MAChD,gBAAgB,CAAC,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgC;AAAA,IAE9C,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,WAAW,UAAU,EAAE,YAAY,iBAAiB,SAAS,UAAU,CAAC,CAAC;AAAA,MAC/F,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAkC;AAAA,IAEhD,uBAAuB;AAAA,MACtB,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,aAAa,SAAS,UAAU,CAAC,CAAC;AAAA,MAC/F,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA;AAAA;AAAA;AAAA,IAM5C,eAAe;AAAA,MACd,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,CAAC;AAAA,MAChD,gBAAgB,CAAC,MAAM,gBAAgB,QAAQ,GAAG,MAAM,oBAAoB,UAAU,EAAE,YAAY,wBAAwB,CAAC,GAAG,MAAM,mBAAmB,KAAK,CAAC;AAAA,MAC/J,UAAU;AAAA,MACV,aAAa;AAAA,IAAwC;AAAA,IAEtD,8BAA8B;AAAA,MAC7B,eAAe,CAAC,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,MACnD,gBAAgB,CAAC,MAAM,eAAe,aAAa,GAAG,MAAM,gBAAgB,aAAa,GAAG,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC1H,UAAU;AAAA,MACV,aAAa;AAAA,IAAyB;AAAA,IAEvC,0CAA0C;AAAA,MACzC,eAAe;AAAA,QACd,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,QAChC,MAAM,YAAY,WAAW,CAAE,CAAC;AAAA,MACjC;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,QAAQ,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MACtG,UAAU;AAAA,MACV,aAAa;AAAA,IAAsC;AAAA,IAEpD,4BAA4B;AAAA,MAC3B,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,CAAC;AAAA,MAChD,gBAAgB,CAAC,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAA6B;AAAA,IAE3C,sCAAsC;AAAA,MACrC,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,aAAa,aAAa,CAAC;AAAA,MAClD,UAAU;AAAA,MACV,aAAa;AAAA,IAAiD;AAAA,IAE/D,4CAA4C;AAAA,MAC3C,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,oBAAoB,UAAU,EAAE,YAAY,yBAAyB,SAAS,mBAAmB,CAAC,CAAC;AAAA,MAC/J,gBAAgB,CAAC,MAAM,eAAe,aAAa,GAAG,MAAM,gBAAgB,aAAa,GAAG,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC1H,UAAU;AAAA,MACV,aAAa;AAAA,IAAyC;AAAA,IAEvD,oBAAoB;AAAA,MACnB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,YAAY,SAAS,CAAC;AAAA,MAC7C,UAAU;AAAA,MACV,aAAa;AAAA,IAA2B;AAAA,IAEzC,+BAA+B;AAAA,MAC9B,eAAe;AAAA,QACd,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,oBAAoB,UAAU,EAAE,YAAY,yBAAyB,UAAU,MAAM,SAAS,mBAAmB,CAAC;AAAA,QACxH,MAAM,qBAAqB,WAAW,CAAE,CAAC;AAAA,QACzC,MAAM,sBAAsB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACxD;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,QAAQ,GAAG,MAAM,gBAAgB,KAAK,CAAC;AAAA,MAC1E,UAAU;AAAA,MACV,aAAa;AAAA,IAA6C;AAAA,IAE3D,kBAAkB;AAAA,MACjB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,sBAAsB,SAAS,CAAC;AAAA,MACvD,UAAU;AAAA,MACV,aAAa;AAAA,IAA2C;AAAA,IAEzD,8BAA8B;AAAA,MAC7B,eAAe;AAAA,QACd,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,iBAAiB,OAAO,CAAE,CAAC;AAAA,QACjC,MAAM,eAAe,OAAO,CAAE,CAAC;AAAA,QAC/B,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,MAC3C;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,2BAA2B,CAAC,CAAC;AAAA,MAC1F,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,+CAA+C;AAAA,MAC9C,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,UAAU,SAAS,EAAE,gBAAgB,kBAAkB,SAAS,SAAS,CAAC,CAAC;AAAA,MACnI,gBAAgB,CAAC,MAAM,gBAAgB,SAAS,EAAE,gBAAgB,eAAe,SAAS,eAAe,CAAC,CAAC;AAAA,MAC3G,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,6BAA6B;AAAA,MAC5B,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,oBAAoB,UAAU,EAAE,YAAY,yBAAyB,UAAU,MAAM,SAAS,mBAAmB,CAAC;AAAA,QACxH,MAAM,iBAAiB,UAAU,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,QAAQ,GAAG,MAAM,gBAAgB,KAAK,CAAC;AAAA,MAC1E,UAAU;AAAA,MACV,aAAa;AAAA,IAAoC;AAAA,IAElD,qBAAqB;AAAA,MACpB,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAClF,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,MACjF,UAAU;AAAA,MACV,aAAa;AAAA,IAAsC;AAAA,IAEpD,qBAAqB;AAAA,MACpB,eAAe;AAAA,QACd,MAAM,sBAAsB,UAAU,EAAE,SAAS,yBAAwB,CAAC;AAAA,QAC1E,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,oBAAoB,UAAU,EAAE,YAAY,yBAAyB,UAAU,MAAM,SAAS,mBAAmB,CAAC;AAAA,QACxH,MAAM,qBAAqB,WAAW,CAAE,CAAC;AAAA,QACzC,MAAM,sBAAsB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,QACvD,MAAM,kBAAkB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,QACnD,MAAM,0BAA0B,SAAS,EAAE,UAAU,UAAU,SAAS,yBAAwB,CAAC;AAAA,MAClG;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,QAAQ,GAAG,MAAM,mBAAmB,KAAK,CAAC;AAAA,MAC7E,UAAU;AAAA,MACV,aAAa;AAAA,IAAyC;AAAA,IAEvD,0BAA0B;AAAA,MACzB,eAAe;AAAA,QACd,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,2BAA2B,UAAU,EAAE,SAAS,yBAAwB,CAAC;AAAA,QAC/E,MAAM,iBAAiB,OAAO,CAAE,CAAC;AAAA,QACjC,MAAM,eAAe,OAAO,CAAE,CAAC;AAAA,QAC/B,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,MAC3C;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,2BAA2B,CAAC,CAAC;AAAA,MAC1F,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA,IAE5C,uDAAuD;AAAA,MACtD,eAAe,CAAC,MAAM,aAAa,SAAS,EAAE,UAAU,SAAQ,CAAC,GAAG,MAAM,UAAU,SAAS,EAAE,gBAAgB,kBAAkB,SAAS,SAAS,CAAC,CAAC;AAAA,MACrJ,gBAAgB;AAAA,QACf,MAAM,6BAA6B,SAAS,EAAE,gBAAgB,wBAAwB,CAAC;AAAA,QACvF,MAAM,mBAAmB,SAAS,EAAE,gBAAgB,cAAc,CAAC;AAAA,MACpE;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,IAAwC;AAAA,IAEtD,gCAAgC;AAAA,MAC/B,eAAe,CAAC,MAAM,QAAQ,UAAU,EAAE,YAAY,8BAA8B,QAAQ,8BAA8B,SAAS,OAAO,CAAC,CAAC;AAAA,MAC5I,gBAAgB;AAAA,QACf,MAAM,QAAQ,UAAU,EAAE,YAAY,+BAA+B,QAAQ,+BAA+B,SAAS,OAAO,CAAC;AAAA,QAC7H,MAAM,YAAY,SAAS,EAAE,gBAAgB,uBAAuB,CAAC;AAAA,MACtE;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA,IAE5C,mBAAmB;AAAA,MAClB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,kBAAkB,QAAQ,CAAC;AAAA,MAClD,UAAU;AAAA,MACV,aAAa;AAAA,IAAsB;AAAA,IAEpC,gCAAgC;AAAA,MAC/B,eAAe;AAAA,QACd,MAAM,cAAc,UAAU,CAAE,CAAC;AAAA,QACjC,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,kBAAkB,UAAU,CAAE,CAAC;AAAA,MACtC;AAAA,MACA,gBAAgB,CAAC,MAAM,qBAAqB,QAAQ,CAAC;AAAA,MACrD,UAAU;AAAA,MACV,aAAa;AAAA,IAA0C;AAAA,IAExD,iBAAiB;AAAA,MAChB,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,qBAAqB,UAAU,CAAE,CAAC,CAAC;AAAA,MAC3F,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,eAAe,CAAC,CAAC;AAAA,MAC9E,UAAU;AAAA,MACV,aAAa;AAAA,IAAqB;AAAA;AAAA;AAAA;AAAA,IAMnC,2BAA2B;AAAA,MAC1B,eAAe,CAAC,MAAM,kBAAkB,OAAO,CAAE,CAAC,GAAG,MAAM,iBAAiB,OAAO,CAAE,CAAC,GAAG,MAAM,eAAe,OAAO,CAAE,CAAC,CAAC;AAAA,MACzH,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA+C;AAAA,IAE7D,4BAA4B;AAAA,MAC3B,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,sBAAsB,UAAU,EAAE,UAAU,MAAM,YAAY,qBAAqB,CAAC;AAAA,MAC3F;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgC;AAAA,IAE9C,wBAAwB;AAAA,MACvB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,SAAS,OAAO,CAAE,CAAC,CAAC;AAAA,MAC1C,gBAAgB,CAAC,MAAM,SAAS,UAAU,EAAE,YAAY,uBAAuB,CAAC,CAAC;AAAA,MACjF,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,qBAAqB;AAAA,MACpB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,SAAS,OAAO,CAAE,CAAC,CAAC;AAAA,MAC1C,gBAAgB,CAAC,MAAM,SAAS,UAAU,EAAE,YAAY,uBAAuB,CAAC,CAAC;AAAA,MACjF,UAAU;AAAA,MACV,aAAa;AAAA,IAAgC;AAAA,IAE9C,wBAAwB;AAAA,MACvB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,0BAA0B,WAAW,CAAE,CAAC,CAAC;AAAA,MAC/D,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,uBAAuB,CAAC,GAAG,MAAM,mBAAmB,KAAK,CAAC;AAAA,MACvH,UAAU;AAAA,MACV,aAAa;AAAA,IAA4B;AAAA,IAE1C,mCAAmC;AAAA,MAClC,eAAe;AAAA,QACd,MAAM,kBAAkB,OAAO,CAAE,CAAC;AAAA,QAClC,MAAM,iBAAiB,OAAO,CAAE,CAAC;AAAA,QACjC,MAAM,eAAe,OAAO,CAAE,CAAC;AAAA,QAC/B,MAAM,sBAAsB,OAAO,CAAE,CAAC;AAAA,QACtC,MAAM,oBAAoB,OAAO,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgC;AAAA;AAAA;AAAA;AAAA,IAM9C,oCAAoC;AAAA,MACnC,eAAe,CAAC,MAAM,sCAAsC,UAAU,CAAE,CAAC,CAAC;AAAA,MAC1E,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,oBAAoB,CAAC,CAAC;AAAA,MACpF,UAAU;AAAA,MACV,aAAa;AAAA,IAA+C;AAAA,IAE7D,kCAAkC;AAAA,MACjC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,aAAa,QAAQ,GAAG,MAAM,UAAU,aAAa,CAAC;AAAA,MAC7E,UAAU;AAAA,MACV,aAAa;AAAA,IAAqC;AAAA,IAEnD,uBAAuB;AAAA,MACtB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,aAAa,QAAQ,GAAG,MAAM,UAAU,aAAa,CAAC;AAAA,MAC7E,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,4CAA4C;AAAA,MAC3C,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,cAAc,aAAa,CAAG,CAAC;AAAA,QACrC,MAAM,sBAAsB,WAAW,CAAE,CAAC;AAAA,QAC1C,MAAM,kBAAkB,WAAW,CAAE,CAAC;AAAA,MACvC;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,MAChF,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,4BAA4B;AAAA,MAC3B,eAAe,CAAC,MAAM,cAAc,aAAa,CAAG,CAAC,CAAC;AAAA,MACtD,gBAAgB,CAAC,MAAM,gBAAgB,SAAS,EAAE,gBAAgB,cAAc,CAAC,CAAC;AAAA,MAClF,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA,IAE/C,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAChF,gBAAgB,CAAC,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC7C,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,kCAAkC;AAAA,MACjC,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MAClF,gBAAgB,CAAC,MAAM,aAAa,aAAa,CAAC;AAAA,MAClD,UAAU;AAAA,MACV,aAAa;AAAA,IAAuC;AAAA,IAErD,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,YAAY,QAAQ,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA0B;AAAA,IAExC,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,cAAc,SAAS,EAAE,gBAAgB,wBAAwB,SAAS,aAAY,CAAC,CAAC;AAAA,MAC9G,gBAAgB,CAAC,MAAM,YAAY,SAAS,CAAC;AAAA,MAC7C,UAAU;AAAA,MACV,aAAa;AAAA,IAA0B;AAAA,IAExC,2BAA2B;AAAA,MAC1B,eAAe;AAAA,QACd,MAAM,uBAAuB,UAAU,CAAE,CAAC;AAAA,QAC1C,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,QAC1C,MAAM,8BAA8B,WAAW,CAAE,CAAC;AAAA,MACnD;AAAA,MACA,gBAAgB,CAAC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,8BAA8B,CAAC,CAAC;AAAA,MACvG,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,2BAA2B;AAAA,MAC1B,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,QAC1C,MAAM,8BAA8B,WAAW,CAAE,CAAC;AAAA,MACnD;AAAA,MACA,gBAAgB,CAAC,MAAM,eAAe,SAAS,EAAE,gBAAgB,8BAA8B,CAAC,GAAG,MAAM,2BAA2B,QAAQ,CAAC;AAAA,MAC7I,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,2CAA2C;AAAA,MAC1C,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,4BAA4B,CAAC,CAAC;AAAA,MACrG,UAAU;AAAA,MACV,aAAa;AAAA,IAAqC;AAAA,IAEnD,wCAAwC;AAAA,MACvC,eAAe,CAAC,MAAM,qBAAqB,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,aAAa,CAAG,CAAC,CAAC;AAAA,MAC/F,gBAAgB,CAAC,MAAM,eAAe,UAAU,EAAE,YAAY,cAAc,CAAC,CAAC;AAAA,MAC9E,UAAU;AAAA,MACV,aAAa;AAAA,IAA+C;AAAA,IAE7D,0BAA0B;AAAA,MACzB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,EAAE,UAAU,KAAI,CAAC,CAAC;AAAA,MAC9F,gBAAgB,CAAC,MAAM,cAAc,aAAa,CAAC;AAAA,MACnD,UAAU;AAAA,MACV,aAAa;AAAA,IAAoC;AAAA,IAElD,mCAAmC;AAAA,MAClC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,qBAAqB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,QACvD,MAAM,sBAAsB,WAAW,CAAE,CAAC;AAAA,QAC1C,MAAM,kBAAkB,WAAW,CAAE,CAAC;AAAA,QACtC,MAAM,iBAAiB,UAAU,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,UAAU,aAAa,GAAG,MAAM,6BAA6B,SAAS,EAAE,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,MAClI,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,4DAA4D;AAAA,MAC3D,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,cAAc,aAAa,CAAG,CAAC;AAAA,QACrC,MAAM,sBAAsB,WAAW,CAAE,CAAC;AAAA,QAC1C,MAAM,kBAAkB,WAAW,CAAE,CAAC;AAAA,QACtC,MAAM,iBAAiB,UAAU,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,UAAU,aAAa,GAAG,MAAM,6BAA6B,SAAS,EAAE,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,MAClI,UAAU;AAAA,MACV,aAAa;AAAA,IAA4C;AAAA,IAE1D,2CAA2C;AAAA,MAC1C,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,uBAAuB,UAAU,CAAE,CAAC;AAAA,QAC1C,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,QAC1C,MAAM,8BAA8B,WAAW,CAAE,CAAC;AAAA,QAClD,MAAM,iBAAiB,UAAU,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,8BAA8B,CAAC,CAAC;AAAA,MACvG,UAAU;AAAA,MACV,aAAa;AAAA,IAA4C;AAAA,IAE1D,2CAA2C;AAAA,MAC1C,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,QAC1C,MAAM,8BAA8B,WAAW,CAAE,CAAC;AAAA,QAClD,MAAM,iBAAiB,UAAU,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,eAAe,SAAS,EAAE,gBAAgB,8BAA8B,CAAC,GAAG,MAAM,2BAA2B,QAAQ,CAAC;AAAA,MAC7I,UAAU;AAAA,MACV,aAAa;AAAA,IAA4C;AAAA,IAE1D,wBAAwB;AAAA,MACvB,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,UAAU,aAAa,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA,IAE/C,wCAAwC;AAAA,MACvC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,iBAAiB,UAAU,CAAE,CAAC,CAAC;AAAA,MACxF,gBAAgB,CAAC,MAAM,UAAU,aAAa,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAA8C;AAAA,IAE5D,0CAA0C;AAAA,MACzC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,iBAAiB,SAAS,WAAW,CAAC,CAAC;AAAA,MACrG,UAAU;AAAA,MACV,aAAa;AAAA,IAA0C;AAAA,IAExD,2CAA2C;AAAA,MAC1C,eAAe;AAAA,QACd,MAAM,gBAAgB,UAAU,EAAE,SAAS,yBAAwB,CAAC;AAAA,QACpE,MAAM,YAAY,eAAe,EAAE,SAAS,YAAY,SAAS,SAAQ,CAAC;AAAA,MAC3E;AAAA,MACA,gBAAgB,CAAC,MAAM,eAAe,SAAS,EAAE,gBAAgB,qBAAqB,CAAC,CAAC;AAAA,MACxF,UAAU;AAAA,MACV,aAAa;AAAA,IAAiD;AAAA,IAE/D,iCAAiC;AAAA,MAChC,eAAe,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,iBAAiB,SAAS,SAAQ,CAAC,CAAC;AAAA,MACjG,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAuC;AAAA,IAErD,iCAAiC;AAAA,MAChC,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,YAAY,QAAQ,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAuC;AAAA,IAErD,mCAAmC;AAAA,MAClC,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MAClF,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA0C;AAAA,IAExD,wCAAwC;AAAA,MACvC,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MAClF,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA+C;AAAA,IAE7D,kDAAkD;AAAA,MACjD,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,iBAAiB,SAAS,WAAW,CAAC,CAAC;AAAA,MACrG,UAAU;AAAA,MACV,aAAa;AAAA,IAA0C;AAAA,IAExD,wBAAwB;AAAA,MACvB,eAAe;AAAA,QACd,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,QAC1C,MAAM,2BAA2B,WAAW,CAAE,CAAC;AAAA,QAC/C,MAAM,oBAAoB,eAAe,EAAE,SAAS,SAAQ,CAAC;AAAA,MAC9D;AAAA,MACA,gBAAgB,CAAC,MAAM,UAAU,SAAS,EAAE,gBAAgB,2BAA2B,SAAS,SAAS,CAAC,CAAC;AAAA,MAC3G,UAAU;AAAA,MACV,aAAa;AAAA,IAA0C;AAAA;AAAA;AAAA;AAAA,IAMxD,qBAAqB;AAAA,MACpB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB;AAAA,QACf,MAAM,UAAU,QAAQ;AAAA,QACxB,MAAM,YAAY,QAAQ;AAAA,QAC1B,MAAM,gBAAgB,QAAQ;AAAA,QAC9B,MAAM,YAAY,QAAQ;AAAA,QAC1B,MAAM,eAAe,QAAQ;AAAA,QAC7B,MAAM,UAAU,SAAS,EAAE,gBAAgB,yBAAyB,SAAS,SAAS,CAAC;AAAA,MACxF;AAAA,MACA,UAAU;AAAA,MACV,aAAa;AAAA,IAAgC;AAAA,IAE9C,YAAY;AAAA,MACX,eAAe;AAAA,QACd,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,gBAAgB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,QAClD,MAAM,eAAe,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,QACjD,MAAM,SAAS,OAAO,CAAE,CAAC;AAAA,QACzB,MAAM,qBAAqB,UAAU,CAAE,CAAC;AAAA,QACxC,MAAM,sBAAsB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,QACxD,MAAM,oBAAoB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,MACvD;AAAA,MACA,gBAAgB,CAAC,MAAM,QAAQ,UAAU,EAAE,YAAY,YAAY,QAAQ,YAAY,SAAS,OAAO,CAAC,CAAC;AAAA,MACzG,UAAU;AAAA,MACV,aAAa;AAAA,IAAoB;AAAA,IAElC,gBAAgB;AAAA,MACf,eAAe;AAAA,QACd,MAAM,eAAe,UAAU,EAAE,SAAS,sBAAsB,SAAS,gBAAgB,UAAU,KAAI,CAAC;AAAA,QACxG,MAAM,eAAe,UAAU,EAAE,SAAS,sBAAsB,SAAS,gBAAgB,UAAU,KAAI,CAAC;AAAA,MACzG;AAAA,MACA,gBAAgB,CAAC,MAAM,mBAAmB,SAAS,CAAC;AAAA,MACpD,UAAU;AAAA,MACV,aAAa;AAAA,IAAkB;AAAA,IAEhC,YAAY;AAAA,MACX,eAAe,CAAC,MAAM,UAAU,UAAU,CAAE,CAAC,CAAC;AAAA,MAC9C,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgB;AAAA,IAE9B,YAAY;AAAA,MACX,eAAe,CAAC,MAAM,QAAQ,UAAU,EAAE,YAAY,WAAW,CAAC,CAAC;AAAA,MACnE,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgB;AAAA,IAE9B,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,sBAAsB,WAAW,CAAE,CAAC,CAAC;AAAA,MAC3D,gBAAgB,CAAC,MAAM,SAAS,SAAS,EAAE,gBAAgB,WAAW,CAAC,CAAC;AAAA,MACxE,UAAU;AAAA,MACV,aAAa;AAAA,IAAgB;AAAA,IAE9B,0BAA0B;AAAA,MACzB,eAAe;AAAA,QACd,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,QAChC,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,QAC5B,MAAM,yBAAyB,UAAU,EAAE,QAAQ,0BAAyB,CAAC;AAAA,QAC7E,MAAM,mBAAmB,UAAU,CAAE,CAAC;AAAA,QACtC,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,QAC/B,MAAM,wCAAwC,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,MAC3E;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,SAAS,CAAC;AAAA,MAC7C,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA,IAE5C,4BAA4B;AAAA,MAC3B,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,mBAAmB,UAAU,CAAE,CAAC,CAAC;AAAA,MACzF,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAkC;AAAA,IAEhD,4BAA4B;AAAA,MAC3B,eAAe;AAAA,QACd,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,QAC5B,MAAM,mBAAmB,UAAU,CAAE,CAAC;AAAA,QACtC,MAAM,0CAA0C,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,MAC7E;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAgC;AAAA,IAE9C,6BAA6B;AAAA,MAC5B,eAAe;AAAA,QACd,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,QAC5B,MAAM,yBAAyB,UAAU,EAAE,QAAQ,0BAAyB,CAAC;AAAA,QAC7E,MAAM,0CAA0C,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,MAC7E;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,QAAQ,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA,IAE/C,mCAAmC;AAAA,MAClC,eAAe,CAAC,MAAM,UAAU,UAAU,CAAE,CAAC,CAAC;AAAA,MAC9C,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,gBAAgB,CAAC,CAAC;AAAA,MAChF,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA,IAEjD,0CAA0C;AAAA,MACzC,eAAe,CAAC,MAAM,QAAQ,UAAU,CAAE,CAAC,CAAC;AAAA,MAC5C,gBAAgB,CAAC,MAAM,WAAW,SAAS,GAAG,MAAM,UAAU,QAAQ,CAAC;AAAA,MACvE,UAAU;AAAA,MACV,aAAa;AAAA,IAAmC;AAAA;AAAA;AAAA;AAAA,IAMjD,cAAc;AAAA,MACb,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,UAAU,SAAS,EAAE,gBAAgB,YAAY,CAAC,CAAC;AAAA,MAC1E,UAAU;AAAA,MACV,aAAa;AAAA,IAAiB;AAAA,IAE/B,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,aAAa,UAAU,EAAE,YAAY,aAAa,QAAQ,aAAa,SAAS,YAAY,CAAC,CAAC;AAAA,MACpH,gBAAgB,CAAC,MAAM,WAAW,QAAQ,CAAC;AAAA,MAC3C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiB;AAAA,IAE/B,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,aAAa,UAAU,EAAE,YAAY,YAAY,CAAC,CAAC;AAAA,MACzE,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiB;AAAA,IAE/B,aAAa;AAAA,MACZ,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiB;AAAA,IAE/B,mBAAmB;AAAA,MAClB,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,cAAc,UAAU,CAAE,CAAC;AAAA,QACjC,MAAM,cAAc,SAAS,EAAE,gBAAgB,+BAA+B,SAAS,SAAQ,CAAC;AAAA,MACjG;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAsB;AAAA,IAEpC,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,cAAc,UAAU,CAAE,CAAC,CAAC;AAAA,MACnF,gBAAgB,CAAC,MAAM,UAAU,QAAQ,CAAC;AAAA,MAC1C,UAAU;AAAA,MACV,aAAa;AAAA,IAAmB;AAAA,IAEjC,oCAAoC;AAAA,MACnC,eAAe,CAAC,MAAM,0BAA0B,WAAW,CAAE,CAAC,CAAC;AAAA,MAC/D,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA0C;AAAA;AAAA;AAAA;AAAA,IAMxD,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,MACnD,gBAAgB,CAAC,MAAM,eAAe,QAAQ,GAAG,MAAM,SAAS,QAAQ,CAAC;AAAA,MACzE,UAAU;AAAA,MACV,aAAa;AAAA,IAA0B;AAAA,IAExC,sBAAsB;AAAA,MACrB,eAAe,CAAC,MAAM,eAAe,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,CAAC;AAAA,MAClF,gBAAgB,CAAC,MAAM,sBAAsB,SAAS,CAAC;AAAA,MACvD,UAAU;AAAA,MACV,aAAa;AAAA,IAA0B;AAAA,IAExC,wBAAwB;AAAA,MACvB,eAAe,CAAC,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,MACnD,gBAAgB,CAAC,MAAM,eAAe,QAAQ,GAAG,MAAM,SAAS,QAAQ,CAAC;AAAA,MACzE,UAAU;AAAA,MACV,aAAa;AAAA,IAA4B;AAAA,IAE1C,wBAAwB;AAAA,MACvB,eAAe,CAAC,MAAM,eAAe,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,CAAC;AAAA,MAClF,gBAAgB,CAAC,MAAM,sBAAsB,SAAS,CAAC;AAAA,MACvD,UAAU;AAAA,MACV,aAAa;AAAA,IAA4B;AAAA;AAAA;AAAA;AAAA,IAM1C,oBAAoB;AAAA,MACnB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA,IAE/C,4BAA4B;AAAA,MAC3B,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC/C,UAAU;AAAA,MACV,aAAa;AAAA,IAAiC;AAAA,IAE/C,sBAAsB;AAAA,MACrB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,qBAAqB,eAAe,CAAE,CAAC,GAAG,MAAM,kBAAkB,UAAU,CAAE,CAAC,CAAC;AAAA,MACtG,gBAAgB,CAAC,MAAM,mCAAmC,aAAa,CAAC;AAAA,MACxE,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA;AAAA;AAAA;AAAA,IAM5C,+BAA+B;AAAA,MAC9B,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACxC,UAAU;AAAA,MACV,aAAa;AAAA,IAA8B;AAAA,IAE5C,kBAAkB;AAAA,MACjB,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA+B;AAAA,IAE7C,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,IAA6B;AAAA,IAE3C,0BAA0B;AAAA,MACzB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,UAAU,QAAQ,CAAC;AAAA,MAC1C,aAAa;AAAA,IAA8B;AAAA,IAE5C,wBAAwB;AAAA,MACvB,eAAe,CAAC,MAAM,qBAAqB,UAAU,CAAE,CAAC,CAAC;AAAA,MACzD,gBAAgB,CAAC,MAAM,cAAc,QAAQ,CAAC;AAAA,MAC9C,aAAa;AAAA,IAA6B;AAAA,IAE3C,8BAA8B;AAAA,MAC7B,eAAe,CAAC,MAAM,qBAAqB,UAAU,CAAE,CAAC,CAAC;AAAA,MACzD,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,cAAc,CAAC,CAAC;AAAA,MAC9E,aAAa;AAAA,IAAmC;AAAA,IAEjD,yBAAyB;AAAA,MACxB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MAC5E,aAAa;AAAA,IAA8B;AAAA,IAE5C,8CAA8C;AAAA,MAC7C,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,cAAc,QAAQ,GAAG,MAAM,qBAAqB,QAAQ,CAAC;AAAA,MACpF,aAAa;AAAA,IAA8C;AAAA,IAE5D,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,4CAA4C,aAAa,CAAG,CAAC,CAAC;AAAA,MAC1H,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,MAChF,aAAa;AAAA,IAAmB;AAAA,IAEjC,uCAAuC;AAAA,MACtC,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACd,MAAM,sBAAsB,UAAU,CAAE,CAAC;AAAA,QACzC,MAAM,wBAAwB,UAAU,CAAE,CAAC;AAAA,QAC3C,MAAM,YAAY,aAAa,CAAG,CAAC;AAAA,QACnC,MAAM,iBAAiB,UAAU,CAAE,CAAC;AAAA,MACrC;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,GAAG,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC1G,aAAa;AAAA,IAAyC;AAAA,IAEvD,2BAA2B;AAAA,MAC1B,eAAe;AAAA,QACd,MAAM,kBAAkB,UAAU,CAAE,CAAC;AAAA,QACrC,MAAM,gBAAgB,WAAW,CAAE,CAAC;AAAA,QACpC,MAAM,kBAAkB,eAAe,CAAE,CAAC;AAAA,QAC1C,MAAM,sBAAsB,WAAW,CAAE,CAAC;AAAA,MAC3C;AAAA,MACA,gBAAgB,CAAC,MAAM,iBAAiB,SAAS,EAAE,gBAAgB,2BAA2B,CAAC,CAAC;AAAA,MAChG,aAAa;AAAA,IAAgC;AAAA,IAE9C,cAAc;AAAA,MACb,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,aAAa,UAAU,EAAE,YAAY,YAAY,CAAC,CAAC;AAAA,MAC1E,aAAa;AAAA,IAAiB;AAAA,IAE/B,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,aAAa,SAAS,CAAC;AAAA,MAC9C,aAAa;AAAA,IAA4B;AAAA,IAE1C,wCAAwC;AAAA,MACvC,eAAe,CAAC,MAAM,mBAAmB,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,aAAa,CAAG,CAAC,CAAC;AAAA,MAC7F,gBAAgB,CAAC,MAAM,UAAU,SAAS,EAAE,gBAAgB,YAAY,CAAC,CAAC;AAAA,MAC1E,aAAa;AAAA,IAA0C;AAAA,IAExD,qBAAqB;AAAA,MACpB,eAAe;AAAA,QACd,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,QAC9B,MAAM,mBAAmB,UAAU,CAAE,CAAC;AAAA,MACvC;AAAA,MACA,gBAAgB,CAAC,MAAM,UAAU,SAAS,EAAE,gBAAgB,YAAY,CAAC,CAAC;AAAA,MAC1E,aAAa;AAAA,IAAyB;AAAA,IAEvC,8BAA8B;AAAA,MAC7B,eAAe,CAAC,MAAM,iBAAiB,UAAU,CAAE,CAAC,CAAC;AAAA,MACrD,gBAAgB,CAAC,MAAM,aAAa,UAAU,EAAE,YAAY,YAAY,CAAC,CAAC;AAAA,MAC1E,aAAa;AAAA,IAAqC;AAAA,IAEnD,mCAAmC;AAAA,MAClC,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,qBAAqB,CAAC,CAAC;AAAA,MACpF,aAAa;AAAA,IAAyC;AAAA,IAEvD,8BAA8B;AAAA,MAC7B,eAAe,CAAC,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,MACnD,gBAAgB,CAAC,MAAM,WAAW,QAAQ,GAAG,MAAM,gBAAgB,QAAQ,GAAG,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC1G,aAAa;AAAA,IAAoC;AAAA,IAElD,gBAAgB;AAAA,MACf,eAAe,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,CAAC;AAAA,MAChD,gBAAgB,CAAC,MAAM,YAAY,SAAS,EAAE,gBAAgB,eAAe,CAAC,CAAC;AAAA,MAC/E,aAAa;AAAA,IAAmB;AAAA;AAAA;AAAA;AAAA,IAMjC,yBAAyB;AAAA,MACxB,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,CAAC;AAAA,MAC/C,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,aAAa;AAAA,IAA8B;AAAA,IAE5C,oBAAoB;AAAA,MACnB,eAAe,CAAC,MAAM,UAAU,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,UAAU,EAAE,YAAY,eAAe,CAAC,CAAC;AAAA,MAC3G,gBAAgB,CAAC,MAAM,cAAc,QAAQ,GAAG,MAAM,WAAW,SAAS,CAAC;AAAA,MAC3E,aAAa;AAAA,IAA0B;AAAA;AAAA;AAAA;AAAA,IAMxC,yBAAyB;AAAA,MACxB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC7C,aAAa;AAAA,IAA8B;AAAA,IAE5C,0BAA0B;AAAA,MACzB,eAAe,CAAC,MAAM,oBAAoB,UAAU,CAAE,CAAC,CAAC;AAAA,MACxD,gBAAgB,CAAC,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC7C,aAAa;AAAA,IAAgC;AAAA,IAE9C,2BAA2B;AAAA,MAC1B,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,cAAc,SAAS,CAAC;AAAA,MAC/C,aAAa;AAAA,IAAwC;AAAA,IAEtD,oBAAoB;AAAA,MACnB,eAAe;AAAA,QACd,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,QACnC,MAAM,cAAc,WAAW,CAAE,CAAC;AAAA,QAClC,MAAM,mBAAmB,UAAU,CAAE,CAAC;AAAA,MACvC;AAAA,MACA,gBAAgB,CAAC,MAAM,YAAY,SAAS,CAAC;AAAA,MAC7C,aAAa;AAAA,IAAuB;AAAA,IAErC,mBAAmB;AAAA,MAClB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,aAAa;AAAA,IAAsB;AAAA,IAEpC,qBAAqB;AAAA,MACpB,eAAe;AAAA,QACd,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,QAClC,MAAM,2BAA2B,UAAU,CAAE,CAAC;AAAA,QAC9C,MAAM,oBAAoB,UAAU,CAAE,CAAC;AAAA,QACvC,MAAM,4BAA4B,UAAU,CAAE,CAAC;AAAA,QAC/C,MAAM,0BAA0B,UAAU,CAAE,CAAC;AAAA,QAC7C,MAAM,mBAAmB,SAAS,EAAE,UAAU,UAAU,SAAS,SAAQ,CAAC;AAAA,QAC1E,MAAM,wBAAwB,SAAS,EAAE,UAAU,UAAU,SAAS,SAAQ,CAAC;AAAA,MAChF;AAAA,MACA,gBAAgB,CAAC,MAAM,WAAW,SAAS,CAAC;AAAA,MAC5C,aAAa;AAAA,IAAwB;AAAA,IAEtC,mBAAmB;AAAA,MAClB,eAAe,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MACjD,gBAAgB,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,CAAC;AAAA,MACjD,aAAa;AAAA,IAAuB;AAAA,IAErC,gCAAgC;AAAA,MAC/B,eAAe,CAAC,MAAM,8BAA8B,OAAO,EAAE,SAAS,OAAM,CAAC,CAAC;AAAA,MAC9E,gBAAgB,CAAC,MAAM,kBAAkB,UAAU,CAAE,CAAC,GAAG,MAAM,qBAAqB,OAAO,CAAE,CAAC,GAAG,MAAM,yBAAyB,UAAU,CAAE,CAAC,CAAC;AAAA,MAC9I,aAAa;AAAA,IAAsC;AAAA,IAEpD,iCAAiC;AAAA,MAChC,eAAe,CAAC,MAAM,8BAA8B,OAAO,EAAE,SAAS,OAAM,CAAC,CAAC;AAAA,MAC9E,gBAAgB,CAAC,MAAM,iBAAiB,UAAU,CAAE,CAAC,GAAG,MAAM,iBAAiB,UAAU,EAAE,YAAY,iBAAiB,QAAQ,iBAAiB,SAAS,gBAAgB,CAAC,CAAC;AAAA,MAC5K,aAAa;AAAA,IAAuC;AAAA,IAErD,mBAAmB;AAAA,MAClB,eAAe,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,mBAAmB,UAAU,CAAE,CAAC,CAAC;AAAA,MAC7F,gBAAgB,CAAC,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,MAClD,aAAa;AAAA,IAAsB;AAAA,EAAE;AAEhC,MAAM,YAAY;AAAA,IACxB,WAAW,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,UAAU,EAAE,SAAS,sBAAsB,SAAS,YAAY,UAAU,KAAI,CAAC,CAAC;AAAA,IAChJ,oBAAoB,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,IACzD,eAAe,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,IAClF,sBAAsB,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,IACzF,yBAAyB;AAAA,MACxB,MAAM,mBAAmB,UAAU,CAAE,CAAC;AAAA,MACtC,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,cAAc,SAAS,EAAE,gBAAgB,iBAAiB,SAAS,aAAY,CAAC;AAAA,IACvF;AAAA,IACA,eAAe,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,IACtF,6BAA6B,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,IAClG,aAAa,CAAC,MAAM,uBAAuB,SAAS,EAAE,gBAAgB,+BAA+B,SAAS,uBAAuB,SAAS,SAAQ,CAAC,CAAC;AAAA,IACxJ,uBAAuB,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,UAAU,OAAO,EAAE,YAAY,mBAAmB,SAAS,cAAc,CAAC,CAAC;AAAA,IAC7K,WAAW;AAAA,MACV,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,SAAS,SAAS,EAAE,UAAU,UAAU,SAAS,QAAO,CAAC;AAAA,MAC/D,MAAM,UAAU,OAAO,EAAE,YAAY,mBAAmB,SAAS,cAAc,CAAC;AAAA,IACjF;AAAA,IACA,UAAU;AAAA,MACT,MAAM,UAAU,UAAU,CAAE,CAAC;AAAA,MAC7B,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,MAC/B,MAAM,YAAY,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAC7C,MAAM,gBAAgB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACjD,MAAM,YAAY,UAAU,EAAE,SAAS,gBAAe,CAAC;AAAA,MACvD,MAAM,eAAe,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAChD,MAAM,UAAU,SAAS,EAAE,gBAAgB,yBAAyB,SAAS,UAAU,SAAS,SAAQ,CAAC;AAAA,MACzG,MAAM,SAAS,OAAO,EAAE,SAAS,gBAAe,CAAC;AAAA,MACjD,MAAM,qBAAqB,UAAU,CAAE,CAAC;AAAA,MACxC,MAAM,sBAAsB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,MACxD,MAAM,oBAAoB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,IACvD;AAAA,IACA,sBAAsB,CAAC,MAAM,gCAAgC,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,OAAO,EAAE,YAAY,aAAa,SAAS,MAAM,CAAC,CAAC;AAAA,IACxL,4BAA4B;AAAA,MAC3B,MAAM,sBAAsB,UAAU,EAAE,SAAS,yBAAwB,CAAC;AAAA,MAC1E,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,oBAAoB,UAAU,EAAE,YAAY,yBAAyB,UAAU,MAAM,SAAS,mBAAmB,CAAC;AAAA,MACxH,MAAM,qBAAqB,WAAW,CAAE,CAAC;AAAA,MACzC,MAAM,sBAAsB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACvD,MAAM,kBAAkB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACnD,MAAM,0BAA0B,SAAS,EAAE,UAAU,UAAU,SAAS,yBAAwB,CAAC;AAAA,IAClG;AAAA,IACA,6BAA6B,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,OAAO,EAAE,YAAY,cAAc,SAAS,MAAM,CAAC,CAAC;AAAA,IAC1I,6BAA6B,CAAC,MAAM,WAAW,UAAU,EAAE,YAAY,iBAAiB,SAAS,UAAU,CAAC,CAAC;AAAA,IAC7G,kDAAkD,CAAC,MAAM,gBAAgB,UAAU,EAAE,SAAS,yBAAwB,CAAC,GAAG,MAAM,YAAY,eAAe,EAAE,SAAS,WAAU,CAAC,CAAC;AAAA,IAClL,eAAe;AAAA,MACd,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,MAC/B,MAAM,QAAQ,WAAW,CAAE,CAAC;AAAA,MAC5B,MAAM,gBAAgB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACjD,MAAM,oBAAoB,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MACrD,MAAM,uBAAuB,UAAU,CAAE,CAAC;AAAA,IAC3C;AAAA,IACA,oBAAoB;AAAA,MACnB,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,MAClC,MAAM,gBAAgB,OAAO,EAAE,SAAS,OAAM,CAAC;AAAA,MAC/C,MAAM,kBAAkB,OAAO,EAAE,SAAS,QAAO,CAAC;AAAA,MAClD,MAAM,aAAa,WAAW,CAAE,CAAC;AAAA,MACjC,MAAM,2BAA2B,OAAO,CAAE,CAAC;AAAA,IAC5C;AAAA,IACA,wBAAwB,CAAC,MAAM,cAAc,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,sBAAsB,WAAW,CAAE,CAAC,CAAC;AAAA,IAClN,kBAAkB;AAAA,MACjB,MAAM,gBAAgB,UAAU,EAAE,SAAS,mBAAkB,CAAC;AAAA,MAC9D,MAAM,0BAA0B,UAAU,EAAE,UAAU,MAAM,YAAY,0BAA0B,SAAS,yBAAyB,CAAC;AAAA,IACtI;AAAA,IACA,sBAAsB;AAAA,MACrB,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,MAC5B,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,kBAAkB,OAAO,CAAE,CAAC;AAAA,MAClC,MAAM,iBAAiB,OAAO,CAAE,CAAC;AAAA,MACjC,MAAM,eAAe,OAAO,CAAE,CAAC;AAAA,MAC/B,MAAM,sBAAsB,UAAU,EAAE,YAAY,sBAAsB,SAAS,qBAAqB,CAAC;AAAA,IAC1G;AAAA,IACA,cAAc,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,IACzL,eAAe,CAAC,MAAM,cAAc,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,qBAAqB,UAAU,CAAE,CAAC,CAAC;AAAA,IACnM,iBAAiB;AAAA,MAChB,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,sBAAsB,UAAU,CAAE,CAAC;AAAA,MACzC,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,MAC5B,MAAM,eAAe,WAAW,CAAE,CAAC;AAAA,MACnC,MAAM,UAAU,UAAU,CAAE,CAAC;AAAA,MAC7B,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,MAC/B,MAAM,kBAAkB,WAAW,CAAE,CAAC;AAAA,IACvC;AAAA,IACA,gBAAgB,CAAC,MAAM,cAAc,eAAe,EAAE,SAAS,aAAY,CAAC,CAAC;AAAA,IAC7E,eAAe,CAAC,MAAM,YAAY,OAAO,EAAE,YAAY,cAAc,SAAS,iBAAiB,CAAC,CAAC;AAAA,IACjG,iBAAiB,CAAC,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,CAAC;AAAA,IACzJ,mBAAmB,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,cAAc,UAAU,CAAE,CAAC,CAAC;AAAA,IACvF,kBAAkB;AAAA,MACjB,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,MAC5B,MAAM,YAAY,UAAU,EAAE,UAAU,MAAM,YAAY,iBAAiB,QAAQ,iBAAiB,SAAS,WAAW,CAAC;AAAA,IAC1H;AAAA,IACA,aAAa;AAAA,MACZ,MAAM,aAAa,UAAU,EAAE,QAAQ,YAAY,CAAC;AAAA,MACpD,MAAM,QAAQ,UAAU,CAAE,CAAC;AAAA,MAC3B,MAAM,oBAAoB,UAAU,CAAE,CAAC;AAAA,MACvC,MAAM,cAAc,UAAU,CAAE,CAAC;AAAA,MACjC,MAAM,YAAY,aAAa,EAAE,UAAU,KAAK,CAAC;AAAA,MACjD,MAAM,sCAAsC,UAAU,CAAE,CAAC;AAAA,MACzD,MAAM,kBAAkB,UAAU,EAAE,UAAU,KAAK,CAAC;AAAA,MACpD,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,IACnC;AAAA,IACA,cAAc;AAAA,MACb,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,IACnC;AAAA,IACA,gBAAgB,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,kBAAkB,UAAU,CAAE,CAAC,CAAC;AAAA,IAC1F,WAAW,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,UAAU,UAAU,CAAE,CAAC,CAAC;AAAA,IACnL,kBAAkB,CAAC,MAAM,QAAQ,UAAU,CAAE,CAAC,GAAG,MAAM,UAAU,UAAU,CAAE,CAAC,CAAC;AAAA,IAC/E,mBAAmB,CAAC,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,IAC3H,6BAA6B;AAAA,MAC5B,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,MAC5B,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,YAAY,UAAU,EAAE,YAAY,mCAAmC,QAAQ,mCAAmC,SAAS,WAAW,CAAC;AAAA,MAC7I,MAAM,aAAa,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAC9C,MAAM,aAAa,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAC9C,MAAM,eAAe,UAAU,EAAE,UAAU,KAAI,CAAC;AAAA,MAChD,MAAM,eAAe,WAAW,CAAE,CAAC;AAAA,MACnC,MAAM,oCAAoC,WAAW,CAAE,CAAC;AAAA,MACxD,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,MAClC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,gBAAe,CAAC;AAAA,MACtE,MAAM,mCAAmC,WAAW,CAAE,CAAC;AAAA,IACxD;AAAA,IACA,iCAAiC,CAAC,MAAM,WAAW,SAAS,EAAE,gBAAgB,8BAA6B,CAAC,CAAC;AAAA,IAC7G,6BAA6B;AAAA,MAC5B,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,MAC5B,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,MAClC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,gBAAe,CAAC;AAAA,IACvE;AAAA,IACA,6BAA6B;AAAA,MAC5B,MAAM,SAAS,UAAU,CAAE,CAAC;AAAA,MAC5B,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,MAClC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,gBAAe,CAAC;AAAA,IACvE;AAAA,IACA,oBAAoB,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,GAAG,MAAM,kBAAkB,SAAS,EAAE,UAAU,SAAQ,CAAC,CAAC;AAAA,IAClJ,UAAU;AAAA,MACT,MAAM,UAAU,UAAU,CAAE,CAAC;AAAA,MAC7B,MAAM,YAAY,UAAU,CAAE,CAAC;AAAA,MAC/B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,MAClC,MAAM,WAAW,WAAW,CAAE,CAAC;AAAA,MAC/B,MAAM,eAAe,WAAW,CAAE,CAAC;AAAA,MACnC,MAAM,SAAS,OAAO,EAAE,SAAS,gBAAe,CAAC;AAAA,MACjD,MAAM,UAAU,SAAS,EAAE,gBAAgB,iCAAgC,CAAC;AAAA,IAC7E;AAAA,IACA,gCAAgC,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,IACxI,eAAe,CAAC,MAAM,OAAO,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,CAAC;AAAA,IAC1E,uBAAuB,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,UAAU,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,IACjM,0BAA0B,CAAC,MAAM,0BAA0B,UAAU,EAAE,YAAY,oBAAoB,SAAS,yBAAyB,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,IAChL,oBAAoB,CAAC,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,sBAAsB,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,OAAO,CAAE,CAAC,CAAC;AAAA,IACrM,2BAA2B,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,CAAC;AAAA,IAC/H,gBAAgB,CAAC,MAAM,SAAS,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,eAAe,WAAW,CAAE,CAAC,GAAG,MAAM,eAAe,UAAU,CAAE,CAAC,CAAC;AAAA,IAChM,cAAc,CAAC,MAAM,QAAQ,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,SAAS,EAAE,UAAU,SAAQ,CAAC,CAAC;AAAA,IAC9F,0BAA0B;AAAA,MACzB,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,WAAW,UAAU,CAAE,CAAC;AAAA,MAC9B,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,aAAa,UAAU,CAAE,CAAC;AAAA,MAChC,MAAM,eAAe,UAAU,CAAE,CAAC;AAAA,MAClC,MAAM,qBAAqB,SAAS,EAAE,gBAAgB,gBAAe,CAAC;AAAA,IACvE;AAAA,IACA,aAAa,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,WAAW,OAAO,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,CAAC;AAAA,IACpJ,gBAAgB,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,YAAY,WAAW,CAAE,CAAC,CAAC;AAAA,IACtH,uBAAuB,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,SAAS,EAAE,gBAAgB,cAAa,CAAC,CAAC;AAAA,IAC1H,gBAAgB,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,aAAa,UAAU,CAAE,CAAC,GAAG,MAAM,mBAAmB,OAAO,CAAE,CAAC,CAAC;AAAA,IAChK,WAAW,CAAC,MAAM,aAAa,UAAU,EAAE,SAAS,yBAAwB,CAAC,CAAC;AAAA,IAC9E,2BAA2B,CAAC,MAAM,kBAAkB,OAAO,CAAE,CAAC,GAAG,MAAM,YAAY,OAAO,CAAE,CAAC,CAAC;AAAA,IAC9F,cAAc,CAAC,MAAM,WAAW,UAAU,CAAE,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAE,CAAC,GAAG,MAAM,SAAS,UAAU,CAAE,CAAC,CAAC;AAAA,IACnH,uBAAuB;AAAA,MACtB,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,kBAAkB,UAAU,CAAE,CAAC;AAAA,MACrC,MAAM,cAAc,OAAO,CAAE,CAAC;AAAA,MAC9B,MAAM,cAAc,UAAU,EAAE,SAAS,iBAAgB,CAAC;AAAA,MAC1D,MAAM,gBAAgB,UAAU,CAAE,CAAC;AAAA,MACnC,MAAM,oBAAoB,SAAS,EAAE,UAAU,SAAQ,CAAC;AAAA,IACzD;AAAA,IACA,oBAAoB,CAAC,MAAM,YAAY,UAAU,CAAE,CAAC,GAAG,MAAM,iBAAiB,OAAO,CAAE,CAAC,GAAG,MAAM,eAAe,OAAO,CAAE,CAAC,CAAC;AAAA,EAAE;;;ACvgEvH,WAAS,SAAS,WAA4B;AAEpD,QAAI,OAAO,cAAc,aAAa;AACrC,aAAO,gBAAgB,SAAS;AAAA,IACjC;AAEA,WAAO,eAAe,SAAS;AAAA,EAChC;AAEA,WAAS,gBAAgB,WAA4B;AACpD,UAAM,SAAS,IAAI,UAAU;AAC7B,UAAM,MAAM,OAAO,gBAAgB,WAAW,UAAU;AACxD,UAAM,OAAO,IAAI;AAEjB,QAAI,CAAC,MAAM;AACV,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAC/C;AAEA,WAAO,aAAa,IAAI;AAAA,EACzB;AAEA,WAAS,aAAa,SAA2B;AAChD,UAAM,OAAgB;AAAA,MACrB,MAAM,QAAQ;AAAA,MACd,YAAY,CAAC;AAAA,MACb,UAAU,CAAC;AAAA,MACX,OAAO;AAAA,IACR;AAGA,aAAS,IAAI,GAAG,IAAI,QAAQ,WAAW,QAAQ,KAAK;AACnD,YAAM,OAAO,QAAQ,WAAW,CAAC;AACjC,WAAK,WAAW,KAAK,IAAI,IAAI,KAAK;AAAA,IACnC;AAGA,aAAS,IAAI,GAAG,IAAI,QAAQ,WAAW,QAAQ,KAAK;AACnD,YAAM,QAAQ,QAAQ,WAAW,CAAC;AAElC,UAAI,MAAM,aAAa,GAAG;AAEzB,aAAK,SAAS,KAAK,aAAa,KAAgB,CAAC;AAAA,MAClD,WAAW,MAAM,aAAa,GAAG;AAEhC,cAAM,OAAO,MAAM,WAAW,KAAK;AACnC,YAAI,MAAM;AACT,cAAI,QAAQ,WAAW,WAAW,GAAG;AACpC,iBAAK,QAAQ,MAAM;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAKA,WAAS,eAAe,WAA4B;AAEnD,gBAAY,UAAU,QAAQ,mBAAmB,EAAE,EAAE,KAAK;AAG1D,gBAAY,UAAU,QAAQ,sBAAsB,EAAE,EAAE,KAAK;AAG7D,gBAAY,UAAU,QAAQ,+BAA+B,CAAC,GAAG,UAAU,OAAO,KAAK,CAAC;AAExF,UAAM,WAAW,CAAC,KAAa,UAAyD;AAEvF,YAAM,WAAW,IAAI,QAAQ,KAAK,KAAK;AACvC,UAAI,aAAa,GAAI,QAAO;AAE5B,YAAM,SAAS,IAAI,QAAQ,KAAK,QAAQ;AACxC,UAAI,WAAW,GAAI,QAAO;AAE1B,YAAM,aAAa,IAAI,MAAM,WAAW,GAAG,MAAM;AACjD,YAAM,gBAAgB,WAAW,SAAS,GAAG;AAC7C,YAAM,YAAY,gBAAgB,WAAW,MAAM,GAAG,EAAE,IAAI,YAAY,KAAK,EAAE,MAAM,KAAK;AAC1F,YAAM,UAAU,SAAS,CAAC;AAG1B,YAAM,aAAqC,CAAC;AAC5C,YAAM,YAAY;AAClB,UAAI;AACJ,cAAQ,YAAY,UAAU,KAAK,UAAU,OAAO,MAAM;AACzD,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,WAAW,UAAU,CAAC,KAAK,UAAU,CAAC,KAAK;AACjD,mBAAW,IAAI,IAAI,YAAY,QAAQ;AAAA,MACxC;AAEA,YAAM,OAAgB;AAAA,QACrB,MAAM;AAAA,QACN;AAAA,QACA,UAAU,CAAC;AAAA,QACX,OAAO;AAAA,MACR;AAEA,UAAI,eAAe;AAClB,eAAO,EAAE,MAAM,KAAK,SAAS,EAAE;AAAA,MAChC;AAGA,YAAM,aAAa,KAAK,OAAO;AAC/B,UAAI,QAAQ;AACZ,UAAI,MAAM,SAAS;AACnB,YAAM,eAAe;AAErB,aAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ;AACrC,cAAM,WAAW,IAAI,QAAQ,IAAI,OAAO,IAAI,GAAG;AAC/C,cAAM,YAAY,IAAI,QAAQ,YAAY,GAAG;AAE7C,YAAI,cAAc,GAAI;AAEtB,YAAI,aAAa,MAAM,WAAW,WAAW;AAC5C;AACA,gBAAM,WAAW,QAAQ,SAAS;AAAA,QACnC,OAAO;AACN;AACA,cAAI,UAAU,GAAG;AAChB,kBAAM,UAAU,IAAI,MAAM,cAAc,SAAS,EAAE,KAAK;AAGxD,gBAAI,QAAQ,WAAW,GAAG,GAAG;AAC5B,kBAAI,WAAW;AACf,qBAAO,WAAW,QAAQ,QAAQ;AACjC,sBAAM,cAAc,SAAS,SAAS,QAAQ;AAC9C,oBAAI,aAAa;AAChB,uBAAK,SAAS,KAAK,YAAY,IAAI;AACnC,6BAAW,YAAY;AAAA,gBACxB,OAAO;AACN;AAAA,gBACD;AAAA,cACD;AAAA,YACD,WAAW,SAAS;AACnB,mBAAK,QAAQ,YAAY,OAAO;AAAA,YACjC;AAEA,mBAAO,EAAE,MAAM,KAAK,YAAY,WAAW,OAAO;AAAA,UACnD;AACA,gBAAM,YAAY,WAAW;AAAA,QAC9B;AAAA,MACD;AAEA,aAAO,EAAE,MAAM,KAAK,IAAI,OAAO;AAAA,IAChC;AAEA,UAAM,SAAS,SAAS,WAAW,CAAC;AACpC,QAAI,CAAC,QAAQ;AACZ,YAAM,IAAI,MAAM,aAAa;AAAA,IAC9B;AACA,WAAO,OAAO;AAAA,EACf;AASO,WAAS,aAAa,MAAuB;AACnD,WAAO,4DAA4D,cAAc,IAAI;AAAA,EACtF;AAEA,WAAS,cAAc,MAAuB;AAC7C,QAAI,SAAS,IAAI,KAAK,IAAI;AAG1B,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,UAAU,GAAG;AAC3D,gBAAU,IAAI,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,IACvC;AAEA,cAAU;AAGV,QAAI,KAAK,SAAS,SAAS,GAAG;AAC7B,iBAAW,SAAS,KAAK,UAAU;AAClC,kBAAU,cAAc,KAAK;AAAA,MAC9B;AAAA,IACD,WAAW,KAAK,UAAU,MAAM;AAC/B,gBAAU,UAAU,KAAK,KAAK;AAAA,IAC/B;AAEA,cAAU,KAAK,KAAK,IAAI;AAExB,WAAO;AAAA,EACR;AAKO,WAAS,UAAU,KAAqB;AAC9C,WAAO,IAAI,QAAQ,YAAY,CAAC,MAAM;AACrC,cAAQ,GAAG;AAAA,QACV,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR;AACC,iBAAO;AAAA,MACT;AAAA,IACD,CAAC;AAAA,EACF;AAKO,WAAS,YAAY,KAAqB;AAChD,WAAO,IAAI,QAAQ,oCAAoC,CAAC,MAAM;AAC7D,cAAQ,GAAG;AAAA,QACV,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR,KAAK;AACJ,iBAAO;AAAA,QACR;AACC,iBAAO;AAAA,MACT;AAAA,IACD,CAAC;AAAA,EACF;AASO,WAAS,iBAAiB,WAAmB,aAAqB,QAA2B,MAAwC;AAC3I,UAAM,WAAoB;AAAA,MACzB,MAAM;AAAA,MACN,YAAY,CAAC;AAAA,MACb,UAAU,CAAC;AAAA,MACX,OAAO;AAAA,IACR;AAEA,UAAM,cAAuB;AAAA,MAC5B,MAAM;AAAA,MACN,YAAY,CAAC;AAAA,MACb,UAAU,CAAC;AAAA,MACX,OAAO;AAAA,IACR;AAEA,aAAS,SAAS,KAAK,WAAW;AAGlC,eAAWA,UAAS,QAAQ;AAC3B,YAAM,QAAQ,KAAKA,OAAM,IAAI,KAAKA,OAAM;AAExC,UAAI,UAAU,UAAa,UAAU,MAAM;AAC1C,YAAIA,OAAM,SAAU;AACpB;AAAA,MACD;AAEA,YAAM,YAAY,gBAAgBA,QAAO,KAAK;AAC9C,UAAI,WAAW;AACd,oBAAY,SAAS,KAAK,SAAS;AAAA,MACpC;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAEA,WAAS,gBAAgBA,QAAwB,OAAgC;AAEhF,UAAM,WAAWA,OAAM,UAAUA,OAAM;AAEvC,UAAM,OAAgB;AAAA,MACrB,MAAM;AAAA,MACN,YAAY,EAAE,SAASA,OAAM,WAAW,WAAWA,OAAM,IAAI,EAAE;AAAA,MAC/D,UAAU,CAAC;AAAA,MACX,OAAO;AAAA,IACR;AAGA,QAAIA,OAAM,SAAS;AAClB,WAAK,WAAW,UAAUA,OAAM;AAAA,IACjC;AAGA,QAAIA,OAAM,YAAY,sBAAsB;AAE3C,WAAK,OAAOA,OAAM;AAClB,aAAO,KAAK,WAAW;AACvB,UAAIA,OAAM,QAAS,MAAK,WAAW,UAAUA,OAAM;AAGnD,YAAM,cAAuB;AAAA,QAC5B,MAAM;AAAA,QACN,YAAY,EAAE,SAAS,aAAa;AAAA,QACpC,UAAU,CAAC;AAAA,QACX,OAAOA,OAAM,WAAW,SAAS,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK;AAAA,MAC/D;AACA,WAAK,SAAS,KAAK,WAAW;AAC9B,aAAO;AAAA,IACR;AAEA,YAAQA,OAAM,MAAM;AAAA,MACnB,KAAK;AACJ,aAAK,QAAQA,OAAM,WAAW,SAAS,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK;AACpE;AAAA,MAED,KAAK;AAAA,MACL,KAAK;AACJ,aAAK,QAAQ,OAAO,KAAK;AACzB;AAAA,MAED,KAAK;AACJ,aAAK,QAAQ,OAAO,KAAK,MAAM,KAAe,CAAC;AAC/C;AAAA,MAED,KAAK;AACJ,aAAK,QAAQ,QAAQ,SAAS;AAC9B;AAAA,MAED,KAAK,eAAe;AACnB,aAAK,WAAW,UAAUA,OAAM,WAAW;AAC3C,aAAK,WAAW,aAAa;AAC7B,cAAM,SAAS;AACf,mBAAW,QAAQ,QAAQ;AAC1B,eAAK,SAAS,KAAK;AAAA,YAClB,MAAMA,OAAM;AAAA;AAAA,YACZ,YAAY,EAAE,SAAS,aAAa;AAAA,YACpC,UAAU,CAAC;AAAA,YACX,OAAO;AAAA,UACR,CAAC;AAAA,QACF;AACA;AAAA,MACD;AAAA,MAEA,KAAK,aAAa;AAGjB,aAAK,WAAW,UAAUA,OAAM,WAAW;AAC3C,aAAK,WAAW,aAAa;AAC7B,aAAK,WAAW,UAAU;AAC1B,cAAM,WAAW;AACjB,mBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAElD,eAAK,SAAS,KAAK;AAAA,YAClB,MAAMA,OAAM;AAAA,YACZ,YAAY,EAAE,SAAS,aAAa;AAAA,YACpC,UAAU,CAAC;AAAA,YACX,OAAO;AAAA,UACR,CAAC;AAED,eAAK,SAAS,KAAK;AAAA,YAClB,MAAMA,OAAM;AAAA,YACZ,YAAY,EAAE,SAAS,aAAa;AAAA,YACpC,UAAU,CAAC;AAAA,YACX,OAAO;AAAA,UACR,CAAC;AAAA,QACF;AACA;AAAA,MACD;AAAA,MAEA,KAAK,OAAO;AACX,aAAK,WAAW,UAAUA,OAAM,WAAW;AAC3C,aAAK,WAAW,aAAaA,OAAM,cAAc;AACjD,aAAK,WAAW,UAAUA,OAAM,WAAW;AAC3C,cAAM,kBAAkB;AAExB,mBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,eAAe,GAAG;AAEzD,eAAK,SAAS,KAAK;AAAA,YAClB,MAAMA,OAAM;AAAA,YACZ,YAAY,EAAE,SAASA,OAAM,cAAc,aAAa;AAAA,YACxD,UAAU,CAAC;AAAA,YACX,OAAO;AAAA,UACR,CAAC;AAGD,cAAIA,OAAM,WAAY,UAAkBA,OAAM,OAAO,GAAG;AAEvD,kBAAM,YAAqB;AAAA,cAC1B,MAAMA,OAAM;AAAA,cACZ,YAAY,EAAE,SAASA,OAAM,QAAQ;AAAA,cACrC,UAAU,CAAC;AAAA,cACX,OAAO;AAAA,YACR;AAEA,kBAAM,iBAA0B;AAAA,cAC/B,MAAMA,OAAM;AAAA,cACZ,YAAY,CAAC;AAAA,cACb,UAAU,CAAC;AAAA,cACX,OAAO;AAAA,YACR;AAEA,2BAAe,WAAW,UAAUA,OAAM;AAE1C,kBAAM,YAAa,UAAkBA,OAAM,OAAO;AAClD,kBAAM,WAAW;AAEjB,uBAAW,cAAc,WAAW;AACnC,oBAAM,aAAa,SAAS,WAAW,IAAI;AAC3C,kBAAI,eAAe,UAAa,eAAe,MAAM;AACpD,sBAAM,YAAY,gBAAgB,YAAY,UAAU;AACxD,oBAAI,WAAW;AACd,iCAAe,SAAS,KAAK,SAAS;AAAA,gBACvC;AAAA,cACD;AAAA,YACD;AAEA,sBAAU,SAAS,KAAK,cAAc;AACtC,iBAAK,SAAS,KAAK,SAAS;AAAA,UAC7B,OAAO;AAEN,iBAAK,SAAS,KAAK;AAAA,cAClB,MAAMA,OAAM;AAAA,cACZ,YAAY,EAAE,SAASA,OAAM,WAAW,aAAa;AAAA,cACrD,UAAU,CAAC;AAAA,cACX,OAAO,OAAO,GAAG;AAAA,YAClB,CAAC;AAAA,UACF;AAAA,QACD;AACA;AAAA,MACD;AAAA,MAEA,KAAK,SAAS;AACb,aAAK,WAAW,UAAUA,OAAM,WAAW;AAC3C,YAAIA,OAAM,gBAAgB;AACzB,eAAK,WAAW,aAAaA,OAAM;AAAA,QACpC,WAAWA,OAAM,UAAU;AAC1B,eAAK,WAAW,aAAa,WAAWA,OAAM,QAAQ;AAAA,QACvD;AAEA,YAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,qBAAW,QAAQ,OAAO;AAIzB,gBAAIA,OAAM,kBAAmB,UAAkBA,OAAM,cAAc,GAAG;AACrE,oBAAM,WAAoB;AAAA,gBACzB,MAAMA,OAAM;AAAA,gBACZ,YAAY,EAAE,SAASA,OAAM,gBAAgB,SAASA,OAAM,WAAWA,OAAM,KAAK;AAAA,gBAClF,UAAU,CAAC;AAAA,gBACX,OAAO;AAAA,cACR;AAEA,oBAAM,YAAa,UAAkBA,OAAM,cAAc;AACzD,oBAAM,WAAW;AAEjB,yBAAW,cAAc,WAAW;AACnC,sBAAM,aAAa,SAAS,WAAW,IAAI;AAC3C,oBAAI,eAAe,UAAa,eAAe,MAAM;AACpD,wBAAM,YAAY,gBAAgB,YAAY,UAAU;AACxD,sBAAI,UAAW,UAAS,SAAS,KAAK,SAAS;AAAA,gBAChD;AAAA,cACD;AAEA,mBAAK,SAAS,KAAK,QAAQ;AAAA,YAC5B,WAAWA,OAAM,UAAU;AAC1B,oBAAM,WAAWA,OAAM,UAAUA,OAAM;AACvC,mBAAK,SAAS,KAAK;AAAA,gBAClB,MAAM;AAAA,gBACN,YAAY,EAAE,SAAS,WAAWA,OAAM,QAAQ,EAAE;AAAA,gBAClD,UAAU,CAAC;AAAA,gBACX,OAAO,OAAO,IAAI;AAAA,cACnB,CAAC;AAAA,YACF;AAAA,UACD;AAAA,QACD;AACA;AAAA,MACD;AAAA,MAEA,KAAK;AAEJ,YAAIA,OAAM,cAAe,UAAkBA,OAAM,UAAU,GAAG;AAC7D,gBAAM,YAAa,UAAkBA,OAAM,UAAU;AACrD,gBAAM,WAAW;AAEjB,qBAAW,cAAc,WAAW;AACnC,kBAAM,aAAa,SAAS,WAAW,IAAI;AAC3C,gBAAI,eAAe,UAAa,eAAe,MAAM;AACpD,oBAAM,YAAY,gBAAgB,YAAY,UAAU;AACxD,kBAAI,WAAW;AACd,qBAAK,SAAS,KAAK,SAAS;AAAA,cAC7B;AAAA,YACD;AAAA,UACD;AAAA,QACD,OAAO;AAEN,cAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAChD,kBAAM,WAAW;AACjB,uBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAClD,kBAAI,QAAQ,UAAa,QAAQ,MAAM;AACtC,sBAAM,YAAqB;AAAA,kBAC1B,MAAM;AAAA,kBACN,YAAY,EAAE,SAAS,aAAa,GAAG,EAAE;AAAA,kBACzC,UAAU,CAAC;AAAA,kBACX,OAAO,OAAO,GAAG;AAAA,gBAClB;AACA,qBAAK,SAAS,KAAK,SAAS;AAAA,cAC7B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AACA;AAAA,IACF;AAEA,WAAO;AAAA,EACR;AAEA,WAAS,SAAS,KAAqB;AACtC,QAAI,OAAO,SAAS,YAAY;AAC/B,aAAO,KAAK,GAAG;AAAA,IAChB;AACA,QAAI,OAAO,WAAW,aAAa;AAClC,aAAO,OAAO,KAAK,GAAG,EAAE,SAAS,QAAQ;AAAA,IAC1C;AACA,WAAO;AAAA,EACR;AAEA,WAAS,WAAW,MAAyB;AAC5C,YAAQ,MAAM;AAAA,MACb,KAAK;AACJ,eAAO;AAAA,MACR,KAAK;AACJ,eAAO;AAAA,MACR,KAAK;AACJ,eAAO;AAAA,MACR,KAAK;AACJ,eAAO;AAAA,MACR,KAAK;AACJ,eAAO;AAAA,MACR,KAAK;AACJ,eAAO;AAAA,MACR,KAAK;AACJ,eAAO;AAAA,MACR;AACC,eAAO;AAAA,IACT;AAAA,EACD;AAEA,WAAS,aAAa,OAAwB;AAC7C,QAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAI,OAAO,UAAU,SAAU,QAAO,OAAO,UAAU,KAAK,IAAI,QAAQ;AACxE,QAAI,OAAO,UAAU,UAAW,QAAO;AACvC,WAAO;AAAA,EACR;AASO,WAAS,iBAAiB,SAAkB,QAAoD;AACtG,UAAM,SAAkC,CAAC;AAGzC,UAAM,eAAe,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC;AAClE,UAAM,mBAAmB,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,OAAO,CAAa;AACzF,UAAM,oBAAoB,CAAC,SAA2B;AACrD,aAAO,KAAK,SAAS,KAAK,CAAC,UAAU,aAAa,IAAI,MAAM,IAAI,KAAM,MAAM,WAAW,WAAW,iBAAiB,IAAI,MAAM,WAAW,OAAO,CAAE;AAAA,IAClJ;AAGA,UAAM,eAAe,oBAAI,IAAI,CAAC,YAAY,QAAQ,eAAe,UAAU,QAAQ,CAAC;AAGpF,UAAM,oBAAoB,oBAAI,IAAI,CAAC,SAAS,CAAC;AAE7C,QAAI,UAAU;AACd,QAAI,QAAQ;AACZ,UAAM,YAAY;AAElB,WAAO,QAAQ,WAAW;AAEzB,UAAI,kBAAkB,OAAO,GAAG;AAC/B;AAAA,MACD;AAGA,UAAI;AAGJ,iBAAW,QAAQ,SAAS,KAAK,CAAC,MAAM,aAAa,IAAI,EAAE,IAAI,CAAC;AAGhE,UAAI,CAAC,UAAU;AACd,mBAAW,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,UAAU,CAAC;AAAA,MACpE;AAGA,UAAI,CAAC,UAAU;AACd,cAAM,iBAAiB,QAAQ,SAAS,KAAK,CAAC,MAAM,kBAAkB,IAAI,EAAE,IAAI,CAAC;AACjF,YAAI,gBAAgB;AAEnB,gBAAM,UAAU,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,eAAe,IAAI;AACjE,cAAI,CAAC,SAAS;AACb,uBAAW;AAAA,UACZ;AAAA,QACD;AAAA,MACD;AAEA,UAAI,UAAU;AACb,kBAAU;AACV;AAAA,MACD,OAAO;AAEN;AAAA,MACD;AAAA,IACD;AAEA,UAAM,eAAe;AAGrB,UAAM,aAAa,oBAAI,IAA6B;AACpD,UAAM,iBAAiB,oBAAI,IAA6B;AACxD,eAAWA,UAAS,QAAQ;AAC3B,iBAAW,IAAIA,OAAM,MAAMA,MAAK;AAChC,iBAAW,IAAIA,OAAM,UAAUA,OAAM,MAAMA,MAAK;AAChD,UAAIA,OAAM,SAAS;AAClB,uBAAe,IAAIA,OAAM,SAASA,MAAK;AAAA,MACxC;AAAA,IACD;AAGA,eAAW,SAAS,aAAa,UAAU;AAC1C,YAAMA,SAAQ,WAAW,IAAI,MAAM,IAAI,MAAM,MAAM,WAAW,UAAU,eAAe,IAAI,MAAM,WAAW,OAAO,IAAI;AAEvH,UAAIA,QAAO;AACV,eAAOA,OAAM,IAAI,IAAI,gBAAgB,OAAOA,MAAK;AACjD;AAAA,MACD;AAIA,YAAM,SAAS,eAAe,KAAK;AACnC,UAAI,MAAM,WAAW,SAAS;AAC7B,eAAO,MAAM,WAAW,OAAO,IAAI;AACnC,YAAI,MAAM,WAAW,YAAY,MAAM,MAAM;AAC5C,iBAAO,MAAM,IAAI,IAAI;AAAA,QACtB;AAAA,MACD,OAAO;AACN,eAAO,MAAM,IAAI,IAAI;AAAA,MACtB;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAEA,WAAS,gBAAgB,MAAeA,QAAiC;AACxE,YAAQA,OAAM,MAAM;AAAA,MACnB,KAAK;AACJ,eAAO,KAAK,SAAS;AAAA,MAEtB,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,KAAK,QAAQ,WAAW,KAAK,KAAK,IAAI;AAAA,MAE9C,KAAK;AACJ,eAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,IAAI;AAAA,MAEhD,KAAK;AACJ,eAAO,KAAK,UAAU;AAAA,MAEvB,KAAK;AACJ,eAAO,KAAK,SAAS,IAAI,CAAC,UAAU,MAAM,SAAS,EAAE;AAAA,MAEtD,KAAK,SAAS;AAEb,YAAIA,OAAM,kBAAmB,UAAkBA,OAAM,cAAc,GAAG;AACrE,iBAAO,KAAK,SAAS,IAAI,CAAC,UAAU;AAEnC,kBAAM,YAA6B,EAAE,MAAMA,OAAM,gBAAiB,MAAM,UAAU,YAAYA,OAAM,eAAe;AACnH,mBAAO,gBAAgB,OAAO,SAAS;AAAA,UACxC,CAAC;AAAA,QACF;AACA,YAAIA,OAAM,UAAU;AACnB,iBAAO,KAAK,SAAS,IAAI,CAAC,UAAU;AAEnC,kBAAM,QAAQ,eAAe,KAAK;AAElC,gBAAI,OAAO,UAAU,UAAU;AAC9B,sBAAQA,OAAM,UAAU;AAAA,gBACvB,KAAK;AACJ,yBAAO,SAAS,OAAO,EAAE,KAAK;AAAA,gBAC/B,KAAK;AAAA,gBACL,KAAK;AACJ,yBAAO,WAAW,KAAK,KAAK;AAAA,gBAC7B,KAAK;AACJ,yBAAO,UAAU;AAAA,gBAClB;AACC,yBAAO;AAAA,cACT;AAAA,YACD;AACA,mBAAO;AAAA,UACR,CAAC;AAAA,QACF;AACA,eAAO,KAAK,SAAS,IAAI,CAAC,UAAU,eAAe,KAAK,CAAC;AAAA,MAC1D;AAAA,MAEA,KAAK,UAAU;AACd,cAAM,MAA+B,CAAC;AACtC,YAAIA,OAAM,cAAe,UAAkBA,OAAM,UAAU,GAAG;AAC7D,gBAAM,YAAa,UAAkBA,OAAM,UAAU;AACrD,gBAAM,QAAQ,oBAAI,IAA6B;AAC/C,gBAAM,YAAY,oBAAI,IAA6B;AACnD,qBAAW,KAAK,WAAW;AAC1B,kBAAM,IAAI,EAAE,MAAM,CAAC;AACnB,kBAAM,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC;AAC/B,gBAAI,EAAE,QAAS,WAAU,IAAI,EAAE,SAAS,CAAC;AAAA,UAC1C;AAEA,qBAAW,SAAS,KAAK,UAAU;AAClC,kBAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,MAAM,WAAW,UAAU,UAAU,IAAI,MAAM,WAAW,OAAO,IAAI;AACzG,gBAAI,GAAG;AACN,kBAAI,EAAE,IAAI,IAAI,gBAAgB,OAAO,CAAC;AAAA,YACvC,OAAO;AACN,oBAAM,MAAM,MAAM,WAAW,WAAW,MAAM;AAC9C,kBAAI,GAAG,IAAI,eAAe,KAAK;AAAA,YAChC;AAAA,UACD;AACA,iBAAO;AAAA,QACR;AAEA,mBAAW,SAAS,KAAK,UAAU;AAClC,gBAAM,MAAM,MAAM,WAAW,WAAW,MAAM;AAC9C,cAAI,GAAG,IAAI,eAAe,KAAK;AAAA,QAChC;AACA,eAAO;AAAA,MACR;AAAA,MAEA,KAAK,aAAa;AACjB,cAAM,SAAS,aAAa,MAAM;AAAA,UACjC,UAAU,EAAE,MAAM,OAAO,MAAM,SAAS;AAAA,UACxC,YAAY,EAAE,MAAM,SAAS,MAAM,SAAS;AAAA,QAC7C,CAAC;AACD,eAAO;AAAA,MACR;AAAA,MAEA,KAAK,OAAO;AACX,cAAM,WAAW,wBAAwBA,OAAM,UAAU;AACzD,cAAM,aAAa,wBAAwBA,OAAM,OAAO;AACxD,cAAM,SAAS,aAAa,MAAM,EAAE,UAAU,WAAW,CAAC;AAI1D,YAAIA,OAAM,YAAY,kBAAkB;AACvC,gBAAM,YAAqC,CAAC;AAC5C,qBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC5C,gBAAI,KAAK,OAAO,MAAM,YAAY,gBAAiB,KAAa,MAAM,QAAS,EAAU,UAAU,GAAG;AACrG,wBAAU,CAAC,IAAK,EAAU;AAAA,YAC3B,OAAO;AACN,wBAAU,CAAC,IAAI;AAAA,YAChB;AAAA,UACD;AACA,iBAAO;AAAA,QACR;AAEA,eAAO;AAAA,MACR;AAAA,MAEA;AACC,eAAO,KAAK;AAAA,IACd;AAAA,EACD;AAEA,WAAS,wBAAwB,UAAgD;AAChF,QAAI,CAAC,SAAU,QAAO;AAGtB,QAAK,UAAkB,QAAQ,GAAG;AACjC,aAAO,EAAE,MAAM,UAAU,MAAM,UAAU,YAAY,SAAS;AAAA,IAC/D;AAGA,YAAQ,UAAU;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,EAAE,MAAM,UAAU,MAAM,SAAS;AAAA,MACzC,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,EAAE,MAAM,UAAU,MAAM,SAAS;AAAA,MACzC,KAAK;AACJ,eAAO,EAAE,MAAM,UAAU,MAAM,MAAM;AAAA,MACtC,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,MAC1C,KAAK;AACJ,eAAO,EAAE,MAAM,UAAU,MAAM,cAAc;AAAA,MAC9C;AACC,eAAO;AAAA,IACT;AAAA,EACD;AAEA,WAAS,aACR,MACA,OAAqE,CAAC,GAC5C;AAC1B,UAAM,SAAkC,CAAC;AACzC,UAAM,WAAW,KAAK;AAEtB,UAAM,8BAA8B,CAAC,UAA4B;AAGhE,YAAM,qBAAqB,CAAC,MAAyB;AACpD,YAAI,OAAO,MAAM,SAAU,QAAO,CAAC,CAAC;AACpC,YAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ;AAC/E,eAAO,CAAC;AAAA,MACT;AAEA,YAAM,eAAe,CAAC,QAA8B;AACnD,YAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,YAAI,EAAE,gBAAgB,KAAM,QAAO;AACnC,eAAO,mBAAmB,IAAI,UAAU;AAAA,MACzC;AAGA,YAAM,SAAS,aAAa,KAAY;AACxC,UAAI,QAAQ;AACX,eAAO,OAAO,WAAW,IAAI,OAAO,CAAC,IAAI;AAAA,MAC1C;AAGA,UAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,GAAG;AAC7C,cAAM,MAAM,MACV,IAAI,CAAC,MAAM,aAAa,CAAQ,CAAC,EACjC,OAAO,CAAC,MAAqB,MAAM,QAAQ,CAAC,CAAC;AAC/C,YAAI,IAAI,WAAW,MAAM,QAAQ;AAChC,gBAAM,YAAY,IAAI,KAAK;AAC3B,cAAI,UAAU,WAAW,EAAG,QAAO,UAAU,CAAC;AAC9C,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,aAAO;AAAA,IACR;AAEA,aAAS,IAAI,GAAG,IAAI,IAAI,SAAS,QAAQ,KAAK,GAAG;AAChD,YAAM,UAAU,SAAS,CAAC;AAC1B,YAAM,YAAY,SAAS,IAAI,CAAC;AAEhC,YAAM,YAAY,KAAK,WAAW,gBAAgB,SAAS,KAAK,QAAQ,IAAI,eAAe,OAAO;AAClG,YAAM,MAAM,OAAO,cAAc,WAAW,YAAY,OAAO,SAAS;AACxE,UAAI,CAAC,IAAK;AAEV,UAAI,QAAQ,KAAK,aAAa,gBAAgB,WAAW,KAAK,UAAU,IAAI,eAAe,SAAS;AAEpG,UAAI,CAAC,KAAK,YAAY;AACrB,gBAAQ,4BAA4B,KAAK;AAAA,MAC1C;AACA,aAAO,GAAG,IAAI;AAAA,IACf;AAEA,WAAO;AAAA,EACR;AAEA,WAAS,eAAe,MAAwB;AAC/C,UAAM,UAAU,KAAK,WAAW;AAEhC,UAAM,cAAc,KAAK,SAAS,SAAS;AAC3C,UAAM,eAAe,KAAK,UAAU,QAAQ,KAAK,UAAU,UAAa,KAAK,UAAU;AAEvF,UAAM,mBAAmB,CAAC,aAAmD;AAC5E,aAAO,SAAS,IAAI,CAAC,UAAU;AAC9B,cAAM,MAA+B,CAAC;AACtC,mBAAW,cAAc,MAAM,UAAU;AACxC,gBAAM,MAAM,WAAW,WAAW,WAAW,WAAW;AACxD,cAAI,GAAG,IAAI,eAAe,UAAU;AAAA,QACrC;AACA,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AAKA,QAAI,YAAY,UAAU,YAAY,UAAU;AAC/C,UAAI,CAAC,YAAa,QAAO,CAAC;AAE1B,YAAM,iBAAiB,KAAK,SAAS,CAAC,GAAG;AACzC,YAAM,cAAc,CAAC,CAAC,kBAAkB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,cAAc;AAG5F,UAAI,eAAe,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,GAAG;AACrE,eAAO,iBAAiB,KAAK,QAAQ;AAAA,MACtC;AAGA,UAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG;AACjD,eAAO,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,MACxC;AAGA,aAAO,KAAK,SAAS,IAAI,CAAC,UAAU,eAAe,KAAK,CAAC;AAAA,IAC1D;AAGA,QAAI,YAAY,OAAO;AACtB,aAAO,aAAa,IAAI;AAAA,IACzB;AAIA,QAAI,eAAe,CAAC,cAAc;AAEjC,UAAI,YAAY,OAAO;AACtB,eAAO,aAAa,IAAI;AAAA,MACzB;AAEA,YAAM,iBAAiB,KAAK,SAAS,CAAC,GAAG;AACzC,YAAM,cAAc,CAAC,CAAC,kBAAkB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,cAAc;AAE5F,UAAI,aAAa;AAEhB,YAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,GAAG;AACtD,iBAAO,iBAAiB,KAAK,QAAQ;AAAA,QACtC;AAGA,YAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG;AACjD,iBAAO,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,QACxC;AAEA,eAAO,KAAK,SAAS,IAAI,CAAC,UAAU,eAAe,KAAK,CAAC;AAAA,MAC1D;AAGA,YAAM,MAA+B,CAAC;AACtC,iBAAW,SAAS,KAAK,UAAU;AAClC,cAAM,MAAM,MAAM,WAAW,WAAW,MAAM;AAC9C,YAAI,GAAG,IAAI,eAAe,KAAK;AAAA,MAChC;AACA,aAAO;AAAA,IACR;AAGA,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAO,KAAK,SAAS;AAAA,MAEtB,KAAK;AACJ,eAAO,KAAK,QAAQ,WAAW,KAAK,KAAK,IAAI;AAAA,MAE9C,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,IAAI;AAAA,MAEhD,KAAK;AACJ,eAAO,KAAK,UAAU;AAAA,MAEvB;AAEC,YAAI,KAAK,UAAU,QAAQ,KAAK,SAAS,SAAS,GAAG;AACpD,gBAAM,MAA+B,CAAC;AACtC,qBAAW,SAAS,KAAK,UAAU;AAClC,gBAAI,MAAM,IAAI,IAAI,eAAe,KAAK;AAAA,UACvC;AACA,iBAAO;AAAA,QACR;AACA,eAAO,KAAK;AAAA,IACd;AAAA,EACD;AAKO,WAAS,oBAAoB,SAA2B;AAC9D,WAAO,QAAQ,SAAS,sBAAsB,QAAQ,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS;AAAA,EAC1F;AAKO,WAAS,iBAAiB,SAAoE;AACpG,QAAI,QAAQ,SAAS,oBAAoB;AACxC,YAAM,cAAc,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS;AACrE,YAAM,WAAW,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAC/D,aAAO;AAAA,QACN,MAAM,UAAU,SAAS;AAAA,QACzB,SAAS,aAAa,SAAS;AAAA,QAC/B,SAAS,eAAe,OAAO;AAAA,MAChC;AAAA,IACD;AAIA,QAAI;AACJ,QAAI,QAAQ,SAAS,+BAA+B;AACnD,sBAAgB;AAAA,IACjB,WAAW,QAAQ,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,+BAA+B;AACpF,sBAAgB,QAAQ,SAAS,CAAC,EAAE,SAAS,CAAC;AAAA,IAC/C;AAEA,QAAI,eAAe;AAElB,YAAM,WAAW,cAAc,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,yBAAyB;AACxF,UAAI,UAAU;AACb,cAAM,cAAc,SAAS,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS;AACtE,YAAI,aAAa;AAEhB,gBAAM,QAAQ,YAAY,SAAS,IAAI,CAAC,aAAa;AACpD,kBAAM,OAA4B,CAAC;AACnC,qBAAS,SAAS,QAAQ,CAAC,MAAM;AAEhC,oBAAM,YAAY,EAAE,KAAK,QAAQ,wBAAwB,EAAE;AAC3D,mBAAK,SAAS,IAAI,EAAE;AAAA,YACrB,CAAC;AACD,mBAAO;AAAA,UACR,CAAC;AAED,gBAAM,YAAY,MAAM,CAAC;AACzB,iBAAO;AAAA,YACN,MAAM,WAAW,WAAW;AAAA;AAAA,YAC5B,SAAS,WAAW,WAAW;AAAA,YAC/B,SAAS;AAAA,UACV;AAAA,QACD;AAAA,MACD;AAGA,YAAM,cAAc,cAAc,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS;AAC3E,YAAM,WAAW,cAAc,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAC1E,aAAO;AAAA,QACN,MAAM,UAAU,SAAS;AAAA,QACzB,SAAS,aAAa,SAAS;AAAA,QAC/B,SAAS,eAAe,aAAa;AAAA,MACtC;AAAA,IACD;AAEA,WAAO,EAAE,MAAM,WAAW,SAAS,iBAAiB,SAAS,QAAQ;AAAA,EACtE;;;ACvhCA,MAAM,iBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS,CAAC;AAAA,IACV,OAAO;AAAA,EACR;AAEO,MAAM,gBAAN,MAAoB;AAAA,IAkC1B,YAAY,QAAuB;AAhCnC,WAAQ,cAAc;AACtB,WAAQ,cAAmC;AAgC1C,WAAK,SAAS,EAAE,GAAG,gBAAgB,GAAG,OAAO;AAG7C,WAAK,KAAK;AAGV,aAAO,IAAI,MAAM,MAAM;AAAA,QACtB,KAAK,CAAC,QAAQ,SAAS;AACtB,cAAI,QAAQ,QAAQ;AACnB,mBAAQ,OAAe,IAAI;AAAA,UAC5B;AACA,cAAI,OAAO,SAAS,YAAY,QAAQ,aAAa;AACpD,mBAAO,CAAC,WAAgB,OAAO,KAAK,MAAa,MAAM;AAAA,UACxD;AACA,iBAAO;AAAA,QACR;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IA/CQ,qBAAqB,SAA2B;AACvD,UAAI,CAAC,WAAW,OAAO,YAAY,SAAU,QAAO;AACpD,YAAM,SAAS;AAEf,YAAM,wBAAwB,CAAC,UAA4B;AAC1D,YAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,EAAG,QAAO,MAAM,CAAC;AAC9D,eAAO;AAAA,MACR;AAGA,UAAI,mBAAmB,QAAQ;AAC9B,eAAO,sBAAsB,OAAO,aAAa;AAAA,MAClD;AAIA,YAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,UAAI,KAAK,WAAW,GAAG;AACtB,cAAM,MAAM,KAAK,CAAC;AAClB,cAAM,QAAQ,OAAO,GAAG;AACxB,cAAM,0BAA0B,uBAAuB,KAAK,GAAG,KAAK,QAAQ;AAC5E,YAAI,2BAA2B,OAAO,UAAU,WAAW;AAC1D,iBAAO,sBAAsB,KAAK;AAAA,QACnC;AAAA,MACD;AAEA,aAAO;AAAA,IACR;AAAA,IAsBO,UAAU,QAAsC;AACtD,WAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO;AAAA,IAC3C;AAAA,IAEO,YAAqC;AAC3C,aAAO,EAAE,GAAG,KAAK,OAAO;AAAA,IACzB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAa,KAAK,OAAO,IAAkB;AAC1C,UAAI,KAAK,aAAa;AACrB,eAAO,EAAE,oBAAoB,KAAK;AAAA,MACnC;AAGA,UAAI,KAAK,aAAa;AACrB,eAAO,KAAK;AAAA,MACb;AAEA,WAAK,cAAc,KAAK,YAAY,IAAI;AACxC,UAAI;AACH,cAAM,SAAS,MAAM,KAAK;AAC1B,aAAK,cAAc;AACnB,eAAO;AAAA,MACR,SAAS,OAAO;AACf,aAAK,cAAc;AACnB,cAAM;AAAA,MACP;AAAA,IACD;AAAA,IAEA,MAAc,YAAY,MAA4B;AACrD,YAAM,MAAM,GAAG,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,QAAQ;AAEzD,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QACjC,QAAQ;AAAA,QACR,SAAS;AAAA,UACR,gBAAgB;AAAA,UAChB,GAAG,KAAK,OAAO;AAAA,QAChB;AAAA,QACA,aAAa;AAAA,QACb,MAAM,KAAK,UAAU,IAAI;AAAA,MAC1B,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AACjB,cAAM,IAAI,MAAM,gBAAgB,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MACzE;AAEA,YAAM,WAAW,MAAM,SAAS,KAAK;AAGrC,WAAK,cAAc;AAEnB,aAAO;AAAA,IACR;AAAA,IAEA,MAAc,oBAAmC;AAChD,UAAI,CAAC,KAAK,aAAa;AACtB,cAAM,KAAK,KAAK;AAAA,MACjB;AAAA,IACD;AAAA,IAEA,MAAa,KAAyC,YAAe,QAAiE;AAErI,YAAM,KAAK,kBAAkB;AAE7B,YAAM,YAAY,YAAY,UAAU;AACxC,UAAI,CAAC,WAAW;AACf,eAAO;AAAA,UACN,OAAO;AAAA,YACN,MAAM;AAAA,YACN,SAAS,uBAAuB,OAAO,UAAU,CAAC;AAAA,UACnD;AAAA,QACD;AAAA,MACD;AAGA,YAAM,YAAa,UAAkB,UAAU,OAAO,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,UAAU,EAAE,MAAM,CAAC;AACtH,YAAM,cAAe,UAAkB,eAAe,GAAG,SAAS;AAElE,UAAI;AAEH,cAAM,cAAc,iBAAiB,eAAe,aAAa,UAAU,eAAsB,MAAiC;AAClI,cAAM,aAAa,aAAa,WAAW;AAG3C,cAAM,cAAc,KAAK,UAAU;AAAA,UAClC,YAAY;AAAA,UACZ,aAAa;AAAA,QACd,CAAC;AAGD,cAAM,WAAW,MAAM,KAAK,gBAAgB,WAAW,WAAW;AAGlE,YAAI;AACH,gBAAM,UAAmB,SAAS,QAAQ;AAG1C,cAAI,oBAAoB,OAAO,GAAG;AACjC,kBAAM,YAAY,iBAAiB,OAAO;AAC1C,mBAAO;AAAA,cACN,OAAO;AAAA,gBACN,MAAM,UAAU;AAAA,gBAChB,SAAS,UAAU;AAAA,gBACnB,SAAS,UAAU;AAAA,cACpB;AAAA,YACD;AAAA,UACD;AAEA,gBAAM,iBAAiB,iBAAiB,SAAS,UAAU,cAAqB;AAChF,gBAAM,YAAY,KAAK,qBAAqB,cAAc;AAC1D,iBAAO,EAAE,MAAM,UAA8B;AAAA,QAC9C,SAAS,YAAY;AACpB,iBAAO;AAAA,YACN,OAAO;AAAA,cACN,MAAM;AAAA,cACN,SAAS,sBAAsB,QAAQ,WAAW,UAAU;AAAA,cAC5D,SAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD,SAAS,OAAO;AACf,eAAO;AAAA,UACN,OAAO;AAAA,YACN,MAAM;AAAA,YACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC/D;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAc,gBAAgB,QAAgB,MAA+B;AAC5E,YAAM,aAAa,IAAI,gBAAgB;AACvC,YAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,OAAO,OAAO;AAE1E,UAAI;AACH,cAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,QAAQ,WAAW,MAAM,IAAI;AAAA,UAC9F,QAAQ;AAAA,UACR,SAAS;AAAA,YACR,gBAAgB;AAAA,YAChB,GAAI,KAAK,OAAO,WAAW,CAAC;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,QAAQ,WAAW;AAAA,UACnB,aAAa;AAAA;AAAA,QACd,CAAC;AAED,YAAI,CAAC,SAAS,IAAI;AACjB,gBAAM,IAAI,MAAM,eAAe,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,QACxE;AAEA,eAAO,MAAM,SAAS,KAAK;AAAA,MAC5B,UAAE;AACD,qBAAa,SAAS;AAAA,MACvB;AAAA,IACD;AAAA,EACD;AAGO,WAAS,oBAAoB,QAA+C;AAClF,WAAO,IAAI,cAAc,MAAM;AAAA,EAChC;","names":["field"]}