Skip to content
This repository was archived by the owner on Jul 14, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 44 additions & 18 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# project configs
*.pro
!obc-firmware/obc-firmware/obc-firmware.pro
!obc-firmware/obc-firmware/work/taste.pro
*.pro.user
*.pro.user*
!obc-firmware/obc-firmware.pro
!obc-firmware/work/taste.pro
statusfile
.qtc_clangd

# AADL files
*.aadl
Expand All @@ -12,29 +13,54 @@ statusfile
obc-firmware/work/sql_db/

# build files
obc-firmware/work/build/
obc-firmware/work/binaries/
obc-firmware/work/Debug/
obc-firmware/work/Dump/
obc-firmware/work/doc/
obc-firmware/work/dataview/
obc-firmware/work/glue_simu/
obc-firmware/work/glue_coverage/
obc-firmware/work/glue_debug/
obc-firmware/work/glue_release/
obc-firmware/work/skeletons_built/
obc-firmware/work/system.asn
obc-firmware/work/build
obc-firmware/work/binaries
obc-firmware/work/Debug
obc-firmware/work/Dump
obc-firmware/work/doc
obc-firmware/work/dataview
obc-firmware/work/glue_simu
obc-firmware/work/glue_coverage
obc-firmware/work/glue_debug
obc-firmware/work/glue_release
obc-firmware/work/skeletons_built

