<div dir="auto">Hi Markus,<div dir="auto"><br></div><div dir="auto">"total zerschossen" ist keine Fehlerbeschreibung, so kann man dir nicht helfen.</div><div dir="auto"><br></div><div dir="auto">Gruß</div><div dir="auto">Frank</div></div><div class="gmail_extra"><br><div class="gmail_quote">Am 21.10.2017 11:34 schrieb Markus Reiß <<a href="mailto:reiss.ma@web.de">reiss.ma@web.de</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:Verdana;font-size:12.0px"><div>
<div>Hallo Frank / rest der Mailingliste,</div>
<div> </div>
<div>danke für die Schrit für schritt Anleitung.</div>
<div>Aber leider habe ich mir nun die frontend totat zerschossen <img alt="" class="m_8238393372705155701smiley" src="https://cdn.webde.de/cdn/mail/client/wicket/resource/static-res/---/mc/img/smileys/default/s_10.gif" style="margin:4px 2px 0;vertical-align:bottom"></div>
<div>Zum glück hatte ich noch ein backup und hab es wieder mühselig zum laufen gebracht.</div>
<div> </div>
<div>kommt zwar ab und zu Fehler Networkerror</div>
<div>aber so einigermaßen läuft es wieder.</div>
<div>oder kann ich mir das verzeichniss WWW igendwo herunterladen und ersetzen?</div>
<div> </div>
<div>gruß Markus</div>
<div>
<div name="quote" style="margin:10px 5px 5px 10px;padding:10px 0 10px 10px;border-left:2px solid #c3d9e5;word-wrap:break-word">
<div style="margin:0 0 10px 0"><b>Gesendet:</b> Freitag, 20. Oktober 2017 um 01:03 Uhr<br>
<b>Von:</b> "Frank Richter" <<a href="mailto:frank.richter83@gmail.com" target="_blank">frank.richter83@gmail.com</a>><br>
<b>An:</b> "<a href="http://volkszaehler.org" target="_blank">volkszaehler.org</a> - users" <<a href="mailto:volkszaehler-users@demo.volkszaehler.org" target="_blank">volkszaehler-users@demo.<wbr>volkszaehler.org</a>><br>
<b>Betreff:</b> Re: [vz-users] Login/Absicherung von VZ Installationen</div>
<div name="quoted-content">
<div>Hi Markus,<br>
<br>
so, dann wollen wir mal!<br>
Ich gehe davon aus, du betreibst eine Standardinstallation mit dem vz-Image?<br>
<br>
cd /var/www<br>
sudo git clone <a href="https://github.com/andig/volkszaehler.org" target="_blank">https://github.com/andig/<wbr>volkszaehler.org</a> volkszaehler.org-next<br>
cd volkszaehler.org-next<br>
sudo git checkout jwt<br>
sudo composer self-update<br>
sudo composer install --no-dev<br>
cd etc<br>
sudo cp volkszaehler.conf.template.php volkszaehler.conf.php
<div><br>
in der volkszaehler.conf.php musst du dann:</div>
<div>* deine DB-Passwörter wieder eintragen, falls du eigene vergeben hast</div>
<div>* den auskommentierten DB-Admin-Zugang aktivieren (gibt sonst Ärger mit der Aggregation)</div>
<div>* die zuvor schon beschriebenen Einstellungen für die Firewall eintragen (Regeln, secretkey, user/password)</div>
<div><br>
Danach kannst du in:</div>
<div>/etc/apache2/sites-enabled/<wbr>000-default.conf</div>
<div> </div>
<div>die Zeile:</div>
<div>DocumentRoot /var/www/<a href="http://volkszaehler.org/htdocs/" target="_blank">volkszaehler.org/<wbr>htdocs/</a></div>
<div> </div>
<div>ändern zu:</div>
<div>DocumentRoot /var/www/volkszaehler.org-<wbr>next/htdocs/</div>
<div> </div>
<div>dann noch:</div>
<div>sudo systemctl restart apache2<br>
</div>
<div>Ab dann verwendest du die neue MW und das Frontend.</div>
<div> </div>
<div>Hoffe das hilft dir weiter.</div>
<div> </div>
<div>Viele Grüße</div>
<div>Frank</div>
</div>
<div class="gmail_extra">
<div class="gmail_quote">Am 19. Oktober 2017 um 15:06 schrieb "Markus Reiß" <span><<a href="mailto:reiss.ma@web.de" target="_blank">reiss.ma@web.de</a>></span>:
<blockquote class="gmail_quote" style="margin:0 0 0 0.8ex;border-left:1.0px rgb(204,204,204) solid;padding-left:1.0ex">
<div>
<div style="font-family:Verdana;font-size:12.0px">
<div>
<div>OK Danke <img alt="" class="m_8238393372705155701m_8392996972282995661smiley" src="https://cdn.webde.de/cdn/mail/client/wicket/resource/static-res/---/mc/img/smileys/default/s_10.gif" style="margin:4.0px 2.0px 0;vertical-align:bottom"></div>
<div>was meinst du damit??</div>
<div> </div>
<div>Da ich absoluter Linux laie bin und außer copy and paste nicht viel davon verstehe <img alt="" class="m_8238393372705155701m_8392996972282995661smiley" src="https://cdn.webde.de/cdn/mail/client/wicket/resource/static-res/---/mc/img/smileys/default/s_10.gif" style="margin:4.0px 2.0px 0;vertical-align:bottom"></div>
<div>köntest du mich da mal schrit für schritt an die Hand nehmen.</div>
<div>So wie du es unten schon mal gemacht hast .</div>
<div> </div>
<div>danke</div>
<div> </div>
<div>
<div style="margin:10.0px 5.0px 5.0px 10.0px;padding:10.0px 0 10.0px 10.0px;border-left:2.0px solid rgb(195,217,229)">
<div style="margin:0 0 10.0px 0"><b>Gesendet:</b> Donnerstag, 19. Oktober 2017 um 13:51 Uhr<br>
<b>Von:</b> "Frank Richter" <<a href="mailto:frank.richter83@gmail.com" target="_blank">frank.richter83@gmail.com</a>>
<div>
<div class="m_8238393372705155701h5"><br>
<b>An:</b> "<a href="http://volkszaehler.org" target="_blank">volkszaehler.org</a> - users" <<a href="mailto:volkszaehler-users@demo.volkszaehler.org" target="_blank">volkszaehler-users@demo.<wbr>volkszaehler.org</a>><br>
<b>Betreff:</b> Re: [vz-users] Login/Absicherung von VZ Installationen</div>
</div>
</div>
<div>
<div class="m_8238393372705155701h5">
<div>
<div>Hallo Markus,
<div> </div>
<div>der Pull Request ist ja schon ziemlich alt, deshalb könnte ich mir vorstellen dass da die Abhängigkeiten nicht mehr passen.</div>
<div>Alternativ kannst du die branches jwt oder auch next aus dem fork von Andreas verwenden, die sollten auf einem neueren Stand sein. Am besten in separates Verzeichnis clonen, dann bleibt deine master-Installation wie sie ist.</div>
<div> </div>
<div>Gruß</div>
<div>Frank</div>
</div>
<div class="gmail_extra">
<div class="gmail_quote">Am 19.10.2017 13:27 schrieb Markus Reiß <<a href="mailto:reiss.ma@web.de" target="_blank">reiss.ma@web.de</a>>:
<blockquote class="gmail_quote" style="margin:0 0 0 0.8ex;border-left:1.0px rgb(204,204,204) solid;padding-left:1.0ex">
<div>
<div style="font-family:Verdana;font-size:12.0px">
<div>
<div>Hallo,</div>
<div>muss das mal wieder hoch holen :-(</div>
<div>hab das heute mal probiert zu installieren bzw zum laufen zu bringen</div>
<div>aber irgendiw schaff ich das nicht.</div>
<div>hab dieses so gemacht wie Frank es geschrieben hat:</div>
<div>
<pre>cd /var/www/<a href="http://volkszaehler.org" target="_blank">volkszaehler.org</a>
sudo git pull
sudo git fetch origin pull/551/head:auth
sudo git checkout auth
sudo composer update
cd etc
sudo mv volkszaehler.conf.php volkszaehler.conf.backup.php
sudo cp volkszaehler.conf.template.php volkszaehler.conf.php
sudo nano volkszaehler.conf.php
1) falls erforderlich, DB-Einstellungen und -Passwort wieder anpassen
2) Firewallregeln checken (im Lieferzustand ist im lokalen Netz alles
erlaubt, von Remote geht lesender Zugriff (GET) ohne, alles andere nur mit
Login)
3) bei 'secretkey' ein paar zufällige Zeichen einsetzen
4) bei 'user' => 'pass' eigene Zugangsdaten eintragen (oder nur mal kurz
testen und dann die Zeile löschen/auskommentieren, falls kein HTTPS
vorhanden ist!)
sudo systemctl restart apache2
</pre>
<div> </div>
<div>Als erste kam das ich kein Token habe.</div>
<div>also einen generiert und abgespeichert unter /home/pi/.composer/auth.json</div>
<div>danach schien die git durch zu laufen (binn mir aber nicht sicher.</div>
<div> </div>
<div>Nun läuft er lockal wie gewohnt </div>
<div>aber von extern nicht mehr:</div>
<div>kommt EXTENSION: Invalid proxy access .</div>
<div> </div>
<div>was ist da nun schief gelaufen</div>
<div> </div>
<div>Danke für euere hilfe.</div>
<div>Gruß Markus</div>
</div>
<div>
<div style="margin:10.0px 5.0px 5.0px 10.0px;padding:10.0px 0 10.0px 10.0px;border-left:2.0px solid rgb(195,217,229)">
<div style="margin:0 0 10.0px 0"><b>Gesendet:</b> Freitag, 13. Januar 2017 um 19:31 Uhr<br>
<b>Von:</b> "Andreas Goetz" <<a href="mailto:cpuidle@gmail.com" target="_blank">cpuidle@gmail.com</a>><br>
<b>An:</b> "<a href="http://volkszaehler.org" target="_blank">volkszaehler.org</a> - users" <<a href="mailto:volkszaehler-users@demo.volkszaehler.org" target="_blank">volkszaehler-users@demo.<wbr>volkszaehler.org</a>><br>
<b>Betreff:</b> Re: [vz-users] Login/Absicherung von VZ Installationen</div>
<div>
<div>Hallo Frank,
<div> </div>
<div>s.u.- ist alles gefixt und der PR aktualisiert. </div>
<div> </div>
<div>Viele Grüße, Andreas</div>
<div>
<div>
<blockquote>
<div>On 12 Jan 2017, at 17:59, Andreas Goetz <<a href="mailto:cpuidle@gmail.com" target="_blank">cpuidle@gmail.com</a>> wrote:</div>
<div>
<div>
<div>
<blockquote>
<div>On 12 Jan 2017, at 00:04, Frank Richter <<a href="mailto:frank.richter83@gmail.com" target="_blank">frank.richter83@gmail.com</a>> wrote:</div>
<div>
<div>
<div>Hallo Andreas,</div>
<div> </div>
<div>ich antworte mir mal selbst, jetzt hab ich das ganze nämlich doch getestet (auf einem Pi mit VZ-Image, auf dem normalerweise nur vzlogger läuft, weil meine DB woanders liegt).</div>
<div>Ich bin dafür, das bald zu mergen, läuft schon recht gut und Einrichtungsaufwand hält sich ja sehr in Grenzen. Mein Test war jetzt ohne HTTPS, aber so lang das users-Array leer ist und die voreingestellten Firewallregeln verwendet werden, sollte da ja nix passieren.</div>
</div>
</div>
</blockquote>
<div> </div>
Sehe ich auch so. Vielleicht hat @Justin noch einen Kommentar dazu?</div>
<div>
<blockquote>
<div>
<div>
<div>Wer schreibenden Zugriff von Remote möchte, muss sich dann eben mit mit HTTPS befassen. Den default user würde ich dann allerdings wirklich aus der Konfiguration werfen.</div>
</div>
</div>
</blockquote>
<div> </div>
Check.</div>
<div>
<blockquote>
<div>
<div>
<div> </div>
<div>
<div>2 Sachen, die mir beim Testen aufgefallen sind:</div>
* 'action'<span> </span>=> 'deny' sollte besser kein Login-Fenster bringen</div>
</div>
</div>
</blockquote>
<div> </div>
Good catch. Die Weiche baue ich ein.</div>
<div>
<blockquote>
<div>
<div>
<div>
<div>* wenn 'methods' => 'GET', action'<span> </span>=> 'allow' gesetzt ist, wird das Frontend ja normal geladen. Dann kann ich Kanaleigenschaften bearbeiten, beim Speichern erscheint Login. Wenn ich mich dann einlogge, wird die ganze Seite neu geladen, gemachte Änderungen gehen aber verloren</div>
</div>
</div>
</div>
</blockquote>
<div> </div>
Mhm, das stimmt und wäre ein Issue wert. Nie getestet weil “das geht ja nicht”. Außerdem dachte ich immer der Fehler kommt beim laden der Seite- jetzt allerdings passiert er beim speichern.</div>
<div> </div>
<div>Man müsste also etwas einbauen dass quasi den Request aufhält, Credentials abholt und dann erneut ausführt. Bestimmt möglich aber tricky. Könnten wir fürs erste mit dem Istzustand leben? Gerade wenn man die Haltbarkeit der Token auf z.b. 1 Woche konfiguriert würde es aus dem Internet- wo heute gar nichts geht- ja ziemlich selten passieren???</div>
<div>
<blockquote>
<div>
<div>
<div> </div>
<div>Grüße</div>
<div>Frank</div>
</div>
</div>
</blockquote>
<div> </div>
Viele Grüße, Andreas</div>
<div>
<blockquote>
<div>
<div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">
<div class="gmail_quote">Am 11. Januar 2017 um 18:27 schrieb Frank Richter <span><<a href="mailto:frank.richter83@gmail.com" target="_blank">frank.richter83@gmail.com</a>></span>:
<blockquote class="gmail_quote" style="margin:0 0 0 0.8ex;border-left:1.0px rgb(204,204,204) solid;padding-left:1.0ex">
<div>Hallo Andreas,<br>
<br>
aus meiner Sicht ist die Absicherung per Login absolut wichtig und sollte rein, denn private Kanäle sind auf Dauer/bei diversen verwendeten Geräten einfach unbequem, und jedesmal eine VPN-Verbindung aufzumachen, um kurz nach dem VZ zu schauen, finde auch eher unpraktisch.<br>
Jetzt ging es im ganzen Thread fast ausschließlich um die High Performance Middleware und nicht um das Login-Feature. Kannst du vielleicht nochmal kurz darauf eingehen, wie sich ein Merge des Features auf neue (per install.sh oder mit einem neuen Image erstellte) und bestehende (durch git pull akualisierte) Installationen auswirken würde?
<div>Laufen die dann noch out of the box oder sind zwingend zusätzliche Schritte notwendig? Wenn ich das richtig sehe, muss für bestehende Installationen auf jeden Fall die volkszaehler.conf.php angepasst werden.
<div>Wie ist es mit HTTPS, ist das dann unbedingt erforderlich, oder geht es mit der letzten Änderung (<span style="font-size:12.8px">(=lesender public Zugriff auf VZ)</span>) auch ohne? Laut meiner Recherche klappt Let's Encrypt zusammen mit einer DDNS-Adresse nicht immer reibungslos, weil Let's Encrypt die Zahl der Registrierungen pro Domain beschränkt.</div>
<div>
<div>Ich bin leider noch nicht dazu gekommen, den PR selbst zu testen, weil ich grad keine Installation auf aktuellem Stand habe - da bin ich aber dran...</div>
<div> </div>
<div>Grüße</div>
<div><span class="m_8238393372705155701m_8392996972282995661m_-6592580105622419122HOEnZb"><font color="#888888">Frank </font></span></div>
<div>
<div class="m_8238393372705155701m_8392996972282995661m_-6592580105622419122h5">
<div>
<div class="gmail_quote">Am 11.01.2017 09:21 schrieb "Andreas Goetz" <<a href="mailto:cpuidle@gmail.com" target="_blank">cpuidle@gmail.com</a>>:
<blockquote class="gmail_quote" style="margin:0.0px 0.0px 0.0px 0.8ex;border-left:1.0px solid rgb(204,204,204);padding-left:1.0ex">
<div>Hallo Zusammen,
<div class="gmail_extra">
<div class="gmail_quote">2017-01-03 20:33 GMT+01:00 Andreas Goetz <span><<a href="mailto:cpuidle@gmail.com" target="_blank">cpuidle@gmail.com</a>></span>:
<blockquote class="gmail_quote" style="margin:0.0px 0.0px 0.0px 0.8ex;border-left:1.0px solid rgb(204,204,204);padding-left:1.0ex">
<div>Hallo,
<div> </div>
<div>Frohes Neues Jahr Zusammen!</div>
<div> </div>
<div>Ihr wisst ja dass ich hartnäckig sein kann. In den letzten Tagen haben ich nach dem mißglückten Merge daher massiv Arbeit darein gesteckt alle VZ Komponenten wieder 100%ig funktionsfähig zu machen. </div>
<div> </div>
<div>Dazu gehören auch die High Performance Middleware (siehe <a href="https://github.com/volkszaehler/volkszaehler.org/tree/master/misc/tools" target="_blank">https://github.com/<wbr>volkszaehler/volkszaehler.org/<wbr>tree/master/misc/tools</a>) und der zuletzt nicht mehr korrekt funktionierende push-server (gleicher Link).</div>
<div> </div>
<div>Apropos High Performance Middleware: ich muss nochmal Werbung dafür machen dass die MW damit in der Lage ist Requests in wenigen (<10!) Millisekunden zu beantworten. Wäre Klasse wenn wir das in das Image einbauen könnten (@Udo: einmalig kann ich das gerne einrichten, ist im Link aber auch recht gut dokumentiert).</div>
<div> </div>
<div>Auf der Basis habe ich dann auch gleiche die Testskripte renoviert und User Authorization neu aufgesetzt (<a href="https://github.com/volkszaehler/volkszaehler.org/pull/551" target="_blank">https://github.com/<wbr>volkszaehler/volkszaehler.org/<wbr>pull/551</a>). Aus meiner Sicht wäre das Feature damit reif standardmäßig in VZ einzuziehen. Bei Bedarf könnte ich noch eine Option einbauen es ggf. auch komplett abzuschalten falls sich die individuelle Konfiguration der Firewall Regeln dafür als zu aufwändig erweist.</div>
</div>
</blockquote>
<div> </div>
<div>Mittlerweile sind auchd ie Anforderungen von Klaus (=lesender public Zugriff auf VZ) in den PR 551 mit eingebaut. Wäre es nicht lagsam Zeit die Funktion zu mergen oder gibt es wirklich keinen Bedarf?<br>
</div>
<div>Wenn wirs mergen wollen gäbe es zwei abschließede Punkte:</div>
<div>- Default user (user/pass) aus der Konfiguration entfernen?</div>
<div>- Gäbe es noch notwedige Anpassungen an den Firewall Regeln vor Release?<br>
</div>
<blockquote class="gmail_quote" style="margin:0.0px 0.0px 0.0px 0.8ex;border-left:1.0px solid rgb(204,204,204);padding-left:1.0ex">
<div>
<div> </div>
<div>Viele Grüße, Andreas</div>
<div>
<div class="m_8238393372705155701m_8392996972282995661m_-6592580105622419122m_7087387516148104883gmail-m_-4078475045481625896m_-4751800326164236203h5">
<div> </div>
<div>
<div>
<blockquote>
<div>On 27 Aug 2016, at 12:33, Andreas Goetz <<a href="mailto:cpuidle@gmail.com" target="_blank">cpuidle@gmail.com</a>> wrote:</div>
<div>
<div>Hallo Zusammen,
<div> </div>
<div>das prinzipielle Feedback war zwar “brauche ich nicht”, ich habe mir aber trotzdem mal den Spass gemacht, Firewall und User Authorization prototypisch zu implementieren.</div>
<div> </div>
<div>Wer damit spielen möchte findet hier den Code: <a href="https://github.com/volkszaehler/volkszaehler.org/pull/458" target="_blank">https://github.com/<wbr>volkszaehler/volkszaehler.org/<wbr>pull/458</a></div>
<div> </div>
<div>Das Ganze basiert auf JSON Web Tokens für Bearer Authentication und sollte tunlichst- da Username/ Passwort übertragen werden- _nur_ über HTTPS Anwendung finden.</div>
<div> </div>
<div>Die Änderungen an der vz.conf Datei sollten eigentlich hinreichen erklären was es zu konfigurieren gibt. Freue mich über Feedback im PR. </div>
<div> </div>
<div>Viele Grüße, </div>
<div>Andreas</div>
<div> </div>
<div>
<div>
<blockquote>
<div>On 15.08.2016, at 11:36, Andreas Goetz <<a href="mailto:cpuidle@gmail.com" target="_blank">cpuidle@gmail.com</a>> wrote:</div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>Ich mache Jacobs Mail mal als neues Thema auf:<br>
<blockquote class="gmail_quote" style="margin:0.0px 0.0px 0.0px 0.8ex;border-left:1.0px solid rgb(204,204,204);padding-left:1.0ex"><span class="m_8238393372705155701m_8392996972282995661m_-6592580105622419122m_7087387516148104883gmail-m_-4078475045481625896m_-4751800326164236203m_8307850780852583600im">Bei der Durchsicht der URL-Befehle habe ich gesehen, dass anscheinend<br>
auch schreibend auf die Datenbank zugreifen kann. Ist das nicht<br>
gefährlich, so einen Webserver ins öffentliche Netz zu stellen, wenn<br>
jeder daran herum fummeln kann?</span></blockquote>
<span class="m_8238393372705155701m_8392996972282995661m_-6592580105622419122m_7087387516148104883gmail-m_-4078475045481625896m_-4751800326164236203m_8307850780852583600im"> </span><br>
Äh, ja, das ist das Prinzip von vz. Allerdings muß man ja die UUID kennen, um Kanäle und deren Daten manipulieren zu können, deswegen sollte man die UUID auch geheim halten (und Kanäle nicht einfach public machen, sonst kann man sie einfach so auflisten). Neue Kanäle anlegen und nutzen geht aber natürlich schon.<br>
M.W. hatte Justin das so konzipiert, damit z.B. <a href="http://demo.volkszaehler.org/" target="_blank">demo.volkszaehler.org</a> ohne Anmeldung (und Passwort-Recevory, Email etc. pp.) genutzt werden kann. Faktisch ist es aber heute wohl so, daß die meisten ihren eigenen VZ-Server laufen haben, da finde ich das eher ungeschickt (zumal die UUIDs auch etwas unhandlich sind).<br>
</div>
<div>-- snip --<br>
</div>
Ich sehe- wenn wir es einfach halten wollen- 2 Anwendungsfälle:<br>
</div>
a) Absicherung einer privaten Installation</div>
b) Usermanagement für eine öffentliche Installation wie demo<br>
</div>
Letzteres klammere ich mal aus da es grundlegende Änderungen an VZ erfordern würde. Für a) gibt es verschiedene Möglichkeiten von furchtbar einfach bis etwas umfangreicher:<br>
</div>
1) Basic Authentication, also Username + Password. Für ein Mindestmaß an Sicherheit ist SSL erforderlich- das gilt ebenso aber auch für alle weiteren Varianten. Das muss zusätzlich so konfiguriert werden dass vzlogger (aus dem internen Netz) ohne Basic Auth weiterhin seine Daten abliefern kann.<br>
</div>
2) Token Authentication: initiales Login per U/P, ab da Token der expired. Dabei hätten wir sogar die Möglichkeit einzelne User zu definieren- imeinfachsten Falle per Konfigurationsdatei, sonst als Datenbankerweiterung. Wenn Datenbankerweiterung dann können wir auch Rechte vergeben (schreiben, löschen, lesen) und Kanäle zu Usern "gehören" zu lassen.<br>
Weiterhin wäre es ggf. sinnvoll authentifizierten Nutzern auch "private" Kanäle ohne Kenntnis der UUID anzubieten.<br>
</div>
<div>Gibts Bedarf?<br>
</div>
Viele Grüße,</div>
Andreas<br>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div></div></div>
</blockquote></div></div>