{"version":3,"sources":["actions/images.js","store.js","images/logo.svg","pages/PipelineDetails.jsx","actions/status.js","pages/PipelineOverview.jsx","actions/user.js","containers/status/QueueItemPopover.jsx","containers/status/PipelineSummary.jsx","api.js","containers/Errors.jsx","containers/status/Filters.jsx","actions/adminActions.js","actions/logfile.js","actions/semaphores.js","actions/tenants.js","actions/actionTypes.js","actions/tenantStatus.js","actions/flavors.js","actions/freezejob.js","actions/jobgraph.js","registerServiceWorker.js","containers/auth/Auth.jsx","containers/ErrorBoundary.jsx","containers/timezone/SelectTz.jsx","containers/config/Config.jsx","containers/autohold/HeldBuildList.jsx","pages/Autohold.jsx","containers/autohold/AutoholdTable.jsx","containers/autohold/autoholdModal.jsx","pages/Autoholds.jsx","containers/build/Artifact.jsx","containers/build/Misc.jsx","containers/build/Build.jsx","containers/build/BuildOutput.jsx","containers/build/Console.jsx","containers/build/Manifest.jsx","containers/logfile/LogFile.jsx","pages/Build.jsx","containers/BuildQuery.jsx","containers/build/BuildTable.jsx","pages/Builds.jsx","containers/build/BuildList.jsx","containers/charts/ChartModal.jsx","containers/charts/Misc.jsx","containers/charts/GanttChart.jsx","containers/build/Buildset.jsx","pages/Buildset.jsx","containers/build/BuildsetTable.jsx","pages/Buildsets.jsx","containers/status/ItemPanel.jsx","pages/ChangeStatus.jsx","actions/component.js","containers/component/ComponentTable.jsx","pages/Components.jsx","containers/configerrors/ConfigErrorTable.jsx","pages/ConfigErrors.jsx","containers/freezejob/FreezeJobToolbar.jsx","pages/FreezeJob.jsx","containers/SourceContext.jsx","containers/job/Nodeset.jsx","containers/job/Role.jsx","containers/job/JobProject.jsx","containers/job/JobDescriptionCard.jsx","containers/job/JobVariant.jsx","containers/job/Job.jsx","pages/Job.jsx","containers/jobs/Jobs.jsx","pages/Jobs.jsx","containers/provider/ImageDetail.jsx","containers/provider/ImageUploadTable.jsx","containers/provider/ImageBuildTable.jsx","pages/Image.jsx","containers/provider/ImageTable.jsx","pages/Images.jsx","containers/provider/FlavorTable.jsx","pages/Flavors.jsx","pages/Labels.jsx","pages/Nodes.jsx","pages/OpenApi.jsx","containers/project/ProjectVariant.jsx","containers/project/Project.jsx","containers/jobgraph/JobGraphToolbar.jsx","containers/jobgraph/JobGraphDisplay.jsx","containers/jobgraph/JobGraph.jsx","pages/Project.jsx","pages/Projects.jsx","pages/ProviderImage.jsx","containers/provider/ProviderDetail.jsx","containers/provider/LabelTable.jsx","pages/Provider.jsx","containers/provider/ProviderTable.jsx","pages/Providers.jsx","containers/semaphore/Semaphore.jsx","pages/Semaphore.jsx","containers/semaphore/SemaphoreTable.jsx","pages/Semaphores.jsx","pages/Stream.jsx","pages/Tenants.jsx","routes.js","pages/AuthCallback.jsx","pages/AuthRequired.jsx","App.jsx","ZuulAuthProvider.jsx","pages/SilentCallback.jsx","index.js","reducers/auth.js","reducers/autoholds.js","reducers/change.js","reducers/initialState.js","reducers/component.js","reducers/flavors.js","reducers/freezejob.js","reducers/notifications.js","reducers/build.js","reducers/images.js","reducers/info.js","reducers/job.js","reducers/jobgraph.js","reducers/jobs.js","reducers/labels.js","reducers/logfile.js","reducers/nodes.js","reducers/openapi.js","reducers/project.js","reducers/pipelines.js","reducers/projects.js","reducers/preferences.js","reducers/providers.js","reducers/semaphores.js","reducers/status.js","reducers/statusExpansion.js","reducers/tenant.js","reducers/tenants.js","reducers/tenantStatus.js","reducers/timezone.js","reducers/user.js","reducers/index.js","store.prod.js","containers/Fetching.jsx","actions/tenant.js","actions/info.js","actions/change.js","actions/job.js","actions/jobs.js","actions/labels.js","actions/nodes.js","actions/openapi.js","actions/project.js","actions/pipelines.js","actions/projects.js","Hooks.jsx","containers/status/Misc.jsx","containers/filters/Select.jsx","containers/filters/TernarySelect.jsx","containers/filters/Checkbox.jsx","containers/FilterToolbar.jsx","actions/preferences.js","containers/status/QueueItem.jsx","containers/status/ChangeQueue.jsx","actions/notifications.js","actions/timezone.js","actions/build.js","containers/status/QueueItemProgress.jsx","actions/statusExpansion.js","actions/providers.js","Misc.jsx","actions/autoholds.js","actions/auth.js"],"names":["IMAGES_FETCH_REQUEST","IMAGES_FETCH_SUCCESS","IMAGES_FETCH_FAIL","requestImages","receiveImages","tenant","json","failedImages","error","fetchImages","dispatch","response","shouldFetchImages","state","images","fetchImagesIfNeeded","getState","module","filterCategories","PipelineDetails","pipeline","pipelineType","itemCount","PipelineDetailsPage","isFetching","darkMode","autoReload","fetchStatusIfNeeded","isEmpty","isReloading","setIsReloading","isAllJobsExpanded","setIsAllJobsExpanded","isDocumentVisible","location","history","filters","updateData","onShowAllJobsToggle","isChecked","newFilters","queue","idx","mapStateToProps","ownProps","pipelines","global","p","mapDispatchToProps","STATUS_FETCH_REQUEST","STATUS_FETCH_SUCCESS","STATUS_FETCH_FAIL","requestStatus","receiveStatus","failedStatus","fetchStatus","shouldFetchStatus","status","PipelineGallery","showAllPipelines","expandAll","isLoading","onClearFilters","ppl","getPipelines","stats","PipelineOverviewPage","filterActive","setShowAllPipelines","setExpandAll","timezone","onShowAllPipelinesToggle","onExpandAllToggle","onFilterChanged","allPipelinesSwitch","trigger_events","management_events","USER_LOGGED_IN","USER_LOGGED_OUT","getToken","user","e","fetchUserACLRequest","userLoggedIn","redirect","token","userLoggedOut","fetchUserACLSuccess","fetchUserACLFail","fetchUserACL","apiPrefix","QueueItemPopover","item","triggerElement","isVisible","setIsVisible","times","Popover","change","QueueItemProgress","QueueItemSquareWithPopover","QueueItemSquare","iconConfig","Button","QueueCard","allQueuesExpanded","jobsExpanded","expansionKey","expandedQueue","isQueueExpanded","onQueueToggle","isExpanded","Card","CardHeader","CardTitle","Tooltip","Badge","CardBody","head","ChangeQueue","QueueSummary","showAllQueues","changeQueues","Flex","FlexItem","PipelineSummary","areAllJobsExpanded","authToken","setAuthToken","getHomepageUrl","url","getZuulUrl","ZUUL_API","apiUrl","getStreamUrl","getAuthToken","makeRequest","method","data","instance","config","err","err2","fetchInfo","fetchComponents","fetchTenantInfo","fetchOpenApi","fetchTenants","fetchTenantStatus","fetchConfigErrors","queryString","path","fetchChangeStatus","changeId","fetchFreezeJob","pipelineName","projectName","branchName","jobName","fetchBuild","buildId","fetchBuilds","fetchBuildset","buildsetId","fetchBuildsets","buildImage","imageName","deleteImageBuildArtifact","artifactId","deleteImageUpload","uploadId","fetchFlavors","fetchPipelines","fetchProject","fetchProjects","fetchProviders","fetchJob","fetchJobGraph","fetchJobs","fetchLabels","fetchNodes","fetchSemaphores","fetchAutoholds","fetchAutohold","requestId","fetchUserAuthorizations","dequeue","dequeue_ref","ref","enqueue","enqueue_ref","oldrev","newrev","autohold","job","reason","count","node_hold_expiration","autohold_delete","promote","changes","EmptyPage","props","title","icon","linkTarget","linkText","EmptyBox","action","onAction","children","handleFilterChange","clearFilters","filterDict","category","filterInputValidation","_","filterValue","filterByPipeline","filter","fuzzy","filterByQueue","truncateEmpty","q","filterByProject","heads","projects","filterByChange","_filter","f","ids","filterPipelines","key","ADMIN_DEQUEUE_FAIL","ADMIN_ENQUEUE_FAIL","ADMIN_AUTOHOLD_FAIL","ADMIN_PROMOTE_FAIL","parseAPIerror","addDequeueError","addEnqueueError","addAutoholdError","addPromoteError","LOGFILE_FETCH_REQUEST","LOGFILE_FETCH_SUCCESS","LOGFILE_FETCH_FAIL","requestLogfile","SYSLOGDATE","DATEFMT","STATUSFMT","severityMap","OSLO_LOGMATCH","SYSTEMD_LOGMATCH","receiveLogfile","file","out","line","m","sev","failedLogfile","fetchLogfile","build","SEMAPHORES_FETCH_REQUEST","SEMAPHORES_FETCH_SUCCESS","SEMAPHORES_FETCH_FAIL","requestSemaphores","receiveSemaphores","failedSemaphores","shouldFetchSemaphores","semaphores","fetchSemaphoresIfNeeded","force","TENANTS_FETCH_REQUEST","TENANTS_FETCH_SUCCESS","TENANTS_FETCH_FAIL","requestTenants","receiveTenants","failedTenants","shouldFetchTenants","tenants","fetchTenantsIfNeeded","COMPONENTS_FETCH_REQUEST","COMPONENTS_FETCH_SUCCESS","COMPONENTS_FETCH_FAIL","TENANT_STATUS_FETCH_REQUEST","TENANT_STATUS_FETCH_SUCCESS","TENANT_STATUS_FETCH_FAIL","TENANT_STATUS_CLEAR","requestTenantStatus","receiveTenantStatus","failedTenantStatus","fetchTenantStatusAction","clearTenantStatusAction","FLAVORS_FETCH_REQUEST","FLAVORS_FETCH_SUCCESS","FLAVORS_FETCH_FAIL","requestFlavors","receiveFlavors","failedFlavors","shouldFetchFlavors","flavors","fetchFlavorsIfNeeded","FREEZE_JOB_FETCH_REQUEST","FREEZE_JOB_FETCH_SUCCESS","FREEZE_JOB_FETCH_FAIL","requestFreezeJob","makeFreezeJobKey","project","branch","receiveFreezeJob","freezeJobKey","freezeJob","failedFreezeJob","shouldFetchFreezeJob","tenantFreezeJobs","fetchFreezeJobIfNeeded","JOB_GRAPH_FETCH_REQUEST","JOB_GRAPH_FETCH_SUCCESS","JOB_GRAPH_FETCH_FAIL","requestJobGraph","makeJobGraphKey","receiveJobGraph","jobGraphKey","jobGraph","failedJobGraph","shouldFetchJobGraph","tenantJobGraphs","fetchJobGraphIfNeeded","isLocalhost","register","unregister","swUrl","checkValidServiceWorker","registerValidSW","registration","installingWorker","isModalOpen","isSessionExpiredModalOpen","showZuulClientConfig","redirect_target","ZCconfig","api","Modal","valid_until","Accordion","AccordionItem","AccordionToggle","AccordionContent","ClipboardCopy","containerStyles","info","auth","selectedTz","tz","timezoneAction","textColor","customStyles","provided","DropdownIndicator","theme","isThemeOpen","event","selection","Switch","Select","SelectOption","nodes","selectedBuildId","DataList","node","DataListItem","DataListItemRow","DataListItemCells","DataListCell","EXPIRED_HOLD_REQUEST_TTL","prevProps","Fetching","buildsContent","EmptyState","EmptyStateIcon","Title","node_expiration","moment","elapsed","timeToDeletion","deletionInfo","deletionInfoMsg","ListItem","PageSection","List","AutoholdTable","autoholds","fetching","columns","handleAutoholdDelete","renderAutoholdDeleteButton","createAutoholdRow","delete_button","createFetchingRow","Spinner","rows","Table","EmptyStateBody","AutoholdModal","showAutoholdModal","setShowAutoholdModal","setChange","changeRef","setChangeRef","setProject","job_name","setJob_name","setReason","setCount","nodeHoldExpiration","setNodeHoldExpiration","handleConfirm","ah_change","ah_ref","Form","FormGroup","TextInput","value","remoteData","artifact","preferences","artifacts","index","TreeView","RESULT_ICON_CONFIGS","DEFAULT_RESULT_ICON_CONFIG","BuildResult","result","link","colored","color","BuildResultBadge","Label","BuildResultWithIcon","size","verticalAlign","Icon","getRefs","i","getRef","Build","buildRef","actionRef","actionChange","index_links","build_log_url","renderAutoholdButton","ANSI_REGEX","failures","Divider","hosts","host","values","Chip","lines","task","zuulOutputClass","stdout_early_lines","stdout_late_lines","stderr_early_lines","stderr_late_lines","term_style","output","failed","INTERESTING_KEYS","interesting_results","ignore_underscore","ret","style","taskPath","displayPath","hostname","dataListCells","interestingKeys","name","labelColor","labelString","duration","content","DataListToggle","DataListContent","modalDescription","play","playbook","errorIds","togglePlays","id","newExpanded","idx2","raw_suffix","obj","n","log_url","sortNumeric","a","b","SCROLL_OFFSET","LogFile","logfileName","logfileContent","handleBreadcrumbItemClick","severity","setSeverity","highlightStart","setHighlightStart","highlightEnd","setHighlightEnd","scrollOnPageLoad","setScrollOnPageLoad","elements","y","handleItemClick","isSelected","writeSeverityToUrl","urlParams","updateSelection","lineClicked","distances","pos","renderLogfile","ToggleGroup","ToggleGroupItem","highlightLine","logfilePath","Breadcrumb","BreadcrumbItem","part","tabIndex","logfile","isFetchingManifest","isFetchingOutput","isFetchingLogfile","activeTab","hash","resultsTabContent","artifactsTabContent","logsTabContent","consoleTabContent","Tabs","Tab","TabTitleIcon","TabTitleText","scrollToTop","buildFromState","makeBuildQueryString","makeBuildsetQueryString","BuildTable","builds","cellWidth","createBuildRow","changeOrRefLink","actions","rowId","rowData","EmptyStateSecondaryActions","paginationOptions","_filters","finalItemCount","filterKey","x1","y1","_oldFilters","x2","y2","_newFilters","equalTest","finalFilters","newState","perPage","pageNumber","resultsPerPage","offset","currentPage","FilterToolbar","Pagination","firstIndex","lastIndex","visibleNonFinalBuilds","showSkipped","retriedJobs","newVisible","hasRetries","RetryIcon","retryAltText","self","skippedJobs","retrySwitch","skippedSwitch","sortedBuilds","linkWrap","cell","ChartModal","chart","isOpen","onClose","buildResultLegendData","buildsBarStyleMap","final","x","buildsBarStyle","datum","BuildsetGanttChart","sortedByStartTime","origin","longestJobName","jobNames","d","legendData","legend","uniqueResults","chartLegend","horizontalLegendTextColor","Chart","ChartLegend","ChartAxis","tick","t","format","ChartBar","ChartTooltip","buildset","Buildset","isGanttChartModalOpen","setIsGanttChartModalOpen","renderBuildTimes","firstStartBuild","prev","cur","lastEndBuild","totalDuration","overallDuration","buildLink","firstStartLink","lastEndLink","showEnqueueModal","setShowEnqueueModal","renderEnqueueButton","enqueueConfirm","renderEnqueueModal","changeInfo","renderEvents","bs_event","BuildsetTable","buildsets","isDurationOpen","setIsDurationOpen","currentDuration","setCurrentDuration","handleDurationSelect","Dropdown","DropdownToggle","next","DropdownItem","createBuildsetRow","expanded","ms","hours","delta","text","remainingTime","elapsedTime","progressPercent","className","progressWidth","remaining","job_times","ordinal_rules","suffixes","to","resultBar","jobs","buttonText","interestingJobs","j","skippedJobCount","globalExpanded","expand","header","itemlist","requestComponents","receiveComponents","components","failedComponents","STATE_ICON_CONFIGS","DEFAULT_STATE_ICON_CONFIG","ComponentStateIcon","ComponentState","ComponentTable","setRows","sortComponents","allRows","sectionIndex","kind","_components","sectionRows","component","createComponentRow","createSectionRow","childrenCount","parent_id","handleCollapse","rowKey","_rows","ComponentsPage","TextContent","Text","ConfigErrorTable","errors","addFilter","expandedRows","setExpandedRows","setRowExpanded","isExpanding","prevExpanded","otherExpandedRows","r","isRowExpanded","createConfigErrorRow","createConfigErrorDetailRow","actionResolver","filterToggle","filterProps","_event","rowIndex","v","prevFilters","newItemCount","FreezeJobToolbar","fetchPipelinesIfNeeded","tenantPipelines","isPipelineOpen","setIsPipelineOpen","currentPipeline","setCurrentPipeline","currentProject","setCurrentProject","currentBranch","setCurrentBranch","currentJob","setCurrentJob","handlePipelineSelect","handlePipelineToggle","handleProjectChange","newValue","handleBranchChange","handleJobChange","handleInputSend","renderFreezeJobToolbar","Toolbar","ToolbarContent","ToolbarToggleGroup","ToolbarGroup","ToolbarItem","FreezeJobPage","onChange","searchParams","tenantJobs","renderFrozenJob","context","showBranch","treeViewItem","nodeset","activeItems","groups","group","group_children","child_node","options","role","CardExpandableContent","FileMatchers","fileMatchers","variant","label","nice_label","alt","items","DescriptionList","DescriptionListGroup","DescriptionListTerm","DescriptionListDescription","activeTabKey","flatten","linkPrefix","jobMap","visited","createNode","extra","tag","getNode","filtered","parents","jobVariant","parent","jobFilter","jobNode","attached","parentNode","FormControl","Checkbox","Jobs","ProviderDetail","image","showBuildModal","setShowBuildModal","renderBuildModal","ImageUploadTable","uploads","showDeleteUploadModal","setShowDeleteUploadModal","pendingDeleteRow","setPendingDeleteRow","createImageUploadRow","upload","renderDeleteUploadModal","haveUploads","ImageBuildTable","buildArtifacts","collapsedRows","setCollapsedRows","showDeleteImageModal","setShowDeleteImageModal","setRowCollapsed","isCollapsing","prevCollapsed","otherCollapsedRows","isRowCollapsed","createImageBuildRow","buildUUID","haveBuildArtifacts","buildRow","renderDeleteImageModal","ImagePage","Level","LevelItem","ImageDetail","ImageTable","createImageRow","haveImages","ImagesPage","FlavorTable","createFlavorRow","flavor","haveFlavors","FlavorsPage","labels","extid","ProjectVariant","templateList","jobList","Project","variantIdx","setVariantIdx","renderVariantTitle","JobGraphToolbar","pipelineSet","renderJobGraphToolbar","makeDot","dark","escaped_url","dep","soft","GraphViz","gv","match","d3","val","JobGraphDisplay","dot","setDot","tenantJobGraph","JobGraph","ProjectPage","fetchProjectIfNeeded","tenantProjects","ProviderImagePage","providerName","providers","provider","LabelTable","createLabelRow","haveLabels","ProviderPage","setActiveTabKey","handleTabClick","ProviderTable","createProviderRow","haveProviders","ProvidersPage","Semaphore","semaphore","holder","SemaphorePage","semaphoreName","SemaphoreTable","createSemaphoreRow","haveSemaphores","SemaphoresPage","message","searchOptions","params","term","fitAddon","webLinksAddon","searchAddon","routes","PipelineOverview","Projects","Labels","Nodes","Autoholds","Semaphores","Builds","Buildsets","FreezeJob","ChangeStatus","Stream","Autohold","ConfigErrors","Tenants","OpenApi","Components","Providers","Provider","ProviderImage","Images","Image","Flavors","AuthCallbackPage","AuthRequiredPage","AuthRequired","menu","allRoutes","AuthCallback","routerProps","isKebabDropdownOpen","notifications","ToastNotificationList","notification","notificationBody","TimedToastNotification","Nav","NavList","NavItem","tenantStatusReady","tenantName","whiteLabel","tenantAction","isTenantDropdownOpen","PageHeaderToolsItem","tenantLink","_tenant","currentPath","suffix","DropdownSeparator","tenantStatus","nav","kebabDropdownItems","pageHeaderTools","PageHeaderTools","PageHeaderToolsGroup","KebabToggle","NotificationBadge","Config","Auth","logoUrl","pageHeader","PageHeader","Brand","Page","auth_params","channel","election","userManager","oidcConfig","msg","olduser","needToUpdate","store","auth_election","waitForever","stored_params","json_params","stateFreezeJobs","stateJobGraphs","filesForBuild","state_projects","stored_prefs","default_prefs","newstate","unused","newJobs","unused2","newQueue","reducers","configureStore","initialState","ReloadButton","reloadCallback","Fetchable","fetchCallback","TENANT_SET","setTenantAction","routePrefix","defaultRoute","INFO_FETCH_REQUEST","INFO_FETCH_SUCCESS","INFO_FETCH_FAIL","fetchInfoRequest","fetchInfoSuccess","fetchInfoFail","shouldFetchInfo","fetchInfoIfNeeded","CHANGE_FETCH_REQUEST","CHANGE_FETCH_SUCCESS","CHANGE_FETCH_FAIL","requestChange","receiveChange","failedChange","fetchChange","shouldFetchChange","fetchChangeIfNeeded","JOB_FETCH_REQUEST","JOB_FETCH_SUCCESS","JOB_FETCH_FAIL","requestJob","receiveJob","jobname","failedJob","shouldFetchJob","fetchJobIfNeeded","JOBS_FETCH_REQUEST","JOBS_FETCH_SUCCESS","JOBS_FETCH_FAIL","requestJobs","receiveJobs","failedJobs","shouldFetchJobs","fetchJobsIfNeeded","LABELS_FETCH_REQUEST","LABELS_FETCH_SUCCESS","LABELS_FETCH_FAIL","requestLabels","receiveLabels","failedLabels","shouldFetchLabels","fetchLabelsIfNeeded","NODES_FETCH_REQUEST","NODES_FETCH_SUCCESS","NODES_FETCH_FAIL","requestNodes","receiveNodes","failedNodes","shouldFetchNodes","fetchNodesIfNeeded","OPENAPI_FETCH_REQUEST","OPENAPI_FETCH_SUCCESS","OPENAPI_FETCH_FAIL","fetchOpenApiRequest","fetchOpenApiSuccess","yaml_data","paths","fetchOpenApiFail","shouldFetchOpenApi","openapi","fetchOpenApiIfNeeded","PROJECT_FETCH_REQUEST","PROJECT_FETCH_SUCCESS","PROJECT_FETCH_FAIL","requestProject","receiveProject","templateIdx","templatePipeline","failedProject","shouldFetchProject","PIPELINES_FETCH_REQUEST","PIPELINES_FETCH_SUCCESS","PIPELINES_FETCH_FAIL","requestPipelines","receivePipelines","failedPipelines","shouldFetchPipelines","PROJECTS_FETCH_REQUEST","PROJECTS_FETCH_SUCCESS","PROJECTS_FETCH_FAIL","requestProjects","receiveProjects","failedProjects","shouldFetchProjects","fetchProjectsIfNeeded","useDocumentVisibility","setIsDocumentVisible","handleVisibilityChange","useInterval","callback","delay","savedCallback","QUEUE_ITEM_ICON_CONFIGS","PIPELINE_ICON_CONFIGS","DEFAULT_PIPELINE_ICON_CONFIG","JOB_STATE_ICON_CONFIGS","DEFAULT_JOB_STATE_ICON_CONFIG","getJobResultIconConfig","getQueueItemIconConfig","PipelineIcon","getChangeLabel","changeTitle","changeText","githubId","ChangeLink","getJobStrResult","calculateQueueItemTimes","maxRemaining","now","jobElapsed","jobRemaining","jobStart","QueueItemProgressbar","interesting_jobs","jobPercent","JobProgressBar","remainingTimeStr","progressBar","JobStatusLabel","JobLink","JobResultOrStatus","isPipelineEmpty","len","countPipelineItems","countQueueItems","FilterSelect","setIsOpen","selected","setSelected","setOptions","onToggle","onSelect","onFilterChange","newSelected","onClear","chipGroupComponent","chipped","ChipGroup","currentChip","onCreateOption","newOptions","option","FilterTernarySelect","_selected","_selection","setNewFilter","FilterCheckbox","checked","ToolbarStatsGroup","ToolbarStatsItem","tooltipContent","reverse","value_span","name_span","isCategoryDropdownOpen","setIsCategoryDropdownOpen","currentCategory","setCurrentCategory","inputValue","setInputValue","handleCategoryToggle","handleCategorySelect","handleInputChange","_inputValue","validationResult","handleDelete","type","s","renderCategoryDropdown","renderFilterInput","InputGroup","renderFilterDropdown","ToolbarFilter","getChipsFromFilters","getFiltersFromUrl","param","pagination_options","writeFiltersToUrl","makeQueryString","isFilterActive","applyFilter","haystack","searchTerms","searchPatterns","PREFERENCE_SET","setPreference","FilterDropdown","isFilterDropdownOpen","setIsFilterDropdownOpen","onFilterDropdownSelect","applyFilters","filterChange","filterParams","filterProject","filterItem","filterDropdownItems","JobRow","SkippedJobList","JobList","isSkippedJobsExpanded","onSkippedJobsToggle","DequeueModal","onConfirm","onCancel","refId","PromoteModal","QueueItem","isAdminActionsOpen","setIsAdminActionsOpen","isDequeueModalOpen","setIsDequeueModalOpen","isPromoteModalOpen","setIsPromoteModalOpen","setIsSkippedJobsExpanded","expandedJobs","skippedjobs","isJobsExpanded","onJobsToggle","showDequeueModal","showPromoteModal","confirmDequeue","refRef","confirmPromote","cancelDequeue","cancelPromote","adminActions","CardActions","ExpandableSection","createTree","tree","itemsById","items_behind","item_behind","BranchIcon","Branch","newBranch","step","ProgressStep","wrappedStep","ProgressStepper","showTitle","trees","Panel","ADD_NOTIFICATION","CLEAR_NOTIFICATION","CLEAR_NOTIFICATIONS","notificationId","addNotification","addApiError","clearNotification","clearNotifications","TIMEZONE_SET","setTimezoneAction","BUILD_FETCH_REQUEST","BUILD_FETCH_SUCCESS","BUILD_FETCH_FAIL","BUILDSET_FETCH_REQUEST","BUILDSET_FETCH_SUCCESS","BUILDSET_FETCH_FAIL","BUILD_OUTPUT_REQUEST","BUILD_OUTPUT_SUCCESS","BUILD_OUTPUT_FAIL","BUILD_OUTPUT_NOT_AVAILABLE","BUILD_MANIFEST_REQUEST","BUILD_MANIFEST_SUCCESS","BUILD_MANIFEST_FAIL","BUILD_MANIFEST_NOT_AVAILABLE","requestBuild","receiveBuild","failedBuild","requestBuildOutput","renderTree","textRenderer","defaultRenderer","didTaskFail","hasInterestingKeys","keys","k","findLoopLabel","shouldIncludeKey","included","makeTaskPath","taskPathMatches","test","receiveBuildOutput","taskFailed","taskResult","phase","failedBuildOutput","requestBuildManifest","receiveBuildManifest","manifest","renderNode","root","object","failedBuildManifest","buildOutputNotAvailable","buildManifestNotAvailable","fetchBuildOutput","fetchBuildManifest","fetchBuildAllInfo","requestBuildset","receiveBuildset","failedBuildset","shouldFetchBuildset","fetchBuildsetIfNeeded","formatEnqueueTime","STATUSEXPANSION_EXPAND_JOBS","STATUSEXPANSION_COLLAPSE_JOBS","STATUSEXPANSION_CLEANUP_JOBS","STATUSEXPANSION_CLEAR_JOBS","STATUSEXPANSION_EXPAND_QUEUE","STATUSEXPANSION_COLLAPSE_QUEUE","STATUSEXPANSION_CLEANUP_QUEUE","STATUSEXPANSION_CLEAR_QUEUE","expandJobsAction","collapseJobsAction","cleanupJobsAction","clearJobsAction","expandQueueAction","collapseQueueAction","cleanupQueueAction","clearQueueAction","expandJobs","collapseJobs","cleanupJobs","clearJobs","expandQueue","collapseQueue","cleanupQueue","clearQueue","PROVIDERS_FETCH_REQUEST","PROVIDERS_FETCH_SUCCESS","PROVIDERS_FETCH_FAIL","requestProviders","receiveProviders","failedProviders","shouldFetchProviders","fetchProvidersIfNeeded","removeHash","ExternalLink","target","buildExternalLink","buildExternalTableLink","describeRef","renderRefInfo","refinfo","IconProperty","WrapElement","ConditionalWrapper","condition","wrapper","resolveDarkMode","setDarkMode","formatTime","AUTOHOLDS_FETCH_REQUEST","AUTOHOLDS_FETCH_SUCCESS","AUTOHOLDS_FETCH_FAIL","AUTOHOLD_FETCH_REQUEST","AUTOHOLD_FETCH_SUCCESS","AUTOHOLD_FETCH_FAIL","requestAutoholds","receiveAutoholds","failedAutoholds","shouldFetchAutoholds","fetchAutoholdsIfNeeded","requestAutohold","receiveAutohold","failedAutohold","AUTH_CONFIG_REQUEST","AUTH_CONFIG_SUCCESS","AUTH_CONFIG_FAIL","USER_ACL_REQUEST","USER_ACL_SUCCESS","USER_ACL_FAIL","AUTH_START","authConfigRequest","createAuthParamsFromJson","auth_info","realm","client_config","authConfigSuccess","authConfigFail","configureAuthFromTenant","configureAuthFromInfo"],"mappings":"iIAeA,4KAEO,MAAMA,EAAuB,uBACvBC,EAAuB,uBACvBC,EAAoB,oBAEpBC,EAAgB,KAAO,CAClC,KAAMH,CACR,GAEaI,EAAgB,CAACC,EAAQC,KAAU,CAC9C,KAAML,EACN,OAAAI,EACA,OAAQC,EACR,WAAY,KAAK,IAAI,CACvB,GAEMC,EAAeC,IAAU,CAC7B,KAAMN,EACN,MAAAM,CACF,GAEaC,EAAeJ,GAAWK,IACrCA,EAASP,EAAc,CAAC,EACjB,IAAgBE,EAAO,SAAS,EACpC,KAAKM,GAAYD,EAASN,EAAcC,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACpE,MAAMH,GAASE,EAASH,EAAaC,CAAK,CAAC,CAAC,GAG3CI,EAAoB,CAACP,EAAQQ,IAAU,CAC3C,MAAMC,EAASD,EAAM,OAAO,OAAOR,EAAO,MAC1C,OAAKS,GAGDA,EAAO,WACF,IAHA,EAMX,EAEaC,EAAuBV,GAAW,CAACK,EAAUM,IACpDJ,EAAkBP,EAAQW,EAAS,CAAC,EAC/BN,EAASD,EAAYJ,CAAM,CAAC,EAE9B,QAAQ,QAAQ,C,oEC3CvBY,GAAO,QAAU,EAAQ,IAAc,C,wBChBzCA,GAAO,QAAU,IAA0B,gC,sCCc3C,0TAmDA,MAAMC,GAAmB,CACvB,CACE,IAAK,UACL,MAAO,UACP,YAAa,uBACb,KAAM,cACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,cACR,EACA,CACE,IAAK,QACL,MAAO,QACP,YAAa,qBACb,KAAM,cACR,CACF,EAEA,SAASC,GAAgB,CAAE,SAAAC,EAAS,EAAG,CAErC,MAAMC,GAAeD,GAAS,SAAW,UACnCE,GAAYF,GAAS,OAE3B,OACE,oCACE,kBAAC,IAAK,CAAC,aAAa,MAClB,kBAAC,KAAY,CAAC,aAAAC,EAAA,CAA4B,EACzCD,GAAS,KACV,kBAAC,IAAO,CACN,QACEE,KAAc,EACV,kBAAC,WAAKA,GAAU,gBAAc,EAC9B,kBAAC,WAAKA,GAAU,iBAAe,GAGrC,kBAAC,IAAK,CACJ,OAAM,GACN,MAAO,CACL,WAAY,+BACZ,cAAe,QACf,SAAU,gCACZ,GAECA,EACH,CACF,CACF,EACA,kBAAC,IAAI,KACH,kBAAC,IAAQ,CAAC,KAAM,GACd,kBAAC,IAAW,KACV,kBAAC,IAAI,CAAC,UAAW,IAAa,GAC3BF,GAAS,WACZ,CACF,CACF,CACF,CACF,CAEJ,CAEAD,GAAgB,UAAY,CAC1B,SAAU,IAAU,OAAO,UAC7B,EAEA,SAASI,GAAoB,CAC3B,SAAAH,GAAU,WAAAI,GAAY,OAAAnB,GAAQ,SAAAoB,GAAU,WAAAC,GAAY,oBAAAC,GAAqB,QAAAC,EAC3E,EAAG,CACD,KAAM,CAACC,GAAaC,EAAc,EAAI,mBAAS,EAAK,EAC9C,CAACC,EAAmBC,CAAoB,EAAI,mBAChD,aAAa,QAAQ,wBAAwB,IAAM,MAAM,EAErDC,EAAoB,aAAsB,EAE1CC,EAAW,YAAY,EACvBC,EAAU,YAAW,EACrBC,EAAU,aAAkBF,EAAUhB,EAAgB,EACtDR,EAAW,YAAY,EAEvB2B,EAAa,sBAAahC,IAAW,CACrCA,GAAO,OACTyB,GAAe,EAAI,EACnBH,GAAoBtB,EAAM,EACvB,KAAK,IAAM,CACVyB,GAAe,EAAK,CACtB,CAAC,EAEP,EAAG,CAACA,GAAgBH,EAAmB,CAAC,EAExC,oBAAU,IAAM,CACd,SAAS,MAAQ,wBAEjBU,EAAWhC,EAAM,CACnB,EAAG,CAACgC,EAAYhC,EAAM,CAAC,EAIvB,aAAY,IAAM,CACZ4B,GAAqBP,IACvBW,EAAWhC,EAAM,CAGrB,EAAGwB,GAAc,KAAO,GAAI,EAE5B,MAAMS,EAAuBC,IAAc,CACzCP,EAAqBO,EAAS,EAC9B,aAAa,QAAQ,yBAA0BA,GAAU,SAAS,CAAC,EACnE7B,EAAS,aAAU,CAAC,CACtB,EAEA,OAAIU,KAAa,QAAc,CAACS,IAAeL,GACtC,kBAAC,KAAQ,IAAC,EAGdJ,GAYH,oCACE,kBAAC,IAAW,CACV,QAASK,GAAW,IAAoB,KAAO,IAAoB,MACnE,UAAU,wBAEV,kBAAC,IAAK,KACJ,kBAAC,IAAS,KACR,kBAAC,KAAa,CACZ,iBAAAP,GACA,eAAiBsB,IAAe,CAAE,aAAmBA,GAAYN,EAAUC,CAAO,CAAE,EACpF,QAAAC,EACA,4BAEA,kBAAC,IAAW,KACV,kBAAC,IAAM,CACL,UAAU,uBACV,aAAW,gBACX,MAAM,gBACN,WAAU,GACV,SAAUE,EACV,UAAWP,CAAA,CACb,CACF,CACF,CACF,EACA,kBAAC,IAAS,KACR,kBAAC,KAAO,KACN,kBAAC,KAAc,CAAC,MAAO,CAAC,aAAc,GAAG,GACvC,kBAAC,KAAiB,KAChB,kBAAC,KAAgB,CACf,KAAK,SACL,MAAO,GAAGX,GAAS,oBAAoBA,GAAS,uBAAuBA,GAAS,gBAChF,eACE,kBAAC,WAAI,mBACcA,GAAS,eAAe,IAAC,kBAAC,SAAG,EAAE,sBAC5BA,GAAS,kBAAkB,IAAC,kBAAC,SAAG,EAAE,kBACtCA,GAAS,aAC3B,EAEJ,EACA,kBAAC,IAAW,KACV,kBAAC,KAAY,CACX,YAAAS,GACA,eAAgB,IAAMQ,EAAWhC,EAAM,EACzC,CACF,CACF,CACF,CACF,CACF,CACF,EACA,kBAACc,GAAA,CAAgB,SAAAC,EAAA,CAAoB,CACvC,EACA,kBAAC,IAAW,CACV,QAASK,GAAW,IAAoB,KAAO,IAAoB,MACnE,UAAU,qBAET,CAACG,IACA,kBAAC,IAAK,CAAC,aAAa,MAClB,kBAAC,IAAU,CACT,MAAO,CACL,YAAa,+BACb,cAAe,QACjB,EACF,EAAG,IAAI,QAET,EAEF,kBAAC,KAAO,CACN,UAAS,GACT,UAAW,CACT,GAAI,OACN,GAGER,GAAS,cAAc,OACrBqB,IAASA,GAAM,MAAM,OAAS,CAChC,EAAE,IAAI,CAACA,GAAOC,KACZ,kBAAC,KAAW,CAAC,IAAKA,EAAA,EAChB,kBAAC,IAAW,CAAC,MAAAD,GAAc,SAAArB,GAAoB,aAAcW,CAAA,CAAmB,CAClF,CACD,CAEL,EACCH,IACC,kBAAC,KAAQ,CACP,MAAM,iBACN,KAAM,IACN,OAAO,oBACP,SAAU,IAAM,aAAaM,EAAUC,EAASjB,EAAgB,GACjE,wFAGD,CAEJ,CACF,EA1GE,kBAAC,KAAS,CACR,MAAM,+BACN,KAAM,IACN,WAAY,GAAGb,GAAO,oBACtB,SAAS,sBACX,CAuGN,CAEAkB,GAAoB,UAAY,CAC9B,MAAO,IAAU,OAAO,WACxB,SAAU,IAAU,OACpB,WAAY,IAAU,KACtB,OAAQ,IAAU,OAClB,SAAU,IAAU,KACpB,WAAY,IAAU,KAAK,WAC3B,oBAAqB,IAAU,KAAK,WACpC,QAAS,IAAU,IACrB,EAEA,SAASoB,GAAgB9B,GAAO+B,GAAU,CACxC,IAAIxB,GAAW,KACf,GAAIP,GAAM,OAAO,OAAQ,CACvB,MAAMuB,GAAU,aAAkBQ,GAAS,SAAU1B,EAAgB,EAI/D2B,GAAYC,EAAO,gBAAgBjC,GAAM,OAAO,OAAO,SAAS,EAEtEO,GAAW,aAAgByB,GAAWT,GAASlB,GAAkB,EAAK,EACnE,KAAM6B,IAAMA,GAAE,OAASH,GAAS,MAAM,OAAO,YAAY,GAAK,KACjExB,GAAW,aAAmBA,EAAQ,CACxC,CAEA,MAAMQ,GAAUR,IAAY,aAAgBA,EAAQ,EAEpD,MAAO,CACL,SAAAA,GACA,WAAYP,GAAM,OAAO,WACzB,OAAQA,GAAM,OACd,SAAUA,GAAM,YAAY,SAC5B,WAAYA,GAAM,YAAY,WAC9B,QAAAe,EACF,CACF,CAEA,MAAMoB,GAAqB,CAAE,wBAAoB,EAElC,gBACbL,GACAK,EACF,EAAE,YAAWzB,EAAmB,CAAC,C,uDCjUjC,4IAEO,MAAM0B,EAAuB,uBACvBC,EAAuB,uBACvBC,EAAoB,oBAEpBC,EAAgB,KAAO,CAClC,KAAMH,CACR,GAKMI,EAAiB/C,IAAU,CAC/B,KAAM4C,EACN,OAAQ5C,EACR,WAAY,KAAK,IAAI,CACvB,GAEMgD,EAAe9C,IAAU,CAC7B,KAAM2C,EACN,MAAA3C,CACF,GASM+C,EAAelD,GAAWK,IAC9BA,EAAS0C,EAAc,CAAC,EACjB,IAAgB/C,EAAO,SAAS,EACpC,KAAKM,GAAYD,EAAS2C,EAAc1C,EAAS,IAAI,CAAC,CAAC,EACvD,MAAMH,GAASE,EAAS4C,EAAa9C,CAAK,CAAC,CAAC,GAG3CgD,EAAoB3C,GAAS,CACjC,MAAM4C,EAAS5C,EAAM,OACrB,OAAK4C,EAGD,CAAAA,EAAO,WAFF,EAMX,EAEa9B,EAAuBtB,GAAW,CAACK,EAAUM,IACpDwC,EAAkBxC,EAAS,CAAC,EACvBN,EAAS6C,EAAYlD,CAAM,CAAC,EAE9B,QAAQ,QAAQ,C,sCCrDzB,8QA4CA,MAAMa,GAAmB,CACvB,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,cACR,EACA,CACE,IAAK,UACL,MAAO,UACP,YAAa,uBACb,KAAM,cACR,EACA,CACE,IAAK,QACL,MAAO,QACP,YAAa,qBACb,KAAM,cACR,EACA,CACE,IAAK,WACL,MAAO,WACP,YAAa,wBACb,KAAM,cACR,CACF,EAGA,SAASwC,GAAgB,CAAE,UAAAb,GAAW,OAAAxC,GAAQ,iBAAAsD,GAAkB,UAAAC,GAAW,UAAAC,GAAW,QAAAzB,GAAS,eAAA0B,EAAe,EAAG,CAE/G,OAAKH,KACHd,GAAYA,GAAU,OAAOkB,IAAOA,GAAI,OAAS,CAAC,GAIlD,oCACE,kBAAC,IAAO,CACN,UAAS,GACT,UAAW,CACT,GAAI,OACN,GAEClB,GAAU,IAAIzB,IACb,kBAAC,IAAW,CAAC,IAAKA,GAAS,MACzB,kBAAC,KAAe,CAAC,SAAAA,GAAoB,OAAAf,GAAgB,cAAesD,GAAkB,mBAAoBC,GAAW,QAAAxB,EAAA,CAAkB,CACzI,CACD,CACH,EAEC,CAACyB,IAAahB,GAAU,SAAW,GAClC,kBAAC,KAAQ,CAAC,MAAM,iBACd,KAAM,KACN,OAAO,oBACP,SAAUiB,EAAA,EAAgB,wFAG5B,CAEJ,CAEJ,CAEAJ,GAAgB,UAAY,CAC1B,UAAW,IAAU,MACrB,OAAQ,IAAU,OAClB,iBAAkB,IAAU,KAC5B,UAAW,IAAU,KACrB,UAAW,IAAU,KACrB,QAAS,IAAU,OACnB,eAAgB,IAAU,IAC5B,EAEA,SAASM,GAAaP,GAAQvB,GAAU,CACtC,IAAIW,GAAY,CAAC,EACboB,GAAQ,CAAC,EACb,GAAIR,GAAQ,CACV,MAAMrB,GAAU,YAAkBF,GAAUhB,EAAgB,EAI5D2B,GAAYC,EAAO,gBAAgBW,GAAO,SAAS,EACnDZ,GAAY,aAAgBA,GAAWT,GAASlB,GAAkB,EAAI,EAEtE2B,GAAYA,GAAU,IAAIkB,IACxB,aAAmBA,EAAG,CACvB,EACDE,GAAQ,CACN,oBAAqBR,GAAO,oBAC5B,uBAAwBA,GAAO,uBAC/B,kBAAmBA,GAAO,iBAC5B,CACF,CACA,MAAO,CACL,UAAAZ,GACA,MAAAoB,EACF,CACF,CAEA,SAASC,IAAuB,CAC9B,MAAMhC,GAAW,YAAY,EACvBC,GAAU,YAAW,EACrBC,GAAU,YAAkBF,GAAUhB,EAAgB,EACtDiD,GAAe,YAAe/B,EAAO,EAErC,CAACuB,GAAkBS,EAAmB,EAAI,mBAC9CD,IAAgB,aAAa,QAAQ,yBAAyB,IAAM,MAAM,EACtE,CAACP,GAAWS,EAAY,EAAI,mBAChC,aAAa,QAAQ,0BAA0B,IAAM,MAAM,EACvD,CAACxC,GAAaC,EAAc,EAAI,mBAAS,EAAK,EAE9CG,GAAoB,aAAsB,EAE1CwB,GAAS,YAAa5C,IAAUA,GAAM,OAAO,MAAM,EACnD,CAAE,UAAAgC,GAAW,MAAAoB,EAAM,EAAI,kBAAQ,IAAMD,GAAaP,GAAQvB,EAAQ,EAAG,CAACuB,GAAQvB,EAAQ,CAAC,EAEvFV,EAAa,YAAaX,IAAUA,GAAM,OAAO,UAAU,EAC3DR,EAAS,YAAaQ,IAAUA,GAAM,MAAM,EAC5CY,EAAW,YAAaZ,IAAUA,GAAM,YAAY,QAAQ,EAC5Da,EAAa,YAAab,IAAUA,GAAM,YAAY,UAAU,EAChEyD,EAAW,YAAazD,IAAUA,GAAM,QAAQ,EAChDH,EAAW,YAAY,EAEvB6D,EAA4BhC,IAAc,CAC9C6B,GAAoB7B,EAAS,EAC7B,aAAa,QAAQ,0BAA2BA,GAAU,SAAS,CAAC,CACtE,EAEMiC,EAAqBjC,IAAc,CACvC8B,GAAa9B,EAAS,EACtB,aAAa,QAAQ,2BAA4BA,GAAU,SAAS,CAAC,EACrE7B,EAAS,aAAW,CAAC,CACvB,EAEM+D,EAAmBjC,IAAe,CACtC,aAAmBA,GAAYN,GAAUC,EAAO,EAEhDiC,GACE,YAAe5B,EAAU,GAAK,aAAa,QAAQ,yBAAyB,IAAM,MAAM,CAC5F,EAEMsB,GAAiB,IAAM,CAC3B,aAAa5B,GAAUC,GAASjB,EAAgB,EAEhDkD,GAAoB,aAAa,QAAQ,yBAAyB,IAAM,MAAM,CAChF,EAEM/B,GAAa,sBAAahC,IAAW,CACrCA,GAAO,OACTyB,GAAe,EAAI,EACnBpB,EAAS,aAAoBL,EAAM,CAAC,EACjC,KAAK,IAAM,CACVyB,GAAe,EAAK,CACtB,CAAC,EAEP,EAAG,CAACA,GAAgBpB,CAAQ,CAAC,EAkB7B,GAhBA,oBAAU,IAAM,CACd,SAAS,MAAQ,cAEjB2B,GAAWhC,CAAM,CACnB,EAAG,CAACgC,GAAYhC,CAAM,CAAC,EAGvB,aAAY,IAAM,CACZ4B,IAAqBP,GACvBW,GAAWhC,CAAM,CAGrB,EAAGwB,GAAc,KAAO,GAAI,EAIxB,CAACA,IAAeL,EAClB,OAAO,kBAAC,IAAQ,IAAC,EAGnB,MAAMkD,GACJ,kBAAC,IAAM,CACL,UAAU,uBACV,GAAG,sBACH,aAAW,qBACX,MAAM,qBACN,WAAU,GACV,UAAWf,GACX,WAAYQ,GACZ,SAAUI,CAAA,CACZ,EAGF,IAAII,GAAiBV,GAAM,oBAAsBA,GAAM,oBAAoB,OAAS,IAChFW,GAAoBX,GAAM,uBAAyBA,GAAM,uBAAuB,OAAS,IAE7F,OACE,oCACE,kBAAC,IAAW,CACV,QAASxC,EAAW,IAAoB,KAAO,IAAoB,MACnE,UAAU,wBAEV,kBAAC,IAAK,KACJ,kBAAC,IAAS,KACR,kBAAC,IAAa,CACZ,iBAAAP,GACA,eAAgBuD,EAChB,QAAArC,GACA,4BAEA,kBAAC,IAAW,KACT+B,GACC,kBAAC,IAAO,CAAC,QAAQ,2BAA2BO,EAAmB,EAC/DA,EACJ,EACA,kBAAC,IAAW,KACV,kBAAC,IAAM,CACL,UAAU,uBACV,aAAW,aACX,MAAM,aACN,WAAU,GACV,SAAUF,EACV,UAAWZ,EAAA,CACb,CACF,CACF,CACF,EACA,kBAAC,IAAS,KACR,kBAAC,IAAO,KACN,kBAAC,IAAc,CAAC,MAAO,CAAC,aAAc,GAAG,GACvC,kBAAC,IAAiB,KAChB,kBAAC,IAAgB,CACf,KAAK,SACL,MAAO,GAAGe,QAAoBC,KAC9B,eACE,kBAAC,WAAI,mBACcD,GAAe,IAAC,kBAAC,SAAG,EAAE,sBACnBC,EACtB,EACJ,EACA,kBAAC,IAAgB,CACf,KAAK,eACL,MAAO,MAAcX,GAAM,iBAAiB,EAAE,GAAGK,CAAQ,EAAE,QAAQ,EACnE,QAAO,GACP,eACE,kBAAC,WAAI,sBACgB,kBAAC,SAAG,EACtB,MAAcL,GAAM,iBAAiB,EAAE,GAAGK,CAAQ,EAAE,OAAO,MAAM,CACpE,EAEJ,EACA,kBAAC,IAAW,KACV,kBAAC,IAAY,CACX,YAAAzC,GACA,eAAgB,IAAMQ,GAAWhC,CAAM,EACzC,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,kBAAC,IAAW,CACV,QAASoB,EAAW,IAAoB,KAAO,IAAoB,MACnE,UAAU,qBAEV,kBAACiC,GAAA,CACC,UAAAb,GACA,OAAAxC,EACA,iBAAAsD,GACA,UAAAC,GACA,UAAWpC,EACX,QAAAY,GACA,eAAA0B,EAAA,CACF,CACF,CACF,CAEJ,CAEe,gBAAWI,EAAoB,C,uDChU9C,oLAGO,MAAMW,EAAiB,iBACjBC,EAAkB,kBAKxB,SAASC,EAASC,EAAM,CAC7B,GAAI,CACF,YAAK,MAAM,KAAKA,EAAK,aAAa,MAAM,GAAG,EAAE,EAAE,CAAC,EACzCA,EAAK,YACd,OAASC,EAAP,CACA,OAAOD,EAAK,QACd,CACF,CAEO,MAAME,EAAuB7E,IAAY,CAC9C,KAAM,IACN,OAAAA,CACF,GAEa8E,EAAe,CAACH,EAAMI,IAAc1E,GAAa,CAC5D,MAAM2E,EAAQN,EAASC,CAAI,EAC3B,IAAiBK,CAAK,EACtB3E,EAAS,CACP,KAAMmE,EACN,KAAAG,EACA,MAAAK,EACA,SAAAD,CACF,CAAC,CACH,EAEaE,EAAgB,IAAO5E,GAAa,CAC/CA,EAAS,CACP,KAAMoE,CACR,CAAC,CACH,EAEMS,EAAuBjF,IAAU,CACrC,KAAM,IACN,QAASA,EAAK,KAAK,MACnB,MAAOA,EAAK,KAAK,KACnB,GAEMkF,EAAmBhF,IAAU,CACjC,KAAM,IACN,MAAAA,CACF,GAEaiF,EAAgBpF,GAAYK,GAAa,CACpDA,EAASwE,EAAoB7E,EAAQA,EAAO,KAAO,IAAI,CAAC,EAExD,MAAMqF,EAAYrF,GAAUA,EAAO,KAAOA,EAAO,UAAY,GAC7D,OAAO,IAA4BqF,CAAS,EACzC,KAAK/E,GAAYD,EAAS6E,EAAoB5E,EAAS,IAAI,CAAC,CAAC,EAC7D,MAAMH,GAAS,CACdE,EAAS8E,EAAiBhF,CAAK,CAAC,CAClC,CAAC,CACL,C,4PC7CA,SAASmF,GAAiB,CAAE,KAAAC,GAAM,eAAAC,EAAe,EAAG,CAKlD,KAAM,CAACC,GAAWC,EAAY,EAAI,mBAAS,IAAI,EACzCC,GAAQ,aAAwBJ,EAAI,EAE1C,OACE,kBAACK,EAAA,EAAO,CACN,UAAU,0BACV,aAAW,oBACX,UAAAH,GAOA,YAAa,IAAM,CAACC,GAAa,IAAI,CAAC,EACtC,cACE,aAAQH,EAAI,EAAE,IAAI,CAACM,GAAQxD,KACzB,kBAAC,OAAI,IAAKA,EAAA,EACPwD,GAAO,QAAQ,IAAC,kBAAC,KAAU,CAAC,OAAAA,EAAA,CAAgB,CAC/C,CACD,EAEH,YACE,kBAACC,GAAA,EAAiB,CAAC,KAAAP,GAAY,MAAAI,EAAA,CAAc,GAe/C,kBAAC,QACC,aAAef,IAAM,CACfA,GAAE,QAAWc,GAAa,EAAI,EAC3BA,GAAa,IAAI,CAC1B,EACA,aAAed,IAAM,CACfA,GAAE,QAAWc,GAAa,EAAK,EAC5BA,GAAa,IAAI,CAC1B,GAECF,EACH,CACF,CAEJ,CAEAF,GAAiB,UAAY,CAC3B,KAAM,IAAU,OAChB,eAAgB,IAAU,MAC5B,EAEA,SAAShD,GAAgB9B,GAAO,CAC9B,MAAO,CACL,SAAUA,GAAM,YAAY,QAC9B,CACF,CAEe,kBAAQ8B,EAAe,EAAEgD,EAAgB,E,2BC1DxD,SAASS,GAA2B,CAAE,KAAAR,EAAK,EAAG,CAC5C,OACE,kBAAC,EAAgB,CACf,KAAAA,GACA,eAAgB,kBAACS,GAAA,CAAgB,KAAAT,EAAA,CAAY,EAC/C,CAEJ,CAEAQ,GAA2B,UAAY,CACrC,KAAM,IAAU,MAClB,EAEA,SAASC,GAAgB,CAAE,KAAAT,EAAK,EAAG,CACjC,MAAMU,GAAa,aAAuBV,EAAI,EAC9C,OACE,kBAACW,EAAA,EAAM,CACL,QAAQ,QACR,UAAW,qCAAqCD,GAAW,WAE3D,kBAAC,IAAU,IAAC,CACd,CAEJ,CAEAD,GAAgB,UAAY,CAC1B,KAAM,IAAU,MAClB,EAEA,SAASG,GAAU,CAAE,SAAApF,GAAU,MAAAqB,GAAO,kBAAAgE,GAAmB,aAAAC,EAAa,EAAG,CACvE,MAAMC,GAAe,GAAGvF,GAAS,QAAQqB,GAAM,OACzCmE,GAAgB,YAAY/F,IAASA,GAAM,gBAAgB,cAAc8F,GAAa,EACtFE,GAAkBD,KAAkB,OAAYH,GAAoBG,GACpElG,GAAW,YAAY,EAEvBoG,GAAiBC,IAAe,CAElCrG,GADEqG,GACO,aAAYJ,EAAY,EAExB,aAAcA,EAAY,CAFD,CAItC,EAEA,OACE,kBAACK,EAAA,EAAI,CAAC,QAAO,GAAC,UAAU,qBACtB,kBAACC,EAAA,EAAU,CAAC,MAAO,CAAE,QAAS,GAAI,GAChC,kBAACC,EAAA,EAAS,KACPzE,GAAM,KACNA,GAAM,OAAS,KAAKA,GAAM,UAAY,GACvC,kBAAC0E,EAAA,EAAO,CACN,QACE,kBAAC,OAAI,MAAO,CAAE,UAAW,MAAO,GAAG,iBAClB1E,GAAM,OAAO,kBAAC,SAAG,EAAE,gBAAcA,GAAM,MACxD,GAGF,kBAAC2E,EAAA,EAAK,CACJ,OAAM,GACN,MAAO,CAAE,WAAY,+BAAgC,cAAe,OAAQ,GAE3E3E,GAAM,OAAO,MAAIA,GAAM,MAC1B,CACF,EACCoE,GACC,kBAAC,IAAa,CAAC,UAAU,mBAAmB,QAAS,IAAMC,GAAc,EAAK,EAAG,EAEjF,kBAAC,IAAc,CAAC,UAAU,mBAAmB,QAAS,IAAMA,GAAc,EAAI,EAAG,CAErF,CACF,EACCD,GAAkB,KACjB,kBAACQ,EAAA,EAAQ,CAAC,MAAO,CAAE,QAAS,GAAI,GAC7B5E,GAAM,MAAM,IAAK6E,IAChBA,GAAK,IAAK1B,IAAS,kBAACQ,GAAA,CAA2B,KAAAR,GAAY,IAAKA,GAAK,GAAI,CAAE,CAC5E,CACH,EAEDiB,GACC,kBAACU,GAAA,EAAW,CAAC,MAAA9E,GAAc,SAAArB,GAAoB,UAAW,GAAO,aAAAsF,EAAA,CAA4B,EAC3F,IAEN,CAEJ,CAEAF,GAAU,UAAY,CACpB,SAAU,IAAU,OACpB,MAAO,IAAU,OACjB,kBAAmB,IAAU,KAC7B,aAAc,IAAU,IAC1B,EAEA,SAASgB,GAAa,CAAE,SAAApG,GAAU,cAAAqG,GAAe,kBAAAhB,GAAmB,aAAAC,EAAa,EAAG,CAClF,IAAIgB,GAAetG,GAAS,cAE5B,OAAKqG,KACHC,GAAeA,GAAa,OAAOjF,IAASA,GAAM,MAAM,OAAS,CAAC,GAIlEiF,GAAa,IAAI,CAACjF,GAAOC,KACnBD,GAAM,KAGN,kBAAC+D,GAAA,CACC,IAAK,GAAG/D,GAAM,OAAOA,GAAM,SAC3B,SAAArB,GACA,MAAAqB,GACA,kBAAAgE,GACA,aAAAC,EAAA,CACF,EAQAD,GACE,kBAACc,GAAA,EAAW,CAAC,IAAK7E,GAAK,MAAAD,GAAc,SAAArB,GAAoB,UAAW,GAAO,aAAAsF,EAAA,CAA4B,EAEvG,kBAACiB,EAAA,EAAI,CACH,IAAKjF,GACL,QAAS,CAAE,QAAS,YAAa,EACjC,WAAY,CAAE,QAAS,gBAAiB,GAEvCD,GAAM,MAAM,IAAK6E,IAChBA,GAAK,IAAK1B,IACR,kBAACgC,EAAA,EAAQ,CAAC,IAAKhC,GAAK,IAClB,kBAACQ,GAAA,CAA2B,KAAAR,EAAA,CAAY,CAC1C,CACD,CACF,CACH,CAGP,CAEL,CAEA4B,GAAa,UAAY,CACvB,SAAU,IAAU,OACpB,cAAe,IAAU,KACzB,kBAAmB,IAAU,KAC7B,aAAc,IAAU,IAC1B,EAEA,SAASK,GAAgB,CAAE,SAAAzG,GAAU,OAAAf,GAAQ,cAAAoH,GAAe,mBAAAK,GAAoB,QAAA1F,EAAQ,EAAG,CACzF,MAAMf,GAAeD,GAAS,SAAW,UACnCE,GAAYF,GAAS,OACrBuF,GAAe,GAAGvF,GAAS,OAC3BwF,GAAgB,YAAY/F,IAASA,GAAM,gBAAgB,cAAc8F,GAAa,EACtFjG,GAAW,YAAY,EAEvBmG,GAAkBD,KAAkB,OAAYkB,GAAqBlB,GAErEE,GAAiBC,IAAe,CAElCrG,GADEqG,GACO,aAAYJ,EAAY,EAExB,aAAcA,EAAY,CAFD,CAItC,EAEA,OACE,kBAACK,EAAA,EAAI,CAAC,UAAU,2CACd,kBAACC,EAAA,EAAU,KACT,kBAACC,EAAA,EAAS,KACR,kBAACC,EAAA,EAAO,CAAC,QAAS/F,GAAS,YAAcA,GAAS,YAAc,IAC9D,kBAAC,KAAY,CAAC,aAAAC,EAAA,CAA4B,CAC5C,EACA,kBAAC,IAAI,CACH,GAAI,CACF,SAAU,GAAGhB,GAAO,8BAA8Be,GAAS,OAC3D,OAAQ,UAAU,YAAgBgB,EAAO,CAAC,CAC5C,EACA,UAAU,sBAEThB,GAAS,IACZ,EACA,kBAAC+F,EAAA,EAAO,CACN,QACE7F,KAAc,EACV,kBAAC,WAAKA,GAAU,gBAAc,EAC9B,kBAAC,WAAKA,GAAU,iBAAe,GAGrC,kBAAC8F,EAAA,EAAK,CACJ,OAAM,GACN,MAAO,CAAE,WAAY,+BAAgC,cAAe,OAAQ,GAE3E9F,EACH,CACF,EACCuF,GACC,kBAAC,IAAa,CAAC,UAAU,mBAAmB,QAAS,IAAMC,GAAc,EAAK,EAAG,EAEjF,kBAAC,IAAc,CAAC,UAAU,mBAAmB,QAAS,IAAMA,GAAc,EAAI,EAAG,CAErF,CACF,EACA,kBAACO,EAAA,EAAQ,KACP,kBAACG,GAAA,CACC,SAAApG,GACA,cAAAqG,GACA,kBAAmBZ,GACnB,aAAciB,EAAA,CAChB,CACF,CAEF,CAEJ,CAEAD,GAAgB,UAAY,CAC1B,SAAU,IAAU,OACpB,OAAQ,IAAU,OAClB,cAAe,IAAU,KACzB,mBAAoB,IAAU,KAC9B,QAAS,IAAU,MACrB,EAEe,WAAAA,E,6EC1Pf,g7CAEA,IAAIE,EAEG,SAASC,EAAa3C,EAAO,CAClC0C,EAAY1C,CACd,CAEA,SAAS4C,GAAiB,CAaxB,IAAIC,EAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EAEtC,MAAI,eAAgB,mHAClBA,EAAI,SAAW,GAIZA,EAAI,SAAS,SAAS,GAAG,IAC5BA,EAAI,SAAWA,EAAI,SAAW,KAEzBA,EAAI,OAASA,EAAI,QAC1B,CAEA,SAASC,GAAa,CAEpB,MAAMC,EAAW,mHAAY,mBAC7B,IAAIC,EAEJ,OAAID,EAEFC,EAASD,EAGTC,EAASJ,EAAe,EAAI,OAEzBI,EAAO,SAAS,GAAG,IACtBA,EAASA,EAAS,KAEfA,EAAO,SAAS,OAAO,IAC1BA,EAASA,EAAS,QAGbA,CACT,CACA,MAAMA,EAASF,EAAW,EAG1B,SAASG,EAAa5C,EAAW,CAI/B,OAHmB2C,EAAS3C,GACzB,QAAQ,kBAAmB,SAAS,EAAI,gBAG7C,CAEA,SAAS6C,GAAe,CACtB,OAAOR,CACT,CAEA,SAASS,EAAYN,EAAKO,EAAQC,EAAM,CAClCD,IAAW,SACbA,EAAS,OAKX,MAAME,EAAW,IAAM,OAAO,CAC5B,QAASN,CACX,CAAC,EAEGN,IACFY,EAAS,SAAS,QAAQ,OAAO,cAAmB,UAAYZ,GAGlE,MAAMa,EAAS,CAAC,OAAAH,EAAQ,IAAAP,EAAK,KAAAQ,CAAI,EA4BjC,OAzBUC,EAAS,QAAQC,CAAM,EAAE,MAAMC,GAAO,CAC9C,GAAIA,EAAI,WAAa,OAOnB,OAAAF,EAAS,SAAS,QAAQ,OAAO,oBAAsB,iBAC5CA,EAAS,QAAQC,CAAM,EAAE,MAAME,IAAQ,CAChD,MAAIA,GAAK,UAAYA,GAAK,SAAS,SAAW,MAG5C,QAAQ,IAAI,6CAA6C,EACzD,OAAO,SAAS,OAAO,GAKlBA,EACT,CAAC,EAGH,MAAOD,CACT,CAAC,CAEH,CAGA,SAASE,GAAY,CACnB,OAAOP,EAAY,MAAM,CAC3B,CAEA,SAASQ,GAAkB,CACzB,OAAOR,EAAY,YAAY,CACjC,CAEA,SAASS,EAAgBvD,EAAW,CAClC,OAAO8C,EAAY9C,EAAY,MAAM,CACvC,CAEA,SAASwD,GAAe,CACtB,OAAO,IAAM,IAAIjB,EAAe,EAAI,cAAc,CACpD,CAEA,SAASkB,GAAe,CACtB,OAAOX,EAAYH,EAAS,SAAS,CACvC,CAEA,SAASe,EAAkB1D,EAAW,CACpC,OAAO8C,EAAY9C,EAAY,eAAe,CAChD,CAEA,SAAS2D,EAAkB3D,EAAW4D,EAAa,CACjD,IAAIC,EAAO,gBACX,OAAID,IACFC,GAAQ,IAAMD,EAAY,MAAM,CAAC,GAE5Bd,EAAY9C,EAAY6D,CAAI,CACrC,CAEA,SAAShG,EAAYmC,EAAW,CAC9B,OAAO8C,EAAY9C,EAAY,QAAQ,CACzC,CAEA,SAAS8D,EAAkB9D,EAAW+D,EAAU,CAC9C,OAAOjB,EAAY9C,EAAY,iBAAmB+D,CAAQ,CAC5D,CAEA,SAASC,GAAehE,EAAWiE,EAAcC,EAAaC,EAAYC,EAAS,CACjF,OAAOtB,EAAY9C,EACF,YAAciE,EACd,YAAcC,EACd,WAAaC,EACb,eAAiBC,CAAO,CAC3C,CAEA,SAASC,GAAWrE,EAAWsE,EAAS,CACtC,OAAOxB,EAAY9C,EAAY,SAAWsE,CAAO,CACnD,CAEA,SAASC,GAAYvE,EAAW4D,EAAa,CAC3C,IAAIC,EAAO,SACX,OAAID,IACFC,GAAQ,IAAMD,EAAY,MAAM,CAAC,GAE5Bd,EAAY9C,EAAY6D,CAAI,CACrC,CAEA,SAASW,GAAcxE,EAAWyE,EAAY,CAC5C,OAAO3B,EAAY9C,EAAY,YAAcyE,CAAU,CACzD,CAEA,SAASC,EAAe1E,EAAW4D,EAAa,CAC9C,IAAIC,EAAO,YACX,OAAID,IACFC,GAAQ,IAAMD,EAAY,MAAM,CAAC,GAE5Bd,EAAY9C,EAAY6D,CAAI,CACrC,CAEA,SAAS9I,EAAYiF,EAAW,CAC9B,OAAO8C,EAAY9C,EAAY,QAAQ,CACzC,CAEA,SAAS2E,GAAW3E,EAAW4E,EAAW,CACxC,OAAO9B,EACL9C,EAAY,SAAW4E,EAAY,SACnC,MACF,CACF,CAEA,SAASC,GAAyB7E,EAAW8E,EAAY,CACvD,OAAOhC,EACL9C,EAAY,wBAA0B8E,EACtC,QACF,CACF,CAEA,SAASC,GAAkB/E,EAAWgF,EAAU,CAC9C,OAAOlC,EACL9C,EAAY,gBAAkBgF,EAC9B,QACF,CACF,CAEA,SAASC,GAAajF,EAAW,CAC/B,OAAO8C,EAAY9C,EAAY,SAAS,CAC1C,CAEA,SAASkF,GAAelF,EAAW,CACjC,OAAO8C,EAAY9C,EAAY,WAAW,CAC5C,CAEA,SAASmF,GAAanF,EAAWkE,EAAa,CAC5C,OAAOpB,EAAY9C,EAAY,WAAakE,CAAW,CACzD,CAEA,SAASkB,GAAcpF,EAAW,CAChC,OAAO8C,EAAY9C,EAAY,UAAU,CAC3C,CAEA,SAASqF,GAAerF,EAAW,CACjC,OAAO8C,EAAY9C,EAAY,WAAW,CAC5C,CAEA,SAASsF,GAAStF,EAAWoE,EAAS,CACpC,OAAOtB,EAAY9C,EAAY,OAASoE,CAAO,CACjD,CAEA,SAASmB,GAAcvF,EAAWkE,EAAaD,EAAcE,EAAY,CACvE,OAAOrB,EAAY9C,EACF,YAAciE,EACd,YAAcC,EACd,WAAaC,EACb,cAAc,CACjC,CAEA,SAASqB,GAAUxF,EAAW,CAC5B,OAAO8C,EAAY9C,EAAY,MAAM,CACvC,CAEA,SAASyF,GAAYzF,EAAW,CAC9B,OAAO8C,EAAY9C,EAAY,QAAQ,CACzC,CAEA,SAAS0F,GAAW1F,EAAW,CAC7B,OAAO8C,EAAY9C,EAAY,OAAO,CACxC,CAEA,SAAS2F,GAAgB3F,EAAW,CAClC,OAAO8C,EAAY9C,EAAY,YAAY,CAC7C,CAEA,SAAS4F,GAAe5F,EAAW,CACjC,OAAO8C,EAAY9C,EAAY,UAAU,CAC3C,CAEA,SAAS6F,GAAc7F,EAAW8F,EAAW,CAC3C,OAAOhD,EAAY9C,EAAY,YAAc8F,CAAS,CACxD,CAEA,SAASC,GAAwB/F,EAAW,CAC1C,OAAO8C,EAAY9C,EAAY,gBAAgB,CACjD,CAEA,SAASgG,GAAQhG,EAAWkE,EAAaxI,EAAU8E,EAAQ,CACzD,OAAOsC,EACL9C,EAAY,WAAakE,EAAc,WACvC,OACA,CACE,SAAAxI,EACA,OAAA8E,CACF,CACF,CACF,CAEA,SAASyF,GAAYjG,EAAWkE,EAAaxI,EAAUwK,EAAK,CAC1D,OAAOpD,EACL9C,EAAY,WAAakE,EAAc,WACvC,OACA,CACE,SAAAxI,EACA,IAAAwK,CACF,CACF,CACF,CAEA,SAASC,GAAQnG,EAAWkE,EAAaxI,EAAU8E,EAAQ,CACzD,OAAOsC,EACL9C,EAAY,WAAakE,EAAc,WACvC,OACA,CACE,SAAAxI,EACA,OAAA8E,CACF,CACF,CACF,CAEA,SAAS4F,GAAYpG,EAAWkE,EAAaxI,EAAUwK,EAAKG,EAAQC,EAAQ,CAC1E,OAAOxD,EACL9C,EAAY,WAAakE,EAAc,WACvC,OACA,CACE,SAAAxI,EACA,IAAAwK,EACA,OAAAG,EACA,OAAAC,CACF,CACF,CACF,CAEA,SAASC,GAASvG,EAAWkE,EAAasC,EAAKhG,EAAQ0F,EACrCO,EAAQC,EAAOC,GAAsB,CACrD,OAAO7D,EACL9C,EAAY,WAAakE,EAAc,YACvC,OACA,CACE,OAAA1D,EACA,IAAAgG,EACA,IAAAN,EACA,OAAAO,EACA,MAAAC,EACA,qBAAAC,EACF,CACF,CACF,CAEA,SAASC,EAAgB5G,EAAW8F,EAAW,CAC7C,OAAOhD,EACL9C,EAAY,aAAe8F,EAC3B,QACF,CACF,CAEA,SAASe,EAAQ7G,EAAWtE,EAAUoL,EAAS,CAC7C,OAAOhE,EACL9C,EAAY,WACZ,OACA,CACE,SAAAtE,EACA,QAAAoL,CACF,CACF,CACF,C,4DC/VA,8KAeA,SAASC,EAAUC,EAAO,CACxB,KAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,WAAAC,EAAY,SAAAC,CAAS,EAAIJ,EAE9C,OACE,gBAAC,IAAU,CAAC,QAAS,IAAkB,OACrC,gBAAC,IAAc,CAAC,KAAAE,CAAA,CAAY,EAC5B,gBAAC,IAAK,CAAC,aAAa,KAAK,KAAK,MAC3BD,CACH,EACA,gBAAC,IAAiB,KAChB,gBAAC,IAAI,CAAC,GAAIE,CAAA,EACR,gBAAC,IAAM,CAAC,QAAQ,QAAQC,CAAS,CACnC,CACF,CACF,CAEJ,CAEAL,EAAU,UAAY,CACpB,MAAO,IAAU,OAAO,WACxB,KAAM,IAAU,KAAK,WACrB,WAAY,IAAU,OAAO,WAC7B,SAAU,IAAU,OAAO,UAC7B,EAEA,SAASM,EAASL,EAAO,CACvB,KAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,OAAAI,EAAQ,SAAAC,EAAU,SAAAC,EAAS,EAAIR,EACpD,OACE,gBAAC,IAAU,KACT,gBAAC,IAAc,CAAC,KAAAE,CAAA,CAAY,EAC5B,gBAAC,IAAK,CAAC,aAAa,MAAMD,CAAM,EAChC,gBAAC,IAAc,KACZO,EACH,EACA,gBAAC,IAA0B,KACzB,gBAAC,IAAM,CAAC,QAAQ,OAAO,QAASD,CAAA,EAC7BD,CACH,CACF,CACF,CAEJ,CAEAD,EAAS,UAAY,CACnB,MAAO,IAAU,OAAO,WACxB,KAAM,IAAU,KAAK,WACrB,OAAQ,IAAU,OAAO,WACzB,SAAU,IAAU,KAAK,WACzB,SAAU,IAAU,IACtB,C,oCChEA,oJAGA,SAASI,EAAmB3K,EAAYN,EAAUC,EAAS,CACzD,YAAkBK,EAAYN,EAAUC,CAAO,CACjD,CAEA,SAASiL,EAAalL,EAAUC,EAASjB,EAAkB,CAEzD,MAAMkB,EAAUlB,EAAiB,OAAO,CAACmM,EAAYC,KACnDD,EAAWC,EAAS,KAAO,CAAC,EACrBD,GACN,CAAC,CAAC,EACLF,EAAmB/K,EAASF,EAAUC,CAAO,CAC/C,CAEA,SAASoL,EAAsBC,EAAGC,EAAa,CAE7C,OAAKA,EAOE,CACL,QAAS,EACX,EARS,CACL,QAAS,GACT,QAAS,2BACX,CAMJ,CAEA,SAASC,EAAiB7K,EAAW8K,EAAQC,EAAO,CAClD,OAAO/K,EAAU,OAAOE,GAAK,YAAY,CAACA,EAAE,IAAI,EAAG4K,EAAQC,CAAK,CAAC,CACnE,CAEA,SAASC,EAAchL,EAAW8K,EAAQC,EAAOE,EAAe,CAC9D,UAAW/K,KAAKF,EACdE,EAAE,cAAgBA,EAAE,cAAc,OAChCgL,GAAK,YAAY,CAACA,EAAE,IAAI,EAAGJ,EAAQC,CAAK,CAC1C,EAWF,OAAIE,EACKjL,EAAU,OAAOE,GAAK,CAAC,YAAgBA,CAAC,CAAC,EAE3CF,CACT,CAEA,SAASmL,EAAgBnL,EAAW8K,EAAQC,EAAOE,EAAe,CAChE,UAAW/K,KAAKF,EACd,UAAWkL,KAAKhL,EAAE,cAAe,CAC/B,MAAMkL,EAAQ,CAAC,EACf,UAAW3G,KAAQyG,EAAE,MACnBE,EAAM,KAAK3G,EAAK,OAAO1B,GAAQ,CAC7B,MAAMsI,GAAWtI,EAAK,KAAK,IAAIgG,IAAOA,GAAI,OAAO,EACjD,OAAO,YAAYsC,GAAUP,EAAQC,CAAK,CAC5C,CAAC,CAAC,GAIAK,EAAM,KAAK,EAAE,SAAW,GAAKF,EAAE,OAAS,MAC1CA,EAAE,MAAQE,EAEd,CAMEH,IACFjL,EAAYA,EAAU,OAAOE,GAAK,CAAC,YAAgBA,CAAC,CAAC,GAEvD,UAAWA,KAAKF,EACdE,EAAE,cAAgBA,EAAE,cAAc,OAAOgL,GAAKA,EAAE,MAAM,KAAK,EAAE,OAAS,CAAC,EAEzE,OAAOlL,CACT,CAEA,SAASsL,EAAetL,EAAW8K,EAAQC,EAAOE,EAAe,CAM/D,MAAMM,EAAUT,EAAO,IAAIU,GAAK,CAAC,GAAGA,MAAO,GAAGA,GAAG,CAAC,EAAE,KAAK,EACzD,UAAWtL,KAAKF,EACd,UAAWkL,KAAKhL,EAAE,cAAe,CAC/B,MAAMkL,EAAQ,CAAC,EACf,UAAW3G,KAAQyG,EAAE,MACnBE,EAAM,KAAK3G,EAAK,OAAO1B,IAAQ,CAC7B,MAAM0I,GAAM1I,GAAK,KAAK,IAAIgG,IAAOA,GAAI,IAAMA,GAAI,GAAG,EAClD,OAAO,YAAY0C,GAAKF,EAASR,CAAK,CACxC,CAAC,CAAC,GAIAK,EAAM,KAAK,EAAE,SAAW,GAAKF,EAAE,OAAS,MAC1CA,EAAE,MAAQE,EAEd,CAMEH,IACFjL,EAAYA,EAAU,OAAOE,GAAK,CAAC,YAAgBA,CAAC,CAAC,GAEvD,UAAWA,KAAKF,EACdE,EAAE,cAAgBA,EAAE,cAAc,OAAOgL,GAAKA,EAAE,MAAM,KAAK,EAAE,OAAS,CAAC,EAEzE,OAAOlL,CACT,CAEA,SAAS0L,EAAgB1L,EAAWT,EAASlB,EAAkB4M,EAAe,CAC5E,GAAI,CAAC,YAAe1L,CAAO,EACzB,OAAOS,EAKT,UAAWyK,KAAYpM,EAAkB,CACvC,MAAMsN,EAAMlB,EAAS,IACfM,EAAQN,EAAS,OAAY,eAC7BK,EAASvL,EAAQoM,GACvB,GAAIb,EAAO,SAAW,EAItB,OAAQa,EAAK,CACX,IAAK,WACH3L,EAAY6K,EAAiB7K,EAAW8K,EAAQC,CAAK,EACrD,MACF,IAAK,QACH/K,EAAYgL,EAAchL,EAAW8K,EAAQC,EAAOE,CAAa,EACjE,MACF,IAAK,UACHjL,EAAYmL,EAAgBnL,EAAW8K,EAAQC,EAAOE,CAAa,EACnE,MACF,IAAK,SAAU,CACbjL,EAAYsL,EAAetL,EAAW8K,EAAQC,EAAOE,CAAa,EAClE,KACF,CACA,QAEE,KACJ,CACF,CAEA,OAAOjL,CACT,C,oCC7JO,sGAAM4L,EAAqB,qBACrBC,EAAqB,qBACrBC,EAAsB,sBACtBC,EAAqB,qBAElC,SAASC,EAAcrO,EAAO,CAC5B,OAAIA,EAAM,SACK,IAAI,UAAU,EACJ,gBAAgBA,EAAM,SAAS,KAAM,WAAW,EACrC,qBAAqB,GAAG,EAAE,GAAG,UAGvDA,CAEZ,CAEO,MAAMsO,EAAkBtO,IAAU,CACvC,KAAMiO,EACN,aAAcI,EAAcrO,CAAK,CACnC,GAEauO,EAAkBvO,IAAU,CACvC,KAAMkO,EACN,aAAcG,EAAcrO,CAAK,CACnC,GAEawO,EAAmBxO,IAAU,CACxC,KAAMmO,EACN,aAAcE,EAAcrO,CAAK,CACnC,GAEayO,EAAkBzO,IAAU,CACvC,KAAMoO,EACN,aAAcC,EAAcrO,CAAK,CACnC,E,gZChCO,MAAM0O,EAAwB,wBACxBC,EAAwB,wBACxBC,EAAqB,qBAErBC,EAAkBnH,IAAS,CACtC,KAAMgH,EACN,IAAAhH,CACF,GAEMoH,EAAa,2DACbC,EAAU,gEACVC,EAAY,kDAEZC,EAAc,CAClB,MAAO,EACP,KAAM,EACN,QAAS,EACT,MAAO,EACP,MAAO,EACP,MAAO,EACP,SAAU,CACZ,EAEMC,EAAgB,IAAI,OAAO,KAAKH,gBAAsBC,OAAe,EACrEG,EAAmB,IAAI,OAAO,KAAKL,iCAA0CE,OAAe,EAE5FI,EAAiB,CAAC5F,EAAS6F,EAAMnH,IAAS,CAE9C,MAAMoH,GAAMpH,EAAK,MAAM,OAAO,EAAE,IAAI,CAACqH,GAAMrN,KAAQ,CACjD,IAAIsN,GAAI,KACJC,EAAM,KAEV,OAAAD,GAAIL,EAAiB,KAAKI,EAAI,EAC1BC,GACFC,EAAMR,EAAYO,GAAE,KAEpBN,EAAc,KAAKK,EAAI,EACnBC,KACFC,EAAMR,EAAYO,GAAE,MAIjB,CACL,KAAMD,GACN,MAAOrN,GAAI,EACX,SAAUuN,CACZ,CACF,CAAC,EACD,MAAO,CACL,KAAMd,EACN,QAAAnF,EACA,SAAU6F,EACV,YAAaC,GACb,WAAY,KAAK,IAAI,CACvB,CACF,EAEMI,EAAgB,CAAC1P,EAAO0H,KAC5B1H,EAAM,IAAM0H,EACL,CACL,KAAMkH,EACN,MAAA5O,CACF,GAGK,SAAS2P,EAAanG,EAAS6F,EAAMhP,EAAO,CACjD,OAAO,SAAgBH,GAAU,gCAE/B,GACEsJ,KAAWnJ,EAAM,QAAQ,OACzBgP,KAAQhP,EAAM,QAAQ,MAAMmJ,GAE5B,OAAO,QAAQ,QAAQ,EAIzB,MAAMoG,GAAQvP,EAAM,MAAM,OAAOmJ,GAE3BpE,GADW/E,EAAM,MAAM,UAAUmJ,GACjB,MAAM,IAAM6F,GAElC,GAAI,CAACjK,GACH,OAAOlF,GACLwP,EAAc,MAAM,wCAAwCL,IAAO,CAAC,CACtE,EAGF,GAAIjK,GAAK,WAAa,aACpB,OAAOlF,GACLwP,EAAc,MAAM,YAAYL,yBAA4B,CAAC,CAC/D,EAGF,MAAM3H,EAAMkI,GAAM,QAAUP,EAC5BnP,GAAS2O,EAAe,CAAC,EACzB,GAAI,CACF,MAAM1O,EAAW,MAAM,IAAM,IAAIuH,EAAK,CAAE,kBAAmB,CAAC,CAAE,CAAC,EAC/DxH,GAASkP,EAAe5F,EAAS6F,EAAMlP,EAAS,IAAI,CAAC,CACvD,OAAQH,EAAN,CACAE,GAASwP,EAAc1P,EAAO0H,CAAG,CAAC,CACpC,CACF,CAAC,CAAD,CACF,C,oCCtGA,4IAEO,MAAMmI,EAA2B,2BAC3BC,EAA2B,2BAC3BC,EAAwB,wBAExBC,EAAoB,KAAO,CACtC,KAAMH,CACR,GAEaI,EAAoB,CAACpQ,EAAQC,KAAU,CAClD,KAAMgQ,EACN,OAAAjQ,EACA,WAAYC,EACZ,WAAY,KAAK,IAAI,CACvB,GAEMoQ,EAAmBlQ,IAAU,CACjC,KAAM+P,EACN,MAAA/P,CACF,GAEM6K,EAAmBhL,GAAWK,IAClCA,EAAS8P,EAAkB,CAAC,EACrB,IAAoBnQ,EAAO,SAAS,EACxC,KAAKM,GAAYD,EAAS+P,EAAkBpQ,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACxE,MAAMH,GAASE,EAASgQ,EAAiBlQ,CAAK,CAAC,CAAC,GAG/CmQ,EAAwB,CAACtQ,EAAQQ,IAAU,CAC/C,MAAM+P,EAAa/P,EAAM,WAAW,WAAWR,EAAO,MACtD,MAAI,CAACuQ,GAAcA,EAAW,SAAW,EAChC,IAELA,EAAW,WACN,GAGX,EAEaC,EAA0B,CAACxQ,EAAQyQ,IAAU,CAACpQ,EAAUM,IAC/D8P,GAASH,EAAsBtQ,EAAQW,EAAS,CAAC,EAC5CN,EAAS2K,EAAgBhL,CAAM,CAAC,EAElC,QAAQ,QAAQ,C,oCC7CzB,4IAEO,MAAM0Q,EAAwB,wBACxBC,EAAwB,wBACxBC,EAAqB,qBAErBC,EAAiB,KAAO,CACnC,KAAMH,CACR,GAEaI,EAAiB7Q,IAAS,CACrC,KAAM0Q,EACN,QAAS1Q,EACT,WAAY,KAAK,IAAI,CACvB,GAEM8Q,EAAgB5Q,IAAU,CAC9B,KAAMyQ,EACN,MAAAzQ,CACF,GAEM2I,EAAe,IAAMzI,IACzBA,EAASwQ,EAAe,CAAC,EAClB,IAAiB,EACrB,KAAKvQ,GAAYD,EAASyQ,EAAexQ,EAAS,IAAI,CAAC,CAAC,EACxD,MAAMH,GAASE,EAAS0Q,EAAc5Q,CAAK,CAAC,CAAC,GAG5C6Q,EAAqBxQ,GAAS,CAClC,MAAMyQ,EAAUzQ,EAAM,QAItB,MAHI,EAAAyQ,EAAQ,QAAQ,OAAS,GAGzBA,EAAQ,WAId,EAEaC,EAAwBT,GAAU,CAACpQ,EAAUM,IAAa,CACrE,GAAI8P,GAASO,EAAmBrQ,EAAS,CAAC,EACxC,OAAON,EAASyI,EAAa,CAAC,CAElC,C,oCC3CO,sGAAMqI,EAA2B,2BAC3BC,EAA2B,2BAC3BC,EAAwB,uB,oCCDrC,4MAEO,MAAMC,EAA8B,8BAC9BC,EAA8B,8BAC9BC,EAA2B,2BAC3BC,EAAsB,sBAEtBC,EAAuB1R,IAAY,CAC9C,KAAMsR,EACN,OAAAtR,CACF,GAEa2R,EAAsB,CAAC3R,EAAQC,KAAU,CACpD,KAAMsR,EACN,OAAAvR,EACA,cAAeC,EACf,WAAY,KAAK,IAAI,CACvB,GAEM2R,EAAqB,CAAC5R,EAAQG,KAAW,CAC7C,KAAMqR,EACN,OAAAxR,EACA,MAAAG,CACF,GAEO,SAAS0R,EAAyB7R,EAAQ,CAC/C,MAAO,CAACK,EAAUM,IAAa,CAC7B,MAAMH,EAAQG,EAAS,EACvB,OAAIH,EAAM,aAAa,YAAcR,EAAO,OAASQ,EAAM,aAAa,OAC/D,QAAQ,QAAQ,GAEzBH,EAASqR,EAAoB1R,EAAO,IAAI,CAAC,EAClC,YAAkBA,EAAO,SAAS,EACtC,KAAKM,GAAYD,EAASsR,EAAoB3R,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EAC1E,MAAMH,GAASE,EAASuR,EAAmB5R,EAAO,KAAMG,CAAK,CAAC,CAAC,EACpE,CACF,CAEO,SAAS2R,GAA2B,CACzC,OAAQzR,GAAa,CACnBA,EAAS,CAAC,KAAMoR,CAAmB,CAAC,CACtC,CACF,C,0DC1CA,4KAEO,MAAMM,EAAwB,wBACxBC,EAAwB,wBACxBC,EAAqB,qBAErBC,EAAiB,KAAO,CACnC,KAAMH,CACR,GAEaI,EAAiB,CAACnS,EAAQC,KAAU,CAC/C,KAAM+R,EACN,OAAAhS,EACA,QAASC,EACT,WAAY,KAAK,IAAI,CACvB,GAEMmS,EAAgBjS,IAAU,CAC9B,KAAM8R,EACN,MAAA9R,CACF,GAEamK,EAAgBtK,GAAWK,IACtCA,EAAS6R,EAAe,CAAC,EAClB,IAAiBlS,EAAO,SAAS,EACrC,KAAKM,GAAYD,EAAS8R,EAAenS,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACrE,MAAMH,GAASE,EAAS+R,EAAcjS,CAAK,CAAC,CAAC,GAG5CkS,EAAqB,CAACrS,EAAQQ,IAAU,CAC5C,MAAM8R,EAAU9R,EAAM,QAAQ,QAAQR,EAAO,MAC7C,OAAKsS,GAGDA,EAAQ,WACH,IAHA,EAMX,EAEaC,EAAwBvS,GAAW,CAACK,EAAUM,IACrD0R,EAAmBrS,EAAQW,EAAS,CAAC,EAChCN,EAASiK,EAAatK,CAAM,CAAC,EAE/B,QAAQ,QAAQ,C,0DC5CzB,4KAEO,MAAMwS,EAA2B,2BAC3BC,EAA2B,2BAC3BC,EAAwB,wBAExBC,EAAmB,KAAO,CACrC,KAAMH,CACR,GAEO,SAASI,EAAiB7R,EAAU8R,EAASC,EAAQjH,EAAK,CAC/D,OAAO,KAAK,UAAU,CACpB,SAAA9K,EAAU,QAAA8R,EAAS,OAAAC,EAAQ,IAAAjH,CAC7B,CAAC,CACH,CAEO,MAAMkH,EAAmB,CAAC/S,EAAQgT,EAAcC,KAC9C,CACL,KAAMR,EACN,OAAAzS,EACA,aAAAgT,EACA,UAAAC,EACA,WAAY,KAAK,IAAI,CACvB,GAGIC,EAAkB/S,IAAU,CAChC,KAAMuS,EACN,MAAAvS,CACF,GAEMkJ,EAAiB,CAACrJ,EAAQe,EAAU8R,EAASC,EAAQjH,IAAQxL,GAAY,CAC7EA,EAASsS,EAAiB,CAAC,EAC3B,MAAMK,EAAeJ,EAAiB7R,EAAU8R,EAASC,EAAQjH,CAAG,EACpE,OAAO,IAAmB7L,EAAO,UACPe,EACA8R,EACAC,EACAjH,CAAG,EAC1B,KAAKvL,GAAYD,EAAS0S,EACzB/S,EAAO,KAAMgT,EAAc1S,EAAS,IAAI,CAAC,CAAC,EAC3C,MAAMH,GAASE,EAAS6S,EAAgB/S,CAAK,CAAC,CAAC,CACpD,EAEMgT,EAAuB,CAACnT,EAAQe,EAAU8R,EAASC,EAAQjH,EAAKrL,IAAU,CAC9E,MAAMwS,EAAeJ,EAAiB7R,EAAU8R,EAASC,EAAQjH,CAAG,EAC9DuH,EAAmB5S,EAAM,UAAU,WAAWR,EAAO,MAC3D,GAAIoT,EAAkB,CACpB,MAAMH,GAAYG,EAAiBJ,GACnC,OAAKC,IAGDA,GAAU,WACL,IAHA,EAMX,CACA,MAAO,EACT,EAEaI,EAAyB,CAACrT,EAAQe,EAAU8R,EAASC,EAAQjH,EACpC4E,IAAU,CAC9CpQ,EAAUM,IACJ8P,GAAS0C,EAAqBnT,EAAQe,EAAU8R,EAASC,EAAQjH,EACpClL,EAAS,CAAC,EAClCN,EAASgJ,EAAerJ,EAAQe,EAAU8R,EAASC,EAAQjH,CAAG,CAAC,EAEnE,QAAQ,QAAQ,C,kFCnEzB,4KAEO,MAAMyH,EAA0B,0BAC1BC,EAA0B,0BAC1BC,EAAuB,uBAEvBC,EAAkB,KAAO,CACpC,KAAMH,CACR,GAEO,SAASI,EAAgBb,EAAS9R,EAAU+R,EAAQ,CACzD,OAAO,KAAK,UAAU,CACpB,QAAAD,EAAkB,SAAA9R,EAAoB,OAAA+R,CACxC,CAAC,CACH,CAEO,MAAMa,EAAkB,CAAC3T,EAAQ4T,EAAaC,KAC5C,CACL,KAAMN,EACN,OAAAvT,EACA,YAAA4T,EACA,SAAAC,EACA,WAAY,KAAK,IAAI,CACvB,GAGIC,EAAiB3T,IAAU,CAC/B,KAAMqT,EACN,MAAArT,CACF,GAEMyK,EAAgB,CAAC5K,EAAQ6S,EAAS9R,EAAU+R,IAAWzS,GAAY,CACvEA,EAASoT,EAAgB,CAAC,EAC1B,MAAMG,EAAcF,EAAgBb,EAAS9R,EAAU+R,CAAM,EAC7D,OAAO,IAAkB9S,EAAO,UACP6S,EACA9R,EACA+R,CAAM,EAC5B,KAAKxS,GAAYD,EAASsT,EACzB3T,EAAO,KAAM4T,EAAatT,EAAS,IAAI,CAAC,CAAC,EAC1C,MAAMH,GAASE,EAASyT,EAAe3T,CAAK,CAAC,CAAC,CACnD,EAEM4T,EAAsB,CAAC/T,EAAQ6S,EAAS9R,EAAU+R,EAAQtS,IAAU,CACxE,MAAMoT,EAAcF,EAAgBb,EAAS9R,EAAU+R,CAAM,EACvDkB,EAAkBxT,EAAM,SAAS,UAAUR,EAAO,MACxD,GAAIgU,EAAiB,CACnB,MAAMH,EAAWG,EAAgBJ,GACjC,OAAKC,GAGDA,EAAS,WACJ,IAHA,EAMX,CACA,MAAO,EACT,EAEaI,EAAwB,CAACjU,EAAQ6S,EAAS9R,EAAU+R,EAC3BrC,IAAU,CAC9CpQ,EAAUM,IACJ8P,GAASsD,EAAoB/T,EAAQ6S,EAAS9R,EAAU+R,EAC3BnS,EAAS,CAAC,EAClCN,EAASuK,EAAc5K,EAAQ6S,EAAS9R,EAAU+R,CAAM,CAAC,EAE7D,QAAQ,QAAQ,C,6KCtEzB,MAAMoB,EAAc,QAClB,OAAO,SAAS,WAAa,aAE3B,OAAO,SAAS,WAAa,SAE7B,OAAO,SAAS,SAAS,MACvB,wDACF,CACJ,EAEe,SAASC,GAAY,CAClC,GAAI,mHAAY,kCAAoC,OAAQ,CAC1D,QAAQ,IAAI,yBAAyB,EACrCC,EAAW,EACX,MACF,CAEA,GAA6C,kBAAmB,UAAW,CAGzE,GADkB,IAAI,IAAI,GAAwB,OAAO,QAAQ,EACnD,SAAW,OAAO,SAAS,OAIvC,OAGF,OAAO,iBAAiB,OAAQ,IAAM,CACpC,MAAMC,EAAQ,qBAEVH,GAEFI,EAAwBD,CAAK,EAI7B,UAAU,cAAc,MAAM,KAAK,IAAM,CACvC,QAAQ,IACN,0GAEF,CACF,CAAC,GAGDE,EAAgBF,CAAK,CAEzB,CAAC,CACH,CACF,CAEA,SAASE,EAAiBF,EAAO,CAC/B,UAAU,cACP,SAASA,CAAK,EACd,KAAKG,GAAgB,CACpBA,EAAa,cAAgB,IAAM,CACjC,MAAMC,EAAmBD,EAAa,WACtCC,EAAiB,cAAgB,IAAM,CACjCA,EAAiB,QAAU,cACzB,UAAU,cAAc,WAK1B,QAAQ,IAAI,2CAA2C,EAKvD,QAAQ,IAAI,oCAAoC,EAGtD,CACF,CACF,CAAC,EACA,MAAMtU,GAAS,CACd,QAAQ,MAAM,4CAA6CA,CAAK,CAClE,CAAC,CACL,CAEA,SAASmU,EAAyBD,EAAO,CAEvC,MAAMA,CAAK,EACR,KAAK/T,GAAY,CAGdA,EAAS,SAAW,KACpBA,EAAS,QAAQ,IAAI,cAAc,EAAE,QAAQ,YAAY,IAAM,GAG/D,UAAU,cAAc,MAAM,KAAKkU,GAAgB,CACjDA,EAAa,WAAW,EAAE,KAAK,IAAM,CACnC,OAAO,SAAS,OAAO,CACzB,CAAC,CACH,CAAC,EAGDD,EAAgBF,CAAK,CAEzB,CAAC,EACA,MAAM,IAAM,CACX,QAAQ,IACN,+DACF,CACF,CAAC,CACL,CAEO,SAASD,GAAc,CACxB,kBAAmB,WACrB,UAAU,cAAc,MAAM,KAAKI,GAAgB,CACjDA,EAAa,WAAW,CAC1B,CAAC,CAEL,C,6mBC9EA,MAAM,WAAsB,IAAM,SAAU,CAc1C,YAAYnI,EAAO,CACjB,MAAMA,CAAK,EACX,KAAK,MAAQ,CACX,YAAa,GACb,qBAAsB,GACtB,0BAA2B,EAC7B,EACA,KAAK,kBAAoB,IAAM,CAC7B,KAAK,SAAS,CAAC,CAAE,YAAAqI,CAAY,KAAO,CAClC,YAAa,CAACA,CAChB,EAAE,CACJ,EACA,KAAK,gCAAkC,IAAM,CAC3C,KAAK,SAAS,CAAC,CAAE,0BAAAC,CAA0B,KAAO,CAChD,0BAA2B,CAACA,CAC9B,EAAE,CACJ,EACA,KAAK,mBAAqB,IAAM,CAC9B,KAAK,SAAS,CAAC,CAAE,qBAAAC,CAAqB,KAAO,CAC3C,qBAAsB,CAACA,CACzB,EAAE,CACJ,EACA,KAAK,qBAAuB,IAAM,CAEhC,QAAQ,MAAM,eAAe,EAC7B,KAAK,SAAS,KAAO,CACnB,0BAA2B,GAC3B,YAAa,EACf,EAAE,CACJ,EACA,KAAK,aAAe,IAAM,CAGxB,QAAQ,MAAM,gBAAgB,EAC9B,KAAK,SAAS,KAAO,CACnB,0BAA2B,EAC7B,EAAE,CACJ,CACF,CAEA,eAAgB,CACd,MAAMC,EAAkB,OAAO,SAAS,KAAK,MAAM,YAAe,EAAE,MAAM,EAC1E,aAAa,QAAQ,qBAAsBA,CAAe,EAC1D,KAAK,MAAM,OAAO,CACpB,CAEA,mBAAoB,CAClB,KAAM,CAAE,KAAAlQ,EAAM,OAAA3E,CAAO,EAAI,KAAK,MAC9B,KAAK,MAAM,YAAY,OAAO,sBAAsB,KAAK,oBAAoB,EAC7E,KAAK,MAAM,YAAY,OAAO,cAAc,KAAK,YAAY,EAEzD2E,EAAK,OACP,QAAQ,IAAI,iBAAkBA,EAAK,OAAQ3E,CAAM,EACjD,KAAK,MAAM,SAAS,aAAaA,CAAM,CAAC,EAE5C,CAEA,sBAAuB,CACrB,KAAK,MAAM,YAAY,OAAO,yBAAyB,KAAK,oBAAoB,EAChF,KAAK,MAAM,YAAY,OAAO,iBAAiB,KAAK,YAAY,CAClE,CAEA,oBAAqB,CACnB,KAAM,CAAE,KAAA2E,EAAM,OAAA3E,CAAO,EAAI,KAAK,MAG1B2E,EAAK,MAAQA,EAAK,SAAW3E,EAAO,OACtC,QAAQ,IAAI,iBAAkB2E,EAAK,OAAQ3E,CAAM,EACjD,KAAK,MAAM,SAAS,aAAaA,CAAM,CAAC,EAE5C,CAEA,kBAAmB,CACjB,KAAM,CAAE,KAAA2E,EAAM,OAAA3E,CAAO,EAAI,KAAK,MAE9B,IAAI8U,EACJ,OAAAA,EAAW,IAAM9U,EAAO,KAAO;AAAA,EAC/B8U,EAAWA,EAAW,OAASC,EAAA,EAAO,MAAM,EAAG,EAAE,EAAI;AAAA,EACrDD,EAAWA,EAAW,UAAY9U,EAAO,KAAO;AAAA,EAChD8U,EAAWA,EAAW,cAAgBnQ,EAAK,MAAQ;AAAA,EAE5CmQ,CACT,CAEA,+BAAgC,CAC9B,KAAM,CAAE,0BAAAH,CAA0B,EAAI,KAAK,MAC3C,OAAO,kBAAC,IAAM,SAAN,KACN,kBAACK,EAAA,EAAK,CACJ,SAAS,MACT,MAAM,2BACN,OAAQL,EACR,QAASK,EAAA,EAAa,MACtB,QAAS,IAAM,CACb,KAAK,gCAAgC,EACrC,KAAK,MAAM,QAAQ,CACrB,GAAG,iCAEH,kBAAC9O,GAAA,EAAM,CACL,IAAI,SACJ,SAAQ,GACR,QAASA,GAAA,EAAc,KACvB,QAAS,IAAM,CAAE,KAAK,cAAc,CAAE,GAAG,gCAE3C,CACF,CACF,CACF,CAEA,aAAc,CACZ,KAAM,CAAE,KAAAvB,EAAM,OAAA3E,EAAQ,SAAAiE,CAAS,EAAI,KAAK,MAClC,CAAE,YAAAyQ,EAAa,qBAAAE,CAAqB,EAAI,KAAK,MACnD,IAAIrM,EAAS,KAAK,iBAAiBvI,EAAQ2E,EAAK,IAAI,EAChDsQ,EAAc,QAAetQ,EAAK,KAAK,UAAU,EAAE,GAAGV,CAAQ,EAAE,OAAO,qBAAqB,EAChG,OACE,kBAAC,IAAM,SAAN,KACC,kBAAC+Q,EAAA,EAAK,CACJ,QAASA,EAAA,EAAa,MACtB,MAAM,YACN,OAAQN,EACR,QAAS,KAAK,kBACd,QAAS,CACP,kBAACxO,GAAA,EAAM,CACL,IAAI,UACJ,QAAQ,UACR,QAAS,IAAM,CACb,KAAK,MAAM,QAAQ,CACrB,EACA,MAAM,oFAAmF,gBAEzF,kBAAC,KAAc,CAAC,MAAM,WAAW,CACnC,CACF,GAEA,kBAAC,WACC,kBAAC,KAAE,IAAI,QAAO,SAAM,kBAAC,cAAQvB,EAAK,KAAK,QAAQ,IAAK,CAAS,EAC7D,kBAAC,KAAE,IAAI,sBAAqB,iBAAc,kBAAC,cAAQA,EAAK,KAAK,QAAQ,kBAAmB,EAAS,OAC7FA,EAAK,SAAWA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,IACpD,kBAAC,KAAa,CAAC,MAAM,oCAAoC,CACzD,EACJ,kBAACkV,EAAA,EAAS,CAAC,iBAAgB,IACzB,kBAACC,EAAA,EAAa,KACZ,kBAACC,EAAA,EAAe,CACd,QAAS,KAAK,mBACd,WAAYR,EACZ,MAAM,0EACN,GAAG,YAAW,yBAEhB,EACA,kBAACS,GAAA,EAAgB,CACf,SAAU,CAACT,CAAA,EACX,kBAACU,GAAA,EAAa,CAAC,OAAM,GAAC,WAAU,GAAC,QAASA,GAAA,EAAqB,WAAY/M,CAAO,CACpF,CACF,CACF,EACA,kBAAC,KAAE,IAAI,eAAc,sBAAmB,kBAAC,cAAQ0M,CAAY,CAAS,EACtE,kBAAC,KAAE,IAAI,UAAS,uHAGP,kBAAC,cAAO,sBAAoB,EAAS,qCAE9C,CACF,CACF,CACF,CAEJ,CAEA,aAAaM,EAAiB,CAE5B,KAAM,CAAE,KAAA5Q,CAAK,EAAI,KAAK,MACtB,OAAKA,EAAK,KAaAA,EAAK,KAAK,WAAa,kBAAC,OAAI,MAAO4Q,CAAA,EAAiB,YAAU,EACpE,kBAAC,OAAI,MAAOA,CAAA,EACT,KAAK,YAAY,EAClB,kBAACrP,GAAA,EAAM,CACL,QAASA,GAAA,EAAc,MACvB,IAAI,WACJ,QAAS,KAAK,mBACd,kBAAC,KAAQ,CAAC,MAAM,eAAe,EAAE,OAC1BvB,EAAK,KAAK,QAAQ,mBAAmB,MAC9C,EACC,KAAK,8BAA8B,CACtC,EAtBA,kBAAC,OAAI,MAAO4Q,CAAA,EACV,kBAACrP,GAAA,EAAM,CACL,IAAI,SACJ,QAASA,GAAA,EAAc,MACvB,QAAS,IAAM,CAAE,KAAK,cAAc,CAAE,GAAG,eAEzC,kBAAC,KAAa,CAAC,MAAM,UAAU,CACjC,CACF,CAiBN,CAEA,QAAS,CACP,KAAM,CAAE,KAAAsP,EAAM,KAAAC,CAAK,EAAI,KAAK,MAEtBF,EAAkB,CACtB,MAFgB,UAGhB,OAAQ,gBACR,YAAa,YACb,QAAS,UACT,QAAS,KACX,EAEA,OAAIC,EAAK,WACC,oCAAE,kBAAC,OAAI,MAAOD,CAAA,EAAiB,wBAAsB,CAAM,EAGjEE,EAAK,MAAQA,EAAK,KAAK,eAAiBA,EAAK,YAAY,UACpD,KAAK,aAAaF,CAAe,EAEhC,kBAAC,OAAI,MAAOA,EAAiB,MAAM,2BAA0B,GAAC,CAE1E,CACF,CAzOE,GADI,GACG,YAAY,CACjB,KAAM,IAAU,OAChB,OAAQ,IAAU,OAClB,SAAU,IAAU,KAAK,WACzB,SAAU,IAAU,OAAO,WAC3B,KAAM,IAAU,OAChB,KAAM,IAAU,OAEhB,YAAa,IAAU,OACvB,OAAQ,IAAU,KAClB,QAAS,IAAU,IACrB,CAAC,EAgOY,mBAAQ/U,IAAU,CAC/B,KAAMA,EAAM,KACZ,KAAMA,EAAM,KACZ,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,KAAMA,EAAM,IACd,EAAE,EAAE,oBAAS,EAAa,CAAC,E,iKC7Q3B,MAAM,WAAsB,IAAM,SAAU,CAA5C,kCAKE,gBAAQ,CACN,SAAU,EACZ,CAAC,CAAD,CAEA,mBAAoB,CAClB,KAAK,SAAS,CACZ,SAAU,EACZ,CAAC,CACH,CAEA,QAAS,CACP,OAAI,KAAK,MAAM,SACN,kBAAC,UAAG,uBAAqB,EAG3B,KAAK,MAAM,QACpB,CACF,CArBE,GADI,GACG,YAAY,CACjB,SAAU,IAAU,MACtB,CAAC,EAqBY,U,0gBCtBf,MAAM,WAAiB,IAAM,SAAU,CAAvC,kCAKE,gBAAQ,CACN,YAAa,KAAO,GAAG,MAAM,EAAE,IAAI+E,IAAS,CAAC,MAAOA,EAAM,MAAOA,CAAI,EAAE,EACvE,aAAc,CAAC,MAAO,MAAO,MAAO,KAAK,CAC3C,CAAC,EAOD,uBAAgBmQ,GAAe,CAC7B,MAAMC,EAAKD,EAAW,MAEtB,aAAa,QAAQ,iBAAkBC,CAAE,EACzC,KAAK,YAAYA,CAAE,CACrB,CAAC,EAED,oBAAY,IAAM,CAChB,IAAIA,EAAK,aAAa,QAAQ,gBAAgB,GAAK,GAC/CA,GACF,KAAK,YAAYA,CAAE,CAEvB,CAAC,EAED,sBAAeA,GAAO,CAEpB,KAAK,SAAS,CACZ,aAAc,CAAC,MAAOA,EAAI,MAAOA,CAAE,CACrC,CAAC,EAED,IAAIC,EAAiB,aAAkBD,CAAE,EACzC,KAAK,MAAM,SAASC,CAAc,CACpC,CAAC,CAAD,CA3BA,mBAAqB,CACnB,KAAK,UAAU,EACf,OAAO,iBAAiB,UAAW,KAAK,SAAS,CACnD,CA0BA,QAAS,CACP,MAAMC,EAAY,OACZN,EAAiB,CACrB,OAAQ,gBACR,YAAa,YACb,OAAQ,UACR,QAAS,UACT,QAAS,KACX,EACMO,EAAe,CACnB,UAAW,KAAO,CAChB,QAAS,cACX,GACA,QAAS,KAAO,CACd,MAAO,OACP,QAAS,MACX,GACA,YAAa,KAAO,CAClB,MAAOD,CACT,GACA,MAAQE,GAAc,SACjBA,CAAQ,EADS,CAEpB,MAAOF,CACT,CAAC,EACD,kBAAmBE,GAAc,SAC5BA,CAAQ,EADoB,CAE/B,MAAO,OACP,QAAS,MACT,SAAU,CACR,MAAO,MACT,CACF,CAAC,EACD,mBAAoB,IAAM,CAAC,EAC3B,KAAOA,GAAc,SAChBA,CAAQ,EADQ,CAEnB,MAAO,OACP,MAAO,IACP,IAAK,MACP,CAAC,CACH,EAEMC,EAAqB3J,GAEvB,kBAAC,KAAW,kBAAX,MAAiCA,CAAK,EACrC,kBAAC,KAAe,IAAC,CACnB,EAIJ,OACE,kBAAC,OAAI,MAAOkJ,CAAA,EACV,kBAAC,KAAiB,MAClB,kBAAC,KAAM,CACL,UAAU,iBACV,gBAAgB,iBAChB,OAAQO,EACR,WAAY,CAAE,kBAAAE,CAAkB,EAChC,MAAO,KAAK,MAAM,aAClB,SAAU,KAAK,aACf,QAAS,KAAK,MAAM,YACpB,iBAAkB,IAAM,eACxB,YAAa,YACb,aAAc,KAAK,MAAM,aACzB,MAAQC,GAAW,SACdA,CAAK,EADS,CAEjB,aAAc,EACd,QAAS,SACJA,EAAM,OAAO,EADT,CAEP,SAAU,CACZ,CAAC,CACH,CAAC,CAAD,CACF,CACF,CAEJ,CACF,CAjHG,GADG,GACI,YAAY,CACjB,SAAU,IAAU,IACtB,CAAC,EAiHW,mBAAQ,EAAE,EAAQ,E,qOC3GjC,MAAM,WAAoB,IAAM,SAAU,CAWxC,YAAY5J,EAAO,CACjB,MAAMA,CAAK,EACX,KAAK,MAAQ,CACX,YAAa,GACb,WAAY,GACZ,MAAO,OACP,YAAa,EACf,EACA,KAAK,kBAAoB,IAAM,CAC7B,KAAK,SAAS,CAAC,CAAE,YAAAqI,CAAY,KAAO,CAClC,YAAa,CAACA,CAChB,EAAE,EACF,KAAK,WAAW,CAClB,EAEA,KAAK,aAAe,IAAM,CACpB,KAAK,MAAM,YACb,KAAK,SAAS,CAAC,CAAE,YAAAwB,CAAY,KAAO,CAClC,YAAa,CAACA,CAChB,EAAE,EAEF,KAAK,kBAAkB,CAE3B,EAEA,KAAK,kBAAoB,IAAM,CAC7B,KAAK,SAAS,CAAC,CAAE,YAAAA,CAAY,KAAO,CAClC,YAAa,CAACA,CAChB,EAAE,CACJ,EAEA,KAAK,kBAAoB,CAACC,EAAOC,IAAc,CAC7C,KAAK,SAAS,CACZ,MAAOA,EACP,YAAa,EACf,CAAC,CACH,EAEA,KAAK,YAAc,IAAM,CACvB,IAAIhV,EAAW,YAAgB,KAAK,MAAM,KAAK,EAC/C,YAAYA,CAAQ,CACtB,EAEA,KAAK,WAAa,IAAM,CACtB,KAAK,kBAAkB,EACvB,KAAK,MAAM,SAAS,aAAc,aAAc,KAAK,MAAM,UAAU,CAAC,EACtE,KAAK,MAAM,SAAS,aAAc,QAAS,KAAK,MAAM,KAAK,CAAC,EAC5D,KAAK,YAAY,CACnB,EAEA,KAAK,iBAAmB,IAAM,CAC5B,KAAK,SAAS,CAAC,CAAE,WAAAC,CAAW,KAAO,CACjC,WAAY,CAACA,CACf,EAAE,CACJ,CACF,CAEA,YAAa,CACX,KAAK,SAAS,CACZ,WAAY,KAAK,MAAM,YAAY,WACnC,MAAO,KAAK,MAAM,YAAY,KAChC,CAAC,CACH,CAEA,QAAS,CACP,KAAM,CAAE,YAAAqT,EAAa,WAAArT,EAAY,MAAA4U,EAAO,YAAAC,CAAY,EAAI,KAAK,MAC7D,OACE,kBAAC,IAAM,SAAN,KACC,kBAAChQ,GAAA,EAAM,CACL,QAASA,GAAA,EAAc,MACvB,IAAI,MACJ,QAAS,KAAK,mBACd,kBAAC,KAAO,IAAC,CACX,EACA,kBAAC8O,EAAA,EAAK,CACJ,QAASA,EAAA,EAAa,MACtB,MAAM,cACN,OAAQN,EACR,QAAS,KAAK,kBACd,cAAe,KAAK,aACpB,QAAS,CACP,kBAACxO,GAAA,EAAM,CAAC,IAAI,UAAU,QAAQ,UAAU,QAAS,KAAK,YAAY,SAElE,EACA,kBAACA,GAAA,EAAM,CAAC,IAAI,SAAS,QAAQ,OAAO,QAAS,KAAK,mBAAmB,QAErE,CACF,GAEA,kBAAC,WACC,kBAAC,KAAE,IAAI,QAAO,8GAA4G,CAC5H,EACA,kBAAC,WACC,kBAACmQ,GAAA,EAAM,CACL,IAAI,aACJ,GAAG,aACH,MAAM,0BACN,UAAWhV,EACX,SAAU,KAAK,iBACjB,CACF,EACA,kBAAC,OAAI,MAAO,CAAC,WAAc,MAAM,GAC/B,kBAAC,KAAE,IAAI,cAAa,2EAAyE,CAC/F,EACA,kBAAC,WACC,kBAACiV,GAAA,EAAM,CACL,QAAS,KAAc,OACvB,MAAM,eACN,SAAU,KAAK,kBACf,SAAU,KAAK,kBACf,WAAYL,EACZ,OAAQC,EACR,aAAa,UAEb,kBAACK,GAAA,EAAY,CAAC,IAAI,OAAO,MAAM,OAAM,EACrC,kBAACA,GAAA,EAAY,CAAC,IAAI,QAAQ,MAAM,QAAO,EACvC,kBAACA,GAAA,EAAY,CAAC,IAAI,OAAO,MAAM,OAAM,CACvC,CACF,CACF,CACF,CAEJ,CACF,CApIE,GAFI,GAEG,YAAY,CACjB,SAAU,IAAU,OACpB,OAAQ,IAAU,OAClB,YAAa,IAAU,OACvB,SAAU,IAAU,OACpB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EA+HY,mBAAQ/V,IAAU,CAC/B,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAW,E,4bC7If,MAAM,WAAsB,WAAgB,CAM1C,aAAc,CACZ,MAAM,EAMR,mCAA4BmJ,GAAY,CACtC,KAAK,SAAS,CACZ,gBAAiBA,CACnB,CAAC,CACH,CAAC,EATC,KAAK,MAAQ,CACX,gBAAiB,IACnB,CACF,CAUA,QAAS,CACP,KAAM,CAAE,MAAA6M,EAAO,OAAAxW,CAAO,EAAI,KAAK,MACzB,CAAE,gBAAAyW,CAAgB,EAAI,KAAK,MACjC,OACE,gBAACC,GAAA,EAAQ,CACP,UAAU,kBACV,UAAS,GACT,uBAAwBD,EACxB,qBAAsB,KAAK,yBAC3B,MAAO,CAAE,SAAU,gCAAiC,GAEnDD,EAAM,IAAKG,GACV,gBAACC,GAAA,EAAY,CAAC,IAAKD,EAAK,MAAO,GAAIA,EAAK,OACtC,gBAAC,IAAI,CACH,GAAI,GAAG3W,EAAO,oBAAoB2W,EAAK,QACvC,MAAO,CACL,eAAgB,MAClB,GAEA,gBAACE,GAAA,EAAe,KACd,gBAACC,GAAA,EAAiB,CAChB,cAAe,CACb,gBAACC,GAAA,EAAY,CAAC,IAAKJ,EAAK,MAAO,MAAO,GACnCA,EAAK,KACR,CACF,EACF,CACF,CACF,CACF,CACD,CACH,CAEJ,CACF,CAtDE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,MACjB,OAAQ,IAAU,MACpB,CAAC,EAqDY,mBAASnW,IAAW,CAAE,OAAQA,EAAM,MAAO,EAAE,EAAE,EAAa,E,iKChC3E,MAAMwW,GAA2B,GAAK,GAAK,GAG3C,MAAM,WAAqB,WAAgB,CAA3C,kCAUE,qBAAa,IAAM,CACZ,KAAK,MAAM,UACd,KAAK,MAAM,cACT,KAAK,MAAM,OACX,KAAK,MAAM,MAAM,OAAO,SAC1B,CAEJ,CAAC,CAAD,CAEA,mBAAoB,CAClB,SAAS,MAAQ,wBACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAmBC,EAAW,CACxB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAS,CACP,KAAM,CAAE,SAAArL,EAAU,WAAAzK,EAAY,OAAAnB,CAAO,EAAI,KAAK,MAG9C,GAAI4L,IAAa,QAAazK,EAC5B,OAAO,gBAAC+V,GAAA,EAAQ,IAAC,EAInB,GAAI,CAACtL,EACH,OACE,gBAAC,KAAS,CACR,MAAM,uCACN,KAAM,KACN,WAAY,GAAG5L,EAAO,uBACtB,SAAS,6BACX,EAKJ,MAAMmX,EAAgBvL,EAAS,MAAM,OAAS,EAC5C,gBAAC,YAAM,gBAAC,GAAa,CAAC,MAAOA,EAAS,MAAO,CAAE,EAE/C,gCAIE,gBAAC,SAAG,EACJ,gBAACwL,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAW,EACjC,gBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,8CAEnC,CACF,CACF,EAGIC,EAAmB3L,EAAS,kBAAoB,EAAK,eAAiB4L,GAAA,SAAgB5L,EAAS,gBAAiB,SAAS,EAAE,SAAS,EAC1I,QAAQ,IAAIA,EAAS,OAAO,EAC5B,MAAM6L,EAAU7L,EAAS,QAAW,KAAK,IAAI,EAAI,IAAOA,EAAS,QAAW,GAC5E,QAAQ,IAAI6L,CAAO,EACnB,MAAMC,EAAiB9L,EAAS,gBAAkBoL,GAA2BS,EAC7E,QAAQ,IAAIC,CAAc,EAG1B,IAAIC,EAAcC,EAClB,OAAIhM,EAAS,kBAAoB,GAAK6L,GACpCG,EAAkBF,EAAiB,EAChC,gCACC,gBAAC,cAAO,wBAAsB,EAAS,IAAEF,GAAA,SAAgBE,EAAgB,SAAS,EAAE,SAAS,CAC/F,EACA,gBAAC,YAAK,wDAAsD,EAC9DC,EAAe,gBAAC,IAAY,CAC1B,YAAaE,GAAA,EACb,KAAM,gBAAC,KAAS,IAAC,EACjB,MAAOD,CAAA,CACT,GAEAD,EAAe,+BAAE,EAIjB,gCACE,gBAACG,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAACR,GAAA,EAAK,CAAC,aAAa,MAAK,oBAAkB1L,EAAS,EAAG,EAEvD,gBAACtE,GAAA,EAAI,CAAC,UAAU,4BACd,gBAACA,GAAA,EAAI,CAAC,KAAM,CAAE,QAAS,QAAS,GAC9B,gBAACC,GAAA,EAAQ,KACP,gBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC/B,gBAAC,IAAY,CACX,YAAaF,GAAA,EACb,KAAM,gBAAC,KAAQ,IAAC,EAChB,MACE,gCACE,gBAAC,cAAO,UAAQ,EAAS,IAAC,gBAAC,IAAI,CAAC,GAAI,GAAG7X,EAAO,sBAAsB4L,EAAS,WAAYA,EAAS,OAAQ,CAC5G,EAEJ,EACA,gBAAC,IAAY,CACX,YAAaiM,GAAA,EACb,KAAM,gBAAC,IAAQ,IAAC,EAChB,MACE,gCACE,gBAAC,cAAO,SAAO,EAAS,IAAEjM,EAAS,UACrC,EAEJ,EACA,gBAAC,IAAY,CACX,YAAaiM,GAAA,EACb,KAAM,gBAAC,KAAS,IAAC,EACjB,MACE,gCACE,gBAAC,cAAO,MAAI,EAAS,IAAC,gBAAC,IAAI,CAAC,GAAI,GAAG7X,EAAO,kBAAkB4L,EAAS,OAAQA,EAAS,GAAI,CAC5F,EAEJ,EACA,gBAAC,IAAY,CACX,YAAaiM,GAAA,EACb,KAAM,gBAAC,KAAW,IAAC,EACnB,MACE,gCACE,gBAAC,cAAO,gBAAc,EAAS,IAAEjM,EAAS,cAAc,WAASA,EAAS,SAC5E,EAEJ,EACA,gBAAC,IAAY,CACX,YAAaiM,GAAA,EACb,KAAM,gBAAC,KAAiB,IAAC,EACzB,MACE,gCACE,gBAAC,cAAO,gBAAc,EAAS,IAAC,gBAAC,QAAK,MAAOjM,EAAS,gBAAkB,YAAc2L,CAAgB,CACxG,EAEJ,CACF,CACF,CACF,EACA,gBAACjQ,GAAA,EAAI,CAAC,KAAM,CAAE,QAAS,QAAS,GAC9B,gBAACC,GAAA,EAAQ,KACP,gBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC/B,gBAAC,IAAY,CACX,YAAaF,GAAA,EACb,KAAM,gBAAC,KAAuB,IAAC,EAC/B,MACE,gCACE,gBAAC,cAAO,SAAO,EACf,gBAAC,OAAI,UAAW,KAAK,MAAM,YAAY,SAAW,oBAAsB,IACtE,gBAAC,WAAKjM,EAAS,MAAO,CACxB,CACF,EAEJ,EACC+L,CACH,CACF,CACF,CACF,CACF,EACA,gBAACG,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAACR,GAAA,EAAK,CAAC,aAAa,MAClB,gBAAC,KAAS,CACR,MAAO,CACL,YAAa,+BACb,cAAe,QACjB,EACF,EAAG,IAAI,aAET,EACCH,CACH,CACF,CAEJ,CACF,CA1LE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,OAAO,WACxB,OAAQ,IAAU,OAAO,WACzB,SAAU,IAAU,OACpB,WAAY,IAAU,KAAK,WAC3B,cAAe,IAAU,KAAK,WAC9B,YAAa,IAAU,MACzB,CAAC,EAqLH,SAAS7U,GAAgB9B,EAAO,CAC9B,MAAO,CACL,SAAUA,EAAM,UAAU,SAC1B,OAAQA,EAAM,OACd,WAAYA,EAAM,UAAU,WAC5B,YAAaA,EAAM,WACrB,CACF,CAEA,MAAMmC,GAAqB,CAAE,kBAAc,EAE5B,mBAAQL,GAAiBK,EAAkB,EAAE,EAAY,E,2GC3MxE,SAASqV,GAAc3L,EAAO,CAC5B,KAAM,CAAE,UAAA4L,EAAW,SAAAC,EAAU,OAAAlY,EAAQ,KAAA2E,EAAM,SAAAtE,CAAS,EAAIgM,EAClD8L,EAAU,CACd,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAe,IAAC,EAAI,MAAM,KAAK,EAC3D,UAAW,YACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,UAAU,EACzD,UAAW,SACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAS,IAAC,EAAI,MAAM,MAAM,EACtD,UAAW,KACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAc,IAAC,EAAI,MAAM,aAAa,EAClE,UAAW,YACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAW,IAAC,EAAI,MAAM,WAAW,EAC7D,UAAW,UACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAA0B,IAAC,EAAI,MAAM,SAAS,EAC1E,UAAW,QACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAiB,IAAC,EAAI,MAAM,WAAW,EACnE,UAAW,UACb,EACA,CACE,MAAO,GACP,UAAW,QACb,CACF,EAEA,SAASC,EAAqBjN,EAAW,CACvC,YAAgBnL,EAAO,UAAWmL,CAAS,EACxC,KAAK,IAAM,CACV9K,EAAS,aACP,CACE,KAAM,yCACN,KAAM,UACN,OAAQ,GACR,IAAK,EACP,CAAC,CAAC,EACJA,EAAS,aAAeL,CAAM,CAAC,CACjC,CAAC,EACA,MAAMG,GAAS,CACdE,EAAS,aAAiBF,CAAK,CAAC,CAClC,CAAC,CACL,CAEA,SAASkY,EAA2BlN,EAAW,CAC7C,OACE,kBAAC,KAAS,CACR,MAAM,0BACN,MAAO,CACL,OAAQ,UACR,MAAO,qCACT,EACA,QAAUgL,GAAU,CAClBA,EAAM,eAAe,EACrBiC,EAAqBjN,CAAS,CAChC,EAAG,CAET,CAEA,SAASmN,EAAkB1M,EAAU,CACnC,MAAMG,EAAQH,EAAS,cAAgB,IAAMA,EAAS,UAChD2L,EAAmB3L,EAAS,kBAAoB,EAAK,eAAiB4L,GAAA,SAAgB5L,EAAS,gBAAiB,SAAS,EAAE,SAAS,EACpI2M,GAAiB5T,EAAK,SAAWA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,GAAMqY,EAA2BzM,EAAS,EAAE,EAAI,GAE3H,MAAO,CACL,MAAO,CACL,CACE,MACE,kBAAC,IAAI,CAAC,GAAI,GAAG5L,EAAO,uBAAuB4L,EAAS,MAAOA,EAAS,EAAG,CAE3E,EACA,CACE,MAAOA,EAAS,OAClB,EACA,CACE,MAAOA,EAAS,GAClB,EACA,CACE,MAAOA,EAAS,UAClB,EACA,CACE,MAAOG,CACT,EACA,CACE,MAAOH,EAAS,MAClB,EACA,CACE,MAAO2L,CACT,EACA,CACE,MAAOgB,EACT,CACF,CACF,CACF,CAEA,SAASC,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,IAAIC,EAAO,CAAC,EACZ,OAAIR,GACFQ,EAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEvBO,EAAOT,EAAU,IAAKrM,GAAa0M,EAAkB1M,CAAQ,CAAC,EAI9D,oCACE,kBAAC+M,GAAA,EAAK,CACJ,aAAW,0BACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACR,GAAYD,EAAU,SAAW,GACjC,kBAACb,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAU,EAChC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,4BAA0B,EACnD,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,CAEJ,CAEJ,CAEAZ,GAAc,UAAY,CACxB,UAAW,IAAU,MAAM,WAC3B,SAAU,IAAU,KAAK,WACzB,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,SAAU,IAAU,IACtB,EAEe,mBAASxX,IAAW,CACjC,OAAQA,EAAM,OACd,KAAMA,EAAM,IACd,EAAE,EAAEwX,EAAa,E,4CC/LjB,MAAMa,GAAgBxM,GAAS,CAE3B,MAAMhM,EAAW,YAAY,EACvB,CAAE,OAAAL,EAAQ,KAAA2E,EAAM,kBAAAmU,EAAmB,qBAAAC,CAAqB,EAAI1M,EAE5D,CAACxG,EAAQmT,CAAS,EAAI,mBAAS,EAAE,EACjC,CAACC,EAAWC,CAAY,EAAI,mBAAS,EAAE,EACvC,CAACrG,EAASsG,CAAU,EAAI,mBAAS,cAAc,EAC/C,CAACC,EAAUC,CAAW,EAAI,mBAAS,UAAU,EAC7C,CAACvN,EAAQwN,EAAS,EAAI,mBAAS,GAAG,EAClC,CAACvN,GAAOwN,EAAQ,EAAI,mBAAS,CAAC,EAC9B,CAACC,GAAoBC,EAAqB,EAAI,mBAAS,KAAK,EAGlE,oBAAU,IAAM,CACRpN,EAAM,QAAU2M,EAAU3M,EAAM,MAAM,EACtCA,EAAM,WAAa6M,EAAa7M,EAAM,SAAS,EAC/CA,EAAM,SAAW8M,EAAW9M,EAAM,OAAO,EACzCA,EAAM,SAAWgN,EAAYhN,EAAM,OAAO,EAC1CA,EAAM,OACNiN,GAAUjN,EAAM,MAAM,EAEtBiN,GACI3U,EAAK,KACC,gCAAkCA,EAAK,KAAK,QAAQ,mBACpD,GACV,CAER,EAAG,CAAC0H,EAAM,OAAQA,EAAM,UAAWA,EAAM,QAASA,EAAM,QAASA,EAAM,OAAQ1H,EAAK,IAAI,CAAC,EAEzF,SAAS+U,IAAgB,CACrB,IAAIC,GAAY9T,IAAW,GAAK,KAAOA,EACnC+T,GAASX,IAAc,GAAK,KAAOA,EAEvC,YAASjZ,EAAO,UAAW6S,EAASuG,EAAUO,GAAWC,GAAQ9N,EAAQ,SAASC,EAAK,EAAG,SAASyN,EAAkB,CAAC,EACjH,KAAK,IAAM,CAKRnZ,EAAS,aAAeL,CAAM,CAAC,EAC/BK,EAAS,aACL,CACI,KAAM,qCACN,KAAM,UACN,OAAQ,GACR,IAAK,EACT,CAAC,CAAC,CACV,CAAC,EACA,MAAMF,IAAS,CACZE,EAAS,aAAiBF,EAAK,CAAC,CACpC,CAAC,EACL4Y,EAAqB,EAAK,CAC9B,CAEA,OACI,kBAAC/D,EAAA,EAAK,CACF,QAASA,EAAA,EAAa,MACtB,OAAQ8D,EACR,MAAM,6BACN,QAAS,IAAM,CAAEC,EAAqB,EAAK,CAAE,EAC7C,QAAS,CACL,kBAAC7S,GAAA,EAAM,CACH,IAAI,mBACJ,QAAQ,UACR,QAAS,IAAMwT,GAAc,GAAG,QAAM,EAC1C,kBAACxT,GAAA,EAAM,CACH,IAAI,kBACJ,QAAQ,OACR,QAAS,IAAM,CAAE6S,EAAqB,EAAK,CAAE,GAAG,QAAM,CAC9D,GACA,kBAACc,GAAA,EAAI,CAAC,aAAY,IACd,kBAACC,GAAA,EAAS,CACN,MAAM,UACN,WAAU,GACV,QAAQ,kBACR,WAAW,wDACX,kBAACC,GAAA,EAAS,CACN,MAAOlH,EACP,WAAU,GACV,KAAK,OACL,GAAG,cACH,KAAK,UACL,SAAWmH,IAAU,CAAEb,EAAWa,EAAK,CAAE,EAAG,CACpD,EACA,kBAACF,GAAA,EAAS,CACN,MAAM,MACN,WAAU,GACV,QAAQ,mBACR,WAAW,oDACX,kBAACC,GAAA,EAAS,CACN,MAAOX,EACP,WAAU,GACV,KAAK,OACL,GAAG,mBACH,KAAK,WACL,SAAWY,IAAU,CAAEX,EAAYW,EAAK,CAAE,EAAG,CACrD,EACA,kBAACF,GAAA,EAAS,CACN,MAAM,SACN,QAAQ,iBACR,WAAW,uDACX,kBAACC,GAAA,EAAS,CACN,MAAOlU,EACP,KAAK,OACL,GAAG,iBACH,KAAK,SACL,SAAWmU,IAAU,CAAEhB,EAAUgB,EAAK,CAAE,EAAG,CACnD,EACA,kBAACF,GAAA,EAAS,CACN,MAAM,MACN,QAAQ,cACR,WAAW,oDACX,kBAACC,GAAA,EAAS,CACN,MAAOd,EACP,KAAK,OACL,GAAG,cACH,KAAK,SACL,SAAWe,IAAU,CAAEd,EAAac,EAAK,CAAE,EAAG,CACtD,EACA,kBAACF,GAAA,EAAS,CACN,MAAM,SACN,WAAU,GACV,QAAQ,iBACR,WAAW,2DACX,kBAACC,GAAA,EAAS,CACN,MAAOjO,EACP,WAAU,GACV,KAAK,OACL,GAAG,iBACH,KAAK,SACL,SAAWkO,IAAU,CAAEV,GAAUU,EAAK,CAAE,EAAG,CACnD,EACA,kBAACF,GAAA,EAAS,CACN,MAAM,QACN,WAAU,GACV,QAAQ,gBACR,WAAW,iDACX,kBAACC,GAAA,EAAS,CACN,MAAOhO,GACP,WAAU,GACV,KAAK,SACL,GAAG,gBACH,KAAK,QACL,SAAWiO,IAAU,CAAET,GAASS,EAAK,CAAE,EAAG,CAClD,EACA,kBAACF,GAAA,EAAS,CACN,MAAM,2BACN,WAAU,GACV,QAAQ,cACR,WAAW,yDACX,kBAACC,GAAA,EAAS,CACN,MAAOP,GACP,WAAU,GACV,KAAK,SACL,GAAG,gBACH,KAAK,qBACL,SAAWQ,IAAU,CAAEP,GAAsBO,EAAK,CAAE,EAAG,CAC/D,CACJ,CACJ,CAER,EAEAnB,GAAc,UAAY,CACtB,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,OAAQ,IAAU,OAClB,UAAW,IAAU,OACrB,QAAS,IAAU,OACnB,QAAS,IAAU,OACnB,OAAQ,IAAU,OAClB,kBAAmB,IAAU,KAC7B,qBAAsB,IAAU,IACpC,EAEe,mBAASrY,IAAW,CAC/B,OAAQA,EAAM,OACd,KAAMA,EAAM,IAChB,EAAE,EAAEqY,EAAa,E,iKCtLjB,MAAM,WAAsB,WAAgB,CAQ1C,aAAc,CACZ,MAAM,EAOR,+BAAwBmB,GAAU,CAChC,KAAK,SAAS,KAAO,CAAE,kBAAmBA,CAAM,EAAE,CACpD,CAAC,EAwBD,qBAAcvJ,GAAU,CACtB,KAAK,MAAM,SAAS,aAAuB,KAAK,MAAM,OAAQA,CAAK,CAAC,CACtE,CAAC,EAjCC,KAAK,MAAQ,CACX,kBAAmB,EACrB,CACF,CAMA,sBAAuB,CACrB,MAAMuJ,EAAS,gBAAC,QAAK,MAAO,CAC1B,OAAQ,UACR,MAAO,sCACT,EACE,MAAM,yEACN,QAAU7D,GAAU,CAClBA,EAAM,eAAe,EACrB,KAAK,qBAAqB,EAAI,CAChC,GACD,gBAED,EACA,OACE,gBAAC,IAAY,CACX,KAAM,gBAAC,KAAc,IAAC,EACtB,MAAA6D,CAAA,CACF,CAGJ,CAMA,mBAAoB,CAClB,SAAS,MAAQ,iBACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAmB/C,EAAW,CACxB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAS,CACP,KAAM,CAAE,OAAAjX,EAAQ,KAAA2E,EAAM,WAAAsV,CAAW,EAAI,KAAK,MACpChC,EAAYgC,EAAW,UACvB,CAAE,kBAAAnB,CAAkB,EAAI,KAAK,MAEnC,OACE,gCACInU,EAAK,SAAWA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,IACpD,gBAAC8X,EAAA,EAAW,KACV,gBAACxQ,GAAA,EAAI,CAAC,KAAM,CAAE,QAAS,QAAS,GAC9B,gBAACC,GAAA,EAAQ,KACN,KAAK,qBAAqB,CAC7B,CACF,CACF,EAEF,gBAACuQ,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAAC,GAAa,CACZ,UAAAG,EACA,SAAUgC,EAAW,WAAY,CACrC,EACC,gBAAC,GAAa,CACb,kBAAAnB,EACA,qBAAsB,KAAK,qBAC7B,CACF,CAEJ,CACF,CAtFE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EAmFY,mBAAQtY,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,UAClB,KAAMA,EAAM,IACd,EAAE,EAAE,EAAa,E,6UCpGjB,MAAM,WAAiB,IAAM,SAAU,CAMrC,QAAS,CACP,KAAM,CAAE,SAAA0Z,EAAU,YAAAC,CAAY,EAAI,KAAK,MACvC,OACE,kBAAC,SAAM,UAAU,qCAAqC,MAAO,CAAC,MAAM,KAAK,GACvE,kBAAC,aACE,OAAO,KAAKD,EAAS,QAAQ,EAAE,IAAI/L,GAClC,kBAAC,MAAG,IAAAA,CAAA,EACF,kBAAC,UAAIA,CAAI,EACT,kBAAC,MAAG,MAAO,CAAC,MAAM,MAAM,GACrB,OAAO+L,EAAS,SAAS/L,IAAU,SACnC,kBAAC,KAAS,CACR,IAAK+L,EAAS,SAAS/L,GACvB,KAAM,KACN,UAAW,GACX,SAAU,GACV,gBAAiB,GACjB,iBAAkB,GAClB,MAAOgM,EAAY,SAAW,WAAa,cAAc,EAC1DD,EAAS,SAAS/L,GAAK,SAAS,CACpC,CACF,CACD,CACH,CACF,CAEJ,CACF,CA/BE,GADI,GACG,YAAY,CACjB,SAAU,IAAU,OAAO,WAC3B,YAAa,IAAU,MACzB,CAAC,EA8BH,MAAM,WAAqB,IAAM,SAAU,CAMzC,QAAS,CACP,KAAM,CAAE,UAAAiM,EAAW,YAAAD,CAAY,EAAI,KAAK,MAElC3D,EAAQ4D,EAAU,IAAI,CAACF,EAAUG,IAAU,CAC/C,MAAM1D,EAAO,CAAC,KAAM,kBAAC,KAAE,KAAMuD,EAAS,KAAMA,EAAS,IAAK,EACxD,KAAM,IAAI,EACZ,OAAIA,EAAS,WACXvD,EAAK,MAAU,CAAC,CAAC,KAAM,kBAAC,GAAQ,CAAC,IAAK0D,EAAO,SAAAH,EAAoB,YAAAC,CAAA,CAAyB,EACxF,KAAM,EAAE,CAAC,GAENxD,CACT,CAAC,EAED,OACE,oCACE,kBAAC,SAAE,EACH,kBAAC,OAAI,UAAU,uBACb,kBAAC2D,GAAA,EAAQ,CACP,MAAA9D,CAAA,CACF,CACF,CACF,CAEJ,CACF,CA7BE,GADI,GACG,YAAY,CACjB,UAAW,IAAU,MAAM,WAC3B,YAAa,IAAU,MACzB,CAAC,EA4BH,SAAS,GAAgBhW,EAAO,CAC9B,MAAO,CACL,YAAaA,EAAM,WACrB,CACF,CAEe,mBAAQ,EAAe,EAAE,EAAY,E,mHClEpD,MAAM+Z,GAAsB,CAE1B,KAAM,CACJ,KAAM,KACN,MAAO,oCACP,WAAY,MACd,EACA,QAAS,CACP,KAAM,KACN,MAAO,uCACP,WAAY,OACd,EACA,QAAS,CACP,KAAM,KACN,MAAO,sCACP,WAAY,KACd,EACA,YAAa,CACX,KAAM,KACN,MAAO,sCACP,WAAY,KACd,EACA,QAAS,CACP,KAAM,KACN,MAAO,oCACP,WAAY,MACd,EACA,QAAS,CACP,KAAM,KACN,MAAO,oCACP,WAAY,QACd,EACA,eAAgB,CACd,KAAM,KACN,MAAO,uCACP,WAAY,QACd,EACA,cAAe,CACb,KAAM,KACN,MAAO,uCACP,WAAY,QACd,EACA,aAAc,CACZ,KAAM,KACN,MAAO,uCACP,WAAY,QACd,EACA,UAAW,CACT,KAAM,KACN,MAAO,uCACP,WAAY,QACd,EACA,aAAc,CACZ,KAAM,KACN,MAAO,uCACP,WAAY,QACd,EACA,aAAc,CACZ,KAAM,KACN,MAAO,uCACP,WAAY,QACd,CACF,EAEMC,GAA6B,CACjC,KAAM,KACN,MAAO,uCACP,WAAY,QACd,EAEA,SAASC,GAAYpO,EAAO,CAC1B,KAAM,CAAE,OAAAqO,EAAQ,KAAAC,EAAO,OAAW,QAAAC,EAAU,EAAK,EAAIvO,EAC/CpG,EAAasU,GAAoBG,IAAWF,GAC5CK,EAAQD,EAAU3U,EAAW,MAAQ,UAE3C,OACE,gBAAC,QAAK,MAAO,CAAE,MAAA4U,CAAa,GAC1B,gBAAC,IAAkB,CACjB,UAAWF,EACX,QAAS9N,GAAY,gBAAC,IAAI,CAAC,GAAI8N,EAAM,MAAO,CAAE,MAAAE,CAAa,GAAIhO,CAAS,GAEvE6N,GAAU,aACb,CACF,CAEJ,CAEAD,GAAY,UAAY,CACtB,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,QAAS,IAAU,IACrB,EAEA,SAASK,GAAiBzO,EAAO,CAC/B,KAAM,CAAE,OAAAqO,CAAO,EAAIrO,EAEbwO,GADaN,GAAoBG,IAAWF,IACzB,WAEzB,OACE,gBAACO,GAAA,EAAK,CACJ,MAAAF,EACA,MAAO,CACL,WAAY,+BACZ,cAAe,QACjB,GAECH,GAAU,aACb,CAEJ,CAEAI,GAAiB,UAAY,CAC3B,OAAQ,IAAU,MACpB,EAEA,SAASE,GAAoB3O,EAAO,CAClC,KAAM,CAAE,OAAAqO,EAAQ,KAAAC,EAAO,OAAW,QAAAC,EAAU,GAAM,KAAAK,EAAO,IAAK,EAAI5O,EAC5DpG,EAAasU,GAAoBG,IAAWF,GAGlD,IAAIU,EAAgB,SAEhBD,IAAS,OACXC,EAAgB,WAGlB,MAAMC,EAAOlV,EAAW,KAClB4U,EAAQD,EAAU3U,EAAW,MAAQ,UAE3C,OACE,gBAAC,QAAK,MAAO,CAAE,MAAA4U,CAAa,GAC1B,gBAAC,IAAkB,CACjB,UAAWF,EACX,QAAS9N,GAAY,gBAAC,IAAI,CAAC,GAAI8N,EAAM,MAAO,CAAE,MAAAE,CAAa,GAAIhO,CAAS,GAExE,gBAACsO,EAAA,CACC,KAAAF,EACA,MAAO,CACL,YAAa,+BACb,cAAAC,CACF,EACF,EACC7O,EAAM,QACT,CACF,CAEJ,CAEA2O,GAAoB,UAAY,CAC9B,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,QAAS,IAAU,KACnB,KAAM,IAAU,OAChB,SAAU,IAAU,IACtB,EC3IA,SAASI,GAAQrL,EAAO,CAGtB,MAAM,SAAUA,EAAM,SAIf,CAACA,EAAM,IAAK,GAAGA,EAAM,SAAS,KAAK,OAAQsL,GAAM,CAAC,KAAE,QAAQA,EAAGtL,EAAM,GAAG,CAAC,CAAC,EAFxE,CAACA,CAAK,CAGjB,CAEA,SAASuL,GAAOvL,EAAO,CACrB,MAAO,YAAaA,EAAQA,EAAQA,EAAM,GAC5C,CAEA,SAASwL,GAAM,CAAE,MAAAxL,EAAO,OAAA/P,EAAQ,SAAAiE,EAAU,KAAAU,CAAK,EAAG,CAChD,KAAM,CAACmU,EAAmBC,CAAoB,EAAI,mBAAS,EAAK,EAC1DyC,EAAWF,GAAOvL,CAAK,EAEvB0L,EAAYD,EAAS,OAAS,GAAKA,EAAS,IAC5CE,EAAeF,EAAS,OAAS,OAAOA,EAAS,MAAM,EAAI,GAE3DpC,EAAWrJ,EAAM,SACjB4L,EAAc5L,EAAM,UAAYA,EAAM,SAAS,YAC/C6L,EAAgB7L,EAAM,QACrB4L,EAAc5L,EAAM,QAAU,aAAeA,EAAM,QAClD,GAER,SAAS8L,GAAuB,CAC9B,MAAM7B,EACJ,kBAAC,QAAK,MAAO,CACX,OAAQ,UACR,MAAO,sCACT,EACE,MAAM,yEACN,QAAU7D,GAAU,CAClBA,EAAM,eAAe,EACrB4C,EAAqB,EAAI,CAC3B,GACD,kCAED,EAEF,OACE,kBAAC,IAAY,CACX,YAAalB,GAAA,EACb,KAAM,kBAAC,KAAQ,IAAC,EAChB,MAAAmC,CAAA,CACF,CAEJ,CAEA,OACE,oCACE,kBAAC1C,GAAA,EAAK,CACJ,aAAa,KACb,MAAO,CACL,MAAOvH,EAAM,OACT,UACA,uCACN,GAEA,kBAACiL,GAAmB,CAClB,OAAQjL,EAAM,OACd,QAASA,EAAM,OACf,KAAK,MAEJA,EAAM,SAAS,IAAE,CAACA,EAAM,QAAU,eACrC,EACA,kBAAC+K,GAAgB,CAAC,OAAQ/K,EAAM,OAAQ,EACvCA,EAAM,MACL,kBAAC,KAAa,CAAC,MAAM,mCACnB,MAAO,CACL,WAAY,8BACd,EACF,CACJ,EAKA,kBAACzI,GAAA,EAAI,CAAC,UAAU,yBACd,kBAACA,GAAA,EAAI,CAAC,KAAM,CAAE,GAAI,QAAS,GACzB,kBAACC,GAAA,EAAQ,KACP,kBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC9BqD,GAAQrL,CAAK,EAAE,IAAI,CAACxE,EAAKlJ,IACxB,kBAAC,IAAY,CACX,IAAKA,EACL,YAAawV,GAAA,EACb,KAAM,kBAAC,KAAc,IAAC,EACtB,MACE,kBAAC,YACE,YAAkBtM,CAAG,EAAE,kBAAC,SAAE,EAC3B,kBAAC,cAAO,UAAQ,EAAS,IAAEA,EAAI,QAAQ,kBAAC,SAAE,EACzC,YAAcA,CAAG,CACpB,EAEJ,CACD,EACD,kBAAC,IAAY,CACX,YAAasM,GAAA,EACb,KAAM,kBAAC,KAAU,IAAC,EAClB,MACE,oCACE,kBAAC,cAAO,WAAS,EAAS,IAAE9H,EAAM,QACpC,EAEJ,EACA,kBAAC,IAAY,CACX,YAAa8H,GAAA,EACb,KAAM,kBAAC,KAAe,IAAC,EACvB,MACE,kBAAC,YACC,kBAAC,cAAO,OAAK,EAAS,IAAE9H,EAAM,KAAK,IAAC,kBAAC,SAAG,EACxC,kBAAC,cAAO,WAAS,EAAS,IAAEA,EAAM,SAAS,IAAC,kBAAC,SAAG,CAClD,EAEJ,CACF,CACF,CACF,EACA,kBAACzI,GAAA,EAAI,CAAC,KAAM,CAAE,GAAI,QAAS,GACzB,kBAACC,GAAA,EAAQ,KACP,kBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC/B,kBAAC,IAAY,CACX,YAAaF,GAAA,EACb,KAAM,kBAAC,KAAuB,IAAC,EAC/B,MACE,kBAAC,YACC,kBAAC,cAAO,aAAW,EAClB,OACM9H,EAAM,UAAU,EACpB,GAAG9L,CAAQ,EACX,OAAO,qBAAqB,EAC/B,kBAAC,SAAG,EACJ,kBAAC,cAAO,eAAa,EACpB,OACM8L,EAAM,QAAQ,EAClB,GAAG9L,CAAQ,EACX,OAAO,qBAAqB,CACjC,EAEJ,EACA,kBAAC,IAAY,CACX,YAAa4T,GAAA,EACb,KAAM,kBAAC,KAAiB,IAAC,EACzB,MACE,oCACE,kBAAC,cAAO,OAAK,EACZL,GAAA,SACWzH,EAAM,SAAU,SAAS,EAClC,OAAO,wBAAwB,CACpC,EAEJ,CACF,CACF,CACF,EACA,kBAACzI,GAAA,EAAI,CAAC,KAAM,CAAE,GAAI,QAAS,GACzB,kBAACC,GAAA,EAAQ,KACP,kBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC/B,kBAAC,IAAY,CACX,YAAaF,GAAA,EACb,KAAM,kBAAC,IAAQ,IAAC,EAChB,MACE,kBAAC,IAAI,CAAC,GAAI7X,EAAO,WAAa,QAAU+P,EAAM,UAAU,wBAExD,EAEJ,EACA,kBAAC,IAAY,CACX,YAAa8H,GAAA,EACb,KAAM,kBAAC,KAAW,IAAC,EACnB,MACE,kBAAC,IAAI,CACH,GACE7X,EAAO,WACP,oBACA+P,EAAM,SACN,YACAyL,EAAS,QAEX,MAAM,yDACP,oBAED,EAEJ,EAKCzL,EAAM,UACL,kBAAC,IAAY,CACX,YAAa8H,GAAA,EACb,KAAM,kBAAC,KAAS,IAAC,EACjB,MACE,kBAAC,IAAI,CACH,GACE7X,EAAO,WAAa,aAAe+P,EAAM,SAAS,MAErD,sBAED,EAEJ,EAEF,kBAAC,IAAY,CACX,YAAa8H,GAAA,EACb,KAAM,kBAAC,KAAY,IAAC,EACpB,MACE+D,EACE,kBAAC,IAAY,CAAC,OAAQA,CAAA,EAAe,UAAQ,EAE7C,kBAAC,QACC,MAAO,CACL,MAAO,uCACT,GACD,kBAED,EAGN,EACEjX,EAAK,SAAWA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,IAAO6b,EAAqB,CACpF,CACF,CACF,CACF,EACC,kBAAC,GAAa,CACb,kBAAA/C,EACA,qBAAAC,EACA,OAAQ2C,EACR,UAAWD,EACX,QAASD,EAAS,QAClB,QAASpC,CAAA,CACX,CACF,CAEJ,CAEAmC,GAAM,UAAY,CAChB,MAAO,IAAU,OACjB,OAAQ,IAAU,OAClB,KAAM,IAAU,MAChB,SAAU,IAAU,OACpB,KAAM,IAAU,MAClB,EAEe,mBAAS/a,IAAW,CACjC,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,KAAMA,EAAM,IACd,EAAE,EAAE+a,EAAK,E,+PC7PT,MAAMO,GAAa,IAAI,OAAO,YAAe,EAG7C,MAAM,WAAyB,WAAgB,CAO7C,QAAS,CACP,IAAIjB,EAAQ,KAAK,MAAM,SAAW,MAAQ,QACtCtO,EAAO,KAAK,MAAM,SAAW,gBAAC,KAAe,IAAC,EAAK,gBAAC,KAAe,IAAC,EACpEwP,EAAW,KAAK,MAAM,SACxB,gCACE,gBAACC,GAAA,EAAO,CAAC,YAAa,CAAC,QAAS,UAAU,EAAG,EAC7C,gBAACzU,GAAA,EAAQ,KAAC,gBAAC,cAAQ,KAAK,MAAM,QAAS,EAAS,WAAS,KAAK,MAAM,SAAW,EAAI,IAAM,EAAG,CAC9F,EACE,KAEJ,OACE,gBAACwT,GAAA,EAAK,CAAC,MAAAF,EAAc,KAAAtO,CAAA,EACnB,gBAACjF,GAAA,EAAI,KACH,gBAACC,GAAA,EAAQ,KAAC,gBAAC,cAAQ,KAAK,MAAM,EAAG,EAAS,KAAG,EAC7C,gBAACyU,GAAA,EAAO,CAAC,YAAa,CAAC,QAAS,UAAU,EAAG,EAC7C,gBAACzU,GAAA,EAAQ,KAAC,gBAAC,cAAQ,KAAK,MAAM,OAAQ,EAAS,UAAQ,EACrDwU,CACJ,CACF,CAEJ,CACF,CA3BE,GADI,GACG,YAAY,CACjB,GAAI,IAAU,OACd,QAAS,IAAU,OACnB,SAAU,IAAU,MACtB,CAAC,EA0BH,MAAM,WAAoB,WAAgB,CAMxC,YAAaE,EAAO,CAClB,OACE,gCACE,gBAAC,SAAG,EACJ,gBAAC,OAAI,UAAW,qBACd,gBAACvF,GAAA,EAAQ,CAAC,aAAW,gBAAgB,UAAW,IAC7C,OAAO,QAAQuF,CAAK,EAAE,IAAI,CAAC,CAACC,EAAMC,CAAM,IACvC,gBAACvF,GAAA,EAAY,CAAC,IAAKsF,EAAM,aAAW,QAClC,gBAACrF,GAAA,EAAe,KACd,gBAACC,GAAA,EAAiB,CAChB,cAAe,CACb,gBAACC,GAAA,EAAY,CAAC,IAAKmF,EAAO,SACxB,gBAACE,GAAA,EAAI,CAAC,WAAY,GAAM,aAAa,QACnC,gBAAC,QAAK,MAAO,CAAE,SAAU,gCAAiC,GACxD,gBAAC,KAAiB,IAAC,EAAE,OAAOF,CAC9B,CACF,CACF,EACA,gBAACnF,GAAA,EAAY,CAAC,IAAKmF,EAAO,SACxB,gBAAC,GAAgB,CAAC,GAAIC,EAAO,GAAI,QAASA,EAAO,QAAS,SAAUA,EAAO,SAAU,CACvF,CACF,EACF,CACF,CACF,CACD,CACH,CACF,CACF,CAEJ,CAEA,SAASE,EAAO,CAEd,OAAIA,GAASA,EAAM,OAAS,EACnB,CACLA,EAAM,MAAM,EAAG,GAAU,EAAE,KAAK;AAAA,CAAI,EACpCA,EAAM,MAAM,GAAU,EAAE,KAAK;AAAA,CAAI,CACnC,EAEK,CAAC,GAAI,EAAE,CAChB,CAEA,iBAAkBH,EAAMI,EAAM,CAC5B,IAAIC,EAAkB,oBAClB,KAAK,MAAM,YAAY,WACzBA,EAAkB,0BAEpB,KAAM,CAACC,EAAoBC,CAAiB,EAAI,KAAK,SAASH,EAAK,YAAY,EACzE,CAACI,EAAoBC,CAAiB,EAAI,KAAK,SAASL,EAAK,YAAY,EAG/E,IAAIM,EAAa,CAAC,EAClB,OAAId,GAAW,KAAKU,CAAkB,GAClCV,GAAW,KAAKW,CAAiB,GACjCX,GAAW,KAAKY,CAAkB,GAClCZ,GAAW,KAAKa,CAAiB,KACnCC,EAAa,CAAC,gBAAiB,QAAS,MAAO,OAAO,GAGtD,gBAACjW,GAAA,EAAI,CAAC,IAAKuV,EAAOI,EAAK,YAAa,UAAU,2BAA2B,MAAO,KAAK,MAAM,YAAY,SAAW,CAAC,WAAY,wCAAwC,EAAI,CAAC,GAC1K,gBAAC1V,GAAA,EAAU,KACT,gBAAC,KAAS,CAAC,MAAO,CAAE,MAAO,qCAAsC,EAAE,EAAE,eACnD,gBAAC,cAAQ0V,EAAK,IAAK,EAAS,kCAChB,gBAAC,cAAQJ,CAAK,CAC9C,EACA,gBAAClV,GAAA,EAAQ,KACNsV,EAAK,YAAcA,EAAK,WAAW,aACnCA,EAAK,WAAW,YAAY,aAC3B,gBAAC,OAAI,IAAI,MAAM,MAAM,MAAM,UAAW,OAASC,CAAA,EAC5CD,EAAK,WAAW,YAAY,WAC/B,EAEDA,EAAK,KACJ,gBAAC,OAAI,IAAI,MAAM,MAAM,MAAM,UAAWC,CAAA,EAAkBD,EAAK,GAAI,EAElEA,EAAK,WACJ,gBAAC,OAAI,IAAI,MAAM,MAAO,CAAE,MAAO,KAAM,EAAG,MAAM,MAAM,UAAWC,CAAA,EAAkBD,EAAK,SAAU,EAEjGG,EAAkB,OAAS,GAC1B,gBAAC,WAAQ,KACND,EAAmB,OAAS,GAC3B,gBAAC,WAAQ,UAAW,iBAAiB,EAAY,gBAAC,cAAQ,EACxD,gBAAC,OAAI,IAAI,SAAS,MAAM,SAAS,UAAWD,EAAiB,MAAOK,CAAA,EAClE,gBAAC,KAAM,CAAC,IAAKJ,CAAA,CAAoB,CACnC,CACF,EACF,gBAAC,OAAI,IAAI,SAAS,MAAM,SAAS,UAAWD,EAAiB,MAAOK,CAAA,EAClE,gBAAC,KAAM,CAAC,IAAKH,CAAA,CAAmB,CAClC,CACF,EAEDE,EAAkB,OAAS,GAC1B,gBAAC,WAAQ,KACND,EAAmB,OAAS,GAC3B,gBAAC,WAAQ,UAAW,iBAAiB,EAAY,gBAAC,cAAQ,EACxD,gBAAC,OAAI,IAAI,SAAS,MAAM,SAAS,UAAWH,EAAiB,MAAOK,CAAA,EAClE,gBAAC,KAAM,CAAC,IAAKF,CAAA,CAAoB,CACnC,CACF,EAEF,gBAAC,OAAI,IAAI,SAAS,MAAM,SAAS,UAAWH,EAAiB,MAAOK,CAAA,EAClE,gBAAC,KAAM,CAAC,IAAKD,CAAA,CAAmB,CAClC,CACF,CAEJ,CACF,CAEJ,CAEA,QAAU,CACR,KAAM,CAAE,OAAAE,CAAO,EAAI,KAAK,MACxB,OACE,gBAAC,gBACE,KAAK,YAAYA,CAAM,EACxB,gBAAC,SAAG,EACH,OAAO,QAAQA,CAAM,EACnB,OAAO,CAAC,CAAC,CAAEV,CAAM,IAAMA,EAAO,OAAO,OAAS,CAAC,EAC/C,IAAI,CAAC,CAACD,EAAMC,CAAM,IAAOA,EAAO,OAAO,IAAIW,GAC1C,KAAK,iBAAiBZ,EAAMY,CAAM,CAAE,CAAE,CAC5C,CAEJ,CACF,CAjIE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,YAAa,IAAU,MACzB,CAAC,EAiIH,SAAS,GAAgBtc,EAAO,CAC9B,MAAO,CACL,YAAaA,EAAM,WACrB,CACF,CAEe,mBAAQ,EAAe,EAAE,EAAW,E,2OC/JnD,MAAMuc,GAAmB,CAAC,MAAO,MAAO,SAAU,QAAQ,EACpD,GAAa,IAAI,OAAO,YAAe,EAG7C,MAAM,WAAmB,WAAgB,CAOvC,cAAc/C,EAAO,CACnB,MAAMgD,EAAsB,CAAC,EAU7B,OADqBhD,EAAM,MAAMqB,GAAK,OAAOA,GAAM,QAAQ,IAEzDrB,EAAQ,CAAE,CAAC,OAAQ,CAAC,GAAGA,CAAK,CAAC,CAAE,GAGjCA,EAAM,QAAQ,CAACU,EAAQrY,IAAQ,CAChB,OAAO,QAAQqY,CAAM,EAAE,OAClC,CAAC,CAACvM,EAAK6L,CAAK,IAAM,aAChB7L,EAAK6L,EAAO,GAAM,KAAK,MAAM,OAAO,CAAC,EAChC,QACPgD,EAAoB,KAAK3a,CAAG,CAEhC,CAAC,EAGC,gBAAC,OAAI,IAAI,WACN2a,EAAoB,OAAO,GAC3B,gBAAC,gBACC,gBAAC,MAAG,IAAI,kBAAiB,SAAO,EAC/BA,EAAoB,IAAK3a,GACxB,gBAAC,OAAI,UAAU,2BAA2B,IAAKA,CAAA,EAC7C,gBAAC,MAAG,IAAKA,CAAA,EAAMA,EAAI,KAAG,aAAc2X,EAAM3X,EAAI,CAAE,EAC/C,OAAO,QAAQ2X,EAAM3X,EAAI,EAAE,IAAI,CAAC,CAAC8L,EAAK6L,CAAK,IAC1C,KAAK,WAAW7L,EAAK6L,EAAO,EAAI,CACjC,CACH,CACD,CACH,CAEH,CAEJ,CAEA,WAAW7L,EAAK6L,EAAOiD,EAAmB,CACxC,IAAIC,EACJ,GAAI,CAAC,aAAiB/O,EAAK6L,EAAOiD,EAAmB,KAAK,MAAM,OAAO,EACrE,OAAQ,gBAAC,YAAe,IAAA9O,CAAA,CAAS,EAEnC,GAAI6L,IAAU,KACZkD,EACE,gBAAC,WAAI,MAEL,UAEO,OAAOlD,GAAW,SAAU,CAGrC,MAAMmD,EAAQ,GAAW,KAAKnD,CAAK,EAAI,CAAC,gBAAiB,QAAS,MAAO,OAAO,EAAI,CAAC,EACrFkD,EACE,gBAAC,OAAI,MAAAC,CAAA,EACH,gBAAC,KAAM,CAAC,IAAKnD,CAAA,CAAO,CACtB,CAEJ,MAAW,OAAOA,GAAW,SAC3BkD,EACE,gBAAC,WACC,gBAAC,KAAS,CACR,IAAKlD,EACL,KAAM,KACN,SAAU,GACV,gBAAiB,GACjB,iBAAkB,GAClB,MAAO,KAAK,MAAM,YAAY,SAAW,WAAa,cAAc,CACxE,EAGFkD,EACE,gBAAC,WACElD,EAAM,SAAS,CAClB,EAIJ,OACE,gBAAC,OAAI,UAAW,KAAK,MAAM,YAAY,SAAW,oBAAsB,qBAAsB,IAAA7L,CAAA,EAC3F+O,GAAO,gBAAC,UAAI/O,CAAI,EAChB+O,GAAOA,CACV,CAEJ,CAEA,QAAU,CACR,KAAM,CAAE,KAAA7U,CAAK,EAAI,KAAK,MAEtB,OACE,gBAAC,gBACE,OAAO,QAAQA,CAAI,EAAE,IAAI,CAAC,CAAC8F,EAAK6L,CAAK,IACpC7L,IAAM,UAAU,KAAK,cAAc6L,CAAK,EAAE,KAAK,WAAW7L,EAAK6L,CAAK,CACrE,CACH,CAEJ,CACF,CA5GE,GADI,GACG,YAAY,CACjB,KAAM,IAAU,OAChB,QAAS,IAAU,MACnB,YAAa,IAAU,MACzB,CAAC,EA0GH,MAAM,WAAiB,WAAgB,CA2BrC,YAAa3N,EAAO,CAClB,MAAMA,CAAK,EAjBb,gBAAQ,CACN,UAAW,GACX,OAAQ,GACR,QAAS,GACT,QAAS,GACT,GAAI,EACN,CAAC,EAED,eAAO,IAAM,CACX,KAAK,SAAS,CAAC,UAAW,EAAI,CAAC,CACjC,CAAC,EAED,gBAAQ,IAAM,CACZ,KAAK,SAAS,CAAC,UAAW,EAAK,CAAC,CAClC,CAAC,EAKC,KAAM,CAAE,KAAA6P,EAAM,SAAAkB,EAAU,YAAAC,CAAY,EAAI,KAAK,MAEzCnB,EAAK,OACP,KAAK,MAAM,OAAS,GACXA,EAAK,QACd,KAAK,MAAM,QAAU,GACZA,EAAK,QACd,KAAK,MAAM,QAAU,GAErB,KAAK,MAAM,GAAK,GAGd,aAAgBkB,EAAUC,CAAW,IACvC,KAAK,MAAM,UAAY,IAGzB,KAAK,MAAM,SAAW,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,KAAK,KAAK,EAAE,CACvE,CAEA,QAAU,CACR,KAAM,CAAE,SAAAC,EAAU,KAAAhB,EAAM,KAAAJ,EAAM,SAAAkB,CAAS,EAAI,KAAK,MAC1CG,EAAgB,CAAC,EAMjBC,EAAkB,aAAmBtB,EAAMa,EAAgB,EAEjE,IAAIU,EAAOnB,EAAK,KAAK,KAChBmB,IACHA,EAAOvB,EAAK,QAEVI,EAAK,OACPmB,EAAOnB,EAAK,KAAK,KAAO,KAAOmB,GAGjCF,EAAc,KACZ,gBAACxG,GAAA,EAAY,CAAC,IAAI,OAAO,MAAO,GAAI0G,CAAK,CAC3C,EAEA,IAAIC,EAAa,KACbC,EAAc,KAEd,KAAK,MAAM,QACbD,EAAa,MACbC,EAAc,UACL,KAAK,MAAM,SACpBD,EAAa,SACbC,EAAc,WACL,KAAK,MAAM,SACpBD,EAAa,OACbC,EAAc,WACL,KAAK,MAAM,KACpBD,EAAa,QACbC,EAAc,MAGhBJ,EAAc,KACZ,gBAACxG,GAAA,EAAY,CAAC,IAAI,SAChB,gBAACjQ,GAAA,EAAO,CAAC,QAAS,gBAAC,WAAI,mBAAiB,GACtC,gBAACiU,GAAA,EAAK,CAAC,MAAO2C,EAAY,QAAS,KAAK,KACjC,MAAO,CAAC,OAAQ,SAAS,GAC9B,gBAACpW,GAAA,EAAI,CAAC,SAAU,CAAC,QAAS,QAAS,GACjC,gBAACC,GAAA,EAAQ,CAAC,MAAO,CAAC,SAAU,KAAK,GAC9BoW,CACH,EACA,gBAAC3B,GAAA,EAAO,CAAC,MAAO,CAAC,QAAS,YAAY,EAAG,YAAa,CAAC,QAAS,UAAU,EAAG,EAC7E,gBAACzU,GAAA,EAAQ,KACP,gBAAC,KAAc,CAAC,MAAM,+BAA+B,MAAO,CAAC,OAAQ,SAAS,EAAG,CACnF,CACF,CACF,CACF,CACF,CAAe,EAEjBgW,EAAc,KACZ,gBAACxG,GAAA,EAAY,CAAC,IAAI,QAChB,gBAACqF,GAAA,EAAI,CAAC,WAAY,GAAM,aAAa,QACnC,gBAAC,QAAK,MAAO,CAAE,SAAU,gCAAiC,GAC1D,gBAAC,KAAiB,IAAC,EAAE,OAAOkB,CAAS,CACvC,CACF,CACF,EAEA,IAAIM,EAAWpG,GAAA,SACbA,GAAO8E,EAAK,KAAK,SAAS,GAAG,EAAE,KAAKA,EAAK,KAAK,SAAS,KAAK,CAC9D,EAAE,OAAO,CACP,SAAU,yBACV,QAAS,EACT,SAAU,CACZ,CAAC,EAEDiB,EAAc,KACZ,gBAACxG,GAAA,EAAY,CAAC,IAAI,iBAChB,gBAAC,QAAK,UAAU,iBAAiB6G,CAAS,CAC5C,CACF,EAEA,MAAMC,EAAU,gBAAC,GAAU,CAAC,KAAM,KAAK,MAAM,KAAM,QAASd,GAAkB,YAAa,KAAK,MAAM,YAAY,EAElH,IAAIxX,EAAO,KACPiY,EACFjY,EAAO,gBAACqR,GAAA,EAAY,CACX,WAAY,KAAK,MAAM,SACvB,UAAW,KAAK,MAAM,OAAS,2BAA6B,IAC5D,gBAACC,GAAA,EAAe,KACd,gBAACiH,GAAA,EAAc,CACb,QAAS,IAAM,CAAC,KAAK,SAAS,CAAC,SAAU,CAAC,KAAK,MAAM,QAAQ,CAAC,CAAC,EAC/D,WAAY,KAAK,MAAM,SACzB,EACA,gBAAChH,GAAA,EAAiB,CAAC,cAAAyG,CAAA,CAAgC,CACrD,EACA,gBAACQ,GAAA,EAAe,CACd,SAAU,CAAC,KAAK,MAAM,UACpBF,CACJ,CACF,EAMPtY,EAAO,gBAAC,MAAG,UAAU,wBACZ,gBAAC,OAAI,UAAU,4BACb,gBAAC,OAAI,UAAU,+BACV,MAAO,CAAC,WAAY,QAAQ,GAC/B,gBAAC,OAAI,UAAU,0BACb,gBAACW,GAAA,EAAM,CAAC,SAAQ,IACd,gBAAC,KAAc,IAAC,CAClB,CACF,CACF,EACA,gBAAC4Q,GAAA,EAAiB,CAAC,cAAAyG,CAAA,CAAgC,CACrD,CACF,EAGT,MAAMS,EAAmB,gBAAC1W,GAAA,EAAI,KACH,gBAACC,GAAA,EAAQ,KACP,gBAACwT,GAAA,EAAK,CAAC,MAAO2C,CAAA,EAAaC,CAAY,CACzC,EACA,gBAACpW,GAAA,EAAQ,KACP,gBAAC6U,GAAA,EAAI,CAAC,WAAY,GAAM,aAAa,QACnC,gBAAC,QAAK,MAAO,CAAE,SAAU,gCAAiC,GAC1D,gBAAC,KAAiB,IAAC,EAAE,OAAOkB,CAAS,CACvC,CACF,EACA,gBAAC/V,GAAA,EAAQ,KACP,gBAAC,KAAE,KAAM,IAAI,aAAa6V,CAAQ,GAChC,gBAAC,KAAQ,CAAC,KAAK,OAAO,MAAM,YAAY,CAC1C,CACF,CACF,EAEzB,OACE,gCACG7X,EACD,gBAACyP,EAAA,EAAK,CACJ,MAAOyI,EACP,OAAQ,KAAK,MAAM,UACnB,QAAS,KAAK,MACd,YAAaO,CAAA,EACb,gBAAC,GAAU,CAAC,KAAM9B,EAAM,YAAa,KAAK,MAAM,YAAY,CAC9D,CACF,CAEJ,CACF,CArME,GADI,GACG,YAAY,CACjB,SAAU,IAAU,OACpB,KAAM,IAAU,OAChB,KAAM,IAAU,OAChB,SAAU,IAAU,OACpB,SAAU,IAAU,MACpB,YAAa,IAAU,MACvB,YAAa,IAAU,MACzB,CAAC,EA+LH,MAAM,WAAiB,WAAgB,CASrC,YAAY7P,EAAO,CACjB,MAAMA,CAAK,EAiBb,qBAAa,CAAC4R,EAAM5b,IAAQ4b,EAAK,KAAK,KAAO,IAAM5b,CAAG,EAhBpD,KAAK,MAAQ,CAKX,SAAW,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,SAAS,MAAQ,KAAK,MAAM,SAAS,KAAK,GAC7E,aAAgB,KAAK,MAAM,SAAU,KAAK,MAAM,WAAW,GAC3D,KAAK,MAAM,SAAS,QAAU,MAKzC,cAAe,KAAK,MAAM,SAAS,MAAM,IAAI,CAAC4b,EAAM5b,IAAQ,KAAK,WAAW4b,EAAM5b,CAAG,CAAC,CACxF,CACF,CAIA,QAAU,CACR,KAAM,CAAE,SAAA6b,EAAU,SAAAC,EAAU,SAAAf,EAAU,YAAAC,CAAY,EAAI,KAAK,MAErDe,EAAcC,GAAM,CACxB,MAAMhE,EAAQ,KAAK,MAAM,cAAc,QAAQgE,CAAE,EAC3CC,EACAjE,GAAS,EAAI,CAAC,GAAG,KAAK,MAAM,cAAc,MAAM,EAAGA,CAAK,EAAG,GAAG,KAAK,MAAM,cAAc,MAAMA,EAAQ,EAAG,KAAK,MAAM,cAAc,MAAM,CAAC,EAAI,CAAC,GAAG,KAAK,MAAM,cAAegE,CAAE,EAClL,KAAK,SAAS,CAAC,cAAeC,CAAW,CAAC,CAC5C,EAGA,IAAIf,EAAgB,CAAC,EACrB,OAAAA,EAAc,KACZ,gBAACxG,GAAA,EAAY,CAAC,IAAI,OAAO,MAAO,GAC9B,gBAAC,cACEmH,EAAS,MAAM,GAAG,YAAY,EAAIA,EAAS,MAAM,MAAM,CAAC,EAAE,WAC7D,CACF,CAAe,EACbX,EAAc,KACd,gBAACxG,GAAA,EAAY,CAAC,IAAI,OAAO,MAAO,GAC7BmH,EAAS,QACZ,CAAe,EACfA,EAAS,QACXX,EAAc,KACZ,gBAACxG,GAAA,EAAY,CAAC,IAAI,SAChB,gBAACjQ,GAAA,EAAO,CAAC,QAAS,gBAAC,WAAI,iJAA+I,GACtK,gBAACiU,GAAA,EAAK,CAAC,MAAM,OAAO,KAAM,gBAAC,KAAc,IAAC,EAAI,MAAO,CAAC,OAAQ,SAAS,GAAG,SAAO,CAAQ,CAAU,CAAe,EAKpHwC,EAAc,KAAK,gBAACxG,GAAA,EAAY,CAAC,IAAI,QAAQ,MAAO,EAAE,CAAE,EAI1D,gBAACH,GAAA,EAAY,CAAC,WAAY,KAAK,MAAM,UAEnC,gBAACC,GAAA,EAAe,KACd,gBAACiH,GAAA,EAAc,CACb,QAAS,IAAM,KAAK,SAAS,CAAC,SAAU,CAAC,KAAK,MAAM,QAAQ,CAAC,EAC7D,WAAY,KAAK,MAAM,SAAS,EAClC,gBAAChH,GAAA,EAAiB,CAChB,cAAAyG,CAAA,CAA8B,CAClC,EAEA,gBAACQ,GAAA,EAAe,CAAC,SAAU,CAAC,KAAK,MAAM,UAEpCG,EAAS,MAAM,IAAI,CAACD,EAAM5b,IACzB,gBAACqU,GAAA,EAAQ,CAAC,UAAW,GACX,IAAK,KAAK,WAAWuH,EAAM5b,CAAG,EAC9B,UAAU,qBACV,MAAO,CAAE,SAAU,gCAAiC,GAC5D,gBAACuU,GAAA,EAAY,CAAC,WAAY,KAAK,MAAM,cAAc,SAAS,KAAK,WAAWqH,EAAM5b,CAAG,CAAC,GACpF,gBAACwU,GAAA,EAAe,KACd,gBAACiH,GAAA,EAAc,CACb,QAAS,IAAMM,EAAY,KAAK,WAAWH,EAAM5b,CAAG,CAAC,EACrD,WAAY,KAAK,MAAM,cAAc,SAAS,KAAK,WAAW4b,EAAM5b,CAAG,CAAC,EACxE,GAAI,KAAK,WAAW4b,EAAM5b,CAAG,EAAE,EACjC,gBAACyU,GAAA,EAAiB,CAAC,cAAe,CACb,gBAACC,GAAA,EAAY,CAAC,IAAI,QAAO,SAAOkH,EAAK,KAAK,IAAK,CACjD,EACnB,CACF,EACA,gBAACF,GAAA,EAAe,CACd,SAAU,CAAC,KAAK,MAAM,cAAc,SAAS,KAAK,WAAWE,EAAM5b,CAAG,CAAC,GAEvE,gBAACqU,GAAA,EAAQ,CAAC,UAAW,GAAM,MAAO,CAAE,SAAU,gCAAiC,GAC5EuH,EAAK,MAAM,IAAI,CAAC3B,EAAMiC,IACrB,OAAO,QAAQjC,EAAK,KAAK,EAAE,IAAI,CAAC,CAACgB,EAAUpB,CAAI,IAC7C,gBAAC,GAAQ,CAAC,IAAK7Z,EAAIkc,EAAKjB,EACtB,SAAAA,EACA,SAAUF,EAAS,OAAO,CACxB/a,EAAI,SAAS,EAAGkc,EAAK,SAAS,EAAGjB,CAAQ,CAAC,EAC5C,YAAAD,EAA0B,KAAAf,EAAY,KAAAJ,EACtC,SAAAiC,EACA,YAAa,KAAK,MAAM,YAAY,CACvC,CAAE,CACP,CAEF,CACF,CACF,CACD,CAEH,CACF,CAEJ,CACF,CApHE,GADI,GACG,YAAY,CACjB,SAAU,IAAU,OACpB,SAAU,IAAU,OACpB,SAAU,IAAU,MACpB,YAAa,IAAU,MACvB,YAAa,IAAU,MACzB,CAAC,EAiHH,MAAM,WAAgB,WAAgB,CAQpC,QAAU,CACR,KAAM,CAAE,SAAAA,EAAU,OAAAtB,EAAQ,YAAAQ,CAAY,EAAI,KAAK,MAE/C,OACE,gBAAC,gBACC,gBAAC,SAAG,EACJ,gBAAC,QAAK,UAAW,gBAAgB,KAAK,MAAM,YAAY,SAAW,oBAAsB,wBACvF,gBAAC3G,GAAA,EAAQ,CAAC,UAAW,GACX,MAAO,CAAE,SAAU,gCAAiC,GAE1DmG,EAAO,IAAI,CAACqB,EAAU7b,IACpB,gBAAC,GAAQ,CACP,IAAKA,EAAK,SAAA6b,EAAoB,SAAU,CAAC7b,EAAI,SAAS,CAAC,EACvD,YAAAgb,EAA0B,SAAAc,EAC1B,YAAa,KAAK,MAAM,YAC1B,CAAG,CAET,CACF,CACF,CAEJ,CACF,CA7BE,GADI,GACG,YAAY,CACjB,SAAU,IAAU,OACpB,OAAQ,IAAU,MAClB,YAAa,IAAU,MACvB,YAAa,IAAU,MACzB,CAAC,EA0BH,SAAS,GAAgB3d,EAAO,CAC9B,MAAO,CACL,YAAaA,EAAM,WACrB,CACF,CAGe,mBAAQ,EAAe,EAAE,EAAO,E,iKC1f/C,MAAM,WAAiB,IAAM,SAAU,CAMrC,QAAS,CACP,KAAM,CAAE,OAAAR,EAAQ,MAAA+P,CAAM,EAAI,KAAK,MAEzByO,EAAcC,GACVA,EAAI,WAAa,yBACjB1O,EAAM,SAAS,YAAe,aAAe,GAGjDyG,EAAQzG,EAAM,SAAS,KAAK,IAChC2O,GAAK,aACH1e,EAAQ+P,EAAO,IAAK2O,EACpB,CAAC1e,EAAQ+P,EAAO7G,EAAMuU,EAAMkB,EAASF,IACnC,kBAAC,YACC,kBAAC,IAAI,CACH,GAAIze,EAAO,WAAa,UAAY+P,EAAM,KAAO,OAAS7G,EAAOuU,CAAA,EAChEgB,EAAI,IACP,EAAO,YACM,kBAAC,KAAE,KAAME,EAAUzV,EAAOuU,EAAOe,EAAWC,CAAG,GAAG,KAAG,EAAI,OAChE,kBAAC,QAAK,UAAU,sBAAqB,EAAE,GAC/C,EACF,CAACE,EAASzV,EAAMuU,EAAMgB,IACpB,kBAAC,YACEA,EAAI,KAAK,YACG,kBAAC,KAAE,KAAME,EAAUzV,EAAOuU,EAAOe,EAAWC,CAAG,GAAG,KAAG,EAAI,OAChE,kBAAC,QAAK,UAAU,sBAAqB,EAAE,GAC/C,CACD,CAAC,EAEN,OACE,kBAAC,IAAM,SAAN,KACC,kBAAC,SAAE,EACH,kBAAC,OAAI,UAAU,uBACb,kBAACnE,GAAA,EAAQ,CACP,MAAA9D,CAAA,CACF,CACF,CACF,CAEJ,CACF,CA5CE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAAO,WACzB,MAAO,IAAU,OAAO,UAC1B,CAAC,EA2CY,U,2TCvCf,MAAMoI,GAAc,CAACC,EAAGC,IAAMD,EAAIC,EAI5BC,GAAgB,IAEP,SAASC,GAAQ,EAQ7B,CAR6B,QAC9B,aAAAC,EACA,eAAAC,EACA,WAAA/d,EACA,0BAAAge,EACA,SAAAtd,EACA,QAAAC,CA5CF,EAsCgC,EAO3BuK,EAAA,GAP2B,EAO3B,CANH,cACA,iBACA,aACA,4BACA,WACA,YAGA,KAAM,CAAC+S,EAAUC,CAAW,EAAI,mBAAShT,EAAM,QAAQ,EACjD,CAACiT,EAAgBC,CAAiB,EAAI,mBAAS,CAAC,EAChD,CAACC,EAAcC,CAAe,EAAI,mBAAS,CAAC,EAM5C,CAACC,GAAkBC,EAAmB,EAAI,mBAAS,EAAI,EAE7D,oBAAU,IAAM,CASd,GAAI,CAACxe,EAAY,CAGf,MAAMkb,GAAQxa,EAAS,KACpB,UAAU,CAAC,EACX,MAAM,GAAG,EACT,IAAI,MAAM,EACV,KAAK+c,EAAW,EACfvC,GAAM,OAAS,GACjBkD,EAAkBlD,GAAM,EAAE,EAC1BoD,EAAgBpD,GAAM,EAAE,GACfA,GAAM,SAAW,IAC1BkD,EAAkBlD,GAAM,EAAE,EAC1BoD,EAAgBpD,GAAM,EAAE,EAE5B,CACF,EAAG,CAACxa,EAAS,KAAMV,CAAU,CAAC,EAE9B,oBAAU,IAAM,CAcVue,KAb4B,IAAM,CACpC,MAAME,GAAW,SAAS,uBAAuB,MAAQN,CAAc,EACvE,GAAIM,GAAS,OAAS,EAAG,CAGvB,MAAMC,GACJD,GAAS,GAAG,sBAAsB,EAAE,IACpC,OAAO,YACPb,GACF,OAAO,SAAS,CAAE,IAAKc,GAAG,SAAU,QAAS,CAAC,CAChD,CACF,GAG0B,CAE5B,EAAG,CAACH,GAAkBJ,CAAc,CAAC,EAErC,SAASQ,GAAgBC,GAAY5J,GAAO,CAC1C,MAAMkI,GAAK,SAASlI,GAAM,cAAc,EAAE,EAC1CkJ,EAAYhB,EAAE,EACd2B,GAAmB3B,EAAE,CAKvB,CAEA,SAAS2B,GAAmBZ,GAAU,CACpC,MAAMa,GAAY,IAAI,gBAAgB,EAAE,EACxCA,GAAU,OAAO,WAAYb,EAAQ,EACrCtd,EAAQ,KAAK,CACX,SAAUD,EAAS,SACnB,OAAQoe,GAAU,SAAS,CAC7B,CAAC,CACH,CAEA,SAASC,GAAgB/J,GAAO,CAC9B,MAAMkG,GAAQ,OAAO,SAAS,KAAK,UAAU,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM,EAC/D8D,GAAc,OAAOhK,GAAM,cAAc,SAAS,EACxD,GAAI,CAACA,GAAM,UAAYkG,GAAM,SAAW,EAEtCA,GAAM,GAAK,CAAC8D,EAAW,EACvB9D,GAAM,OAAO,EAAG,CAAC,MACZ,CAEL,MAAM+D,GAAY/D,GAAM,IAAKgE,IAAQ,KAAK,IAAIF,GAAcE,EAAG,CAAC,EAE5DD,GAAU,GAAKA,GAAU,GAC3B/D,GAAM,GAAK8D,GAEX9D,GAAM,GAAK8D,EAEf,CACA,OAAO,SAAS,KAAO,IAAM9D,GAAM,KAAKuC,EAAW,EAAE,KAAK,GAAG,EAE7De,GAAoB,EAAK,CAC3B,CAEA,SAASW,GAAcpB,GAAgBE,GAAU,CAC/C,OACE,oCACE,kBAACmB,GAAA,EAAW,CAAC,aAAW,4BACtB,kBAACC,GAAA,EAAe,CACd,SAAS,IACT,KAAK,MACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,QACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,OACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,UACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,QACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,QACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,QACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,EACA,kBAACU,GAAA,EAAe,CACd,SAAS,IACT,KAAK,WACL,WAAYpB,KAAa,EACzB,SAAUU,EAAA,CACZ,CACF,EACA,kBAAC9D,GAAA,EAAO,IAAC,EACT,kBAAC,OAAI,UAAU,mBACb,kBAAC,aACC,kBAAC,aACEkD,GAAe,IAAKxP,IAAS,CAE5B,MAAM+Q,GACJ/Q,GAAK,OAAS4P,GAAkB5P,GAAK,OAAS8P,EAChD,OACE9P,GAAK,UAAY0P,IACf,kBAAC,MACC,IAAK1P,GAAK,MACV,UAAW,MAAMA,GAAK,SACpB+Q,GAAgB,YAAc,MAGhC,kBAAC,MAAG,UAAU,cAAc,QAASP,EAAA,EAClCxQ,GAAK,KACR,EACA,kBAAC,UACC,kBAAC,QACC,UAAW,4BACTA,GAAK,UAAY,KAGlBA,GAAK,KAAO;AAAA,CACf,CACF,CACF,CAGN,CAAC,CACH,CACF,CACF,CACF,CAEJ,CAGA,MAAMgR,GAAczB,EAAY,MAAM,GAAG,EAEnCpB,GACJ,CAACqB,GAAkB/d,EACjB,kBAAC+V,GAAA,EAAQ,IAAC,EACRgI,EACFoB,GAAcpB,EAAgBE,CAAQ,EAEtC,kBAAChI,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAc,EACpC,kBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,iCAEnC,CACF,EAGJ,OACE,oCACE,kBAAC,OAAI,MAAO,CAAE,QAAS,MAAO,GAC5B,kBAACqJ,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CACb,IAAK,GAML,GAAG,IACH,QAAS,IAAMzB,EAA0B,GAC1C,MAED,EACCuB,GAAY,IAAI,CAACG,GAAMxG,KACtB,kBAACuG,GAAA,EAAc,CACb,IAAKvG,GACL,SAAUA,KAAUqG,GAAY,OAAS,GAExCG,EACH,CACD,CACH,CACF,EACChD,EACH,CAEJ,CAEAmB,GAAQ,UAAY,CAClB,YAAa,IAAU,OAAO,WAC9B,eAAgB,IAAU,MAC1B,SAAU,IAAU,OACpB,WAAY,IAAU,KAAK,WAC3B,0BAA2B,IAAU,KAAK,WAC1C,SAAU,IAAU,OAAO,WAC3B,QAAS,IAAU,OAAO,UAC5B,EAEAA,GAAQ,aAAe,CACrB,SAAU,CACZ,E,4YCnPA,MAAM,WAAkB,WAAgB,CAAxC,kCAiBE,gBAAQ,CACN,iBAAkB,EACpB,CAAC,EAED,qBAAa,IAAM,CAGjB,KAAK,MAAM,kBACT,KAAK,MAAM,OACX,KAAK,MAAM,MAAM,OAAO,QACxB,KAAK,MAAM,MAAM,OAAO,IAC1B,CACF,CAAC,EAED,mBAAW,IAAM,CACf,KAAK,SAAS,CAAC,iBAAkB,OAAO,UAAY,CAAC,CAAC,CACxD,CAAC,EAgBD,yBAAiB,CAAC8B,EAAU/Q,IAAU,CASpC,KAAM,CAAE,QAAAjO,EAAS,OAAA9B,CAAO,EAAI,KAAK,MAEjC,OAAQ8gB,EAAU,CAChB,IAAK,YACHhf,EAAQ,KAAK,GAAG9B,EAAO,oBAAoB+P,EAAM,gBAAgB,EACjE,MACF,IAAK,OACHjO,EAAQ,KAAK,GAAG9B,EAAO,oBAAoB+P,EAAM,WAAW,EAC5D,MACF,IAAK,UACHjO,EAAQ,KAAK,GAAG9B,EAAO,oBAAoB+P,EAAM,cAAc,EAC/D,MACF,QAEEjO,EAAQ,KAAK,GAAG9B,EAAO,oBAAoB+P,EAAM,MAAM,CAC3D,CACF,CAAC,EAED,oCAA4B,IAAM,CAEhC,KAAK,eAAe,OAAQ,KAAK,MAAM,KAAK,CAC9C,CAAC,CAAD,CA5CA,mBAAoB,CAClB,SAAS,MAAQ,aACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,EAElB,OAAO,iBAAiB,SAAU,KAAK,QAAQ,CACjD,CAEA,mBAAmBkH,EAAW,CACxB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAkCA,QAAS,CACP,KAAM,CACJ,MAAAlH,EACA,QAAAgR,EACA,WAAA5f,EACA,mBAAA6f,EACA,iBAAAC,EACA,kBAAAC,EACA,UAAAC,EACA,QAAArf,EACA,SAAAD,EACA,OAAA7B,CACF,EAAI,KAAK,MACHohB,EAAOvf,EAAS,KAAK,UAAU,CAAC,EAAE,MAAM,GAAG,EAC3Cud,EAAW,SAAS,iBAAMvd,EAAS,MAAM,EAAE,QAAQ,EAGnDod,EAAc,KAAK,MAAM,MAAM,OAAO,KAI5C,GAAIlP,IAAU,QAAa5O,EACzB,OAAO,gBAAC+V,GAAA,EAAQ,IAAC,EAInB,GAAI,CAACnH,EACH,OACE,gBAAC,KAAS,CACR,MAAM,4BACN,KAAM,KACN,WAAY,GAAG/P,EAAO,oBACtB,SAAS,kBACX,EAIJ,MAAMqhB,EACJtR,EAAM,QAAU,QAAakR,EAC3B,gBAAC/J,GAAA,EAAQ,IAAC,EACRnH,EAAM,MACR,gBAAC,GAAW,CAAC,OAAQA,EAAM,MAAO,EAChCA,EAAM,aACR,gCACA,gBAACqH,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAiB,CACzC,EACE,gBAAC,SAAE,gBAAC,SAAE,QAAM,EAAI,IAAEtH,EAAM,YAAa,CACvC,EAEA,gBAACqH,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAU,EAChC,gBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,yCAEnC,CACF,EAGEgK,GAAsBvR,EAAM,UAAU,OAC1C,gBAAC,GAAY,CAAC,UAAWA,EAAM,UAAW,EAE1C,gBAACqH,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAiB,EACvC,gBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,2CAEnC,CACF,EAGF,IAAIiK,GAAiB,KACjBxR,EAAM,WAAa,QAAaiR,EAClCO,GAAiB,gBAACrK,GAAA,EAAQ,IAAC,EAClB+H,EACTsC,GACE,gBAACvC,GAAO,CACN,eAAgB+B,EAChB,YAAA9B,EACA,WAAYiC,EAGZ,SAAU9B,GAAsB,OAChC,0BAA2B,KAAK,0BAChC,SAAAvd,EACA,QAAAC,CAAA,CACF,EAKOiO,EAAM,UAAYA,EAAM,QACjCwR,GAAiB,gBAAC,GAAQ,CAAC,OAAQ,KAAK,MAAM,OAAQ,MAAAxR,CAAA,CAAc,EAEpEwR,GACE,gBAACnK,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAc,EACpC,gBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,sCAEnC,CACF,EAIJ,MAAMkK,GACJzR,EAAM,SAAW,QAAakR,EAC5B,gBAAC/J,GAAA,EAAQ,IAAC,EACRnH,EAAM,OACR,gBAAC,GAAO,CACN,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,YAAaqR,EAAK,OAAS,EAAIA,EAAO,OACxC,EAEA,gBAAChK,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAc,EACpC,gBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,qDAEnC,CACF,EAGJ,OACE,gCACE,gBAACQ,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC,GAAK,CAAC,MAAA/H,EAAc,OAAQoR,EAAW,KAAAC,CAAA,CAAY,CACtD,EACA,gBAACtJ,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC2J,GAAA,EAAI,CACH,SAAQ,GACR,UAAWN,EACX,SAAU,CAAChL,GAAO2K,KAAa,KAAK,eAAeA,GAAU/Q,CAAK,GAElE,gBAAC2R,GAAA,EAAG,CACF,SAAS,UACT,MACE,gCACE,gBAACC,GAAA,EAAY,KACX,gBAAC,KAAQ,IAAC,CACZ,EACA,gBAACC,GAAA,EAAY,KAAC,cAAY,CAC5B,GAGDP,CACH,EACA,gBAACK,GAAA,EAAG,CACF,SAAS,YACT,MACE,gCACE,gBAACC,GAAA,EAAY,KACX,gBAAC,KAAe,IAAC,CACnB,EACA,gBAACC,GAAA,EAAY,KAAC,WAAS,CACzB,GAGDN,EACH,EACA,gBAACI,GAAA,EAAG,CACF,SAAS,OACT,MACE,gCACE,gBAACC,GAAA,EAAY,KACX,gBAAC,KAAY,IAAC,CAChB,EACA,gBAACC,GAAA,EAAY,KAAC,MAAI,CACpB,GAGDL,EACH,EACA,gBAACG,GAAA,EAAG,CACF,SAAS,UACT,MACE,gCACE,gBAACC,GAAA,EAAY,KACX,gBAAC,KAAY,IAAC,CAChB,EACA,gBAACC,GAAA,EAAY,KAAC,SAAO,CACvB,GAGDJ,EACH,CACF,CACF,EACC,CAAC,KAAK,MAAM,kBACX,gBAAC1J,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC5R,GAAA,EAAM,CAAC,QAAS2b,GAAa,QAAQ,UAAU,MAAO,CAAC,SAAU,QAAS,OAAQ,GAAI,MAAO,GAAI,OAAQ,CAAC,GAAG,qBAC1F,gBAAC,KAAW,KAChC,CACF,CAEJ,CAEJ,CACF,CAnRE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,OAAO,WACxB,MAAO,IAAU,OACjB,QAAS,IAAU,OACnB,WAAY,IAAU,KAAK,WAC3B,mBAAoB,IAAU,KAAK,WACnC,iBAAkB,IAAU,KAAK,WACjC,kBAAmB,IAAU,KAAK,WAClC,OAAQ,IAAU,OAAO,WACzB,kBAAmB,IAAU,KAAK,WAClC,UAAW,IAAU,OAAO,WAC5B,SAAU,IAAU,OAAO,WAC3B,QAAS,IAAU,OAAO,WAC1B,YAAa,IAAU,MACzB,CAAC,EAuQH,SAASA,IAAc,CACrB,OAAO,SAAS,EAAE,CAAC,EACnB,SAAS,cAAc,KAAK,CAC9B,CAEA,SAAS,GAAgBrhB,EAAO+B,EAAU,CACxC,MAAMoH,EAAUpH,EAAS,MAAM,OAAO,QAGhCuf,EAAiBthB,EAAM,MAAM,OAAOmJ,GAIpCoG,EAAQ+R,GAAiB,MAAKA,CAAc,EAI9C/R,IACFA,EAAM,SAAWvP,EAAM,MAAM,UAAUmJ,GACvCoG,EAAM,OAASvP,EAAM,MAAM,QAAQmJ,GACnCoG,EAAM,MAAQvP,EAAM,MAAM,MAAMmJ,GAChCoG,EAAM,SAAWvP,EAAM,MAAM,SAASmJ,IAExC,MAAMsV,EAAc1c,EAAS,MAAM,OAAO,KACpCwe,EACJpX,KAAWnJ,EAAM,QAAQ,MACrBA,EAAM,QAAQ,MAAMmJ,GAASsV,GAC7B,OAEN,MAAO,CACL,MAAAlP,EACA,QAAAgR,EACA,OAAQvgB,EAAM,OACd,WAAYA,EAAM,MAAM,WACxB,mBAAoBA,EAAM,MAAM,mBAChC,iBAAkBA,EAAM,MAAM,iBAC9B,kBAAmBA,EAAM,QAAQ,WACjC,YAAaA,EAAM,WACrB,CACF,CAEA,MAAM,GAAqB,CAAE,uBAAmB,iBAAa,EAE9C,mBACb,GACA,EACF,EAAE,YAAW,EAAS,CAAC,E,kBCxWvB,SAASuhB,EAAqBhgB,EAAS,CACrC,IAAIkH,EAAc,YAAgBlH,CAAO,EAEzC,OADqBA,GAAWA,EAAQ,OAAU,OAAS,IAEzDkH,GAAe,2BAEjBA,GAAe,iBACRA,CACT,CAEA,SAAS+Y,GAAwBjgB,EAAS,CACxC,IAAIkH,EAAc,YAAgBlH,CAAO,EAEzC,OADqBA,GAAWA,EAAQ,OAAU,OAAS,IAEzDkH,GAAe,mDAEjBA,GAAe,iBACRA,CACT,C,oCCiBA,SAAS,GAAO8G,EAAO,CACrB,MAAO,YAAaA,EAAQA,EAAQA,EAAM,GAC5C,CAEA,SAASkS,GAAW,CAClB,OAAAC,EACA,SAAAhK,EACA,eAAAzU,EACA,OAAAzD,EACA,SAAAiE,EACA,QAAAnC,CACF,EAAG,CACD,MAAMqW,EAAU,CACd,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAS,IAAC,EAAI,MAAM,MAAM,EACtD,UAAW,MACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,UAAU,EACzD,UAAW,UACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAc,IAAC,EAAI,MAAM,SAAS,EAC9D,UAAW,SACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAU,IAAC,EAAI,MAAM,WAAW,EAC5D,UAAW,UACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,IAAQ,IAAC,EAAI,MAAM,SAAS,EACxD,UAAW,SACX,WAAY,CAAC,OAAAgK,GAAA,GAAU,EAAE,CAAC,EAC1B,eAAgB,CAAC,IAAQ,CAC3B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAiB,IAAC,EAAI,MAAM,WAAW,EACnE,UAAW,UACb,EACA,CACE,MACE,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAuB,IAAC,EAAI,MAAM,aAAa,EAEtE,UAAW,YACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,SAAS,EACxD,UAAW,QACb,CACF,EAEA,SAASC,EAAerS,EAAO,CAC7B,MAAMxE,EAAM,GAAOwE,CAAK,EAClBsS,EAAkB,YAAuB9W,CAAG,EAElD,MAAO,CAGL,GAAIwE,EAAM,KACV,MAAO,CACL,CAGE,MACE,oCACE,kBAACiL,GAAmB,CAClB,OAAQjL,EAAM,OACd,QAASA,EAAM,OACf,KAAM,GAAG/P,EAAO,oBAAoB+P,EAAM,QAEzCA,EAAM,SACN,CAACA,EAAM,QAAU,eACpB,CACF,CAEJ,EACA,CACE,MAAOxE,EAAI,OACb,EACA,CACE,MAAOA,EAAI,OAASA,EAAI,OAASA,EAAI,GACvC,EACA,CACE,MAAOwE,EAAM,QACf,EACA,CACE,MAAOsS,GAAmBA,CAC5B,EACA,CACE,MAAO7K,GAAA,SACKzH,EAAM,SAAU,SAAS,EAClC,OAAO,wBAAwB,CACpC,EACA,CACE,MAAO,OACAA,EAAM,UAAU,EACpB,GAAG9L,CAAQ,EACX,OAAO,qBAAqB,CACjC,EACA,CACE,MACE,kBAACwW,GAAW,CACV,OAAQ1K,EAAM,OACd,KAAM,GAAG/P,EAAO,oBAAoB+P,EAAM,OAC1C,QAASA,EAAM,OACjB,CAEJ,CACF,CACF,CACF,CAEA,SAASyI,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,IAAIC,EAAO,CAAC,EAGR4J,EAAU,CAAC,EACf,OAAIpK,GACFQ,EAAOF,EAAkB,EAMzBL,EAAQ,GAAG,UAAY,KAEvBO,EAAOwJ,EAAO,IAAKnS,GAAUqS,EAAerS,CAAK,CAAC,EAIlDuS,EAAU,CACR,CACE,MAAO,oBACP,QAAS,CAACnM,EAAOoM,EAAOC,IAGtB1gB,EAAQ,KAAK,GAAG9B,EAAO,oBAAoBwiB,EAAQ,IAAI,CAC3D,CACF,GAIA,oCACE,kBAAC7J,GAAA,EAAK,CACJ,aAAW,eACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,QAAA4J,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACpK,GAAYgK,EAAO,SAAW,GAC9B,kBAAC9K,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAW,EACjC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,iBAAe,EACxC,kBAACsB,GAAA,EAAc,KAAC,yFAGhB,EACA,kBAAC6J,GAAA,EAA0B,KACzB,kBAACvc,GAAA,EAAM,CAAC,QAAQ,OAAO,QAASzC,CAAA,EAAgB,mBAEhD,CACF,CACF,CAEJ,CAEJ,CAEAwe,GAAW,UAAY,CACrB,OAAQ,IAAU,MAAM,WACxB,SAAU,IAAU,KAAK,WACzB,eAAgB,IAAU,KAAK,WAC/B,OAAQ,IAAU,OAAO,WACzB,SAAU,IAAU,OAAO,WAC3B,QAAS,IAAU,OAAO,UAC5B,EAEe,mBAASzhB,IAAW,CACjC,OAAQA,EAAM,OACd,SAAUA,EAAM,QAClB,EAAE,EAAEyhB,EAAU,E,goBCvOd,MAAM,WAAmB,WAAgB,CAQvC,YAAY5V,EAAO,CACjB,MAAM,EA4GR,qBAActK,GAAY,CAOxB,KAAM,CAAE,UAAAd,CAAU,EAAI,KAAK,MAC3B,IAAIyhB,EAAoB,CACtB,KAAM3gB,EAAQ,KAAK,OAAS,EAAIA,EAAQ,KAAO,CAAC,CAAE,EAClD,MAAOA,EAAQ,MAAM,OAAS,EAAIA,EAAQ,MAAQ,CAAC,EAAG,CACxD,EACI4gB,EAAW,SAAK5gB,CAAO,EAAK2gB,CAAiB,EACjD,MAAMzZ,EAAc8Y,EAAqBY,CAAQ,EACjD,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,EAIhC,YAAY,KAAK,MAAM,OAAO,UAAW1Z,CAAW,EAAE,KAAM3I,GAAa,CAGvE,IAAIsiB,EAAiB3hB,IAEhBX,EAAS,KAAK,OAASoiB,EAAkB,MAAM,GAC9C,SAASA,EAAkB,KAAK,EAAE,EAAIpiB,EAAS,KAAK,OACpD,MACN,KAAK,SAAS,CACZ,OAAQA,EAAS,KACjB,SAAU,GACV,UAAWsiB,CACb,CAAC,CACH,CAAC,CACH,CAAC,EAmBD,gCAAwB,CAACC,EAAWzV,IAE7BA,EAQDyV,IAAc,UAAY,MAAMzV,CAAW,EACtC,CACL,QAAS,GACT,QAAS,qDACX,EAGK,CACL,QAAS,EACX,EAhBS,CACL,QAAS,GACT,QAAS,2BACX,CAcH,EAED,6BAAsBjL,GAAe,CACnC,KAAM,CAAE,SAAAN,EAAU,QAAAC,CAAQ,EAAI,KAAK,MAC7B,CAAE,QAAAC,EAAS,UAAAd,CAAU,EAAI,KAAK,MAEpC,IAAkD,EAAAc,EAA5C,MAAQ+gB,EAAI,MAASC,CAhO/B,EAgOsD,EAAhBC,EAAA,GAAgB,EAAhB,CAA5B,OAAY,UACgC,EAAA7gB,EAA5C,MAAQ8gB,GAAI,MAASC,EAjO/B,EAiOsD,EAAhBC,GAAA,GAAgB,EAAhB,CAA5B,OAAY,UAGdC,GAAY,mBAAQJ,EAAaG,EAAW,EAC5CE,GAAeD,GAAYjhB,EAAa,SAAKA,CAAU,EAAf,CAAiB,KAAM,CAAC,CAAE,CAAE,CAAC,EAKzE,YAAkBkhB,GAAcxhB,EAAUC,CAAO,EACjD,IAAIwhB,GAAW,CACb,QAASD,GAET,UAAWD,GAAYniB,EAAY,IACrC,EACKmiB,KACHE,GAAS,YAAc,GAEzB,KAAK,SACHA,GACA,IAAM,CACJ,KAAK,WAAWD,EAAY,CAC9B,CAAC,CACL,CAAC,EAED,6BAAqB,IAAM,CAEzB,MAAMthB,EAAU,KAAK,iBAAiB,OAAO,CAACiL,EAAYC,KACxDD,EAAWC,EAAS,KAAO,CAAC,EACrBD,GACN,CAAC,CAAC,EACL,KAAK,mBAAmBjL,CAAO,CACjC,CAAC,EAED,8BAAsB,CAACoU,EAAOoN,IAAY,CACxC,KAAM,CAAE,QAAAxhB,CAAQ,EAAI,KAAK,MACzB,KAAK,SAAS,CAAE,eAAgBwhB,CAAQ,CAAC,EACzC,MAAMphB,EAAa,SAAKJ,CAAO,EAAZ,CAAc,MAAO,CAACwhB,CAAQ,CAAE,CAAC,EACpD,KAAK,mBAAmBphB,CAAU,CACpC,CAAC,EAED,wBAAgB,CAACgU,EAAOqN,IAAe,CACrC,KAAM,CAAE,QAAAzhB,EAAS,eAAA0hB,CAAe,EAAI,KAAK,MACzC,KAAK,SAAS,CAAE,YAAaD,CAAW,CAAC,EACzC,IAAIE,EAASD,GAAkBD,EAAa,GAC5C,MAAMrhB,EAAa,SAAKJ,CAAO,EAAZ,CAAc,KAAM,CAAC2hB,CAAO,CAAE,CAAC,EAClD,KAAK,mBAAmBvhB,CAAU,CACpC,CAAC,EAxOC,KAAK,iBAAmB,CACtB,CACE,IAAK,WACL,MAAO,MACP,YAAa,mBACb,KAAM,cACR,EACA,CACE,IAAK,UACL,MAAO,UACP,YAAa,uBACb,KAAM,cACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,cACR,EACA,CACE,IAAK,WACL,MAAO,WACP,YAAa,wBACb,KAAM,cACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,QACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,aACb,KAAM,SAEN,QAAS,CACP,UACA,UACA,cACA,eACA,UACA,eACA,iBACA,gBACA,eACA,YACA,WACA,QACA,QACA,YACA,UACA,aACA,UACA,OACA,YACA,WAAW,CACf,EACA,CACE,IAAK,OACL,MAAO,QACP,YAAa,0BACb,KAAM,QACR,EACA,CACE,IAAK,OACL,MAAO,OACP,YAAa,wBACb,KAAM,UACN,QAAS,CACP,MACA,mBACA,sBACF,CACF,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,0BACb,KAAM,UACN,QAAS,CACP,MACA,cACA,iBACF,CACF,CACF,EAEA,MAAMwgB,EAAW,YAAkBtW,EAAM,SAAU,KAAK,gBAAgB,EAClEkX,EAAUZ,EAAS,MAAM,GAC3B,SAASA,EAAS,MAAM,EAAE,EAC1B,GACEgB,EAAchB,EAAS,KAAK,GAC9B,KAAK,MAAM,SAASA,EAAS,KAAK,GAAKY,CAAO,CAAC,EAAI,EACnD,EAEJ,KAAK,MAAQ,CACX,OAAQ,CAAC,EACT,SAAU,GACV,QAASZ,EACT,eAAgBY,EAChB,YAAAI,EACA,UAAW,IACb,CACF,CAoCA,mBAAoB,CAClB,SAAS,MAAQ,cACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,KAAK,MAAM,OAAO,CAEtC,CAEA,mBAAmB1M,EAAW,CAC5B,KAAM,CAAE,QAAAlV,CAAQ,EAAI,KAAK,OAEvB,KAAK,MAAM,OAAO,OAASkV,EAAU,OAAO,MAC5C,KAAK,MAAM,WAAaA,EAAU,WAElC,KAAK,WAAWlV,CAAO,CAE3B,CA+EA,QAAS,CACP,KAAM,CAAE,QAAAD,CAAQ,EAAI,KAAK,MACnB,CAAE,OAAAogB,EAAQ,SAAAhK,EAAU,QAAAnW,EAAS,eAAA0hB,EAAgB,YAAAE,EAAa,UAAA1iB,CAAU,EAAI,KAAK,MAEnF,OACE,gBAAC6W,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAAC8L,EAAA,EAAa,CACZ,iBAAkB,KAAK,iBACvB,eAAgB,KAAK,mBACrB,QAAA7hB,EACA,sBAAuB,KAAK,sBAC9B,EACA,gBAAC8hB,EAAA,EAAU,CACT,eAAgB,CAAC,CAAE,WAAAC,EAAY,UAAAC,EAAW,UAAA9iB,CAAU,IAClD,gBAAC,gBACC,gBAAC,SACE6iB,EAAW,MAAIC,CAClB,EAAI,eAIJ,gBAAC,SAAG9iB,GAAwB,MAAO,CACrC,EAEF,UAAAA,EACA,QAASwiB,EACT,KAAME,EACN,SAAS,kBACT,gBAAiB,KAAK,oBACtB,UAAW,KAAK,cAChB,UAAS,GACX,EACA,gBAAC,GAAU,CACT,OAAAzB,EACA,SAAAhK,EACA,eAAgB,KAAK,mBACrB,QAAApW,CAAA,CACF,CACF,CAEJ,CACF,CA7RE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,SAAU,IAAU,OACpB,SAAU,IAAU,OACpB,QAAS,IAAU,MACrB,CAAC,EA0RY,mBAAStB,IAAW,CACjC,OAAQA,EAAM,OACd,SAAUA,EAAM,QAClB,EAAE,EAAE,EAAU,E,2KC1Rd,MAAM,WAAkB,WAAgB,CAUtC,YAAY6L,EAAO,CACjB,MAAMA,CAAK,EAwBb,uBAAe,IAAM,CACnB,KAAM,CAAE,OAAA6V,CAAO,EAAI,KAAK,MAClB,CAAE,sBAAA8B,EAAuB,YAAAC,CAAY,EAAI,KAAK,MAEpD,OAAO/B,EAAO,KAAK,CAACrD,EAAG,IAEjBA,EAAE,WAAa,EAAE,SACfA,EAAE,WAAa,EAAE,WACZ,EAELA,EAAE,WAAa,EAAE,WACZ,GAEF,EAELA,EAAE,SAAW,EAAE,SACV,EAEA,EAEV,EAAE,OAAQ9O,GACLA,EAAM,OAASiU,EAAsB,QAAQjU,EAAM,QAAQ,GAAK,EAC9D,EAAAA,EAAM,SAAW,WAAa,CAACkU,GAM5B,EAEV,CACH,CAAC,EAED,4BAAoB/hB,GAAa,CAC/B,KAAM,CAAE,YAAAgiB,CAAY,EAAI,KAAK,MAC7B,KAAK,SAAS,CAAE,sBAAwBhiB,EAAYgiB,EAAc,CAAC,CAAG,CAAC,CACzE,CAAC,EAED,8BAAsBhiB,GAAa,CACjC,KAAK,SAAS,CAAE,YAAaA,CAAU,CAAC,CAC1C,CAAC,EAED,4CAAqCuH,GAAY,CAC/C,KAAM,CAAE,sBAAAua,CAAsB,EAAI,KAAK,MACjC3J,EAAQ2J,EAAsB,QAAQva,CAAO,EAC7C0a,EACJ9J,GAAS,EAAI,CAAC,GAAG2J,EAAsB,MAAM,EAAG3J,CAAK,EAAG,GAAG2J,EAAsB,MAAM3J,EAAQ,EAAG2J,EAAsB,MAAM,CAAC,EAAI,CAAC,GAAGA,EAAuBva,CAAO,EACvK,KAAK,SAAS,CACZ,sBAAuB0a,CACzB,CAAC,CACH,CAAC,EAED,8BAAsB,CAACpU,EAAOqU,IAAe,CAC3C,KAAM,CAAE,sBAAAJ,CAAsB,EAAI,KAAK,MACvC,GAAI,CAACjU,EAAM,OAAS,CAACqU,EACnB,OAAO,gBAACrN,GAAA,EAAY,CAAC,IAAK,GAAGhH,EAAM,aAAc,MAAO,EAAG,OAAQ,IAEjE,gBAAC,KAAc,CAAC,WAAW,SAAS,CACtC,EAEF,MAAMrJ,EAAcsd,EAAsB,QAAQjU,EAAM,QAAQ,GAAK,EAC/DsU,EACJ3d,EACI,KACA,KACA4d,EACJ5d,EACI,4BACA,4BAEN,OACE,gBAACqQ,GAAA,EAAY,CAAC,IAAK,GAAGhH,EAAM,aAAc,MAAO,EAAG,OAAQ,IAC1D,gBAACsU,EAAA,CACC,QAAS,IAAM,CAAE,KAAK,kCAAkCtU,EAAM,QAAQ,CAAE,EACxE,MAAOuU,EACP,MAAO,CAAE,OAAQ,SAAU,EAAG,CAClC,CAEJ,CAAC,EArGC,KAAM,CAAE,OAAApC,CAAO,EAAI,KAAK,MACxB,IAAIgC,EAAchC,EAAO,OAAQnS,GACxB,CAACA,EAAM,KACf,EAAE,IAAKA,GAAWA,EAAM,QACzB,EAAE,OAAO,CAACA,EAAO1N,EAAKkiB,IACbA,EAAK,QAAQxU,CAAK,IAAM1N,CAChC,EAEGmiB,EAActC,EAAO,OAAQnS,GACxBA,EAAM,SAAW,SACzB,EAAE,IAAKA,GAAWA,EAAM,QACzB,EAAE,OAAO,CAACA,EAAO1N,EAAKkiB,IACbA,EAAK,QAAQxU,CAAK,IAAM1N,CAChC,EAED,KAAK,MAAQ,CACX,sBAAuB6hB,EACvB,YAAAA,EACA,YAAAM,EACA,YAAa,EACf,CACF,CAkFA,QAAS,CACP,KAAM,CAAE,OAAAxkB,CAAO,EAAI,KAAK,MAClB,CAAE,sBAAAgkB,EAAuB,YAAAE,EAAa,YAAAM,EAAa,YAAAP,CAAY,EAAI,KAAK,MAE9E,IAAIQ,EAAcP,EAAY,OAAS,EACrC,gBAAC3c,GAAA,EAAQ,CAAC,MAAO,CAAE,QAAS,YAAa,GACvC,gBAAC,YAAK,mBAAmB,EACzB,gBAAC8O,GAAA,EAAM,CACL,UAAW2N,IAA0BE,EACrC,SAAU,KAAK,kBACf,WAAU,GACZ,CACF,EACA,+BAAE,EAEAQ,EAAgBF,EAAY,OAAS,EACvC,gBAACjd,GAAA,EAAQ,CAAC,MAAO,CAAE,QAAS,YAAa,GACvC,gBAAC,YAAK,wBAAwB,EAC9B,gBAAC8O,GAAA,EAAM,CACL,UAAW4N,EACX,SAAU,KAAK,oBACf,WAAU,GACZ,CACF,EACA,+BAAE,EAEJ,MAAMU,EAAe,KAAK,aAAa,EAEvC,OACE,gBAACrd,GAAA,EAAI,CAAC,UAAW,CAAE,QAAS,QAAS,GAClCod,EACAD,EACD,gBAACld,GAAA,EAAQ,KACP,gBAACmP,GAAA,EAAQ,CACP,UAAU,kBACV,UAAS,GACT,MAAO,CAAE,SAAU,gCAAiC,GAEnDiO,EAAa,IAAK5U,GAAU,CAC3B,SAAS6U,EAASC,EAAM,CACtB,OAAQ,gBAAC,IAAI,CACX,GAAI,GAAG7kB,EAAO,oBAAoB+P,EAAM,OACxC,MAAO,CACL,eAAgB,OAChB,MAAOA,EAAM,OACT,UACA,uCACN,GAEC8U,CACH,CACF,CACA,OACE,gBAACjO,GAAA,EAAY,CAAC,IAAK7G,EAAM,MAAQA,EAAM,SAAU,GAAIA,EAAM,MACzD,gBAAC8G,GAAA,EAAe,CACd,MAAQ9G,EAAM,MAA8E,CAAC,EAAvE,CAAE,gBAAiB,8CAA+C,CAAK,EAC7F,gBAAC+G,GAAA,EAAiB,CAChB,cAAe,CACb,KAAK,oBAAoB/G,EAAOmU,EAAY,QAAQnU,EAAM,QAAQ,GAAK,CAAC,EACxE,gBAACgH,GAAA,EAAY,CAAC,IAAKhH,EAAM,KAAM,MAAO,GACnC6U,EAAS,gBAAC5J,GAAmB,CAC5B,OAAQjL,EAAM,OACd,QAASA,EAAM,OACf,KAAK,MAEJA,EAAM,SACN,CAACA,EAAM,QAAU,eACpB,CAAsB,CACxB,EACA,gBAACgH,GAAA,EAAY,CAAC,IAAK,GAAGhH,EAAM,aACzB6U,EAAS,gBAAC,IAAY,CACrB,KAAM,gBAAC,KAAiB,IAAC,EACzB,MAAOpN,GAAA,SACKzH,EAAM,SAAU,SAAS,EAClC,OAAO,wBAAwB,EACpC,CAAE,CACJ,EACA,gBAACgH,GAAA,EAAY,CAAC,IAAK,GAAGhH,EAAM,eACzB6U,EAAS,gBAACnK,GAAW,CACpB,OAAQ1K,EAAM,OACd,QAASA,EAAM,OACjB,CAAE,CACJ,CACF,EACF,CACF,CACF,CAEJ,CAAC,CACH,CACF,CACF,CAEJ,CACF,CAhNE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,MAClB,OAAQ,IAAU,MACpB,CAAC,EA+MY,mBAASvP,IAAW,CAAE,OAAQA,EAAM,MAAO,EAAE,EAAE,EAAS,E,WCtOvE,SAASskB,GAAWzY,EAAO,CACvB,KAAM,CAAE,MAAA0Y,EAAO,OAAAC,EAAQ,MAAA1Y,EAAO,QAAA2Y,CAAQ,EAAI5Y,EAE1C,OACI,gBAAC2I,EAAA,EAAK,CACF,OAAAgQ,EACA,MAAO,MACP,MAAO1Y,GAAgB,WACvB,QAAA2Y,EACA,QAAS,CACL,gBAAC/e,GAAA,EAAM,CAAC,IAAI,oBAAoB,QAAQ,UAAU,QAAS+e,CAAA,EAAS,OAAK,CAC7E,GACA,gBAAC,cACIF,CACL,CACJ,CAER,CAEAD,GAAW,UAAY,CACnB,MAAO,IAAU,OAAO,WACxB,OAAQ,IAAU,KAClB,MAAO,IAAU,OACjB,QAAS,IAAU,KAAK,UAC5B,E,seC5BA,MAAMI,GAAwB,CAC1B,CACI,KAAM,UAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,UAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,cAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,UAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,UAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,iBAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,gBAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,eAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,YAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,eAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,eAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,EACA,CACI,KAAM,QAEN,OAAQ,CAAE,KAAM,SAAU,CAC9B,CAAE,EAEAC,GAAoBD,GAAsB,OAC5C,CAACE,EAAOC,IAAO,SAAKD,CAAK,EAAV,CAAY,CAACC,EAAE,MAAOA,EAAE,OAAO,IAAK,CAAC,EAAG,CAAC,CAC5D,EAEMC,GAAiB,CACnB,KAAM,CACF,KAAM,CAAC,CAAE,MAAAC,CAAM,IAAMJ,GAAkBI,EAAM,OACjD,CACJ,ECzDA,SAASC,GAAmBnZ,EAAO,CAC/B,KAAM,CAAE,OAAA6V,EAAQ,SAAAje,EAAU,YAAAkW,CAAY,EAAI9N,EACpCoZ,EAAoBvD,EAAO,KAAK,CAACrD,EAAGC,IAClCD,EAAE,WAAaC,EAAE,WACV,GAEPD,EAAE,WAAaC,EAAE,WACV,EAEJ,CACV,EACK4G,EAAS,OAAcD,EAAkBvD,EAAO,OAAS,GAAG,UAAU,EAAE,GAAGje,CAAQ,EAEnF0hB,EAAiBzD,EAAO,OAAO,CAACrD,EAAG9O,IAAW8O,EAAE,OAAS9O,EAAM,SAAS,OAASA,EAAM,SAAW8O,EAAI,EAAE,EACxG+G,EAAW1D,EAAO,IAAK2D,GAAMA,EAAE,QAAQ,EAEvCxd,EAAOod,EAAkB,IAAK1V,IACzB,CACH,EAAGA,EAAM,KACT,GAAIA,EAAM,YAAc,OAAcA,EAAM,UAAU,EAAE,GAAG9L,CAAQ,EAAIyhB,GAAU,IAAO,EACxF,EAAG3V,EAAM,UAAY,OAAcA,EAAM,QAAQ,EAAE,GAAG9L,CAAQ,EAAIyhB,GAAU,IAAO,EACnF,OAAQ3V,EAAM,OACd,QAAS,OAAcA,EAAM,UAAU,EAAE,GAAG9L,CAAQ,EAAE,OAAO,qBAAqB,EAClF,MAAO,OAAc8L,EAAM,QAAQ,EAAE,GAAG9L,CAAQ,EAAE,OAAO,qBAAqB,EAC9E,IAAK8L,EAAM,GACf,EACH,EAEK+V,EAAa5D,EAAO,IAAKnS,GAC3BA,EAAM,MACT,EAAE,OAAO,CAAC2K,EAAQrY,EAAKkiB,KAAkBA,GAAK,QAAQ7J,CAAM,IAAMrY,CACnE,EAAE,IAAK0jB,IAAY,CAAE,KAAMA,CAAO,EAAE,EAE9BC,EAAgB9D,EAAO,IACxBnS,GAAWA,EAAM,MACtB,EAAE,OAAO,CAAC2K,EAAQrY,EAAKkiB,KACZA,GAAK,QAAQ7J,CAAM,IAAMrY,CACnC,EAEK4jB,EAAcf,GAAsB,OAAQa,GAAoBC,EAAc,QAAQD,EAAO,IAAI,EAAI,EAAI,EAE/G,IAAIG,EAA4B,OAChC,OAAI/L,EAAY,WACd+L,EAA4B,QAI1B,gBAAC,OAAI,MAAO,CAAE,OAAQ,KAAK,IAAI,IAAK,GAAKhE,EAAO,MAAM,EAAI,KAAM,MAAO,OAAQ,GAC3E,gBAACiE,GAAA,EAAK,CACF,WAAU,GACV,cAAe,CAAE,EAAG,EAAG,EACvB,MAAO,IACP,OAAQ,KAAK,IAAI,IAAK,GAAKjE,EAAO,MAAM,EACxC,QAAS,CACL,OAAQ,GACR,KAAM,EAAIyD,EAAe,OACzB,MAAO,GACP,IAAK,EACT,EACA,kBAAkB,aAClB,eAAe,MACf,WAAAG,EACA,gBAAiB,gBAACM,GAAA,EAAW,CAAC,KAAMH,EAAa,YAAa,EAAG,MAAO,CAAC,OAAQ,CAAC,KAAMC,CAAyB,CAAC,EAAG,GAEvH,gBAACG,GAAA,EAAS,CACR,MAAO,CAAC,WAAY,CAAC,KAAKH,CAAyB,CAAC,EACpD,WAAa,CAACI,EAAMjM,IAAUuL,EAASvL,EAAA,CACzC,EACE,gBAACgM,GAAA,EAAS,CACN,cAAa,GACb,SAAQ,GACR,WAAaE,GAAM,CACf,IAAIC,EACJ,OAAQ,GAAM,CACV,KAAMD,EAAI,IACNC,EAAS,UACT,MACJ,KAAMD,EAAI,KACNC,EAAS,UACT,MACJ,QACIA,EAAS,gBACjB,CACA,OAAOhP,GAAA,SAAgB+O,EAAG,SAAS,EAAE,OAAOC,CAAM,CACtD,EACA,gBAAiB,GACjB,MAAO,CAAE,WAAY,CAAE,MAAO,IAAK,QAAS,EAAG,eAAgB,SAAU,WAAY,MAAO,KAAMN,CAA0B,CAAE,EAClI,EACA,gBAACO,GAAA,EAAQ,CACL,KAAApe,EACA,MAAQid,GACR,eACI,gBAACoB,GAAA,EAAY,CAAC,uBAAsB,KACxC,OAAQ,CAAC,CAAE,MAAAnB,CAAM,IAAM,GAAGA,EAAM;AAAA,UAAmBA,EAAM;AAAA,QAAkBA,EAAM;AAAA,EAAU,YAAYA,EAAM,GAAG,IACpH,CACJ,CACJ,CAGR,CAEAC,GAAmB,UAAY,CAC3B,OAAQ,IAAU,MAAM,WACxB,SAAU,IAAU,OACpB,YAAa,IAAU,MAC3B,EAEe,mBAAShlB,IAAW,CAC/B,SAAUA,EAAM,SAChB,YAAaA,EAAM,WACvB,EAAE,EAAEglB,EAAkB,EC3FtB,SAAS,GAAQmB,EAAU,CAEzB,MAAO,SAAUA,EAAWA,EAAS,KAAO,CAACA,CAAQ,CACvD,CAEA,SAAS,GAAOA,EAAU,CACxB,MAAO,SAAUA,EAAWA,EAAS,KAAK,GAAKA,CACjD,CAEA,SAASC,GAAS,CAAE,SAAAD,EAAU,SAAA1iB,EAAU,OAAAjE,EAAQ,KAAA2E,EAAM,YAAAwV,CAAY,EAAG,CACnE,KAAM,CAAC0M,EAAuBC,CAAwB,EAAI,mBAAS,EAAK,EAClEvb,EAAM,GAAOob,CAAQ,EAE3B,SAASI,GAAmB,CAC1B,MAAMC,GAAkBL,EAAS,OAAO,OAAO,CAACM,GAAMC,KACpD,CAACA,GAAI,YAAcD,GAAK,WAAaC,GAAI,WAAaD,GAAOC,EAC/D,EACMC,GAAeR,EAAS,OAAO,OAAO,CAACM,GAAMC,KACjD,CAACA,GAAI,UAAYD,GAAK,SAAWC,GAAI,SAAWD,GAAOC,EACzD,EACME,IACH,OAAcD,GAAa,QAAQ,EAAE,GAAGljB,CAAQ,EAC/C,OAAc+iB,GAAgB,UAAU,EAAE,GAAG/iB,CAAQ,GACvD,IACIojB,IACH,OAAcF,GAAa,QAAQ,EAAE,GAAGljB,CAAQ,EAC/C,OACE0iB,EAAS,iBAAmB,KACxBA,EAAS,gBAAkBK,GAAgB,UACjD,EAAE,GAAG/iB,CAAQ,GACX,IAEAqjB,GAAavX,IACjB,kBAAC,IAAI,CAAC,GAAI,GAAG/P,EAAO,oBAAoB+P,GAAM,QAC3CA,GAAM,QACT,EAEIwX,GAAiBD,GAAUN,EAAe,EAC1CQ,GAAcF,GAAUH,EAAY,EAE1C,OACE,kBAAC7f,GAAA,EAAI,CAAC,KAAM,CAAE,QAAS,QAAS,GAC9B,kBAACC,GAAA,EAAQ,KACP,kBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC/B,kBAAC,IAAY,CACX,YAAaF,GAAA,EACb,KAAM,kBAAC,KAAuB,IAAC,EAC/B,MACE,kBAAC,YACC,kBAAC,cAAO,iBAAe,EACtB0P,GAAe,IAAC,kBAAC,SAAG,EACrB,kBAAC,SAAE,WACQ,IACR,OACMP,GAAgB,UAAU,EAC9B,GAAG/iB,CAAQ,EACX,OAAO,qBAAqB,EAAE,GAEnC,EACA,kBAAC,SAAG,EACJ,kBAAC,cAAO,eAAa,EACpBujB,GAAY,IAAC,kBAAC,SAAG,EAClB,kBAAC,SAAE,SACM,IACN,OACML,GAAa,QAAQ,EACzB,GAAGljB,CAAQ,EACX,OAAO,qBAAqB,EAAE,GAEnC,CACF,EAEJ,EACA,kBAAC,IAAY,CACX,YAAa4T,GAAA,EACb,KAAM,kBAAC,KAAiB,IAAC,EACzB,MACE,oCACE,kBAAC,cAAO,oBAAkB,EACzBL,GAAA,SACW4P,GAAe,SAAS,EACjC,OAAO,wBAAwB,EAAG,IAAI,OAEzC,kBAAClhB,GAAA,EAAM,CACL,IAAI,mBACJ,QAAQ,YACR,QAAS,IAAM,CACb4gB,EAAyB,EAAI,CAC/B,GACD,eAED,CACF,EAEJ,EACA,kBAAC,IAAY,CACX,YAAajP,GAAA,EACb,KAAM,kBAAC,KAAiB,IAAC,EACzB,MACE,oCACE,kBAAC,cAAO,mBAAiB,EACxBL,GAAA,SACW6P,GAAiB,SAAS,EACnC,OAAO,wBAAwB,CACpC,EAEJ,CACF,CACF,CACF,CAEJ,CAEA,KAAM,CAACI,EAAkBC,CAAmB,EAAI,mBAAS,EAAK,EACxDrnB,EAAW,YAAY,EAE7B,SAASsnB,GAAsB,CAC7B,MAAM3N,GAAS,kBAAC,QAAK,MAAO,CAC1B,OAAQ,UACR,MAAO,sCACT,EACE,MAAM,yBACN,QAAU7D,IAAU,CAClBA,GAAM,eAAe,EACrBuR,EAAoB,EAAI,CAC1B,GACD,qBAED,EACA,OACE,kBAAC,IAAY,CACX,YAAa7P,GAAA,EACb,KAAM,kBAAC,KAAW,IAAC,EACnB,MAAAmC,EAAA,CACF,CAEJ,CAEA,SAAS4N,GAAiB,CAExB,GADAF,EAAoB,EAAK,EACrBnc,EAAI,SAAW,KACjB,YAAYvL,EAAO,UAAWuL,EAAI,QAASob,EAAS,SACxCpb,EAAI,IAAKA,EAAI,OAAQA,EAAI,MAAM,EACxC,KAAK,IAAM,CACVlL,EAAS,aACP,CACE,KAAM,sBACN,KAAM,UACN,OAAQ,GACR,IAAK,EACP,CAAC,CAAC,CACN,CAAC,EACA,MAAMF,IAAS,CACdE,EAAS,aAAYF,EAAK,CAAC,CAC7B,CAAC,MACE,CACL,MAAMiJ,GAAWmC,EAAI,OAAS,IAAMA,EAAI,SACxC,YAAQvL,EAAO,UAAWuL,EAAI,QAASob,EAAS,SAAUvd,EAAQ,EAC/D,KAAK,IAAM,CACV/I,EAAS,aACP,CACE,KAAM,gCACN,KAAM,UACN,OAAQ,GACR,IAAK,EACP,CAAC,CAAC,CACN,CAAC,EACA,MAAMF,IAAS,CACdE,EAAS,aAAYF,EAAK,CAAC,CAC7B,CAAC,CACL,CACF,CAEA,SAAS0nB,GAAqB,CAC5B,IAAIze,GAAWmC,EAAI,OAASA,EAAI,OAAS,IAAMA,EAAI,SAAWA,EAAI,OAC9Duc,GAAa1e,GACb,oCAAE,cAAW,kBAAC,cAAQA,EAAS,CAAS,EACxC,oCAAE,WAAQ,kBAAC,cAAQmC,EAAI,GAAI,CAAS,EACxC,MAAMe,GAAQ,uCACd,OACE,kBAAC0I,EAAA,EAAK,CACJ,QAASA,EAAA,EAAa,MAEtB,OAAQyS,EACR,MAAAnb,GACA,QAAS,IAAM,CAAEob,EAAoB,EAAK,CAAE,EAC5C,QAAS,CACP,kBAACxhB,GAAA,EAAM,CAAC,IAAI,cAAc,QAAQ,UAAU,QAAS0hB,CAAA,EAAgB,SAAO,EAC5E,kBAAC1hB,GAAA,EAAM,CAAC,IAAI,aAAa,QAAQ,OAAO,QAAS,IAAM,CAAEwhB,EAAoB,EAAK,CAAE,GAAG,QAAM,CAC/F,GACA,kBAAC,SAAE,8CAA2C,kBAAC,cAAO,UAAQ,EAAS,IAAEI,GAAW,eAAY,kBAAC,cAAQvc,EAAI,OAAQ,EAAS,gBAAa,kBAAC,cAAQob,EAAS,QAAS,EAAS,GAAC,CAClL,CAEJ,CAEA,SAASoB,IAAe,CACtB,OACE,oCACGpB,EAAS,OAAO,IAAI,CAACqB,GAAU3lB,KAC9B,kBAAC,IAAY,CACX,YAAawV,GAAA,EACb,KAAM,kBAAC,KAAiB,IAAC,EACzB,IAAKxV,GACL,MACE,kBAAC,YACE2lB,GAAS,YAAY,IAAC,kBAAC,SAAG,EAC3B,kBAAC,SACE,OACKA,GAAS,UAAU,EACvB,GAAG/jB,CAAQ,EACX,OAAO,qBAAqB,CAChC,CACF,EAEJ,CACD,CACH,CAEJ,CAEA,OACE,oCACE,kBAACqT,GAAA,EAAK,CAAC,aAAa,MAClB,kBAAC0D,GAAmB,CAAC,OAAQ2L,EAAS,OAAQ,KAAK,MAAK,iBAExD,EACA,kBAAC7L,GAAgB,CAAC,OAAQ6L,EAAS,OAAQ,EAAE,OAC/C,EAKA,kBAACrf,GAAA,EAAI,CAAC,UAAU,yBACd,kBAACA,GAAA,EAAI,CAAC,KAAM,CAAE,QAAS,QAAS,GAC9B,kBAACC,GAAA,EAAQ,KACP,kBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC9B,GAAQ4O,CAAQ,EAAE,IAAI,CAACpb,GAAKlJ,KAC3B,kBAAC,IAAY,CACX,YAAawV,GAAA,EACb,KAAM,kBAAC,KAAc,IAAC,EACtB,IAAKxV,GACL,MACE,kBAAC,YACE,YAAkBkJ,EAAG,EAAE,kBAAC,SAAE,EAC3B,kBAAC,cAAO,UAAQ,EAAS,IAAEA,GAAI,QAAQ,kBAAC,SAAE,EACzC,YAAcA,EAAG,CACpB,EAEJ,CACD,EACD,kBAAC,IAAY,CACX,YAAasM,GAAA,EACb,KAAM,kBAAC,KAAU,IAAC,EAClB,MACE,oCACE,kBAAC,cAAO,WAAS,EAAS,IAAE8O,EAAS,QACvC,EAEJ,EACA,kBAAC,IAAY,CACX,YAAa9O,GAAA,EACb,KAAM,kBAAC,KAAe,IAAC,EACvB,MACE,kBAAC,YACC,kBAAC,cAAO,OAAK,EAAS,IAAE8O,EAAS,KAAK,IAAC,kBAAC,SAAG,EAC3C,kBAAC,cAAO,WAAS,EAAS,IAAEA,EAAS,SAAS,IAAC,kBAAC,SAAG,CACrD,EAEJ,CACF,CACF,CACF,EACCA,EAAS,QAAUI,EAAiB,EACrC,kBAACzf,GAAA,EAAI,CAAC,KAAM,CAAE,QAAS,QAAS,GAC9B,kBAACC,GAAA,EAAQ,KACP,kBAACwQ,GAAA,EAAI,CAAC,MAAO,CAAE,UAAW,MAAO,GAC9B4O,EAAS,QAAUoB,GAAa,EACjC,kBAAC,IAAY,CACX,YAAalQ,GAAA,EACb,KAAM,kBAAC,KAAuB,IAAC,EAC/B,MACE,oCACE,kBAAC,cAAO,UAAQ,EAChB,kBAAC,OAAI,UAAWsC,EAAY,SAAW,oBAAsB,IAC3D,kBAAC,WAAKwM,EAAS,OAAQ,CACzB,CACF,EAEJ,EACEhiB,EAAK,SAAWA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,IACrD,oCACG2nB,EAAoB,CACvB,CACH,CACF,CACJ,CAEA,EACA,kBAAC7C,GAAU,CACT,MAAO,kBAAC,GAAkB,CAAC,OAAQ6B,EAAS,OAAQ,EACpD,OAAQE,EACR,MAAM,kBACN,QAAS,IAAM,CACbC,EAAyB,EAAK,CAChC,EACF,EACCe,EAAmB,CACtB,CAEJ,CAEAjB,GAAS,UAAY,CACnB,SAAU,IAAU,OACpB,OAAQ,IAAU,OAClB,SAAU,IAAU,OACpB,KAAM,IAAU,OAChB,YAAa,IAAU,MACzB,EAEe,mBAASpmB,IAAW,CACjC,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,KAAMA,EAAM,KACZ,YAAaA,EAAM,WACrB,EAAE,EAAEomB,EAAQ,E,iKCnVZ,MAAM,WAAqB,WAAgB,CAA3C,kCAUE,qBAAa,IAAM,CACZ,KAAK,MAAM,UACd,KAAK,MAAM,cACT,KAAK,MAAM,OACX,KAAK,MAAM,MAAM,OAAO,UAC1B,CAEJ,CAAC,CAAD,CAEA,mBAAoB,CAClB,SAAS,MAAQ,gBACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAmB3P,EAAW,CACxB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAS,CACP,KAAM,CAAE,SAAA0P,EAAU,WAAAxlB,EAAY,OAAAnB,CAAO,EAAI,KAAK,MAG9C,GAAI2mB,IAAa,QAAaxlB,EAC5B,OAAO,gBAAC+V,GAAA,EAAQ,IAAC,EAInB,GAAI,CAACyP,EAGH,OACE,gBAAC,KAAS,CACR,MAAM,+BACN,KAAM,KACN,WAAY,GAAG3mB,EAAO,uBACtB,SAAS,qBACX,EAMJ,MAAMmX,EAAgBwP,EAAS,OAC7B,gBAAC,GAAS,CAAC,OAAQA,EAAS,OAAQ,EAEpC,gCAIE,gBAAC,SAAG,EACJ,gBAACvP,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,gBAACC,GAAA,EAAc,CAAC,KAAM,KAAW,EACjC,gBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,2CAEnC,CACF,CACF,EAGF,OACE,gCACE,gBAACQ,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC,GAAQ,CAAC,SAAA6O,CAAA,CAAoB,CAChC,EACA,gBAAC7O,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAACR,GAAA,EAAK,CAAC,aAAa,MAClB,gBAAC,KAAS,CACR,MAAO,CACL,YAAa,+BACb,cAAe,QACjB,EACF,EAAG,IAAI,QAET,EACCH,CACH,CACF,CAEJ,CACF,CA5FE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,OAAO,WACxB,OAAQ,IAAU,OAAO,WACzB,SAAU,IAAU,OACpB,WAAY,IAAU,KAAK,WAC3B,cAAe,IAAU,KAAK,WAC9B,YAAa,IAAU,MACzB,CAAC,EAuFH,SAAS,GAAgB3W,EAAO+B,EAAU,CACxC,MAAMuH,EAAavH,EAAS,MAAM,OAAO,WAIzC,MAAO,CACL,SAFe/B,EAAM,MAAM,UAAUsJ,GAGrC,OAAQtJ,EAAM,OACd,WAAYA,EAAM,MAAM,WACxB,YAAaA,EAAM,WACrB,CACF,CAEA,MAAM,GAAqB,CAAE,kBAAc,EAE5B,mBAAQ,GAAiB,EAAkB,EAAE,EAAY,E,SCtFxE,SAAS,GAAOmmB,EAAU,CACxB,MAAO,SAAUA,EAAWA,EAAS,KAAK,GAAKA,CACjD,CAEA,SAASsB,GAAc,CACrB,UAAAC,EACA,SAAAhQ,EACA,eAAAzU,EACA,OAAAzD,EACA,SAAAiE,EACA,QAAAnC,CACF,EAAG,CACD,KAAM,CAACqmB,EAAgBC,CAAiB,EAAI,IAAM,SAAS,EAAK,EAC1D,CAACC,EAAiBC,CAAkB,EAAI,IAAM,SAClD,mBACF,EAEMC,EAAwBpS,IAAU,CACtCiS,EAAkB,CAACD,CAAc,EACjCG,EAAmBnS,GAAM,OAAO,SAAS,CAC3C,EAEMgC,EAAU,CACd,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,UAAU,EACzD,UAAW,UACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAc,IAAC,EAAI,MAAM,SAAS,EAC9D,UAAW,SACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAU,IAAC,EAAI,MAAM,WAAW,EAC5D,UAAW,WACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,IAAQ,IAAC,EAAI,MAAM,SAAS,EACxD,UAAW,SACX,WAAY,CAAC,OAAAgK,GAAA,GAAU,EAAE,CAAC,EAC1B,eAAgB,CAAC,IAAQ,CAC3B,EACA,CACE,MAAO,kBAACqG,GAAA,EAAQ,CACP,OAAM,GACN,QAAO,GACP,SAAU,KAAiB,KAC3B,SAAUD,EACV,OACE,kBAACE,GAAA,EAAc,CACb,SAAUC,IAAQN,EAAkBM,EAAI,EAExC,gBAAiB,KACjB,MAAO,CACL,QAAS,EACT,WAAY,qCACZ,SAAU,mCACV,MAAO,+BACT,EACA,GAAG,sBAEH,kBAAC,KAAiB,IAAC,EAAE,IAAEL,CACzB,EAEF,OAAQF,EACR,cAAe,CACb,kBAACQ,GAAA,EAAY,CAAC,IAAI,YAAW,mBAAiB,EAC9C,kBAACA,GAAA,EAAY,CAAC,IAAI,WAAU,kBAAgB,CAC9C,EACA,MAAO,CAAE,MAAO,OAAQ,QAAS,CAAE,EACrC,EACP,UAAW,WACX,MAAO,CAAC,MAAO,CAAC,UAAW,SAAS,CAAC,CACvC,EACA,CACE,MACE,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAuB,IAAC,EAAI,MAAM,aAAa,EAEtE,UAAW,YACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,SAAS,EACxD,UAAW,QACb,CACF,EAEA,SAASC,EAAkBjC,GAAU,CACnC,MAAMpb,GAAM,GAAOob,EAAQ,EACrBtE,GAAkB,YAAuB9W,EAAG,EAElD,IAAIqS,GACJ,OAAIyK,IAAoB,oBACtBzK,GAAWpG,GAAA,IAAWmP,GAAS,mBAAmB,EAC5CnP,GAAA,IAAWmP,GAAS,sBAAsB,EAEhD/I,GAAWpG,GAAA,IAAWmP,GAAS,mBAAmB,EAC5CnP,GAAA,IAAWmP,GAAS,eAAe,EAGpC,CAGL,GAAIA,GAAS,KACb,MAAO,CACL,CAGE,MACE,kBAAC3L,GAAmB,CAClB,OAAQ2L,GAAS,OACjB,KAAM,GAAG3mB,EAAO,uBAAuB2mB,GAAS,QAC/Cpb,GAAI,OACP,CAEJ,EACA,CACE,MAAOA,GAAI,OAASA,GAAI,OAASA,GAAI,GACvC,EACA,CACE,MAAOob,GAAS,QAClB,EACA,CACE,MAAOtE,IAAmBA,EAC5B,EACA,CACE,MAAO7K,GAAA,SACKoG,GAAU,IAAI,EACvB,OAAO,wBAAwB,CACpC,EACA,CACE,MAAO,OACA+I,GAAS,sBAAsB,EACnC,GAAG1iB,CAAQ,EACX,OAAO,qBAAqB,CACjC,EACA,CACE,MACE,kBAACwW,GAAW,CACV,OAAQkM,GAAS,OACjB,KAAM,GAAG3mB,EAAO,uBAAuB2mB,GAAS,OAElD,CAEJ,CACF,CACF,CACF,CAEA,SAASnO,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,IAAIC,EAAO,CAAC,EAGR4J,GAAU,CAAC,EACf,OAAIpK,GACFQ,EAAOF,EAAkB,EAMzBL,EAAQ,GAAG,UAAY,KAEvBO,EAAOwP,EAAU,IAAKvB,IAAaiC,EAAkBjC,EAAQ,CAAC,EAI9DrE,GAAU,CACR,CACE,MAAO,uBACP,QAAS,CAACnM,GAAOoM,GAAOC,KAGtB1gB,EAAQ,KAAK,GAAG9B,EAAO,uBAAuBwiB,GAAQ,IAAI,CAC9D,CACF,GAIA,oCACE,kBAAC7J,GAAA,EAAK,CACJ,aAAW,eACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,QAAA4J,GACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACpK,GAAYgQ,EAAU,SAAW,GACjC,kBAAC9Q,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAW,EACjC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,oBAAkB,EAC3C,kBAACsB,GAAA,EAAc,KAAC,4FAGhB,EACA,kBAAC6J,GAAA,EAA0B,KACzB,kBAACvc,GAAA,EAAM,CAAC,QAAQ,OAAO,QAASzC,CAAA,EAAgB,mBAEhD,CACF,CACF,CAEJ,CAEJ,CAEAwkB,GAAc,UAAY,CACxB,UAAW,IAAU,MAAM,WAC3B,SAAU,IAAU,KAAK,WACzB,eAAgB,IAAU,KAAK,WAC/B,OAAQ,IAAU,OAAO,WACzB,SAAU,IAAU,OAAO,WAC3B,QAAS,IAAU,OAAO,UAC5B,EAEe,mBAASznB,IAAW,CACjC,OAAQA,EAAM,OACd,SAAUA,EAAM,QAClB,EAAE,EAAEynB,EAAa,E,goBChRjB,MAAM,WAAsB,WAAgB,CAQ1C,YAAY5b,EAAO,CACjB,MAAM,EAmER,qBAActK,GAAY,CAOxB,KAAM,CAAE,UAAAd,CAAU,EAAI,KAAK,MAC3B,IAAIyhB,EAAoB,CACtB,KAAM3gB,EAAQ,KAAK,OAAS,EAAIA,EAAQ,KAAO,CAAC,CAAE,EAClD,MAAOA,EAAQ,MAAM,OAAS,EAAIA,EAAQ,MAAQ,CAAC,EAAG,CACxD,EACI4gB,EAAW,SAAK5gB,CAAO,EAAK2gB,CAAiB,EACjD,MAAMzZ,EAAc+Y,GAAwBW,CAAQ,EACpD,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,EAChC,YAAe,KAAK,MAAM,OAAO,UAAW1Z,CAAW,EAAE,KACtD3I,GAAa,CAGZ,IAAIsiB,EAAiB3hB,IAEhBX,EAAS,KAAK,OAASoiB,EAAkB,MAAM,GAC9C,SAASA,EAAkB,KAAK,EAAE,EAAIpiB,EAAS,KAAK,OACpD,MACN,KAAK,SAAS,CACZ,UAAWA,EAAS,KACpB,SAAU,GACV,UAAWsiB,CACb,CAAC,CACH,CACF,CACF,CAAC,EAgBD,gCAAwB,CAACC,EAAWzV,IAE7BA,EAQDyV,IAAc,UAAY,MAAMzV,CAAW,EACtC,CACL,QAAS,GACT,QAAS,qDACX,EAGK,CACL,QAAS,EACX,EAhBS,CACL,QAAS,GACT,QAAS,2BACX,CAcH,EAED,6BAAsBjL,GAAe,CACnC,KAAM,CAAE,SAAAN,EAAU,QAAAC,CAAQ,EAAI,KAAK,MAC7B,CAAE,QAAAC,EAAS,UAAAd,CAAU,EAAI,KAAK,MAEpC,IAAkD,EAAAc,EAA5C,MAAQ+gB,EAAI,MAASC,CAlL/B,EAkLsD,EAAhBC,EAAA,GAAgB,EAAhB,CAA5B,OAAY,UACgC,EAAA7gB,EAA5C,MAAQ8gB,GAAI,MAASC,EAnL/B,EAmLsD,EAAhBC,GAAA,GAAgB,EAAhB,CAA5B,OAAY,UAGdC,GAAY,mBAAQJ,EAAaG,EAAW,EAC5CE,GAAeD,GAAYjhB,EAAa,SAAKA,CAAU,EAAf,CAAiB,KAAM,CAAC,CAAE,CAAE,CAAC,EAMzE,YAAkBA,EAAYN,EAAUC,CAAO,EAC/C,IAAIwhB,GAAW,CACb,QAASD,GAET,UAAWD,GAAYniB,EAAY,IACrC,EACKmiB,KACHE,GAAS,YAAc,GAEzB,KAAK,SACHA,GACA,IAAM,CACJ,KAAK,WAAWD,EAAY,CAC9B,CAAC,CACL,CAAC,EAED,6BAAqB,IAAM,CAEzB,MAAMthB,EAAU,KAAK,iBAAiB,OAAO,CAACiL,EAAYC,KACxDD,EAAWC,EAAS,KAAO,CAAC,EACrBD,GACN,CAAC,CAAC,EACL,KAAK,mBAAmBjL,CAAO,CACjC,CAAC,EAED,8BAAsB,CAACoU,EAAOoN,IAAY,CACxC,KAAM,CAAE,QAAAxhB,CAAQ,EAAI,KAAK,MACzB,KAAK,SAAS,CAAE,eAAgBwhB,CAAQ,CAAC,EACzC,MAAMphB,EAAa,SAAKJ,CAAO,EAAZ,CAAc,MAAO,CAACwhB,CAAQ,CAAE,CAAC,EACpD,KAAK,mBAAmBphB,CAAU,CACpC,CAAC,EAED,wBAAgB,CAACgU,EAAOqN,IAAe,CACrC,KAAM,CAAE,QAAAzhB,EAAS,eAAA0hB,CAAe,EAAI,KAAK,MACzC,KAAK,SAAS,CAAE,YAAaD,CAAW,CAAC,EACzC,MAAME,EAASD,GAAkBD,EAAa,GACxCrhB,EAAa,SAAKJ,CAAO,EAAZ,CAAc,KAAM,CAAC2hB,CAAO,CAAE,CAAC,EAClD,KAAK,mBAAmBvhB,CAAU,CACpC,CAAC,EA5LC,KAAK,iBAAmB,CACtB,CACE,IAAK,UACL,MAAO,UACP,YAAa,uBACb,KAAM,cACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,cACR,EACA,CACE,IAAK,WACL,MAAO,WACP,YAAa,wBACb,KAAM,cACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,QACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,SACN,QAAS,CACP,UACA,UACA,iBACA,gBACA,WACA,eACA,SACF,CACF,EACA,CACE,IAAK,OACL,MAAO,WACP,YAAa,6BACb,KAAM,QACR,CACF,EAEA,MAAMwgB,EAAW,YAAkBtW,EAAM,SAAU,KAAK,gBAAgB,EAClEkX,EAAUZ,EAAS,MAAM,GAC3B,SAASA,EAAS,MAAM,EAAE,EAC1B,GACEgB,EAAchB,EAAS,KAAK,GAC9B,KAAK,MAAM,SAASA,EAAS,KAAK,GAAKY,CAAO,CAAC,EAAI,EACnD,EAEJ,KAAK,MAAQ,CACX,UAAW,CAAC,EACZ,SAAU,GACV,QAASZ,EACT,eAAgBY,EAChB,YAAAI,EACA,UAAW,IACb,CACF,CAmCA,mBAAoB,CAClB,SAAS,MAAQ,iBACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,KAAK,MAAM,OAAO,CAEtC,CAEA,mBAAmB1M,EAAW,CAC5B,KAAM,CAAE,QAAAlV,CAAQ,EAAI,KAAK,MACrB,KAAK,MAAM,OAAO,OAASkV,EAAU,OAAO,MAC9C,KAAK,WAAWlV,CAAO,CAE3B,CA+EA,QAAS,CACP,KAAM,CAAE,QAAAD,CAAQ,EAAI,KAAK,MACnB,CAAE,UAAAomB,EAAW,SAAAhQ,EAAU,QAAAnW,EAAS,eAAA0hB,EAAgB,YAAAE,EAAa,UAAA1iB,CAAU,EAAI,KAAK,MAEtF,OACE,gBAAC6W,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC8L,EAAA,EAAa,CACZ,iBAAkB,KAAK,iBACvB,eAAgB,KAAK,mBACrB,QAAA7hB,EACA,sBAAuB,KAAK,sBAC9B,EACA,gBAAC8hB,EAAA,EAAU,CACT,eAAgB,CAAC,CAAE,WAAAC,EAAY,UAAAC,EAAW,UAAA9iB,CAAU,IAClD,gBAAC,gBACC,gBAAC,SACE6iB,EAAW,MAAIC,CAClB,EAAI,eAIJ,gBAAC,SAAG9iB,GAAwB,MAAO,CACrC,EAEF,UAAAA,EACA,QAASwiB,EACT,KAAME,EACN,SAAS,kBACT,gBAAiB,KAAK,oBACtB,UAAW,KAAK,cAChB,UAAS,GACX,EACA,gBAAC,GAAa,CACZ,UAAAuE,EACA,SAAAhQ,EACA,eAAgB,KAAK,mBACrB,QAAApW,CAAA,CACF,CACF,CAEJ,CACF,CAhPE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,SAAU,IAAU,OACpB,QAAS,IAAU,OACnB,YAAa,IAAU,MACzB,CAAC,EA6OY,mBAAStB,IAAW,CACjC,OAAQA,EAAM,OACd,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAa,E,oLCpPjB,SAAS,GAAQ+E,EAAM,CAErB,MAAO,SAAUA,EAAOA,EAAK,KAAO,CAACA,CAAI,CAC3C,CAEA,MAAM,WAAkB,WAAgB,CAQtC,aAAe,CACb,MAAM,EACN,KAAK,MAAQ,CACX,SAAU,GACV,YAAa,EACf,EACA,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,QAAU,EACjB,CAEA,QAASX,EAAG,CAEV,GAAIA,EAAE,SAAW,EACf,OAEF,IAAIikB,EAAW,KAAK,MAAM,SACrB,KAAK,UACRA,EAAW,KAAK,MAAM,gBAExB,KAAK,QAAU,GACf,KAAK,SAAS,CAAE,SAAU,CAACA,CAAS,CAAC,CACvC,CAEA,YAAaC,EAAI,CAEf,IAAIC,EAAQ,KAERC,EADM,KAAK,IAAI,EACDF,EACd1lB,EAAS,eACT6lB,EAAO,YAAWD,CAAK,EAC3B,OAAIA,EAAS,EAAID,EACf3lB,EAAS,cACA4lB,EAAS,EAAID,IACtB3lB,EAAS,gBAEJ,gBAAC,QAAK,UAAWA,CAAA,EAAS6lB,CAAK,CACxC,CAEA,YAAapjB,EAAQF,EAAO,CAC1B,IAAIujB,EACJ,OAAIvjB,EAAM,YAAc,KACtBujB,EAAgB,UAEhBA,EAAgB,YAAWvjB,EAAM,SAAS,EAG1C,gBAAC,gBACC,gBAAC,SAAM,MAAM,eAAe,UAAU,OAAO,MAAO,CAAC,QAAS,QAAQ,GACnE,KAAK,YAAYE,EAAO,YAAY,CACvC,EACA,gBAAC,aAAM,KAAG,EACV,gBAAC,SAAM,MAAM,iBAAiB,UAAU,OAAO,MAAO,CAAC,QAAS,QAAQ,GACrEqjB,CACH,CACF,CAEJ,CAEA,qBAAsBrd,EAAKsd,EAAaD,EAAe,CACrD,IAAIE,EAAkB,KAAOD,GAAeA,EACAD,IAExCG,EAAY,GACZC,EAAgBF,EAChB9c,EAAQ,GACRid,EAAYL,EAChB,OAAI,OAAO,MAAME,CAAe,GAC9BE,EAAgB,IAChBF,EAAkB,EAClBC,EAAY,8CACHxd,EAAI,WACbwd,EAAY,sBACZ/c,GAAS;AAAA,GAEPid,IAAc,OAChBjd,GAAS,6BAA+BkL,GAAA,SAAgB+R,CAAS,EAAE,OAAO,CACxE,SAAU,6CACV,QAAS,EACT,SAAU,EACZ,CAAC,GAID,gBAAC,OAAI,UAAW,2BAA2B,KAAK,MAAM,YAAY,SAAW,iBAAmB,KAC9F,MAAAjd,CAAA,EACA,gBAAC,OAAI,UAAW,gBAAkB+c,EAChC,KAAK,cACL,gBAAeD,EACf,gBAAe,EACf,gBAAe,IACf,MAAO,CAAC,MAASE,EAAgB,GAAG,EACtC,CACF,CAEJ,CAEA,qBAAsBzd,EAAK6O,EAAQ,CACjC,IAAI2O,EAAW/c,EACf,OAAQoO,EAAQ,CACd,IAAK,UACH2O,EAAY,gBACZ,MACF,IAAK,UACHA,EAAY,eACZ,MACF,IAAK,WACL,IAAK,cACL,IAAK,eACL,IAAK,eACHA,EAAY,gBACZ,MACF,IAAK,SACL,IAAK,UACHA,EAAY,aACZ,MACF,IAAK,UACHA,EAAY,gBACRxd,EAAI,iBAAmB,OACzBS,EAAQ,cAAgBT,EAAI,gBAE9B,MACF,IAAK,SACHwd,EAAY,gBACRxd,EAAI,iBAAmB,OACzBS,EAAQ,cAAgBT,EAAI,gBAE9B,MAEF,QACEwd,EAAY,eAChB,CAEA,OACE,gBAAC,QAAK,UAAW,yBAA2BA,EAAW,MAAA/c,CAAA,EAAeoO,CAAO,CAEjF,CAEA,UAAW7O,EAAK2d,EAAW,CACzB,KAAM,CAAE,OAAAxpB,CAAO,EAAI,KAAK,MACxB,IAAIoZ,EAAWvN,EAAI,KACf4d,EAAgB,IAAI,KAAK,YAAY,KAAM,CAAC,KAAM,SAAS,CAAC,EAChE,MAAMC,EAAW,CACf,IAAK,KACL,IAAK,KACL,IAAK,KACL,MAAO,IACT,EACI7d,EAAI,MAAQ,IACZuN,EAAWA,EAAW,KAAOvN,EAAI,MAAQ6d,EAASD,EAAc,OAAO5d,EAAI,KAAK,GAAK,aAEzF,IAAI4R,EAAO,GACX,GAAI5R,EAAI,SAAW,KACjB4R,EAAO,gBAAC,KAAE,UAAU,gBAAgB,KAAM5R,EAAI,YAAauN,CAAS,UAC3DvN,EAAI,MAAQ,KAAM,CAC3B,IAAIhE,EAAMgE,EAAI,IACd,GAAIA,EAAI,IAAI,MAAM,SAAS,EAAG,CAC5B,MAAM8d,EACJ3pB,EAAO,WAAa,IAAM6L,EAAI,IAEhC4R,EAAO,gBAAC,IAAI,CAAC,UAAU,gBAAgB,GAAAkM,CAAA,EAASvQ,CAAS,CAC3D,MACEqE,EAAO,gBAAC,KAAE,UAAU,gBAAgB,KAAM5V,CAAA,EAAMuR,CAAS,CAE7D,MACEqE,EAAO,gBAAC,QAAK,UAAU,iBAAiBrE,CAAS,EAEnD,IAAIwQ,EACAlP,EAAS,aAAgB7O,CAAG,EAChC,OAAI6O,IAAW,cACbkP,EAAY,KAAK,qBAAqB/d,EAAK2d,EAAU,QAASA,EAAU,SAAS,EAEjFI,EAAY,KAAK,qBAAqB/d,EAAK6O,CAAM,EAIjD,gBAAC,YACE+C,EACAmM,EACA/d,EAAI,SAAW,GACd,gBAAC,SAAM,UAAU,wBAAuB,eAAa,EAAY,GACnE,gBAAC,OAAI,MAAO,CAAC,MAAO,MAAM,EAAG,CAC/B,CACJ,CAEA,kBAAmBjH,EAAG,CAEhBA,EAAE,SAAW,GAGjB,KAAK,SAAS,CAAE,YAAa,CAAC,KAAK,MAAM,WAAY,CAAC,CACxD,CAEA,cAAeilB,EAAMlkB,EAAO,CAC1B,KAAM,CAACmkB,EAAYC,CAAe,EAAI,KAAK,MAAM,YAC3C,CAAC,OAAQF,CAAI,EACb,CAAC,OAAQA,EAAK,OAAOG,GAAK,aAAgBA,CAAC,IAAM,SAAS,CAAC,EAC3DC,EAAkBJ,EAAK,OAASE,EAAgB,OAEtD,OACE,gCACE,gBAAC,MAAG,UAAW,cAAc,KAAK,MAAM,YAAY,SAAW,0BAA4B,wBACxFA,EAAgB,IAAI,CAACle,EAAKxJ,IACzB,gBAAC,MAAG,IAAKA,EAAK,UAAW,mBAAmB,KAAK,MAAM,YAAY,SAAW,uBAAyB,qBACpG,KAAK,UAAUwJ,EAAKlG,EAAM,KAAKkG,EAAI,KAAK,CAC3C,CACD,EACC,KAAK,MAAM,aAAeoe,EAC1B,gBAAC,MAAG,IAAI,OAAO,UAAU,mCACvB,gBAAC/jB,GAAA,EAAM,CAAC,QAAQ,OAAO,UAAU,2BACzB,QAAS,KAAK,mBACnB4jB,EAAW,IAAEG,GAAoC,GAAG,eAAaA,IAAoB,EAAI,GAAK,GACjG,CACF,EACE,EACN,CACF,CAEJ,CAEA,QAAU,CACR,KAAM,CAAE,SAAApB,CAAS,EAAI,KAAK,MACpB,CAAE,KAAAtjB,EAAM,eAAA2kB,CAAe,EAAI,KAAK,MACtC,IAAIC,EAASD,EACT,KAAK,UACPC,EAAStB,GAEX,MAAMljB,EAAQ,aAAwBJ,CAAI,EACpC6kB,EACJ,gBAAC,OAAI,UAAW,uBAAuB,KAAK,MAAM,YAAY,SAAW,mBAAqB,iBAC5F,gBAAC,OAAI,UAAW,iBAAiB,KAAK,MAAM,YAAY,SAAW,4BAA8B,yBAC/F,QAAS,KAAK,SACd,gBAAC,WACE7kB,EAAK,OAAS,GACb,gBAAC,OAAI,UAAU,OACb,gBAAC,OAAI,UAAU,YACb,gBAAC,KAAoB,CAAC,KAAAA,CAAA,CAAY,CACpC,EACA,gBAAC,OAAI,UAAU,uBACZ,KAAK,YAAYA,EAAMI,CAAK,CAC/B,CACF,EACE,GACH,GAAQJ,CAAI,EAAE,IAAI,CAACM,EAAQxD,IAC1B,gBAAC,OAAI,IAAKA,EAAK,UAAU,OACvB,gBAAC,OAAI,UAAU,YACb,gBAAC,QAAK,UAAU,kBAAkBwD,EAAO,OAAQ,CACnD,EACA,gBAAC,OAAI,UAAU,uBACb,gBAAC,KAAU,CAAC,OAAAA,CAAA,CAAgB,CAC9B,CACF,CACD,CACH,CACF,EACCskB,EAAS,KAAK,cAAc5kB,EAAK,KAAMI,CAAK,EAAI,EACnD,EAEF,OACE,gBAAC,gBACEykB,CACH,CAEJ,CACF,CA/QE,GADI,GACG,YAAY,CACjB,eAAgB,IAAU,KAAK,WAC/B,KAAM,IAAU,OAAO,WACvB,OAAQ,IAAU,OAClB,YAAa,IAAU,MACzB,CAAC,EA4QY,mBAAQ5pB,IAAU,CAC/B,OAAQA,EAAM,OACd,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAS,E,iKCjSb,MAAM,WAAyB,WAAgB,CAA/C,kCAQE,qBAAciQ,GAAU,CACtB,KAAK,MAAM,SAAS,aAClB,KAAK,MAAM,OAAQ,KAAK,MAAM,MAAM,OAAO,SAAUA,CAAK,CAAC,EAC1D,KAAK,IAAM,CAAC,KAAK,MAAQ,WAAW,KAAK,WAAY,GAAI,CAAC,CAAC,EAE1D,KAAK,QACP,aAAa,KAAK,KAAK,EACvB,KAAK,MAAQ,KAEjB,CAAC,CAAD,CAEA,mBAAqB,CACnB,SAAS,MAAQ,KAAK,MAAM,MAAM,OAAO,SAAW,iBAChD,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAoBwG,EAAW,CACzB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,sBAAwB,CAClB,KAAK,QACP,aAAa,KAAK,KAAK,EACvB,KAAK,MAAQ,KAEjB,CAEA,QAAU,CACR,KAAM,CAAE,WAAAgD,CAAW,EAAI,KAAK,MACtBoQ,EAAWpQ,EAAW,OAC5B,OACE,gBAACnC,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAACA,EAAA,EAAW,CAAC,MAAO,CAAC,aAAc,KAAK,GACtC,gBAAC,KAAS,CACR,WAAYmC,EAAW,WACvB,cAAe,KAAK,WACtB,CACF,EACCoQ,GAAYA,EAAS,IAAI,CAAC9kB,EAAMlD,IAC/B,gBAAC,OAAI,UAAU,0BAA0B,IAAKA,CAAA,EAC5C,gBAAC,GAAS,CACR,eAAgB,GAChB,KAAAkD,CAAA,CACF,CACF,CACD,CACH,CACJ,CACF,CA3DE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,OAAO,WACxB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EAwDY,mBAAQ/E,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,MACpB,EAAE,EAAE,EAAgB,E,0OCxEpB,SAAS8pB,IAAoB,CAC3B,MAAO,CAAE,KAAM,IAA+B,CAChD,CAEA,SAASC,GAAkBC,EAAY,CACrC,MAAO,CAAE,KAAM,KAAgC,WAAAA,CAAW,CAC5D,CAEA,SAASC,GAAiBtqB,EAAO,CAC/B,MAAO,CAAE,KAAM,KAA6B,MAAAA,CAAM,CACpD,CAEO,SAASwI,IAAkB,CAChC,OAAO,SAAgBtI,EAAU,iCAC/BA,EAASiqB,GAAkB,CAAC,EAC5B,GAAI,CACF,MAAMhqB,EAAW,MAAM,IAAoB,EAC3CD,EAASkqB,GAAkBjqB,EAAS,IAAI,CAAC,CAC3C,OAASH,EAAP,CACAE,EAASoqB,GAAiBtqB,CAAK,CAAC,CAClC,CACF,CAAC,CAAD,CACF,C,6ECFA,MAAMuqB,GAAqB,CACzB,QAAS,CACP,KAAM,KACN,MAAO,sCACT,EACA,aAAc,CACZ,KAAM,KACN,MAAO,sCACT,EACA,OAAQ,CACN,KAAM,KACN,MAAO,sCACT,EACA,QAAS,CACP,KAAM,KACN,MAAO,qCACT,CACF,EAEMC,GAA4B,CAChC,KAAM,KACN,MAAO,mCACT,EAEA,SAASC,GAAmB,CAAE,MAAApqB,CAAM,EAAG,CACrC,MAAMyF,EACJykB,GAAmBlqB,EAAM,YAAY,IAAMmqB,GACvCxP,EAAOlV,EAAW,KAExB,OACE,kBAAC,QAAK,MAAO,CAAE,MAAOA,EAAW,KAAM,GACrC,kBAACkV,EAAA,CACC,KAAK,KACL,MAAO,CACL,YAAa,+BACb,cAAe,QACjB,EACF,CACF,CAEJ,CAEAyP,GAAmB,UAAY,CAC7B,MAAO,IAAU,OAAO,UAC1B,EAEA,SAASC,GAAe,CAAE,MAAArqB,CAAM,EAAG,CACjC,MAAMyF,EACJykB,GAAmBlqB,EAAM,YAAY,IAAMmqB,GAE7C,OAAO,kBAAC,QAAK,MAAO,CAAE,MAAO1kB,EAAW,KAAM,GAAIzF,EAAM,YAAY,CAAE,CACxE,CAEAqqB,GAAe,UAAY,CACzB,MAAO,IAAU,OAAO,UAC1B,EAEA,SAASC,GAAe,CAAE,WAAAN,CAAW,EAAG,CAGtC,KAAM,CAAC9R,EAAMqS,CAAO,EAAI,mBAAS,CAAC,CAAC,EAE7BC,EAAiB,CAACnM,EAAG,IACrBA,EAAE,SAAW,EAAE,SACV,GAELA,EAAE,SAAW,EAAE,SACV,EAEF,EAGT,oBAAU,IAAM,CAoBdkM,GAnBwB,IAAM,CAC5B,MAAME,EAAU,CAAC,EACjB,IAAI5P,EAAI,EACJ6P,EAAe,EACnB,SAAW,CAACC,EAAMC,CAAW,IAAK,OAAO,QAAQZ,CAAU,EAAG,CAC5DU,EAAe7P,EACfA,IACA,MAAMgQ,EAAc,CAAC,EACrB,UAAWC,KAAa,CAAC,GAAGF,CAAW,EAAE,KAAKJ,CAAc,EAC1DK,EAAY,KAAKE,EAAmBJ,EAAMG,GAAWJ,CAAY,CAAC,EAClE7P,IAEF4P,EAAQ,KAAKO,EAAiBL,EAAME,EAAY,MAAM,CAAC,EACvDJ,EAAQ,KAAK,GAAGI,CAAW,CAC7B,CAEA,OAAOJ,CACT,GAEwB,CAAC,CAU3B,EAAG,CAACT,CAAU,CAAC,EAMf,MAAMrS,EAAU,CACd,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAe,IAAC,EAAI,MAAM,WAAW,EACjE,UAAW,WACX,cAAe,CAAC,IAAU,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAa,IAAC,EAAI,MAAM,QAAQ,EAC5D,UAAW,OACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,IAAQ,IAAC,EAAI,MAAM,UAAU,EACzD,UAAW,SACb,CACF,EAEA,SAASqT,EAAiBL,EAAMM,EAAe,CAC7C,MAAO,CAGL,OAAQ,GACR,MAAO,CAAC,GAAG,aAAWN,CAAI,MAAMM,IAAgB,CAClD,CACF,CAEA,SAASF,EAAmBJ,EAAMG,EAAWI,EAAW,CACtD,MAAO,CACL,OAAQA,EACR,MAAO,CACL,CACE,MACE,oCACE,kBAACd,GAAA,CAAmB,MAAOU,EAAU,MAAO,EAAG,IAC9CA,EAAU,QACb,CAEJ,EACA,CACE,MAAO,kBAACT,GAAA,CAAe,MAAOS,EAAU,MAAO,CACjD,EACAA,EAAU,OACZ,CACF,CACF,CAEA,SAASK,EAAexV,EAAOyV,EAAQ5G,EAAQ,CAC7C,MAAM6G,EAAQ,CAAC,GAAGnT,CAAI,EAKtBA,EAAKkT,GAAQ,OAAS5G,EACtB+F,EAAQc,CAAK,CACf,CAEA,OAQE,oCACE,kBAAClT,GAAA,EAAK,CACJ,aAAW,mBACX,QAAS,KAAa,QACtB,WAAYgT,EACZ,MAAOxT,EACP,KAAAO,EACA,UAAU,oBAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,CACF,CAEJ,CAEAoS,GAAe,UAAY,CACzB,WAAY,IAAU,OAAO,UAC/B,EAEe,OAAAA,GCnMf,SAASgB,GAAe,CAAE,WAAAtB,EAAY,WAAArpB,EAAY,gBAAAwH,CAAgB,EAAG,CACnE,oBAAU,IAAM,CACd,SAAS,MAAQ,kBACjBA,EAAgB,CAClB,EAAG,CAACA,CAAe,CAAC,EAIpB,MAAMkV,EACJ2M,IAAe,QAAarpB,EAC1B,kBAAC+V,GAAA,EAAQ,IAAC,EACR,OAAO,KAAKsT,CAAU,EAAE,SAAW,EACrC,kBAACpT,GAAA,EAAU,CAAC,QAASA,GAAA,EAAkB,OACrC,kBAACC,GAAA,EAAc,CAAC,KAAM,IAAa,EACnC,kBAACC,GAAA,EAAK,CAAC,aAAa,KAAK,KAAK,MAAK,wDAEnC,CACF,EAEA,kBAAC,GAAc,CAAC,WAAAkT,CAAA,CAAwB,EAG5C,OACE,oCACE,kBAAC1S,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,kBAACiU,GAAA,EAAW,KACV,kBAACC,GAAA,EAAI,CAAC,UAAU,MAAK,YAAU,EAC/B,kBAACA,GAAA,EAAI,CAAC,UAAU,KAAI,8DAEpB,CACF,EACCnO,CACH,CACF,CAEJ,CAEAiO,GAAe,UAAY,CACzB,WAAY,IAAU,OAAO,WAC7B,WAAY,IAAU,KAAK,WAC3B,gBAAiB,IAAU,KAAK,UAClC,EAEA,SAAS,GAAgBtrB,EAAO,CAC9B,MAAO,CACL,WAAYA,EAAM,UAAU,WAC5B,WAAYA,EAAM,UAAU,UAC9B,CACF,CAEA,MAAM,GAAqB,CAAE,gBAAAmI,EAAgB,EAE9B,mBAAQ,GAAiB,EAAkB,EAAEmjB,EAAc,E,iCCnC1E,SAASG,GAAiB,CACxB,OAAAC,EACA,SAAAhU,EACA,eAAAzU,EACA,YAAA0W,EACA,UAAAgS,CACF,EAAG,CAED,KAAM,CAACC,EAAcC,CAAe,EAAI,IAAM,SAAS,CAAC,CAAC,EACnDC,EAAiB,CAACjqB,GAAKkqB,GAAc,KACrCF,EAAgBG,IAAgB,CAC9B,MAAMC,GAAoBD,GAAa,OAAOE,IAAKA,KAAMrqB,EAAG,EAC5D,OAAOkqB,GACD,CAAC,GAAGE,GAAmBpqB,EAAG,EAAIoqB,EACtC,CAAC,EACDE,EAAgBtqB,IAAO+pB,EAAa,SAAS/pB,EAAG,EAEtD,IAAIka,EAAkB,oBAClBpC,EAAY,WACdoC,EAAkB,0BAGpB,MAAMpE,EAAU,CACd,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,UAAU,EACzD,UAAW,UACX,eAAgB,CAAC,IAAS,EAC1B,eAAgB,CAAC,IAAU,CAC7B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAc,IAAC,EAAI,MAAM,SAAS,EAC9D,UAAW,SACX,eAAgB,CAAC,IAAS,CAC5B,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAU,IAAC,EAAI,MAAM,WAAW,EAC5D,UAAW,UACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,IAAQ,IAAC,EAAI,MAAM,OAAO,EACtD,UAAW,MACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAQ,IAAC,EAAI,MAAM,UAAU,EACzD,UAAW,UACX,WAAY,CAAC,OAAAgK,GAAA,GAAU,EAAE,CAAC,EAC1B,eAAgB,CAAC,IAAQ,CAC3B,CACF,EAEA,SAASyK,EAAqBlU,GAAMvY,GAAO,CACzC,MAAO,CACL,GAAIuY,GAAK,OACT,OAAQiU,EAAcjU,GAAK,MAAM,EACjC,MAAO,CACL,CACE,MAAOvY,GAAM,eAAe,QAC5B,eAAgB,SAClB,EACA,CACE,MAAOA,GAAM,eAAe,OAC5B,eAAgB,QAClB,EACA,CACE,MAAOA,GAAM,SACb,eAAgB,UAClB,EACA,CACE,MAAOA,GAAM,KACb,eAAgB,MAClB,EACA,CACE,MAAOA,GAAM,WACf,CACF,CACF,CACF,CAEA,SAAS0sB,EAA2BnU,GAAMvY,GAAO,CAC/C,MAAO,CACL,GAAIuY,GAAK,OACT,OAAQA,GAAK,OAAS,EACtB,MAAO,CACL,CACE,MAAO,kBAAC,OAAI,UAAW6D,CAAA,EAAkBpc,GAAM,KAAM,CACvD,CACF,CACF,CACF,CAEA,SAASqY,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,IAAIC,EAAO,CAAC,EACRR,GACFQ,EAAOF,EAAkB,EAMzBL,EAAQ,GAAG,UAAY,KAEvBO,EAAO,CAAC,EACRwT,EAAO,QAAQ/rB,IAAS,CACtBuY,EAAK,KAAKkU,EAAqBlU,EAAMvY,EAAK,CAAC,EAC3CuY,EAAK,KAAKmU,EAA2BnU,EAAMvY,EAAK,CAAC,CACnD,CAAC,GAGH,MAAM2sB,GAAkBtK,IAClBA,GAAQ,SAAW,OACd,CAAC,EAEIA,GAAQ,MAAM,OAAOqC,IACjCA,GAAK,cACP,EACa,IAAIA,KACR,CACL,MAAO,aAAaA,GAAK,mBAAmBA,GAAK,SACjD,QAAS,IAAM,CAACsH,EAAUtH,GAAK,eAAgBA,GAAK,KAAK,CAAC,CAC5D,EACD,EAGGkI,GAAgBC,IACpB,kBAACvE,GAAA,EAAc,CAAC,gBAAiB,KAAM,SAAUuE,GAAY,UAC3D,kBAAC,KAAU,CAAC,MAAM,+BAA8B,CAClD,EAGF,OACE,oCACE,kBAACrU,GAAA,EAAK,CACJ,aAAW,sBACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,eAAAoU,GACA,WAAY,CAACG,GAAQC,GAAUlI,KAAW,CACxCsH,EAAeY,GAAUlI,EAAM,CACjC,EACA,cAAe+H,EAAA,EAEf,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAAC7U,GAAYgU,EAAO,SAAW,GAC9B,kBAAC9U,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAgB,EACtC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,iBAAe,EACxC,kBAACsB,GAAA,EAAc,KAAC,yFAGhB,EACA,kBAAC6J,GAAA,EAA0B,KACzB,kBAACvc,GAAA,EAAM,CAAC,QAAQ,OAAO,QAASzC,CAAA,EAAgB,mBAEhD,CACF,CACF,CAEJ,CAEJ,CAEAwoB,GAAiB,UAAY,CAC3B,OAAQ,IAAU,MAAM,WACxB,SAAU,IAAU,KAAK,WACzB,eAAgB,IAAU,KAAK,WAC/B,YAAa,IAAU,OAAO,WAC9B,UAAW,IAAU,KAAK,UAC5B,EAEe,mBAASzrB,IAAW,CACjC,YAAaA,EAAM,WACrB,EAAE,EAAEyrB,EAAgB,E,goBChNpB,MAAM,WAAyB,WAAgB,CAW7C,YAAY5f,EAAO,CACjB,MAAM,EAqER,qBAActK,GAAY,CAOxB,KAAM,CAAE,UAAAd,CAAU,EAAI,KAAK,MACrByhB,EAAoB,CACxB,KAAM3gB,EAAQ,KAAK,OAAS,EAAIA,EAAQ,KAAO,CAAC,CAAE,EAClD,MAAOA,EAAQ,MAAM,OAAS,EAAIA,EAAQ,MAAQ,CAAC,EAAG,CACxD,EACM4gB,EAAW,SAAK5gB,CAAO,EAAK2gB,CAAiB,EAC7CzZ,EAAc,YAAgB0Z,CAAQ,EAC5C,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,EAIhC,YAAkB,KAAK,MAAM,OAAO,UAAW1Z,CAAW,EAAE,KAAM3I,GAAa,CAG7E,MAAMsiB,EAAiB3hB,IAElBX,EAAS,KAAK,OAASoiB,EAAkB,MAAM,GAC9C,SAASA,EAAkB,KAAK,EAAE,EAAIpiB,EAAS,KAAK,OACnD,KAAK,oBAAoByB,CAAO,GACvC,KAAK,SAAS,CACZ,OAAQzB,EAAS,KACjB,SAAU,GACV,UAAWsiB,CACb,CAAC,CACH,CAAC,CACH,CAAC,EAED,gCAAwB,CAACC,EAAWzV,IAE7BA,EAOE,CACL,QAAS,EACX,EARS,CACL,QAAS,GACT,QAAS,2BACX,CAMH,EAED,8BAAuBrL,GACD,OAAO,KAAKA,CAAO,EAChC,OAAQsjB,GAAOA,IAAM,QAAUA,IAAM,OAAQ,EAC7C,IAAKA,GAAMtjB,EAAQsjB,GAAG,MAAM,EAC5B,OAAO,CAACnI,EAAKiQ,IAAMjQ,EAAMiQ,EAAG,CAAC,EAClB,EACT,KAEL,KAAK,MAAM,mBAAqB,KAAK,MAAM,aAAa,mBAAqB,EACxE,KAAK,MAAM,aAAa,mBAE1B,IACR,EAED,oBAAY,CAAClgB,EAAU+M,IAAU,CAE/B,MAAMoT,EAAc,KAAK,MAAM,QAAQngB,GACjC9K,EAAa,SACd,KAAK,MAAM,OAAO,EADJ,CAEjB,CAAC8K,GAAWmgB,EAAY,SAASpT,CAAK,EAClCoT,EACA,CAAC,GAAGA,EAAapT,CAAK,CAC5B,CAAC,EACD,KAAK,mBAAmB7X,CAAU,CACpC,CAAC,EAED,6BAAsBA,GAAe,CACnC,KAAM,CAAE,SAAAN,EAAU,QAAAC,CAAQ,EAAI,KAAK,MAC7B,CAAE,QAAAC,EAAS,UAAAd,CAAU,EAAI,KAAK,MAEgB,EAAAc,EAA5C,MAAQ+gB,EAAI,MAASC,CApMjC,EAoMwD,EAAhBC,EAAA,GAAgB,EAAhB,CAA5B,OAAY,UACgC,EAAA7gB,EAA5C,MAAQ8gB,GAAI,MAASC,EArMjC,EAqMwD,EAAhBC,GAAA,GAAgB,EAAhB,CAA5B,OAAY,UAGdC,GAAY,mBAAQJ,EAAaG,EAAW,EAC5CE,GAAeD,GAAYjhB,EAAa,SAAKA,CAAU,EAAf,CAAiB,KAAM,CAAC,CAAE,CAAE,CAAC,EAK3E,YAAkBkhB,GAAcxhB,EAAUC,CAAO,EACjD,MAAMwhB,GAAW,CACf,QAASD,GAET,UAAWD,GAAYniB,EAAY,KAAK,oBAAoBkiB,EAAW,CACzE,EACKC,KACHE,GAAS,YAAc,GAEzB,KAAK,SACHA,GACA,IAAM,CACJ,KAAK,WAAWD,EAAY,CAC9B,CAAC,CACL,CAAC,EAED,6BAAqB,IAAM,CAEzB,MAAMthB,EAAU,KAAK,iBAAiB,OAAO,CAACiL,EAAYC,KACxDD,EAAWC,EAAS,KAAO,CAAC,EACrBD,GACN,CAAC,CAAC,EACL,KAAK,mBAAmBjL,CAAO,CACjC,CAAC,EAED,8BAAsB,CAACoU,EAAOoN,IAAY,CACxC,KAAM,CAAE,QAAAxhB,CAAQ,EAAI,KAAK,MACzB,KAAK,SAAS,CAAE,eAAgBwhB,CAAQ,CAAC,EACzC,MAAMphB,EAAa,SAAKJ,CAAO,EAAZ,CAAc,MAAO,CAACwhB,CAAQ,CAAE,CAAC,EACpD,KAAK,mBAAmBphB,CAAU,CACpC,CAAC,EAED,wBAAgB,CAACgU,EAAOqN,IAAe,CACrC,KAAM,CAAE,QAAAzhB,EAAS,eAAA0hB,CAAe,EAAI,KAAK,MACzC,KAAK,SAAS,CAAE,YAAaD,CAAW,CAAC,EACzC,IAAIE,EAASD,GAAkBD,EAAa,GAC5C,MAAMrhB,EAAa,SAAKJ,CAAO,EAAZ,CAAc,KAAM,CAAC2hB,CAAO,CAAE,CAAC,EAClD,KAAK,mBAAmBvhB,CAAU,CACpC,CAAC,EAlMC,KAAK,iBAAmB,CACtB,CACE,IAAK,UACL,MAAO,UACP,YAAa,uBACb,KAAM,QACR,EACA,CACE,IAAK,SACL,MAAO,SACP,YAAa,sBACb,KAAM,QACR,EACA,CACE,IAAK,WACL,MAAO,WACP,YAAa,wBACb,KAAM,QACR,EACA,CACE,IAAK,OACL,MAAO,OACP,YAAa,oBACb,KAAM,QACR,CACF,EAEA,MAAMwgB,EAAW,YAAkBtW,EAAM,SAAU,KAAK,gBAAgB,EAClEkX,EAAUZ,EAAS,MAAM,GAC3B,SAASA,EAAS,MAAM,EAAE,EAC1B,GACEgB,EAAchB,EAAS,KAAK,GAC9B,KAAK,MAAM,SAASA,EAAS,KAAK,GAAKY,CAAO,CAAC,EAAI,EACnD,EACJ,KAAK,MAAQ,CACX,OAAQ,CAAC,EACT,SAAU,GACV,QAASZ,EACT,eAAgBY,EAChB,YAAAI,EACA,UAAW,IACb,CACF,CAEA,mBAAqB,CACnB,SAAS,MAAQ,4BACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,KAAK,MAAM,OAAO,CAEtC,CAEA,mBAAoB1M,EAAW,CAO7B,IALE,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC5C,KAAK,MAAM,WAAaA,EAAU,WAElC,KAAK,WAAW,KAAK,MAAM,OAAO,EAEhC,KAAK,MAAM,YAAc,MAAQ,KAAK,MAAM,kBAAmB,CACjE,MAAMoW,EAAe,KAAK,oBAAoB,KAAK,MAAM,OAAO,EAC5DA,IAAiB,MACnB,KAAK,SAAS,CACZ,UAAWA,CACb,CAAC,CAEL,CACF,CAkIA,QAAU,CACR,KAAM,CAAE,QAAAvrB,CAAQ,EAAI,KAAK,MACnB,CAAE,OAAAoqB,EAAQ,SAAAhU,EAAU,QAAAnW,EAAS,eAAA0hB,EAAgB,YAAAE,EAAa,UAAA1iB,CAAU,EAAI,KAAK,MAEnF,OACE,gBAAC6W,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC,OAAI,UAAU,cAGb,gBAAC,KAAE,UAAU,UAAU,QAAS,IAAM,CAAC,KAAK,WAAW/V,CAAO,CAAC,GAC7D,gBAAC,KAAI,CAAC,KAAK,KAAK,KAAK,UAAU,EAAE,kBACnC,CACF,EACA,gBAAC6hB,EAAA,EAAa,CACZ,iBAAkB,KAAK,iBACvB,eAAgB,KAAK,mBACrB,QAAA7hB,EACA,sBAAuB,KAAK,sBAC9B,EACA,gBAAC8hB,EAAA,EAAU,CACT,eAAgB,CAAC,CAAE,WAAAC,EAAY,UAAAC,EAAW,UAAA9iB,CAAU,IAClD,gBAAC,gBACC,gBAAC,SACE6iB,EAAW,MAAIC,CAClB,EAAI,eAIJ,gBAAC,SAAG9iB,IAAc,KAAOA,EAAY,MAAO,CAC9C,EAEF,UAAAA,EACA,QAASwiB,EACT,KAAME,EACN,SAAS,kBACT,gBAAiB,KAAK,oBACtB,UAAW,KAAK,cAChB,UAAS,GACX,EACA,gBAAC,GAAgB,CACf,OAAAuI,EACA,SAAAhU,EACA,eAAgB,KAAK,mBACrB,UAAW,KAAK,UAChB,QAAApW,CAAA,CACF,CACF,CAEJ,CACF,CAjQE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,YAAa,IAAU,OACvB,aAAc,IAAU,OACxB,kBAAmB,IAAU,KAC7B,QAAS,IAAU,OACnB,SAAU,IAAU,OACpB,SAAU,IAAU,MACtB,CAAC,EA2PY,mBAAQtB,IAAU,CAC/B,OAAQA,EAAM,OACd,YAAaA,EAAM,YACnB,aAAcA,EAAM,aAAa,cACjC,kBAAmBA,EAAM,aAAa,KACxC,EAAE,EAAE,EAAgB,E,+DC5QpB,SAAS8sB,GAAiBjhB,EAAO,CAC/B,KAAM,CAAE,OAAArM,EAAQ,uBAAAutB,CAAuB,EAAIlhB,EAE3C,oBAAU,IAAM,CACdkhB,EAAuBvtB,CAAM,CAC/B,EAAG,CAACutB,EAAwBvtB,CAAM,CAAC,EAEnC,MAAMwtB,EAAkBnhB,EAAM,UAAU,UAAUrM,EAAO,MACnDwC,EAAYgrB,EAAkBA,EAAgB,IAAI9qB,IAAcA,GAAE,IAAM,EAAI,CAAC,EAE7E,CAAC+qB,EAAgBC,CAAiB,EAAI,mBAAS,EAAK,EACpD,CAACC,EAAiBC,CAAkB,EAAI,mBAASvhB,EAAM,iBAAmB,EAAE,EAC5E,CAACwhB,EAAgBC,CAAiB,EAAI,mBAASzhB,EAAM,gBAAkB,EAAE,EACzE,CAAC0hB,EAAeC,CAAgB,EAAI,mBAAS3hB,EAAM,eAAiB,EAAE,EACtE,CAAC4hB,EAAYC,CAAa,EAAI,mBAAS7hB,EAAM,YAAc,EAAE,EAE/D,CAACshB,GAAmBnrB,EAAU,QAEhCorB,EAAmBprB,EAAU,EAAE,EAGjC,SAAS2rB,GAAqBhY,GAAO,CACnCyX,EAAmBzX,GAAM,OAAO,SAAS,EACzCuX,EAAkB,EAAK,CACzB,CAEA,SAASU,GAAqBpJ,GAAQ,CACpC0I,EAAkB1I,EAAM,CAC1B,CAEA,SAASqJ,GAAoBC,GAAU,CACrCR,EAAkBQ,EAAQ,CAC5B,CAEA,SAASC,GAAmBD,GAAU,CACpCN,EAAiBM,EAAQ,CAC3B,CAEA,SAASE,GAAgBF,GAAU,CACjCJ,EAAcI,EAAQ,CACxB,CAEA,SAASG,GAAgBtY,GAAO,CAE1BA,GAAM,KAAOA,GAAM,MAAQ,SAK3B,CAAC4X,GAAiB,CAACF,GAAkB,CAACI,GAK1C5hB,EAAM,SAASshB,EAAiBE,EAAgBE,EAAeE,CAAU,CAC3E,CAEA,SAASS,IAA0B,CACjC,OAAO,oCACL,kBAACC,GAAA,EAAO,CAAC,gCAAgC,MACvC,kBAACC,GAAA,EAAc,KACb,kBAACC,GAAA,EAAkB,CAAC,WAAW,MAC7B,kBAACC,GAAA,EAAY,CAAC,QAAQ,gBAEpB,kBAACC,GAAA,EAAW,CAAC,IAAI,YACf,kBAACvG,GAAA,EAAQ,CACP,SAAU2F,GACV,SAAU,KAAiB,KAC3B,OACE,kBAAC1F,GAAA,EAAc,CACb,SAAU2F,GACV,MAAO,CAAE,MAAO,MAAO,GACxB,aACYT,CACb,EAEF,OAAQF,EACR,cAAejrB,EAAU,IAAKzB,IAC5B,kBAAC4nB,GAAA,EAAY,CAAC,IAAK5nB,EAAA,EAAWA,EAAS,CACxC,EACD,MAAO,CAAE,MAAO,MAAO,EACvB,aAAc,SAAS,KACzB,CACF,EAEA,kBAACguB,GAAA,EAAW,CAAC,IAAI,WACf,kBAAChV,GAAA,EAAS,CACR,KAAK,UACL,GAAG,gBACH,KAAK,SACL,YAAY,UACZ,aAAc1N,EAAM,eACpB,SAAUgiB,GACV,UAAYlY,IAAUsY,GAAgBtY,EAAK,EAC7C,CACF,EAEA,kBAAC4Y,GAAA,EAAW,CAAC,IAAI,UACf,kBAAChV,GAAA,EAAS,CACR,KAAK,SACL,GAAG,eACH,KAAK,SACL,YAAY,SACZ,aAAc1N,EAAM,cACpB,SAAUkiB,GACV,UAAYpY,IAAUsY,GAAgBtY,EAAK,EAC7C,CACF,EAEA,kBAAC4Y,GAAA,EAAW,CAAC,IAAI,OACf,kBAAChV,GAAA,EAAS,CACR,KAAK,MACL,GAAG,YACH,KAAK,SACL,YAAY,MACZ,aAAc1N,EAAM,WACpB,SAAUmiB,GACV,UAAYrY,IAAUsY,GAAgBtY,EAAK,EAC7C,CACF,EAEA,kBAAC4Y,GAAA,EAAW,CAAC,IAAI,UACf,kBAAC7oB,GAAA,EAAM,CACL,QAAUiQ,IAAUsY,GAAgBtY,EAAK,GAC1C,YAED,CACF,CAEF,CACF,CACF,CACF,CACF,CACF,CAEA,OACE,kBAAC,WACEuY,GAAuB,CAC1B,CAEJ,CAEApB,GAAiB,UAAY,CAC3B,uBAAwB,IAAU,KAClC,OAAQ,IAAU,OAClB,UAAW,IAAU,OACrB,SAAU,IAAU,KAAK,WACzB,gBAAiB,IAAU,OAC3B,eAAgB,IAAU,OAC1B,cAAe,IAAU,OACzB,WAAY,IAAU,MACxB,EAEA,SAAS,GAAgB9sB,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,UAAWA,EAAM,SACnB,CACF,CAEA,MAAM,GAAqB,CACzB,2BACF,EAEe,mBAAQ,GAAiB,EAAkB,EAAE8sB,EAAgB,E,UC1K5E,SAAS0B,GAAc3iB,EAAO,CAC5B,KAAM,CAAE,OAAArM,EAAQ,uBAAAqT,CAAuB,EAAIhH,EAErC,CAACshB,EAAiBC,CAAkB,EAAI,mBAAS,EACjD,CAACC,EAAgBC,CAAiB,EAAI,mBAAS,EAC/C,CAACC,EAAeC,CAAgB,EAAI,mBAAS,EAC7C,CAACC,EAAYC,CAAa,EAAI,mBAAS,EACvCpsB,EAAU,YAAW,EACrBD,EAAW,YAAY,EAE7B,GAAI,CAACksB,EAAe,CAClB,MAAM9N,GAAY,IAAI,gBAAgBpe,EAAS,MAAM,EAC/Cd,GAAWkf,GAAU,IAAI,UAAU,EACnCpN,GAAUoN,GAAU,IAAI,SAAS,EACjCnN,GAASmN,GAAU,IAAI,QAAQ,EAC/BpU,GAAMoU,GAAU,IAAI,KAAK,EAC3Blf,IAAY+R,IAAUD,IAAWhH,KACnC+hB,EAAmB7sB,EAAQ,EAC3B+sB,EAAkBjb,EAAO,EACzBmb,EAAiBlb,EAAM,EACvBob,EAAcriB,EAAG,EAErB,CAEA,oBAAU,IAAM,CACd,SAAS,MAAQ,kBACb8hB,GAAmBE,GAAkBE,GAAiBE,GACxD5a,EAAuBrT,EAAQ2tB,EAAiBE,EACzBE,EAAeE,CAAU,CAEpD,EAAG,CAAC5a,EAAwBrT,EAAQ2tB,EAAiBE,EACjDE,EAAeE,CAAU,CAAC,EAE9B,SAASgB,EAASluB,GAAU8R,GAASC,GAAQjH,GAAK,CAChD+hB,EAAmB7sB,EAAQ,EAC3B+sB,EAAkBjb,EAAO,EACzBmb,EAAiBlb,EAAM,EACvBob,EAAcriB,EAAG,EAEjB,MAAMqjB,GAAe,IAAI,gBAAgB,EAAE,EAC3CA,GAAa,OAAO,WAAYnuB,EAAQ,EACxCmuB,GAAa,OAAO,UAAWrc,EAAO,EACtCqc,GAAa,OAAO,SAAUpc,EAAM,EACpCoc,GAAa,OAAO,MAAOrjB,EAAG,EAC9B/J,EAAQ,KAAK,CACX,SAAUD,EAAS,SACnB,OAAQqtB,GAAa,SAAS,CAChC,CAAC,EAEGvB,GAAmBE,GAAkBE,GAAiBE,GACxD5a,EAAuBrT,EAAQ2tB,EAAiBE,EACzBE,EAAeE,CAAU,CAEpD,CAEA,MAAMkB,EAAa9iB,EAAM,UAAU,WAAWrM,EAAO,MAC/CgT,GAAe,aAAiB2a,EACAE,EACAE,EACAE,CAAU,EAC1CpiB,GAAMsjB,EAAaA,EAAWnc,IAAgB,OACpD,SAASoc,IAAkB,CACzB,OACE,kBAAC,QAAK,MAAO,CAAC,WAAY,UAAU,GAClC,kBAAC,KAAS,CACR,IAAKvjB,GACL,KAAM,KACN,UAAW,GACX,SAAU,GACV,gBAAiB,GACjB,iBAAkB,GAClB,MAAOQ,EAAM,YAAY,SAAW,WAAa,cAAc,CACnE,CAEJ,CAEA,OACE,oCACE,kBAACyL,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,kBAACiU,GAAA,EAAW,KACV,kBAACC,GAAA,EAAI,CAAC,UAAU,MAAK,YAAU,EAC/B,kBAACA,GAAA,EAAI,CAAC,UAAU,KAAI,8CAElB,kBAAC,SAAE,SAAO,EAAI,QAAK,kBAAC,SAAE,KAAG,EAAI,mLAK/B,CACF,EACA,kBAAC,GAAgB,CACf,SAAAiD,EACA,gBAAiBtB,EACjB,eAAgBE,EAChB,cAAeE,EACf,WAAYE,CAAA,CACd,EACCpiB,IAAOujB,GAAgBvjB,EAAG,CAC7B,CACF,CAEJ,CAEAmjB,GAAc,UAAY,CACxB,uBAAwB,IAAU,KAClC,OAAQ,IAAU,OAClB,UAAW,IAAU,OACrB,YAAa,IAAU,MACzB,EAEA,SAAS,GAAgBxuB,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,UAAWA,EAAM,UACjB,YAAaA,EAAM,WACrB,CACF,CAEA,MAAM,GAAqB,CACzB,2BACF,EAEe,mBAAQ,GAAiB,EAAkB,EAAEwuB,EAAa,E,2VCrIzE,MAAM,WAAsB,IAAM,SAAU,CAM1C,QAAS,CACP,KAAM,CAAE,QAAAK,EAAS,WAAAC,CAAW,EAAI,KAAK,MACrC,OACE,kBAAC,YACED,EAAQ,QACRC,GAAcD,EAAQ,SAAW,UAClC,KAAOA,EAAQ,OAAS,IAAI,KACzBA,EAAQ,IACb,CAEJ,CACF,CAhBE,GADI,GACG,YAAY,CACjB,QAAS,IAAU,OAAO,WAC1B,WAAY,IAAU,IACxB,CAAC,EAeY,U,kMCVf,MAAM,WAAgB,WAAgB,CAKpC,YAAYhjB,EAAO,CACjB,MAAMA,CAAK,EAEX,KAAK,MAAQ,CAAE,YAAa,CAAC,CAAE,EAG/B,KAAK,SAAW,CAAC8J,EAAOoZ,IAAiB,CACvC,KAAK,SAAS,CAKZ,YAAa,CAAC,CAChB,CAAC,CACH,CACF,CAEA,QAAU,CACR,KAAM,CAAE,QAAAC,CAAQ,EAAI,KAAK,MAEnB,CAAE,YAAAC,CAAY,EAAI,KAAK,MAEvBjZ,EAAQ,CAAC,EACfgZ,EAAQ,MAAM,QAAS7Y,GAAS,CAC9BH,EAAM,KACJ,CACE,KACE,gBAACuB,GAAA,EAAI,CAAC,QAAO,IACX,gBAACF,GAAA,EAAQ,CAAC,KAAM,gBAAC,KAAO,IAAC,GAAKlB,EAAK,IAAK,EACxC,gBAACkB,GAAA,EAAQ,CAAC,KAAM,gBAAC,KAAU,IAAC,GAAKlB,EAAK,KAAM,CAC9C,EACF,GAAIA,EAAK,KAAOA,EAAK,KACvB,CACF,CACF,CAAC,EACD,MAAM+Y,EAAS,CAAC,EAChBF,EAAQ,OAAO,QAASG,GAAU,CAChC,IAAIC,EAAiB,CAAC,EACtBD,EAAM,MAAM,QAASE,GAAe,CAClCD,EAAe,KACb,CACE,KACE,gBAAC7X,GAAA,EAAI,CAAC,QAAO,IACX,gBAACF,GAAA,EAAQ,CAAC,KAAM,gBAAC,KAAO,IAAC,GAAKgY,CAAW,CAC3C,EAEF,GAAIA,CACN,CACF,CAAC,CAAC,EACJH,EAAO,KACL,CACE,KAAMC,EAAM,KACZ,GAAIA,EAAM,KACV,SAAUC,CACZ,CACF,CACF,CAAC,EACD,MAAME,EAAU,CACd,CACE,KAAM,WAAaN,EAAQ,KAC3B,GAAI,QACJ,SAAUhZ,CACZ,EACA,CACE,KAAM,cACN,GAAI,SACJ,SAAUkZ,CACZ,CACF,EAEA,OACE,gBAAC,gBACC,gBAAC,KAAQ,CAAC,KAAMI,EAAS,YAAAL,EAA0B,SAAU,KAAK,SAAU,CAC9E,CAEJ,CACF,CAhFE,GADI,GACG,YAAY,CACjB,QAAS,IAAU,OAAO,UAC5B,CAAC,EAgFY,U,iKC5Ff,MAAM,WAAa,IAAM,SAAU,CAKjC,QAAS,CACP,KAAM,CAAE,KAAAM,CAAK,EAAI,KAAK,MACtB,OACE,kBAAC,YACEA,EAAK,YAAY,KAAGA,EAAK,uBAAuB,GACnD,CAEJ,CACF,CAZE,GADI,GACG,YAAY,CACjB,KAAM,IAAU,OAAO,UACzB,CAAC,EAYY,U,iKCff,MAAM,WAAmB,IAAM,SAAU,CAKvC,QAAS,CACP,KAAM,CAAE,QAAAld,CAAQ,EAAI,KAAK,MACzB,OACE,kBAAC,YACEA,EAAQ,aACRA,EAAQ,iBACP,uBAAyBA,EAAQ,gBAAkB,IACpDA,EAAQ,mBACP,yBAA2BA,EAAQ,kBAAmB,GAC1D,CAEJ,CACF,CAhBE,GADI,GACG,YAAY,CACjB,QAAS,IAAU,OAAO,UAC5B,CAAC,EAgBY,U,uLCDf,MAAM,WAA2B,WAAgB,CAK/C,YAAYxG,EAAO,CACjB,MAAMA,CAAK,EAEX,KAAK,MAAQ,CACX,WAAY,EACd,EAEA,KAAK,SAAW,IAAM,CACpB,KAAK,SAAS,CACZ,WAAY,CAAC,KAAK,MAAM,UAC1B,CAAC,CACH,CACF,CAEA,QAAS,CACP,OAAK,KAAK,MAAM,YAKd,gBAAC,gBACC,gBAAC1F,GAAA,EAAI,CAAC,UAAW,CAAC,WAAW,EAAG,WAAY,KAAK,MAAM,YACrD,gBAACC,GAAA,EAAU,CAAC,SAAW,KAAK,UAC1B,gBAACC,GAAA,EAAS,KAAC,iBAAe,CAC5B,EACA,gBAACmpB,GAAA,EAAqB,KACpB,gBAAChpB,GAAA,EAAQ,CAAC,MAAO,CAAC,WAAY,UAAU,GACvC,KAAK,MAAM,WACZ,CACF,CACF,CACF,EAfO,IAiBX,CAEF,CAvCE,GADI,GACG,YAAY,CACjB,YAAa,IAAU,MACzB,CAAC,EAuCY,U,iKCpBf,SAASipB,GAAa,CAAE,aAAAC,CAAa,EAAG,CACtC,OACE,gBAAC,YACC,gBAAC,QAAK,MAAO,CAAE,WAAY,YAAa,GACrCA,EAAa,KAChB,EAEEA,EAAa,OACT,gBAACnV,GAAA,EAAK,CACN,UAAS,GACT,MAAM,OACN,MAAO,CAAE,WAAY,8BAA+B,GACrD,SAED,EACE,EAER,CAEJ,CAEAkV,GAAa,UAAY,CACvB,aAAc,IAAU,OAAO,UACjC,EAEA,MAAM,WAAmB,WAAgB,CAQvC,aAAcE,EAAS,CACrB,MAAM/sB,EAAS,CAAC,CACd,KAAM+sB,EAAQ,OAAS,gBAAC,KAAa,IAAC,EAAK,gBAAC,KAAgB,IAAC,EAC7D,KAAMA,EAAQ,OAAS,SAAW,YACpC,CAAC,EACD,OAAIA,EAAQ,UACV/sB,EAAO,KAAK,CACV,KAAM,gBAAC,KAAkB,IAAC,EAC1B,KAAM,UACR,CAAC,EAEC+sB,EAAQ,OACV/sB,EAAO,KAAK,CACV,KAAM,gBAAC,KAAkB,IAAC,EAC1B,KAAM,OACR,CAAC,EAEC+sB,EAAQ,aACV/sB,EAAO,KAAK,CACV,KAAM,gBAAC,KAAU,IAAC,EAClB,KAAM,aACR,CAAC,EAEC+sB,EAAQ,WACV/sB,EAAO,KAAK,CACV,KAAM,gBAAC,KAAU,IAAC,EAClB,KAAM,WACR,CAAC,EAID,gBAAC2U,GAAA,EAAI,CAAC,SAAS,QAAQ,QAASA,GAAA,EAAY,QACzC3U,EAAO,IAAI,CAACmC,EAAMlD,IACjB,gBAACwV,GAAA,EAAQ,CAAC,IAAKxV,EAAK,KAAMkD,EAAK,MAAOA,EAAK,IAAK,CACjD,CACH,CAEJ,CAEA,QAAU,CACR,KAAM,CAAE,OAAAvF,EAAQ,QAAAmwB,CAAQ,EAAI,KAAK,MAC3BzX,EAAO,CAAC,EAQd,MANiB,CACf,iBAAkB,SAAU,SAC5B,SAAU,WAAY,UAAW,aACjC,UAAW,uBAAwB,YACnC,mBACF,EACS,QAAQvK,GAAO,CACtB,IAAIiiB,EAAQjiB,EACRkiB,EAAaliB,EACb6L,EAAQmW,EAAQhiB,GAEhBiiB,IAAU,kBAAoBpW,IAChCA,EACE,gBAAC,GAAa,CACZ,QAASmW,EAAQ,eACjB,WAAY,GAAK,EAErBE,EAAc,gBAAC,YAAK,gBAAC,KAAW,IAAC,EAAE,aAAW,GAE5CD,IAAU,WACZpW,EACE,gBAAC,IAAI,CAAC,GAAI,KAAK,MAAM,OAAO,WAAa,oBAAsBmW,EAAQ,MACrE,gBAAC,KAAmB,IAAC,EAAE,OAAOA,EAAQ,IACxC,EAEFE,EAAc,gBAAC,YAAK,gBAAC,KAAW,MAAE,gBAAc,GAE9CD,IAAU,WACZpW,EAAQ,KAAK,aAAamW,CAAO,EACjCE,EAAc,gBAAC,YAAK,gBAAC,KAAQ,MAAE,YAAU,GAGtCrW,IAIDoW,IAAU,aACZC,EAAc,gBAAC,YAAK,gBAAC,KAAQ,MAAE,iBAAe,GAG5CD,IAAU,YACZpW,EAAS,gBAAC,YAAMA,EAAM,UAAQ,EAC9BqW,EAAc,gBAAC,YAAK,gBAAC,KAAiB,IAAC,EAAE,UAAQ,GAG/CD,IAAU,eACRpW,EAAM,SAAW,EACnBA,EAAS,gBAAC,SAAE,MAAI,EAEhBA,EACE,gBAAC,QAAK,MAAO,CAAC,WAAY,UAAU,GAClC,gBAAC,KAAS,CACR,IAAKA,EACL,KAAM,KACN,UAAW,GACX,SAAU,GACV,gBAAiB,GACjB,iBAAkB,GAClB,MAAO,KAAK,MAAM,YAAY,SAAW,WAAa,cAAc,CACxE,EAGJqW,EAAc,gBAAC,YAAK,gBAAC,KAAQ,IAAC,EAAE,aAAW,GAGzCD,IAAU,YACZpW,EACE,gBAAC,GAAO,CAAC,QAASA,CAAA,CAAO,EAE3BqW,EAAc,gBAAC,YAAK,gBAAC,KAAW,IAAC,EAAE,iBAAe,GAEhDD,IAAU,yBACZpW,EAAQA,EAAM,IAAI,CAACsW,EAAKjuB,IACd,gCACIA,EAAM,EAAI,gBAAC,YAAK,IAAE,EAAQ,+BAAE,EAC9B,gBAAC,GAAO,CAAC,QAASiuB,CAAA,CAAK,CACzB,CACT,EACDD,EAAc,gBAAC,YAAK,gBAAC,KAAW,IAAC,EAAE,iBAAe,GAEhDD,IAAU,WACZpW,EACE,gBAAC,IAAI,CAAC,GAAIha,EAAO,WAAa,QAAUga,CAAA,EACtC,gBAAC,KAAmB,IAAC,EAAE,OAAOA,CAChC,EAEFqW,EAAc,gBAAC,YAAK,gBAAC,KAAc,IAAC,EAAE,SAAO,GAE3CD,IAAU,cACZpW,EACE,gBAAC,QAAK,MAAO,CAAC,WAAY,UAAU,GAClC,gBAAC,KAAS,CACR,IAAKA,EACL,KAAM,KACN,UAAW,GACX,SAAU,GACV,gBAAiB,GACjB,iBAAkB,GAClB,MAAO,KAAK,MAAM,YAAY,SAAW,WAAa,cAAc,CACxE,EAEFqW,EAAc,gBAAC,YAAK,gBAAC,IAAQ,IAAC,EAAE,gBAAc,GAG5CD,IAAU,gBACZpW,EACE,gBAAC,OAAI,MAAO,CAAC,WAAY,UAAU,GAChCA,CACH,EAEFqW,EAAc,gBAAC,YAAK,gBAAC,KAAW,IAAC,EAAE,cAAY,GAGjD3X,EAAK,KAAK,CAAC,MAAO2X,EAAY,MAAArW,CAAY,CAAC,EAE7C,CAAC,EACoB,CACnB,oBAAqB,eAAgB,QAAS,mBAAoB,OACpE,EACa,QAAQ7L,GAAO,CAC1B,IAAIiiB,EAAQjiB,EACRkiB,EAAaliB,EACbgO,EAASgU,EAAQhiB,GAErB,GAAIgO,EAAO,SAAW,EACpB,OAEF,MAAMoU,EACJ,gBAACxY,GAAA,EAAI,CAAC,QAAO,IACVoE,EAAO,IAAI,CAACnC,EAAO3X,IAAQ,CAC1B,IAAIkD,EACJ,OAAI6qB,IAAU,qBACZC,EAAa,oBACb9qB,EAAO,gBAAC,GAAU,CAAC,QAASyU,CAAA,CAAO,GAC1BoW,IAAU,SACnBC,EAAc,gBAAC,YAAK,gBAAC,KAAgB,IAAC,EAAE,kBAAgB,EACxD9qB,EAAO,gBAAC,GAAI,CAAC,KAAMyU,CAAA,CAAO,GACjBoW,IAAU,gBACnBC,EAAc,gBAAC,YAAK,gBAAC,KAAU,IAAC,EAAE,mBAAiB,EAC/CrW,EAAM,KACRzU,EAAOyU,EAAM,KAAU,UAEvBzU,EAAOyU,EAAM,MAENoW,IAAU,oBACnBC,EAAc,gBAAC,YAAK,gBAAC,KAAO,IAAC,EAAE,4BAA0B,EACzD9qB,EAAO,gBAAC0qB,GAAA,CAAa,aAAcjW,CAAA,CAAO,GACjCoW,IAAU,SACnBC,EAAc,gBAAC,YAAK,gBAAC,KAAkB,IAAC,EAAE,gBAAc,EACxD9qB,EAAO,gBAAC0qB,GAAA,CAAa,aAAcjW,CAAA,CAAO,GAE1CzU,EAAOyU,EAGP,gBAACnC,GAAA,EAAQ,CAAC,IAAKxV,EAAK,MAAO,CAAC,OAAO,CAAC,GACjCkD,CACH,CAEJ,CAAC,CACH,EAEFmT,EAAK,KAAK,CAAC,MAAO2X,EAAY,MAAOE,CAAK,CAAC,CAC7C,CAAC,EAEE,gBAAC,gBACC,gBAAC,GAAkB,CAAC,YAAaJ,EAAQ,YAAY,EACrD,gBAACK,GAAA,EAAe,CAAC,aAAY,GACZ,MAAO,CAAC,kCAAmC,QAAQ,EACnD,UAAU,aACzB9X,EAAK,IAAI,CAACnT,EAAMlD,IACf,gBAACouB,GAAA,EAAoB,CAAC,IAAKpuB,CAAA,EACzB,gBAACquB,GAAA,EAAmB,KACjBnrB,EAAK,KACR,EACA,gBAACorB,GAAA,EAA0B,KACxBprB,EAAK,KACR,CACF,CACD,CACH,CACF,CAEJ,CACF,CAzOE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,OAAQ,IAAU,OAClB,QAAS,IAAU,OAAO,WAC1B,YAAa,IAAU,MACzB,CAAC,EAsOY,mBAAQ/E,IAAU,CAC/B,OAAQA,EAAM,OACd,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAU,E,iKCzSd,MAAM,WAAY,WAAgB,CAAlC,kCAKE,gBAAQ,CACN,cAAe,CACjB,CAAC,CAAD,CAEA,mBAAoB2vB,EAAS,CAC3B,IAAI7jB,EAAQ6jB,EAAQ,oBACpB,OAAK7jB,IACHA,EAAQ,GAKJ6jB,EAAQ,SAAS,SAAW,EAC9B7jB,EAAQ6jB,EAAQ,eAAe,OAE/BA,EAAQ,SAAS,QAAS5qB,GAAS,CAC7B+G,IACFA,GAAS,MAEXA,GAAS/G,CACX,CAAC,GAGE+G,CACT,CAEA,eAAiBwU,EAAW,CAC1B,KAAK,SAAS,CACZ,aAAcA,CAChB,CAAC,CACH,CAEA,QAAU,CACR,KAAM,CAAE,IAAAjV,CAAI,EAAI,KAAK,MACf,CAAE,aAAA+kB,CAAa,EAAI,KAAK,MAE9B,OACE,gBAAC,gBACC,gBAACtZ,GAAA,EAAK,CAAC,aAAa,MAAK,mBACP,gBAAC,QAAK,MAAO,CAAC,MAAO,sCAAsC,GAAIzL,EAAI,GAAG,IAAK,CAC7F,EACA,gBAAC4V,GAAA,EAAI,CAAC,UAAWmP,EACX,SAAU,CAACza,EAAO2K,IAAa,KAAK,eAAeA,CAAQ,EAC3D,MAAK,IACRjV,EAAI,IAAI,CAACskB,EAAS9tB,IACjB,gBAACqf,GAAA,EAAG,CAAC,SAAUrf,EAAK,IAAKA,EACpB,MAAO,gBAACuf,GAAA,EAAY,KAAE,KAAK,mBAAmBuO,CAAO,CAAE,GAC1D,gBAAC,GAAU,CACT,QAAStkB,EAAIxJ,GACb,OAAQ,KACV,CACF,CACD,CACH,CACF,CAEJ,CACF,CA7DE,GADI,GACG,YAAY,CACjB,IAAK,IAAU,MAAM,UACvB,CAAC,EA6DY,U,2KClEf,MAAM,WAAgB,WAAgB,CAAtC,kCASE,qBAAcoO,GAAU,CACtB,KAAK,MAAM,SAAS,aAClB,KAAK,MAAM,OAAQ,KAAK,MAAM,MAAM,OAAO,QAASA,CAAK,CAAC,CAC9D,CAAC,CAAD,CAEA,mBAAqB,CACnB,SAAS,MAAQ,cAAgB,KAAK,MAAM,MAAM,OAAO,QACrD,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAoBwG,EAAW,EACzB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC7C,KAAK,MAAM,MAAM,OAAO,UAAYA,EAAU,MAAM,OAAO,UAC5D,KAAK,WAAW,CAEpB,CAEA,QAAU,CACR,KAAM,CAAE,WAAAgD,CAAW,EAAI,KAAK,MACtBkV,EAAalV,EAAW,KAAK,KAAK,MAAM,OAAO,MAC/CxQ,EAAU,KAAK,MAAM,MAAM,OAAO,QACxC,OACE,gBAACqO,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAUA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACnGqX,GAAcA,EAAW1lB,IAAY,gBAAC,GAAG,CAAC,IAAK0lB,EAAW1lB,EAAA,CAAU,CACvE,CAEJ,CACF,CArCE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,OAAO,WACxB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,KACpB,YAAa,IAAU,MACzB,CAAC,EAiCY,mBAAQjJ,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,IAClB,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAO,E,kOCtCX,MAAM,WAAiB,WAAgB,CAAvC,kCAME,gBAAQ,CACN,OAAQ,KACR,QAAS,EACX,CAAC,EAED,yBAAkBoE,GAAM,CAClBA,EAAE,WAAa,KACjB,KAAK,SAAS,CAAC,OAAQA,EAAE,OAAO,KAAK,CAAC,EACtCA,EAAE,eAAe,EACjBA,EAAE,OAAO,KAAK,EAElB,CAAC,CAAD,CAEA,QAAU,CACR,KAAM,CAAE,KAAAilB,CAAK,EAAI,KAAK,MAChB,CAAE,OAAAvc,EAAQ,QAAAujB,CAAQ,EAAI,KAAK,MAE3BC,EAAa,KAAK,MAAM,OAAO,WAAa,QAG5CC,EAAS,CAAC,EAEVva,EAAQ,CAAC,EAETwa,EAAU,CAAC,EAEXC,EAAa,CAACplB,EAAKqlB,KAAW,CAClC,KACE,gBAAC,gBACC,gBAAC,IAAI,CAAC,GAAIJ,EAAa,mBAAmBjlB,EAAI,IAAI,GAAIA,EAAI,IAAK,EAC9DqlB,GAAU,gBAAC,YAAK,KAAGA,EAAM,GAAC,EAC1BrlB,EAAI,aACH,gBAAC,QAAK,MAAO,CAAC,WAAY,MAAM,GAAIA,EAAI,WAAY,EAErDA,EAAI,MAAQA,EAAI,KAAK,IAAI,CAACslB,EAAK9uB,IAC9B,gBAAC0E,GAAA,EAAK,CACJ,IAAK1E,EACL,UAAS,IACR8uB,CACH,CAAS,CACb,EACF,KAAM,aACN,MAAO,CACL,SAAU,EACZ,CACF,GAEMC,EAAU,SAAUvlB,EAAKwlB,EAAU,CACvC,GAAI,CAACL,EAAQnlB,EAAI,MAAO,CAEtB,IAAIylB,EAAU,CAAC,EACf,GAAIzlB,EAAI,SACN,QAAS0lB,KAAc1lB,EAAI,SACrB0lB,EAAW,QACXD,EAAQ,QAAQC,EAAW,MAAM,IAAM,IACzCD,EAAQ,KAAKC,EAAW,MAAM,EAQpC,GAJAP,EAAQnlB,EAAI,MAAQolB,EAAWplB,EAAK,IAAI,EACxCmlB,EAAQnlB,EAAI,MAAM,QAAUylB,EAC5BN,EAAQnlB,EAAI,MAAM,SAAWwlB,EAEzB,CAACR,EACH,QAASW,KAAUF,EACbP,EAAOS,IACTJ,EAAQL,EAAOS,GAASH,CAAQ,CAIxC,CACA,OAAOL,EAAQnlB,EAAI,KACrB,EAEA,QAASA,KAAOge,EACdkH,EAAOllB,EAAI,MAAQA,EAGrB,IAAIwlB,EAAW,GACf,GAAI/jB,EAAQ,CACV+jB,EAAW,GACX,IAAItvB,EAAUuL,EAAO,QAAQ,MAAO,GAAG,EAAE,MAAM,GAAG,EAClD,QAASzB,KAAOge,EACd9nB,EAAQ,QAAQ0vB,GAAa,CACvBA,IACD5lB,EAAI,KAAK,QAAQ4lB,CAAS,IAAM,IAC9B5lB,EAAI,aAAeA,EAAI,YAAY,QAAQ4lB,CAAS,IAAM,KAC7DL,EAAQvlB,EAAK,CAACwlB,CAAQ,CAE1B,CAAC,CAEL,CAEA,QAASxlB,KAAOge,EAAM,CACpB,MAAM6H,EAAUN,EAAQvlB,EAAKwlB,CAAQ,EACrC,GAAI,CAACK,EAAQ,SAAU,CACrB,IAAIC,EAAW,GACf,GAAI,CAACd,EAEH,QAASW,KAAUE,EAAQ,QAAS,CAClC,MAAME,GAAaZ,EAAQQ,GAC3B,GAAI,CAACI,GAAY,CACf,QAAQ,IACN,OAAQ/lB,EAAI,KAAM,WAAY2lB,EAAQ,kBAAkB,EAC1D,QACF,CACKI,GAAW,QACdA,GAAW,MAAQ,CAAC,GAElBD,EAEFC,GAAW,MAAM,KAAKX,EAAWplB,EAAK,UAAU,CAAC,EAEjD+lB,GAAW,MAAM,KAAKF,CAAO,EAE/BC,EAAW,EACb,EAGE,CAACA,GAAYD,EAAQ,QAAQ,SAAW,IAC1Clb,EAAM,KAAKkb,CAAO,CAEtB,CACF,CACA,OACE,gBAAC,OAAI,UAAU,uBACb,gBAAC,KAAI,CAAC,OAAM,IACV,gBAAC,KAAS,CAAC,UAAU,QACnB,gBAACG,GAAA,EAAW,CACV,KAAK,OACL,UAAU,oBACV,YAAY,WACZ,aAAcvkB,EACd,SAAU+N,GAAK,KAAK,OAASA,EAC7B,WAAY,KAAK,eAAgB,EAClC/N,GACC,gBAACukB,GAAA,EAAY,SAAZ,KACC,gBAAC,QACC,QAAS,IAAM,CAAC,KAAK,SAAS,CAAC,OAAQ,EAAE,CAAC,EACxC,KAAK,OAAO,MAAQ,EAAE,EACxB,MAAO,CAAC,OAAQ,UAAW,OAAQ,GAAI,cAAe,MAAM,GAE5D,gBAAC,KAAI,CAAC,KAAK,KAAK,MAAM,eAAe,KAAK,SAAS,EAAE,MAEvD,CACF,CAEJ,EACA,gBAAC,KAAS,CAAC,UAAU,gBAAe,yBAElC,gBAACC,GAAA,EAAQ,CACP,eAAgBjB,EAChB,SAAWjsB,GAAM,KAAK,SAAS,CAAC,QAASA,EAAE,OAAO,OAAO,CAAC,EAAG,CACjE,CACF,EACA,gBAAC0V,GAAA,EAAQ,CAAC,MAAA9D,CAAA,CAAc,CAC1B,CAEJ,CACF,CApKE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,KAAM,IAAU,KAClB,CAAC,EAmKY,mBAAQhW,IAAU,CAC/B,OAAQA,EAAM,MAChB,EAAE,EAAE,EAAQ,E,iKC9KZ,MAAM,WAAiB,WAAgB,CAAvC,kCAQE,qBAAciQ,GAAU,CACtB,KAAK,MAAM,SAAS,aAAkB,KAAK,MAAM,OAAQA,CAAK,CAAC,CACjE,CAAC,CAAD,CAEA,mBAAqB,CACnB,SAAS,MAAQ,YACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAoBwG,EAAW,CACzB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAU,CACR,KAAM,CAAE,WAAAgD,CAAW,EAAI,KAAK,MAEtB4P,EAAO5P,EAAW,KAAK,KAAK,MAAM,OAAO,MAC/C,OACE,gBAACnC,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAACA,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,MAAO,MAAO,CAAC,aAAc,KAAK,GAC1E,gBAAC,KAAS,CACR,WAAYmC,EAAW,WACvB,cAAe,KAAK,WACtB,CACF,EACC4P,GAAQA,EAAK,OAAS,GACrB,gBAACkI,GAAI,CACH,KAAAlI,CAAA,CACF,CACJ,CAEJ,CACF,CA3CE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,KACpB,YAAa,IAAU,MACzB,CAAC,EAwCY,mBAAQrpB,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,KAClB,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAQ,E,+BC7CZ,SAASwxB,GAAe3lB,EAAO,CAC7B,KAAM,CAAC,MAAA4lB,CAAK,EAAI5lB,EACV,CAAC6lB,EAAgBC,CAAiB,EAAI,mBAAS,EAAK,EACpDnyB,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5CmE,EAAO,YAAanE,GAAUA,EAAM,IAAI,EACxCH,EAAW,YAAY,EAE7B,SAAS+xB,GAAmB,CAC1B,OACE,kBAACpd,EAAA,EAAK,CACJ,QAASA,EAAA,EAAa,MACtB,OAAQkd,EACR,MAAM,oBACN,QAAS,IAAM,CAAEC,EAAkB,EAAK,CAAE,EAC1C,QAAS,CACP,kBAACjsB,GAAA,EAAM,CAAC,IAAI,UAAU,QAAQ,UACtB,QAAS,IAAM,CACbisB,EAAkB,EAAK,EACvB,YAAWnyB,EAAO,UACPiyB,EAAM,IACP,EAAE,KAAK,IAAM,CACrB5xB,EAAS,aACP,CACE,KAAM,yBACN,KAAM,UACN,OAAQ,GACR,IAAK,EACP,CAAC,CAAC,CACN,CAAC,EACE,MAAMF,GAAS,CACdE,EAAS,aAAYF,CAAK,CAAC,CAC7B,CAAC,CACL,GAAG,SAEX,EACA,kBAAC+F,GAAA,EAAM,CAAC,IAAI,SAAS,QAAQ,OACrB,QAAS,IAAM,CAAEisB,EAAkB,EAAK,CAAE,GAAG,QAC7C,CACV,GACA,kBAAC,SAAE,gEAA8D,CACnE,CAEJ,CAEA,OACE,oCACE,kBAAC3B,GAAA,EAAe,CAAC,aAAY,GACZ,MAAO,CAAC,kCAAmC,MAAM,EACjD,UAAU,aACzB,kBAACC,GAAA,EAAoB,KACnB,kBAACC,GAAA,EAAmB,KAAC,MAErB,EACA,kBAACC,GAAA,EAA0B,KACxBsB,EAAM,IACT,CACF,EACA,kBAACxB,GAAA,EAAoB,KACnB,kBAACC,GAAA,EAAmB,KAAC,gBAErB,EACA,kBAACC,GAAA,EAA0B,KACxBsB,EAAM,cACT,CACF,EACA,kBAACxB,GAAA,EAAoB,KACnB,kBAACC,GAAA,EAAmB,KAAC,MAErB,EACA,kBAACC,GAAA,EAA0B,KACxBsB,EAAM,IACT,CACF,CACF,EAEEttB,EAAK,SAAWA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,IACrD,kBAACkG,GAAA,EAAM,CAAC,QAAS,IAAM,CAACisB,EAAkB,EAAI,CAAC,GAAG,aAElD,EAEAC,EAAiB,CACpB,CAEJ,CAEAJ,GAAe,UAAY,CACzB,MAAO,IAAU,OAAO,UAC1B,EAEe,OAAAA,G,SChFf,SAASK,GAAiBhmB,EAAO,CAC/B,KAAM,CAAE,MAAA0D,EAAO,QAAAuiB,EAAS,SAAApa,CAAS,EAAI7L,EAC/B,CAACkmB,EAAuBC,CAAwB,EAAI,mBAAS,EAAK,EAClE,CAACC,EAAkBC,CAAmB,EAAI,mBAAS,IAAI,EACvD1yB,EAAS,YAAaQ,IAAUA,GAAM,MAAM,EAC5CmE,EAAO,YAAanE,IAAUA,GAAM,IAAI,EACxCH,EAAW,YAAY,EAEvB8X,EAAU,CACd,CACE,MAAO,OACP,UAAW,MACb,EACA,CACE,MAAO,YACP,UAAW,WACb,EACA,CACE,MAAO,YACP,UAAW,WACb,EACA,CACE,MAAO,WACP,UAAW,UACb,EACA,CACE,MAAO,cACP,UAAW,aACb,CACF,EAEA,SAASwa,EAAqBC,GAAQ,CACpC,MAAO,CACL,MAAOA,GAAO,KACd,UAAW7iB,EAAM,aACjB,MAAO,CACL,CACE,MAAO6iB,GAAO,IAChB,EACA,CACE,MAAOA,GAAO,SAChB,EACA,CACE,MAAOA,GAAO,UAAU,SAAS,CACnC,EACA,CACE,MAAOA,GAAO,aAChB,EACA,CACE,MAAOA,GAAO,WAChB,CACF,CACF,CACF,CAEA,SAASpa,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAMqU,EAAkBtK,IAClBA,GAAQ,WACR7d,EAAK,SACLA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,GAC/B,CACL,CACE,MAAO,gBACP,QAAS,IAAM,CACb0yB,EAAoBlQ,EAAO,EAC3BgQ,EAAyB,EAAI,CAC/B,CACF,CACF,EAEK,CAAC,EAGV,SAASK,IAA0B,CACjC,MAAMvmB,GAAQ,sBACd,OACE,kBAAC0I,EAAA,EAAK,CACJ,QAASA,EAAA,EAAa,MACtB,OAAQud,EACR,MAAAjmB,GACA,QAAS,IAAM,CAAEkmB,EAAyB,EAAK,CAAE,EACjD,QAAS,CACP,kBAACtsB,GAAA,EAAM,CAAC,IAAI,UAAU,QAAQ,UACtB,QAAS,IAAM,CACbssB,EAAyB,EAAK,EAC9B,YAAkBxyB,EAAO,UACPyyB,EAAiB,KAClB,EAAE,KAAK,IAAM,CAC5BpyB,EAAS,aACP,CACE,KAAM,qBACN,KAAM,UACN,OAAQ,GACR,IAAK,EACP,CAAC,CAAC,EACJA,EAAS,aAAeL,CAAM,CAAC,EAC/BK,EAAS,aAAYL,CAAM,CAAC,CAC9B,CAAC,EACE,MAAMG,IAAS,CACdE,EAAS,aAAYF,EAAK,CAAC,CAC7B,CAAC,CACL,GAAG,SAEX,EACA,kBAAC+F,GAAA,EAAM,CAAC,IAAI,SAAS,QAAQ,OACrB,QAAS,IAAM,CAACssB,EAAyB,EAAK,CAAE,GAAG,QAE3D,CACF,GACA,kBAAC,SAAE,2DAEH,CACF,CAEJ,CAEA,MAAMM,GAAcR,GAAWA,EAAQ,OAAS,EAEhD,IAAI5Z,GAAO,CAAC,EACZ,OAAIR,GACFQ,GAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnB2a,KACFpa,GAAO4Z,EAAQ,IAAKM,IAAWD,EAAqBC,EAAM,CAAC,GAK7D,oCACE,kBAACtb,GAAA,EAAK,CAAC,aAAa,MAAK,eAEzB,EACA,kBAACqB,GAAA,EAAK,CACJ,aAAW,qBACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,GACA,eAAAoU,CAAA,EAEA,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAAC5U,GAAY,CAAC4a,IACb,kBAAC1b,GAAA,EAAU,KACT,kBAACE,GAAA,EAAK,CAAC,aAAa,MAAK,wBAAsB,EAC/C,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,EAEDia,GAAwB,CAC3B,CAEJ,CAEAR,GAAiB,UAAY,CAC3B,MAAO,IAAU,OACjB,QAAS,IAAU,MACnB,SAAU,IAAU,KAAK,UAC3B,EAEe,OAAAA,GCpLf,SAASU,GAAgB1mB,EAAO,CAC9B,KAAM,CAAE,eAAA2mB,EAAgB,SAAA9a,CAAS,EAAI7L,EAC/B,CAAC4mB,EAAeC,CAAgB,EAAI,mBAAS,CAAC,CAAC,EAC/C,CAACC,EAAsBC,CAAuB,EAAI,mBAAS,EAAK,EAChE,CAACX,EAAkBC,CAAmB,EAAI,mBAAS,IAAI,EACvDW,EAAkB,CAAChxB,GAAKixB,GAAe,KACvCJ,EAAiBK,IAAiB,CAChC,MAAMC,GAAqBD,GAAc,OAAO7G,IAAKA,KAAMrqB,EAAG,EAC9D,OAAOixB,GACD,CAAC,GAAGE,GAAoBnxB,EAAG,EAAImxB,EACvC,CAAC,EACDC,EAAiBpxB,IAAO4wB,EAAc,SAAS5wB,EAAG,EAClDrC,EAAS,YAAaQ,IAAUA,GAAM,MAAM,EAC5CmE,EAAO,YAAanE,IAAUA,GAAM,IAAI,EACxCH,EAAW,YAAY,EAEvB8X,EAAU,CACd,CACE,MAAO,OACP,UAAW,OACX,eAAgB,CAAC,IAAU,CAC7B,EACA,CACE,MAAO,YACP,UAAW,WACb,EACA,CACE,MAAO,YACP,UAAW,WACb,EACA,CACE,MAAO,QACP,UAAW,OACb,CACF,EAEA,SAASub,GAAoBhb,GAAM3I,GAAO,CAExC,MAAM4jB,GAAY5jB,GAAM,aAClB,kBAAC,IAAI,CAAC,GAAI,GAAG/P,EAAO,oBAAoB+P,GAAM,cAC3CA,GAAM,UACT,EAEAA,GAAM,WACZ,MAAO,CACL,MAAOA,GAAM,KACb,GAAI2I,GAAK,OACT,OAAQ,CAAC+a,EAAe/a,GAAK,MAAM,EACnC,UAAW3I,GAAM,aACjB,MAAO,CACL,CACE,MAAOA,GAAM,IACf,EACA,CACE,MAAOA,GAAM,SACf,EACA,CACE,MAAOA,GAAM,UAAU,SAAS,CAClC,EACA,CACE,MAAO4jB,EACT,CACF,CACF,CACF,CAEA,SAAShB,GAAqBja,GAAM8Y,GAAQzhB,GAAO,CACjD,MAAO,CACL,GAAI2I,GAAK,OACT,OAAQ8Y,GAAO,GACf,MAAO,CACL,CACE,MAAO,kBAAC,GAAgB,CACf,MAAAzhB,GACA,QAASA,GAAM,QACf,SAAAmI,CAAA,CAAmB,CAC9B,CACF,CACF,CACF,CAEA,SAASM,IAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAMmb,GAAqBZ,GAAkBA,EAAe,OAAS,EAErE,IAAIta,GAAO,CAAC,EACRR,GACFQ,GAAOF,GAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnByb,KACFlb,GAAO,CAAC,EACRsa,EAAe,QAAQjjB,IAAS,CAC9B,IAAI8jB,GAAWH,GAAoBhb,GAAM3I,EAAK,EAC9C2I,GAAK,KAAKmb,EAAQ,EAClBnb,GAAK,KAAKia,GAAqBja,GAAMmb,GAAU9jB,EAAK,CAAC,CACvD,CAAC,GAIL,MAAM+c,GAAkBtK,IAClBA,GAAQ,SAAW,QACnBA,GAAQ,WACR7d,EAAK,SACLA,EAAK,MAAM,QAAQ3E,EAAO,IAAI,IAAM,GAC/B,CACL,CACE,MAAO,eACP,QAAS,IAAM,CACb0yB,EAAoBlQ,EAAO,EAC3B4Q,EAAwB,EAAI,CAC9B,CACF,CACF,EAEK,CAAC,EAGV,SAASU,IAAyB,CAChC,MAAMxnB,GAAQ,qBACd,OACE,kBAAC0I,EAAA,EAAK,CACJ,QAASA,EAAA,EAAa,MACtB,OAAQme,EACR,MAAA7mB,GACA,QAAS,IAAM,CAAE8mB,EAAwB,EAAK,CAAE,EAChD,QAAS,CACP,kBAACltB,GAAA,EAAM,CAAC,IAAI,UAAU,QAAQ,UACtB,QAAS,IAAM,CACbktB,EAAwB,EAAK,EAC7B,YAAyBpzB,EAAO,UACPyyB,EAAiB,KAClB,EAAE,KAAK,IAAM,CACnCpyB,EAAS,aACP,CACE,KAAM,qBACN,KAAM,UACN,OAAQ,GACR,IAAK,EACP,CAAC,CAAC,EACJA,EAAS,aAAeL,CAAM,CAAC,EAC/BK,EAAS,aAAYL,CAAM,CAAC,CAC9B,CAAC,EACE,MAAMG,IAAS,CACdE,EAAS,aAAYF,EAAK,CAAC,CAC7B,CAAC,CACL,GAAG,SAEX,EACA,kBAAC+F,GAAA,EAAM,CAAC,IAAI,SAAS,QAAQ,OACrB,QAAS,IAAM,CAACktB,EAAwB,EAAK,CAAE,GAAG,QAE1D,CACF,GACA,kBAAC,SAAE,2EAGH,CACF,CAEJ,CAEA,OACE,oCACE,kBAAC9b,GAAA,EAAK,CAAC,aAAa,MAAK,uBAEzB,EACA,kBAACqB,GAAA,EAAK,CACJ,aAAW,oBACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,GACA,eAAAoU,GACA,WAAY,CAACG,GAAQC,GAAUlI,KAAW,CACxCqO,EAAgBnG,GAAU,CAAClI,EAAM,CACnC,GAEA,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAAC9M,GAAY,CAAC0b,IACb,kBAACxc,GAAA,EAAU,KACT,kBAACE,GAAA,EAAK,CAAC,aAAa,MAAK,0BAAwB,EACjD,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,EAEDkb,GAAuB,CAC1B,CAEJ,CAEAf,GAAgB,UAAY,CAC1B,eAAgB,IAAU,MAC1B,SAAU,IAAU,KAAK,UAC3B,EAEe,OAAAA,GCrOf,SAASgB,GAAU1nB,EAAO,CACxB,MAAMpC,EAAYoC,EAAM,MAAM,OAAO,UAC/BrM,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5CC,EAAS,YAAaD,GAAUA,EAAM,OAAO,OAAOR,EAAO,KAAK,EAChEmB,EAAa,YAAaX,GAAUA,EAAM,OAAO,UAAU,EAC3DY,EAAW,YAAaZ,GAAUA,EAAM,YAAY,QAAQ,EAC5DH,EAAW,YAAY,EAEvB4xB,EAAQ,kBAAQ,IACpBxxB,EAAOA,EAAO,KAAMmE,GAAMA,EAAE,OAASqF,CAAS,EAAE,KAChD,CAACxJ,EAAQwJ,CAAS,CAAC,EAErB,2BAAU,IAAM,CACd,SAAS,MAAQ,aACjB5J,EAAS,aAAoBL,CAAM,CAAC,CACtC,EAAG,CAACA,EAAQK,CAAQ,CAAC,EAGnB,oCACE,kBAACyX,EAAA,EAAW,CAAC,QAAS1W,EAAW0W,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC9E,kBAACkc,GAAA,EAAK,KACJ,kBAACC,GAAA,EAAS,IACV,EACA,kBAACA,GAAA,EAAS,KACR,kBAAC,KAAY,CACX,YAAa9yB,EACb,eAAgB,IAAM,CAACd,EAAS,aAAYL,CAAM,CAAC,CAAC,EACtD,CACF,CACF,EACA,kBAACsX,GAAA,EAAK,CAAC,aAAa,MAAK,SAChBrN,CACT,EACCgoB,GACA,oCACE,kBAACiC,GAAW,CAAC,MAAAjC,CAAA,CAAa,EACzBA,EAAM,iBACN,kBAAC,GAAe,CACd,eAAgBA,EAAM,gBACtB,SAAU,GACZ,CAEH,CAEH,CACF,CAEJ,CAEA8B,GAAU,UAAY,CACpB,MAAO,IAAU,OAAO,UAC1B,EAEe,mBAAWA,EAAS,ECpDnC,SAASI,GAAW9nB,EAAO,CACzB,KAAM,CAAE,OAAA5L,EAAQ,SAAAyX,EAAU,WAAA4Y,CAAW,EAAIzkB,EACnC8L,EAAU,CACd,CACE,MAAO,OACP,UAAW,MACb,CACF,EAEA,SAASic,EAAenC,EAAO,CAC7B,MAAO,CACL,MAAO,CACL,CACE,MACE,kBAAC,IAAI,CAAC,GAAI,GAAGnB,KAAcmB,EAAM,QAASA,EAAM,IAAK,CAEzD,CACF,CACF,CACF,CAEA,SAASzZ,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAM4b,EAAa5zB,GAAUA,EAAO,OAAS,EAE7C,IAAIiY,EAAO,CAAC,EACZ,OAAIR,GACFQ,EAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnBkc,IACF3b,EAAOjY,EAAO,IAAKwxB,GAAUmC,EAAenC,CAAK,CAAC,GAKpD,oCACE,kBAACtZ,GAAA,EAAK,CACJ,aAAW,cACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACR,GAAY,CAACmc,GACb,kBAACjd,GAAA,EAAU,KACT,kBAACE,GAAA,EAAK,CAAC,aAAa,MAAK,iBAAe,EACxC,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,CAEJ,CAEJ,CAEAub,GAAW,UAAY,CACrB,OAAQ,IAAU,MAClB,SAAU,IAAU,KAAK,WACzB,WAAY,IAAU,MACxB,EAEe,OAAAA,GCxFf,SAASG,IAAa,CACpB,MAAMt0B,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5CC,EAAS,YAAaD,GAAUA,EAAM,OAAO,OAAOR,EAAO,KAAK,EAChEmB,EAAa,YAAaX,GAAUA,EAAM,OAAO,UAAU,EAC3DY,EAAW,YAAaZ,GAAUA,EAAM,YAAY,QAAQ,EAC5DH,EAAW,YAAY,EAE7B,2BAAU,IAAM,CACd,SAAS,MAAQ,cACjBA,EAAS,aAAoBL,CAAM,CAAC,CACtC,EAAG,CAACA,EAAQK,CAAQ,CAAC,EAErB,QAAQ,IAAII,CAAM,EAGhB,oCACE,kBAACqX,EAAA,EAAW,CAAC,QAAS1W,EAAW0W,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC9E,kBAACkc,GAAA,EAAK,KACJ,kBAACC,GAAA,EAAS,IACV,EACA,kBAACA,GAAA,EAAS,KACR,kBAAC,KAAY,CACX,YAAa9yB,EACb,eAAgB,IAAM,CAACd,EAAS,aAAYL,CAAM,CAAC,CAAC,EACtD,CACF,CACF,EACA,kBAACsX,GAAA,EAAK,CAAC,aAAa,MAAK,QAEzB,EACA,kBAAC,GAAU,CACT,OAAA7W,EACA,SAAUU,EACV,WAAY,GAAGnB,EAAO,mBACxB,CACF,CACF,CAEJ,CAEe,mBAAWs0B,EAAU,E,UCtCpC,SAASC,GAAYloB,EAAO,CAC1B,KAAM,CAAE,QAAAiG,EAAS,SAAA4F,CAAS,EAAI7L,EACxB8L,EAAU,CACd,CACE,MAAO,OACP,UAAW,MACb,CACF,EAEA,SAASqc,EAAgBC,EAAQ,CAC/B,MAAO,CACL,MAAO,CACL,CACE,MAAOA,EAAO,IAChB,CACF,CACF,CACF,CAEA,SAASjc,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAMic,EAAcpiB,GAAWA,EAAQ,OAAS,EAEhD,IAAIoG,EAAO,CAAC,EACZ,OAAIR,GACFQ,EAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnBuc,IACFhc,EAAOpG,EAAQ,IAAKmiB,GAAWD,EAAgBC,CAAM,CAAC,GAKxD,oCACE,kBAAC9b,GAAA,EAAK,CACJ,aAAW,eACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACR,GAAY,CAACwc,GACb,kBAACtd,GAAA,EAAU,KACT,kBAACE,GAAA,EAAK,CAAC,aAAa,MAAK,kBAAgB,EACzC,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,CAEJ,CAEJ,CAEA2b,GAAY,UAAY,CACtB,QAAS,IAAU,MACnB,SAAU,IAAU,KAAK,UAC3B,EAEe,OAAAA,GCpFf,SAASI,IAAc,CACrB,MAAM30B,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5C8R,EAAU,YAAa9R,GAAUA,EAAM,QAAQ,QAAQR,EAAO,KAAK,EACnEmB,EAAa,YAAaX,GAAUA,EAAM,OAAO,UAAU,EAC3DY,EAAW,YAAaZ,GAAUA,EAAM,YAAY,QAAQ,EAC5DH,EAAW,YAAY,EAE7B,2BAAU,IAAM,CACd,SAAS,MAAQ,eACjBA,EAAS,aAAqBL,CAAM,CAAC,CACvC,EAAG,CAACA,EAAQK,CAAQ,CAAC,EAErB,QAAQ,IAAIiS,CAAO,EAGjB,oCACE,kBAACwF,EAAA,EAAW,CAAC,QAAS1W,EAAW0W,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC9E,kBAACkc,GAAA,EAAK,KACJ,kBAACC,GAAA,EAAS,IACV,EACA,kBAACA,GAAA,EAAS,KACR,kBAAC,KAAY,CACX,YAAa9yB,EACb,eAAgB,IAAM,CAACd,EAAS,aAAaL,CAAM,CAAC,CAAC,EACvD,CACF,CACF,EACA,kBAACsX,GAAA,EAAK,CAAC,aAAa,MAAK,SAEzB,EACA,kBAAC,GAAW,CACV,QAAAhF,EACA,SAAUnR,EACV,WAAY,GAAGnB,EAAO,oBACxB,CACF,CACF,CAEJ,CAEe,mBAAW20B,EAAW,E,2KCrCrC,MAAM,WAAmB,WAAgB,CAOvC,WAAYlkB,EAAO,CACjB,KAAK,MAAM,SAAS,aAAoB,KAAK,MAAM,OAAQA,CAAK,CAAC,CACnE,CAEA,mBAAqB,CACnB,SAAS,MAAQ,cACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAoBwG,EAAW,CACzB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAU,CACR,KAAM,CAAE,WAAAgD,CAAW,EAAI,KAAK,MACtB2a,EAAS3a,EAAW,OAAO,KAAK,MAAM,OAAO,MAEnD,GAAI,CAAC2a,EACH,OAAO,gBAAC1d,GAAA,EAAQ,IAAC,EAGnB,MAAMiB,EAAU,CACd,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAO,IAAC,EAAI,MAAM,OAAO,EAEhD,UAAW,MACb,CACF,EACA,IAAIO,EAAO,CAAC,EACZ,OAAAkc,EAAO,QAASxE,GAAU,CACxB,IAAI1D,EAAI,CACN,MAAO,CACL,CAAC,MAAO0D,EAAM,KAAM,MAAO,CAAC,OAAQ,MAAM,CAAC,CAC7C,CACF,EACA1X,EAAK,KAAKgU,CAAC,CACb,CAAC,EAEC,gBAAC5U,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAACA,EAAA,EAAW,CAAC,MAAO,CAAC,aAAc,KAAK,GACtC,gBAAC,KAAS,CACR,WAAYmC,EAAW,WACvB,cAAe,KAAK,WACtB,CACF,EACA,gBAACtB,GAAA,EAAK,CACJ,aAAW,eACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,gBAAC,KAAW,IAAC,EACb,gBAAC,KAAS,IAAC,CACb,CACF,CAEJ,CACF,CArEE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EAmEY,mBAAQlY,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,MACpB,EAAE,EAAE,EAAU,E,iMC7Dd,MAAM,WAAkB,WAAgB,CAAxC,kCAOE,qBAAciQ,GAAU,CACtB,KAAK,MAAM,SAAS,aAAmB,KAAK,MAAM,OAAQA,CAAK,CAAC,CAClE,CAAC,CAAD,CAEA,mBAAqB,CACnB,SAAS,MAAQ,aACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAoBwG,EAAW,CACzB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAU,CACR,KAAM,CAAE,WAAAgD,CAAW,EAAI,KAAK,MACtBzD,EAAQyD,EAAW,MAEnB9B,EAAU,CACd,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAS,IAAC,EAAI,MAAM,KAAK,EAEhD,UAAW,IACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAO,IAAC,EAAI,MAAM,SAAS,EAElD,UAAW,QACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAa,IAAC,EAAI,MAAM,aAAa,EAE5D,UAAW,YACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAW,IAAC,EAAI,MAAM,SAAS,EAEtD,UAAW,QACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAQ,IAAC,EAAI,MAAM,WAAW,EAErD,UAAW,UACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAW,IAAC,EAAI,MAAM,QAAQ,EAErD,UAAW,OACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAuB,IAAC,EAAI,MAAM,MAAM,EAE/D,UAAW,KACb,EACA,CACE,MACE,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAa,IAAC,EAAI,MAAM,UAAU,EAEzD,UAAW,SACb,CACF,EACA,IAAIO,EAAO,CAAC,EACZ,OAAAlC,EAAM,QAASG,GAAS,CACpB,MAAMke,EAAQ,OAAOle,EAAK,aAAiB,SACrCA,EAAK,YAAc,KAAK,UAAUA,EAAK,WAAW,EACxD,IAAI+V,EAAI,CACJ,CAAC,MAAO/V,EAAK,GAAI,MAAO,CAAC,OAAQ,IAAI,CAAC,EACtC,CAAC,MAAOA,EAAK,KAAK,KAAK,GAAG,EAAG,MAAO,CAAC,OAAQ,OAAQ,CAAC,EACtD,CAAC,MAAOA,EAAK,gBAAiB,MAAO,CAAC,OAAQ,YAAY,CAAC,EAC3D,CAAC,MAAO,gBAACrB,GAAA,EAAa,CAAC,SAAS,OAAO,SAAS,SAAS,QAAQ,kBAAkBuf,CAAM,EAAkB,MAAO,CAAC,OAAQ,QAAQ,CAAC,EACpI,CAAC,MAAOle,EAAK,SAAU,MAAO,CAAC,OAAQ,UAAU,CAAC,EAClD,CAAC,MAAOA,EAAK,MAAO,MAAO,CAAC,OAAQ,OAAO,CAAC,EAC5C,CAAC,MAAOa,GAAA,KAAYb,EAAK,UAAU,EAAE,QAAQ,EAAG,MAAO,CAAC,OAAQ,KAAK,CAAC,EACtE,CAAC,MAAOA,EAAK,QAAS,MAAO,CAAC,OAAQ,SAAS,CAAC,CACpD,EACA+B,EAAK,KAAK,CAAC,MAAOgU,CAAC,CAAC,CACxB,CAAC,EAEC,gBAAC5U,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAACA,EAAA,EAAW,CAAC,MAAO,CAAC,aAAc,KAAK,GACtC,gBAAC,KAAS,CACR,WAAYmC,EAAW,WACvB,cAAe,KAAK,WACtB,CACF,EAEA,gBAACtB,GAAA,EAAK,CACJ,aAAW,cACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,gBAAC,KAAW,IAAC,EACb,gBAAC,KAAS,IAAC,CACb,CACF,CAEJ,CACF,CAnHE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EAiHY,mBAAQlY,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,KACpB,EAAE,EAAE,EAAS,E,2MC9Ib,MAAM,WAAoB,WAAgB,CAA1C,kCAQE,qBAAciQ,GAAU,CACtB,KAAK,MAAM,SAAS,aAAqBA,CAAK,CAAC,CACjD,CAAC,CAAD,CAEA,mBAAqB,CACnB,SAAS,MAAQ,WACjB,KAAK,WAAW,CAClB,CAEA,mBAAoBwG,EAAW,CACzB,KAAK,MAAM,WAAW,SACtB,KAAK,MAAM,WAAW,UAAYA,EAAU,WAAW,SACzD,KAAU,CACR,OAAQ,oBACR,KAAM,KAAK,MAAM,WAAW,QAC5B,QAAS,CAAC,KAAU,QAAQ,IAAI,CAClC,CAAC,CAEL,CAEA,QAAS,CACP,OACE,gBAACa,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC,OAAI,GAAG,mBAAmB,CAC7B,CAEJ,CACF,CAlCE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,KACpB,YAAa,IAAU,MACzB,CAAC,EA+BY,mBAAQtX,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,QAClB,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAW,E,sBC7Cf,SAASs0B,GAAezoB,EAAO,CAC7B,KAAM,CAAE,OAAArM,EAAQ,QAAAmwB,CAAQ,EAAI9jB,EACtBqM,EAAO,CAAC,EAMd,GAJIyX,EAAQ,YACVzX,EAAK,KAAK,CAAC,MAAO,aAAc,MAAOyX,EAAQ,UAAU,CAAC,EAGxDA,EAAQ,UAAU,OAAS,EAAG,CAChC,MAAM4E,EACJ,gBAAC,MAAG,UAAU,cACX5E,EAAQ,UAAU,IAAI,CAAC5qB,EAAMlD,IAC5B,gBAAC,MAAG,UAAU,kBAAkB,IAAKA,CAAA,EAAMkD,CAAK,CAAM,CAC1D,EAEFmT,EAAK,KAAK,CAAC,MAAO,YAAa,MAAOqc,CAAY,CAAC,CACrD,CAEA,OAAA5E,EAAQ,UAAU,QAAQpvB,GAAY,CAGpC,MAAMi0B,EACJ,gBAAC,gBACEj0B,EAAS,YACR,gBAAC,SAAE,gBAAC,cAAO,SAAO,EAAS,IAAEA,EAAS,WAAW,GAAC,EACpD,gBAAC,MAAG,UAAU,cACXA,EAAS,KAAK,IAAI,CAACwE,EAAMlD,IACxB,gBAAC,MAAG,UAAU,kBAAkB,IAAKA,CAAA,EACnC,gBAAC,IAAI,CAAC,GAAIrC,EAAO,WAAa,QAAUuF,EAAK,GAAG,MAC7CA,EAAK,GAAG,IACX,CACF,CACD,CACH,CACF,EAEFmT,EAAK,KAAK,CAAC,MAAO3X,EAAS,KAAO,QAAS,MAAOi0B,CAAO,CAAC,CAC5D,CAAC,EAGC,gBAAC,WACC,gBAAC,SAAM,UAAW,SAAS3oB,EAAM,YAAY,SAAW,kBAAoB,kCAC1E,gBAAC,aACEqM,EAAK,IAAInT,GACR,gBAAC,MAAG,IAAKA,EAAK,OACZ,gBAAC,MAAG,MAAO,CAAC,MAAO,KAAK,GAAIA,EAAK,KAAM,EACvC,gBAAC,UAAIA,EAAK,KAAM,CAClB,CACD,CACH,CACF,CACF,CAEJ,CAEAuvB,GAAe,UAAY,CACzB,OAAQ,IAAU,OAClB,QAAS,IAAU,OAAO,WAC1B,YAAa,IAAU,MACzB,EAEA,SAAS,GAAgBt0B,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,YAAaA,EAAM,WACrB,CACF,CAEe,mBAAQ,EAAe,EAAEs0B,EAAc,EC/DtD,SAASG,GAAQ5oB,EAAO,CACtB,KAAM,CAAC6oB,EAAYC,CAAa,EAAI,mBAAS,CAAC,EACxC,CAAE,QAAAtiB,CAAQ,EAAIxG,EAEpB,SAAS+oB,EAAoBjF,EAAS,CAGpC,OAFYA,EAAQ,eAAe,UAAYtd,EAAQ,KACnDsd,EAAQ,eAAe,OAASA,EAAQ,eAAe,OAE7D,CAEA,OACE,kBAAC,IAAM,SAAN,KACC,kBAAC1O,GAAA,EAAI,CAAC,UAAWyT,EACX,SAAU,CAAC/e,EAAO2K,IAAaqU,EAAcrU,CAAQ,EACrD,MAAK,IACRjO,EAAQ,QAAQ,IAAI,CAACsd,EAAS9tB,IAC7B,kBAACqf,GAAA,EAAG,CAAC,IAAKrf,EAAK,SAAUA,EACpB,MAAO+yB,EAAmBjF,CAAO,GACpC,kBAAC,GAAc,CAAC,QAAAA,CAAA,CAAkB,CACpC,CACD,CACH,CACF,CAEJ,CAEA8E,GAAQ,UAAY,CAClB,QAAS,IAAU,OAAO,UAC5B,EAEe,OAAAA,GCvBf,SAASI,GAAgBhpB,EAAO,CAC9B,MAAMipB,EAAc,IAAI,IACxBjpB,EAAM,QAAQ,QAAQ,QAAS9D,GAAW,CACxCA,EAAO,UAAU,QAASxH,IAAa,CACrCu0B,EAAY,IAAIv0B,GAAS,IAAI,CAC/B,CAAC,CACH,CAAC,EACD,MAAMyB,EAAY,MAAM,KAAK8yB,CAAW,EAElC,CAAC7H,EAAgBC,CAAiB,EAAI,mBAAS,EAAK,EACpD,CAACC,EAAiBC,CAAkB,EAAI,mBAASvhB,EAAM,iBAAmB7J,EAAU,EAAE,EACtF,CAACurB,EAAeC,CAAgB,EAAI,mBAAS3hB,EAAM,eAAiB,EAAE,EAE5E,SAAS8hB,EAAqBhY,EAAO,CACnCyX,EAAmBzX,EAAM,OAAO,SAAS,EACzCuX,EAAkB,EAAK,CACzB,CAEA,SAASU,EAAqBpJ,EAAQ,CACpC0I,EAAkB1I,CAAM,CAC1B,CAEA,SAASuJ,EAAmBD,EAAU,CACpCN,EAAiBM,CAAQ,CAC3B,CAEA,SAASG,EAAgBtY,EAAO,CAE1BA,EAAM,KAAOA,EAAM,MAAQ,SAK3B,CAAC4X,IAKLC,EAAiB,EAAE,EAEnB3hB,EAAM,SAASshB,EAAiBI,CAAa,EAC/C,CAEA,SAASwH,GAAyB,CAChC,OAAO,oCACL,kBAAC5G,GAAA,EAAO,CAAC,gCAAgC,MACvC,kBAACC,GAAA,EAAc,KACb,kBAACC,GAAA,EAAkB,CAAC,WAAW,MAC7B,kBAACC,GAAA,EAAY,CAAC,QAAQ,gBAEpB,kBAACC,GAAA,EAAW,CAAC,IAAI,YACf,kBAACvG,GAAA,EAAQ,CACP,SAAU2F,EACV,SAAU,KAAiB,KAC3B,OACE,kBAAC1F,GAAA,EAAc,CACb,SAAU2F,EACV,MAAO,CAAE,MAAO,MAAO,GACxB,aACYT,CACb,EAEF,OAAQF,EACR,cAAejrB,EAAU,IAAKzB,GAC5B,kBAAC4nB,GAAA,EAAY,CAAC,IAAK5nB,CAAA,EAAWA,CAAS,CACxC,EACD,MAAO,CAAE,MAAO,MAAO,EACvB,aAAc,SAAS,KACzB,CACF,EAEA,kBAACguB,GAAA,EAAW,CAAC,IAAI,UACf,kBAAChV,GAAA,EAAS,CACR,KAAK,SACL,GAAG,eACH,KAAK,SACL,YAAY,SACZ,aAAc1N,EAAM,cACpB,SAAUkiB,EACV,UAAYpY,GAAUsY,EAAgBtY,CAAK,EAC7C,CACF,EAEA,kBAAC4Y,GAAA,EAAW,CAAC,IAAI,UACf,kBAAC7oB,GAAA,EAAM,CACL,QAAUiQ,GAAUsY,EAAgBtY,CAAK,GAC1C,gBAED,CACF,CAEF,CACF,CACF,CACF,CACF,CACF,CAEA,OACE,kBAAC,WACEof,EAAsB,CACzB,CAEJ,CAEAF,GAAgB,UAAY,CAC1B,QAAS,IAAU,OAAO,WAC1B,SAAU,IAAU,KAAK,WACzB,cAAe,IAAU,OACzB,gBAAiB,IAAU,MAC7B,EAEe,OAAAA,G,+BCzHf,SAASG,GAAQx1B,EAAQe,EAAU8R,EAASC,EAAQe,EAAU4hB,EAAM,CAClE,IAAIvY,EAAM;AAAA,EACV,OAAAA,GAAO;AAAA,EACPA,GAAO;AAAA,EACHuY,EACFvY,GAAO;AAAA,EAEPA,GAAO;AAAA,EAETrJ,EAAS,QAAShI,GAAQ,CACxB,MAAMqjB,EAAe,IAAI,gBAAgB,EAAE,EAC3CA,EAAa,OAAO,WAAYnuB,CAAQ,EACxCmuB,EAAa,OAAO,UAAWrc,EAAQ,IAAI,EAC3Cqc,EAAa,OAAO,MAAOrjB,EAAI,IAAI,EACnCqjB,EAAa,OAAO,SAAUpc,CAAM,EAQpC,MAAM4iB,GAJO11B,EAAO,WACP,eAAiBkvB,EAAa,SAAS,GAG5B,QAAQ,KAAM,OAAO,EAC7ChS,GAAO,MAAQrR,EAAI,KAAO,WAAa6pB,EAAc;AAAA,EACjD7pB,EAAI,aAAa,QACnBA,EAAI,aAAa,QAAS8pB,GAAQ,CAChC,IAAIC,EAAO,cACPH,IACFG,EAAO,+CAELD,EAAI,OACFF,EACFG,EAAO,2DAEPA,EAAO,4BAGX1Y,GAAO,MAAQyY,EAAI,KAAO,SAAW9pB,EAAI,KAAO,IAAM+pB,EAAO;AAAA,CAC/D,CAAC,CAEL,CAAC,EACD1Y,GAAO;AAAA,EACAA,CACT,CAEA,SAAS2Y,GAASxpB,EAAO,CACvB,MAAMvK,EAAU,YAAW,EAE3B,2BAAU,IAAM,CACd,MAAMg0B,EAAK,oBAAS,WAAW,EACxB,QAAQ,CACP,IAAK,GACL,KAAM,GACN,WAAY,GACZ,MAAO,GACT,CAAC,EAAE,UAAUzpB,EAAM,GAAG,EAMtB0pB,EAFUC,GAAA,OAAU,uBAAuB,EACvB,GAAG,GAAG,kBAAkB,WAAW,UAAU,MAC/C,MAAM,0BAA0B,EACxD,GAAID,GAASA,EAAM,OAAS,EAAG,CAC7B,MAAME,EAAM,SAASF,EAAM,EAAE,EAC7BD,EAAG,aAAa,EAAIG,EACpBH,EAAG,mBAAmB,EAAIG,CAC5B,CAIAH,EAAG,cAAc,EAAE,GAAG,aAAc,IAAI,EAGxCE,GAAA,OAAU,iBAAiB,EAAE,UAAU,SAAS,EAAE,GAAG,QAAS7f,GAAS,CACrE6f,GAAA,MAAS,eAAe,EACxBl0B,EAAQ,KAAKqU,EAAM,WAAW,aAAa,CAC7C,CAAC,CACH,EAAG,CAAC9J,EAAM,IAAKvK,CAAO,CAAC,EAGrB,kBAAC,OAAI,UAAU,iBAAiB,GAAG,WAAU,CAEjD,CAEA+zB,GAAS,UAAY,CACnB,IAAK,IAAU,OAAO,UACxB,EAEA,SAASK,GAAgB7pB,EAAO,CAC9B,KAAM,CAAC8pB,EAAKC,CAAM,EAAI,mBAAS,EACzB,CAAC,sBAAAniB,EAAuB,OAAAjU,EAAQ,QAAA6S,EAAS,SAAA9R,EAAU,OAAA+R,EAAQ,YAAAqH,CAAY,EAAI9N,EAEjF,oBAAU,IAAM,CACd4H,EAAsBjU,EAAQ6S,EAAQ,KAAM9R,EAAU+R,CAAM,CAC9D,EAAG,CAACmB,EAAuBjU,EAAQ6S,EAAS9R,EAAU+R,CAAM,CAAC,EAE7D,MAAMujB,EAAiBhqB,EAAM,SAAS,UAAUrM,EAAO,MACjD4T,EAAc,aAAgBvH,EAAM,QAAQ,KACdA,EAAM,SACNA,EAAM,MAAM,EAC1CwH,EAAWwiB,EAAiBA,EAAeziB,GAAe,OAChE,2BAAU,IAAM,CACVC,GACFuiB,EAAOZ,GAAQx1B,EAAQe,EAAU8R,EAASC,EAAQe,EAAUsG,EAAY,QAAQ,CAAC,CAErF,EAAG,CAACna,EAAQe,EAAU8R,EAASC,EAAQe,EAAUsG,CAAW,CAAC,EAE3D,oCACGgc,GAAO,kBAACN,GAAA,CAAS,IAAAM,CAAA,CAAS,CAC7B,CAEJ,CAEAD,GAAgB,UAAY,CAC1B,sBAAuB,IAAU,KACjC,OAAQ,IAAU,OAClB,QAAS,IAAU,OAAO,WAC1B,SAAU,IAAU,OAAO,WAC3B,OAAQ,IAAU,OAAO,WACzB,SAAU,IAAU,OACpB,SAAU,IAAU,KACpB,MAAO,IAAU,OACjB,YAAa,IAAU,MACzB,EACA,SAAS,GAAgB11B,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,YAAaA,EAAM,YACnB,MAAAA,CACF,CACF,CAEA,MAAM,GAAqB,CAAE,0BAAsB,EAEpC,mBAAQ,GAAiB,EAAkB,EAAE01B,EAAe,ECxI3E,SAASI,GAASjqB,EAAO,CACvB,KAAM,CAACshB,EAAiBC,CAAkB,EAAI,mBAAS,EACjD,CAACG,EAAeC,CAAgB,EAAI,mBAAS,EAC7ClsB,EAAU,YAAW,EACrBD,EAAW,YAAY,EAE7B,GAAI,CAACksB,EAAe,CAClB,MAAM9N,EAAY,IAAI,gBAAgBpe,EAAS,MAAM,EAC/CiR,EAASmN,EAAU,IAAI,QAAQ,EAC/Blf,EAAWkf,EAAU,IAAI,UAAU,EACrClf,GAAY+R,IACd8a,EAAmB7sB,CAAQ,EAC3BitB,EAAiBlb,CAAM,EAE3B,CAEA,SAASmc,EAASluB,EAAU+R,EAAQ,CAClC8a,EAAmB7sB,CAAQ,EAC3BitB,EAAiBlb,CAAM,EAEvB,MAAMoc,EAAe,IAAI,gBAAgB,EAAE,EAC3CA,EAAa,OAAO,SAAUpc,CAAM,EACpCoc,EAAa,OAAO,WAAYnuB,CAAQ,EACxCe,EAAQ,KAAK,CACX,SAAUD,EAAS,SACnB,OAAQqtB,EAAa,SAAS,CAChC,CAAC,CACH,CAEA,OACE,oCACE,kBAAC,GAAe,CACd,QAAS7iB,EAAM,QACf,SAAA4iB,EACA,cAAelB,EACf,gBAAiBJ,CAAA,CACnB,EACDA,GAAmBI,GAClB,kBAAC,GAAe,CACd,QAAS1hB,EAAM,QACf,SAAUshB,EACV,OAAQI,CAAA,CACV,CACF,CAEJ,CAEAuI,GAAS,UAAY,CACnB,QAAS,IAAU,OAAO,WAC1B,OAAQ,IAAU,OAClB,SAAU,IAAU,IACtB,EAEe,mBAAS91B,IAAW,CACjC,OAAQA,EAAM,MAChB,EAAE,EAAE81B,EAAQ,E,UC/CZ,SAASC,GAAYlqB,EAAO,CAC1B,KAAM,CAAE,OAAArM,EAAQ,qBAAAw2B,EAAsB,WAAAvc,CAAW,EAAI5N,EAC/C,CAAE,YAAA9C,CAAY,EAAI8C,EAAM,MAAM,OAC9BoqB,EAAiBxc,EAAW,SAASja,EAAO,MAE5CgC,EAAa,sBAAayO,GAAU,CACpCzQ,EAAO,MACTw2B,EAAqBx2B,EAAQuJ,EAAakH,CAAK,CAEnD,EAAG,CAACzQ,EAAQuJ,EAAaitB,CAAoB,CAAC,EAE9C,2BAAU,IAAM,CACd,SAAS,MAAQ,kBAAoBjtB,EACrCvH,EAAW,CACb,EAAG,CAAChC,EAAQuJ,EAAavH,CAAU,CAAC,EAGlC,oCACE,kBAAC8V,EAAA,EAAW,CAAC,QAASzL,EAAM,YAAY,SAAWyL,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAChG,kBAACiU,GAAA,EAAW,KACV,kBAACC,GAAA,EAAI,CAAC,UAAU,MAAK,WAASziB,CAAY,EAC5C,kBAAC,KAAS,CACR,WAAY0Q,EAAW,WACvB,cAAejY,CAAA,CACjB,CACA,EACCy0B,GAAkBA,EAAeltB,IACjC,oCACE,kBAAC,GAAO,CAAC,QAASktB,EAAeltB,EAAA,CAAc,EAC/C,kBAAC,GAAQ,CAAC,QAASktB,EAAeltB,EAAA,CAAc,CAClD,CAEL,CACA,CAEJ,CAEAgtB,GAAY,UAAY,CACtB,MAAO,IAAU,OAAO,WACxB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,qBAAsB,IAAU,KAChC,YAAa,IAAU,MACzB,EAEA,SAAS,GAAgB/1B,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,WAAYA,EAAM,QAClB,YAAaA,EAAM,WACrB,CACF,CAEA,MAAM,GAAqB,CACzB,yBACF,EAEe,mBAAQ,GAAiB,EAAkB,EAAE+1B,EAAW,E,2KCpDvE,MAAM,WAAqB,WAAgB,CAA3C,kCAOE,qBAAc9lB,GAAU,CACtB,KAAK,MAAM,SAAS,aAAsB,KAAK,MAAM,OAAQA,CAAK,CAAC,CACrE,CAAC,CAAD,CAEA,mBAAqB,CACnB,SAAS,MAAQ,gBACb,KAAK,MAAM,OAAO,MACpB,KAAK,WAAW,CAEpB,CAEA,mBAAoBwG,EAAW,CACzB,KAAK,MAAM,OAAO,OAASA,EAAU,OAAO,MAC9C,KAAK,WAAW,CAEpB,CAEA,QAAU,CACR,KAAM,CAAE,WAAAgD,CAAW,EAAI,KAAK,MACtBpM,EAAWoM,EAAW,SAAS,KAAK,MAAM,OAAO,MAMvD,GAAI,CAACpM,EACH,OAAO,gBAACqJ,GAAA,EAAQ,IAAC,EAGnB,MAAMiB,EAAU,CACd,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAQ,IAAC,EAAI,MAAM,OAAO,EACtD,UAAW,MACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAa,IAAC,EAAI,MAAM,aAAa,EACjE,UAAW,YACb,EACA,CACE,MAAO,OACP,UAAW,MACb,EACA,CACE,MAAO,cACP,UAAW,aACb,CACF,EACA,IAAIO,EAAO,CAAC,EACZ,OAAA7K,EAAS,QAASgF,GAAY,CAC5B,IAAI6Z,EAAI,CACN,MAAO,CACL,CAAC,MAAO,gBAAC,IAAI,CAAC,GAAI,KAAK,MAAM,OAAO,WAAa,YAAc7Z,EAAQ,gBAAiBA,EAAQ,IAAK,EAAS,MAAO,CAAC,OAAQ,MAAM,CAAC,EACrI,CAAC,MAAOA,EAAQ,gBAAiB,MAAO,CAAC,OAAQ,YAAY,CAAC,EAC9D,CAAC,MAAOA,EAAQ,KAAM,MAAO,CAAC,OAAQ,MAAM,CAAC,EAC7C,CAAC,MAAO,gBAAC,IAAI,CAAC,GAAI,KAAK,MAAM,OAAO,WAAa,mBAAqBA,EAAQ,MAAM,QAAM,EAAS,MAAO,CAAC,OAAQ,aAAa,CAAC,CACnI,CACF,EACA6F,EAAK,KAAKgU,CAAC,CACb,CAAC,EAEC,gBAAC5U,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAACA,EAAA,EAAW,CAAC,MAAO,CAAC,aAAc,KAAK,GACtC,gBAAC,KAAS,CACR,WAAYmC,EAAW,WACvB,cAAe,KAAK,WACtB,CACF,EACA,gBAACtB,GAAA,EAAK,CACJ,aAAW,iBACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,gBAAC,KAAW,IAAC,EACb,gBAAC,KAAS,IAAC,CACb,CACF,CAEJ,CACF,CAtFE,GADI,GACG,YAAY,CACjB,OAAQ,IAAU,OAClB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EAoFY,mBAAQlY,IAAU,CAC/B,OAAQA,EAAM,OACd,WAAYA,EAAM,QACpB,EAAE,EAAE,EAAY,ECjGhB,SAASk2B,GAAkBrqB,EAAO,CAChC,MAAMsqB,EAAetqB,EAAM,MAAM,OAAO,aAClCpC,EAAYoC,EAAM,MAAM,OAAO,UAC/BrM,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5Co2B,EAAY,YAAap2B,GAAUA,EAAM,UAAU,UAAUR,EAAO,KAAK,EACzEmB,EAAa,YAAaX,GAAUA,EAAM,OAAO,UAAU,EAC3DY,EAAW,YAAaZ,GAAUA,EAAM,YAAY,QAAQ,EAC5DH,EAAW,YAAY,EAEvBw2B,EAAW,kBAAQ,IACvBD,EAAUA,EAAU,KAAMhyB,GAAMA,EAAE,OAAS+xB,CAAY,EAAE,KACzD,CAACC,EAAWD,CAAY,CAAC,EACrB1E,EAAQ,kBAAQ,IACpB4E,EAASA,EAAS,OAAO,KAAMjyB,GAAMA,EAAE,OAASqF,CAAS,EAAE,KAC3D,CAAC4sB,EAAU5sB,CAAS,CAAC,EAEvB,2BAAU,IAAM,CACd,SAAS,MAAQ,sBACjB5J,EAAS,aAAuBL,CAAM,CAAC,CACzC,EAAG,CAACA,EAAQK,CAAQ,CAAC,EAGnB,oCACE,kBAACyX,EAAA,EAAW,CAAC,QAAS1W,EAAW0W,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC9E,kBAACkc,GAAA,EAAK,KACJ,kBAACC,GAAA,EAAS,IACV,EACA,kBAACA,GAAA,EAAS,KACR,kBAAC,KAAY,CACX,YAAa9yB,EACb,eAAgB,IAAM,CAACd,EAAS,aAAeL,CAAM,CAAC,CAAC,EACzD,CACF,CACF,EACA,kBAACsX,GAAA,EAAK,CAAC,aAAa,MAAK,SAChBrN,EAAU,OAAK0sB,CACxB,EACC1E,GACA,oCACE,kBAACiC,GAAW,CAAC,MAAAjC,CAAA,CAAa,EACzBA,EAAM,iBACN,kBAAC,GAAe,CACd,eAAgBA,EAAM,gBACtB,SAAU,GACZ,CAEH,CAEH,CACF,CAEJ,CAEAyE,GAAkB,UAAY,CAC5B,MAAO,IAAU,OAAO,UAC1B,EAEe,mBAAWA,EAAiB,ECvE3C,SAAS,IAAiB,CAExB,OACE,mCACA,CAEJ,CAEe,UCMf,SAASI,GAAWzqB,EAAO,CACzB,KAAM,CAAE,OAAAuoB,EAAQ,SAAA1c,CAAS,EAAI7L,EACvB8L,EAAU,CACd,CACE,MAAO,OACP,UAAW,MACb,CACF,EAEA,SAAS4e,EAAe3G,EAAO,CAC7B,MAAO,CACL,MAAO,CACL,CACE,MAAOA,EAAM,IACf,CACF,CACF,CACF,CAEA,SAAS5X,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAMue,EAAapC,GAAUA,EAAO,OAAS,EAE7C,IAAIlc,EAAO,CAAC,EACZ,OAAIR,GACFQ,EAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnB6e,IACFte,EAAOkc,EAAO,IAAKxE,GAAU2G,EAAe3G,CAAK,CAAC,GAKpD,oCACE,kBAACzX,GAAA,EAAK,CACJ,aAAW,cACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACR,GAAY,CAAC8e,GACb,kBAAC5f,GAAA,EAAU,KACT,kBAACE,GAAA,EAAK,CAAC,aAAa,MAAK,iBAAe,EACxC,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,CAEJ,CAEJ,CAEAke,GAAW,UAAY,CACrB,OAAQ,IAAU,MAClB,SAAU,IAAU,KAAK,UAC3B,EAEe,OAAAA,GC7Ef,SAASG,GAAa5qB,EAAO,CAC3B,MAAMsqB,EAAetqB,EAAM,MAAM,OAAO,aAClCrM,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5Co2B,EAAY,YAAap2B,GAAUA,EAAM,UAAU,UAAUR,EAAO,KAAK,EACzEmB,EAAa,YAAaX,GAAUA,EAAM,OAAO,UAAU,EAC3DY,EAAW,YAAaZ,GAAUA,EAAM,YAAY,QAAQ,EAC5DH,EAAW,YAAY,EACvB,CAACuwB,EAAcsG,CAAe,EAAI,mBAAS,QAAQ,EAEnDL,EAAW,kBAAQ,IACvBD,EAAUA,EAAU,KAAMhyB,GAAMA,EAAE,OAAS+xB,CAAY,EAAE,KACzD,CAACC,EAAWD,CAAY,CAAC,EAE3B,oBAAU,IAAM,CACd,SAAS,MAAQ,gBACjBt2B,EAAS,aAAuBL,CAAM,CAAC,CACzC,EAAG,CAACA,EAAQK,CAAQ,CAAC,EAErB,MAAM82B,EAAiB,CAAChhB,EAAO2K,IAAa,CAC1CoW,EAAgBpW,CAAQ,CAC1B,EAEA,OACE,oCACE,kBAAChJ,EAAA,EAAW,CAAC,QAAS1W,EAAW0W,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC9E,kBAACkc,GAAA,EAAK,KACJ,kBAACC,GAAA,EAAS,IACV,EACA,kBAACA,GAAA,EAAS,KACR,kBAAC,KAAY,CACX,YAAa9yB,EACb,eAAgB,IAAM,CAACd,EAAS,aAAeL,CAAM,CAAC,CAAC,EACzD,CACF,CACF,EACA,kBAACsX,GAAA,EAAK,CAAC,aAAa,MAAK,YACbqf,CACZ,EACCE,GACA,oCACE,kBAAC,GAAc,CAAC,SAAAA,CAAA,CAAmB,EACnC,kBAACpV,GAAA,EAAI,CAAC,UAAWmP,EAAc,SAAUuG,CAAA,EACvC,kBAACzV,GAAA,EAAG,CACF,SAAS,SACT,MAAO,kBAACE,GAAA,EAAY,KAAC,QAAM,GAE1BiV,EAAS,QACT,kBAAC,GAAU,CACT,OAAQA,EAAS,OACjB,SAAU,GACV,WAAY,GAAG72B,EAAO,uBAAuB22B,SAAA,CAAqB,CAEvE,EACA,kBAACjV,GAAA,EAAG,CACF,SAAS,UACT,MAAO,kBAACE,GAAA,EAAY,KAAC,SAAO,GAE3BiV,EAAS,SACT,kBAAC,GAAW,CACV,QAASA,EAAS,QAClB,SAAU,GAAM,CAErB,EACA,kBAACnV,GAAA,EAAG,CACF,SAAS,SACT,MAAO,kBAACE,GAAA,EAAY,KAAC,QAAM,GAE1BiV,EAAS,QACT,kBAAC,GAAU,CACT,OAAQA,EAAS,OACjB,SAAU,GAAM,CAErB,CACF,CACF,CAEH,CACF,CAEJ,CAEAI,GAAa,UAAY,CACvB,MAAO,IAAU,OAAO,UAC1B,EAEe,mBAAWA,EAAY,ECxFtC,SAASG,GAAc/qB,EAAO,CAC5B,KAAM,CAAE,UAAAuqB,EAAW,SAAA1e,EAAU,OAAAlY,CAAO,EAAIqM,EAClC8L,EAAU,CACd,CACE,MAAO,OACP,UAAW,MACb,CACF,EAEA,SAASkf,EAAkBR,EAAU,CACnC,MAAO,CACL,MAAO,CACL,CACE,MACE,kBAAC,IAAI,CAAC,GAAI,GAAG72B,EAAO,uBAAuB62B,EAAS,QAASA,EAAS,IAAK,CAE/E,CACF,CACF,CACF,CAEA,SAASre,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAM6e,EAAgBV,GAAaA,EAAU,OAAS,EAEtD,IAAIle,EAAO,CAAC,EACZ,OAAIR,GACFQ,EAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnBmf,IACF5e,EAAOke,EAAU,IAAKC,GAAaQ,EAAkBR,CAAQ,CAAC,GAKhE,oCACE,kBAACle,GAAA,EAAK,CACJ,aAAW,iBACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACR,GAAY,CAACof,GACb,kBAAClgB,GAAA,EAAU,KACT,kBAACE,GAAA,EAAK,CAAC,aAAa,MAAK,oBAAkB,EAC3C,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,CAEJ,CAEJ,CAEAwe,GAAc,UAAY,CACxB,UAAW,IAAU,MACrB,SAAU,IAAU,KAAK,WACzB,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,SAAU,IAAU,IACtB,EAEe,mBAAS52B,IAAW,CACjC,OAAQA,EAAM,OACd,KAAMA,EAAM,IACd,EAAE,EAAE42B,EAAa,EC9FjB,SAASG,IAAgB,CACvB,MAAMv3B,EAAS,YAAaQ,GAAUA,EAAM,MAAM,EAC5Co2B,EAAY,YAAap2B,GAAUA,EAAM,UAAU,UAAUR,EAAO,KAAK,EACzEmB,EAAa,YAAaX,GAAUA,EAAM,OAAO,UAAU,EAC3DY,EAAW,YAAaZ,GAAUA,EAAM,YAAY,QAAQ,EAC5DH,EAAW,YAAY,EAE7B,2BAAU,IAAM,CACd,SAAS,MAAQ,iBACjBA,EAAS,aAAuBL,CAAM,CAAC,CACzC,EAAG,CAACA,EAAQK,CAAQ,CAAC,EAGnB,oCACE,kBAACyX,EAAA,EAAW,CAAC,QAAS1W,EAAW0W,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC9E,kBAACkc,GAAA,EAAK,KACJ,kBAACC,GAAA,EAAS,IACV,EACA,kBAACA,GAAA,EAAS,KACR,kBAAC,KAAY,CACX,YAAa9yB,EACb,eAAgB,IAAM,CAACd,EAAS,aAAeL,CAAM,CAAC,CAAC,EACzD,CACF,CACF,EACA,kBAACsX,GAAA,EAAK,CAAC,aAAa,MAAK,WAEzB,EACA,kBAAC,GAAa,CACZ,UAAAsf,EACA,SAAUz1B,CAAA,CAAY,CAC1B,CACF,CAEJ,CAEe,mBAAWo2B,EAAa,E,UCrCvC,SAASC,GAAU,CAAE,UAAAC,EAAW,OAAAz3B,EAAQ,SAAAkY,CAAS,EAAG,CAClD,GAAIA,GAAY,CAACuf,EACf,OACE,kBAAC,cACC,kBAAChf,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,EAGJ,GAAI,CAACgf,EACH,OACE,kBAAC,WAAI,oBAEL,EAGJ,MAAM/e,EAAO,CAAC,EACd,OAAAA,EAAK,KAAK,CAAC,MAAO,OAAQ,MAAO+e,EAAU,IAAI,CAAC,EAChD/e,EAAK,KAAK,CAAC,MAAO,kBAAmB,MAAO+e,EAAU,QAAQ,KAAK,CAAC,EACpE/e,EAAK,KAAK,CAAC,MAAO,MAAO,MAAO+e,EAAU,GAAG,CAAC,EAC9C/e,EAAK,KAAK,CAAC,MAAO,SAAU,MAAO+e,EAAU,OAAS,MAAQ,IAAI,CAAC,EAC/DA,EAAU,QACZ/e,EAAK,KAAK,CAAC,MAAO,2BACP,MAAO+e,EAAU,QAAQ,aAAa,CAAC,EAEpDA,EAAU,QAAQ,YAAY,QAAQC,GAAU,CAC9Chf,EAAK,KAAK,CAAC,MAAO,UACP,MAAO,kBAAC,IAAI,CAAC,GAAI,GAAG1Y,EAAO,uBAAuB03B,EAAO,iBAC/CA,EAAO,QACV,CAAO,CAAC,CAC5B,CAAC,EAEC,kBAAClH,GAAA,EAAe,CAAC,aAAY,GACZ,MAAO,CAAC,kCAAmC,QAAQ,EACnD,UAAU,aACxB9X,EAAK,IAAI,CAACnT,EAAMlD,IACf,kBAACouB,GAAA,EAAoB,CAAC,IAAKpuB,CAAA,EACzB,kBAACquB,GAAA,EAAmB,KACjBnrB,EAAK,KACR,EACA,kBAACorB,GAAA,EAA0B,KACxBprB,EAAK,KACR,CACF,CACD,CACH,CAEJ,CAEAiyB,GAAU,UAAY,CACpB,UAAW,IAAU,OAAO,WAC5B,SAAU,IAAU,KAAK,WACzB,OAAQ,IAAU,OAAO,UAC3B,EAEA,SAAS,GAAgBh3B,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,MAChB,CACF,CAEe,mBAAQ,EAAe,EAAEg3B,EAAS,EC5DjD,SAASG,GAAc,CAAE,MAAA5B,EAAO,WAAAxlB,EAAY,OAAAvQ,EAAQ,wBAAAwQ,EAAyB,WAAArP,EAAY,YAAAgZ,CAAY,EAAG,CAEtG,MAAMyd,EAAgB7B,EAAM,OAAO,cAEnC,oBAAU,IAAM,CACd,SAAS,MAAQ,oBAAoB6B,IACrCpnB,EAAwBxQ,EAAQ,EAAI,CACtC,EAAG,CAACwQ,EAAyBxQ,EAAQ43B,CAAa,CAAC,EAEnD,MAAMH,EAAYlnB,EAAWvQ,EAAO,MAAQuQ,EAAWvQ,EAAO,MAAM,KAClE4E,GAAKA,EAAE,OAASgzB,CAAa,EAAI,OAEnC,OACE,kBAAC9f,EAAA,EAAW,CAAC,QAASqC,EAAY,SAAWrC,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OAC1F,kBAACR,GAAA,EAAK,CAAC,aAAa,MAAK,yBACD,kBAAC,QAAK,MAAO,CAAC,MAAO,sCAAsC,GAAIsgB,CAAc,CACrG,EAEA,kBAAC,GAAS,CAAC,UAAAH,EACA,SAAUt2B,CAAA,CAAY,CACnC,CAEJ,CAEAw2B,GAAc,UAAY,CACxB,MAAO,IAAU,OAAO,WACxB,WAAY,IAAU,OAAO,WAC7B,OAAQ,IAAU,OAAO,WACzB,WAAY,IAAU,KAAK,WAC3B,wBAAyB,IAAU,KAAK,WACxC,YAAa,IAAU,MACzB,EACA,MAAM,GAAqB,CAAE,4BAAwB,EAErD,SAAS,GAAgBn3B,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,WAAYA,EAAM,WAAW,WAC7B,WAAYA,EAAM,WAAW,WAC7B,YAAaA,EAAM,WACrB,CACF,CAEe,mBAAQ,GAAiB,EAAkB,EAAEm3B,EAAa,E,iCC3BzE,SAASE,GAAexrB,EAAO,CAC7B,KAAM,CAAE,WAAAkE,EAAY,SAAA2H,EAAU,OAAAlY,CAAO,EAAIqM,EACnC8L,EAAU,CACd,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAe,IAAC,EAAI,MAAM,OAAO,EAC7D,UAAW,MACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAiB,IAAC,EAAI,MAAM,UAAU,EAClE,UAAW,SACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAiB,IAAC,EAAI,MAAM,MAAM,EAC9D,UAAW,KACb,EACA,CACE,MAAO,kBAAC,IAAY,CAAC,KAAM,kBAAC,KAAU,IAAC,EAAI,MAAM,SAAS,EAC1D,UAAW,QACb,CACF,EAEA,SAAS2f,EAAmBL,EAAW,CAErC,MAAO,CACL,MAAO,CACL,CACE,MACE,kBAAC,IAAI,CAAC,GAAI,GAAGz3B,EAAO,wBAAwBy3B,EAAU,QAASA,EAAU,IAAK,CAElF,EACA,CACE,MAAOA,EAAU,QAAQ,KAC3B,EACA,CACE,MAAOA,EAAU,GACnB,EACA,CACE,MAAOA,EAAU,OACf,kBAAC1c,GAAA,EAAK,CACJ,MAAO,CACL,WAAY,+BACZ,cAAe,QACjB,GACD,QAED,EACE,EACN,CACF,CACF,CACF,CAEA,SAASvC,GAAoB,CAgB3B,MAfa,CACX,CACE,WAAY,GACZ,MAAO,CACL,CACE,MAAO,CAAE,QAAS,CAAE,EACpB,MACE,kBAAC,cACC,kBAACC,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CAEJ,CACF,CACF,CACF,CAEF,CAEA,MAAMsf,EAAiBxnB,GAAcA,EAAW,OAAS,EAEzD,IAAImI,EAAO,CAAC,EACZ,OAAIR,GACFQ,EAAOF,EAAkB,EACzBL,EAAQ,GAAG,UAAY,IAEnB4f,IACFrf,EAAOnI,EAAW,IAAKknB,GAAcK,EAAmBL,CAAS,CAAC,GAKpE,oCACE,kBAAC9e,GAAA,EAAK,CACJ,aAAW,kBACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAAO,EACA,UAAU,cAEV,kBAAC,KAAW,IAAC,EACb,kBAAC,KAAS,IAAC,CACb,EAIC,CAACR,GAAY,CAAC6f,GACb,kBAAC3gB,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAU,EAChC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,qBAAmB,EAC5C,kBAACsB,GAAA,EAAc,KAAC,qBAEhB,CACF,CAEJ,CAEJ,CAEAif,GAAe,UAAY,CACzB,WAAY,IAAU,MACtB,SAAU,IAAU,KAAK,WACzB,OAAQ,IAAU,OAClB,KAAM,IAAU,OAChB,SAAU,IAAU,IACtB,EAEe,mBAASr3B,IAAW,CACjC,OAAQA,EAAM,OACd,KAAMA,EAAM,IACd,EAAE,EAAEq3B,EAAc,EC3IlB,SAASG,GAAe,CAAE,OAAAh4B,EAAQ,WAAAuQ,EAAY,WAAApP,EAAY,wBAAAqP,CAAwB,EAAG,CACnF,2BAAU,IAAM,CACd,SAAS,MAAQ,kBACjBA,EAAwBxQ,EAAQ,EAAI,CACtC,EAAG,CAACwQ,EAAyBxQ,CAAM,CAAC,EAGlC,oCACE,kBAAC8X,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,kBAAC,GAAc,CACb,WAAYvH,EAAWvQ,EAAO,MAC9B,SAAUmB,CAAA,CAAY,CAC1B,CACF,CAEJ,CAEA62B,GAAe,UAAY,CACzB,OAAQ,IAAU,OAAO,WACzB,WAAY,IAAU,OAAO,WAC7B,WAAY,IAAU,KAAK,WAC3B,wBAAyB,IAAU,KAAK,UAC1C,EAEA,SAAS,GAAgBx3B,EAAO,CAC9B,MAAO,CACL,OAAQA,EAAM,OACd,WAAYA,EAAM,WAAW,WAC7B,WAAYA,EAAM,WAAW,UAC/B,CACF,CAEA,MAAM,GAAqB,CAAE,4BAAwB,EAEtC,mBAAQ,GAAiB,EAAkB,EAAEw3B,EAAc,E,mOC/B1E,MAAM,WAAmB,WAAgB,CAcvC,aAAc,CACZ,MAAM,EAPR,gBAAQ,CACN,YAAa,GACb,oBAAqB,GACrB,gBAAiB,EACnB,CAAC,EAgBD,oBAAaC,GAAY,CACvB,KAAK,KAAK,MAAMA,CAAO,CACzB,CAAC,EAED,mBAAW,IAAM,CACf,KAAK,SAAS,IAAI,CACpB,CAAC,EA2ED,8BAAuBrzB,GAAM,CAC3B,KAAK,SAAS,CAAC,YAAaA,EAAE,OAAO,OAAO,CAAC,CAC/C,CAAC,EAED,sCAA+BA,GAAM,CACnC,KAAK,SAAS,CAAC,oBAAqBA,EAAE,OAAO,OAAO,CAAC,CACvD,CAAC,EAED,kCAA2BA,GAAM,CAC/B,KAAK,SAAS,CAAC,gBAAiBA,EAAE,OAAO,OAAO,CAAC,CACnD,CAAC,EAED,2BAAmB,KACV,CACL,MAAO,KAAK,MAAM,YAClB,UAAW,KAAK,MAAM,gBACtB,cAAe,KAAK,MAAM,mBAC5B,EACD,EAED,yBAAkBA,GAAM,CACtB,MAAMszB,EAAgB,KAAK,iBAAiB,EAC5CA,EAAc,YAActzB,EAAE,MAAQ,QAClCA,EAAE,MAAQ,SAEZA,EAAE,eAAe,EAEfA,EAAE,MAAQ,SAAWA,EAAE,SACzB,KAAK,YAAY,aAAaA,EAAE,OAAO,MAAOszB,CAAa,EAE3D,KAAK,YAAY,SAAStzB,EAAE,OAAO,MAAOszB,CAAa,CAE3D,CAAC,EA7HC,KAAK,cAAgB,GACrB,KAAK,WAAa,YAAgB,EAClC,KAAK,MAAQ,CAAC,CAChB,CAEA,sBAAwB,CAClB,KAAK,KACP,QAAQ,IAAI,WAAW,EACvB,KAAK,GAAG,MAAM,EAElB,CAUA,mBAAoB,CAClB,MAAMC,EAAS,CACb,KAAM,KAAK,MAAM,MAAM,OAAO,OAChC,EAEMpX,EADY,IAAI,gBAAgB,KAAK,MAAM,SAAS,MAAM,EACtC,IAAI,SAAS,EACnCA,IACFoX,EAAO,QAAUpX,GAEnB,MAAMrZ,EAAY,YAAa,EAC3BA,IACFywB,EAAO,MAAQzwB,GAEjB,SAAS,MAAQ,iBAAmBywB,EAAO,KAAK,MAAM,EAAG,CAAC,EAE1D,MAAMC,EAAO,IAAI,YACXC,EAAW,IAAI,YACfC,EAAgB,IAAI,iBACpBC,EAAc,IAAI,eAExBH,EAAK,UAAUC,CAAQ,EACvBD,EAAK,UAAUE,CAAa,EAC5BF,EAAK,UAAUG,CAAW,EAE1BH,EAAK,UAAU,WAAY,EAAE,EAC7BA,EAAK,UAAU,aAAc,GAAO,EACpCA,EAAK,UAAU,eAAgB,EAAI,EACnCA,EAAK,UAAU,aAAc,EAAI,EAIjCA,EAAK,4BAA4B,SAAUxzB,EAAG,CAC5C,OAAOA,EAAE,MAAQ,YAAcA,EAAE,MAAQ,QAC3C,CAAC,EAEDwzB,EAAK,KAAK,KAAK,QAAQ,EACvBC,EAAS,IAAI,EACbD,EAAK,MAAM,EAEX,KAAK,GAAK,IAAI,KAAS,YAAa,KAAK,MAAM,OAAO,SAAS,EAAG,CAChE,QAAS,IACT,YAAa,EACb,OAAQ,IAAM,CACZ,QAAQ,IAAI,QAAQ,EACpB,KAAK,GAAG,KAAK,KAAK,UAAUD,CAAM,CAAC,CACrC,EACA,UAAWvzB,GAAK,CACd,KAAK,UAAUA,EAAE,IAAI,CACvB,EACA,YAAaA,GAAK,CAChB,QAAQ,IAAI,kBAAmBA,CAAC,CAClC,EACA,UAAWA,GAAK,CACd,QAAQ,IAAI,mBAAoBA,CAAC,CACnC,EACA,QAASA,GAAK,CACZ,QAAQ,IAAI,UAAWA,CAAC,EACxB,KAAK,UAAU;AAAA;AAAA,CAA2B,CAC5C,EACA,QAASA,GAAK,CACZ,QAAQ,IAAI,WAAYA,CAAC,CAC3B,CACF,CAAC,EAED,KAAK,KAAOwzB,EACZ,KAAK,YAAcG,EACnB,KAAK,SAAWF,EAEhBD,EAAK,QAAQ,MAAM,QAAU,MAC7B,KAAK,SAAS,EACd,OAAO,iBAAiB,SAAU,KAAK,QAAQ,CACjD,CAoCA,QAAU,CACR,OACE,gBAACtgB,EAAA,EAAW,CAAC,QAAS,KAAK,MAAM,YAAY,SAAWA,EAAA,EAAoB,KAAOA,EAAA,EAAoB,OACrG,gBAAC,KAAI,CAAC,OAAM,IACV,gBAAC,KAAS,CAAC,UAAU,UACnB,gBAAC+Z,GAAA,EAAW,CACV,UAAU,oBACV,KAAK,OACL,YAAY,SACZ,WAAY,KAAK,eACnB,EAAE,sBAEF,gBAACC,GAAA,EAAQ,CACP,QAAS,KAAK,MAAM,YACpB,SAAU,KAAK,oBACjB,EAAW,2BAEX,gBAACA,GAAA,EAAQ,CACP,QAAS,KAAK,MAAM,oBACpB,SAAU,KAAK,4BACjB,EAAW,uBAEX,gBAACA,GAAA,EAAQ,CACP,QAAS,KAAK,MAAM,gBACpB,SAAU,KAAK,wBACjB,CACF,CACF,EACA,gBAAC,OAAI,GAAG,WACH,MAAO,CAAE,OAAQ,MAAM,EACvB,IAAKvmB,GAAO,KAAK,SAAWA,CAAA,CAAK,CACxC,CAEJ,CACF,CAhLE,GADI,GACG,YAAY,CACjB,MAAO,IAAU,OAAO,WACxB,SAAU,IAAU,OAAO,WAC3B,OAAQ,IAAU,OAClB,YAAa,IAAU,MACzB,CAAC,EA8KY,mBAAQ/K,IAAU,CAC/B,OAAQA,EAAM,OACd,YAAaA,EAAM,WACrB,EAAE,EAAE,EAAU,E,6MC9Kd,MAAM,WAAoB,WAAgB,CAA1C,kCAME,qBAAciQ,GAAU,CACtB,KAAK,MAAM,SAAS,aAAqBA,CAAK,CAAC,CACjD,CAAC,CAAD,CAEA,mBAAoB,CAClB,SAAS,MAAQ,eACjB,KAAK,WAAW,CAClB,CAGA,oBAAqB,CAAE,CAEvB,QAAS,CACP,KAAM,CAAE,WAAAwJ,CAAW,EAAI,KAAK,MAC5B,GAAIA,EAAW,WACb,OAAO,gBAAC/C,GAAA,EAAQ,IAAC,EAGnB,MAAMjG,EAAUgJ,EAAW,QAAQ,IAAKja,IAC/B,CACL,MAAO,CACL,CAAE,MAAQ,gBAAC,SAAGA,EAAO,IAAK,CAAM,EAChC,CAAE,MAAQ,gBAAC,IAAI,CAAC,GAAI,MAAQA,EAAO,KAAO,WAAW,QAAM,CAAS,EACpE,CAAE,MAAQ,gBAAC,IAAI,CAAC,GAAI,MAAQA,EAAO,KAAO,aAAa,UAAQ,CAAS,EACxE,CAAE,MAAQ,gBAAC,IAAI,CAAC,GAAI,MAAQA,EAAO,KAAO,SAAS,MAAI,CAAS,EAChE,CAAE,MAAQ,gBAAC,IAAI,CAAC,GAAI,MAAQA,EAAO,KAAO,WAAW,QAAM,CAAS,EACpE,CAAE,MAAQ,gBAAC,IAAI,CAAC,GAAI,MAAQA,EAAO,KAAO,cAAc,WAAS,CAAS,EAC1E,CAAE,MAAQ,gBAAC,IAAI,CAAC,GAAI,MAAQA,EAAO,KAAO,cAAc,WAAS,CAAS,CAC5E,CACF,EACD,EACKmY,EAAU,CACd,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAQ,IAAC,EAAI,MAAM,OAAO,EACtD,UAAW,MACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAW,IAAC,EAAI,MAAM,SAAS,EAC3D,UAAW,QACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAQ,IAAC,EAAI,MAAM,WAAW,EAC1D,UAAW,UACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAS,IAAC,EAAI,MAAM,OAAO,EACvD,UAAW,MACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAU,IAAC,EAAI,MAAM,SAAS,EAC1D,UAAW,QACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAc,IAAC,EAAI,MAAM,YAAY,EACjE,UAAW,WACb,EACA,CACE,MAAO,gBAAC,IAAY,CAAC,KAAM,gBAAC,KAAa,IAAC,EAAI,MAAM,YAAY,EAChE,UAAW,WACb,CACF,EAEA,OACE,gBAACL,EAAA,EAAW,CAAC,QAASA,EAAA,EAAoB,OACxC,gBAACa,GAAA,EAAK,CACJ,aAAW,eACX,QAAS,KAAa,QACtB,MAAOR,EACP,KAAMlH,EACN,UAAU,qBAEV,gBAAC,KAAW,IAAC,EACb,gBAAC,KAAS,IAAC,CACb,CACF,CAEJ,CACF,CAlFE,GADI,GACG,YAAY,CACjB,WAAY,IAAU,OACtB,SAAU,IAAU,IACtB,CAAC,EAiFY,mBAAQzQ,IAAU,CAAE,WAAYA,EAAM,OAAQ,EAAE,EAAE,EAAW,EC3E5E,MAAMg4B,GAAUhjB,GAAS,CACvB,MAAM0H,EAAM,CACV,CACE,MAAO,SACP,GAAI,UACJ,UAAWub,GAAA,CACb,EACA,CACE,MAAO,WACP,GAAI,YACJ,UAAWC,EACb,EACA,CACE,MAAO,OACP,GAAI,QACJ,UAAW,EACb,EACA,CACE,MAAO,SACP,GAAI,UACJ,UAAWC,EACb,EACA,CACE,MAAO,QACP,GAAI,SACJ,UAAWC,EACb,EACA,CACE,MAAO,YACP,GAAI,aACJ,UAAWC,EACb,EACA,CACE,MAAO,aACP,GAAI,cACJ,UAAWC,EACb,EACA,CACE,MAAO,SACP,GAAI,UACJ,UAAWC,EACb,EACA,CACE,MAAO,YACP,GAAI,aACJ,UAAWC,EACb,EACA,CACE,GAAI,cACJ,UAAWC,EACb,EACA,CACE,GAAI,2BACJ,UAAWC,EACb,EACA,CACE,GAAI,iCACJ,UAAWp4B,GAAA,CACb,EACA,CACE,GAAI,mBACJ,UAAWq4B,EACb,EACA,CACE,GAAI,yBACJ,UAAW,EACb,EACA,CACE,GAAI,gBACJ,UAAW,EACb,EACA,CACE,GAAI,kBACJ,UAAW,GACX,MAAO,CAAE,UAAa,SAAU,CAClC,EACA,CACE,GAAI,4BACJ,UAAW,GACX,MAAO,CAAE,UAAa,WAAY,CACpC,EACA,CACE,GAAI,uBACJ,UAAW,GACX,MAAO,CAAE,UAAa,MAAO,CAC/B,EACA,CACE,GAAI,0BACJ,UAAW,GACX,MAAO,CAAE,UAAa,SAAU,CAClC,EACA,CACE,GAAI,6BACJ,UAAW,GACX,MAAO,CAAE,UAAa,OAAQ,QAAW,EAAK,CAChD,EACA,CACE,GAAI,wBACJ,UAAW,EACb,EACA,CACE,GAAI,uBACJ,UAAWC,EACb,EACA,CACE,GAAI,4BACJ,UAAW,EACb,EACA,CACE,GAAI,iBACJ,UAAWC,EACb,EACA,CACE,GAAI,WACJ,UAAWC,GACX,YAAa,EACf,EACA,CACE,GAAI,WACJ,UAAWC,GACX,eAAgB,EAClB,EACA,CACE,GAAI,cACJ,UAAWC,GACX,eAAgB,EAClB,CAEF,EACA,OAAIhkB,GAAQA,EAAK,MACf0H,EAAI,KACF,CACE,MAAO,YACP,GAAI,aACJ,UAAWuc,EACb,CACF,EACAvc,EAAI,KACF,CACE,GAAI,0BACJ,UAAWwc,EACb,CACF,EACAxc,EAAI,KACF,CACE,GAAI,2CACJ,UAAWyc,EACb,CACF,EACAzc,EAAI,KACF,CACE,MAAO,SACP,GAAI,UACJ,UAAW0c,EACb,CACF,EACA1c,EAAI,KACF,CACE,GAAI,oBACJ,UAAW2c,EACb,CACF,EACA3c,EAAI,KACF,CACE,MAAO,UACP,GAAI,WACJ,UAAW4c,EACb,CACF,GAEK5c,CACT,E,uBCxLA,SAAS6c,GAAiB1tB,EAAO,CAC/B,MAAMvK,EAAU,YAAW,EACrB,CAAE,KAAA6C,CAAK,EAAI0H,EAEjB,2BAAU,IAAM,CACV1H,EAAK,UACP7C,EAAQ,KAAK6C,EAAK,QAAQ,CAE9B,EAAG,CAAC7C,EAAS6C,CAAI,CAAC,EAGhB,oCACI,kBAACyS,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAiB,EACvC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,mBAAiB,EAC1C,kBAACsB,GAAA,EAAc,KACb,kBAAC,SAAE,mCAEH,EACA,kBAACH,GAAA,EAAO,CAAC,KAAK,KAAK,CACrB,CACF,CACJ,CAEJ,CAEAshB,GAAiB,UAAY,CACzB,KAAM,IAAU,MACpB,EAEe,mBAASv5B,IAAW,CACjC,KAAMA,EAAM,IACd,EAAE,EAAEu5B,EAAgB,ECzCpB,SAASC,IAAmB,CAC1B,OACE,oCACI,kBAAC5iB,GAAA,EAAU,KACT,kBAACC,GAAA,EAAc,CAAC,KAAM,KAAU,EAChC,kBAACC,GAAA,EAAK,CAAC,aAAa,MAAK,cAAY,EACrC,kBAACsB,GAAA,EAAc,KACb,kBAAC,SAAE,4BAEH,CACF,CACF,CACJ,CAEJ,CAGe,IAAAqhB,GAAAD,G,wYC8Bf,MAAM,WAAY,IAAM,SAAU,CAAlC,kCAkBE,gBAAQ,CACN,qBAAsB,EACxB,CAAC,EAoCD,wBAAiBE,GAAS,CACxB,KAAM,CAAE,OAAAl6B,EAAQ,KAAAyV,EAAM,KAAA9Q,CAAK,EAAI,KAAK,MAC9Bw1B,EAAY,CAAC,EAEnB,GAAK,OAAO,SAAS,OAAS,OAAO,SAAS,WACzC,YAAe,EAAI,gBAGtB,OAAO,kBAACC,GAAgB,MAE1B,GAAI,CAAC,KAAK,YAAY,EACpB,OAAO,kBAACljB,GAAA,EAAQ,IAAC,EAEnB,GAAIzB,EAAK,KAAK,gBAAkB,CAAC9Q,EAAK,KAAM,CAC1C,QAAQ,IAAI,4BAA4B,EACxC,MAAMkQ,EAAkB,OAAO,SAAS,KAAK,MAAM,YAAe,EAAE,MAAM,EAG1E,oBAAa,QAAQ,qBAAsBA,IAAkB,GAAK,IAAMA,CAAe,EACvF,KAAK,MAAM,OAAO,EACX,kBAACqC,GAAA,EAAQ,IAAC,CACnB,CACA,OAAIzB,EAAK,KAAK,gBAAkB9Q,EAAK,MAAM,OAAO,EACzC,kBAACs1B,GAAgB,OAE1BC,EAEG,OAAO30B,GACLvF,EAAO,YAAc,CAACuF,EAAK,aAAgB,CAACvF,EAAO,UAAU,EAC/D,QAAQ,CAACuF,EAAM8U,IAAU,CAKxB8f,EAAU,KACR,kBAAC,IAAK,CACJ,IAAK9f,EACL,KACE9U,EAAK,aACHA,EAAK,eADYA,EAAK,GACUvF,EAAO,YAAcuF,EAAK,GAC9D,OAAQ80B,GACN,kBAAC90B,EAAK,UAAL,SAAmBA,EAAK,KAAK,EAAM80B,CAAW,CAAE,EAEnD,MAAK,GACP,CACF,CACF,CAAC,EACCr6B,EAAO,cACTm6B,EAAU,KACR,kBAAC,IAAQ,CAAC,KAAK,IAAI,GAAIn6B,EAAO,aAAc,IAAI,gBAAgB,CAClE,EAEA,kBAAC,IAAM,KACJm6B,CACH,EAEJ,CAAC,EAsDD,oCAA6BG,GAAwB,CACnD,KAAK,SAAS,CACZ,oBAAAA,CACF,CAAC,CACH,CAAC,EAED,oCAA4B,IAAM,CAChC,KAAK,SAAS,CACZ,oBAAqB,CAAC,KAAK,MAAM,mBACnC,CAAC,CACH,CAAC,EAED,+BAAuB,IAAM,CAC3B,KAAM,CAAE,QAAAx4B,CAAQ,EAAI,KAAK,MACzBA,EAAQ,KAAK,aAAa,CAC5B,CAAC,EAED,wBAAgB,IAAM,CACpB,KAAM,CAAE,QAAAA,CAAQ,EAAI,KAAK,MACzBA,EAAQ,KAAK,UAAU,CACzB,CAAC,EAED,kCAA0B,IAAM,CAC9B,OAAO,KAAK,2BAA4B,SAAU,qBAAqB,CACzE,CAAC,EAED,2BAAmB,IAAM,CACvB,KAAM,CAAE,QAAAA,EAAS,OAAA9B,CAAO,EAAI,KAAK,MACjC8B,EAAQ,KAAK9B,EAAO,YAAY,CAClC,CAAC,EAED,8BAAuBu6B,GAEnB,kBAACC,GAAA,EAAqB,KACnBD,EAAc,IAAIE,GAAgB,CACjC,IAAIC,EACJ,OAAID,EAAa,OAAS,QACxBC,EACE,oCACE,kBAAC,cAAQD,EAAa,IAAK,EAAS,IAAEA,EAAa,OAAO,QACzDA,EAAa,GAChB,EAGFC,EAAoB,kBAAC,YAAMD,EAAa,IAAK,EAG7C,kBAACE,GAAA,EAAsB,CACrB,IAAKF,EAAa,GAClB,KAAMA,EAAa,KACnB,UAAW,IAAM,CAAE,KAAK,MAAM,SAAS,aAAkBA,EAAa,EAAE,CAAC,CAAE,GAE3E,kBAAC,QAAK,MAAO,OAAcA,EAAa,IAAI,EAAE,GAAG,KAAK,MAAM,QAAQ,EAAE,OAAO,GAC1EC,CACH,CACF,CAEJ,CACA,CACF,CAEH,CAAD,CA7MA,WAAWR,EAAM,CACf,KAAM,CAAE,OAAAl6B,CAAO,EAAI,KAAK,MACxB,OAAIA,EAAO,KAEP,kBAAC46B,GAAA,EAAG,CAAC,aAAW,MAAM,QAAQ,cAC5B,kBAACC,GAAA,EAAO,KACLX,EAAK,OAAO30B,GAAQA,EAAK,KAAK,EAAE,IAAIA,GACnC,kBAACu1B,GAAA,EAAO,CAAC,OAAQv1B,EAAK,GAAI,IAAKA,EAAK,IAClC,kBAAC,IAAO,CACN,GAAIvF,EAAO,WAAauF,EAAK,GAC7B,gBAAgB,+BAEfA,EAAK,KACR,CACF,CACD,CACH,CACF,EAIK,kBAACq1B,GAAA,EAAG,CAAC,aAAW,MAAM,QAAQ,aAAa,CAEtD,CAEA,aAAc,CACZ,KAAM,CAAE,KAAAplB,EAAM,KAAAC,EAAM,KAAA9Q,CAAK,EAAI,KAAK,MAClC,MAAO,EAAE6Q,EAAK,YACL,CAACC,EAAK,MACNA,EAAK,YACJ9Q,EAAK,MAAQA,EAAK,KAAK,YACxBA,EAAK,WAChB,CA4DA,oBAAqB,CAEnB,KAAM,CAAE,OAAA3E,EAAQ,KAAAwV,EAAM,KAAAC,EAAM,KAAA9Q,EAAM,kBAAAo2B,CAAkB,EAAI,KAAK,MAC7D,GAAIvlB,EAAK,MAAO,CACd,IAAIwlB,EAAa,KACbC,EAEJ,GAAIzlB,EAAK,OAEPylB,EAAa,GACbD,EAAaxlB,EAAK,eACT,CAACA,EAAK,OAAQ,CAEvBylB,EAAa,IAGT,CAACzlB,EAAK,aAAa,KAAK,gBAAkB7Q,EAAK,OACjD,KAAK,MAAM,SAAS,aAAqB,CAAC,EAG5C,MAAMoxB,EAAQ,YACZ,KAAK,MAAM,SAAS,SAAU,CAAE,KAAM,YAAa,CAAC,EAElDA,IACFiF,EAAajF,EAAM,OAAO,OAE9B,CAEA,GAAI/1B,EAAO,OAASg7B,EAAY,CAC9B,MAAME,EAAe,aAAgBF,EAAYC,CAAU,EAC3D,KAAK,MAAM,SAASC,CAAY,EAC5BF,GACF,KAAK,MAAM,SAAS,aAAwB,CAAC,EAE3CC,GAAc,CAACD,EAGjB,KAAK,MAAM,SAAS,aAAsBxlB,CAAI,CAAC,EAG/C,KAAK,MAAM,SAAS,aAAwBwlB,CAAU,CAAC,CAE3D,CACIh7B,GAAUA,EAAO,MAAQ,CAAC+6B,GAAqB,KAAK,YAAY,IAC/D,CAACtlB,EAAK,KAAK,gBAAkB9Q,EAAK,OAGrC,KAAK,MAAM,SAAS,aAAwB3E,CAAM,CAAC,CAEvD,CACF,CAiEA,sBAAuB,CACrB,KAAM,CAAE,OAAAA,EAAQ,QAAAiR,CAAQ,EAAI,KAAK,MAC3B,CAAE,qBAAAkqB,CAAqB,EAAI,KAAK,MAEtC,GAAIn7B,EAAO,WACT,OACE,kBAACo7B,GAAA,EAAmB,KAClB,kBAAC,cAAO,QAAM,EAAS,IAAEp7B,EAAO,IAClC,EAEG,CACL,MAAMq7B,EAAcC,GAAY,CAC9B,MAAMC,EAAc,KAAK,MAAM,SAAS,SACxC,IAAIC,EACJ,OAAQD,EAAa,CACnB,IAAK,MAAQv7B,EAAO,KAAO,YACzBw7B,EAAS,YACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,QACzBw7B,EAAS,QACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,UACzBw7B,EAAS,UACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,SACzBw7B,EAAS,SACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,aACzBw7B,EAAS,aACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,UACzBw7B,EAAS,UACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,aACzBw7B,EAAS,aACT,MACF,IAAK,MAAQx7B,EAAO,KAAO,UAC3B,QAEEw7B,EAAS,UACT,KACJ,CACA,OAAO,kBAAC,IAAI,CAAC,GAAI,MAAQF,EAAQ,KAAOE,CAAA,EAASF,EAAQ,IAAK,CAChE,EAEMxL,EAAU7e,EAAQ,QAAQ,OAC7BqqB,GAAaA,EAAQ,OAASt7B,EAAO,IACxC,EAAE,IACA,CAACs7B,EAASj5B,IAEN,kBAACsmB,GAAA,EAAY,CAAC,IAAK,mBAAqBtmB,EAAK,UAAWg5B,EAAWC,CAAO,EAAG,CAEhF,EACH,OAAAxL,EAAQ,KACN,kBAAC2L,GAAA,EAAiB,CAAC,IAAI,4BAA4B,EACnD,kBAAC9S,GAAA,EAAY,CACX,IAAI,+BACJ,UAAW,kBAAC,IAAI,CAAC,GAAI3oB,EAAO,cAAc,oBAAkB,EAAS,CACzE,EAEQiR,EAAQ,WACd,kBAACmqB,GAAA,EAAmB,KAAC,qBAErB,EACA,oCACE,kBAACA,GAAA,EAAmB,KAClB,kBAAC5S,GAAA,EAAQ,CACP,OAAQ2S,EACR,OACE,kBAAC1S,GAAA,EAAc,CACb,UAAW,4BAA4B0S,EAAuB,YAAc,KAC5E,GAAG,4BACH,SAAWnW,GAAW,CAAE,KAAK,SAAS,CAAE,qBAAsBA,CAAO,CAAC,CAAE,EACxE,gBAAiB,MAEjB,kBAAC,cAAO,QAAM,EAAS,IAAEhlB,EAAO,IAClC,EACF,SAAU,IAAM,CAAE,KAAK,SAAS,CAAE,qBAAsB,CAACm7B,CAAqB,CAAC,CAAE,EACjF,cAAerL,CAAA,CACjB,CACF,CACF,CACJ,CACF,CAEA,QAAS,CACP,KAAM,CAAE,oBAAAwK,CAAoB,EAAI,KAAK,MAC/B,CAAE,cAAAC,EAAe,aAAAmB,EAAc,OAAA17B,EAAQ,KAAAwV,EAAM,KAAAC,CAAK,EAAI,KAAK,MAE3DykB,EAAO1B,GAAO/iB,EAAK,IAAI,EACvBkmB,EAAM,KAAK,WAAWzB,CAAI,EAE1B0B,EAAqB,CAAC,EACvBpmB,EAAK,QACRomB,EAAmB,KACjB,kBAACjT,GAAA,EAAY,CACX,IAAI,aACJ,QAASxS,GAAS,KAAK,qBAAqBA,CAAK,GAEjD,kBAAC,IAAW,IAAC,EAAE,aACjB,CACF,EAGFylB,EAAmB,KACjB,kBAACjT,GAAA,EAAY,CAAC,IAAI,MAAM,QAASxS,GAAS,KAAK,cAAcA,CAAK,GAChE,kBAAC,IAAQ,IAAC,EAAE,MACd,CACF,EACAylB,EAAmB,KACjB,kBAACjT,GAAA,EAAY,CACX,IAAI,gBACJ,QAASxS,GAAS,KAAK,wBAAwBA,CAAK,GAEpD,kBAAC,IAAQ,IAAC,EAAE,gBACd,CACF,EAEInW,EAAO,MACT47B,EAAmB,KACjB,kBAACjT,GAAA,EAAY,CACX,IAAI,SACJ,QAASxS,GAAS,KAAK,iBAAiBA,CAAK,GAE7C,kBAAC,IAAS,IAAC,EAAE,UACf,CACF,EAGF,MAAM0lB,EACJ,kBAACC,GAAA,EAAe,KAGd,kBAACC,GAAA,EAAoB,CACnB,WAAY,CAAE,QAAS,SAAU,GAAI,SAAU,GAE5C,CAACvmB,EAAK,QACP,kBAAC4lB,GAAA,EAAmB,KAClB,kBAAC,IAAI,CAAC,GAAG,eACP,kBAACl1B,GAAA,EAAM,CAAC,QAASA,GAAA,EAAc,OAC7B,kBAAC,IAAW,IAAC,EAAE,aACjB,CACF,CACF,EAEF,kBAACk1B,GAAA,EAAmB,KAClB,kBAAC,IAAI,CAAC,GAAG,YACP,kBAACl1B,GAAA,EAAM,CAAC,QAASA,GAAA,EAAc,OAC7B,kBAAC,IAAQ,IAAC,EAAE,MACd,CACF,CACF,EACA,kBAACk1B,GAAA,EAAmB,KAClB,kBAAC,KACC,KAAK,2BACL,IAAI,sBACJ,OAAO,UAEP,kBAACl1B,GAAA,EAAM,CAAC,QAASA,GAAA,EAAc,OAC7B,kBAAC,IAAQ,IAAC,EAAE,gBACd,CACF,CACF,EACClG,EAAO,MAAS,KAAK,qBAAqB,CAC7C,EACA,kBAAC+7B,GAAA,EAAoB,KAGnB,kBAACX,GAAA,EAAmB,CAAC,WAAY,CAAE,GAAI,QAAS,GAC9C,kBAAC5S,GAAA,EAAQ,CACP,QAAO,GACP,SAAS,QACT,SAAU,KAAK,0BACf,OAAQ,kBAACwT,GAAA,EAAW,CAAC,SAAU,KAAK,0BAA2B,EAC/D,OAAQ1B,EACR,cAAesB,CAAA,CACjB,CACF,CACF,EACCF,EAAa,mBAAqB,GACjC,kBAACO,GAAA,EAAiB,CAChB,OAAQ,GACR,aAAW,iBAEX,kBAAC,IAAI,CAAC,GAAI,KAAK,MAAM,OAAO,WAAa,iBACnC,MAAO,CAAC,MAAO,OAAO,GAC1B,kBAAC,IAAQ,IAAC,CACZ,CACF,EAEF,kBAAC,GAAQ,IAAC,EACV,kBAACC,GAAW,IAAC,EAEZzmB,EAAK,MAAQA,EAAK,KAAK,eAAkB,kBAAC0mB,GAAa,IAAC,CAC3D,EAIIC,EAAUp8B,EAAO,KAAOA,EAAO,aAAe,IAC9Cq8B,EACJ,kBAACC,GAAA,EAAU,CACT,KAAM,kBAACC,GAAA,EAAK,CAAC,IAAK,KAAM,IAAI,YAAY,EACxC,UAAW,CAAE,GAAIH,CAAQ,EACzB,cAAe,IACf,YAAaP,CAAA,CACf,EAGF,OACE,kBAAC,IAAM,SAAN,KACEtB,EAAc,OAAS,GAAK,KAAK,oBAAoBA,CAAa,EACnE,kBAACiC,GAAA,EAAI,CAAC,UAAU,YAAY,OAAQH,EAAY,YAAaV,CAAA,EAC3D,kBAAC,GAAa,KACX,KAAK,cAAczB,CAAI,CAC1B,CACF,CACF,CAEJ,CACF,CA/bE,GADI,GACG,YAAY,CACjB,cAAe,IAAU,MACzB,aAAc,IAAU,OACxB,kBAAmB,IAAU,KAC7B,KAAM,IAAU,OAChB,OAAQ,IAAU,OAClB,QAAS,IAAU,OACnB,SAAU,IAAU,OACpB,SAAU,IAAU,OACpB,QAAS,IAAU,OACnB,SAAU,IAAU,KACpB,oBAAqB,IAAU,KAC/B,KAAM,IAAU,OAChB,KAAM,IAAU,OAChB,OAAQ,IAAU,IACpB,CAAC,EAmbY,mBAAW,YACxB15B,IAAU,CACR,cAAeA,EAAM,cACrB,aAAcA,EAAM,aAAa,cACjC,kBAAmBA,EAAM,aAAa,MACtC,KAAMA,EAAM,KACZ,OAAQA,EAAM,OACd,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,KAAMA,EAAM,KACZ,KAAMA,EAAM,IACd,EACF,EAAE,oBAAS,EAAG,CAAC,CAAC,E,4rBC9fhB,MAAM,WAAyB,WAAgB,CA0B7C,QAAS,CACP,KAAM,CAAE,YAAAi8B,EAAa,QAAAC,EAAS,SAAAC,CAAS,EAAI,KAAK,MAEhD,QAAQ,MAAM,yCAA0CF,CAAW,EAEnE,MAAMG,EAAc,IAAI,eAAY,SAC/BH,CAAW,EADoB,CAElC,cAAe,iBACf,oBAAqB,YAAe,EAAI,kBACxC,aAAc,YAAe,EAAI,gBACjC,4BAA6B,EAC/B,CAAC,GAEKI,EAAa,CACjB,SAAiBl4B,GAAS,yBAGxB,MAAMI,EAAW,aAAa,QAAQ,oBAAoB,EAC1D,KAAK,MAAM,SAAS,aAAaJ,EAAMI,CAAQ,CAAC,EAChD,KAAK,MAAM,QAAQ,YAAY,CAC7B,KAAM,SACN,YAAA03B,EACA,KAAA93B,CACF,CAAC,CACH,CAAC,EACD,UAAW,IAAY,yBAGrB,KAAK,MAAM,SAAS,aAAc,CAAC,EACnC,KAAK,MAAM,QAAQ,YAAY,CAC7B,KAAM,UACN,YAAA83B,CACF,CAAC,CACH,CAAC,EACD,WAAY,GACZ,YAAAG,CACF,EAGA,OAAAF,EAAQ,UAAaI,GAAQ,CAG3B,GAFA,QAAQ,MAAM,6BAA8BA,CAAG,EAE3CA,EAAI,OAAS,UAAY,KAAE,QAAQA,EAAI,YAAaL,CAAW,EAAG,CACpE,MAAM93B,EAAO,IAAI,QAAKm4B,EAAI,IAAI,EAC9BF,EAAY,QAAQ,EAAE,KAAMG,GAAY,CAItC,IAAIC,EAAe,GACfD,GACEp4B,EAAK,gBAAgB,IAAMo4B,EAAQ,gBAAgB,IACrDC,EAAe,IAGfA,IACF,QAAQ,MAAM,0BAA0B,EACxCJ,EAAY,UAAUj4B,CAAI,EAC1Bi4B,EAAY,OAAO,KAAKj4B,CAAI,EAC5B,KAAK,MAAM,SAAS,aAAaA,CAAI,CAAC,EAE1C,CAAC,CACH,MACSm4B,EAAI,OAAS,WAAa,KAAE,QAAQA,EAAI,YAAaL,CAAW,GACvEG,EAAY,WAAW,EACvB,KAAK,MAAM,SAAS,aAAc,CAAC,GAE5BE,EAAI,OAAS,QAEpBF,EAAY,QAAQ,EAAE,KAAMj4B,GAAS,CAC/BA,IACF,QAAQ,MAAM,0BAA0B,EACxC,KAAK,MAAM,QAAQ,YAAY,CAC7B,KAAM,SACN,YAAA83B,EACA,KAAA93B,CACF,CAAC,EAEL,CAAC,CAEL,EAIAi4B,EAAY,QAAQ,EAAE,KAAMj4B,GAAS,CAC/BA,GACF,QAAQ,MAAM,0CAA0C,EACxD,KAAK,MAAM,SAAS,aAAaA,CAAI,CAAC,IAGtC,QAAQ,MAAM,mCAAmC,EACjD,KAAK,MAAM,QAAQ,YAAY,CAAE,KAAM,MAAO,CAAC,EAEnD,CAAC,EAMDi4B,EAAY,OAAO,uBAAuB,IAAM,CAC1CD,EAAS,UACX,QAAQ,MAAM,6BAA6B,EAC3CC,EAAY,aAAa,EAAE,KAAKj4B,GAAQ,CACtC,QAAQ,MAAM,0BAA0B,EACxC,KAAK,MAAM,SAAS,aAAaA,CAAI,CAAC,EACtC+3B,EAAQ,YAAY,CAClB,KAAM,SACN,YAAAD,EACA,KAAA93B,CACF,CAAC,CACH,EAAG6D,GAAO,CACR,QAAQ,MAAM,wBAAyBA,EAAI,OAAO,CACpD,CAAC,GAED,QAAQ,MAAM,8CAA8C,CAEhE,CAAC,EAGC,gBAAC,gBACC,gBAAC,gBAAY,SAAKq0B,CAAU,EAA3B,CAA6B,IAAK,KAAK,UAAUJ,CAAW,IAC1D,KAAK,MAAM,QACd,CACF,CAEJ,CACF,CArIE,GAlBI,GAkBG,YAAY,CACjB,YAAa,IAAU,OACvB,QAAS,IAAU,OACnB,SAAU,IAAU,OACpB,SAAU,IAAU,KACpB,SAAU,IAAU,GACtB,CAAC,EAiIY,mBAAQj8B,IAAU,CAC/B,YAAaA,EAAM,KAAK,WAC1B,EAAE,EAAE,EAAgB,E,sVC7JpB,MAAM,WAAuB,IAAM,SAAU,CAC3C,QAAS,CACP,MAAMq8B,EAAa,CACjB,WAAY,GACZ,YAAa,IAAI,cACnB,EAEA,OAAO,kBAAC,gBAAY,MAAKA,CAAU,CAAC,CACtC,CACF,CAEe,UCyBf,GAAK,OAAO,SAAS,OAAS,OAAO,SAAS,WACzC,YAAe,EAAI,kBAEtB,IAAS,OACP,kBAAC,GAAc,MACf,SAAS,eAAe,MAAM,CAAC,MAE5B,CAEL,MAAMI,EAAQ,KAAe,EAG7BA,EAAM,SAAS,aAAkB,CAAC,EAIlC,MAAMP,EAAU,IAAI,mBAAiB,MAAM,EAKrCQ,EAAgB,+BAAqBR,CAAO,EAC5CS,EAAc,IAAI,QAAQ,UAAY,CAAC,CAAC,EAC9CD,EAAc,gBAAgB,EAAE,KAAK,IAAK,CACxCC,EAAY,KAAK,UAAW,CAAC,CAAC,CAChC,CAAC,EAED,IAAS,OACP,kBAAC,IAAQ,CAAC,MAAAF,CAAA,EACR,kBAAC,GAAgB,CAAC,QAAAP,EAAkB,SAAUQ,CAAA,EAC5C,kBAAC,IAAM,CAAC,SAAU,IAAI,IAAI,YAAe,CAAC,EAAE,UAAU,kBAAC,GAAG,IAAC,CAAE,CAC/D,CACF,EAAa,SAAS,eAAe,MAAM,CAAC,EAC9C/oB,EAAsB,CACxB,C,igBCvEA,MAAMipB,EAAgB,aAAa,QAAQ,kBAAkB,EAC7D,IAAIX,EAAc,CAChB,UAAW,GACX,UAAW,GACX,MAAO,GACP,aAAc,EAChB,EACIW,IAAkB,OACpBX,EAAc,KAAK,MAAMW,CAAa,GAGzB,OAAC58B,EAAQ,CACtB,WAAY,GACZ,KAAM,KACN,YAAAi8B,CACF,EAAG9vB,IAAW,CACZ,MAAM0wB,EAAc,KAAK,UAAU1wB,EAAO,WAAW,EACrD,OAAQA,EAAO,KAAM,CACnB,KAAK,IACH,OAAO,OACFnM,CAAK,EADH,CAEL,WAAY,GACZ,KAAM,IACR,CAAC,EACH,KAAK,IAKH,OAAI68B,IAAgB,KAAK,UAAU78B,EAAM,WAAW,EAC3C,OACFA,CAAK,EADH,CAEL,WAAY,GACZ,KAAMmM,EAAO,IACf,CAAC,GAED,aAAa,QAAQ,mBAAoB0wB,CAAW,EAC7C,OACF78B,CAAK,EADH,CAEL,WAAY,GACZ,KAAMmM,EAAO,KACb,YAAaA,EAAO,WACtB,CAAC,GAEL,KAAK,IACH,OAAO,OACFnM,CAAK,EADH,CAEL,WAAY,GACZ,KAAM,IACR,CAAC,EACH,QACE,OAAOA,CACX,CACF,E,yaCrDe,GAACA,EAAQ,CACtB,WAAY,EACZ,WAAY,GACZ,UAAW,CAAC,EACZ,SAAU,IACZ,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,IACH,OAAO,QACFnM,CAAK,EADH,CAEL,WAAY,EACd,CAAC,EACH,KAAK,IACH,OAAO,QACFA,CAAK,EADH,CAEL,WAAY,GACZ,UAAWmM,EAAO,UAClB,WAAYA,EAAO,UACrB,CAAC,EACH,KAAK,IACH,OAAO,QACFnM,CAAK,EADH,CAEL,WAAY,EACd,CAAC,EACH,KAAK,IACH,OAAO,QACFA,CAAK,EADH,CAEL,WAAY,EACd,CAAC,EACH,KAAK,IACH,OAAO,QACFA,CAAK,EADH,CAEL,WAAY,GACZ,SAAUmM,EAAO,SACjB,WAAYA,EAAO,UACrB,CAAC,EACH,KAAK,IACH,OAAO,QACFnM,CAAK,EADH,CAEL,WAAY,EACd,CAAC,EACH,QACE,OAAOA,CACX,CACF,E,UC/Ce,IAACA,EAAQ,CACtB,WAAY,GACZ,OAAQ,IACV,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQmM,EAAO,MACjB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,QACE,OAAOA,CACX,CACF,E,UC3Ce,IACb,MAAO,CACL,OAAQ,CAAC,EACT,UAAW,CAAC,EAOZ,QAAS,CAAC,EACV,UAAW,CAAC,EACZ,MAAO,CAAC,EACR,SAAU,CAAC,EACX,WAAY,GACZ,iBAAkB,GAClB,mBAAoB,EACtB,EACA,UAAW,CACT,WAAY,OACZ,WAAY,EACd,EACA,QAAS,CAEP,MAAO,CAAC,EACR,WAAY,GACZ,IAAK,IACP,EACA,KAAM,CAAC,EACP,KAAM,CAAC,CACT,E,2aCbe,IAACA,EAAQ,GAAa,UAAWmM,IAAW,CACzD,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,OAAO,SAAKnM,CAAK,EAAV,CAAY,WAAY,EAAK,CAAC,EACvC,KAAK,KACH,OAAO,SAAKA,CAAK,EAAV,CAAY,WAAYmM,EAAO,WAAY,WAAY,EAAM,CAAC,EACvE,KAAK,KACH,OAAO,SAAKnM,CAAK,EAAV,CAAY,WAAY,CAAC,EAAG,WAAY,EAAM,CAAC,EACxD,QACE,OAAOA,CACX,CACF,E,mbCPe,GAACA,EAAQ,CACtB,WAAY,GACZ,QAAS,CAAC,CACZ,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAASnM,EAAM,OACjB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAAS,OACJA,EAAM,OAAO,EADT,CAEP,CAACmM,EAAO,QAASA,EAAO,OAC1B,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAASnM,EAAM,OACjB,EACF,QACE,OAAOA,CACX,CACF,E,yaC1Be,IAACA,EAAQ,CACtB,WAAY,GACZ,WAAY,CAAC,CACf,EAAGmM,IAAW,CACZ,IAAI2wB,EACJ,OAAQ3wB,EAAO,KAAM,CACnB,KAAK,IACH,MAAO,CACL,WAAY,GACZ,WAAYnM,EAAM,UACpB,EACF,KAAK,IACH,OAAA88B,EAAmB98B,EAAM,WAAWmM,EAAO,QAEzC,MAAKnM,EAAM,UAAU,EADrB,SAAKA,EAAM,UAAU,EAArB,CAAuB,CAACmM,EAAO,QAAS,CAAC,CAAE,CAAC,EAEvC,CACL,WAAY,GACZ,WAAY,SACP2wB,CAAe,EADR,CAEV,CAAC3wB,EAAO,QAAS,SACZ2wB,EAAgB3wB,EAAO,OAAO,EADlB,CAEf,CAACA,EAAO,cAAeA,EAAO,SAChC,CAAC,CACH,CAAC,CACH,EACF,KAAK,IACH,MAAO,CACL,WAAY,GACZ,WAAYnM,EAAM,UACpB,EACF,QACE,OAAOA,CACX,CACF,E,obChCe,IAACA,EAAQ,CAAC,EAAGmM,IAAW,CAUrC,OAPIA,EAAO,cAAgBA,EAAO,KAAK,MAAM,gBAAgB,IAC3DA,EAAS,aAAYA,EAAO,YAAY,GAGtCA,EAAO,cAAgBA,EAAO,KAAK,MAAM,gBAAgB,IAC3DA,EAAS,aAAYA,EAAO,YAAY,GAElCA,EAAO,KAAM,CACnB,KAAK,KACH,OAAInM,EAAM,OAAOi6B,GACfA,EAAa,MAAQ9tB,EAAO,aAAa,KACzC8tB,EAAa,SAAW9tB,EAAO,aAAa,MAAO,EAAE,OAAS,EACvDnM,EACF,CACL,GAAGA,EACH,SAAKmM,EAAO,YAAY,EAAxB,CAA0B,GAAIA,EAAO,GAAI,KAAM,KAAK,IAAI,CAAE,CAAC,GAC/D,KAAK,KACH,OAAOnM,EAAM,OAAO+E,GAASA,EAAK,KAAOoH,EAAO,EAAG,EACrD,KAAK,KACH,MAAO,CAAC,EACV,QACE,OAAOnM,CACX,CACF,E,+aCfe,IAACA,EAAQ,GAAa,MAAOmM,IAAW,CACrD,OAAQA,EAAO,KAAM,CACnB,KAAK,KACL,KAAK,KACH,OAAO,SAAKnM,CAAK,EAAV,CAAY,WAAY,EAAK,CAAC,EACvC,KAAK,KACH,OAAO,SACFA,CAAK,EADH,CAEL,OAAQ,SAAKA,EAAM,MAAM,EAAjB,CAAmB,CAACmM,EAAO,SAAUA,EAAO,KAAM,CAAC,EAC3D,WAAY,EACd,CAAC,EACH,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,UAAW,SAAKA,EAAM,SAAS,EAApB,CAAsB,CAACmM,EAAO,YAAaA,EAAO,QAAS,CAAC,EACvE,WAAY,EACd,CAAC,EACH,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,OAAQ,SAAKA,EAAM,MAAM,EAAjB,CAAmB,CAACmM,EAAO,SAAU,IAAK,CAAC,EACnD,WAAY,EACd,CAAC,EACH,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,UAAW,SAAKA,EAAM,SAAS,EAApB,CAAsB,CAACmM,EAAO,YAAa,IAAK,CAAC,EAC5D,WAAY,EACd,CAAC,EACH,KAAK,KACH,OAAO,SAAKnM,CAAK,EAAV,CAAY,iBAAkB,EAAK,CAAC,EAC7C,KAAK,KACH,OAAO,SACFA,CAAK,EADH,CAEL,QAAS,SAAKA,EAAM,OAAO,EAAlB,CAAoB,CAACmM,EAAO,SAAUA,EAAO,MAAO,CAAC,EAC9D,SAAU,SAAKnM,EAAM,QAAQ,EAAnB,CAAqB,CAACmM,EAAO,SAAUA,EAAO,QAAS,CAAC,EAClE,MAAO,SAAKnM,EAAM,KAAK,EAAhB,CAAkB,CAACmM,EAAO,SAAUA,EAAO,KAAM,CAAC,EACzD,iBAAkB,EACpB,CAAC,EACH,KAAK,KACL,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,QAAS,SAAKA,EAAM,OAAO,EAAlB,CAAoB,CAACmM,EAAO,SAAU,IAAK,CAAC,EACrD,SAAU,SAAKnM,EAAM,QAAQ,EAAnB,CAAqB,CAACmM,EAAO,SAAU,IAAK,CAAC,EACvD,MAAO,SAAKnM,EAAM,KAAK,EAAhB,CAAkB,CAACmM,EAAO,SAAU,IAAK,CAAC,EACjD,iBAAkB,EACpB,CAAC,EACH,KAAK,KACH,OAAO,SAAKnM,CAAK,EAAV,CAAY,mBAAoB,EAAK,CAAC,EAC/C,KAAK,KACH,OAAO,SACFA,CAAK,EADH,CAEL,UAAW,SAAKA,EAAM,SAAS,EAApB,CAAsB,CAACmM,EAAO,SAAUA,EAAO,QAAS,CAAC,EACpE,mBAAoB,EACtB,CAAC,EACH,KAAK,KACL,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,UAAW,SAAKA,EAAM,SAAS,EAApB,CAAsB,CAACmM,EAAO,SAAU,IAAK,CAAC,EACzD,mBAAoB,EACtB,CAAC,EACH,QACE,OAAOnM,CACX,CACF,E,qbC9Ee,IAACA,EAAQ,CACtB,WAAY,GACZ,OAAQ,CAAC,CACX,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQ,SACHA,EAAM,MAAM,EADT,CAEN,CAACmM,EAAO,QAASA,EAAO,MAC1B,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,QACE,OAAOA,CACX,CACF,E,UC3Be,IAACA,EAAQ,CACtB,WAAY,GACZ,OAAQ,KACR,aAAc,IAChB,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACL,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQ,IACV,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQA,EAAO,OACf,aAAcA,EAAO,aACrB,MAAO,EACT,EACF,QACE,OAAOnM,CACX,CACF,E,obCtBe,IAACA,EAAQ,CACtB,WAAY,GACZ,KAAM,CAAC,CACT,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,IACH,MAAO,CACL,WAAY,GACZ,KAAMnM,EAAM,IACd,EACJ,KAAK,IACD,OAAO,SACAA,CAAK,EADL,CAEH,WAAY,GACZ,KAAM,SACCA,EAAM,IAAI,EADX,CAEF,CAACmM,EAAO,QAAS,SACVnM,EAAM,KAAKmM,EAAO,OAAO,EADf,CAEb,CAACA,EAAO,SAAUA,EAAO,GAC7B,CAAC,CACL,CAAC,CACL,CAAC,EACH,KAAK,IACH,MAAO,CACL,WAAY,GACZ,KAAMnM,EAAM,IACd,EACF,QACE,OAAOA,CACX,CACF,E,kbC7Be,IAACA,EAAQ,CACtB,WAAY,GACZ,UAAW,CAAC,CACd,EAAGmM,IAAW,CACZ,IAAI4wB,EACJ,OAAQ5wB,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAWnM,EAAM,SACnB,EACF,KAAK,KACH,OAAA+8B,EAAkB/8B,EAAM,UAAUmM,EAAO,QAEvC,MAAKnM,EAAM,SAAS,EADpB,SAAKA,EAAM,SAAS,EAApB,CAAsB,CAACmM,EAAO,QAAS,CAAC,CAAE,CAAC,EAEtC,CACL,WAAY,GACZ,UAAW,SACN4wB,CAAc,EADR,CAET,CAAC5wB,EAAO,QAAS,SACZ4wB,EAAe5wB,EAAO,OAAO,EADjB,CAEf,CAACA,EAAO,aAAcA,EAAO,QAC/B,CAAC,CACH,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAWnM,EAAM,SACnB,EACF,QACE,OAAOA,CACX,CACF,E,qbClCe,IAACA,EAAQ,CACtB,WAAY,GACZ,KAAM,CAAC,CACT,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,KAAMnM,EAAM,IACd,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,KAAM,SACDA,EAAM,IAAI,EADT,CAEJ,CAACmM,EAAO,QAASA,EAAO,IAC1B,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,KAAMnM,EAAM,IACd,EACF,QACE,OAAOA,CACX,CACF,E,qbC1Be,IAACA,EAAQ,CACtB,WAAY,GACZ,OAAQ,CAAC,CACX,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQ,SACHA,EAAM,MAAM,EADT,CAEN,CAACmM,EAAO,QAASA,EAAO,MAC1B,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,QACE,OAAOA,CACX,CACF,E,qbCxBe,IAACA,EAAQ,GAAa,QAASmM,IAAW,CACvD,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,OAAO,SAAKnM,CAAK,EAAV,CAAY,WAAY,GAAM,IAAKmM,EAAO,GAAI,CAAC,EACxD,KAAK,KAAuB,CAC1B,IAAI6wB,EAAgBh9B,EAAM,MAAMmM,EAAO,UAAY,CAAC,EACpD,OAAA6wB,EAAgB,SACXA,CAAa,EADF,CAEd,CAAC7wB,EAAO,UAAWA,EAAO,WAC5B,CAAC,EACM,SACFnM,CAAK,EADH,CAEL,WAAY,GACZ,MAAO,SAAKA,EAAM,KAAK,EAAhB,CAAkB,CAACmM,EAAO,SAAU6wB,CAAc,CAAC,CAC5D,CAAC,CACH,CACA,KAAK,KACH,OAAO,SAAKh9B,CAAK,EAAV,CAAY,WAAY,EAAM,CAAC,EACxC,QACE,OAAOA,CACX,CACF,E,qbCvBe,IAACA,EAAQ,CACtB,WAAY,EACZ,WAAY,GACZ,MAAO,CAAC,CACV,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,WAAY,EACd,CAAC,EACH,KAAK,KACH,OAAO,SACFA,CAAK,EADH,CAEL,WAAY,GACZ,MAAOmM,EAAO,MACd,WAAYA,EAAO,UACrB,CAAC,EACH,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,WAAY,EACd,CAAC,EACH,QACE,OAAOA,CACX,CACF,E,UC1Be,IAACA,EAAQ,CACtB,WAAY,GACZ,QAAS,IACX,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACL,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,OAChB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAASmM,EAAO,OAClB,EACF,QACE,OAAOnM,CACX,CACF,E,qbCnBe,IAACA,EAAQ,CACtB,WAAY,GACZ,SAAU,CAAC,CACb,EAAGmM,IAAW,CACZ,IAAI8wB,EACJ,OAAQ9wB,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,SAAUnM,EAAM,QAClB,EACF,KAAK,KACH,OAAAi9B,EAAkBj9B,EAAM,SAASmM,EAAO,QAEtC,MAAKnM,EAAM,QAAQ,EADnB,SAAKA,EAAM,QAAQ,EAAnB,CAAqB,CAACmM,EAAO,QAAS,CAAC,CAAE,CAAC,EAErC,CACL,WAAY,GACZ,SAAU,SACL8wB,CAAc,EADT,CAER,CAAC9wB,EAAO,QAAS,SACZ8wB,EAAe9wB,EAAO,OAAO,EADjB,CAEf,CAACA,EAAO,aAAcA,EAAO,OAC/B,CAAC,CACH,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,SAAUnM,EAAM,QAClB,EACF,QACE,OAAOA,CACX,CACF,E,qbChCe,IAACA,EAAQ,CACtB,WAAY,GACZ,UAAW,CAAC,CACd,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAWnM,EAAM,SACnB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAW,SAAKA,EAAM,SAAS,EAApB,CAAsB,CAACmM,EAAO,QAASA,EAAO,SAAU,CAAC,CACtE,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAWnM,EAAM,SACnB,EACF,QACE,OAAOA,CACX,CACF,E,qbCxBe,IAACA,EAAQ,CACtB,WAAY,GACZ,SAAU,CAAC,CACb,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,SAAUnM,EAAM,QAClB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,SAAU,SAAKA,EAAM,QAAQ,EAAnB,CAAqB,CAACmM,EAAO,QAASA,EAAO,QAAS,CAAC,CACnE,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,SAAUnM,EAAM,QAClB,EACF,QACE,OAAOA,CACX,CACF,E,6bCxBA,MAAMk9B,GAAe,aAAa,QAAQ,aAAa,EACvD,IAAIC,GACAD,KAAiB,KACnBC,GAAgB,CACd,WAAY,GACZ,MAAO,MACT,EAEAA,GAAgB,KAAK,MAAMD,EAAY,EAG1B,QAACl9B,EAAQ,MACnBm9B,EAAa,EACfhxB,IAAW,CACZ,GAAIA,EAAO,OAAS,KAAgB,CAClC,IAAIixB,GAAW,SAAKp9B,CAAK,EAAV,CAAY,CAACmM,EAAO,KAAMA,EAAO,KAAM,CAAC,EACvD,OAAOixB,GAAS,SAChB,aAAa,QAAQ,cAAe,KAAK,UAAUA,EAAQ,CAAC,EAC5D,IAAIx8B,GAAW,aAAgBw8B,GAAS,KAAK,EAC7C,oBAAYx8B,EAAQ,EACb,SAAKw8B,EAAQ,EAAb,CAAe,SAAUx8B,EAAS,CAAC,CAC5C,CACA,IAAIA,EAAW,aAAgBZ,EAAM,KAAK,EAC1C,oBAAYY,CAAQ,EACb,SAAKZ,CAAK,EAAV,CAAY,SAAAY,CAAmB,CAAC,CACzC,E,obCvBe,IAACZ,EAAQ,CACtB,WAAY,GACZ,UAAW,CAAC,CACd,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAWnM,EAAM,SACnB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAW,SACNA,EAAM,SAAS,EADT,CAET,CAACmM,EAAO,QAASA,EAAO,SAC1B,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,UAAWnM,EAAM,SACnB,EACF,QACE,OAAOA,CACX,CACF,E,qbC1Be,IAACA,EAAQ,CACtB,WAAY,GACZ,WAAY,CAAC,CACf,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,WAAYnM,EAAM,UACpB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,WAAY,SACPA,EAAM,UAAU,EADT,CAEV,CAACmM,EAAO,QAASA,EAAO,UAC1B,CAAC,CACH,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,WAAYnM,EAAM,UACpB,EACF,QACE,OAAOA,CACX,CACF,E,oBC1Be,IAACA,EAAQ,CACtB,WAAY,GACZ,OAAQ,IACV,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQ,IACV,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQmM,EAAO,MACjB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,OAAQnM,EAAM,MAChB,EACF,QACE,OAAOA,CACX,CACF,E,ioBCxBe,IAACA,EAAQ,CACtB,aAAc,CAAC,EACf,cAAe,CAAC,CAClB,EAAGmM,IAAW,CA5Bd,SA6BE,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,aAAc,SAAIA,EAAM,YAAY,EAAtB,CAAwB,CAACmM,EAAO,KAAM,EAAI,CAAC,CAC3D,CAAC,EACH,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,aAAc,SAAIA,EAAM,YAAY,EAAtB,CAAwB,CAACmM,EAAO,KAAM,EAAK,CAAC,CAC5D,CAAC,EACH,KAAK,KAEH,MAA2C,GAAAnM,EAAM,aAAzC,IAAAmM,EAAO,KAAKkxB,EA1C1B,EA0CiD,GAAZC,GAAA,GAAY,GAAZ,CAAvB,QACR,OAAO,SACFt9B,CAAK,EADH,CAEL,aAAcs9B,EAChB,CAAC,EACH,KAAK,KACH,OAAO,SACFt9B,CAAK,EADH,CAEL,cAAe,SAAIA,EAAM,aAAa,EAAvB,CAAyB,CAACmM,EAAO,KAAM,EAAI,CAAC,CAC7D,CAAC,EACH,KAAK,KACH,OAAO,SACFnM,CAAK,EADH,CAEL,cAAe,SAAIA,EAAM,aAAa,EAAvB,CAAyB,CAACmM,EAAO,KAAM,EAAK,CAAC,CAC9D,CAAC,EACH,KAAK,KAEH,MAA6C,GAAAnM,EAAM,cAA3C,KAAAmM,EAAO,KAAKoxB,EA3D1B,EA2DmD,GAAbC,GAAA,GAAa,GAAb,CAAxB,SACR,OAAO,SACFx9B,CAAK,EADH,CAEL,cAAew9B,EACjB,CAAC,EACH,KAAK,KAEH,OAAO,SACFx9B,CAAK,EADH,CAEL,cAAe,CAAC,EAChB,aAAc,CAAC,CACjB,CAAC,EACH,KAAK,KACH,OAAO,SACFA,CAAK,EADH,CAEL,aAAc,CAAC,CACjB,CAAC,EACH,QACE,OAAOA,CACX,CACF,EC7De,IAACA,EAAQ,CAAC,KAAM,MAAS,EAAGmM,IAAW,CACpD,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,OAAOA,EAAO,OAChB,QACE,OAAOnM,CACX,CACF,E,UCLe,IAACA,EAAQ,CACtB,WAAY,GACZ,QAAS,CAAC,CACZ,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAASnM,EAAM,OACjB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAASmM,EAAO,OAClB,EACF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,QAASnM,EAAM,OACjB,EACF,QACE,OAAOA,CACX,CACF,E,UCrBe,IAACA,EAAQ,CACtB,cAAe,CAAC,EAChB,WAAY,GACZ,MAAO,GACP,OAAQ,EACV,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,MAAO,GACP,OAAQA,EAAO,OACf,cAAenM,EAAM,aACvB,EACF,KAAK,KACH,OAAImM,EAAO,SAAWnM,EAAM,OACnB,CACL,WAAY,GACZ,MAAO,GACP,OAAQmM,EAAO,OACf,cAAeA,EAAO,aACxB,EAEOnM,EAEX,KAAK,KACH,OAAImM,EAAO,SAAWnM,EAAM,OACnB,CACL,WAAY,GACZ,MAAO,GACP,OAAQmM,EAAO,OACf,cAAenM,EAAM,aACvB,EAEOA,EAEX,KAAK,KACH,MAAO,CACL,WAAY,GACZ,MAAO,GACP,OAAQ,GACR,cAAe,CAAC,CAClB,EACF,QACE,OAAOA,CACX,CACF,E,UCtDe,IAACA,EAAQ,MAAOmM,IAAW,CACxC,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,OAAOA,EAAO,SAChB,QACE,OAAOnM,CACX,CACF,E,qbCIe,IAACA,EAAQ,CACtB,WAAY,GACZ,KAAM,KACN,MAAO,CAAC,EACR,QAAS,GAGT,OAAQ,OACR,SAAU,IACZ,EAAGmM,IAAW,CACZ,OAAQA,EAAO,KAAM,CACnB,KAAK,KACH,MAAO,CACL,WAAY,GACZ,KAAMA,EAAO,KACb,MAAOA,EAAO,MACd,SAAUA,EAAO,SACjB,MAAO,CAAC,EACR,QAAS,GACT,OAAQ,MACV,EAEF,KAAK,KACH,MAAO,CACL,WAAY,GACZ,KAAM,KACN,MAAO,KACP,SAAU,KACV,MAAO,CAAC,EACR,QAAS,GACT,OAAQ,MACV,EACF,KAAK,IACH,OAAO,SACFnM,CAAK,EADH,CAEL,OAAQmM,EAAO,OACf,WAAY,EACd,CAAC,EACH,KAAK,IACH,OAAO,SACFnM,CAAK,EADH,CAEL,WAAY,GACZ,MAAO,CAAC,EACR,QAAS,EACX,CAAC,EACH,KAAK,IACH,OAAO,SACFA,CAAK,EADH,CAEL,WAAY,GACZ,MAAOmM,EAAO,MACd,QAASA,EAAO,OAClB,CAAC,EACH,QACE,OAAOnM,CACX,CACF,ECjCA,MAAMy9B,GAAW,CACf,OACA,YACA,SACA,UACA,UAAA3S,GACA,gBACA,UACA,aACA,iBACA,UACA,QACA,OACA,YACA,QACA,UACA,WACA,SACA,WACA,aACA,WACA,YACA,aACA,cACA,UACA,mBACA,UACA,WACA,YACA,eACA,OACF,EAEe,mBAAgB2S,EAAQ,E,WC9DxB,SAASC,GAAeC,EAAc,CACnD,OAAO,YAAY,GAAYA,EAAc,YAAgB,IAAK,CAAC,CACrE,C,mCCNA,2LAaA,SAASC,EAAa,CAAE,YAAA58B,EAAa,eAAA68B,CAAe,EAAG,CACrD,OACE,gBAAC,QACC,UAAU,qBACV,QAAS,IAAMA,EAAe,GAE9B,gBAAC,IAAM,CACL,QAAQ,QACR,SAAQ,GACR,KAAM,gBAAC,IAAW,IAAC,EACnB,UAAW78B,CAAA,CACb,EACCA,EAAc,YAAc,QAC/B,CAEJ,CAEA48B,EAAa,UAAY,CACvB,YAAa,IAAU,KAAK,WAC5B,eAAgB,IAAU,KAAK,UACjC,EAEA,SAASE,EAAUjyB,EAAO,CACxB,KAAM,CAAE,WAAAlL,EAAY,cAAAo9B,CAAc,EAAIlyB,EACtC,IAAIwR,EAAU,KAEd,OAAI1c,EACF0c,EACE,gBAAC,WACC,gBAAC,IAAO,CAAC,KAAK,KAAK,CACrB,EAGFA,EACE,gBAAC,IAAM,CACL,QAAQ,OACR,SAAQ,GAAC,KAAM,gBAAC,IAAQ,IAAC,EACzB,QAAS,IAAM,CAAC0gB,EAAc,CAAC,MAAO,EAAI,CAAC,CAAC,EAC5C,MAAO,CAAC,eAAgB,MAAM,GAC/B,SAED,EAKF,gBAAC,OAAI,MAAO,CAAC,MAAO,OAAO,GACxB1gB,CACH,CAEJ,CAEAygB,EAAU,UAAY,CACpB,WAAY,IAAU,KACtB,cAAe,IAAU,IAC3B,EAEA,SAASpnB,GAAW,CAClB,OACE,gBAAC,IAAU,CAAC,QAAS,IAAkB,OACrC,gBAAC,IAAO,IAAC,EACT,gBAAC,IAAK,CAAC,aAAa,KAAK,KAAK,MAAK,kBAEnC,CACF,CAEJ,C,oCC/EO,sEAAMsnB,EAAa,aAEnB,SAASC,EAAiBhhB,EAAMwd,EAAY,CACjD,IAAI51B,EAAY,GACZyrB,EAAa,GACb4N,EAAc,GACdC,EAAe,UACnB,OAAK1D,IACH51B,EAAY,UAAYoY,EAAO,IAC/BqT,EAAa,MAAQrT,EACrBihB,EAAc,aACdC,EAAe,YAEV,CACL,KAAMH,EACN,OAAQ,CACN,KAAA/gB,EACA,WAAAwd,EACA,aAAA0D,EACA,WAAA7N,EACA,UAAAzrB,EACA,YAAAq5B,CACF,CACF,CACF,C,oCCxBA,4IAEO,MAAME,EAAqB,qBACrBC,EAAqB,qBACrBC,EAAqB,kBAErBC,EAAmB,KAAO,CACrC,KAAMH,CACR,GAEaI,EAAmB/+B,IAAS,CACvC,KAAM4+B,EACN,OAAQ5+B,EAAK,KAAK,OAClB,aAAcA,EAAK,KAAK,YAC1B,GAEMg/B,EAAgB9+B,IAAU,CAC9B,KAAM2+B,EACN,MAAA3+B,CACF,GAEMuI,EAAY,IAAMrI,IACtBA,EAAS0+B,EAAiB,CAAC,EACpB,IAAc,EAClB,KAAKz+B,GAAY,CAChBD,EAAS2+B,EAAiB1+B,EAAS,IAAI,CAAC,CAC1C,CAAC,EACA,MAAMH,GAAS,CACdE,EAAS4+B,EAAc9+B,CAAK,CAAC,EAC7B,WAAW,IAAM,CAACE,EAASqI,EAAU,CAAC,CAAC,EAAG,GAAI,CAChD,CAAC,GAGCw2B,EAAkB1+B,GAAS,CAC/B,MAAMgV,EAAOhV,EAAM,KACnB,OAAKgV,EAGD,CAAAA,EAAK,WAFA,EAMX,EAEa2pB,EAAoB,IAAM,CAAC9+B,EAAUM,IAAa,CAC7D,GAAIu+B,EAAgBv+B,EAAS,CAAC,EAC5B,OAAON,EAASqI,EAAU,CAAC,CAE/B,C,oCChDA,4IAEO,MAAM02B,EAAuB,uBACvBC,EAAuB,uBACvBC,EAAoB,oBAEpBC,EAAgB,KAAO,CAClC,KAAMH,CACR,GAEaI,EAAgBv/B,IAAS,CACpC,KAAMo/B,EACN,OAAQp/B,EACR,WAAY,KAAK,IAAI,CACvB,GAEMw/B,EAAet/B,IAAU,CAC7B,KAAMm/B,EACN,MAAAn/B,CACF,GAEMu/B,EAAc,CAAC1/B,EAAQoJ,IAAa/I,IACxCA,EAASk/B,EAAc,CAAC,EACjB,IAAsBv/B,EAAO,UAAWoJ,CAAQ,EACpD,KAAK9I,GAAYD,EAASm/B,EAAcl/B,EAAS,IAAI,CAAC,CAAC,EACvD,MAAMH,GAASE,EAASo/B,EAAat/B,CAAK,CAAC,CAAC,GAG3Cw/B,EAAoBn/B,GAAS,CACjC,MAAMqF,EAASrF,EAAM,OACrB,OAAKqF,EAGD,CAAAA,EAAO,WAFF,EAMX,EAEa+5B,EAAsB,CAAC5/B,EAAQ6F,EAAQ4K,IAAU,CAC5DpQ,EAAUM,IACN8P,GAASkvB,EAAkBh/B,EAAS,CAAC,EAChCN,EAASq/B,EAAY1/B,EAAQ6F,CAAM,CAAC,EAEtC,QAAQ,QAAQ,C,oCC5CzB,4IAEO,MAAMg6B,EAAoB,oBACpBC,EAAoB,oBACpBC,EAAiB,iBAEjBC,EAAa,KAAO,CAC/B,KAAMH,CACR,GAEaI,EAAa,CAACjgC,EAAQkgC,EAASjgC,KAAU,CACpD,KAAM6/B,EACN,OAAA9/B,EACA,QAAAkgC,EACA,IAAKjgC,EACL,WAAY,KAAK,IAAI,CACvB,GAEMkgC,EAAYhgC,IAAU,CAC1B,KAAM4/B,EACN,MAAA5/B,CACF,GAEMwK,EAAW,CAAC3K,EAAQkgC,IAAY7/B,IACpCA,EAAS2/B,EAAW,CAAC,EACd,IAAahgC,EAAO,UAAWkgC,CAAO,EAC1C,KAAK5/B,GAAYD,EAAS4/B,EAAWjgC,EAAO,KAAMkgC,EAAS5/B,EAAS,IAAI,CAAC,CAAC,EAC1E,MAAMH,GAASE,EAAS8/B,EAAUhgC,CAAK,CAAC,CAAC,GAGxCigC,EAAiB,CAACpgC,EAAQkgC,EAAS1/B,IAAU,CACjD,MAAM2uB,EAAa3uB,EAAM,IAAI,KAAKR,EAAO,MACzC,GAAImvB,EAAY,CACd,MAAMtjB,EAAMsjB,EAAW+Q,GACvB,OAAKr0B,GAGDA,EAAI,WACC,IAHA,EAMX,CACA,MAAO,EACT,EAEaw0B,EAAmB,CAACrgC,EAAQkgC,EAASzvB,IAAU,CAC1DpQ,EAAUM,IACN8P,GAAS2vB,EAAepgC,EAAQkgC,EAASv/B,EAAS,CAAC,EAC9CN,EAASsK,EAAS3K,EAAQkgC,CAAO,CAAC,EAEpC,QAAQ,QAAQ,C,oCClDzB,4IAEO,MAAMI,EAAqB,qBACrBC,EAAqB,qBACrBC,EAAkB,kBAElBC,EAAc,KAAO,CAChC,KAAMH,CACR,GAEaI,EAAc,CAAC1gC,EAAQC,KAAU,CAC5C,KAAMsgC,EACN,OAAAvgC,EACA,KAAMC,EACN,WAAY,KAAK,IAAI,CACvB,GAEM0gC,EAAaxgC,IAAU,CAC3B,KAAMqgC,EACN,MAAArgC,CACF,GAEM0K,EAAa7K,GAAWK,IAC5BA,EAASogC,EAAY,CAAC,EACf,IAAczgC,EAAO,SAAS,EAClC,KAAKM,GAAYD,EAASqgC,EAAY1gC,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EAClE,MAAMH,GAASE,EAASsgC,EAAWxgC,CAAK,CAAC,CAAC,GAGzCygC,EAAkB,CAAC5gC,EAAQQ,IAAU,CACzC,MAAMqpB,EAAOrpB,EAAM,KAAK,KAAKR,EAAO,MACpC,MAAI,CAAC6pB,GAAQA,EAAK,SAAW,EACpB,IAELA,EAAK,WACA,GAGX,EAEagX,EAAoB,CAAC7gC,EAAQyQ,IAAU,CAACpQ,EAAUM,IACzD8P,GAASmwB,EAAgB5gC,EAAQW,EAAS,CAAC,EACtCN,EAASwK,EAAU7K,CAAM,CAAC,EAE5B,QAAQ,QAAQ,C,oCC5CzB,4IAEO,MAAM8gC,EAAuB,uBACvBC,EAAuB,uBACvBC,EAAoB,oBAEpBC,EAAgB,KAAO,CAClC,KAAMH,CACR,GAEaI,EAAgB,CAAClhC,EAAQC,KAAU,CAC9C,KAAM8gC,EACN,OAAA/gC,EACA,OAAQC,EACR,WAAY,KAAK,IAAI,CACvB,GAEMkhC,EAAehhC,IAAU,CAC7B,KAAM6gC,EACN,MAAA7gC,CACF,GAEM2K,EAAe9K,GAAWK,IAC9BA,EAAS4gC,EAAc,CAAC,EACjB,IAAgBjhC,EAAO,SAAS,EACpC,KAAKM,GAAYD,EAAS6gC,EAAclhC,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACpE,MAAMH,GAASE,EAAS8gC,EAAahhC,CAAK,CAAC,CAAC,GAG3CihC,EAAoB,CAACphC,EAAQQ,IAAU,CAC3C,MAAMo0B,EAASp0B,EAAM,OAAO,OAAOR,EAAO,MAC1C,MAAI,CAAC40B,GAAUA,EAAO,SAAW,EACxB,IAELA,EAAO,WACF,GAGX,EAEayM,EAAsB,CAACrhC,EAAQyQ,IAAU,CACpDpQ,EAAUM,IAAa,CACvB,GAAI8P,GAAS2wB,EAAkBphC,EAAQW,EAAS,CAAC,EAC/C,OAAON,EAASyK,EAAY9K,CAAM,CAAC,CAEvC,C,oCC7CA,4IAEO,MAAMshC,EAAsB,sBACtBC,EAAsB,sBACtBC,EAAmB,mBAEnBC,EAAe,KAAO,CACjC,KAAMH,CACR,GAEaI,EAAe,CAAC1hC,EAAQC,KAAU,CAC7C,KAAMshC,EACN,MAAOthC,EACP,WAAY,KAAK,IAAI,CACvB,GAEM0hC,EAAcxhC,IAAU,CAC5B,KAAMqhC,EACN,MAAArhC,CACF,GAEM4K,EAAc/K,GAAWK,IAC7BA,EAASohC,EAAa,CAAC,EAChB,IAAezhC,EAAO,SAAS,EACnC,KAAKM,GAAYD,EAASqhC,EAAa1hC,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACnE,MAAMH,GAASE,EAASshC,EAAYxhC,CAAK,CAAC,CAAC,GAG1CyhC,EAAmB,CAAC5hC,EAAQQ,IAAU,CAC1C,MAAMgW,EAAQhW,EAAM,MACpB,MAAI,CAACgW,GAASA,EAAM,MAAM,SAAW,EAC5B,GAELA,EAAM,WACD,GAEL,KAAK,IAAI,EAAIA,EAAM,WAAa,GAKtC,EAEaqrB,EAAqB,CAAC7hC,EAAQyQ,IAAU,CACnDpQ,EAAUM,IAAa,CACvB,GAAI8P,GAASmxB,EAAiB5hC,EAAQW,EAAS,CAAC,EAC9C,OAAON,EAAS0K,EAAW/K,CAAM,CAAC,CAEtC,C,oCChDA,8JAGO,MAAM8hC,EAAwB,wBACxBC,EAAwB,wBACxBC,EAAwB,qBAExBC,EAAsB,KAAO,CACxC,KAAMH,CACR,GAEaI,EAAsB,CAACC,EAAWlH,IAAe,CAC5D,MAAM5yB,EAAO,IAAK,SAAS85B,CAAS,EACpC,GAAIlH,EAAY,CACd,MAAMmH,EAAQ,CAAC,EACf,QAASl5B,KAAQb,EAAK,MAEhBa,IAAS,iBAIbb,EAAK,MAAMa,GAAM,IAAI,WAAW,OAAO,EAAG,CAAC,EAC3Ck5B,EAAMl5B,EAAK,QAAQ,wBAAyB,OAAO,GAAKb,EAAK,MAAMa,IAErEb,EAAK,MAAQ+5B,CACf,CACA,OAAA/5B,EAAK,QAAU,CAAC,CAEd,IAAK,IAAW,OAAO,EAAG,IAAW,OAAS,CAAC,EAC/C,YAAa,mBACf,CAAC,EACM,CACL,KAAM05B,EACN,QAAS15B,CACX,CACF,EAEMg6B,EAAmBliC,IAAU,CACjC,KAAM6hC,EACN,MAAA7hC,CACF,GAEM0I,EAAgBoyB,GAAe56B,IACnCA,EAAS4hC,EAAoB,CAAC,EACvB,IAAiB,EACrB,KAAK3hC,GAAYD,EAAS6hC,EAAoB5hC,EAAS,KAAM26B,CAAU,CAAC,CAAC,EACzE,MAAM96B,GAAS,CACdE,EAASgiC,EAAiBliC,CAAK,CAAC,EAChC,WAAW,IAAM,CAACE,EAASwI,EAAa,CAAC,CAAC,EAAG,GAAI,CACnD,CAAC,GAGCy5B,EAAqBC,GACpBA,EAAQ,QAGT,CAAAA,EAAQ,WAFH,GAQEC,EAAwB/xB,GAAU,CAACpQ,EAAUM,IAAa,CACrE,MAAMH,EAAQG,EAAS,EACvB,GAAI8P,GAAS6xB,EAAmB9hC,EAAM,OAAO,EAC3C,OAAOH,EAASwI,EAAarI,EAAM,OAAO,UAAU,CAAC,CAEzD,C,oCCnEA,4IAEO,MAAMiiC,EAAwB,wBACxBC,EAAwB,wBACxBC,EAAqB,qBAErBC,EAAiB,KAAO,CACnC,KAAMH,CACR,GAEaI,EAAiB,CAAC7iC,EAAQuJ,EAAasJ,IAAY,CAG9D,MAAMiwB,EAAc,CAAC,EACrB,IAAIzgC,EAsBJ,IArBAwQ,EAAQ,QAAQ,QAAQ,CAACtK,EAAQlG,IAAQ,CACnCkG,EAAO,cAAgB,KAEzBu6B,EAAY,KAAKzgC,CAAG,EACpBkG,EAAO,UAAU,QAAQw6B,GAAoB,CAC3C,IAAIhiC,EAAW8R,EAAQ,QAAQxQ,EAAM,GAAG,UAAU,OAChDkD,IAAQA,GAAK,OAASw9B,EAAiB,IAAI,EACzChiC,EAAS,SAAW,EAEtB8R,EAAQ,QAAQxQ,EAAM,GAAG,UAAU,KAAK0gC,CAAgB,GAEpDhiC,EAAS,GAAG,aAAe,OAC7BA,EAAS,GAAG,WAAagiC,EAAiB,YAE5CA,EAAiB,KAAK,QAAQl3B,IAAO,CACnC9K,EAAS,GAAG,KAAK,KAAK8K,EAAG,CAC3B,CAAC,EAEL,CAAC,EAEL,CAAC,EACIxJ,EAAMygC,EAAY,OAAS,EAAGzgC,GAAO,EAAGA,GAAO,EAClDwQ,EAAQ,QAAQ,OAAOiwB,EAAYzgC,GAAM,CAAC,EAG5C,MAAO,CACL,KAAMqgC,EACN,OAAA1iC,EACA,YAAAuJ,EACA,QAAAsJ,EACA,WAAY,KAAK,IAAI,CACvB,CACF,EAEMmwB,EAAgB7iC,IAAU,CAC9B,KAAMwiC,EACN,MAAAxiC,CACF,GAEMqK,EAAe,CAACxK,EAAQ6S,IAAYxS,IACxCA,EAASuiC,EAAe,CAAC,EAClB,IAAiB5iC,EAAO,UAAW6S,CAAO,EAC9C,KAAKvS,GAAYD,EAASwiC,EACzB7iC,EAAO,KAAM6S,EAASvS,EAAS,IAAI,CAAC,CAAC,EACtC,MAAMH,GAASE,EAAS2iC,EAAc7iC,CAAK,CAAC,CAAC,GAG5C8iC,EAAqB,CAACjjC,EAAQuJ,EAAa/I,IAAU,CACzD,MAAMi2B,EAAiBj2B,EAAM,QAAQ,SAASR,EAAO,MACrD,GAAIy2B,EAAgB,CAClB,MAAM5jB,EAAU4jB,EAAeltB,GAC/B,OAAKsJ,GAGDA,EAAQ,WACH,IAHA,EAMX,CACA,MAAO,EACT,EAEa2jB,EAAuB,CAACx2B,EAAQ6S,EAASpC,IAAU,CAC9DpQ,EAAUM,IACN8P,GAASwyB,EAAmBjjC,EAAQ6S,EAASlS,EAAS,CAAC,EAClDN,EAASmK,EAAaxK,EAAQ6S,CAAO,CAAC,EAExC,QAAQ,QAAQ,C,oCCjFzB,4IAEO,MAAMqwB,EAA0B,0BAC1BC,EAA0B,0BAC1BC,EAAuB,uBAEvBC,EAAmB,KAAO,CACrC,KAAMH,CACR,GAEaI,EAAmB,CAACtjC,EAAQC,KAAU,CACjD,KAAMkjC,EACN,OAAAnjC,EACA,UAAWC,EACX,WAAY,KAAK,IAAI,CACvB,GAEMsjC,EAAkBpjC,IAAU,CAChC,KAAMijC,EACN,MAAAjjC,CACF,GAEMoK,EAAkBvK,GAAWK,IACjCA,EAASgjC,EAAiB,CAAC,EACpB,IAAmBrjC,EAAO,SAAS,EACvC,KAAKM,GAAYD,EAASijC,EAAiBtjC,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACvE,MAAMH,GAASE,EAASkjC,EAAgBpjC,CAAK,CAAC,CAAC,GAG9CqjC,EAAuB,CAACxjC,EAAQQ,IAAU,CAC9C,MAAMgC,EAAYhC,EAAM,UAAU,UAAUR,EAAO,MACnD,MAAI,CAACwC,GAAaA,EAAU,SAAW,EAC9B,IAELA,EAAU,WACL,GAGX,EAEa+qB,EAAyB,CAACvtB,EAAQyQ,IAAU,CACvDpQ,EAAUM,IACN8P,GAAS+yB,EAAqBxjC,EAAQW,EAAS,CAAC,EAC3CN,EAASkK,EAAevK,CAAM,CAAC,EAEjC,QAAQ,QAAQ,C,oCC9CzB,4IAEO,MAAMyjC,EAAyB,yBACzBC,EAAyB,yBACzBC,EAAsB,sBAEtBC,EAAkB,KAAO,CACpC,KAAMH,CACR,GAEaI,EAAkB,CAAC7jC,EAAQC,KAAU,CAChD,KAAMyjC,EACN,OAAA1jC,EACA,SAAUC,EACV,WAAY,KAAK,IAAI,CACvB,GAEM6jC,EAAiB3jC,IAAU,CAC/B,KAAMwjC,EACN,MAAAxjC,CACF,GAEMsK,EAAiBzK,GAAWK,IAChCA,EAASujC,EAAgB,CAAC,EACnB,IAAkB5jC,EAAO,SAAS,EACtC,KAAKM,GAAYD,EAASwjC,EAAgB7jC,EAAO,KAAMM,EAAS,IAAI,CAAC,CAAC,EACtE,MAAMH,GAASE,EAASyjC,EAAe3jC,CAAK,CAAC,CAAC,GAG7C4jC,EAAsB,CAAC/jC,EAAQQ,IAAU,CAC7C,MAAMqN,EAAWrN,EAAM,SAAS,SAASR,EAAO,MAChD,MAAI,CAAC6N,GAAYA,EAAS,SAAW,EAC5B,IAELA,EAAS,WACJ,GAGX,EAEam2B,EAAwB,CAAChkC,EAAQyQ,IAAU,CACtDpQ,EAAUM,IACN8P,GAASszB,EAAoB/jC,EAAQW,EAAS,CAAC,EAC1CN,EAASoK,EAAczK,CAAM,CAAC,EAEhC,QAAQ,QAAQ,C,oCC7CzB,oFAGA,SAASikC,GAAwB,CAC/B,KAAM,CAACriC,EAAmBsiC,CAAoB,EAAI,mBAAS,CAAC,SAAS,MAAM,EAErEC,EAAyB,IAAM,CACnCD,EAAqB,CAAC,SAAS,MAAM,CACvC,EAEA,2BAAU,KACR,SAAS,iBAAiB,mBAAoBC,CAAsB,EAE7D,IAAM,CACX,SAAS,oBAAoB,mBAAoBA,CAAsB,CACzE,GACC,CAAC,CAAC,EAEEviC,CACT,CAGA,SAASwiC,EAAYC,EAAUC,EAAO,CACpC,MAAMC,EAAgB,iBAAO,EAE7B,oBAAU,IAAM,CACdA,EAAc,QAAUF,CAC1B,CAAC,EAED,oBAAU,IAAM,CACd,SAAS/d,GAAO,CACdie,EAAc,QAAQ,CACxB,CAEA,GAAID,IAAU,KAAM,CAClB,IAAIjmB,EAAK,YAAYiI,EAAMge,CAAK,EAChC,MAAO,IAAM,cAAcjmB,CAAE,CAC/B,CACF,EAAG,CAACimB,CAAK,CAAC,CACZ,C,u9BCRA,MAAME,GAA0B,CAC9B,QAAS,CACP,KAAM,IACN,MAAO,4BACP,QAAS,SACX,EACA,QAAS,CACP,KAAM,IACN,MAAO,2BACP,QAAS,QACX,EACA,eAAgB,CACd,KAAM,IACN,MAAO,4BACP,QAAS,SACX,EACA,OAAQ,CACN,KAAM,IACN,MAAO,yBACP,QAAS,MACX,EACA,SAAU,CACR,KAAM,IACN,MAAO,6BACP,QAAS,SACX,CACF,EAMMC,GAAwB,CAC5B,UAAW,CACT,KAAM,IACN,WAAY,qBACZ,KAAM,8HACN,QAAS,4FACX,EACA,YAAa,CACX,KAAM,IACN,WAAY,uBACZ,KAAM,qFACN,QAAS,8FACX,EACA,OAAQ,CACN,KAAM,IACN,WAAY,kBACZ,KAAM,2GACN,QAAS,yFACX,EACA,YAAa,CACX,KAAM,IACN,WAAY,uBACZ,KAAM,2LACN,QAAS,8FACX,EACA,QAAS,CACP,KAAM,IACN,WAAY,IACZ,KAAM,wBACN,QAAS,2DACX,CACF,EAEMC,GAA+BD,GAAsB,QAErDE,GAAyB,CAC7B,QAAS,CACP,KAAM,IACN,MAAO,4BACP,QAAS,UACT,WAAY,OACd,EACA,QAAS,CACP,KAAM,IACN,MAAO,2BACP,QAAS,SACT,WAAY,KACd,EACA,KAAM,CACJ,KAAM,IACN,MAAO,2BACP,QAAS,SACT,WAAY,KACd,EACA,OAAQ,CACN,KAAM,KACN,MAAO,yBACP,QAAS,OACT,WAAY,MACd,EACA,OAAQ,CACN,KAAM,IACN,MAAO,4BACP,QAAS,UACT,WAAY,MACd,EACA,QAAS,CACP,KAAM,KACN,MAAO,yBACP,QAAS,OACT,WAAY,MACd,EACA,QAAS,CACP,KAAM,IACN,MAAO,6BACP,QAAS,UACT,WAAY,MACd,EACA,SAAU,CACR,KAAM,IACN,MAAO,4BACP,QAAS,UACT,WAAY,QACd,EACA,aAAc,CACZ,KAAM,IACN,MAAO,4BACP,QAAS,UACT,WAAY,QACd,EACA,aAAc,CACZ,KAAM,IACN,MAAO,4BACP,QAAS,UACT,WAAY,QACd,EACA,UAAW,CACT,KAAM,IACN,MAAO,4BACP,QAAS,UACT,WAAY,QACd,EACA,YAAa,CACX,KAAM,IACN,MAAO,4BACP,QAAS,UA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","file":"static/js/main.95396c30.chunk.js","sourcesContent":["// Copyright 2018 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const IMAGES_FETCH_REQUEST = 'IMAGES_FETCH_REQUEST'\nexport const IMAGES_FETCH_SUCCESS = 'IMAGES_FETCH_SUCCESS'\nexport const IMAGES_FETCH_FAIL = 'IMAGES_FETCH_FAIL'\n\nexport const requestImages = () => ({\n type: IMAGES_FETCH_REQUEST\n})\n\nexport const receiveImages = (tenant, json) => ({\n type: IMAGES_FETCH_SUCCESS,\n tenant: tenant,\n images: json,\n receivedAt: Date.now()\n})\n\nconst failedImages = error => ({\n type: IMAGES_FETCH_FAIL,\n error\n})\n\nexport const fetchImages = (tenant) => dispatch => {\n dispatch(requestImages())\n return API.fetchImages(tenant.apiPrefix)\n .then(response => dispatch(receiveImages(tenant.name, response.data)))\n .catch(error => dispatch(failedImages(error)))\n}\n\nconst shouldFetchImages = (tenant, state) => {\n const images = state.images.images[tenant.name]\n if (!images) {\n return true\n }\n if (images.isFetching) {\n return false\n }\n return false\n}\n\nexport const fetchImagesIfNeeded = (tenant) => (dispatch, getState) => {\n if (shouldFetchImages(tenant, getState())) {\n return dispatch(fetchImages(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Use CommonJS require so we can dynamically import during build-time.\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./store.prod')\n} else {\n module.exports = require('./store.dev')\n}\n","module.exports = __webpack_public_path__ + \"static/media/logo.af35e3f8.svg\";","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useCallback, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect, useDispatch } from 'react-redux'\nimport { withRouter, useLocation, useHistory } from 'react-router-dom'\n\nimport {\n Badge,\n Gallery,\n GalleryItem,\n Grid,\n GridItem,\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Title,\n Text,\n TextContent,\n TextVariants,\n Toolbar,\n ToolbarContent,\n ToolbarItem,\n Tooltip,\n Switch,\n} from '@patternfly/react-core'\nimport { StreamIcon } from '@patternfly/react-icons'\n\nimport ChangeQueue from '../containers/status/ChangeQueue'\nimport {\n countPipelineItems,\n isPipelineEmpty,\n PipelineIcon,\n} from '../containers/status/Misc'\nimport { fetchStatusIfNeeded } from '../actions/status'\nimport { clearJobs } from '../actions/statusExpansion'\nimport { EmptyBox, EmptyPage } from '../containers/Errors'\nimport { Fetching, ReloadButton } from '../containers/Fetching'\nimport { useDocumentVisibility, useInterval } from '../Hooks'\nimport {\n FilterToolbar,\n getFiltersFromUrl,\n ToolbarStatsGroup,\n ToolbarStatsItem,\n} from '../containers/FilterToolbar'\nimport {\n filterPipelines,\n handleFilterChange,\n filterInputValidation,\n clearFilters,\n} from '../containers/status/Filters'\n\nconst filterCategories = [\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by Project...',\n type: 'fuzzy-search',\n },\n {\n key: 'change',\n title: 'Change',\n placeholder: 'Filter by Change...',\n type: 'fuzzy-search',\n },\n {\n key: 'queue',\n title: 'Queue',\n placeholder: 'Filter by Queue...',\n type: 'fuzzy-search',\n }\n]\n\nfunction PipelineDetails({ pipeline }) {\n\n const pipelineType = pipeline.manager || 'unknown'\n const itemCount = pipeline._count\n\n return (\n <>\n \n <PipelineIcon pipelineType={pipelineType} />\n {pipeline.name}\n <Tooltip\n content={\n itemCount === 1\n ? <div>{itemCount} item enqueued</div>\n : <div>{itemCount} items enqueued</div>\n }\n >\n <Badge\n isRead\n style={{\n marginLeft: 'var(--pf-global--spacer--sm)',\n verticalAlign: '0.1em',\n fontSize: 'var(--pf-global--FontSize--md)',\n }}\n >\n {itemCount}\n </Badge>\n </Tooltip>\n \n \n \n \n \n {pipeline.description}\n \n \n \n \n \n )\n}\n\nPipelineDetails.propTypes = {\n pipeline: PropTypes.object.isRequired,\n}\n\nfunction PipelineDetailsPage({\n pipeline, isFetching, tenant, darkMode, autoReload, fetchStatusIfNeeded, isEmpty\n}) {\n const [isReloading, setIsReloading] = useState(false)\n const [isAllJobsExpanded, setIsAllJobsExpanded] = useState(\n localStorage.getItem('zuul_all_jobs_expanded') === 'true')\n\n const isDocumentVisible = useDocumentVisibility()\n\n const location = useLocation()\n const history = useHistory()\n const filters = getFiltersFromUrl(location, filterCategories)\n const dispatch = useDispatch()\n\n const updateData = useCallback((tenant) => {\n if (tenant.name) {\n setIsReloading(true)\n fetchStatusIfNeeded(tenant)\n .then(() => {\n setIsReloading(false)\n })\n }\n }, [setIsReloading, fetchStatusIfNeeded])\n\n useEffect(() => {\n document.title = 'Zuul Pipeline Details'\n // Initial data fetch\n updateData(tenant)\n }, [updateData, tenant])\n\n\n // Subsequent data fetches every 5 seconds if auto-reload is enabled\n useInterval(() => {\n if (isDocumentVisible && autoReload) {\n updateData(tenant)\n }\n // Reset the interval on a manual refresh\n }, isReloading ? null : 5000)\n\n const onShowAllJobsToggle = (isChecked) => {\n setIsAllJobsExpanded(isChecked)\n localStorage.setItem('zuul_all_jobs_expanded', isChecked.toString())\n dispatch(clearJobs())\n }\n\n if (pipeline === undefined || (!isReloading && isFetching)) {\n return \n }\n\n if (!pipeline) {\n return (\n \n )\n }\n\n return (\n <>\n \n \n \n { handleFilterChange(newFilters, location, history) }}\n filters={filters}\n filterInputValidation={filterInputValidation}\n >\n \n \n \n \n \n \n \n \n \n \n Trigger events: {pipeline.trigger_events}
\n Management events: {pipeline.management_events}
\n Result events: {pipeline.result_events}\n \n }\n />\n \n updateData(tenant)}\n />\n \n
\n
\n
\n
\n
\n \n \n \n {!isEmpty &&\n \n <StreamIcon\n style={{\n marginRight: 'var(--pf-global--spacer--sm)',\n verticalAlign: '-0.1em',\n }}\n />{' '}\n Queues\n \n }\n \n {\n pipeline.change_queues.filter(\n queue => queue.heads.length > 0\n ).map((queue, idx) => (\n \n \n \n ))\n }\n \n {isEmpty &&\n clearFilters(location, history, filterCategories)}\n >\n No items match this filter criteria. Remove some filters or\n clear all to show results.\n \n }\n \n \n )\n}\n\nPipelineDetailsPage.propTypes = {\n match: PropTypes.object.isRequired,\n pipeline: PropTypes.object,\n isFetching: PropTypes.bool,\n tenant: PropTypes.object,\n darkMode: PropTypes.bool,\n autoReload: PropTypes.bool.isRequired,\n fetchStatusIfNeeded: PropTypes.func.isRequired,\n isEmpty: PropTypes.bool,\n}\n\nfunction mapStateToProps(state, ownProps) {\n let pipeline = null\n if (state.status.status) {\n const filters = getFiltersFromUrl(ownProps.location, filterCategories)\n // we need to work on a copy of the state..pipelines, because when mutating\n // the original, we couldn't reset or change the filters without reloading\n // from the backend first.\n const pipelines = global.structuredClone(state.status.status.pipelines)\n // Filter the state for this specific pipeline\n pipeline = filterPipelines(pipelines, filters, filterCategories, false)\n .find((p) => p.name === ownProps.match.params.pipelineName) || null\n pipeline = countPipelineItems(pipeline)\n }\n\n const isEmpty = pipeline && isPipelineEmpty(pipeline)\n\n return {\n pipeline,\n isFetching: state.status.isFetching,\n tenant: state.tenant,\n darkMode: state.preferences.darkMode,\n autoReload: state.preferences.autoReload,\n isEmpty,\n }\n}\n\nconst mapDispatchToProps = { fetchStatusIfNeeded }\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(withRouter(PipelineDetailsPage))\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const STATUS_FETCH_REQUEST = 'STATUS_FETCH_REQUEST'\nexport const STATUS_FETCH_SUCCESS = 'STATUS_FETCH_SUCCESS'\nexport const STATUS_FETCH_FAIL = 'STATUS_FETCH_FAIL'\n\nexport const requestStatus = () => ({\n type: STATUS_FETCH_REQUEST\n})\n\n// TODO: If we wanted to spend the CPU cycles to do it, we could check\n// here if any state.statusExpansion.expandedJobs are no longer\n// present in the queues and then remove them.\nconst receiveStatus = (json) => ({\n type: STATUS_FETCH_SUCCESS,\n status: json,\n receivedAt: Date.now()\n})\n\nconst failedStatus = error => ({\n type: STATUS_FETCH_FAIL,\n error\n})\n\n// Create fake delay\n//function sleeper(ms) {\n// return function(x) {\n// return new Promise(resolve => setTimeout(() => resolve(x), ms));\n// };\n//}\n\nconst fetchStatus = (tenant) => dispatch => {\n dispatch(requestStatus())\n return API.fetchStatus(tenant.apiPrefix)\n .then(response => dispatch(receiveStatus(response.data)))\n .catch(error => dispatch(failedStatus(error)))\n}\n\nconst shouldFetchStatus = state => {\n const status = state.status\n if (!status) {\n return true\n }\n if (status.isFetching) {\n return false\n }\n return true\n}\n\nexport const fetchStatusIfNeeded = (tenant) => (dispatch, getState) => {\n if (shouldFetchStatus(getState())) {\n return dispatch(fetchStatus(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useCallback, useEffect, useState, useMemo } from 'react'\n\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter, useLocation, useHistory } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport * as moment_tz from 'moment-timezone'\n\nimport {\n Gallery,\n GalleryItem,\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Switch,\n Toolbar,\n ToolbarContent,\n ToolbarItem,\n Tooltip,\n} from '@patternfly/react-core'\nimport { StreamIcon } from '@patternfly/react-icons'\n\nimport PipelineSummary from '../containers/status/PipelineSummary'\n\nimport { fetchStatusIfNeeded } from '../actions/status'\nimport { clearQueue } from '../actions/statusExpansion'\nimport { Fetching, ReloadButton } from '../containers/Fetching'\nimport {\n FilterToolbar,\n getFiltersFromUrl,\n isFilterActive,\n ToolbarStatsGroup,\n ToolbarStatsItem,\n} from '../containers/FilterToolbar'\nimport {\n clearFilters,\n filterInputValidation,\n filterPipelines,\n handleFilterChange,\n} from '../containers/status/Filters'\nimport { EmptyBox } from '../containers/Errors'\nimport { countPipelineItems } from '../containers/status/Misc'\nimport { useDocumentVisibility, useInterval } from '../Hooks'\n\nconst filterCategories = [\n {\n key: 'change',\n title: 'Change',\n placeholder: 'Filter by Change...',\n type: 'fuzzy-search',\n },\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by Project...',\n type: 'fuzzy-search',\n },\n {\n key: 'queue',\n title: 'Queue',\n placeholder: 'Filter by Queue...',\n type: 'fuzzy-search',\n },\n {\n key: 'pipeline',\n title: 'Pipeline',\n placeholder: 'Filter by Pipeline...',\n type: 'fuzzy-search',\n },\n]\n\n\nfunction PipelineGallery({ pipelines, tenant, showAllPipelines, expandAll, isLoading, filters, onClearFilters }) {\n // Filter out empty pipelines if necessary\n if (!showAllPipelines) {\n pipelines = pipelines.filter(ppl => ppl._count > 0)\n }\n\n return (\n <>\n \n {pipelines.map(pipeline => (\n \n \n \n ))}\n \n\n {!isLoading && pipelines.length === 0 && (\n \n No items match this filter criteria. Remove some filters or\n clear all to show results.\n \n )}\n \n )\n}\n\nPipelineGallery.propTypes = {\n pipelines: PropTypes.array,\n tenant: PropTypes.object,\n showAllPipelines: PropTypes.bool,\n expandAll: PropTypes.bool,\n isLoading: PropTypes.bool,\n filters: PropTypes.object,\n onClearFilters: PropTypes.func,\n}\n\nfunction getPipelines(status, location) {\n let pipelines = []\n let stats = {}\n if (status) {\n const filters = getFiltersFromUrl(location, filterCategories)\n // we need to work on a copy of the state..pipelines, because when mutating\n // the original, we couldn't reset or change the filters without reloading\n // from the backend first.\n pipelines = global.structuredClone(status.pipelines)\n pipelines = filterPipelines(pipelines, filters, filterCategories, true)\n\n pipelines = pipelines.map(ppl => (\n countPipelineItems(ppl)\n ))\n stats = {\n trigger_event_queue: status.trigger_event_queue,\n management_event_queue: status.management_event_queue,\n last_reconfigured: status.last_reconfigured,\n }\n }\n return {\n pipelines,\n stats,\n }\n}\n\nfunction PipelineOverviewPage() {\n const location = useLocation()\n const history = useHistory()\n const filters = getFiltersFromUrl(location, filterCategories)\n const filterActive = isFilterActive(filters)\n\n const [showAllPipelines, setShowAllPipelines] = useState(\n filterActive || localStorage.getItem('zuul_show_all_pipelines') === 'true')\n const [expandAll, setExpandAll] = useState(\n localStorage.getItem('zuul_overview_expand_all') === 'true')\n const [isReloading, setIsReloading] = useState(false)\n\n const isDocumentVisible = useDocumentVisibility()\n\n const status = useSelector((state) => state.status.status)\n const { pipelines, stats } = useMemo(() => getPipelines(status, location), [status, location])\n\n const isFetching = useSelector((state) => state.status.isFetching)\n const tenant = useSelector((state) => state.tenant)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const autoReload = useSelector((state) => state.preferences.autoReload)\n const timezone = useSelector((state) => state.timezone)\n const dispatch = useDispatch()\n\n const onShowAllPipelinesToggle = (isChecked) => {\n setShowAllPipelines(isChecked)\n localStorage.setItem('zuul_show_all_pipelines', isChecked.toString())\n }\n\n const onExpandAllToggle = (isChecked) => {\n setExpandAll(isChecked)\n localStorage.setItem('zuul_overview_expand_all', isChecked.toString())\n dispatch(clearQueue())\n }\n\n const onFilterChanged = (newFilters) => {\n handleFilterChange(newFilters, location, history)\n // show all pipelines when filtering, hide when not\n setShowAllPipelines(\n isFilterActive(newFilters) || localStorage.getItem('zuul_show_all_pipelines') === 'true')\n }\n\n const onClearFilters = () => {\n clearFilters(location, history, filterCategories)\n // reset `showAllPipelines` when clearing filters\n setShowAllPipelines(localStorage.getItem('zuul_show_all_pipelines') === 'true')\n }\n\n const updateData = useCallback((tenant) => {\n if (tenant.name) {\n setIsReloading(true)\n dispatch(fetchStatusIfNeeded(tenant))\n .then(() => {\n setIsReloading(false)\n })\n }\n }, [setIsReloading, dispatch])\n\n useEffect(() => {\n document.title = 'Zuul Status'\n // Initial data fetch\n updateData(tenant)\n }, [updateData, tenant])\n\n // Subsequent data fetches every 5 seconds if auto-reload is enabled\n useInterval(() => {\n if (isDocumentVisible && autoReload) {\n updateData(tenant)\n }\n // Reset the interval on a manual refresh\n }, isReloading ? null : 5000)\n\n // Only show the fetching component on the initial data fetch, but\n // not on subsequent reloads, as this would overlay the page data.\n if (!isReloading && isFetching) {\n return \n }\n\n const allPipelinesSwitch = (\n \n )\n\n let trigger_events = stats.trigger_event_queue ? stats.trigger_event_queue.length : '0'\n let management_events = stats.management_event_queue ? stats.management_event_queue.length : '0'\n\n return (\n <>\n \n \n \n \n \n {filterActive ?\n {allPipelinesSwitch} :\n allPipelinesSwitch}\n \n \n \n \n \n \n \n \n \n \n \n Trigger events: {trigger_events}
\n Management events: {management_events}\n }\n />\n \n Last reconfigured:
\n {moment_tz.utc(stats.last_reconfigured).tz(timezone).format('llll')}\n \n }\n />\n \n updateData(tenant)}\n />\n \n
\n
\n
\n
\n
\n \n \n \n \n \n )\n}\n\nexport default withRouter(PipelineOverviewPage)\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\nimport * as API from '../api'\nimport { USER_ACL_FAIL, USER_ACL_REQUEST, USER_ACL_SUCCESS } from './auth'\n\nexport const USER_LOGGED_IN = 'USER_LOGGED_IN'\nexport const USER_LOGGED_OUT = 'USER_LOGGED_OUT'\n\n// Access tokens are not necessary JWTs (Google OAUTH uses a custom format)\n// check the access token, if it isn't a JWT, use the ID token\n\nexport function getToken(user) {\n try {\n JSON.parse(atob(user.access_token.split('.')[1]))\n return user.access_token\n } catch (e) {\n return user.id_token\n }\n}\n\nexport const fetchUserACLRequest = (tenant) => ({\n type: USER_ACL_REQUEST,\n tenant: tenant,\n})\n\nexport const userLoggedIn = (user, redirect) => (dispatch) => {\n const token = getToken(user)\n API.setAuthToken(token)\n dispatch({\n type: USER_LOGGED_IN,\n user: user,\n token: token,\n redirect: redirect,\n })\n}\n\nexport const userLoggedOut = () => (dispatch) => {\n dispatch({\n type: USER_LOGGED_OUT,\n })\n}\n\nconst fetchUserACLSuccess = (json) => ({\n type: USER_ACL_SUCCESS,\n isAdmin: json.zuul.admin,\n scope: json.zuul.scope,\n})\n\nconst fetchUserACLFail = error => ({\n type: USER_ACL_FAIL,\n error\n})\n\nexport const fetchUserACL = (tenant) => (dispatch) => {\n dispatch(fetchUserACLRequest(tenant? tenant.name : null))\n // tenant.name will be null if we're at the root\n const apiPrefix = tenant && tenant.name ? tenant.apiPrefix : ''\n return API.fetchUserAuthorizations(apiPrefix)\n .then(response => dispatch(fetchUserACLSuccess(response.data)))\n .catch(error => {\n dispatch(fetchUserACLFail(error))\n })\n}\n","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport {\n Popover,\n} from '@patternfly/react-core'\n\nimport {\n calculateQueueItemTimes,\n ChangeLink,\n getRefs\n} from './Misc'\n\nimport QueueItemProgress from './QueueItemProgress'\n\nfunction QueueItemPopover({ item, triggerElement }) {\n // TODO (felix): Move the triggerElement to be used as children\n // instead. This should make the usage of the QueueItemPopover\n // a little nicer.\n\n const [isVisible, setIsVisible] = useState(null)\n const times = calculateQueueItemTimes(item)\n\n return (\n {setIsVisible(null)}}\n headerContent={\n getRefs(item).map((change, idx) => (\n
\n {change.project} \n
\n ))\n }\n bodyContent={\n \n }\n >\n {\n // The triggerElement must be placed within the Popover to open it\n\n // The event handlers below implement a \"scrubbing\" behavior.\n // As long as a button is depressed while entering or leaving\n // the square, we will set the element to be controlled and\n // force it to be shown (when entering) or not (when leaving).\n // This leaves each of the squares in a controlled state, but if\n // the user re-enters a previously controlled square in the off\n // state without clicking, we will reset the element to be\n // uncontrolled, and a subsequent click will toggle it on.\n }\n {\n if (e.buttons) { setIsVisible(true) }\n else { setIsVisible(null) }\n }}\n onMouseLeave={(e) => {\n if (e.buttons) { setIsVisible(false) }\n else { setIsVisible(null) }\n }}\n >\n {triggerElement}\n \n \n )\n}\n\nQueueItemPopover.propTypes = {\n item: PropTypes.object,\n triggerElement: PropTypes.object,\n}\n\nfunction mapStateToProps(state) {\n return {\n darkMode: state.preferences.darkMode,\n }\n}\n\nexport default connect(mapStateToProps)(QueueItemPopover)\n","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport {\n Badge,\n Button,\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n Flex,\n FlexItem,\n Tooltip,\n} from '@patternfly/react-core'\nimport {\n SquareIcon,\n AngleRightIcon,\n AngleDownIcon,\n} from '@patternfly/react-icons'\n\nimport QueueItemPopover from './QueueItemPopover'\nimport { PipelineIcon, getQueueItemIconConfig } from './Misc'\nimport { makeQueryString } from '../FilterToolbar'\nimport ChangeQueue from './ChangeQueue'\nimport { expandQueue, collapseQueue } from '../../actions/statusExpansion'\n\nfunction QueueItemSquareWithPopover({ item }) {\n return (\n }\n />\n )\n}\n\nQueueItemSquareWithPopover.propTypes = {\n item: PropTypes.object,\n}\n\nfunction QueueItemSquare({ item }) {\n const iconConfig = getQueueItemIconConfig(item)\n return (\n \n \n \n )\n}\n\nQueueItemSquare.propTypes = {\n item: PropTypes.object,\n}\n\nfunction QueueCard({ pipeline, queue, allQueuesExpanded, jobsExpanded }) {\n const expansionKey = `${pipeline.name}/${queue.name}`\n const expandedQueue = useSelector(state => state.statusExpansion.expandedQueue[expansionKey])\n const isQueueExpanded = expandedQueue === undefined ? allQueuesExpanded : expandedQueue\n const dispatch = useDispatch()\n\n const onQueueToggle = (isExpanded) => {\n if (isExpanded) {\n dispatch(expandQueue(expansionKey))\n } else {\n dispatch(collapseQueue(expansionKey))\n }\n }\n\n return (\n \n \n \n {queue.name}\n {queue.branch ? ` (${queue.branch})` : ''}\n \n Queue length: {queue._count}
Window size: {queue.window}\n \n }\n >\n \n {queue._count} / {queue.window}\n \n \n {isQueueExpanded ?\n onQueueToggle(false)} />\n :\n onQueueToggle(true)} />\n }\n
\n
\n {isQueueExpanded ? null :\n \n {queue.heads.map((head) => (\n head.map((item) => )\n ))}\n \n }\n {isQueueExpanded ?\n \n : null\n }\n
\n )\n}\n\nQueueCard.propTypes = {\n pipeline: PropTypes.object,\n queue: PropTypes.object,\n allQueuesExpanded: PropTypes.bool,\n jobsExpanded: PropTypes.bool,\n}\n\nfunction QueueSummary({ pipeline, showAllQueues, allQueuesExpanded, jobsExpanded }) {\n let changeQueues = pipeline.change_queues\n\n if (!showAllQueues) {\n changeQueues = changeQueues.filter(queue => queue.heads.length > 0)\n }\n\n return (\n changeQueues.map((queue, idx) => {\n if (queue.name) {\n // Visualize named queues individually\n return (\n \n )\n } else {\n // For queues without a name, all heads will be consolidated\n // into a single queue to simplify the visualization.\n // This is the case for e.g. independent pipelines like check\n // where each change is enqueued in it's own queue by design.\n return (\n allQueuesExpanded ?\n \n :\n \n {queue.heads.map((head) => (\n head.map((item) => (\n \n \n \n ))\n ))}\n \n )\n }\n })\n )\n}\n\nQueueSummary.propTypes = {\n pipeline: PropTypes.object,\n showAllQueues: PropTypes.bool,\n allQueuesExpanded: PropTypes.bool,\n jobsExpanded: PropTypes.bool,\n}\n\nfunction PipelineSummary({ pipeline, tenant, showAllQueues, areAllJobsExpanded, filters }) {\n const pipelineType = pipeline.manager || 'unknown'\n const itemCount = pipeline._count\n const expansionKey = `${pipeline.name}`\n const expandedQueue = useSelector(state => state.statusExpansion.expandedQueue[expansionKey])\n const dispatch = useDispatch()\n\n const isQueueExpanded = expandedQueue === undefined ? areAllJobsExpanded : expandedQueue\n\n const onQueueToggle = (isExpanded) => {\n if (isExpanded) {\n dispatch(expandQueue(expansionKey))\n } else {\n dispatch(collapseQueue(expansionKey))\n }\n }\n\n return (\n \n \n \n \n \n \n \n {pipeline.name}\n \n {itemCount} item enqueued\n :
{itemCount} items enqueued
\n }\n >\n \n {itemCount}\n \n \n {isQueueExpanded ?\n onQueueToggle(false)} />\n :\n onQueueToggle(true)} />\n }\n
\n
\n \n \n \n\n
\n )\n}\n\nPipelineSummary.propTypes = {\n pipeline: PropTypes.object,\n tenant: PropTypes.object,\n showAllQueues: PropTypes.bool,\n areAllJobsExpanded: PropTypes.bool,\n filters: PropTypes.object,\n}\n\nexport default PipelineSummary\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport Axios from 'axios'\n\nlet authToken = undefined\n\nexport function setAuthToken(token) {\n authToken = token\n}\n\nfunction getHomepageUrl() {\n //\n // Discover serving location from href.\n //\n // This is only needed for sub-directory serving. Serving the application\n // from 'scheme://domain/' may simply default to 'scheme://domain/'\n //\n // Note that this is not enough for sub-directory serving,\n // The static files location also needs to be adapted with the 'homepage'\n // settings of the package.json file.\n //\n // This homepage url is used for the Router and Link resolution logic\n //\n let url = new URL(window.location.href)\n\n if ('PUBLIC_URL' in process.env) {\n url.pathname = process.env.PUBLIC_URL\n } else {\n url.pathname = ''\n }\n if (!url.pathname.endsWith('/')) {\n url.pathname = url.pathname + '/'\n }\n return url.origin + url.pathname\n}\n\nfunction getZuulUrl() {\n // Return the zuul root api absolute url\n const ZUUL_API = process.env.REACT_APP_ZUUL_API\n let apiUrl\n\n if (ZUUL_API) {\n // Api url set at build time, use it\n apiUrl = ZUUL_API\n } else {\n // Api url is relative to homepage path\n apiUrl = getHomepageUrl() + 'api/'\n }\n if (!apiUrl.endsWith('/')) {\n apiUrl = apiUrl + '/'\n }\n if (!apiUrl.endsWith('/api/')) {\n apiUrl = apiUrl + 'api/'\n }\n // console.log('Api url is ', apiUrl)\n return apiUrl\n}\nconst apiUrl = getZuulUrl()\n\n\nfunction getStreamUrl(apiPrefix) {\n const streamUrl = (apiUrl + apiPrefix)\n .replace(/(http)(s)?:\\/\\//, 'ws$2://') + 'console-stream'\n // console.log('Stream url is ', streamUrl)\n return streamUrl\n}\n\nfunction getAuthToken() {\n return authToken\n}\n\nfunction makeRequest(url, method, data) {\n if (method === undefined) {\n method = 'get'\n }\n\n // This performs a simple GET and tries to detect if CORS errors are\n // due to proxy authentication errors.\n const instance = Axios.create({\n baseURL: apiUrl\n })\n\n if (authToken) {\n instance.defaults.headers.common['Authorization'] = 'Bearer ' + authToken\n }\n\n const config = {method, url, data}\n\n // First try the request as normal\n let res = instance.request(config).catch(err => {\n if (err.response === undefined) {\n // This is either a Network, DNS, or CORS error, but we can't tell which.\n // If we're behind an authz proxy, it's possible our creds have timed out\n // and the CORS error is because we're getting a redirect.\n // Apache mod_auth_mellon (and possibly other authz proxies) will avoid\n // issuing a redirect if X-Requested-With is set to 'XMLHttpRequest' and\n // will instead issue a 403. We can use this to detect that case.\n instance.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'\n let res2 = instance.request(config).catch(err2 => {\n if (err2.response && err2.response.status === 403) {\n // We might be getting a redirect or something else,\n // so reload the page.\n console.log('Received 403 after unknown error; reloading')\n window.location.reload()\n }\n // If we're still getting an error, we don't know the cause,\n // it could be a transient network error, so we won't reload, we'll just\n // wait for it to clear.\n throw (err2)\n })\n return res2\n }\n throw (err)\n })\n return res\n}\n\n// Direct APIs\nfunction fetchInfo() {\n return makeRequest('info')\n}\n\nfunction fetchComponents() {\n return makeRequest('components')\n}\n\nfunction fetchTenantInfo(apiPrefix) {\n return makeRequest(apiPrefix + 'info')\n}\n\nfunction fetchOpenApi() {\n return Axios.get(getHomepageUrl() + 'openapi.yaml')\n}\n\nfunction fetchTenants() {\n return makeRequest(apiUrl + 'tenants')\n}\n\nfunction fetchTenantStatus(apiPrefix) {\n return makeRequest(apiPrefix + 'tenant-status')\n}\n\nfunction fetchConfigErrors(apiPrefix, queryString) {\n let path = 'config-errors'\n if (queryString) {\n path += '?' + queryString.slice(1)\n }\n return makeRequest(apiPrefix + path)\n}\n\nfunction fetchStatus(apiPrefix) {\n return makeRequest(apiPrefix + 'status')\n}\n\nfunction fetchChangeStatus(apiPrefix, changeId) {\n return makeRequest(apiPrefix + 'status/change/' + changeId)\n}\n\nfunction fetchFreezeJob(apiPrefix, pipelineName, projectName, branchName, jobName) {\n return makeRequest(apiPrefix +\n 'pipeline/' + pipelineName +\n '/project/' + projectName +\n '/branch/' + branchName +\n '/freeze-job/' + jobName)\n}\n\nfunction fetchBuild(apiPrefix, buildId) {\n return makeRequest(apiPrefix + 'build/' + buildId)\n}\n\nfunction fetchBuilds(apiPrefix, queryString) {\n let path = 'builds'\n if (queryString) {\n path += '?' + queryString.slice(1)\n }\n return makeRequest(apiPrefix + path)\n}\n\nfunction fetchBuildset(apiPrefix, buildsetId) {\n return makeRequest(apiPrefix + 'buildset/' + buildsetId)\n}\n\nfunction fetchBuildsets(apiPrefix, queryString) {\n let path = 'buildsets'\n if (queryString) {\n path += '?' + queryString.slice(1)\n }\n return makeRequest(apiPrefix + path)\n}\n\nfunction fetchImages(apiPrefix) {\n return makeRequest(apiPrefix + 'images')\n}\n\nfunction buildImage(apiPrefix, imageName) {\n return makeRequest(\n apiPrefix + 'image/' + imageName + '/build',\n 'post'\n )\n}\n\nfunction deleteImageBuildArtifact(apiPrefix, artifactId) {\n return makeRequest(\n apiPrefix + 'image-build-artifact/' + artifactId,\n 'delete'\n )\n}\n\nfunction deleteImageUpload(apiPrefix, uploadId) {\n return makeRequest(\n apiPrefix + 'image-upload/' + uploadId,\n 'delete'\n )\n}\n\nfunction fetchFlavors(apiPrefix) {\n return makeRequest(apiPrefix + 'flavors')\n}\n\nfunction fetchPipelines(apiPrefix) {\n return makeRequest(apiPrefix + 'pipelines')\n}\n\nfunction fetchProject(apiPrefix, projectName) {\n return makeRequest(apiPrefix + 'project/' + projectName)\n}\n\nfunction fetchProjects(apiPrefix) {\n return makeRequest(apiPrefix + 'projects')\n}\n\nfunction fetchProviders(apiPrefix) {\n return makeRequest(apiPrefix + 'providers')\n}\n\nfunction fetchJob(apiPrefix, jobName) {\n return makeRequest(apiPrefix + 'job/' + jobName)\n}\n\nfunction fetchJobGraph(apiPrefix, projectName, pipelineName, branchName) {\n return makeRequest(apiPrefix +\n 'pipeline/' + pipelineName +\n '/project/' + projectName +\n '/branch/' + branchName +\n '/freeze-jobs')\n}\n\nfunction fetchJobs(apiPrefix) {\n return makeRequest(apiPrefix + 'jobs')\n}\n\nfunction fetchLabels(apiPrefix) {\n return makeRequest(apiPrefix + 'labels')\n}\n\nfunction fetchNodes(apiPrefix) {\n return makeRequest(apiPrefix + 'nodes')\n}\n\nfunction fetchSemaphores(apiPrefix) {\n return makeRequest(apiPrefix + 'semaphores')\n}\n\nfunction fetchAutoholds(apiPrefix) {\n return makeRequest(apiPrefix + 'autohold')\n}\n\nfunction fetchAutohold(apiPrefix, requestId) {\n return makeRequest(apiPrefix + 'autohold/' + requestId)\n}\n\nfunction fetchUserAuthorizations(apiPrefix) {\n return makeRequest(apiPrefix + 'authorizations')\n}\n\nfunction dequeue(apiPrefix, projectName, pipeline, change) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/dequeue',\n 'post',\n {\n pipeline: pipeline,\n change: change,\n }\n )\n}\n\nfunction dequeue_ref(apiPrefix, projectName, pipeline, ref) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/dequeue',\n 'post',\n {\n pipeline: pipeline,\n ref: ref,\n }\n )\n}\n\nfunction enqueue(apiPrefix, projectName, pipeline, change) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/enqueue',\n 'post',\n {\n pipeline: pipeline,\n change: change,\n }\n )\n}\n\nfunction enqueue_ref(apiPrefix, projectName, pipeline, ref, oldrev, newrev) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/enqueue',\n 'post',\n {\n pipeline: pipeline,\n ref: ref,\n oldrev: oldrev,\n newrev: newrev,\n }\n )\n}\n\nfunction autohold(apiPrefix, projectName, job, change, ref,\n reason, count, node_hold_expiration) {\n return makeRequest(\n apiPrefix + 'project/' + projectName + '/autohold',\n 'post',\n {\n change: change,\n job: job,\n ref: ref,\n reason: reason,\n count: count,\n node_hold_expiration: node_hold_expiration,\n }\n )\n}\n\nfunction autohold_delete(apiPrefix, requestId) {\n return makeRequest(\n apiPrefix + '/autohold/' + requestId,\n 'delete'\n )\n}\n\nfunction promote(apiPrefix, pipeline, changes) {\n return makeRequest(\n apiPrefix + '/promote',\n 'post',\n {\n pipeline: pipeline,\n changes: changes,\n }\n )\n}\n\n\nexport {\n apiUrl,\n autohold,\n autohold_delete,\n buildImage,\n deleteImageBuildArtifact,\n deleteImageUpload,\n dequeue,\n dequeue_ref,\n enqueue,\n enqueue_ref,\n fetchAutohold,\n fetchAutoholds,\n fetchBuild,\n fetchBuilds,\n fetchBuildset,\n fetchBuildsets,\n fetchChangeStatus,\n fetchComponents,\n fetchConfigErrors,\n fetchFlavors,\n fetchFreezeJob,\n fetchImages,\n fetchInfo,\n fetchJob,\n fetchJobGraph,\n fetchJobs,\n fetchLabels,\n fetchNodes,\n fetchOpenApi,\n fetchPipelines,\n fetchProject,\n fetchProjects,\n fetchProviders,\n fetchSemaphores,\n fetchStatus,\n fetchTenantInfo,\n fetchTenantStatus,\n fetchTenants,\n fetchUserAuthorizations,\n getAuthToken,\n getHomepageUrl,\n getStreamUrl,\n promote,\n}\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\n\nimport {\n Button,\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n EmptyStatePrimary,\n EmptyStateSecondaryActions,\n EmptyStateVariant,\n Title,\n} from '@patternfly/react-core'\n\nfunction EmptyPage(props) {\n const { title, icon, linkTarget, linkText } = props\n\n return (\n \n \n \n {title}\n \n \n \n \n \n \n \n )\n}\n\nEmptyPage.propTypes = {\n title: PropTypes.string.isRequired,\n icon: PropTypes.func.isRequired,\n linkTarget: PropTypes.string.isRequired,\n linkText: PropTypes.string.isRequired,\n}\n\nfunction EmptyBox(props) {\n const { title, icon, action, onAction, children } = props\n return (\n \n \n {title}\n \n {children}\n \n \n \n \n \n )\n}\n\nEmptyBox.propTypes = {\n title: PropTypes.string.isRequired,\n icon: PropTypes.func.isRequired,\n action: PropTypes.string.isRequired,\n onAction: PropTypes.func.isRequired,\n children: PropTypes.node,\n}\n\n\nexport { EmptyBox, EmptyPage }\n","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport { applyFilter, isFilterActive, writeFiltersToUrl } from '../FilterToolbar'\nimport { isPipelineEmpty } from './Misc'\n\nfunction handleFilterChange(newFilters, location, history) {\n writeFiltersToUrl(newFilters, location, history)\n}\n\nfunction clearFilters(location, history, filterCategories) {\n // Delete the values for each filter category\n const filters = filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n handleFilterChange(filters, location, history)\n}\n\nfunction filterInputValidation(_, filterValue) {\n // Input value should not be empty for all cases\n if (!filterValue) {\n return {\n success: false,\n message: 'Input should not be empty'\n }\n }\n\n return {\n success: true\n }\n}\n\nfunction filterByPipeline(pipelines, filter, fuzzy) {\n return pipelines.filter(p => applyFilter([p.name], filter, fuzzy))\n}\n\nfunction filterByQueue(pipelines, filter, fuzzy, truncateEmpty) {\n for (const p of pipelines) {\n p.change_queues = p.change_queues.filter(\n q => applyFilter([q.name], filter, fuzzy)\n )\n }\n\n // when searching for specific queues, we want to hide pipelines that are now\n // empty on the PipelineOverview page and only show those with matches for\n // the filter (truncateEmpty is true).\n // On the PipelineDetails page, we don't want to get rid of an empty\n // pipeline, instead present the user an \"your filter did not match any\n // items\" result. Otherwise, we run into a state where the PipelineDetails\n // page presents a \"this pipeline does not exist\" result (so we set\n // truncateEmpty to false).\n if (truncateEmpty) {\n return pipelines.filter(p => !isPipelineEmpty(p))\n }\n return pipelines\n}\n\nfunction filterByProject(pipelines, filter, fuzzy, truncateEmpty) {\n for (const p of pipelines) {\n for (const q of p.change_queues) {\n const heads = []\n for (const head of q.heads) {\n heads.push(head.filter(item => {\n const projects = item.refs.map(ref => ref.project)\n return applyFilter(projects, filter, fuzzy)\n }))\n }\n // if we found a match on an unnamed queue, we want to display the entire\n // queue, ie. we want to also display non-live items ahead of matched one\n if (heads.flat().length === 0 || q.name !== '') {\n q.heads = heads\n }\n }\n }\n\n // when searching for single items, we want to hide empty pipelines except\n // for when we're on the PipelineDetails page for the same reasons as above\n // (cf. filterByQueue)\n if (truncateEmpty) {\n pipelines = pipelines.filter(p => !isPipelineEmpty(p))\n }\n for (const p of pipelines) {\n p.change_queues = p.change_queues.filter(q => q.heads.flat().length > 0)\n }\n return pipelines\n}\n\nfunction filterByChange(pipelines, filter, fuzzy, truncateEmpty) {\n // Here we filter for change number without the ref part. So we are only\n // interested in the first part of the id being of format\n // {change_num},{patchset/commit}.\n // Or by a full match of the input, e.g. when filtering for a ref instead of\n // a change number\n const _filter = filter.map(f => [`${f},*`, `${f}`]).flat()\n for (const p of pipelines) {\n for (const q of p.change_queues) {\n const heads = []\n for (const head of q.heads) {\n heads.push(head.filter(item => {\n const ids = item.refs.map(ref => ref.id || ref.ref)\n return applyFilter(ids, _filter, fuzzy)\n }))\n }\n // if we found a match on an unnamed queue, we want to display the entire\n // queue, ie. we want to also display non-live items ahead of matched one\n if (heads.flat().length === 0 || q.name !== '') {\n q.heads = heads\n }\n }\n }\n\n // when searching for single items, we want to hide empty pipelines except\n // for when we're on the PipelineDetails page for the same reasons as above\n // (cf. filterByQueue)\n if (truncateEmpty) {\n pipelines = pipelines.filter(p => !isPipelineEmpty(p))\n }\n for (const p of pipelines) {\n p.change_queues = p.change_queues.filter(q => q.heads.flat().length > 0)\n }\n return pipelines\n}\n\nfunction filterPipelines(pipelines, filters, filterCategories, truncateEmpty) {\n if (!isFilterActive(filters)) {\n return pipelines\n }\n\n // get rid of limit/skip pagination filters that come from the FilterToolbar\n // by going over the valid FILTER_CATEGORIES\n for (const category of filterCategories) {\n const key = category['key']\n const fuzzy = category['type'] === 'fuzzy-search'\n const filter = filters[key]\n if (filter.length === 0) {\n continue\n }\n\n switch (key) {\n case 'pipeline':\n pipelines = filterByPipeline(pipelines, filter, fuzzy)\n break\n case 'queue':\n pipelines = filterByQueue(pipelines, filter, fuzzy, truncateEmpty)\n break\n case 'project':\n pipelines = filterByProject(pipelines, filter, fuzzy, truncateEmpty)\n break\n case 'change': {\n pipelines = filterByChange(pipelines, filter, fuzzy, truncateEmpty)\n break\n }\n default:\n // this should not happen\n break\n }\n }\n\n return pipelines\n}\n\nexport {\n clearFilters,\n filterInputValidation,\n filterPipelines,\n handleFilterChange,\n}\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const ADMIN_DEQUEUE_FAIL = 'ADMIN_DEQUEUE_FAIL'\nexport const ADMIN_ENQUEUE_FAIL = 'ADMIN_ENQUEUE_FAIL'\nexport const ADMIN_AUTOHOLD_FAIL = 'ADMIN_AUTOHOLD_FAIL'\nexport const ADMIN_PROMOTE_FAIL = 'ADMIN_PROMOTE_FAIL'\n\nfunction parseAPIerror(error) {\n if (error.response) {\n let parser = new DOMParser()\n let htmlError = parser.parseFromString(error.response.data, 'text/html')\n let error_description = htmlError.getElementsByTagName('p')[0].innerText\n return (error_description)\n } else {\n return (error)\n }\n}\n\nexport const addDequeueError = error => ({\n type: ADMIN_DEQUEUE_FAIL,\n notification: parseAPIerror(error)\n})\n\nexport const addEnqueueError = error => ({\n type: ADMIN_ENQUEUE_FAIL,\n notification: parseAPIerror(error)\n})\n\nexport const addAutoholdError = error => ({\n type: ADMIN_AUTOHOLD_FAIL,\n notification: parseAPIerror(error)\n})\n\nexport const addPromoteError = error => ({\n type: ADMIN_PROMOTE_FAIL,\n notification: parseAPIerror(error)\n})","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport Axios from 'axios'\n\nexport const LOGFILE_FETCH_REQUEST = 'LOGFILE_FETCH_REQUEST'\nexport const LOGFILE_FETCH_SUCCESS = 'LOGFILE_FETCH_SUCCESS'\nexport const LOGFILE_FETCH_FAIL = 'LOGFILE_FETCH_FAIL'\n\nexport const requestLogfile = (url) => ({\n type: LOGFILE_FETCH_REQUEST,\n url: url,\n})\n\nconst SYSLOGDATE = '\\\\w+\\\\s+\\\\d+\\\\s+\\\\d{2}:\\\\d{2}:\\\\d{2}((\\\\.|\\\\,)\\\\d{3,6})?'\nconst DATEFMT = '\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{2}:\\\\d{2}:\\\\d{2}((\\\\.|\\\\,)\\\\d{3,6})?'\nconst STATUSFMT = '(DEBUG|INFO|WARNING|ERROR|TRACE|AUDIT|CRITICAL)'\n\nconst severityMap = {\n DEBUG: 1,\n INFO: 2,\n WARNING: 3,\n ERROR: 4,\n TRACE: 5,\n AUDIT: 6,\n CRITICAL: 7,\n}\n\nconst OSLO_LOGMATCH = new RegExp(`^(${DATEFMT})(( \\\\d+)? (${STATUSFMT}).*)`)\nconst SYSTEMD_LOGMATCH = new RegExp(`^(${SYSLOGDATE})( (\\\\S+) \\\\S+\\\\[\\\\d+\\\\]\\\\: (${STATUSFMT}).*)`)\n\nconst receiveLogfile = (buildId, file, data) => {\n\n const out = data.split(/\\r?\\n/).map((line, idx) => {\n let m = null\n let sev = null\n\n m = SYSTEMD_LOGMATCH.exec(line)\n if (m) {\n sev = severityMap[m[7]]\n } else {\n OSLO_LOGMATCH.exec(line)\n if (m) {\n sev = severityMap[m[7]]\n }\n }\n\n return {\n text: line,\n index: idx+1,\n severity: sev\n }\n })\n return {\n type: LOGFILE_FETCH_SUCCESS,\n buildId,\n fileName: file,\n fileContent: out,\n receivedAt: Date.now()\n }\n}\n\nconst failedLogfile = (error, url) => {\n error.url = url\n return {\n type: LOGFILE_FETCH_FAIL,\n error\n }\n}\n\nexport function fetchLogfile(buildId, file, state) {\n return async function (dispatch) {\n // Don't do anything if the logfile is already part of our local state\n if (\n buildId in state.logfile.files &&\n file in state.logfile.files[buildId]\n ) {\n return Promise.resolve()\n }\n // Since this method is only called after fetchBuild() and fetchManifest(),\n // we can assume both are there.\n const build = state.build.builds[buildId]\n const manifest = state.build.manifests[buildId]\n const item = manifest.index['/' + file]\n\n if (!item) {\n return dispatch(\n failedLogfile(Error(`No manifest entry found for logfile \"${file}\"`))\n )\n }\n\n if (item.mimetype !== 'text/plain') {\n return dispatch(\n failedLogfile(Error(`Logfile \"${file}\" has invalid mimetype`))\n )\n }\n\n const url = build.log_url + file\n dispatch(requestLogfile())\n try {\n const response = await Axios.get(url, { transformResponse: [] })\n dispatch(receiveLogfile(buildId, file, response.data))\n } catch(error) {\n dispatch(failedLogfile(error, url))\n }\n }\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const SEMAPHORES_FETCH_REQUEST = 'SEMAPHORES_FETCH_REQUEST'\nexport const SEMAPHORES_FETCH_SUCCESS = 'SEMAPHORES_FETCH_SUCCESS'\nexport const SEMAPHORES_FETCH_FAIL = 'SEMAPHORES_FETCH_FAIL'\n\nexport const requestSemaphores = () => ({\n type: SEMAPHORES_FETCH_REQUEST\n})\n\nexport const receiveSemaphores = (tenant, json) => ({\n type: SEMAPHORES_FETCH_SUCCESS,\n tenant: tenant,\n semaphores: json,\n receivedAt: Date.now()\n})\n\nconst failedSemaphores = error => ({\n type: SEMAPHORES_FETCH_FAIL,\n error\n})\n\nconst fetchSemaphores = (tenant) => dispatch => {\n dispatch(requestSemaphores())\n return API.fetchSemaphores(tenant.apiPrefix)\n .then(response => dispatch(receiveSemaphores(tenant.name, response.data)))\n .catch(error => dispatch(failedSemaphores(error)))\n}\n\nconst shouldFetchSemaphores = (tenant, state) => {\n const semaphores = state.semaphores.semaphores[tenant.name]\n if (!semaphores || semaphores.length === 0) {\n return true\n }\n if (semaphores.isFetching) {\n return false\n }\n return false\n}\n\nexport const fetchSemaphoresIfNeeded = (tenant, force) => (dispatch, getState) => {\n if (force || shouldFetchSemaphores(tenant, getState())) {\n return dispatch(fetchSemaphores(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const TENANTS_FETCH_REQUEST = 'TENANTS_FETCH_REQUEST'\nexport const TENANTS_FETCH_SUCCESS = 'TENANTS_FETCH_SUCCESS'\nexport const TENANTS_FETCH_FAIL = 'TENANTS_FETCH_FAIL'\n\nexport const requestTenants = () => ({\n type: TENANTS_FETCH_REQUEST\n})\n\nexport const receiveTenants = json => ({\n type: TENANTS_FETCH_SUCCESS,\n tenants: json,\n receivedAt: Date.now()\n})\n\nconst failedTenants = error => ({\n type: TENANTS_FETCH_FAIL,\n error\n})\n\nconst fetchTenants = () => dispatch => {\n dispatch(requestTenants())\n return API.fetchTenants()\n .then(response => dispatch(receiveTenants(response.data)))\n .catch(error => dispatch(failedTenants(error)))\n}\n\nconst shouldFetchTenants = state => {\n const tenants = state.tenants\n if (tenants.tenants.length > 0) {\n return false\n }\n if (tenants.isFetching) {\n return false\n }\n return true\n}\n\nexport const fetchTenantsIfNeeded = (force) => (dispatch, getState) => {\n if (force || shouldFetchTenants(getState())) {\n return dispatch(fetchTenants())\n }\n}\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const COMPONENTS_FETCH_REQUEST = 'COMPONENTS_FETCH_REQUEST'\nexport const COMPONENTS_FETCH_SUCCESS = 'COMPONENTS_FETCH_SUCCESS'\nexport const COMPONENTS_FETCH_FAIL = 'COMPONENTS_FETCH_FAIL'\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2023 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport { fetchTenantStatus } from '../api'\n\nexport const TENANT_STATUS_FETCH_REQUEST = 'TENANT_STATUS_FETCH_REQUEST'\nexport const TENANT_STATUS_FETCH_SUCCESS = 'TENANT_STATUS_FETCH_SUCCESS'\nexport const TENANT_STATUS_FETCH_FAIL = 'TENANT_STATUS_FETCH_FAIL'\nexport const TENANT_STATUS_CLEAR = 'TENANT_STATUS_CLEAR'\n\nexport const requestTenantStatus = (tenant) => ({\n type: TENANT_STATUS_FETCH_REQUEST,\n tenant: tenant,\n})\n\nexport const receiveTenantStatus = (tenant, json) => ({\n type: TENANT_STATUS_FETCH_SUCCESS,\n tenant: tenant,\n tenant_status: json,\n receivedAt: Date.now()\n})\n\nconst failedTenantStatus = (tenant, error) => ({\n type: TENANT_STATUS_FETCH_FAIL,\n tenant: tenant,\n error\n})\n\nexport function fetchTenantStatusAction (tenant) {\n return (dispatch, getState) => {\n const state = getState()\n if (state.tenantStatus.isFetching && tenant.name === state.tenantStatus.tenant) {\n return Promise.resolve()\n }\n dispatch(requestTenantStatus(tenant.name))\n return fetchTenantStatus(tenant.apiPrefix)\n .then(response => dispatch(receiveTenantStatus(tenant.name, response.data)))\n .catch(error => dispatch(failedTenantStatus(tenant.name, error)))\n }\n}\n\nexport function clearTenantStatusAction () {\n return (dispatch) => {\n dispatch({type: TENANT_STATUS_CLEAR})\n }\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const FLAVORS_FETCH_REQUEST = 'FLAVORS_FETCH_REQUEST'\nexport const FLAVORS_FETCH_SUCCESS = 'FLAVORS_FETCH_SUCCESS'\nexport const FLAVORS_FETCH_FAIL = 'FLAVORS_FETCH_FAIL'\n\nexport const requestFlavors = () => ({\n type: FLAVORS_FETCH_REQUEST\n})\n\nexport const receiveFlavors = (tenant, json) => ({\n type: FLAVORS_FETCH_SUCCESS,\n tenant: tenant,\n flavors: json,\n receivedAt: Date.now()\n})\n\nconst failedFlavors = error => ({\n type: FLAVORS_FETCH_FAIL,\n error\n})\n\nexport const fetchFlavors = (tenant) => dispatch => {\n dispatch(requestFlavors())\n return API.fetchFlavors(tenant.apiPrefix)\n .then(response => dispatch(receiveFlavors(tenant.name, response.data)))\n .catch(error => dispatch(failedFlavors(error)))\n}\n\nconst shouldFetchFlavors = (tenant, state) => {\n const flavors = state.flavors.flavors[tenant.name]\n if (!flavors) {\n return true\n }\n if (flavors.isFetching) {\n return false\n }\n return false\n}\n\nexport const fetchFlavorsIfNeeded = (tenant) => (dispatch, getState) => {\n if (shouldFetchFlavors(tenant, getState())) {\n return dispatch(fetchFlavors(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const FREEZE_JOB_FETCH_REQUEST = 'FREEZE_JOB_FETCH_REQUEST'\nexport const FREEZE_JOB_FETCH_SUCCESS = 'FREEZE_JOB_FETCH_SUCCESS'\nexport const FREEZE_JOB_FETCH_FAIL = 'FREEZE_JOB_FETCH_FAIL'\n\nexport const requestFreezeJob = () => ({\n type: FREEZE_JOB_FETCH_REQUEST\n})\n\nexport function makeFreezeJobKey(pipeline, project, branch, job) {\n return JSON.stringify({\n pipeline, project, branch, job\n })\n}\n\nexport const receiveFreezeJob = (tenant, freezeJobKey, freezeJob) => {\n return {\n type: FREEZE_JOB_FETCH_SUCCESS,\n tenant: tenant,\n freezeJobKey: freezeJobKey,\n freezeJob: freezeJob,\n receivedAt: Date.now(),\n }\n}\n\nconst failedFreezeJob = error => ({\n type: FREEZE_JOB_FETCH_FAIL,\n error\n})\n\nconst fetchFreezeJob = (tenant, pipeline, project, branch, job) => dispatch => {\n dispatch(requestFreezeJob())\n const freezeJobKey = makeFreezeJobKey(pipeline, project, branch, job)\n return API.fetchFreezeJob(tenant.apiPrefix,\n pipeline,\n project,\n branch,\n job)\n .then(response => dispatch(receiveFreezeJob(\n tenant.name, freezeJobKey, response.data)))\n .catch(error => dispatch(failedFreezeJob(error)))\n}\n\nconst shouldFetchFreezeJob = (tenant, pipeline, project, branch, job, state) => {\n const freezeJobKey = makeFreezeJobKey(pipeline, project, branch, job)\n const tenantFreezeJobs = state.freezejob.freezeJobs[tenant.name]\n if (tenantFreezeJobs) {\n const freezeJob = tenantFreezeJobs[freezeJobKey]\n if (!freezeJob) {\n return true\n }\n if (freezeJob.isFetching) {\n return false\n }\n return false\n }\n return true\n}\n\nexport const fetchFreezeJobIfNeeded = (tenant, pipeline, project, branch, job,\n force) => (\n dispatch, getState) => {\n if (force || shouldFetchFreezeJob(tenant, pipeline, project, branch, job,\n getState())) {\n return dispatch(fetchFreezeJob(tenant, pipeline, project, branch, job))\n }\n return Promise.resolve()\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const JOB_GRAPH_FETCH_REQUEST = 'JOB_GRAPH_FETCH_REQUEST'\nexport const JOB_GRAPH_FETCH_SUCCESS = 'JOB_GRAPH_FETCH_SUCCESS'\nexport const JOB_GRAPH_FETCH_FAIL = 'JOB_GRAPH_FETCH_FAIL'\n\nexport const requestJobGraph = () => ({\n type: JOB_GRAPH_FETCH_REQUEST\n})\n\nexport function makeJobGraphKey(project, pipeline, branch) {\n return JSON.stringify({\n project: project, pipeline: pipeline, branch: branch\n })\n}\n\nexport const receiveJobGraph = (tenant, jobGraphKey, jobGraph) => {\n return {\n type: JOB_GRAPH_FETCH_SUCCESS,\n tenant: tenant,\n jobGraphKey: jobGraphKey,\n jobGraph: jobGraph,\n receivedAt: Date.now(),\n }\n}\n\nconst failedJobGraph = error => ({\n type: JOB_GRAPH_FETCH_FAIL,\n error\n})\n\nconst fetchJobGraph = (tenant, project, pipeline, branch) => dispatch => {\n dispatch(requestJobGraph())\n const jobGraphKey = makeJobGraphKey(project, pipeline, branch)\n return API.fetchJobGraph(tenant.apiPrefix,\n project,\n pipeline,\n branch)\n .then(response => dispatch(receiveJobGraph(\n tenant.name, jobGraphKey, response.data)))\n .catch(error => dispatch(failedJobGraph(error)))\n}\n\nconst shouldFetchJobGraph = (tenant, project, pipeline, branch, state) => {\n const jobGraphKey = makeJobGraphKey(project, pipeline, branch)\n const tenantJobGraphs = state.jobgraph.jobGraphs[tenant.name]\n if (tenantJobGraphs) {\n const jobGraph = tenantJobGraphs[jobGraphKey]\n if (!jobGraph) {\n return true\n }\n if (jobGraph.isFetching) {\n return false\n }\n return false\n }\n return true\n}\n\nexport const fetchJobGraphIfNeeded = (tenant, project, pipeline, branch,\n force) => (\n dispatch, getState) => {\n if (force || shouldFetchJobGraph(tenant, project, pipeline, branch,\n getState())) {\n return dispatch(fetchJobGraph(tenant, project, pipeline, branch))\n }\n return Promise.resolve()\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read\n// https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#making-a-progressive-web-app\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport default function register () {\n if (process.env.REACT_APP_ENABLE_SERVICE_WORKER !== 'true') {\n console.log('Disabled service worker')\n unregister()\n return\n }\n\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n )\n })\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl)\n }\n })\n }\n}\n\nfunction registerValidSW (swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.')\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker (swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport {\n Accordion,\n AccordionItem,\n AccordionToggle,\n AccordionContent,\n Button,\n ButtonVariant,\n ClipboardCopy,\n ClipboardCopyVariant,\n Modal,\n ModalVariant\n} from '@patternfly/react-core'\nimport {\n UserIcon,\n SignInAltIcon,\n SignOutAltIcon,\n HatWizardIcon\n} from '@patternfly/react-icons'\n\nimport * as moment_tz from 'moment-timezone'\n\nimport { apiUrl } from '../../api'\nimport { fetchUserACL } from '../../actions/user'\nimport { withAuth } from 'oidc-react'\nimport { getHomepageUrl } from '../../api'\n\n\nclass AuthContainer extends React.Component {\n static propTypes = {\n user: PropTypes.object,\n tenant: PropTypes.object,\n dispatch: PropTypes.func.isRequired,\n timezone: PropTypes.string.isRequired,\n info: PropTypes.object,\n auth: PropTypes.object,\n // Props coming from withAuth\n userManager: PropTypes.object,\n signIn: PropTypes.func,\n signOut: PropTypes.func,\n }\n\n constructor(props) {\n super(props)\n this.state = {\n isModalOpen: false,\n showZuulClientConfig: false,\n isSessionExpiredModalOpen: false,\n }\n this.handleModalToggle = () => {\n this.setState(({ isModalOpen }) => ({\n isModalOpen: !isModalOpen\n }))\n }\n this.handleSessionExpiredModalToggle = () => {\n this.setState(({ isSessionExpiredModalOpen }) => ({\n isSessionExpiredModalOpen: !isSessionExpiredModalOpen\n }))\n }\n this.handleConfigToggle = () => {\n this.setState(({ showZuulClientConfig }) => ({\n showZuulClientConfig: !showZuulClientConfig\n }))\n }\n this.onAccessTokenExpired = () => {\n // If the token has expired, show the modal\n console.debug('Token expired')\n this.setState(() => ({\n isSessionExpiredModalOpen: true,\n isModalOpen: false,\n }))\n }\n this.onUserLoaded = () => {\n // If another tab logged in while our expired modal is shown, go\n // ahead and clear it.\n console.debug('User signed in')\n this.setState(() => ({\n isSessionExpiredModalOpen: false,\n }))\n }\n }\n\n clickOnSignIn() {\n const redirect_target = window.location.href.slice(getHomepageUrl().length)\n localStorage.setItem('zuul_auth_redirect', redirect_target)\n this.props.signIn()\n }\n\n componentDidMount() {\n const { user, tenant } = this.props\n this.props.userManager.events.addAccessTokenExpired(this.onAccessTokenExpired)\n this.props.userManager.events.addUserLoaded(this.onUserLoaded)\n\n if (user.data) {\n console.log('Refreshing ACL', user.tenant, tenant)\n this.props.dispatch(fetchUserACL(tenant))\n }\n }\n\n componentWillUnmount() {\n this.props.userManager.events.removeAccessTokenExpired(this.onAccessTokenExpired)\n this.props.userManager.events.removeUserLoaded(this.onUserLoaded)\n }\n\n componentDidUpdate() {\n const { user, tenant } = this.props\n\n // Make sure the token is current and the tenant is up to date.\n if (user.data && user.tenant !== tenant.name) {\n console.log('Refreshing ACL', user.tenant, tenant)\n this.props.dispatch(fetchUserACL(tenant))\n }\n }\n\n ZuulClientConfig() {\n const { user, tenant } = this.props\n\n let ZCconfig\n ZCconfig = '[' + tenant.name + ']\\n'\n ZCconfig = ZCconfig + 'url=' + apiUrl.slice(0, -4) + '\\n'\n ZCconfig = ZCconfig + 'tenant=' + tenant.name + '\\n'\n ZCconfig = ZCconfig + 'auth_token=' + user.token + '\\n'\n\n return ZCconfig\n }\n\n renderCredentialsExpiredModal() {\n const { isSessionExpiredModalOpen } = this.state\n return \n {\n this.handleSessionExpiredModalToggle()\n this.props.signOut()\n }}>\n Your session has expired.  \n { this.clickOnSignIn() }}>\n Please renew your credentials.\n \n \n \n }\n\n renderModal() {\n const { user, tenant, timezone } = this.props\n const { isModalOpen, showZuulClientConfig } = this.state\n let config = this.ZuulClientConfig(tenant, user.data)\n let valid_until = moment_tz.unix(user.data.expires_at).tz(timezone).format('YYYY-MM-DD HH:mm:ss')\n return (\n \n {\n this.props.signOut()\n }}\n title=\"Note that you will be logged out of Zuul, but not out of your identity provider.\">\n Sign Out  \n \n \n ]}\n >\n
\n

Name: {user.data.profile.name}

\n

Logged in as: {user.data.profile.preferred_username} \n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && (\n \n )}

\n \n \n \n Show Zuul Client Config\n \n \n {config}\n \n \n \n

Token expiry date: {valid_until}

\n

\n Zuul stores and uses information such as your username\n and your email to provide some features. This data is\n stored in your browser only and is\n discarded once you log out.\n

\n
\n \n
\n )\n }\n\n renderButton(containerStyles) {\n\n const { user } = this.props\n if (!user.data) {\n return (\n
\n { this.clickOnSignIn() }}>\n Sign in  \n \n \n
\n )\n } else {\n return (user.data.isFetching ?
Loading...
:\n
\n {this.renderModal()}\n \n \n  {user.data.profile.preferred_username} \n \n {this.renderCredentialsExpiredModal()}\n
\n )\n }\n }\n\n render() {\n const { info, auth } = this.props\n const textColor = '#d1d1d1'\n const containerStyles = {\n color: textColor,\n border: 'solid #2b2b2b',\n borderWidth: '0 0 0 1px',\n display: 'initial',\n padding: '6px'\n }\n\n if (info.isFetching) {\n return (<>
Fetching auth info ...
)\n }\n // auth_params.authority is only set if an OpenID Connect auth is available\n if (auth.info && auth.info.default_realm && auth.auth_params.authority) {\n return this.renderButton(containerStyles)\n } else {\n return (
-
)\n }\n }\n}\n\nexport default connect(state => ({\n auth: state.auth,\n user: state.user,\n tenant: state.tenant,\n timezone: state.timezone,\n info: state.info,\n}))(withAuth(AuthContainer))\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass ErrorBoundary extends React.Component {\n static propTypes = {\n children: PropTypes.object,\n }\n\n state = {\n hasError: false\n }\n\n componentDidCatch() {\n this.setState({\n hasError: true\n })\n }\n\n render() {\n if (this.state.hasError) {\n return

Something went wrong.

\n }\n\n return this.props.children\n }\n}\n\nexport default ErrorBoundary\n","// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport PropTypes from 'prop-types'\nimport React from 'react'\nimport Select, { components } from 'react-select'\nimport moment from 'moment-timezone'\nimport { OutlinedClockIcon, ChevronDownIcon } from '@patternfly/react-icons'\nimport { connect } from 'react-redux'\nimport { setTimezoneAction } from '../../actions/timezone'\n\nclass SelectTz extends React.Component {\n static propTypes = {\n dispatch: PropTypes.func\n }\n\n state = {\n availableTz: moment.tz.names().map(item => ({value: item, label: item})),\n defaultValue: {value: 'UTC', label: 'UTC'}\n }\n\n componentDidMount () {\n this.loadState()\n window.addEventListener('storage', this.loadState)\n }\n\n handleChange = (selectedTz) => {\n const tz = selectedTz.value\n\n localStorage.setItem('zuul_tz_string', tz)\n this.updateState(tz)\n }\n\n loadState = () => {\n let tz = localStorage.getItem('zuul_tz_string') || ''\n if (tz) {\n this.updateState(tz)\n }\n }\n\n updateState = (tz) => {\n\n this.setState({\n currentValue: {value: tz, label: tz}\n })\n\n let timezoneAction = setTimezoneAction(tz)\n this.props.dispatch(timezoneAction)\n }\n\n render() {\n const textColor = '#fff'\n const containerStyles= {\n border: 'solid #2b2b2b',\n borderWidth: '0 0 0 1px',\n cursor: 'pointer',\n display: 'initial',\n padding: '6px'\n }\n const customStyles = {\n container: () => ({\n display: 'inline-block',\n }),\n control: () => ({\n width: 'auto',\n display: 'flex'\n }),\n singleValue: () => ({\n color: textColor,\n }),\n input: (provided) => ({\n ...provided,\n color: textColor\n }),\n dropdownIndicator:(provided) => ({\n ...provided,\n color: '#fff',\n padding: '3px',\n ':hover': {\n color: '#fff'\n }\n }),\n indicatorSeparator: () => {},\n menu: (provided) => ({\n ...provided,\n width: 'auto',\n right: '0',\n top: '22px',\n })\n }\n\n const DropdownIndicator = (props) => {\n return (\n \n \n \n )\n }\n\n return (\n
\n \n 'No api found'}\n placeholder={'Select Tz'}\n defaultValue={this.state.defaultValue}\n theme={(theme) => ({\n ...theme,\n borderRadius: 0,\n spacing: {\n ...theme.spacing,\n baseUnit: 2,\n },\n })}\n />\n
\n )\n }\n}\n\nexport default connect()(SelectTz)\n","// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport PropTypes from 'prop-types'\nimport React from 'react'\nimport { connect } from 'react-redux'\nimport {\n Button,\n ButtonVariant,\n Modal,\n ModalVariant,\n Switch,\n Select,\n SelectOption,\n SelectVariant\n} from '@patternfly/react-core'\nimport { CogIcon } from '@patternfly/react-icons'\nimport { setPreference } from '../../actions/preferences'\nimport { resolveDarkMode, setDarkMode } from '../../Misc'\n\nclass ConfigModal extends React.Component {\n\n static propTypes = {\n location: PropTypes.object,\n tenant: PropTypes.object,\n preferences: PropTypes.object,\n timezone: PropTypes.string,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n constructor(props) {\n super(props)\n this.state = {\n isModalOpen: false,\n autoReload: false,\n theme: 'Auto',\n isThemeOpen: false,\n }\n this.handleModalToggle = () => {\n this.setState(({ isModalOpen }) => ({\n isModalOpen: !isModalOpen\n }))\n this.resetState()\n }\n\n this.handleEscape = () => {\n if (this.state.isThemeOpen) {\n this.setState(({ isThemeOpen }) => ({\n isThemeOpen: !isThemeOpen,\n }))\n } else {\n this.handleModalToggle()\n }\n }\n\n this.handleThemeToggle = () => {\n this.setState(({ isThemeOpen }) => ({\n isThemeOpen: !isThemeOpen,\n }))\n }\n\n this.handleThemeSelect = (event, selection) => {\n this.setState({\n theme: selection,\n isThemeOpen: false\n })\n }\n\n this.handleTheme = () => {\n let darkMode = resolveDarkMode(this.state.theme)\n setDarkMode(darkMode)\n }\n\n this.handleSave = () => {\n this.handleModalToggle()\n this.props.dispatch(setPreference('autoReload', this.state.autoReload))\n this.props.dispatch(setPreference('theme', this.state.theme))\n this.handleTheme()\n }\n\n this.handleAutoReload = () => {\n this.setState(({ autoReload }) => ({\n autoReload: !autoReload\n }))\n }\n }\n\n resetState() {\n this.setState({\n autoReload: this.props.preferences.autoReload,\n theme: this.props.preferences.theme,\n })\n }\n\n render() {\n const { isModalOpen, autoReload, theme, isThemeOpen } = this.state\n return (\n \n \n \n \n \n Confirm\n ,\n \n ]}\n >\n
\n

Application settings are saved in browser local storage only. They are applied whether authenticated or not.

\n
\n
\n \n
\n
\n

Select your preferred theme, auto will base it on your system preference.

\n
\n
\n \n \n \n \n \n
\n \n
\n )\n }\n}\n\nexport default connect(state => ({\n preferences: state.preferences,\n}))(ConfigModal)\n","// Copyright 2021 Red Hat\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n DataList,\n DataListCell,\n DataListItem,\n DataListItemRow,\n DataListItemCells,\n} from '@patternfly/react-core'\n\nclass HeldBuildList extends React.Component {\n static propTypes = {\n nodes: PropTypes.array,\n tenant: PropTypes.object,\n }\n\n constructor() {\n super()\n this.state = {\n selectedBuildId: null,\n }\n }\n\n handleSelectDataListItem = (buildId) => {\n this.setState({\n selectedBuildId: buildId,\n })\n }\n\n /* TODO find a way to add some more useful info than just the build's UUID,\n like a timestamp and a change number */\n render() {\n const { nodes, tenant } = this.props\n const { selectedBuildId } = this.state\n return (\n \n {nodes.map((node) => (\n \n \n \n \n {node.build}\n ,\n ]}\n />\n \n \n \n ))}\n \n )\n }\n}\n\nexport default connect((state) => ({ tenant: state.tenant }))(HeldBuildList)\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateIcon,\n EmptyStateVariant,\n PageSection,\n PageSectionVariants,\n Title,\n Flex,\n FlexItem,\n List,\n ListItem,\n} from '@patternfly/react-core'\nimport {\n LockIcon,\n BuildIcon,\n CubeIcon,\n CodeIcon,\n HashtagIcon,\n OutlinedClockIcon,\n OutlinedCommentDotsIcon,\n TrashIcon,\n} from '@patternfly/react-icons'\nimport { IconProperty } from '../Misc'\n\nimport { Link } from 'react-router-dom'\nimport * as moment from 'moment'\n\nimport { fetchAutohold } from '../actions/autoholds'\nimport { EmptyPage } from '../containers/Errors'\nimport { Fetching } from '../containers/Fetching'\nimport HeldBuildList from '../containers/autohold/HeldBuildList'\n\n\n// This is hard-coded in zuul/executor/server.py#3035\nconst EXPIRED_HOLD_REQUEST_TTL = 24 * 60 * 60\n\n\nclass AutoholdPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object.isRequired,\n autohold: PropTypes.object,\n isFetching: PropTypes.bool.isRequired,\n fetchAutohold: PropTypes.func.isRequired,\n preferences: PropTypes.object,\n }\n\n updateData = () => {\n if (!this.props.autohold) {\n this.props.fetchAutohold(\n this.props.tenant,\n this.props.match.params.requestId\n )\n }\n }\n\n componentDidMount() {\n document.title = 'Zuul Autohold Request'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render() {\n const { autohold, isFetching, tenant } = this.props\n\n // Initial page load\n if (autohold === undefined || isFetching) {\n return \n }\n\n // Fetching finished, but no autohold found\n if (!autohold) {\n return (\n \n )\n }\n\n // Return the build list or an empty state if no builds triggered the autohold.\n const buildsContent = autohold.nodes.length > 0 ? (\n \n ) : (\n <>\n {/* Using an hr above the empty state ensures that the space between\n heading (builds) and empty state is filled and the empty state\n doesn't look like it's lost in space. */}\n
\n \n \n \n This autohold request has not triggered yet.\n \n \n \n )\n\n const node_expiration = (autohold.node_expiration === 0) ? 'Indefinitely' : moment.duration(autohold.node_expiration, 'seconds').humanize()\n console.log(autohold.expired)\n const elapsed = autohold.expired ? (Date.now() / 1000 - autohold.expired) : false\n console.log(elapsed)\n const timeToDeletion = autohold.node_expiration + EXPIRED_HOLD_REQUEST_TTL - elapsed\n console.log(timeToDeletion)\n\n\n let deletionInfo, deletionInfoMsg\n if (autohold.node_expiration !== 0 && elapsed) {\n deletionInfoMsg = timeToDeletion > 0 ?\n (<>\n Deletion scheduled in {moment.duration(timeToDeletion, 'seconds').humanize()}\n ) :\n This request is scheduled to be deleted automatically.\n deletionInfo = }\n value={deletionInfoMsg}\n />\n } else {\n deletionInfo = <>\n }\n\n return (\n <>\n \n Autohold Request {autohold.id}\n\n \n \n \n \n }\n value={\n <>\n Project {autohold.project}\n \n }\n />\n }\n value={\n <>\n Filter {autohold.ref_filter}\n \n }\n />\n }\n value={\n <>\n Job {autohold.job}\n \n }\n />\n }\n value={\n <>\n Trigger Count {autohold.current_count} out of {autohold.max_count}\n \n }\n />\n }\n value={\n <>\n Hold Duration {node_expiration}\n \n }\n />\n \n \n \n \n \n \n }\n value={\n <>\n Reason:\n
\n
{autohold.reason}
\n
\n \n }\n />\n {deletionInfo}\n
\n
\n
\n
\n
\n \n \n <BuildIcon\n style={{\n marginRight: 'var(--pf-global--spacer--sm)',\n verticalAlign: '-0.1em',\n }}\n />{' '}\n Held Builds\n \n {buildsContent}\n \n \n )\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n autohold: state.autoholds.autohold,\n tenant: state.tenant,\n isFetching: state.autoholds.isFetching,\n preferences: state.preferences,\n }\n}\n\nconst mapDispatchToProps = { fetchAutohold }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AutoholdPage)\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n OutlinedQuestionCircleIcon,\n HashtagIcon,\n BuildIcon,\n CodeBranchIcon,\n CubeIcon,\n OutlinedClockIcon,\n LockIcon,\n TrashIcon,\n FingerprintIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\nimport * as moment from 'moment'\n\nimport { autohold_delete } from '../../api'\nimport { addNotification } from '../../actions/notifications'\nimport { addAutoholdError } from '../../actions/adminActions'\nimport { fetchAutoholds } from '../../actions/autoholds'\n\nimport { IconProperty } from '../../Misc'\n\nfunction AutoholdTable(props) {\n const { autoholds, fetching, tenant, user, dispatch } = props\n const columns = [\n {\n title: } value=\"ID\" />,\n dataLabel: 'Request ID',\n },\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n },\n {\n title: } value=\"Job\" />,\n dataLabel: 'Job',\n },\n {\n title: } value=\"Ref Filter\" />,\n dataLabel: 'Ref Filter',\n },\n {\n title: } value=\"Triggers\" />,\n dataLabel: 'Triggers',\n },\n {\n title: } value=\"Reason\" />,\n dataLabel: 'Reason',\n },\n {\n title: } value=\"Hold for\" />,\n dataLabel: 'Hold for',\n },\n {\n title: '',\n dataLabel: 'Delete',\n }\n ]\n\n function handleAutoholdDelete(requestId) {\n autohold_delete(tenant.apiPrefix, requestId)\n .then(() => {\n dispatch(addNotification(\n {\n text: 'Autohold request deleted successfully.',\n type: 'success',\n status: '',\n url: '',\n }))\n dispatch(fetchAutoholds(tenant))\n })\n .catch(error => {\n dispatch(addAutoholdError(error))\n })\n }\n\n function renderAutoholdDeleteButton(requestId) {\n return (\n {\n event.preventDefault()\n handleAutoholdDelete(requestId)\n }} />\n )\n }\n\n function createAutoholdRow(autohold) {\n const count = autohold.current_count + '/' + autohold.max_count\n const node_expiration = (autohold.node_expiration === 0) ? 'Indefinitely' : moment.duration(autohold.node_expiration, 'seconds').humanize()\n const delete_button = (user.isAdmin && user.scope.indexOf(tenant.name) !== -1) ? renderAutoholdDeleteButton(autohold.id) : ''\n\n return {\n cells: [\n {\n title: (\n {autohold.id}\n ),\n },\n {\n title: autohold.project,\n },\n {\n title: autohold.job,\n },\n {\n title: autohold.ref_filter,\n },\n {\n title: count\n },\n {\n title: autohold.reason,\n },\n {\n title: node_expiration,\n },\n {\n title: delete_button\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
\n \n
\n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n rows = autoholds.map((autohold) => createAutoholdRow(autohold))\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any autoholds but are also not\n fetching */}\n {!fetching && autoholds.length === 0 && (\n \n \n No autohold requests found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nAutoholdTable.propTypes = {\n autoholds: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object,\n user: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(AutoholdTable)\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect, useDispatch } from 'react-redux'\n\nimport {\n Button,\n Modal,\n ModalVariant,\n Form,\n FormGroup,\n TextInput\n} from '@patternfly/react-core'\n\nimport { autohold } from '../../api'\nimport { addAutoholdError } from '../../actions/adminActions'\nimport { addNotification } from '../../actions/notifications'\nimport { fetchAutoholds } from '../../actions/autoholds'\n\nconst AutoholdModal = props => {\n\n const dispatch = useDispatch()\n const { tenant, user, showAutoholdModal, setShowAutoholdModal } = props\n\n const [change, setChange] = useState('')\n const [changeRef, setChangeRef] = useState('')\n const [project, setProject] = useState('some project')\n const [job_name, setJob_name] = useState('some job')\n const [reason, setReason] = useState('-')\n const [count, setCount] = useState(1)\n const [nodeHoldExpiration, setNodeHoldExpiration] = useState(86400)\n\n // Override defaults if optional parameters were passed\n useEffect(() => {\n if (props.change) { setChange(props.change) }\n if (props.changeRef) { setChangeRef(props.changeRef) }\n if (props.project) { setProject(props.project) }\n if (props.jobName) { setJob_name(props.jobName) }\n if (props.reason) {\n setReason(props.reason)\n } else {\n setReason(\n user.data\n ? 'Requested from the web UI by ' + user.data.profile.preferred_username\n : '-'\n )\n }\n }, [props.change, props.changeRef, props.project, props.jobName, props.reason, user.data])\n\n function handleConfirm() {\n let ah_change = change === '' ? null : change\n let ah_ref = changeRef === '' ? null : changeRef\n\n autohold(tenant.apiPrefix, project, job_name, ah_change, ah_ref, reason, parseInt(count), parseInt(nodeHoldExpiration))\n .then(() => {\n /* TODO it looks like there is a delay in the registering of the autohold request\n by the backend, meaning we sometimes do not get the newly created request after\n the dispatch. A solution could be to make the autoholds page auto-refreshing\n like the status page.*/\n dispatch(fetchAutoholds(tenant))\n dispatch(addNotification(\n {\n text: 'Autohold request set successfully.',\n type: 'success',\n status: '',\n url: '',\n }))\n })\n .catch(error => {\n dispatch(addAutoholdError(error))\n })\n setShowAutoholdModal(false)\n }\n\n return (\n { setShowAutoholdModal(false) }}\n actions={[\n handleConfirm()}>Create,\n { setShowAutoholdModal(false) }}>Cancel\n ]}>\n
\n \n { setProject(value) }} />\n \n \n { setJob_name(value) }} />\n \n \n { setChange(value) }} />\n \n \n { setChangeRef(value) }} />\n \n \n { setReason(value) }} />\n \n \n { setCount(value) }} />\n \n \n { setNodeHoldExpiration(value) }} />\n \n \n \n )\n}\n\nAutoholdModal.propTypes = {\n tenant: PropTypes.object,\n user: PropTypes.object,\n change: PropTypes.string,\n changeRef: PropTypes.string,\n project: PropTypes.string,\n jobName: PropTypes.string,\n reason: PropTypes.string,\n showAutoholdModal: PropTypes.bool,\n setShowAutoholdModal: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(AutoholdModal)\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Flex, FlexItem, PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchAutoholdsIfNeeded } from '../actions/autoholds'\nimport AutoholdTable from '../containers/autohold/AutoholdTable'\n\nimport {\n AddCircleOIcon,\n} from '@patternfly/react-icons'\nimport AutoholdModal from '../containers/autohold/autoholdModal'\nimport { IconProperty } from '../Misc'\n\n\nclass AutoholdsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n user: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n constructor() {\n super()\n\n this.state = {\n showAutoholdModal: false,\n }\n }\n\n setShowAutoholdModal = (value) => {\n this.setState(() => ({ showAutoholdModal: value }))\n }\n\n renderAutoholdButton() {\n const value = ( {\n event.preventDefault()\n this.setShowAutoholdModal(true)\n }}\n >\n Create Request\n )\n return (\n }\n value={value}\n />\n\n )\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchAutoholdsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount() {\n document.title = 'Zuul Autoholds'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render() {\n const { tenant, user, remoteData } = this.props\n const autoholds = remoteData.autoholds\n const { showAutoholdModal } = this.state\n\n return (\n <>\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && (\n \n \n \n {this.renderAutoholdButton()}\n \n \n \n )}\n \n \n \n {}\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.autoholds,\n user: state.user,\n}))(AutoholdsPage)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n TreeView,\n} from 'patternfly-react'\nimport ReactJson from 'react-json-view'\nimport { connect } from 'react-redux'\n\nclass Artifact extends React.Component {\n static propTypes = {\n artifact: PropTypes.object.isRequired,\n preferences: PropTypes.object,\n }\n\n render() {\n const { artifact, preferences } = this.props\n return (\n \n \n {Object.keys(artifact.metadata).map(key => (\n \n \n \n \n ))}\n \n
{key}\n {typeof(artifact.metadata[key]) === 'object'?\n \n :artifact.metadata[key].toString()}\n
\n )\n }\n}\n\nclass ArtifactList extends React.Component {\n static propTypes = {\n artifacts: PropTypes.array.isRequired,\n preferences: PropTypes.object,\n }\n\n render() {\n const { artifacts, preferences } = this.props\n\n const nodes = artifacts.map((artifact, index) => {\n const node = {text: {artifact.name},\n icon: null}\n if (artifact.metadata) {\n node['nodes']= [{text: ,\n icon: ''}]\n }\n return node\n })\n\n return (\n <>\n
\n
\n \n
\n \n )\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n preferences: state.preferences,\n }\n}\n\nexport default connect(mapStateToProps)(ArtifactList)\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport {\n Label,\n} from '@patternfly/react-core'\nimport {\n CheckIcon,\n ExclamationIcon,\n QuestionIcon,\n TimesIcon,\n} from '@patternfly/react-icons'\nimport { ConditionalWrapper } from '../../Misc'\n\nconst RESULT_ICON_CONFIGS = {\n // In progress\n null: {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n badgeColor: 'blue',\n },\n SUCCESS: {\n icon: CheckIcon,\n color: 'var(--pf-global--success-color--100)',\n badgeColor: 'green',\n },\n FAILURE: {\n icon: TimesIcon,\n color: 'var(--pf-global--danger-color--100)',\n badgeColor: 'red',\n },\n RETRY_LIMIT: {\n icon: TimesIcon,\n color: 'var(--pf-global--danger-color--100)',\n badgeColor: 'red',\n },\n SKIPPED: {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n badgeColor: 'blue',\n },\n ABORTED: {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n badgeColor: 'yellow',\n },\n MERGE_CONFLICT: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n MERGE_FAILURE: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n NODE_FAILURE: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n TIMED_OUT: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n POST_FAILURE: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n CONFIG_ERROR: {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n },\n}\n\nconst DEFAULT_RESULT_ICON_CONFIG = {\n icon: ExclamationIcon,\n color: 'var(--pf-global--warning-color--100)',\n badgeColor: 'orange',\n}\n\nfunction BuildResult(props) {\n const { result, link = undefined, colored = true } = props\n const iconConfig = RESULT_ICON_CONFIGS[result] || DEFAULT_RESULT_ICON_CONFIG\n const color = colored ? iconConfig.color : 'inherit'\n\n return (\n \n {children}}\n >\n {result || 'In Progress'}\n \n \n )\n}\n\nBuildResult.propTypes = {\n result: PropTypes.string,\n link: PropTypes.string,\n colored: PropTypes.bool,\n}\n\nfunction BuildResultBadge(props) {\n const { result } = props\n const iconConfig = RESULT_ICON_CONFIGS[result] || DEFAULT_RESULT_ICON_CONFIG\n const color = iconConfig.badgeColor\n\n return (\n \n {result || 'In Progress'}\n \n )\n}\n\nBuildResultBadge.propTypes = {\n result: PropTypes.string,\n}\n\nfunction BuildResultWithIcon(props) {\n const { result, link = undefined, colored = true, size = 'sm' } = props\n const iconConfig = RESULT_ICON_CONFIGS[result] || DEFAULT_RESULT_ICON_CONFIG\n\n // Define the verticalAlign based on the size\n let verticalAlign = '-0.2em'\n\n if (size === 'md') {\n verticalAlign = '-0.35em'\n }\n\n const Icon = iconConfig.icon\n const color = colored ? iconConfig.color : 'inherit'\n\n return (\n \n {children}}\n >\n \n {props.children}\n \n \n )\n}\n\nBuildResultWithIcon.propTypes = {\n result: PropTypes.string,\n link: PropTypes.string,\n colored: PropTypes.bool,\n size: PropTypes.string,\n children: PropTypes.node,\n}\n\n\n\nexport { BuildResult, BuildResultBadge, BuildResultWithIcon }\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport { Flex, FlexItem, List, ListItem, Title } from '@patternfly/react-core'\n\nimport {\n BookIcon,\n BuildIcon,\n CodeBranchIcon,\n FileCodeIcon,\n FingerprintIcon,\n HistoryIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n StreamIcon,\n ThumbtackIcon,\n LockIcon,\n} from '@patternfly/react-icons'\nimport * as moment from 'moment'\nimport * as moment_tz from 'moment-timezone'\nimport _ from 'lodash'\nimport 'moment-duration-format'\n\nimport { BuildResultBadge, BuildResultWithIcon } from './Misc'\nimport { buildExternalLink, renderRefInfo, ExternalLink, IconProperty } from '../../Misc'\n\nimport AutoholdModal from '../autohold/autoholdModal'\n\nfunction getRefs(build) {\n // This method has a purpose beyond backwards compat: return the\n // zuul ref for this build first, then the remaining refs.\n if (!('refs' in build.buildset)) {\n // Backwards compat\n return [build]\n }\n return [build.ref, ...build.buildset.refs.filter((i) => !_.isEqual(i, build.ref))]\n}\n\nfunction getRef(build) {\n return 'project' in build ? build : build.ref\n}\n\nfunction Build({ build, tenant, timezone, user }) {\n const [showAutoholdModal, setShowAutoholdModal] = useState(false)\n const buildRef = getRef(build)\n // the change or ref to use for api actions like autohold\n const actionRef = buildRef.change ? '' : buildRef.ref\n const actionChange = buildRef.change ? String(buildRef.change) : ''\n //const project = build.project\n const job_name = build.job_name\n const index_links = build.manifest && build.manifest.index_links\n const build_log_url = build.log_url ?\n (index_links ? build.log_url + 'index.html' : build.log_url)\n : ''\n\n function renderAutoholdButton() {\n const value = (\n {\n event.preventDefault()\n setShowAutoholdModal(true)\n }}\n >\n Autohold future build failure(s)\n \n )\n return (\n }\n value={value}\n />\n )\n }\n\n return (\n <>\n \n \n {build.job_name} {!build.voting && ' (non-voting)'}\n \n \n {build.held &&\n }\n \n {/* We handle the spacing for the body and the flex items by ourselves\n so they go hand in hand. By default, the flex items' spacing only\n affects left/right margin, but not top or bottom (which looks\n awkward when the items are stacked at certain breakpoints) */}\n \n \n \n \n {getRefs(build).map((ref, idx) => (\n }\n value={\n \n {buildExternalLink(ref)}
\n Project {ref.project}
\n {renderRefInfo(ref)}\n
\n }\n />\n ))}\n }\n value={\n <>\n Pipeline {build.pipeline}\n \n }\n />\n }\n value={\n \n UUID {build.uuid}
\n Event ID {build.event_id}
\n
\n }\n />\n
\n
\n
\n \n \n \n }\n value={\n \n Started at \n {moment_tz\n .utc(build.start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n
\n Completed at \n {moment_tz\n .utc(build.end_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n
\n }\n />\n }\n value={\n <>\n Took \n {moment\n .duration(build.duration, 'seconds')\n .format('h [hr] m [min] s [sec]')}\n \n }\n />\n
\n
\n
\n \n \n \n }\n value={\n \n View job documentation\n \n }\n />\n }\n value={\n \n View buildset result\n \n }\n />\n )}\n }\n value={\n build_log_url ? (\n View log\n ) : (\n \n No log available\n \n )\n }\n />\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && renderAutoholdButton()}\n \n \n \n
\n {}\n \n )\n}\n\nBuild.propTypes = {\n build: PropTypes.object,\n tenant: PropTypes.object,\n hash: PropTypes.array,\n timezone: PropTypes.string,\n user: PropTypes.object,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n user: state.user,\n}))(Build)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport { Fragment } from 'react'\nimport ReAnsi from '@softwarefactory-project/re-ansi'\nimport PropTypes from 'prop-types'\nimport {\n Card,\n CardBody,\n CardHeader,\n Chip,\n DataList,\n DataListItem,\n DataListItemRow,\n DataListItemCells,\n DataListCell,\n Divider,\n Label,\n Flex,\n FlexItem,\n} from '@patternfly/react-core'\n\nimport {\n CheckCircleIcon,\n ContainerNodeIcon,\n TimesIcon,\n TimesCircleIcon,\n} from '@patternfly/react-icons'\n\nconst ANSI_REGEX = new RegExp('\\x33[[0-9;]+m')\n\n\nclass BuildOutputLabel extends React.Component {\n static propTypes = {\n ok: PropTypes.number,\n changed: PropTypes.number,\n failures: PropTypes.number,\n }\n\n render() {\n let color = this.props.failures ? 'red' : 'green'\n let icon = this.props.failures ? : \n let failures = this.props.failures ? (\n <>\n \n {this.props.failures} Failure{this.props.failures > 1 ? 's' : ''}\n \n ) : null\n\n return (\n \n )\n }\n}\n\n\nclass BuildOutput extends React.Component {\n static propTypes = {\n output: PropTypes.object,\n preferences: PropTypes.object,\n }\n\n renderHosts (hosts) {\n return (\n <>\n
\n
\n \n {Object.entries(hosts).map(([host, values]) => (\n \n \n \n \n \n  {host}\n \n \n ,\n \n \n \n ]}\n />\n \n \n ))}\n \n
\n \n )\n }\n\n getLines(lines) {\n const max_lines = 42\n if (lines && lines.length > 0) {\n return [\n lines.slice(0, -max_lines).join('\\n'),\n lines.slice(-max_lines).join('\\n')\n ]\n }\n return ['', '']\n }\n\n renderFailedTask (host, task) {\n let zuulOutputClass = 'zuul-build-output'\n if (this.props.preferences.darkMode) {\n zuulOutputClass = 'zuul-build-output-dark'\n }\n const [stdout_early_lines, stdout_late_lines] = this.getLines(task.stdout_lines)\n const [stderr_early_lines, stderr_late_lines] = this.getLines(task.stderr_lines)\n // If there is an ANSI color escape string, set a white-on-black\n // color scheme so the output looks more like what we would expect in a console.\n let term_style = {}\n if (ANSI_REGEX.test(stdout_early_lines) ||\n ANSI_REGEX.test(stdout_late_lines) ||\n ANSI_REGEX.test(stderr_early_lines) ||\n ANSI_REGEX.test(stderr_late_lines)) {\n term_style = {backgroundColor: 'black', color: 'white'}\n }\n return (\n \n \n \n  Task {task.name} \n failed running on host {host}\n \n \n {task.invocation && task.invocation.module_args &&\n task.invocation.module_args._raw_params && (\n
\n              {task.invocation.module_args._raw_params}\n            
\n )}\n {task.msg && (\n
{task.msg}
\n )}\n {task.exception && (\n
{task.exception}
\n )}\n {stdout_late_lines.length > 0 && (\n \n {stdout_early_lines.length > 0 && (\n
\n
\n                    \n                  
\n
)}\n
\n                \n              
\n
\n )}\n {stderr_late_lines.length > 0 && (\n \n {stderr_early_lines.length > 0 && (\n
\n
\n                    \n                  
\n
\n )}\n
\n                \n              
\n
\n )}\n
\n
\n )\n }\n\n render () {\n const { output } = this.props\n return (\n \n {this.renderHosts(output)}\n
\n {Object.entries(output)\n .filter(([, values]) => values.failed.length > 0)\n .map(([host, values]) => (values.failed.map(failed => (\n this.renderFailedTask(host, failed)))))}\n
\n )\n }\n}\n\n\nfunction mapStateToProps(state) {\n return {\n preferences: state.preferences,\n }\n}\n\nexport default connect(mapStateToProps)(BuildOutput)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as moment from 'moment'\nimport 'moment-duration-format'\nimport * as React from 'react'\nimport ReAnsi from '@softwarefactory-project/re-ansi'\nimport PropTypes from 'prop-types'\nimport ReactJson from 'react-json-view'\nimport { connect } from 'react-redux'\n\nimport {\n Button,\n Chip,\n DataList,\n DataListItem,\n DataListItemRow,\n DataListCell,\n DataListItemCells,\n DataListToggle,\n DataListContent,\n Divider,\n Flex,\n FlexItem,\n Label,\n Modal,\n Tooltip\n} from '@patternfly/react-core'\n\nimport {\n AngleRightIcon,\n ContainerNodeIcon,\n InfoCircleIcon,\n SearchPlusIcon,\n LinkIcon,\n} from '@patternfly/react-icons'\n\nimport {\n hasInterestingKeys,\n findLoopLabel,\n shouldIncludeKey,\n makeTaskPath,\n taskPathMatches,\n} from '../../actions/build'\n\nconst INTERESTING_KEYS = ['msg', 'cmd', 'stdout', 'stderr']\nconst ANSI_REGEX = new RegExp('\\x33[[0-9;]+m')\n\n\nclass TaskOutput extends React.Component {\n static propTypes = {\n data: PropTypes.object,\n include: PropTypes.array,\n preferences: PropTypes.object,\n }\n\n renderResults(value) {\n const interesting_results = []\n\n // This was written to assume \"value\" is an array of key/value\n // mappings to output. This seems to be a good assumption for the\n // most part, but \"package:\" on at least some distros --\n // RedHat/yum/dnf we've found -- outputs a result that is just an\n // array of strings with what packages were installed. So, if we\n // see an array of strings as the value, we just swizzle that into\n // a key/value so it displays usefully.\n const isAllStrings = value.every(i => typeof i === 'string')\n if (isAllStrings) {\n value = [ {output: [...value]} ]\n }\n\n value.forEach((result, idx) => {\n const keys = Object.entries(result).filter(\n ([key, value]) => shouldIncludeKey(\n key, value, true, this.props.include))\n if (keys.length) {\n interesting_results.push(idx)\n }\n })\n\n return (\n
\n {interesting_results.length>0 &&\n \n
results
\n {interesting_results.map((idx) => (\n
\n

{idx}: {findLoopLabel(value[idx])}

\n {Object.entries(value[idx]).map(([key, value]) => (\n this.renderData(key, value, true)\n ))}\n
\n ))}\n
\n }\n
\n )\n }\n\n renderData(key, value, ignore_underscore) {\n let ret\n if (!shouldIncludeKey(key, value, ignore_underscore, this.props.include)) {\n return ()\n }\n if (value === null) {\n ret = (\n
\n          null\n        
\n )\n } else if (typeof(value) === 'string') {\n // If there is an ANSI color escape string, set a white-on-black\n // color scheme so the output looks more like what we would expect in a console.\n const style = ANSI_REGEX.test(value) ? {backgroundColor: 'black', color: 'white'} : {}\n ret = (\n
\n          \n        
\n )\n } else if (typeof(value) === 'object') {\n ret = (\n
\n          \n        
\n )\n } else {\n ret = (\n
\n          {value.toString()}\n        
\n )\n }\n\n return (\n
\n {ret &&
{key}
}\n {ret && ret}\n
\n )\n }\n\n render () {\n const { data } = this.props\n\n return (\n \n {Object.entries(data).map(([key, value]) => (\n key==='results'?this.renderResults(value):this.renderData(key, value)\n ))}\n \n )\n }\n}\n\nclass HostTask extends React.Component {\n static propTypes = {\n hostname: PropTypes.string,\n task: PropTypes.object,\n host: PropTypes.object,\n errorIds: PropTypes.object,\n taskPath: PropTypes.array,\n displayPath: PropTypes.array,\n preferences: PropTypes.object,\n }\n\n state = {\n showModal: false,\n failed: false,\n changed: false,\n skipped: false,\n ok: false\n }\n\n open = () => {\n this.setState({showModal: true})\n }\n\n close = () => {\n this.setState({showModal: false})\n }\n\n constructor (props) {\n super(props)\n\n const { host, taskPath, displayPath } = this.props\n\n if (host.failed) {\n this.state.failed = true\n } else if (host.changed) {\n this.state.changed = true\n } else if (host.skipped) {\n this.state.skipped = true\n } else {\n this.state.ok = true\n }\n\n if (taskPathMatches(taskPath, displayPath))\n this.state.showModal = true\n\n // If it has errors, expand by default\n this.state.expanded = this.props.errorIds.has(this.props.task.task.id)\n }\n\n render () {\n const { hostname, task, host, taskPath } = this.props\n const dataListCells = []\n\n // \"interesting\" result tasks are those that have some values in\n // their results that show command output, etc. These plays get\n // an expansion that shows these values without having to click\n // and bring up the full insepction modal.\n const interestingKeys = hasInterestingKeys(host, INTERESTING_KEYS)\n\n let name = task.task.name\n if (!name) {\n name = host.action\n }\n if (task.role) {\n name = task.role.name + ': ' + name\n }\n\n dataListCells.push(\n {name}\n )\n\n let labelColor = null\n let labelString = null\n\n if (this.state.failed) {\n labelColor = 'red'\n labelString = 'Failed'\n } else if (this.state.changed) {\n labelColor = 'orange'\n labelString = 'Changed'\n } else if (this.state.skipped) {\n labelColor = 'grey'\n labelString = 'Skipped'\n } else if (this.state.ok) {\n labelColor = 'green'\n labelString = 'OK'\n }\n\n dataListCells.push(\n \n Click for details}>\n \n \n )\n\n dataListCells.push(\n \n \n \n  {hostname}\n \n \n )\n\n let duration = moment.duration(\n moment(task.task.duration.end).diff(task.task.duration.start)\n ).format({\n template: 'h [hr] m [min] s [sec]',\n largest: 2,\n minValue: 1,\n })\n\n dataListCells.push(\n \n {duration}\n \n )\n\n const content = \n\n let item = null\n if (interestingKeys) {\n item = \n \n {this.setState({expanded: !this.state.expanded})}}\n isExpanded={this.state.expanded}\n />\n \n \n \n { content }\n \n \n } else {\n // We currently have to build the data-list item/row/control manually\n // as we don't have a way to hide the toggle. Hopefully PF will\n // add a prop that does this so we can get rid of this, see:\n // https://github.com/patternfly/patternfly/issues/5055\n item =
  • \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
  • \n }\n\n const modalDescription = \n \n \n \n \n \n \n  {hostname}\n \n \n \n \n \n \n \n \n\n return (\n <>\n {item}\n \n \n \n \n )\n }\n}\n\nclass PlayBook extends React.Component {\n static propTypes = {\n playbook: PropTypes.object,\n errorIds: PropTypes.object,\n taskPath: PropTypes.array,\n displayPath: PropTypes.array,\n preferences: PropTypes.object,\n }\n\n constructor(props) {\n super(props)\n this.state = {\n // Start the playbook expanded if\n // * has errror in it\n // * direct link\n // * it is a run playbook\n expanded: (this.props.errorIds.has(this.props.playbook.phase + this.props.playbook.index) ||\n taskPathMatches(this.props.taskPath, this.props.displayPath) ||\n this.props.playbook.phase === 'run'),\n // NOTE(ianw) 2022-08-26 : Plays start expanded because that is\n // what it has always done; most playbooks probably only have\n // one play. Maybe if there's multiple plays things could start\n // rolled up?\n playsExpanded: this.props.playbook.plays.map((play, idx) => this.makePlayId(play, idx))\n }\n }\n\n makePlayId = (play, idx) => play.play.name + '-' + idx\n\n render () {\n const { playbook, errorIds, taskPath, displayPath } = this.props\n\n const togglePlays = id => {\n const index = this.state.playsExpanded.indexOf(id)\n const newExpanded =\n index >= 0 ? [...this.state.playsExpanded.slice(0, index), ...this.state.playsExpanded.slice(index + 1, this.state.playsExpanded.length)] : [...this.state.playsExpanded, id]\n this.setState({playsExpanded: newExpanded})\n }\n\n // This is the header for each playbook\n let dataListCells = []\n dataListCells.push(\n \n \n {playbook.phase[0].toUpperCase() + playbook.phase.slice(1)} playbook\n \n )\n dataListCells.push(\n \n {playbook.playbook}\n )\n if (playbook.trusted) {\n dataListCells.push(\n \n This playbook runs in a trusted execution context, which permits executing code on the Zuul executor and allows access to all Ansible features.}>\n )\n } else {\n // NOTE(ianw) : This empty cell keeps things lined up\n // correctly. We tried a \"untrusted\" label but preferred\n // without.\n dataListCells.push()\n }\n\n return (\n \n\n \n this.setState({expanded: !this.state.expanded})}\n isExpanded={this.state.expanded}/>\n \n \n\n \n\n {playbook.plays.map((play, idx) => (\n \n \n \n togglePlays(this.makePlayId(play, idx))}\n isExpanded={this.state.playsExpanded.includes(this.makePlayId(play, idx))}\n id={this.makePlayId(play, idx)}/>\n Play: {play.play.name}\n ]}\n />\n \n \n\n \n {play.tasks.map((task, idx2) => (\n Object.entries(task.hosts).map(([hostname, host]) => (\n \n ))))}\n \n\n \n \n \n ))}\n\n \n \n )\n }\n}\n\n\nclass Console extends React.Component {\n static propTypes = {\n errorIds: PropTypes.object,\n output: PropTypes.array,\n displayPath: PropTypes.array,\n preferences: PropTypes.object,\n }\n\n render () {\n const { errorIds, output, displayPath } = this.props\n\n return (\n \n
    \n \n \n {\n output.map((playbook, idx) => (\n ))\n }\n \n \n
    \n )\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n preferences: state.preferences,\n }\n}\n\n\nexport default connect(mapStateToProps)(Console)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n TreeView,\n} from 'patternfly-react'\nimport { Link } from 'react-router-dom'\n\nimport { renderTree } from '../../actions/build'\n\n\nclass Manifest extends React.Component {\n static propTypes = {\n tenant: PropTypes.object.isRequired,\n build: PropTypes.object.isRequired\n }\n\n render() {\n const { tenant, build } = this.props\n\n const raw_suffix = (obj) => {\n return (obj.mimetype === 'application/directory' &&\n build.manifest.index_links) ? 'index.html' : ''\n }\n\n const nodes = build.manifest.tree.map(\n n => renderTree(\n tenant, build, '/', n,\n (tenant, build, path, name, log_url, obj) => (\n \n \n {obj.name}\n \n   (raw\n  )\n ),\n (log_url, path, name, obj) => (\n \n {obj.name}\n   (raw\n  )\n \n )))\n\n return (\n \n
    \n
    \n \n
    \n
    \n )\n }\n}\n\nexport default Manifest\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n Divider,\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n Title,\n ToggleGroup,\n ToggleGroupItem,\n} from '@patternfly/react-core'\nimport { FileCodeIcon } from '@patternfly/react-icons'\n\nimport { Fetching } from '../Fetching'\n\n// Helper function to sort list of numbers in ascending order\nconst sortNumeric = (a, b) => a - b\n\n// When scrolling down to a highlighted section, we don't want to want to keep a little bit of\n// context.\nconst SCROLL_OFFSET = -50\n\nexport default function LogFile({\n logfileName,\n logfileContent,\n isFetching,\n handleBreadcrumbItemClick,\n location,\n history,\n ...props\n}) {\n const [severity, setSeverity] = useState(props.severity)\n const [highlightStart, setHighlightStart] = useState(0)\n const [highlightEnd, setHighlightEnd] = useState(0)\n // We only want to scroll down to the highlighted section if the highlight\n // fields we're populated from the URL parameters. Here we assume that we\n // always want to scroll when the page is loaded and therefore disable the\n // initialScroll parameter in the onClick handler that is called when a line\n // or section is marked.\n const [scrollOnPageLoad, setScrollOnPageLoad] = useState(true)\n\n useEffect(() => {\n // Only highlight the lines if the log is present (otherwise it doesn't make\n // sense). Although, scrolling to the selected section only works once the\n // necessary log lines are part of the DOM tree.\n // Additionally note that if we set highlightStart before the page content\n // is available then the window scrolling won't match any lines and we won't\n // scroll. Then when we try to set highlightStart after page content is loaded\n // the value isn't different than what is set previously preventing the\n // scroll event from firing.\n if (!isFetching) {\n // Get the line numbers to highlight from the URL and directly cast them to\n // a number. The substring(1) removes the '#' character.\n const lines = location.hash\n .substring(1)\n .split('-')\n .map(Number)\n .sort(sortNumeric)\n if (lines.length > 1) {\n setHighlightStart(lines[0])\n setHighlightEnd(lines[1])\n } else if (lines.length === 1) {\n setHighlightStart(lines[0])\n setHighlightEnd(lines[0])\n }\n }\n }, [location.hash, isFetching])\n\n useEffect(() => {\n const scrollToHighlightedLine = () => {\n const elements = document.getElementsByClassName('ln-' + highlightStart)\n if (elements.length > 0) {\n // When scrolling down to the highlighted section keep some vertical\n // offset so we can see some contextual log lines.\n const y =\n elements[0].getBoundingClientRect().top +\n window.pageYOffset +\n SCROLL_OFFSET\n window.scrollTo({ top: y, behavior: 'smooth' })\n }\n }\n\n if (scrollOnPageLoad) {\n scrollToHighlightedLine()\n }\n }, [scrollOnPageLoad, highlightStart])\n\n function handleItemClick(isSelected, event) {\n const id = parseInt(event.currentTarget.id)\n setSeverity(id)\n writeSeverityToUrl(id)\n // TODO (felix): Should we add a state for the toggling \"progress\", so we\n // can show a spinner (like fetching) when the new log level lines are\n // \"calculated\". As this might take some time, the UI is often unresponsive\n // when clicking on a log level button.\n }\n\n function writeSeverityToUrl(severity) {\n const urlParams = new URLSearchParams('')\n urlParams.append('severity', severity)\n history.push({\n pathname: location.pathname,\n search: urlParams.toString(),\n })\n }\n\n function updateSelection(event) {\n const lines = window.location.hash.substring(1).split('-').map(Number)\n const lineClicked = Number(event.currentTarget.innerText)\n if (!event.shiftKey || lines.length === 0) {\n // First line clicked\n lines[0] = [lineClicked]\n lines.splice(1, 1)\n } else {\n // Second line shift-clicked\n const distances = lines.map((pos) => Math.abs(lineClicked - pos))\n // Adjust the range based on the edge distance\n if (distances[0] < distances[1]) {\n lines[0] = lineClicked\n } else {\n lines[1] = lineClicked\n }\n }\n window.location.hash = '#' + lines.sort(sortNumeric).join('-')\n // We don't want to scroll to that section if we just highlighted the lines\n setScrollOnPageLoad(false)\n }\n\n function renderLogfile(logfileContent, severity) {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n
    \n          \n            \n              {logfileContent.map((line) => {\n                // Highlight the line if it's part of the selected range\n                const highlightLine =\n                  line.index >= highlightStart && line.index <= highlightEnd\n                return (\n                  line.severity >= severity && (\n                    \n                      \n                      \n                    \n                  )\n                )\n              })}\n            \n          
    \n {line.index}\n \n \n {line.text + '\\n'}\n \n
    \n
    \n \n )\n }\n\n // Split the logfile's name to show some breadcrumbs\n const logfilePath = logfileName.split('/')\n\n const content =\n !logfileContent && isFetching ? (\n \n ) : logfileContent ? (\n renderLogfile(logfileContent, severity)\n ) : (\n \n \n \n This logfile could not be found\n \n \n )\n\n return (\n <>\n
    \n \n as link which would post-back to the server.\n to=\"#\"\n onClick={() => handleBreadcrumbItemClick()}\n >\n Logs\n \n {logfilePath.map((part, index) => (\n \n {part}\n \n ))}\n \n
    \n {content}\n \n )\n}\n\nLogFile.propTypes = {\n logfileName: PropTypes.string.isRequired,\n logfileContent: PropTypes.array,\n severity: PropTypes.number,\n isFetching: PropTypes.bool.isRequired,\n handleBreadcrumbItemClick: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n}\n\nLogFile.defaultProps = {\n severity: 0,\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport { parse } from 'query-string'\nimport {\n Button,\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n PageSection,\n PageSectionVariants,\n Tab,\n Tabs,\n TabTitleIcon,\n TabTitleText,\n Title,\n} from '@patternfly/react-core'\nimport {\n ArrowUpIcon,\n BuildIcon,\n FileArchiveIcon,\n FileCodeIcon,\n TerminalIcon,\n PollIcon,\n ExclamationIcon,\n} from '@patternfly/react-icons'\n\nimport { fetchBuildAllInfo } from '../actions/build'\nimport { fetchLogfile } from '../actions/logfile'\nimport { EmptyPage } from '../containers/Errors'\nimport { Fetching } from '../containers/Fetching'\nimport ArtifactList from '../containers/build/Artifact'\nimport Build from '../containers/build/Build'\nimport BuildOutput from '../containers/build/BuildOutput'\nimport Console from '../containers/build/Console'\nimport Manifest from '../containers/build/Manifest'\nimport LogFile from '../containers/logfile/LogFile'\n\nclass BuildPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n build: PropTypes.object,\n logfile: PropTypes.object,\n isFetching: PropTypes.bool.isRequired,\n isFetchingManifest: PropTypes.bool.isRequired,\n isFetchingOutput: PropTypes.bool.isRequired,\n isFetchingLogfile: PropTypes.bool.isRequired,\n tenant: PropTypes.object.isRequired,\n fetchBuildAllInfo: PropTypes.func.isRequired,\n activeTab: PropTypes.string.isRequired,\n location: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n preferences: PropTypes.object,\n }\n\n state = {\n topOfPageVisible: true,\n }\n\n updateData = () => {\n // The related fetchBuild...() methods won't do anything if the data is\n // already available in the local state, so just call them.\n this.props.fetchBuildAllInfo(\n this.props.tenant,\n this.props.match.params.buildId,\n this.props.match.params.file\n )\n }\n\n onScroll = () => {\n this.setState({topOfPageVisible: window.scrollY === 0})\n }\n\n componentDidMount() {\n document.title = 'Zuul Build'\n if (this.props.tenant.name) {\n this.updateData()\n }\n window.addEventListener('scroll', this.onScroll)\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n handleTabClick = (tabIndex, build) => {\n // Usually tabs should only be used to display content in-page and not link\n // to other pages:\n // \"Tabs are used to present a set on tabs for organizing content on a\n // .page. It must always be used together with a tab content component.\"\n // https://www.patternfly.org/v4/documentation/react/components/tabs\n // But as want to be able to reach every tab's content via a dedicated URL\n // while having the look and feel of tabs, we could hijack this onClick\n // handler to do the link/routing stuff.\n const { history, tenant } = this.props\n\n switch (tabIndex) {\n case 'artifacts':\n history.push(`${tenant.linkPrefix}/build/${build.uuid}/artifacts`)\n break\n case 'logs':\n history.push(`${tenant.linkPrefix}/build/${build.uuid}/logs`)\n break\n case 'console':\n history.push(`${tenant.linkPrefix}/build/${build.uuid}/console`)\n break\n default:\n // task summary\n history.push(`${tenant.linkPrefix}/build/${build.uuid}`)\n }\n }\n\n handleBreadcrumbItemClick = () => {\n // Simply link back to the logs tab without an active logfile\n this.handleTabClick('logs', this.props.build)\n }\n\n render() {\n const {\n build,\n logfile,\n isFetching,\n isFetchingManifest,\n isFetchingOutput,\n isFetchingLogfile,\n activeTab,\n history,\n location,\n tenant,\n } = this.props\n const hash = location.hash.substring(1).split('/')\n const severity = parseInt(parse(location.search).severity)\n\n // Get the logfile from react-routers URL parameters\n const logfileName = this.props.match.params.file\n\n // In case the build is not available yet (before the fetching started) or\n // is currently fetching.\n if (build === undefined || isFetching) {\n return \n }\n\n // The build is null, meaning it couldn't be found.\n if (!build) {\n return (\n \n )\n }\n\n const resultsTabContent =\n build.hosts === undefined || isFetchingOutput ? (\n \n ) : build.hosts ? (\n \n ) : build.error_detail ? (\n <>\n \n \n \n

    Error: {build.error_detail}

    \n \n ) : (\n \n \n \n This build does not provide any results\n \n \n )\n\n const artifactsTabContent = build.artifacts.length ? (\n \n ) : (\n \n \n \n This build does not provide any artifacts\n \n \n )\n\n let logsTabContent = null\n if (build.manifest === undefined || isFetchingManifest) {\n logsTabContent = \n } else if (logfileName) {\n logsTabContent = (\n \n )\n // Do not render the Manifest component if we don't have a log_url (this\n // can happen for CANCELLED builds) since the log file paths are\n // constructed from the build.log_url. Instead show the EmptyState.\n } else if (build.manifest && build.log_url) {\n logsTabContent = \n } else {\n logsTabContent = (\n \n \n \n This build does not provide any logs\n \n \n )\n }\n\n const consoleTabContent =\n build.output === undefined || isFetchingOutput ? (\n \n ) : build.output ? (\n 0 ? hash : undefined}\n />\n ) : (\n \n \n \n This build does not provide any console information\n \n \n )\n\n return (\n <>\n \n \n \n \n this.handleTabClick(tabIndex, build)}\n >\n \n \n \n \n Task Summary\n \n }\n >\n {resultsTabContent}\n \n \n \n \n \n Artifacts\n \n }\n >\n {artifactsTabContent}\n \n \n \n \n \n Logs\n \n }\n >\n {logsTabContent}\n \n \n \n \n \n Console\n \n }\n >\n {consoleTabContent}\n \n \n \n {!this.state.topOfPageVisible && (\n \n \n \n )}\n \n )\n }\n}\n\nfunction scrollToTop() {\n window.scrollTo(0,0)\n document.activeElement.blur()\n}\n\nfunction mapStateToProps(state, ownProps) {\n const buildId = ownProps.match.params.buildId\n // JavaScript will return undefined in case the key is missing in the\n // dict/object.\n const buildFromState = state.build.builds[buildId]\n // Only copy the build if it's a valid object. In case it is null or undefined\n // directly assign the value. The cloning is necessary as we mutate the build\n // in the next step when adding the manifest, output, ... information.\n const build = buildFromState ? { ...buildFromState } : buildFromState\n\n // If the build is available, extend it with more information. All those\n // values will be undefined if they are not part of the dict/object.\n if (build) {\n build.manifest = state.build.manifests[buildId]\n build.output = state.build.outputs[buildId]\n build.hosts = state.build.hosts[buildId]\n build.errorIds = state.build.errorIds[buildId]\n }\n const logfileName = ownProps.match.params.file\n const logfile =\n buildId in state.logfile.files\n ? state.logfile.files[buildId][logfileName]\n : undefined\n\n return {\n build,\n logfile,\n tenant: state.tenant,\n isFetching: state.build.isFetching,\n isFetchingManifest: state.build.isFetchingManifest,\n isFetchingOutput: state.build.isFetchingOutput,\n isFetchingLogfile: state.logfile.isFetching,\n preferences: state.preferences,\n }\n}\n\nconst mapDispatchToProps = { fetchBuildAllInfo, fetchLogfile }\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(withRouter(BuildPage))\n","// Copyright 2020 BMW Group\n// Copyright 2022-2023 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport { makeQueryString } from './FilterToolbar'\n\nfunction makeBuildQueryString(filters) {\n let queryString = makeQueryString(filters)\n const resultFilter = filters && filters['result'].length > 0\n if (!resultFilter) {\n queryString += '&exclude_result=SKIPPED'\n }\n queryString += '&complete=true'\n return queryString\n}\n\nfunction makeBuildsetQueryString(filters) {\n let queryString = makeQueryString(filters)\n const resultFilter = filters && filters['result'].length > 0\n if (!resultFilter) {\n queryString += '&exclude_result=NO_JOBS&exclude_result=DEQUEUED'\n }\n queryString += '&complete=true'\n return queryString\n}\n\nexport { makeBuildQueryString, makeBuildsetQueryString }\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Button,\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n EmptyStateSecondaryActions,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n BuildIcon,\n CodeBranchIcon,\n CodeIcon,\n CubeIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n PollIcon,\n StreamIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n truncate,\n breakWord,\n cellWidth,\n} from '@patternfly/react-table'\nimport 'moment-duration-format'\nimport * as moment from 'moment'\nimport * as moment_tz from 'moment-timezone'\n\nimport { BuildResult, BuildResultWithIcon } from './Misc'\nimport { buildExternalTableLink, IconProperty } from '../../Misc'\n\nfunction getRef(build) {\n return 'project' in build ? build : build.ref\n}\n\nfunction BuildTable({\n builds,\n fetching,\n onClearFilters,\n tenant,\n timezone,\n history,\n}) {\n const columns = [\n {\n title: } value=\"Job\" />,\n dataLabel: 'Job',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Branch\" />,\n dataLabel: 'Branch',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Pipeline\" />,\n dataLabel: 'Pipeline',\n },\n {\n title: } value=\"Change\" />,\n dataLabel: 'Change',\n transforms: [cellWidth(10)],\n cellTransforms: [truncate],\n },\n {\n title: } value=\"Duration\" />,\n dataLabel: 'Duration',\n },\n {\n title: (\n } value=\"Start time\" />\n ),\n dataLabel: 'Start time',\n },\n {\n title: } value=\"Result\" />,\n dataLabel: 'Result',\n },\n ]\n\n function createBuildRow(build) {\n const ref = getRef(build)\n const changeOrRefLink = buildExternalTableLink(ref)\n\n return {\n // Pass the build's uuid as row id, so we can use it later on in the\n // action handler to build the link to the build result page for each row.\n id: build.uuid,\n cells: [\n {\n // To allow passing anything else than simple string values to a table\n // cell, we must use the title attribute.\n title: (\n <>\n \n {build.job_name}\n {!build.voting && ' (non-voting)'}\n \n \n ),\n },\n {\n title: ref.project,\n },\n {\n title: ref.branch ? ref.branch : ref.ref,\n },\n {\n title: build.pipeline,\n },\n {\n title: changeOrRefLink && changeOrRefLink,\n },\n {\n title: moment\n .duration(build.duration, 'seconds')\n .format('h [hr] m [min] s [sec]'),\n },\n {\n title: moment_tz\n .utc(build.start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss'),\n },\n {\n title: (\n \n ),\n },\n ],\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n // For the fetching row we don't need any actions, so we keep them empty by\n // default.\n let actions = []\n if (fetching) {\n rows = createFetchingRow()\n // The dataLabel property is used to show the column header in a list-like\n // format for smaller viewports. When we are fetching, we don't want the\n // fetching row to be prepended by a \"Job\" column header. The other column\n // headers are not relevant here since we only have a single cell in the\n // fetcihng row.\n columns[0].dataLabel = ''\n } else {\n rows = builds.map((build) => createBuildRow(build))\n // This list of actions will be applied to each row in the table. For\n // row-specific actions we must evaluate the individual row data provided to\n // the onClick handler.\n actions = [\n {\n title: 'Show build result',\n onClick: (event, rowId, rowData) =>\n // The row's id contains the build's uuid, so we can use this to build\n // the correct link.\n history.push(`${tenant.linkPrefix}/build/${rowData.id}`),\n },\n ]\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any builds but are also not\n fetching */}\n {!fetching && builds.length === 0 && (\n \n \n No builds found\n \n No builds match this filter criteria. Remove some filters or clear\n all to show results.\n \n \n \n \n \n )}\n \n )\n}\n\nBuildTable.propTypes = {\n builds: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n onClearFilters: PropTypes.func.isRequired,\n tenant: PropTypes.object.isRequired,\n timezone: PropTypes.string.isRequired,\n history: PropTypes.object.isRequired,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n}))(BuildTable)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { isEqual } from 'lodash'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport 'moment-duration-format'\nimport { PageSection, PageSectionVariants, Pagination } from '@patternfly/react-core'\n\nimport { fetchBuilds } from '../api'\nimport {\n FilterToolbar,\n getFiltersFromUrl,\n writeFiltersToUrl,\n} from '../containers/FilterToolbar'\nimport { makeBuildQueryString } from '../containers/BuildQuery'\nimport BuildTable from '../containers/build/BuildTable'\n\nclass BuildsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n timezone: PropTypes.string,\n location: PropTypes.object,\n history: PropTypes.object,\n }\n\n constructor(props) {\n super()\n this.filterCategories = [\n {\n key: 'job_name',\n title: 'Job',\n placeholder: 'Filter by Job...',\n type: 'fuzzy-search',\n },\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by Project...',\n type: 'fuzzy-search',\n },\n {\n key: 'branch',\n title: 'Branch',\n placeholder: 'Filter by Branch...',\n type: 'fuzzy-search',\n },\n {\n key: 'pipeline',\n title: 'Pipeline',\n placeholder: 'Filter by Pipeline...',\n type: 'fuzzy-search',\n },\n {\n key: 'change',\n title: 'Change',\n placeholder: 'Filter by Change...',\n type: 'search',\n },\n {\n key: 'result',\n title: 'Result',\n placeholder: 'Any result',\n type: 'select',\n // TODO there should be a single source of truth for this\n options: [\n 'SUCCESS',\n 'FAILURE',\n 'RETRY_LIMIT',\n 'POST_FAILURE',\n 'SKIPPED',\n 'NODE_FAILURE',\n 'MERGE_CONFLICT',\n 'MERGE_FAILURE',\n 'CONFIG_ERROR',\n 'TIMED_OUT',\n 'CANCELED',\n 'ERROR',\n 'RETRY',\n 'DISK_FULL',\n 'NO_JOBS',\n 'DISCONNECT',\n 'ABORTED',\n 'LOST',\n 'EXCEPTION',\n 'NO_HANDLE'],\n },\n {\n key: 'uuid',\n title: 'Build',\n placeholder: 'Filter by Build UUID...',\n type: 'search',\n },\n {\n key: 'held',\n title: 'Held',\n placeholder: 'Choose Hold Status...',\n type: 'ternary',\n options: [\n 'All',\n 'Held Builds Only',\n 'Non Held Builds Only',\n ]\n },\n {\n key: 'voting',\n title: 'Voting',\n placeholder: 'Choose Voting Status...',\n type: 'ternary',\n options: [\n 'All',\n 'Voting Only',\n 'Non-Voting Only',\n ]\n },\n ]\n\n const _filters = getFiltersFromUrl(props.location, this.filterCategories)\n const perPage = _filters.limit[0]\n ? parseInt(_filters.limit[0])\n : 50\n const currentPage = _filters.skip[0]\n ? Math.floor(parseInt(_filters.skip[0] / perPage)) + 1\n : 1\n\n this.state = {\n builds: [],\n fetching: false,\n filters: _filters,\n resultsPerPage: perPage,\n currentPage: currentPage,\n itemCount: null,\n }\n }\n\n updateData = (filters) => {\n // When building the filter query for the API we can't rely on the location\n // search parameters. Although, we've updated them in theu URL directly\n // they always have the same value in here (the values when the page was\n // first loaded). Most probably that's the case because the location is\n // passed as prop and doesn't change since the page itself wasn't\n // re-rendered.\n const { itemCount } = this.state\n let paginationOptions = {\n skip: filters.skip.length > 0 ? filters.skip : [0,],\n limit: filters.limit.length > 0 ? filters.limit : [50,]\n }\n let _filters = { ...filters, ...paginationOptions }\n const queryString = makeBuildQueryString(_filters)\n this.setState({ fetching: true })\n // TODO (felix): What happens in case of a broken network connection? Is the\n // fetching shows infinitely or can we catch this and show an erro state in\n // the table instead?\n fetchBuilds(this.props.tenant.apiPrefix, queryString).then((response) => {\n // if we have already an itemCount for this query (ie we're scrolling backwards through results)\n // keep this value. Otherwise, check if we've got all the results.\n let finalItemCount = itemCount\n ? itemCount\n : (response.data.length < paginationOptions.limit[0]\n ? parseInt(paginationOptions.skip[0]) + response.data.length\n : null)\n this.setState({\n builds: response.data,\n fetching: false,\n itemCount: finalItemCount,\n })\n })\n }\n\n componentDidMount() {\n document.title = 'Zuul Builds'\n if (this.props.tenant.name) {\n this.updateData(this.state.filters)\n }\n }\n\n componentDidUpdate(prevProps) {\n const { filters } = this.state\n if (\n this.props.tenant.name !== prevProps.tenant.name ||\n this.props.timezone !== prevProps.timezone\n ) {\n this.updateData(filters)\n }\n }\n\n filterInputValidation = (filterKey, filterValue) => {\n // Input value should not be empty for all cases\n if (!filterValue) {\n return {\n success: false,\n message: 'Input should not be empty'\n }\n }\n\n // For change filter, it must be an integer\n if (filterKey === 'change' && isNaN(filterValue)) {\n return {\n success: false,\n message: 'Change must be an integer (do not include revision)'\n }\n }\n\n return {\n success: true\n }\n }\n\n handleFilterChange = (newFilters) => {\n const { location, history } = this.props\n const { filters, itemCount } = this.state\n /*eslint no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }]*/\n let { 'skip': x1, 'limit': y1, ..._oldFilters } = filters\n let { 'skip': x2, 'limit': y2, ..._newFilters } = newFilters\n\n // If filters have changed, reinitialize skip\n let equalTest = isEqual(_oldFilters, _newFilters)\n let finalFilters = equalTest ? newFilters : { ...newFilters, skip: [0,] }\n\n // We must update the URL parameters before the state. Otherwise, the URL\n // will always be one filter selection behind the state. But as the URL\n // reflects our state this should be ok.\n writeFiltersToUrl(finalFilters, location, history)\n let newState = {\n filters: finalFilters,\n // if filters haven't changed besides skip or limit, keep our itemCount and currentPage\n itemCount: equalTest ? itemCount : null,\n }\n if (!equalTest) {\n newState.currentPage = 1\n }\n this.setState(\n newState,\n () => {\n this.updateData(finalFilters)\n })\n }\n\n handleClearFilters = () => {\n // Delete the values for each filter category\n const filters = this.filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n this.handleFilterChange(filters)\n }\n\n handlePerPageSelect = (event, perPage) => {\n const { filters } = this.state\n this.setState({ resultsPerPage: perPage })\n const newFilters = { ...filters, limit: [perPage,] }\n this.handleFilterChange(newFilters)\n }\n\n handleSetPage = (event, pageNumber) => {\n const { filters, resultsPerPage } = this.state\n this.setState({ currentPage: pageNumber })\n let offset = resultsPerPage * (pageNumber - 1)\n const newFilters = { ...filters, skip: [offset,] }\n this.handleFilterChange(newFilters)\n }\n\n\n render() {\n const { history } = this.props\n const { builds, fetching, filters, resultsPerPage, currentPage, itemCount } = this.state\n\n return (\n \n \n (\n \n \n {firstIndex} - {lastIndex}\n \n  \n of\n  \n {itemCount ? itemCount : 'many'}\n \n )}\n itemCount={itemCount}\n perPage={resultsPerPage}\n page={currentPage}\n widgetId=\"pagination-menu\"\n onPerPageSelect={this.handlePerPageSelect}\n onSetPage={this.handleSetPage}\n isCompact\n />\n \n \n )\n }\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n}))(BuildsPage)\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n DataList,\n DataListCell,\n DataListItem,\n DataListItemRow,\n DataListItemCells,\n Flex,\n FlexItem,\n Switch,\n} from '@patternfly/react-core'\nimport {\n AngleDownIcon,\n AngleRightIcon,\n OutlinedClockIcon\n} from '@patternfly/react-icons'\nimport 'moment-duration-format'\nimport * as moment from 'moment'\n\nimport { BuildResult, BuildResultWithIcon } from './Misc'\nimport { IconProperty } from '../../Misc'\n\nclass BuildList extends React.Component {\n static propTypes = {\n builds: PropTypes.array,\n tenant: PropTypes.object,\n }\n\n // TODO (felix): Add a property \"isCompact\" to be used on the buildresult\n // page. Without this flag we might then even use this (with more\n // information) on the /builds page.\n\n constructor(props) {\n super(props)\n const { builds } = this.props\n let retriedJobs = builds.filter((build) => {\n return !build.final\n }).map((build) => (build.job_name)\n ).filter((build, idx, self) => {\n return self.indexOf(build) === idx\n })\n\n let skippedJobs = builds.filter((build) => {\n return build.result === 'SKIPPED'\n }).map((build) => (build.job_name)\n ).filter((build, idx, self) => {\n return self.indexOf(build) === idx\n })\n\n this.state = {\n visibleNonFinalBuilds: retriedJobs,\n retriedJobs: retriedJobs,\n skippedJobs: skippedJobs,\n showSkipped: false,\n }\n }\n\n sortedBuilds = () => {\n const { builds } = this.props\n const { visibleNonFinalBuilds, showSkipped } = this.state\n\n return builds.sort((a, b) => {\n // Group builds by job name, then order by decreasing start time; this will ensure retries are together\n if (a.job_name === b.job_name) {\n if (a.start_time < b.start_time) {\n return 1\n }\n if (a.start_time > b.start_time) {\n return -1\n }\n return 0\n }\n if (a.job_name > b.job_name) {\n return 1\n } else {\n return -1\n }\n }).filter((build) => {\n if (build.final || visibleNonFinalBuilds.indexOf(build.job_name) >= 0) {\n if (build.result === 'SKIPPED' && !showSkipped) {\n return false\n }\n return true\n }\n else {\n return false\n }\n })\n }\n\n handleFinalSwitch = isChecked => {\n const { retriedJobs } = this.state\n this.setState({ visibleNonFinalBuilds: (isChecked ? retriedJobs : []) })\n }\n\n handleSkippedSwitch = isChecked => {\n this.setState({ showSkipped: isChecked })\n }\n\n handleToggleVisibleNonFinalBuilds = (jobName) => {\n const { visibleNonFinalBuilds } = this.state\n const index = visibleNonFinalBuilds.indexOf(jobName)\n const newVisible =\n index >= 0 ? [...visibleNonFinalBuilds.slice(0, index), ...visibleNonFinalBuilds.slice(index + 1, visibleNonFinalBuilds.length)] : [...visibleNonFinalBuilds, jobName]\n this.setState({\n visibleNonFinalBuilds: newVisible,\n })\n }\n\n renderRetriesButton = (build, hasRetries) => {\n const { visibleNonFinalBuilds } = this.state\n if (!build.final || !hasRetries) {\n return \n {/* Hide the icon to maintain alignment between final and non-final elements */}\n \n \n }\n const isExpanded = (visibleNonFinalBuilds.indexOf(build.job_name) >= 0)\n const RetryIcon =\n isExpanded\n ? AngleDownIcon\n : AngleRightIcon\n const retryAltText =\n isExpanded\n ? 'Hide retries for this job'\n : 'Show retries for this job'\n // TODO either replace this with an ExpandableSection (but this breaks the layout) or figure out CSS animations for the icon.\n return (\n \n { this.handleToggleVisibleNonFinalBuilds(build.job_name) }}\n title={retryAltText}\n style={{ cursor: 'pointer' }} />\n \n )\n }\n\n render() {\n const { tenant } = this.props\n const { visibleNonFinalBuilds, retriedJobs, skippedJobs, showSkipped } = this.state\n\n let retrySwitch = retriedJobs.length > 0 ?\n \n Show retries  \n \n :\n <>\n\n let skippedSwitch = skippedJobs.length > 0 ?\n \n Show skipped jobs  \n \n :\n <>\n\n const sortedBuilds = this.sortedBuilds()\n\n return (\n \n {skippedSwitch}\n {retrySwitch}\n \n \n {sortedBuilds.map((build) => {\n function linkWrap(cell) {\n return (\n {cell}\n )\n }\n return (\n \n \n = 0),\n \n {linkWrap(\n {build.job_name}\n {!build.voting && ' (non-voting)'}\n )}\n ,\n \n {linkWrap(}\n value={moment\n .duration(build.duration, 'seconds')\n .format('h [hr] m [min] s [sec]')}\n />)}\n ,\n \n {linkWrap()}\n ,\n ]}\n />\n \n \n )\n })}\n \n \n \n )\n }\n}\n\nexport default connect((state) => ({ tenant: state.tenant }))(BuildList)\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Button, Modal } from '@patternfly/react-core'\n\n\nfunction ChartModal(props) {\n const { chart, isOpen, title, onClose } = props\n\n return (\n Close,\n ]}>\n
    \n {chart}\n
    \n \n )\n}\n\nChartModal.propTypes = {\n chart: PropTypes.object.isRequired,\n isOpen: PropTypes.bool,\n title: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n}\n\nexport { ChartModal }","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\n\nconst buildResultLegendData = [\n {\n name: 'SUCCESS',\n // PF green-500\n symbol: { fill: '#3E8635' },\n },\n {\n name: 'FAILURE',\n // PF red-100\n symbol: { fill: '#C9190B' },\n },\n {\n name: 'RETRY_LIMIT',\n // PF red-300\n symbol: { fill: '#7D1007' },\n },\n {\n name: 'SKIPPED',\n // PF light-blue-200\n symbol: { fill: '#7CDBF3' },\n },\n {\n name: 'ABORTED',\n // PF gold-200\n symbol: { fill: '#F6D173' },\n },\n {\n name: 'MERGE_CONFLICT',\n // PF orange-200\n symbol: { fill: '#EF9234' },\n },\n {\n name: 'MERGE_FAILURE',\n // PF orange-200\n symbol: { fill: '#EF9234' },\n },\n {\n name: 'NODE_FAILURE',\n // PF orange-300\n symbol: { fill: '#EC7A08' },\n },\n {\n name: 'TIMED_OUT',\n // PF orange-400\n symbol: { fill: '#C46100' },\n },\n {\n name: 'POST_FAILURE',\n // PF orange-500\n symbol: { fill: '#8F4700' },\n },\n {\n name: 'CONFIG_ERROR',\n // PF orange-600\n symbol: { fill: '#773D00' },\n },\n {\n name: 'RETRY',\n // PF orange-100\n symbol: { fill: '#F4B678' },\n },]\n\nconst buildsBarStyleMap = buildResultLegendData.reduce(\n (final, x) => ({ ...final, [x.name]: x.symbol.fill }), {}\n)\n\nconst buildsBarStyle = {\n data: {\n fill: ({ datum }) => buildsBarStyleMap[datum.result]\n }\n}\n\nexport { buildResultLegendData, buildsBarStyleMap, buildsBarStyle }\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport * as moment from 'moment'\nimport * as moment_tz from 'moment-timezone'\nimport 'moment-duration-format'\n\nimport { Chart, ChartBar, ChartAxis, ChartLegend, ChartTooltip } from '@patternfly/react-charts'\n\nimport { buildResultLegendData, buildsBarStyle } from './Misc'\nimport { describeRef } from '../../Misc'\n\n\nfunction BuildsetGanttChart(props) {\n const { builds, timezone, preferences } = props\n const sortedByStartTime = builds.sort((a, b) => {\n if (a.start_time > b.start_time) {\n return -1\n }\n if (a.start_time < b.start_time) {\n return 1\n }\n return 0\n })\n const origin = moment_tz.utc(sortedByStartTime[builds.length - 1].start_time).tz(timezone)\n\n const longestJobName = builds.reduce((a, build) => (a.length < build.job_name.length ? build.job_name : a), '')\n const jobNames = builds.map((d) => d.job_name)\n\n const data = sortedByStartTime.map((build) => {\n return {\n x: build.uuid,\n y0: build.start_time ? (moment_tz.utc(build.start_time).tz(timezone) - origin) / 1000 : 0,\n y: build.end_time ? (moment_tz.utc(build.end_time).tz(timezone) - origin) / 1000 : 0,\n result: build.result,\n started: moment_tz.utc(build.start_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'),\n ended: moment_tz.utc(build.end_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'),\n ref: build.ref,\n }\n })\n\n const legendData = builds.map((build) => (\n build.result\n )).filter((result, idx, self) => { return self.indexOf(result) === idx }\n ).map((legend) => ({ name: legend }))\n\n const uniqueResults = builds.map(\n (build) => (build.result)\n ).filter((result, idx, self) => {\n return self.indexOf(result) === idx\n })\n\n const chartLegend = buildResultLegendData.filter((legend) => { return uniqueResults.indexOf(legend.name) > -1 })\n\n let horizontalLegendTextColor = '#000'\n if (preferences.darkMode) {\n horizontalLegendTextColor = '#ccc'\n }\n\n return (\n
    \n }\n >\n jobNames[index])}\n />\n {\n let format\n switch (true) {\n case (t < 180):\n format = 's [sec]'\n break\n case (t < 7200):\n format = 'm [min]'\n break\n default:\n format = 'h [hr] m [min]'\n }\n return moment.duration(t, 'seconds').format(format)\n }}\n fixLabelOverlap={true}\n style={{ tickLabels: { angle: -25, padding: 1, verticalAnchor: 'middle', textAnchor: 'end', fill: horizontalLegendTextColor } }}\n />\n }\n labels={({ datum }) => `${datum.result}\\nStarted ${datum.started}\\nEnded ${datum.ended}\\n${describeRef(datum.ref)}`}\n />\n \n
    \n )\n\n}\n\nBuildsetGanttChart.propTypes = {\n builds: PropTypes.array.isRequired,\n timezone: PropTypes.string,\n preferences: PropTypes.object,\n}\n\nexport default connect((state) => ({\n timezone: state.timezone,\n preferences: state.preferences,\n}))(BuildsetGanttChart)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect, useDispatch } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n Button,\n Flex,\n FlexItem,\n List,\n ListItem,\n Title,\n Modal,\n ModalVariant,\n} from '@patternfly/react-core'\nimport {\n CodeBranchIcon,\n OutlinedCommentDotsIcon,\n FingerprintIcon,\n StreamIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n RedoAltIcon,\n} from '@patternfly/react-icons'\nimport * as moment from 'moment'\nimport * as moment_tz from 'moment-timezone'\nimport 'moment-duration-format'\n\nimport { buildExternalLink, renderRefInfo, IconProperty } from '../../Misc'\nimport { BuildResultBadge, BuildResultWithIcon } from './Misc'\nimport { enqueue, enqueue_ref } from '../../api'\nimport { addNotification, addApiError } from '../../actions/notifications'\nimport { ChartModal } from '../charts/ChartModal'\nimport BuildsetGanttChart from '../charts/GanttChart'\n\nfunction getRefs(buildset) {\n // For backwards compat: get a list of this items changes.\n return 'refs' in buildset ? buildset.refs : [buildset]\n}\n\nfunction getRef(buildset) {\n return 'refs' in buildset ? buildset.refs[0] : buildset\n}\n\nfunction Buildset({ buildset, timezone, tenant, user, preferences }) {\n const [isGanttChartModalOpen, setIsGanttChartModalOpen] = useState(false)\n const ref = getRef(buildset)\n\n function renderBuildTimes() {\n const firstStartBuild = buildset.builds.reduce((prev, cur) =>\n !cur.start_time || prev.start_time < cur.start_time ? prev : cur\n )\n const lastEndBuild = buildset.builds.reduce((prev, cur) =>\n !cur.end_time || prev.end_time > cur.end_time ? prev : cur\n )\n const totalDuration =\n (moment_tz.utc(lastEndBuild.end_time).tz(timezone) -\n moment_tz.utc(firstStartBuild.start_time).tz(timezone)) /\n 1000\n const overallDuration =\n (moment_tz.utc(lastEndBuild.end_time).tz(timezone) -\n moment_tz.utc(\n buildset.event_timestamp != null\n ? buildset.event_timestamp : firstStartBuild.start_time\n ).tz(timezone)\n ) / 1000\n\n const buildLink = (build) => (\n \n {build.job_name}\n \n )\n const firstStartLink = buildLink(firstStartBuild)\n const lastEndLink = buildLink(lastEndBuild)\n\n return (\n \n \n \n }\n value={\n \n Starting build \n {firstStartLink}
    \n \n (started{' '}\n {moment_tz\n .utc(firstStartBuild.start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n )\n \n
    \n Ending build \n {lastEndLink}
    \n \n (ended{' '}\n {moment_tz\n .utc(lastEndBuild.end_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n )\n \n
    \n }\n />\n }\n value={\n <>\n Buildset duration \n {moment\n .duration(totalDuration, 'seconds')\n .format('h [hr] m [min] s [sec]')}{' '}\n  \n {\n setIsGanttChartModalOpen(true)\n }}\n >\n Show timeline\n \n \n }\n />\n }\n value={\n <>\n Overall duration \n {moment\n .duration(overallDuration, 'seconds')\n .format('h [hr] m [min] s [sec]')}\n \n }\n />\n
    \n
    \n
    \n )\n }\n\n const [showEnqueueModal, setShowEnqueueModal] = useState(false)\n const dispatch = useDispatch()\n\n function renderEnqueueButton() {\n const value = ( {\n event.preventDefault()\n setShowEnqueueModal(true)\n }}\n >\n Re-enqueue buildset\n )\n return (\n }\n value={value}\n />\n )\n }\n\n function enqueueConfirm() {\n setShowEnqueueModal(false)\n if (ref.change === null) {\n enqueue_ref(tenant.apiPrefix, ref.project, buildset.pipeline,\n ref.ref, ref.oldrev, ref.newrev)\n .then(() => {\n dispatch(addNotification(\n {\n text: 'Enqueue successful.',\n type: 'success',\n status: '',\n url: '',\n }))\n })\n .catch(error => {\n dispatch(addApiError(error))\n })\n } else {\n const changeId = ref.change + ',' + ref.patchset\n enqueue(tenant.apiPrefix, ref.project, buildset.pipeline, changeId)\n .then(() => {\n dispatch(addNotification(\n {\n text: 'Change enqueued successfully.',\n type: 'success',\n status: '',\n url: '',\n }))\n })\n .catch(error => {\n dispatch(addApiError(error))\n })\n }\n }\n\n function renderEnqueueModal() {\n let changeId = ref.change ? ref.change + ',' + ref.patchset : ref.newrev\n let changeInfo = changeId\n ? <>for change {changeId}\n : <>for ref {ref.ref}\n const title = 'You are about to re-enqueue a change'\n return (\n { setShowEnqueueModal(false) }}\n actions={[\n ,\n ,\n ]}>\n

    Please confirm that you want to re-enqueue all jobs {changeInfo} on project {ref.project} on pipeline {buildset.pipeline}.

    \n \n )\n }\n\n function renderEvents() {\n return (\n <>\n {buildset.events.map((bs_event, idx) => (\n }\n key={idx}\n value={\n \n {bs_event.description}
    \n \n {moment_tz\n .utc(bs_event.event_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss')}\n \n
    \n }\n />\n ))}\n \n )\n }\n\n return (\n <>\n \n <BuildResultWithIcon result={buildset.result} size=\"md\">\n Buildset result\n </BuildResultWithIcon>\n <BuildResultBadge result={buildset.result} />  \n \n {/* We handle the spacing for the body and the flex items by ourselves\n so they go hand in hand. By default, the flex items' spacing only\n affects left/right margin, but not top or bottom (which looks\n awkward when the items are stacked at certain breakpoints) */}\n \n \n \n \n {getRefs(buildset).map((ref, idx) => (\n }\n key={idx}\n value={\n \n {buildExternalLink(ref)}
    \n Project {ref.project}
    \n {renderRefInfo(ref)}\n
    \n }\n />\n ))}\n }\n value={\n <>\n Pipeline {buildset.pipeline}\n \n }\n />\n }\n value={\n \n UUID {buildset.uuid}
    \n Event ID {buildset.event_id}
    \n
    \n }\n />\n
    \n
    \n
    \n {buildset.builds && renderBuildTimes()}\n \n \n \n {buildset.events && renderEvents()}\n }\n value={\n <>\n Message:\n
    \n
    {buildset.message}
    \n
    \n \n }\n />\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) &&\n <>\n {renderEnqueueButton()}\n }\n
    \n
    \n
    \n\n
    \n }\n isOpen={isGanttChartModalOpen}\n title=\"Builds Timeline\"\n onClose={() => {\n setIsGanttChartModalOpen(false)\n }}\n />\n {renderEnqueueModal()}\n \n )\n}\n\nBuildset.propTypes = {\n buildset: PropTypes.object,\n tenant: PropTypes.object,\n timezone: PropTypes.string,\n user: PropTypes.object,\n preferences: PropTypes.object,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n user: state.user,\n preferences: state.preferences,\n}))(Buildset)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateIcon,\n EmptyStateVariant,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport { BuildIcon } from '@patternfly/react-icons'\n\nimport { fetchBuildset } from '../actions/build'\nimport { EmptyPage } from '../containers/Errors'\nimport { Fetching } from '../containers/Fetching'\nimport BuildList from '../containers/build/BuildList'\nimport Buildset from '../containers/build/Buildset'\n\nclass BuildsetPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object.isRequired,\n buildset: PropTypes.object,\n isFetching: PropTypes.bool.isRequired,\n fetchBuildset: PropTypes.func.isRequired,\n preferences: PropTypes.object,\n }\n\n updateData = () => {\n if (!this.props.buildset) {\n this.props.fetchBuildset(\n this.props.tenant,\n this.props.match.params.buildsetId\n )\n }\n }\n\n componentDidMount() {\n document.title = 'Zuul Buildset'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render() {\n const { buildset, isFetching, tenant } = this.props\n\n // Initial page load\n if (buildset === undefined || isFetching) {\n return \n }\n\n // Fetching finished, but no buildset found\n if (!buildset) {\n // TODO (felix): Provide some generic error (404?) page. Can we somehow\n // identify the error here?\n return (\n \n )\n }\n\n // Return the build list or an empty state if no builds are part of the\n // buildset.\n const buildsContent = buildset.builds ? (\n \n ) : (\n <>\n {/* Using an hr above the empty state ensures that the space between\n heading (builds) and empty state is filled and the empty state\n doesn't look like it's lost in space. */}\n
    \n \n \n \n This buildset does not contain any builds\n \n \n \n )\n\n return (\n <>\n \n \n \n \n \n <BuildIcon\n style={{\n marginRight: 'var(--pf-global--spacer--sm)',\n verticalAlign: '-0.1em',\n }}\n />{' '}\n Builds\n \n {buildsContent}\n \n \n )\n }\n}\n\nfunction mapStateToProps(state, ownProps) {\n const buildsetId = ownProps.match.params.buildsetId\n // This will be undefined if the data is not available yet or null if no\n // buildset could be fetched for the given id.\n const buildset = state.build.buildsets[buildsetId]\n return {\n buildset,\n tenant: state.tenant,\n isFetching: state.build.isFetching,\n preferences: state.preferences,\n }\n}\n\nconst mapDispatchToProps = { fetchBuildset }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BuildsetPage)\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n EmptyStateSecondaryActions,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n BuildIcon,\n CodeBranchIcon,\n CodeIcon,\n CogIcon,\n CubeIcon,\n OutlinedCalendarAltIcon,\n OutlinedClockIcon,\n PollIcon,\n StreamIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n truncate,\n breakWord,\n cellWidth,\n} from '@patternfly/react-table'\nimport 'moment-duration-format'\nimport * as moment from 'moment'\nimport * as moment_tz from 'moment-timezone'\n\nimport { BuildResult, BuildResultWithIcon } from './Misc'\nimport { buildExternalTableLink, IconProperty } from '../../Misc'\n\nfunction getRef(buildset) {\n return 'refs' in buildset ? buildset.refs[0] : buildset\n}\n\nfunction BuildsetTable({\n buildsets,\n fetching,\n onClearFilters,\n tenant,\n timezone,\n history,\n}) {\n const [isDurationOpen, setIsDurationOpen] = React.useState(false)\n const [currentDuration, setCurrentDuration] = React.useState(\n 'Buildset Duration'\n )\n\n const handleDurationSelect = (event) => {\n setIsDurationOpen(!isDurationOpen)\n setCurrentDuration(event.target.innerText)\n }\n\n const columns = [\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Branch\" />,\n dataLabel: 'Branch',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Pipeline\" />,\n dataLabel: 'Pipeline',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Change\" />,\n dataLabel: 'Change',\n transforms: [cellWidth(10)],\n cellTransforms: [truncate],\n },\n {\n title: setIsDurationOpen(next)}\n // Use a gear instead of a caret which looks likea sort indicator.\n toggleIndicator={CogIcon}\n style={{\n padding: 0,\n fontWeight: 'var(--pf-c-table--cell-FontWeight)',\n fontSize: 'var(--pf-c-table--cell-FontSize)',\n color: 'var(--pf-c-table--cell-Color)'\n }}\n id=\"toggle-id-duration\"\n >\n {currentDuration}\n \n }\n isOpen={isDurationOpen}\n dropdownItems={[\n Buildset Duration,\n Overall Duration,\n ]}\n style={{ width: '100%', padding: 0 }}\n />,\n dataLabel: 'Duration',\n props: {style: {overflowY: 'visible'}},\n },\n {\n title: (\n } value=\"Start time\" />\n ),\n dataLabel: 'Start time',\n },\n {\n title: } value=\"Result\" />,\n dataLabel: 'Result',\n },\n ]\n\n function createBuildsetRow(buildset) {\n const ref = getRef(buildset)\n const changeOrRefLink = buildExternalTableLink(ref)\n\n let duration\n if (currentDuration === 'Buildset Duration') {\n duration = moment.utc(buildset.last_build_end_time) -\n moment.utc(buildset.first_build_start_time)\n } else {\n duration = moment.utc(buildset.last_build_end_time) -\n moment.utc(buildset.event_timestamp)\n }\n\n return {\n // Pass the buildset's uuid as row id, so we can use it later on in the\n // action handler to build the link to the build result page for each row.\n id: buildset.uuid,\n cells: [\n {\n // To allow passing anything else than simple string values to a table\n // cell, we must use the title attribute.\n title: (\n \n {ref.project}\n \n ),\n },\n {\n title: ref.branch ? ref.branch : ref.ref,\n },\n {\n title: buildset.pipeline,\n },\n {\n title: changeOrRefLink && changeOrRefLink,\n },\n {\n title: moment\n .duration(duration, 'ms')\n .format('h [hr] m [min] s [sec]'),\n },\n {\n title: moment_tz\n .utc(buildset.first_build_start_time)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss'),\n },\n {\n title: (\n \n \n ),\n },\n ],\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n // For the fetching row we don't need any actions, so we keep them empty by\n // default.\n let actions = []\n if (fetching) {\n rows = createFetchingRow()\n // The dataLabel property is used to show the column header in a list-like\n // format for smaller viewports. When we are fetching, we don't want the\n // fetching row to be prepended by a \"Project\" column header. The other\n // column headers are not relevant here since we only have a single cell in\n // the fetching row.\n columns[0].dataLabel = ''\n } else {\n rows = buildsets.map((buildset) => createBuildsetRow(buildset))\n // This list of actions will be applied to each row in the table. For\n // row-specific actions we must evaluate the individual row data provided to\n // the onClick handler.\n actions = [\n {\n title: 'Show buildset result',\n onClick: (event, rowId, rowData) =>\n // The row's id contains the buildset's uuid, so we can use it to\n // build the correct link.\n history.push(`${tenant.linkPrefix}/buildset/${rowData.id}`),\n },\n ]\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any buildsets but are also\n not fetching */}\n {!fetching && buildsets.length === 0 && (\n \n \n No buildsets found\n \n No buildsets match this filter criteria. Remove some filters or\n clear all to show results.\n \n \n \n \n \n )}\n \n )\n}\n\nBuildsetTable.propTypes = {\n buildsets: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n onClearFilters: PropTypes.func.isRequired,\n tenant: PropTypes.object.isRequired,\n timezone: PropTypes.string.isRequired,\n history: PropTypes.object.isRequired,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n timezone: state.timezone,\n}))(BuildsetTable)\n","// Copyright 2019 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { isEqual } from 'lodash'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants, Pagination } from '@patternfly/react-core'\n\nimport { fetchBuildsets } from '../api'\nimport {\n FilterToolbar,\n getFiltersFromUrl,\n writeFiltersToUrl,\n} from '../containers/FilterToolbar'\nimport { makeBuildsetQueryString } from '../containers/BuildQuery'\nimport BuildsetTable from '../containers/build/BuildsetTable'\n\nclass BuildsetsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n location: PropTypes.object,\n history: PropTypes.object,\n preferences: PropTypes.object,\n }\n\n constructor(props) {\n super()\n this.filterCategories = [\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by Project...',\n type: 'fuzzy-search',\n },\n {\n key: 'branch',\n title: 'Branch',\n placeholder: 'Filter by Branch...',\n type: 'fuzzy-search',\n },\n {\n key: 'pipeline',\n title: 'Pipeline',\n placeholder: 'Filter by Pipeline...',\n type: 'fuzzy-search',\n },\n {\n key: 'change',\n title: 'Change',\n placeholder: 'Filter by Change...',\n type: 'search',\n },\n {\n key: 'result',\n title: 'Result',\n placeholder: 'Filter by Result...',\n type: 'select',\n options: [\n 'SUCCESS',\n 'FAILURE',\n 'MERGE_CONFLICT',\n 'MERGE_FAILURE',\n 'DEQUEUED',\n 'CONFIG_ERROR',\n 'NO_JOBS',\n ]\n },\n {\n key: 'uuid',\n title: 'Buildset',\n placeholder: 'Filter by Buildset UUID...',\n type: 'search',\n },\n ]\n\n const _filters = getFiltersFromUrl(props.location, this.filterCategories)\n const perPage = _filters.limit[0]\n ? parseInt(_filters.limit[0])\n : 50\n const currentPage = _filters.skip[0]\n ? Math.floor(parseInt(_filters.skip[0] / perPage)) + 1\n : 1\n\n this.state = {\n buildsets: [],\n fetching: false,\n filters: _filters,\n resultsPerPage: perPage,\n currentPage: currentPage,\n itemCount: null,\n }\n }\n\n updateData = (filters) => {\n // When building the filter query for the API we can't rely on the location\n // search parameters. Although, we've updated them in the updateUrl() method\n // they always have the same value in here (the values when the page was\n // first loaded). Most probably that's the case because the location is\n // passed as prop and doesn't change since the page itself wasn't\n // re-rendered.\n const { itemCount } = this.state\n let paginationOptions = {\n skip: filters.skip.length > 0 ? filters.skip : [0,],\n limit: filters.limit.length > 0 ? filters.limit : [50,]\n }\n let _filters = { ...filters, ...paginationOptions }\n const queryString = makeBuildsetQueryString(_filters)\n this.setState({ fetching: true })\n fetchBuildsets(this.props.tenant.apiPrefix, queryString).then(\n (response) => {\n // if we have already an itemCount for this query (ie we're scrolling backwards through results)\n // keep this value. Otherwise, check if we've got all the results.\n let finalItemCount = itemCount\n ? itemCount\n : (response.data.length < paginationOptions.limit[0]\n ? parseInt(paginationOptions.skip[0]) + response.data.length\n : null)\n this.setState({\n buildsets: response.data,\n fetching: false,\n itemCount: finalItemCount,\n })\n }\n )\n }\n\n componentDidMount() {\n document.title = 'Zuul Buildsets'\n if (this.props.tenant.name) {\n this.updateData(this.state.filters)\n }\n }\n\n componentDidUpdate(prevProps) {\n const { filters } = this.state\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData(filters)\n }\n }\n\n filterInputValidation = (filterKey, filterValue) => {\n // Input value should not be empty for all cases\n if (!filterValue) {\n return {\n success: false,\n message: 'Input should not be empty'\n }\n }\n\n // For change filter, it must be an integer\n if (filterKey === 'change' && isNaN(filterValue)) {\n return {\n success: false,\n message: 'Change must be an integer (do not include revision)'\n }\n }\n\n return {\n success: true\n }\n }\n\n handleFilterChange = (newFilters) => {\n const { location, history } = this.props\n const { filters, itemCount } = this.state\n /*eslint no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }]*/\n let { 'skip': x1, 'limit': y1, ..._oldFilters } = filters\n let { 'skip': x2, 'limit': y2, ..._newFilters } = newFilters\n\n // If filters have changed, reinitialize skip\n let equalTest = isEqual(_oldFilters, _newFilters)\n let finalFilters = equalTest ? newFilters : { ...newFilters, skip: [0,] }\n\n // We must update the URL parameters before the state. Otherwise, the URL\n // will always be one filter selection behind the state. But as the URL\n // reflects our state this should be ok.\n\n writeFiltersToUrl(newFilters, location, history)\n let newState = {\n filters: finalFilters,\n // if filters haven't changed besides skip or limit, keep our itemCount and currentPage\n itemCount: equalTest ? itemCount : null,\n }\n if (!equalTest) {\n newState.currentPage = 1\n }\n this.setState(\n newState,\n () => {\n this.updateData(finalFilters)\n })\n }\n\n handleClearFilters = () => {\n // Delete the values for each filter category\n const filters = this.filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n this.handleFilterChange(filters)\n }\n\n handlePerPageSelect = (event, perPage) => {\n const { filters } = this.state\n this.setState({ resultsPerPage: perPage })\n const newFilters = { ...filters, limit: [perPage,] }\n this.handleFilterChange(newFilters)\n }\n\n handleSetPage = (event, pageNumber) => {\n const { filters, resultsPerPage } = this.state\n this.setState({ currentPage: pageNumber })\n const offset = resultsPerPage * (pageNumber - 1)\n const newFilters = { ...filters, skip: [offset,] }\n this.handleFilterChange(newFilters)\n }\n\n render() {\n const { history } = this.props\n const { buildsets, fetching, filters, resultsPerPage, currentPage, itemCount } = this.state\n\n return (\n \n \n (\n \n \n {firstIndex} - {lastIndex}\n \n  \n of\n  \n {itemCount ? itemCount : 'many'}\n \n )}\n itemCount={itemCount}\n perPage={resultsPerPage}\n page={currentPage}\n widgetId=\"pagination-menu\"\n onPerPageSelect={this.handlePerPageSelect}\n onSetPage={this.handleSetPage}\n isCompact\n />\n \n \n )\n }\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n preferences: state.preferences,\n}))(BuildsetsPage)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport * as moment from 'moment'\nimport 'moment-duration-format'\nimport { Button } from '@patternfly/react-core'\n\nimport {\n calculateQueueItemTimes,\n ChangeLink,\n getJobStrResult,\n QueueItemProgressbar,\n} from './Misc'\nimport { formatTime } from '../../Misc'\n\nfunction getRefs(item) {\n // For backwards compat: get a list of this items refs.\n return 'refs' in item ? item.refs : [item]\n}\n\nclass ItemPanel extends React.Component {\n static propTypes = {\n globalExpanded: PropTypes.bool.isRequired,\n item: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n preferences: PropTypes.object\n }\n\n constructor () {\n super()\n this.state = {\n expanded: false,\n showSkipped: false,\n }\n this.onClick = this.onClick.bind(this)\n this.toggleSkippedJobs = this.toggleSkippedJobs.bind(this)\n this.clicked = false\n }\n\n onClick (e) {\n // Skip middle mouse button\n if (e.button === 1) {\n return\n }\n let expanded = this.state.expanded\n if (!this.clicked) {\n expanded = this.props.globalExpanded\n }\n this.clicked = true\n this.setState({ expanded: !expanded })\n }\n\n enqueueTime (ms) {\n // Special format case for enqueue time to add style\n let hours = 60 * 60 * 1000\n let now = Date.now()\n let delta = now - ms\n let status = 'text-success'\n let text = formatTime(delta)\n if (delta > (4 * hours)) {\n status = 'text-danger'\n } else if (delta > (2 * hours)) {\n status = 'text-warning'\n }\n return {text}\n }\n\n renderTimer (change, times) {\n let remainingTime\n if (times.remaining === null) {\n remainingTime = 'unknown'\n } else {\n remainingTime = formatTime(times.remaining)\n }\n return (\n \n \n {this.enqueueTime(change.enqueue_time)}\n \n | \n \n {remainingTime}\n \n \n )\n }\n\n renderJobProgressBar (job, elapsedTime, remainingTime) {\n let progressPercent = 100 * (elapsedTime / (elapsedTime +\n remainingTime))\n // Show animation in preparation phase\n let className = ''\n let progressWidth = progressPercent\n let title = ''\n let remaining = remainingTime\n if (Number.isNaN(progressPercent)) {\n progressWidth = 100\n progressPercent = 0\n className = 'progress-bar-striped progress-bar-animated'\n } else if (job.pre_fail) {\n className = 'progress-bar-danger'\n title += 'Early failure detected.\\n'\n }\n if (remaining !== null) {\n title += 'Estimated time remaining: ' + moment.duration(remaining).format({\n template: 'd [days] h [hours] m [minutes] s [seconds]',\n largest: 2,\n minValue: 30,\n })\n }\n\n return (\n
    \n
    \n
    \n )\n }\n\n renderJobStatusLabel (job, result) {\n let className, title\n switch (result) {\n case 'success':\n className = 'label-success'\n break\n case 'failure':\n className = 'label-danger'\n break\n case 'unstable':\n case 'retry_limit':\n case 'post_failure':\n case 'node_failure':\n className = 'label-warning'\n break\n case 'paused':\n case 'skipped':\n className = 'label-info'\n break\n case 'waiting':\n className = 'label-default'\n if (job.waiting_status !== null) {\n title = 'Waiting on ' + job.waiting_status\n }\n break\n case 'queued':\n className = 'label-default'\n if (job.waiting_status !== null) {\n title = 'Waiting on ' + job.waiting_status\n }\n break\n // 'in progress' 'lost' 'aborted' ...\n default:\n className = 'label-default'\n }\n\n return (\n {result}\n )\n }\n\n renderJob (job, job_times) {\n const { tenant } = this.props\n let job_name = job.name\n let ordinal_rules = new Intl.PluralRules('en', {type: 'ordinal'})\n const suffixes = {\n one: 'st',\n two: 'nd',\n few: 'rd',\n other: 'th'\n }\n if (job.tries > 1) {\n job_name = job_name + ' (' + job.tries + suffixes[ordinal_rules.select(job.tries)] + ' attempt)'\n }\n let name = ''\n if (job.result !== null) {\n name = {job_name}\n } else if (job.url !== null) {\n let url = job.url\n if (job.url.match('stream/')) {\n const to = (\n tenant.linkPrefix + '/' + job.url\n )\n name = {job_name}\n } else {\n name = {job_name}\n }\n } else {\n name = {job_name}\n }\n let resultBar\n let result = getJobStrResult(job)\n if (result === 'in progress') {\n resultBar = this.renderJobProgressBar(job, job_times.elapsed, job_times.remaining)\n } else {\n resultBar = this.renderJobStatusLabel(job, result)\n }\n\n return (\n \n {name}\n {resultBar}\n {job.voting === false ? (\n (non-voting)) : ''}\n
    \n )\n }\n\n toggleSkippedJobs (e) {\n // Skip middle mouse button\n if (e.button === 1) {\n return\n }\n this.setState({ showSkipped: !this.state.showSkipped })\n }\n\n renderJobList (jobs, times) {\n const [buttonText, interestingJobs] = this.state.showSkipped ?\n ['Hide', jobs] :\n ['Show', jobs.filter(j => getJobStrResult(j) !== 'skipped')]\n const skippedJobCount = jobs.length - interestingJobs.length\n\n return (\n <>\n
      \n {interestingJobs.map((job, idx) => (\n
    • \n {this.renderJob(job, times.jobs[job.name])}\n
    • \n ))}\n {(this.state.showSkipped || skippedJobCount) ? (\n
    • \n \n
    • \n ) : ''}\n
    \n \n )\n }\n\n render () {\n const { expanded } = this.state\n const { item, globalExpanded } = this.props\n let expand = globalExpanded\n if (this.clicked) {\n expand = expanded\n }\n const times = calculateQueueItemTimes(item)\n const header = (\n
    \n
    \n
    \n {item.live === true ? (\n
    \n
    \n \n
    \n
    \n {this.renderTimer(item, times)}\n
    \n
    \n ) : ''}\n {getRefs(item).map((change, idx) => (\n
    \n
    \n {change.project}\n
    \n
    \n \n
    \n
    \n ))}\n
    \n
    \n {expand ? this.renderJobList(item.jobs, times) : ''}\n
    \n )\n return (\n \n {header}\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n preferences: state.preferences,\n}))(ItemPanel)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchChangeIfNeeded } from '../actions/change'\nimport ItemPanel from '../containers/status/ItemPanel'\nimport { Fetchable } from '../containers/Fetching'\n\n\nclass ChangeStatusPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchChangeIfNeeded(\n this.props.tenant, this.props.match.params.changeId, force))\n .then(() => {this.timer = setTimeout(this.updateData, 5000)})\n // Clear any running timer\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n\n componentDidMount () {\n document.title = this.props.match.params.changeId + ' | Zuul Status'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n componentWillUnmount () {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n\n render () {\n const { remoteData } = this.props\n const itemlist = remoteData.change\n return (\n \n \n \n \n {itemlist && itemlist.map((item, idx) => (\n
    \n \n
    \n ))}\n
    )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.change\n}))(ChangeStatusPage)\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as types from './actionTypes'\nimport * as API from '../api'\n\nfunction requestComponents() {\n return { type: types.COMPONENTS_FETCH_REQUEST }\n}\n\nfunction receiveComponents(components) {\n return { type: types.COMPONENTS_FETCH_SUCCESS, components }\n}\n\nfunction failedComponents(error) {\n return { type: types.COMPONENTS_FETCH_FAIL, error }\n}\n\nexport function fetchComponents() {\n return async function (dispatch) {\n dispatch(requestComponents())\n try {\n const response = await API.fetchComponents()\n dispatch(receiveComponents(response.data))\n } catch (error) {\n dispatch(failedComponents(error))\n }\n }\n}\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { capitalize } from '@patternfly/react-core'\nimport {\n expandable,\n Table,\n TableBody,\n TableHeader,\n TableVariant,\n} from '@patternfly/react-table'\nimport {\n CodeIcon,\n OnRunningIcon,\n OutlinedHddIcon,\n PauseCircleIcon,\n RunningIcon,\n QuestionIcon,\n StopCircleIcon,\n HistoryIcon,\n} from '@patternfly/react-icons'\n\nimport { IconProperty } from '../../Misc'\n\nconst STATE_ICON_CONFIGS = {\n RUNNING: {\n icon: RunningIcon,\n color: 'var(--pf-global--success-color--100)',\n },\n INITIALIZING: {\n icon: HistoryIcon,\n color: 'var(--pf-global--warning-color--100)',\n },\n PAUSED: {\n icon: PauseCircleIcon,\n color: 'var(--pf-global--warning-color--100)',\n },\n STOPPED: {\n icon: StopCircleIcon,\n color: 'var(--pf-global--danger-color--100)',\n },\n}\n\nconst DEFAULT_STATE_ICON_CONFIG = {\n icon: QuestionIcon,\n color: 'var(--pf-global--info-color--100)',\n}\n\nfunction ComponentStateIcon({ state }) {\n const iconConfig =\n STATE_ICON_CONFIGS[state.toUpperCase()] || DEFAULT_STATE_ICON_CONFIG\n const Icon = iconConfig.icon\n\n return (\n \n \n \n )\n}\n\nComponentStateIcon.propTypes = {\n state: PropTypes.string.isRequired,\n}\n\nfunction ComponentState({ state }) {\n const iconConfig =\n STATE_ICON_CONFIGS[state.toUpperCase()] || DEFAULT_STATE_ICON_CONFIG\n\n return {state.toUpperCase()}\n}\n\nComponentState.propTypes = {\n state: PropTypes.string.isRequired,\n}\n\nfunction ComponentTable({ components }) {\n // We have to keep the rows in state to be complient to how the PF4\n // expandable/collapsible table works (see the handleCollapse function).\n const [rows, setRows] = useState([])\n\n const sortComponents = (a, b) => {\n if (a.hostname < b.hostname) {\n return -1\n }\n if (a.hostname > b.hostname) {\n return 1\n }\n return 0\n }\n\n useEffect(() => {\n const createTableRows = () => {\n const allRows = []\n let i = 0\n let sectionIndex = 0\n for (const [kind, _components] of Object.entries(components)) {\n sectionIndex = i\n i++\n const sectionRows = []\n for (const component of [..._components].sort(sortComponents)) {\n sectionRows.push(createComponentRow(kind, component, sectionIndex))\n i++\n }\n allRows.push(createSectionRow(kind, sectionRows.length))\n allRows.push(...sectionRows)\n }\n\n return allRows\n }\n\n setRows(createTableRows())\n // Ensure that the effect is only called once and not after each\n // render (which would happen if no dependency array is provided).\n // But as we are changing the state during the effect, this would\n // result in an infinite render loop as every state change\n // re-renders the component.\n // Side note: We could also pass an empty depdency array here, but\n // eslint is complaining about that. So we provide the components\n // variable which is provided via props and thus doesn't change\n // during the lifetime of this react component.\n }, [components])\n\n // TODO (felix): We could change this to an expandable table and show some\n // details about the component in the expandable row. E.g. similar to what\n // OpenShift shows in for deployments and pods (metrics, performance,\n // additional attributes).\n const columns = [\n {\n title: } value=\"Hostname\" />,\n dataLabel: 'Hostname',\n cellFormaters: [expandable],\n },\n {\n title: } value=\"State\" />,\n dataLabel: 'State',\n },\n {\n title: } value=\"Version\" />,\n dataLabel: 'Version',\n },\n ]\n\n function createSectionRow(kind, childrenCount) {\n return {\n // Keep all sections open on initial page load. The handleCollapse()\n // function will deal with open/closing sections.\n isOpen: true,\n cells: [`${capitalize(kind)} (${childrenCount})`],\n }\n }\n\n function createComponentRow(kind, component, parent_id) {\n return {\n parent: parent_id,\n cells: [\n {\n title: (\n <>\n {' '}\n {component.hostname}\n \n ),\n },\n {\n title: ,\n },\n component.version,\n ],\n }\n }\n\n function handleCollapse(event, rowKey, isOpen) {\n const _rows = [...rows]\n /* Note from PF4:\n * Please do not use rowKey as row index for more complex tables.\n * Rather use some kind of identifier like ID passed with each row.\n */\n rows[rowKey].isOpen = isOpen\n setRows(_rows)\n }\n\n return (\n /* NOTE (felix): The mobile version of this expandable table looks kind of\n * broken, but the same applies to the example in the PF4 documentation:\n * https://www.patternfly.org/2020.04/documentation/react/components/table#compact-expandable\n *\n * I don't think this is something we have to attract now, but we should\n * keep this note as reference.\n */\n <>\n \n \n \n \n \n )\n}\n\nComponentTable.propTypes = {\n components: PropTypes.object.isRequired,\n}\n\nexport default ComponentTable\n","// Copyright 2021 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n PageSection,\n PageSectionVariants,\n Text,\n TextContent,\n Title,\n} from '@patternfly/react-core'\nimport { ServiceIcon } from '@patternfly/react-icons'\n\nimport { fetchComponents } from '../actions/component'\nimport { Fetching } from '../containers/Fetching'\nimport ComponentTable from '../containers/component/ComponentTable'\n\nfunction ComponentsPage({ components, isFetching, fetchComponents }) {\n useEffect(() => {\n document.title = 'Zuul Components'\n fetchComponents()\n }, [fetchComponents])\n\n // TODO (felix): Let the table handle the empty state and the fetching,\n // similar to the builds table.\n const content =\n components === undefined || isFetching ? (\n \n ) : Object.keys(components).length === 0 ? (\n \n \n \n It looks like no components are connected to ZooKeeper\n \n \n ) : (\n \n )\n\n return (\n <>\n \n \n Components\n \n This page shows all Zuul components and their current state.\n \n \n {content}\n \n \n )\n}\n\nComponentsPage.propTypes = {\n components: PropTypes.object.isRequired,\n isFetching: PropTypes.bool.isRequired,\n fetchComponents: PropTypes.func.isRequired,\n}\n\nfunction mapStateToProps(state) {\n return {\n components: state.component.components,\n isFetching: state.component.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchComponents }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ComponentsPage)\n","// Copyright 2020 BMW Group\n// Copyright 2023 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Button,\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n EmptyStateSecondaryActions,\n Spinner,\n Title,\n DropdownToggle,\n} from '@patternfly/react-core'\nimport {\n InfoCircleIcon,\n CodeBranchIcon,\n CodeIcon,\n CubeIcon,\n StreamIcon,\n FlagIcon,\n FilterIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n truncate,\n breakWord,\n cellWidth,\n expandable,\n} from '@patternfly/react-table'\n\nimport { IconProperty } from '../../Misc'\n\nfunction ConfigErrorTable({\n errors,\n fetching,\n onClearFilters,\n preferences,\n addFilter,\n}) {\n\n const [expandedRows, setExpandedRows] = React.useState([])\n const setRowExpanded = (idx, isExpanding = true) =>\n setExpandedRows(prevExpanded => {\n const otherExpandedRows = prevExpanded.filter(r => r !== idx)\n return isExpanding ?\n [...otherExpandedRows, idx] : otherExpandedRows\n })\n const isRowExpanded = idx => expandedRows.includes(idx)\n\n let zuulOutputClass = 'zuul-build-output'\n if (preferences.darkMode) {\n zuulOutputClass = 'zuul-build-output-dark'\n }\n\n const columns = [\n {\n title: } value=\"Project\" />,\n dataLabel: 'Project',\n cellTransforms: [breakWord],\n cellFormatters: [expandable],\n },\n {\n title: } value=\"Branch\" />,\n dataLabel: 'Branch',\n cellTransforms: [breakWord],\n },\n {\n title: } value=\"Severity\" />,\n dataLabel: 'Severity',\n },\n {\n title: } value=\"Name\" />,\n dataLabel: 'Name',\n },\n {\n title: } value=\"Message\" />,\n dataLabel: 'Message',\n transforms: [cellWidth(20)],\n cellTransforms: [truncate],\n },\n ]\n\n function createConfigErrorRow(rows, error) {\n return {\n id: rows.length,\n isOpen: isRowExpanded(rows.length),\n cells: [\n {\n title: error.source_context.project,\n filterCategory: 'project'\n },\n {\n title: error.source_context.branch,\n filterCategory: 'branch'\n },\n {\n title: error.severity,\n filterCategory: 'severity'\n },\n {\n title: error.name,\n filterCategory: 'name'\n },\n {\n title: error.short_error,\n },\n ],\n }\n }\n\n function createConfigErrorDetailRow(rows, error) {\n return {\n id: rows.length,\n parent: rows.length - 1,\n cells: [\n {\n title:
    {error.error}
    ,\n },\n ],\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n // The dataLabel property is used to show the column header in a list-like\n // format for smaller viewports. When we are fetching, we don't want the\n // fetching row to be prepended by a \"Job\" column header. The other column\n // headers are not relevant here since we only have a single cell in the\n // fetcihng row.\n columns[0].dataLabel = ''\n } else {\n rows = []\n errors.forEach(error => {\n rows.push(createConfigErrorRow(rows, error))\n rows.push(createConfigErrorDetailRow(rows, error))\n })\n }\n\n const actionResolver = (rowData) => {\n if (rowData.parent !== undefined) {\n return []\n }\n const cells = rowData.cells.filter(cell =>\n cell.filterCategory\n )\n return cells.map(cell => {\n return {\n title: `Filter by ${cell.filterCategory}: ${cell.title} `,\n onClick: () => {addFilter(cell.filterCategory, cell.title)}\n }\n })\n }\n\n const filterToggle = (filterProps) => (\n \n \n \n )\n\n return (\n <>\n {\n setRowExpanded(rowIndex, isOpen)\n }}\n actionsToggle={filterToggle}\n >\n \n \n \n\n {/* Show an empty state in case we don't have any errors but are also not\n fetching */}\n {!fetching && errors.length === 0 && (\n \n \n No errors found\n \n No errors match this filter criteria. Remove some filters or clear\n all to show results.\n \n \n \n \n \n )}\n \n )\n}\n\nConfigErrorTable.propTypes = {\n errors: PropTypes.array.isRequired,\n fetching: PropTypes.bool.isRequired,\n onClearFilters: PropTypes.func.isRequired,\n preferences: PropTypes.object.isRequired,\n addFilter: PropTypes.func.isRequired,\n}\n\nexport default connect((state) => ({\n preferences: state.preferences,\n}))(ConfigErrorTable)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2023 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { isEqual } from 'lodash'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Icon\n} from 'patternfly-react'\nimport {\n PageSection,\n PageSectionVariants,\n Pagination,\n} from '@patternfly/react-core'\n\nimport { fetchConfigErrors } from '../api'\nimport {\n makeQueryString,\n FilterToolbar,\n getFiltersFromUrl,\n writeFiltersToUrl,\n} from '../containers/FilterToolbar'\nimport ConfigErrorTable from '../containers/configerrors/ConfigErrorTable'\n\nclass ConfigErrorsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n preferences: PropTypes.object,\n tenantStatus: PropTypes.object,\n tenantStatusReady: PropTypes.bool,\n history: PropTypes.object,\n location: PropTypes.object,\n timezone: PropTypes.string,\n }\n\n constructor(props) {\n super()\n this.filterCategories = [\n {\n key: 'project',\n title: 'Project',\n placeholder: 'Filter by project...',\n type: 'search',\n },\n {\n key: 'branch',\n title: 'Branch',\n placeholder: 'Filter by branch...',\n type: 'search',\n },\n {\n key: 'severity',\n title: 'Severity',\n placeholder: 'Filter by severity...',\n type: 'search',\n },\n {\n key: 'name',\n title: 'Name',\n placeholder: 'Filter by name...',\n type: 'search',\n },\n ]\n\n const _filters = getFiltersFromUrl(props.location, this.filterCategories)\n const perPage = _filters.limit[0]\n ? parseInt(_filters.limit[0])\n : 50\n const currentPage = _filters.skip[0]\n ? Math.floor(parseInt(_filters.skip[0] / perPage)) + 1\n : 1\n this.state = {\n errors: [],\n fetching: false,\n filters: _filters,\n resultsPerPage: perPage,\n currentPage: currentPage,\n itemCount: null,\n }\n }\n\n componentDidMount () {\n document.title = 'Zuul Configuration Errors'\n if (this.props.tenant.name) {\n this.updateData(this.state.filters)\n }\n }\n\n componentDidUpdate (prevProps) {\n if (\n this.props.tenant.name !== prevProps.tenant.name ||\n this.props.timezone !== prevProps.timezone\n ) {\n this.updateData(this.state.filters)\n }\n if (this.state.itemCount === null && this.props.tenantStatusReady) {\n const newItemCount = this.getDefaultItemCount(this.state.filters)\n if (newItemCount !== null) {\n this.setState({\n itemCount: newItemCount\n })\n }\n }\n }\n\n updateData = (filters) => {\n // When building the filter query for the API we can't rely on the location\n // search parameters. Although, we've updated them in theu URL directly\n // they always have the same value in here (the values when the page was\n // first loaded). Most probably that's the case because the location is\n // passed as prop and doesn't change since the page itself wasn't\n // re-rendered.\n const { itemCount } = this.state\n const paginationOptions = {\n skip: filters.skip.length > 0 ? filters.skip : [0,],\n limit: filters.limit.length > 0 ? filters.limit : [50,]\n }\n const _filters = { ...filters, ...paginationOptions }\n const queryString = makeQueryString(_filters)\n this.setState({ fetching: true })\n // TODO (felix): What happens in case of a broken network connection? Is the\n // fetching shows infinitely or can we catch this and show an erro state in\n // the table instead?\n fetchConfigErrors(this.props.tenant.apiPrefix, queryString).then((response) => {\n // if we have already an itemCount for this query (ie we're scrolling backwards through results)\n // keep this value. Otherwise, check if we've got all the results.\n const finalItemCount = itemCount\n ? itemCount\n : (response.data.length < paginationOptions.limit[0]\n ? parseInt(paginationOptions.skip[0]) + response.data.length\n : this.getDefaultItemCount(filters))\n this.setState({\n errors: response.data,\n fetching: false,\n itemCount: finalItemCount,\n })\n })\n }\n\n filterInputValidation = (filterKey, filterValue) => {\n // Input value should not be empty for all cases\n if (!filterValue) {\n return {\n success: false,\n message: 'Input should not be empty'\n }\n }\n\n return {\n success: true\n }\n }\n\n getDefaultItemCount = (filters) => {\n const filterCount = Object.keys(filters)\n .filter((x) => (x !== 'skip' && x !== 'limit'))\n .map((x) => filters[x].length)\n .reduce((ret, v) => ret + v, 0)\n if (filterCount > 0) {\n return null\n }\n if (this.props.tenantStatusReady && this.props.tenantStatus.config_error_count > 0) {\n return this.props.tenantStatus.config_error_count\n }\n return null\n }\n\n addFilter = (category, value) => {\n // Used by the table search-add icon\n const prevFilters = this.state.filters[category]\n const newFilters = {\n ...this.state.filters,\n [category]: prevFilters.includes(value)\n ? prevFilters\n : [...prevFilters, value],\n }\n this.handleFilterChange(newFilters)\n }\n\n handleFilterChange = (newFilters) => {\n const { location, history } = this.props\n const { filters, itemCount } = this.state\n /*eslint no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }]*/\n const { 'skip': x1, 'limit': y1, ..._oldFilters } = filters\n const { 'skip': x2, 'limit': y2, ..._newFilters } = newFilters\n\n // If filters have changed, reinitialize skip\n const equalTest = isEqual(_oldFilters, _newFilters)\n const finalFilters = equalTest ? newFilters : { ...newFilters, skip: [0,] }\n\n // We must update the URL parameters before the state. Otherwise, the URL\n // will always be one filter selection behind the state. But as the URL\n // reflects our state this should be ok.\n writeFiltersToUrl(finalFilters, location, history)\n const newState = {\n filters: finalFilters,\n // if filters haven't changed besides skip or limit, keep our itemCount and currentPage\n itemCount: equalTest ? itemCount : this.getDefaultItemCount(_newFilters),\n }\n if (!equalTest) {\n newState.currentPage = 1\n }\n this.setState(\n newState,\n () => {\n this.updateData(finalFilters)\n })\n }\n\n handleClearFilters = () => {\n // Delete the values for each filter category\n const filters = this.filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n this.handleFilterChange(filters)\n }\n\n handlePerPageSelect = (event, perPage) => {\n const { filters } = this.state\n this.setState({ resultsPerPage: perPage })\n const newFilters = { ...filters, limit: [perPage,] }\n this.handleFilterChange(newFilters)\n }\n\n handleSetPage = (event, pageNumber) => {\n const { filters, resultsPerPage } = this.state\n this.setState({ currentPage: pageNumber })\n let offset = resultsPerPage * (pageNumber - 1)\n const newFilters = { ...filters, skip: [offset,] }\n this.handleFilterChange(newFilters)\n }\n\n render () {\n const { history } = this.props\n const { errors, fetching, filters, resultsPerPage, currentPage, itemCount } = this.state\n\n return (\n \n
    \n {/* Lint warning jsx-a11y/anchor-is-valid */}\n {/* eslint-disable-next-line */}\n {this.updateData(filters)}}>\n refresh  \n \n
    \n \n (\n \n \n {firstIndex} - {lastIndex}\n \n  \n of\n  \n {itemCount !== null ? itemCount : 'many'}\n \n )}\n itemCount={itemCount}\n perPage={resultsPerPage}\n page={currentPage}\n widgetId=\"pagination-menu\"\n onPerPageSelect={this.handlePerPageSelect}\n onSetPage={this.handleSetPage}\n isCompact\n />\n \n
    \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n preferences: state.preferences,\n tenantStatus: state.tenantStatus.tenant_status,\n tenantStatusReady: state.tenantStatus.ready,\n}))(ConfigErrorsPage)\n","// Copyright 2020 BMW Group\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n TextInput,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n Toolbar,\n ToolbarContent,\n ToolbarGroup,\n ToolbarItem,\n ToolbarToggleGroup,\n} from '@patternfly/react-core'\n\nimport { fetchPipelinesIfNeeded } from '../../actions/pipelines'\n\nfunction FreezeJobToolbar(props) {\n const { tenant, fetchPipelinesIfNeeded } = props\n\n useEffect(() => {\n fetchPipelinesIfNeeded(tenant)\n }, [fetchPipelinesIfNeeded, tenant])\n\n const tenantPipelines = props.pipelines.pipelines[tenant.name]\n const pipelines = tenantPipelines ? tenantPipelines.map(p => { return p.name }) : []\n\n const [isPipelineOpen, setIsPipelineOpen] = useState(false)\n const [currentPipeline, setCurrentPipeline] = useState(props.defaultPipeline || '')\n const [currentProject, setCurrentProject] = useState(props.defaultProject || '')\n const [currentBranch, setCurrentBranch] = useState(props.defaultBranch || '')\n const [currentJob, setCurrentJob] = useState(props.defaultJob || '')\n\n if (!currentPipeline && pipelines.length) {\n // We may have gotten a list of pipelines after we loaded the page\n setCurrentPipeline(pipelines[0])\n }\n\n function handlePipelineSelect(event) {\n setCurrentPipeline(event.target.innerText)\n setIsPipelineOpen(false)\n }\n\n function handlePipelineToggle(isOpen) {\n setIsPipelineOpen(isOpen)\n }\n\n function handleProjectChange(newValue) {\n setCurrentProject(newValue)\n }\n\n function handleBranchChange(newValue) {\n setCurrentBranch(newValue)\n }\n\n function handleJobChange(newValue) {\n setCurrentJob(newValue)\n }\n\n function handleInputSend(event) {\n // In case the event comes from a key press, only accept \"Enter\"\n if (event.key && event.key !== 'Enter') {\n return\n }\n\n // Ignore empty values\n if (!currentBranch || !currentProject || !currentJob) {\n return\n }\n\n // Notify the parent component about the filter change\n props.onChange(currentPipeline, currentProject, currentBranch, currentJob)\n }\n\n function renderFreezeJobToolbar () {\n return <>\n \n \n \n \n\n \n \n Pipeline: {currentPipeline}\n \n }\n isOpen={isPipelineOpen}\n dropdownItems={pipelines.map((pipeline) => (\n {pipeline}\n ))}\n style={{ width: '100%' }}\n menuAppendTo={document.body}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n >\n Freeze Job\n \n \n\n \n \n \n \n \n }\n\n return (\n
    \n {renderFreezeJobToolbar()}\n
    \n )\n}\n\nFreezeJobToolbar.propTypes = {\n fetchPipelinesIfNeeded: PropTypes.func,\n tenant: PropTypes.object,\n pipelines: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n defaultPipeline: PropTypes.string,\n defaultProject: PropTypes.string,\n defaultBranch: PropTypes.string,\n defaultJob: PropTypes.string,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n pipelines: state.pipelines,\n }\n}\n\nconst mapDispatchToProps = {\n fetchPipelinesIfNeeded\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FreezeJobToolbar)\n","// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport {\n PageSection,\n PageSectionVariants,\n Text,\n TextContent,\n} from '@patternfly/react-core'\nimport ReactJson from 'react-json-view'\n\nimport FreezeJobToolbar from '../containers/freezejob/FreezeJobToolbar'\nimport { makeFreezeJobKey, fetchFreezeJobIfNeeded } from '../actions/freezejob'\n\nfunction FreezeJobPage(props) {\n const { tenant, fetchFreezeJobIfNeeded } = props\n\n const [currentPipeline, setCurrentPipeline] = useState()\n const [currentProject, setCurrentProject] = useState()\n const [currentBranch, setCurrentBranch] = useState()\n const [currentJob, setCurrentJob] = useState()\n const history = useHistory()\n const location = useLocation()\n\n if (!currentBranch) {\n const urlParams = new URLSearchParams(location.search)\n const pipeline = urlParams.get('pipeline')\n const project = urlParams.get('project')\n const branch = urlParams.get('branch')\n const job = urlParams.get('job')\n if (pipeline && branch && project && job) {\n setCurrentPipeline(pipeline)\n setCurrentProject(project)\n setCurrentBranch(branch)\n setCurrentJob(job)\n }\n }\n\n useEffect(() => {\n document.title = 'Zuul Frozen Job'\n if (currentPipeline && currentProject && currentBranch && currentJob) {\n fetchFreezeJobIfNeeded(tenant, currentPipeline, currentProject,\n currentBranch, currentJob)\n }\n }, [fetchFreezeJobIfNeeded, tenant, currentPipeline, currentProject,\n currentBranch, currentJob])\n\n function onChange(pipeline, project, branch, job) {\n setCurrentPipeline(pipeline)\n setCurrentProject(project)\n setCurrentBranch(branch)\n setCurrentJob(job)\n\n const searchParams = new URLSearchParams('')\n searchParams.append('pipeline', pipeline)\n searchParams.append('project', project)\n searchParams.append('branch', branch)\n searchParams.append('job', job)\n history.push({\n pathname: location.pathname,\n search: searchParams.toString(),\n })\n\n if (currentPipeline && currentProject && currentBranch && currentJob) {\n fetchFreezeJobIfNeeded(tenant, currentPipeline, currentProject,\n currentBranch, currentJob)\n }\n }\n\n const tenantJobs = props.freezejob.freezeJobs[tenant.name]\n const freezeJobKey = makeFreezeJobKey(currentPipeline,\n currentProject,\n currentBranch,\n currentJob)\n const job = tenantJobs ? tenantJobs[freezeJobKey] : undefined\n function renderFrozenJob() {\n return (\n \n \n \n )\n }\n\n return (\n <>\n \n \n Freeze Job\n \n Freezing a job asks Zuul to combine all the\n project and job configuration\n stanzas for a job as if a change for a given\n project and branch were to be enqueued into\n a specific pipeline. The resulting job\n configuration is displayed below.\n \n \n \n {job && renderFrozenJob(job)}\n \n \n )\n}\n\nFreezeJobPage.propTypes = {\n fetchFreezeJobIfNeeded: PropTypes.func,\n tenant: PropTypes.object,\n freezejob: PropTypes.object,\n preferences: PropTypes.object,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n freezejob: state.freezejob,\n preferences: state.preferences,\n }\n}\n\nconst mapDispatchToProps = {\n fetchFreezeJobIfNeeded\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FreezeJobPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass SourceContext extends React.Component {\n static propTypes = {\n context: PropTypes.object.isRequired,\n showBranch: PropTypes.bool\n }\n\n render() {\n const { context, showBranch } = this.props\n return (\n \n {context.project}\n {showBranch && context.branch !== 'master' &&\n ' (' + context.branch + ')'}\n : {context.path}\n \n )\n }\n}\n\nexport default SourceContext\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n List,\n ListItem,\n TreeView\n} from '@patternfly/react-core'\n\nimport {\n ServerIcon,\n TagIcon\n} from '@patternfly/react-icons'\n\nclass Nodeset extends React.Component {\n static propTypes = {\n nodeset: PropTypes.object.isRequired\n }\n\n constructor(props) {\n super(props)\n\n this.state = { activeItems: {} }\n\n // eslint-disable-next-line no-unused-vars\n this.onSelect = (event, treeViewItem) => {\n this.setState({\n /* NOTE(ianw) 2021-08-13 : override this\n * from standard [treeViewItem] as we don't want\n * anything selectable.\n */\n activeItems: {}\n })\n }\n }\n\n render () {\n const { nodeset } = this.props\n\n const { activeItems } = this.state\n\n const nodes = []\n nodeset.nodes.forEach((node) => {\n nodes.push(\n {\n name: (\n \n }>{node.name}\n }>{node.label}\n ),\n id: node.name + node.label,\n }\n )\n })\n const groups = []\n nodeset.groups.forEach((group) => {\n let group_children = []\n group.nodes.forEach((child_node) => {\n group_children.push(\n {\n name: (\n \n }>{child_node}\n \n ),\n id: child_node\n }\n )})\n groups.push(\n {\n name: group.name,\n id: group.name,\n children: group_children\n }\n )\n })\n const options = [\n {\n name: 'Nodeset ' + nodeset.name,\n id: 'nodes',\n children: nodes\n },\n {\n name: 'Node Groups',\n id: 'groups',\n children: groups\n }\n ]\n\n return (\n \n \n \n )\n }\n}\n\nexport default Nodeset\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass Role extends React.Component {\n static propTypes = {\n role: PropTypes.object.isRequired\n }\n\n render() {\n const { role } = this.props\n return (\n \n {role.target_name} ({role.project_canonical_name})\n \n )\n }\n}\n\nexport default Role\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n\nclass JobProject extends React.Component {\n static propTypes = {\n project: PropTypes.object.isRequired\n }\n\n render() {\n const { project } = this.props\n return (\n \n {project.project_name}\n {project.override_branch && (\n ' ( override-branch: ' + project.override_branch + ')')}\n {project.override_checkout && (\n ' ( override-checkout: ' + project.override_checkout+ ')')}\n \n )\n }\n}\n\nexport default JobProject\n","// Copyright 2021 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n/*\n * NOTE(ianw) 2021-08-16\n * Some thoughts for future work:\n *\n * - Most descriptions are one line, but some a very long.\n * - Might be cool to have a fixed height and show a preview of the description\n * that fades out, but can the be clicked to be read fully.\n * - Perhaps Zuul could format this for us, as it looks like raw RST.\n * I think that would have to be a python/sphinx thing, can't practically\n * do it client side.\n */\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardExpandableContent,\n CardBody\n} from '@patternfly/react-core'\n\nclass JobDescriptionCard extends React.Component {\n static propTypes = {\n description: PropTypes.string\n }\n\n constructor(props) {\n super(props)\n\n this.state = {\n isExpanded: true\n }\n\n this.onExpand = () => {\n this.setState({\n isExpanded: !this.state.isExpanded\n })\n }\n }\n\n render() {\n if (!this.props.description) {\n return null\n }\n\n return (\n \n \n \n Job description\n \n \n \n {this.props.description}\n \n \n \n \n )\n }\n\n}\n\nexport default JobDescriptionCard\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport ReactJson from 'react-json-view'\nimport {\n DescriptionList,\n DescriptionListTerm,\n DescriptionListGroup,\n DescriptionListDescription,\n Label,\n List,\n ListItem,\n ListVariant,\n} from '@patternfly/react-core'\nimport {\n AnsibleTowerIcon,\n BanIcon,\n CatalogIcon,\n ClipboardCheckIcon,\n ClusterIcon,\n CodeBranchIcon,\n CodeIcon,\n ConnectedIcon,\n DisconnectedIcon,\n ExternalLinkAltIcon,\n FlagIcon,\n HistoryIcon,\n InfrastructureIcon,\n LockIcon,\n LockedIcon,\n OutlinedClockIcon,\n PackageIcon,\n RedoIcon,\n WrenchIcon\n} from '@patternfly/react-icons'\n\nimport SourceContext from '../SourceContext'\nimport Nodeset from './Nodeset'\nimport Role from './Role'\nimport JobProject from './JobProject'\nimport JobDescriptionCard from './JobDescriptionCard'\n\n\nfunction FileMatchers({ fileMatchers }) {\n return (\n \n \n {fileMatchers.regex}\n \n {\n fileMatchers.negate\n ? \n negated\n \n : ''\n }\n \n )\n}\n\nFileMatchers.propTypes = {\n fileMatchers: PropTypes.object.isRequired,\n}\n\nclass JobVariant extends React.Component {\n static propTypes = {\n parent: PropTypes.object,\n tenant: PropTypes.object,\n variant: PropTypes.object.isRequired,\n preferences: PropTypes.object,\n }\n\n renderStatus (variant) {\n const status = [{\n icon: variant.voting ? : ,\n name: variant.voting ? 'Voting' : 'Non-voting'\n }]\n if (variant.abstract) {\n status.push({\n icon: ,\n name: 'Abstract'\n })\n }\n if (variant.final) {\n status.push({\n icon: ,\n name: 'Final'\n })\n }\n if (variant.post_review) {\n status.push({\n icon: ,\n name: 'Post review'\n })\n }\n if (variant.protected) {\n status.push({\n icon: ,\n name: 'Protected'\n })\n }\n\n return (\n \n {status.map((item, idx) => (\n {item.name}\n ))}\n \n )\n }\n\n render () {\n const { tenant, variant } = this.props\n const rows = []\n\n const jobInfos = [\n 'source_context', 'builds', 'status',\n 'parent', 'attempts', 'timeout', 'semaphores',\n 'nodeset', 'nodeset_alternatives', 'variables',\n 'override_checkout',\n ]\n jobInfos.forEach(key => {\n let label = key\n let nice_label = key\n let value = variant[key]\n\n if (label === 'source_context' && value) {\n value = (\n \n )\n nice_label = ( Defined at)\n }\n if (label === 'builds') {\n value = (\n Job flags)\n }\n\n if (!value) {\n return\n }\n\n if (label === 'attempts') {\n nice_label = ( Retry attempts)\n }\n\n if (label === 'timeout') {\n value = ({value} seconds)\n nice_label = ( Timeout)\n }\n\n if (label === 'semaphores') {\n if (value.length === 0) {\n value = (none)\n } else {\n value = (\n \n \n \n )\n }\n nice_label = ( Semaphores)\n }\n\n if (label === 'nodeset') {\n value = (\n \n )\n nice_label = ( Required nodes)\n }\n if (label === 'nodeset_alternatives') {\n value = value.map((alt, idx) => {\n return (<>\n {(idx > 0 ? or:<>)}\n \n )\n })\n nice_label = ( Required nodes)\n }\n if (label === 'parent') {\n value = (\n \n  {value}\n \n )\n nice_label = ( Parent)\n }\n if (label === 'variables') {\n value = (\n \n \n \n )\n nice_label = ( Job variables)\n }\n\n if (label === 'description') {\n value = (\n
    \n {value}\n
    \n )\n nice_label = ( Description)\n }\n\n rows.push({label: nice_label, value: value})\n\n })\n const jobInfosList = [\n 'required_projects', 'dependencies', 'files', 'irrelevant_files', 'roles'\n ]\n jobInfosList.forEach(key => {\n let label = key\n let nice_label = key\n let values = variant[key]\n\n if (values.length === 0) {\n return\n }\n const items = (\n \n {values.map((value, idx) => {\n let item\n if (label === 'required_projects') {\n nice_label = 'Required Projects'\n item = \n } else if (label === 'roles') {\n nice_label = ( Uses roles from)\n item = \n } else if (label === 'dependencies') {\n nice_label = ( Job dependencies)\n if (value['soft']) {\n item = value['name'] + ' (soft)'\n } else {\n item = value['name']\n }\n } else if (label === 'irrelevant_files') {\n nice_label = ( Irrelevant files matchers)\n item = \n } else if (label === 'files') {\n nice_label = (Files matchers)\n item = \n } else {\n item = value\n }\n return (\n \n {item}\n \n )\n })}\n \n )\n rows.push({label: nice_label, value: items})\n })\n return (\n \n \n \n {rows.map((item, idx) => (\n \n \n {item.label}\n \n \n {item.value}\n \n \n ))}\n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n preferences: state.preferences,\n}))(JobVariant)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Tab,\n Tabs,\n TabTitleText,\n Title\n} from '@patternfly/react-core'\n\nimport JobVariant from './JobVariant'\n\nclass Job extends React.Component {\n static propTypes = {\n job: PropTypes.array.isRequired,\n }\n\n state = {\n activeTabeKey: 0\n }\n\n renderVariantTitle (variant) {\n let title = variant.variant_description\n if (!title) {\n title = ''\n /* NOTE(ianw) 2021-08-13 : it seems like if this is only defined\n for one branch we don't get the branches. This might be a\n bug. In this case, use the source context branch (i.e. where\n it's defined */\n if (variant.branches.length === 0) {\n title = variant.source_context.branch\n } else {\n variant.branches.forEach((item) => {\n if (title) {\n title += ', '\n }\n title += item\n })\n }\n }\n return title\n }\n\n handleTabClick ( tabIndex ) {\n this.setState({\n activeTabKey: tabIndex\n })\n }\n\n render () {\n const { job } = this.props\n const { activeTabKey } = this.state\n\n return (\n \n \n Details for job <span style={{color: 'var(--pf-global--primary-color--100)'}}>{job[0].name}</span>\n \n this.handleTabClick(tabIndex)}\n isBox>\n {job.map((variant, idx) => (\n {this.renderVariantTitle(variant)}}>\n \n \n ))}\n \n \n )\n }\n}\n\nexport default Job\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport Job from '../containers/job/Job'\nimport { fetchJobIfNeeded } from '../actions/job'\n\n\nclass JobPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func,\n preferences: PropTypes.object,\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchJobIfNeeded(\n this.props.tenant, this.props.match.params.jobName, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Job | ' + this.props.match.params.jobName\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name ||\n this.props.match.params.jobName !== prevProps.match.params.jobName) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const tenantJobs = remoteData.jobs[this.props.tenant.name]\n const jobName = this.props.match.params.jobName\n return (\n \n {tenantJobs && tenantJobs[jobName] && }\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.job,\n preferences: state.preferences,\n}))(JobPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n Checkbox,\n Badge,\n Form,\n FormGroup,\n FormControl,\n Icon,\n TreeView\n} from 'patternfly-react'\n\n\nclass JobsList extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n jobs: PropTypes.array,\n }\n\n state = {\n filter: null,\n flatten: false,\n }\n\n handleKeyPress = (e) => {\n if (e.charCode === 13) {\n this.setState({filter: e.target.value})\n e.preventDefault()\n e.target.blur()\n }\n }\n\n render () {\n const { jobs } = this.props\n const { filter, flatten } = this.state\n\n const linkPrefix = this.props.tenant.linkPrefix + '/job/'\n\n // job index map\n const jobMap = {}\n // nodes contains the tree data\n const nodes = []\n // visited contains individual node\n const visited = {}\n // createNode returns the actual node needed by the tree view component\n const createNode = (job, extra) => ({\n text: (\n \n {job.name}\n {extra && ( ({extra}))}\n {job.description && (\n {job.description}\n )}\n {job.tags && job.tags.map((tag, idx) => (\n \n {tag}\n ))}\n ),\n icon: 'fa fa-cube',\n state: {\n expanded: true,\n },\n })\n // getNode returns the tree node and visit each parents\n const getNode = function (job, filtered) {\n if (!visited[job.name]) {\n // Collect parents\n let parents = []\n if (job.variants) {\n for (let jobVariant of job.variants) {\n if (jobVariant.parent &&\n parents.indexOf(jobVariant.parent) === -1) {\n parents.push(jobVariant.parent)\n }\n }\n }\n visited[job.name] = createNode(job, null)\n visited[job.name].parents = parents\n visited[job.name].filtered = filtered\n // Visit parent recursively\n if (!flatten) {\n for (let parent of parents) {\n if (jobMap[parent]) {\n getNode(jobMap[parent], filtered)\n }\n }\n }\n }\n return visited[job.name]\n }\n // index job list\n for (let job of jobs) {\n jobMap[job.name] = job\n }\n // filter job\n let filtered = false\n if (filter) {\n filtered = true\n let filters = filter.replace(/ +/g, ',').split(',')\n for (let job of jobs) {\n filters.forEach(jobFilter => {\n if (jobFilter && (\n (job.name.indexOf(jobFilter) !== -1) ||\n (job.description && job.description.indexOf(jobFilter) !== -1))) {\n getNode(job, !filtered)\n }\n })\n }\n }\n // process job list\n for (let job of jobs) {\n const jobNode = getNode(job, filtered)\n if (!jobNode.filtered) {\n let attached = false\n if (!flatten) {\n // add tree node to each parent and expand the parent\n for (let parent of jobNode.parents) {\n const parentNode = visited[parent]\n if (!parentNode) {\n console.log(\n 'Job ', job.name, ' parent ', parent, ' does not exist!')\n continue\n }\n if (!parentNode.nodes) {\n parentNode.nodes = []\n }\n if (attached) {\n // We need to create a duplicate node to satisfy TreeView constrains for multi parent\n parentNode.nodes.push(createNode(job, 'branched'))\n } else {\n parentNode.nodes.push(jobNode)\n }\n attached = true\n }\n }\n // else add node at the tree root\n if (!attached || jobNode.parents.length === 0) {\n nodes.push(jobNode)\n }\n }\n }\n return (\n
    \n
    \n \n this.filter = i}\n onKeyPress={this.handleKeyPress} />\n {filter && (\n \n {this.setState({filter: ''})\n this.filter.value = ''}}\n style={{cursor: 'pointer', zIndex: 10, pointerEvents: 'auto'}}\n >\n \n  \n \n \n )}\n \n \n   Flatten list  \n this.setState({flatten: e.target.checked})} />\n \n
    \n \n
    \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n}))(JobsList)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchJobsIfNeeded } from '../actions/jobs'\nimport { Fetchable } from '../containers/Fetching'\nimport Jobs from '../containers/jobs/Jobs'\n\n\nclass JobsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func,\n preferences: PropTypes.object,\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchJobsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Jobs'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n\n const jobs = remoteData.jobs[this.props.tenant.name]\n return (\n \n \n \n \n {jobs && jobs.length > 0 &&\n }\n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.jobs,\n preferences: state.preferences,\n}))(JobsPage)\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport {\n Button,\n DescriptionList,\n DescriptionListTerm,\n DescriptionListGroup,\n DescriptionListDescription,\n Modal,\n ModalVariant,\n} from '@patternfly/react-core'\nimport PropTypes from 'prop-types'\nimport { addNotification, addApiError } from '../../actions/notifications'\nimport { buildImage } from '../../api'\n\nfunction ProviderDetail(props) {\n const {image} = props\n const [showBuildModal, setShowBuildModal] = useState(false)\n const tenant = useSelector((state) => state.tenant)\n const user = useSelector((state) => state.user)\n const dispatch = useDispatch()\n\n function renderBuildModal() {\n return (\n { setShowBuildModal(false) }}\n actions={[\n ,\n ,\n ]}>\n

    Please confirm that you want to trigger a build of this image.

    \n \n )\n }\n\n return (\n <>\n \n \n \n Name\n \n \n {image.name}\n \n \n \n \n Canonical Name\n \n \n {image.canonical_name}\n \n \n \n \n Type\n \n \n {image.type}\n \n \n \n\n {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) &&\n \n }\n {renderBuildModal()}\n \n )\n}\n\nProviderDetail.propTypes = {\n image: PropTypes.object.isRequired,\n}\n\nexport default ProviderDetail\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n EmptyState,\n EmptyStateBody,\n Spinner,\n Title,\n Modal,\n ModalVariant,\n} from '@patternfly/react-core'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { fetchImages } from '../../actions/images'\nimport { fetchProviders } from '../../actions/providers'\nimport { addNotification, addApiError } from '../../actions/notifications'\nimport { deleteImageUpload } from '../../api'\n\nfunction ImageUploadTable(props) {\n const { build, uploads, fetching } = props\n const [showDeleteUploadModal, setShowDeleteUploadModal] = useState(false)\n const [pendingDeleteRow, setPendingDeleteRow] = useState(null)\n const tenant = useSelector((state) => state.tenant)\n const user = useSelector((state) => state.user)\n const dispatch = useDispatch()\n\n const columns = [\n {\n title: 'UUID',\n dataLabel: 'UUID',\n },\n {\n title: 'Timestamp',\n dataLabel: 'Timestamp',\n },\n {\n title: 'Validated',\n dataLabel: 'Validated',\n },\n {\n title: 'Endpoint',\n dataLabel: 'Endpoint',\n },\n {\n title: 'External ID',\n dataLabel: 'External ID',\n },\n ]\n\n function createImageUploadRow(upload) {\n return {\n _uuid: upload.uuid,\n canDelete: build.build_tenant,\n cells: [\n {\n title: upload.uuid\n },\n {\n title: upload.timestamp\n },\n {\n title: upload.validated.toString()\n },\n {\n title: upload.endpoint_name\n },\n {\n title: upload.external_id\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const actionResolver = (rowData) => {\n if (rowData.canDelete &&\n user.isAdmin &&\n user.scope.indexOf(tenant.name) !== -1) {\n return [\n {\n title: 'Delete upload',\n onClick: () => {\n setPendingDeleteRow(rowData)\n setShowDeleteUploadModal(true)\n }\n },\n ]\n }\n return []\n }\n\n function renderDeleteUploadModal() {\n const title = 'Delete image upload'\n return (\n { setShowDeleteUploadModal(false) }}\n actions={[\n ,\n ,\n ]}>\n

    \n Please confirm that you want to delete this image upload.\n

    \n \n )\n }\n\n const haveUploads = uploads && uploads.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveUploads) {\n rows = uploads.map((upload) => createImageUploadRow(upload))\n }\n }\n\n return (\n <>\n \n Image Uploads\n \n \n \n \n \n\n {/* Show an empty state in case we don't have any build artifacts but are also not\n fetching */}\n {!fetching && !haveUploads && (\n \n No image uploads found\n \n Nothing to display.\n \n \n )}\n {renderDeleteUploadModal()}\n \n )\n}\n\nImageUploadTable.propTypes = {\n build: PropTypes.object,\n uploads: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n}\n\nexport default ImageUploadTable\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n EmptyState,\n EmptyStateBody,\n Spinner,\n Title,\n Modal,\n ModalVariant,\n} from '@patternfly/react-core'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n expandable,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\nimport ImageUploadTable from './ImageUploadTable'\nimport { fetchImages } from '../../actions/images'\nimport { fetchProviders } from '../../actions/providers'\nimport { addNotification, addApiError } from '../../actions/notifications'\nimport { deleteImageBuildArtifact } from '../../api'\n\nfunction ImageBuildTable(props) {\n const { buildArtifacts, fetching } = props\n const [collapsedRows, setCollapsedRows] = useState([])\n const [showDeleteImageModal, setShowDeleteImageModal] = useState(false)\n const [pendingDeleteRow, setPendingDeleteRow] = useState(null)\n const setRowCollapsed = (idx, isCollapsing = true) =>\n setCollapsedRows(prevCollapsed => {\n const otherCollapsedRows = prevCollapsed.filter(r => r !== idx)\n return isCollapsing ?\n [...otherCollapsedRows, idx] : otherCollapsedRows\n })\n const isRowCollapsed = idx => collapsedRows.includes(idx)\n const tenant = useSelector((state) => state.tenant)\n const user = useSelector((state) => state.user)\n const dispatch = useDispatch()\n\n const columns = [\n {\n title: 'UUID',\n dataLabel: 'UUID',\n cellFormatters: [expandable],\n },\n {\n title: 'Timestamp',\n dataLabel: 'Timestamp',\n },\n {\n title: 'Validated',\n dataLabel: 'Validated',\n },\n {\n title: 'Build',\n dataLabel: 'Build',\n },\n ]\n\n function createImageBuildRow(rows, build) {\n // Only link to the build if it is in this tenant\n const buildUUID = build.build_tenant?\n \n {build.build_uuid}\n \n :\n build.build_uuid\n return {\n _uuid: build.uuid,\n id: rows.length,\n isOpen: !isRowCollapsed(rows.length),\n canDelete: build.build_tenant,\n cells: [\n {\n title: build.uuid\n },\n {\n title: build.timestamp\n },\n {\n title: build.validated.toString()\n },\n {\n title: buildUUID\n },\n ]\n }\n }\n\n function createImageUploadRow(rows, parent, build) {\n return {\n id: rows.length,\n parent: parent.id,\n cells: [\n {\n title: \n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveBuildArtifacts = buildArtifacts && buildArtifacts.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveBuildArtifacts) {\n rows = []\n buildArtifacts.forEach(build => {\n let buildRow = createImageBuildRow(rows, build)\n rows.push(buildRow)\n rows.push(createImageUploadRow(rows, buildRow, build))\n })\n }\n }\n\n const actionResolver = (rowData) => {\n if (rowData.parent === undefined &&\n rowData.canDelete &&\n user.isAdmin &&\n user.scope.indexOf(tenant.name) !== -1) {\n return [\n {\n title: 'Delete build',\n onClick: () => {\n setPendingDeleteRow(rowData)\n setShowDeleteImageModal(true)\n }\n },\n ]\n }\n return []\n }\n\n function renderDeleteImageModal() {\n const title = 'Delete image build'\n return (\n { setShowDeleteImageModal(false) }}\n actions={[\n ,\n ,\n ]}>\n

    \n Please confirm that you want to delete this image\n and all of its uploads.\n

    \n \n )\n }\n\n return (\n <>\n \n Image Build Artifacts\n \n {\n setRowCollapsed(rowIndex, !isOpen)\n }}\n >\n \n \n \n\n {/* Show an empty state in case we don't have any build artifacts but are also not\n fetching */}\n {!fetching && !haveBuildArtifacts && (\n \n No build artifacts found\n \n Nothing to display.\n \n \n )}\n {renderDeleteImageModal()}\n \n )\n}\n\nImageBuildTable.propTypes = {\n buildArtifacts: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n}\n\nexport default ImageBuildTable\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useMemo } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport {\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport PropTypes from 'prop-types'\nimport { fetchImages, fetchImagesIfNeeded } from '../actions/images'\nimport ImageDetail from '../containers/provider/ImageDetail'\nimport ImageBuildTable from '../containers/provider/ImageBuildTable'\nimport { ReloadButton } from '../containers/Fetching'\n\nfunction ImagePage(props) {\n const imageName = props.match.params.imageName\n const tenant = useSelector((state) => state.tenant)\n const images = useSelector((state) => state.images.images[tenant.name])\n const isFetching = useSelector((state) => state.status.isFetching)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const dispatch = useDispatch()\n\n const image = useMemo(() =>\n images?images.find((e) => e.name === imageName):null,\n [images, imageName])\n\n useEffect(() => {\n document.title = 'Zuul Image'\n dispatch(fetchImagesIfNeeded(tenant))\n }, [tenant, dispatch])\n\n return (\n <>\n \n \n \n \n \n {dispatch(fetchImages(tenant))}}\n />\n \n \n \n Image {imageName}\n \n {image &&\n <>\n \n {image.build_artifacts &&\n \n }\n \n }\n \n \n )\n}\n\nImagePage.propTypes = {\n match: PropTypes.object.isRequired,\n}\n\nexport default withRouter(ImagePage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateBody,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\n\nfunction ImageTable(props) {\n const { images, fetching, linkPrefix } = props\n const columns = [\n {\n title: 'Name',\n dataLabel: 'Name',\n },\n ]\n\n function createImageRow(image) {\n return {\n cells: [\n {\n title: (\n {image.name}\n ),\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveImages = images && images.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveImages) {\n rows = images.map((image) => createImageRow(image))\n }\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any images but are also not\n fetching */}\n {!fetching && !haveImages && (\n \n No images found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nImageTable.propTypes = {\n images: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n linkPrefix: PropTypes.string,\n}\n\nexport default ImageTable\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport {\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport { fetchImages, fetchImagesIfNeeded } from '../actions/images'\nimport ImageTable from '../containers/provider/ImageTable'\nimport { ReloadButton } from '../containers/Fetching'\n\nfunction ImagesPage() {\n const tenant = useSelector((state) => state.tenant)\n const images = useSelector((state) => state.images.images[tenant.name])\n const isFetching = useSelector((state) => state.status.isFetching)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const dispatch = useDispatch()\n\n useEffect(() => {\n document.title = 'Zuul Images'\n dispatch(fetchImagesIfNeeded(tenant))\n }, [tenant, dispatch])\n\n console.log(images)\n\n return (\n <>\n \n \n \n \n \n {dispatch(fetchImages(tenant))}}\n />\n \n \n \n Images\n \n \n \n \n )\n}\n\nexport default withRouter(ImagesPage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateBody,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\n\nfunction FlavorTable(props) {\n const { flavors, fetching } = props\n const columns = [\n {\n title: 'Name',\n dataLabel: 'Name',\n },\n ]\n\n function createFlavorRow(flavor) {\n return {\n cells: [\n {\n title: flavor.name,\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveFlavors = flavors && flavors.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveFlavors) {\n rows = flavors.map((flavor) => createFlavorRow(flavor))\n }\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any flavors but are also not\n fetching */}\n {!fetching && !haveFlavors && (\n \n No flavors found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nFlavorTable.propTypes = {\n flavors: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n}\n\nexport default FlavorTable\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport {\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport { fetchFlavors, fetchFlavorsIfNeeded } from '../actions/flavors'\nimport FlavorTable from '../containers/provider/FlavorTable'\nimport { ReloadButton } from '../containers/Fetching'\n\nfunction FlavorsPage() {\n const tenant = useSelector((state) => state.tenant)\n const flavors = useSelector((state) => state.flavors.flavors[tenant.name])\n const isFetching = useSelector((state) => state.status.isFetching)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const dispatch = useDispatch()\n\n useEffect(() => {\n document.title = 'Zuul Flavors'\n dispatch(fetchFlavorsIfNeeded(tenant))\n }, [tenant, dispatch])\n\n console.log(flavors)\n\n return (\n <>\n \n \n \n \n \n {dispatch(fetchFlavors(tenant))}}\n />\n \n \n \n Flavors\n \n \n \n \n )\n}\n\nexport default withRouter(FlavorsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\nimport {\n Table,\n TableVariant,\n TableHeader,\n TableBody,\n} from '@patternfly/react-table'\nimport { TagIcon } from '@patternfly/react-icons'\nimport { IconProperty } from '../Misc'\n\nimport { fetchLabelsIfNeeded } from '../actions/labels'\nimport { Fetchable, Fetching } from '../containers/Fetching'\n\n\nclass LabelsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData (force) {\n this.props.dispatch(fetchLabelsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Labels'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const labels = remoteData.labels[this.props.tenant.name]\n\n if (!labels) {\n return \n }\n\n const columns = [\n {\n title: (\n } value=\"Name\" />\n ),\n dataLabel: 'name'\n }\n ]\n let rows = []\n labels.forEach((label) => {\n let r = {\n cells: [\n {title: label.name, props: {column: 'Name'}}\n ],\n }\n rows.push(r)\n })\n return (\n \n \n \n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.labels,\n}))(LabelsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n Table,\n TableVariant,\n TableHeader,\n TableBody,\n} from '@patternfly/react-table'\nimport * as moment from 'moment'\nimport {\n PageSection,\n PageSectionVariants,\n ClipboardCopy,\n} from '@patternfly/react-core'\nimport {\n BuildIcon,\n ClusterIcon,\n ConnectedIcon,\n OutlinedCalendarAltIcon,\n TagIcon,\n RunningIcon,\n PencilAltIcon,\n ZoneIcon,\n} from '@patternfly/react-icons'\nimport { IconProperty } from '../Misc'\n\nimport { fetchNodesIfNeeded } from '../actions/nodes'\nimport { Fetchable } from '../containers/Fetching'\n\n\nclass NodesPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchNodesIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Nodes'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const nodes = remoteData.nodes\n\n const columns = [\n {\n title: (\n } value=\"ID\" />\n ),\n dataLabel: 'id',\n },\n {\n title: (\n } value=\"Labels\" />\n ),\n dataLabel: 'labels',\n },\n {\n title: (\n } value=\"Connection\" />\n ),\n dataLabel: 'connection',\n },\n {\n title: (\n } value=\"Server\" />\n ),\n dataLabel: 'server',\n },\n {\n title: (\n } value=\"Provider\" />\n ),\n dataLabel: 'provider',\n },\n {\n title: (\n } value=\"State\" />\n ),\n dataLabel: 'state',\n },\n {\n title: (\n } value=\"Age\" />\n ),\n dataLabel: 'age',\n },\n {\n title: (\n } value=\"Comment\" />\n ),\n dataLabel: 'comment',\n }\n ]\n let rows = []\n nodes.forEach((node) => {\n const extid = typeof(node.external_id) === 'string'?\n node.external_id : JSON.stringify(node.external_id)\n let r = [\n {title: node.id, props: {column: 'ID'}},\n {title: node.type.join(','), props: {column: 'Label' }},\n {title: node.connection_type, props: {column: 'Connection'}},\n {title: {extid}, props: {column: 'Server'}},\n {title: node.provider, props: {column: 'Provider'}},\n {title: node.state, props: {column: 'State'}},\n {title: moment.unix(node.state_time).fromNow(), props: {column: 'Age'}},\n {title: node.comment, props: {column: 'Comment'}},\n ]\n rows.push({cells: r})\n })\n return (\n \n \n \n \n\n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.nodes,\n}))(NodesPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport SwaggerUi from 'swagger-ui'\nimport 'swagger-ui/dist/swagger-ui.css'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchOpenApiIfNeeded } from '../actions/openapi'\n\n\nclass OpenApiPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func,\n preferences: PropTypes.object,\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchOpenApiIfNeeded(force))\n }\n\n componentDidMount () {\n document.title = 'Zuul API'\n this.updateData()\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.remoteData.openapi &&\n this.props.remoteData.openapi !== prevProps.remoteData.openapi) {\n SwaggerUi({\n dom_id: '#swaggerContainer',\n spec: this.props.remoteData.openapi,\n presets: [SwaggerUi.presets.apis]\n })\n }\n }\n\n render() {\n return (\n \n
    \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.openapi,\n preferences: state.preferences,\n}))(OpenApiPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\n\nfunction ProjectVariant(props) {\n const { tenant, variant } = props\n const rows = []\n\n if (variant.merge_mode) {\n rows.push({label: 'Merge mode', value: variant.merge_mode})\n }\n\n if (variant.templates.length > 0) {\n const templateList = (\n
      \n {variant.templates.map((item, idx) => (\n
    • {item}
    • ))}\n
    \n )\n rows.push({label: 'Templates', value: templateList})\n }\n\n variant.pipelines.forEach(pipeline => {\n // TODO: either adds job link anchor to load the right variant\n // and/or show the job variant config in a modal?\n const jobList = (\n \n {pipeline.queue_name && (\n

    Queue: {pipeline.queue_name}

    )}\n
      \n {pipeline.jobs.map((item, idx) => (\n
    • \n \n {item[0].name}\n \n
    • \n ))}\n
    \n
    \n )\n rows.push({label: pipeline.name + ' jobs', value: jobList})\n })\n\n return (\n
    \n \n \n {rows.map(item => (\n \n \n \n \n ))}\n \n
    {item.label}{item.value}
    \n
    \n )\n}\n\nProjectVariant.propTypes = {\n tenant: PropTypes.object,\n variant: PropTypes.object.isRequired,\n preferences: PropTypes.object,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n preferences: state.preferences,\n }\n}\n\nexport default connect(mapStateToProps)(ProjectVariant)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Tabs,\n Tab,\n} from '@patternfly/react-core'\n\nimport ProjectVariant from './ProjectVariant'\n\n\nfunction Project(props) {\n const [variantIdx, setVariantIdx] = useState(0)\n const { project } = props\n\n function renderVariantTitle (variant) {\n let title = variant.source_context.project === project.name ?\n variant.source_context.branch : variant.source_context.project\n return title\n }\n\n return (\n \n setVariantIdx(tabIndex)}\n isBox>\n {project.configs.map((variant, idx) => (\n \n \n \n ))}\n \n \n )\n}\n\nProject.propTypes = {\n project: PropTypes.object.isRequired,\n}\n\nexport default Project\n","// Copyright 2020 BMW Group\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n Button,\n TextInput,\n Dropdown,\n DropdownItem,\n DropdownPosition,\n DropdownToggle,\n Toolbar,\n ToolbarContent,\n ToolbarGroup,\n ToolbarItem,\n ToolbarToggleGroup,\n} from '@patternfly/react-core'\n\n\nfunction JobGraphToolbar(props) {\n const pipelineSet = new Set()\n props.project.configs.forEach((config) => {\n config.pipelines.forEach((pipeline) => {\n pipelineSet.add(pipeline.name)\n })\n })\n const pipelines = Array.from(pipelineSet)\n\n const [isPipelineOpen, setIsPipelineOpen] = useState(false)\n const [currentPipeline, setCurrentPipeline] = useState(props.defaultPipeline || pipelines[0])\n const [currentBranch, setCurrentBranch] = useState(props.defaultBranch || '')\n\n function handlePipelineSelect(event) {\n setCurrentPipeline(event.target.innerText)\n setIsPipelineOpen(false)\n }\n\n function handlePipelineToggle(isOpen) {\n setIsPipelineOpen(isOpen)\n }\n\n function handleBranchChange(newValue) {\n setCurrentBranch(newValue)\n }\n\n function handleInputSend(event) {\n // In case the event comes from a key press, only accept \"Enter\"\n if (event.key && event.key !== 'Enter') {\n return\n }\n\n // Ignore empty values\n if (!currentBranch) {\n return\n }\n\n // Clear the input field\n setCurrentBranch('')\n // Notify the parent component about the filter change\n props.onChange(currentPipeline, currentBranch)\n }\n\n function renderJobGraphToolbar () {\n return <>\n \n \n \n \n\n \n \n Pipeline: {currentPipeline}\n \n }\n isOpen={isPipelineOpen}\n dropdownItems={pipelines.map((pipeline) => (\n {pipeline}\n ))}\n style={{ width: '100%' }}\n menuAppendTo={document.body}\n />\n \n\n \n handleInputSend(event)}\n />\n \n\n \n handleInputSend(event)}\n >\n View Job Graph\n \n \n\n \n \n \n \n \n }\n\n return (\n
    \n {renderJobGraphToolbar()}\n
    \n )\n}\n\nJobGraphToolbar.propTypes = {\n project: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n defaultBranch: PropTypes.string,\n defaultPipeline: PropTypes.string,\n}\n\nexport default JobGraphToolbar\n","// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState, useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport * as d3 from 'd3'\nimport { useHistory } from 'react-router-dom'\n\nimport { makeJobGraphKey, fetchJobGraphIfNeeded } from '../../actions/jobgraph'\nimport { graphviz } from 'd3-graphviz'\n\nfunction makeDot(tenant, pipeline, project, branch, jobGraph, dark) {\n let ret = 'digraph job_graph {\\n'\n ret += ' bgcolor=\"transparent\"\\n'\n ret += ' rankdir=LR;\\n'\n if (dark) {\n ret += ' node [shape=box color=\"white\" fontcolor=\"white\"];\\n'\n } else {\n ret += ' node [shape=box];\\n'\n }\n jobGraph.forEach((job) => {\n const searchParams = new URLSearchParams('')\n searchParams.append('pipeline', pipeline)\n searchParams.append('project', project.name)\n searchParams.append('job', job.name)\n searchParams.append('branch', branch)\n // This will appear in the DOM as an \"a href=\" but we will\n // manipulate the DOM later to add an onClick callback to make\n // this an internal link.\n const url = (tenant.linkPrefix +\n '/freeze-job?' + searchParams.toString())\n // Escape ampersands to get it through graphviz and d3; these will\n // appear unescaped in the DOM.\n const escaped_url = url.replace(/&/g, '&')\n ret += ' \"' + job.name + '\" [URL=\"' + escaped_url + '\"];\\n'\n if (job.dependencies.length) {\n job.dependencies.forEach((dep) => {\n let soft = ' [dir=back]'\n if (dark) {\n soft = ' [dir=back color=\"white\" fontcolor=\"white\"]'\n }\n if (dep.soft) {\n if (dark) {\n soft = ' [style=dashed dir=back color=\"white\" fontcolor=\"white\"]'\n } else {\n soft = ' [style=dashed dir=back]'\n }\n }\n ret += ' \"' + dep.name + '\" -> \"' + job.name + '\"' + soft + ';\\n'\n })\n }\n })\n ret += '}\\n'\n return ret\n}\n\nfunction GraphViz(props) {\n const history = useHistory()\n\n useEffect(() => {\n const gv = graphviz('#graphviz')\n .options({\n fit: false,\n zoom: true,\n tweenPaths: false,\n scale: 0.75,\n }).renderDot(props.dot)\n\n // Fix up the initial values of the internal transform data;\n // without this the first time we pan the graph jumps.\n const element = d3.select('.zuul-job-graph > svg')\n const transform = element[0][0].firstElementChild.attributes.transform.value\n const match = transform.match(/translate\\(\\d+,(\\d+)\\).*/)\n if (match && match.length > 0) {\n const val = parseInt(match[1])\n gv._translation.y = val\n gv._originalTransform.y = val\n }\n\n // Disable scroll wheel zooming because it interferes with window\n // scrolling\n gv.zoomSelection().on('wheel.zoom', null)\n\n // Mutate the links to be internal links\n d3.select('.zuul-job-graph').selectAll('.node a').on('click', event => {\n d3.event.preventDefault()\n history.push(event.attributes['xlink:href'])\n })\n }, [props.dot, history])\n\n return (\n
    \n )\n}\n\nGraphViz.propTypes = {\n dot: PropTypes.string.isRequired,\n}\n\nfunction JobGraphDisplay(props) {\n const [dot, setDot] = useState()\n const {fetchJobGraphIfNeeded, tenant, project, pipeline, branch, preferences } = props\n\n useEffect(() => {\n fetchJobGraphIfNeeded(tenant, project.name, pipeline, branch)\n }, [fetchJobGraphIfNeeded, tenant, project, pipeline, branch])\n\n const tenantJobGraph = props.jobgraph.jobGraphs[tenant.name]\n const jobGraphKey = makeJobGraphKey(props.project.name,\n props.pipeline,\n props.branch)\n const jobGraph = tenantJobGraph ? tenantJobGraph[jobGraphKey] : undefined\n useEffect(() => {\n if (jobGraph) {\n setDot(makeDot(tenant, pipeline, project, branch, jobGraph, preferences.darkMode))\n }\n }, [tenant, pipeline, project, branch, jobGraph, preferences])\n return (\n <>\n {dot && }\n \n )\n}\n\nJobGraphDisplay.propTypes = {\n fetchJobGraphIfNeeded: PropTypes.func,\n tenant: PropTypes.object,\n project: PropTypes.object.isRequired,\n pipeline: PropTypes.string.isRequired,\n branch: PropTypes.string.isRequired,\n jobgraph: PropTypes.object,\n dispatch: PropTypes.func,\n state: PropTypes.object,\n preferences: PropTypes.object,\n}\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n jobgraph: state.jobgraph,\n preferences: state.preferences,\n state: state,\n }\n}\n\nconst mapDispatchToProps = { fetchJobGraphIfNeeded }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobGraphDisplay)\n","// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { useHistory, useLocation } from 'react-router-dom'\n\nimport JobGraphToolbar from './JobGraphToolbar'\nimport JobGraphDisplay from './JobGraphDisplay'\n\nfunction JobGraph(props) {\n const [currentPipeline, setCurrentPipeline] = useState()\n const [currentBranch, setCurrentBranch] = useState()\n const history = useHistory()\n const location = useLocation()\n\n if (!currentBranch) {\n const urlParams = new URLSearchParams(location.search)\n const branch = urlParams.get('branch')\n const pipeline = urlParams.get('pipeline')\n if (pipeline && branch) {\n setCurrentPipeline(pipeline)\n setCurrentBranch(branch)\n }\n }\n\n function onChange(pipeline, branch) {\n setCurrentPipeline(pipeline)\n setCurrentBranch(branch)\n\n const searchParams = new URLSearchParams('')\n searchParams.append('branch', branch)\n searchParams.append('pipeline', pipeline)\n history.push({\n pathname: location.pathname,\n search: searchParams.toString(),\n })\n }\n\n return (\n <>\n \n {currentPipeline && currentBranch &&\n }\n \n )\n}\n\nJobGraph.propTypes = {\n project: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n}))(JobGraph)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useCallback } from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport {\n PageSection,\n PageSectionVariants,\n Text,\n TextContent,\n} from '@patternfly/react-core'\nimport Project from '../containers/project/Project'\nimport JobGraph from '../containers/jobgraph/JobGraph'\nimport { fetchProjectIfNeeded } from '../actions/project'\nimport { Fetchable } from '../containers/Fetching'\n\n\nfunction ProjectPage(props) {\n const { tenant, fetchProjectIfNeeded, remoteData } = props\n const { projectName } = props.match.params\n const tenantProjects = remoteData.projects[tenant.name]\n\n const updateData = useCallback((force) => {\n if (tenant.name) {\n fetchProjectIfNeeded(tenant, projectName, force)\n }\n }, [tenant, projectName, fetchProjectIfNeeded])\n\n useEffect(() => {\n document.title = 'Zuul Project | ' + projectName\n updateData()\n }, [tenant, projectName, updateData])\n\n return (\n <>\n \n \n Project {projectName}\n \n \n {tenantProjects && tenantProjects[projectName] &&\n <>\n \n \n \n }\n \n \n )\n}\n\nProjectPage.propTypes = {\n match: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n fetchProjectIfNeeded: PropTypes.func,\n preferences: PropTypes.object,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n remoteData: state.project,\n preferences: state.preferences,\n }\n}\n\nconst mapDispatchToProps = {\n fetchProjectIfNeeded,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProjectPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\nimport {\n Table,\n TableVariant,\n TableHeader,\n TableBody,\n} from '@patternfly/react-table'\nimport {\n CubeIcon,\n ConnectedIcon,\n} from '@patternfly/react-icons'\nimport { IconProperty } from '../Misc'\n\nimport { fetchProjectsIfNeeded } from '../actions/projects'\nimport { Fetchable, Fetching } from '../containers/Fetching'\n\n\nclass ProjectsPage extends React.Component {\n static propTypes = {\n tenant: PropTypes.object,\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchProjectsIfNeeded(this.props.tenant, force))\n }\n\n componentDidMount () {\n document.title = 'Zuul Projects'\n if (this.props.tenant.name) {\n this.updateData()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.props.tenant.name !== prevProps.tenant.name) {\n this.updateData()\n }\n }\n\n render () {\n const { remoteData } = this.props\n const projects = remoteData.projects[this.props.tenant.name]\n\n // TODO (felix): Can we somehow differentiate between \"no projects yet\" (due\n // to fetching) and \"no projects at all\", so we could show an empty state\n // in the latter case. The same applies for other pages like labels, nodes,\n // buildsets, ... as well.\n if (!projects) {\n return \n }\n\n const columns = [\n {\n title: } value=\"Name\" />,\n dataLabel: 'name',\n },\n {\n title: } value=\"Connection\" />,\n dataLabel: 'connection',\n },\n {\n title: 'Type',\n dataLabel: 'type',\n },\n {\n title: 'Last builds',\n dataLabel: 'last-builds',\n }\n ]\n let rows = []\n projects.forEach((project) => {\n let r = {\n cells: [\n {title: {project.name}, props: {column: 'Name'}},\n {title: project.connection_name, props: {column: 'Connection'}},\n {title: project.type, props: {column: 'Type'}},\n {title: \n \n \n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n remoteData: state.projects,\n}))(ProjectsPage)\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useMemo } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport {\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport PropTypes from 'prop-types'\nimport { fetchProviders, fetchProvidersIfNeeded } from '../actions/providers'\nimport ImageDetail from '../containers/provider/ImageDetail'\nimport ImageBuildTable from '../containers/provider/ImageBuildTable'\nimport { ReloadButton } from '../containers/Fetching'\n\nfunction ProviderImagePage(props) {\n const providerName = props.match.params.providerName\n const imageName = props.match.params.imageName\n const tenant = useSelector((state) => state.tenant)\n const providers = useSelector((state) => state.providers.providers[tenant.name])\n const isFetching = useSelector((state) => state.status.isFetching)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const dispatch = useDispatch()\n\n const provider = useMemo(() =>\n providers?providers.find((e) => e.name === providerName):null,\n [providers, providerName])\n const image = useMemo(() =>\n provider?provider.images.find((e) => e.name === imageName):null,\n [provider, imageName])\n\n useEffect(() => {\n document.title = 'Zuul Provider Image'\n dispatch(fetchProvidersIfNeeded(tenant))\n }, [tenant, dispatch])\n\n return (\n <>\n \n \n \n \n \n {dispatch(fetchProviders(tenant))}}\n />\n \n \n \n Image {imageName} in {providerName}\n \n {image &&\n <>\n \n {image.build_artifacts &&\n \n }\n \n }\n \n \n )\n}\n\nProviderImagePage.propTypes = {\n match: PropTypes.object.isRequired,\n}\n\nexport default withRouter(ProviderImagePage)\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\n\nfunction ProviderDetail() {\n // TODO: add general provider information\n return (\n <>\n \n )\n}\n\nexport default ProviderDetail\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n EmptyState,\n EmptyStateBody,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\n\nfunction LabelTable(props) {\n const { labels, fetching } = props\n const columns = [\n {\n title: 'Name',\n dataLabel: 'Name',\n },\n ]\n\n function createLabelRow(label) {\n return {\n cells: [\n {\n title: label.name,\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveLabels = labels && labels.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveLabels) {\n rows = labels.map((label) => createLabelRow(label))\n }\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any labels but are also not\n fetching */}\n {!fetching && !haveLabels && (\n \n No labels found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nLabelTable.propTypes = {\n labels: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n}\n\nexport default LabelTable\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport {\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Tab,\n Tabs,\n TabTitleText,\n Title,\n} from '@patternfly/react-core'\nimport PropTypes from 'prop-types'\nimport { fetchProviders, fetchProvidersIfNeeded } from '../actions/providers'\nimport ProviderDetail from '../containers/provider/ProviderDetail'\nimport ImageTable from '../containers/provider/ImageTable'\nimport FlavorTable from '../containers/provider/FlavorTable'\nimport LabelTable from '../containers/provider/LabelTable'\nimport { ReloadButton } from '../containers/Fetching'\n\nfunction ProviderPage(props) {\n const providerName = props.match.params.providerName\n const tenant = useSelector((state) => state.tenant)\n const providers = useSelector((state) => state.providers.providers[tenant.name])\n const isFetching = useSelector((state) => state.status.isFetching)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const dispatch = useDispatch()\n const [activeTabKey, setActiveTabKey] = useState('images')\n\n const provider = useMemo(() =>\n providers?providers.find((e) => e.name === providerName):null,\n [providers, providerName])\n\n useEffect(() => {\n document.title = 'Zuul Provider'\n dispatch(fetchProvidersIfNeeded(tenant))\n }, [tenant, dispatch])\n\n const handleTabClick = (event, tabIndex) => {\n setActiveTabKey(tabIndex)\n }\n\n return (\n <>\n \n \n \n \n \n {dispatch(fetchProviders(tenant))}}\n />\n \n \n \n Provider {providerName}\n \n {provider &&\n <>\n \n \n Images}\n >\n {provider.images &&\n \n }\n \n Flavors}\n >\n {provider.flavors &&\n \n }\n \n Labels}\n >\n {provider.labels &&\n \n }\n \n \n \n }\n \n \n )\n}\n\nProviderPage.propTypes = {\n match: PropTypes.object.isRequired,\n}\n\nexport default withRouter(ProviderPage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateBody,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\n\nfunction ProviderTable(props) {\n const { providers, fetching, tenant } = props\n const columns = [\n {\n title: 'Name',\n dataLabel: 'Name',\n },\n ]\n\n function createProviderRow(provider) {\n return {\n cells: [\n {\n title: (\n {provider.name}\n ),\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveProviders = providers && providers.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveProviders) {\n rows = providers.map((provider) => createProviderRow(provider))\n }\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any providers but are also not\n fetching */}\n {!fetching && !haveProviders && (\n \n No providers found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nProviderTable.propTypes = {\n providers: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object,\n user: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(ProviderTable)\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { withRouter } from 'react-router-dom'\nimport {\n Level,\n LevelItem,\n PageSection,\n PageSectionVariants,\n Title,\n} from '@patternfly/react-core'\nimport { fetchProviders, fetchProvidersIfNeeded } from '../actions/providers'\nimport ProviderTable from '../containers/provider/ProviderTable'\nimport { ReloadButton } from '../containers/Fetching'\n\nfunction ProvidersPage() {\n const tenant = useSelector((state) => state.tenant)\n const providers = useSelector((state) => state.providers.providers[tenant.name])\n const isFetching = useSelector((state) => state.status.isFetching)\n const darkMode = useSelector((state) => state.preferences.darkMode)\n const dispatch = useDispatch()\n\n useEffect(() => {\n document.title = 'Zuul Providers'\n dispatch(fetchProvidersIfNeeded(tenant))\n }, [tenant, dispatch])\n\n return (\n <>\n \n \n \n \n \n {dispatch(fetchProviders(tenant))}}\n />\n \n \n \n Providers\n \n \n \n \n )\n}\n\nexport default withRouter(ProvidersPage)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport {\n DescriptionList,\n DescriptionListTerm,\n DescriptionListGroup,\n DescriptionListDescription,\n Spinner,\n} from '@patternfly/react-core'\n\nfunction Semaphore({ semaphore, tenant, fetching }) {\n if (fetching && !semaphore) {\n return (\n
    \n \n
    \n )\n }\n if (!semaphore) {\n return (\n
    \n No semaphore found\n
    \n )\n }\n const rows = []\n rows.push({label: 'Name', value: semaphore.name})\n rows.push({label: 'Current Holders', value: semaphore.holders.count})\n rows.push({label: 'Max', value: semaphore.max})\n rows.push({label: 'Global', value: semaphore.global ? 'Yes' : 'No'})\n if (semaphore.global) {\n rows.push({label: 'Holders in Other Tenants',\n value: semaphore.holders.other_tenants})\n }\n semaphore.holders.this_tenant.forEach(holder => {\n rows.push({label: 'Held By',\n value: \n {holder.job_name}\n })\n })\n return (\n \n {rows.map((item, idx) => (\n \n \n {item.label}\n \n \n {item.value}\n \n \n ))}\n \n )\n}\n\nSemaphore.propTypes = {\n semaphore: PropTypes.object.isRequired,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object.isRequired,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n }\n}\n\nexport default connect(mapStateToProps)(Semaphore)\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\n\nimport {\n Title,\n} from '@patternfly/react-core'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport { fetchSemaphoresIfNeeded } from '../actions/semaphores'\nimport Semaphore from '../containers/semaphore/Semaphore'\n\nfunction SemaphorePage({ match, semaphores, tenant, fetchSemaphoresIfNeeded, isFetching, preferences }) {\n\n const semaphoreName = match.params.semaphoreName\n\n useEffect(() => {\n document.title = `Zuul Semaphore | ${semaphoreName}`\n fetchSemaphoresIfNeeded(tenant, true)\n }, [fetchSemaphoresIfNeeded, tenant, semaphoreName])\n\n const semaphore = semaphores[tenant.name] ? semaphores[tenant.name].find(\n e => e.name === semaphoreName) : undefined\n\n return (\n \n \n Details for Semaphore <span style={{color: 'var(--pf-global--primary-color--100)'}}>{semaphoreName}</span>\n \n\n \n \n )\n}\n\nSemaphorePage.propTypes = {\n match: PropTypes.object.isRequired,\n semaphores: PropTypes.object.isRequired,\n tenant: PropTypes.object.isRequired,\n isFetching: PropTypes.bool.isRequired,\n fetchSemaphoresIfNeeded: PropTypes.func.isRequired,\n preferences: PropTypes.object,\n}\nconst mapDispatchToProps = { fetchSemaphoresIfNeeded }\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n semaphores: state.semaphores.semaphores,\n isFetching: state.semaphores.isFetching,\n preferences: state.preferences,\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SemaphorePage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Spinner,\n Title,\n Label,\n} from '@patternfly/react-core'\nimport {\n ResourcesFullIcon,\n TachometerAltIcon,\n LockIcon,\n TenantIcon,\n FingerprintIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Link } from 'react-router-dom'\n\nimport { IconProperty } from '../../Misc'\n\nfunction SemaphoreTable(props) {\n const { semaphores, fetching, tenant } = props\n const columns = [\n {\n title: } value=\"Name\" />,\n dataLabel: 'Name',\n },\n {\n title: } value=\"Current\" />,\n dataLabel: 'Current',\n },\n {\n title: } value=\"Max\" />,\n dataLabel: 'Max',\n },\n {\n title: } value=\"Global\" />,\n dataLabel: 'Global',\n },\n ]\n\n function createSemaphoreRow(semaphore) {\n\n return {\n cells: [\n {\n title: (\n {semaphore.name}\n ),\n },\n {\n title: semaphore.holders.count,\n },\n {\n title: semaphore.max,\n },\n {\n title: semaphore.global ? (\n \n Global\n \n ) : ''\n },\n ]\n }\n }\n\n function createFetchingRow() {\n const rows = [\n {\n heightAuto: true,\n cells: [\n {\n props: { colSpan: 8 },\n title: (\n
    \n \n
    \n ),\n },\n ],\n },\n ]\n return rows\n }\n\n const haveSemaphores = semaphores && semaphores.length > 0\n\n let rows = []\n if (fetching) {\n rows = createFetchingRow()\n columns[0].dataLabel = ''\n } else {\n if (haveSemaphores) {\n rows = semaphores.map((semaphore) => createSemaphoreRow(semaphore))\n }\n }\n\n return (\n <>\n \n \n \n \n\n {/* Show an empty state in case we don't have any semaphores but are also not\n fetching */}\n {!fetching && !haveSemaphores && (\n \n \n No semaphores found\n \n Nothing to display.\n \n \n )}\n \n )\n}\n\nSemaphoreTable.propTypes = {\n semaphores: PropTypes.array,\n fetching: PropTypes.bool.isRequired,\n tenant: PropTypes.object,\n user: PropTypes.object,\n dispatch: PropTypes.func,\n}\n\nexport default connect((state) => ({\n tenant: state.tenant,\n user: state.user,\n}))(SemaphoreTable)\n","// Copyright 2021 BMW Group\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n PageSection,\n PageSectionVariants,\n} from '@patternfly/react-core'\n\nimport { fetchSemaphoresIfNeeded } from '../actions/semaphores'\nimport SemaphoreTable from '../containers/semaphore/SemaphoreTable'\n\nfunction SemaphoresPage({ tenant, semaphores, isFetching, fetchSemaphoresIfNeeded }) {\n useEffect(() => {\n document.title = 'Zuul Semaphores'\n fetchSemaphoresIfNeeded(tenant, true)\n }, [fetchSemaphoresIfNeeded, tenant])\n\n return (\n <>\n \n \n \n \n )\n}\n\nSemaphoresPage.propTypes = {\n tenant: PropTypes.object.isRequired,\n semaphores: PropTypes.object.isRequired,\n isFetching: PropTypes.bool.isRequired,\n fetchSemaphoresIfNeeded: PropTypes.func.isRequired,\n}\n\nfunction mapStateToProps(state) {\n return {\n tenant: state.tenant,\n semaphores: state.semaphores.semaphores,\n isFetching: state.semaphores.isFetching,\n }\n}\n\nconst mapDispatchToProps = { fetchSemaphoresIfNeeded }\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SemaphoresPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport Sockette from 'sockette'\nimport {Checkbox, Form, FormGroup, FormControl} from 'patternfly-react'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\n\nimport 'xterm/css/xterm.css'\nimport { Terminal } from 'xterm'\nimport { FitAddon} from 'xterm-addon-fit'\nimport { WebLinksAddon } from 'xterm-addon-web-links'\nimport { SearchAddon } from 'xterm-addon-search'\n\nimport { getStreamUrl, getAuthToken } from '../api'\n\nclass StreamPage extends React.Component {\n static propTypes = {\n match: PropTypes.object.isRequired,\n location: PropTypes.object.isRequired,\n tenant: PropTypes.object,\n preferences: PropTypes.object,\n }\n\n state = {\n searchRegex: false,\n searchCaseSensitive: false,\n searchWholeWord: false,\n }\n\n constructor() {\n super()\n this.receiveBuffer = ''\n this.displayRef = React.createRef()\n this.lines = []\n }\n\n componentWillUnmount () {\n if (this.ws) {\n console.log('Remove ws')\n this.ws.close()\n }\n }\n\n onMessage = (message) => {\n this.term.write(message)\n }\n\n onResize = () => {\n this.fitAddon.fit()\n }\n\n componentDidMount() {\n const params = {\n uuid: this.props.match.params.buildId\n }\n const urlParams = new URLSearchParams(this.props.location.search)\n const logfile = urlParams.get('logfile')\n if (logfile) {\n params.logfile = logfile\n }\n const authToken = getAuthToken()\n if (authToken) {\n params.token = authToken\n }\n document.title = 'Zuul Stream | ' + params.uuid.slice(0, 7)\n\n const term = new Terminal()\n const fitAddon = new FitAddon()\n const webLinksAddon = new WebLinksAddon()\n const searchAddon = new SearchAddon()\n\n term.loadAddon(fitAddon)\n term.loadAddon(webLinksAddon)\n term.loadAddon(searchAddon)\n\n term.setOption('fontSize', 12)\n term.setOption('scrollback', 1000000)\n term.setOption('disableStdin', true)\n term.setOption('convertEol', true)\n\n // Block all keys but page up/down. This needs to be done so ctrl+c can\n // be used to copy text from the terminal.\n term.attachCustomKeyEventHandler(function (e) {\n return e.key === 'PageDown' || e.key === 'PageUp'\n })\n\n term.open(this.terminal)\n fitAddon.fit()\n term.focus()\n\n this.ws = new Sockette(getStreamUrl(this.props.tenant.apiPrefix), {\n timeout: 5e3,\n maxAttempts: 3,\n onopen: () => {\n console.log('onopen')\n this.ws.send(JSON.stringify(params))\n },\n onmessage: e => {\n this.onMessage(e.data)\n },\n onreconnect: e => {\n console.log('Reconnecting...', e)\n },\n onmaximum: e => {\n console.log('Stop Attempting!', e)\n },\n onclose: e => {\n console.log('onclose', e)\n this.onMessage('\\n--- END OF STREAM ---\\n')\n },\n onerror: e => {\n console.log('onerror:', e)\n }\n })\n\n this.term = term\n this.searchAddon = searchAddon\n this.fitAddon = fitAddon\n\n term.element.style.padding = '5px'\n this.onResize()\n window.addEventListener('resize', this.onResize)\n }\n\n handleCheckBoxRegex = (e) => {\n this.setState({searchRegex: e.target.checked})\n }\n\n handleCheckBoxCaseSensitive = (e) => {\n this.setState({searchCaseSensitive: e.target.checked})\n }\n\n handleCheckBoxWholeWord = (e) => {\n this.setState({searchWholeWord: e.target.checked})\n }\n\n getSearchOptions = () => {\n return {\n regex: this.state.searchRegex,\n wholeWord: this.state.searchWholeWord,\n caseSensitive: this.state.searchCaseSensitive,\n }\n }\n\n handleKeyPress = (e) => {\n const searchOptions = this.getSearchOptions()\n searchOptions.incremental = e.key !== 'Enter'\n if (e.key === 'Enter') {\n // Don't reload the page on enter\n e.preventDefault()\n }\n if (e.key === 'Enter' && e.shiftKey) {\n this.searchAddon.findPrevious(e.target.value, searchOptions)\n } else {\n this.searchAddon.findNext(e.target.value, searchOptions)\n }\n }\n\n render () {\n return (\n \n
    \n \n \n   Use regex: \n \n \n   Case sensitive: \n \n \n   Whole word: \n \n \n \n
    \n
    this.terminal = ref} />\n \n )\n }\n}\n\n\nexport default connect(state => ({\n tenant: state.tenant,\n preferences: state.preferences,\n}))(StreamPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport { connect } from 'react-redux'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport {\n BuildIcon,\n CubeIcon,\n DesktopIcon,\n FolderIcon,\n HomeIcon,\n RepositoryIcon,\n ThumbtackIcon,\n} from '@patternfly/react-icons'\nimport {\n Table,\n TableHeader,\n TableBody,\n TableVariant,\n} from '@patternfly/react-table'\nimport { Fetching } from '../containers/Fetching'\nimport { fetchTenantsIfNeeded } from '../actions/tenants'\nimport { PageSection, PageSectionVariants } from '@patternfly/react-core'\nimport { IconProperty } from '../Misc'\n\nclass TenantsPage extends React.Component {\n static propTypes = {\n remoteData: PropTypes.object,\n dispatch: PropTypes.func\n }\n\n updateData = (force) => {\n this.props.dispatch(fetchTenantsIfNeeded(force))\n }\n\n componentDidMount() {\n document.title = 'Zuul Tenants'\n this.updateData()\n }\n\n // TODO: fix Refreshable class to work with tenant less page.\n componentDidUpdate() { }\n\n render() {\n const { remoteData } = this.props\n if (remoteData.isFetching) {\n return \n }\n\n const tenants = remoteData.tenants.map((tenant) => {\n return {\n cells: [\n { title: ({tenant.name}) },\n { title: (Status) },\n { title: (Projects) },\n { title: (Jobs) },\n { title: (Builds) },\n { title: (Buildsets) },\n { title: (Autoholds) },\n ]\n }\n })\n const columns = [\n {\n title: } value=\"Name\" />,\n dataLabel: 'Name',\n },\n {\n title: } value=\"Status\" />,\n dataLabel: 'Status',\n },\n {\n title: } value=\"Projects\" />,\n dataLabel: 'Projects',\n },\n {\n title: } value=\"Jobs\" />,\n dataLabel: 'Jobs',\n },\n {\n title: } value=\"Builds\" />,\n dataLabel: 'Builds',\n },\n {\n title: } value=\"Buildsets\" />,\n dataLabel: 'Buildsets',\n },\n {\n title: } value=\"Autoholds\" />,\n dataLabel: 'Autoholds',\n },\n ]\n\n return (\n \n \n \n \n \n \n )\n }\n}\n\nexport default connect(state => ({ remoteData: state.tenants }))(TenantsPage)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport AutoholdPage from './pages/Autohold'\nimport AutoholdsPage from './pages/Autoholds'\nimport BuildPage from './pages/Build'\nimport BuildsPage from './pages/Builds'\nimport BuildsetPage from './pages/Buildset'\nimport BuildsetsPage from './pages/Buildsets'\nimport ChangeStatusPage from './pages/ChangeStatus'\nimport ComponentsPage from './pages/Components'\nimport ConfigErrorsPage from './pages/ConfigErrors'\nimport FreezeJobPage from './pages/FreezeJob'\nimport JobPage from './pages/Job'\nimport JobsPage from './pages/Jobs'\nimport ImagePage from './pages/Image'\nimport ImagesPage from './pages/Images'\nimport FlavorsPage from './pages/Flavors'\nimport LabelsPage from './pages/Labels'\nimport NodesPage from './pages/Nodes'\nimport OpenApiPage from './pages/OpenApi'\nimport PipelineDetailsPage from './pages/PipelineDetails'\nimport PipelineOverviewPage from './pages/PipelineOverview'\nimport ProjectPage from './pages/Project'\nimport ProjectsPage from './pages/Projects'\nimport ProviderImagePage from './pages/ProviderImage'\nimport ProviderPage from './pages/Provider'\nimport ProvidersPage from './pages/Providers'\nimport SemaphorePage from './pages/Semaphore'\nimport SemaphoresPage from './pages/Semaphores'\nimport StreamPage from './pages/Stream'\nimport TenantsPage from './pages/Tenants'\n\n// The Route object are created in the App component.\n// Object with a title are created in the menu.\n// Object with globalRoute are not tenant scoped.\n// Remember to update the api getHomepageUrl subDir list for route with params\nconst routes = (info) => {\n const ret = [\n {\n title: 'Status',\n to: '/status',\n component: PipelineOverviewPage,\n },\n {\n title: 'Projects',\n to: '/projects',\n component: ProjectsPage\n },\n {\n title: 'Jobs',\n to: '/jobs',\n component: JobsPage\n },\n {\n title: 'Labels',\n to: '/labels',\n component: LabelsPage\n },\n {\n title: 'Nodes',\n to: '/nodes',\n component: NodesPage\n },\n {\n title: 'Autoholds',\n to: '/autoholds',\n component: AutoholdsPage\n },\n {\n title: 'Semaphores',\n to: '/semaphores',\n component: SemaphoresPage\n },\n {\n title: 'Builds',\n to: '/builds',\n component: BuildsPage\n },\n {\n title: 'Buildsets',\n to: '/buildsets',\n component: BuildsetsPage\n },\n {\n to: '/freeze-job',\n component: FreezeJobPage\n },\n {\n to: '/status/change/:changeId',\n component: ChangeStatusPage\n },\n {\n to: '/status/pipeline/:pipelineName',\n component: PipelineDetailsPage,\n },\n {\n to: '/stream/:buildId',\n component: StreamPage\n },\n {\n to: '/project/:projectName*',\n component: ProjectPage\n },\n {\n to: '/job/:jobName',\n component: JobPage\n },\n {\n to: '/build/:buildId',\n component: BuildPage,\n props: { 'activeTab': 'results' },\n },\n {\n to: '/build/:buildId/artifacts',\n component: BuildPage,\n props: { 'activeTab': 'artifacts' },\n },\n {\n to: '/build/:buildId/logs',\n component: BuildPage,\n props: { 'activeTab': 'logs' },\n },\n {\n to: '/build/:buildId/console',\n component: BuildPage,\n props: { 'activeTab': 'console' },\n },\n {\n to: '/build/:buildId/log/:file*',\n component: BuildPage,\n props: { 'activeTab': 'logs', 'logfile': true },\n },\n {\n to: '/buildset/:buildsetId',\n component: BuildsetPage\n },\n {\n to: '/autohold/:requestId',\n component: AutoholdPage\n },\n {\n to: '/semaphore/:semaphoreName',\n component: SemaphorePage\n },\n {\n to: '/config-errors',\n component: ConfigErrorsPage,\n },\n {\n to: '/tenants',\n component: TenantsPage,\n globalRoute: true\n },\n {\n to: '/openapi',\n component: OpenApiPage,\n noTenantPrefix: true,\n },\n {\n to: '/components',\n component: ComponentsPage,\n noTenantPrefix: true,\n },\n // auth_callback is handled in App.jsx\n ]\n if (info && info.niz) {\n ret.push(\n {\n title: 'Providers',\n to: '/providers',\n component: ProvidersPage,\n }\n )\n ret.push(\n {\n to: '/provider/:providerName',\n component: ProviderPage,\n }\n )\n ret.push(\n {\n to: '/provider/:providerName/image/:imageName',\n component: ProviderImagePage,\n }\n )\n ret.push(\n {\n title: 'Images',\n to: '/images',\n component: ImagesPage,\n }\n )\n ret.push(\n {\n to: '/image/:imageName',\n component: ImagePage,\n }\n )\n ret.push(\n {\n title: 'Flavors',\n to: '/flavors',\n component: FlavorsPage,\n }\n )\n }\n return ret\n}\n\nexport { routes }\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { useHistory } from 'react-router-dom'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Spinner,\n Title,\n} from '@patternfly/react-core'\nimport {\n FingerprintIcon,\n} from '@patternfly/react-icons'\n\n// Several pages use the location hash in a way that would be\n// difficult to disentangle from the OIDC callback parameters. This\n// dedicated callback page accepts the OIDC params and then internally\n// redirects to the page we saved before redirecting to the IDP.\n\nfunction AuthCallbackPage(props) {\n const history = useHistory()\n const { user } = props\n\n useEffect(() => {\n if (user.redirect) {\n history.push(user.redirect)\n }\n }, [history, user])\n\n return (\n <>\n \n \n Login in progress\n \n

    \n You will be redirected shortly...\n

    \n \n
    \n
    \n \n )\n}\n\nAuthCallbackPage.propTypes = {\n user: PropTypes.object,\n}\n\nexport default connect((state) => ({\n user: state.user,\n}))(AuthCallbackPage)\n","// Copyright 2020 Red Hat, Inc\n// Copyright 2022 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport {\n EmptyState,\n EmptyStateBody,\n EmptyStateIcon,\n Title,\n} from '@patternfly/react-core'\nimport {\n LockIcon,\n} from '@patternfly/react-icons'\n\nfunction AuthRequiredPage() {\n return (\n <>\n \n \n Unauthorized\n \n

    \n Authorization is required.\n

    \n
    \n
    \n \n )\n}\n\n\nexport default AuthRequiredPage\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// The App is the parent component of every pages. Each page content is\n// rendered by the Route object according to the current location.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { matchPath, withRouter } from 'react-router'\nimport { Link, NavLink, Redirect, Route, Switch } from 'react-router-dom'\nimport { connect } from 'react-redux'\nimport { withAuth } from 'oidc-react'\nimport {\n TimedToastNotification,\n ToastNotificationList,\n} from 'patternfly-react'\nimport * as moment_tz from 'moment-timezone'\nimport {\n Brand,\n Button,\n ButtonVariant,\n Dropdown,\n DropdownItem,\n DropdownToggle,\n DropdownSeparator,\n KebabToggle,\n Nav,\n NavItem,\n NavList,\n NotificationBadge,\n Page,\n PageHeader,\n PageHeaderTools,\n PageHeaderToolsGroup,\n PageHeaderToolsItem,\n} from '@patternfly/react-core'\n\nimport {\n BellIcon,\n BookIcon,\n ChevronDownIcon,\n CodeIcon,\n ServiceIcon,\n UsersIcon,\n} from '@patternfly/react-icons'\n\nimport AuthContainer from './containers/auth/Auth'\nimport ErrorBoundary from './containers/ErrorBoundary'\nimport { Fetching } from './containers/Fetching'\nimport SelectTz from './containers/timezone/SelectTz'\nimport ConfigModal from './containers/config/Config'\nimport logo from './images/logo.svg'\nimport { clearNotification } from './actions/notifications'\nimport { fetchTenantStatusAction, clearTenantStatusAction } from './actions/tenantStatus'\nimport { fetchTenantsIfNeeded } from './actions/tenants'\nimport { routes } from './routes'\nimport { setTenantAction } from './actions/tenant'\nimport { configureAuthFromTenant, configureAuthFromInfo } from './actions/auth'\nimport { getHomepageUrl } from './api'\nimport AuthCallbackPage from './pages/AuthCallback'\nimport AuthRequiredPage from './pages/AuthRequired'\n\nclass App extends React.Component {\n static propTypes = {\n notifications: PropTypes.array,\n tenantStatus: PropTypes.object,\n tenantStatusReady: PropTypes.bool,\n info: PropTypes.object,\n tenant: PropTypes.object,\n tenants: PropTypes.object,\n timezone: PropTypes.string,\n location: PropTypes.object,\n history: PropTypes.object,\n dispatch: PropTypes.func,\n isKebabDropdownOpen: PropTypes.bool,\n user: PropTypes.object,\n auth: PropTypes.object,\n signIn: PropTypes.func,\n }\n\n state = {\n isTenantDropdownOpen: false,\n }\n\n renderMenu(menu) {\n const { tenant } = this.props\n if (tenant.name) {\n return (\n \n )\n } else {\n // Return an empty navigation bar in case we don't have an active tenant\n return
    \n }\n position=\"bottom\"\n >\n \n \n \n )\n}\n\nToolbarStatsItem.propTypes = {\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n tooltipContent: PropTypes.object.isRequired,\n reverse: PropTypes.bool,\n}\n\nfunction FilterToolbar(props) {\n const dispatch = useDispatch()\n const [isCategoryDropdownOpen, setIsCategoryDropdownOpen] = useState(false)\n const [currentCategory, setCurrentCategory] = useState(\n props.filterCategories[0].title\n )\n const [inputValue, setInputValue] = useState('')\n\n function handleCategoryToggle(isOpen) {\n setIsCategoryDropdownOpen(isOpen)\n }\n\n function handleCategorySelect(event) {\n setCurrentCategory(event.target.innerText)\n setIsCategoryDropdownOpen(!isCategoryDropdownOpen)\n }\n\n function handleInputChange(newValue) {\n setInputValue(newValue)\n }\n\n function handleInputSend(event, category) {\n const { onFilterChange, filters, filterInputValidation } = props\n\n // In case the event comes from a key press, only accept \"Enter\"\n if (event.key && event.key !== 'Enter') {\n return\n }\n\n // trim whitespace from the search term\n const _inputValue = inputValue.trim()\n\n const validationResult = filterInputValidation(category.key, _inputValue)\n if (!validationResult.success) {\n dispatch(addNotification(\n {\n text: validationResult.message,\n type: 'error',\n status: '',\n url: '',\n }))\n return\n }\n\n const prevFilters = filters[category.key]\n const newFilters = {\n ...filters,\n [category.key]: prevFilters.includes(_inputValue)\n ? prevFilters\n : [...prevFilters, _inputValue],\n }\n\n // Clear the input field\n setInputValue('')\n // Notify the parent component about the filter change\n onFilterChange(newFilters)\n }\n\n function handleDelete(type = '', id = '', category) {\n const { filterCategories, filters, onFilterChange } = props\n\n // Usually the type contains the category for which a chip should be deleted\n // If the type is set, we got a delete() call for a single chip. The type\n // reflects the name of the Chip group which does not necessarily go in hand\n // with our category keys. Thus, we use the category to identify the correct\n // filter to be updated/removed.\n let newFilters = {}\n if (type) {\n if (category.type === 'ternary') {\n newFilters = {\n ...filters,\n [category.key]: [],\n }\n } else {\n newFilters = {\n ...filters,\n [category.key]: filters[category.key].filter((s) => s !== id),\n }\n }\n } else {\n // Delete the values for each filter category\n newFilters = filterCategories.reduce((filterDict, category) => {\n filterDict[category.key] = []\n return filterDict\n }, {})\n if (filters.limit !== undefined) {\n newFilters.limit = filters.limit\n }\n }\n\n // Notify the parent component about the filter change\n onFilterChange(newFilters)\n }\n\n function renderCategoryDropdown() {\n const { filterCategories } = props\n\n return (\n \n \n {currentCategory}\n \n }\n isOpen={isCategoryDropdownOpen}\n dropdownItems={filterCategories.filter(\n (category) => (category.type === 'search' ||\n category.type === 'fuzzy-search' ||\n category.type === 'select' ||\n category.type === 'ternary' ||\n category.type === 'checkbox')\n ).map((category) => (\n {category.title}\n ))}\n style={{ width: '100%' }}\n />\n \n )\n }\n\n function renderFilterInput(category, filters) {\n const { onFilterChange } = props\n if (category.type === 'search') {\n return (\n \n handleInputSend(event, category)}\n />\n handleInputSend(event, category)}\n >\n \n \n \n )\n } else if (category.type === 'fuzzy-search') {\n return (\n \n \n handleInputSend(event, category)}\n />\n \n handleInputSend(event, category)}\n >\n \n \n \n )\n } else if (category.type === 'select') {\n return (\n \n \n \n )\n } else if (category.type === 'ternary') {\n return (\n \n \n \n )\n } else if (category.type === 'checkbox') {\n return (\n \n
    \n \n
    \n )\n }\n }\n\n function renderFilterDropdown() {\n const { filterCategories, filters } = props\n\n return (\n <>\n {filterCategories.map((category) => (\n handleDelete(type, id, category)}\n categoryName={category.title}\n showToolbarItem={currentCategory === category.title}\n >\n {renderFilterInput(category, filters)}\n \n ))}\n \n )\n }\n\n return (\n <>\n \n \n } breakpoint=\"md\">\n \n {renderCategoryDropdown()}\n {renderFilterDropdown()}\n \n \n {props.children}\n \n \n \n )\n}\n\nFilterToolbar.propTypes = {\n onFilterChange: PropTypes.func.isRequired,\n filters: PropTypes.object.isRequired,\n filterCategories: PropTypes.array.isRequired,\n filterInputValidation: PropTypes.func.isRequired,\n children: PropTypes.node,\n}\n\nfunction getChipsFromFilters(filters, category) {\n if (category.type === 'ternary') {\n switch ([...filters[category.key]].pop()) {\n case 1:\n case '1':\n return ['True',]\n case 0:\n case '0':\n return ['False',]\n default:\n return []\n }\n } else {\n return filters[category.key]\n }\n}\n\nfunction getFiltersFromUrl(location, filterCategories) {\n const urlParams = new URLSearchParams(location.search)\n const _filters = filterCategories.reduce((filterDict, item) => {\n // Initialize each filter category with an empty list\n filterDict[item.key] = []\n\n // And update the list with each matching element from the URL query\n urlParams.getAll(item.key).forEach((param) => {\n if (item.type === 'checkbox') {\n switch (param) {\n case '1':\n filterDict[item.key].push(1)\n break\n case '0':\n filterDict[item.key].push(0)\n break\n default:\n break\n }\n } else {\n filterDict[item.key].push(param)\n }\n })\n return filterDict\n }, {})\n const pagination_options = {\n skip: urlParams.getAll('skip') ? urlParams.getAll('skip') : [0,],\n limit: urlParams.getAll('limit') ? urlParams.getAll('limit') : [50,],\n }\n const filters = { ..._filters, ...pagination_options }\n return filters\n}\n\nfunction writeFiltersToUrl(filters, location, history) {\n // Build new URL parameters from the filters in state\n const searchParams = new URLSearchParams('')\n Object.keys(filters).map((key) => {\n filters[key].forEach((value) => {\n searchParams.append(key, value)\n })\n return searchParams\n })\n history.push({\n pathname: location.pathname,\n search: searchParams.toString(),\n })\n}\n\nfunction makeQueryString(filters) {\n let queryString = ''\n if (filters) {\n Object.keys(filters).map((key) => {\n filters[key].forEach((value) => {\n queryString += '&' + key + '=' + value\n })\n return queryString\n })\n }\n return queryString\n}\n\nfunction isFilterActive(filters) {\n return Object.values(filters).some(f => f.length > 0)\n}\n\nfunction applyFilter(haystack, searchTerms, fuzzy) {\n if (fuzzy) {\n searchTerms = searchTerms.map(s => s.replace(/\\*/g, '(.*)'))\n }\n const searchPatterns = searchTerms.map(s => new RegExp(`^${s}$`))\n for (const text of haystack) {\n if (searchPatterns.some(p => p.test(text))) {\n return true\n }\n }\n return false\n}\n\nexport {\n applyFilter,\n FilterToolbar,\n getFiltersFromUrl,\n isFilterActive,\n makeQueryString,\n ToolbarStatsGroup,\n ToolbarStatsItem,\n writeFiltersToUrl,\n}\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const PREFERENCE_SET = 'PREFERENCE_SET'\n\nexport function setPreference (key, value) {\n return {\n type: PREFERENCE_SET,\n key,\n value,\n }\n}\n","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport { connect, useDispatch, useSelector } from 'react-redux'\n\nimport {\n Button,\n Card,\n CardActions,\n CardTitle,\n CardBody,\n CardHeader,\n DataList,\n DataListCell,\n DataListItem,\n DataListItemCells,\n DataListItemRow,\n DataListToggle,\n Dropdown,\n DropdownItem,\n DropdownToggle,\n ExpandableSection,\n KebabToggle,\n Modal,\n ModalVariant,\n} from '@patternfly/react-core'\nimport {\n AngleDoubleUpIcon,\n BanIcon,\n FilterIcon,\n} from '@patternfly/react-icons'\n\nimport {\n calculateQueueItemTimes,\n ChangeLink,\n getChangeLabel,\n getJobStrResult,\n getRefs,\n JobLink,\n JobResultOrStatus,\n} from './Misc'\n\nimport QueueItemProgress from './QueueItemProgress'\n\nimport { dequeue, dequeue_ref, promote } from '../../api'\nimport { addDequeueError, addPromoteError } from '../../actions/adminActions'\nimport { addNotification } from '../../actions/notifications'\nimport { fetchStatusIfNeeded } from '../../actions/status'\nimport { expandJobs, collapseJobs } from '../../actions/statusExpansion'\n\nfunction FilterDropdown({ item, pipeline }) {\n const [isFilterDropdownOpen, setIsFilterDropdownOpen] = useState(false)\n\n const history = useHistory()\n const location = useLocation()\n const ref = getRefs(item)[0]\n\n const onFilterDropdownSelect = () => {\n setIsFilterDropdownOpen(!isFilterDropdownOpen)\n }\n\n const onSelect = () => {\n setIsFilterDropdownOpen(false)\n }\n\n const applyFilters = (filters) => {\n history.push({\n pathname: location.pathname,\n search: filters.toString(),\n })\n }\n\n const filterChange = () => {\n const filterParams = new URLSearchParams('')\n filterParams.append('change', ref.id || ref.ref)\n applyFilters(filterParams)\n }\n\n const filterProject = () => {\n const filterParams = new URLSearchParams('')\n filterParams.append('project', ref.project)\n applyFilters(filterParams)\n }\n\n const filterItem = () => {\n const filterParams = new URLSearchParams('')\n filterParams.append('change', ref.id || ref.ref)\n filterParams.append('pipeline', pipeline.name)\n applyFilters(filterParams)\n }\n\n const changeText = getChangeLabel(ref)\n\n const filterDropdownItems = [\n filterChange()}\n >\n Filter by change\n ,\n filterProject()}\n >\n Filter by project\n ,\n filterItem()}\n >\n Filter by item\n \n ]\n\n return (\n \n \n \n }\n isOpen={isFilterDropdownOpen}\n isPlain\n dropdownItems={filterDropdownItems}\n />\n )\n}\n\nFilterDropdown.propTypes = {\n item: PropTypes.object.isRequired,\n pipeline: PropTypes.object.isRequired,\n}\n\nfunction JobRow({ job, idx, tenant, job_times, className }) {\n return (\n \n \n \n \n ,\n \n {/* TODO (felix): Since the job.name is not unique anymore,\n this should be looked up by job.uuid */}\n \n \n ]}\n />\n \n \n )\n}\n\nJobRow.propTypes = {\n job: PropTypes.object.isRequired,\n idx: PropTypes.number.isRequired,\n tenant: PropTypes.object.isRequired,\n job_times: PropTypes.object.isRequired,\n className: PropTypes.string,\n}\n\nfunction SkippedJobList({ skippedJobs, isExpanded, onToggle, tenant, job_times }) {\n return (\n <>\n \n \n onToggle()}\n isExpanded={isExpanded}\n id=\"expand-skipped-jobs\"\n aria-controls=\"expand-skipped-jobs\"\n />\n \n
    {`Show ${skippedJobs.length} skipped jobs`}
    \n \n ]}\n />\n
    \n
    \n {isExpanded ?\n skippedJobs.map((job, idx) => (\n \n ))\n : ''}\n \n )\n}\n\nSkippedJobList.propTypes = {\n skippedJobs: PropTypes.array.isRequired,\n isExpanded: PropTypes.bool.isRequired,\n onToggle: PropTypes.func.isRequired,\n tenant: PropTypes.object.isRequired,\n job_times: PropTypes.object.isRequired,\n}\n\nfunction JobList({\n jobs, skippedJobs, isSkippedJobsExpanded, onSkippedJobsToggle, tenant, job_times\n}) {\n return (\n \n {jobs.map((job, idx) => (\n \n ))}\n {skippedJobs.length > 0 ?\n \n : ''}\n \n )\n}\n\nJobList.propTypes = {\n jobs: PropTypes.array.isRequired,\n skippedJobs: PropTypes.array.isRequired,\n isSkippedJobsExpanded: PropTypes.bool.isRequired,\n onSkippedJobsToggle: PropTypes.func.isRequired,\n tenant: PropTypes.object.isRequired,\n job_times: PropTypes.object.isRequired,\n}\n\nfunction DequeueModal({ item, isOpen, onConfirm, onCancel }) {\n const ref = getRefs(item)[0]\n let projectName = ref.project\n let refId = ref.id || ref.ref\n return (\n \n Confirm\n ,\n ,\n ]}>\n

    \n Please confirm that you want to cancel all ongoing builds on\n change {refId} for project {projectName}.\n

    \n \n )\n}\n\nDequeueModal.propTypes = {\n item: PropTypes.object.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n}\n\n\nfunction PromoteModal({ item, isOpen, onConfirm, onCancel }) {\n const ref = getRefs(item)[0]\n let refId = ref.id || 'N/A'\n return (\n \n Confirm\n ,\n ,\n ]}\n >\n

    Please confirm that you want to promote a change {refId}.

    \n \n )\n}\n\nPromoteModal.propTypes = {\n item: PropTypes.object.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n}\n\nfunction QueueItem({ item, pipeline, tenant, user, jobsExpanded }) {\n const [isAdminActionsOpen, setIsAdminActionsOpen] = useState(false)\n const [isDequeueModalOpen, setIsDequeueModalOpen] = useState(false)\n const [isPromoteModalOpen, setIsPromoteModalOpen] = useState(false)\n const [isSkippedJobsExpanded, setIsSkippedJobsExpanded] = useState(false)\n\n const expansionKey = item.id\n const expandedJobs = useSelector(state => state.statusExpansion.expandedJobs[expansionKey])\n\n const skippedjobs = item.jobs.filter(j => getJobStrResult(j) === 'skipped')\n const jobs = item.jobs.filter(j => getJobStrResult(j) !== 'skipped')\n const dispatch = useDispatch()\n const isJobsExpanded = expandedJobs === undefined ? jobsExpanded : expandedJobs\n\n const onJobsToggle = (isExpanded) => {\n if (isExpanded) {\n dispatch(expandJobs(expansionKey))\n } else {\n dispatch(collapseJobs(expansionKey))\n }\n }\n\n const onSkippedJobsToggle = () => {\n setIsSkippedJobsExpanded(!isSkippedJobsExpanded)\n }\n\n const onSelect = () => {\n setIsAdminActionsOpen(!isAdminActionsOpen)\n }\n\n const showDequeueModal = () => {\n setIsDequeueModalOpen(true)\n }\n\n const showPromoteModal = () => {\n setIsPromoteModalOpen(true)\n }\n\n const confirmDequeue = () => {\n const ref = getRefs(item)[0]\n // Use the first ref as a proxy for the item since queue\n // commands operate on changes\n let projectName = ref.project\n let refId = ref.id || 'N/A'\n let refRef = ref.ref\n\n // close the modal\n setIsDequeueModalOpen(false)\n\n if (/^[0-9a-f]{40}$/.test(refId)) {\n // post-merge with a ref update (tag, branch push)\n dequeue_ref(tenant.apiPrefix, projectName, pipeline.name, refRef)\n .then(() => {\n dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n dispatch(addDequeueError(error))\n })\n } else if (refId !== 'N/A') {\n // pre-merge, ie we have a change id\n dequeue(tenant.apiPrefix, projectName, pipeline.name, refId)\n .then(() => {\n dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n dispatch(addDequeueError(error))\n })\n } else {\n // periodic with only a ref (branch head)\n dequeue_ref(tenant.apiPrefix, projectName, pipeline.name, refRef)\n .then(() => {\n dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n dispatch(addDequeueError(error))\n })\n }\n }\n\n const confirmPromote = () => {\n const ref = getRefs(item)[0]\n let refId = ref.id || 'NA'\n\n // close the modal\n setIsPromoteModalOpen(false)\n\n if (refId !== 'N/A') {\n promote(tenant.apiPrefix, pipeline.name, [refId,])\n .then(() => {\n dispatch(fetchStatusIfNeeded(tenant))\n })\n .catch(error => {\n dispatch(addPromoteError(error))\n })\n } else {\n dispatch(addNotification({\n url: null,\n status: 'Invalid change ' + refId + ' for promotion',\n text: '',\n type: 'error'\n }))\n }\n }\n\n const cancelDequeue = () => {\n setIsDequeueModalOpen(false)\n }\n\n const cancelPromote = () => {\n setIsPromoteModalOpen(false)\n }\n\n const times = calculateQueueItemTimes(item)\n\n const adminActions = [\n }\n description=\"Stop all jobs for this change\"\n onClick={() => showDequeueModal()}\n >\n Dequeue\n ,\n }\n description=\"Promote this change to the top of the queue\"\n onClick={() => showPromoteModal()}\n >\n Promote\n \n ]\n\n return (\n <>\n \n \n {item.live === true ?\n \n \n {user.isAdmin && user.scope.indexOf(tenant.name) !== -1 ?\n }\n isOpen={isAdminActionsOpen}\n isPlain\n dropdownItems={adminActions}\n position=\"right\"\n /> : ''}\n \n : ''}\n \n {getRefs(item).map((change, idx) => (\n
    \n {change.project} \n
    \n ))}\n
    \n
    \n {item.live === true ?\n \n \n {item.jobs.length > 0 ?\n \n \n \n : ''\n }\n \n : ''}\n
    \n \n \n \n )\n}\n\nQueueItem.propTypes = {\n item: PropTypes.object,\n pipeline: PropTypes.object,\n tenant: PropTypes.object,\n user: PropTypes.object,\n jobsExpanded: PropTypes.bool,\n}\n\nexport default connect(state => ({\n tenant: state.tenant,\n user: state.user,\n}))(QueueItem)\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport {\n Badge,\n Card,\n CardTitle,\n CardBody,\n Panel,\n ProgressStep,\n ProgressStepper,\n Title,\n Tooltip,\n} from '@patternfly/react-core'\n\nimport QueueItem from './QueueItem'\nimport { getQueueItemIconConfig } from './Misc'\n\n// This function will create a \"tree-like\" data structure to visualize\n// multiple branches in a single ChangeQueue.\n// The data structure is basically a linked-list that contains\n// additional branches for items that are no longer relevant for the\n// main branch (e.g. merge conflicts in a dependent pipeline). The base\n// for the data structure is the \"items_behind\" relation of queue items.\n// As a result, each queue item will have a single item_behind in the\n// the main branch, while all other items_behind are moved to different\n// branches.\n//\n// In the example below the items A, B, D and F build the \"main\" branch,\n// while the items C and E create new branches (e.g. due to merge\n// conflicts). G is the item behind E, so it will also be part of the\n// branch starting with E.\n//\n// A\n// |\n// B\n// |-C\n// D\n// |-E\n// | |\n// F G\nconst createTree = (head) => {\n // Root of the tree/linked list\n let tree = null\n\n // Map for easier lookup of items by their id\n // NOTE: If filters are applied, this map contains only the items that\n // match the filter criteria. This can break the lookup of\n // items_behind, so we have to be aware of this.\n const itemsById = {}\n\n // First iteration: Create map for \"lookup by id\"\n head.forEach(item => {\n itemsById[item.id] = item\n })\n\n // Second iteration: Move each item to the correct position within\n // the tree\n head.forEach(node => {\n // node._next builds a linked-list to visualize the \"main\" branch\n // of the queue.\n node._next = null\n // Branches will contain all items_behind which are not part of\n // main branch.\n node._branches = []\n\n // Create the root of the tree\n if (tree === null) {\n tree = node\n }\n\n if (node.items_behind.length === 0) {\n // Basically a continue for the forEach loop\n return\n }\n\n // Copy the items_behind, so we pop() already assigned items without\n // affecting the original array.\n const items_behind = node.items_behind.slice()\n if (items_behind.length > 1) {\n // The last element in the list is the item_behind on the \"main\"\n // branch\n const item_behind = itemsById[items_behind.pop()]\n // If filters are applied, the item_behind might have been removed\n // from the head and we won't be able to visualize it.\n if (item_behind) {\n node._next = item_behind\n }\n // All other items_behind are failing ones, so they should be\n // added to separate branches\n items_behind.forEach(item => {\n const item_behind = itemsById[item]\n // If filters are applied, the item_behind might have been\n // removed from the head and we won't be able to visualize it.\n if (item_behind) {\n node._branches.push(item_behind)\n }\n })\n } else {\n // We have only one element, so add it to the main branch\n const item_behind = itemsById[items_behind.pop()]\n // If filters are applied, the item_behind might have been removed\n // from the head and we won't be able to visualize it.\n if (item_behind) {\n node._next = item_behind\n }\n }\n })\n\n return tree\n}\n\nfunction BranchIcon({ item }) {\n const iconConfig = getQueueItemIconConfig(item)\n const Icon = iconConfig.icon\n\n let reason = 'Succeeding'\n\n if (item.active !== true) {\n reason = 'Waiting until closer to head of queue to start jobs'\n } else if (item.live !== true) {\n reason = 'Dependent item required for testing'\n } else if (item.failing_reasons && item.failing_reasons.length > 0) {\n reason = 'Failing because ' + item.failing_reasons.join(', ')\n }\n\n return (\n \n \n \n )\n}\n\nBranchIcon.propTypes = {\n item: PropTypes.object.isRequired,\n}\n\n// Recursively render QueueItems to visualize a ChangeQueue.\nconst Branch = ({ item, pipeline, jobsExpanded, newBranch = false }) => {\n const iconConfig = getQueueItemIconConfig(item)\n\n const step = (\n <>\n }\n style={{ marginBottom: '16px' }}\n key={`ps-${item.id}`}\n >\n \n {/* To visualize a new branch, we put a ProgressStepper within\n the current ProgressStep. */}\n {item._branches.map((branch, idx) => (\n \n ))}\n \n {/* Items in the same branch must come after the current\n ProgressStep. We don't want them to be nested. */}\n {item._next !== null ? : ''}\n \n )\n\n const wrappedStep = (\n
    \n \n {step}\n \n
    \n )\n\n // If we want to start a new branch, we have to wrap the current\n // branch into a new ProgressStepper.\n if (newBranch) {\n return wrappedStep\n }\n\n // Otherwise, just return the current step\n return step\n}\n\nBranch.propTypes = {\n item: PropTypes.object.isRequired,\n pipeline: PropTypes.object.isRequired,\n newBranch: PropTypes.bool,\n jobsExpanded: PropTypes.bool,\n}\n\nfunction ChangeQueue({ queue, pipeline, jobsExpanded, showTitle=true }) {\n // TODO (felix): Use useMemo hook to cache the rendered tree across re-renders\n const trees = []\n queue.heads.filter(head => head.length > 0).forEach(head => (\n trees.push(createTree(head))\n ))\n\n return (\n <>\n \n {showTitle && queue.name ?\n \n \n {queue.name}\n {queue.branch ? ` (${queue.branch})` : ''}\n <Tooltip\n content={\n <div style={{ textAlign: 'left' }}>\n Queue length: {queue._count}<br />Window size: {queue.window}\n </div>\n }\n >\n <Badge\n isRead\n style={{ marginLeft: 'var(--pf-global--spacer--sm)', verticalAlign: '0.1em' }}\n >\n {queue._count} / {queue.window}\n </Badge>\n </Tooltip>\n \n \n : ''}\n \n \n {trees.map(tree => (\n \n \n \n ))}\n \n \n \n \n )\n}\n\nChangeQueue.propTypes = {\n queue: PropTypes.object,\n pipeline: PropTypes.object,\n tenant: PropTypes.object,\n showTitle: PropTypes.bool,\n jobsExpanded: PropTypes.bool,\n}\n\nexport default ChangeQueue\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const ADD_NOTIFICATION = 'ADD_NOTIFICATION'\nexport const CLEAR_NOTIFICATION = 'CLEAR_NOTIFICATION'\nexport const CLEAR_NOTIFICATIONS = 'CLEAR_NOTIFICATIONS'\n\nlet notificationId = 0\n\nexport const addNotification = notification => ({\n type: ADD_NOTIFICATION,\n id: notificationId++,\n notification\n})\n\nexport const addApiError = error => {\n const d = {\n url: (error && error.request && error.request.responseURL) || error.url,\n type: 'error',\n }\n if (error.response) {\n d.text = error.response.statusText\n d.status = error.response.status\n } else {\n d.status = 'Unable to fetch URL, check your network connectivity,'\n + ' browser plugins, ad-blockers, or try to refresh this page'\n d.text = error.message\n }\n return addNotification(d)\n}\n\nexport const clearNotification = id => ({\n type: CLEAR_NOTIFICATION,\n id\n})\n\nexport const clearNotifications = () => ({\n type: CLEAR_NOTIFICATIONS\n})\n","// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const TIMEZONE_SET = 'TIMEZONE_SET'\n\nexport function setTimezoneAction (name) {\n return {\n type: TIMEZONE_SET,\n timezone: name\n }\n}\n","// Copyright 2018 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport Axios from 'axios'\n\nimport * as API from '../api'\n\nimport { fetchLogfile } from './logfile'\n\nexport const BUILD_FETCH_REQUEST = 'BUILD_FETCH_REQUEST'\nexport const BUILD_FETCH_SUCCESS = 'BUILD_FETCH_SUCCESS'\nexport const BUILD_FETCH_FAIL = 'BUILD_FETCH_FAIL'\n\nexport const BUILDSET_FETCH_REQUEST = 'BUILDSET_FETCH_REQUEST'\nexport const BUILDSET_FETCH_SUCCESS = 'BUILDSET_FETCH_SUCCESS'\nexport const BUILDSET_FETCH_FAIL = 'BUILDSET_FETCH_FAIL'\n\nexport const BUILD_OUTPUT_REQUEST = 'BUILD_OUTPUT_FETCH_REQUEST'\nexport const BUILD_OUTPUT_SUCCESS = 'BUILD_OUTPUT_FETCH_SUCCESS'\nexport const BUILD_OUTPUT_FAIL = 'BUILD_OUTPUT_FETCH_FAIL'\nexport const BUILD_OUTPUT_NOT_AVAILABLE = 'BUILD_OUTPUT_NOT_AVAILABLE'\n\nexport const BUILD_MANIFEST_REQUEST = 'BUILD_MANIFEST_FETCH_REQUEST'\nexport const BUILD_MANIFEST_SUCCESS = 'BUILD_MANIFEST_FETCH_SUCCESS'\nexport const BUILD_MANIFEST_FAIL = 'BUILD_MANIFEST_FETCH_FAIL'\nexport const BUILD_MANIFEST_NOT_AVAILABLE = 'BUILD_MANIFEST_NOT_AVAILABLE'\n\nexport const requestBuild = () => ({\n type: BUILD_FETCH_REQUEST\n})\n\nexport const receiveBuild = (buildId, build) => ({\n type: BUILD_FETCH_SUCCESS,\n buildId: buildId,\n build: build,\n receivedAt: Date.now()\n})\n\nconst failedBuild = (buildId, error, url) => {\n error.url = url\n return {\n type: BUILD_FETCH_FAIL,\n buildId,\n error\n }\n}\n\nexport const requestBuildOutput = () => ({\n type: BUILD_OUTPUT_REQUEST\n})\n\n// job-output processing functions\nexport function renderTree(tenant, build, path, obj, textRenderer, defaultRenderer) {\n const node = {}\n let name = encodeURIComponent(obj.name)\n\n if ('children' in obj && obj.children) {\n node.nodes = obj.children.map(\n n => renderTree(tenant, build, path+name+'/', n,\n textRenderer, defaultRenderer))\n }\n if (obj.mimetype === 'application/directory') {\n name = name + '/'\n } else {\n node.icon = 'fa fa-file-o'\n }\n\n let log_url = build.log_url\n if (log_url.endsWith('/')) {\n log_url = log_url.slice(0, -1)\n }\n if (obj.mimetype === 'text/plain') {\n node.text = textRenderer(tenant, build, path, name, log_url, obj)\n } else {\n node.text = defaultRenderer(log_url, path, name, obj)\n }\n return node\n}\n\nexport function didTaskFail(task) {\n if (task.failed) {\n return true\n }\n if (task.results) {\n for (let result of task.results) {\n if (didTaskFail(result)) {\n return true\n }\n }\n }\n return false\n}\n\nexport function hasInterestingKeys (obj, keys) {\n return Object.entries(obj).filter(\n ([k, v]) => (keys.includes(k) && v !== '')\n ).length > 0\n}\n\nexport function findLoopLabel(item) {\n const label = item._ansible_item_label\n return typeof(label) === 'string' ? label : ''\n}\n\nexport function shouldIncludeKey(key, value, ignore_underscore, included) {\n if (ignore_underscore && key[0] === '_') {\n return false\n }\n if (included) {\n if (!included.includes(key)) {\n return false\n }\n if (value === '') {\n return false\n }\n }\n return true\n}\n\nexport function makeTaskPath (path) {\n return path.join('/')\n}\n\nexport function taskPathMatches (ref, test) {\n if (test.length < ref.length)\n return false\n for (let i=0; i < ref.length; i++) {\n if (ref[i] !== test[i])\n return false\n }\n return true\n}\n\n\nexport const receiveBuildOutput = (buildId, output) => {\n const hosts = {}\n\n const taskFailed = (taskResult) => {\n if (taskResult.rc && taskResult.failed_when_result !== false)\n return true\n else if (taskResult.failed)\n return true\n else\n return false\n }\n\n // Compute stats\n output.forEach(phase => {\n Object.entries(phase.stats).forEach(([host, stats]) => {\n if (!hosts[host]) {\n hosts[host] = stats\n hosts[host].failed = []\n } else {\n hosts[host].changed += stats.changed\n hosts[host].failures += stats.failures\n hosts[host].ok += stats.ok\n }\n if (stats.failures > 0) {\n // Look for failed tasks\n phase.plays.forEach(play => {\n play.tasks.forEach(task => {\n if (task.hosts[host]) {\n if (task.hosts[host].results &&\n task.hosts[host].results.length > 0) {\n task.hosts[host].results.forEach(result => {\n if (taskFailed(result)) {\n result.name = task.task.name\n hosts[host].failed.push(result)\n }\n })\n } else if (taskFailed(task.hosts[host])) {\n let result = task.hosts[host]\n result.name = task.task.name\n hosts[host].failed.push(result)\n }\n }\n })\n })\n }\n })\n })\n\n // Identify all of the hosttasks (and therefore tasks, plays, and\n // playbooks) which have failed. The errorIds are either task or\n // play uuids, or the phase+index for the playbook. Since they are\n // different formats, we can store them in the same set without\n // collisions.\n const errorIds = new Set()\n output.forEach(playbook => {\n playbook.plays.forEach(play => {\n play.tasks.forEach(task => {\n Object.entries(task.hosts).forEach(([, host]) => {\n if (didTaskFail(host)) {\n errorIds.add(task.task.id)\n errorIds.add(play.play.id)\n errorIds.add(playbook.phase + playbook.index)\n }\n })\n })\n })\n })\n\n return {\n type: BUILD_OUTPUT_SUCCESS,\n buildId: buildId,\n hosts: hosts,\n output: output,\n errorIds: errorIds,\n receivedAt: Date.now()\n }\n}\n\nconst failedBuildOutput = (buildId, error, url) => {\n error.url = url\n return {\n type: BUILD_OUTPUT_FAIL,\n buildId,\n error\n }\n}\n\nexport const requestBuildManifest = () => ({\n type: BUILD_MANIFEST_REQUEST\n})\n\nexport const receiveBuildManifest = (buildId, manifest) => {\n const index = {}\n\n const renderNode = (root, object) => {\n const path = root + '/' + object.name\n\n if ('children' in object && object.children) {\n object.children.map(n => renderNode(path, n))\n } else {\n index[path] = object\n }\n }\n\n manifest.tree.map(n => renderNode('', n))\n return {\n type: BUILD_MANIFEST_SUCCESS,\n buildId: buildId,\n manifest: {tree: manifest.tree, index: index,\n index_links: manifest.index_links},\n receivedAt: Date.now()\n }\n}\n\nconst failedBuildManifest = (buildId, error, url) => {\n error.url = url\n return {\n type: BUILD_MANIFEST_FAIL,\n buildId,\n error\n }\n}\n\nfunction buildOutputNotAvailable(buildId) {\n return {\n type: BUILD_OUTPUT_NOT_AVAILABLE,\n buildId: buildId,\n }\n}\n\nfunction buildManifestNotAvailable(buildId) {\n return {\n type: BUILD_MANIFEST_NOT_AVAILABLE,\n buildId: buildId,\n }\n}\n\nexport function fetchBuild(tenant, buildId, state) {\n return async function (dispatch) {\n // Although it feels a little weird to not do anything in an action creator\n // based on the redux state, we do this in here because the function is\n // called from multiple places and it's easier to check for the build in\n // here than in all the other places before calling this function.\n if (state.build.builds[buildId]) {\n return Promise.resolve()\n }\n\n dispatch(requestBuild())\n try {\n const response = await API.fetchBuild(tenant.apiPrefix, buildId)\n dispatch(receiveBuild(buildId, response.data))\n } catch (error) {\n dispatch(failedBuild(buildId, error, tenant.apiPrefix))\n // Raise the error again, so fetchBuildAllInfo() doesn't call the\n // remaining fetch methods.\n throw error\n }\n }\n}\n\nfunction fetchBuildOutput(buildId, state) {\n return async function (dispatch) {\n // In case the value is already set in our local state, directly resolve the\n // promise. A null value means that the output could not be found for this\n // build id.\n if (state.build.outputs[buildId] !== undefined) {\n return Promise.resolve()\n }\n // As this function is only called after fetchBuild() we can assume that\n // the build is in the state. Otherwise an error would have been thrown and\n // this function wouldn't be called.\n const build = state.build.builds[buildId]\n if (!build.log_url) {\n // Don't treat a missing log URL as failure as we don't want to show a\n // toast for that. The UI already informs about the missing log URL in\n // multiple places.\n return dispatch(buildOutputNotAvailable(buildId))\n }\n const url = build.log_url.substr(0, build.log_url.lastIndexOf('/') + 1)\n dispatch(requestBuildOutput())\n try {\n const response = await Axios.get(url + 'job-output.json.gz')\n dispatch(receiveBuildOutput(buildId, response.data))\n } catch (error) {\n if (!error.request) {\n dispatch(failedBuildOutput(buildId, error, url))\n // Raise the error again, so fetchBuildAllInfo() doesn't call the\n // remaining fetch methods.\n throw error\n }\n try {\n // Try without compression\n const response = await Axios.get(url + 'job-output.json')\n dispatch(receiveBuildOutput(buildId, response.data))\n } catch (error) {\n dispatch(failedBuildOutput(buildId, error, url))\n // Raise the error again, so fetchBuildAllInfo() doesn't call the\n // remaining fetch methods.\n throw error\n }\n }\n }\n}\n\nexport function fetchBuildManifest(buildId, state) {\n return async function(dispatch) {\n // In case the value is already set in our local state, directly resolve the\n // promise. A null value means that the manifest could not be found for this\n // build id.\n if (state.build.manifests[buildId] !== undefined) {\n return Promise.resolve()\n }\n // As this function is only called after fetchBuild() we can assume that\n // the build is in the state. Otherwise an error would have been thrown and\n // this function wouldn't be called.\n const build = state.build.builds[buildId]\n dispatch(requestBuildManifest())\n for (let artifact of build.artifacts) {\n if (\n 'metadata' in artifact &&\n 'type' in artifact.metadata &&\n artifact.metadata.type === 'zuul_manifest'\n ) {\n try {\n const response = await Axios.get(artifact.url)\n return dispatch(receiveBuildManifest(buildId, response.data))\n } catch(error) {\n // Show the error since we expected a manifest but did not\n // receive it.\n dispatch(failedBuildManifest(buildId, error, artifact.url))\n }\n }\n }\n // Don't treat a missing manifest file as failure as we don't want to show a\n // toast for that.\n dispatch(buildManifestNotAvailable(buildId))\n }\n}\n\nexport function fetchBuildAllInfo(tenant, buildId, logfileName) {\n // This wraps the calls to fetch the build, output and manifest together as\n // this is the common use case we have when loading the build info.\n return async function (dispatch, getState) {\n try {\n // Wait for the build to be available as fetchBuildOutput and\n // fetchBuildManifest require information from the build object.\n await dispatch(fetchBuild(tenant, buildId, getState()))\n dispatch(fetchBuildOutput(buildId, getState()))\n // Wait for the manifest info to be available as this is needed in case\n // we also download a logfile.\n await dispatch(fetchBuildManifest(buildId, getState()))\n if (logfileName) {\n dispatch(fetchLogfile(buildId, logfileName, getState()))\n }\n } catch (error) {\n dispatch(failedBuild(buildId, error, tenant.apiPrefix))\n }\n }\n}\n\nexport const requestBuildset = () => ({\n type: BUILDSET_FETCH_REQUEST\n})\n\nexport const receiveBuildset = (buildsetId, buildset) => ({\n type: BUILDSET_FETCH_SUCCESS,\n buildsetId: buildsetId,\n buildset: buildset,\n receivedAt: Date.now()\n})\n\nconst failedBuildset = (buildsetId, error) => ({\n type: BUILDSET_FETCH_FAIL,\n buildsetId,\n error\n})\n\nexport function fetchBuildset(tenant, buildsetId) {\n return async function(dispatch) {\n dispatch(requestBuildset())\n try {\n const response = await API.fetchBuildset(tenant.apiPrefix, buildsetId)\n dispatch(receiveBuildset(buildsetId, response.data))\n } catch (error) {\n dispatch(failedBuildset(buildsetId, error))\n }\n }\n}\n\nconst shouldFetchBuildset = (buildsetId, state) => {\n const buildset = state.build.buildsets[buildsetId]\n if (!buildset) {\n return true\n }\n if (buildset.isFetching) {\n return false\n }\n return false\n}\n\nexport const fetchBuildsetIfNeeded = (tenant, buildsetId, force) => (\n dispatch, getState) => {\n if (force || shouldFetchBuildset(buildsetId, getState())) {\n return dispatch(fetchBuildset(tenant, buildsetId))\n }\n}\n","// Copyright 2024 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport {\n Grid,\n GridItem,\n Tooltip,\n} from '@patternfly/react-core'\n\nimport {\n OutlinedClockIcon,\n StopwatchIcon,\n} from '@patternfly/react-icons'\n\nimport { IconProperty, formatTime } from '../../Misc'\nimport { QueueItemProgressbar } from './Misc'\n\n\nfunction QueueItemProgress({ item, times }) {\n\n const formatEnqueueTime = (ms) => {\n let hours = 60 * 60 * 1000\n let now = Date.now()\n let delta = now - ms\n let text = formatTime(delta)\n let color = 'var(--pf-global--success-color--100)'\n\n // TODO (felix): Those color \"thresholds\" are currently the same for\n // each job. Maybe we could define those based on the average job\n // run time (which would be the remaining time, right?).\n if (delta > (4 * hours)) {\n color = 'var(--pf-global--danger-color--100)'\n } else if (delta > (2 * hours)) {\n color = 'var(--pf-global--warning-color--100)'\n }\n\n return {text}\n }\n\n let remainingTime = '-'\n if (times.remaining !== null) {\n remainingTime = formatTime(times.remaining)\n }\n\n let className = 'zuul-remaining-time'\n let tooltipContent = 'Remaining Time'\n\n // If not all jobs have started, this will be null. In this case we\n // want to provide a different tooltip and add a small padding to the\n // unknown time indicator (-).\n if (item.remaining_time === null) {\n className = 'zuul-unknown-remaining-time'\n tooltipContent = 'Remaining Time unknown'\n }\n\n return (\n \n \n \n \n \n \n } value={formatEnqueueTime(item.enqueue_time)} />\n \n \n \n \n } value={`${remainingTime}`} />\n \n \n \n )\n}\n\n\nQueueItemProgress.propTypes = {\n item: PropTypes.object,\n times: PropTypes.object,\n}\n\nexport default QueueItemProgress\n","// Copyright 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nexport const STATUSEXPANSION_EXPAND_JOBS = 'STATUSEXPANSION_EXPAND_JOBS'\nexport const STATUSEXPANSION_COLLAPSE_JOBS = 'STATUSEXPANSION_COLLAPSE_JOBS'\nexport const STATUSEXPANSION_CLEANUP_JOBS = 'STATUSEXPANSION_CLEANUP_JOBS'\nexport const STATUSEXPANSION_CLEAR_JOBS = 'STATUSEXPANSION_CLEAR_JOBS'\n\nexport const STATUSEXPANSION_EXPAND_QUEUE = 'STATUSEXPANSION_EXPAND_QUEUE'\nexport const STATUSEXPANSION_COLLAPSE_QUEUE = 'STATUSEXPANSION_COLLAPSE_QUEUE'\nexport const STATUSEXPANSION_CLEANUP_QUEUE = 'STATUSEXPANSION_CLEANUP_QUEUE'\nexport const STATUSEXPANSION_CLEAR_QUEUE = 'STATUSEXPANSION_CLEAR_QUEUE'\n\nconst expandJobsAction = (key) => ({\n type: STATUSEXPANSION_EXPAND_JOBS,\n key: key,\n})\n\nconst collapseJobsAction = (key) => ({\n type: STATUSEXPANSION_COLLAPSE_JOBS,\n key: key,\n})\n\nconst cleanupJobsAction = (key) => ({\n type: STATUSEXPANSION_CLEANUP_JOBS,\n key: key,\n})\n\nconst clearJobsAction = () => ({\n type: STATUSEXPANSION_CLEAR_JOBS,\n})\n\nconst expandQueueAction = (key) => ({\n type: STATUSEXPANSION_EXPAND_QUEUE,\n key: key,\n})\n\nconst collapseQueueAction = (key) => ({\n type: STATUSEXPANSION_COLLAPSE_QUEUE,\n key: key,\n})\n\nconst cleanupQueueAction = (key) => ({\n type: STATUSEXPANSION_CLEANUP_QUEUE,\n key: key,\n})\n\nconst clearQueueAction = () => ({\n type: STATUSEXPANSION_CLEAR_QUEUE,\n})\n\nexport const expandJobs = (key) => (dispatch) => {\n dispatch(expandJobsAction(key))\n}\n\nexport const collapseJobs = (key) => (dispatch) => {\n dispatch(collapseJobsAction(key))\n}\n\nexport const cleanupJobs = (key) => (dispatch) => {\n dispatch(cleanupJobsAction(key))\n}\n\nexport const clearJobs = () => (dispatch) => {\n dispatch(clearJobsAction())\n}\n\nexport const expandQueue = (key) => (dispatch) => {\n dispatch(expandQueueAction(key))\n}\n\nexport const collapseQueue = (key) => (dispatch) => {\n dispatch(collapseQueueAction(key))\n}\n\nexport const cleanupQueue = (key) => (dispatch) => {\n dispatch(cleanupQueueAction(key))\n}\n\nexport const clearQueue = () => (dispatch) => {\n dispatch(clearQueueAction())\n}\n","// Copyright 2018 Red Hat, Inc\n// Copyright 2022, 2024 Acme Gating, LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const PROVIDERS_FETCH_REQUEST = 'PROVIDERS_FETCH_REQUEST'\nexport const PROVIDERS_FETCH_SUCCESS = 'PROVIDERS_FETCH_SUCCESS'\nexport const PROVIDERS_FETCH_FAIL = 'PROVIDERS_FETCH_FAIL'\n\nexport const requestProviders = () => ({\n type: PROVIDERS_FETCH_REQUEST\n})\n\nexport const receiveProviders = (tenant, json) => ({\n type: PROVIDERS_FETCH_SUCCESS,\n tenant: tenant,\n providers: json,\n receivedAt: Date.now()\n})\n\nconst failedProviders = error => ({\n type: PROVIDERS_FETCH_FAIL,\n error\n})\n\nexport const fetchProviders = (tenant) => dispatch => {\n dispatch(requestProviders())\n return API.fetchProviders(tenant.apiPrefix)\n .then(response => dispatch(receiveProviders(tenant.name, response.data)))\n .catch(error => dispatch(failedProviders(error)))\n}\n\nconst shouldFetchProviders = (tenant, state) => {\n const providers = state.providers.providers[tenant.name]\n if (!providers) {\n return true\n }\n if (providers.isFetching) {\n return false\n }\n return false\n}\n\nexport const fetchProvidersIfNeeded = (tenant) => (dispatch, getState) => {\n if (shouldFetchProviders(tenant, getState())) {\n return dispatch(fetchProviders(tenant))\n }\n return Promise.resolve()\n}\n","// Copyright 2020 BMW Group\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\nimport * as moment from 'moment'\nimport { ExternalLinkAltIcon } from '@patternfly/react-icons'\n\nfunction removeHash() {\n // Remove location hash from url\n window.history.pushState('', document.title, window.location.pathname)\n}\n\nfunction ExternalLink(props) {\n const { target } = props\n\n return (\n \n \n {props.children}\n {/* As we want the icon to be smaller than \"sm\", we have to specify the\n font-size directly */}\n \n \n \n )\n}\n\nExternalLink.propTypes = {\n target: PropTypes.string,\n children: PropTypes.node,\n}\n\nfunction buildExternalLink(ref) {\n /* TODO (felix): What should we show for periodic builds\n here? They don't provide a change, but the ref_url is\n also not usable */\n if (ref.ref_url && ref.change) {\n return (\n \n Change \n {ref.change},{ref.patchset}\n \n )\n } else if (ref.ref_url && ref.newrev) {\n return (\n \n Revision \n {ref.newrev.slice(0, 7)}\n \n )\n }\n\n return null\n}\n\nfunction buildExternalTableLink(ref) {\n /* TODO (felix): What should we show for periodic builds\n here? They don't provide a change, but the ref_url is\n also not usable */\n if (ref.ref_url && ref.change) {\n return (\n \n {ref.change},{ref.patchset}\n \n )\n } else if (ref.ref_url && ref.newrev) {\n return (\n \n {ref.newrev.slice(0, 7)}\n \n )\n }\n\n return null\n}\n\nfunction describeRef(ref) {\n if (ref.change) {\n return `Change ${ref.change}`\n } else {\n return `Ref ${ref.ref}`\n }\n}\n\nfunction renderRefInfo(ref) {\n const refinfo = ref.branch ? (\n <>\n Branch {ref.branch}\n \n ) : (\n <>\n Ref {ref.ref}\n \n )\n const oldrev = ref.oldrev ? (\n <>
    Old {ref.oldrev}\n ) : (<>)\n const newrev = ref.newrev ? (\n <>
    New {ref.newrev}\n ) : (<>)\n\n return (\n <>\n {refinfo}\n {oldrev}\n {newrev}\n \n )\n}\n\nfunction IconProperty(props) {\n const { icon, value, WrapElement = 'span' } = props\n return (\n \n \n {icon}\n \n {value}\n \n )\n}\n\nIconProperty.propTypes = {\n icon: PropTypes.node,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n WrapElement: PropTypes.func,\n}\n\n// https://github.com/kitze/conditional-wrap\n// appears to be the first implementation of this pattern\nconst ConditionalWrapper = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : children\n\nfunction resolveDarkMode(theme) {\n let darkMode = false\n\n if (theme === 'Auto') {\n let matchMedia = window.matchMedia || function () {\n return {\n matches: false,\n }\n }\n\n darkMode = matchMedia('(prefers-color-scheme: dark)').matches\n } else if (theme === 'Dark') {\n darkMode = true\n }\n\n return darkMode\n}\n\nfunction setDarkMode(darkMode) {\n if (darkMode) {\n document.documentElement.classList.add('pf-theme-dark')\n } else {\n document.documentElement.classList.remove('pf-theme-dark')\n }\n}\n\nfunction formatTime(ms) {\n return moment.duration(ms).format({\n template: 'h [hr] m [min]',\n largest: 2,\n minValue: 1,\n usePlural: false,\n })\n}\n\nexport {\n buildExternalLink,\n buildExternalTableLink,\n ConditionalWrapper,\n describeRef,\n ExternalLink,\n formatTime,\n IconProperty,\n removeHash,\n renderRefInfo,\n resolveDarkMode,\n setDarkMode,\n}\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\nimport * as API from '../api'\n\nexport const AUTOHOLDS_FETCH_REQUEST = 'AUTOHOLDS_FETCH_REQUEST'\nexport const AUTOHOLDS_FETCH_SUCCESS = 'AUTOHOLDS_FETCH_SUCCESS'\nexport const AUTOHOLDS_FETCH_FAIL = 'AUTOHOLDS_FETCH_FAIL'\n\nexport const AUTOHOLD_FETCH_REQUEST = 'AUTOHOLD_FETCH_REQUEST'\nexport const AUTOHOLD_FETCH_SUCCESS = 'AUTOHOLD_FETCH_SUCCESS'\nexport const AUTOHOLD_FETCH_FAIL = 'AUTOHOLD_FETCH_FAIL'\n\nexport const requestAutoholds = () => ({\n type: AUTOHOLDS_FETCH_REQUEST\n})\n\nexport const receiveAutoholds = (tenant, json) => ({\n type: AUTOHOLDS_FETCH_SUCCESS,\n autoholds: json,\n receivedAt: Date.now()\n})\n\nconst failedAutoholds = error => ({\n type: AUTOHOLDS_FETCH_FAIL,\n error\n})\n\nexport const fetchAutoholds = (tenant) => dispatch => {\n dispatch(requestAutoholds())\n return API.fetchAutoholds(tenant.apiPrefix)\n .then(response => dispatch(receiveAutoholds(tenant.name, response.data)))\n .catch(error => dispatch(failedAutoholds(error)))\n}\n\nconst shouldFetchAutoholds = (tenant, state) => {\n const autoholds = state.autoholds\n if (!autoholds || autoholds.autoholds.length === 0) {\n return true\n }\n if (autoholds.isFetching) {\n return false\n }\n if (Date.now() - autoholds.receivedAt > 60000) {\n // Refetch after 1 minutes\n return true\n }\n return false\n}\n\nexport const fetchAutoholdsIfNeeded = (tenant, force) => (\n dispatch, getState) => {\n if (force || shouldFetchAutoholds(tenant, getState())) {\n return dispatch(fetchAutoholds(tenant))\n }\n}\n\nexport const requestAutohold = () => ({\n type: AUTOHOLD_FETCH_REQUEST\n})\n\nexport const receiveAutohold = (tenant, json) => ({\n type: AUTOHOLD_FETCH_SUCCESS,\n autohold: json,\n receivedAt: Date.now()\n})\n\nconst failedAutohold = error => ({\n type: AUTOHOLD_FETCH_FAIL,\n error\n})\n\nexport const fetchAutohold = (tenant, requestId) => dispatch => {\n dispatch(requestAutohold())\n return API.fetchAutohold(tenant.apiPrefix, requestId)\n .then(response => dispatch(receiveAutohold(tenant.name, response.data)))\n .catch(error => dispatch(failedAutohold(error)))\n}\n","// Copyright 2020 Red Hat, Inc\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n// not use this file except in compliance with the License. You may obtain\n// a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n\nimport * as API from '../api'\n\nexport const AUTH_CONFIG_REQUEST = 'AUTH_CONFIG_REQUEST'\nexport const AUTH_CONFIG_SUCCESS = 'AUTH_CONFIG_SUCCESS'\nexport const AUTH_CONFIG_FAIL = 'AUTH_CONFIG_FAIL'\n\nexport const USER_ACL_REQUEST = 'USER_ACL_REQUEST'\nexport const USER_ACL_SUCCESS = 'USER_ACL_SUCCESS'\nexport const USER_ACL_FAIL = 'USER_ACL_FAIL'\n\nexport const AUTH_START = 'AUTH_START'\n\nconst authConfigRequest = () => ({\n type: AUTH_CONFIG_REQUEST\n})\n\nfunction createAuthParamsFromJson(json) {\n let auth_info = json.info.capabilities.auth\n\n let auth_params = {\n authority: '',\n client_id: '',\n scope: '',\n loadUserInfo: true,\n }\n if (!auth_info) {\n console.log('No auth config')\n return auth_params\n }\n const realm = auth_info.default_realm\n const client_config = auth_info.realms[realm]\n if (client_config && client_config.driver === 'OpenIDConnect') {\n auth_params.client_id = client_config.client_id\n auth_params.scope = client_config.scope\n auth_params.authority = client_config.authority\n auth_params.loadUserInfo = client_config.load_user_info\n return auth_params\n } else {\n console.log('No OpenIDConnect provider found')\n return auth_params\n }\n}\n\nconst authConfigSuccess = (json, auth_params) => ({\n type: AUTH_CONFIG_SUCCESS,\n info: json.info.capabilities.auth,\n auth_params: auth_params,\n})\n\nconst authConfigFail = error => ({\n type: AUTH_CONFIG_FAIL,\n error\n})\n\nexport const configureAuthFromTenant = (tenantName) => (dispatch) => {\n dispatch(authConfigRequest())\n return API.fetchTenantInfo('tenant/' + tenantName + '/')\n .then(response => {\n dispatch(authConfigSuccess(\n response.data,\n createAuthParamsFromJson(response.data)))\n })\n .catch(error => {\n dispatch(authConfigFail(error))\n })\n}\n\nexport const configureAuthFromInfo = (info) => (dispatch) => {\n try {\n dispatch(authConfigSuccess(\n {info: info},\n createAuthParamsFromJson({info: info})))\n } catch(error) {\n dispatch(authConfigFail(error))\n }\n}\n"],"sourceRoot":""}