20 Replies Latest reply on May 18, 2020 7:33 PM by drozwood90

    Avnet Vitis platform build for UZ7EV_EVCC error

    kvanwezemael

      Hello,

       

      Running the make build script from the Avnet/Vitis repository is causing some problems.

      My machine is a Ubuntu 18.04.1 LTS VM. I have the latest and greatest toolchain versions 2019.2 (Vitis,Vivado and Petalinux) from Xilinx installed

      In my repository directory I have cloned avnet's bdf,hdl,petalinux and vitis repositories together.

       

      I did run the "source" commands for vitis,petalinux and vivado (settings.sh) before launching the make file

      The script seems to building everything fine, but at the end (consolidating) there seems to be a hickup.

       

      Could you tell me if I need to install additional software, or help me out?

       

      With kind regards,

       

      Kris

       

        • Re: Avnet Vitis platform build for UZ7EV_EVCC error
          drozwood90

          Hi Kris,

           

          This is not fully supported yet.

          I personally do not see that issue building using this same command.  it is likely the configuration of your build machine.

           

           

          --Dan

            • Re: Avnet Vitis platform build for UZ7EV_EVCC error
              drozwood90

              Kris,

               

              This might help, here is the setup for my terminal:

               

               

              However, I just installed using the Xilinx documentation as well as some of Adam Taylor's blogs.  I don't have an Avnet installation guide at this time to guide you.

               

              --Dan

                • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                  kvanwezemael

                  Hello Dan,

                   

                  No luck so far. My VM was built in the past using Adam's guidance. I verified presence in it of Vitis, Petalinux, OpenCL and XRT.

                   

                  I copied your terminal setup file (I was missing out the XRT setup) but to no avail. Shoult the PLATFORM_REPO_PATHS variable point to a base folder for Avnet's repositories?

                   

                  I will do a make clean now and build the target again from scratch. I'll keep you posted.

                   

                  Kris

                    • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                      drozwood90

                      Kris,

                       

                      That doesn't matter.  You can remove that if you want.  That's just there to default the platform repo in Vitis's wizard.

                      I have been tracking down some issues and personally feel they are related to using Ubuntu 18.

                       

                      --Dan

                        • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                          drozwood90

                          Kris,

                           

                          If you want to experiment, you might want to try building like this:

                          # cleans everything

                          make UZ7EV_EVCC step=cleanall

                          # builds the XSA then the petalinux - relies on the PLNX to actually create the XSA

                          make UZ7EV_EVCC step=plnx

                          # creates sysroot contents from build artifacts

                          make UZ7EV_EVCC step=sysroot

                          # combines everything together to meld into the platform

                          make UZ7EV_EVCC step=pfm

                           

                          Execute one line at a time - do not copy/paste all of those into the terminal.  It seems it will execute too fast and can cause strange issues.

                          I've seen some strange caching issues if you hammer things too fast* due to how make multi-threads things and again only seems to be on Ubuntu18.

                           

                          --Dan

                           

                          * when I say too fast, I mean in 1 thread - if you execute those 1 at a time BY HAND as separate executions it seems to work better.

                          1 of 1 people found this helpful
                            • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                              kvanwezemael

                              Hello Dan,

                               

                              I got to the end of the script, but in an odd way. I'll post my solution here as a possible workaround for others, while you guys can take time to finalize these scripts.

                              May I also suggest adding QEMU support files for Vitis, these would be helpfull to keep development cycles shorter.

                               

                              I'll post a screenshot after the vivado step below that may be helpful.

                               

                              I started of using your terminal script, combined with altering the APP_PETALINUX_INSTALL_PATH and APP_VIVADO_INSTALL_PATH variables in make_uz_petalinux_bsp.sh for the petalinux part.

                               

                              Then:

                              1. I started off in the vitis repo with zapping everything using "make step=cleanall"

                              2. From there I tried my luck with in building all with "make UZ7EV" -> This would halt suddenly on the building petalinux step, with failure in running make_uz_petalinux_bsp.sh (I could not figure out why)

                              3. I then ran the same "make_uz_petalinux_bsp.sh" again by hand from inside the petalinux repository -> Petalinux build completes fine.

                              4. Back in the vitis repo you must however clean the sysroot with "make UZ7EV step=cleansysroot" -> I you do not the pfm step fails later on

                              5. Build the sysroot again with "make UZ7EV step=sysroot"

                              6. Build the platform_repo using "make UZ7EV step=pfm"

                              7. Ran everything again for verification with "make UZ7EV" -> All was green!

                               

                               

                              Kris

                              2 of 2 people found this helpful
                                • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                  drozwood90

                                  Kris,

                                   

                                  Thanks for the feedback!

                                  Can I ask, once you got that far, were you able to run through a Hello World?

                                  With Ubuntu 18, every once in a while, I get a strange V++ linker issue that I have been trying to track down.  It appears on only 1 of my build machines, and seems to only pop up when I do a complete end to end make.  Sometimes it appears that make has gotten ahead of itself.  Which is strange as I do not think make does that.  Then again, I've also seen where FLOODING Ubuntu 18 with processes can cause the OS to silently kill off those threads.  On the other hand, I've colleagues that also have been testing this without any issues.

                                   

                                  I find it strange that the tool location variables caused you issues like that.  Have you used our PetaLinux scripting in the past?  If so, have you had to adjust that?  From the perspective of the script, it should be kicking off a TOTALLY new thread with all variables / terminal configurations, and it should be seeing that as if you were in the /petalinux/scripts folder running the shell command.  Can you confirm that you used the example terminal configuration as I posted it and that the tools are in those locations?

                                   

                                  Rebuilding the sysroot is normal in this case - I'll see if there is maybe some better protection against this - as it seems the process started and failed.  We are still working on the best approach for this.

                                   

                                  Again, I really do appreciate that you are working with us on this, as it is hard to get feedback from the field and at this time, this is the right time!  This was just the first public push to start allowing my team to replicate customer environments and look for bugs/issues.

                                   

                                  --Dan

                                    • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                      kvanwezemael

                                      Hello Dan,

                                       

                                      In the end my goal is to be able to use the Ultrazed-EV as a SDSoC board in Vitis. This being said, the price to pay in Vitis -in time resources- for a complete synthesis place and route per kernel is way too high.

                                      For this reason the qemu emulator will become very important to me, as I will be needing it for software emulation. Hardware emulation will be done for performance estimations. A full scale deploy on hardware will only be done sporadically.

                                       

                                      With the help of Adam Taylor's guidance for the platform build with HW and SW components and the Xilinx documentation and a lot of effort(complete beginner), I did get to this point without Avnet's scripts. Without the scripts I did manage to build Petalinux and got the sample Vector addidtion running on the board, but did not get to running Qemu in Vitis.

                                      I only did a small project before on a board using Microblaze and Xilinx SDK, so the step upwards to Vitis and learning curve for the EV was (and is still) a biggie :-)

                                       

                                      Now to help you guys further:

                                      Yesterday I managed to get to the end of the script. The products of the script in the vitis repo are a platform_repo folder and in the existing UZ7EV folder another consolidated and platform_workspace folder.

                                      My guess is that later on you will be creating a usable vitis workspace in the platform_workspace folder. This is yet to be completed.

                                      Currently the platform project sitting the folder "UZ7EV" is not seen when I launch Vitis with the platform_workspace location as its --workspace parameter.

                                      The consolidated folder is ideal to reference for the linux platform build requirements in Vitis. I my opinion its use should be extended to support the Qemu part as well and allow simulations on the platform project in Vitis.

                                       

                                      So in order to get going, I created a new platform project in the platform_workspace, derived from the reference in the platform_repo folder. From there I build the sample Vector addition app in hardware and ran it successfully on the board doing a manual SD Card transfer. I would have tried a TCF transfer of the executable using Vitis, but currently I have a network problem prohibiting me of doing so (A little short on gear and Europe is currently locked down due to the Corona virus)

                                      I would like to note that at the end of the boot sequence, the system spews some warnings

                                       

                                      My Xilinx's tools are installed for the current user:

                                      /home/user/tools/Xilinx/Vivado

                                      /home/user/tools/Xilinx/Vitis

                                      /home/user/tools/Xilinx/Petalinux

                                       

                                      I did not used Avnet's scripting before. I only discovered them recently and was a bit puzzled in the beginning as dependencies between the repo's and their locations where not clear to me.

                                      In order to complete the vitis repo build, I only needed to modify the petalinux build script's INSTALL_PATH as I described before.

                                       

                                      --Kris

                                      • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                        kvanwezemael

                                        Dan,

                                         

                                        My terminal script looks like this: (the make executes now fine as it is not trying to rebuild anything)

                                         

                                          • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                            drozwood90

                                            Kris,

                                             

                                            Thanks for the detailed feedback!  I'll have to digest the above, but real quick, if I am understanding you, you are not seeing the platform in Vitis. Give me some time to get back to you on the rest.  I really do appreciate the feedback!

                                             

                                            Regarding the platform, not showing up. If you had gone through SDSoC training that we have produced, you might have guessed what the issue is.

                                            From your feedback, I believe that this is because you have to add it into the tool.  In Adam's work, he builds it USING the GUI, like in SDSoC, the tool is aware of the platform as it auto-added it after you created it.  When you build by script, the GUI has no idea about the platform - hence my experimenting with the export PLATFORM_REPO_PATHS in the setup script.  Using that and pointing to the vitis/platform_repo instead of where I was pointing it in the above screen shot would do the same as the below - except EVERY time you open the GUI.  What I have pasted below is good PER workspace.  That is, the workspace will remember this setting unless overridden / modified.

                                             

                                            Here is a snip that I have from some instructions I have been using to teach my colleges about what to do:

                                            Launch Vitis

                                            Close the welcome screen

                                            Right click the explorer panel and choose new application project

                                            Choose a name, doesn’t matter what, I like to keep it relevant to what I am building.  Note, whatever you choose, that is going to be the name of the application later.

                                            Select the PLUS

                                            Navigate to where you have the platforms

                                            Choose OK

                                            Select the platform you want to use

                                             

                                            I'll add this for you, until we progress with adding any emulation, please make certain that you also choose HARDWARE only build.


                                            I will go back and re-read to fully get what you are saying as you mentioned SDSoC and other things.  If you are needing SDSoC, we have this entire setup for SDSoC - vetted and working right now, which you could start with.  If you are looking for Vitis, that is what we are working on and I appreciate your continued patience and help assessing the flow.

                                            --Dan

                                            1 of 1 people found this helpful
                                              • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                kvanwezemael

                                                Hello Dan,

                                                 

                                                Today I tried what you mentioned above. As you suggested, the UZ7EV_EVCC project generated in platform_workspace now becomes usable. Thanks for your explanation.

                                                In my personal opinion, I like a separate platform project in the GUI, because you get keep the configurability of that project, for instance if you do not want to build the zynqmp_fsbl and pmufw from source or need to alter resource locations.

                                                 

                                                I also tried the latest update of the Avnet repo which in addition to the previous is causing problems in the sysroot build. Latest commits where all sysroot related, so this could happen.

                                                 

                                                --Kris

                                                  • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                    drozwood90

                                                    Hi Kris,

                                                     

                                                    Thanks for that, I didn't want to keep you hanging.  I've been trying to track this down the last few days.  That data point has been ENORMOUS as I can say "it's not me" nor my setup as you did NOT follow MY instructions and are having similar issues.  Something in this perfect storm of stuff is causing issues.  I suspect something in the make flow, combined with Ubuntu 18, and multithreading continues to plague the builds. It is SOMETHING in that perfect storm, as I've pulled the Xilinx example code and after adjusting for the Jobs=16 issue, I can build scratch --> platform using their code.  So, I do believe it is something with how I have make controlling my flow.

                                                     

                                                    As research for this, I've used Ubuntu 16.04.6, 18.04.1, 18.04.3 (not officially supported).

                                                     

                                                    It seems there are a slew of workarounds, but why you need them does not make sense.

                                                     

                                                    I'm still working on this and will be updating as I can.  In the mean time, if you use && and call out separate build targets the recipes seem to work.  It is kind of related to what you saw earlier - where all you had to do is call the same build flow and the second time it completed.

                                                    Decisions on file status and similar are incorrect for some reason.  For example, part of my experimentation into this, I tested deleting a file and checking if it was there.  I added a sleep of 30 after the delete, then checked in a file explorer for the status of the file.  It was deleted.  Make reported the file was still there.  Again, it is not necessarily make, it just happens to be the perfect storm of all that stuff. 

                                                     

                                                    If you force to 1 core in Linux, using taskset, the build can take up to 5 hours, but it does it perfectly fine 3/3 times for me.

                                                    taskset 0x1 make ultra96v2_oob

                                                     

                                                    If you use separate commands or use && calling out separate targets, it also runs fine.

                                                    make ultra96v2_oob step=xsa

                                                    make ultra96v2_oob step=plnx

                                                    make ultra96v2_oob step=sysroot

                                                    make ultra96v2_oob step=pfm

                                                     

                                                    --- or ---

                                                     

                                                    make ultra96v2_oob step=xsa && make ultra96v2_oob step=plnx && make ultra96v2_oob step=sysroot && make ultra96v2_oob step=pfm

                                                     

                                                    I've not tried running things in a shell script, as that would defeat the purpose of using make to begin with...but I suspect it would be fine as that would essentially replicate calling each command by itself one after another.  For those reading this that are "Windowz" users, think Batch file!

                                                    On Ubuntu16, testing is not completed, so far I've 100% success rate building "make ultra96v2_oob".  I've seen similar with a Jobs=16 issue that I posted about on here.

                                                     

                                                    ---of course you can replace ultra96v2_oob with any of the targets, such as UltraZed-EV.  I was just copy/pasting from my build machine and testing notes. 

                                                     

                                                    --Dan

                                                     

                                                    P.S. Also, as of this post, we are working on a bug for the UltraZed-EG.  That platform does build, however, it can have Ethernet/DisplayPort issues - again we have not tagged / released anything so your mileage will vary until we tag for those two platforms / PetaLinux BSPs.

                                                    1 of 1 people found this helpful
                                                      • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                        drozwood90

                                                        Kris,

                                                         

                                                        I wanted to update you.  I believe that all bugs are now fixed and we have platforms that we are testing.  Feel free to update your repos.  PetaLinux, and Vitis were updated.

                                                        While this is not everything, it is a really good starting point.  The only thing not tested yet are the AI pieces.  Everything else seems to now be working!

                                                         

                                                        I would expect official pre-built platforms this coming week.

                                                         

                                                        --Dan

                                                          • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                            kvanwezemael

                                                            Hello Dan,

                                                             

                                                            Thanks for letting me know. I updated the repo's as you suggested.

                                                             

                                                            After sourcing the terminal script and executing a <make cleanall>, I again launched a <make UZ7EV>. As before the Vivado build runs fine, but the petalinux build step fails.

                                                            After updating my petalinux and vivado tool install path locations in ~/repos/Avnet/petalinux/scripts/make_uz_petalinux_bsp.sh, I tried cleaning and continuing with the script but failed.

                                                            I then launched the petalinux build script by hand from the same terminal <./make_uz_petalinux_bsp.sh UZ7EV>

                                                            From there I switched back to the Vitis repo and was able to resume the build script with <make UZ7EV_EVCC>

                                                            From there the build script did finish. All build products seem to be there.

                                                             

                                                            It seems that on my system, the build can be completed but the original problem of having to execute the petalinux build script by hand has remained. I also did not see any sign of qemu support files, which is a pitty.

                                                             

                                                            With kind regards,

                                                             

                                                            Kris

                                                            2 of 2 people found this helpful
                                                              • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                                drozwood90

                                                                Kris,

                                                                 

                                                                I am still investigating the QEMU item.  1 thing at a time.  I was working on tracking the build script issues.  It is strange that your system is still having issues.

                                                                 

                                                                Just to humor me, could you do a fresh pull into a new folder of all 4 repositories and try to execute UZ7EV from the /vitis root?  I have built this 4 times between 2 different machines and a colleague has built the whole things once through on his setup without any issues.  10.85 hours each build of the 4 platforms (use time make UZ7EV to get that number)

                                                                 

                                                                The error message looks like when it updated, there was an erroneous character added and I'm not sure if you got the tagged file (which should match the 2019.2 branch tip for hdl/plnx repo and just be TIP for the other two repos),

                                                                 

                                                                --open terminal
                                                                mkdir projects
                                                                cd projects
                                                                mkdir <project>
                                                                cd <project>
                                                                git clone https://github.com/Avnet/bdf.git
                                                                git clone https://github.com/Avnet/hdl.git
                                                                git clone https://github.com/Avnet/petalinux.git
                                                                git clone https://github.com/Avnet/vitis.git
                                                                cd hdl
                                                                git checkout 2019.2 # or the tag you want to use
                                                                cd ..
                                                                cd petalinux
                                                                git checkout 2019.2     # or the tag you want to use
                                                                cd ../vitis
                                                                make UZ7EV_EVCC
                                                                
                                                                
                                                                

                                                                 

                                                                --Dan

                                                                1 of 1 people found this helpful
                                                                  • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                                    kvanwezemael

                                                                    Dan,

                                                                     

                                                                    The feedback that I can give you is that even when I follow you instructions by the letter, I still get an error at the same step in the build.

                                                                    My locale settings are:

                                                                      • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                                        drozwood90

                                                                        Kris,

                                                                         

                                                                        It just seems odd that you are getting issues with a complete FRESH pull of the repos.  We have as of yesterday 9 builds across a variety of machines without seeing that.

                                                                         

                                                                        The issue looks like it is in the petalinux script, as if the command line input was bad.

                                                                         

                                                                        Can you copy paste the command you are using to kick off the whole thing?

                                                                        That script seems to be getting something incorrect from the command line.  The error is on line 78, which in the case of the vitis scripting running the show, you do not have control over that.  The inputs to that comes from variables set in /vitis/UZ7EV-EVCC/Makefile

                                                                        lines 50/51.

                                                                         

                                                                        if [ "$1" == "UZ3EG_IOCC" ]

                                                                         

                                                                        Can you also copy/paste lines 127-148 from the projectMakefile.mk in your vitis folder?

                                                                         

                                                                        --Dan

                                                                        1 of 1 people found this helpful
                                                                          • Re: Avnet Vitis platform build for UZ7EV_EVCC error
                                                                            kvanwezemael

                                                                            Dan,

                                                                             

                                                                            I attached a complete textual dump from the terminal I was using to complete the build. I hope it will be usefull.

                                                                             

                                                                            Lines 128-147 from projectMakefile.mk

                                                                             

                                                                            plnx:

                                                                            ifneq (,$(wildcard ${PETALINUX_PROJECTS_FOLDER}/${PETALINUX_PROJECT_NAME}.bsp))

                                                                                @echo -e '${CSTR} BSP Exists, cleanbsp before rebuild'

                                                                                @echo -e '${CSTR}         Skipping BSP creation'

                                                                                @echo '        ' ${PETALINUX_PROJECTS_FOLDER}/${PETALINUX_PROJECT_NAME}.bsp

                                                                            else

                                                                                @echo -e '${CSTR} Making PLNX Project'

                                                                                @echo -e 'plnx: \n    ./make_${HDL_PROJECT_NAME}_bsp.sh ${HDL_BOARD_NAME}' > ${PETALINUX_SCRIPTS_FOLDER}/${MAKENAME}

                                                                                $(MAKE) -f ${MAKENAME} -C ${PETALINUX_SCRIPTS_FOLDER} plnx 

                                                                                #@echo

                                                                                #@echo

                                                                                #@echo -e '${LGRN}***********************'

                                                                                #@echo -e '  ${CSTR}'

                                                                                #@echo

                                                                                #@echo -e ' execute the build script from the PetaLinux flow,'

                                                                                #@echo -e ' which will auto generate the XSA'

                                                                                #@echo -e ' Scripting should be located:'

                                                                                #@echo -e ' ../petalinux/scripts'

                                                                                #@echo -e '    ./make_${HDL_PROJECT_NAME}_bsp.sh ${HDL_BOARD_NAME}'

                                                                                #@echo   

                                                                                #@echo -e '${LGRN}***********************'

                                                                            endif

                                                                             

                                                                            UZ7EV_EVCC/Makefile lines 40-60

                                                                             

                                                                             

                                                                            #-=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-

                                                                            # Project Variables

                                                                            #-=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-

                                                                            #

                                                                            # Enter the    Project Name     (from HDL repository)

                                                                            #              Board Name       (from HDL repository, will become Platform Name)

                                                                            #              PLNX Proj name   (from PetaLinux Make Script)

                                                                            #              PLNX ROOTFS name (from PetaLinux Make Script)

                                                                             

                                                                             

                                                                            HDL_PROJECT_NAME                  := uz_petalinux

                                                                            HDL_BOARD_NAME                    := UZ7EV_EVCC

                                                                            PETALINUX_PROJECT_NAME            := uz7ev_evcc_${PLNX_VER}

                                                                            PETALINUX_ROOTFS_NAME             := uz7ev_evcc

                                                                             

                                                                            VITIS_ARCHITECTURE                := psu_cortexa53

                                                                            VITIS_PROJECT_DESCRIPTION         := "UltraZed-EV Vitis platform based on the Out Of Box image.  More information can be found at https://www.element14.com/community/community/designcenter/zedboardcommunity/ultrazed/ultrazed-ev"

                                                                             

                                                                            # MPSoC     = aarch64-xilinx-linux

                                                                            # Zynq 7000 = cortexa9t2hf-neon-xilinx-linux-gnueabi

                                                                            SYSROOTTYPE                       := aarch64-xilinx-linux

                                                                             

                                                                            make_uz_petalinux_bsp.sh lines 74-102

                                                                             

                                                                            BUILD_UZ3EG_IOCC=no

                                                                            BUILD_UZ3EG_PCIEC=no

                                                                            BUILD_UZ7EV_EVCC=no

                                                                             

                                                                              if [ "$1" == "UZ3EG_IOCC" ]

                                                                                then

                                                                                  BUILD_UZ3EG_IOCC=yes

                                                                              elif [ "$1" == "UZ3EG_PCIEC" ]

                                                                                then

                                                                                  BUILD_UZ3EG_PCIEC=yes

                                                                              elif [ "$1" == "UZ7EV_EVCC" ]

                                                                                then

                                                                                  BUILD_UZ7EV_EVCC=yes

                                                                              elif [ "$1" == "" ]

                                                                                then

                                                                                  echo ""

                                                                                  echo ""

                                                                                  echo -e ${LGRN}"+*******************************************************************+"

                                                                                  echo -e ${LGRN}"*${LRED} This make script defaults to building NO project, use arguments:  ${LGRN}*"

                                                                                  echo -e ${LGRN}"* UZ3EG_IOCC  ${LBLU}- builds UltraZed-EG with IO Carrier Card             ${LGRN}*"

                                                                                  echo -e ${LGRN}"* UZ3EG_PCIEC ${LBLU}- builds UltraZed-EG with PCIe Carrier Card           ${LGRN}*"

                                                                                  echo -e ${LGRN}"* UZ7EV_EVCC  ${LBLU}- builds UltraZed-EV with Carrier Card                ${LGRN}*"

                                                                                  echo -e        "*${NC} Example: ${LYEL}./make_uz_petalinux_bsp.sh UZ7EV_EVCC                    ${LGRN}*"

                                                                                  echo -e ${LGRN}"*${NC}     will produce the UltraZed-EV with Original Carrier Card       ${LGRN}*"

                                                                                  echo -e ${LGRN}"+*******************************************************************+${NC}"

                                                                                  echo ""

                                                                                  echo ""

                                                                                  exit 1

                                                                              fi

                                                                             

                                                                            --Kris