<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">We’re working with some of our users to improve SlideBook file import for OMERO but could use some help. First, we tested using stock OMERO.insight 5.4.10. Importing the .SLD files results in the following error (as the default importer does not handle new data):</div><div class=""><br class=""></div><div class="">2019-05-31 16:53:17,563 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) processor is INTEL_64 os.arch is amd64 <br class="">2019-05-31 16:53:17,563 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) architecture is WINDOWS_64 <a href="http://os.name" class="">os.name</a> is windows 10 <br class="">2019-05-31 16:53:17,566 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) architecture is WINDOWS_64 <a href="http://os.name" class="">os.name</a> is windows 10 <br class="">2019-05-31 16:53:17,566 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) platform specific path is META-INF/lib/windows_64/ <br class="">2019-05-31 16:53:17,566 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) mappedLib is turbojpeg.dll <br class="">2019-05-31 16:53:17,566 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) URL is jar:file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/turbojpeg.jar!/META-INF/lib/windows_64/turbojpeg.dll <br class="">2019-05-31 16:53:17,566 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) URL path is file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/turbojpeg.jar!/META-INF/lib/windows_64/turbojpeg.dll <br class="">2019-05-31 16:53:17,570 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) Extracting 'jar:file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/turbojpeg.jar!/META-INF/lib/windows_64/turbojpeg.dll' to 'C:\Users\bode\AppData\Local\Temp\turbojpeg716059823595712527.dll' <br class="">2019-05-31 16:53:24,193 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) OMERO Version: 5.4.10-ice36-b105 <br class="">2019-05-31 16:53:24,195 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) Bioformats version: 5.9.2 revision: 9fc607f85b8900be786813296f1eee75cc1ed883 date: 31 August 2018 <br class="">2019-05-31 16:53:24,211 INFO [ ome.formats.importer.ImportCandidates] ( Thread-14) Depth: 4 Metadata Level: MINIMUM <br class="">2019-05-31 16:53:24,252 INFO [ loci.formats.ImageReader] ( Thread-14) SlidebookReader initializing C:\Users\bode\Desktop\Streaming Phasor Test.sld <br class="">2019-05-31 16:53:24,256 INFO [ loci.formats.FormatHandler] ( Thread-14) Finding offsets to pixel data <br class="">2019-05-31 16:53:24,598 INFO [ loci.formats.FormatHandler] ( Thread-14) Determining dimensions <br class=""><div class="">2019-05-31 16:53:24,604 INFO [ ome.formats.importer.ImportCandidates] ( Thread-14) 1 file(s) parsed into 0 group(s) with 1 call(s) to setId in 387ms. (393ms total) [0 unknowns] <br class=""></div><div class=""><br class=""></div><div class="">Next, we copied the SlideBook6Reader.jar into the lib folder. This is picked up and executed, and the metadata is read correctly. However, no pixel data is read, and I get the following exception:</div><div class=""><br class=""></div><div class="">2019-05-31 16:55:13,347 WARN [ o.o.s.a.m.editor.AnnotationTaskPane] (nitializer) UI for displaying ROIS annotations not implemented yet! <br class="">2019-05-31 16:55:13,737 DEBUG [ omero.gateway.facility.Facility$1] ( Thread-10) Created new BrowseFacility <br class="">2019-05-31 16:55:21,534 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) processor is INTEL_64 os.arch is amd64 <br class="">2019-05-31 16:55:21,535 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) architecture is WINDOWS_64 <a href="http://os.name" class="">os.name</a> is windows 10 <br class="">2019-05-31 16:55:21,537 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) architecture is WINDOWS_64 <a href="http://os.name" class="">os.name</a> is windows 10 <br class="">2019-05-31 16:55:21,537 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] (entQueue-0) platform specific path is META-INF/lib/windows_64/ <br class="">2019-05-31 16:55:21,537 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) mappedLib is turbojpeg.dll <br class="">2019-05-31 16:55:21,537 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) URL is jar:file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/turbojpeg.jar!/META-INF/lib/windows_64/turbojpeg.dll <br class="">2019-05-31 16:55:21,537 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) URL path is file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/turbojpeg.jar!/META-INF/lib/windows_64/turbojpeg.dll <br class="">2019-05-31 16:55:21,541 DEBUG [ org.scijava.nativelib.BaseJniExtractor] (entQueue-0) Extracting 'jar:file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/turbojpeg.jar!/META-INF/lib/windows_64/turbojpeg.dll' to 'C:\Users\bode\AppData\Local\Temp\turbojpeg2282115949619483911.dll' <br class="">2019-05-31 16:55:30,033 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) OMERO Version: 5.4.10-ice36-b105 <br class="">2019-05-31 16:55:30,034 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) Bioformats version: 5.9.2 revision: 9fc607f85b8900be786813296f1eee75cc1ed883 date: 31 August 2018 <br class="">2019-05-31 16:55:30,053 INFO [ ome.formats.importer.ImportCandidates] ( Thread-14) Depth: 4 Metadata Level: MINIMUM <br class="">2019-05-31 16:55:30,067 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] ( Thread-14) architecture is WINDOWS_64 <a href="http://os.name" class="">os.name</a> is windows 10 <br class="">2019-05-31 16:55:30,068 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] ( Thread-14) architecture is WINDOWS_64 <a href="http://os.name" class="">os.name</a> is windows 10 <br class="">2019-05-31 16:55:30,068 DEBUG [ org.scijava.nativelib.NativeLibraryUtil] ( Thread-14) platform specific path is META-INF/lib/windows_64/ <br class="">2019-05-31 16:55:30,068 DEBUG [ org.scijava.nativelib.BaseJniExtractor] ( Thread-14) mappedLib is SlideBook6Reader.dll <br class="">2019-05-31 16:55:30,069 DEBUG [ org.scijava.nativelib.BaseJniExtractor] ( Thread-14) URL is jar:file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/SlideBook6Reader.jar!/META-INF/lib/windows_64/SlideBook6Reader.dll <br class="">2019-05-31 16:55:30,069 DEBUG [ org.scijava.nativelib.BaseJniExtractor] ( Thread-14) URL path is file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/SlideBook6Reader.jar!/META-INF/lib/windows_64/SlideBook6Reader.dll <br class="">2019-05-31 16:55:30,072 DEBUG [ org.scijava.nativelib.BaseJniExtractor] ( Thread-14) Extracting 'jar:file:/C:/Users/bode/Downloads/OMERO.insight-5.4.10-ice36-b105-win(1)/OMERO.insight-5.4.10-ice36-b105-win/libs/SlideBook6Reader.jar!/META-INF/lib/windows_64/SlideBook6Reader.dll' to 'C:\Users\bode\AppData\Local\Temp\SlideBook6Reader2121001236271405033.dll' <br class="">2019-05-31 16:55:30,111 INFO [ loci.formats.ImageReader] ( Thread-14) SlideBook6Reader initializing C:\Users\bode\Desktop\Streaming Phasor Test.sld <br class="">2019-05-31 16:55:30,218 INFO [ ome.formats.importer.ImportCandidates] ( Thread-14) 1 file(s) parsed into 1 group(s) with 1 call(s) to setId in 159ms. (165ms total) [0 unknowns] <br class="">2019-05-31 16:55:31,552 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) OMERO Version: 5.4.10-ice36-b105 <br class="">2019-05-31 16:55:31,552 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) Bioformats version: 5.9.2 revision: 9fc607f85b8900be786813296f1eee75cc1ed883 date: 31 August 2018 <br class="">2019-05-31 16:55:31,554 INFO [ ome.formats.importer.ImportCandidates] ( Thread-14) Depth: 4 Metadata Level: MINIMUM <br class="">2019-05-31 16:55:31,574 INFO [ loci.formats.ImageReader] ( Thread-14) SlideBook6Reader initializing C:\Users\bode\Desktop\Streaming Phasor Test.sld <br class="">2019-05-31 16:55:31,630 INFO [ ome.formats.importer.ImportCandidates] ( Thread-14) 1 file(s) parsed into 1 group(s) with 1 call(s) to setId in 73ms. (76ms total) [0 unknowns] <br class="">2019-05-31 16:55:31,631 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) OMERO Version: 5.4.10-ice36-b105 <br class="">2019-05-31 16:55:31,631 INFO [ ome.formats.importer.ImportConfig] ( Thread-14) Bioformats version: 5.9.2 revision: 9fc607f85b8900be786813296f1eee75cc1ed883 date: 31 August 2018 <br class="">2019-05-31 16:55:32,980 DEBUG [ ome.services.blitz.util.CurrentPlatform] ( Thread-14) recognized current operating system as being Microsoft Windows <br class="">2019-05-31 16:55:33,877 INFO [ o.f.i.transfers.UploadFileTransfer] ( Thread-14) Transferring C:\Users\bode\Desktop\Streaming Phasor Test.sld... <br class="">2019-05-31 16:55:42,722 ERROR [o.o.s.e.data.views.calls.ThumbnailLoader] ( Thread-17) API erroromero.InternalException<br class=""> serverStackTrace = "ome.conditions.InternalException: Wrapped Exception: (java.lang.AssertionError):<br class=""> File not open.<br class=""> at loci.formats.in.SlideBook6Reader.readImagePlaneBuf(Native Method)<br class=""> at loci.formats.in.SlideBook6Reader.openBytes(SlideBook6Reader.java:153)<br class=""> at loci.formats.ImageReader.openBytes(ImageReader.java:460)<br class=""> at loci.formats.ChannelFiller.openBytes(ChannelFiller.java:156)<br class=""> at loci.formats.ChannelSeparator.openBytes(ChannelSeparator.java:227)<br class=""> at loci.formats.ChannelSeparator.openBytes(ChannelSeparator.java:149)<br class=""> at loci.formats.ReaderWrapper.openBytes(ReaderWrapper.java:341)<br class=""> at ome.io.bioformats.BfPixelsWrapper.getWholePlane(BfPixelsWrapper.java:366)<br class=""> at ome.io.bioformats.BfPixelsWrapper.getPlane(BfPixelsWrapper.java:263)<br class=""> at ome.io.bioformats.BfPixelBuffer.getPlane(BfPixelBuffer.java:209)<br class=""> at omeis.providers.re.data.PlaneFactory.createPlane(PlaneFactory.java:208)<br class=""> at omeis.providers.re.GreyScaleStrategy.renderAsPackedInt(GreyScaleStrategy.java:153)<br class=""> at omeis.providers.re.Renderer.renderAsPackedInt(Renderer.java:558)<br class=""> at ome.services.ThumbnailBean.createScaledImage(ThumbnailBean.java:648)<br class=""> at ome.services.ThumbnailBean.retrieveThumbnail(ThumbnailBean.java:1255)<br class=""> at ome.services.ThumbnailBean.getThumbnailWithoutDefault(ThumbnailBean.java:1127)<br class=""> at sun.reflect.GeneratedMethodAccessor943.invoke(Unknown Source)<br class=""> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br class=""> at java.lang.reflect.Method.invoke(Method.java:498)<br class=""> at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)<br class=""> at ome.security.basic.EventHandler.invoke(EventHandler.java:154)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at ome.tools.hibernate.SessionHandler.doStateful(SessionHandler.java:216)<br class=""> at ome.tools.hibernate.SessionHandler.invoke(SessionHandler.java:200)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at ome.tools.hibernate.ProxyCleanupFilter$Interceptor.invoke(ProxyCleanupFilter.java:249)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at ome.services.util.ServiceHandler.invoke(ServiceHandler.java:121)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)<br class=""> at com.sun.proxy.$Proxy102.getThumbnailWithoutDefault(Unknown Source)<br class=""> at sun.reflect.GeneratedMethodAccessor943.invoke(Unknown Source)<br class=""> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br class=""> at java.lang.reflect.Method.invoke(Method.java:498)<br class=""> at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)<br class=""> at ome.security.basic.BasicSecurityWiring.invoke(BasicSecurityWiring.java:93)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at ome.services.blitz.fire.AopContextInitializer.invoke(AopContextInitializer.java:43)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)<br class=""> at com.sun.proxy.$Proxy102.getThumbnailWithoutDefault(Unknown Source)<br class=""> at sun.reflect.GeneratedMethodAccessor1291.invoke(Unknown Source)<br class=""> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br class=""> at java.lang.reflect.Method.invoke(Method.java:498)<br class=""> at ome.services.blitz.util.IceMethodInvoker.invoke(IceMethodInvoker.java:172)<br class=""> at ome.services.throttling.Callback.run(Callback.java:56)<br class=""> at ome.services.throttling.InThreadThrottlingStrategy.callInvokerOnRawArgs(InThreadThrottlingStrategy.java:56)<br class=""> at ome.services.blitz.impl.AbstractAmdServant.callInvokerOnRawArgs(AbstractAmdServant.java:140)<br class=""> at ome.services.blitz.impl.ThumbnailStoreI.getThumbnailWithoutDefault_async(ThumbnailStoreI.java:132)<br class=""> at sun.reflect.GeneratedMethodAccessor1290.invoke(Unknown Source)<br class=""> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br class=""> at java.lang.reflect.Method.invoke(Method.java:498)<br class=""> at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)<br class=""> at omero.cmd.CallContext.invoke(CallContext.java:85)<br class=""> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br class=""> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)<br class=""> at com.sun.proxy.$Proxy103.getThumbnailWithoutDefault_async(Unknown Source)<br class=""> at omero.api._ThumbnailStoreTie.getThumbnailWithoutDefault_async(_ThumbnailStoreTie.java:162)<br class=""> at omero.api._ThumbnailStoreDisp.___getThumbnailWithoutDefault(_ThumbnailStoreDisp.java:607)<br class=""> at omero.api._ThumbnailStoreDisp.__dispatch(_ThumbnailStoreDisp.java:1026)<br class=""> at IceInternal.Incoming.invoke(Incoming.java:221)<br class=""> at Ice.ConnectionI.invokeAll(ConnectionI.java:2536)<br class=""> at Ice.ConnectionI.dispatch(ConnectionI.java:1145)<br class=""> at Ice.ConnectionI.message(ConnectionI.java:1056)<br class=""> at IceInternal.ThreadPool.run(ThreadPool.java:395)<br class=""> at IceInternal.ThreadPool.access$300(ThreadPool.java:12)<br class=""> at IceInternal.ThreadPool$EventHandlerThread.run(ThreadPool.java:832)<br class=""> at java.lang.Thread.run(Thread.java:748)<br class=""> "<br class=""> serverExceptionClass = "ome.conditions.InternalException"<br class=""> message = " Wrapped Exception: (java.lang.AssertionError):<br class=""> File not open."<br class="">at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br class="">at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)<br class="">at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)<br class="">at java.lang.reflect.Constructor.newInstance(Unknown Source)<br class="">at java.lang.Class.newInstance(Unknown Source)<br class="">at IceInternal.BasicStream.createUserException(BasicStream.java:2779)<br class="">at IceInternal.BasicStream.access$300(BasicStream.java:14)<br class="">at IceInternal.BasicStream$EncapsDecoder10.throwException(BasicStream.java:3298)<br class="">at IceInternal.BasicStream.throwException(BasicStream.java:2291)<br class="">at IceInternal.OutgoingAsync.throwUserException(OutgoingAsync.java:399)<br class="">at omero.api.ThumbnailStorePrxHelper.end_getThumbnailWithoutDefault(ThumbnailStorePrxHelper.java:3248)<br class="">at omero.api.ThumbnailStorePrxHelper.getThumbnailWithoutDefault(ThumbnailStorePrxHelper.java:3119)<br class="">at omero.api.ThumbnailStorePrxHelper.getThumbnailWithoutDefault(ThumbnailStorePrxHelper.java:3106)<br class="">at org.openmicroscopy.shoola.env.data.views.calls.ThumbnailLoader.loadThumbnail(ThumbnailLoader.java:342)<br class="">at org.openmicroscopy.shoola.env.data.views.calls.ThumbnailLoader.handleBatchCall(ThumbnailLoader.java:245)<br class="">at org.openmicroscopy.shoola.env.data.views.calls.ThumbnailLoader.access$100(ThumbnailLoader.java:73)<br class="">at org.openmicroscopy.shoola.env.data.views.calls.ThumbnailLoader$1.doCall(ThumbnailLoader.java:218)<br class="">at org.openmicroscopy.shoola.env.data.views.BatchCall.doStep(BatchCall.java:144)<br class="">at org.openmicroscopy.shoola.util.concur.tasks.CompositeTask.doStep(CompositeTask.java:226)<br class="">at org.openmicroscopy.shoola.env.data.views.CompositeBatchCall.doStep(CompositeBatchCall.java:126)<br class="">at org.openmicroscopy.shoola.util.concur.tasks.ExecCommand.exec(ExecCommand.java:165)<br class="">at org.openmicroscopy.shoola.util.concur.tasks.ExecCommand.run(ExecCommand.java:276)<br class="">at org.openmicroscopy.shoola.util.concur.tasks.AsyncProcessor$Runner.run(AsyncProcessor.java:91)<br class="">at java.lang.Thread.run(Unknown Source)</div></div><div class=""><br class=""></div><div class="">I’ve tested the same jars in Fiji and they are working fine, so I am guessing there is something different going on in terms of file open/close flow. I can’t find the source of the "File not open.” error message - it is the case that in order to read pixel data the file must be parsed and read, but I’d also presume this happens when the metadata is read. We have some specific exceptions thrown when a file is closed and then attempted to be read, so it would help to understand where that message is coming from. We also updated the jar on the server as well, though it’s unclear if that’s required or not (is pixel data stored directly or accessed on the server).</div><div class=""><br class=""></div><div class="">Anyway any direction you could provide would be much appreciated. This feels like the right direction - similar to Fiji dropping the library into the Bio-Formats installation immediately moves things to the SlideBook6Reader.jar.</div><div class=""><br class=""></div><div class="">Thanks again for your help,</div><div class=""><br class=""></div><div class="">Brian</div><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class=""><div style="font-family: Optima; orphans: 2; widows: 2; color: rgb(94, 94, 94);" class=""><span class="Apple-style-span" style="font-size: 13px;">Brian Bodensteiner</span></div><div style="font-family: Optima; orphans: 2; widows: 2; color: rgb(94, 94, 94);" class="">Vice President Engineering</div><div style="font-family: Optima; orphans: 2; widows: 2; color: rgb(94, 94, 94);" class=""><font color="#005493" style="font-size: 13px;" class=""><br class=""></font></div><div style="font-family: Optima; orphans: 2; widows: 2; color: rgb(94, 94, 94);" class=""><font color="#005493" size="4" class="">Intelligent Imaging Innovations (3i)</font></div><div style="font-family: Optima; orphans: 2; widows: 2;" class=""><font color="#005493" class="">3509 Ringsby Court</font></div><div style="font-family: Optima; orphans: 2; widows: 2;" class=""><font color="#005493" class="">Denver, CO 80216 USA</font></div><div style="orphans: 2; widows: 2;" class=""><font color="#005493" face="Optima" class="">1-424-744-5941</font></div><div style="orphans: 2; widows: 2;" class=""><span style="font-family: Optima; color: rgb(0, 84, 147);" class=""><a href="http://www.intelligent-imaging.com" class="">www.intelligent-imaging.com</a></span></div></div><div class=""><br class=""></div></div></div><br class="Apple-interchange-newline">
</div>
<br class=""></body></html>