From d6d87b3988603266faf4d6b708529de711f20cf8 Mon Sep 17 00:00:00 2001
From: shinedday <shinedday@gmail.com>
Date: Mon, 16 May 2022 10:45:39 +0200
Subject: [PATCH] Reformat view code, and add play tab

---
 db.sqlite3                                    | Bin 147456 -> 294912 bytes
 ping/admin.py                                 |   6 +-
 ...periment_metrics_alter_experiment_media.py |  37 +++++
 ping/models.py                                |  23 +++
 ping/templates/ping/entry.html                |   1 +
 ping/templates/ping/experiment.html           |   1 +
 ping/templates/ping/index.html                |   5 +
 ping/templates/ping/play.html                 |  55 +++++++
 ping/urls.py                                  |   9 ++
 ping/views/__init__.py                        |   1 +
 ping/views/experiment.py                      |   4 -
 ping/views/network.py                         |  22 ++-
 ping/views/play.py                            | 149 ++++++++++++++++++
 uploads/current_experiment/ant/__init__.py    |   0
 uploads/current_experiment/ant/agent.py       |  28 ++++
 uploads/current_experiment/ant/amas.py        |  20 +++
 uploads/current_experiment/ant/env.py         |  15 ++
 uploads/current_experiment/ant/scheduler.py   |   7 +
 uploads/media/amas.py                         |  20 +++
 uploads/media/ant.zip                         | Bin 0 -> 1335 bytes
 uploads/media/philosophers_7r4Esmi.zip        | Bin 0 -> 3181 bytes
 21 files changed, 389 insertions(+), 14 deletions(-)
 create mode 100644 ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py
 create mode 100644 ping/templates/ping/play.html
 create mode 100644 ping/views/play.py
 create mode 100644 uploads/current_experiment/ant/__init__.py
 create mode 100644 uploads/current_experiment/ant/agent.py
 create mode 100644 uploads/current_experiment/ant/amas.py
 create mode 100644 uploads/current_experiment/ant/env.py
 create mode 100644 uploads/current_experiment/ant/scheduler.py
 create mode 100644 uploads/media/amas.py
 create mode 100644 uploads/media/ant.zip
 create mode 100644 uploads/media/philosophers_7r4Esmi.zip

diff --git a/db.sqlite3 b/db.sqlite3
index e33654f60a42bd1bdaf59e30dc8587fc89bd53be..8db1a619382a48f53c27a90a51d809a2091ac1f2 100644
GIT binary patch
literal 294912
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

