dicomweb-pacs
Version:
A self contained easy to use PACS with DICOMWEB and DIMSE service support
2 lines • 370 kB
JavaScript
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7241],{35392:(e,t,n)=>{n.d(t,{K:()=>w,i:()=>f});var o=n(86326),i=n(99993),a=n(55530),r=n.n(a),s=n(2836),l=n(15327);function c({colormaps:e,viewportId:t,displaySets:n,commandsManager:i,servicesManager:a}){const{cornerstoneViewportService:r}=a.services,[c,d]=(0,o.useState)(n[0]),[m,p]=(0,o.useState)(!1),[u,g]=(0,o.useState)(null),S=(0,o.useRef)(m);S.current=m;const I=(0,o.useRef)(u);I.current=u;const v=(0,o.useRef)(c);v.current=c;const y=(0,o.useCallback)((e=>{const t=n.length>1&&!["Grayscale","X Ray"].includes(e.colormap.name)?.5:1;i.run({commandName:"setViewportColormap",commandOptions:{...e,opacity:t,immediate:!0},context:"CORNERSTONE"})}),[i]),h=n.findIndex((e=>e.displaySetInstanceUID===v.current.displaySetInstanceUID));return(0,o.useEffect)((()=>{d(n[n.length-1])}),[n]),o.createElement(o.Fragment,null,n.length>1&&o.createElement("div",{className:"flex h-8 w-full flex-shrink-0 items-center justify-center px-2 text-base"},o.createElement(s.tUM,{value:String(h),onValueChange:e=>{const t=parseInt(e,10);d(n[t]),g(null)}},o.createElement(s.j7C,null,n.map(((e,t)=>o.createElement(s.Xib,{key:t,value:String(t)},e.Modality)))))),o.createElement("div",{className:"hover:bg-accent flex h-8 w-full flex-shrink-0 cursor-pointer items-center px-2 text-base hover:rounded",onClick:()=>p(!m)},o.createElement("span",{className:"flex-shrink-0"},"Preview in viewport"),o.createElement(s.dOG,{className:"ml-auto flex-shrink-0",checked:m,onCheckedChange:e=>{p(e)}})),o.createElement(s.se.DividerItem,null),o.createElement(s.se.ItemPanel,{maxHeight:"calc(100vh - 250px)",className:"min-h-[200px] flex-grow"},e.map(((n,i)=>o.createElement(s.se.Item,{key:i,label:n.description,useIconSpace:!1,onClick:()=>{y({viewportId:t,colormap:n,displaySetInstanceUID:v.current.displaySetInstanceUID}),g(null)},onMouseEnter:()=>{S.current&&(g(((t,n)=>{const{displaySetInstanceUID:o}=n,i=r.getCornerstoneViewport(t);if(i instanceof l.StackViewport){const{colormap:t}=i.getProperties();return t||e.find((e=>"Grayscale"===e.Name))||e[0]}const a=i.getActors(),s=a?.find((e=>e.referencedId.includes(o))),{colormap:c}=i.getProperties(s.referencedId);return c||e.find((e=>"Grayscale"===e.Name))||e[0]})(t,v.current)),y({viewportId:t,colormap:n,displaySetInstanceUID:v.current.displaySetInstanceUID}))},onMouseLeave:()=>{S.current&&I.current&&y({viewportId:t,colormap:I.current,displaySetInstanceUID:v.current.displaySetInstanceUID})}})))))}function d(e,t,n,o,i){const{cornerstoneViewportService:a}=o.services,r=a.getCornerstoneViewport(e),s=a.getViewportInfo(e).getViewportOptions().background;!!s&&l.utilities.isEqual(s,[1,1,1])&&(i.ticks={position:"left",style:{font:"13px Inter",color:"#000000",maxNumTicks:8,tickSize:5,tickWidth:1,labelMargin:3}});const c=[];r instanceof l.StackViewport&&c.push(e),r instanceof l.VolumeViewport&&t.forEach((e=>{c.push(e.displaySetInstanceUID)})),n.run({commandName:"toggleViewportColorbar",commandOptions:{viewportId:e,options:i,displaySetInstanceUIDs:c},context:"CORNERSTONE"})}function m({viewportId:e,displaySets:t,commandsManager:n,servicesManager:i,colorbarProperties:a}){const{colorbarService:r}=i.services,{width:l,colorbarTickPosition:c,colorbarContainerPosition:m,colormaps:p,colorbarInitialColormap:u}=a,[g,S]=(0,o.useState)(r.hasColorbar(e)),I=(0,o.useCallback)((()=>{d(e,t,n,i,{viewportId:e,colormaps:p,ticks:{position:c},width:l,position:m,activeColormapName:u})}),[n]);return(0,o.useEffect)((()=>{const{unsubscribe:t}=r.subscribe(r.EVENTS.STATE_CHANGED,(()=>{S(r.hasColorbar(e))}));return()=>{t()}}),[e]),o.createElement("div",{className:"hover:bg-accent flex h-8 w-full flex-shrink-0 cursor-pointer items-center px-2 text-base hover:rounded",onClick:e=>{e.stopPropagation(),I()}},o.createElement("div",{className:"flex w-7 flex-shrink-0 items-center justify-center"}),o.createElement("span",{className:"flex-grow"},"Display Color bar"),o.createElement(s.dOG,{className:"ml-2 flex-shrink-0",checked:g,onClick:e=>{e.stopPropagation(),I()}}))}function p({viewportId:e,commandsManager:t,presets:n}){const{t:a}=(0,i.Bd)("WindowLevelActionMenu"),r=(0,o.useCallback)((n=>{t.run({commandName:"setViewportWindowLevel",commandOptions:{...n,viewportId:e},context:"CORNERSTONE"})}),[t,e]);return o.createElement(s.se.ItemPanel,null,n.map(((e,t)=>o.createElement(o.Fragment,{key:t},Object.entries(e).map((([e,t])=>o.createElement(o.Fragment,{key:e},o.createElement(s.se.HeaderItem,null,a("Modality Presets",{modality:e})),t.map(((t,n)=>o.createElement(s.se.Item,{key:`${e}-${n}`,label:t.description,secondaryLabel:`${t.window} / ${t.level}`,useIconSpace:!1,onClick:()=>r(t)}))))))))))}function u({presets:e,viewportId:t,commandsManager:n,hide:i}){const[a,r]=(0,o.useState)(""),[l,c]=(0,o.useState)(null),d=(0,o.useCallback)((e=>{r(e.target.value)}),[]),m=(0,o.useCallback)((e=>{n.runCommand("setViewportPreset",{...e})}),[n]),p=a?e.filter((e=>e.name.toLowerCase().includes(a.toLowerCase()))):e;return o.createElement(s.MUF,{className:"h-[500px]"},o.createElement(s.MUF.PresetBody,null,o.createElement(s.MUF.PresetFilter,null,o.createElement(s.MUF.PresetSearch,{value:a,onChange:d,placeholder:"Search all"})),o.createElement(s.MUF.PresetGrid,null,p.map(((e,n)=>{return o.createElement("div",{key:n,className:"flex cursor-pointer flex-col items-start",onClick:()=>{c(e),m({preset:e.name,viewportId:t})}},o.createElement(s.FI1.ByName,{name:e.name,className:l?.name===e.name?"border-highlight h-[75px] w-[95px] max-w-none rounded border-2":"hover:border-highlight h-[75px] w-[95px] max-w-none rounded border-2 border-black"}),o.createElement("label",{className:"text-muted-foreground mt-1 text-left text-xs"},(i=e.name,a=11,i.length>a?`${i.slice(0,a)}...`:i)));var i,a})))),o.createElement(s.esu,{className:"mt-4 flex-shrink-0"},o.createElement(s.esu.Right,null,o.createElement(s.esu.Secondary,{onClick:i},"Cancel"))))}function g({viewportId:e,servicesManager:t,commandsManager:n,volumeRenderingPresets:i}){const{uiDialogService:a}=t.services;return o.createElement(s.se.Item,{label:"Rendering Presets",icon:o.createElement(s.FI1.VolumeRendering,null),rightIcon:o.createElement(s.FI1.ByName,{name:"action-new-dialog"}),onClick:()=>{a.show({id:"volume-rendering-presets",content:u,title:"Rendering Presets",isDraggable:!0,contentProps:{presets:i,viewportId:e,commandsManager:n}})}})}function S({volumeRenderingQualityRange:e,commandsManager:t,servicesManager:n,viewportId:i}){const{cornerstoneViewportService:a}=n.services,{min:r,max:l,step:c}=e,[d,m]=(0,o.useState)(null),p=(0,o.useCallback)((e=>{t.runCommand("setVolumeRenderingQulaity",{viewportId:i,volumeQuality:e}),m(e)}),[t,i]);return(0,o.useEffect)((()=>{const e=a.getCornerstoneViewport(i),{actor:t}=e.getActors()[0],n=t.getMapper(),o=n.getInputData().getSpacing(),r=n.getSampleDistance(),s=o.reduce(((e,t)=>e+t))/3;m(r===s?1:Math.sqrt(s/(.5*r)))}),[a,i]),o.createElement("div",{className:"my-1 mt-2 flex flex-col space-y-2"},null!==d&&o.createElement("div",{className:"w-full pl-2 pr-1"},o.createElement(s.ewR.Container,{mode:"singleRange",min:r,max:l,step:c,value:d,onChange:p},o.createElement("div",{className:"flex flex-row items-center"},o.createElement(s.ewR.Label,{className:"w-16"},"Quality"),o.createElement(s.ewR.SingleRange,{sliderClassName:"mx-2 flex-grow"})))))}function I({viewportId:e,commandsManager:t,servicesManager:n}){const{cornerstoneViewportService:i}=n.services,[a,r]=(0,o.useState)(null),[l,c]=(0,o.useState)(null),[d,m]=(0,o.useState)(i.getCornerstoneViewport(e)?.shiftedBy||0),[p,u]=(0,o.useState)(null),[g,S]=(0,o.useState)(!1),I=(0,o.useRef)(d),v=i.getCornerstoneViewport(e),{actor:y}=v.getActors()[0],h=y.getProperty().getScalarOpacity(0);(0,o.useEffect)((()=>{if(g)return;const e=h.getRange(),t=e[1]-e[0],n=t;r(-t),c(n),u(Math.pow(10,Math.floor(Math.log10(t/500))))}),[i,e,y,h,g]);const f=(0,o.useCallback)((n=>{const o=n-I.current;I.current=n,v.shiftedBy=n,t.runCommand("shiftVolumeOpacityPoints",{viewportId:e,shift:o}),m(n)}),[t,e,v]);return o.createElement("div",{className:"my-1 mt-2 flex flex-col space-y-2"},null!==p&&null!==a&&null!==l&&o.createElement("div",{className:"w-full pl-2 pr-1"},o.createElement(s.ewR.Container,{mode:"singleRange",min:a,max:l,step:p,value:d,onChange:f,onMouseDown:()=>S(!0),onMouseUp:()=>S(!1)},o.createElement("div",{className:"flex flex-row items-center"},o.createElement(s.ewR.Label,{className:"w-16"},"Shift"),o.createElement(s.ewR.SingleRange,{sliderClassName:"mx-2 flex-grow"})))))}function v({servicesManager:e,commandsManager:t,viewportId:n,hasShade:i}){const{cornerstoneViewportService:a}=e.services,[r,l]=(0,o.useState)({ambient:null,diffuse:null,specular:null}),c=(0,o.useCallback)(((e,o)=>{t.runCommand("setVolumeLighting",{viewportId:n,options:{[e]:o}}),l((t=>({...t,[e]:o})))}),[t,n]);(0,o.useEffect)((()=>{const e=a.getCornerstoneViewport(n),{actor:t}=e.getActors()[0],o=t.getProperty(),i={ambient:o.getAmbient(),diffuse:o.getDiffuse(),specular:o.getSpecular()};l(i)}),[n,a]);const d=i?"":"ohif-disabled !opacity-40";return o.createElement("div",{className:"my-1 mt-2 flex flex-col space-y-2"},[{key:"ambient",label:"Ambient"},{key:"diffuse",label:"Diffuse"},{key:"specular",label:"Specular"}].map((({key:e,label:t})=>null!==r[e]&&o.createElement("div",{key:e,className:`w-full pl-2 pr-1 ${d}`},o.createElement(s.ewR.Container,{mode:"singleRange",min:0,max:1,step:.1,value:r[e],onChange:t=>c(e,t)},o.createElement("div",{className:"flex flex-row items-center"},o.createElement(s.ewR.Label,{className:"w-16"},t),o.createElement(s.ewR.SingleRange,{sliderClassName:"mx-2 flex-grow"})))))))}function y({commandsManager:e,viewportId:t,servicesManager:n,onClickShade:i=(e=>{})}){const{cornerstoneViewportService:a}=n.services,[r,l]=(0,o.useState)(!0),[c,d]=(0,o.useState)(0),m=(0,o.useCallback)((n=>{e.runCommand("setVolumeLighting",{viewportId:t,options:{shade:n}})}),[e,t]);return(0,o.useEffect)((()=>{const e=a.getCornerstoneViewport(t),{actor:n}=e.getActors()[0],o=n.getProperty().getShade();l(o),i(o),d(c+1)}),[t,a]),o.createElement(o.Fragment,null,o.createElement("span",{className:"flex-grow"},"Shade"),o.createElement(s.dOG,{className:"ml-2 flex-shrink-0",key:c,checked:r,onCheckedChange:()=>{l(!r),i(!r),m(!r)}}))}function h({viewportId:e,commandsManager:t,volumeRenderingQualityRange:n,servicesManager:i}){const[a,r]=(0,o.useState)(!1);return o.createElement(s.se.ItemPanel,null,o.createElement(S,{viewportId:e,commandsManager:t,servicesManager:i,volumeRenderingQualityRange:n}),o.createElement(I,{viewportId:e,commandsManager:t,servicesManager:i}),o.createElement("div",{className:"mt-2 flex h-8 !h-[20px] w-full flex-shrink-0 items-center justify-start px-2 text-base"},o.createElement("div",{className:"text-muted-foreground text-sm"},"Lighting")),o.createElement("div",{className:"bg-background mt-1 mb-1 h-px w-full"}),o.createElement("div",{className:"hover:bg-accent flex h-8 w-full flex-shrink-0 items-center px-2 text-base hover:rounded"},o.createElement(y,{commandsManager:t,servicesManager:i,viewportId:e,onClickShade:r})),o.createElement(v,{viewportId:e,commandsManager:t,servicesManager:i,hasShade:a}))}const f=["SR","SEG","SM","RTSTRUCT","RTPLAN","RTDOSE"];function w({viewportId:e,element:t,presets:n,verticalDirection:a,horizontalDirection:u,commandsManager:S,servicesManager:I,colorbarProperties:v,displaySets:y,volumeRenderingPresets:w,volumeRenderingQualityRange:E}){const{colormaps:T,colorbarContainerPosition:b,colorbarInitialColormap:D,colorbarTickPosition:C,width:O}=v,{colorbarService:M,cornerstoneViewportService:N}=I.services,V=N.getViewportInfo(e),R=N.getCornerstoneViewport(e),A=V?.getViewportOptions().background,U=!!A&&l.utilities.isEqual(A,[1,1,1]),{t:P}=(0,i.Bd)("WindowLevelActionMenu"),[x]=(0,s.ihW)(),{activeViewportId:F}=x,[_,L]=(0,o.useState)(t?.clientHeight),[G,k]=(0,o.useState)(0),[z,B]=(0,o.useState)(!1),$=(0,o.useCallback)((()=>{d(e,y,S,I,{colormaps:T,ticks:{position:C},width:O,position:b,activeColormapName:D})}),[S]);return(0,o.useEffect)((()=>{const e=t?.clientHeight;_!==e&&L(e)}),[t,_]),(0,o.useEffect)((()=>{M.hasColorbar(e)&&window.setTimeout((()=>{M.removeColorbar(e),$()}),0)}),[e,y,R]),(0,o.useEffect)((()=>{k(G+1);N.getCornerstoneViewport(e)instanceof l.VolumeViewport3D?B(!0):B(!1)}),[y,e,n,E,w,v,F,x]),o.createElement(s.se.IconMenu,{icon:"viewport-window-level",verticalDirection:a,horizontalDirection:u,iconClassName:r()(F===e?"visible":"invisible group-hover/pane:visible","flex shrink-0 cursor-pointer rounded active:text-foreground text-highlight",U?" hover:bg-primary/30":"hover:bg-primary/30"),menuStyle:{maxHeight:_-32,minWidth:218},onVisibilityChange:()=>{L(t.clientHeight)},menuKey:G},o.createElement(s.se.ItemPanel,null,!z&&o.createElement(m,{viewportId:e,displaySets:y.filter((e=>!f.includes(e.Modality))),commandsManager:S,servicesManager:I,colorbarProperties:v}),T&&!z&&o.createElement(s.se.SubMenu,{key:"colorLUTPresets",itemLabel:"Color LUT",itemIcon:"icon-color-lut",className:"flex h-[calc(100%-32px)] flex-col"},o.createElement(c,{className:"flex h-full w-full flex-col",colormaps:T,viewportId:e,displaySets:y.filter((e=>!f.includes(e.Modality))),commandsManager:S,servicesManager:I})),n&&n.length>0&&!z&&o.createElement(s.se.SubMenu,{key:"windowLevelPresets",itemLabel:P("Modality Window Presets"),itemIcon:"viewport-window-level"},o.createElement(p,{viewportId:e,commandsManager:S,presets:n})),w&&z&&o.createElement(g,{servicesManager:I,viewportId:e,commandsManager:S,volumeRenderingPresets:w}),E&&z&&o.createElement(s.se.SubMenu,{itemLabel:"Rendering Options"},o.createElement(h,{viewportId:e,commandsManager:S,volumeRenderingQualityRange:E,servicesManager:I}))))}},76255:(e,t,n)=>{n.d(t,{It:()=>d,R4:()=>m});var o=n(86326),i=n(97598),a=n.n(i),r=n(2836),s=n(77954);const l={default:{[r.ldS.topLeft]:[],[r.ldS.topRight]:[],[r.ldS.bottomLeft]:[],[r.ldS.bottomRight]:[]}},c=(0,o.createContext)(l);function d({children:e,service:t}){const[n,i]=(0,o.useReducer)(((e,t)=>{switch(t.type){case"ADD_ACTION_COMPONENT":{const{viewportId:n,id:o,component:i,location:a,indexPriority:s}=t.payload;let l=e?.[n]?.[a]?[...e[n][a]]:[];const c=l.findIndex((e=>e.id===o));if(-1!==c&&(l=[...l.slice(0,c),...l.slice(c+1)]),i){let e;const t=a===r.ldS.topRight||a===r.ldS.bottomRight;void 0===s?e=t?0:l.length:(e=t?l.findIndex((e=>s>e.indexPriority)):l.findIndex((e=>s<=e.indexPriority)),-1===e&&(e=t?0:l.length));const n=t?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER;l=[...l.slice(0,e),{id:o,component:i,indexPriority:s??n},...l.slice(e)]}return{...e,[n]:{...e[n],[a]:l}}}case"CLEAR_ACTION_COMPONENTS":{const n=t.payload,o={...e};return delete o[n],o}default:return{...e}}}),l),a=(0,o.useCallback)((()=>n),[n]),s=(0,o.useCallback)((e=>{i({type:"ADD_ACTION_COMPONENT",payload:e})}),[i]),d=(0,o.useCallback)((e=>{e.forEach((e=>i({type:"ADD_ACTION_COMPONENT",payload:e})))}),[i]),m=(0,o.useCallback)((e=>i({type:"CLEAR_ACTION_COMPONENTS",payload:e})),[i]);(0,o.useEffect)((()=>{t&&t.setServiceImplementation({getState:a,addComponent:s,addComponents:d,clear:m})}),[a,t,s,d,m]);const p={getState:a,addComponent:e=>t.addComponent(e),addComponents:e=>t.addComponents(e),clear:e=>t.clear(e)},u=(0,o.useMemo)((()=>[n,p]),[n,p]);return o.createElement(c.Provider,{value:u},e)}d.propTypes={children:a().node,service:a().instanceOf(s.A).isRequired};const m=()=>(0,o.useContext)(c)},73421:(e,t,n)=>{n.d(t,{j:()=>c});var o=n(86326),i=n(62051),a=n.n(i),r=n(80735),s=n(62037);function l(e,t){const{label:n,segments:o}=e,i=t.getCustomization("panelSegmentation.readableText");function a(e,t=0){const n=[],o=" ".repeat(t);for(const s in e)if(Object.prototype.hasOwnProperty.call(e,s)){const l=e[s],c=i?.[s];if(!c)continue;"object"!=typeof l||null===l||Array.isArray(l)?n.push(`${o}${c}: ${(0,r.Wf)(l,2)}`):(n.length>0&&n.push(""),n.push(`${o}${c}`),n.push(...a(l,t+1)))}return n}const s=e=>{const t={primary:[],secondary:[]};if(e.cachedStats){const n=a(e.cachedStats);t.primary=n}return t},l={};return Object.entries(o).forEach((([e,t])=>{l[e]={...t,displayText:s(t)}})),{...e,label:n,segments:l}}function c(e){const{subscribeToDataModified:t=!1,debounceTime:n=0}=e||{},{servicesManager:i}=(0,s.Jg)(),{segmentationService:r,customizationService:c}=i.services,[d,m]=(0,o.useState)([]);return(0,o.useEffect)((()=>{const e=()=>{const e=r.getSegmentations();if(!e?.length)return void m([]);const t=e.map((e=>l(e,c)));m(t)},o=n>0?a()(e,n,{leading:!0,trailing:!0}):e;e();const i=[r.subscribe(r.EVENTS.SEGMENTATION_MODIFIED,o),r.subscribe(r.EVENTS.SEGMENTATION_REMOVED,o)];return t&&i.push(r.subscribe(r.EVENTS.SEGMENTATION_DATA_MODIFIED,o)),()=>{i.forEach((e=>e.unsubscribe())),n>0&&o.cancel()}}),[r,c,n,t]),d}},7241:(e,t,n)=>{n.r(t),n.d(t,{AccordionGroup:()=>ai,CloneChildren:()=>oi,CornerstoneViewportDownloadForm:()=>Zt,DicomUpload:()=>At,Enums:()=>m,ImageOverlayViewerTool:()=>R,MeasumentsMenu:()=>Ui,MeasurementOrAdditionalFindingSets:()=>Si,MeasurementsOrAdditionalFindings:()=>vi,PanelMeasurement:()=>Mi,PanelSegmentation:()=>jo,PlanarFreehandROI:()=>Q,RectangleROI:()=>Z,SeriesMeasurementTrigger:()=>zi,SeriesMeasurements:()=>Bi,StudyMeasurements:()=>Ci,StudyMeasurementsActions:()=>wi,StudySummaryFromMetadata:()=>fi,Types:()=>a,default:()=>Ki,dicomLoaderService:()=>Eo,findNearbyToolData:()=>Re,getActiveViewportEnabledElement:()=>w,getEnabledElement:()=>f.kJ,getSOPInstanceAttributes:()=>_,groupByDisplaySet:()=>ki,groupByNamedSets:()=>Ii,groupByStudy:()=>Di,measurementMappingUtils:()=>i,setEnabledElement:()=>f.ye,toolNames:()=>A,useActiveViewportSegmentationRepresentations:()=>Bo,useLutPresentationStore:()=>ze.I,useMeasurements:()=>$o,usePositionPresentationStore:()=>Be.q,useSegmentationPresentationStore:()=>$e.v,useSegmentations:()=>Vi.j,useSynchronizersStore:()=>qt.U,utils:()=>Ai});var o={};n.r(o),n.d(o,{rM:()=>c,yK:()=>d,Ay:()=>m});var i={};n.r(i),n.d(i,{getDisplayUnit:()=>$,getFirstAnnotationSelected:()=>B,getHandlesFromPoints:()=>G,getSOPInstanceAttributes:()=>_,isAnnotationSelected:()=>k,setAnnotationSelected:()=>z});var a={};n.r(a);var r=n(86326),s=n(15327),l=n(4667);const c="Cornerstone3DTools",d="0.1",m={CORNERSTONE_3D_TOOLS_SOURCE_NAME:c,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:d};var p=n(62037),u=n(19742),g=n(43213),S=n(79453);const{registerVolumeLoader:I}=s.volumeLoader;var v=n(66123),y=n(56983),h=n(43984),f=n(71353);function w(e){const{activeViewportId:t}=e.getState(),{element:n}=(0,f.kJ)(t)||{};return(0,s.getEnabledElement)(n)}const{calibrateImageSpacing:E}=l.utilities;class T extends l.LengthTool{constructor(...e){super(...e),this._renderingViewport=void 0,this._lengthToolRenderAnnotation=this.renderAnnotation,this.renderAnnotation=(e,t)=>{const{viewport:n}=e;return this._renderingViewport=n,this._lengthToolRenderAnnotation(e,t)}}_getTextLines(e,t){const[n,o]=e.handles.points.map((e=>this._renderingViewport.worldToCanvas(e)));return[`${Math.round(100*function(e,t){const n=e[0]-t[0],o=e[1]-t[1];return Math.sqrt(n*n+o*o)}(n,o))/100}px`]}}T.toolName="CalibrationLine";const b=T;function D(e,t){const{uiDialogService:n,viewportGridService:o}=e.services,i=t.detail,{annotation:{metadata:a,data:r}}=i,{referencedImageId:s}=a,l=w(o),{viewport:c}=l,d=Math.round(100*function(e,t){const n=e[0]-t[0],o=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+o*o+i*i)}(r.handles.points[0],r.handles.points[1]))/100;return new Promise(((e,t)=>{n?(0,h.callInputDialog)({uiDialogService:n,title:"Calibration",placeholder:"Actual Physical distance (mm)",defaultValue:`${d}`}).then((t=>{(e=>{const t=e/d;E(s,c.getRenderingEngine(),{type:"User",scale:1/t})})(Number.parseFloat(t)),e(!0)})):t("UIDialogService is not initiated")}))}var C=n(80735);const O=new Map,M={add:(e,t)=>{O.get(e)!==t&&O.set(e,t)},get:(e,t)=>{if(!Array.isArray(t)&&"overlayPlaneModule"===e)return O.get(t)}};s.metaData.addProvider(M.get,1e4);const N=M;class V extends l.AnnotationDisplayTool{constructor(e={},t={supportedInteractionTypes:[],configuration:{fillColor:[255,127,127,255]}}){super(e,t),this.onSetToolDisabled=()=>{},this.renderAnnotation=(e,t)=>{const{viewport:n}=e,o=this.getReferencedImageId(n);if(!o)return;const i=s.metaData.get("overlayPlaneModule",o),a=i?.overlays;return a?.length?(a.forEach((e=>{e.x||=0,e.y||=0})),V.addOverlayPlaneModule(o,i),this._getCachedStat(o,i,this.configuration.fillColor).then((n=>{n.overlays.forEach((n=>{this._renderOverlay(e,t,n)}))})),!0):void 0}}getReferencedImageId(e){if(e instanceof s.VolumeViewport)return;return this.getTargetId(e).split("imageId:")[1]}_renderOverlay(e,t,n){const{viewport:o}=e,i=this.getReferencedImageId(o);if(!i)return;const{_id:a,columns:r,rows:c,x:d,y:m}=n,p=s.utilities.imageToWorldCoords(i,[d-1,m-1]),u=o.worldToCanvas(p),g=s.utilities.imageToWorldCoords(i,[r,c]),S=o.worldToCanvas(g),I=`image-overlay-${a}`,v=t.getSvgNode(I),y={"data-id":I,width:S[0]-u[0],height:S[1]-u[1],x:u[0],y:u[1],href:n.dataUrl};if(isNaN(y.x)||isNaN(y.y)||isNaN(y.width)||isNaN(y.height))return console.warn("Invalid rendering attribute for image overlay",y["data-id"]),!1;if(v)l.drawing.setAttributesIfNecessary(y,v),t.setNodeTouched(I);else{const e=document.createElementNS("http://www.w3.org/2000/svg","image");l.drawing.setNewAttributesIfValid(y,e),t.appendNode(e,I)}return!0}async _getCachedStat(e,t,n){if(0===t.overlays.filter((e=>e.pixelData&&!e.dataUrl)).length)return t;const o=await Promise.all(t.overlays.filter((e=>e.pixelData)).map((async(e,t)=>{let o=null;if(e.pixelData.Value)o=e.pixelData.Value;else if(e.pixelData instanceof Array)o=e.pixelData[0];else if(e.pixelData.retrieveBulkData)o=await e.pixelData.retrieveBulkData();else if(e.pixelData.InlineBinary){const t=(0,C.Vk)(e.pixelData.InlineBinary);o=await t.arrayBuffer()}if(!o)return;const i=this._renderOverlayToDataUrl({width:e.columns,height:e.rows},e.color||n,o);return{...e,_id:(0,C.Os)(),dataUrl:i,color:n}})));return t.overlays=o,t}_isSameColor(e,t){return e&&t&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]}_renderOverlayToDataUrl({width:e,height:t},n,o){const i=new DataView(o),a=e*t,r=document.createElement("canvas");r.width=e,r.height=t;const s=r.getContext("2d");s.clearRect(0,0,e,t),s.globalCompositeOperation="copy";const l=s.getImageData(0,0,e,t),c=l.data;for(let e=0,t=0,o=0;e<a;e++)i.getUint8(o)&1<<t&&(c[4*e]=n[0],c[4*e+1]=n[1],c[4*e+2]=n[2],c[4*e+3]=n[3]),t>=7?(t=0,o++):t++;return s.putImageData(l,0,0),r.toDataURL()}}V.toolName="ImageOverlayViewer",V.addOverlayPlaneModule=N.add;const R=V;const A={Pan:l.PanTool.toolName,ArrowAnnotate:l.ArrowAnnotateTool.toolName,WindowLevel:l.WindowLevelTool.toolName,StackScroll:l.StackScrollTool.toolName,Zoom:l.ZoomTool.toolName,VolumeRotate:l.VolumeRotateTool.toolName,MipJumpToClick:l.MIPJumpToClickTool.toolName,Length:l.LengthTool.toolName,DragProbe:l.DragProbeTool.toolName,Probe:l.ProbeTool.toolName,RectangleROI:l.RectangleROITool.toolName,RectangleROIThreshold:l.RectangleROIThresholdTool.toolName,EllipticalROI:l.EllipticalROITool.toolName,CircleROI:l.CircleROITool.toolName,Bidirectional:l.BidirectionalTool.toolName,Angle:l.AngleTool.toolName,CobbAngle:l.CobbAngleTool.toolName,Magnify:l.MagnifyTool.toolName,Crosshairs:l.CrosshairsTool.toolName,Brush:l.BrushTool.toolName,PaintFill:l.PaintFillTool.toolName,ReferenceLines:l.ReferenceLinesTool.toolName,CalibrationLine:b.toolName,TrackballRotateTool:l.TrackballRotateTool.toolName,CircleScissors:l.CircleScissorsTool.toolName,RectangleScissors:l.RectangleScissorsTool.toolName,SphereScissors:l.SphereScissorsTool.toolName,ImageOverlayViewer:R.toolName,AdvancedMagnify:l.AdvancedMagnifyTool.toolName,UltrasoundDirectional:l.UltrasoundDirectionalTool.toolName,SplineROI:l.SplineROITool.toolName,LivewireContour:l.LivewireContourTool.toolName,PlanarFreehandROI:l.PlanarFreehandROITool.toolName,OrientationMarker:l.OrientationMarkerTool.toolName,WindowLevelRegion:l.WindowLevelRegionTool.toolName,PlanarFreehandContourSegmentation:l.PlanarFreehandContourSegmentationTool.toolName,SegmentBidirectional:l.SegmentBidirectionalTool.toolName,SegmentSelect:l.SegmentSelectTool.toolName,LabelmapSlicePropagation:v.Bj.toolName,MarkerLabelmap:v.pY.toolName,RegionSegmentPlus:l.RegionSegmentPlusTool.toolName},U=["Length","EllipticalROI","CircleROI","Bidirectional","ArrowAnnotate","Angle","CobbAngle","Probe","RectangleROI","PlanarFreehandROI","SplineROI","LivewireContour","UltrasoundDirectionalTool","SCOORD3DPoint","SegmentBidirectional"];var P=n(47807);const x=e=>P.locking.isAnnotationLocked(e),F=e=>P.visibility.isAnnotationVisible(e);function _(e,t,n){if(e)return function(e){const t=s.metaData.get("instance",e);return{SOPInstanceUID:t.SOPInstanceUID,SeriesInstanceUID:t.SeriesInstanceUID,StudyInstanceUID:t.StudyInstanceUID,frameNumber:t.frameNumber||1}}(e);const{metadata:o}=n,{volumeId:i}=o,a=t.getDisplaySetsBy((e=>i.includes(e.uid)))[0],{StudyInstanceUID:r,SeriesInstanceUID:l}=a;return{SOPInstanceUID:void 0,SeriesInstanceUID:l,StudyInstanceUID:r}}const L={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);P.config.style.getStyleProperty("color",{annotationUID:l});if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{length:p,unit:u="mm"}=o;r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,unit:u,length:p})})),r}(a,t),E=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{length:o,SeriesNumber:i,SOPInstanceUID:a,frameNumber:r,unit:s}=e[0],l=t.instances.find((e=>e.SOPInstanceUID===a));let c;l&&(c=l.InstanceNumber);const d=c?` I: ${c}`:"",m=t.isMultiFrame?` F: ${r}`:"";if(null==o)return n;const u=p.Wp.roundNumber(o,2);return n.primary.push(`${u} ${s}`),n.secondary.push(`S: ${i}${d}${m}`),n}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:Length"),e.forEach((e=>{const{length:t,unit:n}=e;i.push("Length"),a.push(t),i.push("Unit"),a.push(n)})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g)}}};function G(e){if(e.longAxis&&e.shortAxis){const t={};return t.start=e.longAxis[0],t.end=e.longAxis[1],t.perpendicularStart=e.longAxis[0],t.perpendicularEnd=e.longAxis[1],t}return e.map(((e,t)=>t%10==0?{start:e}:{end:e})).reduce(((e,t)=>Object.assign(e,{...t})),{})}function k(e){return l.annotation.selection.isAnnotationSelected(e)}function z(e,t){k(e)!==t&&l.annotation.selection.setAnnotationSelected(e,t)}function B(e){const[t]=l.annotation.selection.getAnnotationsSelected()||[];if(t)return l.annotation.state.getAnnotation(t)}const $=e=>null==e?"":e;const j={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{length:p,width:u,unit:g}=o;r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,unit:g,length:p,width:u})})),r}(a,t),E=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{length:o,width:i,unit:a,SeriesNumber:r,SOPInstanceUID:s,frameNumber:l}=e[0],c=p.Wp.roundNumber(o,2),d=p.Wp.roundNumber(i,2),m=t.instances.find((e=>e.SOPInstanceUID===s));let u;m&&(u=m.InstanceNumber);const g=u?` I: ${u}`:"",S=t.isMultiFrame?` F: ${l}`:"";return n.primary.push(`L: ${c} ${$(a)}`),n.primary.push(`W: ${d} ${$(a)}`),n.secondary.push(`S: ${r}${g}${S}`),n}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:Bidirectional"),e.forEach((e=>{const{length:t,width:n,unit:o}=e;i.push("Length","Width","Unit"),a.push(t,n,o)})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g)}}},W=(e,t,n)=>{if(Array.isArray(e)&&e.length>0){const o=e.map((e=>p.Wp.roundNumber(e,2)));return`${n.charAt(0).toUpperCase()+n.slice(1)}: ${o.join(", ")} ${$(t)}`}const o=p.Wp.roundNumber(e,2);return`${n.charAt(0).toUpperCase()+n.slice(1)}: ${o} ${$(t)}`};const H={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[],s=new Set;return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:l,SeriesInstanceUID:c,frameNumber:d}=_(a,t,e),m=t.getDisplaySetsForSeries(c)[0],{SeriesNumber:p}=m,{mean:u,stdDev:g,max:S,area:I,Modality:v,areaUnit:y,modalityUnit:h}=o;v&&s.has(v)||(v&&s.add(v),r.push({SeriesInstanceUID:c,SOPInstanceUID:l,SeriesNumber:p,frameNumber:d,Modality:v,unit:h,areaUnit:y,mean:u,stdDev:g,max:S,area:I}))})),r}(a,t),E=function(e,t,n){const o={primary:[],secondary:[]};if(!e||!e.length)return o;const{area:i,SOPInstanceUID:a,frameNumber:r,areaUnit:s}=e[0],l=t.instances.find((e=>e.SOPInstanceUID===a));let c;l&&(c=l.InstanceNumber);const d=c?` I: ${c}`:"",m=t.isMultiFrame?` F: ${r}`:"",u=p.Wp.roundNumber(i,2);return o.primary.push(`${u} ${$(s)}`),e.forEach((e=>{const{unit:t,max:n,SeriesNumber:i}=e,a=W(n,t,"max");o.primary.push(a),o.secondary.push(`S: ${i}${d}${m}`)})),o}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,metadata:r,isLocked:c,isVisible:d,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:EllipticalROI"),e.forEach((e=>{const{mean:t,stdDev:n,max:o,area:r,unit:s,areaUnit:l}=e;t&&s&&o&&r&&(i.push(`max (${s})`,`mean (${s})`,`std (${s})`,"Area","Unit"),a.push(o,t,n,r,l))})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g)}}};const q={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[],s=new Set;return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:l,SeriesInstanceUID:c,frameNumber:d}=_(a,t,e),m=t.getDisplaySetsForSeries(c)[0],{SeriesNumber:p}=m,{mean:u,stdDev:g,max:S,area:I,Modality:v,areaUnit:y,modalityUnit:h,perimeter:f,radiusUnit:w}=o;v&&s.has(v)||(s.add(v),r.push({SeriesInstanceUID:c,SOPInstanceUID:l,SeriesNumber:p,frameNumber:d,Modality:v,unit:h,mean:u,stdDev:g,max:S,area:I,areaUnit:y,perimeter:f,radiusUnit:w}))})),r}(a,t),E=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{area:o,SOPInstanceUID:i,frameNumber:a,areaUnit:r}=e[0],s=t.instances.find((e=>e.SOPInstanceUID===i));let l;s&&(l=s.InstanceNumber);const c=l?` I: ${l}`:"",d=t.isMultiFrame?` F: ${a}`:"";if(!isNaN(o)){const e=p.Wp.roundNumber(o||0,2);n.primary.push(`${e} ${$(r)}`)}return e.forEach((e=>{const{unit:t,perimeter:o,radiusUnit:i,max:a,SeriesNumber:r}=e;if(isNaN(a)){if(o&&!isNaN(o)){const e=W(o,i,"perimeter");n.primary.push(e)}}else{const e=W(a,t,"max");n.primary.push(e)}n.secondary.push(`S: ${r}${c}${d}`)})),n}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:CircleROI"),e.forEach((e=>{const{mean:t,stdDev:n,max:o,area:r,unit:s,areaUnit:l}=e;t&&s&&o&&r&&(i.push(`max (${s})`,`mean (${s})`,`std (${s})`,"Area","Unit"),a.push(o,t,n,r,l))})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g)}}};const Y={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:p,FrameOfReferenceUID:u}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:g,SeriesInstanceUID:S,StudyInstanceUID:I}=_(p,t,a);let v;v=g?t.getDisplaySetForSOPInstanceUID(g,S):t.getDisplaySetsForSeries(S)[0];const{points:y,textBox:h}=s.handles,f=function(e,t){const{metadata:n,data:o}=e,{text:i}=o,{referencedImageId:a}=n,r=[],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d;return r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,text:i}),r}(a,t),w=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{SeriesNumber:o,SOPInstanceUID:i,frameNumber:a,text:r}=e[0],s=t.instances.find((e=>e.SOPInstanceUID===i));let l;s&&(l=s.InstanceNumber);const c=l?` I: ${l}`:"",d=t.isMultiFrame?` F: ${a}`:"";r&&n.primary.push(r);return n.secondary.push(`S: ${o}${c}${d}`),n}(f,v);return{uid:l,SOPInstanceUID:g,FrameOfReferenceUID:u,points:y,textBox:h,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:S,referenceStudyUID:I,referencedImageId:p,frameNumber:f[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:v.displaySetInstanceUID,label:s.text,displayText:w,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n){const o=[],i=[];o.push("AnnotationType"),i.push("Cornerstone:ArrowAnnote"),e.forEach((e=>{const{text:t}=e;o.push("Text"),i.push(t)})),n&&(o.push("FrameOfReferenceUID"),i.push(n));t&&(o.push("points"),i.push(t.map((e=>e.join(" "))).join(";")));return{columns:o,values:i}}(f,y,u)}}};const J={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Cobb Angle tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return;const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{angle:p}=o,u="°";r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,unit:u,angle:p})})),r}(a,t),E=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{angle:o,unit:i,SeriesNumber:a,SOPInstanceUID:r,frameNumber:s}=e[0],l=t.instances.find((e=>e.SOPInstanceUID===r));let c;l&&(c=l.InstanceNumber);const d=c?` I: ${c}`:"",m=t.isMultiFrame?` F: ${s}`:"";if(void 0===o)return n;const u=p.Wp.roundNumber(o,2);return n.primary.push(`${u} ${$(i)}`),n.secondary.push(`S: ${a}${d}${m}`),n}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w?.[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:CobbAngle"),e.forEach((e=>{const{angle:t,unit:n}=e;i.push(`Angle (${n})`),a.push(t)})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g)}}};const K={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return;const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{angle:p}=o,u="°";r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,unit:u,angle:p})})),r}(a,t),E=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{angle:o,unit:i,SeriesNumber:a,SOPInstanceUID:r,frameNumber:s}=e[0],l=t.instances.find((e=>e.SOPInstanceUID===r));let c;l&&(c=l.InstanceNumber);const d=c?` I: ${c}`:"",m=t.isMultiFrame?` F: ${s}`:"";if(void 0===o)return n;const u=p.Wp.roundNumber(o,2);return n.primary.push(`${u} ${$(i)}`),n.secondary.push(`S: ${a}${d}${m}`),n}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,frameNumber:w?.[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:Angle"),e.forEach((e=>{const{angle:t,unit:n}=e;i.push(`Angle (${n})`),a.push(t)})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g),referencedImageId:u}}};const Q={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.debug("PlanarFreehandROI tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error(`Tool ${m} not supported`);const{SOPInstanceUID:S,SeriesInstanceUID:I,frameNumber:v,StudyInstanceUID:y}=_(u,t,a);let h;h=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const f=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{mean:p,stdDev:u,max:g,area:S,Modality:I,areaUnit:v,modalityUnit:y}=o;r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,Modality:I,unit:y,mean:p,stdDev:u,max:g,area:S,areaUnit:v})})),r}(a,t),w=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{area:o,SOPInstanceUID:i,frameNumber:a,areaUnit:r}=e[0],s=t.instances.find((e=>e.SOPInstanceUID===i));let l;s&&(l=s.InstanceNumber);const c=l?` I: ${l}`:"",d=t.isMultiFrame?` F: ${a}`:"",m=p.Wp.roundNumber(o||0,2);return n.primary.push(`${m} ${$(r)}`),e.forEach((e=>{const{unit:t,max:o,SeriesNumber:i}=e,a=W(o,t,"max");n.primary.push(a),n.secondary.push(`S: ${i}${c}${d}`)})),n}(f,h);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:s.contour.polyline,textBox:s.handles.textBox,metadata:r,frameNumber:v,referenceSeriesUID:I,referenceStudyUID:y,referencedImageId:u,toolName:r.toolName,displaySetInstanceUID:h.displaySetInstanceUID,label:s.label,displayText:w,data:s.cachedStats,type:o(m),getReport:()=>function(e,t){const{PlanarFreehandROI:n}=t.getCustomization("cornerstone.measurements"),{report:o}=n,i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:PlanarFreehandROI");const{metadata:r,data:s}=e,l=s.cachedStats[`imageId:${r.referencedImageId}`];o.forEach((({name:e,value:t})=>{i.push(e),l[t]?a.push(l[t]):a.push("not available")})),r.FrameOfReferenceUID&&(i.push("FrameOfReferenceUID"),a.push(r.FrameOfReferenceUID));s.contour.polyline&&(i.push("points"),a.push(s.contour.polyline.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(a,i),isLocked:c,isVisible:d}}};const Z={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Rectangle ROI tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[],s=new Set;return Object.keys(i).forEach((o=>{const l=i[o],{SOPInstanceUID:c,SeriesInstanceUID:d,frameNumber:m}=_(a,t,e),p=t.getDisplaySetsForSeries(d)[0],{SeriesNumber:u}=p,{mean:g,stdDev:S,max:I,area:v,Modality:y,modalityUnit:h,areaUnit:f}=l;y&&s.has(y)||(y&&s.add(y),r.push({SeriesInstanceUID:d,SOPInstanceUID:c,SeriesNumber:u,frameNumber:m,Modality:y,unit:h,mean:g,stdDev:S,metadata:n,max:I,area:v,areaUnit:f}))})),r}(a,t),E=function(e,t,n){const o={primary:[],secondary:[]};if(!e||!e.length)return o;const{area:i,SOPInstanceUID:a,frameNumber:r,areaUnit:s}=e[0],l=t.instances.find((e=>e.SOPInstanceUID===a));let c;l&&(c=l.InstanceNumber);const d=c?` I: ${c}`:"",m=t.isMultiFrame?` F: ${r}`:"",u=p.Wp.roundNumber(i||0,2);return o.primary.push(`${u} ${$(s)}`),e.forEach((e=>{const{unit:t,max:n,SeriesNumber:i}=e,a=W(n,t,"max");o.primary.push(a),o.secondary.push(`S: ${i}${d}${m}`)})),o}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:RectangleROI"),e.forEach((e=>{const{mean:t,stdDev:n,max:o,area:r,unit:s,areaUnit:l}=e;t&&s&&o&&r&&(i.push("Maximum","Mean","Std Dev","Pixel Unit","Area","Unit"),a.push(o,t,n,s,r,l))})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g),isLocked:c,isVisible:d}}};const X={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("SplineROI tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error(`Tool ${m} not supported`);const{SOPInstanceUID:S,SeriesInstanceUID:I,frameNumber:v,StudyInstanceUID:y}=_(u,t,a);let h;h=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const f=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{mean:p,stdDev:u,max:g,area:S,Modality:I,areaUnit:v,modalityUnit:y}=o;r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,Modality:I,unit:y,mean:p,stdDev:u,max:g,area:S,areaUnit:v})})),r}(a,t),w=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{area:o,SOPInstanceUID:i,frameNumber:a,areaUnit:r}=e[0],s=t.instances.find((e=>e.SOPInstanceUID===i));let l;s&&(l=s.InstanceNumber);t.isMultiFrame;const c=p.Wp.roundNumber(o||0,2);return n.primary.push(`${c} ${$(r)}`),n}(f,h);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:s.contour.polyline,textBox:s.handles.textBox,metadata:r,frameNumber:v,referenceSeriesUID:I,referenceStudyUID:y,referencedImageId:u,toolName:r.toolName,displaySetInstanceUID:h.displaySetInstanceUID,label:s.label,displayText:w,data:s.cachedStats,type:o(m),getReport:()=>function(e,t){const{SplineROI:n}=t.getCustomization("cornerstone.measurements"),{report:o}=n,i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:SplineROI");const{metadata:r,data:s}=e,l=s.cachedStats[`imageId:${r.referencedImageId}`];o.forEach((({name:e,value:t})=>{i.push(e),l[t]?a.push(l[t]):a.push("not available")})),r.FrameOfReferenceUID&&(i.push("FrameOfReferenceUID"),a.push(r.FrameOfReferenceUID));s.contour.polyline&&(i.push("points"),a.push(s.contour.polyline.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(a,i),isLocked:c,isVisible:d}}};function ee(e,t){const{metadata:n,data:o}=e;if(!o.cachedStats||!o.cachedStats[`imageId:${n.referencedImageId}`])return[];const{area:i,areaUnit:a}=o.cachedStats[`imageId:${n.referencedImageId}`],{SOPInstanceUID:r,frameNumber:s}=_(n.referencedImageId),l=[],c=t.instances.find((e=>e.SOPInstanceUID===r));let d;c&&(d=c.InstanceNumber);const m=d?` I: ${d}`:"",u=t.isMultiFrame?` F: ${s}`:"",{SeriesNumber:g}=t;let S=null;void 0!==g&&(S=`S: ${g}${m}${u}`);const I=[];if(i){const e=p.Wp.roundNumber(i||0,2);I.push(`${e} ${$(a)}`)}return S&&I.push(S),l.push({text:I,series:S}),l}const te={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Livewire tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:p,FrameOfReferenceUID:u}=r;if(!U.includes(m))throw new Error(`Tool ${m} not supported`);const{SOPInstanceUID:g,SeriesInstanceUID:S,frameNumber:I,StudyInstanceUID:v}=_(p);let y;return y=g?t.getDisplaySetForSOPInstanceUID(g,S):t.getDisplaySetsForSeries(S),{uid:l,SOPInstanceUID:g,FrameOfReferenceUID:u,points:s.contour.polyline,textBox:s.handles.textBox,metadata:r,frameNumber:I,referenceSeriesUID:S,referenceStudyUID:v,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,isLocked:c,isVisible:d,displayText:ee(a,y),data:s.cachedStats,type:o(m),getReport:()=>function(e,t){const n=[],o=[];n.push("AnnotationType"),o.push("Cornerstone:Livewire");const{metadata:i,data:a}=e;i.FrameOfReferenceUID&&(n.push("FrameOfReferenceUID"),o.push(i.FrameOfReferenceUID));a.contour.polyline&&(n.push("points"),o.push(a.contour.polyline.map((e=>e.join(" "))).join(";")));return{columns:n,values:o}}(a)}}};const ne={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Probe tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h}=s.handles,f=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return;const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{value:p}=o,u="HU";r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,unit:u,value:p})})),r}(a,t),w=function(e,t,n){const o={primary:[],secondary:[]};if(!e||!e.length)return o;const{value:i,unit:a,SeriesNumber:r,SOPInstanceUID:s,frameNumber:l}=e[0],c=t.instances.find((e=>e.SOPInstanceUID===s));let d;c&&(d=c.InstanceNumber);const m=d?` I: ${d}`:"",u=t.isMultiFrame?` F: ${l}`:"";if(void 0!==i){const e=p.Wp.roundNumber(i,2);o.primary.push(`${e} ${$(a)}`),o.secondary.push(`S: ${r}${m}${u}`)}return o}(f,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,metadata:r,isLocked:c,isVisible:d,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:f?.[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:w,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:Probe"),e.forEach((e=>{const{value:t,unit:n}=e;i.push(`Probe (${n})`),a.push(t)})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(f,h,g)}}};const oe={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I);const{points:h}=s.handles,f=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return;const r=[];return Object.keys(i).forEach((e=>{const n=i[e];if(!a)throw new Error("Non-acquisition plane measurement mapping not supported");const{SOPInstanceUID:o,SeriesInstanceUID:s,frameNumber:l}=_(a),c=t.getDisplaySetForSOPInstanceUID(o,s,l),{SeriesNumber:d}=c,{xValues:m,yValues:p,units:u,isUnitless:g,isHorizontal:S}=n;r.push({SeriesInstanceUID:s,SOPInstanceUID:o,SeriesNumber:d,frameNumber:l,xValues:m,yValues:p,units:u,isUnitless:g,isHorizontal:S})})),r}(a,t),w=function(e,t,n){const o={primary:[],secondary:[]};if(!e||!e.length)return o;const{xValues:i,yValues:a,units:r,isUnitless:s,SeriesNumber:l,SOPInstanceUID:c,frameNumber:d}=e[0],m=t.instances.find((e=>e.SOPInstanceUID===c));let u;m&&(u=m.InstanceNumber);const g=u?` I: ${u}`:"",S=t.isMultiFrame?` F: ${d}`:"",I=`S: ${l}${g}${S}`;if(void 0===i||void 0===a)return o;if(s)o.primary.push(`${p.Wp.roundNumber(i[0],2)} ${r[0]}`);else{const e=Math.abs(i[1]-i[0]),t=Math.abs(a[1]-a[0]);o.primary.push(`${p.Wp.roundNumber(e)} ${r[0]}`),o.primary.push(`${p.Wp.roundNumber(t)} ${r[1]}`)}return o.secondary.push(I),o}(f,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,frameNumber:f?.[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:w,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:UltrasoundDirectional"),e.forEach((e=>{const{xValues:t,yValues:n,units:o,isUnitless:r}=e;if(r)i.push("Length"+o[0]),a.push(p.Wp.roundNumber(t[0],2));else{const e=Math.abs(t[1]-t[0]),r=Math.abs(n[1]-n[0]);i.push("Time"+o[0]),a.push(p.Wp.roundNumber(e,2)),i.push("Length"+o[1]),a.push(p.Wp.roundNumber(r,2))}})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(f,h,g),isLocked:c,isVisible:d}}};const ie={toAnnotation:e=>{},toMeasurement:(e,t,n,o,i)=>{const{annotation:a}=e,{metadata:r,data:s,annotationUID:l}=a,c=x(l),d=F(l);if(!r||!s)return console.debug("SegmentBidirectional tool: Missing metadata or data"),null;const{toolName:m,referencedImageId:u,FrameOfReferenceUID:g}=r;if(!U.includes(m))throw new Error("Tool not supported");const{SOPInstanceUID:S,SeriesInstanceUID:I,StudyInstanceUID:v}=_(u,t,a);let y;y=S?t.getDisplaySetForSOPInstanceUID(S,I):t.getDisplaySetsForSeries(I)[0];const{points:h,textBox:f}=s.handles,w=function(e,t){const{metadata:n,data:o}=e,{cachedStats:i}=o,{referencedImageId:a}=n;if(!Object.keys(i).length)return[];const r=[];return Object.keys(i).forEach((n=>{const o=i[n],{SOPInstanceUID:s,SeriesInstanceUID:l,frameNumber:c}=_(a,t,e),d=t.getDisplaySetsForSeries(l)[0],{SeriesNumber:m}=d,{length:p,width:u,unit:g}=o;r.push({SeriesInstanceUID:l,SOPInstanceUID:s,SeriesNumber:m,frameNumber:c,unit:g,length:p,width:u})})),r}(a,t),E=function(e,t){const n={primary:[],secondary:[]};if(!e||!e.length)return n;const{length:o,width:i,unit:a,SeriesNumber:r,SOPInstanceUID:s,frameNumber:l}=e[0],c=p.Wp.roundNumber(o,2),d=p.Wp.roundNumber(i,2),m=t.instances.find((e=>e.SOPInstanceUID===s));let u;m&&(u=m.InstanceNumber);const g=u?` I: ${u}`:"",S=t.isMultiFrame?` F: ${l}`:"";return n.primary.push(`L: ${c} ${$(a)}`),n.primary.push(`W: ${d} ${$(a)}`),n.secondary.push(`S: ${r}${g}${S}`),n}(w,y);return{uid:l,SOPInstanceUID:S,FrameOfReferenceUID:g,points:h,textBox:f,isLocked:c,isVisible:d,metadata:r,referenceSeriesUID:I,referenceStudyUID:v,referencedImageId:u,frameNumber:w[0]?.frameNumber||1,toolName:r.toolName,displaySetInstanceUID:y.displaySetInstanceUID,label:s.label,displayText:E,data:s.cachedStats,type:o(m),getReport:()=>function(e,t,n,o){const i=[],a=[];i.push("AnnotationType"),a.push("Cornerstone:SegmentBidirectional"),e.forEach((e=>{const{length:t,width:n,unit:o}=e;i.push("Length","Width","Unit"),a.push(t,n,o)})),n&&(i.push("FrameOfReferenceUID"),a.push(n));t&&(i.push("points"),a.push(t.map((e=>e.join(" "))).join(";")));return{columns:i,values:a}}(w,h,g)}}},ae=(e,t,n,o)=>{const i=e=>{const{POLYLINE:t,ELLIPSE:n,CIRCLE:o,RECTANGLE:i,BIDIRECTIONAL:a,POINT:r,ANGLE:s}=p.C5.VALUE_TYPES;return{Length:t,EllipticalROI:n,CircleROI:o,RectangleROI:i,PlanarFreehandROI:t,Bidirectional:a,ArrowAnnotate:r,CobbAngle:s,Angle:s,SplineROI:t,LivewireContour:t,Probe:r,UltrasoundDirectional:t,SegmentBidirectional:a}[e]};return{Length:{toAnnotation:L.toAnnotation,toMeasurement:e=>L.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE,points:2}]},Bidirectional:{toAnnotation:j.toAnnotation,toMeasurement:e=>j.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE,points:2},{valueType:p.C5.VALUE_TYPES.POLYLINE,points:2}]},SegmentBidirectional:{toAnnotation:ie.toAnnotation,toMeasurement:e=>ie.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE,points:2},{valueType:p.C5.VALUE_TYPES.POLYLINE,points:2}]},EllipticalROI:{toAnnotation:H.toAnnotation,toMeasurement:e=>H.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.ELLIPSE}]},CircleROI:{toAnnotation:q.toAnnotation,toMeasurement:e=>q.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.CIRCLE}]},RectangleROI:{toAnnotation:Z.toAnnotation,toMeasurement:e=>Z.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE}]},PlanarFreehandROI:{toAnnotation:Q.toAnnotation,toMeasurement:e=>Q.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE}]},SplineROI:{toAnnotation:X.toAnnotation,toMeasurement:e=>X.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE}]},LivewireContour:{toAnnotation:te.toAnnotation,toMeasurement:e=>te.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE}]},ArrowAnnotate:{toAnnotation:Y.toAnnotation,toMeasurement:e=>Y.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POINT,points:1}]},Probe:{toAnnotation:ne.toAnnotation,toMeasurement:e=>ne.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POINT,points:1}]},CobbAngle:{toAnnotation:J.toAnnotation,toMeasurement:e=>J.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.ANGLE}]},Angle:{toAnnotation:K.toAnnotation,toMeasurement:e=>K.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.ANGLE}]},UltrasoundDirectional:{toAnnotation:oe.toAnnotation,toMeasurement:e=>oe.toMeasurement(e,t,n,i,o),matchingCriteria:[{valueType:p.C5.VALUE_TYPES.POLYLINE,points:2}]}}};var re=n(53860);const{rM:se,yK:le}=o,{removeAnnotation:ce}=l.annotation.state,de=l.Enums.Events,me=e=>{const{measurementService:t,displaySetService:n,cornerstoneViewportService:o,customizationService:i,viewportGridService:a}=e.services,r=((e,t,n,o)=>{const{Length:i,Bidirectional:a,EllipticalROI:r,CircleROI:s,ArrowAnnotate:l,Angle:c,CobbAngle:d,RectangleROI:m,PlanarFreehandROI:p,SplineROI:u,LivewireContour:g,Probe:S,UltrasoundDirectional:I,SegmentBidirectional:v}=ae(e,t,n,o),y=e.createSource(se,le);return e.addMapping(y,"Length",i.matchingCriteria,i.toAnnotation,i.toMeasurement),e.addMapping(y,"Crosshairs",i.matchingCriteria,(()=>null),(()=>null)),e.addMapping(y,"Bidirectional",a.matchingCriteria,a.toAnnotation,a.toMeasurement),e.addMapping(y,"EllipticalROI",r.matchingCriteria,r.toAnnotation,r.toMeasurement),e.addMapping(y,"CircleROI",s.matchingCriteria,s.toAnnotation,s.toMeasurement),e.addMapping(y,"ArrowAnnotate",l.matchingCriteria,l.toAnnotation,l.toMeasurement),e.addMapping(y,"CobbAngle",d.matchingCriteria,d.toAnnotation,d.toMeasurement),e.addMapping(y,"Angle",c.matchingCriteria,c.toAnnotation,c.toMeasurement),e.addMapping(y,"RectangleROI",m.matchingCriteria,m.toAnnotation,m.toMeasurement),e.addMapping(y,"PlanarFreehandROI",p.matchingCriteria,p.toAnnotation,p.toMeasurement),e.addMapping(y,"SplineROI",u.matchingCriteria,u.toAnnotation,u.toMeasurement),e.addMapping(y,"CalibrationLine",i.matchingCriteria,i.toAnnotation,i.toMeasurement),e.addMapping(y,"LivewireContour",g.matchingCriteria,g.toAnnotation,g.toMeasurement),e.addMapping(y,"Probe",S.matchingCriteria,S.toAnnotation,S.toMeasurement),e.addMapping(y,"UltrasoundDirectionalTool",I.matchingCriteria,I.toAnnotation,I.toMeasurement),e.addMapping(y,"SegmentBidirectional",v.matchingCriteria,v.toAnnotation,v.toMeasurement),y})(t,n,o,i);pe(t,o,a);const{annotationToMeasurement:l,remove:c}=r;function d(t){try{const n=t.detail,{annotation:{metadata:i,annotationUID:a}}=n,{toolName:r}=i;t.type===u&&r===A.CalibrationLine?D(e,t).then((()=>{console.log("Calibration applied.")}),(()=>!0)).finally((()=>{ce(a),m(t),o.resize()})):(n.uid=a,l(r,n))}catch(e){console.warn("Failed to add measurement:",e)}}function m(e){try{const n=e.detail,{annotation:{annotationUID:o}}=n;t.getMeasurement(o)&&c(o,n)}catch(e){console.warn("Failed to remove measurement:",e)}}const p=de.ANNOTATION_ADDED,u=de.ANNOTATION_COMPLETED,g=de.ANNOTATION_MODIFIED,S=de.ANNOTATION_REMOVED,I=de.ANNOTATION_SELECTION_CHANGE;return s.eventTarget.addEventListener(p,d),s.eventTarget.addEventListener(u,d),s.eventTarget.addEventListener(g,(function(e){try{const n=e.detail,{annotation:{metadata:o,annotationUID:i}}=n;if(!t.getMeasurement(i))return;const{toolName:a}=o;n.uid=i,l(a,n,!0)}catch(e){console.warn("Failed to update measurement:",e)}})),s.eventTarget.addEventListener(S,m),s.eventTarget.addEventListener(I,(function(e){try{const n=e.detail,{added:o,removed:i}=n;i&&i.forEach((e=>t.setMeasurementSelected(e,!1))),o&&o.forEach((e=>t.setMeasurementSelected(e,!0)))}catch(e){console.warn("Failed to select/unselect measurements:",e)}})),r},pe=(e,t,n)=>{const{MEASUREMENT_REMOVED:o,MEASUREMENTS_CLEARED:i,MEASUREMENT_UPDATED:a,RAW_MEASUREMENT_ADDED:r}=e.EVENTS;e.subscribe(i,(({measurements:e})=>{if(Object.keys(e).length){for(const t of Object.values(e)){const{uid:e,source:n}=t;n.name===se&&ce(e)}t.getRenderingEngine().render()}})),e.subscribe(a,(({source:e,measurement:o,notYetUpdatedAtSource:i})=>{if(!e)return;if(e.name!==se)return;if(!1===i)return;const{uid:a,label:r,isLocked:s,isVisible:c}=o,d=l.annotation.state.getAnnotation(a),{data:m,metadata:p}=d;if(!m)return;if(m.label!==r){const e=w(n)?.viewport.element;(0,re.setAnnotationLabel)(d,e,r)}"ArrowAnnotate"===p.toolName&&(m.text=r),l.annotation.locking.setAnnotationLocked(a,s),l.annotation.visibility.setAnnotationVisibility(a,c);const u=t.getRenderingEngine().getViewports().map((e=>e.id));(0,re.triggerAnnotationRenderForViewportIds)(u)})),e.subscribe(r,(({source:e,measurement:t,data:n,dataSource:o})=>{if(e.name!==se)return;const{referenceSeriesUID:i,referenceStudyUID:a,SOPInstanceUID:r}=t,s=p.H8.getInstance(a,i,r);let c,d=1;t?.metadata?.referencedImageId?(c=t.metadata.referencedImageId,d=_(t.metadata.referencedImageId).frameNumber):c=o.getImageIdsForInstance({instance:s});l.annotation.state.getAnnotationManager().addAnnotation({annotationUID:t.uid,highlighted:!1,isLocked:!1,invalidated:!1,metadata:{toolName:t.toolName,FrameOfReferenceUID:t.FrameOfReferenceUID,referencedImageId:c},data:{...n.annotation.data||{},text:n.annotation.data.text,handles:{...n.annotation.data.handles},cachedStats:{...n.annotation.data.cachedStats},label:n.annotation.data.label,frameNumber:d}})})),e.subscribe(o,(({source:e,measurement:n})=>{if(e?.name&&e.name!==se)return;ce(n);t.getRenderingEngine().render()}))};function ue(e,t){const{viewportGridService:n,cornerstoneViewportService:o}=e.services,{viewports:i}=n.getState(),a=i.get(t);if("volume"!==a?.viewportOptions?.viewportType)return[];const r=o.getCornerstoneViewport(t),l=r?function(e){const t=e.getAllVolumeIds().map((e=>s.cache.getVolume(e)));return t.find((e=>e.isDynamicVolume()))??t[0]}(r):null;if(!l?.isDynamicVolume())return[];const{volumeId:c}=l;return Array.from(i.values()).filter((({viewportId:e})=>{const n=o.getCornerstoneViewport(e);return e!==t&&n?.hasVolumeId?.(c)})).map((({viewportId:e})=>({viewportId:e})))}const ge=function(e){const{cineService:t}=e.services;t.setServiceImplementation({getSyncedViewports:t=>ue(e,t),playClip:(e,t)=>l.utilities.cine.playClip(e,t),stopClip:(e,t)=>l.utilities.cine.stopClip(e,t)})};const Se=function(e){const{studyPrefetcherService:t}=e.services;t.requestType=s.Enums.RequestType.Prefetch,t.imageLoadPoolManager=s.imageLoadPoolManager,t.imageLoader=s.imageLoader,t.cache={isImageCached:e=>!!s.cache.getImageLoadObject(e)},t.imageLoadEventsManager={addEventListeners:(e,t)=>(s.eventTarget.addEventListener(s.EVENTS.IMAGE_LOADED,e),s.eventTarget.addEventListener(s.EVENTS.IMAGE_LOAD_FAILED,t),[{unsubscribe:()=>s.eventTarget.removeEventListener(s.EVENTS.IMAGE_LOADED,e)},{unsubscribe:()=>s.eventTarget.removeEventListener(s.EVENTS.IMAGE_LOAD_FAILED,t)}])}};var Ie=n(19863),ve=n.n(Ie),ye=n(15257),he=n.n(ye),fe=n(6446),we=n.n(fe);const Ee=new Map,Te=new Map;function be({data:{viewportId:e,volumeInputArray:t},displaySetsMatchDetails:n,viewportMatchDetails:o}){Te.set(e,t);for(const e of t){const{volumeId:t}=e,n=s.cache.getVolume(t);if(!n)return;if(!Ee.has(t)){const{metadata:e}=n;Ee.set(t,e.SeriesInstanceUID)}}const i=new Set;Te.forEach(((e,t)=>{e.forEach((e=>{const{volumeId:t}=e;i.add(t)}))}));const a=new Set;if(o.forEach((e=>{const{displaySetsInfo:t}=e;t.forEach((({displaySetInstanceUID:e})=>{a.add(e)}))})),i.size!==a.size)return;const r=Array.from(Ee.keys()).slice().map((e=>s.cache.getVolume(e))),l=[];r.forEach((e=>{const t=e.getImageLoadRequests();if(!t.length||!t[0]||!t[0].imageId)return;const n=function(e){const t=e.length-1,n=Math.floor(e.length/2);let o=n,i=n;const a=[{imageId:e[n],imageIdIndex:n}],r={currentPositionDownToMinimum:!1,currentPositionUpToMaximum:!1};for(0===n?r.currentPositionDownToMinimum=!0:n===t&&(r.currentPositionUpToMaximum=!0);!r.currentPositionDownToMinimum||!r.currentPositionUpToMaximum;)r.currentPositionDownToMinimum||(o--,a.push({imageId:e[o],imageIdIndex:o}),0===o&&(r.currentPositionDownToMinimum=!0)),r.currentPositionUpToMaximum||(i++,a.push({imageId:e[i],imageIdIndex:i}),i===t&&(r.currentPositionUpToMaximum=!0));return a}(t.map((e=>e.imageId))).map((({imageId:e})=>t.find((t=>t.imageId===e))));l.push(n)}));const c=he()(we()(ve()(...l))),d=[];c.forEach((e=>{const{imageId:t}=e;l.forEach((e=>{const n=e.find((e=>e.imageId===t));n&&d.push(n)}))}));const m=s.Enums.RequestType.Prefetch;d.forEach((({callLoadImage:e,additionalDetails:t,imageId:n,imageIdIndex:o,options:i})=>{const a=e.bind(null,n,o,i);s.imageLoadPoolManager.addRequest(a,m,t,0)})),Ee.clear();const p=new Map(Te);return Te.clear(),p}const De=new Map,Ce=new Map;function Oe({data:{viewportId:e,volumeInputArray:t},displaySetsMatchDetails:n}){Ce.set(e,t);for(const e of t){const{volumeId:t}=e,n=s.cache.getVolume(t);if(!n)return void console.log("interleaveNthLoader::No volume, can't load it");if(!De.has(t)){const{metadata:e}=n;De.set(t,e.SeriesInstanceUID)}}const o=function(e){if(!e||!e.length)return[];if(1===e.length)return e[0];console.time("interleave");const t=[...e],n=[];for(let e=0;t.length>0;e++)for(const o of t)e>=o.length?t.splice(t.indexOf(o),1):n.push(o[e]);return console.timeEnd("interleave"),n}(Array.from(De.keys()).slice().map((e=>s.cache.getVolume(e))).map((e=>e.getImageLoadRequests())).filter((e=>e?.[0]?.imageId)).map((e=>function(e){const t=[[],[],[],[],[]],n=e.length/2-3,o=n+6;for(let i=0;i<e.length;i++)i<2||i>e.length-4||i>n&&i<o?t[0].push(e[i]):i%7==2?t[1].push(e[i]):i%7==5?t[2].push(e[i]):t[i%2+3].push(e[i]);return[...t[0],...t[1],...t[2],...t[3],...t[4]]}(e)))),i=s.Enums.RequestType.Prefetch;o.forEach((({callLoadImage:e,additionalDetails:t,imageId:n,imageIdIndex:o,options:a})=>{const r=e.bind(null,n,o,a);s.imageLoadPoolManager.addRequest(r,i,t,0)})),De.clear();const a=new Map(Ce);return Ce.clear(),a}const Me=new Map,Ne=new Map;function Ve({data:{viewportId:e,volumeInputArray:t},displaySetsMatchDetails:n,viewportMatchDetails:o}){Ne.set(e,t);for(const e of t){const{volumeId:t}=e,n=s.cache.getVolume(t);if(!n)return;if(!Me.has(t)){const{metadata:e}=n;Me.set(t,e.SeriesInstanceUID)}}const i=[],a=new Set;Array.from(o.values()).forEach((e=>{const{displaySetsInfo:t}=e;let n=0;t.forEach((({displaySetInstanceUID:e,displaySetOptions:t})=>{t?.options?.skipLoading||(n++,a.add(e))})),n&&i.push(e)}));const r=new Set;Ne.forEach(((e,t)=>{e.forEach((e=>{const{volumeId:t}=e;r.add(t)}))}));const l=new Set;if(o.forEach((e=>{const{displaySetsInfo:t}=e;t.forEach((({displaySetInstanceUID:e})=>{l.add(e)}))})),r.size!==l.size)return;const c=Array.from(Me.keys()).slice().map((e=>s.cache.getVolume(e))),d=[];c.forEach((e=>{const t=e.getImageLoadRequests();t?.[0]?.imageId&&d.push(t.reverse())}));const m=he()(we()(ve()(...d))),p=[];m.forEach((e=>{const{imageId:t}=e;d.forEach((e=>{const n=e.find((e=>e.imageId===t));n&&p.push(n)}))}));const u=s.Enums.RequestType.Prefetch;p.forEach((({callLoadImage:e,additionalDetails:t,imageId:n,imageIdIndex:o,options:i})=>{const a=e.bind(null,n,o,i);s.imageLoadPoolManager.addRequest(a,u,t,0)})),Me.clear();const g=new Map(Ne);return Ne.clear(),g}const Re=(e,t)=>{if(!t?.detail)return;const{element:n,currentPoints:o}=t.detail;return e.runCommand("getNearbyAnnotation",{element:n,canvasCoordinates:o?.canvas},"CORNERSTONE")},Ae=l.Enums.Events;const Ue=function({cornerstoneViewportService:e,customizationService:t,commandsManager:n}){const o=e=>{const o=function(e){const t=e.detail.event.which,n=[];return e.detail.event.altKey&&n.push("alt"),e.detail.event.ctrlKey&&n.push("ctrl"),e.detail.event.shiftKey&&n.push("shift"),n.push("button"),n.push(t),n.join("")}(e);((e,o)=>{const i=t.getCustomization("cornerstoneViewportClickCommands")[e];if(!i)return;let a=null;i.some((e=>e.commandOptions?.requireNearbyToolData))&&(a=Re(n,o));const r={nearbyToolData:a,event:o};n.run(i,r)})(o,e)};s.eventTarget.addEventListener(s.EVENTS.ELEMENT_ENABLED,function(t){const{viewportId:n,element:i}=t.detail;e.getViewportInfo(n)&&((0,f.ye)(n,i),i.addEventListener(Ae.MOUSE_CLICK,o))}.bind(null)),s.eventTarget.addEventListener(s.EVENTS.ELEMENT_DISABLED,function(e){const{element:t}=e.detail;t.removeEventListener(Ae.MOUSE_CLICK,o)}.bind(null))},Pe=l.Enums.Events;const xe=function({customizationService:e,commandsManager:t}){const n=n=>{if(Re(t,n))return;const o=function(e){const t=[];return e.detail.event.altKey&&t.push("alt"),e.detail.event.ctrlKey&&t.push("ctrl"),e.detail.event.shiftKey&&t.push("shift"),t.push("doubleClick"),t.join("")}(n),i=e.getCustomization("cornerstoneViewportClickCommands")[o];i&&t.run(i)};s.eventTarget.addEventListener(s.EVENTS.ELEMENT_ENABLED,function(e){const{element:t}=e.detail;t.addEventListener(Pe.MOUSE_DOUBLE_CLICK,n)}.bind(null)),s.eventTarget.addEventListener(s.EVENTS.ELEMENT_DISABLED,function(e){const{element:t}=e.detail;t.removeEventListener(Pe.MOUSE_DOUBLE_CLICK,n)}.bind(null))},Fe=[],_e={viewportsWaiting:0};function Le(e){if("preRender"===e.detail.viewportStatus)return;const{W:t}=p.fX;p.Rm.timeEnd(t.DISPLAY_SETS_TO_FIRST_IMAGE),p.Rm.timeEnd(t.STUDY_TO_FIRST_IMAGE),p.Rm.timeEnd(t.SCRIPT_TO_VIEW),_e.viewportsWaiting-=1,e.detail.element.removeEventListener(s.EVENTS.IMAGE_RENDERED,Le),_e.viewportsWaiting||p.Rm.timeEnd(t.DISPLAY_SETS_TO_ALL_IMAGES)}const Ge=[{ColorSpace:"RGB",Name:"Grayscale",NanColor:[1,0,0],RGBPoints:[0,0,0,0,1,1,1,1],description:"Grayscale"},{ColorSpace:"RGB",Name:"X Ray",NanColor:[1,0,0],RGBPoints:[0,1,1,1,1,0,0,0],description:"X Ray"},{ColorSpace:"RGB",Name:"hsv",RGBPoints:[-1,1,0,0,-.666666,1,0,1,-.333333,0,0,1,0,0,1,1,.33333,0,1,0,.66666,1,1,0,1,1,0,0],description:"HSV"},{ColorSpace:"RGB",Name:"hot_iron",RGBPoints:[0,.0039215686,.0039215686,.0156862745,.00392156862745098,.0039215686,.0039215686,.0156862745,.00784313725490196,.0039215686,.0039215686,.031372549,.011764705882352941,.0039215686,.0039215686,.0470588235,.01568627450980392,.0039215686,.0039215686,.062745098,.0196078431372549,.0039215686,.0039215686,.0784313725,.023529411764705882,.0039215686,.0039215686,.0941176471,.027450980392156862,.0039215686,.0039215686,.1098039216,.03137254901960784,.0039215686,.0039215686,.1254901961,.03529411764705882,.0039215686,.0039215686,.1411764706,.0392156862745098,.0039215686,.0039215686,.1568627451,.043137254901960784,.0039215686,.0039215686,.1725490196,.047058823529411764,.0039215686,.0039215686,.1882352941,.050980392156862744,.0039215686,.0039215686,.2039215686,.054901960784313725,.0039215686,.0039215686,.2196078431,.05882352941176471,.0039215686,.0039215686,.2352941176,.06274509803921569,.0039215686,.0039215686,.2509803922,.06666666666666667,.0039215686,.0039215686,.262745098,.07058823529411765,.0039215686,.0039215686,.2784313725,.07450980392156863,.0039215686,.0039215686,.2941176471,.0784313725490196,.0039215686,.0039215686,.3098039216,.08235294117647059,.0039215686,.0039215686,.3254901961,.08627450980392157,.0039215686,.0039215686,.3411764706,.09019607843137255,.0039215686,.0039215686,.3568627451,.09411764705882353,.0039215686,.0039215686,.3725490196,.09803921568627451,.0039215686,.0039215686,.3882352941,.10196078431372549,.0039215686,.0039215686,.4039215686,.10588235294117647,.0039215686,.0039215686,.4196078431,.10980392156862745,.0039215686,.0039215686,.4352941176,.11372549019607843,.0039215686,.0039215686,.4509803922,.11764705882352942,.0039215686,.0039215686,.4666666667,.12156862745098039,.0039215686,.0039215686,.4823529412,.12549019607843137,.0039215686,.0039215686,.4980392157,.12941176470588237,.0039215686,.0039215686,.5137254902,.13333333333333333,.0039215686,.0039215686,.5294117647,.13725490196078433,.0039215686,.0039215686,.5450980392,.1411764705882353,.0039215686,.0039215686,.5607843137,.1450980392156863,.0039215686,.0039215686,.5764705882,.14901960784313725,.0039215686,.0039215686,.5921568627,.15294117647058825,.0039215686,.0039215686,.6078431373,.1568627450980392,.0039215686,.0039215686,.6235294118,.1607843137254902,.0039215686,.0039215686,.6392156863,.16470588235294117,.0039215686,.0039215686,.6549019608,.16862745098039217,.0039215686,.0039215686,.6705882353,.17254901960784313,.0039215686,.0039215686,.6862745098,.17647058823529413,.0039215686,.0039215686,.7019607843,.1803921568627451,.0039215686,.0039215686,.7176470588,.1843137254901961,.0039215686,.0039215686,.7333333333,.18823529411764706,.0039215686,.0039215686,.7490196078,.19215686274509805,.0039215686,.0039215686,.7607843137,.19607843137254902,.0039215686,.0039215686,.7764705882,.2,.0039215686,.0039215686,.7921568627,.20392156862745098,.0039215686,.0039215686,.8078431373,.20784313725490197,.0039215686,.0039215686,.8235294118,.21176470588235294,.0039215686,.0039215686,.8392156863,.21568627450980393,.0039215686,.0039215686,.8549019608,.2196078431372549,.0039215686,.0039215686,.8705882353,.2235294117647059,.0039215686,.0039215686,.8862745098,.22745098039215686,.0039215686,.0039215686,.9019607843,.23137254901960785,.0039215686,.0039215686,.9176470588,.23529411764705885,.0039215686,.0039215686,.9333333333,.23921568627450984,.0039215686,.0039215686,.9490196078,.24313725490196078,.0039215686,.0039215686,.9647058824,.24705882352941178,.0039215686,.0039215686,.9803921569,.25098039215686274,.0039215686,.0039215686,.9960784314,.2549019607843137,.0039215686,.0039215686,.9960784314,.25882352941176473,.0156862745,.0039215686,.9803921569,.2627450980392157,.031372549,.0039215686,.9647058824,.26666666666666666,.0470588235,.0039215686,.9490196078,.27058823529411763,.062745098,.0039215686,.9333333333,.27450980392156865,.0784313725,.0039215686,.9176470588,.2784313725490196,.0941176471,.0039215686,.9019607843,.2823529411764706,.1098039216,.0039215686,.8862745098,.28627450980392155,.1254901961,.0039215686,.8705882353,.2901960784313726,.1411764706,.0039215686,.8549019608,.29411764705882354,.1568627451,.0039215686,.8392156863,.2980392156862745,.1725490196,.0039215686,.8235294118,.30196078431372547,.1882352941,.0039215686,.8078431373,.3058823529411765,.2039215686,.0039215686,.7921568627,.30980392156862746,.2196078431,.0039215686,.7764705882,.3137254901960784,.2352941176,.0039215686,.7607843137,.3176470588235294,.2509803922,.0039215686,.7490196078,.3215686274509804,.262745098,.0039215686,.7333333333,.3254901960784314,.2784313725,.0039215686,.7176470588,.32941176470588235,.2941176471,.0039215686,.7019607843,.3333333333333333,.3098039216,.0039215686,.6862745098,.33725490196078434,.3254901961,.0039215686,.6705882353,.3411764705882353,.3411764706,.0039215686,.6549019608,.34509803921568627,.3568627451,.0039215686,.6392156863,.34901960784313724,.3725490196,.0039215686,.6235294118,.35294117647058826,.3882352941,.0039215686,.6078431373,.3568627450980392,.4039215686,.0039215686,.5921568627,.3607843137254902,.4196078431,.0039215686,.5764705882,.36470588235294116,.4352941176,.0039215686,.5607843137,.3686274509803922,.4509803922,.0039215686,.5450980392,.37254901960784315,.4666666667,.0039215686,.5294117647,.3764705882352941,.4823529412,.0039215686,.5137254902,.3803921568627451,.4980392157,.0039215686,.4980392157,.3843137254901961,.5137254902,.0039215686,.4823529412,.38823529411764707,.5294117647,.0039215686,.4666666667,.39215686274509803,.5450980392,.0039215686,.4509803922,.396078431372549,.5607843137,.0039215686,.4352941176,.4,.5764705882,.0039215686,.4196078431,.403921568627451,.5921568627,.0039215686,.4039215686,.40784313725490196,.6078431373,.0039215686,.3882352941,.4117647058823529,.6235294118,.0039215686,.3725490196,.41568627450980394,.6392156863,.0039215686,.3568627451,.4196078431372549,.6549019608,.0039215686,.3411764706,.4235294117647059,.6705882353,.0039215686,.3254901961,.42745098039215684,.6862745098,.0039215686,.3098039216,.43137254901960786,.7019607843,.0039215686,.2941176471,.43529411764705883,.7176470588,.0039215686,.2784313725,.4392156862745098,.7333333333,.0039215686,.262745098,.44313725490196076,.7490196078,.0039215686,.2509803922,.4470588235294118,.7607843137,.0039215686,.2352941176,.45098039215686275,.7764705882,.0039215686,.2196078431,.4549019607843137,.7921568627,.0039215686,.2039215686,.4588235294117647,.8078431373,.0039215686,.1882352941,.4627450980392157,.8235294118,.0039215686,.1725490196,.4666666666666667,.8392156863,.0039215686,.1568627451,.4705882352941177,.8549019608,.0039215686,.1411764706,.4745098039215686,.8705882353,.0039215686,.1254901961,.4784313725490197,.8862745098,.0039215686,.1098039216,.48235294117647065,.9019607843,.0039215686,.0941176471,.48627450980392156,.9176470588,.0039215686,.0784313725,.49019607843137253,.9333333333,.0039215686,.062745098,.49411764705882355,.9490196078,.0039215686,.0470588235,.4980392156862745,.9647058824,.0039215686,.031372549,.5019607843137255,.9803921569,.0039215686,.0156862745,.5058823529411764,.9960784314,.0039215686,.0039215686,.5098039215686274,.9960784314,.0156862745,.0039215686,.5137254901960784,.9960784314,.031372549,.0039215686,.5176470588235295,.9960784314,.0470588235,.0039215686,.5215686274509804,.9960784314,.062745098,.0039215686,.5254901960784314,.9960784314,.0784313725,.0039215686,.5294117647058824,.9960784314,.0941176471,.0039215686,.5333333333333333,.9960784314,.1098039216,.0039215686,.5372549019607843,.9960784314,.1254901961,.0039215686,.5411764705882353,.9960784314,.1411764706,.0039215686,.5450980392156862,.9960784314,.1568627451,.0039215686,.5490196078431373,.9960784314,.1725490196,.0039215686,.5529411764705883,.9960784314,.1882352941,.0039215686,.5568627450980392,.9960784314,.2039215686,.0039215686,.5607843137254902,.9960784314,.2196078431,.0039215686,.5647058823529412,.9960784314,.2352941176,.0039215686,.5686274509803921,.9960784314,.2509803922,.0039215686,.5725490196078431,.9960784314,.262745098,.0039215686,.5764705882352941,.9960784314,.2784313725,.0039215686,.5803921568627451,.9960784314,.2941176471,.0039215686,.5843137254901961,.9960784314,.3098039216,.0039215686,.5882352941176471,.9960784314,.3254901961,.0039215686,.592156862745098,.9960784314,.3411764706,.0039215686,.596078431372549,.9960784314,.3568627451,.0039215686,.6,.9960784314,.3725490196,.0039215686,.6039215686274509,.9960784314,.3882352941,.0039215686,.6078431372549019,.9960784314,.4039215686,.0039215686,.611764705882353,.9960784314,.4196078431,.0039215686,.615686274509804,.9960784314,.4352941176,.0039215686,.6196078431372549,.9960784314,.4509803922,.0039215686,.6235294117647059,.9960784314,.4666666667,.0039215686,.6274509803921569,.9960784314,.4823529412,.0039215686,.6313725490196078,.9960784314,.4980392157,.0039215686,.6352941176470588,.9960784314,.5137254902,.0039215686,.6392156862745098,.9960784314,.5294117647,.0039215686,.6431372549019608,.9960784314,.5450980392,.0039215686,.6470588235294118,.9960784314,.5607843137,.0039215686,.6509803921568628,.9960784314,.5764705882,.0039215686,.6549019607843137,.9960784314,.5921568627,.0039215686,.6588235294117647,.9960784314,.6078431373,.0039215686,.6627450980392157,.9960784314,.6235294118,.0039215686,.6666666666666666,.9960784314,.6392156863,.0039215686,.6705882352941176,.9960784314,.6549019608,.0039215686,.6745098039215687,.9960784314,.6705882353,.0039215686,.6784313725490196,.9960784314,.6862745098,.0039215686,.6823529411764706,.9960784314,.7019607843,.0039215686,.6862745098039216,.9960784314,.7176470588,.0039215686,.6901960784313725,.9960784314,.7333333333,.0039215686,.6941176470588235,.9960784314,.7490196078,.0039215686,.6980392156862745,.9960784314,.7607843137,.0039215686,.7019607843137254,.9960784314,.7764705882,.0039215686,.7058823529411765,.9960784314,.7921568627,.0039215686,.7098039215686275,.9960784314,.8078431373,.0039215686,.7137254901960784,.9960784314,.8235294118,.0039215686,.7176470588235294,.9960784314,.8392156863,.0039215686,.7215686274509804,.9960784314,.8549019608,.0039215686,.7254901960784313,.9960784314,.8705882353,.0039215686,.7294117647058823,.9960784314,.8862745098,.0039215686,.7333333333333333,.9960784314,.9019607843,.0039215686,.7372549019607844,.9960784314,.9176470588,.0039215686,.7411764705882353,.9960784314,.9333333333,.0039215686,.7450980392156863,.9960784314,.9490196078,.0039215686,.7490196078431373,.9960784314,.9647058824,.0039215686,.7529411764705882,.9960784314,.9803921569,.0039215686,.7568627450980392,.9960784314,.9960784314,.0039215686,.7607843137254902,.9960784314,.9960784314,.0196078431,.7647058823529411,.9960784314,.9960784314,.0352941176,.7686274509803922,.9960784314,.9960784314,.0509803922,.7725490196078432,.9960784314,.9960784314,.0666666667,.7764705882352941,.9960784314,.9960784314,.0823529412,.7803921568627451,.9960784314,.9960784314,.0980392157,.7843137254901961,.9960784314,.9960784314,.1137254902,.788235294117647,.9960784314,.9960784314,.1294117647,.792156862745098,.9960784314,.9960784314,.1450980392,.796078431372549,.9960784314,.9960784314,.1607843137,.8,.9960784314,.9960784314,.1764705882,.803921568627451,.9960784314,.9960784314,.1921568627,.807843137254902,.9960784314,.9960784314,.2078431373,.8117647058823529,.9960784314,.9960784314,.2235294118,.8156862745098039,.9960784314,.9960784314,.2392156863,.8196078431372549,.9960784314,.9960784314,.2509803922,.8235294117647058,.9960784314,.9960784314,.2666666667,.8274509803921568,.9960784314,.9960784314,.2823529412,.8313725490196079,.9960784314,.9960784314,.2980392157,.8352941176470589,.9960784314,.9960784314,.3137254902,.8392156862745098,.9960784314,.9960784314,.3333333333,.8431372549019608,.9960784314,.9960784314,.3490196078,.8470588235294118,.9960784314,.9960784314,.3647058824,.8509803921568627,.9960784314,.9960784314,.3803921569,.8549019607843137,.9960784314,.9960784314,.3960784314,.8588235294117647,.9960784314,.9960784314,.4117647059,.8627450980392157,.9960784314,.9960784314,.4274509804,.8666666666666667,.9960784314,.9960784314,.4431372549,.8705882352941177,.9960784314,.9960784314,.4588235294,.8745098039215686,.9960784314,.9960784314,.4745098039,.8784313725490196,.9960784314,.9960784314,.4901960784,.8823529411764706,.9960784314,.9960784314,.5058823529,.8862745098039215,.9960784314,.9960784314,.5215686275,.8901960784313725,.9960784314,.9960784314,.537254902,.8941176470588236,.9960784314,.9960784314,.5529411765,.8980392156862745,.9960784314,.9960784314,.568627451,.9019607843137255,.9960784314,.9960784314,.5843137255,.9058823529411765,.9960784314,.9960784314,.6,.9098039215686274,.9960784314,.9960784314,.6156862745,.9137254901960784,.9960784314,.9960784314,.631372549,.9176470588235294,.9960784314,.9960784314,.6470588235,.9215686274509803,.9960784314,.9960784314,.6666666667,.9254901960784314,.9960784314,.9960784314,.6823529412,.9294117647058824,.9960784314,.9960784314,.6980392157,.9333333333333333,.9960784314,.9960784314,.7137254902,.9372549019607843,.9960784314,.9960784314,.7294117647,.9411764705882354,.9960784314,.9960784314,.7450980392,.9450980392156864,.9960784314,.9960784314,.7568627451,.9490196078431372,.9960784314,.9960784314,.7725490196,.9529411764705882,.9960784314,.9960784314,.7882352941,.9568627450980394,.9960784314,.9960784314,.8039215686,.9607843137254903,.9960784314,.9960784314,.8196078431,.9647058823529413,.9960784314,.9960784314,.8352941176,.9686274509803922,.9960784314,.9960784314,.8509803922,.9725490196078431,.9960784314,.9960784314,.8666666667,.9764705882352941,.9960784314,.9960784314,.8823529412,.9803921568627451,.9960784314,.9960784314,.8980392157,.984313725490196,.9960784314,.9960784314,.9137254902,.9882352941176471,.9960784314,.9960784314,.9294117647,.9921568627450981,.9960784314,.9960784314,.9450980392,.996078431372549,.9960784314,.9960784314,.9607843137,1,.9960784314,.9960784314,.9607843137],description:"Hot Iron"},{ColorSpace:"RGB",Name:"red_hot",RGBPoints:[0,0,0,0,.00392156862745098,0,0,0,.00784313725490196,0,0,0,.011764705882352941,0,0,0,.01568627450980392,.0039215686,.0039215686,.0039215686,.0196078431372549,.0039215686,.0039215686,.0039215686,.023529411764705882,.0039215686,.0039215686,.0039215686,.027450980392156862,.0039215686,.0039215686,.0039215686,.03137254901960784,.0039215686,.0039215686,.0039215686,.03529411764705882,.0156862745,0,0,.0392156862745098,.0274509804,0,0,.043137254901960784,.0392156863,0,0,.047058823529411764,.0509803922,0,0,.050980392156862744,.062745098,0,0,.054901960784313725,.0784313725,0,0,.05882352941176471,.0901960784,0,0,.06274509803921569,.1058823529,0,0,.06666666666666667,.1176470588,0,0,.07058823529411765,.1294117647,0,0,.07450980392156863,.1411764706,0,0,.0784313725490196,.1529411765,0,0,.08235294117647059,.1647058824,0,0,.08627450980392157,.1764705882,0,0,.09019607843137255,.1882352941,0,0,.09411764705882353,.2039215686,0,0,.09803921568627451,.2156862745,0,0,.10196078431372549,.2274509804,0,0,.10588235294117647,.2392156863,0,0,.10980392156862745,.2549019608,0,0,.11372549019607843,.2666666667,0,0,.11764705882352942,.2784313725,0,0,.12156862745098039,.2901960784,0,0,.12549019607843137,.3058823529,0,0,.12941176470588237,.3176470588,0,0,.13333333333333333,.3294117647,0,0,.13725490196078433,.3411764706,0,0,.1411764705882353,.3529411765,0,0,.1450980392156863,.3647058824,0,0,.14901960784313725,.3764705882,0,0,.15294117647058825,.3882352941,0,0,.1568627450980392,.4039215686,0,0,.1607843137254902,.4156862745,0,0,.16470588235294117,.431372549,0,0,.16862745098039217,.4431372549,0,0,.17254901960784313,.4588235294,0,0,.17647058823529413,.4705882353,0,0,.1803921568627451,.4823529412,0,0,.1843137254901961,.4941176471,0,0,.18823529411764706,.5098039216,0,0,.19215686274509805,.5215686275,0,0,.19607843137254902,.5333333333,0,0,.2,.5450980392,0,0,.20392156862745098,.5568627451,0,0,.20784313725490197,.568627451,0,0,.21176470588235294,.5803921569,0,0,.21568627450980393,.5921568627,0,0,.2196078431372549,.6078431373,0,0,.2235294117647059,.6196078431,0,0,.22745098039215686,.631372549,0,0,.23137254901960785,.6431372549,0,0,.23529411764705885,.6588235294,0,0,.23921568627450984,.6705882353,0,0,.24313725490196078,.6823529412,0,0,.24705882352941178,.6941176471,0,0,.25098039215686274,.7098039216,0,0,.2549019607843137,.7215686275,0,0,.25882352941176473,.7333333333,0,0,.2627450980392157,.7450980392,0,0,.26666666666666666,.7568627451,0,0,.27058823529411763,.768627451,0,0,.27450980392156865,.7843137255,0,0,.2784313725490196,.7960784314,0,0,.2823529411764706,.8117647059,0,0,.28627450980392155,.8235294118,0,0,.2901960784313726,.8352941176,0,0,.29411764705882354,.8470588235,0,0,.2980392156862745,.862745098,0,0,.30196078431372547,.8745098039,0,0,.3058823529411765,.8862745098,0,0,.30980392156862746,.8980392157,0,0,.3137254901960784,.9137254902,0,0,.3176470588235294,.9254901961,0,0,.3215686274509804,.937254902,0,0,.3254901960784314,.9490196078,0,0,.32941176470588235,.9607843137,0,0,.3333333333333333,.968627451,0,0,.33725490196078434,.9803921569,.0039215686,0,.3411764705882353,.9882352941,.0078431373,0,.34509803921568627,1,.0117647059,0,.34901960784313724,1,.0235294118,0,.35294117647058826,1,.0352941176,0,.3568627450980392,1,.0470588235,0,.3607843137254902,1,.062745098,0,.36470588235294116,1,.0745098039,0,.3686274509803922,1,.0862745098,0,.37254901960784315,1,.0980392157,0,.3764705882352941,1,.1137254902,0,.3803921568627451,1,.1254901961,0,.3843137254901961,1,.137254902,0,.38823529411764707,1,.1490196078,0,.39215686274509803,1,.1647058824,0,.396078431372549,1,.1764705882,0,.4,1,.1882352941,0,.403921568627451,1,.2,0,.40784313725490196,1,.2156862745,0,.4117647058823529,1,.2274509804,0,.41568627450980394,1,.2392156863,0,.4196078431372549,1,.2509803922,0,.4235294117647059,1,.2666666667,0,.42745098039215684,1,.2784313725,0,.43137254901960786,1,.2901960784,0,.43529411764705883,1,.3019607843,0,.4392156862745098,1,.3176470588,0,.44313725490196076,1,.3294117647,0,.4470588235294118,1,.3411764706,0,.45098039215686275,1,.3529411765,0,.4549019607843137,1,.368627451,0,.4588235294117647,1,.3803921569,0,.4627450980392157,1,.3921568627,0,.4666666666666667,1,.4039215686,0,.4705882352941177,1,.4156862745,0,.4745098039215686,1,.4274509804,0,.4784313725490197,1,.4392156863,0,.48235294117647065,1,.4509803922,0,.48627450980392156,1,.4666666667,0,.49019607843137253,1,.4784313725,0,.49411764705882355,1,.4941176471,0,.4980392156862745,1,.5058823529,0,.5019607843137255,1,.5215686275,0,.5058823529411764,1,.5333333333,0,.5098039215686274,1,.5450980392,0,.5137254901960784,1,.5568627451,0,.5176470588235295,1,.568627451,0,.5215686274509804,1,.5803921569,0,.5254901960784314,1,.5921568627,0,.5294117647058824,1,.6039215686,0,.5333333333333333,1,.6196078431,0,.5372549019607843,1,.631372549,0,.5411764705882353,1,.6431372549,0,.5450980392156862,1,.6549019608,0,.5490196078431373,1,.6705882353,0,.5529411764705883,1,.6823529412,0,.5568627450980392,1,.6941176471,0,.5607843137254902,1,.7058823529,0,.5647058823529412,1,.7215686275,0,.5686274509803921,1,.7333333333,0,.5725490196078431,1,.7450980392,0,.5764705882352941,1,.7568627451,0,.5803921568627451,1,.7725490196,0,.5843137254901961,1,.7843137255,0,.5882352941176471,1,.7960784314,0,.592156862745098,1,.8078431373,0,.596078431372549,1,.8196078431,0,.6,1,.831372549,0,.6039215686274509,1,.8470588235,0,.6078431372549019,1,.8588235294,0,.611764705882353,1,.8745098039,0,.615686274509804,1,.8862745098,0,.6196078431372549,1,.8980392157,0,.6235294117647059,1,.9098039216,0,.6274509803921569,1,.9254901961,0,.6313725490196078,1,.937254902,0,.6352941176470588,1,.9490196078,0,.6392156862745098,1,.9607843137,0,.6431372549019608,1,.9764705882,0,.6470588235294118,1,.9803921569,.0039215686,.6509803921568628,1,.9882352941,.0117647059,.6549019607843137,1,.9921568627,.0156862745,.6588235294117647,1,1,.0235294118,.6627450980392157,1,1,.0352941176,.6666666666666666,1,1,.0470588235,.6705882352941176,1,1,.0588235294,.6745098039215687,1,1,.0745098039,.6784313725490196,1,1,.0862745098,.6823529411764706,1,1,.0980392157,.6862745098039216,1,1,.1098039216,.6901960784313725,1,1,.1254901961,.6941176470588235,1,1,.137254902,.6980392156862745,1,1,.1490196078,.7019607843137254,1,1,.1607843137,.7058823529411765,1,1,.1764705882,.7098039215686275,1,1,.1882352941,.7137254901960784,1,1,.2,.7176470588235294,1,1,.2117647059,.7215686274509804,1,1,.2274509804,.7254901960784313,1,1,.2392156863,.7294117647058823,1,1,.2509803922,.7333333333333333,1,1,.262745098,.7372549019607844,1,1,.2784313725,.7411764705882353,1,1,.2901960784,.7450980392156863,1,1,.3019607843,.7490196078431373,1,1,.3137254902,.7529411764705882,1,1,.3294117647,.7568627450980392,1,1,.3411764706,.7607843137254902,1,1,.3529411765,.7647058823529411,1,1,.3647058824,.7686274509803922,1,1,.3803921569,.7725490196078432,1,1,.3921568627,.7764705882352941,1,1,.4039215686,.7803921568627451,1,1,.4156862745,.7843137254901961,1,1,.431372549,.788235294117647,1,1,.4431372549,.792156862745098,1,1,.4549019608,.796078431372549,1,1,.4666666667,.8,1,1,.4784313725,.803921568627451,1,1,.4901960784,.807843137254902,1,1,.5019607843,.8117647058823529,1,1,.5137254902,.8156862745098039,1,1,.5294117647,.8196078431372549,1,1,.5411764706,.8235294117647058,1,1,.5568627451,.8274509803921568,1,1,.568627451,.8313725490196079,1,1,.5843137255,.8352941176470589,1,1,.5960784314,.8392156862745098,1,1,.6078431373,.8431372549019608,1,1,.6196078431,.8470588235294118,1,1,.631372549,.8509803921568627,1,1,.6431372549,.8549019607843137,1,1,.6549019608,.8588235294117647,1,1,.6666666667,.8627450980392157,1,1,.6823529412,.8666666666666667,1,1,.6941176471,.8705882352941177,1,1,.7058823529,.8745098039215686,1,1,.7176470588,.8784313725490196,1,1,.7333333333,.8823529411764706,1,1,.7450980392,.8862745098039215,1,1,.7568627451,.8901960784313725,1,1,.768627451,.8941176470588236,1,1,.7843137255,.8980392156862745,1,1,.7960784314,.9019607843137255,1,1,.8078431373,.9058823529411765,1,1,.8196078431,.9098039215686274,1,1,.8352941176,.9137254901960784,1,1,.8470588235,.9176470588235294,1,1,.8588235294,.9215686274509803,1,1,.8705882353,.9254901960784314,1,1,.8823529412,.9294117647058824,1,1,.8941176471,.9333333333333333,1,1,.9098039216,.9372549019607843,1,1,.9215686275,.9411764705882354,1,1,.937254902,.9450980392156864,1,1,.9490196078,.9490196078431372,1,1,.9607843137,.9529411764705882,1,1,.9725490196,.9568627450980394,1,1,.9882352941,.9607843137254903,1,1,.9882352941,.9647058823529413,1,1,.9921568627,.9686274509803922,1,1,.9960784314,.9725490196078431,1,1,1,.9764705882352941,1,1,1,.9803921568627451,1,1,1,.984313725490196,1,1,1,.9882352941176471,1,1,1,.9921568627450981,1,1,1,.996078431372549,1,1,1,1,1,1,1],description:"Red Hot"},{ColorSpace:"RGB",Name:"s_pet",RGBPoints:[0,.0156862745,.0039215686,.0156862745,.00392156862745098,.0156862745,.0039215686,.0156862745,.00784313725490196,.0274509804,.0039215686,.031372549,.011764705882352941,.0352941176,.0039215686,.0509803922,.01568627450980392,.0392156863,.0039215686,.0666666667,.0196078431372549,.0509803922,.0039215686,.0823529412,.023529411764705882,.062745098,.0039215686,.0980392157,.027450980392156862,.0705882353,.0039215686,.1176470588,.03137254901960784,.0745098039,.0039215686,.1333333333,.03529411764705882,.0862745098,.0039215686,.1490196078,.0392156862745098,.0980392157,.0039215686,.1647058824,.043137254901960784,.1058823529,.0039215686,.1843137255,.047058823529411764,.1098039216,.0039215686,.2,.050980392156862744,.1215686275,.0039215686,.2156862745,.054901960784313725,.1333333333,.0039215686,.231372549,.05882352941176471,.137254902,.0039215686,.2509803922,.06274509803921569,.1490196078,.0039215686,.262745098,.06666666666666667,.1607843137,.0039215686,.2784313725,.07058823529411765,.168627451,.0039215686,.2941176471,.07450980392156863,.1725490196,.0039215686,.3137254902,.0784313725490196,.1843137255,.0039215686,.3294117647,.08235294117647059,.1960784314,.0039215686,.3450980392,.08627450980392157,.2039215686,.0039215686,.3607843137,.09019607843137255,.2078431373,.0039215686,.3803921569,.09411764705882353,.2196078431,.0039215686,.3960784314,.09803921568627451,.231372549,.0039215686,.4117647059,.10196078431372549,.2392156863,.0039215686,.4274509804,.10588235294117647,.2431372549,.0039215686,.4470588235,.10980392156862745,.2509803922,.0039215686,.462745098,.11372549019607843,.262745098,.0039215686,.4784313725,.11764705882352942,.2666666667,.0039215686,.4980392157,.12156862745098039,.2666666667,.0039215686,.4980392157,.12549019607843137,.262745098,.0039215686,.5137254902,.12941176470588237,.2509803922,.0039215686,.5294117647,.13333333333333333,.2431372549,.0039215686,.5450980392,.13725490196078433,.2392156863,.0039215686,.5607843137,.1411764705882353,.231372549,.0039215686,.5764705882,.1450980392156863,.2196078431,.0039215686,.5921568627,.14901960784313725,.2078431373,.0039215686,.6078431373,.15294117647058825,.2039215686,.0039215686,.6235294118,.1568627450980392,.1960784314,.0039215686,.6392156863,.1607843137254902,.1843137255,.0039215686,.6549019608,.16470588235294117,.1725490196,.0039215686,.6705882353,.16862745098039217,.168627451,.0039215686,.6862745098,.17254901960784313,.1607843137,.0039215686,.7019607843,.17647058823529413,.1490196078,.0039215686,.7176470588,.1803921568627451,.137254902,.0039215686,.7333333333,.1843137254901961,.1333333333,.0039215686,.7490196078,.18823529411764706,.1215686275,.0039215686,.7607843137,.19215686274509805,.1098039216,.0039215686,.7764705882,.19607843137254902,.1058823529,.0039215686,.7921568627,.2,.0980392157,.0039215686,.8078431373,.20392156862745098,.0862745098,.0039215686,.8235294118,.20784313725490197,.0745098039,.0039215686,.8392156863,.21176470588235294,.0705882353,.0039215686,.8549019608,.21568627450980393,.062745098,.0039215686,.8705882353,.2196078431372549,.0509803922,.0039215686,.8862745098,.2235294117647059,.0392156863,.0039215686,.9019607843,.22745098039215686,.0352941176,.0039215686,.9176470588,.23137254901960785,.0274509804,.0039215686,.9333333333,.23529411764705885,.0156862745,.0039215686,.9490196078,.23921568627450984,.0078431373,.0039215686,.9647058824,.24313725490196078,.0039215686,.0039215686,.9960784314,.24705882352941178,.0039215686,.0039215686,.9960784314,.25098039215686274,.0039215686,.0196078431,.9647058824,.2549019607843137,.0039215686,.0392156863,.9490196078,.25882352941176473,.0039215686,.0549019608,.9333333333,.2627450980392157,.0039215686,.0745098039,.9176470588,.26666666666666666,.0039215686,.0901960784,.9019607843,.27058823529411763,.0039215686,.1098039216,.8862745098,.27450980392156865,.0039215686,.1254901961,.8705882353,.2784313725490196,.0039215686,.1450980392,.8549019608,.2823529411764706,.0039215686,.1607843137,.8392156863,.28627450980392155,.0039215686,.1803921569,.8235294118,.2901960784313726,.0039215686,.1960784314,.8078431373,.29411764705882354,.0039215686,.2156862745,.7921568627,.2980392156862745,.0039215686,.231372549,.7764705882,.30196078431372547,.0039215686,.2509803922,.7607843137,.3058823529411765,.0039215686,.262745098,.7490196078,.30980392156862746,.0039215686,.2823529412,.7333333333,.3137254901960784,.0039215686,.2980392157,.7176470588,.3176470588235294,.0039215686,.3176470588,.7019607843,.3215686274509804,.0039215686,.3333333333,.6862745098,.3254901960784314,.0039215686,.3529411765,.6705882353,.32941176470588235,.0039215686,.368627451,.6549019608,.3333333333333333,.0039215686,.3882352941,.6392156863,.33725490196078434,.0039215686,.4039215686,.6235294118,.3411764705882353,.0039215686,.4235294118,.6078431373,.34509803921568627,.0039215686,.4392156863,.5921568627,.34901960784313724,.0039215686,.4588235294,.5764705882,.35294117647058826,.0039215686,.4745098039,.5607843137,.3568627450980392,.0039215686,.4941176471,.5450980392,.3607843137254902,.0039215686,.5098039216,.5294117647,.36470588235294116,.0039215686,.5294117647,.5137254902,.3686274509803922,.0039215686,.5450980392,.4980392157,.37254901960784315,.0039215686,.5647058824,.4784313725,.3764705882352941,.0039215686,.5803921569,.462745098,.3803921568627451,.0039215686,.6,.4470588235,.3843137254901961,.0039215686,.6156862745,.4274509804,.38823529411764707,.0039215686,.6352941176,.4117647059,.39215686274509803,.0039215686,.6509803922,.3960784314,.396078431372549,.0039215686,.6705882353,.3803921569,.4,.0039215686,.6862745098,.3607843137,.403921568627451,.0039215686,.7058823529,.3450980392,.40784313725490196,.0039215686,.7215686275,.3294117647,.4117647058823529,.0039215686,.7411764706,.3137254902,.41568627450980394,.0039215686,.7529411765,.2941176471,.4196078431372549,.0039215686,.7960784314,.2784313725,.4235294117647059,.0039215686,.7960784314,.262745098,.42745098039215684,.0392156863,.8039215686,.2509803922,.43137254901960786,.0745098039,.8117647059,.231372549,.43529411764705883,.1098039216,.8196078431,.2156862745,.4392156862745098,.1450980392,.8274509804,.2,.44313725490196076,.1803921569,.8352941176,.1843137255,.4470588235294118,.2156862745,.8431372549,.1647058824,.45098039215686275,.2509803922,.8509803922,.1490196078,.4549019607843137,.2823529412,.8588235294,.1333333333,.4588235294117647,.3176470588,.8666666667,.1176470588,.4627450980392157,.3529411765,.8745098039,.0980392157,.4666666666666667,.3882352941,.8823529412,.0823529412,.4705882352941177,.4235294118,.8901960784,.0666666667,.4745098039215686,.4588235294,.8980392157,.0509803922,.4784313725490197,.4941176471,.9058823529,.0431372549,.48235294117647065,.5294117647,.9137254902,.031372549,.48627450980392156,.5647058824,.9215686275,.0196078431,.49019607843137253,.6,.9294117647,.0078431373,.49411764705882355,.6352941176,.937254902,.0039215686,.4980392156862745,.6705882353,.9450980392,.0039215686,.5019607843137255,.7058823529,.9490196078,.0039215686,.5058823529411764,.7411764706,.9568627451,.0039215686,.5098039215686274,.7725490196,.9607843137,.0039215686,.5137254901960784,.8078431373,.968627451,.0039215686,.5176470588235295,.8431372549,.9725490196,.0039215686,.5215686274509804,.8784313725,.9803921569,.0039215686,.5254901960784314,.9137254902,.9843137255,.0039215686,.5294117647058824,.9490196078,.9921568627,.0039215686,.5333333333333333,.9960784314,.9960784314,.0039215686,.5372549019607843,.9960784314,.9960784314,.0039215686,.5411764705882353,.9960784314,.9921568627,.0039215686,.5450980392156862,.9960784314,.9843137255,.0039215686,.5490196078431373,.9960784314,.9764705882,.0039215686,.5529411764705883,.9960784314,.968627451,.0039215686,.5568627450980392,.9960784314,.9607843137,.0039215686,.5607843137254902,.9960784314,.9529411765,.0039215686,.5647058823529412,.9960784314,.9450980392,.0039215686,.5686274509803921,.9960784314,.937254902,.0039215686,.5725490196078431,.9960784314,.9294117647,.0039215686,.5764705882352941,.9960784314,.9215686275,.0039215686,.5803921568627451,.9960784314,.9137254902,.0039215686,.5843137254901961,.9960784314,.9058823529,.0039215686,.5882352941176471,.9960784314,.8980392157,.0039215686,.592156862745098,.9960784314,.8901960784,.0039215686,.596078431372549,.9960784314,.8823529412,.0039215686,.6,.9960784314,.8745098039,.0039215686,.6039215686274509,.9960784314,.8666666667,.0039215686,.6078431372549019,.9960784314,.8588235294,.0039215686,.611764705882353,.9960784314,.8509803922,.0039215686,.615686274509804,.9960784314,.8431372549,.0039215686,.6196078431372549,.9960784314,.8352941176,.0039215686,.6235294117647059,.9960784314,.8274509804,.0039215686,.6274509803921569,.9960784314,.8196078431,.0039215686,.6313725490196078,.9960784314,.8117647059,.0039215686,.6352941176470588,.9960784314,.8039215686,.0039215686,.6392156862745098,.9960784314,.7960784314,.0039215686,.6431372549019608,.9960784314,.7882352941,.0039215686,.6470588235294118,.9960784314,.7803921569,.0039215686,.6509803921568628,.9960784314,.7725490196,.0039215686,.6549019607843137,.9960784314,.7647058824,.0039215686,.6588235294117647,.9960784314,.7568627451,.0039215686,.6627450980392157,.9960784314,.7490196078,.0039215686,.6666666666666666,.9960784314,.7450980392,.0039215686,.6705882352941176,.9960784314,.737254902,.0039215686,.6745098039215687,.9960784314,.7294117647,.0039215686,.6784313725490196,.9960784314,.7215686275,.0039215686,.6823529411764706,.9960784314,.7137254902,.0039215686,.6862745098039216,.9960784314,.7058823529,.0039215686,.6901960784313725,.9960784314,.6980392157,.0039215686,.6941176470588235,.9960784314,.6901960784,.0039215686,.6980392156862745,.9960784314,.6823529412,.0039215686,.7019607843137254,.9960784314,.6745098039,.0039215686,.7058823529411765,.9960784314,.6666666667,.0039215686,.7098039215686275,.9960784314,.6588235294,.0039215686,.7137254901960784,.9960784314,.6509803922,.0039215686,.7176470588235294,.9960784314,.6431372549,.0039215686,.7215686274509804,.9960784314,.6352941176,.0039215686,.7254901960784313,.9960784314,.6274509804,.0039215686,.7294117647058823,.9960784314,.6196078431,.0039215686,.7333333333333333,.9960784314,.6117647059,.0039215686,.7372549019607844,.9960784314,.6039215686,.0039215686,.7411764705882353,.9960784314,.5960784314,.0039215686,.7450980392156863,.9960784314,.5882352941,.0039215686,.7490196078431373,.9960784314,.5803921569,.0039215686,.7529411764705882,.9960784314,.5725490196,.0039215686,.7568627450980392,.9960784314,.5647058824,.0039215686,.7607843137254902,.9960784314,.5568627451,.0039215686,.7647058823529411,.9960784314,.5490196078,.0039215686,.7686274509803922,.9960784314,.5411764706,.0039215686,.7725490196078432,.9960784314,.5333333333,.0039215686,.7764705882352941,.9960784314,.5254901961,.0039215686,.7803921568627451,.9960784314,.5176470588,.0039215686,.7843137254901961,.9960784314,.5098039216,.0039215686,.788235294117647,.9960784314,.5019607843,.0039215686,.792156862745098,.9960784314,.4941176471,.0039215686,.796078431372549,.9960784314,.4862745098,.0039215686,.8,.9960784314,.4784313725,.0039215686,.803921568627451,.9960784314,.4705882353,.0039215686,.807843137254902,.9960784314,.462745098,.0039215686,.8117647058823529,.9960784314,.4549019608,.0039215686,.8156862745098039,.9960784314,.4470588235,.0039215686,.8196078431372549,.9960784314,.4392156863,.0039215686,.8235294117647058,.9960784314,.431372549,.0039215686,.8274509803921568,.9960784314,.4235294118,.0039215686,.8313725490196079,.9960784314,.4156862745,.0039215686,.8352941176470589,.9960784314,.4078431373,.0039215686,.8392156862745098,.9960784314,.4,.0039215686,.8431372549019608,.9960784314,.3921568627,.0039215686,.8470588235294118,.9960784314,.3843137255,.0039215686,.8509803921568627,.9960784314,.3764705882,.0039215686,.8549019607843137,.9960784314,.368627451,.0039215686,.8588235294117647,.9960784314,.3607843137,.0039215686,.8627450980392157,.9960784314,.3529411765,.0039215686,.8666666666666667,.9960784314,.3450980392,.0039215686,.8705882352941177,.9960784314,.337254902,.0039215686,.8745098039215686,.9960784314,.3294117647,.0039215686,.8784313725490196,.9960784314,.3215686275,.0039215686,.8823529411764706,.9960784314,.3137254902,.0039215686,.8862745098039215,.9960784314,.3058823529,.0039215686,.8901960784313725,.9960784314,.2980392157,.0039215686,.8941176470588236,.9960784314,.2901960784,.0039215686,.8980392156862745,.9960784314,.2823529412,.0039215686,.9019607843137255,.9960784314,.2705882353,.0039215686,.9058823529411765,.9960784314,.2588235294,.0039215686,.9098039215686274,.9960784314,.2509803922,.0039215686,.9137254901960784,.9960784314,.2431372549,.0039215686,.9176470588235294,.9960784314,.231372549,.0039215686,.9215686274509803,.9960784314,.2196078431,.0039215686,.9254901960784314,.9960784314,.2117647059,.0039215686,.9294117647058824,.9960784314,.2,.0039215686,.9333333333333333,.9960784314,.1882352941,.0039215686,.9372549019607843,.9960784314,.1764705882,.0039215686,.9411764705882354,.9960784314,.168627451,.0039215686,.9450980392156864,.9960784314,.1568627451,.0039215686,.9490196078431372,.9960784314,.1450980392,.0039215686,.9529411764705882,.9960784314,.1333333333,.0039215686,.9568627450980394,.9960784314,.1254901961,.0039215686,.9607843137254903,.9960784314,.1137254902,.0039215686,.9647058823529413,.9960784314,.1019607843,.0039215686,.9686274509803922,.9960784314,.0901960784,.0039215686,.9725490196078431,.9960784314,.0823529412,.0039215686,.9764705882352941,.9960784314,.0705882353,.0039215686,.9803921568627451,.9960784314,.0588235294,.0039215686,.984313725490196,.9960784314,.0470588235,.0039215686,.9882352941176471,.9960784314,.0392156863,.0039215686,.9921568627450981,.9960784314,.0274509804,.0039215686,.996078431372549,.9960784314,.0156862745,.0039215686,1,.9960784314,.0156862745,.0039215686],description:"S PET"},{ColorSpace:"RGB",Name:"perfusion",RGBPoints:[0,0,0,0,.00392156862745098,.0078431373,.0235294118,.0235294118,.00784313725490196,.0078431373,.031372549,.0470588235,.011764705882352941,.0078431373,.0392156863,.062745098,.01568627450980392,.0078431373,.0470588235,.0862745098,.0196078431372549,.0078431373,.0549019608,.1019607843,.023529411764705882,.0078431373,.0549019608,.1254901961,.027450980392156862,.0078431373,.062745098,.1411764706,.03137254901960784,.0078431373,.0705882353,.1647058824,.03529411764705882,.0078431373,.0784313725,.1803921569,.0392156862745098,.0078431373,.0862745098,.2039215686,.043137254901960784,.0078431373,.0862745098,.2196078431,.047058823529411764,.0078431373,.0941176471,.2431372549,.050980392156862744,.0078431373,.1019607843,.2666666667,.054901960784313725,.0078431373,.1098039216,.2823529412,.05882352941176471,.0078431373,.1176470588,.3058823529,.06274509803921569,.0078431373,.1176470588,.3215686275,.06666666666666667,.0078431373,.1254901961,.3450980392,.07058823529411765,.0078431373,.1333333333,.3607843137,.07450980392156863,.0078431373,.1411764706,.3843137255,.0784313725490196,.0078431373,.1490196078,.4,.08235294117647059,.0078431373,.1490196078,.4235294118,.08627450980392157,.0078431373,.1568627451,.4392156863,.09019607843137255,.0078431373,.1647058824,.462745098,.09411764705882353,.0078431373,.1725490196,.4784313725,.09803921568627451,.0078431373,.1803921569,.5019607843,.10196078431372549,.0078431373,.1803921569,.5254901961,.10588235294117647,.0078431373,.1882352941,.5411764706,.10980392156862745,.0078431373,.1960784314,.5647058824,.11372549019607843,.0078431373,.2039215686,.5803921569,.11764705882352942,.0078431373,.2117647059,.6039215686,.12156862745098039,.0078431373,.2117647059,.6196078431,.12549019607843137,.0078431373,.2196078431,.6431372549,.12941176470588237,.0078431373,.2274509804,.6588235294,.13333333333333333,.0078431373,.2352941176,.6823529412,.13725490196078433,.0078431373,.2431372549,.6980392157,.1411764705882353,.0078431373,.2431372549,.7215686275,.1450980392156863,.0078431373,.2509803922,.737254902,.14901960784313725,.0078431373,.2588235294,.7607843137,.15294117647058825,.0078431373,.2666666667,.7843137255,.1568627450980392,.0078431373,.2745098039,.8,.1607843137254902,.0078431373,.2745098039,.8235294118,.16470588235294117,.0078431373,.2823529412,.8392156863,.16862745098039217,.0078431373,.2901960784,.862745098,.17254901960784313,.0078431373,.2980392157,.8784313725,.17647058823529413,.0078431373,.3058823529,.9019607843,.1803921568627451,.0078431373,.3058823529,.9176470588,.1843137254901961,.0078431373,.2980392157,.9411764706,.18823529411764706,.0078431373,.3058823529,.9568627451,.19215686274509805,.0078431373,.2980392157,.9803921569,.19607843137254902,.0078431373,.2980392157,.9882352941,.2,.0078431373,.2901960784,.9803921569,.20392156862745098,.0078431373,.2901960784,.9647058824,.20784313725490197,.0078431373,.2823529412,.9568627451,.21176470588235294,.0078431373,.2823529412,.9411764706,.21568627450980393,.0078431373,.2745098039,.9333333333,.2196078431372549,.0078431373,.2666666667,.9176470588,.2235294117647059,.0078431373,.2666666667,.9098039216,.22745098039215686,.0078431373,.2588235294,.9019607843,.23137254901960785,.0078431373,.2588235294,.8862745098,.23529411764705885,.0078431373,.2509803922,.8784313725,.23921568627450984,.0078431373,.2509803922,.862745098,.24313725490196078,.0078431373,.2431372549,.8549019608,.24705882352941178,.0078431373,.2352941176,.8392156863,.25098039215686274,.0078431373,.2352941176,.831372549,.2549019607843137,.0078431373,.2274509804,.8235294118,.25882352941176473,.0078431373,.2274509804,.8078431373,.2627450980392157,.0078431373,.2196078431,.8,.26666666666666666,.0078431373,.2196078431,.7843137255,.27058823529411763,.0078431373,.2117647059,.7764705882,.27450980392156865,.0078431373,.2039215686,.7607843137,.2784313725490196,.0078431373,.2039215686,.7529411765,.2823529411764706,.0078431373,.1960784314,.7450980392,.28627450980392155,.0078431373,.1960784314,.7294117647,.2901960784313726,.0078431373,.1882352941,.7215686275,.29411764705882354,.0078431373,.1882352941,.7058823529,.2980392156862745,.0078431373,.1803921569,.6980392157,.30196078431372547,.0078431373,.1803921569,.6823529412,.3058823529411765,.0078431373,.1725490196,.6745098039,.30980392156862746,.0078431373,.1647058824,.6666666667,.3137254901960784,.0078431373,.1647058824,.6509803922,.3176470588235294,.0078431373,.1568627451,.6431372549,.3215686274509804,.0078431373,.1568627451,.6274509804,.3254901960784314,.0078431373,.1490196078,.6196078431,.32941176470588235,.0078431373,.1490196078,.6039215686,.3333333333333333,.0078431373,.1411764706,.5960784314,.33725490196078434,.0078431373,.1333333333,.5882352941,.3411764705882353,.0078431373,.1333333333,.5725490196,.34509803921568627,.0078431373,.1254901961,.5647058824,.34901960784313724,.0078431373,.1254901961,.5490196078,.35294117647058826,.0078431373,.1176470588,.5411764706,.3568627450980392,.0078431373,.1176470588,.5254901961,.3607843137254902,.0078431373,.1098039216,.5176470588,.36470588235294116,.0078431373,.1019607843,.5098039216,.3686274509803922,.0078431373,.1019607843,.4941176471,.37254901960784315,.0078431373,.0941176471,.4862745098,.3764705882352941,.0078431373,.0941176471,.4705882353,.3803921568627451,.0078431373,.0862745098,.462745098,.3843137254901961,.0078431373,.0862745098,.4470588235,.38823529411764707,.0078431373,.0784313725,.4392156863,.39215686274509803,.0078431373,.0705882353,.431372549,.396078431372549,.0078431373,.0705882353,.4156862745,.4,.0078431373,.062745098,.4078431373,.403921568627451,.0078431373,.062745098,.3921568627,.40784313725490196,.0078431373,.0549019608,.3843137255,.4117647058823529,.0078431373,.0549019608,.368627451,.41568627450980394,.0078431373,.0470588235,.3607843137,.4196078431372549,.0078431373,.0470588235,.3529411765,.4235294117647059,.0078431373,.0392156863,.337254902,.42745098039215684,.0078431373,.031372549,.3294117647,.43137254901960786,.0078431373,.031372549,.3137254902,.43529411764705883,.0078431373,.0235294118,.3058823529,.4392156862745098,.0078431373,.0235294118,.2901960784,.44313725490196076,.0078431373,.0156862745,.2823529412,.4470588235294118,.0078431373,.0156862745,.2745098039,.45098039215686275,.0078431373,.0078431373,.2588235294,.4549019607843137,.0235294118,.0078431373,.2509803922,.4588235294117647,.0078431373,.0078431373,.2352941176,.4627450980392157,.0078431373,.0078431373,.2274509804,.4666666666666667,.0078431373,.0078431373,.2117647059,.4705882352941177,.0078431373,.0078431373,.2039215686,.4745098039215686,.0078431373,.0078431373,.1960784314,.4784313725490197,.0078431373,.0078431373,.1803921569,.48235294117647065,.0078431373,.0078431373,.1725490196,.48627450980392156,.0078431373,.0078431373,.1568627451,.49019607843137253,.0078431373,.0078431373,.1490196078,.49411764705882355,.0078431373,.0078431373,.1333333333,.4980392156862745,.0078431373,.0078431373,.1254901961,.5019607843137255,.0078431373,.0078431373,.1176470588,.5058823529411764,.0078431373,.0078431373,.1019607843,.5098039215686274,.0078431373,.0078431373,.0941176471,.5137254901960784,.0078431373,.0078431373,.0784313725,.5176470588235295,.0078431373,.0078431373,.0705882353,.5215686274509804,.0078431373,.0078431373,.0549019608,.5254901960784314,.0078431373,.0078431373,.0470588235,.5294117647058824,.0235294118,.0078431373,.0392156863,.5333333333333333,.031372549,.0078431373,.0235294118,.5372549019607843,.0392156863,.0078431373,.0156862745,.5411764705882353,.0549019608,.0078431373,0,.5450980392156862,.062745098,.0078431373,0,.5490196078431373,.0705882353,.0078431373,0,.5529411764705883,.0862745098,.0078431373,0,.5568627450980392,.0941176471,.0078431373,0,.5607843137254902,.1019607843,.0078431373,0,.5647058823529412,.1098039216,.0078431373,0,.5686274509803921,.1254901961,.0078431373,0,.5725490196078431,.1333333333,.0078431373,0,.5764705882352941,.1411764706,.0078431373,0,.5803921568627451,.1568627451,.0078431373,0,.5843137254901961,.1647058824,.0078431373,0,.5882352941176471,.1725490196,.0078431373,0,.592156862745098,.1882352941,.0078431373,0,.596078431372549,.1960784314,.0078431373,0,.6,.2039215686,.0078431373,0,.6039215686274509,.2117647059,.0078431373,0,.6078431372549019,.2274509804,.0078431373,0,.611764705882353,.2352941176,.0078431373,0,.615686274509804,.2431372549,.0078431373,0,.6196078431372549,.2588235294,.0078431373,0,.6235294117647059,.2666666667,.0078431373,0,.6274509803921569,.2745098039,0,0,.6313725490196078,.2901960784,.0156862745,0,.6352941176470588,.2980392157,.0235294118,0,.6392156862745098,.3058823529,.0392156863,0,.6431372549019608,.3137254902,.0470588235,0,.6470588235294118,.3294117647,.0549019608,0,.6509803921568628,.337254902,.0705882353,0,.6549019607843137,.3450980392,.0784313725,0,.6588235294117647,.3607843137,.0862745098,0,.6627450980392157,.368627451,.1019607843,0,.6666666666666666,.3764705882,.1098039216,0,.6705882352941176,.3843137255,.1176470588,0,.6745098039215687,.4,.1333333333,0,.6784313725490196,.4078431373,.1411764706,0,.6823529411764706,.4156862745,.1490196078,0,.6862745098039216,.431372549,.1647058824,0,.6901960784313725,.4392156863,.1725490196,0,.6941176470588235,.4470588235,.1803921569,0,.6980392156862745,.462745098,.1960784314,0,.7019607843137254,.4705882353,.2039215686,0,.7058823529411765,.4784313725,.2117647059,0,.7098039215686275,.4862745098,.2274509804,0,.7137254901960784,.5019607843,.2352941176,0,.7176470588235294,.5098039216,.2431372549,0,.7215686274509804,.5176470588,.2588235294,0,.7254901960784313,.5333333333,.2666666667,0,.7294117647058823,.5411764706,.2745098039,0,.7333333333333333,.5490196078,.2901960784,0,.7372549019607844,.5647058824,.2980392157,0,.7411764705882353,.5725490196,.3058823529,0,.7450980392156863,.5803921569,.3215686275,0,.7490196078431373,.5882352941,.3294117647,0,.7529411764705882,.6039215686,.337254902,0,.7568627450980392,.6117647059,.3529411765,0,.7607843137254902,.6196078431,.3607843137,0,.7647058823529411,.6352941176,.368627451,0,.7686274509803922,.6431372549,.3843137255,0,.7725490196078432,.6509803922,.3921568627,0,.7764705882352941,.6588235294,.4,0,.7803921568627451,.6745098039,.4156862745,0,.7843137254901961,.6823529412,.4235294118,0,.788235294117647,.6901960784,.431372549,0,.792156862745098,.7058823529,.4470588235,0,.796078431372549,.7137254902,.4549019608,0,.8,.7215686275,.462745098,0,.803921568627451,.737254902,.4784313725,0,.807843137254902,.7450980392,.4862745098,0,.8117647058823529,.7529411765,.4941176471,0,.8156862745098039,.7607843137,.5098039216,0,.8196078431372549,.7764705882,.5176470588,0,.8235294117647058,.7843137255,.5254901961,0,.8274509803921568,.7921568627,.5411764706,0,.8313725490196079,.8078431373,.5490196078,0,.8352941176470589,.8156862745,.5568627451,0,.8392156862745098,.8235294118,.5725490196,0,.8431372549019608,.8392156863,.5803921569,0,.8470588235294118,.8470588235,.5882352941,0,.8509803921568627,.8549019608,.6039215686,0,.8549019607843137,.862745098,.6117647059,0,.8588235294117647,.8784313725,.6196078431,0,.8627450980392157,.8862745098,.6352941176,0,.8666666666666667,.8941176471,.6431372549,0,.8705882352941177,.9098039216,.6509803922,0,.8745098039215686,.9176470588,.6666666667,0,.8784313725490196,.9254901961,.6745098039,0,.8823529411764706,.9411764706,.6823529412,0,.8862745098039215,.9490196078,.6980392157,0,.8901960784313725,.9568627451,.7058823529,0,.8941176470588236,.9647058824,.7137254902,0,.8980392156862745,.9803921569,.7294117647,0,.9019607843137255,.9882352941,.737254902,0,.9058823529411765,.9960784314,.7450980392,0,.9098039215686274,.9960784314,.7607843137,0,.9137254901960784,.9960784314,.768627451,0,.9176470588235294,.9960784314,.7764705882,0,.9215686274509803,.9960784314,.7921568627,0,.9254901960784314,.9960784314,.8,0,.9294117647058824,.9960784314,.8078431373,0,.9333333333333333,.9960784314,.8235294118,0,.9372549019607843,.9960784314,.831372549,0,.9411764705882354,.9960784314,.8392156863,0,.9450980392156864,.9960784314,.8549019608,0,.9490196078431372,.9960784314,.862745098,.0549019608,.9529411764705882,.9960784314,.8705882353,.1098039216,.9568627450980394,.9960784314,.8862745098,.1647058824,.9607843137254903,.9960784314,.8941176471,.2196078431,.9647058823529413,.9960784314,.9019607843,.2666666667,.9686274509803922,.9960784314,.9176470588,.3215686275,.9725490196078431,.9960784314,.9254901961,.3764705882,.9764705882352941,.9960784314,.9333333333,.431372549,.9803921568627451,.9960784314,.9490196078,.4862745098,.984313725490196,.9960784314,.9568627451,.5333333333,.9882352941176471,.9960784314,.9647058824,.5882352941,.9921568627450981,.9960784314,.9803921569,.6431372549,.996078431372549,.9960784314,.9882352941,.6980392157,1,.9960784314,.9960784314,.7450980392],description:"Perfusion"},{ColorSpace:"RGB",Name:"rainbow_2",RGBPoints:[0,0,0,0,.00392156862745098,.0156862745,0,.0117647059,.00784313725490196,.0352941176,0,.0274509804,.011764705882352941,.0509803922,0,.0392156863,.01568627450980392,.0705882353,0,.0549019608,.0196078431372549,.0862745098,0,.0745098039,.023529411764705882,.1058823529,0,.0901960784,.027450980392156862,.1215686275,0,.1098039216,.03137254901960784,.1411764706,0,.1254901961,.03529411764705882,.1568627451,0,.1490196078,.0392156862745098,.1764705882,0,.168627451,.043137254901960784,.1960784314,0,.1882352941,.047058823529411764,.2117647059,0,.2078431373,.050980392156862744,.2274509804,0,.231372549,.054901960784313725,.2392156863,0,.2470588235,.05882352941176471,.2509803922,0,.2666666667,.06274509803921569,.2666666667,0,.2823529412,.06666666666666667,.2705882353,0,.3019607843,.07058823529411765,.2823529412,0,.3176470588,.07450980392156863,.2901960784,0,.337254902,.0784313725490196,.3019607843,0,.3568627451,.08235294117647059,.3098039216,0,.3725490196,.08627450980392157,.3137254902,0,.3921568627,.09019607843137255,.3215686275,0,.4078431373,.09411764705882353,.3254901961,0,.4274509804,.09803921568627451,.3333333333,0,.4431372549,.10196078431372549,.3294117647,0,.462745098,.10588235294117647,.337254902,0,.4784313725,.10980392156862745,.3411764706,0,.4980392157,.11372549019607843,.3450980392,0,.5176470588,.11764705882352942,.337254902,0,.5333333333,.12156862745098039,.3411764706,0,.5529411765,.12549019607843137,.3411764706,0,.568627451,.12941176470588237,.3411764706,0,.5882352941,.13333333333333333,.3333333333,0,.6039215686,.13725490196078433,.3294117647,0,.6235294118,.1411764705882353,.3294117647,0,.6392156863,.1450980392156863,.3294117647,0,.6588235294,.14901960784313725,.3254901961,0,.6784313725,.15294117647058825,.3098039216,0,.6941176471,.1568627450980392,.3058823529,0,.7137254902,.1607843137254902,.3019607843,0,.7294117647,.16470588235294117,.2980392157,0,.7490196078,.16862745098039217,.2784313725,0,.7647058824,.17254901960784313,.2745098039,0,.7843137255,.17647058823529413,.2666666667,0,.8,.1803921568627451,.2588235294,0,.8196078431,.1843137254901961,.2352941176,0,.8392156863,.18823529411764706,.2274509804,0,.8549019608,.19215686274509805,.2156862745,0,.8745098039,.19607843137254902,.2078431373,0,.8901960784,.2,.1803921569,0,.9098039216,.20392156862745098,.168627451,0,.9254901961,.20784313725490197,.1568627451,0,.9450980392,.21176470588235294,.1411764706,0,.9607843137,.21568627450980393,.1294117647,0,.9803921569,.2196078431372549,.0980392157,0,1,.2235294117647059,.0823529412,0,1,.22745098039215686,.062745098,0,1,.23137254901960785,.0470588235,0,1,.23529411764705885,.0156862745,0,1,.23921568627450984,0,0,1,.24313725490196078,0,.0156862745,1,.24705882352941178,0,.031372549,1,.25098039215686274,0,.062745098,1,.2549019607843137,0,.0823529412,1,.25882352941176473,0,.0980392157,1,.2627450980392157,0,.1137254902,1,.26666666666666666,0,.1490196078,1,.27058823529411763,0,.1647058824,1,.27450980392156865,0,.1803921569,1,.2784313725490196,0,.2,1,.2823529411764706,0,.2156862745,1,.28627450980392155,0,.2470588235,1,.2901960784313726,0,.262745098,1,.29411764705882354,0,.2823529412,1,.2980392156862745,0,.2980392157,1,.30196078431372547,0,.3294117647,1,.3058823529411765,0,.3490196078,1,.30980392156862746,0,.3647058824,1,.3137254901960784,0,.3803921569,1,.3176470588235294,0,.4156862745,1,.3215686274509804,0,.431372549,1,.3254901960784314,0,.4470588235,1,.32941176470588235,0,.4666666667,1,.3333333333333333,0,.4980392157,1,.33725490196078434,0,.5137254902,1,.3411764705882353,0,.5294117647,1,.34509803921568627,0,.5490196078,1,.34901960784313724,0,.5647058824,1,.35294117647058826,0,.5960784314,1,.3568627450980392,0,.6156862745,1,.3607843137254902,0,.631372549,1,.36470588235294116,0,.6470588235,1,.3686274509803922,0,.6823529412,1,.37254901960784315,0,.6980392157,1,.3764705882352941,0,.7137254902,1,.3803921568627451,0,.7333333333,1,.3843137254901961,0,.7647058824,1,.38823529411764707,0,.7803921569,1,.39215686274509803,0,.7960784314,1,.396078431372549,0,.8156862745,1,.4,0,.8470588235,1,.403921568627451,0,.862745098,1,.40784313725490196,0,.8823529412,1,.4117647058823529,0,.8980392157,1,.41568627450980394,0,.9137254902,1,.4196078431372549,0,.9490196078,1,.4235294117647059,0,.9647058824,1,.42745098039215684,0,.9803921569,1,.43137254901960786,0,1,1,.43529411764705883,0,1,.9647058824,.4392156862745098,0,1,.9490196078,.44313725490196076,0,1,.9333333333,.4470588235294118,0,1,.9137254902,.45098039215686275,0,1,.8823529412,.4549019607843137,0,1,.862745098,.4588235294117647,0,1,.8470588235,.4627450980392157,0,1,.831372549,.4666666666666667,0,1,.7960784314,.4705882352941177,0,1,.7803921569,.4745098039215686,0,1,.7647058824,.4784313725490197,0,1,.7490196078,.48235294117647065,0,1,.7333333333,.48627450980392156,0,1,.6980392157,.49019607843137253,0,1,.6823529412,.49411764705882355,0,1,.6666666667,.4980392156862745,0,1,.6470588235,.5019607843137255,0,1,.6156862745,.5058823529411764,0,1,.5960784314,.5098039215686274,0,1,.5803921569,.5137254901960784,0,1,.5647058824,.5176470588235295,0,1,.5294117647,.5215686274509804,0,1,.5137254902,.5254901960784314,0,1,.4980392157,.5294117647058824,0,1,.4823529412,.5333333333333333,0,1,.4470588235,.5372549019607843,0,1,.431372549,.5411764705882353,0,1,.4156862745,.5450980392156862,0,1,.4,.5490196078431373,0,1,.3803921569,.5529411764705883,0,1,.3490196078,.5568627450980392,0,1,.3294117647,.5607843137254902,0,1,.3137254902,.5647058823529412,0,1,.2980392157,.5686274509803921,0,1,.262745098,.5725490196078431,0,1,.2470588235,.5764705882352941,0,1,.231372549,.5803921568627451,0,1,.2156862745,.5843137254901961,0,1,.1803921569,.5882352941176471,0,1,.1647058824,.592156862745098,0,1,.1490196078,.596078431372549,0,1,.1333333333,.6,0,1,.0980392157,.6039215686274509,0,1,.0823529412,.6078431372549019,0,1,.062745098,.611764705882353,0,1,.0470588235,.615686274509804,0,1,.031372549,.6196078431372549,0,1,0,.6235294117647059,.0156862745,1,0,.6274509803921569,.031372549,1,0,.6313725490196078,.0470588235,1,0,.6352941176470588,.0823529412,1,0,.6392156862745098,.0980392157,1,0,.6431372549019608,.1137254902,1,0,.6470588235294118,.1294117647,1,0,.6509803921568628,.1647058824,1,0,.6549019607843137,.1803921569,1,0,.6588235294117647,.2,1,0,.6627450980392157,.2156862745,1,0,.6666666666666666,.2470588235,1,0,.6705882352941176,.262745098,1,0,.6745098039215687,.2823529412,1,0,.6784313725490196,.2980392157,1,0,.6823529411764706,.3137254902,1,0,.6862745098039216,.3490196078,1,0,.6901960784313725,.3647058824,1,0,.6941176470588235,.3803921569,1,0,.6980392156862745,.3960784314,1,0,.7019607843137254,.431372549,1,0,.7058823529411765,.4470588235,1,0,.7098039215686275,.4666666667,1,0,.7137254901960784,.4823529412,1,0,.7176470588235294,.5137254902,1,0,.7215686274509804,.5294117647,1,0,.7254901960784313,.5490196078,1,0,.7294117647058823,.5647058824,1,0,.7333333333333333,.6,1,0,.7372549019607844,.6156862745,1,0,.7411764705882353,.631372549,1,0,.7450980392156863,.6470588235,1,0,.7490196078431373,.662745098,1,0,.7529411764705882,.6980392157,1,0,.7568627450980392,.7137254902,1,0,.7607843137254902,.7333333333,1,0,.7647058823529411,.7490196078,1,0,.7686274509803922,.7803921569,1,0,.7725490196078432,.7960784314,1,0,.7764705882352941,.8156862745,1,0,.7803921568627451,.831372549,1,0,.7843137254901961,.8666666667,1,0,.788235294117647,.8823529412,1,0,.792156862745098,.8980392157,1,0,.796078431372549,.9137254902,1,0,.8,.9490196078,1,0,.803921568627451,.9647058824,1,0,.807843137254902,.9803921569,1,0,.8117647058823529,1,1,0,.8156862745098039,1,.9803921569,0,.8196078431372549,1,.9490196078,0,.8235294117647058,1,.9333333333,0,.8274509803921568,1,.9137254902,0,.8313725490196079,1,.8980392157,0,.8352941176470589,1,.8666666667,0,.8392156862745098,1,.8470588235,0,.8431372549019608,1,.831372549,0,.8470588235294118,1,.8156862745,0,.8509803921568627,1,.7803921569,0,.8549019607843137,1,.7647058824,0,.8588235294117647,1,.7490196078,0,.8627450980392157,1,.7333333333,0,.8666666666666667,1,.6980392157,0,.8705882352941177,1,.6823529412,0,.8745098039215686,1,.6666666667,0,.8784313725490196,1,.6470588235,0,.8823529411764706,1,.631372549,0,.8862745098039215,1,.6,0,.8901960784313725,1,.5803921569,0,.8941176470588236,1,.5647058824,0,.8980392156862745,1,.5490196078,0,.9019607843137255,1,.5137254902,0,.9058823529411765,1,.4980392157,0,.9098039215686274,1,.4823529412,0,.9137254901960784,1,.4666666667,0,.9176470588235294,1,.431372549,0,.9215686274509803,1,.4156862745,0,.9254901960784314,1,.4,0,.9294117647058824,1,.3803921569,0,.9333333333333333,1,.3490196078,0,.9372549019607843,1,.3333333333,0,.9411764705882354,1,.3137254902,0,.9450980392156864,1,.2980392157,0,.9490196078431372,1,.2823529412,0,.9529411764705882,1,.2470588235,0,.9568627450980394,1,.231372549,0,.9607843137254903,1,.2156862745,0,.9647058823529413,1,.2,0,.9686274509803922,1,.1647058824,0,.9725490196078431,1,.1490196078,0,.9764705882352941,1,.1333333333,0,.9803921568627451,1,.1137254902,0,.984313725490196,1,.0823529412,0,.9882352941176471,1,.0666666667,0,.9921568627450981,1,.0470588235,0,.996078431372549,1,.031372549,0,1,1,0,0],description:"Rainbow"},{ColorSpace:"RGB",Name:"suv",RGBPoints:[0,1,1,1,.00392156862745098,1,1,1,.00784313725490196,1,1,1,.011764705882352941,1,1,1,.01568627450980392,1,1,1,.0196078431372549,1,1,1,.023529411764705882,1,1,1,.027450980392156862,1,1,1,.03137254901960784,1,1,1,.03529411764705882,1,1,1,.0392156862745098,1,1,1,.043137254901960784,1,1,1,.047058823529411764,1,1,1,.050980392156862744,1,1,1,.054901960784313725,1,1,1,.05882352941176471,1,1,1,.06274509803921569,1,1,1,.06666666666666667,1,1,1,.07058823529411765,1,1,1,.07450980392156863,1,1,1,.0784313725490196,1,1,1,.08235294117647059,1,1,1,.08627450980392157,1,1,1,.09019607843137255,1,1,1,.09411764705882353,1,1,1,.09803921568627451,1,1,1,.10196078431372549,.737254902,.737254902,.737254902,.10588235294117647,.737254902,.737254902,.737254902,.10980392156862745,.737254902,.737254902,.737254902,.11372549019607843,.737254902,.737254902,.737254902,.11764705882352942,.737254902,.737254902,.737254902,.12156862745098039,.737254902,.737254902,.737254902,.12549019607843137,.737254902,.737254902,.737254902,.12941176470588237,.737254902,.737254902,.737254902,.13333333333333333,.737254902,.737254902,.737254902,.13725490196078433,.737254902,.737254902,.737254902,.1411764705882353,.737254902,.737254902,.737254902,.1450980392156863,.737254902,.737254902,.737254902,.14901960784313725,.737254902,.737254902,.737254902,.15294117647058825,.737254902,.737254902,.737254902,.1568627450980392,.737254902,.737254902,.737254902,.1607843137254902,.737254902,.737254902,.737254902,.16470588235294117,.737254902,.737254902,.737254902,.16862745098039217,.737254902,.737254902,.737254902,.17254901960784313,.737254902,.737254902,.737254902,.17647058823529413,.737254902,.737254902,.737254902,.1803921568627451,.737254902,.737254902,.737254902,.1843137254901961,.737254902,.737254902,.737254902,.18823529411764706,.737254902,.737254902,.737254902,.19215686274509805,.737254902,.737254902,.737254902,.19607843137254902,.737254902,.737254902,.737254902,.2,.737254902,.737254902,.737254902,.20392156862745098,.431372549,0,.568627451,.20784313725490197,.431372549,0,.568627451,.21176470588235294,.431372549,0,.568627451,.21568627450980393,.431372549,0,.568627451,.2196078431372549,.431372549,0,.568627451,.2235294117647059,.431372549,0,.568627451,.22745098039215686,.431372549,0,.568627451,.23137254901960785,.431372549,0,.568627451,.23529411764705885,.431372549,0,.568627451,.23921568627450984,.431372549,0,.568627451,.24313725490196078,.431372549,0,.568627451,.24705882352941178,.431372549,0,.568627451,.25098039215686274,.431372549,0,.568627451,.2549019607843137,.431372549,0,.568627451,.25882352941176473,.431372549,0,.568627451,.2627450980392157,.431372549,0,.568627451,.26666666666666666,.431372549,0,.568627451,.27058823529411763,.431372549,0,.568627451,.27450980392156865,.431372549,0,.568627451,.2784313725490196,.431372549,0,.568627451,.2823529411764706,.431372549,0,.568627451,.28627450980392155,.431372549,0,.568627451,.2901960784313726,.431372549,0,.568627451,.29411764705882354,.431372549,0,.568627451,.2980392156862745,.431372549,0,.568627451,.30196078431372547,.431372549,0,.568627451,.3058823529411765,.2509803922,.3333333333,.6509803922,.30980392156862746,.2509803922,.3333333333,.6509803922,.3137254901960784,.2509803922,.3333333333,.6509803922,.3176470588235294,.2509803922,.3333333333,.6509803922,.3215686274509804,.2509803922,.3333333333,.6509803922,.3254901960784314,.2509803922,.3333333333,.6509803922,.32941176470588235,.2509803922,.3333333333,.6509803922,.3333333333333333,.2509803922,.3333333333,.6509803922,.33725490196078434,.2509803922,.3333333333,.6509803922,.3411764705882353,.2509803922,.3333333333,.6509803922,.34509803921568627,.2509803922,.3333333333,.6509803922,.34901960784313724,.2509803922,.3333333333,.6509803922,.35294117647058826,.2509803922,.3333333333,.6509803922,.3568627450980392,.2509803922,.3333333333,.6509803922,.3607843137254902,.2509803922,.3333333333,.6509803922,.36470588235294116,.2509803922,.3333333333,.6509803922,.3686274509803922,.2509803922,.3333333333,.6509803922,.37254901960784315,.2509803922,.3333333333,.6509803922,.3764705882352941,.2509803922,.3333333333,.6509803922,.3803921568627451,.2509803922,.3333333333,.6509803922,.3843137254901961,.2509803922,.3333333333,.6509803922,.38823529411764707,.2509803922,.3333333333,.6509803922,.39215686274509803,.2509803922,.3333333333,.6509803922,.396078431372549,.2509803922,.3333333333,.6509803922,.4,.2509803922,.3333333333,.6509803922,.403921568627451,.2509803922,.3333333333,.6509803922,.40784313725490196,0,.8,1,.4117647058823529,0,.8,1,.41568627450980394,0,.8,1,.4196078431372549,0,.8,1,.4235294117647059,0,.8,1,.42745098039215684,0,.8,1,.43137254901960786,0,.8,1,.43529411764705883,0,.8,1,.4392156862745098,0,.8,1,.44313725490196076,0,.8,1,.4470588235294118,0,.8,1,.45098039215686275,0,.8,1,.4549019607843137,0,.8,1,.4588235294117647,0,.8,1,.4627450980392157,0,.8,1,.4666666666666667,0,.8,1,.4705882352941177,0,.8,1,.4745098039215686,0,.8,1,.4784313725490197,0,.8,1,.48235294117647065,0,.8,1,.48627450980392156,0,.8,1,.49019607843137253,0,.8,1,.49411764705882355,0,.8,1,.4980392156862745,0,.8,1,.5019607843137255,0,.8,1,.5058823529411764,0,.6666666667,.5333333333,.5098039215686274,0,.6666666667,.5333333333,.5137254901960784,0,.6666666667,.5333333333,.5176470588235295,0,.6666666667,.5333333333,.5215686274509804,0,.6666666667,.5333333333,.5254901960784314,0,.6666666667,.5333333333,.5294117647058824,0,.6666666667,.5333333333,.5333333333333333,0,.6666666667,.5333333333,.5372549019607843,0,.6666666667,.5333333333,.5411764705882353,0,.6666666667,.5333333333,.5450980392156862,0,.6666666667,.5333333333,.5490196078431373,0,.6666666667,.5333333333,.5529411764705883,0,.6666666667,.5333333333,.5568627450980392,0,.6666666667,.5333333333,.5607843137254902,0,.6666666667,.5333333333,.5647058823529412,0,.6666666667,.5333333333,.5686274509803921,0,.6666666667,.5333333333,.5725490196078431,0,.6666666667,.5333333333,.5764705882352941,0,.6666666667,.5333333333,.5803921568627451,0,.6666666667,.5333333333,.5843137254901961,0,.6666666667,.5333333333,.5882352941176471,0,.6666666667,.5333333333,.592156862745098,0,.6666666667,.5333333333,.596078431372549,0,.6666666667,.5333333333,.6,0,.6666666667,.5333333333,.6039215686274509,0,.6666666667,.5333333333,.6078431372549019,.4,1,.4,.611764705882353,.4,1,.4,.615686274509804,.4,1,.4,.6196078431372549,.4,1,.4,.6235294117647059,.4,1,.4,.6274509803921569,.4,1,.4,.6313725490196078,.4,1,.4,.6352941176470588,.4,1,.4,.6392156862745098,.4,1,.4,.6431372549019608,.4,1,.4,.6470588235294118,.4,1,.4,.6509803921568628,.4,1,.4,.6549019607843137,.4,1,.4,.6588235294117647,.4,1,.4,.6627450980392157,.4,1,.4,.6666666666666666,.4,1,.4,.6705882352941176,.4,1,.4,.6745098039215687,.4,1,.4,.6784313725490196,.4,1,.4,.6823529411764706,.4,1,.4,.6862745098039216,.4,1,.4,.6901960784313725,.4,1,.4,.6941176470588235,.4,1,.4,.6980392156862745,.4,1,.4,.7019607843137254,.4,1,.4,.7058823529411765,1,.9490196078,0,.7098039215686275,1,.9490196078,0,.7137254901960784,1,.9490196078,0,.7176470588235294,1,.9490196078,0,.7215686274509804,1,.9490196078,0,.7254901960784313,1,.9490196078,0,.7294117647058823,1,.9490196078,0,.7333333333333333,1,.9490196078,0,.7372549019607844,1,.9490196078,0,.7411764705882353,1,.9490196078,0,.7450980392156863,1,.9490196078,0,.7490196078431373,1,.9490196078,0,.7529411764705882,1,.9490196078,0,.7568627450980392,1,.9490196078,0,.7607843137254902,1,.9490196078,0,.7647058823529411,1,.9490196078,0,.7686274509803922,1,.9490196078,0,.7725490196078432,1,.9490196078,0,.7764705882352941,1,.9490196078,0,.7803921568627451,1,.9490196078,0,.7843137254901961,1,.9490196078,0,.788235294117647,1,.9490196078,0,.792156862745098,1,.9490196078,0,.796078431372549,1,.9490196078,0,.8,1,.9490196078,0,.803921568627451,1,.9490196078,0,.807843137254902,.9490196078,.6509803922,.2509803922,.8117647058823529,.9490196078,.6509803922,.2509803922,.8156862745098039,.9490196078,.6509803922,.2509803922,.8196078431372549,.9490196078,.6509803922,.2509803922,.8235294117647058,.9490196078,.6509803922,.2509803922,.8274509803921568,.9490196078,.6509803922,.2509803922,.8313725490196079,.9490196078,.6509803922,.2509803922,.8352941176470589,.9490196078,.6509803922,.2509803922,.8392156862745098,.9490196078,.6509803922,.2509803922,.8431372549019608,.9490196078,.6509803922,.2509803922,.8470588235294118,.9490196078,.6509803922,.2509803922,.8509803921568627,.9490196078,.6509803922,.2509803922,.8549019607843137,.9490196078,.6509803922,.2509803922,.8588235294117647,.9490196078,.6509803922,.2509803922,.8627450980392157,.9490196078,.6509803922,.2509803922,.8666666666666667,.9490196078,.6509803922,.2509803922,.8705882352941177,.9490196078,.6509803922,.2509803922,.8745098039215686,.9490196078,.6509803922,.2509803922,.8784313725490196,.9490196078,.6509803922,.2509803922,.8823529411764706,.9490196078,.6509803922,.2509803922,.8862745098039215,.9490196078,.6509803922,.2509803922,.8901960784313725,.9490196078,.6509803922,.2509803922,.8941176470588236,.9490196078,.6509803922,.2509803922,.8980392156862745,.9490196078,.6509803922,.2509803922,.9019607843137255,.9490196078,.6509803922,.2509803922,.9058823529411765,.9490196078,.6509803922,.2509803922,.9098039215686274,1,0,0,.9137254901960784,1,0,0,.9176470588235294,1,0,0,.9215686274509803,1,0,0,.9254901960784314,1,0,0,.9294117647058824,1,0,0,.9333333333333333,1,0,0,.9372549019607843,1,0,0,.9411764705882354,1,0,0,.9450980392156864,1,0,0,.9490196078431372,1,0,0,.9529411764705882,1,0,0,.9568627450980394,1,0,0,.9607843137254903,1,0,0,.9647058823529413,1,0,0,.9686274509803922,1,0,0,.9725490196078431,1,0,0,.9764705882352941,1,0,0,.9803921568627451,1,0,0,.984313725490196,1,0,0,.9882352941176471,1,0,0,.9921568627450981,1,0,0,.996078431372549,1,0,0,1,1,0,0],description:"SUV"},{ColorSpace:"RGB",Name:"ge_256",RGBPoints:[0,.0039215686,.0078431373,.0078431373,.00392156862745098,.0039215686,.0078431373,.0078431373,.00784313725490196,.0039215686,.0078431373,.0117647059,.011764705882352941,.0039215686,.0117647059,.0156862745,.01568627450980392,.0039215686,.0117647059,.0196078431,.0196078431372549,.0039215686,.0156862745,.0235294118,.023529411764705882,.0039215686,.0156862745,.0274509804,.027450980392156862,.0039215686,.0196078431,.031372549,.03137254901960784,.0039215686,.0196078431,.0352941176,.03529411764705882,.0039215686,.0235294118,.0392156863,.0392156862745098,.0039215686,.0235294118,.0431372549,.043137254901960784,.0039215686,.0274509804,.0470588235,.047058823529411764,.0039215686,.0274509804,.0509803922,.050980392156862744,.0039215686,.031372549,.0549019608,.054901960784313725,.0039215686,.031372549,.0588235294,.05882352941176471,.0039215686,.0352941176,.062745098,.06274509803921569,.0039215686,.0352941176,.0666666667,.06666666666666667,.0039215686,.0392156863,.0705882353,.07058823529411765,.0039215686,.0392156863,.0745098039,.07450980392156863,.0039215686,.0431372549,.0784313725,.0784313725490196,.0039215686,.0431372549,.0823529412,.08235294117647059,.0039215686,.0470588235,.0862745098,.08627450980392157,.0039215686,.0470588235,.0901960784,.09019607843137255,.0039215686,.0509803922,.0941176471,.09411764705882353,.0039215686,.0509803922,.0980392157,.09803921568627451,.0039215686,.0549019608,.1019607843,.10196078431372549,.0039215686,.0549019608,.1058823529,.10588235294117647,.0039215686,.0588235294,.1098039216,.10980392156862745,.0039215686,.0588235294,.1137254902,.11372549019607843,.0039215686,.062745098,.1176470588,.11764705882352942,.0039215686,.062745098,.1215686275,.12156862745098039,.0039215686,.0666666667,.1254901961,.12549019607843137,.0039215686,.0666666667,.1294117647,.12941176470588237,.0039215686,.0705882353,.1333333333,.13333333333333333,.0039215686,.0705882353,.137254902,.13725490196078433,.0039215686,.0745098039,.1411764706,.1411764705882353,.0039215686,.0745098039,.1450980392,.1450980392156863,.0039215686,.0784313725,.1490196078,.14901960784313725,.0039215686,.0784313725,.1529411765,.15294117647058825,.0039215686,.0823529412,.1568627451,.1568627450980392,.0039215686,.0823529412,.1607843137,.1607843137254902,.0039215686,.0862745098,.1647058824,.16470588235294117,.0039215686,.0862745098,.168627451,.16862745098039217,.0039215686,.0901960784,.1725490196,.17254901960784313,.0039215686,.0901960784,.1764705882,.17647058823529413,.0039215686,.0941176471,.1803921569,.1803921568627451,.0039215686,.0941176471,.1843137255,.1843137254901961,.0039215686,.0980392157,.1882352941,.18823529411764706,.0039215686,.0980392157,.1921568627,.19215686274509805,.0039215686,.1019607843,.1960784314,.19607843137254902,.0039215686,.1019607843,.2,.2,.0039215686,.1058823529,.2039215686,.20392156862745098,.0039215686,.1058823529,.2078431373,.20784313725490197,.0039215686,.1098039216,.2117647059,.21176470588235294,.0039215686,.1098039216,.2156862745,.21568627450980393,.0039215686,.1137254902,.2196078431,.2196078431372549,.0039215686,.1137254902,.2235294118,.2235294117647059,.0039215686,.1176470588,.2274509804,.22745098039215686,.0039215686,.1176470588,.231372549,.23137254901960785,.0039215686,.1215686275,.2352941176,.23529411764705885,.0039215686,.1215686275,.2392156863,.23921568627450984,.0039215686,.1254901961,.2431372549,.24313725490196078,.0039215686,.1254901961,.2470588235,.24705882352941178,.0039215686,.1294117647,.2509803922,.25098039215686274,.0039215686,.1294117647,.2509803922,.2549019607843137,.0078431373,.1254901961,.2549019608,.25882352941176473,.0156862745,.1254901961,.2588235294,.2627450980392157,.0235294118,.1215686275,.262745098,.26666666666666666,.031372549,.1215686275,.2666666667,.27058823529411763,.0392156863,.1176470588,.2705882353,.27450980392156865,.0470588235,.1176470588,.2745098039,.2784313725490196,.0549019608,.1137254902,.2784313725,.2823529411764706,.062745098,.1137254902,.2823529412,.28627450980392155,.0705882353,.1098039216,.2862745098,.2901960784313726,.0784313725,.1098039216,.2901960784,.29411764705882354,.0862745098,.1058823529,.2941176471,.2980392156862745,.0941176471,.1058823529,.2980392157,.30196078431372547,.1019607843,.1019607843,.3019607843,.3058823529411765,.1098039216,.1019607843,.3058823529,.30980392156862746,.1176470588,.0980392157,.3098039216,.3137254901960784,.1254901961,.0980392157,.3137254902,.3176470588235294,.1333333333,.0941176471,.3176470588,.3215686274509804,.1411764706,.0941176471,.3215686275,.3254901960784314,.1490196078,.0901960784,.3254901961,.32941176470588235,.1568627451,.0901960784,.3294117647,.3333333333333333,.1647058824,.0862745098,.3333333333,.33725490196078434,.1725490196,.0862745098,.337254902,.3411764705882353,.1803921569,.0823529412,.3411764706,.34509803921568627,.1882352941,.0823529412,.3450980392,.34901960784313724,.1960784314,.0784313725,.3490196078,.35294117647058826,.2039215686,.0784313725,.3529411765,.3568627450980392,.2117647059,.0745098039,.3568627451,.3607843137254902,.2196078431,.0745098039,.3607843137,.36470588235294116,.2274509804,.0705882353,.3647058824,.3686274509803922,.2352941176,.0705882353,.368627451,.37254901960784315,.2431372549,.0666666667,.3725490196,.3764705882352941,.2509803922,.0666666667,.3764705882,.3803921568627451,.2549019608,.062745098,.3803921569,.3843137254901961,.262745098,.062745098,.3843137255,.38823529411764707,.2705882353,.0588235294,.3882352941,.39215686274509803,.2784313725,.0588235294,.3921568627,.396078431372549,.2862745098,.0549019608,.3960784314,.4,.2941176471,.0549019608,.4,.403921568627451,.3019607843,.0509803922,.4039215686,.40784313725490196,.3098039216,.0509803922,.4078431373,.4117647058823529,.3176470588,.0470588235,.4117647059,.41568627450980394,.3254901961,.0470588235,.4156862745,.4196078431372549,.3333333333,.0431372549,.4196078431,.4235294117647059,.3411764706,.0431372549,.4235294118,.42745098039215684,.3490196078,.0392156863,.4274509804,.43137254901960786,.3568627451,.0392156863,.431372549,.43529411764705883,.3647058824,.0352941176,.4352941176,.4392156862745098,.3725490196,.0352941176,.4392156863,.44313725490196076,.3803921569,.031372549,.4431372549,.4470588235294118,.3882352941,.031372549,.4470588235,.45098039215686275,.3960784314,.0274509804,.4509803922,.4549019607843137,.4039215686,.0274509804,.4549019608,.4588235294117647,.4117647059,.0235294118,.4588235294,.4627450980392157,.4196078431,.0235294118,.462745098,.4666666666666667,.4274509804,.0196078431,.4666666667,.4705882352941177,.4352941176,.0196078431,.4705882353,.4745098039215686,.4431372549,.0156862745,.4745098039,.4784313725490197,.4509803922,.0156862745,.4784313725,.48235294117647065,.4588235294,.0117647059,.4823529412,.48627450980392156,.4666666667,.0117647059,.4862745098,.49019607843137253,.4745098039,.0078431373,.4901960784,.49411764705882355,.4823529412,.0078431373,.4941176471,.4980392156862745,.4901960784,.0039215686,.4980392157,.5019607843137255,.4980392157,.0117647059,.4980392157,.5058823529411764,.5058823529,.0156862745,.4901960784,.5098039215686274,.5137254902,.0235294118,.4823529412,.5137254901960784,.5215686275,.0274509804,.4745098039,.5176470588235295,.5294117647,.0352941176,.4666666667,.5215686274509804,.537254902,.0392156863,.4588235294,.5254901960784314,.5450980392,.0470588235,.4509803922,.5294117647058824,.5529411765,.0509803922,.4431372549,.5333333333333333,.5607843137,.0588235294,.4352941176,.5372549019607843,.568627451,.062745098,.4274509804,.5411764705882353,.5764705882,.0705882353,.4196078431,.5450980392156862,.5843137255,.0745098039,.4117647059,.5490196078431373,.5921568627,.0823529412,.4039215686,.5529411764705883,.6,.0862745098,.3960784314,.5568627450980392,.6078431373,.0941176471,.3882352941,.5607843137254902,.6156862745,.0980392157,.3803921569,.5647058823529412,.6235294118,.1058823529,.3725490196,.5686274509803921,.631372549,.1098039216,.3647058824,.5725490196078431,.6392156863,.1176470588,.3568627451,.5764705882352941,.6470588235,.1215686275,.3490196078,.5803921568627451,.6549019608,.1294117647,.3411764706,.5843137254901961,.662745098,.1333333333,.3333333333,.5882352941176471,.6705882353,.1411764706,.3254901961,.592156862745098,.6784313725,.1450980392,.3176470588,.596078431372549,.6862745098,.1529411765,.3098039216,.6,.6941176471,.1568627451,.3019607843,.6039215686274509,.7019607843,.1647058824,.2941176471,.6078431372549019,.7098039216,.168627451,.2862745098,.611764705882353,.7176470588,.1764705882,.2784313725,.615686274509804,.7254901961,.1803921569,.2705882353,.6196078431372549,.7333333333,.1882352941,.262745098,.6235294117647059,.7411764706,.1921568627,.2549019608,.6274509803921569,.7490196078,.2,.2509803922,.6313725490196078,.7529411765,.2039215686,.2431372549,.6352941176470588,.7607843137,.2117647059,.2352941176,.6392156862745098,.768627451,.2156862745,.2274509804,.6431372549019608,.7764705882,.2235294118,.2196078431,.6470588235294118,.7843137255,.2274509804,.2117647059,.6509803921568628,.7921568627,.2352941176,.2039215686,.6549019607843137,.8,.2392156863,.1960784314,.6588235294117647,.8078431373,.2470588235,.1882352941,.6627450980392157,.8156862745,.2509803922,.1803921569,.6666666666666666,.8235294118,.2549019608,.1725490196,.6705882352941176,.831372549,.2588235294,.1647058824,.6745098039215687,.8392156863,.2666666667,.1568627451,.6784313725490196,.8470588235,.2705882353,.1490196078,.6823529411764706,.8549019608,.2784313725,.1411764706,.6862745098039216,.862745098,.2823529412,.1333333333,.6901960784313725,.8705882353,.2901960784,.1254901961,.6941176470588235,.8784313725,.2941176471,.1176470588,.6980392156862745,.8862745098,.3019607843,.1098039216,.7019607843137254,.8941176471,.3058823529,.1019607843,.7058823529411765,.9019607843,.3137254902,.0941176471,.7098039215686275,.9098039216,.3176470588,.0862745098,.7137254901960784,.9176470588,.3254901961,.0784313725,.7176470588235294,.9254901961,.3294117647,.0705882353,.7215686274509804,.9333333333,.337254902,.062745098,.7254901960784313,.9411764706,.3411764706,.0549019608,.7294117647058823,.9490196078,.3490196078,.0470588235,.7333333333333333,.9568627451,.3529411765,.0392156863,.7372549019607844,.9647058824,.3607843137,.031372549,.7411764705882353,.9725490196,.3647058824,.0235294118,.7450980392156863,.9803921569,.3725490196,.0156862745,.7490196078431373,.9882352941,.3725490196,.0039215686,.7529411764705882,.9960784314,.3843137255,.0156862745,.7568627450980392,.9960784314,.3921568627,.031372549,.7607843137254902,.9960784314,.4039215686,.0470588235,.7647058823529411,.9960784314,.4117647059,.062745098,.7686274509803922,.9960784314,.4235294118,.0784313725,.7725490196078432,.9960784314,.431372549,.0941176471,.7764705882352941,.9960784314,.4431372549,.1098039216,.7803921568627451,.9960784314,.4509803922,.1254901961,.7843137254901961,.9960784314,.462745098,.1411764706,.788235294117647,.9960784314,.4705882353,.1568627451,.792156862745098,.9960784314,.4823529412,.1725490196,.796078431372549,.9960784314,.4901960784,.1882352941,.8,.9960784314,.5019607843,.2039215686,.803921568627451,.9960784314,.5098039216,.2196078431,.807843137254902,.9960784314,.5215686275,.2352941176,.8117647058823529,.9960784314,.5294117647,.2509803922,.8156862745098039,.9960784314,.5411764706,.262745098,.8196078431372549,.9960784314,.5490196078,.2784313725,.8235294117647058,.9960784314,.5607843137,.2941176471,.8274509803921568,.9960784314,.568627451,.3098039216,.8313725490196079,.9960784314,.5803921569,.3254901961,.8352941176470589,.9960784314,.5882352941,.3411764706,.8392156862745098,.9960784314,.6,.3568627451,.8431372549019608,.9960784314,.6078431373,.3725490196,.8470588235294118,.9960784314,.6196078431,.3882352941,.8509803921568627,.9960784314,.6274509804,.4039215686,.8549019607843137,.9960784314,.6392156863,.4196078431,.8588235294117647,.9960784314,.6470588235,.4352941176,.8627450980392157,.9960784314,.6588235294,.4509803922,.8666666666666667,.9960784314,.6666666667,.4666666667,.8705882352941177,.9960784314,.6784313725,.4823529412,.8745098039215686,.9960784314,.6862745098,.4980392157,.8784313725490196,.9960784314,.6980392157,.5137254902,.8823529411764706,.9960784314,.7058823529,.5294117647,.8862745098039215,.9960784314,.7176470588,.5450980392,.8901960784313725,.9960784314,.7254901961,.5607843137,.8941176470588236,.9960784314,.737254902,.5764705882,.8980392156862745,.9960784314,.7450980392,.5921568627,.9019607843137255,.9960784314,.7529411765,.6078431373,.9058823529411765,.9960784314,.7607843137,.6235294118,.9098039215686274,.9960784314,.7725490196,.6392156863,.9137254901960784,.9960784314,.7803921569,.6549019608,.9176470588235294,.9960784314,.7921568627,.6705882353,.9215686274509803,.9960784314,.8,.6862745098,.9254901960784314,.9960784314,.8117647059,.7019607843,.9294117647058824,.9960784314,.8196078431,.7176470588,.9333333333333333,.9960784314,.831372549,.7333333333,.9372549019607843,.9960784314,.8392156863,.7490196078,.9411764705882354,.9960784314,.8509803922,.7607843137,.9450980392156864,.9960784314,.8588235294,.7764705882,.9490196078431372,.9960784314,.8705882353,.7921568627,.9529411764705882,.9960784314,.8784313725,.8078431373,.9568627450980394,.9960784314,.8901960784,.8235294118,.9607843137254903,.9960784314,.8980392157,.8392156863,.9647058823529413,.9960784314,.9098039216,.8549019608,.9686274509803922,.9960784314,.9176470588,.8705882353,.9725490196078431,.9960784314,.9294117647,.8862745098,.9764705882352941,.9960784314,.937254902,.9019607843,.9803921568627451,.9960784314,.9490196078,.9176470588,.984313725490196,.9960784314,.9568627451,.9333333333,.9882352941176471,.9960784314,.968627451,.9490196078,.9921568627450981,.9960784314,.9764705882,.9647058824,.996078431372549,.9960784314,.9882352941,.9803921569,1,.9960784314,.9882352941,.9803921569],description:"GE 256"},{ColorSpace:"RGB",Name:"ge",RGBPoints:[0,.0078431373,.0078431373,.0078431373,.00392156862745098,.0078431373,.0078431373,.0078431373,.00784313725490196,.0078431373,.0078431373,.0078431373,.011764705882352941,.0078431373,.0078431373,.0078431373,.01568627450980392,.0078431373,.0078431373,.0078431373,.0196078431372549,.0078431373,.0078431373,.0078431373,.023529411764705882,.0078431373,.0078431373,.0078431373,.027450980392156862,.0078431373,.0078431373,.0078431373,.03137254901960784,.0078431373,.0078431373,.0078431373,.03529411764705882,.0078431373,.0078431373,.0078431373,.0392156862745098,.0078431373,.0078431373,.0078431373,.043137254901960784,.0078431373,.0078431373,.0078431373,.047058823529411764,.0078431373,.0078431373,.0078431373,.050980392156862744,.0078431373,.0078431373,.0078431373,.054901960784313725,.0078431373,.0078431373,.0078431373,.05882352941176471,.0117647059,.0078431373,.0078431373,.06274509803921569,.0078431373,.0156862745,.0156862745,.06666666666666667,.0078431373,.0235294118,.0235294118,.07058823529411765,.0078431373,.031372549,.031372549,.07450980392156863,.0078431373,.0392156863,.0392156863,.0784313725490196,.0078431373,.0470588235,.0470588235,.08235294117647059,.0078431373,.0549019608,.0549019608,.08627450980392157,.0078431373,.062745098,.062745098,.09019607843137255,.0078431373,.0705882353,.0705882353,.09411764705882353,.0078431373,.0784313725,.0784313725,.09803921568627451,.0078431373,.0901960784,.0862745098,.10196078431372549,.0078431373,.0980392157,.0941176471,.10588235294117647,.0078431373,.1058823529,.1019607843,.10980392156862745,.0078431373,.1137254902,.1098039216,.11372549019607843,.0078431373,.1215686275,.1176470588,.11764705882352942,.0078431373,.1294117647,.1254901961,.12156862745098039,.0078431373,.137254902,.1333333333,.12549019607843137,.0078431373,.1450980392,.1411764706,.12941176470588237,.0078431373,.1529411765,.1490196078,.13333333333333333,.0078431373,.1647058824,.1568627451,.13725490196078433,.0078431373,.1725490196,.1647058824,.1411764705882353,.0078431373,.1803921569,.1725490196,.1450980392156863,.0078431373,.1882352941,.1803921569,.14901960784313725,.0078431373,.1960784314,.1882352941,.15294117647058825,.0078431373,.2039215686,.1960784314,.1568627450980392,.0078431373,.2117647059,.2039215686,.1607843137254902,.0078431373,.2196078431,.2117647059,.16470588235294117,.0078431373,.2274509804,.2196078431,.16862745098039217,.0078431373,.2352941176,.2274509804,.17254901960784313,.0078431373,.2470588235,.2352941176,.17647058823529413,.0078431373,.2509803922,.2431372549,.1803921568627451,.0078431373,.2549019608,.2509803922,.1843137254901961,.0078431373,.262745098,.2509803922,.18823529411764706,.0078431373,.2705882353,.2588235294,.19215686274509805,.0078431373,.2784313725,.2666666667,.19607843137254902,.0078431373,.2862745098,.2745098039,.2,.0078431373,.2941176471,.2823529412,.20392156862745098,.0078431373,.3019607843,.2901960784,.20784313725490197,.0078431373,.3137254902,.2980392157,.21176470588235294,.0078431373,.3215686275,.3058823529,.21568627450980393,.0078431373,.3294117647,.3137254902,.2196078431372549,.0078431373,.337254902,.3215686275,.2235294117647059,.0078431373,.3450980392,.3294117647,.22745098039215686,.0078431373,.3529411765,.337254902,.23137254901960785,.0078431373,.3607843137,.3450980392,.23529411764705885,.0078431373,.368627451,.3529411765,.23921568627450984,.0078431373,.3764705882,.3607843137,.24313725490196078,.0078431373,.3843137255,.368627451,.24705882352941178,.0078431373,.3960784314,.3764705882,.25098039215686274,.0078431373,.4039215686,.3843137255,.2549019607843137,.0078431373,.4117647059,.3921568627,.25882352941176473,.0078431373,.4196078431,.4,.2627450980392157,.0078431373,.4274509804,.4078431373,.26666666666666666,.0078431373,.4352941176,.4156862745,.27058823529411763,.0078431373,.4431372549,.4235294118,.27450980392156865,.0078431373,.4509803922,.431372549,.2784313725490196,.0078431373,.4588235294,.4392156863,.2823529411764706,.0078431373,.4705882353,.4470588235,.28627450980392155,.0078431373,.4784313725,.4549019608,.2901960784313726,.0078431373,.4862745098,.462745098,.29411764705882354,.0078431373,.4941176471,.4705882353,.2980392156862745,.0078431373,.5019607843,.4784313725,.30196078431372547,.0117647059,.5098039216,.4862745098,.3058823529411765,.0196078431,.5019607843,.4941176471,.30980392156862746,.0274509804,.4941176471,.5058823529,.3137254901960784,.0352941176,.4862745098,.5137254902,.3176470588235294,.0431372549,.4784313725,.5215686275,.3215686274509804,.0509803922,.4705882353,.5294117647,.3254901960784314,.0588235294,.462745098,.537254902,.32941176470588235,.0666666667,.4549019608,.5450980392,.3333333333333333,.0745098039,.4470588235,.5529411765,.33725490196078434,.0823529412,.4392156863,.5607843137,.3411764705882353,.0901960784,.431372549,.568627451,.34509803921568627,.0980392157,.4235294118,.5764705882,.34901960784313724,.1058823529,.4156862745,.5843137255,.35294117647058826,.1137254902,.4078431373,.5921568627,.3568627450980392,.1215686275,.4,.6,.3607843137254902,.1294117647,.3921568627,.6078431373,.36470588235294116,.137254902,.3843137255,.6156862745,.3686274509803922,.1450980392,.3764705882,.6235294118,.37254901960784315,.1529411765,.368627451,.631372549,.3764705882352941,.1607843137,.3607843137,.6392156863,.3803921568627451,.168627451,.3529411765,.6470588235,.3843137254901961,.1764705882,.3450980392,.6549019608,.38823529411764707,.1843137255,.337254902,.662745098,.39215686274509803,.1921568627,.3294117647,.6705882353,.396078431372549,.2,.3215686275,.6784313725,.4,.2078431373,.3137254902,.6862745098,.403921568627451,.2156862745,.3058823529,.6941176471,.40784313725490196,.2235294118,.2980392157,.7019607843,.4117647058823529,.231372549,.2901960784,.7098039216,.41568627450980394,.2392156863,.2823529412,.7176470588,.4196078431372549,.2470588235,.2745098039,.7254901961,.4235294117647059,.2509803922,.2666666667,.7333333333,.42745098039215684,.2509803922,.2588235294,.7411764706,.43137254901960786,.2588235294,.2509803922,.7490196078,.43529411764705883,.2666666667,.2509803922,.7490196078,.4392156862745098,.2745098039,.2431372549,.7568627451,.44313725490196076,.2823529412,.2352941176,.7647058824,.4470588235294118,.2901960784,.2274509804,.7725490196,.45098039215686275,.2980392157,.2196078431,.7803921569,.4549019607843137,.3058823529,.2117647059,.7882352941,.4588235294117647,.3137254902,.2039215686,.7960784314,.4627450980392157,.3215686275,.1960784314,.8039215686,.4666666666666667,.3294117647,.1882352941,.8117647059,.4705882352941177,.337254902,.1803921569,.8196078431,.4745098039215686,.3450980392,.1725490196,.8274509804,.4784313725490197,.3529411765,.1647058824,.8352941176,.48235294117647065,.3607843137,.1568627451,.8431372549,.48627450980392156,.368627451,.1490196078,.8509803922,.49019607843137253,.3764705882,.1411764706,.8588235294,.49411764705882355,.3843137255,.1333333333,.8666666667,.4980392156862745,.3921568627,.1254901961,.8745098039,.5019607843137255,.4,.1176470588,.8823529412,.5058823529411764,.4078431373,.1098039216,.8901960784,.5098039215686274,.4156862745,.1019607843,.8980392157,.5137254901960784,.4235294118,.0941176471,.9058823529,.5176470588235295,.431372549,.0862745098,.9137254902,.5215686274509804,.4392156863,.0784313725,.9215686275,.5254901960784314,.4470588235,.0705882353,.9294117647,.5294117647058824,.4549019608,.062745098,.937254902,.5333333333333333,.462745098,.0549019608,.9450980392,.5372549019607843,.4705882353,.0470588235,.9529411765,.5411764705882353,.4784313725,.0392156863,.9607843137,.5450980392156862,.4862745098,.031372549,.968627451,.5490196078431373,.4941176471,.0235294118,.9764705882,.5529411764705883,.4980392157,.0156862745,.9843137255,.5568627450980392,.5058823529,.0078431373,.9921568627,.5607843137254902,.5137254902,.0156862745,.9803921569,.5647058823529412,.5215686275,.0235294118,.9647058824,.5686274509803921,.5294117647,.0352941176,.9490196078,.5725490196078431,.537254902,.0431372549,.9333333333,.5764705882352941,.5450980392,.0509803922,.9176470588,.5803921568627451,.5529411765,.062745098,.9019607843,.5843137254901961,.5607843137,.0705882353,.8862745098,.5882352941176471,.568627451,.0784313725,.8705882353,.592156862745098,.5764705882,.0901960784,.8549019608,.596078431372549,.5843137255,.0980392157,.8392156863,.6,.5921568627,.1098039216,.8235294118,.6039215686274509,.6,.1176470588,.8078431373,.6078431372549019,.6078431373,.1254901961,.7921568627,.611764705882353,.6156862745,.137254902,.7764705882,.615686274509804,.6235294118,.1450980392,.7607843137,.6196078431372549,.631372549,.1529411765,.7490196078,.6235294117647059,.6392156863,.1647058824,.737254902,.6274509803921569,.6470588235,.1725490196,.7215686275,.6313725490196078,.6549019608,.1843137255,.7058823529,.6352941176470588,.662745098,.1921568627,.6901960784,.6392156862745098,.6705882353,.2,.6745098039,.6431372549019608,.6784313725,.2117647059,.6588235294,.6470588235294118,.6862745098,.2196078431,.6431372549,.6509803921568628,.6941176471,.2274509804,.6274509804,.6549019607843137,.7019607843,.2392156863,.6117647059,.6588235294117647,.7098039216,.2470588235,.5960784314,.6627450980392157,.7176470588,.2509803922,.5803921569,.6666666666666666,.7254901961,.2588235294,.5647058824,.6705882352941176,.7333333333,.2666666667,.5490196078,.6745098039215687,.7411764706,.2784313725,.5333333333,.6784313725490196,.7490196078,.2862745098,.5176470588,.6823529411764706,.7490196078,.2941176471,.5019607843,.6862745098039216,.7529411765,.3058823529,.4862745098,.6901960784313725,.7607843137,.3137254902,.4705882353,.6941176470588235,.768627451,.3215686275,.4549019608,.6980392156862745,.7764705882,.3333333333,.4392156863,.7019607843137254,.7843137255,.3411764706,.4235294118,.7058823529411765,.7921568627,.3529411765,.4078431373,.7098039215686275,.8,.3607843137,.3921568627,.7137254901960784,.8078431373,.368627451,.3764705882,.7176470588235294,.8156862745,.3803921569,.3607843137,.7215686274509804,.8235294118,.3882352941,.3450980392,.7254901960784313,.831372549,.3960784314,.3294117647,.7294117647058823,.8392156863,.4078431373,.3137254902,.7333333333333333,.8470588235,.4156862745,.2980392157,.7372549019607844,.8549019608,.4274509804,.2823529412,.7411764705882353,.862745098,.4352941176,.2666666667,.7450980392156863,.8705882353,.4431372549,.2509803922,.7490196078431373,.8784313725,.4549019608,.2431372549,.7529411764705882,.8862745098,.462745098,.2274509804,.7568627450980392,.8941176471,.4705882353,.2117647059,.7607843137254902,.9019607843,.4823529412,.1960784314,.7647058823529411,.9098039216,.4901960784,.1803921569,.7686274509803922,.9176470588,.4980392157,.1647058824,.7725490196078432,.9254901961,.5098039216,.1490196078,.7764705882352941,.9333333333,.5176470588,.1333333333,.7803921568627451,.9411764706,.5294117647,.1176470588,.7843137254901961,.9490196078,.537254902,.1019607843,.788235294117647,.9568627451,.5450980392,.0862745098,.792156862745098,.9647058824,.5568627451,.0705882353,.796078431372549,.9725490196,.5647058824,.0549019608,.8,.9803921569,.5725490196,.0392156863,.803921568627451,.9882352941,.5843137255,.0235294118,.807843137254902,.9921568627,.5921568627,.0078431373,.8117647058823529,.9921568627,.6039215686,.0274509804,.8156862745098039,.9921568627,.6117647059,.0509803922,.8196078431372549,.9921568627,.6196078431,.0745098039,.8235294117647058,.9921568627,.631372549,.0980392157,.8274509803921568,.9921568627,.6392156863,.1215686275,.8313725490196079,.9921568627,.6470588235,.1411764706,.8352941176470589,.9921568627,.6588235294,.1647058824,.8392156862745098,.9921568627,.6666666667,.1882352941,.8431372549019608,.9921568627,.6784313725,.2117647059,.8470588235294118,.9921568627,.6862745098,.2352941176,.8509803921568627,.9921568627,.6941176471,.2509803922,.8549019607843137,.9921568627,.7058823529,.2705882353,.8588235294117647,.9921568627,.7137254902,.2941176471,.8627450980392157,.9921568627,.7215686275,.3176470588,.8666666666666667,.9921568627,.7333333333,.3411764706,.8705882352941177,.9921568627,.7411764706,.3647058824,.8745098039215686,.9921568627,.7490196078,.3843137255,.8784313725490196,.9921568627,.7529411765,.4078431373,.8823529411764706,.9921568627,.7607843137,.431372549,.8862745098039215,.9921568627,.7725490196,.4549019608,.8901960784313725,.9921568627,.7803921569,.4784313725,.8941176470588236,.9921568627,.7882352941,.4980392157,.8980392156862745,.9921568627,.8,.5215686275,.9019607843137255,.9921568627,.8078431373,.5450980392,.9058823529411765,.9921568627,.8156862745,.568627451,.9098039215686274,.9921568627,.8274509804,.5921568627,.9137254901960784,.9921568627,.8352941176,.6156862745,.9176470588235294,.9921568627,.8470588235,.6352941176,.9215686274509803,.9921568627,.8549019608,.6588235294,.9254901960784314,.9921568627,.862745098,.6823529412,.9294117647058824,.9921568627,.8745098039,.7058823529,.9333333333333333,.9921568627,.8823529412,.7294117647,.9372549019607843,.9921568627,.8901960784,.7490196078,.9411764705882354,.9921568627,.9019607843,.7647058824,.9450980392156864,.9921568627,.9098039216,.7882352941,.9490196078431372,.9921568627,.9215686275,.8117647059,.9529411764705882,.9921568627,.9294117647,.8352941176,.9568627450980394,.9921568627,.937254902,.8588235294,.9607843137254903,.9921568627,.9490196078,.8784313725,.9647058823529413,.9921568627,.9568627451,.9019607843,.9686274509803922,.9921568627,.9647058824,.9254901961,.9725490196078431,.9921568627,.9764705882,.9490196078,.9764705882352941,.9921568627,.9843137255,.9725490196,.9803921568627451,.9921568627,.9921568627,.9921568627,.984313725490196,.9921568627,.9921568627,.9921568627,.9882352941176471,.9921568627,.9921568627,.9921568627,.9921568627450981,.9921568627,.9921568627,.9921568627,.996078431372549,.9921568627,.9921568627,.9921568627,1,.9921568627,.9921568627,.9921568627],description:"GE"},{ColorSpace:"RGB",Name:"siemens",RGBPoints:[0,.0078431373,.0039215686,.1254901961,.00392156862745098,.0078431373,.0039215686,.1254901961,.00784313725490196,.0078431373,.0039215686,.1882352941,.011764705882352941,.0117647059,.0039215686,.2509803922,.01568627450980392,.0117647059,.0039215686,.3098039216,.0196078431372549,.0156862745,.0039215686,.3725490196,.023529411764705882,.0156862745,.0039215686,.3725490196,.027450980392156862,.0156862745,.0039215686,.3725490196,.03137254901960784,.0156862745,.0039215686,.3725490196,.03529411764705882,.0156862745,.0039215686,.3725490196,.0392156862745098,.0156862745,.0039215686,.3725490196,.043137254901960784,.0156862745,.0039215686,.3725490196,.047058823529411764,.0156862745,.0039215686,.3725490196,.050980392156862744,.0156862745,.0039215686,.3725490196,.054901960784313725,.0156862745,.0039215686,.3725490196,.05882352941176471,.0156862745,.0039215686,.3725490196,.06274509803921569,.0156862745,.0039215686,.3882352941,.06666666666666667,.0156862745,.0039215686,.4078431373,.07058823529411765,.0156862745,.0039215686,.4235294118,.07450980392156863,.0156862745,.0039215686,.4431372549,.0784313725490196,.0156862745,.0039215686,.462745098,.08235294117647059,.0156862745,.0039215686,.4784313725,.08627450980392157,.0156862745,.0039215686,.4980392157,.09019607843137255,.0196078431,.0039215686,.5137254902,.09411764705882353,.0196078431,.0039215686,.5333333333,.09803921568627451,.0196078431,.0039215686,.5529411765,.10196078431372549,.0196078431,.0039215686,.568627451,.10588235294117647,.0196078431,.0039215686,.5882352941,.10980392156862745,.0196078431,.0039215686,.6039215686,.11372549019607843,.0196078431,.0039215686,.6235294118,.11764705882352942,.0196078431,.0039215686,.6431372549,.12156862745098039,.0235294118,.0039215686,.6588235294,.12549019607843137,.0235294118,.0039215686,.6784313725,.12941176470588237,.0235294118,.0039215686,.6980392157,.13333333333333333,.0235294118,.0039215686,.7137254902,.13725490196078433,.0235294118,.0039215686,.7333333333,.1411764705882353,.0235294118,.0039215686,.7490196078,.1450980392156863,.0235294118,.0039215686,.7647058824,.14901960784313725,.0235294118,.0039215686,.7843137255,.15294117647058825,.0274509804,.0039215686,.8,.1568627450980392,.0274509804,.0039215686,.8196078431,.1607843137254902,.0274509804,.0039215686,.8352941176,.16470588235294117,.0274509804,.0039215686,.8549019608,.16862745098039217,.0274509804,.0039215686,.8745098039,.17254901960784313,.0274509804,.0039215686,.8901960784,.17647058823529413,.0274509804,.0039215686,.9098039216,.1803921568627451,.031372549,.0039215686,.9294117647,.1843137254901961,.031372549,.0039215686,.9254901961,.18823529411764706,.0509803922,.0039215686,.9098039216,.19215686274509805,.0705882353,.0039215686,.8901960784,.19607843137254902,.0901960784,.0039215686,.8705882353,.2,.1137254902,.0039215686,.8509803922,.20392156862745098,.1333333333,.0039215686,.831372549,.20784313725490197,.1529411765,.0039215686,.8117647059,.21176470588235294,.1725490196,.0039215686,.7921568627,.21568627450980393,.1960784314,.0039215686,.7725490196,.2196078431372549,.2156862745,.0039215686,.7529411765,.2235294117647059,.2352941176,.0039215686,.737254902,.22745098039215686,.2509803922,.0039215686,.7176470588,.23137254901960785,.2745098039,.0039215686,.6980392157,.23529411764705885,.2941176471,.0039215686,.6784313725,.23921568627450984,.3137254902,.0039215686,.6588235294,.24313725490196078,.3333333333,.0039215686,.6392156863,.24705882352941178,.3568627451,.0039215686,.6196078431,.25098039215686274,.3764705882,.0039215686,.6,.2549019607843137,.3960784314,.0039215686,.5803921569,.25882352941176473,.4156862745,.0039215686,.5607843137,.2627450980392157,.4392156863,.0039215686,.5411764706,.26666666666666666,.4588235294,.0039215686,.5215686275,.27058823529411763,.4784313725,.0039215686,.5019607843,.27450980392156865,.4980392157,.0039215686,.4823529412,.2784313725490196,.5215686275,.0039215686,.4666666667,.2823529411764706,.5411764706,.0039215686,.4470588235,.28627450980392155,.5607843137,.0039215686,.4274509804,.2901960784313726,.5803921569,.0039215686,.4078431373,.29411764705882354,.6039215686,.0039215686,.3882352941,.2980392156862745,.6235294118,.0039215686,.368627451,.30196078431372547,.6431372549,.0039215686,.3490196078,.3058823529411765,.662745098,.0039215686,.3294117647,.30980392156862746,.6862745098,.0039215686,.3098039216,.3137254901960784,.7058823529,.0039215686,.2901960784,.3176470588235294,.7254901961,.0039215686,.2705882353,.3215686274509804,.7450980392,.0039215686,.2509803922,.3254901960784314,.7647058824,.0039215686,.2352941176,.32941176470588235,.7843137255,.0039215686,.2156862745,.3333333333333333,.8039215686,.0039215686,.1960784314,.33725490196078434,.8235294118,.0039215686,.1764705882,.3411764705882353,.8470588235,.0039215686,.1568627451,.34509803921568627,.8666666667,.0039215686,.137254902,.34901960784313724,.8862745098,.0039215686,.1176470588,.35294117647058826,.9058823529,.0039215686,.0980392157,.3568627450980392,.9294117647,.0039215686,.0784313725,.3607843137254902,.9490196078,.0039215686,.0588235294,.36470588235294116,.968627451,.0039215686,.0392156863,.3686274509803922,.9921568627,.0039215686,.0235294118,.37254901960784315,.9529411765,.0039215686,.0588235294,.3764705882352941,.9529411765,.0078431373,.0549019608,.3803921568627451,.9529411765,.0156862745,.0549019608,.3843137254901961,.9529411765,.0235294118,.0549019608,.38823529411764707,.9529411765,.031372549,.0549019608,.39215686274509803,.9529411765,.0352941176,.0549019608,.396078431372549,.9529411765,.0431372549,.0549019608,.4,.9529411765,.0509803922,.0549019608,.403921568627451,.9529411765,.0588235294,.0549019608,.40784313725490196,.9529411765,.062745098,.0549019608,.4117647058823529,.9529411765,.0705882353,.0549019608,.41568627450980394,.9529411765,.0784313725,.0509803922,.4196078431372549,.9529411765,.0862745098,.0509803922,.4235294117647059,.9568627451,.0941176471,.0509803922,.42745098039215684,.9568627451,.0980392157,.0509803922,.43137254901960786,.9568627451,.1058823529,.0509803922,.43529411764705883,.9568627451,.1137254902,.0509803922,.4392156862745098,.9568627451,.1215686275,.0509803922,.44313725490196076,.9568627451,.1254901961,.0509803922,.4470588235294118,.9568627451,.1333333333,.0509803922,.45098039215686275,.9568627451,.1411764706,.0509803922,.4549019607843137,.9568627451,.1490196078,.0470588235,.4588235294117647,.9568627451,.1568627451,.0470588235,.4627450980392157,.9568627451,.1607843137,.0470588235,.4666666666666667,.9568627451,.168627451,.0470588235,.4705882352941177,.9607843137,.1764705882,.0470588235,.4745098039215686,.9607843137,.1843137255,.0470588235,.4784313725490197,.9607843137,.1882352941,.0470588235,.48235294117647065,.9607843137,.1960784314,.0470588235,.48627450980392156,.9607843137,.2039215686,.0470588235,.49019607843137253,.9607843137,.2117647059,.0470588235,.49411764705882355,.9607843137,.2196078431,.0431372549,.4980392156862745,.9607843137,.2235294118,.0431372549,.5019607843137255,.9607843137,.231372549,.0431372549,.5058823529411764,.9607843137,.2392156863,.0431372549,.5098039215686274,.9607843137,.2470588235,.0431372549,.5137254901960784,.9607843137,.2509803922,.0431372549,.5176470588235295,.9647058824,.2549019608,.0431372549,.5215686274509804,.9647058824,.262745098,.0431372549,.5254901960784314,.9647058824,.2705882353,.0431372549,.5294117647058824,.9647058824,.2745098039,.0431372549,.5333333333333333,.9647058824,.2823529412,.0392156863,.5372549019607843,.9647058824,.2901960784,.0392156863,.5411764705882353,.9647058824,.2980392157,.0392156863,.5450980392156862,.9647058824,.3058823529,.0392156863,.5490196078431373,.9647058824,.3098039216,.0392156863,.5529411764705883,.9647058824,.3176470588,.0392156863,.5568627450980392,.9647058824,.3254901961,.0392156863,.5607843137254902,.9647058824,.3333333333,.0392156863,.5647058823529412,.9647058824,.337254902,.0392156863,.5686274509803921,.968627451,.3450980392,.0392156863,.5725490196078431,.968627451,.3529411765,.0352941176,.5764705882352941,.968627451,.3607843137,.0352941176,.5803921568627451,.968627451,.368627451,.0352941176,.5843137254901961,.968627451,.3725490196,.0352941176,.5882352941176471,.968627451,.3803921569,.0352941176,.592156862745098,.968627451,.3882352941,.0352941176,.596078431372549,.968627451,.3960784314,.0352941176,.6,.968627451,.4,.0352941176,.6039215686274509,.968627451,.4078431373,.0352941176,.6078431372549019,.968627451,.4156862745,.0352941176,.611764705882353,.968627451,.4235294118,.031372549,.615686274509804,.9725490196,.431372549,.031372549,.6196078431372549,.9725490196,.4352941176,.031372549,.6235294117647059,.9725490196,.4431372549,.031372549,.6274509803921569,.9725490196,.4509803922,.031372549,.6313725490196078,.9725490196,.4588235294,.031372549,.6352941176470588,.9725490196,.462745098,.031372549,.6392156862745098,.9725490196,.4705882353,.031372549,.6431372549019608,.9725490196,.4784313725,.031372549,.6470588235294118,.9725490196,.4862745098,.031372549,.6509803921568628,.9725490196,.4941176471,.0274509804,.6549019607843137,.9725490196,.4980392157,.0274509804,.6588235294117647,.9725490196,.5058823529,.0274509804,.6627450980392157,.9764705882,.5137254902,.0274509804,.6666666666666666,.9764705882,.5215686275,.0274509804,.6705882352941176,.9764705882,.5254901961,.0274509804,.6745098039215687,.9764705882,.5333333333,.0274509804,.6784313725490196,.9764705882,.5411764706,.0274509804,.6823529411764706,.9764705882,.5490196078,.0274509804,.6862745098039216,.9764705882,.5529411765,.0274509804,.6901960784313725,.9764705882,.5607843137,.0235294118,.6941176470588235,.9764705882,.568627451,.0235294118,.6980392156862745,.9764705882,.5764705882,.0235294118,.7019607843137254,.9764705882,.5843137255,.0235294118,.7058823529411765,.9764705882,.5882352941,.0235294118,.7098039215686275,.9764705882,.5960784314,.0235294118,.7137254901960784,.9803921569,.6039215686,.0235294118,.7176470588235294,.9803921569,.6117647059,.0235294118,.7215686274509804,.9803921569,.6156862745,.0235294118,.7254901960784313,.9803921569,.6235294118,.0235294118,.7294117647058823,.9803921569,.631372549,.0196078431,.7333333333333333,.9803921569,.6392156863,.0196078431,.7372549019607844,.9803921569,.6470588235,.0196078431,.7411764705882353,.9803921569,.6509803922,.0196078431,.7450980392156863,.9803921569,.6588235294,.0196078431,.7490196078431373,.9803921569,.6666666667,.0196078431,.7529411764705882,.9803921569,.6745098039,.0196078431,.7568627450980392,.9803921569,.6784313725,.0196078431,.7607843137254902,.9843137255,.6862745098,.0196078431,.7647058823529411,.9843137255,.6941176471,.0196078431,.7686274509803922,.9843137255,.7019607843,.0156862745,.7725490196078432,.9843137255,.7098039216,.0156862745,.7764705882352941,.9843137255,.7137254902,.0156862745,.7803921568627451,.9843137255,.7215686275,.0156862745,.7843137254901961,.9843137255,.7294117647,.0156862745,.788235294117647,.9843137255,.737254902,.0156862745,.792156862745098,.9843137255,.7411764706,.0156862745,.796078431372549,.9843137255,.7490196078,.0156862745,.8,.9843137255,.7529411765,.0156862745,.803921568627451,.9843137255,.7607843137,.0156862745,.807843137254902,.9882352941,.768627451,.0156862745,.8117647058823529,.9882352941,.768627451,.0156862745,.8156862745098039,.9843137255,.7843137255,.0117647059,.8196078431372549,.9843137255,.8,.0117647059,.8235294117647058,.9843137255,.8156862745,.0117647059,.8274509803921568,.9803921569,.831372549,.0117647059,.8313725490196079,.9803921569,.8431372549,.0117647059,.8352941176470589,.9803921569,.8588235294,.0078431373,.8392156862745098,.9803921569,.8745098039,.0078431373,.8431372549019608,.9764705882,.8901960784,.0078431373,.8470588235294118,.9764705882,.9058823529,.0078431373,.8509803921568627,.9764705882,.9176470588,.0078431373,.8549019607843137,.9764705882,.9333333333,.0039215686,.8588235294117647,.9725490196,.9490196078,.0039215686,.8627450980392157,.9725490196,.9647058824,.0039215686,.8666666666666667,.9725490196,.9803921569,.0039215686,.8705882352941177,.9725490196,.9960784314,.0039215686,.8745098039215686,.9725490196,.9960784314,.0039215686,.8784313725490196,.9725490196,.9960784314,.0352941176,.8823529411764706,.9725490196,.9960784314,.0666666667,.8862745098039215,.9725490196,.9960784314,.0980392157,.8901960784313725,.9725490196,.9960784314,.1294117647,.8941176470588236,.9725490196,.9960784314,.1647058824,.8980392156862745,.9764705882,.9960784314,.1960784314,.9019607843137255,.9764705882,.9960784314,.2274509804,.9058823529411765,.9764705882,.9960784314,.2549019608,.9098039215686274,.9764705882,.9960784314,.2901960784,.9137254901960784,.9764705882,.9960784314,.3215686275,.9176470588235294,.9803921569,.9960784314,.3529411765,.9215686274509803,.9803921569,.9960784314,.3843137255,.9254901960784314,.9803921569,.9960784314,.4156862745,.9294117647058824,.9803921569,.9960784314,.4509803922,.9333333333333333,.9803921569,.9960784314,.4823529412,.9372549019607843,.9843137255,.9960784314,.5137254902,.9411764705882354,.9843137255,.9960784314,.5450980392,.9450980392156864,.9843137255,.9960784314,.5803921569,.9490196078431372,.9843137255,.9960784314,.6117647059,.9529411764705882,.9843137255,.9960784314,.6431372549,.9568627450980394,.9882352941,.9960784314,.6745098039,.9607843137254903,.9882352941,.9960784314,.7058823529,.9647058823529413,.9882352941,.9960784314,.7411764706,.9686274509803922,.9882352941,.9960784314,.768627451,.9725490196078431,.9882352941,.9960784314,.8,.9764705882352941,.9921568627,.9960784314,.831372549,.9803921568627451,.9921568627,.9960784314,.8666666667,.984313725490196,.9921568627,.9960784314,.8980392157,.9882352941176471,.9921568627,.9960784314,.9294117647,.9921568627450981,.9921568627,.9960784314,.9607843137,.996078431372549,.9960784314,.9960784314,.9607843137,1,.9960784314,.9960784314,.9607843137],description:"Siemens"}];var ke=n(99737),ze=n(10182),Be=n(44646),$e=n(2847),je=n(10297);function We({segmentationService:e,customizationService:t,commandsManager:n}){const{unsubscribe:o}=e.subscribeDebounced(e.EVENTS.SEGMENTATION_DATA_MODIFIED,(async({segmentationId:o})=>{const i=e.getSegmentation(o);if(!i)return;const a=t.getCustomization("panelSegmentation.readableText"),r=Object.keys(i.segments).map((e=>parseInt(e))).filter((e=>e>0));for(const e of r){const t=i.segments[e];t?.cachedStats?.namedStats?.bidirectional&&n.runCommand("runSegmentBidirectional",{segmentationId:o,segmentIndex:e})}const s=await async function({segmentation:e,segmentationId:t,readableText:n}){if(!e)return console.debug("No segmentation found for id:",t),null;const o=Object.keys(e.segments).map((e=>parseInt(e))).filter((e=>e>0));if(0===o.length)return console.debug("No segments found in segmentation:",t),null;const i=await l.utilities.segmentation.getStatistics({segmentationId:t,segmentIndices:o,mode:"individual"});if(!i)return null;const a={...e};let r=!1;return Object.entries(i).forEach((([e,t])=>{const o=parseInt(e);a.segments[o].cachedStats||(a.segments[o].cachedStats={},r=!0);const i=a.segments[o].cachedStats.namedStats||{};t.array&&(t.array.forEach((e=>{n[e.name]&&e&&e.name&&(i[e.name]={name:e.name,label:n[e.name],value:e.value,unit:e.unit,order:Object.keys(n).indexOf(e.name)})})),n.volume&&t.volume&&!i.volume&&(i.volume={name:"volume",label:"Volume",value:t.volume.value,unit:t.volume.unit,order:Object.keys(n).indexOf("volume")}),a.segments[o].cachedStats.namedStats=i,r=!0)})),r?a:null}({segmentation:i,segmentationId:o,readableText:a});s&&e.addOrUpdateSegmentation({segmentationId:o,segments:s.segments})}),1e3);return{unsubscribe:o}}function He({segmentationService:e}){const{unsubscribe:t}=e.subscribe(e.EVENTS.SEGMENTATION_MODIFIED,(async({segmentationId:t})=>{const n=e.getSegmentation(t);if(!n)return;const o=l.annotation.state.getAllAnnotations().filter((e=>e.metadata.toolName===l.SegmentBidirectionalTool.toolName));let i=[];if(n){{const e=Object.keys(n.segments).map((e=>parseInt(e))).filter((e=>e>0));i=o.filter((n=>n.metadata.segmentationId===t&&!e.includes(n.metadata.segmentIndex))).map((e=>e.annotationUID))}i.forEach((e=>{l.annotation.state.removeAnnotation(e)}))}else i=o.map((e=>e.metadata.segmentationId===t))}));return{unsubscribe:t}}const{registerColormap:qe}=s.utilities.colormap;async function Ye({servicesManager:e,commandsManager:t,extensionManager:n,appConfig:o}){await(0,s.init)({peerImport:o.peerImport}),s.setUseCPURendering(Boolean(o.useCPURendering)),s.setConfiguration({...s.getConfiguration(),rendering:{...s.getConfiguration().rendering,strictZSpacingForVolumeViewport:o.strictZSpacingForVolumeViewport}});const{maxCacheSize:i}=o;i&&s.cache.setMaxCacheSize(i),function(e={}){l.CrosshairsTool.isAnnotation=!1,l.ReferenceLinesTool.isAnnotation=!1,l.AdvancedMagnifyTool.isAnnotation=!1,l.PlanarFreehandContourSegmentationTool.isAnnotation=!1,(0,l.init)({addons:{polySeg:y},computeWorker:{autoTerminateOnIdle:{enabled:!1}}}),(0,l.addTool)(l.PanTool),(0,l.addTool)(l.SegmentBidirectionalTool),(0,l.addTool)(l.WindowLevelTool),(0,l.addTool)(l.StackScrollTool),(0,l.addTool)(l.VolumeRotateTool),(0,l.addTool)(l.ZoomTool),(0,l.addTool)(l.ProbeTool),(0,l.addTool)(l.MIPJumpToClickTool),(0,l.addTool)(l.LengthTool),(0,l.addTool)(l.RectangleROITool),(0,l.addTool)(l.RectangleROIThresholdTool),(0,l.addTool)(l.EllipticalROITool),(0,l.addTool)(l.CircleROITool),(0,l.addTool)(l.BidirectionalTool),(0,l.addTool)(l.ArrowAnnotateTool),(0,l.addTool)(l.DragProbeTool),(0,l.addTool)(l.AngleTool),(0,l.addTool)(l.CobbAngleTool),(0,l.addTool)(l.MagnifyTool),(0,l.addTool)(l.CrosshairsTool),(0,l.addTool)(l.RectangleScissorsTool),(0,l.addTool)(l.SphereScissorsTool),(0,l.addTool)(l.CircleScissorsTool),(0,l.addTool)(l.BrushTool),(0,l.addTool)(l.PaintFillTool),(0,l.addTool)(l.ReferenceLinesTool),(0,l.addTool)(b),(0,l.addTool)(l.TrackballRotateTool),(0,l.addTool)(R),(0,l.addTool)(l.AdvancedMagnifyTool),(0,l.addTool)(l.UltrasoundDirectionalTool),(0,l.addTool)(l.PlanarFreehandROITool),(0,l.addTool)(l.SplineROITool),(0,l.addTool)(l.LivewireContourTool),(0,l.addTool)(l.OrientationMarkerTool),(0,l.addTool)(l.WindowLevelRegionTool),(0,l.addTool)(l.PlanarFreehandContourSegmentationTool),(0,l.addTool)(l.SegmentSelectTool),(0,l.addTool)(v.Bj),(0,l.addTool)(v.pY),(0,l.addTool)(l.RegionSegmentPlusTool);const t=l.annotation.config.style.getDefaultToolStyles();l.annotation.config.style.setDefaultToolStyles({global:{...t.global,textBoxFontSize:"15px",lineWidth:"1.5"}})}(),s.Settings.getRuntimeSettings().set("useCursors",Boolean(o.useCursors));const{userAuthenticationService:a,customizationService:r,uiModalService:c,uiNotificationService:d,cornerstoneViewportService:m,hangingProtocolService:h,viewportGridService:f,segmentationService:w,measurementService:E}=e.services;window.services=e.services,window.extensionManager=n,window.commandsManager=t,o.showCPUFallbackMessage&&s.getShouldUseCPURendering()&&function(e,t){const n=t=>{if(100===t)return e.show({content:Ke,title:"OHIF Fell Back to CPU Rendering"}),!0},{unsubscribe:o}=t.subscribe(t.EVENTS.PROTOCOL_CHANGED,(()=>{n(100)&&o()}))}(c,h);const{getPresentationId:T}=ze.I.getState(),{getPresentationId:D}=$e.v.getState(),{getPresentationId:C}=Be.q.getState();f.addPresentationIdProvider("positionPresentationId",C),f.addPresentationIdProvider("lutPresentationId",T),f.addPresentationIdProvider("segmentationPresentationId",D),l.segmentation.config.style.setStyle({type:ke.SegmentationRepresentations.Contour},{renderFill:!1});const O=p.Ay.classes.MetadataProvider;s.volumeLoader.registerVolumeLoader("cornerstoneStreamingImageVolume",u.FC),s.volumeLoader.registerVolumeLoader("cornerstoneStreamingDynamicImageVolume",u.Mr);const M={interleaveCenter:be,interleaveTopToBottom:Ve,nth:Oe};Object.entries(M).forEach((([e,t])=>{h.registerImageLoadStrategy(e,Je(t))})),s.metaData.addProvider(s.utilities.calibratedPixelSpacingMetadataProvider.get.bind(s.utilities.calibratedPixelSpacingMetadataProvider)),s.metaData.addProvider(O.get.bind(O),9999),s.imageLoadPoolManager.maxNumRequests={[g.A.Interaction]:o?.maxNumRequests?.interaction||10,[g.A.Thumbnail]:o?.maxNumRequests?.thumbnail||5,[g.A.Prefetch]:o?.maxNumRequests?.prefetch||5,[g.A.Compute]:o?.maxNumRequests?.compute||10},function(e,t,n){I("cornerstoneStreamingImageVolume",u.FC),I("cornerstoneStreamingDynamicImageVolume",u.Mr),S.Ay.init({maxWebWorkers:Math.min(Math.max(navigator.hardwareConcurrency-1,1),t.maxNumberOfWebWorkers),beforeSend:function(t){const o=n.getActiveDataSource()?.[0].getConfig()??{},i=e.getAuthorizationHeader(),a={Accept:p.Wp.generateAcceptHeader(o.acceptHeader,o.requestTransferSyntaxUID,o.omitQuotationForMultipartRequest)};return i&&Object.assign(a,i),a},errorInterceptor:e=>{p.r_.getHTTPErrorHandler(e)}})}(a,o,n),this.measurementServiceSource=me(e),ge(e),Se(e),[E.EVENTS.JUMP_TO_MEASUREMENT_LAYOUT,E.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT].forEach((e=>{E.subscribe(e,(e=>{const{measurement:t}=e,{uid:n}=t;l.annotation.selection.setAnnotationSelected(n,!0)}))}));const{unsubscribe:N}=We({segmentationService:w,customizationService:r,commandsManager:t}),{unsubscribe:V}=He({segmentationService:w});h.subscribe(h.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED,(e=>{const{lutPresentationStore:t}=ze.I.getState(),{segmentationPresentationStore:n}=$e.v.getState(),{positionPresentationStore:o}=Be.q.getState();for(const i of e.entries()){const[e,a]=i,r=m.getCornerstoneViewport(e),s=m.getViewportInfo(e),{presentationIds:l}=s.getViewportOptions(),c={positionPresentation:o[l?.positionPresentationId],lutPresentation:t[l?.lutPresentationId],segmentationPresentation:n[l?.segmentationPresentationId]};m.setVolumesForViewport(r,a,c)}})),f.subscribe(f.EVENTS.GRID_SIZE_CHANGED,(()=>{m.resize(!0)})),Ue({cornerstoneViewportService:m,customizationService:r,commandsManager:t}),xe({customizationService:r,commandsManager:t});const A=({detail:e})=>{p.r_.getHTTPErrorHandler()(e.error)};s.eventTarget.addEventListener(s.EVENTS.IMAGE_LOAD_FAILED,A),s.eventTarget.addEventListener(s.EVENTS.IMAGE_LOAD_ERROR,A),s.eventTarget.addEventListener(s.EVENTS.ELEMENT_ENABLED,function(e){const{element:n}=e.detail;n.addEventListener(s.EVENTS.CAMERA_RESET,(e=>{const{element:n}=e.detail,o=(0,s.getEnabledElement)(n);if(!o)return;const{viewportId:i}=o;t.runCommand("resetCrosshairs",{viewportId:i})})),function({element:e}){if(!Fe.length){const{W:e}=p.fX;Fe.push(e.DISPLAY_SETS_TO_ALL_IMAGES,e.DISPLAY_SETS_TO_FIRST_IMAGE,e.STUDY_TO_FIRST_IMAGE)}Fe.find((e=>p.Rm.timingKeys[e]))&&(_e.viewportsWaiting+=1,e.addEventListener(s.EVENTS.IMAGE_RENDERED,Le))}({element:n})}.bind(null)),Ge.forEach(qe),s.eventTarget.addEventListenerDebounced(s.EVENTS.ERROR_EVENT,(({detail:e})=>{d.show({title:e.type,message:e.message,type:"error"})}),100),e.services.uiNotificationService,new Map;return{unsubscriptions:[N,V]}}window.cornerstone=s,window.cornerstoneTools=l;const Je=e=>t=>{const n=je.imageRetrieveMetadataProvider.clone();je.imageRetrieveMetadataProvider.clear();try{return e(t)}finally{setTimeout((()=>{je.imageRetrieveMetadataProvider.restore(n)}),10)}};function Ke(){return r.createElement("div",null,r.createElement("p",null,"Your computer does not have enough GPU power to support the default GPU rendering mode. OHIF has switched to CPU rendering mode. Please note that CPU rendering does not support all features such as Volume Rendering, Multiplanar Reconstruction, and Segmentation Overlays."))}const Qe={"viewportOverlay.topLeft":[{id:"StudyDate",inheritsFrom:"ohif.overlayItem",label:"",title:"Study date",condition:({referenceInstance:e})=>e?.StudyDate,contentF:({referenceInstance:e,formatters:{formatDate:t}})=>t(e.StudyDate)},{id:"SeriesDescription",inheritsFrom:"ohif.overlayItem",label:"",title:"Series description",condition:({referenceInstance:e})=>e&&e.SeriesDescription,contentF:({referenceInstance:e})=>e.SeriesDescription}],"viewportOverlay.topRight":[],"viewportOverlay.bottomLeft":[{id:"WindowLevel",inheritsFrom:"ohif.overlayItem.windowLevel"},{id:"ZoomLevel",inheritsFrom:"ohif.overlayItem.zoomLevel",condition:e=>"Zoom"===e.toolGroupService.getActiveToolForViewport(e.viewportId)}],"viewportOverlay.bottomRight":[{id:"InstanceNumber",inheritsFrom:"ohif.overlayItem.instanceNumber"}]};var Ze=n(2836),Xe=n(99993);const et=()=>{const{commandsManager:e}=(0,p.Jg)(),{t}=(0,Xe.Bd)("SegmentationTable"),{onSegmentationAdd:n,onSegmentationRemoveFromViewport:o,onSegmentationEdit:i,onSegmentationDelete:a,exportOptions:s,activeSegmentation:l,activeSegmentationId:c}=(0,Ze.dQ$)("CustomDropdownMenu");let d,m,u=!1;try{d=(0,Ze.dPM)().segmentation,m=d.segmentationId}catch(e){d=l,m=c}if(s&&m){const e=s.find((e=>e.segmentationId===m));u=e?.isExportable||!1}if(!d||!m)return null;const g=async t=>{e.run({commandName:"storeSegmentation",commandOptions:{segmentationId:t},context:"CORNERSTONE"})},S=t=>{e.run("downloadRTSS",{segmentationId:t})},I=t=>{e.run("downloadSegmentation",{segmentationId:t})},v=t=>{e.run("downloadCSVSegmentationReport",{segmentationId:t})};return r.createElement(Ze.SQm,{align:"start"},r.createElement(Ze._26,{onClick:()=>n(m)},r.createElement(Ze.FI1.Add,{className:"text-foreground"}),r.createElement("span",{className:"pl-2"},t("Create New Segmentation"))),r.createElement(Ze.mBJ,null),r.createElement(Ze.lpj,null,t("Manage Current Segmentation")),r.createElement(Ze._26,{onClick:()=>o(m)},r.createElement(Ze.FI1.Series,{className:"text-foreground"}),r.createElement("span",{className:"pl-2"},t("Remove from Viewport"))),r.createElement(Ze._26,{onClick:()=>i(m)},r.createElement(Ze.FI1.Rename,{className:"text-foreground"}),r.createElement("span",{className:"pl-2"},t("Rename"))),r.createElement(Ze.lvB,null,r.createElement(Ze.nVd,{className:"pl-1"},r.createElement(Ze.FI1.Export,{className:"text-foreground"}),r.createElement("span",{className:"pl-2"},t("Download & Export"))),r.createElement(Ze.dce,null,r.createElement(Ze.M56,null,r.createElement(Ze.lpj,{className:"flex items-center pl-0"},r.createElement(Ze.FI1.Download,{className:"h-5 w-5"}),r.createElement("span",{className:"pl-1"},t("Download"))),r.createElement(Ze._26,{onClick:e=>{e.preventDefault(),v(m)}},t("CSV Report")),r.createElement(Ze._26,{onClick:e=>{e.preventDefault(),I(m)},disabled:!u},t("DICOM SEG")),r.createElement(Ze._26,{onClick:e=>{e.preventDefault(),S(m)},disabled:!u},t("DICOM RTSS")),r.createElement(Ze.mBJ,null),r.createElement(Ze.lpj,{className:"flex items-center pl-0"},r.createElement(Ze.FI1.Export,{className:"h-5 w-5"}),r.createElement("span",{className:"pl-1 pt-1"},t("Export"))),r.createElement(Ze._26,{onClick:e=>{e.preventDefault(),g(m)},disabled:!u},t("DICOM SEG"))))),r.createElement(Ze.mBJ,null),r.createElement(Ze._26,{onClick:()=>a(m)},r.createElement(Ze.FI1.Delete,{className:"text-red-600"}),r.createElement("span",{className:"pl-2 text-red-600"},t("Delete"))))},tt=({segmentationId:e,segmentIndex:t})=>{const{servicesManager:n,commandsManager:o}=(0,p.Jg)(),{segmentationService:i}=n.services,{t:a}=(0,Xe.Bd)("SegmentationTable"),s=i.getSegmentation(e).segments[t].cachedStats.namedStats;if(!s)return null;const c=s.bidirectional;if(!c)return r.createElement("div",{className:"-mt-2 space-y-2"},r.createElement("div",{className:"flex"},r.createElement(Ze.m_M,null,r.createElement(Ze.k$k,{asChild:!0},r.createElement(Ze.$nd,{variant:"ghost",size:"sm",className:"text-primary flex items-center gap-2",onClick:()=>{o.run("runSegmentBidirectional",{segmentationId:e,segmentIndex:t})}},r.createElement(Ze.FI1.ToolBidirectionalSegment,{className:"h-5 w-5"}),r.createElement("span",null,a("Compute Largest Bidirectional")))),r.createElement(Ze.ZIw,{side:"bottom"},a("Add bidirectional measurement")))),r.createElement(Ze.wvv,{className:"bg-input"}));const{value:d,unit:m}=c,u=d.maxMajor,g=d.maxMinor,S=Math.max(u,g),I=Math.min(u,g),v=l.annotation.visibility.isAnnotationVisible(c.annotationUID);return r.createElement("div",{className:"-mt-2 space-y-2"},r.createElement("div",{className:"flex items-center justify-between"},r.createElement("div",{className:"text-foreground"},r.createElement("div",null,"L: ",(0,C.Wf)(S)," ",m),r.createElement("div",null,"W: ",(0,C.Wf)(I)," ",m)),r.createElement("div",{className:"flex gap-2"},r.createElement(Ze.m_M,null,r.createElement(Ze.k$k,{asChild:!0},r.createElement(Ze.$nd,{size:"icon",variant:"ghost",className:"h-6 w-6 transition-opacity",onClick:n=>{n.stopPropagation(),l.annotation.visibility.setAnnotationVisibility(c.annotationUID,!v),i.addOrUpdateSegmentation({segmentationId:e,segmentIndex:t})}},v?r.createElement(Ze.FI1.Hide,{className:"h-6 w-6"}):r.createElement(Ze.FI1.Show,{className:"h-6 w-6"}))),r.createElement(Ze.ZIw,{side:"bottom"},a("Toggle visibility"))),r.createElement(Ze.m_M,null,r.createElement(Ze.k$k,{asChild:!0},r.createElement(Ze.$nd,{variant:"ghost",size:"icon",onClick:()=>{c.annotationUID&&o.run("jumpToMeasurement",{uid:c.annotationUID})}},r.createElement(Ze.FI1.JumpToSlice,null))),r.createElement(Ze.ZIw,{side:"bottom"},a("Jump to measurement"))))),r.createElement(Ze.wvv,{className:"bg-input"}))};function nt({commandsManager:e,servicesManager:t}){return{"panelSegmentation.customDropdownMenuContent":et,"panelSegmentation.customSegmentStatisticsHeader":tt,"panelSegmentation.disableEditing":!1,"panelSegmentation.showAddSegment":!0,"panelSegmentation.onSegmentationAdd":()=>{const{viewportGridService:n}=t.services,o=n.getState().activeViewportId;e.run("createLabelmapForViewport",{viewportId:o})},"panelSegmentation.tableMode":"collapsed","panelSegmentation.readableText":{min:"Min Value",minLPS:"Min Coord",max:"Max Value",maxLPS:"Max Coord",mean:"Mean Value",stdDev:"Standard Deviation",count:"Voxel Count",median:"Median",skewness:"Skewness",kurtosis:"Kurtosis",peakValue:"Peak Value",peakLPS:"Peak Coord",volume:"Volume",lesionGlycolysis:"Lesion Glycolysis",center:"Center"},"segmentationToolbox.config":()=>{const[t,n]=(0,r.useState)(!1),[o,i]=(0,r.useState)(!1),[a,s]=(0,r.useState)(!1);return r.createElement("div",{className:"bg-muted flex flex-col gap-4 border-b border-b-[2px] border-black px-2 py-3"},r.createElement("div",{className:"flex items-center gap-2"},r.createElement(Ze.dOG,{checked:t,onCheckedChange:t=>{n(t),e.run("toggleSegmentPreviewEdit",{toggle:t})}}),r.createElement("span",{className:"text-base text-white"},"Preview edits before creating")),r.createElement("div",{className:"flex items-center gap-2"},r.createElement(Ze.dOG,{checked:a,onCheckedChange:t=>{s(t),e.run("toggleUseCenterSegmentIndex",{toggle:t})}}),r.createElement("span",{className:"text-base text-white"},"Use center as segment index")),r.createElement("div",{className:"flex items-center gap-2"},r.createElement(Ze.dOG,{checked:o,onCheckedChange:t=>{i(t),e.run("toggleSegmentSelect",{toggle:t})}}),r.createElement("span",{className:"text-base text-white"},"Hover on segment border to activate")))}}}const ot={"layoutSelector.advancedPresetGenerator":({servicesManager:e})=>(({servicesManager:e})=>{const{hangingProtocolService:t,viewportGridService:n,displaySetService:o}=e.services,i=Array.from(t.protocols.values()),a=n.getActiveViewportId();if(!a)return[];const r=n.getDisplaySetsUIDsForViewport(a);if(!r)return[];const s=r.map((e=>o.getDisplaySetByUID(e)));return i.map((e=>{if(!e.isPreset)return null;const n=((e,t,n)=>!e.displaySetSelectors||0===Object.values(e.displaySetSelectors).length||n.areRequiredSelectorsValid(Object.values(e.displaySetSelectors),t[0]))(e,s,t);return{icon:e.icon,title:e.name,commandOptions:{protocolId:e.id},disabled:!n}})).filter((e=>null!==e))})({servicesManager:e}),"layoutSelector.commonPresets":[{icon:"layout-common-1x1",commandOptions:{numRows:1,numCols:1}},{icon:"layout-common-1x2",commandOptions:{numRows:1,numCols:2}},{icon:"layout-common-2x2",commandOptions:{numRows:2,numCols:2}},{icon:"layout-common-2x3",commandOptions:{numRows:2,numCols:3}}]},it={"cornerstone.overlayViewportTools":{active:[{toolName:A.WindowLevel,bindings:[{mouseButton:l.Enums.MouseBindings.Primary}]},{toolName:A.Pan,bindings:[{mouseButton:l.Enums.MouseBindings.Auxiliary}]},{toolName:A.Zoom,bindings:[{mouseButton:l.Enums.MouseBindings.Secondary}]},{toolName:A.StackScroll,bindings:[{mouseButton:l.Enums.MouseBindings.Wheel}]}],enabled:[{toolName:A.PlanarFreehandContourSegmentation,configuration:{displayOnePointAsCrosshairs:!0}}]}},at={cornerstoneViewportClickCommands:{doubleClick:["toggleOneUp"],button1:["closeContextMenu"],button3:[{commandName:"showCornerstoneContextMenu",commandOptions:{requireNearbyToolData:!0,menuId:"measurementsContextMenu"}}]}},rt={"cornerstone.measurements":{Angle:{displayText:[],report:[]},CobbAngle:{displayText:[],report:[]},ArrowAnnotate:{displayText:[],report:[]},RectangleROi:{displayText:[],report:[]},CircleROI:{displayText:[],report:[]},EllipticalROI:{displayText:[],report:[]},Bidirectional:{displayText:[],report:[]},Length:{displayText:[],report:[]},LivewireContour:{displayText:[],report:[]},SplineROI:{displayText:[{displayName:"Areas",value:"area",type:"value"},{value:"areaUnits",for:["area"],type:"unit"}],report:[{displayName:"Area",value:"area",type:"value"},{displayName:"Unit",value:"areaUnits",type:"value"}]},PlanarFreehandROI:{displayTextOpen:[{displayName:"Length",value:"length",type:"value"}],displayText:[{displayName:"Mean",value:"mean",type:"value"},{displayName:"Max",value:"max",type:"value"},{displayName:"Area",value:"area",type:"value"},{value:"pixelValueUnits",for:["mean","max"],type:"unit"},{value:"areaUnits",for:["area"],type:"unit"}],report:[{displayName:"Mean",value:"mean",type:"value"},{displayName:"Max",value:"max",type:"value"},{displayName:"Area",value:"area",type:"value"},{displayName:"Unit",value:"unit",type:"value"}]}}},{VIEWPORT_PRESETS:st}=s.CONSTANTS,lt={"cornerstone.3dVolumeRendering":{volumeRenderingPresets:st,volumeRenderingQualityRange:{min:1,max:4,step:1}}},ct={"cornerstone.colorbar":{width:"16px",colorbarTickPosition:"left",colormaps:Ge,colorbarContainerPosition:"right",colorbarInitialColormap:"Grayscale"}},dt={"cornerstone.windowLevelPresets":{CT:[{id:"ct-soft-tissue",description:"Soft tissue",window:"400",level:"40"},{id:"ct-lung",description:"Lung",window:"1500",level:"-600"},{id:"ct-liver",description:"Liver",window:"150",level:"90"},{id:"ct-bone",description:"Bone",window:"2500",level:"480"},{id:"ct-brain",description:"Brain",window:"80",level:"40"}],PT:[{id:"pt-default",description:"Default",window:"5",level:"2.5"},{id:"pt-suv-3",description:"SUV",window:"0",level:"3"},{id:"pt-suv-5",description:"SUV",window:"0",level:"5"},{id:"pt-suv-7",description:"SUV",window:"0",level:"7"},{id:"pt-suv-8",description:"SUV",window:"0",level:"8"},{id:"pt-suv-10",description:"SUV",window:"0",level:"10"},{id:"pt-suv-15",description:"SUV",window:"0",level:"15"}]}};var mt=n(85252),pt=n(97598),ut=n.n(pt),gt=n(55530),St=n.n(gt);const It={PROGRESS:"event:DicomFileUploader:progress"};let vt=function(e){return e[e.NotStarted=0]="NotStarted",e[e.InProgress=1]="InProgress",e[e.Success=2]="Success",e[e.Failed=3]="Failed",e[e.Cancelled=4]="Cancelled",e}({});class yt{constructor(e,t){this.message=void 0,this.status=void 0,this.message=t,this.status=e}}class ht extends p.Rc{constructor(e,t){super(It),this._file=void 0,this._fileId=void 0,this._dataSource=void 0,this._loadPromise=void 0,this._abortController=new AbortController,this._status=vt.NotStarted,this._percentComplete=0,this._file=e,this._fileId=S.Ay.wadouri.fileManager.add(e),this._dataSource=t}getFileId(){return this._fileId}getFileName(){return this._file.name}getFileSize(){return this._file.size}cancel(){this._abortController.abort()}getStatus(){return this._status}getPercentComplete(){return this._percentComplete}async load(){return this._loadPromise||(this._loadPromise=new Promise(((e,t)=>{const n={progress:e=>{e.lengthComputable&&(this._status=vt.InProgress,this._percentComplete=Math.round(100*e.loaded/e.total),this._broadcastEvent(It.PROGRESS,{fileId:this._fileId,percentComplete:this._percentComplete}))},timeout:()=>{this._reject(t,new yt(vt.Failed,"The request timed out."))},abort:()=>{this._reject(t,new yt(vt.Cancelled,"Cancelled"))},error:()=>{this._reject(t,new yt(vt.Failed,"The request failed."))}};S.Ay.wadouri.loadFileRequest(this._fileId).then((o=>{if(this._abortController.signal.aborted)return void this._reject(t,new yt(vt.Cancelled,"Cancelled"));if(!this._checkDicomFile(o))return void this._reject(t,new yt(vt.Failed,"Not a valid DICOM file."));const i=new XMLHttpRequest;return this._addRequestCallbacks(i,n),this._dataSource.store.dicom(o,i).then((()=>{this._status=vt.Success,e()})).catch((e=>{this._reject(t,e)}))})).catch((e=>{this._reject(t,e)}))}))),this._loadPromise}_isRejected(){return this._status===vt.Failed||this._status===vt.Cancelled}_reject(e,t){if(!this._isRejected()){if(t instanceof yt)return this._status=t.status,void e(t);this._status=vt.Failed,t.message?e(new yt(vt.Failed,t.message)):e(new yt(vt.Failed,t))}}_addRequestCallbacks(e,t){const n=()=>e.abort();this._abortController.signal.addEventListener("abort",n);for(const[n,o]of Object.entries(t))e.upload.addEventListener(n,o);const o=()=>{this._abortController.signal.removeEventListener("abort",n);for(const[n,o]of Object.entries(t))e.upload.removeEventListener(n,o);e.removeEventListener("loadend",o)};e.addEventListener("loadend",o)}_checkDicomFile(e){if(e.length<=132)return!1;const t=new Uint8Array(e.slice(128,132));return Array.from("DICM").every(((e,n)=>e.charCodeAt(0)===t[n]))}}var ft=n(820);const wt=(0,r.memo)((({dicomFileUploader:e})=>{const[t,n]=(0,r.useState)(e.getPercentComplete()),[o,i]=(0,r.useState)(""),[a,s]=(0,r.useState)(e.getStatus()),l=(0,r.useCallback)((()=>a===vt.Failed||a===vt.Cancelled||a===vt.Success),[a]);(0,r.useEffect)((()=>{const t=e.subscribe(It.PROGRESS,(e=>{n(e.percentComplete)}));return e.load().catch((e=>{s(e.status),i(e.message??"")})).finally((()=>s(e.getStatus()))),()=>t.unsubscribe()}),[]);const c=(0,r.useCallback)((()=>{e.cancel()}),[]);return r.createElement("div",{className:"min-h-14 border-secondary-light flex w-full items-center overflow-hidden border-b p-2.5 text-lg"},r.createElement("div",{className:"self-top flex w-0 shrink grow flex-col gap-1"},r.createElement("div",{className:"flex gap-4"},r.createElement("div",{className:"flex w-6 shrink-0 items-center justify-center"},(()=>{switch(e.getStatus()){case vt.Success:return r.createElement(Ze.FI1.ByName,{name:"status-tracked",className:"text-primary-light"});case vt.InProgress:return r.createElement(Ze.FI1.ByName,{name:"icon-transferring"});case vt.Failed:return r.createElement(Ze.FI1.ByName,{name:"icon-alert-small"});case vt.Cancelled:return r.createElement(Ze.FI1.ByName,{name:"icon-alert-outline"});default:return r.createElement(r.Fragment,null)}})()),r.createElement("div",{className:"overflow-hidden text-ellipsis whitespace-nowrap"},e.getFileName())),o&&r.createElement("div",{className:"pl-10"},o)),r.createElement("div",{className:"flex w-24 items-center"},!l()&&r.createElement(r.Fragment,null,e.getStatus()===vt.InProgress&&r.createElement("div",{className:"w-10 text-right"},t,"%"),r.createElement("div",{className:"ml-auto flex cursor-pointer"},r.createElement(Ze.FI1.Close,{className:"text-primary self-center",onClick:c})))))}));wt.propTypes={dicomFileUploader:ut().instanceOf(ht).isRequired};const Et=wt,Tt=1e3,bt=6e4,Dt=36e5,Ct=15e3,Ot="text-ellipsis whitespace-nowrap overflow-hidden";function Mt({dicomFileUploaderArr:e,onComplete:t}){const{servicesManager:n}=(0,p.Jg)(),o=n.services.customizationService.getCustomization("ui.progressLoadingBar"),[i]=(0,r.useState)(e.reduce(((e,t)=>e+t.getFileSize()),0)),a=(0,r.useRef)(0),s=(0,r.useRef)(0),[l,c]=(0,r.useState)(null),[d,m]=(0,r.useState)(0),[u,g]=(0,r.useState)(0),[S,I]=(0,r.useState)(0),[v,y]=(0,r.useState)(!1),h=(0,r.useRef)();(0,r.useEffect)((()=>{let e,t=0,n=Date.now();const o=()=>{const r=a.current-t,l=Date.now(),c=l-n;s.current=r/c,t=a.current,n=l,i-a.current>0&&(e=s.current>=75?setTimeout(o,Ct):setTimeout(o,3e4))};return e=setTimeout(o,Ct),()=>{clearTimeout(e)}}),[]),(0,r.useEffect)((()=>{let t=null;const n=e.map((e=>{let n=0;const o=o=>{const r=n;if(n=Math.round(o/100*e.getFileSize()),a.current=Math.min(i,a.current-r+n),m(a.current/i*100),0!==s.current){const e=i-a.current,n=Math.round(e/s.current);if(null===t)return t=n,void c(t);if(n<bt){const e=Math.ceil(t/Tt),o=Math.ceil(n/Tt)-e;return void((o<0||o>2)&&(t=n,c(t)))}if(n<Dt){const e=Math.ceil(t/bt),o=Math.ceil(n/bt)-e;return void((o<0||o>2)&&(t=n,c(t)))}t=n,c(t)}};return e.load().catch((e=>{e.status===vt.Failed&&I((e=>e+1))})).finally((()=>{o(100),g((e=>e+1))})),e.subscribe(It.PROGRESS,(e=>{o(e.percentComplete)}))}));return()=>{n.forEach((e=>e.unsubscribe()))}}),[]);const f=(0,r.useCallback)((async()=>{for(const t of e){new Promise(((e,n)=>{setTimeout((()=>{t.cancel(),e()}),0)}))}}),[]),w=(0,r.useCallback)((()=>{if(null==l)return"";if(l<bt){const e=Math.ceil(l/Tt);return`${e} ${1===e?"second":"seconds"}`}if(l<Dt){const e=Math.ceil(l/bt);return`${e} ${1===e?"minute":"minutes"}`}const e=Math.ceil(l/Dt);return`${e} ${1===e?"hour":"hours"}`}),[l]),E=(0,r.useCallback)((()=>Math.min(100,Math.round(d))),[d]),T=(0,r.useCallback)((()=>E()<1&&(h?.current?.offsetWidth??0)*(d/100)<1),[E,d]),b=(0,r.useCallback)((()=>({width:`${2*e.length.toString().length+4}ch`})),[]),D=()=>r.createElement("div",{className:"ml-auto flex w-6 justify-center"},S>0&&r.createElement("div",{onClick:()=>y((e=>!e))},r.createElement(Ze.FI1.ByName,{className:"cursor-pointer",name:"icon-status-alert"})));return r.createElement("div",{className:"flex grow flex-col"},r.createElement("div",{className:"bg-primary-dark flex h-14 items-center px-1 pb-4 text-lg"},u===e.length?r.createElement(r.Fragment,null,r.createElement("span",{className:Ot},`${e.length} ${e.length>1?"files":"file"} completed.`),r.createElement(ft.$n,{disabled:!1,className:"ml-auto",onClick:t},"Close")):r.createElement(r.Fragment,null,r.createElement("span",{style:b(),className:St()(Ot,"text-end")},`${u} of ${e.length}`," "),r.createElement("span",{className:Ot}," files completed."," "),r.createElement("span",{className:Ot},l?`Less than ${w()} remaining. `:""),r.createElement("span",{className:St()(Ot,"text-primary hover:text-primary-light active:text-aqua-pale ml-auto cursor-pointer"),onClick:f},"Cancel All Uploads"))),r.createElement("div",{className:"flex grow flex-col overflow-hidden bg-black text-lg"},r.createElement("div",{className:"ohif-scrollbar border-secondary-light overflow-y-scroll border-b px-2"},r.createElement("div",{className:"min-h-14 flex w-full items-center p-2.5"},u===e.length?r.createElement(r.Fragment,null,r.createElement("div",{className:"text-primary-light text-xl"},S>0?`Completed with ${S} ${S>1?"errors":"error"}!`:"Completed!"),D()):r.createElement(r.Fragment,null,r.createElement("div",{ref:h,className:"flex-grow"},r.createElement(o,{progress:T()?void 0:Math.min(100,d)})),r.createElement("div",{className:"ml-1 flex w-24 items-center"},r.createElement("div",{className:"w-10 text-right"},`${E()}%`),D())))),r.createElement("div",{className:"ohif-scrollbar h-1 grow overflow-y-scroll px-2"},e.filter((e=>!v||e.getStatus()===vt.Failed)).map((e=>r.createElement(Et,{key:e.getFileId(),dicomFileUploader:e}))))))}Mt.propTypes={dicomFileUploaderArr:ut().arrayOf(ut().instanceOf(ht)).isRequired,onComplete:ut().func.isRequired};const Nt=Mt;function Vt(){return Vt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},Vt.apply(null,arguments)}function Rt({dataSource:e,onComplete:t,onStarted:n}){const o="min-h-[480px] flex flex-col bg-black select-none",[i,a]=(0,r.useState)([]),s=(0,r.useCallback)((async t=>{n(),a(t.map((t=>new ht(t,e))))}),[]);return r.createElement(r.Fragment,null,i.length?r.createElement("div",{className:St()("h-[calc(100vh-300px)]",o)},r.createElement(Nt,{dicomFileUploaderArr:Array.from(i),onComplete:t})):r.createElement("div",{className:St()("h-[480px]",o)},r.createElement(mt.A,{onDrop:e=>{s(e)},noClick:!0},(({getRootProps:e})=>r.createElement("div",Vt({},e(),{className:"dicom-upload-drop-area-border-dash m-5 flex h-full flex-col items-center justify-center"}),r.createElement("div",{className:"flex gap-3"},r.createElement(mt.A,{onDrop:s,noDrag:!0},(({getRootProps:e,getInputProps:t})=>r.createElement("div",e(),r.createElement(ft.$n,{disabled:!1,onClick:()=>{}},"Add files",r.createElement("input",t()))))),r.createElement(mt.A,{onDrop:s,noDrag:!0},(({getRootProps:e,getInputProps:t})=>r.createElement("div",e(),r.createElement(ft.$n,{type:ft.Ny.NW.secondary,disabled:!1,onClick:()=>{}},"Add folder",r.createElement("input",Vt({},t(),{webkitdirectory:"true",mozdirectory:"true"}))))))),r.createElement("div",{className:"pt-5"},"or drag images or folders here"),r.createElement("div",{className:"text-aqua-pale pt-3 text-lg"},"(DICOM files supported)"))))))}Rt.propTypes={dataSource:ut().object.isRequired,onComplete:ut().func.isRequired,onStarted:ut().func.isRequired};const At=Rt,Ut={cinePlayer:Ze.F05,autoCineModalities:["OT","US"],"panelMeasurement.disableEditing":!1,onBeforeSRAddMeasurement:({measurement:e,StudyInstanceUID:t,SeriesInstanceUID:n})=>e,onBeforeDicomStore:({dicomDict:e,measurementData:t,naturalizedReport:n})=>e,dicomUploadComponent:At,codingValues:{}},Pt="image";const xt={"ohif.captureViewportModal":function({onClose:e,defaultSize:t,fileTypeOptions:n,viewportId:o,showAnnotations:i,onAnnotationsChange:a,dimensions:s,warningState:l,onDimensionsChange:c,onEnableViewport:d,onDisableViewport:m,onDownload:p}){const[u,g]=(0,r.useState)(null),[S,I]=(0,r.useState)(!0),[v,y]=(0,r.useState)(Pt),[h,f]=(0,r.useState)("jpg");return(0,r.useEffect)((()=>{if(u)return d(u),()=>{m()}}),[m,d,u]),r.createElement(Ze.jiK,null,r.createElement(Ze.jiK.Body,null,r.createElement(Ze.jiK.ImageVisual,null,r.createElement("div",{style:{height:s.height,width:s.width,position:"relative"},"data-viewport-uid":o,ref:g},l.enabled&&S&&r.createElement("div",{className:"text-foreground absolute left-1/2 bottom-[5px] z-[1000] -translate-x-1/2 whitespace-nowrap rounded bg-black p-3 text-xs font-bold",style:{fontSize:"12px"}},l.value))),r.createElement(Ze.jiK.ImageOptions,null,r.createElement("div",{className:"flex items-end space-x-2"},r.createElement(Ze.jiK.Filename,{value:v,onChange:e=>y(e.target.value)},"File name"),r.createElement(Ze.jiK.Filetype,{selected:h,onSelect:f,options:n})),r.createElement(Ze.jiK.ImageSize,{width:s.width.toString(),height:s.height.toString(),onWidthChange:e=>{c({...s,width:parseInt(e.target.value)||t})},onHeightChange:e=>{c({...s,height:parseInt(e.target.value)||t})},maxWidth:1e4.toString(),maxHeight:1e4.toString()},"Image size ",r.createElement("span",{className:"text-muted-foreground"},"px")),r.createElement(Ze.jiK.SwitchOption,{defaultChecked:i,checked:i,onCheckedChange:a},"Include annotations"),l.enabled&&r.createElement(Ze.jiK.SwitchOption,{defaultChecked:S,checked:S,onCheckedChange:I},"Include warning message"),r.createElement(Ze.esu,{className:"mt-2"},r.createElement(Ze.esu.Right,null,r.createElement(Ze.esu.Secondary,{onClick:e},"Cancel"),r.createElement(Ze.esu.Primary,{onClick:()=>{p(v||Pt,h),e()}},"Save"))))))}},Ft={"viewportDownload.warningMessage":{enabled:!0,value:"Not For Diagnostic Use"}};var _t=n(77954),Lt=n(35392);const Gt={"viewportActionMenu.windowLevelActionMenu":{enabled:!0,location:_t.A.LOCATIONS.topRight,component:Lt.K},"viewportActionMenu.segmentationOverlay":{enabled:!0,location:_t.A.LOCATIONS.topRight}};const kt=function({commandsManager:e,servicesManager:t}){return[{name:"default",value:{...Qe,...nt({commandsManager:e,servicesManager:t}),...ot,...it,...at,...rt,...lt,...ct,...dt,...Ut,...xt,...Ft,...Gt}}]};var zt=n(7927),Bt=n(16076),$t=n(3823);function jt(e,t){let{viewports:n}=e.getState();return n=[...n.values()],n=n.filter((e=>e.displaySetInstanceUIDs&&e.displaySetInstanceUIDs.length)),n=n.filter((e=>{const{displaySetInstanceUIDs:n}=e;for(const e of n){const n=t.getDisplaySetByUID(e);return!(!n||!n.isReconstructable)}})),n}const Wt=e=>`VOI_SYNC_${e}`;function Ht(e,t,n){const{syncGroupService:o,cornerstoneViewportService:i}=n.services;e.forEach((e=>{const{viewportId:n}=e.viewportOptions,a=i.getCornerstoneViewport(n);a&&o.removeViewportFromSyncGroup(a.id,a.getRenderingEngine().id,t)}))}var qt=n(68578),Yt=n(91037);const Jt=512,Kt="cornerstone-viewport-download-form",Qt=[{value:"jpg",label:"JPG"},{value:"png",label:"PNG"}],Zt=({hide:e,activeViewportId:t})=>{const{servicesManager:n}=(0,p.Jg)(),{customizationService:o,cornerstoneViewportService:i}=n.services,[a,c]=(0,r.useState)(!0),[d,m]=(0,r.useState)({width:Jt,height:Jt}),u=o.getCustomization("viewportDownload.warningMessage"),g=(0,f.kJ)(t),S=g?.element,{viewportId:I,renderingEngineId:v}=(0,s.getEnabledElement)(S),y=i.getRenderingEngine(),h=l.ToolGroupManager.getToolGroupForViewport(I,v);(0,r.useEffect)((()=>{const e=Object.keys(h.toolOptions).reduce(((e,t)=>{const n=h.toolOptions[t],{mode:o,bindings:i}=n;return{...e,[t]:{mode:o,bindings:i}}}),{});return()=>{Object.keys(e).forEach((t=>{const{mode:n,bindings:o}=e[t];h.setToolMode(t,n,{bindings:o})}))}}),[]);(0,r.useEffect)((()=>{d.width&&d.height&&setTimeout((()=>{(async(e,t)=>{if(!S)return;const n=(0,s.getEnabledElement)(S);if(!n)return;const o=l.segmentation.state.getViewportSegmentationRepresentations(I),{viewport:i}=n,a=y.getViewport(Kt);try{if(a instanceof s.StackViewport){const e=i.getCurrentImageId(),t=i.getProperties();await a.setStack([e]),a.setProperties(t)}else if(a instanceof s.BaseVolumeViewport){const e=i.getAllVolumeIds();a.setVolumes([{volumeId:e[0]}])}return o.length>0&&o.forEach((e=>{const{segmentationId:t,colorLUTIndex:n,type:o}=e;o===l.Enums.SegmentationRepresentations.Labelmap&&l.segmentation.addLabelmapRepresentationToViewportMap({[a.id]:[{segmentationId:t,type:l.Enums.SegmentationRepresentations.Labelmap,config:{colorLUTOrIndex:n}}]}),o===l.Enums.SegmentationRepresentations.Contour&&l.segmentation.addContourRepresentationToViewportMap({[a.id]:[{segmentationId:t,type:l.Enums.SegmentationRepresentations.Contour,config:{colorLUTOrIndex:n}}]})})),{width:Math.min(e||Jt,1e4),height:Math.min(t||Jt,1e4)}}catch(e){console.error("Error loading image:",e)}})(d.width,d.height),(e=>{const t=(0,s.getEnabledElement)(S);if(!t)return;const n=y.getViewport(Kt);if(!n)return;const{viewportId:o,renderingEngineId:i}=t,{id:a}=n,r=l.ToolGroupManager.getToolGroupForViewport(o,i);r.addViewport(a,i),Object.keys(r.getToolInstances()).forEach((t=>{if(e&&"Crosshairs"!==t)try{r.setToolEnabled(t)}catch(e){console.debug("Error enabling tool:",e)}else r.setToolDisabled(t)}))})(a),y.resize(),y.render()}),100)}),[d,a]);const w=o.getCustomization("ohif.captureViewportModal");return r.createElement(w,{onClose:e,defaultSize:Jt,fileTypeOptions:Qt,viewportId:Kt,showAnnotations:a,onAnnotationsChange:c,dimensions:d,onDimensionsChange:m,onEnableViewport:e=>{if(!e)return;const{viewport:t}=(0,s.getEnabledElement)(S),n={viewportId:Kt,element:e,type:t.type,defaultOptions:{background:t.defaultOptions.background,orientation:t.defaultOptions.orientation}};y.enableElement(n)},onDisableViewport:async()=>{y.disableElement(Kt)},onDownload:async(e,t)=>{const n=document.querySelector(`div[data-viewport-uid="${Kt}"]`);if(!n)return void console.debug("No viewport found for download");const o=await(0,Yt.A)(n),i=document.createElement("a");i.download=`${e}.${t}`,i.href=o.toDataURL(`image/${t}`,1),i.click()},warningState:u})};const Xt=({viewportId:e,viewportGridService:t})=>{const{viewports:n,activeViewportId:o}=t.getState(),i=e||o;return n.get(i)},{DefaultHistoryMemo:en}=s.utilities.HistoryMemo,tn={imageSlice:function({servicesManager:e,viewports:t,syncId:n}){const{syncGroupService:o,viewportGridService:i,displaySetService:a,cornerstoneViewportService:r}=e.services;n||="IMAGE_SLICE_SYNC";const s=t||jt(i,a);if(s.some((e=>!!o.getSynchronizersForViewport(e.viewportOptions.viewportId).find((e=>e.id===n)))))return function(e,t){const{syncGroupService:n,viewportGridService:o,displaySetService:i,cornerstoneViewportService:a}=t.services,r=jt(o,i);r.forEach((t=>{const{viewportId:o}=t.viewportOptions,i=a.getCornerstoneViewport(o);i&&n.removeViewportFromSyncGroup(i.id,i.getRenderingEngine().id,e)}))}(n,e);s.forEach((e=>{const{viewportId:t}=e.viewportOptions,i=r.getCornerstoneViewport(t);i&&o.addViewportToSyncGroup(t,i.getRenderingEngine().id,{type:"imageSlice",id:n,source:!0,target:!0})}))},voi:function({servicesManager:e,viewports:t,syncId:n}){const{syncGroupService:o,viewportGridService:i,displaySetService:a,cornerstoneViewportService:r}=e.services,s=t||function(e,t){let{viewports:n}=e.getState();return n=[...n.values()],n.reduce(((e,n)=>{const{displaySetInstanceUIDs:o}=n,i=o[0],a=t.getDisplaySetByUID(i).Modality;return e[a]||(e[a]=[]),e[a].push(n),e}),{})}(i,a);for(const[t,i]of Object.entries(s)){const a=n||Wt(t);if(i.some((e=>!!o.getSynchronizersForViewport(e.viewportOptions.viewportId).find((e=>e.id===a)))))return Ht(i,a,e);i.forEach((e=>{const{viewportId:t}=e.viewportOptions,n=r.getCornerstoneViewport(t);n&&o.addViewportToSyncGroup(t,n.getRenderingEngine().id,{type:"voi",id:a,source:!0,target:!0})}))}}},{segmentation:nn}=l.utilities,on=({toolGroupService:e})=>{const t=[];return e.getToolGroupIds().forEach((e=>{const n=l.ToolGroupManager.getToolGroup(e).getToolInstances();Object.keys(n).forEach((e=>{const o=n[e];o instanceof l.LabelmapBaseTool&&t.push(o)}))})),t},an=new v.OU({autoSegmentMode:!0,models:{sam_b:[{name:"sam-b-encoder",url:"https://huggingface.co/schmuell/sam-b-fp16/resolve/main/sam_vit_b_01ec64.encoder-fp16.onnx",size:180,key:"encoder"},{name:"sam-b-decoder",url:"https://huggingface.co/schmuell/sam-b-fp16/resolve/main/sam_vit_b_01ec64.decoder.onnx",size:17,key:"decoder"}]},modelName:"sam_b"});let rn=!1;const sn=function({servicesManager:e,commandsManager:t}){const{viewportGridService:n,toolGroupService:o,cineService:i,uiDialogService:a,cornerstoneViewportService:r,uiNotificationService:c,measurementService:d,customizationService:m,colorbarService:u,hangingProtocolService:g,syncGroupService:S,segmentationService:I,displaySetService:v}=e.services;function y(){return w(n)}function f(){const e=y();return o.getToolGroupForViewport(e.id)}function E(){const e=n.getActiveViewportId(),t=I.getActiveSegmentation(e),o=t?.segmentationId;return{segmentationId:o,segmentIndex:I.getActiveSegment(e).segmentIndex}}const T={runSegmentBidirectional:async({segmentationId:e,segmentIndex:o}={})=>{const i=e&&o?{segmentationId:e,segmentIndex:o}:E(),{segmentationId:a,segmentIndex:r}=i,s=await l.utilities.segmentation.getSegmentLargestBidirectional({segmentationId:a,segmentIndices:[r]}),c=n.getActiveViewportId();s.forEach((e=>{const{segmentIndex:t,majorAxis:n,minorAxis:o}=e,i=l.SegmentBidirectionalTool.hydrate(c,[n,o],{segmentIndex:t,segmentationId:a});e.annotationUID=i.annotationUID;const s=function({segmentationId:e,segmentIndex:t,bidirectionalData:n,segmentationService:o,annotation:i}){if(!e||void 0===t||!n)return console.debug("Missing required data for bidirectional stats update"),null;const a=o.getSegmentation(e);if(!a||!a.segments[t])return console.debug("Segment not found:",t,"in segmentation:",e),null;const r={...a},s=r.segments[t];s.cachedStats||(s.cachedStats={namedStats:{}}),s.cachedStats.namedStats||(s.cachedStats.namedStats={});const{majorAxis:l,minorAxis:c,maxMajor:d,maxMinor:m}=n;if(!l||!c)return console.debug("Missing major or minor axis data"),null;let p=!1;const u=s.cachedStats.namedStats;return d>0&&m>0&&(u.bidirectional={name:"bidirectional",label:"Bidirectional",annotationUID:i.annotationUID,value:{maxMajor:d,maxMinor:m,majorAxis:l,minorAxis:c},unit:"mm"},p=!0),p?r:null}({segmentationId:a,segmentIndex:r,bidirectionalData:e,segmentationService:I,annotation:i});s&&I.addOrUpdateSegmentation({segmentationId:a,segments:s.segments})}));const d=s.find((e=>e.segmentIndex===r));t.run("jumpToMeasurement",{uid:d.annotationUID})},interpolateLabelmap:()=>{const{segmentationId:e,segmentIndex:t}=E();zt.G({segmentationId:e,segmentIndex:t})},showCornerstoneContextMenu:e=>{const n=y()?.viewport?.element,o={...e,element:n},{useSelectedAnnotation:i,nearbyToolData:a,event:r}=o;if(i&&!a){const e=B();if(!(!o.allowedSelectedTools||o.allowedSelectedTools.includes(e?.metadata?.toolName)))return;o.nearbyToolData=e}o.defaultPointsPosition=[],o.selectorProps={toolName:o.nearbyToolData?.metadata?.toolName,value:o.nearbyToolData,uid:o.nearbyToolData?.annotationUID,nearbyToolData:o.nearbyToolData,event:r,...o.selectorProps},t.run(e,o)},updateStoredSegmentationPresentation:({displaySet:e,type:t})=>{const{addSegmentationPresentationItem:n}=$e.v.getState();n(e.referencedDisplaySetInstanceUID,{segmentationId:e.displaySetInstanceUID,hydrated:!0,type:t})},updateStoredPositionPresentation:({viewportId:e,displaySetInstanceUID:t,referencedImageId:n,options:o})=>{const i=r.getPresentations(e),{positionPresentationStore:a,setPositionPresentation:s,getPositionPresentationId:l}=Be.q.getState(),c=Object.entries(a).find((([n,o])=>n.includes(t)&&o.viewportId===e))?.[0],d=n?{...i.positionPresentation,viewReference:{referencedImageId:n,...o}}:i.positionPresentation;if(c)return void s(c,d);s(l({displaySetInstanceUIDs:[t],viewportId:e}),d)},getNearbyToolData:({nearbyToolData:e,element:t,canvasCoordinates:n})=>e??l.utilities.getAnnotationNearPoint(t,n),getNearbyAnnotation({element:e,canvasCoordinates:t}){const n=T.getNearbyToolData({nearbyToolData:null,element:e,canvasCoordinates:t});return n?.metadata?.toolName&&(t=>{const n=(0,s.getEnabledElement)(e);if(!n)return;const{renderingEngineId:o,viewportId:i}=n,a=l.ToolGroupManager.getToolGroupForViewport(i,o).getToolInstance(t);return a?.constructor?.isAnnotation??!0})(n.metadata.toolName)?n:null},_handleMeasurementLabelDialog:async e=>{const t=m.getCustomization("measurementLabels"),n=m.getCustomization("ui.labellingComponent"),o=d.getMeasurement(e);if(!o)return void console.debug("No measurement found for label editing");if(!t){const t=await(0,h.callInputDialog)({uiDialogService:a,title:"Edit Measurement Label",placeholder:o.label||"Enter new label",defaultValue:o.label});return void(null!=t&&d.update(e,{...o,label:t},!0))}const i=await(0,h.callInputDialogAutoComplete)({measurement:o,uiDialogService:a,labelConfig:t,renderContent:n});null!=i&&d.update(e,{...i},!0)},setMeasurementLabel:async({uid:e})=>{await T._handleMeasurementLabelDialog(e)},renameMeasurement:async({uid:e})=>{await T._handleMeasurementLabelDialog(e)},updateMeasurement:e=>{const{code:t,uid:n,textLabel:o,label:i}=e;let{style:a}=e;const r=d.getMeasurement(n);if(!r)return void console.warn("No measurement found to update",n);const s={...r};if(void 0!==o&&(s.label=o),void 0!==t){const e=t.type||"finding";if(t.ref&&!t.CodeValue){const e=t.ref.indexOf(":");t.CodeValue=t.ref.substring(e+1),t.CodeMeaning=t.text||i,t.CodingSchemeDesignator=t.ref.substring(0,e)}s[e]=t,"finding"!==e&&(s.findingSites?(s.findingSites=s.findingSites.filter((t=>t.type!==e)),s.findingSites.push(t)):s.findingSites=[t])}if(a||=s.finding?.style,a||=s.findingSites?.find((e=>e?.style))?.style,a)switch(a.lineDashSelected||=a.lineDash,l.annotation.config.style.setAnnotationStyles(r.uid,a),r.toolName){case A.PlanarFreehandROI:l.annotation.state.getAnnotation(r.uid).data.isOpenUShapeContour=!!a.isOpenUShapeContour;break}d.update(s.uid,s,!0)},jumpToMeasurement:({uid:e,displayMeasurements:t=[]})=>{d.jumpToMeasurement(n.getActiveViewportId(),e);for(const n of t)n.isActive=n.uid===e},removeMeasurement:({uid:e})=>{Array.isArray(e)?d.removeMany(e):d.remove(e)},toggleLockMeasurement:({uid:e})=>{d.toggleLockMeasurement(e)},toggleVisibilityMeasurement:({uid:e,items:t,visibility:n})=>{void 0===n&&t?.length&&(n=!t[0].isVisible),Array.isArray(e)?d.toggleVisibilityMeasurementMany(e,n):d.toggleVisibilityMeasurement(e,n)},downloadCSVMeasurementsReport:({measurementFilter:e})=>{p.Wp.downloadCSVReport(d.getMeasurements(e))},downloadCSVSegmentationReport:({segmentationId:e})=>{const t=I.getSegmentation(e),{representationData:n}=t,{Labelmap:o}=n,{referencedImageIds:i}=o,a=i[0],r=v.getActiveDisplaySets().find((e=>e.imageIds?.some((e=>e===a)))),{SeriesNumber:s,SeriesInstanceUID:l,StudyInstanceUID:c,SeriesDate:d,SeriesTime:m,SeriesDescription:p}=r;!function(e,t){const n=[];n.push(["Segmentation ID",e.segmentationId||""]),n.push(["Segmentation Label",e.label||""]),n.push([]);const o=t.reference;if([["Series Number",o.SeriesNumber],["Series Instance UID",o.SeriesInstanceUID],["Study Instance UID",o.StudyInstanceUID],["Series Date",o.SeriesDate],["Series Time",o.SeriesTime],["Series Description",o.SeriesDescription]].forEach((([e,t])=>{t&&n.push([`reference ${e}`,t])})),n.push([]),n.push(["Segments Statistics"]),e.segments){const t=["Label"];for(const n in e.segments){const o=e.segments[n];t.push(`${o.label||""}`)}n.push(t),n.push(["Segment Index",...Object.values(e.segments).map((e=>e.segmentIndex||""))]),n.push(["Locked",...Object.values(e.segments).map((e=>e.locked?"Yes":"No"))]),n.push(["Active",...Object.values(e.segments).map((e=>e.active?"Yes":"No"))]);const o=new Set;for(const t of Object.values(e.segments))if(t.cachedStats&&t.cachedStats.namedStats)for(const e in t.cachedStats.namedStats){const n=t.cachedStats.namedStats[e],i=n.label||n.name,a=n.unit?` (${n.unit})`:"";o.add(`${i}${a}`)}for(const t of o){const o=[t];for(const n of Object.values(e.segments)){let e="";if(n.cachedStats&&n.cachedStats.namedStats)for(const o in n.cachedStats.namedStats){const i=n.cachedStats.namedStats[o];if(`${i.label||i.name}${i.unit?` (${i.unit})`:""}`===t){e=void 0!==i.value?i.value:"";break}}o.push(e)}n.push(o)}}let i="";for(const e of n)i+=e.map((e=>{const t=null!=e?e.toString():"";return t.includes(",")||t.includes('"')||t.includes("\n")?'"'+t.replace(/"/g,'""')+'"':t})).join(",")+"\n";const a=new Blob([i],{type:"text/csv;charset=utf-8;"}),r=URL.createObjectURL(a),s=document.createElement("a");s.setAttribute("href",r),s.setAttribute("download",`${e.label||"Segmentation"}_Report_${(new Date).toISOString().split("T")[0]}.csv`),s.style.visibility="hidden",document.body.appendChild(s),s.click(),document.body.removeChild(s)}(t,{reference:{SeriesNumber:s,SeriesInstanceUID:l,StudyInstanceUID:c,SeriesDate:d,SeriesTime:m,SeriesDescription:p}})},getActiveViewportEnabledElement:y,setViewportActive:({viewportId:e})=>{r.getViewportInfo(e)?n.setActiveViewportId(e):console.warn("No viewport found for viewportId:",e)},arrowTextCallback:async({callback:e})=>{const t=m.getCustomization("measurementLabels"),n=m.getCustomization("ui.labellingComponent"),o=await(0,h.callInputDialogAutoComplete)({uiDialogService:a,labelConfig:t,renderContent:n});e?.(o)},toggleCine:()=>{const{viewports:e}=n.getState(),{isCineEnabled:t}=i.getState();i.setIsCineEnabled(!t),e.forEach(((e,t)=>i.setCine({id:t,isPlaying:!1})))},setViewportWindowLevel({viewportId:e,window:t,level:n}){const o=Number(t),i=Number(n),a=r.getRenderingEngine().getViewport(e),{lower:l,upper:c}=s.utilities.windowLevel.toLowHighRange(o,i);a.setProperties({voiRange:{upper:c,lower:l}}),a.render()},toggleViewportColorbar:({viewportId:e,displaySetInstanceUIDs:t,options:n={}})=>{u.hasColorbar(e)?u.removeColorbar(e):u.addColorbar(e,t,n)},setWindowLevel(e){const{toolGroupId:t}=e,{viewportId:n}=y(),i=o.getToolGroupForViewport(n);t&&t!==i||T.setViewportWindowLevel({...e,viewportId:n})},setWindowLevelPreset:({presetName:e,presetIndex:t})=>{const o=m.getCustomization("cornerstone.windowLevelPresets"),i=n.getActiveViewportId(),a=r.getCornerstoneViewport(i).getImageData().metadata.Modality;if(!a)return;const s=o[a];if(!s)return;const l=s[e]??Object.values(s)[t];T.setViewportWindowLevel({viewportId:i,window:l.window,level:l.level})},setToolEnabled:({toolName:e,toggle:t,toolGroupId:i})=>{const{viewports:a}=n.getState();if(!a.size)return;const s=o.getToolGroup(i??null);if(!s||!s.hasTool(e))return;const c=s.getToolOptions(e).mode===l.Enums.ToolModes.Enabled;t&&c?s.setToolDisabled(e):s.setToolEnabled(e);r.getRenderingEngine().render()},toggleEnabledDisabledToolbar({value:e,itemId:t,toolGroupId:n}){const i=t||e;n=n??f();const a=o.getToolGroup(n);if(!a||!a.hasTool(i))return;a.getToolOptions(i).mode===l.Enums.ToolModes.Enabled?a.setToolDisabled(i):a.setToolEnabled(i)},toggleActiveDisabledToolbar({value:e,itemId:t,toolGroupId:n}){const i=t||e;n=n??f();const a=o.getToolGroup(n);if(!a||!a.hasTool(i))return;const r=[l.Enums.ToolModes.Active,l.Enums.ToolModes.Enabled,l.Enums.ToolModes.Passive].includes(a.getToolOptions(i).mode);if(r?a.setToolDisabled(i):T.setToolActive({toolName:i,toolGroupId:n}),r){const e=a.getPrevActivePrimaryToolName();e!==i&&T.setToolActive({toolName:e,toolGroupId:n})}},setToolActiveToolbar:({value:e,itemId:t,toolName:n,toolGroupIds:i=[]})=>{n=n||t||e,(i=i.length?i:o.getToolGroupIds()).forEach((e=>{T.setToolActive({toolName:n,toolGroupId:e})}))},setToolActive:({toolName:e,toolGroupId:t=null})=>{const{viewports:i}=n.getState();if(!i.size)return;const a=o.getToolGroup(t);if(!a)return;if(!a.hasTool(e))return;const r=a.getActivePrimaryMouseButtonTool();if(r){const e=a.getToolConfiguration(r);e?.disableOnPassive?a.setToolDisabled(r):a.setToolPassive(r)}a.setToolActive(e,{bindings:[{mouseButton:l.Enums.MouseBindings.Primary}]})},showDownloadViewportModal:()=>{const{activeViewportId:t}=n.getState();if(!r.getCornerstoneViewport(t))return void c.show({title:"Download Image",message:"Image cannot be downloaded",type:"error"});const{uiModalService:o}=e.services;o&&o.show({content:Zt,title:"Download High Quality Image",contentProps:{activeViewportId:t,cornerstoneViewportService:r},containerClassName:"max-w-4xl p-4"})},rotateViewport:({rotation:e})=>{const t=y();if(!t)return;const{viewport:n}=t;if(n instanceof s.BaseVolumeViewport){const t=n.getCamera(),o=e*Math.PI/180,i=$t.pB.identity(new Float32Array(16));$t.pB.rotate(i,i,o,t.viewPlaneNormal);const a=$t.eR.transformMat4($t.eR.create(),t.viewUp,i);n.setCamera({viewUp:a}),n.render()}else if(void 0!==n.getRotation){const t=n.getViewPresentation(),{rotation:o}=t,i=(o+e+360)%360;n.setViewPresentation({rotation:i}),n.render()}},flipViewportHorizontal:()=>{const e=y();if(!e)return;const{viewport:t}=e,{flipHorizontal:n}=t.getCamera();t.setCamera({flipHorizontal:!n}),t.render()},flipViewportVertical:()=>{const e=y();if(!e)return;const{viewport:t}=e,{flipVertical:n}=t.getCamera();t.setCamera({flipVertical:!n}),t.render()},invertViewport:({element:e})=>{let t;if(t=void 0===e?y():e,!t)return;const{viewport:n}=t,{invert:o}=n.getProperties();n.setProperties({invert:!o}),n.render()},resetViewport:()=>{const e=y();if(!e)return;const{viewport:t}=e;t.resetProperties?.(),t.resetCamera(),t.render()},scaleViewport:({direction:e})=>{const t=y(),n=e>0?.9:1.1;if(!t)return;const{viewport:o}=t;if(o instanceof s.StackViewport)if(e){const{parallelScale:e}=o.getCamera();o.setCamera({parallelScale:e*n}),o.render()}else o.resetCamera(),o.render()},jumpToImage:({imageIndex:e,viewport:t})=>{let n;if(t)n=r.getCornerstoneViewport(t.id);else{const e=y();if(!e)return;n=e.viewport}let o=0;if(n instanceof s.StackViewport)o=n.getImageIds().length;else{if(!(n instanceof s.VolumeViewport))throw new Error("Unsupported viewport type");o=s.utilities.getImageSliceDataForVolumeViewport(n).numberOfSlices}const i=e<0?o+e:e;if(i>=o||i<0)throw new Error(`Can't jump to ${e}`);const a={imageIndex:i};s.utilities.jumpToSlice(n.element,a)},scroll:e=>{const t=y();if(e.delta??=e.direction||1,e.direction??=e.delta,!t)return;const{viewport:n}=t;s.utilities.scroll(n,e)},setViewportColormap:({viewportId:e,displaySetInstanceUID:t,colormap:o,opacity:i=1,immediate:a=!1})=>{const l=r.getCornerstoneViewport(e);let c;const{viewportMatchDetails:d}=g.getActiveProtocol(),m=d.get(e)?.displaySetsInfo;if(m){const e=m.find((e=>e.displaySetInstanceUID===t));c=e?.displaySetOptions?.options?.colormap?.opacity}if(o={...o,opacity:c||i},l instanceof s.StackViewport&&l.setProperties({colormap:o}),l instanceof s.VolumeViewport){if(!t){const{viewports:o}=n.getState();t=o.get(e)?.displaySetInstanceUIDs[0]}const i=l.getAllVolumeIds().find((e=>e.includes(t)))??l.getVolumeId();l.setProperties({colormap:o},i)}a&&l.render()},changeActiveViewport:({direction:e=1})=>{const{activeViewportId:t,viewports:o}=n.getState(),i=Array.from(o.keys()),a=(i.indexOf(t)+e+i.length)%i.length;n.setActiveViewportId(i[a])},toggleSynchronizer:({type:t,viewports:n,syncId:o})=>{const i=S.getSynchronizer(o);if(i)return void(i.isDisabled()?i.setEnabled(!0):i.setEnabled(!1));const a=tn[t];a&&a({servicesManager:e,viewports:n,syncId:o})},setViewportForToolConfiguration:({viewportId:e,toolName:t})=>{if(!e){const{activeViewportId:t}=n.getState();e=t??"default"}const i=o.getToolGroupForViewport(e);if(!i.hasTool(t))return;const a=i?.getToolConfiguration(t);i?.setToolConfiguration(t,{...a,sourceViewportId:e},!0);r.getRenderingEngine().render()},storePresentation:({viewportId:e})=>{r.storePresentation({viewportId:e})},updateVolumeData:({volume:e})=>{const{imageData:t,vtkOpenGLTexture:n}=e,o=t.getDimensions()[2];[...Array(o).keys()].forEach((e=>{n.setUpdatedFrame(e)})),t.modified()},attachProtocolViewportDataListener:({protocol:e,stageIndex:n})=>{const o=r.EVENTS.VIEWPORT_DATA_CHANGED,i=e.callbacks.onViewportDataInitialized,a=e.stages?.[n]?.viewports.length??1;let s=0;const{unsubscribe:l}=r.subscribe(o,(e=>{s++,s===a&&(t.run(...i),l(o))}))},setViewportPreset:({viewportId:e,preset:t})=>{const n=r.getCornerstoneViewport(e);n&&(n.setProperties({preset:t}),n.render())},setVolumeRenderingQulaity:({viewportId:e,volumeQuality:t})=>{const n=r.getCornerstoneViewport(e),{actor:o}=n.getActors()[0],i=o.getMapper(),a=i.getInputData(),s=a.getDimensions(),l=a.getSpacing(),c=$t.eR.length($t.eR.fromValues(s[0]*l[0],s[1]*l[1],s[2]*l[2]));let d=l.reduce(((e,t)=>e+t))/3;d/=t>1?.5*t**2:1;const m=c/d+1;i.setMaximumSamplesPerRay(m),i.setSampleDistance(d),n.render()},shiftVolumeOpacityPoints:({viewportId:e,shift:t})=>{const n=r.getCornerstoneViewport(e),{actor:o}=n.getActors()[0],i=o.getProperty().getScalarOpacity(0),a=[],s=i.getSize();for(let e=0;e<s;e++){const t=[0,0,0,0];i.getNodeValue(e,t),a.push(t)}a.forEach((e=>{e[0]+=t})),i.removeAllPoints(),a.forEach((e=>{i.addPoint(...e)})),n.render()},setVolumeLighting:({viewportId:e,options:t})=>{const n=r.getCornerstoneViewport(e),{actor:o}=n.getActors()[0],i=o.getProperty();void 0!==t.shade&&i.setShade(t.shade),void 0!==t.ambient&&i.setAmbient(t.ambient),void 0!==t.diffuse&&i.setDiffuse(t.diffuse),void 0!==t.specular&&i.setSpecular(t.specular),n.render()},resetCrosshairs:({viewportId:e})=>{const t=[],n=e=>{const n=o.getToolGroup(e);t.push(n.getToolInstance("Crosshairs"))};if(e){n(o.getToolGroupForViewport(e).id)}else{o.getToolGroupIds().forEach(n)}t.forEach((e=>{e?.computeToolCenter()}))},createLabelmapForViewport:async({viewportId:t,options:n={}})=>{const{viewportGridService:o,displaySetService:i,segmentationService:a}=e.services,{viewports:r}=o.getState(),c=t,d=r.get(c),m=n.displaySetInstanceUID||d.displaySetInstanceUIDs[0],p=a.getSegmentations(),u=n.label||`Segmentation ${p.length+1}`,g=n.segmentationId||`${s.utilities.uuidv4()}`,S=i.getDisplaySetByUID(m),I=await a.createLabelmapForDisplaySet(S,{label:u,segmentationId:g,segments:n.createInitialSegment?{1:{label:`${Bt.A.t("Segment")} 1`,active:!0}}:{}});return await a.addSegmentationRepresentation(t,{segmentationId:g,type:l.Enums.SegmentationRepresentations.Labelmap}),I},setActiveSegmentation:({segmentationId:t})=>{const{viewportGridService:n,segmentationService:o}=e.services;o.setActiveSegmentation(n.getActiveViewportId(),t)},addSegmentCommand:({segmentationId:t})=>{const{segmentationService:n}=e.services;n.addSegment(t)},setActiveSegmentAndCenterCommand:({segmentationId:t,segmentIndex:n})=>{const{segmentationService:o,viewportGridService:i}=e.services;o.setActiveSegmentation(i.getActiveViewportId(),t),o.setActiveSegment(t,n),o.jumpToSegmentCenter(t,n)},toggleSegmentVisibilityCommand:({segmentationId:t,segmentIndex:n,type:o})=>{const{segmentationService:i,viewportGridService:a}=e.services;i.toggleSegmentVisibility(a.getActiveViewportId(),t,n,o)},toggleSegmentLockCommand:({segmentationId:t,segmentIndex:n})=>{const{segmentationService:o}=e.services;o.toggleSegmentLocked(t,n)},toggleSegmentationVisibilityCommand:({segmentationId:t,type:n})=>{const{segmentationService:o,viewportGridService:i}=e.services;o.toggleSegmentationRepresentationVisibility(i.getActiveViewportId(),{segmentationId:t,type:n})},downloadSegmentationCommand:({segmentationId:t})=>{const{segmentationService:n}=e.services;n.downloadSegmentation(t)},storeSegmentationCommand:async({segmentationId:n})=>{const{segmentationService:o,viewportGridService:i}=e.services,a=await(0,h.createReportAsync)({servicesManager:e,getReport:()=>t.runCommand("storeSegmentation",{segmentationId:n}),reportType:"Segmentation"});a&&(o.remove(n),i.setDisplaySetsForViewport({viewportId:i.getActiveViewportId(),displaySetInstanceUIDs:a}))},downloadRTSSCommand:({segmentationId:t})=>{const{segmentationService:n}=e.services;n.downloadRTSS(t)},setSegmentationStyleCommand:({type:t,key:n,value:o})=>{const{segmentationService:i}=e.services;i.setStyle({type:t},{[n]:o})},deleteSegmentCommand:({segmentationId:t,segmentIndex:n})=>{const{segmentationService:o}=e.services;o.removeSegment(t,n)},deleteSegmentationCommand:({segmentationId:t})=>{const{segmentationService:n}=e.services;n.remove(t)},removeSegmentationFromViewportCommand:({segmentationId:t})=>{const{segmentationService:n,viewportGridService:o}=e.services;n.removeSegmentationRepresentations(o.getActiveViewportId(),{segmentationId:t})},toggleRenderInactiveSegmentationsCommand:()=>{const{segmentationService:t,viewportGridService:n}=e.services,o=n.getActiveViewportId(),i=t.getRenderInactiveSegmentations(o);t.setRenderInactiveSegmentations(o,!i)},setFillAlphaCommand:({type:t,value:n})=>{const{segmentationService:o}=e.services;o.setStyle({type:t},{fillAlpha:n})},setOutlineWidthCommand:({type:t,value:n})=>{const{segmentationService:o}=e.services;o.setStyle({type:t},{outlineWidth:n})},setRenderFillCommand:({type:t,value:n})=>{const{segmentationService:o}=e.services;o.setStyle({type:t},{renderFill:n})},setRenderOutlineCommand:({type:t,value:n})=>{const{segmentationService:o}=e.services;o.setStyle({type:t},{renderOutline:n})},setFillAlphaInactiveCommand:({type:t,value:n})=>{const{segmentationService:o}=e.services;o.setStyle({type:t},{fillAlphaInactive:n})},editSegmentLabel:async({segmentationId:t,segmentIndex:n})=>{const{segmentationService:o,uiDialogService:i}=e.services,a=o.getSegmentation(t);if(!a)return;const r=a.segments[n];(0,h.callInputDialog)({uiDialogService:i,title:"Edit Segment Label",placeholder:"Enter new label",defaultValue:r.label}).then((e=>{o.setSegmentLabel(t,n,e)}))},editSegmentationLabel:({segmentationId:t})=>{const{segmentationService:n,uiDialogService:o}=e.services,i=n.getSegmentation(t);if(!i)return;const{label:a}=i;(0,h.callInputDialog)({uiDialogService:o,title:"Edit Segmentation Label",placeholder:"Enter new label",defaultValue:a}).then((e=>{n.addOrUpdateSegmentation({segmentationId:t,label:e})}))},editSegmentColor:({segmentationId:t,segmentIndex:n})=>{const{segmentationService:o,uiDialogService:i,viewportGridService:a}=e.services,r=a.getActiveViewportId(),s=o.getSegmentColor(r,t,n),l={r:s[0],g:s[1],b:s[2],a:s[3]/255};i.show({content:h.colorPickerDialog,title:"Segment Color",contentProps:{value:l,onSave:e=>{const i=[e.r,e.g,e.b,255*e.a];o.setSegmentColor(r,t,n,i)}}})},getRenderInactiveSegmentations:()=>{const{segmentationService:t,viewportGridService:n}=e.services;return t.getRenderInactiveSegmentations(n.getActiveViewportId())},deleteActiveAnnotation:()=>{l.annotation.selection.getAnnotationsSelected().forEach((e=>{d.remove(e)}))},setDisplaySetsForViewports:({viewportsToUpdate:t})=>{const{cineService:n,viewportGridService:o}=e.services;t.forEach((e=>{const t=n.getState(),o=t.cines?.[e.viewportId];n.setCine({id:e.viewportId,frameRate:o?.frameRate??t.default?.frameRate??24,isPlaying:!1})})),o.setDisplaySetsForViewports(t)},undo:()=>{en.undo()},redo:()=>{en.redo()},toggleSegmentPreviewEdit:({toggle:e})=>{let t=on({toolGroupService:o});t=t.filter((e=>!e.toolName.includes("Eraser"))),t.forEach((t=>{t.configuration={...t.configuration,preview:{...t.configuration.preview,enabled:e}}}))},toggleSegmentSelect:({toggle:e})=>{o.getToolGroupIds().forEach((t=>{const n=l.ToolGroupManager.getToolGroup(t);e?n.setToolActive(l.SegmentSelectTool.toolName):n.setToolDisabled(l.SegmentSelectTool.toolName)}))},toggleUseCenterSegmentIndex:({toggle:e})=>{let t=on({toolGroupService:o});t=t.filter((e=>!e.toolName.includes("Eraser"))),t.forEach((t=>{t.configuration={...t.configuration,useCenterSegmentIndex:e}}))},_handlePreviewAction:e=>{const t=on({toolGroupService:o}),{viewport:n}=y();t.filter((e=>"Active"===e.mode||"Enabled"===e.mode)).forEach((t=>{t[`${e}Preview`]()})),an.enabled&&an[`${e}Preview`](n.element)},acceptPreview:()=>{T._handlePreviewAction("accept")},rejectPreview:()=>{T._handlePreviewAction("reject")},clearMarkersForMarkerLabelmap:()=>{const{viewport:e}=y(),t=l.ToolGroupManager.getToolGroupForViewport(e.id).getToolInstance("MarkerLabelmap");t&&t.clearMarkers(e)},interpolateScrollForMarkerLabelmap:()=>{const{viewport:e}=y(),t=l.ToolGroupManager.getToolGroupForViewport(e.id).getToolInstance("MarkerLabelmap");t&&t.interpolateScroll(e,1)},toggleLabelmapAssist:async()=>{const{viewport:e}=y(),t=!an.enabled;an.enabled=t,rn||(await an.initModel(),rn=!0);const n=o.getToolGroupIds();t?T.setToolActiveToolbar({toolName:"CircularBrushForAutoSegmentAI",toolGroupIds:n}):n.forEach((e=>{l.ToolGroupManager.getToolGroup(e).setToolPassive("CircularBrushForAutoSegmentAI")})),an.enabled&&an.initViewport(e)},setBrushSize:({value:e,toolNames:t})=>{const n=Number(e);o.getToolGroupIds()?.forEach((e=>{0===t?.length?nn.setBrushSizeForToolGroup(e,n):t?.forEach((t=>{nn.setBrushSizeForToolGroup(e,n,t)}))}))},setThresholdRange:({value:e,toolNames:t=["ThresholdCircularBrush","ThresholdSphereBrush","ThresholdCircularBrushDynamic","ThresholdSphereBrushDynamic"]})=>{const n=o.getToolGroupIds();if(n?.length)for(const i of n){const n=o.getToolGroup(i);t?.forEach((t=>{n.setToolConfiguration(t,{threshold:{range:e}})}))}},increaseBrushSize:()=>{const e=o.getToolGroupIds();if(e?.length)for(const t of e){const e=nn.getBrushSizeForToolGroup(t);nn.setBrushSizeForToolGroup(t,e+3)}},decreaseBrushSize:()=>{const e=o.getToolGroupIds();if(e?.length)for(const t of e){const e=nn.getBrushSizeForToolGroup(t);nn.setBrushSizeForToolGroup(t,e-3)}},addNewSegment:()=>{const{segmentationService:t}=e.services,{activeViewportId:o}=n.getState(),i=t.getActiveSegmentation(o);t.addSegment(i.segmentationId)},loadSegmentationDisplaySetsForViewport:({viewportId:t,displaySetInstanceUIDs:o})=>{const i=function({viewportId:e,servicesManager:t,displaySetInstanceUIDs:n}){const{hangingProtocolService:o,viewportGridService:i}=t.services,{isHangingProtocolLayout:a}=i.getState(),r=Xt({viewportId:e,viewportGridService:i}).viewportOptions.viewportId;return o.getViewportsRequireUpdate(r,n[0],a).filter((e=>"volume3d"!==e.viewportOptions?.viewportType))}({viewportId:t,servicesManager:e,displaySetInstanceUIDs:o});i.forEach((e=>{n.setDisplaySetsForViewport({viewportId:e.viewportId,displaySetInstanceUIDs:e.displaySetInstanceUIDs})}))}},b={showCornerstoneContextMenu:{commandFn:T.showCornerstoneContextMenu,options:{menuCustomizationId:"measurementsContextMenu",commands:[{commandName:"showContextMenu"}]}},getNearbyToolData:{commandFn:T.getNearbyToolData},getNearbyAnnotation:{commandFn:T.getNearbyAnnotation,storeContexts:[],options:{}},toggleViewportColorbar:{commandFn:T.toggleViewportColorbar},setMeasurementLabel:{commandFn:T.setMeasurementLabel},renameMeasurement:{commandFn:T.renameMeasurement},updateMeasurement:{commandFn:T.updateMeasurement},jumpToMeasurement:{commandFn:T.jumpToMeasurement},removeMeasurement:{commandFn:T.removeMeasurement},toggleLockMeasurement:{commandFn:T.toggleLockMeasurement},toggleVisibilityMeasurement:{commandFn:T.toggleVisibilityMeasurement},downloadCSVMeasurementsReport:{commandFn:T.downloadCSVMeasurementsReport},setViewportWindowLevel:{commandFn:T.setViewportWindowLevel},setWindowLevel:{commandFn:T.setWindowLevel},setWindowLevelPreset:{commandFn:T.setWindowLevelPreset},setToolActive:{commandFn:T.setToolActive},setToolActiveToolbar:{commandFn:T.setToolActiveToolbar},setToolEnabled:{commandFn:T.setToolEnabled},rotateViewportCW:{commandFn:T.rotateViewport,options:{rotation:90}},rotateViewportCCW:{commandFn:T.rotateViewport,options:{rotation:-90}},incrementActiveViewport:{commandFn:T.changeActiveViewport},decrementActiveViewport:{commandFn:T.changeActiveViewport,options:{direction:-1}},flipViewportHorizontal:{commandFn:T.flipViewportHorizontal},flipViewportVertical:{commandFn:T.flipViewportVertical},invertViewport:{commandFn:T.invertViewport},resetViewport:{commandFn:T.resetViewport},scaleUpViewport:{commandFn:T.scaleViewport,options:{direction:1}},scaleDownViewport:{commandFn:T.scaleViewport,options:{direction:-1}},fitViewportToWindow:{commandFn:T.scaleViewport,options:{direction:0}},nextImage:{commandFn:T.scroll,options:{direction:1}},previousImage:{commandFn:T.scroll,options:{direction:-1}},firstImage:{commandFn:T.jumpToImage,options:{imageIndex:0}},lastImage:{commandFn:T.jumpToImage,options:{imageIndex:-1}},jumpToImage:{commandFn:T.jumpToImage},showDownloadViewportModal:{commandFn:T.showDownloadViewportModal},toggleCine:{commandFn:T.toggleCine},arrowTextCallback:{commandFn:T.arrowTextCallback},setViewportActive:{commandFn:T.setViewportActive},setViewportColormap:{commandFn:T.setViewportColormap},setViewportForToolConfiguration:{commandFn:T.setViewportForToolConfiguration},storePresentation:{commandFn:T.storePresentation},attachProtocolViewportDataListener:{commandFn:T.attachProtocolViewportDataListener},setViewportPreset:{commandFn:T.setViewportPreset},setVolumeRenderingQulaity:{commandFn:T.setVolumeRenderingQulaity},shiftVolumeOpacityPoints:{commandFn:T.shiftVolumeOpacityPoints},setVolumeLighting:{commandFn:T.setVolumeLighting},resetCrosshairs:{commandFn:T.resetCrosshairs},toggleSynchronizer:{commandFn:T.toggleSynchronizer},updateVolumeData:{commandFn:T.updateVolumeData},toggleEnabledDisabledToolbar:{commandFn:T.toggleEnabledDisabledToolbar},toggleActiveDisabledToolbar:{commandFn:T.toggleActiveDisabledToolbar},updateStoredPositionPresentation:{commandFn:T.updateStoredPositionPresentation},updateStoredSegmentationPresentation:{commandFn:T.updateStoredSegmentationPresentation},createLabelmapForViewport:{commandFn:T.createLabelmapForViewport},setActiveSegmentation:{commandFn:T.setActiveSegmentation},addSegment:{commandFn:T.addSegmentCommand},setActiveSegmentAndCenter:{commandFn:T.setActiveSegmentAndCenterCommand},toggleSegmentVisibility:{commandFn:T.toggleSegmentVisibilityCommand},toggleSegmentLock:{commandFn:T.toggleSegmentLockCommand},toggleSegmentationVisibility:{commandFn:T.toggleSegmentationVisibilityCommand},downloadSegmentation:{commandFn:T.downloadSegmentationCommand},storeSegmentation:{commandFn:T.storeSegmentationCommand},downloadRTSS:{commandFn:T.downloadRTSSCommand},setSegmentationStyle:{commandFn:T.setSegmentationStyleCommand},deleteSegment:{commandFn:T.deleteSegmentCommand},deleteSegmentation:{commandFn:T.deleteSegmentationCommand},removeSegmentationFromViewport:{commandFn:T.removeSegmentationFromViewportCommand},toggleRenderInactiveSegmentations:{commandFn:T.toggleRenderInactiveSegmentationsCommand},setFillAlpha:{commandFn:T.setFillAlphaCommand},setOutlineWidth:{commandFn:T.setOutlineWidthCommand},setRenderFill:{commandFn:T.setRenderFillCommand},setRenderOutline:{commandFn:T.setRenderOutlineCommand},setFillAlphaInactive:{commandFn:T.setFillAlphaInactiveCommand},editSegmentLabel:{commandFn:T.editSegmentLabel},editSegmentationLabel:{commandFn:T.editSegmentationLabel},editSegmentColor:{commandFn:T.editSegmentColor},getRenderInactiveSegmentations:{commandFn:T.getRenderInactiveSegmentations},deleteActiveAnnotation:{commandFn:T.deleteActiveAnnotation},setDisplaySetsForViewports:T.setDisplaySetsForViewports,undo:T.undo,redo:T.redo,interpolateLabelmap:T.interpolateLabelmap,runSegmentBidirectional:T.runSegmentBidirectional,downloadCSVSegmentationReport:T.downloadCSVSegmentationReport,toggleSegmentPreviewEdit:T.toggleSegmentPreviewEdit,toggleSegmentSelect:T.toggleSegmentSelect,acceptPreview:T.acceptPreview,rejectPreview:T.rejectPreview,toggleUseCenterSegmentIndex:T.toggleUseCenterSegmentIndex,toggleLabelmapAssist:T.toggleLabelmapAssist,interpolateScrollForMarkerLabelmap:T.interpolateScrollForMarkerLabelmap,clearMarkersForMarkerLabelmap:T.clearMarkersForMarkerLabelmap,setBrushSize:T.setBrushSize,setThresholdRange:T.setThresholdRange,increaseBrushSize:T.increaseBrushSize,decreaseBrushSize:T.decreaseBrushSize,addNewSegment:T.addNewSegment,loadSegmentationDisplaySetsForViewport:T.loadSegmentationDisplaySetsForViewport};return{actions:T,definitions:b,defaultContext:"CORNERSTONE"}},ln={type:"voi",id:"mpr",source:!0,target:!0,options:{syncColormap:!0}},cn={type:"hydrateseg",id:"sameFORId",source:!0,target:!0,options:{matchingRules:["sameFOR"]}},dn={id:"mpr",name:"MPR",locked:!0,icon:"layout-advanced-mpr",isPreset:!0,createdDate:"2021-02-23",modifiedDate:"2023-08-15",availableTo:{},editableBy:{},numberOfPriorsReferenced:0,protocolMatchingRules:[],imageLoadStrategy:"nth",callbacks:{},displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0}]}},stages:[{name:"MPR 1x3",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:3,layoutOptions:[{x:0,y:0,width:1/3,height:1},{x:1/3,y:0,width:1/3,height:1},{x:2/3,y:0,width:1/3,height:1}]}},viewports:[{viewportOptions:{viewportId:"mpr-axial",toolGroupId:"mpr",viewportType:"volume",orientation:"axial",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{viewportId:"mpr-sagittal",toolGroupId:"mpr",viewportType:"volume",orientation:"sagittal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{viewportId:"mpr-coronal",toolGroupId:"mpr",viewportType:"volume",orientation:"coronal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]}]}]},mn={id:"fourUp",locked:!0,name:"3D four up",icon:"layout-advanced-3d-four-up",isPreset:!0,createdDate:"2023-03-15T10:29:44.894Z",modifiedDate:"2023-03-15T10:29:44.894Z",availableTo:{},editableBy:{},protocolMatchingRules:[],imageLoadStrategy:"interleaveCenter",displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0}]}},stages:[{id:"fourUpStage",name:"fourUp",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"axial",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"volume3d",viewportType:"volume3d",orientation:"coronal",customViewportProps:{hideOverlays:!0},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet",options:{displayPreset:{CT:"CT-Bone",MR:"MR-Default",default:"CT-Bone"}}}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"coronal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"sagittal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]}]}]},pn={id:"main3D",locked:!0,name:"3D main",icon:"layout-advanced-3d-main",isPreset:!0,createdDate:"2023-03-15T10:29:44.894Z",modifiedDate:"2023-03-15T10:29:44.894Z",availableTo:{},editableBy:{},protocolMatchingRules:[],imageLoadStrategy:"interleaveCenter",displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0}]}},stages:[{id:"main3DStage",name:"main3D",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3,layoutOptions:[{x:0,y:0,width:1,height:.5},{x:0,y:.5,width:1/3,height:.5},{x:1/3,y:.5,width:1/3,height:.5},{x:2/3,y:.5,width:1/3,height:.5}]}},viewports:[{viewportOptions:{toolGroupId:"volume3d",viewportType:"volume3d",orientation:"coronal",customViewportProps:{hideOverlays:!0}},displaySets:[{id:"activeDisplaySet",options:{displayPreset:{CT:"CT-Bone",MR:"MR-Default",default:"CT-Bone"}}}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"axial",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"coronal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"sagittal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]}]}]},un={id:"mprAnd3DVolumeViewport",locked:!0,name:"mpr",createdDate:"2023-03-15T10:29:44.894Z",modifiedDate:"2023-03-15T10:29:44.894Z",availableTo:{},editableBy:{},protocolMatchingRules:[],imageLoadStrategy:"interleaveCenter",displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0},{attribute:"Modality",constraint:{equals:{value:"CT"}},required:!0}]}},stages:[{id:"mpr3Stage",name:"mpr",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"axial",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"volume3d",viewportType:"volume3d",orientation:"coronal",customViewportProps:{hideOverlays:!0},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet",options:{displayPreset:{CT:"CT-Bone",MR:"MR-Default",default:"CT-Bone"}}}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"coronal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"sagittal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]}]}]},gn={id:"only3D",locked:!0,name:"3D only",icon:"layout-advanced-3d-only",isPreset:!0,createdDate:"2023-03-15T10:29:44.894Z",modifiedDate:"2023-03-15T10:29:44.894Z",availableTo:{},editableBy:{},protocolMatchingRules:[],imageLoadStrategy:"interleaveCenter",displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0}]}},stages:[{id:"only3DStage",name:"only3D",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{toolGroupId:"volume3d",viewportType:"volume3d",orientation:"coronal",customViewportProps:{hideOverlays:!0,syncGroups:[ln,cn]}},displaySets:[{id:"activeDisplaySet",options:{displayPreset:{CT:"CT-Bone",MR:"MR-Default",default:"CT-Bone"}}}]}]}]},Sn={id:"primary3D",locked:!0,name:"3D primary",icon:"layout-advanced-3d-primary",isPreset:!0,createdDate:"2023-03-15T10:29:44.894Z",modifiedDate:"2023-03-15T10:29:44.894Z",availableTo:{},editableBy:{},protocolMatchingRules:[],imageLoadStrategy:"interleaveCenter",displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0}]}},stages:[{id:"primary3DStage",name:"primary3D",viewportStructure:{layoutType:"grid",properties:{rows:3,columns:3,layoutOptions:[{x:0,y:0,width:2/3,height:1},{x:2/3,y:0,width:1/3,height:1/3},{x:2/3,y:1/3,width:1/3,height:1/3},{x:2/3,y:2/3,width:1/3,height:1/3}]}},viewports:[{viewportOptions:{toolGroupId:"volume3d",viewportType:"volume3d",orientation:"coronal",customViewportProps:{hideOverlays:!0}},displaySets:[{id:"activeDisplaySet",options:{displayPreset:{CT:"CT-Bone",MR:"MR-Default",default:"CT-Bone"}}}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"axial",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"coronal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"sagittal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]}]}]},In={id:"primaryAxial",locked:!0,name:"Axial Primary",icon:"layout-advanced-axial-primary",isPreset:!0,createdDate:"2023-03-15T10:29:44.894Z",modifiedDate:"2023-03-15T10:29:44.894Z",availableTo:{},editableBy:{},protocolMatchingRules:[],imageLoadStrategy:"interleaveCenter",displaySetSelectors:{activeDisplaySet:{seriesMatchingRules:[{weight:1,attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0}]}},stages:[{id:"primaryAxialStage",name:"primaryAxial",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3,layoutOptions:[{x:0,y:0,width:2/3,height:1},{x:2/3,y:0,width:1/3,height:.5},{x:2/3,y:.5,width:1/3,height:.5}]}},viewports:[{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"axial",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"sagittal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]},{viewportOptions:{toolGroupId:"mpr",viewportType:"volume",orientation:"coronal",initialImageOptions:{preset:"middle"},syncGroups:[ln,cn]},displaySets:[{id:"activeDisplaySet"}]}]}]},vn={id:"@ohif/frameView",description:"Frame view for the active series",name:"Frame View",icon:"tool-stack-scroll",isPreset:!0,toolGroupIds:["default"],protocolMatchingRules:[],displaySetSelectors:{defaultDisplaySetId:{seriesMatchingRules:[{attribute:"numImageFrames",constraint:{greaterThan:{value:16}},required:!0},{attribute:"isDisplaySetFromUrl",weight:20,constraint:{equals:!0}}]}},defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"defaultDisplaySetId",matchedDisplaySetsIndex:-1}]},stages:[{name:"frameView",id:"4x4",viewportStructure:{layoutType:"grid",properties:{rows:4,columns:4}},viewports:[{viewportOptions:{viewportId:"custom_R0_C0",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:0}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R0_C1",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:1}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R0_C2",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:2}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R0_C3",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:3}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R1_C0",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:4}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R1_C1",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:5}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R1_C2",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:6}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R1_C3",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:7}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R2_C0",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:8}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R2_C1",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:9}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R2_C2",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:10}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R2_C3",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:11}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R3_C0",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:12}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R3_C1",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:13}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R3_C2",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:14}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{viewportId:"custom_R3_C3",toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:15}}]},displaySets:[{id:"defaultDisplaySetId"}]}]},{name:"frameView",id:"3x3",viewportStructure:{layoutType:"grid",properties:{rows:3,columns:3}},viewports:[{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:0}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:1}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:2}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:3}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:4}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:5}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:6}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:7}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:8}}]},displaySets:[{id:"defaultDisplaySetId"}]}]},{name:"frameView",id:"3x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:0}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:1}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:2}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:3}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:4}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:5}}]},displaySets:[{id:"defaultDisplaySetId"}]}]},{name:"frameView",id:"2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:0}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:1}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:2}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:3}}]},displaySets:[{id:"defaultDisplaySetId"}]}]},{name:"frameView",id:"1x3",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:3}},viewports:[{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:0}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:1}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:2}}]},displaySets:[{id:"defaultDisplaySetId"}]}]},{name:"frameView",id:"1x2",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:2}},viewports:[{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:0}}]},displaySets:[{id:"defaultDisplaySetId"}]},{viewportOptions:{toolGroupId:"default",syncGroups:[{type:"zoompan",id:"zoompansync",source:!0,target:!0},{type:"voi",id:"wlsync",source:!0,target:!0,options:{syncColormap:!0}},{type:"frameview",id:"frameViewSync",source:!0,target:!0,options:{viewportIndex:1}}]},displaySets:[{id:"defaultDisplaySetId"}]}]}]};const yn=function(){return[{name:dn.id,protocol:dn},{name:un.id,protocol:un},{name:mn.id,protocol:mn},{name:pn.id,protocol:pn},{name:In.id,protocol:In},{name:gn.id,protocol:gn},{name:Sn.id,protocol:Sn},{name:vn.id,protocol:vn}]},hn=e=>({disabled:!0,disabledText:e??"Not available on the current viewport"});function fn({viewportId:e,toolbarService:t,button:n,disabledText:o,offModes:i,toolGroupService:a}){const r=a.getToolGroupForViewport(e);if(!r)return;const s=t.getToolNameForButton(n);if(!r.hasTool(s))return hn(o);const l=i.includes(r.getToolOptions(s).mode);return{className:Ze.WpD.getToggledClassName(!l)}}var wn;const En={VIEWPORT_ADDED:"event::cornerstone::toolgroupservice:viewportadded",TOOLGROUP_CREATED:"event::cornerstone::toolgroupservice:toolgroupcreated",TOOL_ACTIVATED:"event::cornerstone::toolgroupservice:toolactivated",PRIMARY_TOOL_ACTIVATED:"event::cornerstone::toolgroupservice:primarytoolactivated"};class Tn{constructor(e){this.servicesManager=void 0,this.cornerstoneViewportService=void 0,this.viewportGridService=void 0,this.uiNotificationService=void 0,this.toolGroupIds=new Set,this.listeners=void 0,this.EVENTS=void 0,this._onToolActivated=e=>{const{toolGroupId:t,toolName:n,toolBindingsOptions:o}=e.detail,i=o.bindings?.some((e=>e.mouseButton===l.Enums.MouseBindings.Primary)),a={toolGroupId:t,toolName:n,toolBindingsOptions:o};this._broadcastEvent(En.TOOL_ACTIVATED,a),i&&this._broadcastEvent(En.PRIMARY_TOOL_ACTIVATED,a)};const{cornerstoneViewportService:t,viewportGridService:n,uiNotificationService:o}=e.services;this.cornerstoneViewportService=t,this.viewportGridService=n,this.uiNotificationService=o,this.listeners={},this.EVENTS=En,Object.assign(this,p.Ml),this._init()}onModeExit(){this.destroy()}_init(){s.eventTarget.addEventListener(l.Enums.Events.TOOL_ACTIVATED,this._onToolActivated)}getToolGroup(e){let t=e;if(!t){const e=w(this.viewportGridService);if(!e)return;const{renderingEngineId:n,viewportId:o}=e,i=l.ToolGroupManager.getToolGroupForViewport(o,n);if(!i)return void console.warn("No tool group found for viewportId:",o,"and renderingEngineId:",n);t=i.id}return l.ToolGroupManager.getToolGroup(t)}getToolGroupIds(){return Array.from(this.toolGroupIds)}getToolGroupForViewport(e){const t=this.cornerstoneViewportService.getRenderingEngine();return l.ToolGroupManager.getToolGroupForViewport(e,t.id)}getActiveToolForViewport(e){const t=this.getToolGroupForViewport(e);if(t)return t.getActivePrimaryMouseButtonTool()}destroy(){l.ToolGroupManager.destroy(),this.toolGroupIds=new Set,s.eventTarget.removeEventListener(l.Enums.Events.TOOL_ACTIVATED,this._onToolActivated)}destroyToolGroup(e){l.ToolGroupManager.destroyToolGroup(e),this.toolGroupIds.delete(e)}removeViewportFromToolGroup(e,t,n){const o=l.ToolGroupManager.getToolGroupForViewport(e,t);if(!o)return;o.removeViewports(t,e);0===o.getViewportIds().length&&n&&l.ToolGroupManager.destroyToolGroup(o.id)}addViewportToToolGroup(e,t,n){if(n){let o=l.ToolGroupManager.getToolGroup(n);o||(o=this.createToolGroup(n)),o.addViewport(e,t)}else{l.ToolGroupManager.getAllToolGroups().forEach((n=>{n.addViewport(e,t)}))}this._broadcastEvent(En.VIEWPORT_ADDED,{viewportId:e,toolGroupId:n})}createToolGroup(e){if(this.getToolGroup(e))throw new Error(`ToolGroup ${e} already exists`);const t=l.ToolGroupManager.createToolGroup(e);return this.toolGroupIds.add(e),this._broadcastEvent(En.TOOLGROUP_CREATED,{toolGroupId:e}),t}addToolsToToolGroup(e,t,n={}){const o=l.ToolGroupManager.getToolGroup(e);this._addTools(o,t,n),this._setToolsMode(o,t)}createToolGroupAndAddTools(e,t){const n=this.createToolGroup(e);return this.addToolsToToolGroup(e,t),n}getToolConfiguration(e,t){const n=l.ToolGroupManager.getToolGroup(e);if(!n)return null;const o=n.getToolInstance(t);return o?o.configuration:null}setToolConfiguration(e,t,n){l.ToolGroupManager.getToolGroup(e).getToolInstance(t).configuration=n}getActivePrimaryMouseButtonTool(e){return this.getToolGroup(e)?.getActivePrimaryMouseButtonTool()}_setToolsMode(e,t){const{active:n,passive:o,enabled:i,disabled:a}=t;n&&n.forEach((({toolName:t,bindings:n})=>{e.setToolActive(t,{bindings:n})})),o&&o.forEach((({toolName:t})=>{e.setToolPassive(t)})),i&&i.forEach((({toolName:t})=>{e.setToolEnabled(t)})),a&&a.forEach((({toolName:t})=>{e.setToolDisabled(t)}))}_addTools(e,t){const n=t=>{t.forEach((({toolName:t,parentTool:n,configuration:o})=>{n?e.addToolInstance(t,n,{...o}):e.addTool(t,{...o})}))};t.active&&n(t.active),t.passive&&n(t.passive),t.enabled&&n(t.enabled),t.disabled&&n(t.disabled)}}wn=Tn,Tn.REGISTRATION={name:"toolGroupService",altName:"ToolGroupService",create:({servicesManager:e})=>new wn(e)};const bn=Tn,{createSynchronizer:Dn}=l.SynchronizerManager,{SEGMENTATION_REPRESENTATION_MODIFIED:Cn}=l.Enums.Events,{BlendModes:On}=s.Enums;function Mn(e,{servicesManager:t,...n}){return Dn(e,Cn,((e,o,i,a)=>Nn(e,o,i,a,{servicesManager:t,options:n})),{eventSource:"eventTarget"})}const Nn=async(e,t,n,o,{servicesManager:i,options:a})=>{const r=o,{segmentationId:l}=r.detail,{segmentationService:c}=i.services,d=n.viewportId,{viewport:m}=(0,s.getEnabledElementByViewportId)(d);if(!m.getFrameOfReferenceUID())return;if(c.getSegmentationRepresentations(d,{segmentationId:l}).length>0)return;const p=c.getSegmentationRepresentations(t.viewportId,{segmentationId:l})[0].type;await c.addSegmentationRepresentation(d,{segmentationId:l,type:p,config:{blendMode:1===m.getBlendMode()?On.LABELMAP_EDGE_PROJECTION_BLEND:void 0}})};var Vn;const Rn={TOOL_GROUP_CREATED:"event::cornerstone::syncgroupservice:toolgroupcreated"},An="cameraposition",Un="voi",Pn="zoompan",xn="stackimage",Fn="imageslice",_n="hydrateseg";class Ln{constructor(e){this.servicesManager=void 0,this.listeners={},this.EVENTS=void 0,this.synchronizerCreators={[An]:l.synchronizers.createCameraPositionSynchronizer,[Un]:l.synchronizers.createVOISynchronizer,[Pn]:l.synchronizers.createZoomPanSynchronizer,[xn]:l.synchronizers.createImageSliceSynchronizer,[Fn]:l.synchronizers.createImageSliceSynchronizer,[_n]:Mn},this.synchronizersByType={},this.servicesManager=e,this.listeners={},this.EVENTS=Rn,Object.assign(this,p.Ml)}_createSynchronizer(e,t,n){this.synchronizersByType[e]=this.synchronizersByType[e]||[];const o=this.synchronizerCreators[e.toLowerCase()];if(o){const i=o(t,{...n,servicesManager:this.servicesManager});if(i)return this.synchronizersByType[e].push(i),i}else console.debug(`Unknown synchronizer type: ${e}, id: ${t}`)}getSyncCreatorForType(e){return this.synchronizerCreators[e.toLowerCase()]}addSynchronizerType(e,t){this.synchronizerCreators[e.toLowerCase()]=t}getSynchronizer(e){return l.SynchronizerManager.getSynchronizer(e)}registerCustomSynchronizer(e,t){this.synchronizerCreators[e]=t}getSynchronizersOfType(e){return this.synchronizersByType[e]}_getOrCreateSynchronizer(e,t,n){let o=l.SynchronizerManager.getSynchronizer(t);return o||(o=this._createSynchronizer(e,t,n)),o}addViewportToSyncGroup(e,t,n){if(!n)return;(Array.isArray(n)?n:[n]).forEach((n=>{const o=(e=>"string"==typeof e?{type:e}:e)(n),{type:i,target:a=!0,source:r=!0,options:s={},id:l=i}=o,c=this._getOrCreateSynchronizer(i,l,s);if(!c)return;c.setOptions(e,s);const d={viewportId:e,renderingEngineId:t};a&&r?c.add(d):r?c.addSource(d):a&&c.addTarget(d)}))}destroy(){l.SynchronizerManager.destroy()}getSynchronizersForViewport(e){const t=(0,s.getRenderingEngines)().find((t=>t.getViewports().find((t=>t.id===e))))||(0,s.getRenderingEngines)()[0];return l.SynchronizerManager.getAllSynchronizers().filter((n=>n.hasSourceViewport(t.id,e)||n.hasTargetViewport(t.id,e)))}removeViewportFromSyncGroup(e,t,n){const o=l.SynchronizerManager.getAllSynchronizers();(n?o.filter((e=>e.id===n)):o).forEach((n=>{if(!n)return;this.isImageSliceSyncronizer(n)&&this.unRegisterSpatialRegistration(n),n.remove({viewportId:e,renderingEngineId:t});const o=n.getSourceViewports(),i=n.getTargetViewports();o.length||i.length||l.SynchronizerManager.destroySynchronizer(n.id)}))}unRegisterSpatialRegistration(e){const t=e.getSourceViewports().map((e=>e.viewportId)),n=e.getTargetViewports().map((e=>e.viewportId));t.map((e=>n.map((t=>[t,e])))).reduce(((e,t)=>e.concat(t)),[]).forEach((e=>{s.utilities.spatialRegistrationMetadataProvider.add(e,void 0)}))}isImageSliceSyncronizer(e){return this.getSynchronizerType(e).toLowerCase()===Fn}getSynchronizerType(e){return Object.keys(this.synchronizersByType).find((t=>this.getSynchronizersOfType(t).includes(e)))}}Vn=Ln,Ln.REGISTRATION={name:"syncGroupService",altName:"SyncGroupService",create:({servicesManager:e})=>new Vn(e)};const Gn=Ln;function kn(e,t){const n=1-t;return e<1/4?4*Math.pow(2*e,3)*n+t:e<.5?(1-Math.pow(-4*e+2,3)/2)*n+t:e<3/4?(1-Math.pow(4*e-2,3)/2)*n+t:-4*Math.pow(2*e-2,3)*n+t}function zn(e,t,n){const o=t-n;return e<1/4?n+4*Math.pow(2*e,3)*o:e<.5?n+(1-Math.pow(-4*e+2,3)/2)*o:e<3/4?n+(1-Math.pow(4*e-2,3)/2)*o:n+-4*Math.pow(2*e-2,3)*o}var Bn,$n=n(4714),jn=n(70906),Wn=n(71851),Hn=n(78231),qn=n(49906),Yn=n(6273),Jn=n(44595);const Kn=l.Enums.SegmentationRepresentations.Labelmap,Qn=l.Enums.SegmentationRepresentations.Contour,Zn={SEGMENTATION_MODIFIED:"event::segmentation_modified",SEGMENTATION_ADDED:"event::segmentation_added",SEGMENTATION_DATA_MODIFIED:"event::segmentation_data_modified",SEGMENTATION_REMOVED:"event::segmentation_removed",SEGMENTATION_REPRESENTATION_MODIFIED:"event::segmentation_representation_modified",SEGMENTATION_REPRESENTATION_REMOVED:"event::segmentation_representation_removed",SEGMENT_LOADING_COMPLETE:"event::segment_loading_complete",SEGMENTATION_LOADING_COMPLETE:"event::segmentation_loading_complete"};class Xn extends p.Rc{constructor({servicesManager:e}){super(Zn),this._segmentationIdToColorLUTIndexMap=void 0,this._segmentationGroupStatsMap=void 0,this.servicesManager=void 0,this.highlightIntervalId=null,this.EVENTS=Zn,this.destroy=()=>{s.eventTarget.removeEventListener(l.Enums.Events.SEGMENTATION_MODIFIED,this._onSegmentationModifiedFromSource),s.eventTarget.removeEventListener(l.Enums.Events.SEGMENTATION_REMOVED,this._onSegmentationModifiedFromSource),s.eventTarget.removeEventListener(l.Enums.Events.SEGMENTATION_DATA_MODIFIED,this._onSegmentationDataModifiedFromSource),s.eventTarget.removeEventListener(l.Enums.Events.SEGMENTATION_REPRESENTATION_ADDED,this._onSegmentationModifiedFromSource),s.eventTarget.removeEventListener(l.Enums.Events.SEGMENTATION_ADDED,this._onSegmentationAddedFromSource),this.listeners={}},this.getStyle=e=>l.segmentation.config.style.getStyle(e),this.setStyle=(e,t)=>{l.segmentation.config.style.setStyle(e,t)},this.resetToGlobalStyle=()=>{l.segmentation.config.style.resetToGlobalStyle()},this.toggleSegmentationRepresentationVisibility=(e,{segmentationId:t,type:n})=>{this._toggleSegmentationRepresentationVisibility(e,t,n)},this.getViewportIdsWithSegmentation=e=>l.segmentation.state.getViewportIdsWithSegmentation(e),this._toggleSegmentationRepresentationVisibility=(e,t,n)=>{const o=this.getSegmentationRepresentations(e,{segmentationId:t,type:n})[0],i=0===l.segmentation.config.visibility.getHiddenSegmentIndices(e,{segmentationId:t,type:o.type}).size;this._setSegmentationRepresentationVisibility(e,t,o.type,!i)},this._onSegmentationDataModifiedFromSource=e=>{const{segmentationId:t}=e.detail;this._broadcastEvent(this.EVENTS.SEGMENTATION_DATA_MODIFIED,{segmentationId:t})},this._onSegmentationRepresentationModifiedFromSource=e=>{const{segmentationId:t,viewportId:n}=e.detail;this._broadcastEvent(this.EVENTS.SEGMENTATION_REPRESENTATION_MODIFIED,{segmentationId:t,viewportId:n})},this._onSegmentationModifiedFromSource=e=>{const{segmentationId:t}=e.detail;this._broadcastEvent(this.EVENTS.SEGMENTATION_MODIFIED,{segmentationId:t})},this._onSegmentationAddedFromSource=e=>{const{segmentationId:t}=e.detail;this._broadcastEvent(this.EVENTS.SEGMENTATION_ADDED,{segmentationId:t})},this._segmentationIdToColorLUTIndexMap=new Map,this.servicesManager=e,this._segmentationGroupStatsMap=new Map}onModeEnter(){this._initSegmentationService()}onModeExit(){this.destroy()}getSegmentation(e){return l.segmentation.state.getSegmentation(e)}getSegmentations(){return l.segmentation.state.getSegmentations()}getPresentation(e){const t=[],n=new Map,o=this.getSegmentationRepresentations(e);for(const e of o){const{segmentationId:t}=e;if(!e)continue;const{type:o}=e;n.set(t,{segmentationId:t,type:o,hydrated:!0,config:e.config||{}})}return t.push(...n.values()),t}getRepresentationsForSegmentation(e){return l.segmentation.state.getSegmentationRepresentationsBySegmentationId(e)}getSegmentationRepresentations(e,t={}){return l.segmentation.state.getSegmentationRepresentations(e,t).map((t=>this._toOHIFSegmentationRepresentation(e,t)))}async addSegmentationRepresentation(e,{segmentationId:t,type:n,config:o,suppressEvents:i=!1}){const a=this.getSegmentation(t),r=this.getAndValidateViewport(e);if(!r)return;const s=this._segmentationIdToColorLUTIndexMap.get(t),c=l.Enums.SegmentationRepresentations.Labelmap;let d=n||c,m=!1;if(n===l.Enums.SegmentationRepresentations.Labelmap){const{isVolumeViewport:n,isVolumeSegmentation:o}=this.determineViewportAndSegmentationType(r,a);({representationTypeToUse:d,isConverted:m}=await this.handleViewportConversion(n,o,r,a,e,t,d))}await this._addSegmentationRepresentation(e,t,d,s,m,o),i||this._broadcastEvent(this.EVENTS.SEGMENTATION_REPRESENTATION_MODIFIED,{segmentationId:t})}async createLabelmapForDisplaySet(e,t){const n=t?.segmentationId??`${s.utilities.uuidv4()}`,o=e.isDynamicVolume;let i=e.imageIds;if(o){const t=e.dynamicVolumeInfo.timePoints;i=t[Math.floor(t.length/2)]}const a=await s.imageLoader.createAndCacheDerivedLabelmapImages(i),r=this.getSegmentations(),l=t.label||`Segmentation ${r.length+1}`,c=a.map((e=>e.imageId)),d={segmentationId:n,representation:{type:Kn,data:{imageIds:c,referencedImageIds:i}},config:{label:l,segments:t.segments&&Object.keys(t.segments).length>0?t.segments:{1:{label:`${Bt.A.t("Segment")} 1`,active:!0}},cachedStats:{info:`S${e.SeriesNumber}: ${e.SeriesDescription}`}}};return this.addOrUpdateSegmentation(d),n}async createSegmentationForSEGDisplaySet(e,t={type:Kn}){const{type:n}=t;let{segmentationId:o}=t;const{labelMapImages:i}=e;if(n!==Kn)throw new Error("Only labelmap type is supported for SEG display sets right now");if(!i||!i.length)throw new Error("SEG reading failed");o=o??e.displaySetInstanceUID;const a=e.referencedDisplaySetInstanceUID,r=this.servicesManager.services.displaySetService.getDisplaySetByUID(a).instances;if(!r.length)throw new Error("No instances were provided for the referenced display set of the SEG");const l=r.map((e=>e.imageId)),c=i?.flat(),d=c.map((e=>e.imageId));e.images=c.map((e=>({...e,...s.metaData.get("instance",e.referencedImageId)}))),e.imageIds=d;let m=null;for(let e=0;e<c.length;e++){const t=c[e].voxelManager,n=t.getScalarData();t.setScalarData(n),!m&&n.some((e=>0!==e))&&(m=c[e].referencedImageId)}e.firstSegmentedSliceImageId=m;const p=e.segMetadata.data,u={},g=[];p.forEach(((t,n)=>{if(0===n)return void g.push([0,0,0,0]);const{SegmentedPropertyCategoryCodeSequence:o,SegmentNumber:i,SegmentLabel:a,SegmentAlgorithmType:r,SegmentAlgorithmName:s,SegmentedPropertyTypeCodeSequence:l,rgba:c}=t;g.push(c);const d=Number(i),m=e.centroids?.get(n),p=m?.image||{x:0,y:0,z:0},S=m?.world||{x:0,y:0,z:0};u[d]={segmentIndex:d,label:a||`Segment ${i}`,locked:!1,active:!1,cachedStats:{center:{image:[p.x,p.y,p.z],world:[S.x,S.y,S.z]},modifiedTime:e.SeriesDate,category:o?o.CodeMeaning:"",type:l?l.CodeMeaning:"",algorithmType:r,algorithmName:s}}}));const S=(0,jn.u)();(0,$n.u)(g,S),this._segmentationIdToColorLUTIndexMap.set(o,S),this._broadcastEvent(Zn.SEGMENTATION_LOADING_COMPLETE,{segmentationId:o,segDisplaySet:e});const I={segmentationId:o,representation:{type:Kn,data:{imageIds:d,referencedImageIds:l}},config:{label:e.SeriesDescription,segments:u}};return e.isLoaded=!0,this.addOrUpdateSegmentation(I),o}async createSegmentationForRTDisplaySet(e,t={type:Qn}){const{type:n}=t;let{segmentationId:o}=t;if(n!==Qn)throw new Error("Only contour type is supported for RT display sets right now");o=o??e.displaySetInstanceUID;const{structureSet:i}=e;if(!i)throw new Error("To create the contours from RT displaySet, the displaySet should be loaded first. You can perform rtDisplaySet.load() before calling this method.");const a=e.displaySetInstanceUID,r=this.servicesManager.services.displaySetService.getDisplaySetByUID(e.referencedDisplaySetInstanceUID),l=Array.from(i.ReferencedSOPInstanceUIDsSet),c=r.imageIds,d=c?.find((e=>l.some((t=>e.includes(t)))))||null;e.firstSegmentedSliceImageId=d;const m=function(e,t){return e.ROIContours.map((({contourPoints:e,ROINumber:n,ROIName:o,colorArray:i})=>{const a=o||n;return{data:e.map((({points:e,...t})=>({...t,points:e.map((({x:e,y:t,z:n})=>[e,t,n]))}))),id:a,segmentIndex:n,color:i,geometryId:`${t}:${a}:segmentIndex-${n}`}}))}(i,a);m.sort(((e,t)=>e.segmentIndex-t.segmentIndex));const p=m.map((({geometryId:e})=>e)),u={segmentationId:o,representation:{type:Qn,data:{geometryIds:p}},config:{label:e.SeriesDescription}};if(!i.ROIContours?.length)throw new Error("The structureSet does not contain any ROIContours. Please ensure the structureSet is loaded first.");const g={};let S={};const I=[[0,0,0,0]];for(const t of m){const{data:n,id:o,color:a,segmentIndex:r,geometryId:l}=t;I.push(a);try{const t=(await s.geometryLoader.createAndCacheGeometry(l,{geometryData:{data:n,id:o,color:a,frameOfReferenceUID:i.frameOfReferenceUID,segmentIndex:r},type:s.Enums.GeometryType.CONTOUR})).data;S={center:{world:t.centroid},modifiedTime:e.SeriesDate},g[r]={label:o,segmentIndex:r,cachedStats:S,locked:!1,active:!1};const c=Object.keys(S).length,d=Math.round(c/m.length*100);this._broadcastEvent(Zn.SEGMENT_LOADING_COMPLETE,{percentComplete:d,numSegments:m.length})}catch(e){console.warn(`Error initializing contour for segment ${r}:`,e);continue}}const v=(0,jn.u)();return(0,$n.u)(I,v),this._segmentationIdToColorLUTIndexMap.set(o,v),u.config.segments=g,this._broadcastEvent(Zn.SEGMENTATION_LOADING_COMPLETE,{segmentationId:o,rtDisplaySet:e}),e.isLoaded=!0,this.addOrUpdateSegmentation(u),o}addOrUpdateSegmentation(e){const t=e.segmentationId;l.segmentation.state.getSegmentation(t)?this.updateSegmentationInSource(t,e):this.addSegmentationToSource(e)}setActiveSegmentation(e,t){l.segmentation.activeSegmentation.setActiveSegmentation(e,t)}getActiveSegmentation(e){return l.segmentation.activeSegmentation.getActiveSegmentation(e)}getActiveSegment(e){const t=this.getActiveSegmentation(e);if(!t)return;const{segments:n}=t;let o;for(const e of Object.values(n))if(e.active){o=e;break}return o}hasCustomStyles(e){return l.segmentation.config.style.hasCustomStyle(e)}addSegment(e,t={}){if(0===t?.segmentIndex)throw new Error(Bt.A.t("Segment")+' index 0 is reserved for "no label"');const n=this.getCornerstoneSegmentation(e);let o=t.segmentIndex;if(!o){const e=Object.keys(n.segments);o=0===e.length?1:Math.max(...e.map(Number))+1}t.label||(t.label=`${Bt.A.t("Segment")} ${o}`);const i=n.segments;l.segmentation.updateSegmentations([{segmentationId:e,payload:{segments:{...i,[o]:{...i[o],segmentIndex:o,cachedStats:{},locked:!1,...t}}}}]),this.setActiveSegment(e,o),void 0!==t.isLocked&&this._setSegmentLockedStatus(e,o,t.isLocked);this.getViewportIdsWithSegmentation(e).forEach((n=>{void 0!==t.color&&this.setSegmentColor(n,e,o,t.color),void 0!==t.visibility&&this.setSegmentVisibility(n,e,o,t.visibility)}))}removeSegment(e,t){l.segmentation.removeSegment(e,t)}setSegmentVisibility(e,t,n,o,i){this._setSegmentVisibility(e,t,n,o,i)}setSegmentLocked(e,t,n){this._setSegmentLockedStatus(e,t,n)}toggleSegmentLocked(e,t){const n=l.segmentation.segmentLocking.isSegmentIndexLocked(e,t);this._setSegmentLockedStatus(e,t,!n)}toggleSegmentVisibility(e,t,n,o){const i=l.segmentation.config.visibility.getSegmentIndexVisibility(e,{segmentationId:t,type:o},n);this._setSegmentVisibility(e,t,n,!i,o)}setSegmentColor(e,t,n,o){l.segmentation.config.color.setSegmentIndexColor(e,t,n,o)}getSegmentColor(e,t,n){return l.segmentation.config.color.getSegmentIndexColor(e,t,n)}getLabelmapVolume(e){const t=l.segmentation.state.getSegmentation(e).representationData[ke.SegmentationRepresentations.Labelmap];if(!t||!t.volumeId)return null;const{volumeId:n}=t;return s.cache.getVolume(n)}setSegmentLabel(e,t,n){this._setSegmentLabel(e,t,n)}setActiveSegment(e,t){this._setActiveSegment(e,t)}setRenderInactiveSegmentations(e,t){l.segmentation.config.style.setRenderInactiveSegmentations(e,t)}getRenderInactiveSegmentations(e){return l.segmentation.config.style.getRenderInactiveSegmentations(e)}setSegmentationGroupStats(e,t){const n=this.getGroupId(e);this._segmentationGroupStatsMap.set(n,t)}getSegmentationGroupStats(e){const t=this.getGroupId(e);return this._segmentationGroupStatsMap.get(t)}getGroupId(e){return e.sort().join(",")}clearSegmentationRepresentations(e){this.removeSegmentationRepresentations(e)}remove(e){l.segmentation.state.removeSegmentation(e)}removeAllSegmentations(){l.segmentation.state.removeAllSegmentations()}removeSegmentationRepresentations(e,t={}){l.segmentation.removeSegmentationRepresentations(e,t)}jumpToSegmentCenter(e,t,n,o=.9,i=!0,a=750,r=!1,l="ease-in-out"){const c=this._getSegmentCenter(e,t);if(!c)return void console.warn("No center found for segmentation",e,t);const{world:d}=c;(n?[n]:this.getViewportIdsWithSegmentation(e)).forEach((n=>{const{viewport:l}=(0,s.getEnabledElementByViewportId)(n);l.jumpToWorld(d),i&&this.highlightSegment(e,t,n,o,a,r)}))}highlightSegment(e,t,n,o=.9,i=750,a=!0,r="ease-in-out"){this.highlightIntervalId&&clearInterval(this.highlightIntervalId);const s=this.getCornerstoneSegmentation(e);(n?[n]:this.getViewportIdsWithSegmentation(e)).forEach((n=>{const r=this.getSegmentationRepresentations(n,{segmentationId:e})[0],{type:l}=r,c=s.segments;(l===Kn?this._highlightLabelmap.bind(this):this._highlightContour.bind(this))(t,l===Kn?o:1-o,a,c,n,i,r)}))}getAndValidateViewport(e){const t=this.servicesManager.services.cornerstoneViewportService.getCornerstoneViewport(e);return t||(console.warn(`Viewport with id ${e} not found.`),null)}_setSegmentationRepresentationVisibility(e,t,n,o){this.getSegmentationRepresentations(e,{segmentationId:t,type:n})[0]?l.segmentation.config.visibility.setSegmentationRepresentationVisibility(e,{segmentationId:t,type:n},o):console.debug("No segmentation representation found for the given viewportId and segmentationId")}determineViewportAndSegmentationType(e,t){return{isVolumeViewport:e.type===Wn.ViewportType.ORTHOGRAPHIC||e.type===Wn.ViewportType.VOLUME_3D,isVolumeSegmentation:"volumeId"in t.representationData[Kn]}}async handleViewportConversion(e,t,n,o,i,a,r){let s=r,l=!1;const c=e?this.handleVolumeViewportCase:this.handleStackViewportCase;return({representationTypeToUse:s,isConverted:l}=await c.apply(this,[n,o,t,i,a])),{representationTypeToUse:s,isConverted:l}}async handleVolumeViewportCase(e,t,n){return e.type===Wn.ViewportType.VOLUME_3D?{representationTypeToUse:ke.SegmentationRepresentations.Surface,isConverted:!1}:(await this.handleVolumeViewport(e,t,n),{representationTypeToUse:ke.SegmentationRepresentations.Labelmap,isConverted:!1})}async handleStackViewportCase(e,t,n,o,i){if(n){const t=await this.convertStackToVolumeViewport(e);return{representationTypeToUse:ke.SegmentationRepresentations.Labelmap,isConverted:t}}if((0,Hn.t)(o,i))return{representationTypeToUse:ke.SegmentationRepresentations.Labelmap,isConverted:!1};const a=await this.attemptStackToVolumeConversion(e,t,o,i);return{representationTypeToUse:ke.SegmentationRepresentations.Labelmap,isConverted:a}}async _addSegmentationRepresentation(e,t,n,o,i,a){const r={type:n,segmentationId:t,config:{colorLUTOrIndex:o,...a}},s=()=>l.segmentation.addSegmentationRepresentations(e,[r]);if(i){const{viewportGridService:e}=this.servicesManager.services;await new Promise((t=>{const{unsubscribe:n}=e.subscribe(e.EVENTS.GRID_STATE_CHANGED,(()=>{s(),n(),t()}))}))}else s()}async handleVolumeViewport(e,t,n){if(n)return;const o=e.getFrameOfReferenceUID(),i=(0,Jn.getLabelmapImageIds)(t.segmentationId),a=s.cache.getImage(i[0]);a?.FrameOfReferenceUID===o&&await(0,Yn.p)(t)}async convertStackToVolumeViewport(e){const{viewportGridService:t,cornerstoneViewportService:n}=this.servicesManager.services,o=t.getState().viewports.get(e.id),i=e.getViewPresentation(),a=e.getViewReference(),r=n.getCornerstoneViewport(e.id),{element:l}=r,c=()=>{const t=n.getCornerstoneViewport(e.id);t.setViewPresentation(i),t.setViewReference(a),t.render(),l.removeEventListener(s.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,c)};return l.addEventListener(s.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,c),t.setDisplaySetsForViewport({viewportId:e.id,displaySetInstanceUIDs:o.displaySetInstanceUIDs,viewportOptions:{...o.viewportOptions,viewportType:Wn.ViewportType.ORTHOGRAPHIC}}),!0}async attemptStackToVolumeConversion(e,t,n,o){const i=(0,Jn.getLabelmapImageIds)(t.segmentationId),a=e.getFrameOfReferenceUID(),r=s.cache.getImage(i[0]);if(r?.FrameOfReferenceUID&&a&&r.FrameOfReferenceUID===a){const t=await this.convertStackToVolumeViewport(e);return(0,qn.triggerSegmentationRepresentationModified)(n,o,ke.SegmentationRepresentations.Labelmap),t}}addSegmentationToSource(e){l.segmentation.addSegmentations([e])}updateSegmentationInSource(e,t){l.segmentation.updateSegmentations([{segmentationId:e,payload:t}])}_toOHIFSegmentationRepresentation(e,t){const{segmentationId:n,type:o,active:i,visible:a}=t,{colorLUTIndex:r}=t,s={},c=l.segmentation.state.getSegmentation(n);if(!c)throw new Error(`Segmentation with ID ${n} not found.`);const d=Object.keys(c.segments);for(const t of d){const i=parseInt(t,10),a=l.segmentation.config.color.getSegmentIndexColor(e,n,i),r=l.segmentation.config.visibility.getSegmentIndexVisibility(e,{segmentationId:n,type:o},i);s[i]={color:a,segmentIndex:i,opacity:a[3],visible:r}}const m=l.segmentation.config.style.getStyle({viewportId:e,segmentationId:n,type:o});return{id:`${n}-${o}-${e}`,segmentationId:n,label:c.label,active:i,type:o,visible:a,segments:s,styles:m,viewportId:e,colorLUTIndex:r,config:{}}}_initSegmentationService(){s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_MODIFIED,this._onSegmentationModifiedFromSource),s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_REMOVED,this._onSegmentationModifiedFromSource),s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_DATA_MODIFIED,this._onSegmentationDataModifiedFromSource),s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_REPRESENTATION_MODIFIED,this._onSegmentationRepresentationModifiedFromSource),s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_REPRESENTATION_ADDED,this._onSegmentationRepresentationModifiedFromSource),s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_REPRESENTATION_REMOVED,this._onSegmentationRepresentationModifiedFromSource),s.eventTarget.addEventListener(l.Enums.Events.SEGMENTATION_ADDED,this._onSegmentationAddedFromSource)}getCornerstoneSegmentation(e){return l.segmentation.state.getSegmentation(e)}_highlightLabelmap(e,t,n,o,i,a,r){const{segmentationId:s}=r;if(n)throw new Error("hideOthers is not working right now");const{fillAlpha:c}=this.getStyle({viewportId:i,segmentationId:s,type:Kn,segmentIndex:e});let d=null;const m=t=>{null===d&&(d=t);const n=t-d,o=Math.min(n/a,1);l.segmentation.config.style.setStyle({segmentationId:s,segmentIndex:e,type:Kn},{fillAlpha:kn(o,c)}),o<1?requestAnimationFrame(m):l.segmentation.config.style.setStyle({segmentationId:s,segmentIndex:e,type:Kn},{})};requestAnimationFrame(m)}_highlightContour(e,t,n,o,i,a,r){const{segmentationId:s}=r,c=performance.now(),d=l.segmentation.config.style.getStyle({type:Qn}).outlineWidth,m=Math.max(3.5*d,5),p=t=>{const n=(t-c)/a;if(n>=1)return void l.segmentation.config.style.resetToGlobalStyle();const o=zn(n,m,d);l.segmentation.config.style.setStyle({segmentationId:s,segmentIndex:e,type:Qn},{outlineWidth:o}),requestAnimationFrame(p)};requestAnimationFrame(p)}_setActiveSegment(e,t){l.segmentation.segmentIndex.setActiveSegmentIndex(e,t)}_getVolumeIdForDisplaySet(e){return`${e.volumeLoaderSchema??"cornerstoneStreamingImageVolume"}:${e.displaySetInstanceUID}`}_getSegmentCenter(e,t){const n=this.getSegmentation(e);if(!n)return;const{segments:o}=n,{cachedStats:i}=o[t];if(!i)return;const{center:a}=i;return a||{world:i.namedStats.center.value}}_setSegmentLockedStatus(e,t,n){l.segmentation.segmentLocking.setSegmentIndexLocked(e,t,n)}_setSegmentVisibility(e,t,n,o,i){l.segmentation.config.visibility.setSegmentIndexVisibility(e,{segmentationId:t,type:i},n,o)}_setSegmentLabel(e,t,n){const o=this.getCornerstoneSegmentation(e),{segments:i}=o;i[t].label=n,l.segmentation.updateSegmentations([{segmentationId:e,payload:{segments:i}}])}}Bn=Xn,Xn.REGISTRATION={name:"segmentationService",altName:"SegmentationService",create:({servicesManager:e})=>new Bn({servicesManager:e})};const eo=Xn;var to,no=n(23672);const oo="cornerstoneStreamingImageVolume";class io{constructor(e){this.stackImageIds=new Map,this.volumeImageIds=new Map,this.servicesManager=void 0,this.servicesManager=e}getCacheSize(){return s.cache.getCacheSize()}getCacheFreeSpace(){return s.cache.getBytesAvailable()}async createViewportData(e,t,n,o){const i=t.viewportType,a=(0,no.A)(i,e);let r;return r=a===s.Enums.ViewportType.ORTHOGRAPHIC||a===s.Enums.ViewportType.VOLUME_3D?await this._getVolumeViewportData(n,e,a):a===s.Enums.ViewportType.STACK?await this._getStackViewportData(n,e,o,a):await this._getOtherViewportData(n,e,o,a),r.viewportType=a,r}async invalidateViewportData(e,t,n,o){if(e.viewportType===s.Enums.ViewportType.STACK){const e=o.getDisplaySetByUID(t),i=this._getCornerstoneStackImageIds(e,n);return i.forEach((e=>{s.cache.getImageLoadObject(e)&&s.cache.removeImageLoadObject(e)})),{viewportType:s.Enums.ViewportType.STACK,data:{StudyInstanceUID:e.StudyInstanceUID,displaySetInstanceUID:t,imageIds:i}}}const i=`${oo}:${t}`,a=s.cache.getVolume(i);a&&(a.imageIds&&a.imageIds.forEach((e=>{s.cache.getImageLoadObject(e)&&s.cache.removeImageLoadObject(e)})),s.cache._volumeCache.delete(i),this.volumeImageIds.delete(i));const r=e.data.map((({displaySetInstanceUID:e})=>o.getDisplaySetByUID(e)));return await this._getVolumeViewportData(n,r,e.viewportType)}async _getOtherViewportData(e,t,n,o){const[i]=t;i.imageIds||(i.imagesIds=this._getCornerstoneStackImageIds(i,e));const{imageIds:a,viewportType:r}=i;return{viewportType:r||o,data:t}}async _getStackViewportData(e,t,n,o){const{uiNotificationService:i}=this.servicesManager.services,a=t.filter((e=>e.isOverlayDisplaySet));for(const e of a)if(e.load&&e.load instanceof Function){const{userAuthenticationService:t}=this.servicesManager.services,n=t.getAuthorizationHeader();try{await e.load({headers:n})}catch(e){i.show({title:"Error loading displaySet",message:e.message,type:"error"}),console.error(e)}}const r=[];for(const o of t){const{displaySetInstanceUID:t,StudyInstanceUID:a,isCompositeStack:s}=o;if(o.load&&o.load instanceof Function){const{userAuthenticationService:e}=this.servicesManager.services,t=e.getAuthorizationHeader();try{await o.load({headers:t})}catch(e){i.show({title:"Error loading displaySet",message:e.message,type:"error"}),console.error(e)}}let l=this.stackImageIds.get(o.displaySetInstanceUID);l||(l=this._getCornerstoneStackImageIds(o,e),o.imageIds=l,this.stackImageIds.set(o.displaySetInstanceUID,l)),r.push({StudyInstanceUID:a,displaySetInstanceUID:t,isCompositeStack:s,imageIds:l,initialImageIndex:n})}return{viewportType:o,data:r}}async _getVolumeViewportData(e,t,n){const o=[];for(const n of t){const{Modality:t}=n,i="PMAP"===t,a="SEG"===t;if(n.load&&n.load instanceof Function){const{userAuthenticationService:e}=this.servicesManager.services,t=e.getAuthorizationHeader();try{await n.load({headers:t})}catch(e){const{uiNotificationService:t}=this.servicesManager.services;t.show({title:"Error loading displaySet",message:e.message,type:"error"}),console.error(e)}if(!i){o.push({studyInstanceUID:n.StudyInstanceUID,displaySetInstanceUID:n.displaySetInstanceUID});continue}}const r=`${n.volumeLoaderSchema??oo}:${n.displaySetInstanceUID}`;let l=this.volumeImageIds.get(n.displaySetInstanceUID),c=s.cache.getVolume(r);i||a||l&&c||(l=this._getCornerstoneVolumeImageIds(n,e),c=await s.volumeLoader.createAndCacheVolume(r,{imageIds:l}),this.volumeImageIds.set(n.displaySetInstanceUID,l),n.imageIds=l),o.push({StudyInstanceUID:n.StudyInstanceUID,displaySetInstanceUID:n.displaySetInstanceUID,volume:c,volumeId:r,imageIds:l,isDynamicVolume:n.isDynamicVolume})}return{viewportType:n,data:o}}_getCornerstoneStackImageIds(e,t){return t.getImageIdsForDisplaySet(e)}_getCornerstoneVolumeImageIds(e,t){if(e.imageIds)return e.imageIds;return this._getCornerstoneStackImageIds(e,t)}}to=io,io.REGISTRATION={name:"cornerstoneCacheService",altName:"CornerstoneCacheService",create:({servicesManager:e})=>new to(e)};const ao=io;var ro=n(11794),so=n(47294);let lo=function(e){return e.Removed="removed",e.Added="added",e.Modified="modified",e}({});var co;const{ViewportColorbar:mo}=l.utilities.voi.colorbar;class po extends p.Rc{constructor(){super(po.EVENTS),this.colorbars={}}getVolumeIdForIdentifier(e,t){const n=e.getAllVolumeIds?.()||[];return n.length>0&&n.find((e=>e.includes(t)))||null}addColorbar(e,t,n={}){const o=(0,s.getRenderingEngine)(so.C).getViewport(e);if(!o)return;const{element:i}=o,a=o.getActors();if(!a||0===a.length)return;const{position:r,width:l,activeColormapName:c,colormaps:d}=n,m=t.length,p=this.createContainers(m,i,r,l,e);t.forEach(((t,a)=>{const r=this.getVolumeIdForIdentifier(o,t),l=o?.getProperties(r),m=l?.colormap;c&&!m&&this.setViewportColormap(e,t,d[c],!0);const u=p[a],g=new mo({id:`ctColorbar-${e}-${a}`,element:i,colormaps:n.colormaps||{},activeColormapName:m?.name||n?.activeColormapName||"Grayscale",container:u,ticks:{...po.defaultTickStyles,...n.ticks},volumeId:o instanceof s.VolumeViewport?r:void 0});this.colorbars[e]?this.colorbars[e].push({colorbar:g,container:u}):this.colorbars[e]=[{colorbar:g,container:u}]})),this._broadcastEvent(po.EVENTS.STATE_CHANGED,{viewportId:e,changeType:lo.Added})}removeColorbar(e){const t=this.colorbars[e];t&&(t.forEach((({colorbar:e,container:t})=>{t.parentNode.removeChild(t)})),delete this.colorbars[e],this._broadcastEvent(po.EVENTS.STATE_CHANGED,{viewportId:e,changeType:lo.Removed}))}hasColorbar(e){return!!this.colorbars[e]}getState(){return this.colorbars}getViewportColorbar(e){return this.colorbars[e]}onModeExit(){Object.keys(this.colorbars).forEach((e=>{this.removeColorbar(e)}))}setViewportColormap(e,t,n,o=!1){const i=(0,s.getRenderingEngine)(so.C).getViewport(e),a=i?.getActors();if(!i||!a||0===a.length)return;const r=(e,t)=>{const o=this.getVolumeIdForIdentifier(e,t);e.setProperties({colormap:n},o)};i instanceof s.StackViewport&&r(i,e),i instanceof s.VolumeViewport&&r(i,t),o&&i.render()}createContainers(e,t,n,o,i){const a=[],r={1:50,2:33}[e]||50/e;return Array.from({length:e}).forEach(((e,s)=>{const l=document.createElement("div");l.id=`ctColorbarContainer-${i}-${s+1}`,Object.assign(l.style,po.defaultStyles),["top","bottom"].includes(n)?Object.assign(l.style,{width:`${r}%`,height:o||"2.5%",left:(s+1)*r+"%",transform:"translateX(-50%)",...po.positionStyles[n]}):["left","right"].includes(n)&&Object.assign(l.style,{height:`${r}%`,width:o||"2.5%",top:(s+1)*r+"%",transform:"translateY(-50%)",...po.positionStyles[n]}),t.appendChild(l),a.push(l)})),a}}co=po,po.EVENTS={STATE_CHANGED:"event::ColorbarService:stateChanged"},po.defaultStyles={position:"absolute",boxSizing:"border-box",border:"solid 1px #555",cursor:"initial"},po.positionStyles={left:{left:"5%"},right:{right:"5%"},top:{top:"5%"},bottom:{bottom:"5%"}},po.defaultTickStyles={position:"left",style:{font:"12px Arial",color:"#fff",maxNumTicks:8,tickSize:5,tickWidth:1,labelMargin:3}},po.REGISTRATION={name:"colorbarService",create:()=>new co};const uo=po;var go=n(83562);const So=e=>{if(e)return"function"==typeof e.getImageId?e.getImageId():e.url},Io=e=>(Array.isArray(e)?e:[e]).some((e=>!e)),vo=e=>e&&e.images&&e.images[0],yo=e=>So(e),ho=(e,t=p.ll.getAuthorizationHeader())=>fetch(e,t).then((e=>e.arrayBuffer())),fo=e=>s.imageLoader.loadAndCacheImage(e).then((e=>e&&e.data&&e.data.byteArray.buffer)),wo=(e,t,n,o,i=p.ll.getAuthorizationHeader(),a=p.r_.getHTTPErrorHandler())=>{const r={url:e,headers:i,errorInterceptor:a};return new go.FH.DICOMwebClient(r).retrieveInstance({studyInstanceUID:t,seriesInstanceUID:n,sopInstanceUID:o})};const Eo=new class{getLocalData(e,t){const n=vo(e),o=(e=>e&&e.instance)(e);if(!n&&!o||!o.imageId?.startsWith("dicomfile"))return;let i=yo(n||o);return Io(i)&&(i=((e,t)=>{const n=e.find((e=>e.displaySets.some((e=>e.displaySetInstanceUID===t)))),{series:o=[]}=n,{instances:i=[]}=o[0]||{},a=i[0];return So(a)})(t,e.displaySetInstanceUID)),Io(i)?void 0:S.Ay.wadouri.loadFileRequest(i)}getDataByImageType(e){const t=vo(e);if(t){const e=yo(t);let n=ho;const o=(e=>{const t=/^\w+\:/,n=t.exec(e);return 0===t.lastIndex&&n&&n[0]&&n[0].replace(":","")||""})(e);switch(o){case"dicomfile":n=fo.bind(this,e);break;case"wadors":const o=t.getData().wadoRoot,i=t.getStudyInstanceUID(),a=t.getSeriesInstanceUID(),r=t.getSOPInstanceUID();if(Io([o,i,a,r]))return;n=wo.bind(this,o,i,a,r);break;case"wadouri":if(e=e.substring(e.indexOf(":")+1),Io(e))return;n=ho.bind(this,e);break;default:return}return n()}}getDataByDatasetType(e){const{StudyInstanceUID:t,SeriesInstanceUID:n,SOPInstanceUID:o,authorizationHeaders:i,wadoRoot:a,wadoUri:r,instance:s}=e;if(!Io(a))return wo(a,t,n,o,i);if(!Io(r))return ho(r,{headers:i});if(!Io(s?.url)){const e=s.url,t=e.startsWith("http")?e:e.substring(e.indexOf(":")+1);return ho(t,{headers:i})}}*getLoaderIterator(e,t,n){yield this.getLocalData(e,t),yield this.getDataByImageType(e),yield this.getDataByDatasetType(e)}findDicomDataPromise(e,t,n){e.authorizationHeaders=n;const o=this.getLoaderIterator(e,t);for(const e of o)if(e)return e;throw new Error("Invalid dicom data loader")}},To=JSON.parse('{"UU":"@ohif/extension-cornerstone"}').UU;var bo=n(76255);const Do=(e,t,n)=>{const o=(0,s.getRenderingEngine)(n.renderingEngineId);if(!o)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const i=o.getViewport(t.viewportId),{viewportIndex:a}=e.getOptions(n.viewportId),{viewportIndex:r}=e.getOptions(t.viewportId);if(void 0===a||void 0===r)throw new Error("No viewportIndex provided");const l=o.getViewport(n.viewportId),c=i.getSliceIndex()+(Number(a)-Number(r));c!==l.getSliceIndex()&&s.utilities.jumpToSlice(l.element,{imageIndex:c})},Co=e=>l.SynchronizerManager.createSynchronizer(e,s.EVENTS.CAMERA_MODIFIED,Do);var Oo=n(5842);const{MetadataModules:Mo}=s.Enums,{utils:No}=p.Ay,{denaturalizeDataset:Vo}=Oo.Ay.data.DicomMetaDictionary,{transferDenaturalizedDataset:Ro,fixMultiValueKeys:Ao}=h.dicomWebUtils,Uo={VL_WHOLE_SLIDE_MICROSCOPY_IMAGE_STORAGE:"1.2.840.10008.5.1.4.1.1.77.1.6"},Po="@ohif/extension-cornerstone.sopClassHandlerModule.DicomMicroscopySopClassHandler";function xo(e,t,n){if(!e||!e.length)throw new Error("No instances were provided");const o=e[0];let i=o,a=+i.NumberOfFrames||1;for(const t of e){const e=+t.NumberOfFrames||1;e<a&&(i=t,a=e)}let r=null;const l=n.getActiveDataSource()[0];i&&(1==a&&(r=i.imageId),r||(r=l.getImageIdsForInstance({instance:i,thumbnail:!0})));const{FrameOfReferenceUID:c,SeriesDescription:d,ContentDate:m,ContentTime:p,SeriesNumber:u,StudyInstanceUID:g,SeriesInstanceUID:S,SOPInstanceUID:I,SOPClassUID:v}=o,y=(e=e.map((e=>(e.FrameOfReferenceUID=o.FrameOfReferenceUID,e)))).filter((e=>e)).map((e=>e.FrameOfReferenceUID)).filter(((e,t,n)=>n.indexOf(e)===t));y.length>1&&console.warn("Expected FrameOfReferenceUID of difference instances within a series to be the same, found multiple different values",y);const h={plugin:"microscopy",Modality:"SM",viewportType:s.Enums.ViewportType.WHOLE_SLIDE,altImageText:"Microscopy",displaySetInstanceUID:No.guid(),SOPInstanceUID:I,SeriesInstanceUID:S,StudyInstanceUID:g,FrameOfReferenceUID:c,SOPClassHandlerId:Po,SOPClassUID:v,SeriesDescription:d||"Microscopy Data",SeriesDate:m,SeriesTime:p,SeriesNumber:u,firstInstance:i,instance:o,numImageFrames:0,numInstances:1,imageIdForThumbnail:r,others:e,instances:e,othersFrameOfReferenceUID:y,imageIds:e.map((e=>e.imageId))},f=l.retrieve.getWadoDicomWebClient?.(),w=new Map;if(e.forEach((e=>w.set(e.imageId,e))),f){const e=Object.create(f);e.getDICOMwebMetadata=Fo.bind(e,w),s.utilities.genericMetadataProvider.addRaw(h.imageIds[0],{type:Mo.WADO_WEB_CLIENT,metadata:e})}return[h]}function Fo(e,t){return e.get(t)?Ro(Vo(Ao(e.get(t)))):(console.warn("Metadata not already found for",t,"in",e),this.super.getDICOMwebMetadata(t))}function _o({servicesManager:e,extensionManager:t}){return{name:"DicomMicroscopySopClassHandler",sopClassUids:[Uo.VL_WHOLE_SLIDE_MICROSCOPY_IMAGE_STORAGE],getDisplaySetsFromSeries:e=>xo(e,0,t)}}var Lo=n(62051),Go=n.n(Lo);const ko=["SM","OT","DOC","ECG"];function zo(e,t){const{label:n,segments:o}=e,i=t.getCustomization("panelSegmentation.readableText");function a(e,t=0){const n=[],o=" ".repeat(t);for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)){const s=e[r],l=i?.[r];if(!l)continue;"object"!=typeof s||null===s||Array.isArray(s)?n.push(`${o}${l}: ${(0,C.Wf)(s,2)}`):(n.length>0&&n.push(""),n.push(`${o}${l}`),n.push(...a(s,t+1)))}return n}const r=e=>{const t={primary:[],secondary:[]};if(e.cachedStats){const n=a(e.cachedStats);t.primary=n}return t},s={};return Object.entries(o).forEach((([e,t])=>{s[e]={...t,displayText:r(t)}})),{...e,label:n,segments:s}}function Bo({servicesManager:e,subscribeToDataModified:t=!1,debounceTime:n=0}){const{segmentationService:o,viewportGridService:i,customizationService:a,displaySetService:s}=e.services,[l,c]=(0,r.useState)({segmentationsWithRepresentations:[],disabled:!1});return(0,r.useEffect)((()=>{const e=()=>{const e=i.getActiveViewportId(),t=i.getDisplaySetsUIDsForViewport(e);if(!t?.length)return;const n=s.getDisplaySetByUID(t[0]);if(!n)return;if(ko.includes(n.Modality))return void c((e=>({segmentationsWithRepresentations:[],disabled:!0})));const r=o.getSegmentations();if(!r?.length)return void c((e=>({segmentationsWithRepresentations:[],disabled:!1})));const l=o.getSegmentationRepresentations(e).map((e=>({representation:e,segmentation:zo(o.getSegmentation(e.segmentationId),a)})));c({segmentationsWithRepresentations:l,disabled:!1})},r=n>0?Go()(e,n,{leading:!0,trailing:!0}):e;e();const l=[o.subscribe(o.EVENTS.SEGMENTATION_MODIFIED,r),o.subscribe(o.EVENTS.SEGMENTATION_REMOVED,r),o.subscribe(o.EVENTS.SEGMENTATION_REPRESENTATION_MODIFIED,r),i.subscribe(i.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED,r),i.subscribe(i.EVENTS.GRID_STATE_CHANGED,r)];return t&&l.push(o.subscribe(o.EVENTS.SEGMENTATION_DATA_MODIFIED,r)),()=>{l.forEach((e=>e.unsubscribe())),n>0&&r.cancel()}}),[o,i,a,s,n,t]),l}function $o(e,{measurementFilter:t}){const{measurementService:n,displaySetService:o}=e.services,[i,a]=(0,r.useState)([]);return(0,r.useEffect)((()=>{const e=()=>{const e=n.getMeasurements(t).map((e=>function(e,t){const{referenceSeriesUID:n}=e,o=t.getDisplaySetsForSeries(n);if(!o[0]?.instances)throw new Error('The tracked measurements panel should only be tracking "stack" displaySets.');const{findingSites:i,finding:a,label:r,displayText:s}=e,l=i?.[0],c=r||a?.text||l?.text||"(empty)",d={primary:[],secondary:s?.secondary||[]};return s&&d.primary.push(...s.primary),i&&i.forEach((e=>{e?.text&&e.text!==c&&d.primary.push(e.text)})),a&&a.text&&a.text!==c&&d.primary.push(a.text),{...e,displayText:d,label:c}}(e,o)));a((t=>JSON.stringify(t)!==JSON.stringify(e)?e:t))},i=Go()(e,100);e();const r=[n.EVENTS.MEASUREMENT_ADDED,n.EVENTS.RAW_MEASUREMENT_ADDED,n.EVENTS.MEASUREMENT_UPDATED,n.EVENTS.MEASUREMENT_REMOVED,n.EVENTS.MEASUREMENTS_CLEARED].map((e=>n.subscribe(e,i).unsubscribe));return()=>{r.forEach((e=>e())),i.cancel()}}),[n,t,o]),i}function jo({children:e}){const{commandsManager:t,servicesManager:n}=(0,p.Jg)(),{customizationService:o,displaySetService:i}=n.services,{segmentationsWithRepresentations:a,disabled:l}=Bo({servicesManager:n}),c=o.getCustomization("panelSegmentation.tableMode"),d=o.getCustomization("panelSegmentation.onSegmentationAdd"),m=o.getCustomization("panelSegmentation.disableEditing"),u=o.getCustomization("panelSegmentation.showAddSegment"),g=o.getCustomization("panelSegmentation.customDropdownMenuContent"),S=o.getCustomization("panelSegmentation.customSegmentStatisticsHeader"),I={onSegmentationClick:e=>{t.run("setActiveSegmentation",{segmentationId:e})},onSegmentAdd:e=>{t.run("addSegment",{segmentationId:e})},onSegmentClick:(e,n)=>{t.run("setActiveSegmentAndCenter",{segmentationId:e,segmentIndex:n})},onSegmentEdit:(e,n)=>{t.run("editSegmentLabel",{segmentationId:e,segmentIndex:n})},onSegmentationEdit:e=>{t.run("editSegmentationLabel",{segmentationId:e})},onSegmentColorClick:(e,n)=>{t.run("editSegmentColor",{segmentationId:e,segmentIndex:n})},onSegmentDelete:(e,n)=>{t.run("deleteSegment",{segmentationId:e,segmentIndex:n})},onToggleSegmentVisibility:(e,n,o)=>{t.run("toggleSegmentVisibility",{segmentationId:e,segmentIndex:n,type:o})},onToggleSegmentLock:(e,n)=>{t.run("toggleSegmentLock",{segmentationId:e,segmentIndex:n})},onToggleSegmentationRepresentationVisibility:(e,n)=>{t.run("toggleSegmentationVisibility",{segmentationId:e,type:n})},onSegmentationDownload:e=>{t.run("downloadSegmentation",{segmentationId:e})},setStyle:(e,n,o,i)=>{t.run("setSegmentationStyle",{segmentationId:e,type:n,key:o,value:i})},toggleRenderInactiveSegmentations:()=>{t.run("toggleRenderInactiveSegmentations")},onSegmentationRemoveFromViewport:e=>{t.run("removeSegmentationFromViewport",{segmentationId:e})},onSegmentationDelete:e=>{t.run("deleteSegmentation",{segmentationId:e})},setFillAlpha:({type:e},n)=>{t.run("setFillAlpha",{type:e,value:n})},setOutlineWidth:({type:e},n)=>{t.run("setOutlineWidth",{type:e,value:n})},setRenderFill:({type:e},n)=>{t.run("setRenderFill",{type:e,value:n})},setRenderOutline:({type:e},n)=>{t.run("setRenderOutline",{type:e,value:n})},setFillAlphaInactive:({type:e},n)=>{t.run("setFillAlphaInactive",{type:e,value:n})},getRenderInactiveSegmentations:()=>t.run("getRenderInactiveSegmentations")},v=a.map((({segmentation:e})=>{const{representationData:t,segmentationId:n}=e,{Labelmap:o}=t;if(!o)return{segmentationId:n,isExportable:!0};const a=o.referencedImageIds[0],r=s.metaData.get("instance",a);if(!r)return{segmentationId:n,isExportable:!1};const l=r.SOPInstanceUID||r.SopInstanceUID,c=r.SeriesInstanceUID,d=i.getDisplaySetForSOPInstanceUID(l,c);return{segmentationId:n,isExportable:d?.isReconstructable}})),y={disabled:l,data:a,mode:c,title:"Segmentations",exportOptions:v,disableEditing:m,onSegmentationAdd:d,showAddSegment:u,renderInactiveSegmentations:I.getRenderInactiveSegmentations(),...I},h=()=>r.createElement(Ze.R4h.Segments,null,r.createElement(Ze.R4h.SegmentStatistics.Header,null,r.createElement(S,null)),r.createElement(Ze.R4h.SegmentStatistics.Body,null));return r.createElement(Ze.R4h,y,e,r.createElement(Ze.R4h.Config,null),r.createElement(Ze.R4h.AddSegmentationRow,null),"collapsed"===y.mode?r.createElement(Ze.R4h.Collapsed,null,r.createElement(Ze.R4h.Collapsed.Header,null,r.createElement(Ze.R4h.Collapsed.DropdownMenu,null,r.createElement(g,null)),r.createElement(Ze.R4h.Collapsed.Selector,null),r.createElement(Ze.R4h.Collapsed.Info,null)),r.createElement(Ze.R4h.Collapsed.Content,null,r.createElement(Ze.R4h.AddSegmentRow,null),h())):r.createElement(r.Fragment,null,r.createElement(Ze.R4h.Expanded,null,r.createElement(Ze.R4h.Expanded.Header,null,r.createElement(Ze.R4h.Expanded.DropdownMenu,null,r.createElement(g,null)),r.createElement(Ze.R4h.Expanded.Label,null),r.createElement(Ze.R4h.Expanded.Info,null)),r.createElement(Ze.R4h.Expanded.Content,null,r.createElement(Ze.R4h.AddSegmentRow,null),h()))))}var Wo=n(660);const Ho=(0,s.getWebWorkerManager)(),qo={maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:1e3}},Yo=()=>new Worker(new URL(n.p+n.u(3054),n.b),{name:"histogram-worker"}),Jo=(e,t)=>{const n=[];return e.getProperty().getScalarOpacity(0).getNodeValue(t,n),n[1]},Ko=async(e,t,n)=>{if(!e)return[];const o=e.getAllVolumeIds(),i=e.getProperties(),{voiRange:a}=i,r=a?{windowWidth:a.upper-a.lower,windowCenter:a.lower+(a.upper-a.lower)/2}:void 0,l=await Promise.all(o.map((async(o,i)=>{const a=s.cache.getVolume(o),l=n(e,o),{metadata:c,scaling:d}=a,m=c.Modality,p={min:"PT"===m?.1:-999,max:"PT"===m?5:1e4},u=await(async(e,t,n)=>{if(Ho.registerWorker("histogram-worker",Yo,qo),!e.getImageData(t.volumeId))return;let o=t.scalarData;if(t.numTimePoints>1){const e=t.numTimePoints-1;o=t.voxelManager.getTimePointScalarData(e)}else o=t.voxelManager.getCompleteScalarDataArray();if(!o?.length)return;const{dimensions:i,origin:a,direction:r,spacing:s}=t,l=await Ho.executeTask("histogram-worker","getRange",{dimensions:i,origin:a,direction:r,spacing:s,scalarData:o}),{minimum:c,maximum:d}=l;if(c===1/0||d===-1/0)return;const m={numBins:256,min:Math.max(c,n?.min??c),max:Math.min(d,n?.max??d)};return await Ho.executeTask("histogram-worker","calcHistogram",{data:o,options:m})})(e,a,p);if(!u||u.range.min===u.range.max)return null;if(!t.displaySetOptions||!t.displaySetOptions[i])return null;const{voi:g,colormap:S}=t.displaySetOptions[i];let I;S&&(I=s.utilities.colormap.getColormap(S.name)??Wo.A.getPresetByName(S.name));const v=i?g:r??g;return{viewportId:t.viewportId,modality:m,volumeId:o,volumeIndex:i,voi:v,histogram:u,colormap:I,step:d?.PT?.05:1,opacity:l,showOpacitySlider:1===i&&void 0!==l}})));return l.filter(Boolean)},{Events:Qo}=s.Enums,Zo=({servicesManager:e,viewportId:t})=>{const{cornerstoneViewportService:n}=e.services,[o,i]=(0,r.useState)([]),[a,l]=(0,r.useState)(!0),c=(0,p.BZ)({servicesManager:e}),d=(0,r.useCallback)((e=>n.getRenderingEngine().getVolumeViewports().filter((t=>{const n=t.getActors().map((e=>e.referencedId));return e.length===n.length&&e.every((e=>n.includes(e)))}))),[n]),m=(0,r.useCallback)(((e,t)=>{const n=e.getActors().find((e=>e.referencedId===t))?.actor;return((e,t)=>{const n=s.cache.getVolume(e);if(!n||"PT"!==n.metadata.Modality)return!1;const o=t.getProperty().getScalarOpacity(0);if(o.getSize()<2)return!1;const i=[],a=[];if(o.getNodeValue(0,i),o.getNodeValue(1,a),0!==i[0]||0!==i[1]||.1!==a[0])return!1;const r=a[1],l=o.getSize(),c=[];for(let e=2;e<l;e++)if(o.getNodeValue(e,c),c[1]!==r)return!1;return!0})(t,n)?Jo(n,1):(e=>{const t=e.getProperty().getScalarOpacity(0),n=t.getSize(),o=[];t.getNodeValue(0,o);const i=o[1];for(let e=0;e<n;e++){const e=[];if(t.getNodeValue(0,e),e[1]!==i)return!1}return!0})(n)?Jo(n,0):void 0}),[]),u=(0,r.useCallback)((()=>{const e=n.getCornerstoneViewport(t),o=n.getViewportInfo(t);Ko(e,o,m).then((e=>{i(e)}))}),[t,n,m]),g=(0,r.useCallback)((e=>{const{detail:t}=e,{volumeId:n,range:a}=t,r=o.find((e=>e.volumeId===n));if(!r)return;const s=r.voi,l=a.upper-a.lower,c=a.lower+l/2;if(l===s.windowWidth&&c===s.windowCenter)return;const d={...r,voi:{windowWidth:l,windowCenter:c}};i(o.map((e=>e===r?d:e)))}),[o]),S=(0,r.useMemo)((()=>Go()(g,100)),[g]),I=(0,r.useCallback)(((e,o)=>{const i=n.getCornerstoneViewport(t),a={lower:o.windowCenter-o.windowWidth/2,upper:o.windowCenter+o.windowWidth/2};i.setProperties({voiRange:a},e),i.render()}),[n,t]),v=(0,r.useCallback)(((e,t,o,i)=>{const a=n.getCornerstoneViewport(e);if(!a)return;const r=a.getActors().map((e=>e.referencedId));d(r).forEach((e=>{e.setProperties({colormap:{opacity:i}},o),e.render()}))}),[d,n]),y=(0,r.useCallback)((()=>{l(!1),u()}),[u]);(0,r.useEffect)((()=>{document.addEventListener(Qo.VOI_MODIFIED,S,!0),s.eventTarget.addEventListener(Qo.IMAGE_VOLUME_LOADING_COMPLETED,y);const e=setInterval((()=>{a&&u()}),1e3);return()=>{document.removeEventListener(Qo.VOI_MODIFIED,S,!0),s.eventTarget.removeEventListener(Qo.IMAGE_VOLUME_LOADING_COMPLETED,y),clearInterval(e)}}),[u,S,y,a]);const h=(0,r.useMemo)((()=>c?.map((e=>e.displaySetInstanceUID)).sort()||[]),[c]);return(0,r.useEffect)((()=>{const{unsubscribe:e}=n.subscribe(n.EVENTS.VIEWPORT_VOLUMES_CHANGED,(({viewportInfo:e})=>{e.viewportId===t&&u()}));return h.length&&!a&&u(),()=>{e()}}),[t,n,u,h,a]),r.createElement(Ze.aUM,{defaultOpen:!0},r.createElement(Ze.aUM.Header,null,"Window Level"),r.createElement(Ze.aUM.Content,{className:"bg-muted py-1"},o.map(((e,t)=>e.histogram?r.createElement(Ze.bLr,{key:e.volumeId,histogram:e.histogram,voi:e.voi,step:e.step,showOpacitySlider:e.showOpacitySlider,colormap:e.colormap,onVOIChange:t=>I(e.volumeId,t),opacity:e.opacity,onOpacityChange:n=>v(e.viewportId,t,e.volumeId,n)}):null)),0===o.length&&!a&&r.createElement("div",{className:"text-muted-foreground py-2 text-center text-sm"},"No window level data available")))};Zo.propTypes={servicesManager:ut().object.isRequired,viewportId:ut().string.isRequired};const Xo=Zo,ei=({servicesManager:e})=>{const[t]=(0,Ze.ihW)(),{activeViewportId:n}=t;return r.createElement(r.Fragment,null,n&&r.createElement(Xo,{servicesManager:e,viewportId:n}))};ei.propTypes={servicesManager:ut().object.isRequired};const ti=ei;var ni=n(65939);const oi=e=>{const{group:t,allChildren:n,children:o,childType:i,defaultTypes:a}=e,s=t?.subType;for(const t of n)if(!s||t.props?.subType===s){if(i&&t.type===i)return r.cloneElement(t,{...e,children:t.props.children});if(-1===a?.indexOf(t.type))return i({...e,children:t})}if(!o)throw new Error(`No children defined for ${e.name} CloneChildren in group ${t?.name}`);return r.cloneElement(o,e)},ii=[si,li,ci];function ai(e){const{grouping:t,items:n,children:o,sourceChildren:i,type:a}=e,s=(0,p.Jg)();let l=e.defaultValue;const c=t.groupingFunction(n,t,s);if(!l){const e=c.values().find((e=>e.isSelected));l=e?.key||e?.title}const d=Array.isArray(l)&&l||l&&[l]||[],m=i?r.Children.toArray(i):[],u=o?r.Children.toArray(o):[],g=m.concat(u);return r.createElement(oi,{allChildren:g,groups:c,childType:si,grouping:t,defaultValue:d,name:"grouping "+t.name},r.createElement(ri,{name:"DefaultAccordion"}))}function ri(e){const{groups:t,defaultValue:n,grouping:o,allChildren:i,asChild:a}=e;return i&&t?Boolean(a)?r.cloneElement(e.children,e):r.createElement(Ze.nD3,{type:o.type||"multiple",className:"text-white",defaultValue:n},[...t.entries()].map((([e,t])=>r.createElement(Ze.AsP,{key:t.key+"-i",value:t.key},r.createElement(oi,{allChildren:i,group:t,childType:ci,name:"AccordionGroup.Trigger"}),r.createElement(oi,{allChildren:i,group:t,childType:li,defaultTypes:ii,name:"AccordionGroup.Content"}))))):null}function si(e){const{groups:t,children:n}=e;return t?[...t.values()].map((t=>r.cloneElement(n,{...e,children:n.props.children,group:t,...t,key:t.title}))):null}function li(e){const{children:t,asChild:n,...o}=e,{group:i}=e;return Object.assign(o,i),i?n?r.cloneElement(t,{...i,...e,children:t.props.children}):r.createElement(Ze.ub_,null,r.cloneElement(t,{...i,...e,children:t.props.children})):null}function ci(e){const{children:t,asChild:n,...o}=e,{group:i}=e;return Object.assign(o,i),i?n?r.cloneElement(t,o):r.createElement(Ze.$m7,{value:i.value,asChild:!0},r.createElement("div",null,r.cloneElement(t,o),r.createElement(ni.D3D,{key:"chevronDown",className:"text-primary h-4 w-4 shrink-0 transition-transform duration-200"}))):null}ai.Content=li,ai.Trigger=ci,ai.Accordion=si;const di=ai;function mi(){return mi=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},mi.apply(null,arguments)}function pi(e){const{title:t,items:n,group:o,customHeader:i}=e,{commandsManager:a}=(0,p.Jg)();return r.createElement(Ze.VaM,mi({title:t||"Measurements",data:n,onAction:(e,t,o)=>{a.run(t,{uid:o,annotationUID:o,displayMeasurements:n})}},o,{key:o.key}),r.createElement(Ze.VaM.Header,{key:"measurementTableHeader"},i&&o.isFirst&&i({...e,items:e.allItems})),r.createElement(Ze.VaM.Body,{key:"measurementTableBody"}))}const{filterNot:ui,filterAdditionalFindings:gi}=p.Wp.MeasurementFilters,Si=[{title:"Measurements",filter:ui(gi)},{title:"Additional Findings",filter:gi}],Ii=(e,t)=>{const n=new Map,{namedSets:o}=t;for(const e of o){const o=e.id||e.title;n.set(o,{...t,...e,items:[],isFirst:0===n.size,title:o,key:o})}e.forEach((e=>{for(const t of o)if(t.filter(e)){const o=t.id||t.title;return void n.get(o).items.push(e)}}));for(const e of o){const t=e.id||e.title;n.get(t).items.length||n.delete(t)}return n};function vi(e){const{items:t,children:n,grouping:o={},customHeader:i,group:a,actions:s}=e;return r.createElement(di,{grouping:{groupingFunction:Ii,name:"measurementsOrAdditional",namedSets:Si,StudyInstanceUID:a?.StudyInstanceUID,...o},items:t,sourceChildren:n},r.createElement(di.Accordion,{noWrapper:"true"},r.createElement(pi,{customHeader:i,allItems:t,actions:s})))}const yi=vi,{formatDate:hi}=p.Wp;function fi(e){const{StudyInstanceUID:t}=e;if(!t)return null;const n=p.H8.getStudy(t);if(!n?.series?.length)return null;const o=n.series[0].instances[0],{StudyDate:i,StudyDescription:a}=o;return r.createElement(Ze.u3f,{date:hi(i),description:a})}function wi({items:e,StudyInstanceUID:t,measurementFilter:n,actions:o}){const{commandsManager:i}=(0,p.Jg)();return!e?.length?null:r.createElement("div",{className:"bg-background flex h-9 w-full items-center rounded pr-0.5"},r.createElement("div",{className:"flex space-x-1"},r.createElement(Ze.$nd,{size:"sm",variant:"ghost",className:"pl-1.5",onClick:()=>{i.runCommand("downloadCSVMeasurementsReport",{StudyInstanceUID:t,measurementFilter:n})}},r.createElement(Ze.FI1.Download,{className:"h-5 w-5"}),r.createElement("span",{className:"pl-1"},"CSV")),r.createElement(Ze.$nd,{size:"sm",variant:"ghost",className:"pl-0.5",onClick:e=>{e.stopPropagation(),o?.createSR?o.createSR({StudyInstanceUID:t,measurementFilter:n}):i.run("promptSaveReport",{StudyInstanceUID:t,measurementFilter:n})}},r.createElement(Ze.FI1.Add,null),"Create SR"),r.createElement(Ze.$nd,{size:"sm",variant:"ghost",className:"pl-0.5",onClick:e=>{e.stopPropagation(),o?.onDelete?o.onDelete():i.runCommand("clearMeasurements",{measurementFilter:n})}},r.createElement(Ze.FI1.Delete,null),"Delete")))}const Ei=wi;const Ti=function(e){return r.createElement("div",null,r.createElement(fi,e),r.createElement(Ei,e))},{MeasurementFilters:bi}=p.Wp,Di=(e,t,n)=>{const o=new Map,{activeStudyUID:i}=t,{displaySetService:a}=n.servicesManager.services;let r,s;return e.forEach((e=>{const n=(e=>a.getDisplaySetByUID(e.displaySetInstanceUID).instances[0].StudyInstanceUID)(e);if(!o.has(n)){const e=[],a=bi.filterAnd(bi.filterMeasurementsByStudyUID(i),t.filter),l={...t,items:e,displayMeasurements:e,key:n,isSelected:n===i,StudyInstanceUID:i,filter:a,measurementFilter:a};l.isSelected&&!r&&(r=l),s||=l,o.set(n,l)}!r&&s&&(s.isSelected=!0);o.get(n).items.push(e)})),o};function Ci(e){const{items:t,grouping:n={},children:o}=e,i=(0,p.Jg)(),a=(0,p.BZ)(i),s=a?.[0]?.StudyInstanceUID;return r.createElement(ai,{grouping:{name:"groupByStudy",groupingFunction:Di,activeStudyUID:s,...n},items:t,value:[s],sourceChildren:o},r.createElement(ai.Trigger,null,r.createElement(Ti,null)),r.createElement(yi,{activeStudyUID:s}))}const Oi=Ci;function Mi(e){const{measurementFilter:t,emptyComponent:n,children:o}=e,i=$o((0,p.Jg)().servicesManager,{measurementFilter:t});if(!i.length)return n?r.createElement(n,{items:i}):r.createElement("span",{className:"text-white"},"No Measurements");if(o){return r.Children.map(o,(e=>r.cloneElement(e,{items:i,filter:t})))}return r.createElement(Oi,{items:i})}const Ni=({commandsManager:e,servicesManager:t,extensionManager:n})=>[{name:"activeViewportWindowLevel",component:()=>r.createElement(ti,{servicesManager:t})},{name:"panelMeasurement",iconName:"tab-linear",iconLabel:"Measure",label:"Measurement",component:Mi},{name:"panelSegmentation",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:({configuration:o})=>r.createElement(jo,{commandsManager:e,servicesManager:t,extensionManager:n,configuration:{...o}})},{name:"panelSegmentationNoHeader",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:({configuration:o})=>r.createElement(jo,{commandsManager:e,servicesManager:t,extensionManager:n,configuration:{...o}})},{name:"panelSegmentationWithTools",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:({configuration:o})=>r.createElement(r.Fragment,null,r.createElement(h.Toolbox,{buttonSectionId:"segmentationToolbox",title:"Segmentation Tools"}),r.createElement(jo,{commandsManager:e,servicesManager:t,extensionManager:n,configuration:{...o}}))}];var Vi=n(73421);var Ri=s.Enums.OrientationAxis;const Ai={handleSegmentChange:({direction:e,segDisplaySet:t,viewportId:n,selectedSegmentObjectIndex:o,segmentationService:i})=>{const a=t.displaySetInstanceUID,r=i.getSegmentation(a),{segments:s}=r,l=Object.keys(s).length,c=i.getActiveSegment(n);c&&(o=Object.values(s).findIndex((e=>e.segmentIndex===c.segmentIndex)));let d=o+e;d>l-1?d=0:d<0&&(d=l-1);const m=Object.values(s)[d]?.segmentIndex;i.setActiveSegment(a,m),i.jumpToSegmentCenter(a,m,n),o=d},isReferenceViewable:({viewportId:e,reference:t,viewportOptions:n,servicesManager:o})=>{const{cornerstoneViewportService:i,displaySetService:a}=o.services;if(!n){return i.getCornerstoneViewport(e).isReferenceViewable(t,{withNavigation:!0})}if("stack"===n.viewportType){return a.getDisplaySetByUID(t.displaySetInstanceUID).instances.map((e=>e.imageId)).includes(t.referencedImageId)}const{orientation:r}=n,s=function(e,t){const n=e.getDisplaySetByUID(t),o=n.instances[0].ImageOrientationPatient;if(6!==o?.length)return;const i=$t.eR.fromValues(o[0],o[1],o[2]),a=$t.eR.fromValues(o[3],o[4],o[5]),r=$t.eR.cross($t.eR.create(),i,a),s={[Ri.AXIAL]:$t.eR.fromValues(0,0,1),[Ri.CORONAL]:$t.eR.fromValues(0,1,0),[Ri.SAGITTAL]:$t.eR.fromValues(1,0,0)};let l=0,c="";for(const[e,t]of Object.entries(s)){const n=Math.abs($t.eR.dot(r,t));n>l&&(l=n,c=e)}return c}(a,t.displaySetInstanceUID);return s===r},setupSegmentationDataModifiedHandler:We,setupSegmentationModifiedHandler:He};function Ui(e){const{group:t,classNames:n}=e;if(!t.items?.length)return console.log("No items to iterate",t.items),null;const{items:o}=t,[i]=o,{isSelected:a,isVisible:s}=i,l=(0,p.Jg)(),c=(e,t,n)=>{const i=o.map((e=>e.uid));l.commandsManager.run(t,{...n,uid:i,displayMeasurements:o,items:o,event:e})},[d,m]=(0,r.useState)(!1);return r.createElement("div",{className:`relative ml-2 inline-flex items-center space-x-1 ${n}`},r.createElement(Ze.$nd,{size:"icon",variant:"ghost",className:"h-6 w-6 transition-opacity "+(a||!s?"opacity-100":"opacity-50 group-hover:opacity-100"),"aria-label":s?"Hide":"Show",onClick:e=>{e.stopPropagation(),c(e,["jumpToMeasurement","toggleVisibilityMeasurement"])}},s?r.createElement(Ze.FI1.Hide,{className:"h-6 w-6"}):r.createElement(Ze.FI1.Show,{className:"h-6 w-6"})),r.createElement(Ze.rId,{onOpenChange:e=>m(e)},r.createElement(Ze.tyb,{asChild:!0},r.createElement(Ze.$nd,{size:"icon",variant:"ghost",className:"h-6 w-6 transition-opacity "+(a||d?"opacity-100":"opacity-50 group-hover:opacity-100"),"aria-label":"Actions",onClick:e=>e.stopPropagation()},r.createElement(Ze.FI1.More,{className:"h-6 w-6"}))),r.createElement(Ze.SQm,{align:"end"},r.createElement(Ze._26,{onClick:e=>c(e,"removeMeasurement")},r.createElement(Ze.FI1.Delete,{className:"text-foreground"}),r.createElement("span",{className:"pl-2"},"Delete")))))}const Pi=Ui;function xi(){return xi=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},xi.apply(null,arguments)}function Fi(e){const{group:t,onClick:n=t?.onClick}=this;if(n)return console.log("onClickDefault"),e.preventDefault(),e.stopPropagation(),n(e,t),!1;console.log("No onClick function",t)}function _i(e){const{marginLeft:t=8,isActive:n=!1,colorHex:o,count:i,text:a,menu:s=null}=e;return r.createElement(Ze.$m7,{style:{marginLeft:`${t}px`,padding:0},asChild:!0},r.createElement("div",{className:`inline-flex text-base ${n?"bg-popover":"bg-muted"} flex-grow`},r.createElement("button",{onClick:Fi.bind(e)},r.createElement("span",{className:"inline-flex rounded-l border-r border-black "+(n?"bg-highlight":"bg-muted")},void 0!==i?r.createElement("span",{className:"px-2"},i):null,o&&r.createElement(Ze.cd8,{colorHex:o})),r.createElement("span",null,a)),s&&r.createElement(s,xi({},e,{classNames:"justify-end flex-grow"})),r.createElement(ni.D3D,{className:"text-primary h-4 w-4 shrink-0 transition-transform duration-200"})))}function Li(e){const{index:t,item:n}=e;return r.createElement(_i,{count:t+1,text:n.toolName||n.label||n.title,colorHex:"#f00",isActive:n.isSelected,menu:Pi,group:{items:[n],onClick:e.onClick}})}function Gi(e){const{items:t}=e,n=(0,p.Jg)(),o=(e,t)=>{const{items:o}=t;n.commandsManager.run("jumpToMeasurement",{uid:o[0].uid,displayMeasurements:o,group:t})};return r.createElement(Ze.nD3,{type:"multiple",className:"flex-shrink-0 overflow-hidden"},t.map(((e,t)=>{const{displayText:n={}}=e;return r.createElement(Ze.AsP,{key:`measurementAccordion:${e.uid}`,value:e.uid},r.createElement(Li,{item:e,key:`measurementItem:${e.uid}`,index:t,onClick:o}),r.createElement(Ze.ub_,{key:`measurementContent:${e.uid}`},r.createElement("div",{className:"ml-7 px-2 py-2"},r.createElement("div",{className:"text-secondary-foreground flex items-center gap-1 text-base leading-normal"},n.primary?.length>0&&n.primary.map(((t,n)=>r.createElement("span",{key:`details:${e.uid}:${n}`},t)))))))})))}const ki=(e,t,n)=>{const o=new Map,{displaySetService:i}=n.servicesManager.services,{activeDisplaySetInstanceUID:a}=t;return e.forEach((e=>{const{displaySetInstanceUID:n}=e;if(!o.has(n)){const e=i.getDisplaySetByUID(n);o.set(n,{header:null,isSelected:n==a,...t,items:[],key:n,title:"Series Measurements",displaySet:e})}o.get(n).items.push(e)})),o};function zi(e){const{group:t,isSelected:n,displaySet:o,menu:i}=e,{SeriesNumber:a=1,SeriesDescription:s}=o;return r.createElement(_i,{text:`Series #${a} ${s}`,count:t.items.length,isActive:n,group:t,menu:i,marginLeft:"0"})}function Bi(e){const{items:t,grouping:n={},children:o}=e,i=(0,p.Jg)(),a=(0,p.BZ)(i),s=a?.[0]?.displaySetInstanceUID;return r.createElement(di,{grouping:{groupingFunction:ki,activeDisplaySetInstanceUID:s,...n,onClick:(e,t)=>{const{items:n}=t;i.commandsManager.run("jumpToMeasurement",{uid:n[0].uid,displayMeasurements:n,group:t})}},items:t,sourceChildren:o},r.createElement(di.Trigger,{asChild:!0},r.createElement(zi,{menu:Pi})),r.createElement(Gi,null))}function $i(){return $i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},$i.apply(null,arguments)}const{imageRetrieveMetadataProvider:ji}=s.utilities,Wi=r.lazy((()=>n.e(9026).then(n.bind(n,99026)))),Hi=e=>r.createElement(r.Suspense,{fallback:r.createElement("div",null,"Loading...")},r.createElement(Wi,e)),qi={retrieveOptions:{single:{streaming:!0,decodeLevel:1}}},Yi=[],Ji={id:To,onModeEnter:({servicesManager:e})=>{const{cornerstoneViewportService:t,toolbarService:n,segmentationService:o}=e.services;n.registerEventForToolbarUpdate(t,[t.EVENTS.VIEWPORT_DATA_CHANGED]),n.registerEventForToolbarUpdate(o,[o.EVENTS.SEGMENTATION_REMOVED,o.EVENTS.SEGMENTATION_MODIFIED]),n.registerEventForToolbarUpdate(s.eventTarget,[l.Enums.Events.TOOL_ACTIVATED]),ji.clear(),ji.add("volume",s.ProgressiveRetrieveImages.interleavedRetrieveStages),ji.add("stack",qi)},getPanelModule:Ni,onModeExit:({servicesManager:e})=>{const{cineService:t,segmentationService:n}=e.services;Object.values(s.Enums.RequestType).forEach((e=>{s.imageLoadPoolManager.clearRequestStack(e),s.imageRetrievalPoolManager.clearRequestStack(e)})),t.setIsCineEnabled(!1),(0,f.cL)(),ze.I.getState().clearLutPresentationStore(),Be.q.getState().clearPositionPresentationStore(),qt.U.getState().clearSynchronizersStore(),h.useToggleOneUpViewportGridStore.getState().clearToggleOneUpViewportGridStore(),$e.v.getState().clearSegmentationPresentationStore(),n.removeAllSegmentations(),Yi.forEach((e=>e()))},preRegistration:async function(e){const{servicesManager:t,serviceProvidersManager:n}=e;t.registerService(ro.A.REGISTRATION),t.registerService(bn.REGISTRATION),t.registerService(Gn.REGISTRATION),t.registerService(eo.REGISTRATION),t.registerService(ao.REGISTRATION),t.registerService(_t.A.REGISTRATION),t.registerService(uo.REGISTRATION),n.registerProvider(_t.A.REGISTRATION.name,bo.It);const{syncGroupService:o}=t.services;o.registerCustomSynchronizer("frameview",Co);const i=await Ye.call(this,e);return Yi.push(...i.unsubscriptions),{...i}},getToolbarModule:function({commandsManager:e,servicesManager:t}){const{toolGroupService:n,toolbarService:o,syncGroupService:i,cornerstoneViewportService:a,hangingProtocolService:r,displaySetService:s,viewportGridService:c}=t.services;return[{name:"evaluate.viewport.supported",evaluate:({viewportId:e,unsupportedViewportTypes:t,disabledText:n})=>{const o=a.getCornerstoneViewport(e);if(o&&t?.includes(o.type))return hn(n)}},{name:"evaluate.modality.supported",evaluate:({viewportId:e,unsupportedModalities:t,supportedModalities:n,disabledText:o})=>{const i=c.getDisplaySetsUIDsForViewport(e);if(!i?.length)return;const a=i.map(s.getDisplaySetByUID);if(t?.length){if(a.some((e=>t.includes(e?.Modality))))return hn(o)}if(n?.length){if(!a.some((e=>n.includes(e?.Modality))))return hn(o||"Tool not available for this modality")}}},{name:"evaluate.cornerstoneTool",evaluate:({viewportId:e,button:t,toolNames:i,disabledText:a})=>{const r=n.getToolGroupForViewport(e);if(!r)return;const s=o.getToolNameForButton(t);if(!r||!r.hasTool(s)&&!i)return hn(a);return{disabled:!1,isActive:i?i.includes(r.getActivePrimaryMouseButtonTool()):r.getActivePrimaryMouseButtonTool()===s}}},{name:"evaluate.action",evaluate:()=>({disabled:!1})},{name:"evaluate.cornerstoneTool.toggle.ifStrictlyDisabled",evaluate:({viewportId:e,button:t,disabledText:i})=>fn({viewportId:e,button:t,toolbarService:o,disabledText:i,offModes:[l.Enums.ToolModes.Disabled],toolGroupService:n})},{name:"evaluate.cornerstoneTool.toggle",evaluate:({viewportId:e,button:t,disabledText:i})=>fn({viewportId:e,button:t,toolbarService:o,disabledText:i,offModes:[l.Enums.ToolModes.Disabled,l.Enums.ToolModes.Passive],toolGroupService:n})},{name:"evaluate.cornerstone.synchronizer",evaluate:({viewportId:e,button:t})=>{let n=i.getSynchronizersForViewport(e);if(!n?.length)return{className:Ze.WpD.getToggledClassName(!1)};const o=Array.isArray(t.commands)?t.commands?.[0].commandOptions.type:t.commands?.commandOptions.type;if(n=i.getSynchronizersOfType(o),!n?.length)return{className:Ze.WpD.getToggledClassName(!1)};const a=n[0],r=a?._enabled;return{className:Ze.WpD.getToggledClassName(r)}}},{name:"evaluate.viewportProperties.toggle",evaluate:({viewportId:e,button:t})=>{const n=a.getCornerstoneViewport(e);if(!n||n.isDisabled)return;const o=t.id,i=n.getProperties(),r=n.getCamera(),s=r?.[o]||i?.[o];if(!s)return{disabled:!1};const l=s;return{className:Ze.WpD.getToggledClassName(l)}}},{name:"evaluate.displaySetIsReconstructable",evaluate:({viewportId:e,disabledText:t="Selected viewport is not reconstructable"})=>{if(!a.getCornerstoneViewport(e))return;return c.getDisplaySetsUIDsForViewport(e).map(s.getDisplaySetByUID).every((e=>e?.isReconstructable))?{disabled:!1}:hn(t)}}]},getHangingProtocolModule:yn,getViewportModule:({servicesManager:e,commandsManager:t})=>[{name:"cornerstone",component:n=>{const{toolbarService:o}=e.services;return r.createElement(Hi,$i({},n,{toolbarService:o,servicesManager:e,commandsManager:t}))},isReferenceViewable:t=>Ai.isReferenceViewable({...t,servicesManager:e})}],getCommandsModule:sn,getCustomizationModule:kt,getUtilityModule:({servicesManager:e})=>[{name:"common",exports:{getCornerstoneLibraries:()=>({cornerstone:s,cornerstoneTools:l}),getEnabledElement:f.kJ,dicomLoaderService:Eo}},{name:"core",exports:{Enums:s.Enums}},{name:"tools",exports:{toolNames:A,Enums:l.Enums}},{name:"volumeLoader",exports:{getDynamicVolumeInfo:je.getDynamicVolumeInfo}}],getSopClassHandlerModule:function(e){return[_o(e)]}},Ki=Ji},77954:(e,t,n)=>{n.d(t,{A:()=>s});var o,i=n(62037),a=n(2836);class r extends i.Rc{constructor(){super(r.EVENTS),this.serviceImplementation={},this.LOCATIONS=r.LOCATIONS,this.serviceImplementation={}}setServiceImplementation({getState:e,addComponent:t,addComponents:n,clear:o}){e&&(this.serviceImplementation._getState=e),t&&(this.serviceImplementation._addComponent=t),n&&(this.serviceImplementation._addComponents=n),o&&(this.serviceImplementation._clear=o)}getState(){return this.serviceImplementation._getState()}addComponent(e){this.serviceImplementation._addComponent(e)}addComponents(e){this.serviceImplementation._addComponents(e)}clear(e){this.serviceImplementation._clear(e)}}o=r,r.EVENTS={},r.LOCATIONS=a.ldS,r.REGISTRATION={name:"viewportActionCornersService",altName:"ViewportActionCornersService",create:({configuration:e={}})=>new o};const s=r},11794:(e,t,n)=>{n.d(t,{g:()=>h,A:()=>w});var o=n(62037),i=n(15327),a=n(4667),r=n(47294);var s=n(23672);const l="default",c=({data:e,displaySetUID:t,imageId:n,viewport:o})=>{if(n&&e.isCompositeStack&&e.imageIds)return!!e.imageIds.find((e=>e===n));if(n&&(e.volumeId||o instanceof i.VolumeViewport)){if(!!!o.getCurrentImageId())return!1;const e=i.utilities.imageIdToURI(n);if(o.hasImageURI(e))return!0}return e.displaySetInstanceUID===t};const d=class{constructor(e){this.viewportId="",this.element=void 0,this.viewportOptions=void 0,this.displaySetOptions=void 0,this.viewportData=void 0,this.renderingEngineId=void 0,this.viewReference=void 0,this.destroy=()=>{this.element=null,this.viewportData=null,this.viewportOptions=null,this.displaySetOptions=null},this.viewportId=e,this.setPublicViewportOptions({}),this.setPublicDisplaySetOptions([{}])}contains(e,t){if(!this.viewportData?.data)return!1;const{viewport:n}=(0,i.getEnabledElementByViewportId)(this.viewportId)||{};return this.viewportData.data.length?!!this.viewportData.data.find((o=>c({data:o,displaySetUID:e,imageId:t,viewport:n}))):c({data:this.viewportData.data,displaySetUID:e,imageId:t,viewport:n})}setRenderingEngineId(e){this.renderingEngineId=e}getRenderingEngineId(){return this.renderingEngineId}setViewportId(e){this.viewportId=e}setElement(e){this.element=e}setViewportData(e){this.viewportData=e}getViewportData(){return this.viewportData}getElement(){return this.element}getViewportId(){return this.viewportId}getViewReference(){return this.viewportOptions?.viewReference}setPublicDisplaySetOptions(e){const t=this.mapDisplaySetOptions(e);return this.setDisplaySetOptions(t),this.displaySetOptions}hasDisplaySet(e){let t=this.getViewportData();return t.viewportType===i.Enums.ViewportType.ORTHOGRAPHIC||t.viewportType===i.Enums.ViewportType.VOLUME_3D?t.data.some((({displaySetInstanceUID:t})=>t===e)):t.data.displaySetInstanceUID===e}setPublicViewportOptions(e,t){const n=t||e.viewportType||"stack",{presentationIds:o}=e;let{toolGroupId:a=l}=e;const r=function(e){if(e)switch(e.toLowerCase()){case"axial":return i.Enums.OrientationAxis.AXIAL;case"sagittal":return i.Enums.OrientationAxis.SAGITTAL;case"coronal":return i.Enums.OrientationAxis.CORONAL;default:return i.Enums.OrientationAxis.ACQUISITION}return i.Enums.OrientationAxis.ACQUISITION}(e.orientation),c=(0,s.A)(n);return a||(a=l),this.setViewportOptions({...e,viewportId:this.viewportId,viewportType:c,orientation:r,toolGroupId:a,presentationIds:o}),this.viewportOptions}setViewportOptions(e){this.viewportOptions=e}getViewportOptions(){return this.viewportOptions}getPresentationIds(){const{presentationIds:e}=this.viewportOptions;return e}setDisplaySetOptions(e){this.displaySetOptions=e}getSyncGroups(){return this.viewportOptions.syncGroups||=[],this.viewportOptions.syncGroups}getDisplaySetOptions(){return this.displaySetOptions}getViewportType(){return this.viewportOptions.viewportType||i.Enums.ViewportType.STACK}getToolGroupId(){return this.viewportOptions.toolGroupId}getBackground(){return this.viewportOptions.background||[0,0,0]}getOrientation(){return this.viewportOptions.orientation}getDisplayArea(){return this.viewportOptions.displayArea}getInitialImageOptions(){return this.viewportOptions.initialImageOptions}mapDisplaySetOptions(e=[{}]){const t=[];return e.forEach((e=>{let n=e?.options||e;n||(n={blendMode:void 0,slabThickness:void 0,colormap:void 0,voi:{},voiInverted:!1});const o=function(e){if(!e)return i.Enums.BlendModes.COMPOSITE;if("mip"===e.toLowerCase())return i.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND;if("minip"===e.toLowerCase())return i.Enums.BlendModes.MINIMUM_INTENSITY_BLEND;if("avg"===e.toLowerCase())return i.Enums.BlendModes.AVERAGE_INTENSITY_BLEND;throw new Error(`Unsupported blend mode: ${e}`)}(n.blendMode);t.push({voi:n.voi,voiInverted:n.voiInverted,colormap:n.colormap,slabThickness:n.slabThickness,blendMode:o,displayPreset:n.displayPreset})})),t}};var m=function(e){return e.First="first",e.Last="last",e.Middle="middle",e}(m||{});const p=m;var u,g=n(10182),S=n(44646),I=n(68578),v=n(2847);const y={VIEWPORT_DATA_CHANGED:"event::cornerstoneViewportService:viewportDataChanged",VIEWPORT_VOLUMES_CHANGED:"event::cornerstoneViewportService:viewportVolumesChanged"},h={withNavigation:!0,withOrientation:!1};class f extends o.Rc{constructor(e){super(y),this.renderingEngine=void 0,this.viewportsById=new Map,this.viewportGridResizeObserver=void 0,this.viewportsDisplaySets=new Map,this.beforeResizePositionPresentations=new Map,this.enableResizeDetector=void 0,this.resizeRefreshRateMs=void 0,this.resizeRefreshMode=void 0,this.servicesManager=null,this.resizeQueue=[],this.viewportResizeTimer=null,this.gridResizeDelay=50,this.gridResizeTimeOut=null,this.hangingProtocolService=void 0,this.viewportsInfo=void 0,this.sceneVolumeInputs=void 0,this.viewportDivElements=void 0,this.ViewportPropertiesMap=void 0,this.volumeUIDs=void 0,this.displaySetsNeedRerendering=void 0,this.viewportDisplaySets=void 0,this.renderingEngine=null,this.viewportGridResizeObserver=null,this.servicesManager=e}enableViewport(e,t){const n=new d(e);n.setElement(t),this.viewportsById.set(e,n)}getViewportIds(){return Array.from(this.viewportsById.keys())}getRenderingEngine(){const e=(0,i.getRenderingEngine)(r.C);return e?(this.renderingEngine=e,this.renderingEngine):(e&&!e.hasBeenDestroyed||(this.renderingEngine=new i.RenderingEngine(r.C)),this.renderingEngine)}resize(e=!1){Array.from(this.viewportsById.values()).every((e=>{const t=e.getElement();return 0===t.clientWidth&&0===t.clientHeight}))?console.warn("Ignoring resize when viewports have size 0"):e?(this.performResize(),this.resetGridResizeTimeout(),this.resizeQueue=[],clearTimeout(this.viewportResizeTimer)):this.enqueueViewportResizeRequest()}destroy(){this._removeResizeObserver(),this.viewportGridResizeObserver=null;try{this.renderingEngine?.destroy?.()}catch(e){console.warn("Rendering engine not destroyed",e)}this.viewportsDisplaySets.clear(),this.renderingEngine=null,i.cache.purgeCache()}disableElement(e){this.renderingEngine?.disableElement(e),this.viewportsById.delete(e),this.viewportsDisplaySets.delete(e)}setPresentations(e,t){const n=this.getCornerstoneViewport(e);if(!n||!t)return;const{lutPresentation:o,positionPresentation:i,segmentationPresentation:a}=t;this._setSegmentationPresentation(n,a),this._setLutPresentation(n,o),this._setPositionPresentation(n,{...i,viewportId:e})}storePresentation({viewportId:e}){const t=this.getPresentationIds(e),{syncGroupService:n}=this.servicesManager.services,o=n.getSynchronizersForViewport(e);if(!t||0===Object.keys(t).length)return null;const{lutPresentationId:i,positionPresentationId:a,segmentationPresentationId:r}=t,s=this._getPositionPresentation(e),l=this._getLutPresentation(e),c=this._getSegmentationPresentation(e),{setLutPresentation:d}=g.I.getState(),{setPositionPresentation:m}=S.q.getState(),{setSynchronizers:p}=I.U.getState(),{setSegmentationPresentation:u}=v.v.getState();i&&d(i,l),a&&m(a,s),r&&u(r,c),o?.length&&p(e,o.map((e=>({id:e.id,sourceViewports:[...e.getSourceViewports()],targetViewports:[...e.getTargetViewports()]}))))}getPresentations(e){return{positionPresentation:this._getPositionPresentation(e),lutPresentation:this._getLutPresentation(e),segmentationPresentation:this._getSegmentationPresentation(e)}}getPresentationIds(e){const t=this.viewportsById.get(e);return t?t.getPresentationIds():null}_getPositionPresentation(e){const t=this.getCornerstoneViewport(e);if(!t)return;return{viewportType:this.viewportsById.get(e).getViewportType(),viewReference:t instanceof i.VolumeViewport3D?null:t.getViewReference(),viewPresentation:t.getViewPresentation({pan:!0,zoom:!0}),viewportId:e}}_getLutPresentation(e){const t=this.getCornerstoneViewport(e);if(!t)return;const n=e=>(e?.isComputedVOI&&(delete e?.voiRange,delete e?.VOILUTFunction),e),o=t instanceof i.BaseVolumeViewport?new Map:n(t.getProperties());if(o instanceof Map){const e=t.getAllVolumeIds();e?.forEach((e=>{const i=n(t.getProperties(e));o.set(e,i)}))}return{viewportType:this.viewportsById.get(e).getViewportType(),properties:o}}_getSegmentationPresentation(e){const{segmentationService:t}=this.servicesManager.services;return t.getPresentation(e)}setViewportData(e,t,n,o,a){const r=this.getRenderingEngine();if(t.viewportType===i.Enums.ViewportType.STACK&&!t.data[0].imageIds?.length)return;const s=this.viewportsById.get(e);if(this.storePresentation({viewportId:s.getViewportId()}),this.servicesManager.services.segmentationService.clearSegmentationRepresentations(s.getViewportId()),!s)throw new Error("element is not enabled for the given viewportId");const l=s.setPublicDisplaySetOptions(o),c=s.setPublicViewportOptions(n,t.viewportType),d=s.getElement(),m=s.getViewportType(),p=s.getBackground(),u=s.getOrientation(),g=s.getDisplayArea(),S={viewportId:e,element:d,type:m,defaultOptions:{background:p,orientation:u,displayArea:g}};s.setRenderingEngineId(r.id),r.enableElement(S),s.setViewportOptions(c),s.setDisplaySetOptions(l),s.setViewportData(t),s.setViewportId(e),this.viewportsById.set(e,s);const I=r.getViewport(e);this._setDisplaySets(I,t,s,a).then((()=>{this._broadcastEvent(this.EVENTS.VIEWPORT_DATA_CHANGED,{viewportData:t,viewportId:e})}))}getCornerstoneViewport(e){if(!this.getViewportInfo(e)||!this.renderingEngine||this.renderingEngine.hasBeenDestroyed)return null;return this.renderingEngine.getViewport(e)}getViewportInfo(e){return this.viewportsById.get(e)}getViewportIdToJump(e,t){const n=this.getCornerstoneViewport(e);if(n.isReferenceViewable(t,{withNavigation:!0}))return e;for(const e of this.viewportsById.keys()){const n=this.getCornerstoneViewport(e);if(n?.isReferenceViewable(t,{withNavigation:!0}))return e}if(n.isReferenceViewable(t,{withNavigation:!0,withOrientation:!0}))return e;for(const e of this.viewportsById.keys()){const n=this.getCornerstoneViewport(e);if(n?.isReferenceViewable(t,{withNavigation:!0,withOrientation:!0}))return e}return null}async _setOtherViewport(e,t,n,o={}){const[i]=t.data;return e.setDataIds(i.imageIds,{groupId:i.displaySetInstanceUID,viewReference:n.getViewReference()})}async _setStackViewport(e,t,n,o={}){const r=n.getDisplaySetOptions(),s=t.data.map((e=>e.displaySetInstanceUID));this.viewportsDisplaySets.set(e.id,[...s]);const{initialImageIndex:l,imageIds:c}=t.data[0];let d=o?.positionPresentation?.initialImageIndex??l;const{rotation:m,flipHorizontal:p,displayArea:u}=n.getViewportOptions(),g={...o.lutPresentation?.properties};if(!o.lutPresentation?.properties){const{voi:e,voiInverted:t,colormap:n}=r[0];if(e&&(e.windowWidth||e.windowCenter)){const{lower:t,upper:n}=i.utilities.windowLevel.toLowHighRange(e.windowWidth,e.windowCenter);g.voiRange={lower:t,upper:n}}g.invert=t??g.invert,g.colormap=n??g.colormap}e.element.addEventListener(i.Enums.Events.VIEWPORT_NEW_IMAGE_SET,(t=>{const{element:n}=t.detail;n===e.element&&a.utilities.stackContextPrefetch.enable(n)}));let S=c;const I=this._processExtraDisplaySetsForViewport(e);S=I?.imageIds??S;const v=o?.positionPresentation?.viewReference?.referencedImageId;return v&&(d=S.indexOf(v)),null==d&&(d=this._getInitialImageIndexForViewport(n,c)||0),e.setStack(S,d).then((()=>{e.setProperties({...g}),this.setPresentations(e.id,o,n),I?.addOverlayFn&&I.addOverlayFn(),u&&e.setDisplayArea(u),m&&e.setProperties({rotation:m}),p&&e.setCamera({flipHorizontal:!0})}))}_getInitialImageIndexForViewport(e,t){const n=e.getInitialImageOptions();if(!n)return;const{index:o,preset:a}=n,r=e.getViewportType();let s;if(r===i.Enums.ViewportType.STACK)s=t.length;else{if(r!==i.Enums.ViewportType.ORTHOGRAPHIC)return;{const t=this.getCornerstoneViewport(e.getViewportId()),n=i.utilities.getImageSliceDataForVolumeViewport(t);if(!n)return;({numberOfSlices:s}=n)}}return this._getInitialImageIndex(s,o,a)}_getInitialImageIndex(e,t,n){const o=e-1;return void 0!==t?i.utilities.clip(t,0,o):n===p.First?0:n===p.Last?o:n===p.Middle?o%2==0?o/2:(o+1)/2:0}async _setVolumeViewport(e,t,n,o={}){const{displaySetService:i}=this.servicesManager.services,r=[],s=n.getDisplaySetOptions(),{hangingProtocolService:l}=this.servicesManager.services,c=[],d=[];for(const[e,n]of t.data.entries()){const{imageIds:t,displaySetInstanceUID:o}=n;let l=n.volume;if(!l){const e=i.getDisplaySetByUID(o);l=a.utilities.getOrCreateImageVolume(e.images.map((e=>e.imageId)))}if(d.push(o),!l){console.log("Volume display set not found");continue}c.push(l);const m=s[e],{volumeId:p}=l;r.push({imageIds:t,volumeId:p,blendMode:m.blendMode,slabThickness:this._getSlabThickness(m,p)})}this.viewportsDisplaySets.set(e.id,d);const m=c.filter((e=>!e.loadStatus?.loaded));if(m.length){if(l.getShouldPerformCustomImageLoad())return l.runImageLoadStrategy({viewportId:e.id,volumeInputArray:r});m.forEach((e=>{!e.loadStatus?.loading&&e.load instanceof Function&&e.load()}))}return this.setVolumesForViewport(e,r,o)}async setVolumesForViewport(e,t,n){const{displaySetService:o,viewportGridService:a}=this.servicesManager.services,r=this.getViewportInfo(e.id),s=r.getDisplaySetOptions(),l=a.getDisplaySetsUIDsForViewport(e.id),c=o.getDisplaySetByUID(l[0]),d=c?.Modality,m=t.map(((e,t)=>{const{volumeId:n}=e,o=s[t],{voi:a,voiInverted:r,colormap:l,displayPreset:c}=o,m={};if(a&&(a.windowWidth||a.windowCenter)){const{lower:e,upper:t}=i.utilities.windowLevel.toLowHighRange(a.windowWidth,a.windowCenter);m.voiRange={lower:e,upper:t}}return void 0!==r&&(m.invert=r),void 0!==l&&(m.colormap=l),void 0!==c&&(m.preset=c[d]||c.default),{properties:m,volumeId:n}})),{addOverlayFn:p}=this._processExtraDisplaySetsForViewport(e)||{};if(await e.setVolumes(t),p&&p(),e.render(),m.forEach((({properties:t,volumeId:n})=>{setTimeout((()=>{e.setProperties(t,n),e.render()}),0)})),this.setPresentations(e.id,n,r),!n.positionPresentation){const t=this._getInitialImageIndexForViewport(r);void 0!==t&&i.utilities.jumpToSlice(e.element,{imageIndex:t})}this._broadcastEvent(this.EVENTS.VIEWPORT_VOLUMES_CHANGED,{viewportInfo:r})}_processExtraDisplaySetsForViewport(e){const{displaySetService:t}=this.servicesManager.services,n=this.viewportsDisplaySets.get(e.id).map(t.getDisplaySetByUID).find((e=>e?.isOverlayDisplaySet&&["SEG","RTSTRUCT"].includes(e.Modality)));if(!n)return;return{imageIds:t.getDisplaySetByUID(n.referencedDisplaySetInstanceUID).images.map((e=>e.imageId)),addOverlayFn:()=>this.addOverlayRepresentationForDisplaySet(n,e)}}addOverlayRepresentationForDisplaySet(e,t){const{segmentationService:n}=this.servicesManager.services,o=e.displaySetInstanceUID,i="SEG"===e.Modality?a.Enums.SegmentationRepresentations.Labelmap:a.Enums.SegmentationRepresentations.Contour;n.addSegmentationRepresentation(t.id,{segmentationId:o,type:i}),this.storePresentation({viewportId:t.id})}updateViewport(e,t,n=!1){const o=this.getViewportInfo(e),a=this.getCornerstoneViewport(e),r=a.getCamera();let s;(a instanceof i.VolumeViewport||a instanceof i.VolumeViewport3D)&&(s=this._setVolumeViewport(a,t,o).then((()=>{n&&(a.setCamera(r),a.render())}))),a instanceof i.StackViewport&&(s=this._setStackViewport(a,t,o)),s.then((()=>{this._broadcastEvent(this.EVENTS.VIEWPORT_DATA_CHANGED,{viewportData:t,viewportId:e})}))}_setDisplaySets(e,t,n,o={}){return e instanceof i.StackViewport?this._setStackViewport(e,t,n,o):[i.VolumeViewport,i.VolumeViewport3D].some((t=>e instanceof t))?this._setVolumeViewport(e,t,n,o):this._setOtherViewport(e,t,n,o)}_removeResizeObserver(){this.viewportGridResizeObserver&&this.viewportGridResizeObserver.disconnect()}_getSlabThickness(e,t){const{blendMode:n}=e;if(void 0!==n&&void 0!==e.slabThickness){if("number"==typeof e.slabThickness)return e.slabThickness;if("fullvolume"===e.slabThickness.toLowerCase()){const e=i.cache.getVolume(t),{dimensions:n,spacing:o}=e;return Math.sqrt(Math.pow(n[0]*o[0],2)+Math.pow(n[1]*o[1],2)+Math.pow(n[2]*o[2],2))}}}_getFrameOfReferenceUID(e){const{displaySetService:t}=this.servicesManager.services,n=t.getDisplaySetByUID(e);if(!n)return;if(n.frameOfReferenceUID)return n.frameOfReferenceUID;if("SEG"===n.Modality){const{instance:e}=n;return e.FrameOfReferenceUID}if("RTSTRUCT"===n.Modality){const{instance:e}=n;return e.ReferencedFrameOfReferenceSequence.FrameOfReferenceUID}const{images:o}=n;return o&&o.length?o[0].FrameOfReferenceUID:void 0}enqueueViewportResizeRequest(){this.resizeQueue.push(!1),clearTimeout(this.viewportResizeTimer),this.viewportResizeTimer=setTimeout((()=>{this.processViewportResizeQueue()}),this.gridResizeDelay)}processViewportResizeQueue(){const e=this.resizeQueue.some((e=>e));this.resizeQueue.length>0&&!e&&!this.gridResizeTimeOut&&this.performResize(),this.resizeQueue=[]}performResize(){const e=!1;try{this.getRenderingEngine().getViewports().forEach((({id:e})=>{const t=this._getPositionPresentation(e);delete t.viewReference?.sliceIndex,this.beforeResizePositionPresentations.set(e,t)}));const t=this.renderingEngine;t.resize(e),t.render(),this.beforeResizePositionPresentations.forEach(((e,t)=>{this.setPresentations(t,{positionPresentation:e})})),t.resize(e),t.render()}catch(e){console.warn("Caught resize exception",e)}}resetGridResizeTimeout(){clearTimeout(this.gridResizeTimeOut),this.gridResizeTimeOut=setTimeout((()=>{this.gridResizeTimeOut=null}),this.gridResizeDelay)}_setLutPresentation(e,t){if(!t)return;const{properties:n}=t;e instanceof i.BaseVolumeViewport&&n instanceof Map?n.forEach(((t,n)=>{e.setProperties(t,n)})):e.setProperties(n)}_setPositionPresentation(e,t){const n=t?.viewReference;n&&(e.isReferenceViewable(n,h)?e.setViewReference(n):console.warn("Unable to apply reference viewable",n));const o=t?.viewPresentation;o&&e.setViewPresentation(o)}_setSegmentationPresentation(e,t){if(!t)return;const{segmentationService:n}=this.servicesManager.services;t.forEach((t=>{const{segmentationId:o,type:i,hydrated:a}=t;a&&n.addSegmentationRepresentation(e.id,{segmentationId:o,type:i})}))}getViewportDisplaySets(e){const{displaySetService:t}=this.servicesManager.services;return(this.viewportsDisplaySets.get(e)||[]).map((e=>t.getDisplaySetByUID(e))).filter(Boolean)}}u=f,f.REGISTRATION={name:"cornerstoneViewportService",altName:"CornerstoneViewportService",create:({servicesManager:e})=>new u(e)};const w=f},47294:(e,t,n)=>{n.d(t,{C:()=>o});const o="OHIFCornerstoneRenderingEngine"},71353:(e,t,n)=>{n.d(t,{cL:()=>r,kJ:()=>a,ye:()=>i});const o={DEFAULT_CONTEXT:"CORNERSTONE",enabledElements:{}},i=(e,t,n)=>{const i=n||o.DEFAULT_CONTEXT;o.enabledElements[e]={element:t,context:i}},a=e=>o.enabledElements[e],r=()=>{o.enabledElements={}}},46026:(e,t,n)=>{n.d(t,{FG:()=>o,H7:()=>a,gS:()=>i});const o="&",i="default",a=(e,t,n,i)=>{if(e.push(0),!i)for(let i=0;i<128;i++){e[e.length-1]=i;const a=e.join(o);if(!Array.from(n.values()).find((e=>e.viewportOptions?.presentationIds?.[t]===a)))break}}},10182:(e,t,n)=>{n.d(t,{I:()=>l});var o=n(78713),i=(n(21978),n(46026));const a="lutPresentationId",r=(e,{viewport:t,viewports:n,isUpdatingSameViewport:o})=>{if(e!==a)return;if(!t||!t.viewportOptions||!t.displaySetInstanceUIDs?.length)return;const{displaySetOptions:r,displaySetInstanceUIDs:s}=t,l=[(e=>{if(!e||!e.options)return i.gS;if(e.options.id)return e.options.id;const t=Object.entries(e.options).map((([e,t])=>`${e}=${t}`));return t.length?t.join(i.FG):i.gS})(r[0])];for(const e of s)l.push(e);return(0,i.H7)(l,a,n,o),l.join(i.FG)},s=e=>({type:a,lutPresentationStore:{},setLutPresentation:(t,n)=>e((e=>({lutPresentationStore:{...e.lutPresentationStore,[t]:n}})),!1,"setLutPresentation"),clearLutPresentationStore:()=>e({lutPresentationStore:{}},!1,"clearLutPresentationStore"),getPresentationId:r}),l=(0,o.vt)()(s)},44646:(e,t,n)=>{n.d(t,{q:()=>c});var o=n(78713),i=(n(21978),n(46026));const a="positionPresentationId",r=(e,{viewport:t,viewports:n,isUpdatingSameViewport:o})=>{if(e===a&&t?.viewportOptions&&t.displaySetInstanceUIDs?.length)return s(t,n,o)};function s(e,t,n){const{viewportOptions:o={},displaySetInstanceUIDs:r=[],displaySetOptions:s=[]}=e,{id:l,orientation:c}=o,d=[c||"acquisition"];l&&d.push(l),s?.some((e=>e.options?.blendMode||e.options?.displayPreset))&&d.push("custom");for(const e of r)d.push(e);return t&&t.length&&void 0!==n?(0,i.H7)(d,a,t,n):d.push(0),d.join(i.FG)}const l=e=>({type:a,positionPresentationStore:{},setPositionPresentation:(t,n)=>e((e=>({positionPresentationStore:{...e.positionPresentationStore,[t]:n}})),!1,"setPositionPresentation"),clearPositionPresentationStore:()=>e({positionPresentationStore:{}},!1,"clearPositionPresentationStore"),getPresentationId:r,getPositionPresentationId:s}),c=(0,o.vt)()(l)},2847:(e,t,n)=>{n.d(t,{v:()=>m});var o=n(78713),i=(n(21978),n(46026)),a=n(15327);const{MPR_CAMERA_VALUES:r}=a.CONSTANTS,s="segmentationPresentationId",l=(e,{viewport:t,viewports:n,isUpdatingSameViewport:o,servicesManager:i})=>{if(e===s)return c({viewport:t,servicesManager:i})},c=({viewport:e,servicesManager:t})=>{if(!e?.viewportOptions||!e.displaySetInstanceUIDs?.length)return;const{displaySetInstanceUIDs:n,viewportOptions:o}=e;let s=o.orientation;if(!s){const e=t.services.displaySetService.getDisplaySetByUID(n[0]),o=e.images?.[0],i=o?.ImageOrientationPatient;s=(e=>{if(!e||6!==e.length)return;const t=e.slice(0,3),n=e.slice(3,6),o=[-n[0],-n[1],-n[2]];return a.utilities.isEqual(t,r.axial.viewRight)&&a.utilities.isEqual(o,r.axial.viewUp)?"axial":a.utilities.isEqual(t,r.sagittal.viewRight)&&a.utilities.isEqual(o,r.sagittal.viewUp)?"sagittal":a.utilities.isEqual(t,r.coronal.viewRight)&&a.utilities.isEqual(o,r.coronal.viewUp)?"coronal":void 0})(i)}const l=[];return l.push(...n),l.join(i.FG)},d=e=>({type:s,segmentationPresentationStore:{},clearSegmentationPresentationStore:()=>e({segmentationPresentationStore:{}},!1,"clearSegmentationPresentationStore"),addSegmentationPresentationItem:(t,n)=>e((e=>({segmentationPresentationStore:{...e.segmentationPresentationStore,[t]:[...e.segmentationPresentationStore[t]||[],n]}})),!1,"addSegmentationPresentationItem"),setSegmentationPresentation:(t,n)=>e((e=>({segmentationPresentationStore:{...e.segmentationPresentationStore,[t]:n}})),!1,"setSegmentationPresentation"),getPresentationId:l,getSegmentationPresentationId:c}),m=(0,o.vt)()(d)},68578:(e,t,n)=>{n.d(t,{U:()=>a});var o=n(78713);n(21978);const i=e=>({synchronizersStore:{},type:"synchronizersStoreId",setSynchronizers:(t,n)=>{e((e=>({synchronizersStore:{...e.synchronizersStore,[t]:n}})),!1,"setSynchronizers")},clearSynchronizersStore:()=>{e({synchronizersStore:{}},!1,"clearSynchronizersStore")}}),a=(0,o.vt)()(i)},23672:(e,t,n)=>{n.d(t,{A:()=>d});var o=n(15327);const i="stack",a="volume",r="orthographic",s="volume3d",l="video",c="wholeslide";function d(e,t){const n=t?.[0]?.viewportType?.toLowerCase()||e.toLowerCase();if(n===i)return o.Enums.ViewportType.STACK;if(n===l)return o.Enums.ViewportType.VIDEO;if(n===c)return o.Enums.ViewportType.WHOLE_SLIDE;if(n===a||n===r)return o.Enums.ViewportType.ORTHOGRAPHIC;if(n===s)return o.Enums.ViewportType.VOLUME_3D;throw new Error(`Invalid viewport type: ${e}. Valid types are: stack, volume, video, wholeslide`)}}}]);
//# sourceMappingURL=7241.bundle.a69097632ecbb0fd2f45.js.map