# wrappers
wrappers
# generated Makefiles
obc-firmware/work/Makefile
obc-firmware/work/*/C/Makefile
obc-firmware/work/*/implem/*/C/Makefile
obc-firmware/work/*/CPP/Makefile
obc-firmware/work/*/implem/*/CPP/Makefile
obc-firmware/work/*/SDL/Makefile
obc-firmware/work/*/implem/*/SDL/Makefile

# code skeletons & symlinks
obc-firmware/work/*/C
obc-firmware/work/*/CPP
obc-firmware/work/*/SDL
obc-firmware/work/*/GUI/src/*.h
obc-firmware/work/*/GUI/src/*.c
obc-firmware/work/*/implem/*/GUI/src/*.h
obc-firmware/work/*/implem/*/GUI/src/*.c
obc-firmware/work/*/C
obc-firmware/work/*/CPP
obc-firmware/work/*/SDL/*.gpr
obc-firmware/work/*/SDL/code/*
obc-firmware/work/*/SDL/src/*
!obc-firmware/work/*/SDL/src/*.pr
obc-firmware/work/*/SDL/src/system_structure.pr
obc-firmware/work/*/implem/*/SDL/*.gpr
obc-firmware/work/*/implem/*/SDL/code/*
obc-firmware/work/*/implem/*/SDL/src/*
!obc-firmware/work/*/implem/*/SDL/src/*.pr
obc-firmware/work/*/implem/*/SDL/src/system_structure.pr

# wrappers
wrappers
wrappers_simu

# simulation and model-checking
simulation
modelchecking

# execution caches
__pycache__
7 changes: 4 additions & 3 deletions Docker-run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ docker images | grep ^taste > /dev/null || {
echo "[x] You haven't built the TASTE Docker container."
echo '[x] You need to execute this to create it:'
echo '[x]'
echo '[x] docker build -t taste .'
echo '[x] docker build -t taste:bullseye-fork .'
echo '[x]'
exit 1
}
Expand All @@ -29,7 +29,7 @@ touch ${XAUTH}
xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f ${XAUTH} nmerge -
export TASTE_IN_DOCKER=1
docker run \
--name taste \
--name taste-fork \
--privileged \
-e DISPLAY \
-e TASTE_IN_DOCKER \
Expand All @@ -38,4 +38,5 @@ docker run \
-v ${XAUTH}:${XAUTH} \
-v "$HOME":"$HOMEB"/work \
-v "$PWD":"$HOMEB"/work/obc-firmware \
-dit taste /bin/bash -i
-v /dev:/dev \
-dit taste:bullseye-fork /bin/bash -i
30 changes: 25 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
#
# Process this Dockerfile with:
#
# docker build -t taste .
# docker build -t taste:bullseye-fork .
#
# And then run a fresh TASTE container with proper X11 redirection, with...
#
# ./Docker-run.sh
# docker attach taste-fork
#
FROM debian:buster
RUN apt-get update
RUN apt-get -y install netcat net-tools wget lsb-release python3-pexpect libfuse2
FROM debian:bullseye
RUN apt update
RUN apt -y install netcat net-tools wget lsb-release python3-pexpect
# libfuse is needed to run AppImage files (e.g. Space Creator)
RUN apt -y install libfuse2 libgl1-mesa-dev
# There is immense waste of re-downloading the .deb files
# in every attempt to setup the Docker image.
# The following uses a locally-provided proxy
Expand All @@ -22,7 +25,7 @@ RUN echo "HEAD /" | nc `cat /tmp/host_ip.txt` 8000 | grep squid-deb-proxy \
|| echo "No squid-deb-proxy detected on docker host"
RUN bash -c 'export DEBIAN_FRONTEND=noninteractive ; apt-get -y install git sudo'
RUN bash -c 'cd /root ; git clone https://gitrepos.estec.esa.int/taste/taste-setup.git tool-src'
RUN bash -c 'cd /root/tool-src ; git checkout -f feature_buster'
RUN bash -c 'cd /root/tool-src ; git checkout -f feature_bullseye'

# The following pieces correspond to the execution of Update-TASTE.sh ;
# but the execution has to be broken down into steps, so that Docker
Expand Down Expand Up @@ -55,9 +58,14 @@ RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISAB
# Those that need RTEMS can set it up themselves (avoid creating huge Docker image)
# RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/85_rtems.sh'
# RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/86_air.sh'
# Install kazoo fork
RUN bash -c 'cd /root/tool-src/kazoo ; git fetch --all ; git checkout feature-lurker-msp430-update-attempt ; git pull'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/87_kazoo.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/88_spaceCreator.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/89_linux_runtime.sh'
# Install TASTE-Runtime-Common fork
RUN bash -c 'cd /root/tool-src/TASTE-Runtime-Common ; git fetch --all ; git checkout feature-msp430-support ; git pull'
RUN bash -c 'cd /root/tool-src ; ./install/89_linux_runtime.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/90_misc.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/91_env.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/95_components_library.sh'
Expand All @@ -66,7 +74,19 @@ RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISAB
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/97_upython.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/98_bash.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 install/99_paths.sh'

# Set up MSP430 toolchain
RUN apt -y install llvm-9
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 yes "y" | add-ons/install-msp430-gcc.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 yes "y" | add-ons/install-freertos.sh'
RUN bash -c 'cd /root/tool-src ; PATH=/root/tool-inst/bin:$PATH HOME=/root DISABLE_TASTE_BANNER=1 yes "y" | add-ons/install-adac-hybrid-msp430.sh'
RUN bash -c 'echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/tool-inst/lib:/opt/adac-hybrid-msp430-1.0.1/lib" >> /root/.bashrc.taste'
# Patch MSP430 toolchain
RUN apt -y install libtinfo5
RUN bash -c 'ln -s /lib/x86_64-linux-gnu/libncursesw.so.6 /lib/x86_64-linux-gnu/libncursesw.so.5'

RUN bash -c 'echo ". ~/.bashrc.taste" >> /root/.bashrc'

# Deal with insane bugs in QT when redirecting X11 from a container
RUN bash -c 'echo "export QT_X11_NO_MITSHM=1" >> /root/.bashrc'
# And make sure the message queues of the container are large enough for TASTE GUIs
Expand Down
30 changes: 15 additions & 15 deletions obc-firmware/deploymentview.dv.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,34 @@
<Property name="Taste::coordinates" value="61500 25800 81200 41000"/>
<Function name="HAL" path="HAL" selected_implementation="msp430"/>
<Function name="print_service" path="print_service" selected_implementation="msp430"/>
<Function name="telecommand_handler" path="telecommand_handler"/>
<Function name="aoi_manager" path="aoi_manager"/>
</Partition>
<Device name="msp430_eusci_a_serial_minimal" requires_bus_access="ocarina_buses::serial.minimal" config="{ devname &quot; &quot;, speed b115200, bits 8, sending-wait 0, use-paritybit FALSE }" port="msp430_eusci_a_serial_minimal" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/serial.asn" asn1type="Serial-Conf-T" asn1module="POHICDRIVER-UART" extends="ocarina_drivers::MSP430_eUSCI_A_serial" namespace="ocarina_drivers" bus_namespace="ocarina_buses" impl_extends="ocarina_drivers::MSP430_eUSCI_A_serial.minimal">
<Device name="msp430_eusci_a_serial_minimal" requires_bus_access="ocarina_buses::serial.minimal" config="{ devname &quot; &quot;, speed b115200, bits 8, sending-wait 0, use-paritybit FALSE }" port="msp430_eusci_a_serial_minimal" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/serial.asn" asn1type="Serial-Conf-T" asn1module="POHICDRIVER-UART" namespace="ocarina_drivers" extends="ocarina_drivers::MSP430_eUSCI_A_serial" impl_extends="ocarina_drivers::MSP430_eUSCI_A_serial.minimal" bus_namespace="ocarina_buses">
<Property name="Taste::coordinates" value="83400 39100"/>
</Device>
</Node>
<Node name="Ground_Station" type="ocarina_processors_x86::x86.linux" node_label="Node_1" namespace="ocarina_processors_x86">
<Property name="Taste::coordinates" value="59100 50900 83100 67900"/>
<Property name="Taste::coordinates" value="59600 50900 83600 67900"/>
<Partition name="x86_ground_station">
<Property name="Taste::coordinates" value="63500 55300 79700 63700"/>
<Property name="Taste::coordinates" value="64000 55300 80200 63700"/>
<Function name="gs_gui" path="gs_gui"/>
</Partition>
<Device name="ethernet1" requires_bus_access="ocarina_buses::ip.i" port="ethernet1" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/ip.asn" asn1type="IP-Conf-T" asn1module="POHICDRIVER-IP" extends="ocarina_drivers::generic_sockets_ip" namespace="ocarina_drivers" bus_namespace="ocarina_buses" impl_extends="ocarina_drivers::generic_sockets_ip.pohic">
<Property name="Taste::coordinates" value="59100 52700"/>
<Device name="ethernet1" requires_bus_access="ocarina_buses::ip.i" port="ethernet1" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/ip.asn" asn1type="IP-Conf-T" asn1module="POHICDRIVER-IP" namespace="ocarina_drivers" extends="ocarina_drivers::generic_sockets_ip" impl_extends="ocarina_drivers::generic_sockets_ip.pohic" bus_namespace="ocarina_buses">
<Property name="Taste::coordinates" value="59600 52700"/>
</Device>
<Device name="ethernet2" requires_bus_access="ocarina_buses::ip.i" port="ethernet2" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/ip.asn" asn1type="IP-Conf-T" asn1module="POHICDRIVER-IP" extends="ocarina_drivers::generic_sockets_ip" namespace="ocarina_drivers" bus_namespace="ocarina_buses" impl_extends="ocarina_drivers::generic_sockets_ip.pohic">
<Property name="Taste::coordinates" value="59100 56700"/>
<Device name="ethernet2" requires_bus_access="ocarina_buses::ip.i" port="ethernet2" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/ip.asn" asn1type="IP-Conf-T" asn1module="POHICDRIVER-IP" namespace="ocarina_drivers" extends="ocarina_drivers::generic_sockets_ip" impl_extends="ocarina_drivers::generic_sockets_ip.pohic" bus_namespace="ocarina_buses">
<Property name="Taste::coordinates" value="59600 56700"/>
</Device>
<Device name="ethernet3" requires_bus_access="ocarina_buses::ip.i" port="ethernet3" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/ip.asn" asn1type="IP-Conf-T" asn1module="POHICDRIVER-IP" extends="ocarina_drivers::generic_sockets_ip" namespace="ocarina_drivers" bus_namespace="ocarina_buses" impl_extends="ocarina_drivers::generic_sockets_ip.pohic">
<Property name="Taste::coordinates" value="59100 60800"/>
<Device name="ethernet3" requires_bus_access="ocarina_buses::ip.i" port="ethernet3" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/ip.asn" asn1type="IP-Conf-T" asn1module="POHICDRIVER-IP" namespace="ocarina_drivers" extends="ocarina_drivers::generic_sockets_ip" impl_extends="ocarina_drivers::generic_sockets_ip.pohic" bus_namespace="ocarina_buses">
<Property name="Taste::coordinates" value="59600 60800"/>
</Device>
<Device name="serial" requires_bus_access="ocarina_buses::serial.minimal" config="{ devname &quot;/dev/ttyACM1&quot;, speed b19200, bits 8, sending-wait 0, use-paritybit FALSE }" port="serial" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/serial.asn" asn1type="Serial-Conf-T" asn1module="POHICDRIVER-UART" extends="ocarina_drivers::linux_serial" namespace="ocarina_drivers" bus_namespace="ocarina_buses" impl_extends="ocarina_drivers::linux_serial.minimal">
<Property name="Taste::coordinates" value="79700 50900"/>
<Device name="serial" requires_bus_access="ocarina_buses::serial.minimal" config="{ devname &quot;/dev/ttyACM1&quot;, speed b19200, bits 8, sending-wait 0, use-paritybit FALSE }" port="serial" asn1file="/home/taste/tool-inst/include/ocarina/runtime/polyorb-hi-c/src/drivers/configuration/serial.asn" asn1type="Serial-Conf-T" asn1module="POHICDRIVER-UART" namespace="ocarina_drivers" extends="ocarina_drivers::linux_serial" impl_extends="ocarina_drivers::linux_serial.minimal" bus_namespace="ocarina_buses">
<Property name="Taste::coordinates" value="80200 50900"/>
</Device>
</Node>
<Connection name="Connection_1" from_node="Ground_Station" from_port="serial" to_bus="ocarina_buses::serial.minimal" to_node="CubeSat" to_port="msp430_eusci_a_serial_minimal">
<Property name="Taste::coordinates" value="79700 49900 79700 48300 85000 48300 85000 39100 84400 39100"/>
<Message name="Message_1" from_function="gs_gui" from_interface="tc_actuate_led" to_function="telecommand_handler" to_interface="tc_actuate_led"/>
<Message name="Message_2" from_function="telecommand_handler" from_interface="report_led_actuation" to_function="gs_gui" to_interface="report_led_actuation"/>
<Property name="Taste::coordinates" value="80200 49900 80200 48300 85000 48300 85000 39100 84400 39100"/>
<Message name="Message_1" from_function="gs_gui" from_interface="tc_config_aoi" to_function="aoi_manager" to_interface="tc_config_aoi"/>
<Message name="Message_2" from_function="aoi_manager" from_interface="report_aoi_config" to_function="gs_gui" to_interface="report_aoi_config"/>
</Connection>
</DeploymentView>
29 changes: 29 additions & 0 deletions obc-firmware/deploymentview.ui.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<UI version="1.0" ><Entity id="{a6724234-231c-4d11-b848-95e8a4c3c902}"><Taste coordinates="9700 16300 9700 11200">
</Taste>
</Entity><Entity id="{64504a99-7bf1-4b62-8a8c-fc55470a8581}">
</Entity><Entity id="{165708a3-961a-4374-851c-96adfa4a23b7}">
</Entity><Entity id="{70b410c9-0afe-4c34-90c8-fdb227cfecc6}">
</Entity><Entity id="{90fc578d-c711-4aad-9292-d4c765281cff}">
</Entity><Entity id="{32f133c1-ca30-4790-a82b-5e4c11b01217}">
</Entity><Entity id="{a32b6748-321e-4c31-9718-f119e20b435c}">
</Entity><Entity id="{578a9277-0067-44fa-8e0b-d2c9024ee06a}">
</Entity><Entity id="{522a25fc-f5aa-493c-af3c-bc67fd1c633e}">
</Entity><Entity id="{c5d57340-aeef-431d-9cd1-a725ac236fc7}">
</Entity><Entity id="{a268d416-8a05-4f42-ba10-09048bc4c122}">
</Entity><Entity id="{c47d0e43-6fc1-44de-b747-0cf5c6ccab63}">
</Entity><Entity id="{44d8566e-a8fb-45e4-a0f2-5e08b5405895}">
</Entity><Entity id="{772644a1-7c7d-4622-8cf7-9e64a0c0c2a0}">
</Entity><Entity id="{7eaf2396-3384-499e-b71c-2b9efeca515e}">
</Entity><Entity id="{657a0ec5-6273-462c-b1e2-fed7bb51d9bf}"><Taste coordinates="9700 10200">
</Taste>
</Entity><Entity id="{2156f236-ac23-4b65-9f57-0d83b9da7087}"><Taste coordinates="-2500 17300 21900 29700">
</Taste>
</Entity><Entity id="{399021ef-039a-40cc-a886-d05d75c01642}"><Taste coordinates="-300 19500 19700 27500">
</Taste>
</Entity><Entity id="{ff8d73b1-e7ca-4967-88ee-4a88fc86a170}">
</Entity><Entity id="{d7af9b42-787f-4e76-a336-9accc5c9ab1c}">
</Entity><Entity id="{67fc7a17-f45a-4c02-9b0f-69c085a87236}">
</Entity><Entity id="{e50fec9c-f85e-4b7f-9ff8-6b6643c31189}"><Taste coordinates="9700 17300">
</Taste>
</Entity>
</UI>
62 changes: 62 additions & 0 deletions obc-firmware/interfaceview.ui.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<UI version="1.0" ><Entity id="{f32ccc90-a4dc-4d65-a4db-5ac21762161c}"><Taste coordinates="5400 -11300 46700 4300">
</Taste>
</Entity><Entity id="{c33634c0-179b-4a2d-b638-d8c1661de03c}"><Taste coordinates="75000 104500 248700 119300">
</Taste>
</Entity><Entity id="{0e54e30f-870e-4145-86e9-217b00147bc7}"><Taste coordinates="75000 116300">
</Taste>
</Entity><Entity id="{7c0d553f-84d6-4b1b-be30-af36a986f6a3}"><Taste coordinates="75000 109400">
</Taste>
</Entity><Entity id="{6507063f-6e07-45df-ac63-dfd2190f3da3}"><Taste coordinates="100700 104500">
</Taste>
</Entity><Entity id="{7267dcbd-b862-4ba4-bde4-fa0a8396b387}"><Taste coordinates="119900 104500">
</Taste>
</Entity><Entity id="{5124adaa-865f-442b-ba88-211e66163740}"><Taste coordinates="13000 14200 33000 106500">
</Taste>
</Entity><Entity id="{a81b7710-9fd6-4838-8751-c26db314c883}"><Taste coordinates="33000 28200">
</Taste>
</Entity><Entity id="{59ae0167-d6b5-4218-ae15-3d3a37e70de3}"><Taste coordinates="33000 21200">
</Taste>
</Entity><Entity id="{27533798-8150-4970-a518-566135dfc093}"><Taste coordinates="67600 32700 67600 109400 74700 109400">
</Taste>
</Entity><Entity id="{c4baf195-426a-40b7-ba48-3352de3c9090}"><Taste coordinates="80300 20300 87200 20300 87200 22200 94000 22200">
</Taste>
</Entity><Entity id="{9c3ea27f-cd3a-4720-a4d2-5829567173a4}"><Taste coordinates="93800 26700 86900 26700 86900 28300 80100 28300">
</Taste>
</Entity><Entity id="{0fa6d71e-91d8-4092-824b-808da6e23099}"><Taste coordinates="119900 31200 119900 104200">
</Taste>
</Entity><Entity id="{68804259-afe8-4dd4-b285-96de563398b3}"><Taste coordinates="94300 17900 130700 30700">
</Taste>
</Entity><Entity id="{cb2d55c7-4ff7-4df1-bd0c-696e051ff315}"><Taste coordinates="101700 17900">
</Taste>
</Entity><Entity id="{22d0455b-1a41-47d6-8ce0-4dda8cf16605}"><Taste coordinates="119900 17900">
</Taste>
</Entity><Entity id="{7a677f10-fa36-4143-af0a-711fcfd994a5}"><Taste coordinates="94300 22200">
</Taste>
</Entity><Entity id="{268aeec3-9700-4bcc-9010-f17b63efc4f3}"><Taste coordinates="100700 30700">
</Taste>
</Entity><Entity id="{149052d3-4640-43fe-a984-f997367bf940}"><Taste coordinates="119900 30700">
</Taste>
</Entity><Entity id="{f5aabd44-ec75-4201-9bd3-f6abddbd9ad0}"><Taste coordinates="94300 26700">
</Taste>
</Entity><Entity id="{e9fe715b-0c51-4129-b0c9-e88fcd81f565}"><Taste coordinates="100700 31200 100700 104200">
</Taste>
</Entity><Entity id="{ee16e559-3d27-4b2d-9065-47d0d872df4f}"><Taste coordinates="54700 28200 33300 28200">
</Taste>
</Entity><Entity id="{2ce9d4b0-b813-4ee9-80a6-302282cf0064}"><Taste coordinates="55300 16800 79800 32200">
</Taste>
</Entity><Entity id="{9141f1da-6068-434a-8922-e4ae4fbc2f24}"><Taste coordinates="55300 21200">
</Taste>
</Entity><Entity id="{32565e36-cb73-4abd-8819-6b0e41fbc754}"><Taste coordinates="79800 28300">
</Taste>
</Entity><Entity id="{c7fc4fb2-971e-48e3-aafa-89b5e636a8ab}"><Taste coordinates="67300 16800">
</Taste>
</Entity><Entity id="{38ac000d-efae-4879-9510-70fd6e482be8}"><Taste coordinates="55300 28200">
</Taste>
</Entity><Entity id="{e09fb80a-5714-4b60-8b65-0672158e8dda}"><Taste coordinates="79800 20300">
</Taste>
</Entity><Entity id="{4602aca2-fbec-4038-9141-47e9c3cbc8b6}"><Taste coordinates="67600 32200">
</Taste>
</Entity><Entity id="{a75e8137-dc90-465c-8724-8e8c52f452d0}"><Taste coordinates="33600 21200 55000 21200">
</Taste>
</Entity>
</UI>
Loading