delta 1497
zcmZo@5Nc@PoFFB{Fp+_QL4^SUTqo)nF)>Wsn6QMOS%mBLWOf0~jg7mxHouk<XBE53
zz`^g$!vB&#fqyrD8GkqbEdJH}-WwZ@`5lD$n6()TGV{{oQ!5Hmi!yUl^Geu7n3;7M
zQ?e5C((~gJQ*tx&;&bxTrG(j-wHXsjOETgMQj2mki;FY!^He5x>+7@Wi?cEtGfw~L
z#3;<k338JN0|Ue4JNnAfB3uj%44nKC4E*o-PxIg6-^;&%zlJ}DKZ3t|W1}7a<OusU
zVx0Wp4E%5TZ}Okw-@`wjzl*<`Kbt>%W1}tq<Z%DB%qqM_li342H#R=v*=!VhsfbyH
zUw1P51<#F*clkE!-oM_!BE;a!Fr6cTQHhJs0c1M^1B35GN6GEJ35@2<jL)~XCNrk6
zGciYQYz$>)Zp^ou{wIr3i&15|dN$*c?MC^G=L{xYU}2WxPo2&_fk~5xe>4AD{^k4&
z`DgP_-PowfKRtCm(`<H-N2K`cr?WdSn{I4$=AT~g&)hia0SmJf%aiHs7nn>pHm+b{
zuax3saMY}we*Y?y=(ej&EZod0T=S;0Utsjy*yzW#ecmm`G*v!UK1~MxMf@&&&-gm{
zG&eSi^VP@dvodHlDjHfE=^2_?=$RYp85x-uRF-7q=P9_P7H5~_7wG2}mXyS&=U3+E
z>8DmC<`(3n>K9~W=HwUW7i6Rs73(Lar{<OD6;vu1Dj=I<V5wjlqsPjij$*vIDYEJH
zq!@34X}m6e;|ZExkK}q|OyhOXjW;tyc0EDkkxVzjG+mpOp&m7G3@ykt-T=dRUIqpR
z7XA!o{@eUp`TO}Z_%1*oG@(MMjeV>6SoozGR3|p7Fz%n&m@lBh!m24KFA0yx>GR~7
z#OfK8nOW75g$?!0O$#!M5{nCxQj3Zz{qu4%^HLd<nb1|48Ddezh_1@e0z(xj*|YHP
zVBmkxzk{FqF8^u%MG&~LF__<)e+z>U#0M~ve+z>!j18qR6)`X{#7%e8XOi=RBy<)*
zW_3omS3!PaMiVhJWD;Oj=R{ItXaNdYW_}9>{^R`h{1zJ<wfO5@+1VIGeYI6fQj1H%
zi}Lf*71HvHauZ7wtQ4v;3l!2ab5a#R<y>+}YD!vSW{E;dYOz9cMt*T>ac*i#W}<#-
zUYTA&r5hU?gQ~AEO7<dTTvbY9u0Gg|<ovv}%yhl1;`}^wRyGDzX<19;eCnK$nw*`Q
TQk<WgI{jWglNgI$Rb~MIb%&`>

diff --git a/ping/admin.py b/ping/admin.py
index f8dd658..4cadb75 100644
--- a/ping/admin.py
+++ b/ping/admin.py
@@ -1,7 +1,9 @@
 from django.contrib import admin
 
-from .models import Client, Agent, Experiment
+from .models import *
 
 admin.site.register(Client)
 admin.site.register(Agent)
-admin.site.register(Experiment)
\ No newline at end of file
+admin.site.register(Experiment)
+admin.site.register(Metrics)
+admin.site.register(CurrentExperiment)
\ No newline at end of file
diff --git a/ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py b/ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py
new file mode 100644
index 0000000..d014e25
--- /dev/null
+++ b/ping/migrations/0003_currentexperiment_metrics_alter_experiment_media.py
@@ -0,0 +1,37 @@
+# Generated by Django 4.0.4 on 2022-05-13 12:19
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ping', '0002_experiment'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='CurrentExperiment',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=60)),
+                ('cycle', models.PositiveIntegerField(default=0)),
+                ('nbr_agent', models.PositiveIntegerField(default=0)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Metrics',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('experiment_name', models.CharField(max_length=60)),
+                ('cycle', models.PositiveIntegerField()),
+                ('agent_id', models.PositiveIntegerField()),
+                ('_metrics', models.BinaryField()),
+            ],
+        ),
+        migrations.AlterField(
+            model_name='experiment',
+            name='media',
+            field=models.FileField(blank=True, null=True, upload_to='media'),
+        ),
+    ]
diff --git a/ping/models.py b/ping/models.py
index c6a47a1..ecc1779 100644
--- a/ping/models.py
+++ b/ping/models.py
@@ -1,3 +1,5 @@
+import pickle
+
 from django.db import models
 from django.forms import ModelForm
 
@@ -30,3 +32,24 @@ class ExperimentForm(ModelForm):
     class Meta:
         model = Experiment
         fields = ["name", "description", "media"]
+
+class Metrics(models.Model):
+    experiment_name = models.CharField(max_length=60)
+    cycle = models.PositiveIntegerField()
+    agent_id = models.PositiveIntegerField()
+    _metrics = models.BinaryField()
+
+    def set_data(self, data):
+        self._metrics = pickle.dumps(data)
+
+    def get_data(self):
+        return pickle.loads(self._metrics)
+
+    metrics = property(get_data, set_data)
+
+
+class CurrentExperiment(models.Model):
+
+    name = models.CharField(max_length=60)
+    cycle = models.PositiveIntegerField(default=0)
+    nbr_agent = models.PositiveIntegerField(default=0)
\ No newline at end of file
diff --git a/ping/templates/ping/entry.html b/ping/templates/ping/entry.html
index b718dd6..a46a985 100644
--- a/ping/templates/ping/entry.html
+++ b/ping/templates/ping/entry.html
@@ -16,6 +16,7 @@
   <div class="topnav">
     <a href="/network">Network</a>
     <a class="active" href="/experiment">Experiment</a>
+    <a href="/play">Play</a>
   </div>
     <form action="/experiment/new/" method="POST" enctype="multipart/form-data">
         {% csrf_token %}
diff --git a/ping/templates/ping/experiment.html b/ping/templates/ping/experiment.html
index 86454db..e725a12 100644
--- a/ping/templates/ping/experiment.html
+++ b/ping/templates/ping/experiment.html
@@ -16,6 +16,7 @@
   <div class="topnav">
     <a href="/network">Network</a>
     <a class="active" href="/experiment">Experiment</a>
+    <a href="/play">Play</a>
   </div>
 
   <form action='new' method='GET'>
diff --git a/ping/templates/ping/index.html b/ping/templates/ping/index.html
index e39a748..4e63881 100644
--- a/ping/templates/ping/index.html
+++ b/ping/templates/ping/index.html
@@ -15,6 +15,7 @@
   <div class="topnav">
     <a class="active" href="/network">Network</a>
     <a href="/experiment">Experiment</a>
+    <a href="/play">Play</a>
   </div>
 
 
@@ -46,6 +47,10 @@
     {% endfor %}
   </table>
 
+  <form action='./agent/kill' method='GET'>
+    <button type='submit'> Kill agents</button>
+  </form>
+
   {% if agents %}
   <table>
     <tr>
diff --git a/ping/templates/ping/play.html b/ping/templates/ping/play.html
new file mode 100644
index 0000000..2b9de00
--- /dev/null
+++ b/ping/templates/ping/play.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+  {% load static %}
+  <link rel="stylesheet" type="text/css" href="{% static 'ping/index.css' %}">
+
+  <title>Play - IOTAMAK</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+
+</head>
+
+<body>
+
+  <div class="topnav">
+    <a href="/network">Network</a>
+    <a href="/experiment">Experiment</a>
+    <a class="active" href="/play">Play</a>
+  </div>
+
+  <p>Scheduler :</p>
+
+  <form action='./scheduler/step' method='GET'>
+    <button type='submit'> Step</button>
+  </form>
+
+  <form action='./scheduler/stop' method='GET'>
+    <button type='submit'> Stop</button>
+  </form>
+
+  <form action='./scheduler/start' method='GET'>
+    <button type='submit'> Start</button>
+  </form>
+
+  <p>Experiment :</p>
+
+  <form action='./global/exit' method='GET'>
+    <button type='submit'> Exit</button>
+  </form>
+
+  <form action='./global/share' method='GET'>
+    <button type='submit'> Share</button>
+  </form>
+
+  <form action='./global/start' method='GET'>
+    <button type='submit'> Start</button>
+  </form>
+
+  <form action='./global/load' method='GET'>
+    <button type='submit'> Load</button>
+  </form>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/ping/urls.py b/ping/urls.py
index f7f3002..133b8fb 100644
--- a/ping/urls.py
+++ b/ping/urls.py
@@ -8,7 +8,16 @@ urlpatterns = [
     path('network/pressed/', views.pressed, name='pressed'),
     path('network/update/', views.update, name='update'),
     path('network/agents/', views.agents, name='agents'),
+    path('network/agent/kill', views.kill, name='kill'),
     path('experiment/new/', views.entry, name='entry'),
     path('experiment/', views.experiment, name='experiment'),
     path('experiment/<int:experiment_id>/check/', views.check, name='check'),
+    path('play/', views.main_play, name='play'),
+    path('play/scheduler/start', views.scheduler_start, name='start'),
+    path('play/scheduler/step', views.scheduler_step, name='step'),
+    path('play/scheduler/stop', views.scheduler_stop, name='stop'),
+    path('play/global/exit', views.experiment_stop, name='exit'),
+    path('play/global/share', views.experiment_share, name='share'),
+    path('play/global/start', views.experiment_start, name='start_exp'),
+    path('play/global/load', views.experiment_load, name='load_exp'),
 ]
\ No newline at end of file
diff --git a/ping/views/__init__.py b/ping/views/__init__.py
index 2b38d03..c041ce8 100644
--- a/ping/views/__init__.py
+++ b/ping/views/__init__.py
@@ -1,2 +1,3 @@
 from .experiment import *
 from .network import *
+from .play import *
\ No newline at end of file
diff --git a/ping/views/experiment.py b/ping/views/experiment.py
index 4ba32dc..ca83afb 100644
--- a/ping/views/experiment.py
+++ b/ping/views/experiment.py
@@ -41,12 +41,8 @@ def empty_tmp():
 
 def check(request, experiment_id):
     # get the path
-    print(experiment_id)
     exp = Experiment.objects.get(pk=experiment_id)
-    print(str(exp.media))
-    print(str(settings.MEDIA_ROOT) + str(exp.media))
     # check if it's a zip -> wrong format : not zip
-    print()
 
     if not zipfile.is_zipfile(str(settings.MEDIA_ROOT) + str(exp.media)):
         exp.status = "Wrong format : zip file expected"
diff --git a/ping/views/network.py b/ping/views/network.py
index 84e9734..5a13bc7 100644
--- a/ping/views/network.py
+++ b/ping/views/network.py
@@ -41,14 +41,7 @@ def update(request):
         ),
         Cmd(
             cmd="python3 -m pip install --force-reinstall dist/iotAmak-" + version + "-py3-none-any.whl"
-        ),
-        Cmd(
-            cmd="cd ../../../"
-        )  # ,
-        # Cmd(
-        #    cmd="rm -r Desktop/mqtt_goyon/example/" + self.experiment_name
-        # )
-
+        )
     ]
     for i_client in range(len(ssh.clients)):
         print("Hostname :", ssh.clients[i_client].hostname, " User :", ssh.clients[i_client].user)
@@ -76,6 +69,19 @@ def agents(request):
 
     return HttpResponseRedirect(reverse('ping:index'))
 
+def kill(request):
+    ssh = get_ssh_client()
+
+    commands = [
+        Cmd(
+            cmd="for pid in $(ps -ef | grep 'python ' | awk '{print $2}'); do kill $pid; done",
+            do_print=False
+        )]
+    for i_client in range(len(ssh.clients)):
+        ssh.run_cmd(i_client, commands)
+    return HttpResponseRedirect(reverse('ping:index'))
+
+
 
 def index(request):
     template = loader.get_template('ping/index.html')
diff --git a/ping/views/play.py b/ping/views/play.py
new file mode 100644
index 0000000..c7e0a72
--- /dev/null
+++ b/ping/views/play.py
@@ -0,0 +1,149 @@
+import os
+import shutil
+import sys
+import zipfile
+from ast import literal_eval
+from subprocess import Popen
+from time import sleep
+
+from django.conf import settings
+from django.http import HttpResponse, HttpResponseRedirect
+from django.template import loader
+from django.urls import reverse
+from iotAmak.tool.ssh_client import Cmd
+from paho.mqtt.client import Client as MQTTClient
+
+from ..models import Experiment, CurrentExperiment, Metrics
+
+from .network import get_ssh_client
+
+client = MQTTClient(client_id="django-ihm")
+
+def subscribe(mqttclient, topic, fun):
+    mqttclient.subscribe(topic)
+    mqttclient.message_callback_add(topic, fun)
+
+
+def agent_log(client, userdata, message) -> None:
+    """
+    Called when the amas receive a log from any agent, print it in stdout
+    """
+    print("[Log] " + str(message.payload.decode("utf-8")) + " on topic " + message.topic)
+
+
+def agent_metric(client, userdata, message) -> None:
+    result = literal_eval(message.payload.decode("utf-8"))
+    agent_id = result.get("id")
+
+    exp = CurrentExperiment.objects.all()[0]
+
+    metric = Metrics(experiment_name=exp.name, cycle=exp.cycle, agent_id=agent_id, metrics=result)
+    metric.save()
+
+
+def update_nbr_agent(client, userdata, message) -> None:
+    exp = CurrentExperiment.objects.all()[0]
+    subscribe(client, "agent/"+str(exp.nbr_agent)+"/metric", agent_metric)
+    exp.nbr_agent += 1
+    exp.save()
+
+def empty_current_experiment():
+    folder = str(settings.MEDIA_ROOT) + "current_experiment"
+    for filename in os.listdir(folder):
+        file_path = os.path.join(folder, filename)
+        try:
+            if os.path.isfile(file_path) or os.path.islink(file_path):
+                os.unlink(file_path)
+            elif os.path.isdir(file_path):
+                shutil.rmtree(file_path)
+        except Exception as e:
+            print('Failed to delete %s. Reason: %s' % (file_path, e))
+
+def experiment_load(request):
+
+    empty_current_experiment()
+
+    exp = Experiment.objects.get(status="Selected")
+
+    with zipfile.ZipFile(str(settings.MEDIA_ROOT) + str(exp.media), 'r') as zip_ref:
+        zip_ref.extractall(str(settings.MEDIA_ROOT) + "current_experiment")
+
+    # drop metrics table
+    Metrics.objects.all().delete()
+
+    # drop current experiment table and create new instance
+    CurrentExperiment.objects.all().delete()
+    cur_exp = CurrentExperiment(name=Experiment.objects.get(status="Selected").name)
+    cur_exp.save()
+
+    return HttpResponseRedirect(reverse('ping:play'))
+
+def experiment_start(request):
+
+    broker_ip = "192.168.201.209"
+    ssh = get_ssh_client()
+
+    experiment_path = str(settings.MEDIA_ROOT) + "current_experiment/" + Experiment.objects.get(status="Selected").name
+
+    # Connect to the broker
+    client.username_pw_set(username="goyon", password="mosquitto")
+    client.connect(host=broker_ip)
+    client.loop_start()
+    subscribe(client, "amas/agent/new", update_nbr_agent)
+
+    # start subprocess scheduler
+    p1 = Popen([sys.executable, experiment_path+'/scheduler.py', broker_ip])
+    sleep(1)
+    # start subprocess amas
+    send_client = [c.to_send() for c in ssh.clients]
+    p2 = Popen([sys.executable, experiment_path+'/amas.py', broker_ip, str(send_client)])
+    # start subprocess env
+    p3 = Popen([sys.executable, experiment_path+'/env.py', broker_ip])
+    return HttpResponseRedirect(reverse('ping:play'))
+
+
+def main_play(request):
+    template = loader.get_template('ping/play.html')
+    context = {}
+    return HttpResponse(template.render(context, request))
+
+
+def scheduler_step(request):
+    client.publish("ihm/step")
+    return HttpResponseRedirect(reverse('ping:play'))
+
+
+def scheduler_stop(request):
+    client.publish("ihm/pause")
+    return HttpResponseRedirect(reverse('ping:play'))
+
+
+def scheduler_start(request):
+    client.publish("ihm/unpause")
+    return HttpResponseRedirect(reverse('ping:play'))
+
+def experiment_share(request):
+    # get selected experiment
+    exp = Experiment.objects.get(status="Selected")
+
+    # open ssh connection
+    ssh = get_ssh_client()
+
+    # file transfer
+    commands = [
+        Cmd(
+            cmd="rm -r Desktop/mqtt_goyon/example/" + exp.name
+        )
+
+    ]
+    for i_client in range(len(ssh.clients)):
+        ssh.run_cmd(i_client, commands)
+
+    ssh.update(exp.name, str(settings.MEDIA_ROOT) + "current_experiment/" + exp.name)
+
+    return HttpResponseRedirect(reverse('ping:play'))
+
+def experiment_stop(request):
+    client.publish("ihm/exit")
+    client.publish("ihm/step")
+    return HttpResponseRedirect(reverse('ping:play'))
diff --git a/uploads/current_experiment/ant/__init__.py b/uploads/current_experiment/ant/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/uploads/current_experiment/ant/agent.py b/uploads/current_experiment/ant/agent.py
new file mode 100644
index 0000000..5accea6
--- /dev/null
+++ b/uploads/current_experiment/ant/agent.py
@@ -0,0 +1,28 @@
+import random
+import sys
+
+from iotAmak.agent import Agent
+
+
+class Ant(Agent):
+
+    def __init__(self, identifier: int, broker_ip: str):
+        self.x = 0
+        self.y = 0
+        super().__init__(identifier, broker_ip)
+
+    def on_act(self) -> None:
+        self.x += random.randint(-5, +5)
+        self.y += random.randint(-5, +5)
+        self.log("X : "+str(self.x)+" Y  : "+str(self.y))
+
+    def send_metric(self):
+        metric = super(Ant, self).send_metric()
+
+        metric["x"] = self.x
+        metric["y"] = self.y
+        return metric
+
+if __name__ == '__main__':
+    a = Ant(int(sys.argv[1]), str(sys.argv[2]))
+    a.run()
\ No newline at end of file
diff --git a/uploads/current_experiment/ant/amas.py b/uploads/current_experiment/ant/amas.py
new file mode 100644
index 0000000..99a0586
--- /dev/null
+++ b/uploads/current_experiment/ant/amas.py
@@ -0,0 +1,20 @@
+import sys
+
+
+from iotAmak.amas import Amas
+
+
+class AntAmas(Amas):
+
+    def __init__(self, broker_ip: str, clients, nbr_agent):
+        self.agent_to_create = nbr_agent
+        super().__init__(broker_ip, clients)
+
+    def on_initial_agents_creation(self):
+        for _ in range(self.agent_to_create):
+            self.add_agent("ant")
+
+
+if __name__ == '__main__':
+    s = AntAmas(str(sys.argv[1]), sys.argv[2], 5)
+    s.run()
diff --git a/uploads/current_experiment/ant/env.py b/uploads/current_experiment/ant/env.py
new file mode 100644
index 0000000..a4f1c42
--- /dev/null
+++ b/uploads/current_experiment/ant/env.py
@@ -0,0 +1,15 @@
+import sys
+
+
+from iotAmak.environment import Environment
+
+
+class AntEnv(Environment):
+
+    def __init__(self, broker_ip):
+        super().__init__(broker_ip)
+
+
+if __name__ == '__main__':
+    s = AntEnv(str(sys.argv[1]))
+    s.run()
\ No newline at end of file
diff --git a/uploads/current_experiment/ant/scheduler.py b/uploads/current_experiment/ant/scheduler.py
new file mode 100644
index 0000000..9aac6b6
--- /dev/null
+++ b/uploads/current_experiment/ant/scheduler.py
@@ -0,0 +1,7 @@
+import sys
+
+from iotAmak.scheduler import Scheduler
+
+if __name__ == '__main__':
+    a = Scheduler(str(sys.argv[1]))
+    a.run()
\ No newline at end of file
diff --git a/uploads/media/amas.py b/uploads/media/amas.py
new file mode 100644
index 0000000..1b8e3f3
--- /dev/null
+++ b/uploads/media/amas.py
@@ -0,0 +1,20 @@
+import sys
+
+
+from iotAmak.amas import Amas
+
+
+class PhiAmas(Amas):
+
+    def __init__(self, broker_ip: str, clients, nbr_agent):
+        self.agent_to_create = nbr_agent
+        super().__init__(broker_ip, clients)
+
+    def on_initial_agents_creation(self):
+        for _ in range(self.agent_to_create):
+            self.add_agent("philosophers", [str(self.agent_to_create)])
+
+
+if __name__ == '__main__':
+    s = PhiAmas(str(sys.argv[1]), sys.argv[2], 5)
+    s.run()
diff --git a/uploads/media/ant.zip b/uploads/media/ant.zip
new file mode 100644
index 0000000000000000000000000000000000000000..412da9c2e93f2efd75892236c484c9a8068ba3c3
GIT binary patch
literal 1335
zcmWIWW@Zs#0D(_I8$v)d4D&NEFeK)c=*P!r=4F<|$LkeT!W45bybIY75+KaH)P#|N
zVFnWe0}oVjVtQ&`iC#fvZ_vf8!wMp`{7>ZdDpyVl+2$C}B>9B>+n&It9Y>~kuNK?7
z_~-A;Nv4^<jpC0KpWpetLgebr2>!4a=T?{;eEEWHx?1L?=*0}Z>!(^66;8Ny*k{FK
z#h^<|Y&oAVxHhjxL06e0v2+vrxxmHG=U7y};y$2fu)#gk+u<$uk8RI1bdMKvp1ZxG
zwbGSww-c*A|BVj~vF9!coywa$O>*_OlH5}ndQtXKi#F7@^Dln-`N^JH!HI?3c_+)l
z9ri8uulsk}W+wAVyM-+}{L@u0%gjpu!211x!}~v0E3MZp*?z-sS$LYdg^SVCfa3w~
ze9^1(-in>H+nwfnrB`p>>cc^@(^gIWm-N-A%hzz<Mlr7<zED=_b5kA8{!II(;WYV&
zd6L${aKl7?``_2w#0>6z<FCwqF=txBw?&+PSrMU|7qTH_df!UHHw+96`xzM+xM882
zn^>$@P?;NeFzc`Z&tCp-{EMdF5@3>j6LezX{lKmOVfBt<MHB8G{I{=c(o#zwHs#Lc
z%b%xz3%<be(Y&s1%H`}22NYv%Y_mRzG>W_At(j1^MB<?mtFZ6RH#@&5x<9XSNO{<j
zu}Jzi*E=aWzlqC@k1P@0qHOKCk!h#)r3s&n__C+Wta_Kkbz{}yCkrZ*%TGLia^*%<
z^mg4_WjFS&Q81p688hS2p>vLD3#$cd0~`_<RVC;A^uH|k@7mo`?(LQnmNduyd6d*S
zp}gaQNrB6kBTW@Cnn`u{=g+>WIQjn~HQBm#%V)1mSiLV#wB~l{l55Ln#Oz@}1j@9K
z4Ivh*CbiCDU|{&lz`(!-4V2WpGQEOI-~NMKhYWby-Z#CUa64*3Q+Q&#Yz^1MfUT1^
zn96#Z-?+Vd)5|}_r~g0ocPjLl<d|+N=e2c`Qot$SFLSwVCaUx`8eiaw`+m*p!<)TY
zCUeA(|JnI1C??_ym#%_Pu$zh0uWu~;p0NT;76xqaJg(TW@!j!vS9W!I@%@$%Sh#MX
zQ_nn!jklacUcFbGbyUaRQvdzSvVGCJ1^wL2zA+<wFgs*JNHHg$U^W8-Ln{LVg8<YA
z#mO0|DWy57MS2C5r_bn~(ANsoSf}&s>7%D!+NaKko;aglc*gh4HEq9h9=@7qJ#~Xl
zv}ka(aW+gzTc&yB_;b}~%Z?q_zHv)y#qs0M)zY3FJ-#~nW059<<Dw>Ar)IZ8PJwW-
z*Q#Pmr@KlY%gS;ReJMKiS!M<kLx49UlL!Ou%nvCD6d)94Q2^77y)XdjVq^em)`j{K
zRx}{2<zT>;&=ESj86hQ5A|%-(Ys8iq5E>USK{P^=2C_bEQGn2w#0=4g93cVTtZX0^
QtPHFSYK#mFznMWi0P8LD@Bjb+

literal 0
HcmV?d00001

diff --git a/uploads/media/philosophers_7r4Esmi.zip b/uploads/media/philosophers_7r4Esmi.zip
new file mode 100644
index 0000000000000000000000000000000000000000..36a06f59b5c16b862e0b44f85cc23505f35b0377
GIT binary patch
literal 3181
zcmWIWW@Zs#00G_RB_SXhh9wvn7z#2nbMlMx3o=rRiuL2;GxIV_;^XxSDq*@f7#yos
zhrCkVP-Vc(z~IKiz#xjQD=|GauSBn)a&MS-|7-(+eeS2~X9R_EXHD}B3SFi2bVK{P
zThaX0tHY)Vvn91kq|A<8x__UUM3P+NvUb;7?DMXh8_#b~Ty7)G^(69K`o<G}4ojKB
zWS99YT%dU{d{)%TB=t2%ja<(>H`Y#^S!HuE*+ckAZ@c^FB+*AcGOs_Y|J`pZHpTte
z9-$fLe<v^aXg&XJu$Jl{s|}YX#{c6pb7T6|X~5<rk=`W`pCqN<;2PC@l;<d$L^$`2
z&Nm%R8)}$?I$2lvyzI$%%kd_8jk7yjbol2*;Yu9q*-9U=>YeJDF4nW`4S%T4<E2Zv
zA1LdXFW~Eum-H9gaO=Rr2b~uB340lrtYQw;S{2Y7b1hJBQj+@jrneWqPuOoaW0ify
zhnp$!Y`l>oI$Bpnl3jb4G(UO#=C)cVwUaN!>e`Lnj;!8%T^l@JUn$zr9?CGk%5^Ve
z=G(1pQG5Fn_G(;7kQU!7G&S#@hH-427^~ma4J`My7u9{0TVW$KGhOn#&V^5{99Qah
z9uecbrF433?WqeNwoK3{i7R1LpAzI=a&lp=NyvArUt!v3URs{b5OLdaUa5C`z{kJl
z`UR&BCnd|Pt*BYg_l|YL-KO+O-{)Awmad$c8+tmctn}>Vm31p#2wL8pYnl+fGIRE<
zv(pbeJHUNw+6=EfYzr2?+JAii44?M*7oT-z8RQl3E`NFV*6;eAJl9rl44e|)9@l+f
zulJ9Ap7&g42uArWy?G~d_Pmu-XLGLJ#Ve~fP4IKlbfd}-w&eyDZg*MJXVf%TmVTG{
zy`9;6qw}eC)}IU4rA?hUi6gj5E_sVJ$6Iyp@6P-U_m+E!S#sHP=u52?Tz$HD?~mvm
z@w}>aD=RBEv&r%mmff0vGW){Zrx(O_@f{QTalvP5_T&}wPfmE>7?W3c*XvYS_q(eR
zt9vT;@SR@hv@G&bwY{p%?W;?yr>xGtyC(Nv*3LJ}bEeoGyuMK3Sz+RVQ+w4W@6Ag5
z6PV`{+w%B}<l<K@)>%hh2OfECc;x<9qZ{ipt3_NS-J7N^l4EN=wYIdtE;&vA*_W0U
z36AoXIU0{!?nLT@tTyxB8aKIi@4xmCmG%3>_0t|3Mf=rmGE>)`tFQkxW7$HD9f?=t
z5m_uYa&^cG>F?}685kIzGBPlLvMWl)Ow3Iz)+?yY4LF!}*nnp*|2O_c({Cj(Nxunt
zkyyW>n)8tF92b*q%}@A#ecwD;=j=iwiPs;$+}nJ@f1>aS=X>{0y|k!WFk|1|y`k5l
z8KWd5BQ(!uxIRc<z_haHW$;18@YhxjOB^@@JEg6e!~4vSdtByJ+1Qw-B0foiBi!xw
z^K!}dt*3lU7tc^Kdy`XCP*+rb=J%6`msy){_n7hT?H4`lqhhV+wP{5#Pw|D?4m~4<
z0ETS~%U^{qv;8}BcdmGD=?pfh#YZv=bl91v|M_~|YHQp!uhhbWRqY(ljb#M)E^VlY
z=~c;pSpR(U4QH*>f8Re{e2s0}yUk`FmR_IO_1^L6Gk!!+<vFemNr^O7Z(?9zc*e-U
zfKi4e=jWwmrt4)D=jW|{_B1FUz)S1Yc|YBtpbbF*Mq5lS8JldrU~GQH*l0t@CC1b0
z&r_B?n<{c#Ts*x&#I>14RAiN+NPwO4{v9g%hUTJoS)92$7!zEV9u3guGMebZE!5q8
z`g3>C0VCJWqpY4QU0tVo3H*$bP0BSgGFm=8G_CE+rjvK3IL&ql(a{grWk9$aREmmT
z%3|taVqh@kU|<kNFGW-H%D`o)Z})8jfxY@~>LplGbzfP`KJ3Jqv#|Z$#xED5Ih?jV
zeIpQUG-=O-Y5%@w3Dv8=JiaYtr^>A5mHBBVi|^b^2$g<)Q1;GS-de6~Er-YUAw}~w
z{x)5E;g!j+`{D71t4-X=-{*eStg-)j((9#6P2I5q1u5A_*_)gqc4|3rTzS#jF-NOg
zA}IUYDXuli7gmaXHJ;YeUM8sVlIO#XWVeoGVP=m!-*5kZ;`kOf`L`P0f3$3+YM<CI
zUUVYn!Oa|Y=Nrr{R}z-qTbZGh`6l6&%EZ#OC31mvN>BbUoikl|T4$M7QjxgO)|3xo
zbG9?e?c1=lr21i2vPri;`>)>X6{mZ{oLX;uUH94i)-09P&ojHHOqGy1cEKXG_+={3
z)FQnNJ%_h<3AwkdHC*|0p^1@y(bSnXC$efbRvbUJ(t=BLMtk#$S`)iBzP*zEF|mvK
zZ%q1lHtTlxlGdZ0p9CXTa-C0`x<F};O}R>Q>{P$lR`<OtSl3wWnR)Nv%%+9+W?wsO
zRv1_1x+~1M&uq(qkGWY3jyf4^z38{mbc4F2$R^Dfza##OX6b+T>i**Jru+Kk`i;Fw
zA6X|Hp2NUcebK9t{qx_@hg<5_{r<k{>wTxlzqbR{$!4wRxp<cC(#o%sc6oZ2oEPN&
zTxps6zVGRwGZMEt{eM+o`CfnNVg2Q`CN8_>xEGgP{@GQ3G5_{z=5IFD-#0hTm)#W9
z8S-|++;1By_~$#ld0iZ<lJ%js^GlE_#~tyeI+cfEnf<I<rynO?mk!(+d*u0fhg{8x
zJ@+^`rkl3S?4NP)qn+ap|G8UtCm0$`uu8dnaMxy8<AeU^4KGEnPF>ovps+yQMKzGS
z@H(6O<z2OFJkx(zPw?1Xz3|Y{4;Q#fJ9A5p)FUO{yuy_spC`!8o65kzV2!POO3N?G
z29-~JXSog;2(-L!-FG-hpDXZI_JP&w1(P;UTx!^wQmyf5_iVAG$LH^ueNIiQTAti;
zT7oSyyp+|GO;^KpUc|~;mvq(%j^|T24?pbHjk<F=?a)pI?>zRkEY6MTjB{J=E&LX*
zIngwkE2I8XB>#)6rGC#gYP)}0@$Ta`znHYA{*0Aea&ou5!!}Pd*_0ttzanPF!J7I-
z=fx3u@M7iakVj?Fdovgq7)lth<iX60T)l!y-BTO64l4*WJdFJy%O@_ZQKoN^awb?t
zC~42Oa`jnz>UE#Y|M&2;ucXKM*30SvlIKHjb7m)IuUW{`F{#46MdF}xk&@#V{p^G(
z3jba{IaC~cvZSRvypX?O>xJ;$*EVf`_bj@-?4-$mr11S1vNoiclTR?4fq|iwfq_91
zy>KW_&PYuu%}FiNE2unuM)!oiR-nc@oo7!UJ@wK)bw2dO8U4aDzGtp!`<?Uf)jaE|
z8+4*YgR70RVM^LE%_GO3t3F$H?6~%gTUslQAAhcv_U!2K)zKe|G#MNhHR(DvyA^T@
zgp0ja6<a#pRr**~mXqj9(W%ceGng0xycwB9z_k$r1GdH^q#>yQq3|>%VWwbjOoFsC
zGJs4mL-#kVX^C(M2Lras5@EzlX0$dfwCY4Q0b3n{FyRObnh8iX3bHBKN_2!NHLPf+
zK+1Py1F+>PgaMWuXa+#@7_tf25;VdD22L~+Ajuoq0Bi{lVZcmu1CWzpfHx}}NGS&c
O2ZIa~1A{dehz9_Z1{22s

literal 0
HcmV?d00001

-- 
GitLab