changeset 560:b7eb98dbd800

bump to 2.96beta (REFACTORED VERSION)
author heinrichsweikamp
date Wed, 31 Jan 2018 19:39:37 +0100
parents 9cb967d844f0
children 9c54849b8d3b
files 39960d.pdf doc/README.txt doc/readme-2-95.txt src/Fonts/aa_font90.inc src/Fonts/aa_font90_idx.inc src/aa_fonts.asm src/calibrate.asm src/calibrate.inc src/changelog.txt src/comm.asm src/compass_ops.asm src/customview.asm src/customview.inc src/divemenu_tree.asm src/divemode.asm src/divemode.inc src/gaslist.asm src/ghostwriter.asm src/hwos.inc src/i2c.asm src/i2c.inc src/isr.asm src/logbook.asm src/menu_processor.asm src/menu_tree.asm src/option_table.asm src/options.asm src/p2_deco-TESTING.c src/p2_deco.c src/p2_definitions.h src/ports.inc src/rtc.asm src/shared_definitions.h src/simulator.asm src/sleepmode.asm src/start.asm src/start.inc src/strings.asm src/surfmode.asm src/surfmode.inc src/text_english.inc src/text_french.inc src/text_german.inc src/text_italian.inc src/text_multilang.asm src/tft.inc src/tft_outputs.asm src/tft_outputs.inc tools/dev_ostc3_firmware.hex
diffstat 49 files changed, 22428 insertions(+), 14547 deletions(-) [+]
line wrap: on
line diff
Binary file 39960d.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.txt	Wed Jan 31 19:39:37 2018 +0100
@@ -0,0 +1,210 @@
+README zu OSTC hwos V2.93 (Neuerungen gegenüber der V2.92x)
+===========================================================
+
+- Tritt während der Berechnungen im Deko-Kalkulator eine IBCD auf, so wird dies anschließend
+  auf der Ergebnisseite angezeigt.
+
+- Die Berechnungen des Deko-Kalkulators können mit der linken Taste abgebrochen werden.
+
+- Wenn der GF von einem der schnellen Gewebe 1-5 während des Tauchgangs 90% für Gewebe 1, 92%
+  für Gewebe 2, ... , oder 98% für Gewebe 5 beträgt oder übersteigt, sowie 100% für alle anderen
+  Gewebe, dann wird eine Mikroblasen-Warnung in rot ausgegeben. Die Warnung bleibt, einmal
+  ausgelöst, in gelb bis zum Ende des Tauchgangs und weiter im Surface Mode stehen bis die
+  Entsättigungszeit um ist.
+
+- Wenn der GF von einem der schnellen Gewebe 1-6 während des Tauchgangs 100% beträgt oder übersteigt,
+  sowie 102% für Gewebe 7, 104% für Gewebe 8, ..., oder 120% für Gewebe 16, dann wird in rot eine
+  Warnung ausgegeben dass das ZH-L16-Modell verlassen wurde. Die Warnung bleibt in gelb bis zum Ende
+  des Tauchgangs stehen.
+
+- Der Code der übrigen Warnungen aus der V2.92 wurde überarbeitet.
+
+- Der Zustand der Warnungen wird bei einer Tauchgangs-Simulation und Deko-Berechnung mit in den
+  Vault gesichert und von dort anschießend wieder hergestellt.
+
+- Die Berechnung der No-Fly-Zeit wurde überarbeitet, sie wird wie die Entsättigungs-Zeit dem
+  Luftdruck nachgeführt, der im Oberflächen-Modus angezeigt wird. 
+
+
+README zu OSTC hwos V2.92b (Neuerungen gegenüber der V2.91)
+==========================================================
+
+- Die neue Voting-Logic (Sensor-Werte-Mittelung) und die Generierung der Abweichungs-Warnung sind
+  gegenüber der V2.91 leicht modifiziert und jetzt auch für den Betrieb mit 2 und 3 Sensoren getestet.
+
+- Die No-Fly-Time Berechnung ist jetzt zum einen effizienter programmiert und orientiert sich zum
+  anderen nicht mehr an der Regel "60% der Entsättigungszeit" sondern berechnet gemäß den Bühlmann-
+  Faktoren jetzt die Zeit bis die Gewebe einen Umgebungsdruck von 0,6 bar (No-Fly-Modus) vertragen.
+  Diesen Wert hat Bühlmann seinen No-Fly-Berechnungen zugrunde gelegt, die Bühlmann-Faktoren a und b
+  gelten auch bei diesen Umgebungsdrücken. Zusätzlich wird bei aktiviertem GF-Modus der eingestellte
+  GF-high mit in die Berechnung einbezogen.
+  
+- Im Menu Settings lässt sich anstatt des No-Fly-Modus auch eine Berechnung für Berghöhen von 1000,
+  2000 und 3000 Meter auswählen. Die Berechnug der Wartezeit erfolgt dann analog der No-Fly-Berechnung,
+  nur mit anderen Druckwerten für die jeweiligen Höhen.
+  
+- Die Desat-Time wird nun wie die No-Fly-Time anhand des aktuellen Umgebungdsdrucks laufend neu
+  berechnet. Das Ergebnis wird für beide Zeiten auf die nächsten vollen 10 Minuten aufgerundet,
+  da die Zeiten nun nicht mehr in Minuten-Schritten herunterzählen sondern entsprechend des aktuellen
+  Luftdrucks auch mehrere Minuten vor- und zurück springen können. Die 10-Minuten-Rundung verdeckt
+  diese Sprünge ein wenig.
+  
+- Die Gewebeanzeige im Divemode ist jetzt eingefärbt: orange dargestellte Gewebe sind aktuell am
+  aufsättigen, die in cyan dargestellten im Gleichgewicht oder am absättigen.
+  
+- Es wird gemäß dem Ansatz von Burton geprüft, ob in den Geweben eine isobare Gegendiffusion (IBCD)
+  auftritt. Falls dies im aktuellen Leitgewebe der Fall ist, wird eine Warnung angezeigt. Zusätzlich
+  wird der aktuelle GF unterhalb der IBCD Warnung angezeigt, so dass mit einem Blick erkennbar ist
+  ob dieser in Folge der IBCD tatsächlich am steigen ist oder ob sich die Gewebeübersättigung trotz
+  IBCD in Summe abbaut.
+  
+- Der Code der Temperaturanzeige im Surface- und im Dive-Mode wurde zusammengefasst und behandelt nun
+  Temperaturen von 0° sowie negative Temperaturen korrekt in beiden Einheiten (°C und °F).
+  
+- Es werden wieder 2 Sprachen unterstützt, aktuell sind die Sprachen-Dateien für Englisch und Deutsch
+  für die V2.92 verfügbar. Die Anpassung von Spanisch und Französisch ist noch offen.
+  
+- Verschiedene kleine Optimierungen der Funktionen aus V2.91 sowie der Texte und Darstellungen zur
+  Verbesserung der Lesbarkeit und Verständlichkeit.
+  
+- Speicherstatus: aktuell sind 2.574 Worte Programmspeicher frei.
+
+- ACHTUNG: die "Testing"-Version der Firmware übernimmt zu Testzwecken die Gewebedaten aus dem  !!!!!
+  !!!!     Simulator in den realen Oberflächen- und Tauchmodus!                                 !!!!!
+
+
+
+README zu OSTC hwos V2.91
+
+
+Was ist drin bzw. nicht mehr drin?:
+===================================
+
+- Die Diveloop ist refactored, d.h. Code-Größe, -Ablauf und -Wartbarkeit sind optimiert.
+
+- Die Voting Logic für die Sensoren ist komplett neu. Eigentlich gibt es gar kein Voting mehr, alle
+  aktiven Sensoren werden gemittelt. Wenn sie zu weit auseinander liegen, dann wird eine Warnung
+  generiert und der Benutzer entscheidet (z.B. mittels Loop-Flush mit bekanntem Gas), welcher/welche
+  Sensor(en) sinnvolle Werte liefern. Der Sensor bzw. die Sensoren die falsche Werte liefern können
+  sodann über das Dive-Menu deaktiviert werden.
+
+- Die "Deko-Engine" (p2_deco.c) ist komplett refactored. Sie kann jetzt zwei voneinander unabhängige Pläne
+  rechnen. Als besonderen Clou kann sie CCR oder pSCR als Normalplan rechnen und dazu ein OC-Bailout, auf
+  Wunsch sogar noch mit einem delayed ascent ("Schrecksekunde", Boje schießen, etc.)  als Alternativplan.
+  UND mit Berechnung wie viel Gas das dann brauchen würde, praktisch verständlich angegeben in Bar!
+  UND mit Vor- und Hauptwarnung wenn eine der benutzten Bailout-Flaschen an ihre  Kapazitätsgrenze
+  kommt! Basis hierfür ist die Eingabemöglichkeit von Flaschengröße und Fülldruck. Die Vorwarnung
+  kommt wenn der Gasbedarf 70% des Fülldrucks erreicht hat, die Hauptwarnung bei 100%.
+  In einem neuen Custom-View kann der aktuelle Bailout-Gasbedarf (bzw. normale Deko-Gas-Bedarf beim
+  OC-Tauchen) jederzeit angesehen werden. Aus Platzgründen können nur vier Gase angezeigt werden, die
+  Warnungen werden aber auch für das fünfte Gas erzeugt, so denn alle fünf Gase die der Rechner prinzipiell
+  verwalten kann auch tatsächlich alle im Einsatz sind. Wenn Bailout-Gase als "lost" gesetzt werden und/oder
+  zwischen GF und aGF umgeschaltet wird, dann wird natürlich alles neu durchgerechnet...
+ 
+- Die Dekopläne werden jetzt fast doppelt so schnell berechnet wie zuvor bzw. trotz Berechnung eines
+  zweiten Planes dauert der Zyklus bis alle Daten jeweils aktualisiert sind nicht länger als vorher.
+  Die Simulatorfunktionen +5 Minuten und Teile des Deko-Kalkulators sind jetzt deutlich schneller.
+ 
+- Es werden nun die CNS% Werte berechnet, wie sie am Ende der Deko und am Ende der fTTS-/Bailout-Deko
+  sein werden. Die Werte werden über einen Custom-View angezeigt. Erreicht einer der Werte 100% so
+  wird eine Warnung angezeigt. Der CCR-Taucher kann so frühzeitig reagieren und seinen Setpoint anpassen,
+  der pSCR-Taucher ggf. auf ein anderes Premix gehen und alle inkl. den OCs ggf. etwas flacher / kürzer tauchen
+  um die CNS% herunter zu bekommen.
+ 
+- Display-Ausgaben: wenn während des Tauchgangs Einstellungen geändert werden die Einfluss auf die
+  Deko-Daten haben, wie z.B. Setpoint-Wechsel, GF/aGF-Umschaltung, Gaswechsel und lost Gas, dann
+  werden die Deko-Daten im Display durch eine blaue Farbe als veraltet gekennzeichnet bis diese den
+  geänderten Einstellungen entsprechend neu berechnet sind.
+ 
+- Im Deko-Kalkulator (Simulator) kann nun eingestellt werden mit welchem Setpoint (1-5) er rechnen soll
+  (CCR-Modus) sowie ob er mit den GF- oder den aGF-Faktoren rechnen soll (alle Modi). So können
+  verschiedene Deko-Strategien und Notfall-Pläne schnell berechnet und verglichen werden. Die Stopps
+  und die Gase werden nun eingefärbt, so dass sichtbar ist welches Gas den jeweiligen Stopps zugeordnet
+  wurde (war ein Wunsch aus dem Forum).
+ 
+- Da die Sättigungs-/Entsättigungs-Sicherheitsfaktoren seit der V2.26 auch im GF-Modell verwendet werden,
+  ist ihre Einstellung nun in 5% statt wie zuvor 10% Schritten und damit feiner möglich.
+
+- Die Ceiling-Tiefe erscheint jetzt in rot wenn die aktuelle Tiefe kleiner als die Ceiling-Tiefe ist.
+
+- Es gibt nun eine vierte ppO2-Warnschwelle speziell für den CCR und pSCR Modus: minimaler ppO2 im Loop.
+  Diese ppO2-Min-Loop Warnschwelle wird beim Atmen aus dem Loop anstelle des "normalen" ppO2-Min benutzt
+  und kann entsprechend auf höhere ppO2 Werte als Alarmschwelle eingestellt werden.
+
+- Ebenfalls speziell für den pSCR und CCR Modus gibt es nun eine Limitierung des ppO2 im Loop basierend
+  auf der aktuellen Tiefe. In z.B. 3 Meter Tiefe sind 1,3 bar ppO2 nie erreichbar, auch wenn der Loop noch
+  so viel gespült wird: erstens bleiben immer Reste von Inertgasen im Loop hängen und zweitens werden auf
+  der Deko laufend Inertgase abgeatment, die sich im Loop wiederum ansammeln.
+  Die Limitierung greift auch, wenn der Sensor-Modus aktiv ist, d.h. auch wenn die Sensoren auf 3 Meter
+  Tiefe 1,3 bar zeigen würden und ein Limit von z.B. 90% O2 eingestellt ist, dann wird intern trotzdem
+  nur mit 90/100 * 1,3 = 1,17 bar ppO2 gerechnet.
+  (Diese Funktion wurde auf Anregung aus dem Forum implementiert)
+ 
+- pSCRs werden jetzt in allen Funktionen inkl. des Simulators und der Deko-Berechnung (Stopps, CNS%) korrekt
+  bezüglich des tiefen-abhängigen ppO2-Drops behandelt.
+
+- Der pSCR Modus ist jetzt auch in Verbindung mit Sensoren benutzbar. Im Falle eines Fallbacks (wenn alle
+  Sensoren ausgefallen oder manuell deaktiviert sind) schaltet die Deko-Rechnung vom Sensor-ppO2 auf die
+  ppO2-Drop-Rechnung zurück.
+              
+- Die graphischen Gewebeanzeigen sind von Halbwertszeiten auf absolute Gewebe-Drücke umgestellt und sehen
+  nun (hoffentlich) realistischer aus. Die N2-Balken beginnen bei "Null" und zeigen im entsättigten Zustand
+  (nach einer langen Oberflächenpause) die 0,79 bar ppN2 der Atmosphäre an. Wird in der Deko auf 6 Meter
+  reiner Sauerstoff geatmet, dann werden die Balken der schnellen Gewebe kürzer als 0,79 bar ppN2.
+  Da in der Atmosphäre kein nennenswerter Anteil von Helium vorhanden ist, ist die Null-Schwelle der
+  He-Balken so versetzt dass sie im entsättigten Zustand auf gleicher Höhe liegen wie die N2-Balken.
+  Die He-Balken haben auch dabei im komplett entsättigten Zustand eine (künstliche) Mindest-Länge, die nur
+  dafür da ist um ihren Nullpunkt und ihr generelles Vorhandensein sehen zu können.
+
+- In der Oberflächenmodus-Gewebe-Grafik wird jetzt auch der aktuelle CNS-Wert angezeigt.
+
+- Auf der ersten Logbuchseite (Grafik) wird jetzt der Tauchgangs-Modus (OC, CC, ...) angezeigt. Weiterhin
+  sind die Funktionen des linken und des rechten Tasters vertauscht, so dass nun der rechte Taster den
+  Tauchgang auswählt und dann weiter durch die einzelnen Seiten des Tauchgangs blättert, während der linke
+  zur Tauchgangsliste zurück springt und die nächsten Tauchgänge wählt. Diese Zuordnung ist bedienfreundlicher
+  und entspricht der Funktion der Tastenbelegung im Deko-Kalkulator.
+
+- Im Oberflächenmodus ist die USB Kommunikation jetzt nicht mehr möglich, dafür wird nun der Ladefortschritt
+  sichtbar. Um USB-Kommunikation zu betreiben muss in den Menu-Modus gewechselt werden.
+  -> Diese Änderung ist vielleicht nicht (oder zumindest nicht ohne deutlichen Hinweis auf die Änderung)
+     zum allgemeinen Rollout geeignet, schöner wäre eine Lösung mit einem Timeout...
+	 
+- Der Tauchmodus-Custom-View mit den Sensor-mV-Werten ist entfernt. Einerseits um Speicherplatz zu sparen,
+  andererseits werden die milliVolt-Werte unter Wasser nicht wirklich benötigt da die ppO2-Anzeige bereits
+  alle Fehlerzustände durch entsprechende Farben kennzeichnet. Allerdings fehlt damit zur Zeit die Anzeige
+  der HUD-Batteriespannung. Die muss noch irgend wo anders wieder ihren Platz finden (so es denn HUD-Benutzer
+  gibt die diese Anzeige haben möchten).
+
+- Ebenso ist der Tauchmodus-Custom-View mit der "Dynamic gaslist" und die dazugehörige Routine TFT_dyn_gaslist
+  entfernt worden um Speicherplatz zu sparen. Die Gase sind weiterhin über das im Tauchmodus-Menu sichtbar.
+  
+- Aus Gründen des knapp werdenden Speicherplatzes wird nur noch eine Sprache untersützt, derzeit ist dies
+  Englisch. Ein Wechsel der Sprache ist nur durch Laden einer entsprechenden anders-sprachlichen Firmware
+  möglich.
+  
+  
+
+Teststatus:
+===========
+
+- Code-Review ist durchgeführt.
+
+- Vergleichsläufe mit der V2.26 sind begonnen, hauptsächlich im CCR-Modus. Es müssen noch mehr Tests
+  durchgeführt werden, insbesondere im OC und pSCR-Modus.
+
+- Die neue Voting-Logic (Sensor-Werte-Mittelung) und die Generierung der Abweichungs-Warnung sind noch nicht
+  getestet.
+
+
+Open Items:
+===========
+
+- Derzeit wird die HUD-Batteriespannung nirgendwo (mehr) angezeigt.
+
+_______________
+30.10.2017 / rl
+
+ 
+
+  
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/readme-2-95.txt	Wed Jan 31 19:39:37 2018 +0100
@@ -0,0 +1,540 @@
+
+Doku- & Info-Sammlung zu p2_deco.c und der Einbettung in die V2.95a
+===================================================================
+
+Bedeutung der Bildschirm-Farben (in der Normaleinstellung):
+
+grün: feste Kolumnen oder "gute" Zustände.
+weiß: Zahlenwerte die im Normalbereich liegen
+blau: inaktive Einstellungen und Gase, sowie Werte die noch nicht
+      berechnet wurden oder die aufgrund von Einstellungsänderungen
+	  (Gaswechsel, LostGas, Setpoint-Wechsel, GF/aGF-Umschaltung, usw.)
+	  nicht mehr aktuell sind und gerade neu berechnet werden.
+gelb: Hinweise und Vorwarnungen die zu beachten sind, jedoch noch
+      kein unmittelbares Handeln erfordern.
+rot : Hinweise und Warnungen, die ein unmittelbaren Handeln erfordern.
+
+Die Schwellen für Vorwarnungen sind generell immer auf 70% eingestellt,
+für den aktuellen GF-Wert wird die GF-high Einstellung als Schwelle für
+die Vorwarnung benutzt.
+Vorwarnungen erscheinen als Warnungstext und/oder als Darstellung in
+gelber Farbe. Die endgültige Warnung erscheint dann in roter Farbe.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Die Deco-Engine wird über zwei Parameter kommandiert:
+
+	char_O_main_status:
+	steuert die Berechnung für die realen Gewebe
+
+	char_O_deco_status:
+	steuert die Berechnung der Deko/Aufstiegssimulation
+	
+Die Kommandos werden über Flags gegeben. Für beide Kommandoparameter
+definert sind:
+
+	DECO_MODE_LOOP:
+	Wenn gesetzt wird für Kreislaufsysteme gerechnet wenn nicht gesetzt
+	wird in OC gerechnet.
+
+	DECO_MODE_PSCR:
+	nur in Verbindung mit DECO_MODE_LOOP, schaltet von CCR auf pSCR um.
+
+Nur für char_O_deco_status definiert sind:
+
+	DECO_PLAN_ALTERNATE:
+	Auswahl ob der Normalplan oder ein alternativer Plan gerechnet
+	werden soll. Von den Ergebnissen des Normal-Plans leiten sich die
+	meisten Bildschirmanzeigen ab. Vom alternativen Plan werden nur
+	ausgewählte Daten angezeigt, z.B. die der fTTS oder Bailout-
+	Berechnung.
+
+	DECO_CNS_CALCULATE:
+	Wenn aktiviert, wird der CNS%-Wert berechnet wie er am Ende des
+	Tauchgangs sein wird. Dies kann sowohl im Rahmen des normalen wie
+	auch des alternativen Plans geschehen, es existieren für beide
+	Pläne eigene Ausgabevariablen.
+
+	DECO_VOLUME_CALCULATE:
+	Wenn aktiviert, werden die Gasbedarfe für den gesamten Tauchgang
+	berechnet. Dies kann sowohl im Rahmen des normalen wie auch des
+	alternativen Plans geschehen, jedoch existiert für diese Funktion
+	nur ein gemeinsamer Satz Ausgabevariablen. Wenn DECO_MODE_LOOP
+	gesetzt ist erfolgen keine Berechnungen, es werden stattdessen
+	Nullwerte ausgegeben.
+
+	DECO_ASCENT_DELAYED:
+	Wenn aktiviert wird der Aufstieg / dier Dekompression so berechnet
+	als ob der Aufstieg nicht sofort, sondern um char_I_extra_time
+	verzögert beginnt. Die Funktion kann in beiden Plänen verwendet
+	werden, wird jedoch sinnvoller Weise in Verbindung mit dem
+	alternativen Plan für fTTS bzw. Bailout-Berechnungen mit delayed
+	ascent benutzt.
+
+Die Deco-Engine generiert Warnungen, die in Form von Flags über die
+Variable char_O_deco_warnings ausgegeben werden:
+
+	DECO_WARNING_IBCD:
+	Wird gesetzt wenn das führende Gewebe im Zustand der isobaren
+	Gegendiffusion ist und derzeit netto tatsächlich am aufsättigen
+	ist. Auf dem Bildschirm wird unter der IBCD-Warnung zusätzlich
+	der aktuelle GF angezeigt, der bei Vorliegen dieser Warnung am
+	steigen ist.
+
+	DECO_WARNING_IBCD_lock:
+	In diesem Flag wird das Auftreten einer IBCD-Warnung bis über
+	das Tauchgangsende hinaus gespeichert. Wird im Deko-Kalkulator
+	benutzt um eine IBCD-Warnung zu geben falls eine solche irgend
+	wann im Verlaufe der Tauchgangs-Berechnung ausgetreten ist.
+
+	DECO_WARNING_MBUBBLES:
+	Wird gesetzt, wenn die Gewebe aktuell soweit übersättigt sind
+	dass mit der Produktion von Mikroblasen gerechnet werden muss.
+	Achtung: wenn dieses Flag zurückgesetzt wird sind nicht etwa
+	die Mikroblasen nicht mehr da, es liegen nur vermutlich nicht
+	mehr die Bedingungen für eine Produktion weiterer Mikroblasen
+	vor. Der Zustand der aktiven Mikroblasengeneration wird über
+	eine Mikroblasen-Warnung in Rot dargestellt.
+
+	DECO_WARNING_MBUBBLES_lock:
+	Wird gesetzt sowie erstmalig während eines Tauchgangs die
+	Mikroblasen-Warnung gegeben wurde. Bleibt über das Ende des
+	Tauchgangs hinaus gesetzt bis die Oberflächen-Berechnungen eine
+	Entsättigung der Gewebe melden. Solange diese Warnung aktiv ist
+	wird eine Mikroblasen-Warnung in Gelb ausgegeben, sowohl im Tauch-
+	wie auch im Oberflächen-Modus.
+
+	DECO_WARNING_OUTSIDE:
+	Wird gesetzt, wenn die Gewebe aktuell soweit übersättigt sind, dass
+	der Gültigkeitsbereich des ZHL-16 Modells verlassen ist.
+	Achtung: wenn dieses Flag zurückgesetzt wird ist nicht etwa der
+	Gültigkeitsbereich des Modells wiederhergestellt, es wird lediglich
+	weiter gerechnet als ob das Modell noch gelten würde. Inwieweit die
+	berechneten Werte (Deko-Plan, Ceiling, ...) dann tatsächlich noch
+	praktische Relevanz haben ist unbekannt und extrem von den
+	Rahmenbedingungen des Einzelfalls abhängig.
+	Solange die Gewebesättigungen außerhalb des Modellbereichs sind
+	wird eine Warnung in Rot ausgegeben.
+
+	DECO_WARNING_OUTSIDE_lock:
+	Wird zusammen mit DECO_WARNING_OUTSIDE gesetzt und wie bei den
+	Mikroblasen erst bei Entsättigung wieder gelöscht.
+
+	DECO_WARNING_STOPTABLE_OVERFLOW:
+	Diese Warnung zeigt an, dass der Tauchgang mehr Stopps erfordert
+	als in der Stopp-Tabelle gespeichert werden können. Abgeleitete
+	Werte wie die Aufstiegszeit, die CNS-Werte am Tauchgangsende und
+	die Gasbedarfe können nicht mehr vollständig ermittelt werden und
+	werden daher in der Farbe Blau für ungültige Werte dargestellt. Die
+	wahren Werte sind mindestens so hoch wie die derart angezeigten.
+	Die Angaben zu den ersten Stopps auf dem Bildschirm und in den
+	Custom-Views sind jedoch trotzdem korrekt und im weiteren Verlaufe
+	des Tauchgangs, wenn die ersten Stopps vorüber sind, wird die
+	Tabelle wieder ausreichen um alle restlichen Stopp-Daten zu
+	speichern und die Warnung wird zurückgenommen.
+	Diese Warnung wird nicht direkt angezeigt, sondern nur indirekt
+	über die ungültig-Kennzeichnung der betroffenen Werte und sollte
+	bei praktisch durchführbaren Tauchgängen nicht auftreten.
+
+	DECO_FLAG:
+	Dieses Flag wird gesetzt, wenn mindestens ein Gewebe am absättigen
+	ist. Mit ihm wird die Warnschwelle für zu hohe ppO2-Werte von der
+	normalen Schwelle auf die Deko-Schwelle umgeschaltet. Sollte wieder
+	tiefer getaucht werden (Jo-Jo) so dass alle Gewebe wieder am
+	aufsättigen sind, dann wird das Flag zurückgenommen und auch die
+	Warnschwelle wieder zurückgeschaltet.
+
+
+Viele der internen Routinen der Deko-Engine sind generisch ausgelegt und
+können sowohl für Berechnungen zu den realen Geweben benutzt werden, als
+auch für die Berechnungen im Rahmen des normalen und des alternativen
+Aufstiegs-/Dekompressionsplans. Gesteuert wird dies intern über die
+Variable tissue_increment, diese besteht aus einem Flag auf der höchsten
+Bitposition und einer Interger-Zahl in den Bitstellen darunter
+(Wertebereich 0 - 127). Ist das Flag (Bit 7) gesetzt, so werden die
+Berechnungen auf die realen Gewebedaten angewendet, andernfalls auf die
+von den Plänen simulierten. Mit der Integerzahl wird die Zeitdauer
+bestimmt, für die die Berechnung durchgeführt werden soll. Null bedeutet
+eine Zeitdauer von 2 Sekunden, die Zahlen von 1 bis 127 stehen für 1 bis
+127 volle Minuten. Durch dieses Vorgehen konnten viele Programmabschnitte
+deutlich beschleunigt werden.
+
+Die Deko-Engine wird jede Sekunde aufgerufen und aktualisiert die obigen
+sowie weitere Warnungen jede Sekunde bzw. wenn die entsprechenden
+Berechnungen durchgeführt wurden. Die Berechnungen für die realen Gewebe
+werden jede zweite Sekunde durchgeführt, sekündlich abwechselnd zwischen
+der Aktualisierung der Gewebedrücke und des CNS%-Wertes.
+Die Aufstiegs- und Dekompressions-Berechnungen werden bei jedem Aufruf
+bearbeitet, also in jeder Sekundescheibe. Es wird abwechselnd der Normal-
+und der Alternativ-Plan berechnet.
+Werden für die Aufstiegsberechnung wesentliche Parameter geändert, wie
+z.B. das geatmete oder die verfügbaren Gase, der Setpoint, die GF-
+Faktoren, usw., dann wird die laufende Berechnung abgebrochen und im
+nächsten Sekunden-Zyklus mit dem nächsten Normalplan begonnen.
+
+Die Daten zu den Gasen werden von der Assembler-Seite aus über folgende
+Funktionen gesetzt:
+
+	Für die Berechnung der realen Gewebe:
+
+		setup_gas_registers:
+		setzt ein OC-Gas und schaltet den Rechenmodus auf OC
+
+		setup_dil_registers:
+		setzt ein Diluent und schaltet auf CCR bzw. pSCR Modus
+
+	Für die Aufstiegs-/Dekoplanung:
+
+		deco_setup_oc_gases:
+		übermittelt die Daten OC-Gase sowie das aktuell geatmete
+		Gas und	schaltet den Rechnenmodus auf OC
+
+		deco_setup_cc_diluents:
+		übermittelt die Daten der Diluent sowie das aktuell benutzte
+		Diluent und schaltet auf den CCR bzw. pSCR Modus
+
+Die Aufstiegs-/Dekoplanung wird über einen Enum in char_O_deco_status
+gesteuert:
+
+- Einmalig am Beginn des Tauchgangs wird der Zustand DECO_STATUS_INIT
+  aufgerufen, dieser initialisiert die Deco-Engine. Nach Abschluss der
+  Initialisierung wechselt die Deco-Engine selbsttätig in den Zustand
+  DECO_STATUS_START weiter.
+
+- DECO_STATUS_START
+  startet eine neue Aufstiegs-/Dekoplanung basierend auf den gesetzten
+  Flags und Gasdaten, falls noch eine Aufstiegs- oder Dekoplanung läuft
+  wird diese abgebrochen. In diesem Zustand wird auch berechnet ob sich
+  der Tauchgang noch innerhalb der Nullzeit befindet. Falls ja, endet die
+  Aufstiegsplanung hier im Zustand ECO_STATUS_FINISHED, ansonsten wird
+  sie beim nächsten Aufruf der Deco-Engine im Zustand DECO_STATUS_ASCENT
+  fortgesetzt.
+
+- DECO_STATUS_ASCENT
+  führt die Berechnung des Aufstiegs bis zum ersten Deko-Stopp aus
+  (initial ascent). Im alternativen Planungsmodus werden hierbei auch
+  Gaswechsel ermittelt. Nach Abschluss der Aufstiegsberechnung wird der
+  Zustand auf DECO_STATUS_STOPS weitergeschaltet, der dann beim wiederum
+  nächsten Aufruf der Deco-Engine bearbeitet wird.
+
+- DECO_STATUS_STOPS
+  berechnet die Dekostopps und alle weiteren Aufstiege, sowie die CNS%-
+  Werte am Tauchgangsende und die Gasbedarfe sofern jeweils angefordert.
+  Diese Berechnungen laufen üblicherweise über mehrere Aufrufzyklen der
+  Deco-Engine, diese signalisiert am Ende jedes Zykluses mit
+  DECO_STATUS_STOPS dass (mindestens) ein weiterer Zyklus benötigt wird
+  oder mit DECO_STATUS_FINISHED dass die Berechnungen abgeschlossen sind.
+
+- DECO_STATUS_FINISHED
+  signalisiert, dass die Aufstiegs-/Dekompressionsplanung abgeschlossen
+  ist und die Ergebnisse in den entsprechenden Variablen bereitstehen
+  bzw. aktualisiert sind.
+  Die Kodierung von DECO_STATUS_FINISHED (benutzt als Ausgabe aus der
+  Deco-Engine) entspricht der Kodierung von DECO_STATUS_START (benutzt
+  als Eingabe in die Deco-Engine). Die Deco-Engine kann sofort wieder im
+  Zustand DECO_STATUS_START aufgerufen werden, worauf ein neuer Planungs-
+  zyklus beginnt.
+
+Die Einstellungen und Gasdaten können zwischen zwei Planungszyklen (d.h.
+zwischen den Zuständen DECO_STATUS_FINISHED und DECO_STATUS_START) ohne
+Einschränkungen geändert werden. Während ein Planungszyklus läuft ist
+dies nicht zulässig und kann zu falschen Ergebnissen führen.
+
+
+Planungsfunktionen 2nd Deco Plan:
+
+Über die Deko-Einstellungen, Untermenu "2nd Deco Plan" können erweiterte
+sowie alternative Aufstiegs-/Dekompressionsberechnungen aktiviert werden.
+
+	fTTS/Delay:
+
+	Wird hier ein Wert größer Null ausgewählt, dann wird ein zweiter,
+	alternativer Aufstiegs-/Dekoplan berechnet unter der Annahme, dass
+	die eingestellte Zeit in Minuten weiterhin auf der aktuellen Tiefe
+	verbracht wird und erst dann der Aufstieg beginnt. Die unter dieser
+	Annahme berechnete Aufstiegszeit wird als fTTS (future Time to
+	Surface) angezeigt. Weiterhin wird der CNS-Wert berechnet, der sich
+	am Ende eines derart verlängerten Tauchgangs ergeben wird, er kann
+	über einen	CustomView angesehen werden. Wenn dieser CNS-Wert 100%
+	erreicht wird außerdem eine Warnung ausgegeben.
+
+	Im Bailout-Fall wird keine fTTS-Berechnung durchgeführt, dafür
+	Erfolgt die Aktualisierung der Bailout-Aufstiegsberechnung dann in
+	Schnellerer 	Folge.	
+
+
+	Calc.Gas(B/O):
+
+	Wird diese Option aktiviert, dann wird der Gasbedarf berechnet, der
+	für die Beendigung des Tauchgangs unter Einhaltung der Aufstiegs-
+	geschwindigkeiten und ggf. Dekompressionsstopps benötigt wird. Wenn
+	bei fTTS/Delay Null eingestellt ist, dann wird diese Berechnung
+	während der normalen Aufstiegs-/Dekoberechnung durchgeführt und die
+	ermittelten Werte gelten bei sofortigem Beginn des Aufstiegs. Wenn
+	bei fTTS/Delay eine Zeit größer Null eingestellt ist, dann wird die
+	Berechnung im Rahmen des zweiten, alternativen Plans durchgeführt
+	Und die berechneten Gasbedarfe gelten für den verzögerten Aufstieg.
+
+
+	fTTS/Delay und Calc.Gas(B/O) im Modus CCR und pSCR:
+
+	Das oben beschriebene Verhalten verändert sich, wenn sich der OSTC
+	im CCR oder im pSCR Modus befindet: Wenn die Option Calc.Gas(B/O)
+	ausgeschaltet ist, dann gelten die berechnete Aufstiegszeit und der
+	CNS-Wert unter der Annahme dass bis zum Ende des Tauchgangs	weiterhin
+	vom Kreislaufgerät geatmet wird.
+	Wenn die Option Calc-Gas(B/O) hingegen eingeschaltet ist, dann wird
+	die Aufstiegszeit und der CNS-Wert unter der Annahme berechnet,
+	dass ab sofort ein Bailout erfolgt, auf dem ersten Bailoutgas für
+	die bei fTTS/Delay eingestellte Zeit auf der aktuellen Tiefe
+	verblieben wird und dann ein Bailout-Aufstieg eingeleitet wird.
+	Die sich so ergebende Aufstiegszeit wird als B/O-Zeit (BailOut)
+	angezeigt und die berechneten Gasmengen gelten für die OC-Bailout-
+	Gase.
+
+
+	Bottom Gas, Deco Gas:
+
+	Hier werden die Gasbedarfe in Litern pro Minute Oberflächenrate
+	(SAC) eingestellt. Diese Einstellungen werden auch vom Deko-
+	Kalkulator benutzt, der über das Simulations-Menu zu erreichen ist.
+
+
+	Tank Sizes:
+
+	Hier sind die Größen der Tanks für die OC-/Bailout-Gase in Litern
+	(Wasservolumen) einzustellen. Diese Einstellungen sind wichtig, da
+	sie für die Berechnung der Gasbedarfe im Tauchmodus benötigt
+	werden: Im Tauchmodus erfolgt die Ausgabe der benötigten Gasmengen
+	in Bar, bezogen auf die jeweiligen Flaschengrößen.
+
+
+	Tank Press Budget: (ex Tank Fill Press)
+
+	Hier wird festgelegt wie viel Gas aus den jeweiligen Tanks (Flaschen)
+	für den Tauchgang verwendet werden darf. Die Einstellung erfolgt in
+	Bar Flaschendruck. Erreicht der Bedarf eines Gases 70% des für das
+	Gas eingestellten Budgets, dann erfolgt eine Warnung in gelber Farbe.
+	Bei 100% erscheint die Warnung in roter Farbe.
+	Die benötigten Flaschendrücke können jederzeit über einen CustomView
+	eingesehen werden. Dieser zeigt aufgrund der begrenzten Bildschirm-
+	fläche nur die Bedarfe von bis zu vier Gasen an, die Warnungen werden
+	jedoch für alle 5 Gas erzeugt.
+	Alle Gasbedarfs- und Druckberechnungen erfolgen unter der Annahme
+	idealer Gase und ohne Betrachtung von temperaturbedingten Druck-
+	änderungen.
+
+
+Gaswechsel:
+
+Im Rahmen der Deko-Pläne werden automatisch Gaswechsel eingeplant, wenn
+ein besseres Gas verfügbar ist. Ein besseres, bzw. das beste Gas ist
+dasjenige Gas, dessen Wechseltiefe am dichtesten unterhalb der aktuellen
+Tiefe liegt. Nur aktivierte Gase die nicht als "Lost" markiert sind
+werden berücksichtigt. Gaswechsel werden als Stopp in die Stopp-Tabelle
+eingetragen. Die Dauer dieser Stopps beträgt standardmäßig 1 Minute.
+Sollte auf der Stopp-Stufe für den Gaswechsel auch ein Dekompressions-
+Stopp notwendig sein, so addiert sich die notwendige Stoppzeit für die
+Dekompression zu der für den Gaswechsel hinzu.
+
+Im Bereich zwischen der Grundtiefe und dem ersten Dekompressions-Stopp
+werden die Gaswechsel-Stopps auf die Tiefen gelegt, ab denen jeweils
+bessere Gase verfügbar werden. Gibt es ein besseres Gas auf der aktuellen
+Tiefe, so wird ein Wechsel auf der aktuellen Tiefe geplant. Dies geschieht
+jedoch nur im Modus alternativer Plan und nur wenn das nächste bessere
+Gas nicht in <= 1 Minute Aufstiegszeit erreicht wird. In Normal-Plan
+werden Wechsel auf ein besseres Gas erst ab dem ersten echten Deko-Stopp
+eingeplant.
+Im Falle, dass im alternativen Plan ein Bail-Out Szenario gerechnet wird
+sieht die Gaswahl- und Gaswechsel-Strategie wie folgt aus: zunächst wird
+dasjenige OC-Gas gewählt welches als 'First' konfiguriert ist. Auf diesem
+wird auf aktueller Tiefe für die Zeit verblieben, die als Delayed-Acent-
+Time eingestellt ist. Dann erfolgt die Suche nach einem besseren Gas, auf
+das je nach Verfügbarkeit im direkten Anschluss oder während des
+initialen Aufstiegs gewechselt wird. Ab Erreichen des ersten Dekostopps
+werden Gaswechsel in beiden Plänen (normaler und alternativer Plan)
+automatisch ermittelt und immer auf die nächsten passenden Dekostopps
+gelegt. Im CCR und im pSCR Modus werden derzeit keine automatischen
+Gaswechsel berechnet.
+
+-> Die Gaswechselzeit ist bereits in der Options-Tabelle angelegt, wird
+   aber momentan noch innerhalb von p2_deco.c auf 1 Minute erzwungen.
+
+Die Deko-Engine plant den Aufstieg mit einer einstellbaren Aufstiegs-
+geschwindigkeit von 5-10 Meter pro Minute, diese wird über eine Option in
+der Options-Tabelle eingestellt.
+
+-> Die Aufstiegsgeschwindigkeit ist bereits in der Options-Tabelle
+   angelegt, wird aber momentan noch innerhalb von p2_deco.c auf 10 m/min
+   erzwungen.
+
+Für die Ceiling-Berechnung ist eine neue Codezeile angelegt die dafür
+sorgt, dass die Ceiling genau dann zu Null wird, wenn auch die TTS zur
+NDL umschaltet. Bisher wird so gerundet, dass die Ceiling zu Null wird
+während noch eine TTS angezeigt wird. Die neue Zeile ist noch
+auskommentiert und die alte Formel in Betrieb um eine Vergleichbarkeit
+der gesamten Berechnungen mit der V2.27 zu ermöglichen. Zur Release-
+Version sollte entsprechend umkommentiert werden.
+
+
+Gasbedarfs-Berechnung:
+
+Es werden die Bedarfe aller Gase berechnet, die bei der Aufstiegs-/
+Dekompressionsberechnung eingeplant wurden. Es sind diese die Gase 1
+bis 5. Wird aktuell ein manuell konfiguriertes Gas ("Gas 6") geatmet,
+so wird dieses in der Gasbedarfsberechnung außen vor gelassen. Die
+Berechnung teilt sich in die Bereiche bottom und initial ascent, stops
+und intermediate ascents sowie final ascent.
+
+Im Bereich bottom und initial ascent wird die Bottom-Verbrauchsrate
+angesetzt, in den übrigen Bereichen die Deko-Verbrauchsrate.
+Die Aufstiegssegmente werden mit der konfigurierten Aufstiegsrate (5-10
+m/min) berechnet, der final ascent vom letzten Stopp bis zur Oberfläche
+mit 1 Meter/Minute. Gibt es keine Stopps, dann reicht der initial ascent
+vom Bottom bis zur Oberfläche und wird mit der konfigurierten Aufstiegs-
+rate gerechnet, zuzüglich eines Sicherheitsstopps von 3 Minuten auf 5
+Metern. Wenn es keinen Deko-Stopp gibt, aber einen Gaswechsel-Stopp der
+tiefer liegt als ein letzter regulärer Deko-Stopp liegen würde, dann wird
+der Aufstieg geteilt in einen intermediate ascent und einen final ascent.
+Für beide werden dann die entsprechenden Aufstiegsraten angesetzt.
+
+Alle Gaswechsel werden der Stopp-Tabelle entnommen, daher sind dort
+auch reine Gaswechsel-Stopps eingetragen, d.h. Stopps auf denen keine
+Dekompression notwendig ist. Auf den Stopps die einen Gaswechsel
+beinhalten wird der Gasbedarf wie folgt berechnet: Der Bedarf für die
+gesamte Stoppdauer wird dem neuen Gas zugerechnet, für die konfigurierte
+Gaswechsel-Dauer wird ein entsprechender Bedarf zusätzlich auf das alte
+Gas aufgeschlagen. So ist sichergestellt, dass die berechneten Gasvolumina
+genügend Reserve ausweisen um auf einem Gaswechsel-Stopp die Zeit zu haben
+das neue Gas verfügbar zu machen (Stage-Handling).
+
+Die Gasbedarfe werden zum einen in Litern berechnet, diese Werte werden
+vom Deko-Kalkulator genutzt, und zum anderen in bar Flaschendruck
+entsprechend der eingestellten Flaschengrößen. Hierbei wird mit idealen
+Gasen gerechnet, sprich Druck = benötigtes Volumen / Flaschengröße.
+Aus dem Vergleich von berechnetem Druckbedarf und konfiguriertem
+Flaschendruck werden die Vorwarnung (70%, gelb) und die Hauptwarnung
+(100%, rot) generiert. Um bei der Hauptwarnung noch eine minimale Reserve
+zu haben sollte daher der Flaschendruck etwas niedriger eingestellt
+werden als er tatsächlich ist.
+
+
+Gewebegrafik:
+
+Die Gewebegrafik ist so skaliert, dass die Länge der Balken dem Druck des
+Jeweiligen Inertgases entspricht. Während des Tauchgangs werden die
+Balken zusätzlich eingefärbt, die Farbe kennzeichnet ob das Gewebe gerade
+am aufsättigen oder am entsättigen ist. Die Balken für den Stickstoff
+beginnen weiter links da die Gewebe im Ausgleichzustand an der Oberfläche
+bereits zu einem Teil Stickstoff enthalten, nicht jedoch Helium. So
+beginnen die "Überdrücke" aus dem Ausgleichszustand heraus auf gleicher
+Linie.
+
+
+Stopp-Tabelle (Deko-Tabelle):
+
+Der Funktionsaufruf ist so verändert, dass beim Aufruf die Menge
+der einzutragenden Minuten übergeben werden kann. Diese werden dann auf
+den bestehenden Stopp aufaddiert bzw. es wird ein neuer Stopp angelegt.
+Es können auch Null Minuten übergeben werden und so ein Stopp "on the
+fly" erzeugt werden, z.B. für einen reinen Gaswechsel. Alle Operationen
+auf der Stopp-Tabelle sind angepasst um mit Stopps von Null-Dauer zu
+funktionieren.
+Ein Stopp-Eintrag kann maximal 99 Minuten Stoppdauer aufnehmen. Dauert
+ein Stopp länger, so wird eine weiterer Stopp auf gleicher Tiefe angelegt.
+
+
+No-Fly bzw. Altitude-Wait-Zeit:
+
+Diese Wartezeit wird wie eine Dekompression aus dem aktuellen Gewebe-
+zustand heraus auf eine fiktive Tiefe gerechnet, die der gewählten
+Höhenstufe entspricht. Für No-Fly wird dabei ein Kabinendruck von 0,6
+bar angesetzt. Der Rechenaufwand für diese Berechnung wird die die
+Verwendung eines iterativen Optimierungs-Algorithmus wesentlich
+reduziert. Der aktuelle Umgebungsdruck wird laufend in die Berechnung
+einbezogen, die sich ergebene Zeit auf volle 10 Minuten gerundet
+ausgegeben.
+
+
+Entsättigungszeit:
+
+Die Entsättigungzeit ist so definert dass der Rest-Stickstoffdruck in
+allen Geweben maximal 5% des Gewebedrucks aus natürlicher Sättigung
+(Atmung von Luft unter aktuellem Umgebungsdruck) entspricht. Der sich
+ergebene Druckwert wird dann ebenfalls für das Rest-Helium angesetzt.
+Der aktuelle Umgebungsdruck wird laufend in die Berechnung einbezogen,
+die sich ergebene Zeit auf volle 10 Minuten gerundet ausgegeben.
+
+
+pSCR Modus:
+
+Neben dem CCR-Modus wird nun auch der pSCR-Modus vollständig unterstützt,
+inklusive optionalen Sensoren. Die Bedienung und die Menus sind weitest-
+gehend identisch, nur dort wo im CCR-Modus zwischen den Setpoints und
+Sensorbetrieb ausgewählt wird befindet sich im pSCR-Modus die Auswahl
+zwischen Sensorbetrieb und berechneten ppO2-Werten.
+
+
+Handling von Gas 6:
+
+In der bisherigen Implementierung wurden Änderungen an den O2- und He-
+Prozenten des Gases 6 sofort an die Berechnungen für die realen Gewebe
+innerhalb von p2_deco.c übergeben, ohne dass dazu der dedizierte Menu-
+Eintrag welcher die Zusammensetzung von Gas 6 anzeigt explizit ausgewählt
+werden musste. Ebenso wurde das Gas6-Event ausgelöst sowie einer der
+Prozentwerte verstellt wurde. In den Teil von p2_deco.c, der die Deko-
+Berechnungen ausführt, wurden die Werte von Gas 6 jedoch erst übernommen,
+wenn besagter Menu-Eintrag ausgewählt wurde, was in der Praxis zu
+Diskrepanzen führen muss.
+
+In der jetzigen Implementierung werden die O2- und He-Prozentwerte erst
+dann übernommen und als Gas 6 aktiviert, wenn der Gas6-Menueintrag
+explizit ausgewählt wird. Die Übernahme erfolgt sodann konsistent in die
+Berechnung sowohl der realen Gewebe als auch in die Dekoberechnung, und
+auch das Gas6-Event wird erst dann gesetzt.
+
+
+Deko-Kalkulator:
+
+Der Deko-Kalkulator benutzt die Gasverbrauchsraten, die im Deko-Menu,
+Untermenu "2nd Deco Plan" eingestellt sind. Ãœber das Menu "Calculator
+Setup" kann eingestellt werden, welcher CCR Setpoint für die Berechnungen
+benutzt werden soll (nur relevant im CCR Modus) und ob die normalen oder
+die alternativen (aGF) GF-Faktoren für die Dekoberechnung benutzt werden
+sollen (gilt für alle Modi). Der Deko-Kalkulator ermittelt die benötigten
+Gasmengen in Litern (exakt: Barlitern).
+Kommt es aufgrund der benutzen Gase und des Deko-Profils zu einer IBCD,
+dann wird auf der Ergebnisseite eine entsprechende Warnung ausgegeben.
+Erfordert die Dekompression mehr Stopps als im OSTC gespeichert werden
+können, dann wird die Deko-Berechnung abgebrochen und eine "incomplete"
+Warnung ausgegeben. Die angezeigte Aufstiegszeit, der CNS-Wert und die
+ermittelten Gasbedarfe gelten nur bis zum Ende der angezeigten Stopps.
+Achtung: Die tatsächlichen Werte bis zum Erreichen der Oberfläche können
+unter Umständen deutlich größer sein als die angezeigten, da insbesondere
+die letzten Stopps (die nicht mehr berücksichtigt werden konnten) typisch
+am längsten dauern! Dieser Fall sollte jedoch bei Profilen praktisch
+durchführbarer Tauchgängen nicht auftreten.
+
+
+"DECO ZONE" and GF-"Ampel"
+
+Sobald beim Aufstieg mindestens ein Gewebe beginnt abzusättigen erscheint
+auf der Anzeige "DECO ZONE" in grüner Schrift. Ab diesem Zeitpunkt wird
+auch die Warnschwelle für den ppO2 von der normalen Max-Schwelle auf die
+Deco-Max-Schwelle umgestellt. Sollte wieder tiefer getaucht werden und
+keines der Gewebe mehr absättigen, so verschwindet die Anzeige "DECO
+ZONE" wieder und auch die ppO2 Warnschwelle wird wieder auf den normalen
+Max-Wert zurück geschaltet.
+Überschreitet während des Aufenthalts in der DECO ZONE der aktuelle GF-
+Wert den eingestellten Wert für den GF-high, dann erscheint anstatt des
+Textes "DECO ZONE" der aktuelle GF-Wert in gelber Farbe. Erreicht oder
+überschreitet der aktuelle GF-Wert 100%, dann wird dieser in roter Farbe
+angezeigt.
+
+
+Allgemeines:
+
+Der Quellcode von p2_deco.c ist in bezüglich Lesbarkeit und Kommentierung
+überarbeitet, alle Variablen in p2_deco.c und shared_definitions.h sind
+funktional gruppiert und ebenfalls vollständig kommentiert. In diversen
+Assembler-Quellcode-Dateien wurde ebenfalls die Kommentierung verbessert.
--- a/src/Fonts/aa_font90.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/Fonts/aa_font90.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -316,49 +316,4 @@
 			DB 0x20, 0x19, 0x40, 0x60, 0x9D, 0x40, 0x20, 0x13
 			DB 0x20, 0x40, 0x60, 0xA3, 0x60, 0x41, 0x21, 0x06
 			DB 0x21, 0x42, 0x60, 0xFF, 0xFF, 0xB5
-; : colon
-			DB 0xFF, 0xFF, 0xB5, 0x1F, 0x02, 0x96, 0x1F, 0x02
-			DB 0x96, 0x1F, 0x02, 0x96, 0x1F, 0x02, 0x96, 0x42
-			DB 0x61, 0x41, 0x07, 0x33, 0x99, 0x40, 0x05, 0x41
-			DB 0x60, 0xAD, 0x60, 0x04, 0x40, 0x60, 0xB0, 0x40
-			DB 0x03, 0x20, 0x60, 0xB1, 0x60, 0x03, 0x20, 0xB3
-			DB 0x40, 0x03, 0x60, 0xB3, 0x04, 0xB4, 0x04, 0x40
-			DB 0xB3, 0x05, 0x41, 0x60, 0xB0, 0x40, 0x1F, 0x02
-			DB 0x96, 0x1F, 0x02, 0x97, 0x20, 0x1F, 0x00, 0x98
-			DB 0x60, 0x41, 0x21, 0x1B, 0x9A, 0x60, 0x40, 0x20
-			DB 0x05, 0x21, 0x53, 0x98, 0x60, 0x20, 0x04, 0x20
-			DB 0x40, 0x60, 0xAE, 0x40, 0x04, 0x40, 0x60, 0xB0
-			DB 0x40, 0x03, 0x20, 0x60, 0xB1, 0x60, 0x03, 0x20
-			DB 0xB3, 0x40, 0x03, 0x60, 0xB3, 0x04, 0xB4, 0x04
-			DB 0x60, 0xB3, 0x05, 0x40, 0x61, 0xB0, 0x20, 0x1F
-			DB 0x02, 0x95, 0x60, 0x1F, 0x02, 0x96, 0x60, 0x1F
-			DB 0x01, 0x98, 0x40, 0x1F, 0x9A, 0x60, 0x42, 0x3A
-			DB 0xFF, 0xEA
-; ; semicolon
-			DB 0x93, 0x04, 0xB4, 0x04, 0xB4, 0x04, 0xB4, 0x04
-			DB 0xB4, 0x04, 0xB4, 0x04, 0xB4, 0x04, 0xA8, 0x60
-			DB 0x41, 0x21, 0x1F, 0x06, 0x8B, 0x60, 0x20, 0x1F
-			DB 0x0B, 0x8A, 0x40, 0x1F, 0x0D, 0x89, 0x20, 0x1F
-			DB 0x0E, 0x88, 0x20, 0x1F, 0x0F, 0x87, 0x40, 0x07
-			DB 0x20, 0x47, 0x04, 0x5A, 0x87, 0x20, 0x04, 0x20
-			DB 0x40, 0x89, 0x04, 0xA1, 0x60, 0x04, 0x40, 0x8B
-			DB 0x04, 0xA1, 0x40, 0x03, 0x20, 0x8C, 0x04, 0xA1
-			DB 0x20, 0x03, 0x40, 0x8C, 0x04, 0xA1, 0x20, 0x03
-			DB 0x60, 0x8C, 0x04, 0xA1, 0x04, 0x8D, 0x04, 0xA1
-			DB 0x04, 0x8D, 0x04, 0xA1, 0x04, 0x8D, 0x04, 0xA1
-			DB 0x04, 0x8D, 0x04, 0xA1, 0x20, 0x03, 0x60, 0x8C
-			DB 0x04, 0xA1, 0x20, 0x03, 0x60, 0x8C, 0x04, 0xA1
-			DB 0x40, 0x03, 0x40, 0x8C, 0x04, 0xA1, 0x60, 0x03
-			DB 0x20, 0x80, 0x60, 0x4A, 0x04, 0x54, 0x61, 0x8A
-			DB 0x60, 0x20, 0x42, 0x60, 0x80, 0x40, 0x1F, 0x07
-			DB 0x20, 0x40, 0x8E, 0x20, 0x1F, 0x0A, 0x60, 0x8B
-			DB 0x60, 0x1F, 0x0C, 0x40, 0x8A, 0x40, 0x1F, 0x0D
-			DB 0x60, 0x89, 0x20, 0x1F, 0x0D, 0x20, 0x96, 0x04
-			DB 0x92, 0x61, 0x40, 0x07, 0x60, 0x95, 0x04, 0x96
-			DB 0x40, 0x05, 0x40, 0x95, 0x04, 0x97, 0x40, 0x04
-			DB 0x20, 0x95, 0x04, 0x98, 0x04, 0x20, 0x95, 0x04
-			DB 0x98, 0x40, 0x04, 0x95, 0x04, 0x98, 0x60, 0x04
-			DB 0x95, 0x04, 0x98, 0x60, 0x04, 0x95, 0x04, 0x98
-			DB 0x60, 0x03, 0x20, 0x95, 0x04, 0x98, 0x40, 0x03
-			DB 0x20, 0x81
-; TOTAL COMPRESSED SIZE = 2673
+
--- a/src/Fonts/aa_font90_idx.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/Fonts/aa_font90_idx.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,9 +1,9 @@
 ;==========================================================================
 ; Font index exported ven. janv. 13 2012 by FontIO.cpp 110 2011-06-07 11:26:40Z gascuel $ 
 ;==========================================================================
-aa_font90_chars		EQU	.14
+aa_font90_chars		EQU	.12
 aa_font90_firstChar	EQU	'.'
-aa_font90_lastChar	EQU	';'
+aa_font90_lastChar	EQU	':'
 ;
 aa_font90_idx:
 			DW	aa_font90_bits + 0x0000	; . dot
@@ -18,6 +18,5 @@
 			DW	aa_font90_bits + 0x061F	; 7 7
 			DW	aa_font90_bits + 0x06D3	; 8 8
 			DW	aa_font90_bits + 0x080F	; 9 9
-			DW	aa_font90_bits + 0x0925	; : colon
-			DW	aa_font90_bits + 0x09A7	; ; semicolon
-			DW	aa_font90_bits + 0x0A71	; END OF INDEX
+			DW	aa_font90_bits + 0x0925	; END OF INDEX
+
--- a/src/aa_fonts.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/aa_fonts.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -12,7 +12,7 @@
 ;=============================================================================
 
 ;---- TINY font description and data ----------------------------------------
-fonts_data	CODE_PACK
+fonts_data	CODE_PACK   0x11000	    ; <- Make sure all three fonts are in the same 64kByte page...
 
 
             global  aa_font16_block
@@ -150,8 +150,6 @@
             global aa_font90_block
 aa_font90_block:
 			DB	' ', 0x2F
-			DB	'm', 0x3A
-			DB	'f', 0x3B
 			DB	0
 			DB	aa_font90_firstChar
 			DB	aa_font90_chars
--- a/src/calibrate.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/calibrate.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File calibration.asm
+;   File calibration.asm							REFACTORED VERSION V2.91
 ;
 ;   o2 sensor calibration subroutines
 ;
@@ -15,9 +15,9 @@
 
 calibrate     CODE
 
-    global  check_sensors           ; Check O2 sensor thresholds for fallback and voting logic
+   global  check_sensors           ; Check O2 sensor thresholds for fallback and voting logic
 check_sensors:
-    ; Check min_mv
+	; Check min_mv
 	movff	o2_mv_sensor1+0, sub_a+0
 	movff	o2_mv_sensor1+1, sub_a+1
 	movlw	LOW		min_mv
@@ -50,7 +50,8 @@
 	bsf     use_O2_sensor3  ;=1: Use this sensor for deco
 	btfsc	neg_flag
 	bcf     use_O2_sensor3  ;=1: Use this sensor for deco
-    ; Check max_mv
+ 
+	; Check max_mv
 	movff	o2_mv_sensor1+0, sub_a+0
 	movff	o2_mv_sensor1+1, sub_a+1
 	movlw	LOW		max_mv
@@ -94,7 +95,7 @@
     bra     check_sensor3           ; Check for voting logic
 
 check_sensor2:
-; Copy disable flags from internal calibration routine
+	; Copy disable flags from internal calibration routine
     btfss   sensor1_calibrated_ok
     bcf     use_O2_sensor1
     btfss   sensor2_calibrated_ok
@@ -102,42 +103,43 @@
     btfss   sensor3_calibrated_ok
     bcf     use_O2_sensor3
 check_sensor3:                      ; Check for voting logic
-    bsf     voting_logic_sensor1
-    movff   o2_ppo2_sensor1,temp1
-    rcall   check_sensor_voting_common
-    incfsz  WREG                    ; Was Wreg=255?
-    bcf     voting_logic_sensor1    ; Yes, ignore this sensor
-    bsf     voting_logic_sensor2
-    movff   o2_ppo2_sensor2,temp1
-    rcall   check_sensor_voting_common
-    incfsz  WREG                    ; Was Wreg=255?
-    bcf     voting_logic_sensor2    ; Yes, ignore this sensor
-    bsf     voting_logic_sensor3
-    movff   o2_ppo2_sensor3,temp1
-    rcall   check_sensor_voting_common
-    incfsz  WREG                    ; Was Wreg=255?
-    bcf     voting_logic_sensor3    ; Yes, ignore this sensor
+	; DELETE - voting is done in calc_deko_divemode_sensor 	## voting logic
+    ; bsf     voting_logic_sensor1
+    ; movff   o2_ppo2_sensor1,temp1
+    ; rcall   check_sensor_voting_common
+    ; incfsz  WREG                    ; Was Wreg=255?
+    ; bcf     voting_logic_sensor1    ; Yes, ignore this sensor
+    ; bsf     voting_logic_sensor2
+    ; movff   o2_ppo2_sensor2,temp1
+    ; rcall   check_sensor_voting_common
+    ; incfsz  WREG                    ; Was Wreg=255?
+    ; bcf     voting_logic_sensor2    ; Yes, ignore this sensor
+    ; bsf     voting_logic_sensor3
+    ; movff   o2_ppo2_sensor3,temp1
+    ; ;rcall   check_sensor_voting_common
+    ; incfsz  WREG                    ; Was Wreg=255?
+    ; bcf     voting_logic_sensor3    ; Yes, ignore this sensor
     return
 
-
-check_sensor_voting_common:
-    movf    temp1,W
-    cpfsgt  sensor_setpoint
-    bra     check_sensor_voting_common2     ; temp1<sensor_setpoint
-    ; temp1>sensor_setpoint
-    movf    temp1,W
-    subwf   sensor_setpoint,W
-    movwf   temp1
-check_sensor_voting_common1:
-    movlw   sensor_voting_logic_threshold   ; Threshold in 0.01bar
-    cpfsgt  temp1
-    retlw   .255                            ; Within range
-    retlw   .0                              ; Out of range
-check_sensor_voting_common2:
-    ; temp1<sensor_setpoint
-    movf    sensor_setpoint,W
-    subwf   temp1,F
-    bra     check_sensor_voting_common1
+; DELETE COMPLETE FUNTION, PARTS  OF THE CODE HAVE MIGRATED TO calc_deko_divemode_sensor	## voting logic
+; check_sensor_voting_common:
+    ; movf    temp1,W
+    ; cpfsgt  sensor_setpoint
+    ; bra     check_sensor_voting_common2     ; temp1<sensor_setpoint
+    ; ; temp1>sensor_setpoint
+    ; movf    temp1,W
+    ; subwf   sensor_setpoint,W
+    ; movwf   temp1
+; check_sensor_voting_common1:
+    ; movlw   sensor_voting_logic_threshold   ; Threshold in 0.01bar
+    ; cpfsgt  temp1
+    ; retlw   .255                            ; Within range
+    ; retlw   .0                              ; Out of range
+; check_sensor_voting_common2:
+    ; ; temp1<sensor_setpoint
+    ; movf    sensor_setpoint,W
+    ; subwf   temp1,F
+    ; bra     check_sensor_voting_common1
 
 	global	calibrate_mix
 calibrate_mix:
@@ -157,12 +159,12 @@
     movff   WREG,TXREG2
     call    rs232_wait_tx2
 
-    movff   opt_calibration_O2_ratio,WREG         ; Calibration gas %O2
+    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
     addwf   temp1,F
     movff   WREG,TXREG2
     call    rs232_wait_tx2
 
-    movff   amb_pressure+0,WREG         ; Ambient pressure
+    movff   amb_pressure+0,WREG	; Ambient pressure
     addwf   temp1,F
     movff   WREG,TXREG2
     call    rs232_wait_tx2
@@ -171,15 +173,15 @@
     movff   WREG,TXREG2
     call    rs232_wait_tx2
 
-    movff   temp1,TXREG2                ; Chksum
+    movff   temp1,TXREG2		; Chksum
     call    rs232_wait_tx2
 
 calibrate_mix2:
-    movff   opt_calibration_O2_ratio,WREG         ; Calibration gas %O2
+    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
     mullw   .100
 	movff	PRODL,xA+0
 	movff	PRODH,xA+1
-; (%O2*100)*[ambient,mbar]/100 -> xC
+	; (%O2*100)*[ambient,mbar]/100 -> xC
 	movff	amb_pressure+0,xB+0
 	movff	amb_pressure+1,xB+1
 	rcall	calibrate_mix2_helper
@@ -188,13 +190,13 @@
 	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	; xC= ppO2/mV
 	movff	xC+0,opt_x_s1+0
-	movff	xC+1,opt_x_s1+1				; Factor for Sensor1
+	movff	xC+1,opt_x_s1+1					; Factor for Sensor1
 
-    movff   opt_calibration_O2_ratio,WREG         ; Calibration gas %O2
+    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
     mullw   .100
 	movff	PRODL,xA+0
 	movff	PRODH,xA+1
-; (%O2*100)*[ambient,mbar]/100 -> xC
+	; (%O2*100)*[ambient,mbar]/100 -> xC
 	movff	amb_pressure+0,xB+0
 	movff	amb_pressure+1,xB+1
 	rcall	calibrate_mix2_helper
@@ -203,13 +205,13 @@
 	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	; xC= ppO2/mV
 	movff	xC+0,opt_x_s2+0
-	movff	xC+1,opt_x_s2+1				; Factor for Sensor2
+	movff	xC+1,opt_x_s2+1					; Factor for Sensor2
 
-    movff   opt_calibration_O2_ratio,WREG         ; Calibration gas %O2
+    movff   opt_calibration_O2_ratio,WREG	; Calibration gas %O2
     mullw   .100
 	movff	PRODL,xA+0
 	movff	PRODH,xA+1
-; (%O2*100)*[ambient,mbar]/100 -> xC
+	; (%O2*100)*[ambient,mbar]/100 -> xC
 	movff	amb_pressure+0,xB+0
 	movff	amb_pressure+1,xB+1
 	rcall	calibrate_mix2_helper
@@ -218,11 +220,12 @@
 	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	; xC= ppO2/mV
 	movff	xC+0,opt_x_s3+0
-	movff	xC+1,opt_x_s3+1				; Factor for Sensor3
+	movff	xC+1,opt_x_s3+1					; Factor for Sensor3
 
     bsf     sensor1_calibrated_ok
     bsf     sensor2_calibrated_ok
     bsf     sensor3_calibrated_ok   ; Set flags prior check
+
     rcall   check_sensors           ; Check O2 sensor thresholds min_mv and max_mv and set use_02_sensorX flags
     ; initialise internal calibration flags
     btfss	use_O2_sensor1          ; Sensor out of range?
@@ -253,128 +256,134 @@
     banksel common
 	return
 
+
 calibrate_mix2_helper:	
-	call	mult16x16		;xA*xB=xC
+	call	mult16x16		; xA*xB=xC
 	movlw	LOW		.100
 	movwf	xB+0
 	movlw	HIGH	.100
 	movwf	xB+1
-	goto	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return)
+	goto	div32x16		; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return)
+
 
-	
-compute_ppo2_analog:
-    call    get_analog_inputs
-    bra     compute_ppo2_common
+; DELETE COMPLETE FUNTION, PARTS  OF THE CODE HAVE MIGRATED TO calc_deko_divemode_sensor	## voting logic	
+; compute_ppo2_analog:
+    ; call    get_analog_inputs
+    ; bra     compute_ppo2_common
 
-	global	compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
-compute_ppo2:
-    btfss   analog_o2_input             ; cR hardware?
-    return                              ; No
+	; global	compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
+; compute_ppo2:
+    ; btfss   analog_o2_input             ; cR hardware?
+    ; return                              ; No
 
-    btfss   s8_digital                  ; =1: Digital I/O
-    bra     compute_ppo2_analog         ; use analog
+    ; btfss   s8_digital                  ; =1: Digital I/O
+    ; bra     compute_ppo2_analog         ; use analog
 
-    ; use digital
-    btfss   new_s8_data_available       ; =1: New data frame recieved
-    return
-	rcall	compute_mvolts_for_all_sensors
+    ; ; use digital
+    ; btfss   new_s8_data_available       ; =1: New data frame recieved
+    ; return
+	; rcall	compute_mvolts_for_all_sensors
 
-compute_ppo2_common:
-	; o2_mv_sensor1:2 * opt_x_s1:2 = o2_ppo2_sensor1/10000
-	movff	o2_mv_sensor1+0,xA+0
-	movff	o2_mv_sensor1+1,xA+1
-	movff	opt_x_s1+0,xB+0
-	movff	opt_x_s1+1,xB+1
-	rcall	compute_ppo2_common_helper
-	movff	xC+0,o2_ppo2_sensor1		; result in 0.01bar
-;    ; Set to zero if sensor is not active!
-;	btfss	use_O2_sensor1
-;	clrf	o2_ppo2_sensor1
+; compute_ppo2_common:
+	; ; o2_mv_sensor1:2 * opt_x_s1:2 = o2_ppo2_sensor1/10000
+	; movff	o2_mv_sensor1+0,xA+0
+	; movff	o2_mv_sensor1+1,xA+1
+	; movff	opt_x_s1+0,xB+0
+	; movff	opt_x_s1+1,xB+1
+	; rcall	compute_ppo2_common_helper
+	; movff	xC+0,o2_ppo2_sensor1		; result in 0.01bar
+; ;    ; Set to zero if sensor is not active!
+; ;	btfss	use_O2_sensor1
+; ;	clrf	o2_ppo2_sensor1
 
-	; o2_mv_sensor2:2 * opt_x_s1:2 = o2_ppo2_sensor2/10000
-	movff	o2_mv_sensor2+0,xA+0
-	movff	o2_mv_sensor2+1,xA+1
-	movff	opt_x_s2+0,xB+0
-	movff	opt_x_s2+1,xB+1
-	rcall	compute_ppo2_common_helper
-	movff	xC+0,o2_ppo2_sensor2		; result in 0.01bar
-;	; Set to zero if sensor is not active!
-;	btfss	use_O2_sensor2
-;	clrf	o2_ppo2_sensor2
+	; ; o2_mv_sensor2:2 * opt_x_s1:2 = o2_ppo2_sensor2/10000
+	; movff	o2_mv_sensor2+0,xA+0
+	; movff	o2_mv_sensor2+1,xA+1
+	; movff	opt_x_s2+0,xB+0
+	; movff	opt_x_s2+1,xB+1
+	; rcall	compute_ppo2_common_helper
+	; movff	xC+0,o2_ppo2_sensor2		; result in 0.01bar
+; ;	; Set to zero if sensor is not active!
+; ;	btfss	use_O2_sensor2
+; ;	clrf	o2_ppo2_sensor2
 
-	; o2_mv_sensor3:2 * opt_x_s1:2 = o2_ppo2_sensor3/10000
-	movff	o2_mv_sensor3+0,xA+0
-	movff	o2_mv_sensor3+1,xA+1
-	movff	opt_x_s3+0,xB+0
-	movff	opt_x_s3+1,xB+1
-	rcall	compute_ppo2_common_helper
-	movff	xC+0,o2_ppo2_sensor3		; result in 0.01bar
-;	; Set to zero if sensor is not active!
-;	btfss	use_O2_sensor3
-;	clrf	o2_ppo2_sensor3
-	return							; Done.
+	; ; o2_mv_sensor3:2 * opt_x_s1:2 = o2_ppo2_sensor3/10000
+	; movff	o2_mv_sensor3+0,xA+0
+	; movff	o2_mv_sensor3+1,xA+1
+	; movff	opt_x_s3+0,xB+0
+	; movff	opt_x_s3+1,xB+1
+	; rcall	compute_ppo2_common_helper
+	; movff	xC+0,o2_ppo2_sensor3		; result in 0.01bar
+; ;	; Set to zero if sensor is not active!
+; ;	btfss	use_O2_sensor3
+; ;	clrf	o2_ppo2_sensor3
+	; return							; Done.
 
-compute_ppo2_common_helper:
-	call	mult16x16		;xA:2*xB:2=xC:4
-	movlw	LOW		.1000
-	movwf	xB+0
-	movlw	HIGH		.1000
-	movwf	xB+1
-	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-	movlw	d'1'
-	addwf	xC+0,F
-	movlw	d'0'
-	addwfc	xC+1,F
-        tstfsz  xC+1                        ; ppO2 is higher then 2.55bar?
-        setf    xC+0                        ; Yes.
-        return
+; compute_ppo2_common_helper:
+	; call	mult16x16		;xA:2*xB:2=xC:4
+	; movlw	LOW		.1000
+	; movwf	xB+0
+	; movlw	HIGH		.1000
+	; movwf	xB+1
+	; call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	; movlw	d'1'
+	; addwf	xC+0,F
+	; movlw	d'0'
+	; addwfc	xC+1,F
+        ; tstfsz  xC+1                        ; ppO2 is higher then 2.55bar?
+        ; setf    xC+0                        ; Yes.
+        ; return
 
+
+	global	compute_mvolts_for_all_sensors
 compute_mvolts_for_all_sensors:          ; Compute mV or all sensors (S8 Mode)
 ; compute AD results in 100µV steps (16bit/sensor)
 ; 24bit AD result is in 244,1406541nV
 ; Devide 24bit value through 409,5999512 -> 410 (0,01% error)
-        #DEFINE	ad2mv_factor	.410
-        ; Sensor 1
-        clrf	xC+3
-        movff	s8_rawdata_sensor1+2,xC+2
-        movff	s8_rawdata_sensor1+1,xC+1
-        movff	s8_rawdata_sensor1+0,xC+0
-        movlw	LOW		ad2mv_factor
-        movwf	xB+0
-        movlw	HIGH	ad2mv_factor
-        movwf	xB+1
-        call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-        movff	xC+1,o2_mv_sensor1+1
-        movff	xC+0,o2_mv_sensor1+0		; in 100uV steps
-        ; Sensor 2
-        clrf	xC+3
-        movff	s8_rawdata_sensor2+2,xC+2
-        movff	s8_rawdata_sensor2+1,xC+1
-        movff	s8_rawdata_sensor2+0,xC+0
-        movlw	LOW		ad2mv_factor
-        movwf	xB+0
-        movlw	HIGH	ad2mv_factor
-        movwf	xB+1
-        call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-        movff	xC+1,o2_mv_sensor2+1
-        movff	xC+0,o2_mv_sensor2+0		; in 100uV steps
-        ; Sensor 3
-        clrf	xC+3
-        movff	s8_rawdata_sensor3+2,xC+2
-        movff	s8_rawdata_sensor3+1,xC+1
-        movff	s8_rawdata_sensor3+0,xC+0
-        movlw	LOW		ad2mv_factor
-        movwf	xB+0
-        movlw	HIGH	ad2mv_factor
-        movwf	xB+1
-        call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-        movff	xC+1,o2_mv_sensor3+1
-        movff	xC+0,o2_mv_sensor3+0		; in 100uV steps
+	#DEFINE	ad2mv_factor	.410
+	; Sensor 1
+	clrf	xC+3
+	movff	s8_rawdata_sensor1+2,xC+2
+	movff	s8_rawdata_sensor1+1,xC+1
+	movff	s8_rawdata_sensor1+0,xC+0
+	movlw	LOW		ad2mv_factor
+	movwf	xB+0
+	movlw	HIGH	ad2mv_factor
+	movwf	xB+1
+	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movff	xC+1,o2_mv_sensor1+1
+	movff	xC+0,o2_mv_sensor1+0		; in 100uV steps
+	; Sensor 2
+	clrf	xC+3
+	movff	s8_rawdata_sensor2+2,xC+2
+	movff	s8_rawdata_sensor2+1,xC+1
+	movff	s8_rawdata_sensor2+0,xC+0
+	movlw	LOW		ad2mv_factor
+	movwf	xB+0
+	movlw	HIGH	ad2mv_factor
+	movwf	xB+1
+	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movff	xC+1,o2_mv_sensor2+1
+	movff	xC+0,o2_mv_sensor2+0		; in 100uV steps
+	; Sensor 3
+	clrf	xC+3
+	movff	s8_rawdata_sensor3+2,xC+2
+	movff	s8_rawdata_sensor3+1,xC+1
+	movff	s8_rawdata_sensor3+0,xC+0
+	movlw	LOW		ad2mv_factor
+	movwf	xB+0
+	movlw	HIGH	ad2mv_factor
+	movwf	xB+1
+	call	div32x16  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movff	xC+1,o2_mv_sensor3+1
+	movff	xC+0,o2_mv_sensor3+0		; in 100uV steps
 
-        bcf     new_s8_data_available       ; Clear flag
-        return                  ; Done.
+	bcf     new_s8_data_available		; Clear flag
+	return								; Done.
 
-	global	transmit_setpoint           ; Transmit current setpoint from WREG (in cbar) to external electronics
+		
+
+	global	transmit_setpoint	; Transmit current setpoint from WREG (in cbar) to external electronics
 transmit_setpoint:
     return
     btfss   s8_digital          ; S8 Digital?
@@ -393,12 +402,12 @@
     movff   WREG,TXREG2
     call    rs232_wait_tx2
 
-    movff   temp2,WREG         ; SP in cbar
+    movff   temp2,WREG			; SP in cbar
     addwf   temp1,F
     movff   WREG,TXREG2
     call    rs232_wait_tx2
 
-    movff   temp1,TXREG2	; Chksum
+    movff   temp1,TXREG2		; Chksum
     call    rs232_wait_tx2
     return
 
--- a/src/calibrate.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/calibrate.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,10 +1,19 @@
 ;=============================================================================
 ;
-;   File calibrate.inc
+;   File calibrate.inc								REFACTORED VERSION V2.91
 ;
 ;=============================================================================
 
-	extern		compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
+; DELETE	## voting logic
+;	extern		compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
+
 	extern		calibrate_mix			; Calibrate with any mix
-    extern      check_sensors           ; Check O2 sensor thresholds for fallback
-    extern      transmit_setpoint       ; Transmit current setpoint from WREG (in cbar) to external electronics
\ No newline at end of file
+	
+; DELETE	## voting logic
+;    extern      check_sensors           ; Check O2 sensor thresholds for fallback
+
+; ADD		## voting logic
+	extern		compute_mvolts_for_all_sensors	; compute sensor mv values from digital transmitted data
+
+    extern      transmit_setpoint       ; Transmit current setpoint from WREG (in cbar) to external electronics
+	
\ No newline at end of file
--- a/src/changelog.txt	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/changelog.txt	Wed Jan 31 19:39:37 2018 +0100
@@ -1,3 +1,7 @@
+[2.96]
+- Beta Version -
+
+
 [2.27]
 - Beta Version -
 BUGFIX: Display of negative (°C) water temperatures
--- a/src/comm.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/comm.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File comm.asm
+;   File comm.asm									REFACTORED VERSION 2.94
 ;
 ;   RS232 via USB
 ;
@@ -107,12 +107,12 @@
 	movlw	0xAA						; start byte=0xAA?
 	cpfseq	RCREG1
 	bra		comm_mode2a
-	bra		comm_mode2b             ; Startbyte for service mode found
+	bra		comm_mode2b					; Startbyte for service mode found
 comm_mode2a:
 	movlw	0xBB						; start byte=0xBB?
 	cpfseq	RCREG1
 	bra		comm_mode2c
-	bra		comm_download_mode		; Startbyte for download mode found
+	bra		comm_download_mode			; Startbyte for download mode found
 
 comm_mode2c:
     btfss   vusb_in                     ; USB plugged in?
@@ -124,33 +124,33 @@
 	btfsc	onesecupdate
 	bra		comm_mode1
 
-    bra     comm_mode2				; Cycle
+    bra     comm_mode2					; Cycle
 
 comm_mode2b:
 	; Startbyte found
 	rcall	comm_rs232_wait_tx			; Wait for UART
 	movlw	0x4B
-	movwf	TXREG1					; Send Answer
+	movwf	TXREG1						; Send Answer
 	; Now, check comm command
 
-	rcall	comm_write_get_byte				; first byte
-	rcall	comm_rs232_wait_tx               ; Wait for UART
-    movff   RCREG1,TXREG1                 ; Echo
+	rcall	comm_write_get_byte			; first byte
+	rcall	comm_rs232_wait_tx			; Wait for UART
+    movff   RCREG1,TXREG1				; Echo
 	movlw	UPPER comm_service_key
 	cpfseq	RCREG1
-    bra     comm_mode1               ; Wrong -> Restart
-	rcall	comm_write_get_byte				; second byte
+    bra     comm_mode1					; Wrong -> Restart
+	rcall	comm_write_get_byte			; second byte
 	rcall	comm_rs232_wait_tx			; Wait for UART
-    movff   RCREG1,TXREG1                 ; Echo
+    movff   RCREG1,TXREG1				; Echo
 	movlw	HIGH (comm_service_key & 0xFFFF)
 	cpfseq	RCREG1
-    bra     comm_mode1               ; Wrong -> Restart
-	rcall	comm_write_get_byte				; third byte
+    bra     comm_mode1					; Wrong -> Restart
+	rcall	comm_write_get_byte			; third byte
 	rcall	comm_rs232_wait_tx			; Wait for UART
-    movff   RCREG1,TXREG1                 ; Echo
+    movff   RCREG1,TXREG1				; Echo
 	movlw	LOW comm_service_key
 	cpfseq	RCREG1
-    bra     comm_mode1               ; Wrong -> Restart
+    bra     comm_mode1					; Wrong -> Restart
 
 	; Enable comm service mode
 	WIN_SMALL	comm_status2_column, comm_status2_row
@@ -171,7 +171,7 @@
 	WIN_SMALL	comm_status3_column, comm_status3_row
 	STRCPY_TEXT_PRINT	tUsbExit        ; Exited
 comm_service_exit_common:
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	movlw	0xFF                        ; Reply FF
 	movwf	TXREG1						; Send Answer
 
@@ -202,25 +202,25 @@
 ; send firmware to bootloader
 ;
 comm_send_firmware:
-    movlw   0x50                            ; send echo
+    movlw   0x50							; send echo
     movwf   TXREG1
-    rcall    comm_rs232_wait_tx                   ; Wait for UART
+    rcall    comm_rs232_wait_tx				; Wait for UART
 
     ; Read 5 bytes into buffer.
 	lfsr	FSR2,buffer
 	movlw	.5								; counter
 	movwf	lo
-	movlw   0x55                            ; 5'ft byte checksum.
+	movlw   0x55							; 5'ft byte checksum.
 	movwf   hi
 
 comm_send_firmware_loop:
 	rcall	comm_write_get_byte
 	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_send_firmware_abort   ; No, abort!
+	bra		comm_send_firmware_abort		; No, abort!
 	movf	RCREG1,W
-	movwf   POSTINC2                        ; Store checksum byte.
-	xorwf   hi,F                            ; Also xor into checksum
-	rlncf   hi,F                            ; And rotate it.
+	movwf   POSTINC2						; Store checksum byte.
+	xorwf   hi,F							; Also xor into checksum
+	rlncf   hi,F							; And rotate it.
 	decfsz	lo,F
 	bra		comm_send_firmware_loop
 	
@@ -228,14 +228,14 @@
 	movf    hi,W
 	bnz     comm_send_firmware_failed
 
-    movlw   0x4C                            ; send OK
+    movlw   0x4C							; send OK
     movwf   TXREG1
-    rcall    comm_rs232_wait_tx                   ; Wait for UART
+    rcall    comm_rs232_wait_tx				; Wait for UART
 
 	; Passed: goto second stage verification.
 	; NOTE: Bootloader is Bank0. With buffer at address 0x200.
-    call    vault_decodata_into_eeprom      ; Store last deco data (And Time/Date) into EEPROM
-	goto    0x1FDF0                         ; And pray...
+    call    vault_decodata_into_eeprom		; Store last deco data (And Time/Date) into EEPROM
+	goto    0x1FDF0							; And pray...
 
 comm_send_firmware_failed:
 	WIN_SMALL	comm_string_column, comm_string_row
@@ -244,7 +244,7 @@
 
 comm_send_firmware_abort:
 
-    movlw   0xFF                            ; send ABORTED byte.
+    movlw   0xFF							; send ABORTED byte.
 	movwf	TXREG1
 	bra		comm_download_mode0				; Done.
 
@@ -273,9 +273,9 @@
 ; erases range in 4kB steps
 
 comm_erase_range4kb:
-    movlw   0x42                        ; send echo
+    movlw   0x42						; send echo
     movwf   TXREG1
-    rcall    comm_rs232_wait_tx               ; Wait for UART
+    rcall    comm_rs232_wait_tx			; Wait for UART
 
     bcf     INTCON,GIE	; All interrups off!
 
@@ -316,10 +316,10 @@
 
 ;-----------------------------------------------------------------------------
 
-comm_write_range:				; Get 3 bytes start address
+comm_write_range:						; Get 3 bytes start address
     movlw   0x30                        ; send echo
 	movwf	TXREG1
-	rcall	comm_rs232_wait_tx               ; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 
 	bcf		INTCON,GIE                  ; All interrups off!
 
@@ -330,41 +330,41 @@
 comm_write_range_loop:
 	rcall	comm_write_get_byte
 	btfsc	rs232_recieve_overflow      ; Got byte?
-	bra	comm_download_mode0         ; No, Done (and send OK byte too).
+	bra		comm_download_mode0         ; No, Done (and send OK byte too).
 	movf	RCREG1,W
 ;	bsf	NCTS	    ; Hold Bluetooth Chip (Requires PC/Android/iOS side to use flow control...)
-	call	ext_flash_byte_write_comms        ; write one byte
+	call	ext_flash_byte_write_comms	; write one byte
 ;	bcf	NCTS	    ; Release Bluetooth Chip (Requires PC/Android/iOS side to use flow control...)
 	call	incf_ext_flash_address_p1   ; increase address+1
 	bra	comm_write_range_loop
 
 ;-----------------------------------------------------------------------------
 
-comm_send_range:				; Get 3 bytes start address and 3 bytes amount
+comm_send_range:						; Get 3 bytes start address and 3 bytes amount
     movlw   0x20                        ; send echo
     movwf   TXREG1
-	rcall	comm_rs232_wait_tx               ; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 
-	bcf		INTCON,GIE	; All interrups off!	
+	bcf		INTCON,GIE					; All interrups off!	
 
 	rcall	comm_get_flash_address		; Get three bytes address or return
-	btfsc	rs232_recieve_overflow			; Got Data?
-	bra		comm_download_mode0				; No, Done.
+	btfsc	rs232_recieve_overflow		; Got Data?
+	bra		comm_download_mode0			; No, Done.
 
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0				; No, Done.
+	btfsc	rs232_recieve_overflow		; Got byte?
+	bra		comm_download_mode0			; No, Done.
     movff   RCREG1,up
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0				; No, Done.
+	btfsc	rs232_recieve_overflow		; Got byte?
+	bra		comm_download_mode0			; No, Done.
 	movff	RCREG1,hi
 	rcall	comm_write_get_byte
-	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0				; No, Done.
+	btfsc	rs232_recieve_overflow		; Got byte?
+	bra		comm_download_mode0			; No, Done.
 	movff	RCREG1,lo
 
-    ; If lo==0, we must precondition hi because there is to many bytes send !
+    ; If lo==0, we must precondition hi because there are to many bytes send !
     movf    lo,W    
     bnz     $+4
     decf    hi,F
@@ -379,12 +379,12 @@
 	call	ext_flash_read_block_start
 	movwf	TXREG1
 
-	bra		comm_send_range24		; counter 24bit
+	bra		comm_send_range24			; counter 24bit
 comm_send_range24_loop:
 	call	ext_flash_read_block		; Read one byte
 	movwf	TXREG1						; Start new transmit
 comm_send_range24:
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	decfsz	lo,F
 	bra		comm_send_range24_loop
 	decf	hi,F
@@ -423,12 +423,12 @@
 	WIN_SMALL	comm_status2_column, comm_status2_row
 	STRCPY_TEXT_PRINT	tUsbDownloadMode; Download mode enabled
 	bsf		INTCON,GIE					; All interrups on
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	movlw	0xBB                        ; Command Echo
 	movwf	TXREG1						; Send Answer
 comm_download_mode0:
     bsf		INTCON,GIE					; All interrups on
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
     movlw   0x4C                        ; 4C in service mode
     btfss   comm_service_enabled
 	movlw	0x4D                        ; 4D in download mode
@@ -441,7 +441,7 @@
 	dcfsnz 	timeout_counter,F
 	bra		comm_service_exit           ; Timeout -> Exit
 comm_download_mode2:
-	rcall	comm_write_get_byte              ; Check for a byte
+	rcall	comm_write_get_byte         ; Check for a byte
     btfsc   comm_service_enabled
 	btg     LEDr                        ; Blink in Service mode
     btfss   vusb_in                     ; USB plugged in?
@@ -451,7 +451,7 @@
 	btfsc	onesecupdate
 	bra		comm_download_mode1
 	btfsc	rs232_recieve_overflow
-	bra		comm_download_mode2	; Wait for command byte
+	bra		comm_download_mode2			; Wait for command byte
 
 	; command received!
 	bcf		LEDr
@@ -547,7 +547,7 @@
 ;	movlw	"t"
 ;	cpfseq	RCREG1
 ;	bra		$+4
-;    goto    testloop                    ; Start raw-data testloop
+;    goto    testloop                   ; Start raw-data testloop
 	movlw	0xC1
 	cpfseq	RCREG1
 	bra		$+4
@@ -557,7 +557,7 @@
 ;-----------------------------------------------------------------------------
 
 comm_send_compact_headers:
-	movlw	"m"								; send echo
+	movlw	"m"							; send echo
 	movwf	TXREG1
 	; Send 13 bytes/dive (Compact Header)
 	; 1st: 200009h-200016h
@@ -580,14 +580,14 @@
 	addwfc	ext_flash_address+2
 
 	movlw	0x30
-	cpfseq	ext_flash_address+2				; All 256 dive send?
-	bra		comm_send_compact_headers4			; No, continue
-	bra		comm_download_mode0		; Done. Loop with timeout reset
+	cpfseq	ext_flash_address+2			; All 256 dive send?
+	bra		comm_send_compact_headers4	; No, continue
+	bra		comm_download_mode0			; Done. Loop with timeout reset
 
 comm_send_compact_headers4:
     movlw   .13
 	movwf	lo							; Counter
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	call	ext_flash_read_block_start	; 1st byte
 	movwf	TXREG1
 	bra		comm_send_compact_headers3	; counter 24bit
@@ -595,7 +595,7 @@
 	call	ext_flash_read_block		; Read one byte
 	movwf	TXREG1						; Start new transmit
 comm_send_compact_headers3:
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	decfsz	lo,F
 	bra		comm_send_compact_headers_loop
 	call	ext_flash_read_block_stop
@@ -609,21 +609,21 @@
 	call	ext_flash_read_block		; 2nd byte
 	movwf	TXREG1
     call	ext_flash_read_block_stop
-    rcall	comm_rs232_wait_tx				; Wait for UART
+    rcall	comm_rs232_wait_tx			; Wait for UART
 
     ; Offset to Logbook-Profile version
 	movlw	.8
 	movwf	ext_flash_address+0
-    call	ext_flash_byte_read         	; Get byte
+    call	ext_flash_byte_read         ; Get byte
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx				; Wait for UART
-	bra		comm_send_compact_headers2		; continue
+    rcall	comm_rs232_wait_tx			; Wait for UART
+	bra		comm_send_compact_headers2	; continue
 
 
 ;-----------------------------------------------------------------------------
 
 comm_send_headers:
-	movlw	"a"								; send echo
+	movlw	"a"							; send echo
 	movwf	TXREG1
 	; Send 256 bytes/dive (Header)
 	; 1st: 200000h-2000FFh
@@ -637,8 +637,7 @@
 	movwf	ext_flash_address+1
 
 comm_send_headers2:
-	movlw	0x00
-	movwf	ext_flash_address+0
+	clrf	ext_flash_address+0
 	; Adjust address for next dive
 	movlw	0x10
 	addwf	ext_flash_address+1
@@ -646,33 +645,33 @@
 	addwfc	ext_flash_address+2
 
 	movlw	0x30
-	cpfseq	ext_flash_address+2				; All 256 dive send?
+	cpfseq	ext_flash_address+2			; All 256 dive send?
 	bra		comm_send_headers4			; No, continue
-	bra		comm_download_mode0		; Done. Loop with timeout reset
+	bra		comm_download_mode0			; Done. Loop with timeout reset
 
 comm_send_headers4:
 	clrf	lo							; Counter	
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	call	ext_flash_read_block_start	; 1st byte
 	movwf	TXREG1
-	bra		comm_send_headers3		; counter 24bit
+	bra		comm_send_headers3			; counter 24bit
 comm_send_headers_loop:
 	call	ext_flash_read_block		; Read one byte
 	movwf	TXREG1						; Start new transmit
 comm_send_headers3:
-	rcall	comm_rs232_wait_tx				; Wait for UART
+	rcall	comm_rs232_wait_tx			; Wait for UART
 	decfsz	lo,F
 	bra		comm_send_headers_loop
 	call	ext_flash_read_block_stop
-	bra		comm_send_headers2		; continue
+	bra		comm_send_headers2			; continue
 
 ;-----------------------------------------------------------------------------
 
-comm_option_reset_all:       ; Reset all options to factory default.
-	movlw	"x"								; send echo
+comm_option_reset_all:       			; Reset all options to factory default.
+	movlw	"x"							; send echo
 	movwf	TXREG1
     call    option_reset_all
-    bra		comm_download_mode0             ; Done. back to loop with timeout reset
+    bra		comm_download_mode0			; Done. back to loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
@@ -686,7 +685,7 @@
 	movlw	"b"								; send echo
 	movwf	TXREG1
 
-	rcall	comm_rs232_wait_tx					; wait for UART
+	rcall	comm_rs232_wait_tx				; wait for UART
 	rcall	comm_write_get_byte
 	btfsc	rs232_recieve_overflow			; Got byte?
 	bra		comm_download_mode0             ; No, abort
@@ -737,7 +736,7 @@
 comm_set_custom_text:
     movlw	"c"								; send echo
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     lfsr	FSR2,opt_name
     movlw	opt_name_length
     movwf	lo								; counter
@@ -765,7 +764,7 @@
 comm_identify:
     movlw	"i"								; send echo
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
 
     ;---- Read serial from internal EEPROM address 0000
 	clrf	EEADRH
@@ -810,25 +809,25 @@
 comm_hardware_descriptor:
     movlw	"j"								; send echo
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     movff   hardware_flag,TXREG1
     bra     comm_download_mode0             ; Done.
 
 comm_feature_and_hardware:
-    movlw	0x60								; send echo
+    movlw	0x60							; send echo
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     movlw	0x00	; Hardware high byte
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     movff	hardware_flag,TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     movlw	0x00	; Feature high Byte
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     movlw	0x00	; Feature low Byte
     movwf	TXREG1
-    rcall	comm_rs232_wait_tx					; wait for UART
+    rcall	comm_rs232_wait_tx				; wait for UART
     movlw	0x00	; Model descriptor byte
     movwf	TXREG1
     bra     comm_download_mode0             ; Done.
@@ -841,7 +840,7 @@
 	
 	rcall	comm_write_get_byte
 	btfsc	rs232_recieve_overflow			; Got byte?
-	bra		comm_download_mode0		; No, abort!
+	bra		comm_download_mode0				; No, abort!
 	movff	RCREG1,lo						; Store dive number (0-255)
 ; First, send the header (again)
 	; Set ext_flash_address:3 to TOC entry of this dive
@@ -854,7 +853,7 @@
 	movlw	0x20
 	movwf	ext_flash_address+2
 	movlw	.16
-	mulwf	lo				; lo*16 = offset to 0x2000 (up:hi)
+	mulwf	lo								; lo*16 = offset to 0x2000 (up:hi)
 	movf	PRODL,W
 	addwf	ext_flash_address+1,F
 	movf	PRODH,W
@@ -892,16 +891,16 @@
 
 comm_send_dive1:
 	; Send header
-	clrf	hi				; Counter	
-	rcall	comm_rs232_wait_tx		; Wait for UART
-	call	ext_flash_read_block_start	; 1st byte
+	clrf	hi									; Counter	
+	rcall	comm_rs232_wait_tx					; Wait for UART
+	call	ext_flash_read_block_start			; 1st byte
 	movwf	TXREG1
 	bra	comm_send_dive_header
 comm_send_dive_header2:
-	call	ext_flash_read_block		; Read one byte
-	movwf	TXREG1				; Start new transmit
+	call	ext_flash_read_block				; Read one byte
+	movwf	TXREG1								; Start new transmit
 comm_send_dive_header:
-	rcall	comm_rs232_wait_tx		; Wait for UART
+	rcall	comm_rs232_wait_tx					; Wait for UART
 	decfsz	hi,F
 	bra	comm_send_dive_header2
 	call	ext_flash_read_block_stop
@@ -911,15 +910,15 @@
 	movff	ext_flash_log_pointer+1,ext_flash_address+1
 	movff	ext_flash_log_pointer+2,ext_flash_address+2
 
-	movlw	.6				; Skip 6byte short header in profile - only for internal use
-	call	incf_ext_flash_address0_0x20	; increases bytes in ext_flash_address:3 with 0x200000 bank switching
+	movlw	.6									; Skip 6byte short header in profile - only for internal use
+	call	incf_ext_flash_address0_0x20		; increases bytes in ext_flash_address:3 with 0x200000 bank switching
 
 	; Set address for short header/compact header, Byte 0
 	
 comm_send_dive_profile:
-	call	ext_flash_byte_read_plus_0x20	; Read one byte into temp1, takes care of banking at 0x200000
-	rcall	comm_rs232_wait_tx		; Wait for UART
-	movff	temp1,TXREG1			; Send a byte
+	call	ext_flash_byte_read_plus_0x20		; Read one byte into temp1, takes care of banking at 0x200000
+	rcall	comm_rs232_wait_tx					; Wait for UART
+	movff	temp1,TXREG1						; Send a byte
 	
 	; 24bit compare with end address
 	movff	convert_value_temp+0,WREG
@@ -932,8 +931,8 @@
 	cpfseq	ext_flash_address+2
 	bra	comm_send_dive_profile
 	
-	rcall   comm_read_setting_wait          ; Wait for UART
-	bra	comm_download_mode0		; Done. Loop with timeout reset
+	rcall   comm_read_setting_wait          	; Wait for UART
+	bra	comm_download_mode0						; Done. Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
@@ -985,9 +984,9 @@
     dcfsnz  WREG
     movff   char_I_deco_model, TXREG1       ; RCREG1=0x21
     dcfsnz  WREG
-    movff   opt_ppO2_max, TXREG1            ; RCREG1=0x22
+    movff   char_I_ppO2_max, TXREG1         ; RCREG1=0x22		MODIFIED ## V2.94
     dcfsnz  WREG
-    movff   opt_ppO2_min, TXREG1            ; RCREG1=0x23
+    movff   char_I_ppO2_min, TXREG1         ; RCREG1=0x23		MODIFIED ## V2.94
     dcfsnz  WREG
     movff   char_I_extra_time, TXREG1       ; RCREG1=0x24
     dcfsnz  WREG
@@ -1017,7 +1016,7 @@
     dcfsnz  WREG
     movff   opt_dive_color_scheme, TXREG1   ; RCREG1=0x31
     dcfsnz  WREG
-    movff   opt_language, TXREG1            ; RCREG1=0x32
+    movff	opt_language, TXREG1            ; RCREG1=0x32
     dcfsnz  WREG
     movff   opt_dateformat, TXREG1          ; RCREG1=0x33
     dcfsnz  WREG
@@ -1029,7 +1028,7 @@
     dcfsnz  WREG
     movff   opt_calibration_O2_ratio, TXREG1; RCREG1=0x37
     dcfsnz  WREG
-    movff   opt_sensor_fallback, TXREG1     ; RCREG1=0x38
+    clrf    TXREG1				            ; RCREG1=0x38   NOT USED ANYMORE (opt_sensor_fallback)	## voting logic
     dcfsnz  WREG
     movff   opt_flip_screen, TXREG1         ; RCREG1=0x39
     dcfsnz  WREG
@@ -1059,26 +1058,61 @@
     dcfsnz  WREG
     movff   opt_safety_stop_reset, TXREG1   ; RCREG1=0x46
     dcfsnz  WREG
-    clrf    TXREG1			    ; RCREG1=0x47, ignore conservatism for standard hwOS
+    clrf    TXREG1			    			; RCREG1=0x47, ignore conservatism for standard hwOS
+    dcfsnz  WREG
+    movff   opt_diveTimeout, TXREG1	    	; RCREG1=0x48
+    dcfsnz  WREG
+    movff   button_polarity, TXREG1	    	; RCREG1=0x49
+    dcfsnz  WREG
+    movff   char_I_PSCR_drop, TXREG1	    ; RCREG1=0x4A
     dcfsnz  WREG
-    movff   opt_diveTimeout, TXREG1	    ; RCREG1=0x48
+    movff   char_I_PSCR_lungratio, TXREG1	; RCREG1=0x4B
     dcfsnz  WREG
-    movff   button_polarity, TXREG1	    ; RCREG1=0x49
+    movff   char_I_ppO2_max_deco, TXREG1    ; RCREG1=0x4C	MODIFIED ## V2.94
+	
+	; NEW
+    dcfsnz  WREG
+    movff   char_I_ppO2_min_loop, TXREG1	; RCREG1=0x4D	## CCR/pSCR min ppO2	MODIFIED ## V2.94
     dcfsnz  WREG
-    movff   opt_PSCR_drop, TXREG1	    ; RCREG1=0x4A
-    dcfsnz  WREG
-    movff   opt_PSCR_lungratio, TXREG1	    ; RCREG1=0x4B
-    dcfsnz  WREG
-    movff   opt_ppO2_max_deco, TXREG1       ; RCREG1=0x4C
-
-
+    movff   char_I_tank_size+0, TXREG1		; RCREG1=0x4E	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_size+1, TXREG1		; RCREG1=0x4F	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_size+2, TXREG1		; RCREG1=0x50	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_size+3, TXREG1		; RCREG1=0x51	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_size+4, TXREG1		; RCREG1=0x52	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_pres_fill+0, TXREG1	; RCREG1=0x53	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_pres_fill+1, TXREG1	; RCREG1=0x54	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_pres_fill+2, TXREG1	; RCREG1=0x55	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_pres_fill+3, TXREG1	; RCREG1=0x56	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_tank_pres_fill+4, TXREG1	; RCREG1=0x57	## bailout gas needs
+	dcfsnz  WREG
+    movff   char_I_cc_max_frac_o2, TXREG1	; RCREG1=0x58	## CCR max ppO2 limiter
+	dcfsnz  WREG
+    movff   opt_sim_setpoint_number, TXREG1	; RCREG1=0x59	## deco calculator enhancement
+	dcfsnz  WREG
+    movff   opt_calc_asc_gasvolume, TXREG1	; RCREG1=0x5A	## bailout gas needs 
+	dcfsnz  WREG
+    movff   opt_sim_use_aGF, TXREG1			; RCREG1=0x5B	## deco calculator enhancement
+	dcfsnz  WREG
+    movff   char_I_altitude_wait, TXREG1	; RCREG1=0x5C	## no fly altitude
+	dcfsnz  WREG
+    movff   opt_enable_IBCD, TXREG1			; RCREG1=0x5D	## IBCD
+	
     
 comm_read_abort:
 comm_read_done:
     bra		comm_download_mode0             ; Done. Loop with timeout reset
 
 comm_read_setting_wait:
-    bra    comm_rs232_wait_tx					; Wait for UART (and return!)
+    bra    comm_rs232_wait_tx				; Wait for UART (and return!)
 
 comm_read_gas1:
     movff   opt_gas_O2_ratio+0, TXREG1
@@ -1297,9 +1331,9 @@
     dcfsnz  WREG
     movff   RCREG1, char_I_deco_model       ; RCREG1=0x21
     dcfsnz  WREG
-    movff   RCREG1, opt_ppO2_max            ; RCREG1=0x22
+    movff   RCREG1, char_I_ppO2_max         ; RCREG1=0x22	MODIFIED ## V2.94
     dcfsnz  WREG
-    movff   RCREG1, opt_ppO2_min            ; RCREG1=0x23
+    movff   RCREG1, char_I_ppO2_min         ; RCREG1=0x23	MODIFIED ## V2.94
     dcfsnz  WREG
     movff   RCREG1, char_I_extra_time       ; RCREG1=0x24
     dcfsnz  WREG
@@ -1329,7 +1363,7 @@
     dcfsnz  WREG
     movff   RCREG1, opt_dive_color_scheme   ; RCREG1=0x31
     dcfsnz  WREG
-    movff   RCREG1, opt_language            ; RCREG1=0x32
+    movff   RCREG1, opt_language			; RCREG1=0x32
     dcfsnz  WREG
     movff   RCREG1, opt_dateformat          ; RCREG1=0x33
     dcfsnz  WREG
@@ -1341,7 +1375,7 @@
     dcfsnz  WREG
     movff   RCREG1, opt_calibration_O2_ratio; RCREG1=0x37
     dcfsnz  WREG
-    movff   RCREG1, opt_sensor_fallback     ; RCREG1=0x38
+    nop									    ; RCREG1=0x38    NOT USED ANYMORE (opt_sensor_fallback)	## voting logic	
     dcfsnz  WREG
     movff   RCREG1, opt_flip_screen         ; RCREG1=0x39
     dcfsnz  WREG
@@ -1371,19 +1405,55 @@
     dcfsnz  WREG
     movff   RCREG1, opt_safety_stop_reset   ; RCREG1=0x46
     dcfsnz  WREG
-    nop					    ; RCREG1=0x47, ignore conservatism for standard hwOS
+    nop					    				; RCREG1=0x47, ignore conservatism for standard hwOS
     dcfsnz  WREG
-    movff   RCREG1, opt_diveTimeout	    ; RCREG1=0x48
+    movff   RCREG1, opt_diveTimeout	    	; RCREG1=0x48
     dcfsnz  WREG
     bra	    comm_write_button_polarity	    ; RCREG1=0x49
     dcfsnz  WREG
-    movff   RCREG1, opt_PSCR_drop	    ; RCREG1=0x4A
+    movff   RCREG1, char_I_PSCR_drop	    ; RCREG1=0x4A
+    dcfsnz  WREG
+    movff   RCREG1, char_I_PSCR_lungratio	; RCREG1=0x4B
     dcfsnz  WREG
-    movff   RCREG1, opt_PSCR_lungratio	    ; RCREG1=0x4B
+    movff   RCREG1, char_I_ppO2_max_deco    ; RCREG1=0x4C	MODIFIED V2.94
+
+	; NEW
+    dcfsnz  WREG
+    movff   RCREG1, char_I_ppO2_min_loop	; RCREG1=0x4D	## CCR/pSCR min ppO2 limiter	MODIFIED ## V2.94
     dcfsnz  WREG
-    movff   RCREG1, opt_ppO2_max_deco	    ; RCREG1=0x4C
-
-
+    movff   RCREG1, char_I_tank_size+0		; RCREG1=0x4E	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_size+1		; RCREG1=0x4F	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_size+2		; RCREG1=0x50	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_size+3		; RCREG1=0x51	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_size+4		; RCREG1=0x52	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_pres_fill+0	; RCREG1=0x53	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_pres_fill+1	; RCREG1=0x54	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_pres_fill+2	; RCREG1=0x55	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_pres_fill+3	; RCREG1=0x56	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_tank_pres_fill+4	; RCREG1=0x57	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, char_I_cc_max_frac_o2	; RCREG1=0x58	## CCR max ppO2 limiter
+	dcfsnz  WREG
+    movff   RCREG1, opt_sim_setpoint_number	; RCREG1=0x59	## deco calculator enhancement
+	dcfsnz  WREG
+    movff   RCREG1, opt_calc_asc_gasvolume	; RCREG1=0x5A	## bailout gas needs
+	dcfsnz  WREG
+    movff   RCREG1, opt_sim_use_aGF			; RCREG1=0x5B	## deco calculator enhancement
+	dcfsnz  WREG
+    movff   RCREG1, char_I_altitude_wait	; RCREG1=0x5C	## no fly altitude
+	dcfsnz  WREG
+    movff   RCREG1, opt_enable_IBCD			; RCREG1=0x5D	## TBCD
+	
+	
 comm_write_abort:
     ; Check Options, gases and diluents
     call    option_check_all                ; Check all options (and reset if not within their min/max boundaries)
@@ -1393,7 +1463,7 @@
     call    gaslist_cleanup_list            ; Takes care that only one gas can be first and first has 0m change depth
     call    get_first_gas_to_WREG           ; Makes sure at least one Gas is "First"
     call    get_first_dil_to_WREG           ; Makes sure at least one Diluent is "First"
-    bra		comm_download_mode0             ; Done. Loop with timeout reset
+    goto    comm_download_mode0             ; Done. Loop with timeout reset
 
 comm_write_dil1:
     movff   RCREG1,opt_dil_O2_ratio+0
@@ -1403,7 +1473,7 @@
     movff   RCREG1,opt_dil_type+0
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_dil_change+0
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_dil2:
     movff   RCREG1,opt_dil_O2_ratio+1
     rcall	comm_write_get_byte
@@ -1412,7 +1482,7 @@
     movff   RCREG1,opt_dil_type+1
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_dil_change+1
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_dil3:
     movff   RCREG1,opt_dil_O2_ratio+2
     rcall	comm_write_get_byte
@@ -1421,7 +1491,7 @@
     movff   RCREG1,opt_dil_type+2
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_dil_change+2
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_dil4:
     movff   RCREG1,opt_dil_O2_ratio+3
     rcall	comm_write_get_byte
@@ -1430,7 +1500,7 @@
     movff   RCREG1,opt_dil_type+3
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_dil_change+3
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_dil5:
     movff   RCREG1,opt_dil_O2_ratio+4
     rcall	comm_write_get_byte
@@ -1439,40 +1509,40 @@
     movff   RCREG1,opt_dil_type+4
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_dil_change+4
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 
 comm_write_sp1:
     movff   RCREG1,char_I_setpoint_cbar+0
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_setpoint_change+0
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_sp2:
     movff   RCREG1,char_I_setpoint_cbar+1
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_setpoint_change+1
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_sp3:
     movff   RCREG1,char_I_setpoint_cbar+2
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_setpoint_change+2
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_sp4:
     movff   RCREG1,char_I_setpoint_cbar+3
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_setpoint_change+3
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 comm_write_sp5:
     movff   RCREG1,char_I_setpoint_cbar+4
     rcall	comm_write_get_byte
     movff   RCREG1,char_I_setpoint_change+4
-    bra		comm_write_abort             ; Done. Loop with timeout reset
+    bra		comm_write_abort             	; Done. Loop with timeout reset
 
 ;-----------------------------------------------------------------------------
 
 comm_send_string:
 	movlw	"n"								; send echo
 	movwf	TXREG1
-	rcall	comm_rs232_wait_tx					; Wait for UART
+	rcall	comm_rs232_wait_tx				; Wait for UART
 	WIN_SMALL	comm_string_column, comm_string_row
 	movlw	.16
 	movwf	lo								; counter
@@ -1516,9 +1586,9 @@
 	movlw	.30
 	dcfsnz	lo,F
 	movlw	.31
-	cpfsgt	day						; day ok?
-	return							; OK
-	movlw	.1						; not OK, set to 1st
+	cpfsgt	day				; day ok?
+	return					; OK
+	movlw	.1				; not OK, set to 1st
 	movwf	day
 	return	
 
@@ -1531,7 +1601,7 @@
 	movff	RCREG1,EEDATA
 	movff	EEDATA,button_polarity	    ; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
 	call    write_eeprom                ; EEDATA into EEPROM@EEADR
-	clrf	EEADRH			    ; Reset EEADRH
+	clrf	EEADRH			    		; Reset EEADRH
 	goto	comm_download_mode0         ; Done. Loop with timeout reset
 	
 ;----------------------------------------------------------------------------
--- a/src/compass_ops.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/compass_ops.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -217,7 +217,7 @@
 
     banksel common
     call    I2C_init_accelerometer
-    call    I2C_init_compass_fast
+    call    I2C_init_compass
     
     btfsc   compass_type	    ; compass1?
     bra	    compass_calibration_loop1	; Yes, skip gain stuff
--- a/src/customview.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/customview.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File customview.asm
+;   File customview.asm								REFACTORED VERSION V2.95
 ;
 ;   Customview in Surfacemode and Divemode
 ;
@@ -21,6 +21,7 @@
 #include	"convert.inc"
 #include	"divemode.inc"
 #include    "i2c.inc"
+#include    "start.inc"	
 
 gui     CODE
 
@@ -29,46 +30,60 @@
 
 	global	customview_second
 customview_second:
-	movff	menupos3,WREG               ; copy current view (1-...)
+	movff	menupos3,WREG			; copy current view (1-...)
 	dcfsnz	WREG,F
-	goto    TFT_update_ppo2_sensors         ; Update Sensor data ; and return
+	goto    TFT_update_ppo2_sensors	; Update Sensor data ; and return
 	dcfsnz	WREG,F
-	goto    TFT_update_avr_stopwatch        ; Update average depth and stopwatch; and return
+	goto    TFT_update_avr_stopwatch ; Update average depth and stopwatch; and return
 	dcfsnz	WREG,F
-	goto    TFT_decoplan                    ; Show decoplan ; and return
+	goto    TFT_decoplan			; Show decoplan ; and return
 	dcfsnz	WREG,F
-	goto    TFT_battinfo_tissues_clock       ; Update Battery, Tissues and clock ; and return
+	goto    TFT_battinfo_tissues_clock ; Update Battery, Tissues and clock ; and return
 	dcfsnz	WREG,F
-	goto    TFT_gf_info                     ; Update GF informations ; and return
+	goto    TFT_gf_info				; Update GF informations ; and return
 	dcfsnz	WREG,F
-        return  ; Compass updated seperately (Faster) in divemode;
+	return							; Compass updated separately (faster) in divemode;
 	dcfsnz	WREG,F
-	goto    TFT_dyn_gaslist                 ; Update the gaslist ; and return
+	nop								; ex goto TFT_dyn_gaslist
 	dcfsnz	WREG,F
-	goto    TFT_hud_voltages                ; Show HUD details	; and return
+	goto	TFT_CNS					; Show CNS values for end-of-dive, ex goto TFT_hud_voltages
 	dcfsnz	WREG,F
-	bra	customview_1sec_view9           ; Make sure to change value in "check_ppo2_display:" when moving around custom views
+	bra		customview_1sec_view9	; Make sure to change value in "check_ppo2_display:" when moving around custom views
 	dcfsnz	WREG,F
-	goto    TFT_sensor_check                ; Show ppO2 of O2 and Diluent ; and return
+	goto    TFT_sensor_check		; Show ppO2 of O2 and Diluent ; and return
 	dcfsnz	WREG,F
-	goto	TFT_ppo2_ead_end_cns            ; Show ppO2, END/EAD and CNS; and return
+	goto	TFT_ppo2_ead_end_cns	; Show ppO2, END/EAD and CNS; and return
 	dcfsnz	WREG,F
 	goto	TFT_pscr_info			; Show ppO2, drop and lung ratio; and return
+	dcfsnz	WREG,F
+	goto	TFT_gas_needs			; Show gas needs
 
 	; Menupos3=0, do nothing
 	return
 
-customview_1sec_view9:                      ; Ceiling
-    call    TFT_ceiling                     ; Show Ceiling
-    ; ppO2 value
-    call    TFT_display_ppo2_val
-    ; current GF value
-    extern  char_I_deco_model
-    TSTOSS  char_I_deco_model               ; 0 = ZH-L16, 1 = ZH-L16-GF
-    return                                  ; No GF info for non-GF modes
-    goto    TFT_gf_info                     ; Update GF informations ; and return
+customview_1sec_view9:              ; Ceiling
+    call    TFT_ceiling             ; Show Ceiling
+    call    TFT_display_pure_ppo2	; ppO2 value
+    extern  char_I_deco_model		; current GF value
+    TSTOSS  char_I_deco_model       ; 0 = ZH-L16, 1 = ZH-L16-GF
+    return                          ; No GF info for non-GF modes
+    goto    TFT_gf_info             ; Update GF informations ; and return
 
+    global  customview_alternative_second
+customview_alternative_second:    
+	movff	menupos3,WREG			; copy current view (1-...)
+	dcfsnz	WREG,F
+	bra		customview_alt_second_view1	; View 1
+	dcfsnz	WREG,F
+	nop 							; View 2
 
+	; Menupos3=0, do nothing
+	return
+	
+customview_alt_second_view1:
+    bsf	    FLAG_TFT_max_depth_alt
+    bsf	    FLAG_TFT_big_deco_alt
+    return
 
 ;=============================================================================
 ; Do every-minute tasks for the custom view area
@@ -76,7 +91,7 @@
 	global	customview_minute
 customview_minute:
     return
-;	movff	menupos3,WREG               ; copy
+;	movff	menupos3,WREG           ; copy
 ;	dcfsnz	WREG,F
 ;	bra		customview_1min_view1
 ;	dcfsnz	WREG,F
@@ -119,7 +134,7 @@
 surf_customview_toggle:
 	bcf		switch_right
 	incf	menupos3,F			            ; Number of customview to show
-	movlw	d'9'					; Max number of customsviews in surface mode
+	movlw	d'9'							; Max number of customsviews in surface mode
 	cpfsgt	menupos3			            ; Max reached?
 	bra		surf_customview_mask		    ; No, show
     movlw   .1
@@ -204,21 +219,21 @@
     call	TFT_splist_surfmode             ; Show Setpoint list
     bra		customview_toggle_exit          ; Done.
     
-surf_customview_init_view9:		    ; View 9: Sensor mV on the surface
+surf_customview_init_view9:		    		; View 9: Sensor mV on the surface
     btfsc   FLAG_ccr_mode 
     bra	    surf_customview_init_view9a	    ; we are in CCR mode 
     btfsc   FLAG_pscr_mode
     bra	    surf_customview_init_view9a	    ; we are in PSCR mode 
-    bra	    surf_customview_toggle	    ; we are not in any rebreather mode, so skip 
+    bra	    surf_customview_toggle	    	; we are not in any rebreather mode, so skip 
 surf_customview_init_view9a: 
-    movff   opt_ccr_mode,WREG		    ; =0: Fixed SP, =1: Sensor, =2: Auto SP 
-    sublw   .1				    ; opt_ccr_mode = 1 (Sensor)? 
-    bnz	    surf_customview_toggle	    ; sorry, no sensors, skip again 
+    movff   opt_ccr_mode,WREG		    	; =0: Fixed SP, =1: Sensor, =2: Auto SP 
+    sublw   .1				    			; opt_ccr_mode = 1 (Sensor)? 
+    bnz	    surf_customview_toggle	    	; sorry, no sensors, skip again 
     STRCPY_TEXT_PRINT tSensorMilliVolt	    ; Title of customview 
     call    TFT_standard_color 
     extern  TFT_sensor_mV
-    call    TFT_sensor_mV		    ; write sensor mV readings to screen 
-    bra	    customview_toggle_exit		; Done.
+    call    TFT_sensor_mV		    		; write sensor mV readings to screen 
+    bra	    customview_toggle_exit			; Done.
 
 surf_customview_init_view4:                 ; View4: Custom text
     call    TFT_standard_color
@@ -242,36 +257,49 @@
     bra		customview_toggle_exit          ; Done.
     
 surf_customview_init_view7:
-    btfsc   FLAG_gauge_mode		    ; View7: Deco settings
+    btfsc   FLAG_gauge_mode		    		; View7: Deco settings
     bra     surf_customview_toggle
     btfsc   FLAG_apnoe_mode
     bra     surf_customview_toggle
-    extern  deco_setup_dive
-    call    deco_setup_dive
+	
     call    TFT_surface_decosettings        ; Show all deco settings
     bra		customview_toggle_exit          ; Done.
 
 surf_customview_init_view8:                 ; View8: Last dive info
-    call	TFT_surface_lastdive		; Show last dive interval
+    call	TFT_surface_lastdive			; Show last dive interval
     bra		customview_toggle_exit          ; Done.
     
     
     global  menuview_toggle
-menuview_toggle:            ; Show Menu or the simulator tasks
+menuview_toggle:            				; Show Menu or the simulator tasks
+    btfss   alternative_divelayout			; In alternative layout mode?
+    bra	    menuview_toggle2				; No
+    ; Switch back to normal mode for any menu tasks
+    bcf	    alternative_divelayout			; clear flag
+    bsf	    FLAG_TFT_divemode_mask			; Set flag for mask
+    bsf	    FLAG_TFT_max_depth				; set flag
+    btfss   decostop_active             	; deco?
+    bsf	    FLAG_TFT_display_ndl_mask   	; NDL
+    btfsc   decostop_active             	; deco?
+    bsf	    FLAG_TFT_display_deko_mask		; Deco
+    call    TFT_ClearScreen					; Clear screen
+    rcall   customview_mask					; Re-Draw customview
+    
+menuview_toggle2:
     movlw   divemode_menuview_timeout
     movwf   timeout_counter3
     bsf     menuview
-	bcf		switch_left
-	incf	menupos2,F			            ; Number of options to show
-	movlw	d'9'							; Max number of options in divemode
-	cpfsgt	menupos2			            ; Max reached?
-	bra		menuview_mask		            ; No, show
+    bcf		switch_left
+    incf	menupos2,F			            ; Number of options to show
+    movlw	d'10'					        ; Max number of options in divemode
+    cpfsgt	menupos2			            ; Max reached?
+    bra		menuview_mask		            ; No, show
     global  menuview_toggle_reset
-menuview_toggle_reset:                      ; Timeout occured
-	clrf	menupos2
+menuview_toggle_reset:                      ; Timeout occurred
+    clrf    menupos2
     bcf     menuview
 menuview_mask:
-    WIN_BOX_BLACK   dm_simtext_row, dm_simtext_row+.23, dm_simtext_column, dm_simtext_column+.49 ; top, bottom, left, right
+    WIN_BOX_BLACK   dm_simtext_row, dm_simtext_row+.23, dm_simtext_column, dm_simtext_column+.45 ; top, bottom, left, right - old value was .49
     btfss   FLAG_gauge_mode
     bra     menuview_mask2
     ; Clear some more in gauge mode  -- "Reset Avg." text is longer than normal simtext
@@ -280,7 +308,7 @@
     call    TFT_draw_gassep_line
     movlw   color_yellow
     call	TFT_set_color
-    bsf     win_invert                  ; Set invert flag
+    bsf     win_invert                  	; Set invert flag
     WIN_SMALL   dm_simtext_column,dm_simtext_row
 	movff	menupos2,WREG                   ; Menupos2 holds number of menu option to show
 	dcfsnz	WREG,F
@@ -301,9 +329,12 @@
 	bra		menuview_view7                  ; "Sim:+5mins"  (Sim only)
 	dcfsnz	WREG,F
 	bra		menuview_view8                  ; "Heading"  (When compass is shown)
+	dcfsnz	WREG,F
+	bra		menuview_view9                  ; "Layout"  (Alternative Layout, aka Blind mode)
+	
 menuview_exit:
     call	TFT_standard_color
-    bcf     win_invert              ; Reset invert flag
+    bcf     win_invert              		; Reset invert flag
 	return                                  ; Menupos2 = 0, Show nothing
 
 
@@ -336,12 +367,12 @@
 menuview_view3:
     btfss  	simulatormode_active			; View only for simulator mode
 	bra		menuview_toggle 				; Call next option
-	STRCPY_PRINT "Sim:-1m"
+	STRCPY_PRINT "Sim-1m"					; CHANGED, now "-" for going down
     bra     menuview_exit                   ; Done.
 menuview_view4:
     btfss  	simulatormode_active			; View only for simulator mode
 	bra		menuview_toggle 				; Call next option
-	STRCPY_PRINT "Sim:+1m"
+	STRCPY_PRINT "Sim+1m"					; CHANGED, now "+" for going up
     bra     menuview_exit                   ; Done.
 menuview_view5:
 	btfss	FLAG_apnoe_mode					; In Apnoe mode?
@@ -363,7 +394,7 @@
 	bra		menuview_toggle 				; Yes, call next option
 	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
 	bra		menuview_toggle 				; Yes, call next option
-	STRCPY_PRINT	"Sim:+5'"
+	STRCPY_PRINT	"Sim+5'"
 	bra     menuview_exit                   ; Done.
 menuview_view8:
     movlw   .6
@@ -371,27 +402,81 @@
 	bra		menuview_toggle 				; No, call next option
 	STRCPY_TEXT_PRINT	tSetHeading         ; "Heading"
 	bra     menuview_exit                   ; Done.
+menuview_view9:
+	STRCPY_PRINT	"Layout"
+	bra     menuview_exit                   ; Done.
 
 
+	
+	
 ;=============================================================================
+	
+customview_toggle_alternative:
+	movlw	d'1'				    ; Max number of customviews in divemode, alternative layout
+	cpfsgt	menupos3			    ; Max reached?
+	bra 	customview_mask_alternative         ; No, show
+	movlw	.1
+	movwf	menupos3			    ; Reset to one, always one customview visible in alternative layout
+customview_mask_alternative:	
+    ; Clear custom view area in divemode
+	WIN_BOX_BLACK    dm_customview_row, .239, .0, .159	; top, bottom, left, right
+	call	TFT_standard_color
+	movff	menupos3,WREG           ; Menupos3 holds number of customview function
+	dcfsnz	WREG,F
+	bra	customview_alt_init_view1   ; View 1: Big deco/ndl and max. depth
+	dcfsnz	WREG,F
+	bra	customview_alt_init_view2   ; View 2: 
+
+	;bra	customview_alternative_toggle_exit  ; No view (menupos3=0)
+	
+customview_alt_toggle_exit:
+    call    TFT_standard_color
+    bcf	    toggle_customview		; Clear flag
+    return
+
+customview_alt_init_view1:  ; View 1: Big deco/ndl and max. depth
+    call    TFT_max_depth_alternative
+    call    TFT_big_deco_alt
+    bra	    customview_alt_toggle_exit
+
+customview_alt_init_view2:
+    ; /* Just for test...
+    call    TFT_mask_avr_stopwatch		; Show mask for average depth and stopwatch
+    call    TFT_update_avr_stopwatch	; Update average depth and stopwatch
+    ; ...Just for test */
+    
+    bra	    customview_alt_toggle_exit
+    
+	
 ; Show next customview (and delete this flag)
-customview_toggle_reset:					; Timeout occured
-	clrf	menupos3			            ; Reset to zero (Zero=no custom view)
+	global	customview_toggle
+customview_toggle:
+	bcf	switch_right
+	incf	menupos3,F			    ; Number of customview to show
+	
+	btfsc   alternative_divelayout		    ; In alternative layout mode?
+	bra		customview_toggle_alternative	; Yes, use the big ones instead
+	
+	movlw	d'13'				    ; Max number of customviews in divemode
+	cpfsgt	menupos3			    ; Max reached?
+	bra 	customview_mask		            ; No, show
+	clrf	menupos3			    ; Reset to zero (Zero=no custom view)
+
     global  customview_mask
 customview_mask:	
     ; Clear custom view area in divemode
-    WIN_BOX_BLACK    dm_customview_row, dm_customview_bot, dm_customview_column, dm_customview_rgt	; top, bottom, left, right
+    WIN_BOX_BLACK    dm_customview_row, dm_customview_bot-.2, dm_customview_column, dm_customview_rgt	; top, bottom, left, right
 	WIN_SMALL	dm_customview_column,dm_customview_row
 	call	TFT_standard_color
 	movff	menupos3,WREG                   ; Menupos3 holds number of customview function
 	dcfsnz	WREG,F
-	bra		customview_init_view1		; Update Sensor data
+	bra		customview_init_view1			; Update Sensor data
 	dcfsnz	WREG,F
-	bra		customview_init_view2		; average depth and stopwatch
+	bra		customview_init_view2			; average depth and stopwatch
 	dcfsnz	WREG,F
-	bra		customview_init_view3		; Decoplan
+	bra		customview_init_view3			; Decoplan
 	dcfsnz	WREG,F
-	bra		customview_init_view4		; Battery info, Tissues and clock
+	bra		customview_init_view4			; Battery info, Tissues and clock
 	dcfsnz	WREG,F
 	bra		customview_init_view5           ; GF informations
 	dcfsnz	WREG,F
@@ -399,7 +484,7 @@
 	dcfsnz	WREG,F
 	bra		customview_init_view7           ; Dynamic gaslist
 	dcfsnz	WREG,F
-	bra		customview_init_view8           ; HUD voltages
+	bra		customview_init_view8           ; HIJACKED for CNS (ex HUD voltages)
 	dcfsnz	WREG,F
 	bra		customview_init_view9           ; ppO2, Ceiling and current GF
 	dcfsnz	WREG,F
@@ -408,17 +493,20 @@
 	bra		customview_init_view11          ; ppO2, END/EAD and CNS
 	dcfsnz	WREG,F
 	bra		customview_init_view12          ; PSCR Info
-
+	; NEW	## bailout gas needs
+	dcfsnz	WREG,F
+	bra		customview_init_view13			; Gas needs
+	
 customview_init_nocustomview:
     call    I2C_sleep_accelerometer         ; Stop accelerometer
     call    I2C_sleep_compass               ; Stop compass
-	bra		customview_toggle_exit	
+    bra		customview_toggle_exit	
 
 customview_init_view1:
     btfsc	FLAG_apnoe_mode					; In Apnoe mode?
     bra		customview_toggle				; yes, Call next view...
     btfsc	FLAG_pscr_mode					; In PSCR mode?
-    bra		customview_init_view1a				; Yes
+    bra		customview_init_view1a			; Yes
     btfss	FLAG_ccr_mode					; In CC mode?
     bra		customview_toggle				; no, Call next view...
     
@@ -432,18 +520,15 @@
     btfsc   STATUS,Z
     bra		customview_toggle				; no, Call next view...
 
-    bsf     dive_hud1_displayed         ; Set display flag
-    bsf     dive_hud2_displayed         ; Set display flag
-    bsf     dive_hud3_displayed         ; Set display flag
-    call    TFT_hud_mask                ; Setup HUD mask
-    call    TFT_update_ppo2_sensors     ; Update Sensor data
+    call    TFT_hud_mask					; Setup HUD mask
+    call    TFT_update_ppo2_sensors			; Update Sensor data
     bra	    customview_toggle_exit	
 
 customview_init_view2:
 	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
 	bra		customview_toggle				; Yes, Call next view...
-    call    TFT_mask_avr_stopwatch     ; Show mask for average depth and stopwatch
-    call    TFT_update_avr_stopwatch   ; Update average depth and stopwatch
+    call    TFT_mask_avr_stopwatch			; Show mask for average depth and stopwatch
+    call    TFT_update_avr_stopwatch		; Update average depth and stopwatch
     bra		customview_toggle_exit
 
 customview_init_view3:
@@ -455,8 +540,8 @@
     bra		customview_toggle_exit
 
 customview_init_view4:
-    call    TFT_battinfo_tissues_clock_mask  ; Setup Mask
-    call    TFT_battinfo_tissues_clock       ; Show Battery info, Tissues and clock
+    call    TFT_battinfo_tissues_clock_mask	; Setup Mask
+    call    TFT_battinfo_tissues_clock		; Show Battery info, Tissues and clock
     bra		customview_toggle_exit
 
 customview_init_view5:
@@ -480,172 +565,172 @@
     call	TFT_dive_compass_mask           ; Show compass
     bra		customview_toggle_exit
 
+; MODIFIED - view disabled	## memory
 customview_init_view7:                      ; Dynamic gaslist (View 7)
-	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		customview_toggle				; Yes, Call next view...
-	btfsc	FLAG_ccr_mode					; In CC mode?
+;	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
 	bra		customview_toggle				; Yes, Call next view...
-    call    TFT_dyn_gaslist                 ; Show the dyn gaslist
-    bra		customview_toggle_exit
+;	btfsc	FLAG_ccr_mode					; In CC mode?
+;	bra		customview_toggle				; Yes, Call next view...
+;   call    TFT_dyn_gaslist                 ; Show the dyn gaslist
+;   bra		customview_toggle_exit
 
-customview_init_view8:                      ; Sensor millivolts
+customview_init_view8:                      ; HIJACKED for CNS outputs (ex Sensor millivolts)
 	btfsc	FLAG_gauge_mode					; In Gauge mode?
 	bra		customview_toggle				; Yes, Call next view...
 	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
 	bra		customview_toggle				; yes, Call next view...
-        btfsc	FLAG_pscr_mode					; In PSCR mode?
-	bra		customview_init_view8a				; Yes
-	btfss	FLAG_ccr_mode					; In CC mode?
-	bra		customview_toggle				; no, Call next view...
-customview_init_view8a:    
-    movf    hardware_flag,W
-    sublw   0x13        ; +
-    btfsc   STATUS,Z
-    bra		customview_toggle				; no, Call next view...
+	; REPLACE	## CNS at end-of-dive
+	; btfsc	FLAG_pscr_mode					; In PSCR mode?
+	; bra		customview_init_view8a		; Yes
+	; btfss	FLAG_ccr_mode					; In CC mode?
+	; bra		customview_toggle			; no, Call next view...
+; customview_init_view8a:    
+    ; movf    hardware_flag,W
+    ; sublw   0x13        ; +
+    ; btfsc   STATUS,Z
+    ; bra	  customview_toggle				; no, Call next view...
+    ; movff   opt_ccr_mode,WREG             ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    ; sublw   .1                            ; opt_ccr_mode = 1 (Sensor)?
+    ; bnz     customview_toggle				; no, Call next view...
+    ; call    TFT_hud_mask                  ; Setup HUD mask
+    ; call    TFT_hud_voltages              ; Show HUD details
+	; BY
+	call	TFT_CNS_mask
+	call	TFT_CNS
 
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     customview_toggle				; no, Call next view...
-    call    TFT_hud_mask                    ; Setup HUD mask
-    call    TFT_hud_voltages                ; Show HUD details
-    goto    customview_toggle_exit
+	goto    customview_toggle_exit
 
 customview_init_view9:                      ; ppO2, Ceiling and current GF
 	btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-	bra	customview_toggle				; yes, Call next view...
+	bra	customview_toggle					; yes, Call next view...
 	btfsc	FLAG_gauge_mode					; In Gauge mode?
-	bra	customview_toggle				; Yes, Call next view...
+	bra	customview_toggle					; Yes, Call next view...
     call    TFT_ceiling_mask                ; Setup mask
     call    TFT_ceiling                     ; Show Ceiling
 
     ; ppO2 value
     call    TFT_mask_ppo2
-    call    TFT_display_ppo2_val
+    call    TFT_display_pure_ppo2
 
     ; current GF value
     extern  char_I_deco_model
     TSTOSS  char_I_deco_model               ; 0 = ZH-L16, 1 = ZH-L16-GF
-    bra	    customview_toggle_exit	    ; No GF info for non-GF modes
+    bra	    customview_toggle_exit	   		; No GF info for non-GF modes
     ; current GF value
     call    TFT_gf_mask_cGF                 ; Setup Mask - current GF only
     call    TFT_gf_info                     ; Show GF informations
     bra	    customview_toggle_exit
 
-
-;=============================================================================
-; Show next customview (and delete this flag)
-	global	customview_toggle
-customview_toggle:
-	bcf	switch_right
-	incf	menupos3,F			            ; Number of customview to show
-	movlw	d'12'							; Max number of customsviews in divemode
-	cpfsgt	menupos3			            ; Max reached?
-	goto	customview_mask		            ; No, show
-	goto	customview_toggle_reset
-    
-    
 customview_init_view10:                     ; Sensor check
-    btfsc   FLAG_apnoe_mode		    ; In Apnoe mode?
-    bra	    customview_toggle		    ; yes, Call next view...
-    btfsc   FLAG_gauge_mode		    ; In Gauge mode?
-    bra	    customview_toggle		    ; Yes, Call next view...
-    btfss   FLAG_ccr_mode		    ; In CC mode?
-    bra	    customview_toggle		    ; no, Call next view...
+    btfsc   FLAG_apnoe_mode		    		; In Apnoe mode?
+    bra	    customview_toggle		    	; yes, Call next view...
+    btfsc   FLAG_gauge_mode		    		; In Gauge mode?
+    bra	    customview_toggle		    	; Yes, Call next view...
+    btfss   FLAG_ccr_mode		    		; In CC mode?
+    bra	    customview_toggle		   		; no, Call next view...
 
     call    TFT_sensor_check_mask           ; Show ppO2 of O2 and Diluent mask
     call    TFT_sensor_check                ; Show ppO2 of O2 and Diluent
     bra		customview_toggle_exit
 
 customview_init_view11:                     ; ppO2, END/EAD and CNS
-    btfsc   FLAG_apnoe_mode		    ; In Apnoe mode?
-    bra	    customview_toggle		    ; yes, Call next view...
-    btfsc   FLAG_gauge_mode		    ; In Gauge mode?
-    bra	    customview_toggle		    ; Yes, Call next view...
+    btfsc   FLAG_apnoe_mode		    		; In Apnoe mode?
+    bra	    customview_toggle		    	; yes, Call next view...
+    btfsc   FLAG_gauge_mode		    		; In Gauge mode?
+    bra	    customview_toggle		    	; Yes, Call next view...
 
     call    TFT_ppo2_ead_end_cns_mask       ; Show ppO2, END/EAD and CNS mask
     call    TFT_ppo2_ead_end_cns            ; Show ppO2, END/EAD and CNS
     goto    customview_toggle_exit
 
-customview_init_view12:		            ; PSCR Info    
-    btfss   FLAG_pscr_mode		    ; In PSCR mode?
-    bra	    customview_toggle		    ; No, Call next view...
+customview_init_view12:		            	; PSCR Info    
+    btfss   FLAG_pscr_mode		    		; In PSCR mode?
+    bra	    customview_toggle		    	; No, Call next view...
     
-    call    TFT_pscr_info_mask		    ; Show ppO2, drop and lung ratio
-    call    TFT_pscr_info		    ; Show ppO2, drop and lung ratio
+    call    TFT_pscr_info_mask		   		; Show ppO2, drop and lung ratio
+    call    TFT_pscr_info		    		; Show ppO2, drop and lung ratio
     bra		customview_toggle_exit
-    
+
+; NEW	## bailout gas needs
+customview_init_view13:						; Gas Needs
+    TSTOSS  opt_calc_asc_gasvolume			; check if gas volume calculations is switched on
+    bra	    customview_toggle				; NO  - Call next view...
+    call    TFT_gas_needs_mask				; YES - Show the mask for gas needs
+    call    TFT_gas_needs					; 		Show the gas needs
+    bra	    customview_toggle_exit
+	
 customview_toggle_exit:
-	btfsc	divemode		    ; In Dive Mode?
-	call    TFT_temp_divemode	    ; Yes, redraw temperature
-	call	TFT_standard_color
-	bcf		toggle_customview			; Clear flag
-	return
+    btfsc   divemode				; In Dive Mode?
+    bsf	    FLAG_TFT_temp_divemode		; Set flag to redraw temp
+    call    TFT_standard_color
+    bcf	toggle_customview			; Clear flag
+    return
 
 	global 	customview_show_change_depth
-customview_show_change_depth:       ; Put " lom" or " loft" into Postinc2
+customview_show_change_depth:       		; Put " lom" or " loft" into Postinc2
     PUTC    " "
-    TSTOSS  opt_units   			; 0=m, 1=ft
+    TSTOSS  opt_units   					; 0=m, 1=ft
 	bra		customview_show_mix_metric
     movf    lo,W
-    mullw   .100                    ; convert meters to mbar
+    mullw   .100                    		; convert meters to mbar
     movff   PRODL,lo
     movff   PRODH,hi
-    call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
+    call	convert_mbar_to_feet    		; convert value in lo:hi from mbar to feet
     bsf     leftbind
-    output_16						; Change depth in lo:hi
+    output_16								; Change depth in lo:hi
     bcf     leftbind
     STRCAT_TEXT		tFeets
     return
 customview_show_mix_metric:
-    output_99						; Change depth in lo
+    output_99								; Change depth in lo
     STRCAT_TEXT		tMeters
     return
 
 
 	global 	customview_show_mix
-customview_show_mix:                ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-    tstfsz  hi                      ; He=0?
-    bra     customview_show_mix5    ; No, Show a TX
+customview_show_mix:                		; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+    tstfsz  hi                      		; He=0?
+    bra     customview_show_mix5    		; No, Show a TX
 	movlw	.21
 	cpfseq	lo								; Air?
-	bra		customview_show_mix2	; No
+	bra		customview_show_mix2			; No
 	STRCAT_TEXT		tSelectAir				; Yes, show "Air"
     bra     customview_show_mix4b
 customview_show_mix2:
 	movlw	.100
 	cpfseq	lo								; O2?
-	bra		customview_show_mix3	; No
+	bra		customview_show_mix3			; No
 	STRCAT_TEXT		tSelectO2				; Yes, show "O2"
     bra     customview_show_mix4b
 
 customview_show_mix3:
 	movlw	.21
 	cpfslt	lo								; < Nx21?
-	bra		customview_show_mix4    ; No
-	STRCAT_TEXT		tGasErr        	; Yes, show "Err"
-	output_99						; O2 ratio is still in "lo"
+	bra		customview_show_mix4    		; No
+	STRCAT_TEXT		tGasErr        			; Yes, show "Err"
+	output_99								; O2 ratio is still in "lo"
     bra     customview_show_mix4c
 
 customview_show_mix4:
-	STRCAT_TEXT		tSelectNx		; Show "Nx"
-	output_99						; O2 ratio is still in "lo"
+	STRCAT_TEXT		tSelectNx				; Show "Nx"
+	output_99								; O2 ratio is still in "lo"
 customview_show_mix4b:
     STRCAT  " "
 customview_show_mix4c:
-    btfsc   divemode                ; In divemode
-	return                          ; Yes
+    btfsc   divemode                		; In divemode
+	return                          		; Yes
     STRCAT  "  "
     return
 
 customview_show_mix5:
     btfsc   divemode
     bra     customview_show_mix6
-    STRCAT_TEXT		tSelectTx   	; Show "Tx"
+    STRCAT_TEXT		tSelectTx   			; Show "Tx"
 customview_show_mix6:
-    output_99						; O2 ratio is still in "lo"
+    output_99								; O2 ratio is still in "lo"
     PUTC    "/"
     movff   hi,lo
-    output_99						; He ratio
+    output_99								; He ratio
     return
 
 	END
\ No newline at end of file
--- a/src/customview.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/customview.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -18,6 +18,8 @@
     extern  menuview_toggle
     extern  menuview_toggle_reset
     extern  customview_mask
+    
+    extern  customview_alternative_second
 
     ; Surface mode
     extern  surf_customview_toggle
--- a/src/divemenu_tree.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/divemenu_tree.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemenu_tree.asm
+;   File divemenu_tree.asm							REFACTORED VERSION V2.96a
 ;
 ;   OSTC dive mode menu
 ;
@@ -17,302 +17,333 @@
 #include    "strings.inc"
 #include    "calibrate.inc"
 
+
 divegui     CODE
 ;=============================================================================
 ; Main Menu
-        global  do_main_divemenu
+	global  do_main_divemenu
 do_main_divemenu:
-		call    menu_processor_reset    ; restart from first icon.
+	call	menu_processor_reset		; restart from first icon.
 
 do_continue_main_divemenu:
-        call    menu_processor_pop      ; drop exit line.
-        call    menu_processor_pop      ; drop exit line.
+	call	menu_processor_pop			; drop exit line.
+	call	menu_processor_pop			; drop exit line.
 
-        btfsc   FLAG_ccr_mode
-        bra     main_divemenu_ccr       ; CCR Menu
-        
-	btfsc   FLAG_pscr_mode
-        bra     main_divemenu_ccr       ; Proceeds to PSCR menu then...
+	btfsc	FLAG_ccr_mode
+	bra		main_divemenu_loop			; goto CCR / pSCR Menu menu
+	btfsc	FLAG_pscr_mode
+	bra		main_divemenu_loop			; goto CCR / pSCR Menu menu
+
+main_divemenu_OC:	
+	bcf		ccr_diluent_setup
+	bcf		is_bailout_menu
+	movlw	.1
+	movwf	menupos						; Set to first option in divemode menu
 	
-        bcf     ccr_diluent_setup       ; For OC gases
-        bcf     is_bailout_menu
-        movlw   .1
-        movwf   menupos                 ; Set to first option in divemode menu
-    MENU_BEGIN  tMainMenu, .5
-        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
-        MENU_CALL   tDivemenu_ResetAvg, do_divemode_resetavg
-        MENU_CALL   tDivemenu_ToggleGF, do_divemode_togglegf
-        MENU_CALL   tDivemenu_Marker,   do_set_marker
-        MENU_CALL   tExit,              do_exit_divemode_menu
-    MENU_END
+	MENU_BEGIN  tMainMenu, .5
+		MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
+		MENU_CALL   tDivemenu_ResetAvg, do_reset_average
+		MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
+		MENU_CALL   tDivemenu_Marker,   do_set_marker
+		MENU_CALL   tExit,              do_exit_divemode_menu
+	MENU_END
 
-do_set_marker:
-	movlw	d'6'					; Type of Alarm (Manual Marker)
-	movwf	AlarmType				; Copy to Alarm Register
-	bsf		event_occured			; Set Event Flag
-    bra     do_exit_divemode_menu   ; And exit
-
-main_divemenu_ccr:
-    bsf     ccr_diluent_setup      ; For diluents
+main_divemenu_loop:
+    bsf     ccr_diluent_setup			; default to operations on diluents
+	bcf		is_bailout_menu				; default to none-bailout menu
     movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
+    movwf   menupos						; Set to first option in divemode menu
     
     btfsc   FLAG_pscr_mode
-    bra     main_divemenu_pscr      ; PSCR Menu
+    bra     main_divemenu_pscr			; PSCR Menu
     
     MENU_BEGIN  tMainMenu, .6
         MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
         MENU_CALL   tDivemenu_Setpoint, do_divemode_splist
         MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
-        MENU_CALL   tDivemenu_ResetAvg, do_divemode_resetavg
-        MENU_CALL   tDivemenu_ToggleGF, do_divemode_togglegf
+        MENU_CALL   tDivemenu_ResetAvg, do_reset_average
+        MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
         MENU_CALL   tExit,              do_exit_divemode_menu
     MENU_END
     
 main_divemenu_pscr:
+    movf    hardware_flag,W
+    sublw   0x11						; 2 with BLE
+    btfsc   STATUS,Z
+    bra     main_divemenu_pscr_no_sensors
+	movf    hardware_flag,W
+    sublw   0x13						; +
+    btfsc   STATUS,Z
+    bra		main_divemenu_pscr_no_sensors
+
     MENU_BEGIN  tMainMenu, .6
         MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
-        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist_pscr	; quit bailout and always use diluents here
-        MENU_CALL   tDivemenu_ResetAvg, do_divemode_resetavg
-        MENU_CALL   tDivemenu_ToggleGF, do_divemode_togglegf
-	MENU_CALL   tDivemenu_Marker,   do_set_marker
+		MENU_CALL   tCCRSensor,			do_divemode_setpoint_pscr
+        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
+        MENU_CALL   tDivemenu_ResetAvg, do_reset_average
+        MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
+        MENU_CALL   tExit,              do_exit_divemode_menu
+    MENU_END
+
+main_divemenu_pscr_no_sensors:
+    MENU_BEGIN  tMainMenu, .6
+        MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
+        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
+        MENU_CALL   tDivemenu_ResetAvg, do_reset_average
+        MENU_CALL   tDivemenu_ToggleGF, do_toggle_gf
+		MENU_CALL   tDivemenu_Marker,   do_set_marker
         MENU_CALL   tExit,              do_exit_divemode_menu
     MENU_END
-    
-do_togglegf:
-    TSTOSS  opt_enable_aGF          ; =1: aGF can be selected underwater
-    bra     do_exit_divemode_menu   ; exit
-    bsf     toggle_gf               ; Set flag...
-    bra     do_exit_divemode_menu   ; ...and exit
+  
 
-do_switch_to_sensor:
-    movlw   .1                      ; Switch to Sensor
-    movff   WREG,opt_ccr_mode       ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    bsf     voting_logic_sensor1
-    bsf     voting_logic_sensor2
-    bsf     voting_logic_sensor3
-    extern  divemode_setup_sensor_values
-    call    divemode_setup_sensor_values    ; Setup sensor values
-    call    check_sensors                   ; Check O2 sensor thresholds for fallback
-    bra     do_switch_sp2
-
-do_divemode_resetavg:
-    bsf     reset_average_depth     ; Set Flag
-    bra     do_exit_divemode_menu   ; And exit
+do_toggle_gf:
+	movff	char_I_deco_model,WREG  	; 0 = ZH-L16, 1 = ZH-L16-GF
+	decfsz	WREG,W		    			; Toggle GF only in GF modes - in GF mode?
+	bra		do_continue_main_divemenu   ; No, do nothing and return
+	TSTOSS  opt_enable_aGF          	; =1: aGF can be selected underwater
+    bra     do_continue_main_divemenu   ; No, do nothing and return
+	movlw	.4						    ; Set customview to 5 (GF informations)
+	movwf	menupos3					; Customview to come-1
+	bsf		toggle_customview			; Set flag, the customview will be toggled very soon now...
+	movlw	.1
+	movwf	menupos						; Set to first option in divemode menu
+	
+    MENU_BEGIN  tDivemenu_ToggleGF, .2
+        MENU_CALL       tDivemenu_ToggleGF,     do_togglegf
+        MENU_CALL       tExit,                  do_continue_main_divemenu
+    MENU_END
 
+do_togglegf:
+	;TSTOSS	opt_enable_aGF				; =1: aGF can be selected underwater  ## check is now done before entering menu
+	;bra	do_exit_divemode_menu		; continue with exiting menu code
+	bsf		toggle_gf					; Set flag...
+	bra		do_exit_divemode_menu		; continue with exiting menu code
+  
+  
+do_set_marker:
+	movlw	d'6'						; Type of Alarm (Manual Marker)
+	movwf	AlarmType					; Copy to Alarm Register
+	bsf		event_occured				; Set Event Flag
+    bra     do_exit_divemode_menu		; And exit
 
-do_switch_gas6:
-    movlw   .6
-    movwf   active_gas              ; Gas6 selected
-    movff   WREG,char_I_current_gas ; for p2_deco.c
-    bra     do_switch_gasX
-    extern  diveloop_loop4
-    extern  timeout_divemode_menu2
-do_switch_gas:
-    bsf     divemode_gaschange      ; Set flag
-do_switch_gasX:
-    btfsc   is_bailout_menu         ; Bailout confirmed?
-    bsf     is_bailout              ; =1: Bailout
-    call    customview_mask         ; update customview mask to (eventually) rewrite ppO2(Dil): to ppO2:
-do_exit_divemode_menu:
-    call    timeout_divemode_menu2
-    clrf    STKPTR
-    goto    diveloop_loop4
+	
+do_reset_average:
+    bsf     reset_average_depth			; Set Flag
+    bra     do_exit_divemode_menu   	; continue with exiting menu code
 
-do_switch_sp:
-    decf    menupos,W               ; 1-5 -> 0-4
+	
+do_switch_sensor:						; entry point when coming from switch to sensor
+    movlw   .1                      	; Switch to Sensor
+    movff   WREG,opt_ccr_mode       	; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor,  =2: Auto SP
+	bra     do_switch_sp_com			; continue with common part
+	
+do_switch_sp:							; entry point when coming from manual setpoint selection (CCR)
+    decf    menupos,W         			; 1-5 -> 0-4
     lfsr    FSR1,char_I_setpoint_cbar
-    movff   PLUSW1,char_I_const_ppO2; Setup fixed Setpoint
+    movff   PLUSW1,char_I_const_ppO2	; setup fixed setpoint
     movff   char_I_const_ppO2,WREG
-    call    transmit_setpoint           ; Transmit current setpoint from WREG (in cbar) to external electronics
-    bsf     setpoint_changed        ; Set flag (For profile)
-    bsf		event_occured			; Set global event byte
+    call    transmit_setpoint			; tansmit current setpoint from WREG (in cbar) to external electronics
+	bcf		setpoint_fallback			; clear fallback condition (stops fallback warning)
+	clrf	WREG						; Switch to fixed SP
+	movff	WREG,opt_ccr_mode			; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP
+	bra		do_switch_sp_com
 
-    ; Reconfigure last diluent
-    extern  setup_dil_registers
-    bcf     is_bailout              ; =1: Bailout
-    movff   active_diluent,WREG     ; As a backup when switching back from Bailout to CCR
-    decf    WREG                    ; 0-4
-    call    setup_dil_registers     ; With WREG=Gas 0-4
+do_switch_sp_calc:						; entry point when coming from switch to calculated ppO2 (pSCR)
+	bcf		setpoint_fallback			; clear fallback condition (stops fallback warning)
+    clrf    WREG                    	; Switch to fixed SP
+    movff   WREG,opt_ccr_mode       	; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor,  =2: Auto SP
+	movff	WREG,char_I_const_ppO2		; set setpoint to 0, this forces deco engine to take the computed ppO2
 
-    clrf    WREG                    ; Switch to fixed SP
-    movff   WREG,opt_ccr_mode       ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    clrf    WREG
-    movff   WREG,char_O_deco_status ; Restart decoplan computation
+do_switch_sp_com:						; merge point to common part
+    bsf		event_occured				; set global event byte
+    bsf     setpoint_changed			; set flag (for profile)
 
-do_switch_sp2:
     ; Clear some flags in case we were in bailout before...
-    bcf     is_bailout              ; =1: Bailout
-    bcf     is_bailout_menu         ;
-    bcf	    better_gas_available    ;=1: A better gas is available and a gas change is advised in divemode
-    bcf     blinking_better_gas     ; Clear blinking flag
-    call    customview_mask         ; update customview mask to (eventually) rewrite ppO2(Dil): to ppO2:
-    bra     do_exit_divemode_menu   ; And exit
+    bcf     is_bailout              	; end bailout mode
+    ;bcf     is_bailout_menu         	; not needed
+    bcf	    better_gas_available    	; =1: A better gas is available and a gas change is advised in divemode
+    bcf     blinking_better_gas     	; clear blinking flag
+    call    customview_mask         	; update customview mask to (eventually) rewrite ppO2(Dil): to ppO2:
+	
+	movff   active_diluent,menupos		; reconfigure last diluent (menupos is transfer register for selected gas/diluent towards gas_switched_common:)
+	bsf     divemode_gaschange			; initiate reconfiguration to loop mode on last diluent
+	
+    bra     do_exit_divemode_menu   	; continue with exiting menu code
 
-do_divemode_gaslist_pscr:
-    bsf     ccr_diluent_setup       ; For Diluents
-    bcf     is_bailout              ; =1: Bailout
-    bcf     is_bailout_menu         ;
-    bra	    do_divemode_gaslist_pscr2
-    
-do_divemode_gaslist_bail:
-    bcf     ccr_diluent_setup       ; For OC gases
-    bsf     is_bailout_menu         ; =1: Bailout
-do_divemode_gaslist:
-    btfsc   is_bailout              ; In Bailout case?
-    bcf     ccr_diluent_setup       ; Yes, use OC gases
-do_divemode_gaslist_pscr2:    
-    bsf     short_gas_decriptions
-    movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
+   
+do_divemode_gaslist_bail:				; entry point from CCR/pSCR to bailout to OC gases
+	bcf		ccr_diluent_setup       	; switch to OC gases
+	bsf		is_bailout_menu         	; flag it is a bailout action
+do_divemode_gaslist:					; entry point for switching: OC -> gases, loop -> diluents
+	btfsc	is_bailout              	; in bailout mode?
+	bcf		ccr_diluent_setup       	; yes - for safety reasons, redirect to OC (bailout) gases
+do_divemode_gaslist_com:    
+	bsf		short_gas_decriptions
+	movlw	.1
+	movwf	menupos						; Set to first option in divemode menu
     MENU_BEGIN  tGaslist, .6
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
-        MENU_CALL       tMore,                  do_divemode_gaslist_more0
+        MENU_CALL       tMore,                  do_divemode_gaslist_more
     MENU_END
 
-do_divemode_gaslist_more0:
-    movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
 do_divemode_gaslist_more:
+	movlw	.1
+	movwf	menupos							; Set to first option in divemode menu
+	
+	movff	char_I_O2_ratio,gas6_O2_ratio	; initialize gas6 with currently breathed gas - O2 ratio
+	movff	char_I_He_ratio,gas6_He_ratio	; initialize gas6 with currently breathed gas - He ratio
+	
+do_divemode_gaslist_more_loop:
     MENU_BEGIN  tGaslist, .6
         MENU_CALL       tO2Plus,                do_dive_pO2
         MENU_CALL       tO2Minus,               do_dive_mO2
         MENU_CALL       tHePlus,                do_dive_pHe
         MENU_CALL       tHeMinus,               do_dive_mHe
-        MENU_DYNAMIC    gaslist_strcat_gasx,    do_switch_gas6
+        MENU_DYNAMIC    gaslist_strcat_gas6,    do_switch_gas6
         MENU_CALL       tDivemenu_LostGas,      do_lost_gas
     MENU_END
 
 do_lost_gas:
-    movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
-do_lost_gas0:
-    bsf     short_gas_decriptions
+	movlw	.1
+	movwf	menupos							; Set to first option in divemode menu
+do_lost_gas_loop:
+	bsf		short_gas_decriptions
     MENU_BEGIN  tDivemenu_LostGas, .6
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
         MENU_DYNAMIC    gaslist_strcat_gas_mod, do_toggle_active    ; Toggle the gas (in)active
-        MENU_CALL   tExit,              do_exit_divemode_menu
+        MENU_CALL   	tExit,              	do_exit_divemode_menu
     MENU_END
 
+
+do_switch_gas6:
+	movlw   .6							; gas 6
+	movwf	menupos						; transfer register for selected gas towards gas_switched_common: 
+	bsf		gas6_changed            	; set flag for profile recording
+	;bra	do_switch_gas				; continue with common gas-switched code
+
+do_switch_gas:
+	bsf		divemode_gaschange			; Set flag, will also trigger restart of deco_engine
+	btfsc	is_bailout_menu				; Bailout confirmed?
+	bsf		is_bailout					; begin bailout mode
+	call	customview_mask				; update custom view mask to (eventually) rewrite ppO2(Dil): to ppO2:
+	;bra	do_exit_divemode_menu		; continue with exiting menu code
+	
+do_exit_divemode_menu:
+	extern  timeout_divemode_menu2
+	call	timeout_divemode_menu2
+	clrf	STKPTR
+	extern  diveloop_loop4
+	goto	diveloop_loop4
+
+
 do_toggle_active:
+	extern	restart_deco_engine_wo_ceiling
+	call	restart_deco_engine_wo_ceiling
     movlw   .5
-    btfsc   ccr_diluent_setup       ; use OC gases
-    addwf   menupos,F		    ; -> 6-10 for Diluents
-    
-    decf    menupos,W               ; 1-5 -> 0-4
+    btfsc   ccr_diluent_setup			; diluents?
+    addwf   menupos,F					; yes 1-5 -> 6-10
+    decf    menupos,W					; -> 0-4 for gases / 5-9 for diluents
     lfsr    FSR1,opt_gas_type+0
     movff   PLUSW1,lo
-    tstfsz  lo                      ; Already disabled?
-    bra     do_toggle_active2       ; No, disable now!
-
-    ; Copy opt_gas_type_backup+W back to opt_gas_type+W
-    decf    menupos,W               ; 1-5 -> 0-4
-    lfsr    FSR1,opt_gas_type_backup+0
+    tstfsz  lo							; Already disabled?
+    bra     do_toggle_active2			; No, disable now!
+    lfsr    FSR1,opt_gas_type_backup+0	; copy opt_gas_type_backup+W back to opt_gas_type+W
     movff   PLUSW1,lo
-    decf    menupos,W               ; 1-5 -> 0-4
     lfsr    FSR1,opt_gas_type+0
     movff   lo,PLUSW1
-
-    ; Copy opt_OC_bail_gas_change_backup+W back to opt_OC_bail_gas_change+W
-    decf    menupos,W               ; 1-5 -> 0-4
-    lfsr    FSR1,opt_OC_bail_gas_change_backup+0
+    lfsr    FSR1,opt_OC_bail_gas_change_backup+0 ; copy opt_OC_bail_gas_change_backup+W back to opt_OC_bail_gas_change+W
     movff   PLUSW1,lo
-    decf    menupos,W               ; 1-5 -> 0-4
-    lfsr    FSR1,opt_OC_bail_gas_change+0
+	lfsr    FSR1,opt_OC_bail_gas_change+0
     movff   lo,PLUSW1
-
+	bra		do_toggle_active3
+do_toggle_active2:
+    clrf    PLUSW1						; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    lfsr    FSR1,opt_OC_bail_gas_change+0
+    clrf    PLUSW1						; also delete change depth here to have the menu updated immediately
+do_toggle_active3:
     movlw   .5
-    btfsc   ccr_diluent_setup       ; use OC gases?
-    subwf   menupos,F		    ; Back to 1-5 
+    btfsc   ccr_diluent_setup			; use OC gases?
+    subwf   menupos,F					; Back to 1-5 
+    bra     do_lost_gas_loop			; Return to list and show updated result
 
-    bra     do_lost_gas0            ; Return to list and show updated result
-
-do_toggle_active2:
-    clrf    PLUSW1                  ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-
-    ; Also delete change depth here to have the menu updated immediately
-    lfsr    FSR1,opt_OC_bail_gas_change+0
-    clrf    PLUSW1
-
-    movlw   .5
-    btfsc   ccr_diluent_setup       ; use OC gases?
-    subwf   menupos,F		    ; Back to 1-5 
-    
-    bra     do_lost_gas0            ; Return to list and show updated result
 
 do_dive_pO2:
-        banksel char_I_O2_ratio
-        incf    char_I_O2_ratio,F            ; O2++
-        movf    char_I_He_ratio,W
-        addwf   char_I_O2_ratio,W
-        movwf   temp_bankx400
-        movlw   .101
-        cpfslt  temp_bankx400                ; O2+He<101?
-        decf    char_I_O2_ratio,F            ; O2-- (Unchanged)
-;        bra     do_divemode_gaslist_more_common
-do_divemode_gaslist_more_common:
-    	movf    char_I_O2_ratio,W       ; Add O2...
-        addwf   char_I_He_ratio,W       ; ...and He...
-    	sublw   .100                    ; ...subtract both from 100
-    	movwf   char_I_N2_ratio         ; -> N2!
-        banksel common
-        bsf     gas6_changed                ; Set flag
-        bra     do_divemode_gaslist_more
-
+	banksel	gas6_O2_ratio
+	incf	gas6_O2_ratio,F				; O2++
+	movf	gas6_He_ratio,W
+	addwf	gas6_O2_ratio,W
+	movwf	gas6_temp
+	movlw	.101
+	cpfslt	gas6_temp					; O2+He<101?
+	decf	gas6_O2_ratio,F				; O2-- (Unchanged)
+	banksel common
+	bra     do_divemode_gaslist_more_loop
+				
 do_dive_mO2:
-        banksel char_I_O2_ratio
-        decf    char_I_O2_ratio,F           ; O2--
-        movlw   gaslist_min_o2
-        cpfslt  char_I_O2_ratio
-        bra     do_divemode_gaslist_more_common
-        movlw   gaslist_min_o2
-        movwf   char_I_O2_ratio
-        bra     do_divemode_gaslist_more_common
-
+	banksel gas6_O2_ratio
+	decf    gas6_O2_ratio,F				; O2--
+	movlw   gaslist_min_o2
+	cpfslt  gas6_O2_ratio
+	bra     do_dive_mO2_done
+	movlw   gaslist_min_o2
+	movwf   gas6_O2_ratio
+do_dive_mO2_done:
+	banksel common
+	bra     do_divemode_gaslist_more_loop
 
 do_dive_pHe:
-        banksel char_I_O2_ratio
-        incf    char_I_He_ratio,F            ; He++
-        movf    char_I_He_ratio,W
-        addwf   char_I_O2_ratio,W
-        movwf   lo
-        movlw   .101
-        cpfslt  lo                           ; O2+He<101?
-        decf    char_I_He_ratio,F            ; Yes, He-- (Unchanged)
-        bra     do_divemode_gaslist_more_common
+	banksel gas6_O2_ratio
+	incf    gas6_He_ratio,F				; He++
+	movf    gas6_He_ratio,W
+	addwf   gas6_O2_ratio,W
+	movwf   lo
+	movlw   .101
+	cpfslt  lo							; O2+He<101?
+	decf    gas6_He_ratio,F				; Yes, He-- (Unchanged)
+	banksel common
+	bra     do_divemode_gaslist_more_loop
 
 do_dive_mHe:
-        banksel char_I_O2_ratio
-        decf    char_I_He_ratio,F           ; He--
-        bnn     do_divemode_gaslist_more_common
-        clrf    char_I_He_ratio
-        bra     do_divemode_gaslist_more_common
+	banksel gas6_O2_ratio
+	decf    gas6_He_ratio,F				; He--
+	bnn     do_dive_mHe_done
+	clrf    gas6_He_ratio
+do_dive_mHe_done:
+	banksel common
+	bra     do_divemode_gaslist_more_loop
 
 do_divemode_splist:
-    bsf     short_gas_decriptions
-    movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
-    movf    hardware_flag,W
-    sublw   0x11        ; 2 with BLE
-    btfsc   STATUS,Z
-    bra     do_divemode_splist2
+	bsf		short_gas_decriptions
+	movlw	.1
+	movwf	menupos							; Set to first option in divemode menu
+	
+	movf	hardware_flag,W
+	sublw	0x11							; 2 with BLE
+	btfsc	STATUS,Z
+	bra		do_divemode_splist_no_sensor	; no sensor
+	movf	hardware_flag,W
+	sublw	0x13							; +
+	btfsc	STATUS,Z
+	bra		do_divemode_splist_no_sensor	; no sensor
+
+do_divemode_splist_with_sensor:
     MENU_BEGIN  tGaslist, .6
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
-        MENU_CALL   tCCRSensor,         do_divemode_sensor
+        MENU_CALL   	tCCRSensor,              do_divemode_sensor
   MENU_END
 
-do_divemode_splist2:
+do_divemode_splist_no_sensor:
     MENU_BEGIN  tGaslist, .5
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
@@ -323,31 +354,45 @@
 
 
 do_divemode_sensor:
-    ; Set customview to 1 (HUD Data)
-    clrf    menupos3                    ; customview to come-1
-    bsf     toggle_customview			; Set flag, the customview will be toggled very soon now...
+	clrf	menupos3					; show customview 1 (HUD Data)
+	bsf		toggle_customview
     movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
-    MENU_BEGIN  tGaslist, .2
-        MENU_CALL       tDivemenu_UseSensor,    do_switch_to_sensor
+    movwf   menupos                 	; Set to 1st option: use sensors
+do_divemode_sensor_loop:
+    MENU_BEGIN  tGaslist, .6
+        MENU_CALL       tDivemenu_UseSensor,    do_switch_sensor
+		MENU_CALL		tBack,					do_divemode_splist
         MENU_CALL       tExit,                  do_continue_main_divemenu
+		MENU_CALL		tDiveHudMask1,			do_toggle_sensor
+		MENU_CALL		tDiveHudMask2,			do_toggle_sensor
+		MENU_CALL		tDiveHudMask3,			do_toggle_sensor
     MENU_END
 
-do_divemode_togglegf:
-    movff   char_I_deco_model,WREG  ; 0 = ZH-L16, 1 = ZH-L16-GF
-    decfsz  WREG,W		    ; Was 1?
-    bra     do_continue_main_divemenu   ; No, do nothing and return
-
-    ; Toggle GF only in GF modes
-    ; Set customview to 5 (GF informations)
-    movlw   .4
-    movwf   menupos3                    ; Customview to come-1
-    bsf     toggle_customview			; Set flag, the customview will be toggled very soon now...
+do_divemode_setpoint_pscr:
     movlw   .1
-    movwf   menupos                 ; Set to first option in divemode menu
-    MENU_BEGIN  tDivemenu_ToggleGF, .2
-        MENU_CALL       tDivemenu_ToggleGF,     do_togglegf
+    movwf   menupos                 	; Set to 1st option: use calculated ppO2
+    MENU_BEGIN  tGaslist, .6
+		MENU_CALL		tCalculated,			do_switch_sp_calc
+		MENU_CALL       tDivemenu_UseSensor,    do_switch_sensor
         MENU_CALL       tExit,                  do_continue_main_divemenu
+		MENU_CALL		tDiveHudMask1,			do_toggle_sensor
+		MENU_CALL		tDiveHudMask2,			do_toggle_sensor
+		MENU_CALL		tDiveHudMask3,			do_toggle_sensor
     MENU_END
 
+do_toggle_sensor:
+	decf	menupos,f					; 4, 5, 6 ->  3, 4, 5
+	decf	menupos,f					; 3, 4, 5 ->  2, 3, 4
+	decf	menupos,f					; 2, 3, 4 ->  1, 2, 3
+    dcfsnz	menupos						; 1, 2, 3 ->  0, 1, 2
+	btg		use_O2_sensor1				;             = 
+	dcfsnz	menupos						; 0, 1, 2 -> -1, 0, 1
+	btg		use_O2_sensor2				;                =
+	dcfsnz	menupos						; -1,0, 1 -> -2,-1, 0
+	btg		use_O2_sensor3				;                   =
+    movlw   .1
+    movwf   menupos
+	bra		do_divemode_sensor_loop
+
+	
     END
\ No newline at end of file
--- a/src/divemode.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/divemode.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemode.asm
+;   File divemode.asm								REFACTORED VERSION V2.96a
 ;
 ;   Divemode
 ;
@@ -9,19 +9,19 @@
 ; HISTORY
 ;  2011-08-15 : [mH] moving from OSTC code
 
-#include    "hwos.inc"                  ; Mandatory header
-#include 	"shared_definitions.h"         ; Mailbox from/to p2_deco.c
-#include	"tft_outputs.inc"
-#include 	"strings.inc"
-#include 	"tft.inc"
-#include	"eeprom_rs232.inc"
-#include	"isr.inc"
-#include	"math.inc"
-#include	"wait.inc"
-#include	"customview.inc"
-#include	"start.inc"
-#include	"adc_lightsensor.inc"
-#include	"ghostwriter.inc"
+#include    "hwos.inc"					; Mandatory header
+#include    "shared_definitions.h"		; Mailbox from/to p2_deco.c
+#include    "tft_outputs.inc"
+#include    "strings.inc"
+#include    "tft.inc"
+#include    "eeprom_rs232.inc"
+#include    "isr.inc"
+#include    "math.inc"
+#include    "wait.inc"
+#include    "customview.inc"
+#include    "start.inc"
+#include    "adc_lightsensor.inc"
+#include    "ghostwriter.inc"
 #include    "i2c.inc"
 #include    "calibrate.inc"
 #include    "convert.inc"
@@ -31,136 +31,273 @@
 	global	diveloop
 diveloop:
     banksel common
-	call	speed_normal
-	call	diveloop_boot			; Boot tasks for all modes
+    call    speed_normal
+    call    diveloop_boot				; Boot tasks for all modes
 
-; Startup Tasks for all modes
-    call	TFT_boot                ; Initialize TFT (includes clear screen)
-	call	TFT_divemode_mask		; Display mask
-	call	TFT_temp_divemode		; Displays temperature
-    movff   customview_divemode,menupos3    ; Reload last customview
-    call    customview_mask         ; Redraw last custom view
+    ; Startup Tasks for all modes
+    call    TFT_boot                	; Initialize TFT (includes clear screen)
+    bsf	    FLAG_TFT_divemode_mask		; Display mask
+    movff   customview_divemode,menupos3; Reload last customview
+    call    customview_mask         	; Redraw last custom view
 
-	btfsc	FLAG_apnoe_mode
-	bsf		realdive					; Set Realdive flag in Apnoe mode
+    btfsc   FLAG_apnoe_mode
+    bsf	    realdive					; Set Realdive flag in Apnoe mode
 
-	btfsc	FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
-    bra     diveloop_loop
-	btfsc	FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
-	bra     diveloop_loop
+    btfsc   FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
+    bra     diveloop_loop_start
+    btfsc   FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
+    bra     diveloop_loop_start
 
-	call	TFT_active_gas_divemode     ; Display gas/Setpoint
-	call	TFT_display_ndl_mask		; display "NDL"
+    bsf	    FLAG_TFT_display_ndl_mask	; display "NDL"
 
 	; +@5 init
-    setf        WREG                    ; WAIT marker: display "---"
-    movff       WREG,int_O_extra_ascenttime+0
-    movff       WREG,int_O_extra_ascenttime+1
-	movlw       1
-    movwf       apnoe_mins              ; Start compute after next cycle.
+    clrf    WREG                    	; WAIT marker: display "---"
+    movff   WREG,char_I_sim_advance_time; bank safe clrf
+    movff   WREG,int_O_alternate_ascenttime+0
+	bsf		WREG,int_not_yet_computed
+	bsf		WREG,int_invalid_flag
+    movff   WREG,int_O_alternate_ascenttime+1
+
+diveloop_loop_start:
+    btfsc   FLAG_TFT_display_ndl_mask
+    call    TFT_display_ndl_mask
+
+
+diveloop_loop:							; The diveloop starts here
+    btfss   quarter_second_update
+    bra     diveloop_loop4a
 
-;--------------------------------------------------------------------------------------------------------
-diveloop_loop:		; The diveloop starts here
+    ; tasks any 1/4 second, any mode
+    bcf     quarter_second_update		; clear flag
+    
+    movlw   .6
+    cpfseq  menupos3                    ; in compass view?
+    bra     diveloop_loop4a				; No, done.
+
+    btfsc   alternative_divelayout		; In alternative layout mode?
+    bra	    diveloop_loop4a				; Yes, done. No Compass.
+
+; TFT Output routines	
+    extern  TFT_dive_compass_heading
+    call    TFT_dive_compass_heading    ; Yes, update compass heading value
+    bsf	    FLAG_TFT_temp_divemode		; Redraw temperature (Is slighty affected from compass heading arrow)
+; TFT Output routines	
+
+diveloop_loop4a:
 	btfss	onesecupdate					
 	bra		diveloop_loop3
-
+	
 ; tasks any new second...
-    bcf     onesecupdate					; one seconds update, clear flag here in case it's set again in ISR before all tasks are done.
+    bcf     onesecupdate				; one seconds update, clear flag here in case it's set again in ISR before all tasks are done.
 
-	btfsc	FLAG_apnoe_mode					; Only in apnoe mode
-	bra		diveloop_loop1b					; One Second Tasks in Apnoe mode
+	;bsf	LEDg	; ### DEBUG - used to measure the time used by all deco code to see if there is enough margin each second ###	
 
-	call	TFT_divemins					; Display (new) divetime!
-	call	customview_second				; Do every-second tasks for the custom view area
-    call	divemode_check_for_warnings     ; Check for any warnings
+	; display depth based on full seconds interval (nicer blinking)
+    btfss   alternative_divelayout
+    rcall   TFT_output4_normal
+    btfsc   alternative_divelayout
+    rcall   TFT_output4_alternative
+	
+	btfsc	FLAG_apnoe_mode				; Only in apnoe mode
+	bra		diveloop_loop1b				; One Second Tasks in Apnoe mode
+	
+; tasks any new second - only for deco modes
+	bsf		FLAG_TFT_divemins			; Display (new) divetime!
+	btfsc	show_safety_stop			; Show the safety stop?
+	bsf		FLAG_TFT_show_safety_stop	; Yes, show/delete if done.
 
-; Tasks only for deco modes
-	btfsc	show_safety_stop				; Show the safety stop?
-	call	TFT_show_safety_stop			; Yes, show/delete if done.
-	call	calc_deko_divemode				; calculate decompression and display result (any two seconds)
-	bra		diveloop_loop1x					; Common Tasks
+	btfss	alternative_divelayout
+	rcall	TFT_output1_normal
+	btfsc	alternative_divelayout
+	rcall	TFT_output1_alternative
 
+	btfsc   FLAG_ccr_mode				; In CCR mode...
+	call    check_dive_autosp			; ...check for Auto-SP
+	
+	call	calc_deko_divemode			; calculate decompression and set resulting display flags
+
+	btfss	alternative_divelayout
+	rcall	TFT_output2_normal
+	btfsc	alternative_divelayout
+	rcall	TFT_output2_alternative
+
+	call	divemode_check_for_warnings	; Check for any warnings
+
+	bra		diveloop_loop1x				; Common Tasks
+
+	
+; tasks any new second - only for apnoe mode
 diveloop_loop1b:
-; Tasks only for Apnoe mode
-	rcall	divemode_apnoe_tasks			; 1 sec. Apnoe tasks
-    call	customview_second				; Do every-second tasks for the custom view area
- ;	bra		diveloop_loop1x					; Common Tasks
+	rcall	divemode_apnoe_tasks		; 1 sec. Apnoe tasks
+	call	customview_second			; Do every-second tasks for the custom view area
 
+	;bra	diveloop_loop1x				; Common Tasks
+
+; continue tasks any new second, any mode
 diveloop_loop1x:
-; Common 1sec. tasks for all modes
-	rcall	timeout_divemode				; dive finished? This routine sets the required flags
-	rcall	set_dive_modes                  ; tests if depth>threshold
-	rcall	set_min_temp                    ; store min. temp if required (Future hardware will need this to be checked 1/second...)
-
-	btfsc	store_sample					; store new sample?
-	call	store_dive_data					; Store profile data
-
-	btfss	divemode						; Dive finished?
-	goto	ghostwriter_end_dive    		; Dive finished!
+	rcall	timeout_divemode			; ** menu timeout? ** This routine sets the required flags
+	rcall	set_dive_modes				; tests if depth>threshold
+	rcall	set_min_temp				; store min. temp if required (Future hardware will need this to be checked 1/second...)
 
-    btfsc   divemode_gaschange              ; Gas switch flag set?
-    rcall   gas_switched_common             ; Yes
+	btfsc	oneminupdate				; one minute tasks
+	rcall	update_divemode60			; Update clock, etc.
 
-    btfsc   toggle_gf                       ; =1: Toggle GF/aGF
-    rcall   divemodemode_togglegf           ; Toggle aGF/GF
+	btfss	alternative_divelayout
+	rcall	TFT_output3_normal
+	btfsc	alternative_divelayout
+	rcall	TFT_output3_alternative
+
+	;bcf	LEDg	; ### DEBUG - used to measure the time used by all deco code to see if there is enough margin each second ###
 
-    btfsc   FLAG_ccr_mode                   ; In CCR mode...
-    call    check_dive_autosp               ; ...check for Auto-SP
-
+; tasks any round, any mode
 diveloop_loop3:
-	rcall	test_switches_divemode			; Check switches in divemode
-
+    call	test_switches_divemode		; Check switches in divemode
+	
     global  diveloop_loop4
-diveloop_loop4:                             ; Menu-Exit returns here...
-	btfsc	toggle_customview				; Next view?
-	call	customview_toggle				; Yes, show next customview (and delete this flag)
+diveloop_loop4:							; Menu-Exit returns here...
+	btfsc	divemode_menu				; in the big divemode menu?
+	bra		diveloop_loop4b				; YES - no space for CCR/pSCR info
+	btfsc	menuview					; NO  - in the small yellow menu?
+	bra		diveloop_loop4b				; 		YES - no space for CCR/pSCR info
+	btfsc	alternative_divelayout		; 		NO  - in the alternative layout?
+	bra		diveloop_loop4b				; 			  YES - no space for CCR/pSCR info
+	call	TFT_show_mode_divemode		; 			  NO  - (re)write CCR/pSCR mode info to display
+diveloop_loop4b:
+    btfsc   toggle_customview			; Next view?
+    call    customview_toggle			; Yes, show next customview (and delete this flag)
 
-	btfsc	pressure_refresh				; new pressure available?
-	rcall	update_temp_and_or_depth        ; Yes, display new depth and clear 	"pressure_refresh" flag
+    btfsc   store_sample				; store new sample?
+    call    store_dive_data				; Store profile data
 
-	btfsc	oneminupdate					; one minute tasks
-	rcall	update_divemode60				; Update clock, etc.
+    btfss   divemode					; Dive finished?
+    goto    ghostwriter_end_dive    	; Dive finished!
 
-;    btfss   quarter_second_update
-;    bra     diveloop_loop4a
+    btfsc   divemode_gaschange			; Gas switch flag set?
+    call    gas_switched_common			; Yes
 
-    bcf     quarter_second_update
-    movlw   .6
-    cpfseq  menupos3                    ; in compass view?
-    bra     diveloop_loop4a             ; No
-    extern  TFT_dive_compass_heading
-    call    TFT_dive_compass_heading    ; Yes, update compass heading value
-    call    TFT_temp_divemode		; Redraw temperature (Is slighty affected from compass heading arrow)
-diveloop_loop4a:
-    btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+    btfsc   toggle_gf					; =1: Toggle GF/aGF
+    rcall   divemodemode_togglegf		; Toggle aGF/GF
+    
+    btfsc   pressure_refresh			; new pressure available?	
+    rcall   set_max_depth				; update max. depth if required
+    btfsc   pressure_refresh			; new pressure available?	
+    bsf	    FLAG_TFT_depth				; Yes, update depth asap
+    bcf	    pressure_refresh			; clear flag
+
+    btfsc   temp_changed
+    bsf	    FLAG_TFT_temp_divemode		; Displays temperature
+
+	; display depth based on as-fast-as-possible (no nice blinking)
+    ;btfss   alternative_divelayout
+    ;rcall   TFT_output4_normal
+    ;btfsc   alternative_divelayout
+    ;rcall   TFT_output4_alternative
+    
+    btfsc   enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
     bra     diveloop_loop5
     bra     diveloop_loop6
+
 diveloop_loop5:
-    btfss   vusb_in                     ; USB (still) plugged in?
-    bcf     enable_screen_dumps         ; No, clear flag
+    btfss   vusb_in						; USB (still) plugged in?
+    bcf     enable_screen_dumps			; No, clear flag
     call    rs232_get_byte
     btfsc   rs232_recieve_overflow
     bra     diveloop_loop6
     movlw   "l"
     cpfseq	RCREG1
     bra     diveloop_loop6
-    call    TFT_dump_screen             ; Dump the screen contents
+    call    TFT_dump_screen				; Dump the screen contents
+	
 diveloop_loop6:
+	bra		diveloop_loop				; Loop the divemode
+	
+;--------------------------------------------------------------------------------------------------------	
+	
+TFT_output1_normal:	    				; beginning of any new second - only for deco modes
+	btfsc   FLAG_TFT_divemode_mask
+	call    TFT_divemode_mask
+	btfsc	FLAG_TFT_divemins
+	call	TFT_divemins				; Display (new) divetime!
+	call	customview_second			; Do every-second tasks for the custom view area (In sync with the divetime) mH
+	btfsc	FLAG_TFT_show_safety_stop
+	call	TFT_show_safety_stop		; Show safety stop
+	btfsc	FLAG_TFT_clear_safety_stop
+	call	TFT_clear_safety_stop		; Clear safety stop
+	return
+	
+TFT_output1_alternative:				; beginning of any new second - only for deco modes
+	btfsc	FLAG_TFT_divemins
+	call	TFT_divemins_alternative	; Display (new) divetime!
+	btfsc	FLAG_TFT_divemode_mask_alt
+	call    TFT_divemode_mask_alternative	; Alt. mask
+	call	customview_alternative_second	; Do every-second tasks for the custom view area (In sync with the divetime) mH
+	return
+	
+TFT_output2_normal:	    				; any new second - only for deco modes
+	btfsc   FLAG_TFT_display_ndl_mask
+	call    TFT_display_ndl_mask
+	btfsc   FLAG_TFT_display_ndl
+	call    TFT_display_ndl
+	btfsc	FLAG_TFT_display_deko_mask
+	call	TFT_display_deko_mask
+	btfsc	FLAG_TFT_display_deko
+	call	TFT_display_deko
+	btfsc	FLAG_TFT_display_tts
+	call	TFT_display_tts
+	return
 
-	bra		diveloop_loop					; Loop the divemode
+TFT_output2_alternative:    			; any new second - only for deco modes
+	return
+	
+TFT_output3_normal:	    				; tasks any new second, any mode
+	btfsc	FLAG_TFT_max_depth
+	call	TFT_max_depth				; use normal max. depth
+	btfsc	FLAG_TFT_divemode_warning
+	call	TFT_divemode_warning
+	btfsc	FLAG_TFT_divemode_warning_clear
+	call	TFT_divemode_warning_clear
+	btfsc	FLAG_TFT_active_gas_divemode
+	call	TFT_active_gas_divemode			; Display gas/Setpoint
+	btfsc	FLAG_TFT_dive_warning_text_clear
+	call	TFT_clear_warning_text          ; clear complete warnings area
+	btfsc   FLAG_TFT_dive_warning_text_clr2
+	call    TFT_clear_warning_text_2nd_row	; clear 2nd row of warnings
+	return
+	
+TFT_output3_alternative:    			; tasks any new second, any mode
+	btfsc	FLAG_TFT_max_depth_alt
+	call	TFT_max_depth_alternative	; big max. depth
+	btfsc	FLAG_TFT_dive_warning_text_clear
+	call	TFT_clear_warning_text		; clear complete warnings area (In alt mode only 2nd. row...)
+	btfsc	FLAG_TFT_big_deco_alt
+	call	TFT_big_deco_alt			; Big deco
+	return
+
+TFT_output4_normal:						; tasks any round, any mode
+	btfsc	FLAG_TFT_depth
+	call	TFT_depth					; Displays new depth
+	btfsc	FLAG_TFT_temp_divemode		
+	call	TFT_temp_divemode			; Update temperature
+	return
+	
+TFT_output4_alternative:    			; tasks any round, any mode
+    btfsc	FLAG_TFT_depth
+	call	TFT_depth					; Displays new depth
+	return
+	
+	
 ;--------------------------------------------------------------------------------------------------------
 
+divemode_apnoe_tasks:					; 1 sec. Apnoe tasks
+	call	TFT_display_apnoe_descent	; Yes, Show descent timer
+	call	TFT_max_depth				; use normal max. depth
 
-divemode_apnoe_tasks:                       ; 1 sec. Apnoe tasks
-	call	TFT_display_apnoe_descent		; Yes, Show descent timer
-	call	TFT_max_pressure				; use normal max. depth
-
-	btfsc	divemode2						; Time running?
-	bra		divemode_apnoe_tasks2			; New descent, reset data if flag is set
+	btfsc	divemode2					; Time running?
+	bra		divemode_apnoe_tasks2		; New descent, reset data if flag is set
 
 	rcall	apnoe_calc_maxdepth
 	call	TFT_display_apnoe_surface
-	call	TFT_display_apnoe_last_max		; Show last max. depth
+	call	TFT_display_apnoe_last_max	; Show last max. depth
 	incf	apnoe_surface_secs,F
 	movlw	d'60'
 	cpfseq	apnoe_surface_secs
@@ -169,26 +306,26 @@
 	incf	apnoe_surface_mins,F
 
 divemode_apnoe_tasks1:	
-	bcf		FLAG_active_descent				; Clear flag
-	btfsc	divemode2						; Time running?
-	return									; Yes, return
-	bsf		FLAG_active_descent				; Set Flag
+	bcf	FLAG_active_descent				; Clear flag
+	btfsc	divemode2					; Time running?
+	return								; Yes, return
+	bsf	FLAG_active_descent				; Set Flag
 	return
 
 divemode_apnoe_tasks2:
-	btfss	FLAG_active_descent				; Are we descending?
-	return									; No, We are at the surface
-	rcall	apnoe_calc_maxdepth				; Yes!
-	call	TFT_apnoe_clear_surface			; Clear Surface timer
-	clrf	apnoe_timeout_counter			; Delete timeout
+	btfss	FLAG_active_descent			; Are we descending?
+	return								; No, We are at the surface
+	rcall	apnoe_calc_maxdepth			; Yes!
+	call	TFT_apnoe_clear_surface		; Clear Surface timer
+	clrf	apnoe_timeout_counter		; Delete timeout
 	clrf	apnoe_surface_secs
 	clrf	apnoe_surface_mins
 	clrf	apnoe_secs
-	clrf	apnoe_mins						; Reset Descent time
+	clrf	apnoe_mins					; Reset Descent time
 	movlw	.0
 	movff	WREG,max_pressure+0
-	movff	WREG,max_pressure+1				; Reset Max. Depth
-	bcf		FLAG_active_descent				; Clear flag
+	movff	WREG,max_pressure+1			; Reset Max. Depth
+	bcf		FLAG_active_descent			; Clear flag
 	return
 
 	global	apnoe_calc_maxdepth
@@ -197,259 +334,341 @@
 	movff	apnoe_max_pressure+1,sub_a+1
 	movff	max_pressure+0,sub_b+0
 	movff	max_pressure+1,sub_b+1
-	call	subU16				; sub_c = sub_a - sub_b
-								; apnoe_max_pressure<max_pressure -> neg_flag=1
-								; max_pressure<=apnoe_max_pressure -> neg_flag=0
+	call	subU16						; sub_c = sub_a - sub_b
+										; apnoe_max_pressure<max_pressure -> neg_flag=1
+										; max_pressure<=apnoe_max_pressure -> neg_flag=0
 	btfss	neg_flag	
 	return
-								;apnoe_max_pressure<max_pressure
+										;apnoe_max_pressure<max_pressure
 	movff	max_pressure+0,apnoe_max_pressure+0
 	movff	max_pressure+1,apnoe_max_pressure+1
 	return
 
+	; --------------------------------------------------------------------------------------
 
 calc_deko_divemode:
-	btfsc	twosecupdate			; two seconds after the last call
-	bra		calc_deko_divemode2		; Yes, calculate and display deco data ("first second")
-
-	bsf		twosecupdate			; No, but next second!
-	; Routines used in the "other second"
-	call	calc_average_depth          ; calculate average depth
-	call	calc_velocity               ; calculate vertical velocity and display if > threshold (every two seconds)
-    call	set_reset_safety_stop       ; Set flags for safety stop and/or reset safety stop
+	rcall	calc_deko_divemode2			; all deco relevant code is now invoked every second
+	btfsc	twosecupdate
+	bra		calc_deko_divemode1
+	bsf		twosecupdate
+	return
+	
+calc_deko_divemode1:					; the following code is invoked every 2 seconds
+	bcf		twosecupdate
+	
+	call	calc_average_depth			; calculate average depth
+	call	calc_velocity				; calculate vertical velocity and display if > threshold (every two seconds)
+	call	set_reset_safety_stop		; Set flags for safety stop and/or reset safety stop
 	call	TFT_debug_output
 
-	btfsc	FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
-    return
-	btfsc	FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
+	btfsc	FLAG_apnoe_mode				; Done for Apnoe or Gauge mode
+	return
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
+	return
+
+; Check for a gas change
+	goto	check_gas_change			; Checks if a better gas should be selected (by user) and return...
+
+	
+calc_deko_divemode2:
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
 	return
 
-; Calculate CNS
-    btfss   FLAG_pscr_mode		; in PSCR mode?
-    rcall   set_actual_ppo2             ; No, set char_I_actual_ppO2
-    btfsc   is_bailout			; Always in bailout...
-    rcall   set_actual_ppo2             ; ...set char_I_actual_ppO2
-    
-    clrf    WREG
-    movff   WREG,char_I_step_is_1min    ; Make sure to be in 2sec mode.
-	call	deco_calc_CNS_fraction		; calculate CNS
-	movlb	b'00000001'					; rambank 1 selected
-; Check for a gas change
-	bra	check_gas_change			; Checks if a better gas should be selected (by user) and return...
+	btfsc	FLAG_ccr_mode				; In CCR mode?
+	rcall	calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
 
-    global  set_actual_ppo2
-set_actual_ppo2:                        ; calculate ppO2 in 0.01bar (e.g. 150 = 1.50 bar ppO2)
-    btfsc   divemode                    ; in divemode
-    bra     set_actual_ppo2_dive        ; Yes
-    ; No, use simulated ambient pressure for char_I_actual_ppO2
-    movff   char_I_bottom_depth,WREG
-    mullw   .100
-    movlw   LOW(.1000)
-    addwf   PRODL,W
-    movwf   xA+0
-    movlw   HIGH(.1000)
-    addwfc  PRODH,W
-    movwf   xA+1                        ; P_amb in millibar (1000 = 1.00 bar).
-    bra     set_actual_ppo2_common
-set_actual_ppo2_dive:
-    SAFE_2BYTE_COPY amb_pressure, xA    ; P_amb in millibar (1000 = 1.00 bar).
-set_actual_ppo2_common:
- 	movlw		d'10'
-	movwf		xB+0
-	clrf		xB+1
-	call		div16x16				; xC=p_amb/10 (100 = 1.00 bar).
-	movff		xC+0,xA+0
-	movff		xC+1,xA+1
-	movff		char_I_O2_ratio,xB+0
-	clrf		xB+1
-	call		mult16x16				; char_I_O2_ratio * (p_amb/10)
-	movff		xC+0,xA+0
-	movff		xC+1,xA+1
-	movlw		d'100'
-	movwf		xB+0
-	clrf		xB+1
-	call		div16x16				; xC=(char_I_O2_ratio * p_amb/10)/100
-
-; Copy ppO2 for CNS calculation
-    tstfsz      xC+1                    ; Is ppO2 > 2.55bar ?
-    setf        xC+0                    ; yes: bound to 2.55... better than wrap around.
-
-    movff		xC+0, char_I_actual_ppO2	; copy last ppO2 to buffer register
-    btfsc       is_bailout                  ; In Bailout?
-    return                                  ; Yes, done.
-    ; No Bailout, check for ccr mode
-    btfsc		FLAG_ccr_mode               ; If FLAG_ccr_mode=1...
-    movff		char_I_const_ppO2, char_I_actual_ppO2	; ...copy last ppO2 to buffer register
-    return
-
-check_fallback_clear:
-    call    check_sensors                   ; Setups "use_O2_sensorX" flags
-    ; Copy use flags to voting logic flags in case we are no longer in fallback
-    btfsc   use_O2_sensor1
-    bsf     voting_logic_sensor1
-    btfsc   use_O2_sensor2
-    bsf     voting_logic_sensor2
-    btfsc   use_O2_sensor3
-    bsf     voting_logic_sensor3
-    rcall   divemode_setup_sensor_values    ; Setup sensor values
-    goto    check_sensors                   ; Check O2 sensor thresholds for fallback customview_minute
-
-calc_deko_divemode2:
-	bcf	twosecupdate
-
-	btfsc	FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
-	return
-
-	extern	deco_setup_dive
-	call	deco_setup_dive				;  Pass all parameters to the C code
+    btfsc   FLAG_pscr_mode				; In PSCR mode?
+    rcall   calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
+    
+	SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; transfer ambient pressure to deco engine
 
 
-    btfsc   setpoint_fallback               ; Are we in Fallback?
-    rcall   check_fallback_clear            ; Yes, check if we still have fallback condition
-
-    bcf     setpoint_fallback               ; =1: Fallback to SP1 due to external O2 sensor failure
-
-    btfsc   FLAG_ccr_mode                   ; In CCR mode?
-    rcall    calc_deko_divemode_sensor      ; External sensor stuff
-
-;    btfsc   FLAG_pscr_mode                   ; In PSCR mode?
-;    rcall    calc_deko_divemode_sensor      ; External sensor stuff
+	; check deco engine state and switch between normal and alternative plan calculations
+	;
+	; Remark: Any reconfigurations done here do only affect the ascent & deco calculation settings,
+	;         not the settings for the calculations done on the real tissues. The later ones are only
+	;         altered in case of a gas change, or in case of a real bailout or switchback to setpoint
+	;         or sensor, respectively.
+	;         In case of a gas change or real bailout/switchback, the settings for the deco calculations
+	;         are also changed to match the settings for the real tissues. This is done on signal through
+	;         'divemode_gaschange' and will also leave the deco engine status in state as if having done
+	;         the alternative plan last.
+	
+	; check state of ascent/deco calculations
+	movff	char_O_deco_status,lo		; get a working copy of char_O_deco_status into bank common
+	movlw	DECO_STATUS_MASK			; load bit mask covering the deco status bits
+	andwf	lo,W						; mask out bits showing deco engine computations state
+	tstfsz	WREG						; check if the last compute cycle has finished (bits 1 and 0 cleared)
+	bra		calc_deko_divemode2e		; NO  - computations still in progress, needs more computation cycles
+	btfss	lo,DECO_PLAN_FLAG			; YES - computation cycle finished, so check what has been computed
+	bra		calc_deko_divemode2b		; PLAN bit is cleared i.e. normal plan was done, may do alternative next
 
-    
-	SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; C-code needs the ambient pressure
-	clrf	WREG
-	movff	WREG,char_I_step_is_1min    ; Force 2 second deco mode
+	; The PLAN bit is set, i.e. an alternative plan was computed in the last cycle, or the deco engine has
+	; been restarted because of a gas change etc. --> Reconfigure to normal plan for next computation cycle.
+	
+	; reset flags for special calculations
+	bcf		lo,DECO_PLAN_FLAG			; clear flag for alternative plan
+	bcf		lo,DECO_ASCENT_FLAG			; clear flag for delayed ascent calculation
+	bcf		lo,DECO_VOLUME_FLAG			; clear flag for gas needs calculation
+	movff	lo,char_O_deco_status		; write-back char_O_deco_status to deco engine interface
 
-	movff	char_I_O2_ratio,lo_temp		; Backup original value for everything
-	movff	char_I_N2_ratio,hi_temp		; Backup original value for everything
-	
-	btfss	FLAG_pscr_mode
-	bra	calc_deko_divemode2a	    ; Non-PSCR modes...
+	; check if a switchback from CCR or pSCR bailout calculation is to be done
+	btfsc	FLAG_ccr_mode				; may a switchback from a CCR bailout calculation be needed?
+	bra		calc_deko_divemode2a		; in CCR  mode, so may need to switch back from bailout calculation
+	btfsc	FLAG_pscr_mode				; may a switchback from a pSCR bailout calculation be needed?
+	bra		calc_deko_divemode2a		; in pSCR mode, so may need to switch back from bailout calculation
+	bra		calc_deko_divemode2e		; not in CCR nor pSCR, so no switchback needed, start normal plan now
+										; (first cycle omits gas needs calculation in OC without delayed ascent)
 
-	btfsc	is_bailout
-	bra	calc_deko_divemode2a	    ; Skip in bailout
+	; switch back to loop calculation if last cycle was doing a bailout calculation
+calc_deko_divemode2a:					
+	movff	opt_calc_asc_gasvolume,hi	; get the gas volume needs calculation setting
+	movf	hi,W						; are gas volume calculations turned on?
+	bz		calc_deko_divemode2e		; NO  - can't have done a bailout calculation then, start normal plan
+	btfsc	is_bailout					; YES - check if a real bailout situation is present
+	bra		calc_deko_divemode2e		; YES - OC gases have been set by bailout action then, start normal plan
+	movff	active_gas,WREG				; NO  - switch back to loop calculation: get current (diluent) gas, ...
+	call	deco_setup_cc_diluents		;       ... set up deco calculations in CCR/pSCR mode with diluents,
+	bra		calc_deko_divemode2e		;       ... and start in normal plan mode
+
+	; The PLAN bit was cleared, i.e. a normal plan was computed in the last cycle. For the next
+	; computation cycle the mode may be switched to alternative plan, or stay in normal mode...
 	
-	; in PSCR mode, compute fO2 into char_I_O2_ratio
-	call		compute_pscr_ppo2	; pSCR ppO2 into sub_c:2
-	movff		sub_c+0,xA+0
-	movff		sub_c+1,xA+1
-	movlw		LOW		.10
-	movwf		xB+0
-	movlw		HIGH	.10
-	movwf		xB+1
-	call		mult16x16		;xA*xB=xC	-> xC:4 = ppO2*10
-	SAFE_2BYTE_COPY amb_pressure, xB
-	call		div32x16	 	; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-	; xC+0 has O2 in percent
-	movff	xC+0,char_I_O2_ratio
+calc_deko_divemode2b:
+	bcf		lo,DECO_ASCENT_FLAG			; clear flag for delayed ascent calculation (for safety only)
+	btfsc	is_bailout					; check if a real bailout situation is present
+	bra		calc_deko_divemode2c		; YES - stay in normal plan mode and preclude delayed ascent calculation
+	movff	char_I_extra_time,hi		; NO  -	get the delayed ascent setting
+	tstfsz	hi							; 		check if delayed ascent calculation is enabled
+	bsf		lo,DECO_ASCENT_FLAG			; 		YES - set flag for delayed ascent calculation
+	tstfsz	hi							; 		check if delayed ascent calculation is enabled (again)
+	bsf		lo,DECO_PLAN_FLAG			; 		YES - set flag for alternative plan
 
-	movff	char_I_He_ratio, wait_temp	; copy into bank1 register
-	bsf	STATUS,C			; Borrow bit
-	movlw	d'100'				; 100%
-	subfwb	wait_temp,W			; minus He
-	bsf	STATUS,C			; Borrow bit
-	subfwb	xC+0,W				; minus O2
-	movff	WREG, char_I_N2_ratio		; = N2!
+	; check if a gas needs calculation shall be done
+calc_deko_divemode2c:					
+	bsf		lo,DECO_VOLUME_FLAG			; set gas needs calculation flag (may be cleared again next)
+	TSTOSS  opt_calc_asc_gasvolume		; check if gas needs calculation is enabled
+	bcf		lo,DECO_VOLUME_FLAG			; NO  - reset flag again
+	movff	lo,char_O_deco_status		; write-back char_O_deco_status to deco engine interface
+	TSTOSS  opt_calc_asc_gasvolume		; check if gas volume calculation is enabled (again)
+	bra		calc_deko_divemode2e		; NO  - no volume calculation, no simulated bailout plan in no case
 	
-calc_deko_divemode2a:
+	; check if conditions are met to calculate a bailout plan
+	btfsc	is_bailout					; check if a real bailout situation is present
+	bra		calc_deko_divemode2e		; YES - normal plan already does bailout (OC) calculation "for real"
+	btfss	lo,DECO_MODE_LOOP_FLAG		; NO  - have loop mode calculation been done during the normal plan?
+	bra		calc_deko_divemode2e		; NO  - when not in loop mode, no simulated bailout to be done
+	bsf		lo,DECO_PLAN_FLAG			; YES - set flag for alternative plan
+	movff	lo,char_O_deco_status		; 		write-back char_O_deco_status to deco engine interface
+	call    get_first_gas_to_WREG		; 		get first OC gas, ...
+	call	deco_setup_oc_gases			;       ... set up deco calculations in OC mode with OC gases,
+	;bra	calc_deko_divemode2e		;       ... and start in alternative plan mode
+
+
+calc_deko_divemode2e:
     clrf    TMR5L
     clrf    TMR5H                       ; 30,51757813µs/bit in TMR5L:TMR5H
 	call	deco_calc_hauptroutine		; calc_tissue
-    movlb   .1
-    
-  	movff	lo_temp,char_I_O2_ratio		; Restore original value for everything
-	movff	hi_temp,char_I_N2_ratio		; Restore original value for everything
-
-
-    movff   char_O_deco_status,WREG     ; Is a compute cycle finished ?
-    iorwf   WREG,F
-    btfss   STATUS,Z
-    return                              ; Return is status <> 0
+	banksel common
 
     ; Check if deco stops are necessary ?
 	movff	char_O_first_deco_depth,wait_temp	; copy ceiling to temp register
 	tstfsz	wait_temp							; Ceiling<0m?
 	bra		calc_deko_divemode3					; Yes!
 
-	btfsc	decostop_active             ; Already in nodeco mode ?
-	call	TFT_display_ndl_mask       	; No, Clear deco data, display nostop time
-	bcf		decostop_active             ; clear flag (again)
+	btfsc	decostop_active             		; Already in nodeco mode ?
+	bsf		FLAG_TFT_display_ndl_mask       	; No, Clear deco data, display nostop time
+	bcf		decostop_active						; clear flag (again)
 
 	; Copy for profile recording
 	clrf	decodata+0
-	movff	char_O_nullzeit,decodata+1  ; NDL
+	movff	char_O_nullzeit,decodata+1 			; NDL
 	
-	goto	TFT_display_ndl            ; display no deco limit, and return...
+	bsf		FLAG_TFT_display_ndl				; display no deco limit
+	return
 
 calc_deko_divemode3:
-	btfss	decostop_active            ; Already in deco mode ?
-	call	TFT_display_deko_mask      ; No, clear nostop time, display decodata
-	bsf		decostop_active            ; Set flag (again)
+	btfss	decostop_active						; Already in deco mode ?
+	bsf		FLAG_TFT_display_deko_mask			; No, clear nostop time, display decodata
+	bsf		decostop_active						; Set flag (again)
 
 	; Copy for profile recording
 	movff	char_O_first_deco_depth,decodata+0	; ceiling
-	movff	char_O_first_deco_time,decodata+1	; length of first stop in minues
-	call	TFT_display_deko            ; display decodata
-	call	TFT_show_TTS_divemode       ; display TTS
+	movff	char_O_first_deco_time,decodata+1	; length of first stop in minutes
+	bsf		FLAG_TFT_display_deko				; display decodata
+	bsf		FLAG_TFT_display_tts				; display TTS
+	return
+
+	; --------------------------------------------------------------------------------------
 
-    movff   char_I_extra_time,WREG
-    tstfsz  WREG                    ; extra time = 0?
-    bra     calc_deko_divemode4     ; No, compute it
-    return
+	global	calc_deko_divemode_sensor
+calc_deko_divemode_sensor:
+	; sensor acquisition code
+	btfss   s8_digital							; check if we have digital interface to the sensors
+	bra     calc_deko_divemode_sensor_analog	; NO  - use analog interface
+	btfss   new_s8_data_available				; YES - check if a new data frame was received
+	bra		calc_deko_divemode_sensor_common	; NO  - use old values
+	call	compute_mvolts_for_all_sensors		; YES - compute mV values from digital data
+	bra		calc_deko_divemode_sensor_common
+
+calc_deko_divemode_sensor_analog:
+	call    get_analog_inputs					; TODO: abort when OSTC model does not have analog inputs
+
+calc_deko_divemode_sensor_common:
+	; Check for each sensor if it is calibrated and if its mv value is within min_mv and max_mv limits.
+	; If     ok: compute o2_ppo2_sensorX := o2_mv_sensorX * opt_x_sX / 1000.
+	; If not ok: reset o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before.
 
-calc_deko_divemode4:
-    ; Check if extra cycles are needed to compute @5 variant:
-	decfsz  apnoe_mins,F                ; Reached count-down ?
-	return                              ; No: don't compute yet.
-	
-	movlw   .6
-	movff   WREG,char_O_deco_status     ; Stole next cycles for @5 variant.
-    
-    movlw   .2                          ; Restart countdown.
-    movwf   apnoe_mins
- 	return                              ; done.
+	; Check min_mv of sensor 1
+	btfss	sensor1_calibrated_ok			; check if sensor is usable at all
+	bra		check_sensor_1_fail				; NO  - handle it as failed
+	movff	o2_mv_sensor1+0, sub_a+0		; load sensor mV value
+	movff	o2_mv_sensor1+1, sub_a+1
+	movlw	LOW		min_mv					; load minimum mV value
+	movwf	sub_b+0
+	movlw	HIGH	min_mv
+	movwf	sub_b+1
+	call	sub16							; sub_c = sensor_mv - min_mv
+    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_1_fail				; YES - declare sensor as failed
+	; Check max_mv of sensor 1				  NO  - continue with next check
+	movff	o2_mv_sensor1+0, sub_a+0
+	movff	o2_mv_sensor1+1, sub_a+1
+	movlw	LOW		max_mv
+	movwf	sub_b+0
+	movlw	HIGH	max_mv
+	movwf	sub_b+1
+	call	sub16							;  sub_c = sensor_mv - max_mv
+	btfss	neg_flag						; check if result is negative, i.e. sensor_mv < max_mv
+	bra		check_sensor_1_fail				; NO  - declare sensor as failed
+	; Check HUD data, if available			  YES - continue with next check
+	btfss   hud_connection_ok				; check if there is a HUD connected
+    bra     check_sensor_1_ok				; NO  - all checks done then and positive
+	btfss   sensor1_active					; YES - check HUD report on sensor
+	bra		check_sensor_1_fail				; HUD reports a fail
+
+check_sensor_1_ok:
+	; o2_ppo2_sensor1 := o2_mv_sensor1:2 * opt_x_s1:2 / 1000
+	movff	o2_mv_sensor1+0,xA+0
+	movff	o2_mv_sensor1+1,xA+1
+	movff	opt_x_s1+0,xB+0
+	movff	opt_x_s1+1,xB+1
+	rcall	compute_ppo2_helper
+	movff	xC+0,o2_ppo2_sensor1			; result in 0.01bar
+	bra	check_sensor_2						; continue with next sensor
+
+check_sensor_1_fail:
+	clrf	WREG
+	movff	WREG,o2_ppo2_sensor1			; set ppO2 reading to zero
+	btfss	use_O2_sensor1					; check if sensor was in use before
+	bra		check_sensor_1_fail_1			; NO  - no new news then
+	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+check_sensor_1_fail_1:
+	bcf		use_O2_sensor1					; revoke sensor from usage
+	;bra	check_sensor_2					; continue with next sensor
 
-calc_deko_divemode_sensor:                  ; External sensor stuff
-    call    compute_ppo2		    ; computes o2_ppo2_sensorX from mV-Readings
-    call    check_sensors		    ; analyses mv-Readings to set up use- and voting-Flags
-    call    divemode_setup_sensor_values    ; computes sensor_setpoint from o2_pp02_sensorX and Flags
-    
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     calc_deko_divemode_sensor_done  ; No, return
-    
-    movff   sensor_setpoint,char_I_const_ppO2; Copy sensor result to C-code
+check_sensor_2:								; Check min_mv of sensor 2
+	btfss	sensor2_calibrated_ok			; check if sensor is usable at all
+	bra		check_sensor_2_fail				; NO  - handle it as failed
+	movff	o2_mv_sensor2+0, sub_a+0		; load sensor mV value
+	movff	o2_mv_sensor2+1, sub_a+1
+	movlw	LOW		min_mv					; load minimum mV value
+	movwf	sub_b+0
+	movlw	HIGH	min_mv
+	movwf	sub_b+1
+	call	sub16							; sub_c = sensor_mv - min_mv
+    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_2_fail				; YES - declare sensor as failed
+	; Check max_mv of sensor 2				  NO  - continue with next check
+	movff	o2_mv_sensor2+0, sub_a+0
+	movff	o2_mv_sensor2+1, sub_a+1
+	movlw	LOW		max_mv
+	movwf	sub_b+0
+	movlw	HIGH	max_mv
+	movwf	sub_b+1
+	call	sub16							;  sub_c = sensor_mv - max_mv
+	btfss	neg_flag						; check if result is nagative, i.e. sensor_mv < max_mv
+	bra		check_sensor_2_fail				; NO  - declare sensor as failed
+	; Check HUD data, if available			  YES - continue with next check
+	btfss   hud_connection_ok				; check if there is a HUD connected
+    bra     check_sensor_2_ok				; NO  - all checks done then and positive
+	btfss   sensor2_active					; YES - check HUD report on sensor
+	bra		check_sensor_2_fail				; HUD reports a fail
 
-    TSTOSS  opt_sensor_fallback             ; =1: Fallback to SP1 when sensor is lost
-    return                                  ; Never fallback
+check_sensor_2_ok:
+	; o2_ppo2_sensor2 := o2_mv_sensor2:2 * opt_x_s2:2 / 1000
+	movff	o2_mv_sensor2+0,xA+0
+	movff	o2_mv_sensor2+1,xA+1
+	movff	opt_x_s2+0,xB+0
+	movff	opt_x_s2+1,xB+1
+	rcall	compute_ppo2_helper
+	movff	xC+0,o2_ppo2_sensor2			; result in 0.01bar
+	bra	check_sensor_3						; continue with next sensor
+
+check_sensor_2_fail:
+	clrf	WREG
+	movff	WREG,o2_ppo2_sensor2			; set ppO2 reading to zero
+	btfss	use_O2_sensor2					; check if sensor was in use before
+	bra		check_sensor_2_fail_1			; NO  - no new news then
+	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+check_sensor_2_fail_1:
+	bcf		use_O2_sensor2					; revoke sensor from usage
+	;bra	check_sensor_3					; continue with next sensor	
 
-    btfsc   is_bailout                      ; In bailout?
-    return                                  ; Never fallback in bailout
-    ; Check if we should fallback to SP1
-  	btfsc	use_O2_sensor1
-    return                                  ; At least one sensor is active, no fallback
-	btfsc	use_O2_sensor2
-	return                                  ; At least one sensor is active, no fallback
-	btfsc	use_O2_sensor3
-	return                                  ; At least one sensor is active, no fallback
-    ; No sensor in use -> fallback
-    movff   char_I_setpoint_cbar+0,char_I_const_ppO2    ; Setup fixed Setpoint (Always fallback to SP1), overwrite sensor result
-    bsf     setpoint_fallback               ; =1: Fallback to SP1 due to external O2 sensor failure
-calc_deko_divemode_sensor_done:
-    return
-   
-;-----------------------------------------------------------------------------
+check_sensor_3:								; Check min_mv of sensor 2
+	btfss	sensor3_calibrated_ok			; check if sensor is usable at all
+	bra		check_sensor_3_fail				; NO  - handle it as failed
+	movff	o2_mv_sensor3+0, sub_a+0		; load sensor mV value
+	movff	o2_mv_sensor3+1, sub_a+1
+	movlw	LOW		min_mv					; load minimum mV value
+	movwf	sub_b+0
+	movlw	HIGH	min_mv
+	movwf	sub_b+1
+	call	sub16							; sub_c = sensor_mv - min_mv
+    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_3_fail				; YES - declare sensor as failed
+	; Check max_mv of sensor 2				  NO  - continue with next check
+	movff	o2_mv_sensor3+0, sub_a+0
+	movff	o2_mv_sensor3+1, sub_a+1
+	movlw	LOW		max_mv
+	movwf	sub_b+0
+	movlw	HIGH	max_mv
+	movwf	sub_b+1
+	call	sub16							;  sub_c = sensor_mv - max_mv
+	btfss	neg_flag						; check if result is nagative, i.e. sensor_mv < max_mv
+	bra		check_sensor_3_fail				; NO  - declare sensor as failed
+	; Check HUD data, if available			  YES - continue with next check
+	btfss   hud_connection_ok				; check if there is a HUD connected
+    bra     check_sensor_3_ok				; NO  - all checks done then and positive
+	btfss   sensor3_active					; YES - check HUD report on sensor
+	bra		check_sensor_3_fail				; HUD reports a fail
 
-divemodemode_togglegf:                  ; Toggle aGF/GF
-    bcf     toggle_gf                   ; clear flag    
-    btg     use_agf                     ; Toggle GF
-    call    TFT_gf_mask                 ; Setup Mask
-    clrf    WREG
-    movff   WREG,char_O_deco_status     ; Restart decoplan computation
-    return
+check_sensor_3_ok:
+	; o2_ppo2_sensor3 := o2_mv_sensor3:2 * opt_x_s1:2 / 1000
+	movff	o2_mv_sensor3+0,xA+0
+	movff	o2_mv_sensor3+1,xA+1
+	movff	opt_x_s3+0,xB+0
+	movff	opt_x_s3+1,xB+1
+	rcall	compute_ppo2_helper
+	movff	xC+0,o2_ppo2_sensor3			; result in 0.01bar
+	bra		calc_deko_divemode_sensor1		; continue with calculating sensor average
 
-    global  divemode_setup_sensor_values
-divemode_setup_sensor_values:
+check_sensor_3_fail:
+	clrf	WREG
+	movff	WREG,o2_ppo2_sensor3			; set ppO2 reading to zero
+	btfss	use_O2_sensor3					; check if sensor was in use before
+	bra		check_sensor_3_fail_1			; NO  - no new news then
+	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+check_sensor_3_fail_1:
+	bcf		use_O2_sensor3					; revoke sensor from usage
+	;bra	calc_deko_divemode_sensor1		; continue with calculating sensor average
+	
+calc_deko_divemode_sensor1:					; calculate sensor average
+	; exit here if not in divemode
+	btfss	divemode
+	return
+
+	; compute sensor_setpoint := average of all o2_ppo2_sensorX of those sensors that have use_O2_sensorX == true
     ; sum up sensor values (in xA:2) and active sensors in (xB:2)
     clrf    xB+0
     clrf    xB+1
@@ -457,8 +676,6 @@
     clrf    xA+1
     btfss   use_O2_sensor1                  ; Sensor1 active?
     bra     divemode_setup_sensor_values2   ; No
-;    btfss   voting_logic_sensor1            ; Sensor within voting logic?
-;    bra     divemode_setup_sensor_values2   ; No
     movf    o2_ppo2_sensor1,W
     addwf   xA+0
     movlw   .0
@@ -467,8 +684,6 @@
 divemode_setup_sensor_values2:
     btfss   use_O2_sensor2                  ; Sensor2 active?
     bra     divemode_setup_sensor_values3   ; No
-;    btfss   voting_logic_sensor2            ; Sensor within voting logic?
-;    bra     divemode_setup_sensor_values3   ; No
     movf    o2_ppo2_sensor2,W
     addwf   xA+0
     movlw   .0
@@ -477,18 +692,172 @@
 divemode_setup_sensor_values3:
     btfss   use_O2_sensor3                  ; Sensor3 active?
     bra     divemode_setup_sensor_values4   ; No
-;    btfss   voting_logic_sensor3            ; Sensor within voting logic?
-;    bra     divemode_setup_sensor_values4   ; No
     movf    o2_ppo2_sensor3,W
     addwf   xA+0
     movlw   .0
     addwfc  xA+1                            ; Add into xA:2
     incf    xB+0,F                          ; Add a sensor
+
+	; Divide sum of sensor values by number of active sensors found.
 divemode_setup_sensor_values4:
     call    div16x16						; xA/xB=xC with xA+0 as remainder
-    movff   xC+0,sensor_setpoint            ; Copy result
+    movff   xC+0,sensor_setpoint            ; copy result
+	
+	; set default value for pSCR mode: 0 = let p2_deco.c compute the ppO2 based on current dil gas and depth
+	; will be overwritten later in case we are in sensor mode and have at least one usable sensor
+	clrf	WREG							; preload a zero
+	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
+	movff	WREG,char_I_const_ppO2			; YES - write 0 to char_I_const_ppo2,
+											;		it will be overwritten if we have a usable sensor reading
+	
+	btfsc	is_bailout						; check if we are in bailout
+	bra		calc_deko_divemode_sensor2		; YES - no sensor data transfer to char_I_const_ppO2 in this case
+	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
+    bnz     calc_deko_divemode_sensor2		; not in sensor mode - no transfer of sensor data to char_I_const_ppO2
+	tstfsz	xB+0							; check if we have found at least one usable sensor
+	bra		calc_deko_divemode_sensor1a		; YES - we have at least one usable sensor
+	bsf		setpoint_fallback				; NO  - we have NO usable sensors -> initiate fallback
+	btfss	FLAG_ccr_mode					; check if we are in CCR mode
+	bra		calc_deko_divemode_sensor2		; NO  - continue with voting logic flags
+	movff	char_I_setpoint_cbar+0,char_I_const_ppO2	; YES - select fixed setpoint no. 1 for fallback
+	bra		calc_deko_divemode_sensor2		; done - continue with voting logic flags
+calc_deko_divemode_sensor1a:				; we have at least one usable sensor with a value > 0
+	bcf		setpoint_fallback				; clear fallback condition
+	movff	sensor_setpoint,char_I_const_ppO2	; transfer average sensor value to p2_deco.c code
+	; bra	calc_deko_divemode_sensor2
+
+calc_deko_divemode_sensor2:
+    bsf     voting_logic_sensor1
+    movff   o2_ppo2_sensor1,temp1
+    rcall   check_sensor_voting_helper
+    incfsz  WREG                    		; Was Wreg=255?
+    bcf     voting_logic_sensor1    		; No, ignore this sensor
+
+    bsf     voting_logic_sensor2
+    movff   o2_ppo2_sensor2,temp1
+    rcall   check_sensor_voting_helper
+    incfsz  WREG                    		; Was Wreg=255?
+    bcf     voting_logic_sensor2    		; No, ignore this sensor
+
+    bsf     voting_logic_sensor3
+    movff   o2_ppo2_sensor3,temp1
+    rcall   check_sensor_voting_helper
+    incfsz  WREG                    		; Was Wreg=255?
+    bcf     voting_logic_sensor3    		; No, ignore this sensor
+	
+	; check if a warning shall be issued on sensor disagreement
+
+	btfsc	FLAG_ccr_mode					; check if we are in CCR mode
+	bra 	check_warn_sensor_1				; YES - continue with further checks
+	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
+	bra		check_warn_sensor_1				; YES - continue with further checks
+	bra 	check_warn_sensor_agree			; not in CCR and not in pSCR, so no warning
+check_warn_sensor_1:						; we are in CCR or pSCR mode
+	btfsc	is_bailout						; check if we are in bailout
+	bra		check_warn_sensor_agree			; YES - no warning in this case
+	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
+    bnz     check_warn_sensor_agree			; not in sensor mode - no warning in this case
+											; check sensor 1
+	btfss	sensor1_calibrated_ok			; check if sensor has a valid calibration
+	bra		check_warn_sensor_2				; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor1					; YES - check if sensor is in use
+	bra		check_warn_sensor_2				; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor1			; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_2				; YES - continue with next sensor
+	bcf		sensors_agree					; NO  - issue a warning
+	return
+
+check_warn_sensor_2:						; check sensor 2
+	btfss	sensor2_calibrated_ok			; check if sensor has a valid calibration
+	bra		check_warn_sensor_3				; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor2					; YES - check if sensor is in use
+	bra		check_warn_sensor_3				; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor2			; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_3				; YES - continue with next sensor
+	bcf		sensors_agree					; NO  - issue a warning
+	return
+	
+check_warn_sensor_3:						; check sensor 2
+	btfss	sensor3_calibrated_ok			; check if sensor has a valid calibration
+	bra		check_warn_sensor_agree			; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor3					; YES - check if sensor is in use
+	bra		check_warn_sensor_agree			; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor3			; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_agree			; YES - continue with next sensor
+	bcf		sensors_agree					; NO  - issue a warning
+	return
+					
+check_warn_sensor_agree:
+	bsf		sensors_agree
+	return
+
+compute_ppo2_helper:
+	call	mult16x16						;xA:2*xB:2=xC:4
+	movlw	LOW		.1000
+	movwf	xB+0
+	movlw	HIGH	.1000
+	movwf	xB+1
+	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movlw	d'1'
+	addwf	xC+0,W							; we are just interessed in the carry flag
+	movlw	d'0'
+	addwfc	xC+1,W							; we are still just interessed in the carry flag
+    tstfsz  WREG							; ppO2 is higher than 2.55bar?
+    setf    xC+0							; Yes.
     return
 
+check_sensor_custview_helper:
+	btfss	divemode						; check if we are in divemode
+	return									; NO  - not in dive mode, return
+    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    sublw   .1                              ; opt_ccr_mode = 1 (Sensors)?
+    bnz		check_sensor_helper_1			; NO  - not using the sensors in the moment
+	clrf	menupos3						; YES - arm customview 1 (sensor values)
+	bsf		toggle_customview				;       and request a customview toggle
+check_sensor_helper_1:
+	return
+
+	
+check_sensor_voting_helper:
+    movf    temp1,W
+    cpfsgt  sensor_setpoint
+    bra     check_sensor_voting_common2		; temp1<sensor_setpoint
+    ; temp1>sensor_setpoint
+    movf    temp1,W
+    subwf   sensor_setpoint,W
+    movwf   temp1
+check_sensor_voting_common1:
+    movlw	sensor_voting_logic_threshold	; Threshold in 0.01 bar
+    cpfsgt  temp1
+    retlw   .255							; Within range
+    retlw   .0								; Out of range
+check_sensor_voting_common2:
+    ; temp1<sensor_setpoint
+    movf    sensor_setpoint,W
+    subwf   temp1,F
+    bra     check_sensor_voting_common1
+		
+;-----------------------------------------------------------------------------
+
+divemodemode_togglegf:						; Toggle aGF/GF
+    bcf     toggle_gf						; clear flag    
+    btg     use_agf							; toggle GF
+
+	movff	opt_GF_low,char_I_GF_Low_percentage
+	movff	opt_GF_high,char_I_GF_High_percentage
+
+	; Overwrite GF if aGF is wanted
+	btfsc	use_agf							; =1: Use aGF
+	movff	opt_aGF_low,char_I_GF_Low_percentage
+	btfsc	use_agf							; =1: Use aGF
+	movff	opt_aGF_high,char_I_GF_High_percentage
+
+    call    TFT_gf_mask						; Setup Mask
+	goto	restart_deco_engine				; ...and return
+
+
 calc_velocity:								; called every two seconds
     btfsc   display_velocity                
     bra     calc_velocity1                  ; Always update if already displayed
@@ -501,7 +870,7 @@
 	movff	sub_a+0,last_pressure_velocity+0	; store old value for velocity
 	movff	sub_a+1,last_pressure_velocity+1
 
-	call	subU16						; sub_c = amb_pressure - last_pressure
+	call	subU16							; sub_c = amb_pressure - last_pressure
 
     bcf     neg_flag_velocity
     btfsc   neg_flag
@@ -509,20 +878,20 @@
 
 	movff	sub_c+0,xA+0
 	movff	sub_c+1,xA+1
-	movlw	d'39'						; 77 when called every second....
+	movlw	d'39'							; 77 when called every second....
 	movwf	xB+0
 	clrf	xB+1
-	call	mult16x16					; differential pressure in mbar*77...
+	call	mult16x16						; differential pressure in mbar*77...
 	movff	xC+0,divA+0
 	movff	xC+1,divA+1
 	movlw	d'7'
 	movwf	divB+0
-	call	div16						; devided by 2^7 equals velocity in m/min
+	call	div16							; devided by 2^7 equals velocity in m/min
 
 	movlw	d'99'
-	cpfsgt	divA+0                      ; limit to 99m/min
+	cpfsgt	divA+0                      	; limit to 99m/min
 	bra		calc_velocity3
-	movwf	divA+0						; divA=99
+	movwf	divA+0							; divA=99
 
 calc_velocity3:
     ; Copy old speeds
@@ -532,22 +901,22 @@
     movff   divA+0,old_velocity+0
     
 ;    movff   old_velocity+3,WREG
-;    addwf   divA+0,F                    ; add old speed
+;    addwf   divA+0,F                    	; add old speed
 ;    bcf     STATUS,C
-;    rrcf    divA+0,F                    ; /2
+;    rrcf    divA+0,F                    	; /2
 ;    movff   old_velocity+2,WREG
-;    addwf   divA+0,F                    ; add old speed
+;    addwf   divA+0,F                    	; add old speed
 ;    bcf     STATUS,C
-;    rrcf    divA+0,F                    ; /2
+;    rrcf    divA+0,F                    	; /2
 ;    movff   old_velocity+1,WREG
-;    addwf   divA+0,F                    ; add old speed
+;    addwf   divA+0,F                    	; add old speed
 ;    bcf     STATUS,C
-;    rrcf    divA+0,F                    ; /2
+;    rrcf    divA+0,F                    	; /2
 ;    movff   old_velocity+0,WREG
-;    addwf   divA+0,F                    ; add old speed
+;    addwf   divA+0,F                    	; add old speed
 ;    bcf     STATUS,C
-;    rrcf    divA+0,F                    ; /2
-	goto	TFT_display_velocity		; With divA+0 = m/min..., and return...
+;    rrcf    divA+0,F                    	; /2
+	goto	TFT_display_velocity			; With divA+0 = m/min..., and return...
 
 
 ;=============================================================================
@@ -558,6 +927,7 @@
 
 	btfsc	decostop_active					; Is a deco stop displayed?
 	bra		delete_safety_stop				; Yes, don't show safety stop
+
 	; Below "opt_safety_stop_reset"? Set flag and reset count-down timer
     SAFE_2BYTE_COPY rel_pressure, lo
 	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
@@ -567,7 +937,7 @@
     mullw   .10                             ; mbar in PRODL:H
     movff   PRODL,sub_b+0
     movff   PRODH,sub_b+1
-	call	subU16							;  sub_c = sub_a - sub_b
+	call	subU16							; sub_c = sub_a - sub_b
 	btfss	neg_flag
 	bra		reset_safety_stop				; Below 10m, reset safety stop
 
@@ -576,11 +946,11 @@
 	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_end,WREG      ; [cbar]
+    movff   opt_safety_stop_end,WREG      	; [cbar]
     mullw   .10                             ; mbar in PRODL:H
     movff   PRODL,sub_b+0
     movff   PRODH,sub_b+1
-	call	subU16							;  sub_c = sub_a - sub_b
+	call	subU16							; sub_c = sub_a - sub_b
 	btfsc	neg_flag
 	bra		delete_safety_stop				; Above 3m, remove safety stop
 
@@ -614,7 +984,8 @@
 	btfss	safety_stop_active				; Safety stop shown
 	return									; No, don't delete it
 	bcf		safety_stop_active				; Clear flag
-    goto    TFT_clear_safety_stop           ; Clear safety stop, and return...
+    bsf	    FLAG_TFT_clear_safety_stop		; Clear safety stop
+    return
 
 
 ;=============================================================================
@@ -633,21 +1004,24 @@
 timeout_divemode_menu2:                 ; Called from divemenu_tree.asm
     bcf     divemode_menu               ; Timeout! Clear flag
     call    TFT_clear_divemode_menu     ; Clear menu
-    call    TFT_active_gas_divemode     ; Redraw gas/setpoint/diluent
+    bsf	    FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
     bcf     blinking_better_gas         ; Clear flag to have temperature updated once
-    call	TFT_temp_divemode           ; Displays temperature
+    bsf	    FLAG_TFT_temp_divemode		; Displays temperature
     call    TFT_draw_gassep_line        ; Gas separator grid in spec mode only
 
     btfss   decostop_active             ; In deco mode ?
     bra     timeout_divemode_menu_ndl   ; No, show NDL again
     ; Show deco
-	call	TFT_display_deko_mask      ; clear nostop time, display decodata
-    call    TFT_display_deko
-    goto    TFT_show_TTS_divemode; and return...
-
-timeout_divemode_menu_ndl:              ; Show NDL
-	call	TFT_display_ndl_mask       	; Clear deco data, display nostop time
-    goto    TFT_display_ndl; and return...
+    bsf	    FLAG_TFT_display_deko_mask
+    bsf	    FLAG_TFT_display_deko
+    bsf	    FLAG_TFT_display_tts
+    return
+    
+timeout_divemode_menu_ndl:              
+    ; Show NDL
+    bsf	    FLAG_TFT_display_ndl_mask
+    bsf	    FLAG_TFT_display_ndl
+    return
 
 timeout_divemode:
     btfsc   divemode_menu               ; Divemode menu active?
@@ -674,7 +1048,7 @@
 	movff	opt_diveTimeout,WREG	    ; in [min]
 	mullw	.60
 	movff	PRODL,sub_a+0
-	movff	PRODH,sub_a+1		    ; in [s]
+	movff	PRODH,sub_a+1		    	; in [s]
 
 	movff	timeout_counter, sub_b+0
 	movff	timeout_counter2, sub_b+1
@@ -705,17 +1079,6 @@
 	bsf		divemode
 	return
 
-update_temp_and_or_depth:			    ; New sensor data arrived...
-	btfsc	temp_changed	
-	call	TFT_temp_divemode		    ; Displays temperature
-
-;	btfsc	pressure_refresh
-	call	TFT_depth			    ; Displays new depth
-
-	rcall	set_max_depth			    ; update max. depth if required
-	bcf	pressure_refresh		    ; until new pressure is available
-	return
-
 update_divemode60:                      ; update any minute
 	call	get_battery_voltage			; gets battery voltage
 	rcall	set_powersafe				; Battery low?
@@ -745,7 +1108,8 @@
                                         ; max_pressure<rel_pressure
 	movff	sub_b+0,max_pressure+0
 	movff	sub_b+1,max_pressure+1
-	goto	TFT_max_pressure			; No, use normal max. depth; and return...
+	bsf	FLAG_TFT_max_depth				; Set flag
+	return
 
 set_min_temp:
 	movff	minimum_temperature+0,sub_a+0
@@ -763,39 +1127,39 @@
 
 	global	set_dive_modes
 set_dive_modes:
-	btfsc	high_altitude_mode		; In high altitude (Fly) mode?
-	bra		set_dive_modes3			; Yes!
+	btfsc	high_altitude_mode			; In high altitude (Fly) mode?
+	bra		set_dive_modes3				; Yes!
 
 set_dive_modes0:
 	movlw	LOW		start_dive_threshold
-	movwf	sub_a+0					; dive_treshold is in cm
+	movwf	sub_a+0						; dive_treshold is in cm
 	movlw	HIGH	start_dive_threshold
-	movwf	sub_a+1					; dive_treshold is in cm
+	movwf	sub_a+1						; dive_treshold is in cm
 
 set_dive_modes1:
     SAFE_2BYTE_COPY rel_pressure, sub_b
-	call	subU16					; sub_c = sub_a - sub_b
+	call	subU16						; sub_c = sub_a - sub_b
 
 	btfss	neg_flag	
-	bra		set_dive_modes2			; too shallow (rel_pressure<dive_threshold)
+	bra		set_dive_modes2				; too shallow (rel_pressure<dive_threshold)
 
-	btfsc	realdive				; Dive longer than one minute?
-	clrf 	timeout_counter			; Yes, reset timout counter
+	btfsc	realdive					; Dive longer than one minute?
+	clrf 	timeout_counter				; Yes, reset timout counter
 
-	bsf		divemode				; (Re-)Set divemode flag
-	bsf		divemode2				; displayed divetime is running
+	bsf		divemode					; (Re-)Set divemode flag
+	bsf		divemode2					; displayed divetime is running
 	return
 
 set_dive_modes2:
-	bcf		divemode2				; Stop time
-	btfss	realdive				; dive longer then one minute?
-	bcf		divemode				; no -> this was no real dive
-	return							; No, return
+	bcf		divemode2					; Stop time
+	btfss	realdive					; dive longer then one minute?
+	bcf		divemode					; no -> this was no real dive
+	return								; No, return
 
 
-set_dive_modes3:					; High-altitude mode
-	btfsc	realdive				; dive longer then one minute?
-	bra		set_dive_modes0			; Yes -> this is a real dive -> Use start_dive_threshold or ascend
+set_dive_modes3:						; High-altitude mode
+	btfsc	realdive					; dive longer then one minute?
+	bra		set_dive_modes0				; Yes -> this is a real dive -> Use start_dive_threshold or ascend
 
 	movlw	HIGH	high_altitude_dive_threshold
 	movwf	sub_a+1
@@ -808,22 +1172,22 @@
     cpfslt  batt_percent
 	return
 
-	movlw	d'7'					; Type of Alarm (Battery Low)
-	movwf	AlarmType				; Copy to Alarm Register
-	bsf		event_occured			; Set Event Flag
+	movlw	d'7'						; Type of Alarm (Battery Low)
+	movwf	AlarmType					; Copy to Alarm Register
+	bsf		event_occured				; Set Event Flag
     movlw   .0
-    movff   WREG,opt_brightness     ; Set Brightness to ECO
-	return							; return
+    movff   WREG,opt_brightness     	; Set Brightness to ECO
+	return								; return
 
 calc_average_depth:
-	btfsc	reset_average_depth		; Reset the Average depth?
-	rcall	reset_average1			; Reset the resettable average depth
+	btfsc	reset_average_depth			; Reset the Average depth?
+	rcall	reset_average1				; Reset the resettable average depth
 
 	; 1. Add new 2xdepth to the Sum of depths registers
     SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
     bcf     STATUS,C
     rlcf    xB+0,F
-    rlcf    xB+1,F                  ; x2
+    rlcf    xB+1,F                  	; x2
 
 	movf	xB+0,w
 	addwf	average_depth_hold+0,F
@@ -831,9 +1195,9 @@
 	addwfc	average_depth_hold+1,F
 	movlw	d'0'
 	addwfc	average_depth_hold+2,F
-	addwfc	average_depth_hold+3,F ; Will work up to 9999mbar*60*60*24=863913600mbar
+	addwfc	average_depth_hold+3,F 		; Will work up to 9999mbar*60*60*24=863913600mbar
 
-; Do the same for the _total registers (Non-Resettable)
+	; Do the same for the _total registers (Non-Resettable)
 	movf	xB+0,w
 	addwf	average_depth_hold_total+0,F
 	movf	xB+1,w
@@ -850,7 +1214,7 @@
 	movff	average_depth_hold+2,xC+2
 	movff	average_depth_hold+3,xC+3
 
-	call	div32x16 	; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16 					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,avg_rel_pressure+0
 	movff	xC+1,avg_rel_pressure+1
 
@@ -864,7 +1228,7 @@
 	movff	average_depth_hold_total+1,xC+1
 	movff	average_depth_hold_total+2,xC+2
 	movff	average_depth_hold_total+3,xC+3
-	call	div32x16 	; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16 					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,avg_rel_pressure_total+0
 	movff	xC+1,avg_rel_pressure_total+1
 	return
@@ -880,11 +1244,12 @@
 	bcf		reset_average_depth			; Clear flag
 	return
 
-test_switches_divemode:		; checks switches in divemode
+test_switches_divemode:					; checks switches in divemode
     btfsc   divemode_menu               ; Divemode menu shown?
     bra     test_switches_divemode_menu ; Yes, use menu processor
 	btfsc	switch_left
-	goto    menuview_toggle         ; Menu or Simulator tasks; and return...; bra		test_switches_divemode2		; Enter button pressed, check if we need to do something
+	; bra	test_switches_divemode2		; Enter button pressed, check if we need to do something
+	goto    menuview_toggle         	; Menu or Simulator tasks; and return...
 	btfss	switch_right
 	return                              ; No button press
     tstfsz  menupos2                    ; any option shown?
@@ -914,7 +1279,7 @@
 
 test_switches_divemode_menu3:           ; Enter submenu or do something
     bcf     switch_right
-;    decf    menupos,F                   ; menu_processor needs 0-5...
+;    decf    menupos,F					; menu_processor needs 0-5...
     extern  do_line_menu
     goto    do_line_menu                ; Warning! Trashes STKPTR and returns to diveloop_loop4:
 
@@ -941,103 +1306,281 @@
 	bra		divemode_option6			; +5mins simulation
 	dcfsnz	WREG,F
 	bra		divemode_option7			; Store heading
+	dcfsnz	WREG,F
+	bra		divemode_option8			; Switch to alt. layout
     return
 
 gas_switched_common:
-    bcf     divemode_gaschange      ; Clear flag
-
-    tstfsz  menupos                 ; menupos=0?
-    bra     $+4                     ; No
-    return                          ; Yes, do not switch gas (There is no Gas #0 !)
+    bcf     divemode_gaschange			; Clear flag
+    tstfsz  menupos						; menupos=0?
+    bra     gas_switched_common1		; No
+    return								; Yes, do not switch gas (there is no Gas #0 !)
+gas_switched_common1:
+	movf	menupos,W					; get selected gas into WREG (1-6)
 
-    decf    menupos,W               ; 1-5 -> 0-4
-    btfsc   FLAG_ccr_mode           ; Choose CC Diluents
-    rcall   setup_dil_registers     ; With WREG=Gas 0-4
-    decf    menupos,W               ; 1-5 -> 0-4
-    btfsc   FLAG_pscr_mode          ; Choose CC Diluents
-    rcall   setup_dil_registers     ; With WREG=Gas 0-4
-    ; OC mode?
-    btfsc   FLAG_ccr_mode           ; CCR?
-    bra	    gas_switched_common2    ; Yes
-    btfsc   FLAG_pscr_mode          ; PSCR?
-    bra	    gas_switched_common2    ; Yes
-    ; -> OC
-    decf    menupos,W               ; 1-5 -> 0-4
-    rcall   setup_gas_registers     ; With WREG=Gas 0-4
+    btfsc   FLAG_ccr_mode				; in CCR mode?
+	bra		gas_switched_common2		; YES - configure diluent or bailout
+	btfsc   FLAG_pscr_mode				; in pSCR mode?
+	bra		gas_switched_common2		; YES - configure diluent or bailout
+	
+	; OC
+	rcall	setup_gas_registers			; With WREG = Gas 1-6
+    rcall	deco_setup_oc_gases			; With WREG = Gas 1-6
+	bra		gas_switched_common3
+
+	; Loop or Bailout
 gas_switched_common2:
-    decf    menupos,W               ; 1-5 -> 0-4
-    btfsc   is_bailout              ; Choose OC Bailouts (OC Gases)
-    rcall   setup_gas_registers     ; With WREG=Gas 0-4
-    
-    movlw   .0
-    btfsc   is_bailout
-    movff   WREG,char_I_const_ppO2  ; deactivate CCR-mode deco calc
-
-    call	TFT_active_gas_divemode	; Display gas/Setpoint
-    clrf    WREG
-    movff   WREG,char_O_deco_status ; Restart decoplan computation
+    rcall   setup_dil_registers			; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
+    rcall	deco_setup_cc_diluents		; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
+ 
+gas_switched_common3:
+    bsf		FLAG_TFT_active_gas_divemode	; Redraw gas/setpoint/diluent
+    call	restart_deco_engine_wo_ceiling	; abort any running deco calculations and restart the deco engine
 
     ; Set flags for profile recording
-	bsf		event_occured			; Set global event byte
-    btfsc   is_bailout              ; Choose OC Bailouts (OC Gases)
-    bsf     bailoutgas_event        ; Bailout gas change
-    btfss   is_bailout              ; Choose OC Bailouts (OC Gases)
-	bsf		stored_gas_changed		; OC gas change
+	bsf		event_occured				; Set global event byte
+    btfsc   is_bailout					; Choose OC Bailouts (OC Gases)
+    bsf     bailoutgas_event			; Bailout gas change
+    btfss   is_bailout					; Choose OC Bailouts (OC Gases)
+	bsf		stored_gas_changed			; OC gas change
 	return
 
-    global  setup_gas_registers
-setup_gas_registers:                ; With WREG=Gas 0-4
-    lfsr    FSR1,opt_gas_O2_ratio+0
-    movff   PLUSW1,char_I_O2_ratio  ; O2 (For ppO2 calculations)
-    lfsr    FSR1,opt_gas_He_ratio+0
-    movff   PLUSW1,char_I_He_ratio  ; He
-    lfsr    FSR1,opt_gas_type
-    movff   PLUSW1,active_gas_type  ; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
-    incf    WREG,W                  ; Gas# 1-5
-	movff	WREG,char_I_current_gas	; Set gas
-	movff	WREG,active_gas			; Set for logbook and display
-    banksel char_I_O2_ratio
-	movf    char_I_O2_ratio,W       ; Add O2...
-    addwf   char_I_He_ratio,W       ; ...and He...
-	sublw   .100                    ; ...subtract both from 100
-	movwf   char_I_N2_ratio         ; -> N2!
-    banksel common
-    return
+
+; Code to pass all parameters to the C code
+
+	global  get_first_gas_to_WREG
+get_first_gas_to_WREG:					; Gets first gas (1-5) into WREG
+	lfsr    FSR1,opt_gas_type			; Point to gas types
+	clrf    lo							; start with Gas0
+get_first_gas_to_WREG2:
+	movf    lo,W
+	movf    PLUSW1,W					; Get Type of Gas #lo
+	sublw   .1							; it is = 1 (First Gas)
+	bz      get_first_gas_to_WREG3		; Found the first gas!
+	incf    lo,F						; ++
+	movlw   NUM_GAS+1
+	cpfseq  lo							; All done?
+	bra     get_first_gas_to_WREG2		; Not yet
+	; No first gas found, use #1
+	movlw   .0
+	movff   WREG,opt_gas_type+0			; Set Gas1 to First
+	incf	WREG,W						; 0 -> 1
+	return
+get_first_gas_to_WREG3:
+	movf    lo,W						; Put into Wreg
+	incf	WREG,W						; 0-4 -> 1-5
+	return								; Done
+
+	global  get_first_dil_to_WREG
+get_first_dil_to_WREG:					; Gets first dil (1-5) into WREG
+	lfsr    FSR1,opt_dil_type			; Point to dil types
+	clrf    lo							; start with Gas0
+get_first_dil_to_WREG2:
+	movf    lo,W
+	movf    PLUSW1,W					; Get Type of Dil #lo
+	sublw   .1							; it is = 1 (First Dil)
+	bz      get_first_dil_to_WREG3		; Found the first dil!
+	incf    lo,F						; ++
+	movlw   NUM_GAS+1
+	cpfseq  lo							; All done?
+	bra     get_first_dil_to_WREG2		; Not yet
+	; No first dil found, use #1
+	movlw   .0
+	movff   WREG,opt_dil_type+0			; Set Dil1 to First
+	incf	WREG,W						; 0 -> 1
+	return
+get_first_dil_to_WREG3:
+	movf    lo,W						; Put into Wreg
+	incf	WREG,W						; 0-4 -> 1-5
+	return								; Done
+
+	global	deco_setup_oc_gases
+deco_setup_oc_gases:					; with currently breathed gas in WREG (1-5 or 6)
+	movff	WREG,char_I_current_gas		; gas to start with when doing the deco calculations
+
+	movff   opt_gas_He_ratio+0,char_I_deco_He_ratio+0
+	movff   opt_gas_O2_ratio+0,char_I_deco_O2_ratio+0
+	banksel opt_gas_type+0
+	movlw   .3							; 3=Deco
+	cpfseq  opt_gas_type+0				; Gas is deco type?
+	clrf    opt_OC_bail_gas_change+0	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	banksel common
+
+	movff   opt_gas_He_ratio+1,char_I_deco_He_ratio+1
+	movff   opt_gas_O2_ratio+1,char_I_deco_O2_ratio+1
+	banksel opt_gas_type+1
+	movlw   .3							; 3=Deco
+	cpfseq  opt_gas_type+1				; Gas is deco type?
+	clrf    opt_OC_bail_gas_change+1	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	banksel common
+
+	movff   opt_gas_He_ratio+2,char_I_deco_He_ratio+2
+	movff   opt_gas_O2_ratio+2,char_I_deco_O2_ratio+2
+	banksel opt_gas_type+2
+	movlw   .3							; 3=Deco
+	cpfseq  opt_gas_type+2				; Gas is deco type?
+	clrf    opt_OC_bail_gas_change+2	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	banksel common
+
+	movff   opt_gas_He_ratio+3,char_I_deco_He_ratio+3
+	movff   opt_gas_O2_ratio+3,char_I_deco_O2_ratio+3
+	banksel opt_gas_type+3
+	movlw   .3							; 3=Deco
+	cpfseq  opt_gas_type+3				; Gas is deco type?
+	clrf    opt_OC_bail_gas_change+3	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	banksel common
+
+	movff   opt_gas_He_ratio+4,char_I_deco_He_ratio+4
+	movff   opt_gas_O2_ratio+4,char_I_deco_O2_ratio+4
+	banksel opt_gas_type+4
+	movlw   .3							; 3=Deco
+	cpfseq  opt_gas_type+4				; Gas is deco type?
+	clrf    opt_OC_bail_gas_change+4	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	banksel common
+
+	; Setup char_I_deco_gas_change array
+	movff   opt_OC_bail_gas_change+0, char_I_deco_gas_change+0
+	movff   opt_OC_bail_gas_change+1, char_I_deco_gas_change+1
+	movff   opt_OC_bail_gas_change+2, char_I_deco_gas_change+2
+	movff   opt_OC_bail_gas_change+3, char_I_deco_gas_change+3
+	movff   opt_OC_bail_gas_change+4, char_I_deco_gas_change+4
+
+	; switch to oc mode
+	movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
+	bcf		lo,DECO_MODE_PSCR_FLAG		; clear the pSCR-mode flag (may not be set, but never mind)
+	bcf		lo,DECO_MODE_LOOP_FLAG		; clear the loop/CCR-mode flag
+	movff	lo,char_O_deco_status		; bank safe write-back of char_O_deco_status
+		
+	return
+
+		
+	global	deco_setup_cc_diluents
+deco_setup_cc_diluents:					; with currently breathed gas in WREG (1-5 or 6)
+	btfsc	is_bailout					; check if in bailout condition
+	bra		deco_setup_oc_gases			; revert to setting up OC gases in bailout condition
+	
+	movff	WREG,char_I_current_gas		; gas to start with when doing the deco calculations
 
-    global  setup_dil_registers
-setup_dil_registers:                ; With WREG=dil 0-4
-    btfsc   is_bailout
-    return                          ; Ignore in bailout
-    lfsr    FSR1,opt_dil_O2_ratio+0
-    movff   PLUSW1,char_I_O2_ratio  ; O2 (For ppO2 calculations)
-    lfsr    FSR1,opt_dil_He_ratio+0
-    movff   PLUSW1,char_I_He_ratio  ; He
-    lfsr    FSR1,opt_dil_type
-    movff   PLUSW1,active_gas_type  ; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
-    incf    WREG,W                  ; Gas# 1-5
-	movff	WREG,char_I_current_gas	; Set gas
-	movff	WREG,active_gas			; Set for logbook and display
-    movff   WREG,active_diluent     ; As a backup when switching back from Bailout to CCR
-    banksel char_I_O2_ratio
-	movf    char_I_O2_ratio,W       ; Add O2...
-    addwf   char_I_He_ratio,W       ; ...and He...
-	sublw   .100                    ; ...subtract both from 100
-	movwf   char_I_N2_ratio         ; -> N2!
-    banksel common
-    return
+	movff   opt_dil_He_ratio+0,char_I_deco_He_ratio+0
+	movff   opt_dil_O2_ratio+0,char_I_deco_O2_ratio+0
+	movff   opt_dil_type+0,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz  WREG						; Disabled?
+	bra     $+4							; No
+	movff   WREG,char_I_dil_change+0	; Yes, clear char_I_deco_gas_change (Bank safe)
+
+	movff   opt_dil_He_ratio+1,char_I_deco_He_ratio+1
+	movff   opt_dil_O2_ratio+1,char_I_deco_O2_ratio+1
+	movff   opt_dil_type+1,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz  WREG						; Disabled?
+	bra     $+4							; No
+	movff   WREG,char_I_dil_change+1	; Yes, clear char_I_dil_change
+
+	movff   opt_dil_He_ratio+2,char_I_deco_He_ratio+2
+	movff   opt_dil_O2_ratio+2,char_I_deco_O2_ratio+2
+	movff   opt_dil_type+2,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz  WREG						; Disabled?
+	bra     $+4							; No
+	movff   WREG,char_I_dil_change+2	; Yes, clear char_I_dil_change
+
+	movff   opt_dil_He_ratio+3,char_I_deco_He_ratio+3
+	movff   opt_dil_O2_ratio+3,char_I_deco_O2_ratio+3
+	movff   opt_dil_type+3,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz  WREG						; Disabled?
+	bra     $+4							; No
+	movff   WREG,char_I_dil_change+3	; Yes, clear char_I_dil_change
+
+	movff   opt_dil_He_ratio+4,char_I_deco_He_ratio+4
+	movff   opt_dil_O2_ratio+4,char_I_deco_O2_ratio+4
+	movff   opt_dil_type+4,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz  WREG						; Disabled?
+	bra     $+4							; No
+	movff   WREG,char_I_dil_change+4	; Yes, clear char_I_dil_change
+
+	; Setup char_I_deco_gas_change array
+	movff   char_I_dil_change+0, char_I_deco_gas_change+0
+	movff   char_I_dil_change+1, char_I_deco_gas_change+1
+	movff   char_I_dil_change+2, char_I_deco_gas_change+2
+	movff   char_I_dil_change+3, char_I_deco_gas_change+3
+	movff   char_I_dil_change+4, char_I_deco_gas_change+4
+
+	; switch to CCR / pSCR mode
+	movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
+	bsf		lo,DECO_MODE_LOOP_FLAG		; loop flag is set in both, CCR and pSCR mode
+	bcf		lo,DECO_MODE_PSCR_FLAG		; clear pSCR mode flag by default
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	bsf		lo,DECO_MODE_PSCR_FLAG		; YES - set additional flag for pSCR mode
+	movff	lo,char_O_deco_status		; bank safe write-back of char_O_deco_status	
+		
+	return
 
-divemode_option_gaschange:          ; Switch to the better gas
-    movff   better_gas_number,menupos; 1-5
-    bsf     divemode_gaschange      ; Change the gas in the dive mode loop...
-    call    menuview_toggle_reset   ; Reset to zero (Zero=no menuview)
-    bcf     better_gas_available    ; Clear flag immediately
-    return
+	global  setup_gas_registers
+setup_gas_registers:						; with currently breathed gas in WREG (1-5 or 6)
+	movwf	active_gas						; set as current gas
+	movlw	.6
+	cpfseq	active_gas						; gas = gas6 ?
+	bra		setup_gas_registers_15			; NO - load gas 1-5
+	movff	gas6_O2_ratio,char_I_O2_ratio	; copy gas6 O2 ratio to deco engine
+	movff	gas6_He_ratio,char_I_He_ratio	; copy gas6 H2 ratio to deco engine	
+	bra		setup_gas_registers_com			; continue with common part
+setup_gas_registers_15:
+	decf	active_gas,W					; 1-5 -> 0-4
+	lfsr	FSR1,opt_gas_O2_ratio+0
+	movff	PLUSW1,char_I_O2_ratio			; copy gas 1-5 O2 ratio to deco engine
+	lfsr	FSR1,opt_gas_He_ratio+0
+	movff	PLUSW1,char_I_He_ratio			; copy gas 1-5 He ratio to deco engine
+setup_gas_registers_com:	
+	;lfsr	FSR1,opt_gas_type				; commented out - currently not used anywhere
+	;movff	PLUSW1,active_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	char_O_main_status,lo			; working copy of char_O_main_status in bank common
+	bcf		lo,DECO_MODE_PSCR_FLAG			; clear the pSCR-mode flag (may not be set, but never mind)
+	bcf		lo,DECO_MODE_LOOP_FLAG			; clear the loop/CCR-mode flag
+	movff	lo,char_O_main_status			; bank safe write-back of char_O_main_status
+	movf	active_gas,W					; reload WREG with diluent 1-5 or 6 (important!)
+	return
 
-divemode_option0:                   ; Start/Setup Divemode menu
-    call    TFT_clear_divemode_menu ; Clear menu area
-    bcf     menuview
-    extern  do_main_divemenu
-    call    do_main_divemenu
+	global  setup_dil_registers
+setup_dil_registers:						; with currently breathed gas in WREG (1-5 or 6)
+	btfsc	is_bailout						; check if in bailout condition
+	bra		setup_gas_registers				; revert to setting up OC gases in bailout condition
+	movwf	active_gas						; set as current gas
+	movff	WREG,active_diluent				; remember for when switching back from bailout to loop
+	movlw	.6
+	cpfseq	active_gas						; diluent = gas6 ?
+	bra		setup_dil_registers_15			; NO - load diluent 1-5
+	movff	gas6_O2_ratio,char_I_O2_ratio	; copy gas6 O2 ratio to deco engine
+	movff	gas6_He_ratio,char_I_He_ratio	; copy gas6 H2 ratio to deco engine
+	bra		setup_dil_registers_com			; continue with common part
+setup_dil_registers_15:
+	decf	active_gas,W					; 1-5 -> 0-4
+	lfsr	FSR1,opt_dil_O2_ratio+0
+	movff	PLUSW1,char_I_O2_ratio			; copy diluent 1-5 O2 ratio to deco engine
+	lfsr	FSR1,opt_dil_He_ratio+0
+	movff	PLUSW1,char_I_He_ratio			; copy diluent 1-5 He ratio to deco engine
+setup_dil_registers_com:
+	;lfsr	FSR1,opt_dil_type				; commented out - currently not used anywhere
+	;movff	PLUSW1,active_gas_type			; 0=Disabled, 1=First, 2=Normal (there is no type 3 for diluents)
+	movff	char_O_main_status,lo			; working copy of char_O_main_status in bank common
+	bsf		lo,DECO_MODE_LOOP_FLAG			; loop flag is set in both, CCR and pSCR mode
+	bcf		lo,DECO_MODE_PSCR_FLAG			; clear pSCR mode flag by default
+	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
+	bsf		lo,DECO_MODE_PSCR_FLAG			; YES - set additional flag for pSCR mode
+	movff	lo,char_O_main_status			; bank safe write-back of char_O_main_status
+	movf	active_gas,W					; reload WREG with diluent 1-5 or 6 (important!)
+	return
+
+divemode_option_gaschange:					; Switch to the better gas
+	movff	better_gas_number,menupos		; 1-5
+	bsf		divemode_gaschange				; Change the gas in the dive mode loop...
+	call	menuview_toggle_reset			; Reset to zero (Zero=no menuview)
+	bcf		better_gas_available			; Clear flag immediately
+	return
+
+divemode_option0:							; Start/Setup Divemode menu
+	call	TFT_clear_divemode_menu			; Clear menu area
+	bcf	menuview
+	extern	do_main_divemenu
+	call	do_main_divemenu
+
     global  divemode_option0_return
 divemode_option0_return:
 ;    movlw   .1
@@ -1047,7 +1590,7 @@
 	movwf	timeout_counter3        ; timeout for divemode menu
     bsf     divemode_menu           ; Set flag
     clrf    menupos2                ; Clear option counter
-    bra     diveloop_loop4          ; Goto back to diveloop (Menuprocessor trashes STKPTR!)
+    goto	diveloop_loop4          ; Goto back to diveloop (Menuprocessor trashes STKPTR!)
 
 divemode_option4:
 	movlw	d'58'					; two seconds left
@@ -1056,7 +1599,7 @@
 	movwf	apnoe_timeout_counter
     btfss   simulatormode_active	; in simulator mode?
 	return							; No
-divemode_option1:						; Quit simulation mode
+divemode_option1:					; Quit simulation mode
 	banksel	isr_backup
     movlw   low     .1000
     movwf	sim_pressure+0
@@ -1073,7 +1616,7 @@
 	movwf	apnoe_timeout_counter
 	return
 
-divemode_option3:			; minus 1m
+divemode_option3:					; minus 1m
 	banksel	isr_backup
 	movlw	d'100'
 	subwf	sim_pressure+0
@@ -1083,7 +1626,7 @@
 	banksel common
 	return
 
-divemode_option2:			; plus 1m
+divemode_option2:					; plus 1m
 	banksel	isr_backup
 	movlw	d'100'
 	addwf	sim_pressure+0
@@ -1112,13 +1655,14 @@
     addwf   total_divetime_seconds+0,F
     movlw   HIGH    (.5*.60)
     addwfc  total_divetime_seconds+1,F  ; Add 5*60 seconds
-; 1. Add 300xdepth to the Sum of depths registers
+
+	; 1. Add 300xdepth to the Sum of depths registers
     SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
     movlw   LOW     (.5*.60)
     movwf   xA+0
     movlw   HIGH    (.5*.60)
     movwf   xA+1
-    call    mult16x16           		;xA*xB=xC
+    call    mult16x16           		; xA*xB=xC
 
 	movf	xC+0,w
 	addwf	average_depth_hold+0,F
@@ -1127,32 +1671,23 @@
 	movf	xC+2,w
 	addwfc	average_depth_hold+2,F
     movf	xC+3,w
-	addwfc	average_depth_hold+3,F ; Will work up to 9999mbar*60*60*24=863913600mbar
+	addwfc	average_depth_hold+3,F		; Will work up to 9999mbar*60*60*24=863913600mbar
 
-; Do the same for the _total registers (Non-Resettable)
+	; Do the same for the _total registers (Non-Resettable)
 	movf	xC+0,w
 	addwf	average_depth_hold_total+0,F
 	movf	xC+1,w
 	addwfc	average_depth_hold_total+1,F
 	movf	xC+2,w
 	addwfc	average_depth_hold_total+2,F
-    movf	xC+3,w
-	addwfc	average_depth_hold_total+3,F ; Will work up to 9999mbar*60*60*24=863913600mbar
+	movf	xC+3,w
+	addwfc	average_depth_hold_total+3,F; Will work up to 9999mbar*60*60*24=863913600mbar
 
-    movlw   .5
-    movwf   up                          ; counter
-; 1min mode
-divemode_option6_2:
-	movlw   .1
-	movff	WREG,char_I_step_is_1min    ; Force 1min mode
-    clrf    TMR5L
-    clrf    TMR5H                       ; 30,51757813µs/bit in TMR5L:TMR5H
-	call	deco_calc_hauptroutine		; calc_tissue
-    movlb   .1
-    decfsz  up,F                        ; Done?
-    bra     divemode_option6_2          ; Not yet
-    bsf     divemode2                   ; continue divetime
-    goto    menuview_toggle_reset	; and return...
+	movlw	.5							; + 5 minutes
+	movff	WREG,char_I_sim_advance_time; copy to mailbox
+	bsf     divemode2                   ; continue divetime
+	call	restart_deco_engine
+    goto    menuview_toggle_reset		; and return...
 
 divemode_option7:
     ; Store heading for compass view
@@ -1160,6 +1695,14 @@
     movff   compass_heading_shown+1,compass_bearing+1
     bsf     compass_bearing_set         ; set flag
     goto    menuview_toggle_reset       ; Done and return...
+    
+divemode_option8:
+    bsf	    alternative_divelayout		; Set flag for mode
+    bsf	    FLAG_TFT_divemode_mask_alt	; Set flag for mask
+    movlw   .1
+    movwf   menupos3					; For the customviews...
+    call    TFT_ClearScreen				; Clear screen
+    goto    menuview_toggle_reset       ; Done and return...
 
 divemode_simulator_check_limits:
 	; Check limits (150m and 0m)
@@ -1237,12 +1780,14 @@
     movlw   .4
     rcall   check_gas_common        ; With Gas 0-4 in WREG
 ;    bra     check_gas_change_exit
+
 check_gas_change_exit:
-    btfss	better_gas_available	; Is a better gas available
-    bcf     blinking_better_gas     ; No, Clear blinking flag
-    btfss	better_gas_available	; Is a better gas available
+    btfss   better_gas_available	; Is a better gas available
+    bcf     blinking_better_gas		; No, Clear blinking flag
+    btfss   better_gas_available	; Is a better gas available
     clrf    better_gas_number		; No, Clear better_gas_number (For gaslist display)
-    goto    TFT_active_gas_divemode ; Display gas/Setpoint and return...
+    bsf	    FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
+    return
 
 check_gas_common:                   ; With Gas 0-4 in WREG
     btfsc   better_gas_available	; Better Gas already found?
@@ -1253,7 +1798,7 @@
     btfss   PLUSW1,1                ; Test for Bit0 and 1 -> type=3 -> Deco
     return                          ; No
     incf    WREG,W                  ; 1-5
-    cpfseq  active_gas				; is this gas currently selected?
+    cpfseq  active_gas				; is this gas current gas?
     bra     check_gas_common2       ; No
     return                          ; Yes, skip test for active gas
 check_gas_common2:
@@ -1272,7 +1817,7 @@
 	movlw	better_gas_window_neg
 	subwf	lo,W                    ; Change depth-better_gas_window_neg
 	cpfslt	xC+0					; current depth<Change depth-better_gas_window_neg?
-    bra     check_gas_common4       ; Ok, now check the better gas ppO2<opt_ppO2_max
+    bra     check_gas_common4       ; Ok, now check the better gas ppO2<char_I_ppO2_max
     return
 
 check_gas_common3:
@@ -1281,20 +1826,13 @@
 	movlw	better_gas_window_pos
 	addwf	lo,W                    ; Change depth+better_gas_window_pos
 	cpfsgt	xC+0					; current depth>Change depth+better_gas_window_pos?
-    bra     check_gas_common4       ; Ok, now check the better gas ppO2<opt_ppO2_max
+    bra     check_gas_common4       ; Ok, now check the better gas ppO2<char_I_ppO2_max
     return
 
 check_gas_common4:
-    movf    hi,W                    ; 0-4
-    lfsr    FSR1,char_I_deco_N2_ratio
-    movff   PLUSW1,lo               ; N2 ratio into lo
-    lfsr    FSR1,char_I_deco_He_ratio
-    movff   PLUSW1,xB+0             ; He ratio into xB+0
-    movf    xB+0,W
-    addwf   lo,F
-    movlw   .101
-    bcf     STATUS,C
-    subfwb  lo,F                    ; O2 ratio in lo
+    movf    hi,W                    	; gas 0-4 into WREG
+    lfsr    FSR1,char_I_deco_O2_ratio	; load base address char_I_deco_O2_ratio array
+    movff   PLUSW1,lo               	; read O2 ratio from array into lo
 
     SAFE_2BYTE_COPY amb_pressure, xA
 	movlw	d'10'
@@ -1308,35 +1846,35 @@
 	call	mult16x16               ; lo * p_amb/10
 
     ; Check very high ppO2 manually
-	tstfsz	xC+2				; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	return                      ; Done.
+	tstfsz	xC+2					; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
+	return                      	; Done.
     ; Check if ppO2>3,30bar
 	btfsc   xC+1,7
-	return                      ; Done.
+	return                      	; Done.
 
     ; Check for low ppo2
 	movff	xC+0,sub_b+0
 	movff	xC+1,sub_b+1
-	movff   opt_ppO2_min,WREG
-	mullw	d'100'		    ; opt_ppO2_min*100
+	movff   char_I_ppO2_min,WREG
+	mullw	d'100'		    		; char_I_ppO2_min*100
 	movff	PRODL,sub_a+0
 	movff	PRODH,sub_a+1
-	call	subU16		    ; sub_c = sub_a - sub_b
+	call	subU16		    		; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	return                      ; Done (Too low).
+	return                      	; Done (Too low).
 
-;check if we are within our warning thresholds!
+	;check if we are within our warning thresholds!
 	movff	xC+0,sub_a+0
 	movff	xC+1,sub_a+1
-	movff	opt_ppO2_max_deco,WREG	; PPO2 Max for MOD calculation and color coding in divemode
-	addlw   .1                  ; e.g. >1.60
-	mullw	d'100'		    ; opt_ppO2_max*100
+	movff	char_I_ppO2_max_deco,WREG	; ppO2 max for MOD calculation and color coding in divemode
+	addlw   .1                  	; e.g. >1.60
+	mullw	d'100'		    		; char_I_ppO2_max*100
 	movff	PRODL,sub_b+0
 	movff	PRODH,sub_b+1
-	call	subU16		    ; sub_c = sub_a - sub_b
+	call	subU16		    		; sub_c = sub_a - sub_b
 	btfsc	neg_flag
 	bsf		better_gas_available	;=1: A better gas is available and a gas change is advised in divemode
-	return                      ; Done.
+	return                      	; Done.
 
 check_dil_common:                   ; With Dil 0-4 in WREG
     btfsc   better_gas_available	; Better Diluent already found?
@@ -1347,7 +1885,7 @@
     return                          ; Yes, skip inactive diluents for test
 check_dil_common1:
     incf    WREG,W                  ; 1-5
-    cpfseq  active_gas				; is this diluent currently selected?
+    cpfseq  active_gas				; is this the current diluent?
     bra     check_dil_common2       ; No
     return                          ; Yes, skip test for active diluent
 check_dil_common2:
@@ -1373,11 +1911,11 @@
 ;=============================================================================
 ; Check for Auto-SP
 ;
-check_dive_autosp:               ; Check for Auto-SP
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .2                              ; opt_ccr_mode = 2 (Auto SP)?
-    bz      check_dive_autosp2              ; Yes, check
-    return                                  ; No, return for Sensor or Fixed mode
+check_dive_autosp:               	; Check for Auto-SP
+    movff   opt_ccr_mode,WREG       ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    sublw   .2                      ; opt_ccr_mode = 2 (Auto SP)?
+    bz      check_dive_autosp2      ; Yes, check
+    return                          ; No, return for Sensor or Fixed mode
 check_dive_autosp2:
     SAFE_2BYTE_COPY rel_pressure,xA
 	movlw	d'100'
@@ -1385,17 +1923,18 @@
 	clrf	xB+1
 	call	div16x16				; compute depth in full m -> result in xC+0
     ; Check SP2
-    btfsc   sp2_switched            ;=1: This setpoint has been autoselected already
+    btfsc   sp2_switched            ; =1: This setpoint has been autoselected already
     bra     check_dive_autosp3      ; Skip check
     movff   char_I_setpoint_change+1,lo ; Get depth in m
     tstfsz  lo                      ; =0?
-    bra     $+4                     ; No, continue
+    bra     check_dive_autosp2a     ; No, continue
     bra     check_dive_autosp3      ; Skip check
+check_dive_autosp2a:
     decf    lo,W                    ; -1 -> WREG
     cpfsgt  xC+0                    ; Compare with depth
     bra     check_dive_autosp3      ; lower depth, do not switch
     ; auto switch to SP2
-	movff	char_I_setpoint_cbar+1, char_I_const_ppO2	; Use SetPoint
+	movff	char_I_setpoint_cbar+1,char_I_const_ppO2	; Use SetPoint
     rcall   xmit_sp_set_flag
     bsf     sp2_switched            ; Set flag
 check_dive_autosp3:
@@ -1404,13 +1943,14 @@
     bra     check_dive_autosp4      ; Skip check
     movff   char_I_setpoint_change+2,lo ; Get depth in m
     tstfsz  lo                      ; =0?
-    bra     $+4                     ; No, continue
+    bra     check_dive_autosp3a      ; No, continue
     bra     check_dive_autosp4      ; Skip check
+check_dive_autosp3a:
     decf    lo,W                    ; -1 -> WREG
     cpfsgt  xC+0                    ; Compare with depth
     bra     check_dive_autosp4      ; lower depth, do not switch
     ; auto switch to SP3
-	movff	char_I_setpoint_cbar+2, char_I_const_ppO2	; Use SetPoint
+	movff	char_I_setpoint_cbar+2,char_I_const_ppO2	; Use SetPoint
     rcall   xmit_sp_set_flag
     bsf     sp3_switched            ; Set flag
 check_dive_autosp4:
@@ -1419,13 +1959,14 @@
     bra     check_dive_autosp5      ; Skip check
     movff   char_I_setpoint_change+3,lo ; Get depth in m
     tstfsz  lo                      ; =0?
-    bra     $+4                     ; No, continue
+    bra     check_dive_autosp4a     ; No, continue
     bra     check_dive_autosp5      ; Skip check
+check_dive_autosp4a:
     decf    lo,W                    ; -1 -> WREG
     cpfsgt  xC+0                    ; Compare with depth
     bra     check_dive_autosp5      ; lower depth, do not switch
     ; auto switch to SP4
-	movff	char_I_setpoint_cbar+3, char_I_const_ppO2	; Use SetPoint
+	movff	char_I_setpoint_cbar+3,char_I_const_ppO2	; Use SetPoint
     rcall   xmit_sp_set_flag
     bsf     sp4_switched            ; Set flag
 check_dive_autosp5:
@@ -1434,13 +1975,14 @@
     bra     check_dive_autosp6      ; Skip check
     movff   char_I_setpoint_change+4,lo ; Get depth in m
     tstfsz  lo                      ; =0?
-    bra     $+4                     ; No, continue
+    bra     check_dive_autosp5a     ; No, continue
     bra     check_dive_autosp6      ; Skip check
+check_dive_autosp5a:
     decf    lo,W                    ; -1 -> WREG
     cpfsgt  xC+0                    ; Compare with depth
     bra     check_dive_autosp6      ; lower depth, do not switch
     ; auto switch to SP5
-	movff	char_I_setpoint_cbar+4, char_I_const_ppO2	; Use SetPoint
+	movff	char_I_setpoint_cbar+4,char_I_const_ppO2	; Use SetPoint
     rcall   xmit_sp_set_flag
     bsf     sp5_switched            ; Set flag
 check_dive_autosp6:
@@ -1448,7 +1990,7 @@
 
 xmit_sp_set_flag:
     movff   char_I_const_ppO2,WREG
-    call    transmit_setpoint           ; Transmit current setpoint from WREG (in cbar) to external electronics
+    call    transmit_setpoint       ; Transmit current setpoint from WREG (in cbar) to external electronics
     bsf     setpoint_changed        ; Set flag (For profile)
     bsf		event_occured			; Set global event byte
     return
@@ -1457,54 +1999,58 @@
 ; Setup everything to enter divemode.
 ;
 dive_boot_oc:
-    extern  get_first_gas_to_WREG
-    call    get_first_gas_to_WREG           ; Gets first gas (0-4) into WREG
-    incf    WREG
-    movff   WREG,char_I_first_gas           ; Copy for compatibility (1-5)
-    decf    WREG,W			    ; decrement WREG to old value again
-    rcall    setup_gas_registers            ; With WREG=Gas 0-4
-    movlw   .0
-    movff   WREG,char_I_const_ppO2	    ; deactivate CCR-mode deco calc
+    rcall   get_first_gas_to_WREG			; Gets first gas (1-5) into WREG
+	rcall	setup_gas_registers				; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5)
+	rcall	deco_setup_oc_gases				; set-up of gas list for deco calculations (with WREG = gas 1-5)
     return
 
 dive_boot_cc:
     bcf     is_bailout                      ; =1: Bailout
     bcf     setpoint_fallback               ; =1: Fallback to SP1 due to external O2 sensor failure
-    bcf	    blinking_setpoint               ; Reset blinking SP flag
-    ; load default setpoint
-    movff   char_I_setpoint_cbar+0,char_I_const_ppO2    ; Always start with SP1
-    movff   char_I_const_ppO2,WREG
+    bcf		blinking_setpoint               ; Reset blinking SP flag
 
-    call    transmit_setpoint           ; Transmit current setpoint from WREG (in cbar) to external electronics
+	; revoke sensors from usage if they do not have a valid calibration
+	bsf		use_O2_sensor1
+	bsf		use_O2_sensor2
+	bsf		use_O2_sensor3
+	btfss	sensor1_calibrated_ok
+	bcf		use_O2_sensor1
+	btfss	sensor2_calibrated_ok
+	bcf		use_O2_sensor2
+	btfss	sensor3_calibrated_ok
+	bcf		use_O2_sensor3
 	
-    ; check if in sensor mode
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     dive_boot_cc2                   ; No, Skip
+	; In pSCR mode, only settings 0 (calculated ppO2) and 1 (ppO2 from sensors) are defined.
+	; In case we still have 3 (auto SP) selected out of previous ccr mode, we reset to 0.
+	btfss	FLAG_pscr_mode
+	bra		dive_boot_cc_1
+	movff   opt_ccr_mode,WREG				; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    sublw   .2								; opt_ccr_mode = 1 (Auto SP)?
+    bnz     dive_boot_cc_1
+	movlw	.0
+	movff	WREG,opt_ccr_mode
 
-    ; get initial setpoint from all sensors in use
-    call   compute_ppo2                    ; compute mv_sensorX and ppo2_sensorX arrays
-    bsf    voting_logic_sensor1            ; voting logic not used while computing initial setpoint	
-    bsf    voting_logic_sensor2
-    bsf    voting_logic_sensor3
-    call   divemode_setup_sensor_values     ; setup sensor values
-    tstfsz sensor_setpoint		    ; if no sensor is in use, sensor_setpoint will be zero
-    movff  sensor_setpoint,char_I_const_ppO2; overwrite default only if we have a valid sensor_setpoint 
-
-dive_boot_cc2:
+dive_boot_cc_1:
     bsf     setpoint_changed                ; Set flag (For profile)
     bcf     sp2_switched                    ; =1: This setpoint has been autoselected already
     bcf     sp3_switched                    ; =1: This setpoint has been autoselected already
     bcf     sp4_switched                    ; =1: This setpoint has been autoselected already
     bcf     sp5_switched                    ; =1: This setpoint has been autoselected already
 
-    extern  get_first_dil_to_WREG
-    call    get_first_dil_to_WREG           ; Gets first gas (0-4) into WREG
-    incf    WREG
-    movff   WREG,char_I_first_gas           ; Copy for compatibility
-    decf    WREG,W
-    rcall   setup_dil_registers             ; With WREG=Gas 0-4
-    goto  calc_deko_divemode_sensor        ; External sensor stuff (and return!)
+    rcall   get_first_dil_to_WREG           ; get first gas (1-5) into WREG
+    rcall   setup_dil_registers				; set-up of gas parameters for currently breathed gas (with WREG = current gas 1-5)
+	rcall	deco_setup_cc_diluents			; set-up of gas list for deco calculations (with WREG = current gas 1-5)
+
+	; Start with SP1 (CCR) or 0 (pSCR) as default.
+	; If in sensor mode, this value will be overwritten by calc_deko_divemode_sensor
+	clrf	WREG							; preload WREG with setpoint value 0 for pSCR calculated
+	btfss	FLAG_ccr_mode					; are we in CCR mode?
+	bra		dive_boot_cc_2					; NO  - keep preloaded value
+	movff	char_I_setpoint_cbar+0,WREG		; YES - get value of setpoint 1
+dive_boot_cc_2:
+	movff	WREG,char_I_const_ppO2			; write setpoint to deco engine
+	call	transmit_setpoint				; transmit current setpoint from WREG (in cbar) to external electronics
+	goto	calc_deko_divemode_sensor		; read & process sensor data (and return)
 
 diveloop_boot:
 	call	restart_set_modes_and_flags
@@ -1515,9 +2061,45 @@
 	clrf	WREG
 	movff	WREG,max_pressure+0				; clear some variables
 	movff	WREG,max_pressure+1
+	
+	; init in invalid data state
+	clrf	WREG							; set WREG to 0
+	bsf		WREG,int_invalid_flag			; set invalid flag
+	bsf		WREG,int_is_zero				; set zero flag
+	movff	WREG,int_O_tank_pres_need+1		; Set flags for tank pressure needs = 0 before p2_deco.c
+	movff	WREG,int_O_tank_pres_need+3		; can do it. If this is not done here and the gas needs
+	movff	WREG,int_O_tank_pres_need+5		; custom view is shown before p2_deco.c completes the first
+	movff	WREG,int_O_tank_pres_need+7		; deco calculation, some rubbish numbers from last dive of
+	movff	WREG,int_O_tank_pres_need+9		; simulation may be shown
+	
+	; configure the deco engine:
+	movff	char_O_deco_status,WREG			; bank-safe copy
+	bsf		WREG,DECO_STATUS_0_FLAG			; configure init ...
+	bsf		WREG,DECO_STATUS_1_FLAG			; ... state,
+	bcf		WREG,DECO_PLAN_FLAG				; normal plan mode,
+	bsf		WREG,DECO_CNS_FLAG				; enable CNS calculation (CNS at end of dive),
+	bcf		WREG,DECO_VOLUME_FLAG			; disable gas volume calculation, and
+	bcf		WREG,DECO_ASCENT_FLAG			; disable delayed ascent calculation
+	movff	WREG,char_O_deco_status			; bank-safe copy back
+	
+	clrf	WREG
+	movff	WREG,char_O_main_status			; reset char_O_main_status
 
+	movlw	deco_distance
+	movff	WREG,char_I_deco_distance
+	movff	opt_last_stop,char_I_depth_last_deco
+	movff	opt_GF_low,char_I_GF_Low_percentage
+	movff	opt_GF_high,char_I_GF_High_percentage
+	
     bcf     use_agf                         ; Start with normal GF set
     bcf     divemode_menu                   ; clear divemode menu flag
+    
+    bcf	    alternative_divelayout			; Start with default layout
+	
+	bcf		blinking_depth_prev				; clear flag for blinking depth	## NEW BUGFIX
+	bcf		blinking_depth_warning			; clear flag for blinking depth	## NEW BUGFIX
+	bcf		blinking_depth_toggle			; clear flag for blinking depth	## NEW BUGFIX
+	
 	movlw	d'1'
 	movwf	apnoe_max_pressure+0
 	clrf	apnoe_max_pressure+1
@@ -1526,66 +2108,65 @@
 	clrf	apnoe_mins
 	clrf	divemins+0
 	clrf	divemins+1
-
-	bcf        blinking_depth_prev                ; clear flag for blinking depth    ## NEW BUGFIX
-	bcf        blinking_depth_warning         ; clear flag for blinking depth    ## NEW BUGFIX
-	bcf        blinking_depth_toggle            ; clear flag for blinking depth    ## NEW BUGFIX
     
-; Copy date and time for logbook
+	; Copy date and time for logbook
     movff   year,start_year
     movff   month,start_month
     movff   day,start_day
     movff   hours,start_hours
     movff   mins,start_mins
     
-    movff   int_O_CNS_fraction+0,CNS_start+0
-    movff   int_O_CNS_fraction+1,CNS_start+1   ; Save CNS value at beginning of dive
-    movff   char_O_gradient_factor,GF_start    ; Save GF value at  beginning of dive
+    movff   int_O_CNS_fraction+0,CNS_start+0	; save CNS value at beginning of dive
+    movff   int_O_CNS_fraction+1,WREG			; get high byte to WREG
+	bcf		WREG,int_warning_flag				; clear warning flag bit
+	movff	WREG,CNS_start+1					; move high byte on
+    movff   int_O_gradient_factor+0,GF_start	; save GF value at beginning of dive (only lower byte used for value)
 
-
-    bcf     no_more_divesecs            ; =1: Do no longer show seconds in divemode
+    bcf     no_more_divesecs            		; =1: do no longer show seconds in divemode
 	bcf		divemode_menu_active
     clrf    menupos
-    clrf    menupos2                    ; Reset to zero (Zero=no premenu or simulator task)
-
+    clrf    menupos2                    		; Reset to zero (Zero=no premenu or simulator task)
+	bsf		sensors_agree						; init of sensors disagree warning system
+	
     btfsc   FLAG_ccr_mode
     bra	    diveloop_boot_cc
     btfsc   FLAG_pscr_mode
     bra	    diveloop_boot_cc
     rcall   dive_boot_oc
     bra	    diveloop_boot_cont
+
 diveloop_boot_cc:
-    rcall dive_boot_cc
+    rcall	dive_boot_cc
+	
 diveloop_boot_cont:
-    
     ; Copy opt_dil_types into backup (For "lost gas" feature)
-    movff   opt_dil_type+0,opt_dil_type_backup+0    ; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+1,opt_dil_type_backup+1    ; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+2,opt_dil_type_backup+2    ; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+3,opt_dil_type_backup+3    ; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+4,opt_dil_type_backup+4    ; 0=Disabled, 1=First, 2=Normal
+    movff   opt_dil_type+0,opt_dil_type_backup+0    				; 0=Disabled, 1=First, 2=Normal
+    movff   opt_dil_type+1,opt_dil_type_backup+1    				; 0=Disabled, 1=First, 2=Normal
+    movff   opt_dil_type+2,opt_dil_type_backup+2    				; 0=Disabled, 1=First, 2=Normal
+    movff   opt_dil_type+3,opt_dil_type_backup+3    				; 0=Disabled, 1=First, 2=Normal
+    movff   opt_dil_type+4,opt_dil_type_backup+4    				; 0=Disabled, 1=First, 2=Normal
     ; Copy opt_gas_types into backup (For "lost gas" feature)
-    movff   opt_gas_type+0,opt_gas_type_backup+0    ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+1,opt_gas_type_backup+1    ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+2,opt_gas_type_backup+2    ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+3,opt_gas_type_backup+3    ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+4,opt_gas_type_backup+4    ; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+0,opt_gas_type_backup+0    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+1,opt_gas_type_backup+1    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+2,opt_gas_type_backup+2    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+3,opt_gas_type_backup+3    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+4,opt_gas_type_backup+4   					; 0=Disabled, 1=First, 2=Travel, 3=Deco
     ; Also copy change depths into backup (For "lost gas" feature)
-    movff   char_I_dil_change+0,opt_dil_change_backup+0	; Gas change depths Diluents
-    movff   char_I_dil_change+1,opt_dil_change_backup+1	; Gas change depths Diluents
-    movff   char_I_dil_change+2,opt_dil_change_backup+2	; Gas change depths Diluents
-    movff   char_I_dil_change+3,opt_dil_change_backup+3	; Gas change depths Diluents
-    movff   char_I_dil_change+4,opt_dil_change_backup+4	; Gas change depths Diluents
+    movff   char_I_dil_change+0,opt_dil_change_backup+0				; Gas change depths Diluents
+    movff   char_I_dil_change+1,opt_dil_change_backup+1				; Gas change depths Diluents
+    movff   char_I_dil_change+2,opt_dil_change_backup+2				; Gas change depths Diluents
+    movff   char_I_dil_change+3,opt_dil_change_backup+3				; Gas change depths Diluents
+    movff   char_I_dil_change+4,opt_dil_change_backup+4				; Gas change depths Diluents
     ; Also copy change depths into backup (For "lost gas" feature)
-    movff   opt_OC_bail_gas_change+0,opt_OC_bail_gas_change_backup+0 ; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+1,opt_OC_bail_gas_change_backup+1 ; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+2,opt_OC_bail_gas_change_backup+2 ; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+3,opt_OC_bail_gas_change_backup+3 ; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+4,opt_OC_bail_gas_change_backup+4 ; Gas change depths OC/Bailout
+    movff   opt_OC_bail_gas_change+0,opt_OC_bail_gas_change_backup+0; Gas change depths OC/Bailout
+    movff   opt_OC_bail_gas_change+1,opt_OC_bail_gas_change_backup+1; Gas change depths OC/Bailout
+    movff   opt_OC_bail_gas_change+2,opt_OC_bail_gas_change_backup+2; Gas change depths OC/Bailout
+    movff   opt_OC_bail_gas_change+3,opt_OC_bail_gas_change_backup+3; Gas change depths OC/Bailout
+    movff   opt_OC_bail_gas_change+4,opt_OC_bail_gas_change_backup+4; Gas change depths OC/Bailout
 
 	clrf	better_gas_number           ; Clear better gas register
 
-	bcf		show_safety_stop			;=1: Show the safety stop
+	bcf		show_safety_stop			; =1: Show the safety stop
 	clrf	safety_stop_countdown		; Clear count-down
 
  	clrf	samplesecs
@@ -1598,9 +2179,9 @@
 	clrf	average_depth_hold_total+1
 	clrf	average_depth_hold_total+2
 	clrf	average_depth_hold_total+3	; Clear Non-Resettable Average
-        rcall	reset_average1				; Reset the resettable average depth
-        bcf	decostop_active
-	bcf	better_gas_available        ;=1: A better gas is available and a gas change is advised in divemode
+    rcall	reset_average1				; Reset the resettable average depth
+    bcf		decostop_active
+	bcf		better_gas_available        ; =1: A better gas is available and a gas change is advised in divemode
 	call	ghostwriter_short_header	; Write short header with divenumber into profile memory
 
     btfsc   simulatormode_active
@@ -1613,17 +2194,17 @@
 diveloop_boot_1:
     ; Simulator mode: Surface pressure is 1bar.
     movlw   LOW .1000
-	movff	WREG,int_I_pres_surface+0   ; LOW copy surfacepressure to deco routine
+	movff	WREG,int_I_pres_surface+0   	; LOW copy surfacepressure to deco routine
     movlw   HIGH .1000
-	movff	WREG,int_I_pres_surface+1   ; HIGH copy surfacepressure to deco routine
+	movff	WREG,int_I_pres_surface+1   	; HIGH copy surfacepressure to deco routine
 
 diveloop_boot_2:
 	SAFE_2BYTE_COPY	temperature,minimum_temperature ; Reset Min-Temp registers
 
 ; Init profile recording parameters	
-	movff	samplingrate,samplesecs_value            ; to avoid EEPROM access in the ISR
+	movff	samplingrate,samplesecs_value	; to avoid EEPROM access in the ISR
 	movlw	div_temperature
-	movwf	divisor_temperature         ; load divisors for profile storage
+	movwf	divisor_temperature         	; load divisors for profile storage
 	movlw	div_deco
 	movwf	divisor_deco				
 	movlw	div_gf
@@ -1637,14 +2218,16 @@
 	movlw	div_tank
 	movwf	divisor_tank
 
-	btfss	FLAG_apnoe_mode				; In Apnoe mode?
+	btfss	FLAG_apnoe_mode					; In Apnoe mode?
 	bra		divemode_boot1
-; Overwrite some parameters in Apnoe mode....
+
+	; Overwrite some parameters in Apnoe mode....
 	movlw	samplingrate_apnoe
-	movwf	samplesecs_value			; to avoid EEPROM access in the ISR
+	movwf	samplesecs_value				; to avoid EEPROM access in the ISR
+
 divemode_boot1:
-    bsf     ccr_diluent_setup		; For CCR mode (Required to have better gas working)
-    btfsc   FLAG_ccr_mode               ; =1: CCR mode (Fixed ppO2 or Sensor) active
+    bsf     ccr_diluent_setup				; For CCR mode (Required to have better gas working)
+    btfsc   FLAG_ccr_mode               	; =1: CCR mode (Fixed ppO2 or Sensor) active
     bra     divemode_boot2
     btfsc   FLAG_pscr_mode
     bra     divemode_boot2
@@ -1653,84 +2236,115 @@
     movlw   .0
     movwf   divisor_ppo2_sensors
     
-    bcf     ccr_diluent_setup		; For OC mode (Required to have better gas working)
+    bcf     ccr_diluent_setup				; For OC mode (Required to have better gas working)
+
 divemode_boot2:
-
 	bcf		LEDg
 	bcf		LEDr
 	bcf		realdive
-	btfss	simulatormode_active		; do not disable in simulator mode!					
-	call	disable_rs232				; Disable RS232
-    btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    call	enable_rs232				; Also sets to speed_normal ...
+	btfss	simulatormode_active			; do not disable in simulator mode!					
+	call	disable_rs232					; Disable RS232
+    btfsc   enable_screen_dumps         	; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+    call	enable_rs232					; Also sets to speed_normal ...
     ; Reset divetime seconds
-    movlw   .2                          ; Start at 2seconds
+    movlw   .2                          	; Start at 2seconds
     movwf   total_divetime_seconds+0
     clrf    total_divetime_seconds+1
     movwf   divesecs
     movwf   apnoe_secs
-    bsf	    divemode2                   ; displayed divetime is running (Divetime starts HERE)
-    
-    return								; Done with divemode boot
+    bsf	    divemode2                   	; displayed divetime is running (Divetime starts HERE)
+    return									; Done with divemode boot
 
 divemode_check_for_warnings:
-    movlw   .2
-    cpfsgt  warning_counter						; only two warnings active?
-    bra     divemode_check_for_warnings1        ; Yes, update every second
+    movlw   .1				    			; One warning at a time in alt. layout mode
+    btfss   alternative_divelayout  
+    movlw   .2				    			; Two warnings at a time in default layout mode
+    cpfsgt  warning_counter		    		; only one (or two) warnings active?
+    bra     divemode_check_for_warnings1    ; Yes, update every second
 
-    btfss   secs,0                      ; Every two seconds...
+    btfss   secs,0                      	; Every two seconds...
     return
-    btfss   secs,1                      ; Every four seconds...
+    btfss   secs,1                      	; Every four seconds...
     return
 
 divemode_check_for_warnings1:
-	movf	warning_counter_backup,W
-	cpfseq	warning_counter						; warning_counter_backup = warning_counter?
-	call	TFT_clear_warning_text              ; No, clear all warnings
-	movff	warning_counter,warning_counter_backup	; copy warning_counter
-
-	bcf		warning_active				; Clear flag
+	bcf		warning_active						; Clear flag
 	clrf	warning_counter						; Clear counter
 
+	; warnings sorted by severity, highest severity first
+	
     ; Warnings for all modes
     call	check_warn_battery                  ; Check if the battery level should be displayed/warned
     call    check_divetimeout                   ; Not actually a warning. Check and show the divemode timeout
 
-	btfsc	FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
+	btfsc	FLAG_apnoe_mode             		; Done for Apnoe or Gauge mode
     bra     divemode_check_for_warnings2
-	btfsc	FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
+	btfsc	FLAG_gauge_mode             		; Done for Apnoe or Gauge mode
 	bra     divemode_check_for_warnings2
 
     ; Warnings only in deco modes
-    	rcall	check_ppO2							; check ppO2 and displays warning, if required
+    rcall	check_ppO2							; check ppO2 and displays warning, if required
 	
-	rcall	check_cns_violation					; Check CNS value and display it, if required
+	btfss	sensors_agree						; are the sensor values within the threshold range?
+	rcall	check_warn_sensors_disagree			; NO  - further evaluate
+	btfsc	sensors_agree						; are the sensor values within the threshold range?
+	bcf		sensor_warning						; YES - revoke memorized sensor warning
+
+	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
+	btfsc	WREG,outside_warning_lock			; are we outside of the ZH-L16 model?
+	rcall	warn_outside						; YES
+	
+	rcall	check_IBCD							; check for IBCD attention or warning
+	
 	btfsc	decostop_active						; In deco mode?
-	rcall	check_and_store_gf_violation		; Yes, Sets warnings, if required
-	btfsc	decostop_active						; In deco mode?
-    call    TFT_ftts                            ; Show @+x time
+	rcall	check_and_store_gf_violation		; Yes, sets warnings, if required
+
+	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
+	btfsc	WREG,mbubble_warning_lock			; do we have a microbubbles warning?
+	rcall	warn_mbubbles						; YES
+	
+	rcall	check_cns_violation					; Check CNS value and display it, if required	
+	
+	;btfsc	decostop_active						; In deco mode?
+	rcall	check_gas_needs						; show gas needs warning if any gas need is > threshold
+
+	rcall	check_eod_cns_violation				; Check CNS values for end-of-dive and display warning, if required
+	
+    call    TFT_display_ftts					; Show @+x time
+	
     btfsc   use_agf                             ; In aGF mode?
     rcall   warn_agf                            ; Yes, show a warning for it
+
     btfsc   setpoint_fallback                   ; =1: Fallback to SP1 due to external O2 sensor failure
     rcall   warn_fallback                       ; Show the warning
-
+	
 divemode_check_for_warnings2:
 ; Display the warning icon?
-	btfsc	warning_active				; Any warning active?
-	call	TFT_divemode_warning				; Yes
-	btfss	warning_active				; Any warning active?
-	call	TFT_divemode_warning_clear			; No, clear warning icon
+	btfsc	warning_active						; Any warning active?
+	bsf	FLAG_TFT_divemode_warning				; Yes
+	btfss	warning_active						; Any warning active?
+	bsf	FLAG_TFT_divemode_warning_clear			; No, clear warning icon
 
 ; Setup warning_page number
     incf    warning_page,F
+    movf    warning_page,W
     bcf     STATUS,C
-    rlcf    warning_page,W                      ; *2
+    btfss   alternative_divelayout
+    rlcf    warning_page,W                      ; *2 (But only in standard layout mode)
     cpfsgt  warning_counter                     ; > warning_counter
     clrf    warning_page                        ; No, clear
-
+	
+; Clear both rows of warnings if there is nothing to show at all
+	tstfsz	warning_counter						; any warnings?
+	bra	divemode_check_for_warnings3			; YES - look if second row needs to be cleared
+	bsf	FLAG_TFT_dive_warning_text_clear		; Set flag
+	return
+divemode_check_for_warnings3:
+	
+	
 ; Clear 2nd row of warnings if there is nothing to show (on this page)
     btfss   second_row_warning                  ; =1: The second row contains a warning
-    call    TFT_clear_warning_text_2nd_row      ; No, clear this row
+    bsf	    FLAG_TFT_dive_warning_text_clr2	; Set flag for 2nd row
     return                                      ; Done.
 
     global  check_warn_battery
@@ -1738,210 +2352,192 @@
     movff   batt_percent,lo
     movlw	battery_show_level+1
     cpfslt	lo
-    return                              ; No Display, no warning
+    return                              		; No Display, no warning
     ; Display Battery, but warn?
     movff	batt_percent,lo
     movlw	color_code_battery_low+1
-    cpfsgt	lo                          ;
-    bsf		warning_active		; Set Warning flag
+    cpfsgt	lo                          		;
+    bsf		warning_active						; Set Warning flag
     
     movlw   .4
-    cpfseq  menupos3            ; battery shown in Custom View 4?
-    bra     check_warn_battery2	; No
-    return                      ; Yes, do not show twice (in custom view and in warning area)
+    cpfseq  menupos3            				; battery shown in Custom View 4?
+    bra     check_warn_battery2					; No
+    return                     					; Yes, do not show twice (in custom view and in warning area)
 check_warn_battery2:
-    incf	warning_counter,F		    ; increase counter
-    goto	TFT_update_batt_percent_divemode    ; Show percent (And return)
+    incf	warning_counter,F					; increase counter
+    goto	TFT_update_batt_percent_divemode	; Show percent (And return)
 
 check_divetimeout:
     btfsc		divemode2				
-    return                              ; displayed divetime is not running
-	incf	warning_counter,F			; increase counter
-    goto    TFT_divetimeout             ; Show timeout counter  (and return)
+    return										; displayed divetime is not running
+	incf	warning_counter,F					; increase counter
+    goto    TFT_divetimeout						; Show timeout counter  (and return)
 
 
-check_ppO2:							    ; check current ppO2 and display warning if required
-    btfss	FLAG_pscr_mode
-    bra		check_ppO2_non_pscr		; Non-PSCR modes...
-    	; in PSCR mode
-    btfsc	is_bailout
-    bra		check_ppO2_non_pscr		; Non-PSCR modes...
-	
-    call		compute_pscr_ppo2		; pSCR ppO2 into sub_c:2
-    movff		sub_c+0,xA+0
-    movff		sub_c+1,xA+1
-    movlw		d'100'
-    movwf		xB+0
-    clrf		xB+1
-    call		div16x16				; /100
-    tstfsz      xC+1                    ; Is ppO2 > 2.55bar ?
-    setf        xC+0                    ; yes: bound to 2.55... better than wrap around.
-    movff		xC+0,char_I_actual_ppO2	; copy last ppO2 to buffer register (for pSCR CNS)
-    clrf		xC+2
-    clrf		xC+3
-    movff		sub_c+0,xC+0
-    movff		sub_c+1,xC+1			; copy for comptibility
-    bra			check_ppO2_check
-
-check_ppO2_non_pscr:    
-    SAFE_2BYTE_COPY amb_pressure, xA
-    movlw	d'10'
-    movwf	xB+0
-    clrf	xB+1
-    call	div16x16				; xC=p_amb/10
-
-    movff	xC+0,xA+0
-    movff	xC+1,xA+1
-    movff   char_I_O2_ratio,xB+0    ; =O2 ratio
-    clrf	xB+1
-    call	mult16x16               ; char_I_O2_ratio * p_amb/10
-
-check_ppO2_check:
-    ; Check very high ppO2 manually
-	tstfsz	xC+2				; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	bra		check_ppO2_1		; Yes, display Value!
-    ; Check if ppO2>3,30bar
-	btfsc   xC+1,7
-	bra     check_ppO2_1		; Yes!
-
-    ; Check for low ppo2
-    movff	xC+0,sub_b+0
-	movff	xC+1,sub_b+1
-    movff   opt_ppO2_min,WREG
-	mullw	d'100'				; opt_ppO2_min*100
-	movff	PRODL,sub_a+0
-	movff	PRODH,sub_a+1
-	call	subU16
-	btfsc	neg_flag
-	bra     check_ppO2_0        ; Not too low
-    ; ppO2 low
-    rcall   check_ppo2_display  ; display if not already shown in custom view
-	movlw	d'4'				; Type of Alarm (ppO2 low)
-	movwf	AlarmType			; Copy to Alarm Register
-	bsf		event_occured		; Set Event Flag
-	bsf		warning_active		; Set Warning flag
-	return						; Done.
-
-check_ppO2_0:
-    ; Check if ppO2 should be displayed
-    movlw   .0
-    TSTOSS  opt_showppo2		; 0=no, 1=always show
-    movlw   ppo2_display_high
-	mullw	d'100'				; ppo2_display_high*100
-	movff	PRODL,sub_a+0
-	movff	PRODH,sub_a+1
-	call	subU16
-	btfss	neg_flag
-	return						; No Display, no warning
-    ; Display ppO2, but warn?
-    rcall   check_ppo2_display  ; display if not already shown in custom view
-
-;check if we are within our warning thresholds!
-	movff	xC+0,sub_b+0
-	movff	xC+1,sub_b+1
-		;active_gas_type -> 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
-	movff   active_gas_type,xA+0	; xA+0 used as temp here -> holds type
-	movff   opt_ppO2_max_deco,xB+1	; xB+1 used as temp here
-	movlw	.3			
-	cpfseq	xA+0			; Deco?
-	movff   opt_ppO2_max,xB+1	; No, overwrite with travel/bottom max
-	movf	xB+1,W			; Result in WREG
-	mullw	d'100'				; opt_ppO2_max*100
-	movff	PRODL,sub_a+0
-	movff	PRODH,sub_a+1
-	infsnz	sub_a+0,F		
-	incf	sub_b+1,F		
-	call	subU16					
-	btfss	neg_flag
-	return						; Done. Not too high
-	movlw	d'5'				; Type of Alarm (ppO2 high)
-	movwf	AlarmType			; Copy to Alarm Register
-	bsf		event_occured		; Set Event Flag
-	bsf		warning_active		; Set Warning flag
-	return						; Done.
-
-check_ppO2_1:                   ; ppO2 very high
-    rcall   check_ppo2_display  ; display if not already shown in custom view
-	movlw	d'5'				; Type of Alarm
-	movwf	AlarmType			; Copy to Alarm Register
-	bsf		event_occured		; Set Event Flag
-	bsf		warning_active		; Set Warning flag
-	return						; Done.
-
-check_ppo2_display:
+check_ppO2:
+	btfsc   FLAG_ccr_mode 				; are we in CCR mode?
+	bra		check_ppO2_loop				; YES
+	btfsc	FLAG_pscr_mode				; are we in pSCR mode?
+	bra		check_ppO2_loop				; YES
+	bra		check_ppO2_oc_1				; NO  - neither CCR nor pSCR
+check_ppO2_loop:
+	btfsc	is_bailout					; in bailout?
+	bra		check_ppO2_oc_1				; YES - continue with OC
+	movff	int_O_pure_ppO2+1,hi		; NO  - get upper part of int_O_pure_ppO2
+	btfsc	hi,int_warning_flag			; 		ppO2 of the pure diluent to low or high? 
+	rcall	check_ppO2_d				; 		YES - show warning and return on next line
+	bra		check_ppO2_oc_2				;		      skip pre-warning threshold test on breathed ppO2
+check_ppO2_oc_1:
+	movff	int_O_breathed_ppO2+1,WREG	; get upper part of int_O_breathed_ppO2
+	btfsc	WREG,int_prewarning_flag	; breathed ppO2 just above pre-warning threshold?
+	bra		check_ppo2_display			; YES - show ppO2
+check_ppO2_oc_2:
+	movff	int_O_breathed_ppO2+1,WREG	; get upper part of int_O_breathed_ppO2 (perhaps again)
+	btfsc	WREG,int_low_flag			; breathed ppO2 to low?
+	bra		check_ppO2_low				; YES - record the warning and show ppO2
+	btfsc	WREG,int_high_flag			; breathed ppO2 to high?
+	bra		check_ppO2_high				; YES - record the warning and show ppO2
+	TSTOSS  opt_showppo2				; show ppO2 anyhow? (0 = no, 1 = show always)
+	return								; NO  - no warnings, no show
+	bra		check_ppo2_display			; YES - just show ppO2
+check_ppO2_low:
+    movlw	d'4'						; set type of alarm (ppO2 low)
+	bra		check_ppO2_common  			; continue with common part
+check_ppO2_high:
+	movlw	d'5'						; set type of alarm (ppO2 high)
+check_ppO2_common:
+	movwf	AlarmType					; copy alarm type to alarm register
+	bsf		event_occured				; set event   flag
+	bsf		warning_active				; set warning flag
+	btfsc	is_bailout					; are we in bailout?
+	bra		check_ppo2_display			; YES - skip CCR/pSCR checks
+	btfsc   FLAG_ccr_mode 				; are we in CCR mode?
+	return								; YES - no extra warning required
+	btfsc	FLAG_pscr_mode				; are we in pSCR mode?
+	return								; YES - no extra warning required
+check_ppo2_display:						; display warning if ppO2 is not already shown in custom view
     movlw   .9
-    cpfseq  menupos3            ; ppO2 shown in Custom View 9?
-    bra     check_ppO2_a        ; No
-    return                      ; Yes, do not show twice (in custom view and in warning area)
+    cpfseq  menupos3            		; ppO2 shown in Custom View 9?
+    bra     check_ppO2_a        		; No
+    return                      		; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_a:
     movlw   .11
-    cpfseq  menupos3            ; ppO2 shown in Custom View 11?
-    bra     check_ppO2_b        ; No
-    return                      ; Yes, do not show twice (in custom view and in warning area)
+    cpfseq  menupos3            		; ppO2 shown in Custom View 11?
+    bra     check_ppO2_b        		; No
+    return                      		; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_b:
     movlw   .12
-    cpfseq  menupos3            ; ppO2 shown in Custom View 12?
-    bra     check_ppO2_c        ; No
-    return                      ; Yes, do not show twice (in custom view and in warning area)
+    cpfseq  menupos3            		; ppO2 shown in Custom View 12?
+    bra     check_ppO2_c        		; No
+    return                      		; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_c:
     movlw   .10
-    cpfseq  menupos3            ; ppO2 shown in Custom View 10?
-    bra     check_ppO2_d        ; No
-    return                      ; Yes, do not show twice (in custom view and in warning area)
+    cpfseq  menupos3            		; ppO2 shown in Custom View 10?
+    bra     check_ppO2_d				; No
+    return                      		; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_d:    
-    incf	warning_counter,F	; increase counter
-    goto    TFT_display_ppo2	; Show ppO2  (and return)
+    incf	warning_counter,F			; increase counter
+    goto    TFT_display_ppo2			; show breathed gas or diluent ppO2 warning (and return)
+	
 
     global  check_cns_violation
 check_cns_violation:
     ; Check if CNS should be displayed
-    movff   int_O_CNS_fraction+1,lo		; copy into bank1
-    tstfsz  lo                          ; >255% ?
-    bra     check_cns_violation2        ; Yes
-	movff	int_O_CNS_fraction+0,lo		; copy into bank1
-
-	movlw	cns_warning_high			; cns_warning_high
-	subwf	lo,W
-	btfsc	STATUS,C
-	bsf		warning_active              ; Set Warning flag
+    movff   int_O_CNS_fraction+1,WREG	; get high byte
+    btfsc	WREG,int_warning_flag		; warning flag set?
+    bra     check_cns_violation2		; Yes - issue warning
+	btfsc	WREG,int_prewarning_flag	; pre-warning flag set?
+	bra		display_cns_violation		; YES - just display CNS
+	return                              ; No  - no display, no warning
+check_cns_violation2:
+	bsf		warning_active				; Set Warning flag
+display_cns_violation:					; Show CNS if not shown in the custom view
+	movlw   .11
+	cpfseq  menupos3					; CNS shown in Custom View?
+	bra     display_cns_violation2      ; No
+    return								; Yes, do not show twice (in custom view and in warning area)
+display_cns_violation2:
+	movlw   .8
+	cpfseq  menupos3					; CNS shown through Custom View 8 right now?
+	bra     display_cns_violation3      ; No
+    return								; Yes, do not show twice (in custom view and in warning area)
+display_cns_violation3:
+	incf	warning_counter,F	    	; increase counter
+    goto	TFT_display_cns				; Show CNS  (and return)
 
-	movlw	cns_display_high			; cns_display_high
-	subwf	lo,W
-	btfss	STATUS,C
-	return                              ; No Display, no warning
-    ; Display CNS
-	bra	display_cns_violation
-check_cns_violation2:
-        bsf		warning_active      ; Set Warning flag
-display_cns_violation:			    ; Show CNS if not shown in the custom view
-        movlw   .11
-	cpfseq  menupos3		    ; CNS shown in Custom View?
-	bra     display_cns_violation2      ; No
-        return				    ; Yes, do not show twice (in custom view and in warning area)
-display_cns_violation2:
-	incf	warning_counter,F	    ; increase counter
-        goto	TFT_display_cns		    ; Show CNS  (and return)
-    
 	
+    global  check_eod_cns_violation		; check end-of-dive CNS values
+check_eod_cns_violation:
+	movff   int_O_CNS_fraction+1,WREG	; get high-byte of current CNS value
+    btfsc	WREG,int_warning_flag       ; current CNS value in warning state?
+    return								; YES - inhibit eod warning if current CNS is already in warning
+    movff   int_O_normal_CNS_fraction+1,WREG
+	btfsc	WREG,int_invalid_flag		; flag for invalid value set?
+	bra		check_eod_cns_violation1	; YES - continue with checking the other CNS value
+    btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
+    bra     check_eod_cns_violation2	; 		YES - issue warning
+check_eod_cns_violation1:				; 		NO  - continue with checking the other CNS value
+    movff   int_O_alternate_CNS_fraction+1,WREG
+	btfsc	WREG,int_invalid_flag		; flag for invalid value set?
+	return								; YES - done with CNS checking
+	btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
+    bra     check_eod_cns_violation2	; 		Yes - issue warning
+	return								; 		NO  - done with CNS checking
+check_eod_cns_violation2:				; YES - issue warning
+	bsf		warning_active				; set Warning flag
+	movlw   .8							; issue textual warning if CNS values are not shown in the custom view right now
+	cpfseq  menupos3					; CNS values shown through Custom View 8 right now?
+	bra     display_eod_cns_violation	; NO  - issue textual warning
+	return								; YES - do not show twice (in custom view and in warning area)
+display_eod_cns_violation:
+	incf	warning_counter,F	    	; increase counter
+    goto	TFT_display_eod_cns			; issue CNS at end-of-dive warning (and return)
+
+
     global  check_and_store_gf_violation
 check_and_store_gf_violation:
-	movff	char_O_gradient_factor,lo			; gradient factor absolute (Non-GF model)
-
-	movlw	gf_warning_high
-	cpfsgt	lo
-	bra     check_and_store_gf_violation2   ; No warning
-	movlw	d'2'                        ; Type of Alarm
-	movwf	AlarmType                   ; Copy to Alarm Register
-	bsf		event_occured               ; Set Event Flag
+	movff	int_O_gradient_factor+1,WREG	; get upper byte of gradient factor
+	btfss	WREG,int_warning_flag			; check if the warning flag is set
+	bra     check_and_store_gf_violation2   ; NO  - continue with checking for pre-warning
+	movlw	d'2'                        	; YES - set type of alarm
+	movwf	AlarmType                   	; 		copy to alarm register
+	bsf		event_occured               	; 		set event   flag
+	bsf		warning_active              	; 		set warning flag
+	bra		check_and_store_gf_violation3	;		show gf warning
+check_and_store_gf_violation2:
+	btfsc	WREG,int_prewarning_flag		; check if the pre-warning flag is set
+    bra		check_and_store_gf_violation3	; YES - show gf
+	TSTOSS	opt_enable_IBCD					; NO  - IBCD warning activated?
+	bra		check_and_store_gf_violation4	; 		NO  - continue checking of deco info
+	movff	char_O_deco_warnings,WREG		; 		YES - get the deco warnings vector
+	btfss	WREG,IBCD_warning				; 			  is the IBCD warning flag set?
+	bra		check_and_store_gf_violation4	; 			  NO  - continue checking for deco info
+check_and_store_gf_violation3:				;			  YES - show gf
+	bsf		warning_active					; set Warning flag
+	incf	warning_counter,F				; increase counter
+    goto    TFT_warning_gf              	; show GF (and return)
+check_and_store_gf_violation4:				; check for deco info
+	btfss	divemode						; in divemode?
+	return									; NO  - done, return
+	movff	char_O_deco_warnings,WREG		; YES - get the deco warnings vector
+	btfss	WREG,deco_flag					; 		check if the deco flag is set
+    return									; 		NO  - all done, return
+	incf	warning_counter,F				; 		YES - increase counter
+    goto    TFT_info_deco	             	; 			  show deco info
+	
+	
+warn_outside:
+	incf	warning_counter,F			; increase counter
 	bsf		warning_active              ; Set Warning flag
-check_and_store_gf_violation2:
-	movlw	gf_display_high
-	cpfsgt	lo
-    return                              ; No Display, no warning
-    ; Display GF
+    goto    TFT_warning_outside			; show microbubbles warning (and return)
+
+	
+	global	warn_mbubbles
+warn_mbubbles:
 	incf	warning_counter,F			; increase counter
-    goto    TFT_warning_gf              ; Show GF Warning (and return)
-
+	bsf		warning_active              ; Set Warning flag
+    goto    TFT_warning_mbubbles		; show microbubbles warning (and return)
+	
 warn_agf:
 	incf	warning_counter,F			; increase counter
 	goto    TFT_warning_agf             ; Show aGF warning  (and return)
@@ -1951,5 +2547,87 @@
     bsf		warning_active              ; Set Warning flag
 	goto    TFT_warning_fallback        ; Show fallback warning  (and return)
 
+	
+check_gas_needs:
+	banksel	int_O_tank_pres_need
+	movf	int_O_tank_pres_need+1,w	; get 				HIGH(pres need of 1st tank)
+	iorwf	int_O_tank_pres_need+3,w	; inclusive or with HIGH(pres need of 2nd tank)
+	iorwf	int_O_tank_pres_need+5,w	; inclusive or with HIGH(pres need of 3rd tank)
+	iorwf	int_O_tank_pres_need+7,w	; inclusive or with HIGH(pres need of 4th tank)
+	iorwf	int_O_tank_pres_need+9,w	; inclusive or with HIGH(pres need of 5th tank)
+	banksel	common
+	btfsc	WREG,int_invalid_flag						; check if invalid flag is set
+	return								; YES - no further checking required
+	btfsc	WREG,int_warning_flag		; NO  - check if any gas has a pres_need >= pres_fill
+	bsf		warning_active				; YES - set warning flag
+	btfsc	WREG,int_warning_flag		; NO  - check if any gas has a pres_need >= pres_fill
+	goto	TFT_warning_gas_needs_warn	; Yes - show a warning
+	btfsc	WREG,int_prewarning_flag	; NO  - check if any gas has a pres_need >= pres_fill * threshold
+	goto	TFT_warning_gas_needs_att	; YES - show an attention
+	bcf		gas_needs_attention			; NO  - clear flag for a new attention
+	bcf		gas_needs_warning			;       clear flag for a new warning
+	return
 
+	
+check_warn_sensors_disagree:
+    incf	warning_counter,F			; increase counter
+	bsf		warning_active				; YES - set Warning flag
+	goto	TFT_warning_sensor_disagree	; 		show sensor disagree warning (and return)
+
+
+check_IBCD:
+	TSTOSS	opt_enable_IBCD				; IBCD warning activated?
+	return								; NO  - done
+	movff	char_O_deco_warnings,WREG	; YES - get deco warnings vector
+	btfss	WREG,IBCD_warning			; 		IBCD warning flag set?
+	return								; 		NO  - return
+	incf	warning_counter,F			; 		YES - increase counter
+	goto	TFT_warning_IBCD			;			  write warning to display
+	
+
+
+	global	restart_deco_engine
+	global	restart_deco_engine_wo_ceiling
+restart_deco_engine:
+	; make bank save copies and set flags for invalid data
+	movff	int_O_ceiling+1,WREG
+	bsf		WREG,char_invalid_flag		; int_O_ceiling has its invalid flag on a char's position!
+	movff	WREG,int_O_ceiling+1
+
+restart_deco_engine_wo_ceiling:
+	; make more bank save copies and set more flags for invalid data
+	movff	char_O_deco_gas+0,WREG
+	bsf		WREG,char_invalid_flag
+	movff	WREG,char_O_deco_gas+0
+
+	movff	int_O_ascenttime+1,WREG
+	bsf		WREG,int_invalid_flag
+	movff	WREG,int_O_ascenttime+1
+
+	movff	int_O_alternate_ascenttime+1,WREG
+	bsf		WREG,int_invalid_flag
+	movff	WREG,int_O_alternate_ascenttime+1
+
+	movff	int_O_normal_CNS_fraction+1,WREG
+	bsf		WREG,int_invalid_flag
+	movff	WREG,int_O_normal_CNS_fraction+1
+
+	movff	int_O_alternate_CNS_fraction+1,WREG
+	bsf		WREG,int_invalid_flag
+	movff	WREG,int_O_alternate_CNS_fraction+1
+
+	movff	int_O_tank_pres_need+1,WREG
+	bsf		WREG,int_invalid_flag
+	movff	WREG,int_O_tank_pres_need+1
+	
+	; restart deco engine
+	movff	char_O_deco_status,WREG			; get current deco engine configuration
+	bcf		WREG,DECO_STATUS_0_FLAG			; set status flags to...
+	bcf		WREG,DECO_STATUS_1_FLAG			; ... DECO_STATUS_START
+	bsf		WREG,DECO_PLAN_FLAG				; fake we came from alternative plan to force normal plan to be done next
+	movff   WREG,char_O_deco_status 		; write back new configuration to restart deco computations
+
+    return
+	
+	
  END
\ No newline at end of file
--- a/src/divemode.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/divemode.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemode.inc
+;   File divemode.inc								REFACTORED VERSION V2.91
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -11,6 +11,8 @@
     extern    set_dive_modes
     extern    diveloop
     extern    apnoe_calc_maxdepth
+	extern	  calc_deko_divemode_sensor
+
 
 ; Divemode layout:
 ; row=0...239
@@ -73,6 +75,9 @@
 #DEFINE    dm_max_depth_dm_row          dm_max_depth_row+.11           ; 25
 #DEFINE    dm_max_depth_dm_column       dm_max_depth_column+.23        ; 87
 #DEFINE    dm_max_depth_dm_column_nvsi  dm_max_depth_column_nvsi+.23   ; 77
+#DEFINE	   dm_max_alt_column		.0
+#DEFINE	   dm_max_alt_row		.170
+#DEFINE	   dm_max_dm_alt_column		dm_max_alt_column+.60
 ; Warning area (combined)
 #DEFINE    dm_warning_row             dm_offset+.36             ; 50
 #DEFINE    dm_warning_column          dm_upcnt_2ndcol           ; 74
@@ -99,6 +104,8 @@
 #DEFINE    dm_divetime_rgt                .159                   ; 159
 #DEFINE    dm_divetime_secs_row           dm_divetime_row+.11    ; 25
 #DEFINE    dm_divetime_secs_column        dm_divetime_column+.24 ; 139
+#DEFINE	   dm_divetime_alt_row		  dm_offset              ; 14
+#DEFINE	   dm_divetime_alt_column	  .68
 ; Warning icon
 #DEFINE    dm_warning_icon_row            dm_offset+.41                ; 55
 #DEFINE    dm_warning_icon_column         .137                         ; 137
@@ -262,7 +269,7 @@
 #DEFINE    dm_custom_ceiling_text_row       dm_customview_row+.1        ; 102
 #DEFINE    dm_custom_ceiling_text_column    .68                         ; 66
 #DEFINE    dm_custom_ceiling_ppo2_column    .8                          ; 8
-#DEFINE	   dm_custom_ceiling_ppo2_col_dil   .0				; 0 NEW tuned position because text is longer
+#DEFINE	   dm_custom_ceiling_ppo2_col_dil   .0							; 0 NEW tuned position because text is longer	## (?)
 
 ; Value
 #DEFINE    dm_custom_ceiling_value_row      dm_customview_row+.18       ; 119
--- a/src/gaslist.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/gaslist.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File gaslist.asm
+;   File gaslist.asm												## V2.95
 ;
 ;   Managing OSTC gas list
 ;
@@ -58,12 +58,12 @@
 ; Append current mix to current string (For divemode)
 ; Input: FSR2 : Current string position.
 ; Output: Text appended into buffer pointed by FSR2.
-    global  gaslist_strcat_gasx
-gaslist_strcat_gasx:        ; Show current O2/He mix
+    global  gaslist_strcat_gas6
+gaslist_strcat_gas6:        ; Show current O2/He mix
         STRCAT_TEXT tGas
         STRCAT  ": "
-        movff   char_I_O2_ratio,lo
-        movff   char_I_He_ratio,hi
+        movff   gas6_O2_ratio,lo
+        movff   gas6_He_ratio,hi
         goto	customview_show_mix     ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2, and RETURN
 
     global  gaslist_show_type
@@ -556,7 +556,7 @@
         return
 
 ;----------------------------------------------------------------------------
-; Compute MOD from opt_ppO2_max/opt_ppO2_max_deco and current O2 Ratio.
+; Compute MOD from char_I_ppO2_max/char_I_ppO2_max_deco and current O2 Ratio.
 ;
 ; Input:  gaslist_gas = current gas index.
 ;         opt_gas_O2_ratio[gaslist_gas] = current O2 ratio
@@ -578,10 +578,10 @@
 	lfsr	FSR1,opt_gas_type	; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
 	movff   PLUSW1,xA+0		; xA+0 used as temp here -> holds type
 	
-	movff   opt_ppO2_max_deco,xB+1	; xB+1 used as temp here
+	movff   char_I_ppO2_max_deco,xB+1	; xB+1 used as temp here
 	movlw	.3			
 	cpfseq	xA+0			; Deco?
-	movff   opt_ppO2_max,xB+1	; No, overwrite with travel/bottom max
+	movff   char_I_ppO2_max,xB+1	; No, overwrite with travel/bottom max
 	movf	xB+1,W			; Result in WREG
 	
 	clrf	xB+1			; Clear for div16x16
@@ -599,7 +599,7 @@
     extern  TFT_color_code1
         movwf   hi                          ; Copy O2%
         movlw	warn_gas_in_gaslist
-        call	TFT_color_code1             ; Color-code current row in Gaslist (%O2 in hi), opt_ppO2_max/opt_ppO2_max_deco as threshold
+        call	TFT_color_code1             ; Color-code current row in Gaslist (%O2 in hi), char_I_ppO2_max/char_I_ppO2_max_deco as threshold
         return
 ;----------------------------------------------------------------------------
 
--- a/src/ghostwriter.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/ghostwriter.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File ghostwriter.asm
+;   File ghostwriter.asm							REFACTORED VERSION 2.94
 ;
 ;   Ghostwriter (Log profile recorder)
 ;
@@ -23,8 +23,8 @@
 ghostwriter	CODE
 
 	global	store_dive_data
-store_dive_data:						; 5 seconds gone
-	bcf		store_sample				; update only any 5 seconds
+store_dive_data:
+	bcf		store_sample		; clear flag
 
     ifndef __DEBUG
     	btfsc	simulatormode_active    ; Are we in simulator mode?
@@ -93,7 +93,7 @@
 	addwf	EventByte,F			; Copy to EventByte Bit 0-3
 	clrf	AlarmType			; Reset AlarmType
 	
-; Third, check events and add aditional bytes
+; Third, check events and add additional bytes
 	btfss	gas6_changed    	; Check flag
 	bra		check_event2
 	movlw	d'2'				; Information length
@@ -257,7 +257,7 @@
 store_dive_ppO2_sensors:
     movf    o2_ppo2_sensor1,W            ; Sensor1 ppO2 (in 0.01bar steps)
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor1,lo     ; o2_mv_sensor may be modifified via ISR during the two writes here...
+    SAFE_2BYTE_COPY o2_mv_sensor1,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
     movf    lo,W                         ; in 0.1mV steps
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
     movf    hi,W                         ; in 0.1mV steps
@@ -265,7 +265,7 @@
 
     movf    o2_ppo2_sensor2,W            ; Sensor2 ppO2 (in 0.01bar steps)
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor2,lo     ; o2_mv_sensor may be modifified via ISR during the two writes here...
+    SAFE_2BYTE_COPY o2_mv_sensor2,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
     movf    lo,W                         ; in 0.1mV steps
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
     movf    hi,W                         ; in 0.1mV steps
@@ -273,7 +273,7 @@
 
     movf    o2_ppo2_sensor3,W            ; Sensor3 ppO2 (in 0.01bar steps)
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor3,lo     ; o2_mv_sensor may be modifified via ISR during the two writes here...
+    SAFE_2BYTE_COPY o2_mv_sensor3,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
     movf    lo,W                         ; in 0.1mV steps
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
     movf    hi,W                         ; in 0.1mV steps
@@ -284,8 +284,8 @@
 	return
 
 store_dive_gf:
-	movff	char_O_gradient_factor,WREG		; gradient factor absolute
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movff	int_O_gradient_factor+0,WREG	; gradient factor absolute (range is limited to 255, only lower byte used for value)
+	rcall   ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
 	movlw	div_gf
 	movwf	divisor_gf						; Reload divisor
 	return
@@ -346,14 +346,11 @@
 	movff	last_surfpressure_30min+0,int_I_pres_surface+0          ; Pass surface to desat routine !
 	movff	last_surfpressure_30min+1,int_I_pres_surface+1
 
-	call	deco_calc_desaturation_time ; calculate desaturation time
-	movlb	b'00000001'                 ; select ram bank 1
-	movff	int_O_desaturation_time+0, desaturation_time+0
-	movff	int_O_desaturation_time+1, desaturation_time+1	; Buffer
-    call	calc_deko_surfmode
-	rcall	calculate_noflytime         ; Calc NoFly time
-
-										; store header and ...
+	call	deco_calc_wo_deco_step_1_min						; calculate deco in surface mode
+	
+	call	deco_calc_desaturation_time							; calculate desaturation time
+	movlb	b'00000001'											; select ram bank 1
+	
 	movlw	0xFD						; .... End-of-Profile Bytes
 	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
 	movlw	0xFD
@@ -426,7 +423,7 @@
 	movf	EEDATA,W
 	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
 
-		; store pointer to end of diveprofile
+	; store pointer to end of diveprofile
 	movf	ext_flash_log_pointer+0,W
 	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
 	movf	ext_flash_log_pointer+1,W
@@ -479,30 +476,30 @@
 	movff	lo,max_pressure+0
 	movff	hi,max_pressure+1
 	
-	movff	max_pressure+0,WREG			; Max. depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movff	max_pressure+0,WREG				; Max. depth
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	max_pressure+1,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 end_dive2:
-	movf	divemins+0,W            ; divetime minutes
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movf	divemins+0,W            		; divetime minutes
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	divemins+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	movf	divesecs,W				; divetime seconds
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	movff	minimum_temperature+0,WREG			; minimum temperature
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	divesecs,W						; divetime seconds
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	minimum_temperature+0,WREG		; minimum temperature
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	minimum_temperature+1,WREG		
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	movff	last_surfpressure_30min+0,WREG		; airpressure before dive
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	last_surfpressure_30min+0,WREG	; airpressure before dive
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	last_surfpressure_30min+1,WREG		
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	movff	int_O_desaturation_time+0,WREG		; desaturation time in minutes
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	int_O_desaturation_time+0,WREG	; desaturation time in minutes
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	int_O_desaturation_time+1,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
     btfss   FLAG_ccr_mode           ; In CCR mode...
     bra     end_dive_oc_gaslist     ; No, write OC gases
@@ -601,11 +598,11 @@
 ;    bra     end_dive_oc_cc_common
 
 end_dive_oc_cc_common:
-	movlw	softwareversion_x			; Firmware version
+	movlw	softwareversion_x		; Firmware version
 	rcall	ghostwrite_byte_header
 	movlw	softwareversion_y
 	rcall	ghostwrite_byte_header
-	movf	batt_voltage+0,W			; Battery voltage 
+	movf	batt_voltage+0,W		; Battery voltage 
 	rcall	ghostwrite_byte_header
 	movf	batt_voltage+1,W
 	rcall	ghostwrite_byte_header
@@ -623,7 +620,7 @@
     ; Gradient factor
     movff	GF_start,WREG
     rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movff	char_O_gradient_factor,WREG
+    movff	int_O_gradient_factor+0,WREG	; value limited to 255, only lower byte in use
     rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
 
     ; Logbook offset
@@ -707,13 +704,14 @@
     lfsr    FSR1,char_O_tissue_N2_saturation+0
 end_dive_store_tissues_N2:
     movf    POSTINC1,W
+	bcf		WREG,7						; clear flag bit for ongassing/offgassing
     rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
     decfsz  lo,F
     bra     end_dive_store_tissues_N2   ; No
 
     movlw   .64
     movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0       ; 16*4Byte Float = 64Bytes
+    lfsr    FSR1,0x700;pres_tissue_N2+0 ; 16*4Byte Float = 64Bytes
 end_dive_store_tissues_N2_2:
     movf    POSTINC1,W
     rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
@@ -725,13 +723,14 @@
     lfsr    FSR1,char_O_tissue_He_saturation+0
 end_dive_store_tissues_He:
     movf    POSTINC1,W
+	bcf		WREG,7						; clear flag bit for ongassing/offgassing
     rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
     decfsz  lo,F
     bra     end_dive_store_tissues_He   ; No
 
     movlw   .64
     movwf   lo
-    lfsr    FSR1,0x740;pres_tissue_He+0       ; 16*4Byte Float = 64Bytes
+    lfsr    FSR1,0x740;pres_tissue_He+0 ; 16*4Byte Float = 64Bytes
 end_dive_store_tissues_He_2:
     movf    POSTINC1,W
     rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
@@ -768,14 +767,14 @@
 
     ; Header stop
 	movlw	0xFB
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header		; WREG -> Header in ext. flash
 	movlw	0xFB
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header		; WREG -> Header in ext. flash
 	
-	call	divemode_store_statistics		; Store/update statistics for this unit
+	call	divemode_store_statistics	; Store/update statistics for this unit
 
 	clrf	surface_interval+0
-	clrf	surface_interval+1				; Clear surface interval timer
+	clrf	surface_interval+1			; Clear surface interval timer
 
 ghostwriter_end_dive_common:
 ; Update ext_flash_log_pointer into EEPROM
@@ -787,30 +786,30 @@
 	movff	ext_flash_log_pointer+2,EEDATA
 	write_int_eeprom .6
 
-	bcf		simulatormode_active			; if we were in simulator mode
+	bcf		simulatormode_active		; if we were in simulator mode
 
 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
     ifndef __DEBUG
-		extern	deco_pull_tissues_from_vault
-		btfsc	restore_deco_data			; Restore decodata?
-	    call    deco_pull_tissues_from_vault
-        banksel common                  ; Bank1
+	extern	deco_pull_tissues_from_vault
+	btfsc	restore_deco_data					; Restore decodata?
+    call    deco_pull_tissues_from_vault
+	banksel common                  			; Bank1
 	endif
-	call	update_battery_registers	; update battery registers into EEPROM
-	goto	surfloop					; and return to surfaceloop
+	call	update_battery_registers			; update battery registers into EEPROM
+	goto	surfloop							; and return to surfaceloop
 
 ghostwriter_end_dive_common_sim:
-    tstfsz  surface_interval+0              ; Was interval zero?
+    tstfsz  surface_interval+0              	; Was interval zero?
     bra     ghostwriter_end_dive_common_sim2    ; No
-    tstfsz  surface_interval+1              ; Was interval zero?
+    tstfsz  surface_interval+1              	; Was interval zero?
     bra     ghostwriter_end_dive_common_sim2    ; No
-    bra     ghostwriter_end_dive_common     ; Yes, done.
+    bra     ghostwriter_end_dive_common     	; Yes, done.
 
 ghostwriter_end_dive_common_sim2:
     movf    divemins+0,W
     addwf   surface_interval+0,F
     movf    divemins+1,W
-	addwfc  surface_interval+1				; Add simulated divetime to surface interval
+	addwfc  surface_interval+1			; Add simulated divetime to surface interval
     bra     ghostwriter_end_dive_common
 
 ghostwriter_load_pointer:               ; Load ext_flash_address:3 from EEPROM .4-.6
@@ -957,47 +956,6 @@
     rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
 
 	return
-
-calculate_noflytime:
-	; calculate nofly time
-	movff	int_O_desaturation_time+0,xA+0
-	movff	int_O_desaturation_time+1,xA+1
-
-    btfsc   xA+1,7                  ; Is desat time negative ?
-    bra     calculate_noflytime_3   ; Then surely not valid !
-
-	tstfsz	xA+0			; Desat=0?
-	bra		calculate_noflytime2
-	tstfsz	xA+1			; Desat=0?
-	bra		calculate_noflytime2
-
-calculate_noflytime_3:	
-	; Desaturation time = zero
-	clrf	nofly_time+0			; Clear nofly time
-	clrf	nofly_time+1			; Clear nofly time
-	return
-
-calculate_noflytime2:	
-	movff	xA+0,int_I_temp+0
-	movff	xA+1,int_I_temp+1
-	movlw	no_fly_time_ratio		; nofly_time_ratio                
-	movff	WREG,char_I_temp
-	call	deco_calc_percentage
-	movlb	b'00000001'				; select ram bank 1
-	movff	int_I_temp+0,xA+0
-	movff	int_I_temp+1,xA+1
-	tstfsz	xA+0			; Desat=0?
-	bra		calculate_noflytime_2_final
-	tstfsz	xA+1			; Desat=0?
-	bra		calculate_noflytime_2_final
-	bra     calculate_noflytime_3
-
-calculate_noflytime_2_final:
-	movff	xA+0,nofly_time+0
-	movff	xA+1,nofly_time+1
-	return
-
-
 divemode_store_statistics:	; Store/update statistics for this unit
     rcall   vault_decodata_into_eeprom  ; update deco data
 	rcall	do_logoffset_common_read	; Existing logbook offset into lo:hi
@@ -1103,19 +1061,19 @@
     write_int_eeprom .7
     movff   int_O_CNS_fraction+1,EEDATA
     write_int_eeprom .8
-    movff   desaturation_time+0,EEDATA
+    movff   int_O_desaturation_time+0,EEDATA
     write_int_eeprom .9
-    movff   desaturation_time+1,EEDATA
+    movff   int_O_desaturation_time+1,EEDATA
     write_int_eeprom .10
     movff   surface_interval+0,EEDATA
     write_int_eeprom .11
     movff   surface_interval+1,EEDATA
     write_int_eeprom .12
-    movff   char_O_gradient_factor,EEDATA
+    movff   int_O_gradient_factor+0,EEDATA		; value limited to 255, only lower byte in use for value
     write_int_eeprom .13
-    movff   nofly_time+0,EEDATA
+    movff   int_O_nofly_time+0,EEDATA
     write_int_eeprom .14
-    movff   nofly_time+1,EEDATA
+    movff   int_O_nofly_time+1,EEDATA
     write_int_eeprom .15
 
     ; Tissue data from 16 to 144
@@ -1123,7 +1081,7 @@
     movwf   EEADR
     movlw   .128
     movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0       ; 32*4Byte Float = 128Bytes
+    lfsr    FSR1,0x700;pres_tissue_N2+0 ; 32*4Byte Float = 128Bytes
 vault_decodata_into_eeprom2:
     movff   POSTINC1,EEDATA
     call    write_eeprom                ; EEDATA into EEPROM@EEADR
@@ -1160,31 +1118,31 @@
     read_int_eeprom .8
     movff   EEDATA,int_O_CNS_fraction+1
     read_int_eeprom .9
-    movff   EEDATA,desaturation_time+0
+    movff   EEDATA,int_O_desaturation_time+0
     read_int_eeprom .10
-    movff   EEDATA,desaturation_time+1
+    movff   EEDATA,int_O_desaturation_time+1
     read_int_eeprom .11
     movff   EEDATA,surface_interval+0
     read_int_eeprom .12
     movff   EEDATA,surface_interval+1
     read_int_eeprom .13
-    movff   EEDATA,char_O_gradient_factor
+    movff   EEDATA,int_O_gradient_factor+0
     read_int_eeprom .14
-    movff   EEDATA,nofly_time+0
+    movff   EEDATA,int_O_nofly_time+0
     read_int_eeprom .15
-    movff   EEDATA,nofly_time+1
+    movff   EEDATA,int_O_nofly_time+1
 
     ; Tissue data from 16 to 144
     movlw   .16
     movwf   EEADR
     movlw   .128
     movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0       ; 32*4Byte Float = 128Bytes
+    lfsr    FSR1,0x700;pres_tissue_N2+0		; 32*4Byte Float = 128Bytes
 restore_decodata_from_eeprom2:
-    call    read_eeprom                ; EEPROM@EEADR into EEDATA
+    call    read_eeprom						; EEPROM@EEADR into EEDATA
     movff   EEDATA,POSTINC1
     incf    EEADR,F
-    decfsz  lo,F                        ; All done?
+    decfsz  lo,F                        	; All done?
     bra     restore_decodata_from_eeprom2   ; No
     clrf    EEADRH
     return
--- a/src/hwos.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/hwos.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File hwos.inc
+;   File hwos.inc									REFACTORED VERSION V2.95a1
 ;
 ;   OSTC Platform definitions
 ;
@@ -15,19 +15,20 @@
 
 ;#DEFINE __DEBUG
 
-;#DEFINE	    french_italian	    ; If defined, use french and italian instead of english and german	
+;#DEFINE french_italian	    	; If defined, use french and italian instead of english and german	
 	
 #include <p18f87k22.inc>
 #include <ports.inc>                        ; Portmap
 
 ; Firmware definition
 #DEFINE	softwareversion_x		d'2'		; Software version  XX.YY
-#DEFINE	softwareversion_y		d'27'		; Software version  XX.YY
-#DEFINE softwareversion_beta 	0 			; (and 0 for release)
+#DEFINE	softwareversion_y		d'96'		; Software version  XX.YY
+#DEFINE softwareversion_beta 	1 			; (and 0 for release)
+
 ; Firmware version will appear in "Change Firmware" style
 #DEFINE firmware_expire_year    .18
-#DEFINE firmware_expire_month   .12
-#DEFINE firmware_expire_day     .3
+#DEFINE firmware_expire_month   .2
+#DEFINE firmware_expire_day     .22
 
 #DEFINE comm_service_key        0xABCDEF
 
@@ -46,10 +47,10 @@
 #DEFINE TMR1H_VALUE_CONT_DIVE    .255-.64   ; in steps of 7,8125ms -> 0.5s
 
 ; Color Definitions: 8Bit RGB b'RRRGGGBB'
-#DEFINE	color_red	    	b'11100000'     ; (7,0,0)
+#DEFINE	color_red	        b'11100000'     ; (7,0,0)
 #DEFINE	color_dark_red	    b'10000101'     ; (4,1,1)
-#DEFINE	color_violet    	b'11101011'     ; (7,2,3)
-#DEFINE	color_blue		    b'11000111'     ; (6,1,3)
+#DEFINE	color_violet	    b'11101011'     ; (7,2,3)
+#DEFINE	color_blue	        b'11000111'     ; (6,1,3)
 #DEFINE	color_green	        b'00011100'     ; (0,7,0)
 #DEFINE	color_greenish      b'00111110'     ; (1,7,2)
 #DEFINE color_dark_green    b'00111001'     ; (1,6,1)
@@ -74,8 +75,9 @@
 #DEFINE warn_ppo2           .4
 #DEFINE warn_ceiling        .5
 #DEFINE warn_gas_in_gaslist .6
-#DEFINE warn_ppo2_hud       .7
+#DEFINE warn_ppo2_hud		.7
 #DEFINE warn_battery        .8
+#DEFINE warn_stop			.9
 
 ; External O2 cell input parameters
 #DEFINE	min_mv				.80			; = 8mV
@@ -85,6 +87,7 @@
 ; Profile recording parameters
 #DEFINE	logbook_profile_version	0x24
 #DEFINE	samplingrate_apnoe	.1	; [seconds]
+
 ; Warning: Divisors must be <.16 !
 #DEFINE	div_temperature		.6	; x samplingrate [s]
 #DEFINE	div_deco			.6	; x samplingrate [s]
@@ -93,6 +96,7 @@
 #DEFINE	div_decoplan		.12	; x samplingrate [s]
 #DEFINE div_cns				.12	; x samplingrate [s]
 #DEFINE div_tank			.0	; x samplingrate [s]
+
 ; Warning: Information lengths must be <.16 !
 #DEFINE infolength_temperature  .2  ; [byte]
 #DEFINE infolength_deco         .2  ; [byte]
@@ -110,29 +114,36 @@
 #DEFINE	better_gas_window_pos   .1			; [m] (Depth below change depth, if ppO2<opt_ppO2_max)
 
 ; Dive mode limits and thresholds
-#DEFINE	start_dive_threshold 	.100	; [cm]
-#DEFINE	high_altitude_dive_threshold .300;[cm]
-#DEFINE	apnoe_timeout			.15 	; [min]
-#DEFINE divemode_menuview_timeout   .10 ; [s]
-#DEFINE	divemode_timeout_default	.5	; [min]
-#DEFINE	divemode_menu_timeout	.30		; [s]
-#DEFINE	ppo2_warning_low		.19     ; [cbar] (Default value)
-#DEFINE ppo2_lowest_setting     .16     ; [cbar] (Minimum value)
-#DEFINE	ppo2_display_high		.120	; [cbar]
-#DEFINE	ppo2_warning_high		.160    ; [cbar] (Default value) for bottom/travel gases
+#DEFINE	start_dive_threshold 		.100	; [cm]
+#DEFINE	high_altitude_dive_threshold .300	; [cm]
+#DEFINE	apnoe_timeout				.15 	; [min]
+#DEFINE divemode_menuview_timeout   .10		; [s]
+#DEFINE	divemode_timeout_default	.5		; [min]
+#DEFINE	divemode_menu_timeout		.30		; [s]
+
+#DEFINE	ppo2_warning_low			.19     ; [cbar] (Default value)
+#DEFINE ppo2_lowest_setting     	.16     ; [cbar] (Minimum value)
+;#DEFINE ppo2_display_high			.120	; [cbar]											## V2.94 moved to p2_deco.c
+#DEFINE	ppo2_warning_high			.160    ; [cbar] (Default value) for bottom/travel gases
 #DEFINE	ppo2_warning_high_deco		.160    ; [cbar] (Default value) for deco gases
-#DEFINE ppo2_highest_setting    .160    ; [cbar] (Max. Value) for bottom/travel gases
-#DEFINE ppo2_highest_setting_deco  .160    ; [cbar] (Max. Value) for deco gases
-#DEFINE	cns_display_high		.70		; [%]
-#DEFINE	cns_warning_high		.100    ; [%]
-#DEFINE	gf_display_high     	.75		; [%]
-#DEFINE	gf_warning_high         .100    ; [%]
+#DEFINE ppo2_highest_setting    	.160    ; [cbar] (Max. Value) for bottom/travel gases
+#DEFINE ppo2_highest_setting_deco	.160    ; [cbar] (Max. Value) for deco gases
+
+; NEW	## min ppO2 CC
+#DEFINE	ppo2_warning_low_cc		.40		; [cbar] Default value for loop
+#DEFINE	ppo2_warning_low_cc_min	.20		; [cbar] Default value for loop
+#DEFINE	ppo2_warning_low_cc_max	.60		; [cbar] Default value for loop
+
+;#DEFINE cns_display_high		.70		; [%]													## V2.94 moved to p2_deco.c
+;#DEFINE cns_warning_high		.100    ; [%]													## V2.94 moved to p2_deco.c
+;#DEFINE gf_display_high    	.75		; [%]													## V2.94 moved to p2_deco.c
+;#DEFINE gf_warning_high	    .100    ; [%]													## V2.94 moved to p2_deco.c
 #DEFINE	depth_warn_mbar 		.13000	; [mbar]
 #DEFINE	wake_up_from_sleep		.1160	; [mbar]
 #DEFINE	gf_display_threshold	.20		; [%]
 #DEFINE simulator_timeout       .15     ; [s]
-#DEFINE sensor_voting_logic_threshold   .20 ; Threshold in 0.01bar
 
+#DEFINE sensor_voting_logic_threshold   .10 ; Threshold in 0.01bar
 
 ; Surface mode limits and thresholds
 #DEFINE	cns_display_surface_high .70	; [%]
@@ -143,14 +154,13 @@
 #DEFINE timeout_ccr_surface      .240   ; [s]
 
 ; Decomodel paramters
-#DEFINE no_fly_time_ratio		.60		; [%]
 #DEFINE	deco_distance			.10		; [dm]
 
 ; Color-code parameters for the divemode
-#DEFINE	color_code_cns_high		.100	; [%]
-#DEFINE	color_code_gf_warn_high .101	; [%]
-#DEFINE	color_code_velocity_warn_high .11   ;[m/min]
-#DEFINE	color_code_velocity_attn_high .10   ;[m/min]
+;#DEFINE	color_code_cns_high			.100	; [%]											## V2.94 moved to p2_deco.c
+;#DEFINE	color_code_gf_warn_high 	.101	; [%]											## V2.94 moved to p2_deco.c
+#DEFINE	color_code_velocity_warn_high 	.11		;[m/min]
+#DEFINE	color_code_velocity_attn_high 	.10		;[m/min]
 
 ; Velocity threshold
 #DEFINE	velocity_display_threshold_1	.3	; [m/min]
@@ -172,7 +182,7 @@
 ; Capacity for 2.4Ah Saft LS14500 and 0.8Ah Panasonic UR14500P
 ; battery_gauge:6 is nAs
 ; devide through 65536
-; a) devide through 364 -> Result is in percent of a 2.4Ah Battery
+;    a) devide through 364 -> Result is in percent of a 2.4Ah Battery
 ; or b) devide through 121 -> Result is in percent of a 0.8Ah Battery
 
 ; For internal battery gauging
@@ -181,9 +191,9 @@
 
 ; For gauge IC	
 #DEFINE	saft_capacity		.281	; 2.4Ah/0.085mAh/100 [%]
-#DEFINE	saft_offset		.37300  ; 65536-(2.4Ah/0.085mAh)
+#DEFINE	saft_offset			.37300  ; 65536-(2.4Ah/0.085mAh)
 
-#DEFINE	panasonic_capacity	.94	; 0.8Ah/0.085mAh/100 [%]
+#DEFINE	panasonic_capacity	.94		; 0.8Ah/0.085mAh/100 [%]
 #DEFINE	panasonic_offset	.56124	; 65536-(0.8Ah/0.085mAh)
 
 #DEFINE	ncr18650_capacity	.364	; 3.1Ah/0.085mAh/100 [%]
@@ -229,12 +239,12 @@
 #DEFINE compass_averaging           .10         ; numbers of extra averaging
 
 ; Hardware defines
-#DEFINE battery_gauge_available        hardware_flag,0     ; OSTC has rechargeable battery with battery management chip
-#DEFINE ambient_sensor      hardware_flag,1     ; OSTC has an ambient sensor
-#DEFINE analog_o2_input     hardware_flag,2     ; OSTC has analog inputs and S8 digital
-#DEFINE optical_input       hardware_flag,3     ; OSTC has an digital optical input
-#DEFINE ble_available       hardware_flag,4     ; OSTC has an BLE module
-;unused
+#DEFINE battery_gauge_available	hardware_flag,0	; OSTC has rechargeable battery with battery management chip
+#DEFINE ambient_sensor			hardware_flag,1	; OSTC has an ambient sensor
+#DEFINE analog_o2_input			hardware_flag,2	; OSTC has analog inputs and S8 digital
+#DEFINE optical_input			hardware_flag,3	; OSTC has an digital optical input
+#DEFINE ble_available			hardware_flag,4	; OSTC has an BLE module
+#DEFINE	ostc_rx_present			hardware_flag,5	; OSTC_RX circuity present
 ;unused
 ;unused
 
@@ -251,56 +261,56 @@
 isr_backup  udata_ovr   isr_backup    ; Reserved space for interupt data
  
 ;---- Backup for general registers
-isr_prod    res 2
+isr_prod    			res 2
 
 ;---- MS5541 subroutines
-amb_pressure	res	2
-temperature		res	2
+amb_pressure			res	2
+temperature				res	2
 
-C1              res 2           ; Decoded calibration data
-C2              res 2
-C3              res 2
-C4              res 2           ; Here: C4-250
-C5              res 2           ; Here: Reference Temperature UT1 = 8*C5 + 10000 (u16 range 10.000 .. +42.760)
-C6              res 2
-D1              res 2           ; raw pressure
-D2              res 2           ; raw temperature
-xdT				res	2
-xdT2			res	2
-OFF				res	2
-SENS			res	2
-dLSB            res 1           ;Pressure sensor interface 
-dMSB            res 1
-clock_count     res 1
-sensor_state_counter res 1		; counts to eight for state maschine
-amb_pressure_avg res 2
-temperature_avg	res	2
-minimum_temperature	res 2		; minimum temperature
-last_temperature	res 2
-last_pressure	res 2
+C1 			            res 2   ; Decoded calibration data
+C2          			res 2
+C3              		res 2
+C4              		res 2   ; Here: C4-250
+C5              		res 2   ; Here: Reference Temperature UT1 = 8*C5 + 10000 (u16 range 10.000 .. +42.760)
+C6              		res 2
+D1              		res 2   ; raw pressure
+D2              		res 2   ; raw temperature
+xdT						res	2
+xdT2					res	2
+OFF						res	2
+SENS					res	2
+dLSB            		res 1   ; Pressure sensor interface 
+dMSB            		res 1
+clock_count     		res 1
+sensor_state_counter 	res 1	; counts to eight for state maschine
+amb_pressure_avg 		res 2
+temperature_avg			res	2
+minimum_temperature		res 2	; minimum temperature
+last_temperature		res 2
+last_pressure			res 2
 last_pressure_velocity	res 2   ; For velocity
-last_surfpressure res 2
+last_surfpressure 		res 2
 last_surfpressure_15min res 2
 last_surfpressure_30min res 2
-rel_pressure	res 2
-sim_pressure	res 2   ; hold simulated pressure in mbar if in Simulator mode
-max_pressure	res 2
-avg_rel_pressure	res 2
-avg_rel_pressure_total res 2
+rel_pressure			res 2
+sim_pressure			res 2   ; hold simulated pressure in mbar if in Simulator mode
+max_pressure			res 2
+avg_rel_pressure		res 2
+avg_rel_pressure_total 	res 2
 ;---- Data for ISR math subroutines
-isr_xC          res 4
-isr_xA          res 2
-isr_xB          res 2
+isr_xC          		res 4
+isr_xA       		   	res 2
+isr_xB         			res 2
 
 ;---- Data for ISR routines
-isr1_temp       res 1           ; ISR temp variable, used in ms5541.asm, isr_rtcc, isr_battery_gauge
-isr2_temp       res 1           ; ISR temp variable, used isr_battery_gauge
+isr1_temp       	res 1		; ISR temp variable, used in ms5541.asm, isr_rtcc, isr_battery_gauge
+isr2_temp       	res 1		; ISR temp variable, used isr_battery_gauge
 
 ;---- Display brightness
-max_CCPR1L		res	1			; Max. brightness value for CCPR1L
+max_CCPR1L			res	1		; Max. brightness value for CCPR1L
 
 ; Battery gauge (nAs, nC)
-battery_gauge	res	6			; 48Bit -> 78Ah max...
+battery_gauge		res	6		; 48Bit -> 78Ah max...
 
 ; IR/S8-Link
 ir_s8_buffer        res .18     ; temporally used in get_calibration_data for the raw (packed) calibration data
@@ -334,8 +344,8 @@
 compass_heading     res 2       ; Corrected heading (in 1°) : -180 .. 180
 compass_heading_old res 2       ; Old heading (For smoother display)
 compass_heading_shown res 2     ; Displayed heading
-;compass_roll        res 2       ; Rotation around the X axis
-;compass_pitch       res 2       ; Rotation around the Y axis
+;compass_roll       res 2       ; Rotation around the X axis
+;compass_pitch      res 2       ; Rotation around the Y axis
 
 compass_a           res 2       ; Tmp data for Q15 arithmetics
 compass_b           res 2
@@ -344,16 +354,16 @@
 CNS_start           res 2       ; CNS value at beginning of dive
 GF_start            res 1       ; GF value at beginning of dive
 
-speed_setting        	res 1           ; =1: Eco, =2: Normal, =3: Fastest
+speed_setting       res 1       ; =1: Eco, =2: Normal, =3: Fastest
 
 ;---- Data for graphical compass
-xRD             res 2       ; virtual compass ruler offset
-xRDr            res 2       ; virtual compass ruler offset - right end
-xRD180          res 2       ; virtual compass ruler offset for the -180 marker
-xLO             res 1       ; lo backup to prevent trashing
-xHI             res 1       ; hi backup to prevent trashing
-xCM             res 1       ; compass bearing relative position
-compass_bearing res 2       ; this is where the bearing menu stores the actual heading for bearing
+xRD             	res 2       ; virtual compass ruler offset
+xRDr            	res 2       ; virtual compass ruler offset - right end
+xRD180          	res 2       ; virtual compass ruler offset for the -180 marker
+xLO             	res 1       ; lo backup to prevent trashing
+xHI             	res 1       ; hi backup to prevent trashing
+xCM             	res 1       ; compass bearing relative position
+compass_bearing 	res 2       ; this is where the bearing menu stores the actual heading for bearing
 
 ;---------------------------- Common DATA ------------------------------------
 
@@ -361,30 +371,30 @@
 common          udata_ovr   common      ; Bank1 general variables
 
 ;---- Time and Date
-secs         	   		res 1           
-mins            		res 1
-hours           		res 1
-day             		res 1
-month           		res 1
-year            		res 1
+secs					res 1           
+mins					res 1
+hours					res 1
+day						res 1
+month					res 1
+year					res 1
 surface_interval		res 2
 
-flag1            		res 1
-flag2           		res 1
-flag3           		res 1
-flag4           		res 1
-flag5           		res 1
-flag6           		res 1
-flag7           		res 1
-flag8           		res 1
-flag9           		res 1
-flag10           		res 1
-flag11           		res 1
-flag12           		res 1
-flag13                  res 1
-flag14			res 1
+flag1					res 1
+flag2					res 1
+flag3					res 1
+flag4					res 1
+flag5					res 1
+flag6					res 1
+flag7					res 1
+flag8					res 1
+flag9					res 1
+flag10					res 1
+flag11					res 1
+flag12					res 1
+flag13					res 1
+flag14					res 1
 
-hardware_flag           res 1           ; hardware descriptor flag
+hardware_flag			res 1           ; hardware descriptor flag
 
 temp1			res 1
 temp2			res 1
@@ -430,7 +440,7 @@
 sub_b           res 2
 
 ;---- Data for conversion subroutines
-cvt_flags       res 1
+cvt_flags       res 2
 ignore_digits   res 1
 
 #define leftbind            cvt_flags,0
@@ -441,8 +451,11 @@
 #DEFINE screen_type         cvt_flags,5 ; =1: display1, =0; display0
 #DEFINE	compass_type	    cvt_flags,6 ; =1: compass1, =0: compass0
 #DEFINE	analog_switches	    cvt_flags,7 ; =1: Analog switches available
+
+#DEFINE	compass_type2	    cvt_flags+1,0   ; =1: Compass2, =0: Compass1 or compass0
+
+
 ;---- Misc.
-nofly_time              res 2   		; No Fly time in Minutes (Calculated after Dive)
 timeout_counter 		res 1
 timeout_counter2		res 1
 timeout_counter3		res 1
@@ -451,12 +464,10 @@
 ambient_light			res 2			; ambient_light level
 lo_temp					res 1
 hi_temp					res 1
-desaturation_time		res 2  
 convert_value_temp      res 3           ; used in menu_battery_state_convert_date
-active_gas				res 1
-active_diluent          res 1           ; As a backup when switching back from Bailout to CCR
+active_gas				res 1			; the currently breathed gas (1-5)
+active_diluent          res 1           ; backup when switching back from bailout to CCR/pSCR loop
 warning_counter			res 1			; Counts amount of warning in divemode
-warning_counter_backup	res 1			; Backup of warning_counter
 warning_page            res 1           ; current # of warning page
 
 ; Remind history for menu processor (and such):
@@ -493,11 +504,11 @@
 apnoe_surface_secs		res 1
 
 ; Profile storing
-AlarmType			res 1
-samplesecs			res 1
-EventByte			res 1
-EventByte2			res 1
-ProfileFlagByte		res 1
+AlarmType				res 1
+samplesecs				res 1
+EventByte				res 1
+EventByte2				res 1
+ProfileFlagByte			res 1
 
 ; External flash
 ext_flash_address		res 3	; 24bit Address
@@ -525,12 +536,16 @@
 ;Bit6 unused in stand-alone HUD
 ;Bit7 unused in stand-alone HUD
 
-sensor_setpoint     res 1       ; sensor ppo2 in 0.01bar for deco routine
+sensor_setpoint     	res 1       ; sensor ppo2 in 0.01bar for deco routine
 
 better_gas_number	res 1       ; number (1-5) of the "better gas" in divemode, =0: no better gas available
-customview_divemode res 1       ; keeps last custom view
-customview_surfmode res 1
-safety_stop_countdown	res 1	; counts seconds of safety stop
+customview_divemode 	res 1       ; keeps last custom view
+customview_surfmode 	res 1
+safety_stop_countdown	res 1		; counts seconds of safety stop
+tft_update_flags	res 3		; probably more then needed...
+
+; bank common 1 Byte left here...
+
 
 ;---------------------------- TMP DATA ---------------------------------------
 ; Space for various overlayed data from color, word, menu processors, etc.
@@ -545,42 +560,50 @@
 common2          equ         0xA00       ; Alias for "banksel common"
 common2          udata_ovr   common2     ; Bank1 general variables
 
-s8_rawdata_sensor1   res 3  ; 24bit A/D raw data from S8 HUD sensor 1
-s8_rawdata_sensor2   res 3  ; 24bit A/D raw data from S8 HUD sensor 2
-s8_rawdata_sensor3   res 3  ; 24bit A/D raw data from S8 HUD sensor 3
+s8_rawdata_sensor1			res 3	; 24bit A/D raw data from S8 HUD sensor 1
+s8_rawdata_sensor2			res 3	; 24bit A/D raw data from S8 HUD sensor 2
+s8_rawdata_sensor3			res 3	; 24bit A/D raw data from S8 HUD sensor 3
 
-hud_battery_mv      res 2   ; hud/ppo2 monitor battery voltage in mV
-start_day           res 1   ; At start of dive (For logbook)
-start_month         res 1   ; At start of dive (For logbook)
-start_year          res 1   ; At start of dive (For logbook)
-start_hours         res 1   ; At start of dive (For logbook)
-start_mins          res 1   ; At start of dive (For logbook)
+hud_battery_mv				res 2   ; hud/ppo2 monitor battery voltage in mV
+start_day					res 1   ; At start of dive (For logbook)
+start_month					res 1   ; At start of dive (For logbook)
+start_year					res 1   ; At start of dive (For logbook)
+start_hours					res 1   ; At start of dive (For logbook)
+start_mins					res 1   ; At start of dive (For logbook)
 
-old_velocity        res 4   ; Stores the last 4 speeds (8 seconds) in m/min
-opt_gas_type_backup res 5   ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-opt_dil_type_backup res 5   ; 0=Disabled, 1=First, 2=Normal
-opt_OC_bail_gas_change_backup  res 5   ; Gas change depths OC/Bailout
-opt_dil_change_backup  res 5; Gas change depths Diluents
+old_velocity				res 4   ; Stores the last 4 speeds (8 seconds) in m/min
+opt_gas_type_backup			res 5   ; 0=Disabled, 1=First, 2=Travel, 3=Deco
+opt_dil_type_backup			res 5   ; 0=Disabled, 1=First, 2=Normal
+
+opt_OC_bail_gas_change_backup	res 5   ; Gas change depths OC/Bailout
+opt_dil_change_backup  			res 5	; Gas change depths Diluents
   
 internal_battery_capacity	res 2	; For internal battery gauging
-battery_capacity		res 2	; For battery gauge IC
-battery_offset			res 2	; For battery gauge IC
+battery_capacity			res 2	; For battery gauge IC
+battery_offset				res 2	; For battery gauge IC
 
-analog_sw1_raw		res 2	; idle values (average)
-analog_sw2_raw		res 2	; idle values (average)
-analog_counter		res 1	; for averaging
-analog_sw1		res 1	; analog value for switch 1
-analog_sw2		res 1	; analog value for switch 2
-battery_type		res 1	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-uptime			res 4	; Uptime [s]
-lastdive_time		res 4	; Time since last dive [s]
-lastdive_duration	res 3	; mins:2 and secs
-lastdive_maxdepth	res 2	; in mbar	
+analog_sw1_raw				res 2	; idle values (average)
+analog_sw2_raw				res 2	; idle values (average)
+analog_counter				res 1	; for averaging
+analog_sw1					res 1	; analog value for switch 1
+analog_sw2					res 1	; analog value for switch 2
+battery_type				res 1	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+uptime						res 4	; Uptime [s]
+lastdive_time				res 4	; Time since last dive [s]
+lastdive_duration			res 3	; mins:2 and secs
+lastdive_maxdepth			res 2	; in mbar	
 battery_acumulated_charge   res 2   ; Raw values in battery gauge IC
-gauge_status_byte	res 1	 ; Gauge IC status byte
-button_polarity		res 1	; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
-gaslist_gas_global	res 1	; for color coding the gas lists
-active_gas_type		res 1	; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
+gauge_status_byte			res 1	; Gauge IC status byte
+button_polarity				res 1	; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
+gaslist_gas_global			res 1	; for color coding the gas lists
+;active_gas_type			res 1	; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
+rx_buffer					res .48 ; Buffer for RX data (Slots 0-7)
+rx_firmware					res 2	; The RX firmware version xx.yy
+
+gas6_O2_ratio				res 1	; gas6 O2 ratio
+gas6_He_ratio				res 1	; gas6 He ratio
+gas6_temp					res 1	; temp used in divemenu_tree.asm
+
 
 ;-----------------------------------------------------------------------------
 ; Reserve BANK2 for general purpose buffer (strings, images, etc).
@@ -599,12 +622,10 @@
 opt_gas_type            res 5   ; 0=Disabled, 1=First, 2=Travel, 3=Deco
 opt_dil_type            res 5   ; 0=Disabled, 1=First, 2=Normal -> ; Must be in line with opt_gas_type
 opt_dive_mode           res 1   ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-opt_ppO2_max            res 1   ; PPO2 Max for MOD calculation and color coding in divemode
 opt_ccr_mode            res 1   ; =0: Fixed SP, =1: Sensor
-opt_ppO2_min            res 1   ; PPO2 min for Sensors and color coding in divemode
 opt_OC_bail_gas_change  res 5   ; Gas change depths OC/Bailout
+
 ;---- Managing Settings
-
 opt_brightness          res 1   ; =0: Eco, =1:Medium, =2:Full
 opt_salinity            res 1	; 0-5%
 #DEFINE opt_name_length    .60  ; Custom text string 5 rows with 12 chars
@@ -627,7 +648,7 @@
 opt_x_s1                res	2	; calibration factor (Not stored in EEPROM)
 opt_x_s2                res	2	; calibration factor (Not stored in EEPROM)
 opt_x_s3                res	2	; calibration factor (Not stored in EEPROM)
-opt_sensor_fallback     res 1   ; =1: Fallback to SP1 when sensor is lost
+opt_sensor_fallback     res 1   ; NOT USED ANY MORE, KEPT FOR COMPATIBILITY WITH EEPROM IMAGE
 opt_flip_screen         res 1   ; =1: Flip the screen
 opt_cR_button_left      res 1   ; Left button sensitivity (cR hardware)
 opt_cR_button_right     res 1   ; Right button sensitivity (cR hardware)
@@ -640,20 +661,21 @@
 opt_safety_stop_start   res 1   ; [cbar]
 opt_safety_stop_end     res 1   ; [cbar]
 opt_safety_stop_reset   res 1   ; [cbar]
-opt_diveTimeout		res 1	; Timeout for Divemode [min]
-opt_PSCR_drop		res 1	; PSCR Drop [%]
-opt_PSCR_lungratio	res 1	; PSCR Lung Ratio [1/x]
-opt_ppO2_max_deco       res 1   ; PPO2 Max Decogases (for MOD calculation and color coding in divemode)
+opt_diveTimeout			res 1	; Timeout for Divemode [min]
+opt_sim_setpoint_number	res 1	; NEW setpoint to use for deco calculation
+opt_calc_asc_gasvolume	res 1	; NEW calculate OC gas volume needs for ascent
+opt_sim_use_aGF			res 1	; NEW use GF (no) or aGF (yes) for deco calculation
+opt_enable_IBCD			res 1	; NEW enable IBCD warning
 
 ;-----------------------------EEPROM DATA ------------------------------------
 ; Automatic reset of all options when this is changed:
-#define    eeprom_opt_serial   0x0005   ; Version 0.5
+#define    eeprom_opt_serial   0x0006   ; Version 0.6
 
 ;-----------------------------------------------------------------------------
 ; Flags
 #DEFINE	switch_left				flag1,0
 #DEFINE	switch_right			flag1,1			
-#DEFINE neg_flag				flag1,2	; e.g. sub16 (sub_c = sub_a - sub_b)
+#DEFINE neg_flag				flag1,2	;     e.g. sub16 (sub_c = sub_a - sub_b)
 #DEFINE pressure_refresh 		flag1,3	; =1: A new pressure/temperature is available
 #DEFINE	sleepmode				flag1,4	; =1: In Sleepmode
 #DEFINE	tft_is_dimming			flag1,5	; =1: The TFT is dimming, ignore light sensor
@@ -666,14 +688,14 @@
 #DEFINE	FLAG_apnoe_mode			flag2,3	; =1: Apnoe mode selected
 #DEFINE	restore_deco_data		flag2,4	; =1: Restore deco data (After simulation)
 #DEFINE premenu					flag2,5	; =1: Premenu/Divemenu selected
-#DEFINE	menubit					flag2,6	; menu
+#DEFINE	menubit					flag2,6	;     menu
 #DEFINE	simulatormode_active	flag2,7	; =1: Simulator mode active, override pressure sensor readings
 
 #DEFINE divemode_menu           flag3,0	; =1: Divemode menu is shown
-#DEFINE	onesecupdate			flag3,1	; =1 after any second
+#DEFINE	onesecupdate			flag3,1	; =1: after any second
 #DEFINE twosecupdate			flag3,2	; =1: New two-second update
 #DEFINE	toggle_customview		flag3,3	; =1: Next customview
-#DEFINE	oneminupdate			flag3,4	; =1 after any minute
+#DEFINE	oneminupdate			flag3,4	; =1: after any minute
 #DEFINE	divemode				flag3,5	; =1: in Divemode
 #DEFINE	battery_is_36v          flag3,6	; =1: 3,6V Battery is in use
 #DEFINE	warning_active          flag3,7	; =1: A warning is active in divemode or surfacemode
@@ -691,7 +713,7 @@
 #DEFINE	reset_average_depth		flag5,1	; =1: Reset the average depth
 #DEFINE	store_sample			flag5,2	; =1: Store a new sample
 #DEFINE	divemode2				flag5,3	; =1: Dive longer then one minute
-#DEFINE	FLAG_active_descent		flag5,4	; Used in Apnoe mode
+#DEFINE	FLAG_active_descent		flag5,4	;     Used in Apnoe mode
 #DEFINE	event_occured			flag5,5	; =1: An event occured, store it!
 #DEFINE	divemode_menu_active	flag5,6 ; =1: The divemode menu is shown
 #DEFINE	temp_changed			flag5,7	; =1: The temperature changed
@@ -708,9 +730,9 @@
 #DEFINE dive_hud3_displayed     flag7,0 ; =1: The Sensor3 HUD reading is displayed
 #DEFINE no_more_divesecs        flag7,1 ; =1: Do no longer show seconds in divemode
 #DEFINE FLAG_gauge_mode         flag7,2 ; =1: In Gauge mode
-#DEFINE ignore_last_edited_gas  flag7,3 ; Used in gaslist_cleanup_list
+#DEFINE ignore_last_edited_gas  flag7,3 ;     Used in gaslist_cleanup_list
 #DEFINE ccr_diluent_setup       flag7,4 ; =1: Setting up Diluents ("Gas6-10")
-#DEFINE menu_show_sensors       flag7,5 ; =1: Update HUD data in menu
+#DEFINE menu_show_sensors       flag7,5 ; =1: Update HUD data in menu			## NOT USED ANYMORE ##
 #DEFINE short_gas_decriptions   flag7,6 ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
 #DEFINE max_depth_greater_100m  flag7,7 ; =1: Max. Depth > 100m
 
@@ -727,7 +749,7 @@
 #DEFINE in_color_menu           flag9,1 ; =1: In the color scheme menu
 #DEFINE bailoutgas_event        flag9,2 ; =1: bailout was selected or a gaschange during bailout
 #DEFINE win_invert              flag9,3 ; =1: Invert font output
-#DEFINE show_safety_stop	flag9,4	; =1: Show the safety stop
+#DEFINE show_safety_stop		flag9,4	; =1: Show the safety stop
 #DEFINE	safety_stop_active      flag9,5	; =1: The safety stop is currently displayed
 #DEFINE new_s8_data_available   flag9,6 ; =1: New data frame recieved
 #DEFINE print_compass_label     flag9,7 ; =1: print the graphical comapss label
@@ -760,28 +782,106 @@
 #DEFINE blinking_depth_toggle   flag12,7    ; toggle to blink
 
 #DEFINE neg_flag_velocity       flag13,0    ; neg_flag backup for velocity logic
-#DEFINE	analog_sw1_pressed	flag13,1    ; =1: Analog switch 1 pressed
-#DEFINE	analog_sw2_pressed	flag13,2    ; =1: Analog switch 2 pressed
+#DEFINE	analog_sw1_pressed		flag13,1    ; =1: Analog switch 1 pressed
+#DEFINE	analog_sw2_pressed		flag13,2    ; =1: Analog switch 2 pressed
 #DEFINE sp2_switched            flag13,3    ; =1: This setpoint has been autoselected already
 #DEFINE sp3_switched            flag13,4    ; =1: This setpoint has been autoselected already
 #DEFINE sp4_switched            flag13,5    ; =1: This setpoint has been autoselected already
 #DEFINE sp5_switched            flag13,6    ; =1: This setpoint has been autoselected already
-#DEFINE	use_old_batt_flag	flag13,7    ; =1: load old battery information after power-on reset
+#DEFINE	use_old_batt_flag		flag13,7    ; =1: load old battery information after power-on reset
 		
-#DEFINE	FLAG_pscr_mode		flag14,0    ; =1: OSTC is in PSCR mode
-#DEFINE	deep_sleep		flag14,1    ; OSTC is in deep sleep (ignore buttons, etc)
+#DEFINE	FLAG_pscr_mode			flag14,0    ; =1: OSTC is in PSCR mode
+#DEFINE	deep_sleep				flag14,1    ; OSTC is in deep sleep (ignore buttons, etc)
+#DEFINE sensors_agree			flag14,2    ; =1: the ppO2 of all sensors are within the threshold range
+#DEFINE	gas_needs_attention		flag14,3    ; =1: the gas needs attention      has been raised before
+#DEFINE	gas_needs_warning		flag14,4    ; =1: the gas needs warning        has been raised before
+#DEFINE	sensor_warning			flag14,5    ; =1: the sensors disagree warning has been raised before
+#DEFINE	alternative_divelayout	flag14,6    ; =1: the alternative divelayout is used (aka Blind Mode)
+#DEFINE	i2c_error_flag			flag14,7    ; =1: An I2C error occured
+
+
+; Update flags in divemode, =1: Update the screen
+#DEFINE	FLAG_TFT_divemode_mask				tft_update_flags+0,0
+#DEFINE	FLAG_TFT_display_ndl_mask			tft_update_flags+0,1
+#DEFINE FLAG_TFT_depth						tft_update_flags+0,2
+#DEFINE FLAG_TFT_divemins					tft_update_flags+0,3
+#DEFINE	FLAG_TFT_show_safety_stop			tft_update_flags+0,4	
+#DEFINE	FLAG_TFT_display_ndl				tft_update_flags+0,5
+#DEFINE	FLAG_TFT_display_deko_mask			tft_update_flags+0,6
+#DEFINE	FLAG_TFT_display_deko				tft_update_flags+0,7
+#DEFINE	FLAG_TFT_display_tts				tft_update_flags+1,0
+#DEFINE	FLAG_TFT_temp_divemode				tft_update_flags+1,1
+#DEFINE	FLAG_TFT_divemode_warning			tft_update_flags+1,2
+#DEFINE	FLAG_TFT_divemode_warning_clear		tft_update_flags+1,3
+#DEFINE	FLAG_TFT_active_gas_divemode		tft_update_flags+1,4
+#DEFINE	FLAG_TFT_clear_safety_stop			tft_update_flags+1,5
+#DEFINE	FLAG_TFT_max_depth					tft_update_flags+1,6
+#DEFINE	FLAG_TFT_divemode_mask_alt			tft_update_flags+1,7
+#DEFINE	FLAG_TFT_dive_warning_text_clear	tft_update_flags+2,0
+#DEFINE	FLAG_TFT_dive_warning_text_clr2		tft_update_flags+2,1
+#DEFINE	FLAG_TFT_max_depth_alt				tft_update_flags+2,2
+#DEFINE	FLAG_TFT_big_deco_alt				tft_update_flags+2,3
+#define FLAG_TFT_not_defined_yet			tft_update_flags+2,7	; last usable flag within tft_update_flags memory space
+
+
+; Bit Masks	for communication with p2_deco.c
+#define	DECO_STATUS_MASK		.3
+
+; Bit Flags for communication with p2_deco.c - char_O_deco_status
+#define DECO_STATUS_0_FLAG		.0
+#define DECO_STATUS_1_FLAG		.1
+#define DECO_MODE_LOOP_FLAG 	.2
+#define DECO_MODE_PSCR_FLAG 	.3
+#define DECO_PLAN_FLAG 			.4
+#define DECO_CNS_FLAG 			.5
+#define DECO_VOLUME_FLAG 		.6
+#define DECO_ASCENT_FLAG 		.7
+
+; Bit Flags for communication with p2_deco.c - char_O_main_status
+;#define DECO_MODE_LOOP_FLAG 	.2
+;#define DECO_MODE_PSCR_FLAG 	.3
+#define DECO_GASCHANGE_OVRD		.4
+#define DECO_BOTTOM_FLAG		.6
+
+; Bit Values for communication with p2_deco.c
+#define DECO_STATUS_INIT		.3
+#define	DECO_MODE_LOOP			.4
+#define DECO_MODE_PSCR			.8
+#define DECO_PLAN_ALTERNATE		.16
+#define DECO_CNS_CALCULATE		.32
+#define DECO_VOLUME_CALCULATE	.64
+#define	DECO_ASCENT_DELAYED		.128
+
+; Bit Flags for char_O_deco_warnings
+#define IBCD_warning			.0
+#define IBCD_warning_lock		.1
+#define mbubble_warning			.2
+#define mbubble_warning_lock	.3
+#define	outside_warning			.4
+#define	outside_warning_lock	.5
+#define stoptable_overflow		.6
+#define	deco_flag				.7
+
+#define char_invalid_flag		.7
+
+#define int_invalid_flag		.2
+#define int_not_yet_computed	.3
+#define	int_is_zero				.3
+#define int_low_flag			.4
+#define int_high_flag			.5
+#define	int_prewarning_flag		.6
+#define	int_warning_flag		.7
+
+
+
 ;=============================================================================
 ; C-code Routines
 ; PART 2
     extern deco_calc_CNS_decrease_15min    
-    extern deco_calc_CNS_fraction
     extern deco_calc_desaturation_time
     extern deco_calc_hauptroutine
-    extern deco_calc_tissue
-    extern deco_calc_percentage
     extern deco_calc_wo_deco_step_1_min
     extern deco_calc_dive_interval
-    extern deco_clear_CNS_fraction
     extern deco_clear_tissue
     extern deco_pull_tissues_from_vault
     extern deco_push_tissues_to_vault
--- a/src/i2c.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/i2c.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -2,17 +2,29 @@
 ;
 ;   File i2c.asm
 ;
-;   I2C Interface to HMC5883L and MMA8452Q
-;
+;   I2C Interface
+;   
+    ; Compass0
 ;   HMC5883L's read address (8-Bit):    0x3D
 ;   HMC5883L's write address (8-Bit):   0x3C
-;
 ;   MMA8452Q's read address (8-Bit):    0x39
 ;   MMA8452Q's write address (8-Bit):   0x38
 ;
+    ; Compass1
 ;   LSM303D's read address (8-Bit):    0x3D
 ;   LSM303D's write address (8-Bit):   0x3C
 ;
+    ; Compass2
+;   LSM303AGR's Compass read address (8-Bit):    0x3D
+;   LSM303AGR's Compass write address (8-Bit):   0x3C
+;   LSM303AGR's Acceleration read address (8-Bit):    0x33
+;   LSM303AGR's Acceleration write address (8-Bit):   0x32
+;    
+    ; RX Circuity
+;   RX Circuity read address (8-Bit):    0x51
+;   RX Circuity write address (8-Bit):   0x50
+;
+;
 ;   Copyright (c) 2012, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
 ; HISTORY
@@ -22,28 +34,29 @@
 #include "hwos.inc"                ; Mandatory header
 #include "wait.inc"
 #include "math.inc"
+#include "external_flash.inc"
 
 i2c    CODE
 
 WaitMSSP:
 	decfsz		i2c_temp,F          ; check for timeout during I2C action
-	bra			WaitMSSP2
-	bra			I2CFail             ; timeout occured
+	bra		WaitMSSP2
+	bra		I2CFail             ; timeout occured
 WaitMSSP2:
-	btfss		PIR1,SSPIF
-	bra			WaitMSSP
+	btfss		PIR1,SSP1IF
+	bra		WaitMSSP
 	clrf		i2c_temp
-	bcf			PIR1,SSPIF
-	nop
+	bcf		PIR1,SSP1IF
 	return
 
 I2C_WaitforACK:
-	btfss		SSPCON2,ACKSTAT     ; checks for ACK bit from slave
-    return
+	btfss		SSP1CON2,ACKSTAT     ; checks for ACK bit from slave
+	return
 I2CFail:
 	rcall		I2CReset            ; I2C Reset
-	bcf			PIR1,SSPIF
+	bcf		PIR1,SSP1IF
 	clrf		i2c_temp
+	bsf		i2c_error_flag		; set error flag
 	return
 
 I2CReset:                           ; Something went wrong (Slave holds SDA low?)
@@ -76,7 +89,7 @@
 	clrf		SSP1CON1            ; setup I²C Mode
 	WAITMS		d'10'               ; Reset-Timeout for I2C devices
 	movlw		b'00000000'         ; with slew rate control
-	movwf		SSPSTAT
+	movwf		SSP1STAT
 	movlw		b'00101000'
 	movwf		SSP1CON1
 	movlw		b'00000000'
@@ -121,9 +134,11 @@
 
     global  I2C_RX_accelerometer
 I2C_RX_accelerometer:
+    btfsc   compass_type2	    ; compass2
+    bra	    I2C_RX_accelerometer_compass2    ; yes
     btfsc   compass_type	    ; compass1?
     bra	    I2C_RX_accelerometer_compass1    ; yes
-;I2C_RX_accelerometer_compass0:
+I2C_RX_accelerometer_compass0:
     bsf			SSP1CON2,SEN		; Start condition
     rcall		WaitMSSP
     movlw		0x38                ; address
@@ -190,8 +205,7 @@
     movff       hi,accel_DZ+1       ; Copy result
 
 	bsf			SSP1CON2,PEN		; Stop condition
-	rcall		WaitMSSP
-    return
+	bra		WaitMSSP	; (And return)
 
 I2C_RX_accelerometer_compass1:
     bsf		SSP1CON2,SEN		; Start condition
@@ -203,19 +217,21 @@
     bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
     rcall	WaitMSSP
     movlw	0x3D                ; address
+I2C_RX_accelerometer_compass1_xx:   ; compass2 continues here... 
     rcall       I2C_TX
-    
     ; Non-flipped screen:
     ; Chip orientation on the PCB requires
     ; Original = Corrected
-    ; x = -x
+    ; x = -x (Compass 1)
+    ; x = x (Compass 2)
     ; y = -y
     ; z = -z
 
     ; Flipped screen:
     ; Chip orientation on the PCB requires
     ; Original = Corrected
-    ; x = x
+    ; x = x (Compass 1)
+    ; x = -x (Compass 2)
     ; y = y
     ; z = -z
     
@@ -225,16 +241,30 @@
     rcall       I2C_OneByteRX       
     movff	SSP1BUF,hi  ;accel_DX+1
     rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
+    btfss	compass_type2	    ; compass 2?
+    bra		I2C_RX_accelerometer1_c1    ; No, compass 1
+    ; compass 2
+    btfss       flip_screen             ; 180° rotation ?
+    bra		I2C_RX_accelerometer2_c1    ; No, continue with normal compass1 routines for Y and Z
+    ; flipped compass 2, negate x
+    comf        hi                    ; 16bit sign change.
+    negf        lo
+    btfsc       STATUS,C            ; Carry to propagate ?
+    incf        hi,F                ; YES: do it.
+    bra		I2C_RX_accelerometer2_c1    ; continue with normal compass1 routines for Y and Z
+    
+I2C_RX_accelerometer1_c1:    
     btfsc       flip_screen             ; 180° rotation ?
     bra         I2C_RX_accelerometer2_c1   ; Yes
+    ; non-flipped compass 1, negate x
     comf        hi                    ; 16bit sign change.
     negf        lo
     btfsc       STATUS,C            ; Carry to propagate ?
     incf        hi,F                ; YES: do it.
 I2C_RX_accelerometer2_c1:
+    ; flipped compass 1, non-flipped compass 2
     movff       lo,accel_DX+0
     movff       hi,accel_DX+1       ; Copy result
-    
     rcall       I2C_OneByteRX       
     movff	SSP1BUF,lo  ;accel_DY+0
     rcall       I2C_OneByteRX       
@@ -268,6 +298,18 @@
     movff       hi,accel_DZ+1       ; Copy result
     return
     
+I2C_RX_accelerometer_compass2:
+    bsf		SSP1CON2,SEN	    ; Start condition
+    rcall	WaitMSSP
+    movlw	0x32                ; address
+    rcall       I2C_TX
+    movlw	b'10101000'	    ; 0x28 with auto-increment (MSB=1)
+    rcall       I2C_TX
+    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
+    rcall	WaitMSSP
+    movlw	0x33                ; address
+    bra		I2C_RX_accelerometer_compass1_xx
+    
 I2C_OneByteRX:
     bsf		SSP1CON2, RCEN      ; Enable recieve mode
     rcall	WaitMSSP
@@ -276,9 +318,11 @@
 
     global  I2C_RX_compass
 I2C_RX_compass:
+    btfsc   compass_type2	    ; compass2
+    bra	    I2C_RX_compass2    ; yes
     btfsc   compass_type	    ; compass1?
     bra	    I2C_RX_compass1    ; yes
-;I2C_RX_compass0:
+I2C_RX_compass0:
     bsf		SSP1CON2,SEN		; Start condition
     rcall	WaitMSSP
     movlw	0x3C                ; address
@@ -288,7 +332,7 @@
     bsf		SSP1CON2,PEN		; Stop condition
     rcall	WaitMSSP
 
-    bcf		PIR1,SSPIF
+    bcf		PIR1,SSP1IF
     bsf		SSP1CON2,SEN		; Start condition
     rcall	WaitMSSP
     movlw	0x3D                ; address
@@ -317,17 +361,17 @@
     ; y = -x
 
     rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,compass_DY+1; Data Byte
+    movff	SSP1BUF,compass_DY+1; Data Byte
     rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,compass_DY+0; Data Byte
+    movff	SSP1BUF,compass_DY+0; Data Byte
     btfsc       flip_screen         ; 180° rotation ?
-    bra         I2C_RX_compass2     ; Yes
+    bra         I2C_RX_compass0_2     ; Yes
     banksel compass_DY
     comf        compass_DY+1        ; 16bit sign change.
     negf        compass_DY+0
     btfsc       STATUS,C            ; Carry to propagate ?
     incf        compass_DY+1,F      ; YES: do it.
-I2C_RX_compass2:
+I2C_RX_compass0_2:
     banksel common
     rcall       I2C_OneByteRX       ; Get one byte
     movff	SSP1BUF,compass_DZ+1; Data Byte
@@ -362,7 +406,7 @@
     rcall	WaitMSSP
     movlw	0x3D                ; address
     rcall       I2C_TX
-
+;rcall	WaitMSSP	    ; Needed? (mH)
     rcall	I2C_OneByteRX       ; Get one byte
     movff	SSP1BUF,lo	    ; Data Byte
     rcall	I2C_OneByteRX       ; Get one byte
@@ -406,12 +450,79 @@
     movff	lo,compass_DZ+0
     movff	hi,compass_DZ+1
     bsf		SSP1CON2,PEN	    ; Stop condition
+    bra		WaitMSSP ;(And return)
+
+I2C_RX_compass2:    ; newest compass
+    bsf		SSP1CON2,SEN	    ; Start condition
     rcall	WaitMSSP
-    return
-
+    movlw	0x3C                ; address
+    rcall       I2C_TX
+    movlw	0xE8		    ; 0x68 with auto-increment (MSB=1)
+    rcall       I2C_TX
+    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
+    rcall	WaitMSSP
+    movlw	0x3D                ; address
+    rcall       I2C_TX
+;    rcall	WaitMSSP
+    rcall	I2C_OneByteRX       ; Get one byte
+    movff	SSP1BUF,lo	    ; Data Byte
+    rcall	I2C_OneByteRX       ; Get one byte
+    movff	SSP1BUF,hi	    ; Data Byte
+;    rcall	I2C_TwoBytesRX_div8_2
+    btfsc       flip_screen         ; 180° rotation ?
+    bra		I2C_RX_compass2_1   ; Yes, do nothing with X
+    ; No, flip X
+    comf        hi                  ; 16bit sign change.
+    negf        lo
+    btfsc       STATUS,C            ; Carry to propagate ?
+    incf        hi,F                ; YES: do it.
+I2C_RX_compass2_1:   
+    movff	lo,compass_DX+0
+    movff	hi,compass_DX+1
+    rcall	I2C_OneByteRX       ; Get one byte
+    movff	SSP1BUF,lo	    ; Data Byte
+    rcall	I2C_OneByteRX       ; Get one byte
+    movff	SSP1BUF,hi	    ; Data Byte
+;    rcall	I2C_TwoBytesRX_div8_2
+    btfss       flip_screen         ; 180° rotation ?
+    bra		I2C_RX_compass2_2   ; No, do nothing with Y
+    ; Yes, flip Y
+    comf        hi                  ; 16bit sign change.
+    negf        lo
+    btfsc       STATUS,C            ; Carry to propagate ?
+    incf        hi,F                ; YES: do it.
+I2C_RX_compass2_2:   
+    movff	lo,compass_DY+0
+    movff	hi,compass_DY+1
+    rcall	I2C_OneByteRX       ; Get one byte
+    movff	SSP1BUF,lo	    ; Data Byte
+    rcall	I2C_OneByteRX       ; Get one byte
+    movff	SSP1BUF,hi	    ; Data Byte
+    ;rcall	I2C_TwoBytesRX_div8_2
+    movff	lo,compass_DZ+0
+    movff	hi,compass_DZ+1
+    bsf		SSP1CON2,PEN	    ; Stop condition
+    bra		WaitMSSP ;(And return)
+    
+    
     global  I2C_init_compass
 I2C_init_compass:
     bsf     compass_enabled
+    bcf	    compass_type2
+    ; probe compass 2
+    bsf	SSP1CON2,SEN		; Start condition
+    rcall	WaitMSSP
+    movlw	0x32			; Address byte + Write bit
+    movwf	SSP1BUF			; control byte
+    rcall	WaitMSSP
+    btfss	SSP1CON2,ACKSTAT	; ACK?
+    bsf	    compass_type2		; ACK send. compass2 present
+    bsf	SSP1CON2,PEN		; Stop condition
+    rcall	WaitMSSP
+    
+    btfsc   compass_type2
+    bra	    I2C_init_compass2		; Compass2
+    ; Check for compass0 or compass1...
     bsf	    compass_type	    ; set flag
     bsf	    SSP1CON2,SEN		; Start condition
     rcall   WaitMSSP
@@ -421,7 +532,7 @@
     rcall   I2C_TX
     bsf	    SSP1CON2,PEN		; Stop condition
     rcall   WaitMSSP
-    bcf	    PIR1,SSPIF
+    bcf	    PIR1,SSP1IF
     bsf	    SSP1CON2,SEN		; Start condition
     rcall   WaitMSSP
     movlw   0x3D                ; address
@@ -445,22 +556,6 @@
 ;	movlw	b'01101001'        ; ConfigA:  3Hz, 8 Samples averaged, Test Mode (Positive Bias)
     movlw	b'01101000'        ; ConfigA:  3Hz, 8 Samples averaged
     rcall       I2C_TX
-    bra         I2C_init_compass_common
-
-    global  I2C_init_compass_fast
-I2C_init_compass_fast:
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_init_compass_fast1  ; yes
-;I2C_init_compass_fast0:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x00
-    rcall       I2C_TX
-    movlw	b'00111000'        ; ConfigA: 75Hz, 2 Samples averaged
-;    movlw	b'00111001'        ; ConfigA: 75Hz, 2 Samples averaged, Test Mode (Positive Bias)
-    rcall       I2C_TX
 I2C_init_compass_common:
     movff       opt_compass_gain,i2c_temp    ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
     swapf       i2c_temp,F
@@ -473,8 +568,7 @@
     movlw	b'00000000'        ; Continous Mode
     rcall       I2C_TX
     bsf	SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    return
+    bra		WaitMSSP	; (And return)
 
 I2C_init_compass1:
     bsf		SSP1CON2,SEN	; Start condition
@@ -503,37 +597,32 @@
     movlw	b'00000000'	; CTRL7 Continuous Mode
     rcall       I2C_TX
     bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    return
+    bra		WaitMSSP	; (And return)
     
-I2C_init_compass_fast1:
-    bsf		SSP1CON2,SEN		; Start condition
+I2C_init_compass2:
+    bsf		SSP1CON2,SEN	; Start condition
     rcall	WaitMSSP
     movlw	0x3C            ; address
     rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL0
+    movlw	0xE0		; 0x60 with auto-increment (MSB=1)
     rcall       I2C_TX
-    movlw	b'01101111'	; CTRL1 (100Hz, BDU=0, x,y,z = ON)
-    rcall       I2C_TX
-    movlw	b'11000000'	; CTRL2 (50Hz, +/-2g, 
+    movlw	b'00000000'	; CFG_REG_A_M (10Hz, Continuous)
     rcall       I2C_TX
-    movlw	b'00000000'	; CTRL3
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL4
+    movlw	b'00000000'	; CFG_REG_B_M (Low-Pass Filter off)
     rcall       I2C_TX
-    movlw	b'01110100'	; CTRL5 HIGH res, 100Hz
+    movlw	b'00000000'	; CFG_REG_C_M BDU=0
     rcall       I2C_TX
-    bra		init_compass1_common
+    bsf		SSP1CON2,PEN	; Stop condition
+    bra		WaitMSSP	;(And return)
     
     global  I2C_sleep_compass
 I2C_sleep_compass:
     bcf         compass_enabled
-    
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_sleep_compass1	    ; yes
-;I2C_sleep_compass0:
+    btfsc	compass_type2	    ; compass2?
+    bra		I2C_sleep_compass2  ; yes
+    btfsc	compass_type	    ; compass1?
+    bra		I2C_sleep_compass1  ; yes
+I2C_sleep_compass0:
     bsf		SSP1CON2,SEN		; Start condition
     rcall	WaitMSSP
     movlw	0x3C                ; address
@@ -547,8 +636,7 @@
     movlw	b'00000010'        ; Idle Mode
     rcall       I2C_TX
     bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    return
+    bra		WaitMSSP	; (And return)
 
 I2C_sleep_compass1:
     bsf		SSP1CON2,SEN	    ; Start condition
@@ -570,59 +658,111 @@
     movlw	b'00000010'         ; data for CTRL_REG7: magnetic sensor Power-down mode
     rcall       I2C_TX
     bsf		SSP1CON2,PEN	    ; Stop condition
+    bra		WaitMSSP	;(And return)
+
+    
+I2C_sleep_compass2:
+    ; magnetic
+    bsf		SSP1CON2,SEN	; Start condition
     rcall	WaitMSSP
-    return
+    movlw	0x3C            ; address
+    rcall       I2C_TX
+    movlw	0xE0		; 0x60 with auto-increment (MSB=1)
+    rcall       I2C_TX
+    movlw	b'00000010'	; CFG_REG_A_M (Idle mode)
+    rcall       I2C_TX
+    bsf		SSP1CON2,PEN	; Stop condition
+    bra		WaitMSSP	; (And return)
     
+I2C_sleep_accelerometer2:
+    ; accelerometer
+    bsf		SSP1CON2,SEN		; Start condition
+    rcall	WaitMSSP
+    movlw	0x32            ; address
+    rcall       I2C_TX
+    movlw	0x9F		; 1F with auto-increment (MSB=1)
+    rcall       I2C_TX
+    movlw	b'00000000'	; TEMP_CFG_REG_A (Temp sensor off)
+    rcall       I2C_TX
+    movlw	b'00000000'	; CTRL_REG1_A (All off)
+    rcall       I2C_TX
+    bsf		SSP1CON2,PEN	; Stop condition
+    bra		WaitMSSP	; (And return)
 
    global  I2C_init_accelerometer
 I2C_init_accelerometer:
+    btfsc   compass_type2	    ; compass2?
+    bra	    I2C_init_accelerometer2 ; Yes.
+
     btfsc   compass_type	    ; compass1?
     return			    ; yes, ignore
 
     rcall       I2C_sleep_accelerometer ; Regs can only be changed in St.By mode
 
-	bsf			SSP1CON2,SEN		; Start condition
-	rcall		WaitMSSP
-	movlw		0x38                ; address
+    bsf		SSP1CON2,SEN		; Start condition
+    rcall	WaitMSSP
+    movlw	0x38                ; address
     rcall       I2C_TX
-	movlw		0x0E                ; XYZ_DATA_CFG
+    movlw	0x0E                ; XYZ_DATA_CFG
     rcall       I2C_TX
-	movlw		b'00000000'         ; High pass Filter=0 , +/- 2g range
+    movlw	b'00000000'         ; High pass Filter=0 , +/- 2g range
     rcall       I2C_TX
-	bsf			SSP1CON2,PEN		; Stop condition
-	rcall		WaitMSSP
+    bsf		SSP1CON2,PEN		; Stop condition
+    rcall	WaitMSSP
 
 
-	bsf			SSP1CON2,SEN		; Start condition
-	rcall		WaitMSSP
-	movlw		0x38                ; address
+    bsf		SSP1CON2,SEN		; Start condition
+    rcall	WaitMSSP
+    movlw	0x38                ; address
     rcall       I2C_TX
-	movlw		0x2A                ; CTRL_REG1
+    movlw	0x2A                ; CTRL_REG1
     rcall       I2C_TX
 ;	movlw		b'00110000'         ; CTRL_REG1: 160ms data rate, St.By Mode
-	movlw		b'00110100'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode
+    movlw	b'00110100'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode
     rcall       I2C_TX
-	movlw		b'00000010'         ; CTRL_REG2: High Res in Active mode
+    movlw	b'00000010'         ; CTRL_REG2: High Res in Active mode
     rcall       I2C_TX
-	bsf			SSP1CON2,PEN		; Stop condition
-	rcall		WaitMSSP
+    bsf		SSP1CON2,PEN		; Stop condition
+    rcall	WaitMSSP
 
-	bsf			SSP1CON2,SEN		; Start condition
-	rcall		WaitMSSP
-	movlw		0x38                ; address
+    bsf		SSP1CON2,SEN		; Start condition
+    rcall	WaitMSSP
+    movlw	0x38                ; address
     rcall       I2C_TX
-	movlw		0x2A                ; CTRL_REG1
+    movlw	0x2A                ; CTRL_REG1
     rcall       I2C_TX
 ;	movlw		b'00110001'         ; CTRL_REG1: 160ms data rate, Active Mode
-	movlw		b'00110101'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode, Active Mode
+    movlw	b'00110101'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode, Active Mode
+    rcall       I2C_TX
+    bsf		SSP1CON2,PEN		; Stop condition
+    bra		WaitMSSP	; (And return)
+    
+I2C_init_accelerometer2:
+    bsf		SSP1CON2,SEN		; Start condition
+    rcall	WaitMSSP
+    movlw	0x32            ; address
+    rcall       I2C_TX
+    movlw	0x9F		; 1F with auto-increment (MSB=1)
     rcall       I2C_TX
-	bsf			SSP1CON2,PEN		; Stop condition
-	rcall		WaitMSSP
-
-    return
+    movlw	b'00000000'	; TEMP_CFG_REG_A (Temp sensor off)
+    rcall       I2C_TX
+    movlw	b'01010111'	; CTRL_REG1_A (100Hz, x,y,z = ON)
+    rcall       I2C_TX
+    movlw	b'00000000'	; CTRL_REG2_A
+    rcall       I2C_TX
+    movlw	b'00000000'	; CTRL_REG3_A
+    rcall       I2C_TX
+    movlw	b'00000000'	; CTRL_REG4_A (BDU=0, +/-2g, 
+    rcall       I2C_TX
+    movlw	b'00000000'	; CTRL_REG5_A
+    rcall       I2C_TX
+    bsf		SSP1CON2,PEN		; Stop condition
+    bra		WaitMSSP	; (And return)
 
     global  I2C_sleep_accelerometer
 I2C_sleep_accelerometer:
+    btfsc   compass_type2	    ; Compass2
+    bra	    I2C_sleep_accelerometer2	; Yes
     btfsc   compass_type	    ; compass1?
     return			    ; yes, ignore
 
@@ -635,9 +775,8 @@
 	movlw		b'00000000'         ; St. By Mode
     rcall       I2C_TX
 	bsf			SSP1CON2,PEN		; Stop condition
-	rcall		WaitMSSP
-    return
-
+	bra	WaitMSSP	    ; (And return)
+   
 lt2942_init_again:
 	clrf	i2c_temp
 	movlw	0x02                ; Point to accumulated charge registers
@@ -649,11 +788,12 @@
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
 	bsf	SSP1CON2,PEN		; Stop condition
-	rcall	WaitMSSP; (and return)
+	rcall	WaitMSSP
 	movff	battery_acumulated_charge+1,sub_a+1
 	movff	battery_acumulated_charge+0,sub_a+0
 	; and init again...
-    global  lt2942_init
+
+	global  lt2942_init
 lt2942_init:                    ; Setup Control register B
 	clrf	i2c_temp
 	movlw	0x01                ; Point to control reg B
@@ -662,7 +802,7 @@
 	movff	WREG, SSP1BUF       ; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf		SSP1CON2,PEN		; Stop condition
+	bsf	SSP1CON2,PEN		; Stop condition
 	bra	WaitMSSP ;   (And return)
 
 	global	lt2942_get_status
@@ -721,8 +861,7 @@
     tstfsz  batt_voltage+1  ; <256mV?
     return		    ; No, done.
 
-    rcall   lt2942_init
-    return
+    bra	   lt2942_init	;(and return)
 
 ;	global	lt2942_get_temperature
 ;lt2942_get_temperature:		; Read temperature registers
@@ -874,5 +1013,209 @@
 	rcall	I2C_WaitforACK
 	bsf	SSP1CON2, RCEN			; Enable recieve mode
 	bra	WaitMSSP; (and return)
+	
+	
+	global	I2C_probe_OSTC_rx
+I2C_probe_OSTC_rx:
+    	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x50			; Address byte + Write bit
+	movwf	SSP1BUF			; control byte
+	rcall	WaitMSSP
+	btfss	SSP1CON2,ACKSTAT	; ACK?
+	bsf	ostc_rx_present		; ACK send. OSTC_RX present!
+	bsf	SSP1CON2,PEN		; Stop condition
+	rcall	WaitMSSP
+	btfss	ostc_rx_present		; Do we have the RX?
+	return				; No, Done.
+	WAITMS	.1
+	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x50			; Address byte + Write bit
+	movwf	SSP1BUF			; control byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	movlw	0x1B
+	movwf	SSP1BUF			; Data Byte (Get firmware)
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	bsf	SSP1CON2,PEN		; Stop condition
+	rcall	WaitMSSP
+	WAITMS	.1
+	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x51			; Address byte + Read bit
+	movwf	SSP1BUF			; control byte
+	rcall	WaitMSSP
+	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,rx_firmware+0
+	bsf	SSP1CON2,ACKEN		; Master acknowlegde
+	rcall	WaitMSSP
+	
+	; last byte in read from RX circuity always with a NACK!
+	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,rx_firmware+1
+	bsf	SSP1CON2,ACKDT
+	bsf	SSP1CON2,ACKEN		; Master NOT acknowlegde
+	rcall	WaitMSSP
+	bcf	SSP1CON2,ACKDT		; Reset ACKDT flag
+	bsf	SSP1CON2,PEN		; Stop condition
+	bra 	WaitMSSP ;(and return)
+	
+
+	global	I2C_get_tankdata
+I2C_get_tankdata:
+;    
+;	movlw	.1
+;	movff	WREG,rx_buffer+0
+;	movlw	.125
+;	movff	WREG,rx_buffer+1
+;	movlw	HIGH	.1500
+;	movff	WREG,rx_buffer+2
+;	movlw	LOW	.1500		; 150,0bar
+;	movff	WREG,rx_buffer+3
+;
+;	movlw	.1
+;	movff	WREG,rx_buffer+6
+;	movlw	.140
+;	movff	WREG,rx_buffer+7
+;	movlw	HIGH	.2251
+;	movff	WREG,rx_buffer+8
+;	movlw	LOW	.2251		; 225,1bar
+;	movff	WREG,rx_buffer+9
+;
+;	
+;    
+;	return	;mH
     
+    
+    	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+    	movlw	0x50			; Address byte + Write bit
+	movwf	SSP1BUF			; control byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	movlw	0x1E			; Read buffer2 (48 Bytes)
+	movwf	SSP1BUF	; Data Byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	bsf	SSP1CON2,PEN		; Stop condition
+	rcall	WaitMSSP
+	WAITMS	.1
+
+	; read 48 bytes
+	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x51			; Address byte + read bit
+	movwf	SSP1BUF			; control byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	movlw	.47			; 47 with ACK + 1 w/o ACK
+	movwf	temp1
+	lfsr	FSR2,rx_buffer+0
+I2C_get_tankdata_loop_read:
+	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,POSTINC2
+	bcf	SSP1CON2,ACKDT
+	bsf	SSP1CON2,ACKEN		; Master acknowlegde
+	rcall	WaitMSSP
+	decfsz	temp1,F
+	bra	I2C_get_tankdata_loop_read
+
+	; 1 w/o ACK
+    	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,POSTINC2
+	bsf	SSP1CON2,ACKDT
+	bsf	SSP1CON2,ACKEN		; Master NOT acknowlegde
+	rcall	WaitMSSP
+	bcf	SSP1CON2,ACKDT		; Reset ACKDT flag
+	
+	bsf	SSP1CON2,PEN		; Stop condition
+	bra 	WaitMSSP ;(and return)
+	
+    
+	global	I2C_update_OSTC_rx
+I2C_update_OSTC_rx:		; 992*64byte master loop
+	bcf	i2c_error_flag		; clear error flag
+	; write 64 bytes
+	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x50			; Address byte + Write bit
+	movwf	SSP1BUF			; control byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	lfsr	FSR2,buffer		; send buffer for verify
+	movlw	.64
+	movwf	temp1
+I2C_update_OSTC_loop:	    ; 64byte flash page loop
+	movff	up,POSTINC2		; store for verify
+	movff	up,SSP1BUF
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	call	ext_flash_read_block		; Read one byte
+	movwf	up				; prepare for transmit
+	decfsz	temp1,F
+	bra	I2C_update_OSTC_loop
+	bsf	SSP1CON2,PEN		; Stop condition
+	rcall	WaitMSSP
+	WAITMS	.1
+
+	; read 64 bytes
+	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x51			; Address byte + read bit
+	movwf	SSP1BUF				; control byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	lfsr	FSR2,buffer		; send buffer for verify
+	movlw	.63			; 63 with ACK + 1 w/o ACK
+	movwf	temp1
+I2C_update_OSTC_loop_read:
+	bsf	SSP1CON2, RCEN			; Enable recieve mode
+	rcall	WaitMSSP
+	movf	SSP1BUF,W
+	cpfseq	POSTINC2	    ; compare readback with original
+	bsf	i2c_error_flag	    ; Not equal, set flag
+	bcf	SSP1CON2,ACKDT
+	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	rcall	WaitMSSP
+	decfsz	temp1,F
+	bra	I2C_update_OSTC_loop_read
+
+	; 1 w/o ACK
+    	bsf	SSP1CON2, RCEN			; Enable recieve mode
+	rcall	WaitMSSP
+	movf	SSP1BUF,W
+	cpfseq	POSTINC2	    ; compare readback with original
+	bsf	i2c_error_flag	    ; Not equal, set flag
+	bsf	SSP1CON2,ACKDT
+	bsf	SSP1CON2,ACKEN			; Master NOT acknowlegde
+	rcall	WaitMSSP
+	bcf	SSP1CON2,ACKDT		    ; Reset ACKDT flag
+	
+	bsf	SSP1CON2,PEN		; Stop condition
+	rcall	WaitMSSP
+	WAITMS	.1
+	
+	bsf	SSP1CON2,SEN		; Start condition
+	rcall	WaitMSSP
+	movlw	0x50			; Address byte + Write bit
+	movwf	SSP1BUF				; control byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	movlw	0x1F			; Write command!
+	movwf	SSP1BUF	; Data Byte
+	rcall	WaitMSSP
+	rcall	I2C_WaitforACK
+	bsf	SSP1CON2,PEN		; Stop condition
+	rcall	WaitMSSP
+	WAITMS	.5			; Required waiting time
+	
+	btfss	i2c_error_flag
+        retlw	.0			; All ok
+	retlw	.255			; an error occured
     END
\ No newline at end of file
--- a/src/i2c.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/i2c.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -8,11 +8,10 @@
 ; HISTORY
 ;  2012-10-24 : [mH] Creation
 
-	extern	I2C_RX_accelerometer
-	extern 	I2C_init_accelerometer
+    extern  I2C_RX_accelerometer
+    extern  I2C_init_accelerometer
     extern  I2C_sleep_accelerometer
     extern  I2C_init_compass
-    extern  I2C_init_compass_fast
     extern  I2C_sleep_compass
     extern  I2C_RX_compass
     extern  lt2942_get_voltage              ; Read battery voltage registers
--- a/src/isr.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/isr.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File isr.asm
+;   File isr.asm									REFACTORED VERSION V2.92
 ;
 ;   INTERUPT subroutines
 ;
@@ -19,7 +19,7 @@
 
 	extern start
 
-isr_high    CODE    0x0008              ;High Priority Interrups
+isr_high    CODE    0x0008              ; High Priority Interrups
 		bra		HighInt
 		nop	
 		nop
@@ -29,7 +29,7 @@
 		nop
 		bra		HighInt
 
-isr_low     CODE    0x00018             ;Low Priority Interrups
+isr_low     CODE    0x00018             ; Low Priority Interrups
 ;	*** low priority interrupts not used
 		retfie FAST						; Restores BSR, STATUS and WREG
 
@@ -45,7 +45,7 @@
 		btfsc	INTCON3,INT1IF			; Buttons
 		rcall	isr_switch_left
 
-; IR/S8-Link
+; IR/S8-Linktimer1int
         btfsc   PIR3,RC2IF              ; UART2
         rcall   isr_uart2               ; IR/S8-Link
 		btfsc	PIR2,TMR3IF				; Timer 3
@@ -104,7 +104,7 @@
 restore_flash_0x00080:
         goto    restore_flash
 
-
+isr_routines;	CODE
 ;=============================================================================
 
 isr_uart2:               ; IR/S8-Link
@@ -838,24 +838,56 @@
 ;=============================================================================
 
 check_nofly_desat_time:
-    	movf    nofly_time+0,W              ; Is nofly null ?
-    	iorwf   nofly_time+1,W
-    	bz     	check_nofly_desat_time2     ; yes...
+
+	; DELETE - no-fly time is now re-computed every second	## no fly
+		; ; REPLACE	## no fly
+    	; ; movf    nofly_time+0,W            ; Is nofly null ?
+    	; ; iorwf   nofly_time+1,W
+		; ; BY
+		; banksel	int_O_nofly_time
+		; movf    int_O_nofly_time+0,W		; Is nofly null ?
+		; iorwf   int_O_nofly_time+1,W
+		
+    	; bz     	check_nofly_desat_time2     ; yes...
 
-		movlw	d'1'
-		subwf	nofly_time+0,F
-		movlw	d'0'
-		subwfb	nofly_time+1,F               ; reduce by one
+		; movlw	d'1'
+		; ; REPLACE	## no fly
+		; ; subwf	nofly_time+0,F
+		; ; BY
+		; subwf	int_O_nofly_time+0,F
+		
+		; movlw	d'0'
+
+		; ; REPLACE	## no fly
+		; ; subwfb	nofly_time+1,F          ; reduce by one
+		; ; BY
+		; subwfb	int_O_nofly_time+1,F		; reduce by one
 
 check_nofly_desat_time2:
-    	movf    desaturation_time+0,W        ; Is Desat null ?
-    	iorwf   desaturation_time+1,W
-    	bz     	check_nofly_desat_time3      ; yes...
+		; REPLACE
+    	; movf    desaturation_time+0,W     ; Is Desat null ?
+    	; iorwf   desaturation_time+1,W
+		; BY
+		banksel	int_O_desaturation_time
+		movf    int_O_desaturation_time+0,W	; Is Desat null ?
+		iorwf   int_O_desaturation_time+1,W
+		
+    	bz     	check_nofly_desat_time3		; yes...
 
-		movlw	d'1'
-		subwf	desaturation_time+0,F
-		movlw	d'0'
-		subwfb	desaturation_time+1,F	   	; reduce by one...
+	; DELETE - desat-time is now re-computed every second	## no fly
+		; movlw	d'1'
+		; ; REPLACE	## no fly
+		; ; subwf	desaturation_time+0,F
+		; ; BY
+		; subwf	int_O_desaturation_time+0,F
+		
+		; movlw	d'0'
+		
+		; ; REPLACE	## no fly
+		; ; subwfb	desaturation_time+1,F	   	; reduce by one...
+		; ; by
+		; subwfb	int_O_desaturation_time+1,F		; reduce by one...
+		banksel	common
 
 	; Increase surface interval timer
         infsnz  surface_interval+0,F
@@ -863,6 +895,9 @@
 		return								; Done
 
 check_nofly_desat_time3:
+		; NEW	## no fly
+		banksel	common
+		
 		clrf	surface_interval+0
 		clrf	surface_interval+1			; Clear surface interval timer
 		return								; Done.
--- a/src/logbook.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/logbook.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File logbook.asm
+;   File logbook.asm								REFACTORED VERSION V2.91
 ;
 ;   Logbook
 ;
@@ -94,7 +94,7 @@
 	#DEFINE	log_max_value_column	.1
 ; Divetime 
 	#DEFINE	log_divetime_value_row		.38
-	#DEFINE	log_divetime_value_column	.65
+	#DEFINE	log_divetime_value_column	.60					; UPDATED, old value was .65
 ; Gaslist below profile
 	#DEFINE	log_gas_row			.225
 	#DEFINE	log_gas_column1		.0
@@ -234,7 +234,7 @@
 	clrf		logbook_flags
     clrf        CCP1CON                     ; stop PWM
     bcf         PORTC,2                     ; Pull PWM out to GND
-	call    TFT_boot
+	call    	TFT_boot
 ;	call		TFT_standard_color
 	clrf		menupos3					; Here: used rows on current logbook-page	
 	clrf		logbook_page_number			; Here: # of current displayed page
@@ -464,41 +464,48 @@
 	call		TFT_convert_date				; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
 	STRCAT_PRINT	""
 
+; NEW code block	## logbook look and feel
+	WIN_SMALL	log_divetime_value_column,logbook_date_row	; align with surrounding data
+	LOG_POINT_TO	log_divemode
+	call	ext_flash_byte_read_plus			; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
+	movff       temp1,lo
+	call        TFT_display_decotype_surface1	; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
+	
 	WIN_SMALL	logbook_time_column, logbook_time_row
 	call		ext_flash_byte_read_plus		; hour
 	movff		temp1,lo
 	call		ext_flash_byte_read_plus		; Minutes
 	movff		temp1,hi
-	output_99x							; hour
+	output_99x									; hour
 	PUTC		':'
 	movff		hi,lo			
-	output_99x							; minute
-	STRCAT_PRINT	""					; Display 1st row of details
+	output_99x									; minute
+	STRCAT_PRINT	""							; Display 1st row of details
 
     LOG_POINT_TO    log_profile_version
-    call		ext_flash_byte_read_plus	; Profile version
+    call		ext_flash_byte_read_plus		; Profile version
     movlw       0x24
-    cpfslt      temp1                       ; <0x24?
-    bra         log_skip_extra_icon         ; Yes, skip
+    cpfslt      temp1                       	; <0x24?
+    bra         log_skip_extra_icon         	; Yes, skip
     
     WIN_SMALL	logbook_time_column-.8, logbook_time_row
-    STRCPY_PRINT	0x94                    ; "End of dive" icon
+    STRCPY_PRINT	0x94                    	; "End of dive" icon
 
 log_skip_extra_icon:
     LOG_POINT_TO    log_max_depth
-	call		ext_flash_byte_read_plus	; read max depth
+	call		ext_flash_byte_read_plus		; read max depth
 	movff		temp1,lo				
-	call		ext_flash_byte_read_plus	; read max depth
+	call		ext_flash_byte_read_plus		; read max depth
 	movff		temp1,hi
-	movff		lo,xA+0						; calculate y-scale for profile display
+	movff		lo,xA+0							; calculate y-scale for profile display
 	movff		hi,xA+1
-	movlw		profile_height_pixels		; pixel height available for profile
+	movlw		profile_height_pixels			; pixel height available for profile
 	movwf		xB+0
 	clrf		xB+1
-	call		div16x16				; does xA/xB=xC
-	movff		xC+0,y_scale+0		; holds LOW byte of y-scale   (mbar/pixel!)
-	movff		xC+1,y_scale+1		; holds HIGH byte of y-scale  (mbar/pixel!)
-	infsnz		y_scale+0,F         ; increase one, because there may be a remainder
+	call		div16x16						; does xA/xB=xC
+	movff		xC+0,y_scale+0					; holds LOW byte of y-scale   (mbar/pixel!)
+	movff		xC+1,y_scale+1					; holds HIGH byte of y-scale  (mbar/pixel!)
+	infsnz		y_scale+0,F         			; increase one, because there may be a remainder
 	incf		y_scale+1,F
 	
 	movlw		LOW	((profile_height_pixels+1)*.1000)
@@ -789,9 +796,9 @@
 
 profile_display_loop:
 	; Init pixel write
-        movf    logbook_pixel_x_pos,W
-	mullw   2
-        call    pixel_write_col320
+    movf 	   logbook_pixel_x_pos,W
+	mullw   	2
+    call	    pixel_write_col320
     
 	movff		profile_temp+0,profile_temp2+0
 	movff		profile_temp+1,profile_temp2+1		; 16Bit x-scaler
@@ -920,15 +927,15 @@
     incf        apnoe_mins,W	; increase row (Y)
     movwf       win_top
     ; limit win_top to 220
-    movlw	.220
-    cpfslt	win_top
-    movwf	win_top
+    movlw		.220
+    cpfslt		win_top
+    movwf		win_top
     decf        logbook_pixel_x_pos,W	; decrease column (X)
     movwf       win_leftx2
     ; limit win_leftx2 to 151
-    movlw	.151
-    cpfslt	win_leftx2
-    movwf	win_leftx2
+    movlw		.151
+    cpfslt		win_leftx2
+    movwf		win_leftx2
 
     movlw       color_orange
     call        TFT_set_color
@@ -990,31 +997,31 @@
 display_profile_no_profile:					; No profile available for this dive!
 
 profile_display_loop_done:
-    btfss   is_bailout                          ; Bailout during the dive?
-    bra     profile_display_loop_done_nobail    ; No
+    btfss   	is_bailout                          ; Bailout during the dive?
+    bra     	profile_display_loop_done_nobail    ; No
     ; Yes, show "Bailout"
-   	movlw   color_pink
-	call    TFT_set_color
+   	movlw   	color_pink
+	call    	TFT_set_color
     WIN_TINY	logbook_bailout_column,logbook_bailout_row
     STRCPY_TEXT_PRINT   tDiveBailout        ; Bailout
 profile_display_loop_done_nobail:
-    btfss   gas6_changed                         ; Gas6
-    bra     profile_display_loop_done_nogas6      ; No
+    btfss   	gas6_changed                         ; Gas6
+    bra     	profile_display_loop_done_nogas6      ; No
     ; Yes, show "Gas 6!"
-   	movlw   color_pink
-	call    TFT_set_color
+   	movlw   	color_pink
+	call    	TFT_set_color
     WIN_TINY	logbook_bailout_column,logbook_bailout_row-.15
-    STRCPY_TEXT  tGas                       ; Gas
-    STRCAT_PRINT  " 6!"
+    STRCPY_TEXT	tGas                       ; Gas
+    STRCAT_PRINT " 6!"
 
 profile_display_loop_done_nogas6:
-	decf	divesecs,F		;-1
+	decf		divesecs,F		;-1
 	read_int_eeprom .2
-	movf	EEDATA,W
-	bcf		STATUS,C
-	subfwb	divesecs,W		; max. dives (low value) - divesecs
-	movwf	lo				; result
-	incf	divesecs,F		;+1
+	movf		EEDATA,W
+	bcf			STATUS,C
+	subfwb		divesecs,W		; max. dives (low value) - divesecs
+	movwf		lo				; result
+	incf		divesecs,F		;+1
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
@@ -1091,7 +1098,6 @@
 	STRCAT_TEXT_PRINT    tLogTunitC
 
 logbook_show_temp_common:
-
 	bcf		leftbind
 	call    TFT_standard_color
 
@@ -1126,9 +1132,15 @@
 
     rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
 display_profile_loop:
-	btfsc		switch_left					; SET/MENU?
+	; REPLACE	## logbook look and feel
+	; btfsc		switch_left					; SET/MENU?
+	; BY
+	btfsc		switch_right
 	bra			logbook_page2   			; Show more information
-	btfsc		switch_right				; ENTER?
+	; REPLACE	## logbook look and feel
+	; btfsc		switch_right				; ENTER?
+	; BY
+	btfsc		switch_left
 	bra			exit_profileview			; back to list
 
     rcall       log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
@@ -1137,7 +1149,7 @@
 	bra			display_profile_loop		; wait for something to do
 
     global  log_screendump_and_onesecond
-log_screendump_and_onesecond:    ; Check if we need to make a screenshot and check for new second
+log_screendump_and_onesecond:    			; Check if we need to make a screenshot and check for new second
 	btfsc		onesecupdate
 	call		timeout_surfmode			; Timeout
 	btfsc		onesecupdate
@@ -1219,23 +1231,23 @@
 	bra		profile_display_fill_up	; Yes!
 
 profile_display_fill_down2:			; Loop	
-	decf		xC+1,F
+	decf	xC+1,F
 
     HALF_PIXEL_WRITE    xC+1        ; Updates just row (0..239)
 
-	movf		xC+0,W
-	cpfseq		xC+1				; Loop until xC+1=xC+0
-	bra			profile_display_fill_down2
+	movf	xC+0,W
+	cpfseq	xC+1					; Loop until xC+1=xC+0
+	bra		profile_display_fill_down2
 	return							; apnoe_mins and xC+0 are untouched
 
 profile_display_fill_up:			; Fill upwards from xC+0 to apone_mins!
-	incf		xC+1,F
+	incf	xC+1,F
 
     HALF_PIXEL_WRITE    xC+1        ; Updates just row (0..239)
 
-	movf		xC+0,W
-	cpfseq		xC+1				; Loop until xC+1=apnoe_mins
-	bra			profile_display_fill_up
+	movf	xC+0,W
+	cpfseq	xC+1					; Loop until xC+1=apnoe_mins
+	bra		profile_display_fill_up
 	return							; apnoe_mins and xC+0 are untouched
 
 ;=============================================================================
@@ -1247,26 +1259,26 @@
 
 	movf		logbook_sample_counter+0,W
 	cpfseq		average_depth_hold_total+0
-	bra			profile_view_get_depth_no_line		; no need to draw a 10min line, continue
+	bra			profile_view_get_depth_no_line	; no need to draw a 10min line, continue
 	movf		logbook_sample_counter+1,W
 	cpfseq		average_depth_hold_total+1
-	bra			profile_view_get_depth_no_line		; no need to draw a 10min line, continue
-; draw a new 10min line here...
+	bra			profile_view_get_depth_no_line	; no need to draw a 10min line, continue
+	; draw a new 10min line here...
 	clrf		logbook_sample_counter+0
-	clrf		logbook_sample_counter+1					; clear counting registers for next line
+	clrf		logbook_sample_counter+1		; clear counting registers for next line
 
 	; Vertical lines...
 	movlw       color_deepblue
-	call		TFT_set_color						; Make this configurable?
+	call		TFT_set_color					; Make this configurable?
 	movlw		profile_top+.1
 	movwf		win_top
-	incf		logbook_pixel_x_pos,W	; draw one line to right to make sure it's the background of the profile
-	movwf		win_leftx2		; Left border (0-159)
+	incf		logbook_pixel_x_pos,W			; draw one line to right to make sure it's the background of the profile
+	movwf		win_leftx2						; Left border (0-159)
 	movlw		profile_height_pixels
 	movwf		win_height				
 	movlw		profile_height_pixels
-	movwf		win_width				; "Window" height
-	call		half_horizontal_line        ; Inputs:  win_top, win_leftx2, win_width, win_color1, win_color2
+	movwf		win_width						; "Window" height
+	call		half_horizontal_line        	; Inputs:  win_top, win_leftx2, win_width, win_color1, win_color2
 
 profile_view_get_depth_no_line:
 	call		ext_flash_byte_read_plus_0x20	; read depth first
@@ -1276,43 +1288,43 @@
 	call		ext_flash_byte_read_plus_0x20	; read Profile Flag Byte
 	movff		temp1,timeout_counter2			; store Profile Flag Byte
 
-	bcf			event_occured				; clear flag
+	bcf			event_occured					; clear flag
 	btfsc		timeout_counter2,7
-	bsf			event_occured				; We also have an Event byte!
-	bcf			timeout_counter2,7			; Clear Event Byte Flag (If any)
+	bsf			event_occured					; We also have an Event byte!
+	bcf			timeout_counter2,7				; Clear Event Byte Flag (If any)
 	; timeout_counter2 now holds the number of additional bytes to ignore (0-127)
-	movlw		0xFD						; end of profile bytes?
+	movlw		0xFD							; end of profile bytes?
 	cpfseq		logbook_cur_depth+0
-	bra			profile_view_get_depth_new1	; no 1st. 0xFD
+	bra			profile_view_get_depth_new1		; no 1st. 0xFD
 	cpfseq		logbook_cur_depth+1
-	bra			profile_view_get_depth_new1	; no 2nd. 0xFD
-	bsf			end_of_profile				; End found! Set Flag! Skip remaining pixels!
+	bra			profile_view_get_depth_new1		; no 2nd. 0xFD
+	bsf			end_of_profile					; End found! Set Flag! Skip remaining pixels!
 	return
 
 profile_view_get_depth_new1:
-	btfsc		event_occured				; Was there an event attached to this sample?
+	btfsc		event_occured					; Was there an event attached to this sample?
 	rcall		profile_view_get_depth_events	; Yes, get information about this event(s)
     
     ;---- Read Tp°, if any AND divisor reached AND bytes available -----------
-    movf        divisor_temperature,W       ; Is Tp° divisor null ?
-    bz          profile_view_get_depth_no_tp; Yes: no Tp° curve.
-    decf        count_temperature,F         ; Decrement tp° counter
-    bnz         profile_view_get_depth_no_tp; No temperature this time
+    movf        divisor_temperature,W       	; Is Tp° divisor null ?
+    bz          profile_view_get_depth_no_tp	; Yes: no Tp° curve.
+    decf        count_temperature,F         	; Decrement tp° counter
+    bnz         profile_view_get_depth_no_tp	; No temperature this time
     
-    call		ext_flash_byte_read_plus_0x20				; Tp° low
+    call		ext_flash_byte_read_plus_0x20	; Tp° low
 	decf        timeout_counter2,F
 	movff		temp1,logbook_cur_tp+0
-    call		ext_flash_byte_read_plus_0x20				; Tp° high
+    call		ext_flash_byte_read_plus_0x20	; Tp° high
 	decf        timeout_counter2,F
 	movff		temp1,logbook_cur_tp+1
 	movff       divisor_temperature,count_temperature   ; Restart counter.
     
     ; Compute Tp° max on the fly...
-    movff       logbook_cur_tp+0,sub_a+0    ; Compare cur_tp > max_tp ?
+    movff       logbook_cur_tp+0,sub_a+0    	; Compare cur_tp > max_tp ?
     movff       logbook_cur_tp+1,sub_a+1
     movff       logbook_max_tp+0,sub_b+0
     movff       logbook_max_tp+1,sub_b+1
-    call        sub16                       ; SIGNED sub_a - sub_b
+    call        sub16                       	; SIGNED sub_a - sub_b
     btfsc       neg_flag
     bra         profile_view_get_depth_no_tp
 
@@ -1337,30 +1349,30 @@
     call		ext_flash_byte_read_plus_0x20
 	decf        timeout_counter2,F
 	movff		temp1,logbook_ceiling
-	movff       divisor_deco,count_deco     ; Restart counter.
+	movff       divisor_deco,count_deco     	; Restart counter.
     call		ext_flash_byte_read_plus_0x20   ; Skip stop length
 	decf        timeout_counter2,F
 
     ;---- Read GF, if any AND divisor=0 AND bytes available ------------------
 profile_view_get_depth_no_deco:
     ; Then skip remaining bytes...
-	movf		timeout_counter2,W			; number of additional bytes to ignore (0-127)
-    tstfsz      timeout_counter2            ; Anything to skip?
-	call		incf_ext_flash_address0_0x20; Yes, increases bytes in ext_flash_address:3 with 0x200000 bank switching
+	movf		timeout_counter2,W				; number of additional bytes to ignore (0-127)
+    tstfsz      timeout_counter2            	; Anything to skip?
+	call		incf_ext_flash_address0_0x20	; Yes, increases bytes in ext_flash_address:3 with 0x200000 bank switching
 	return
 
 profile_view_get_depth_events:
-    clrf        EventByte2                  ; Clear EventByte2
-	call		ext_flash_byte_read_plus_0x20 ; Read Event byte
-	movff		temp1,EventByte				; store EventByte
-	decf		timeout_counter2,F			; reduce counter
+    clrf        EventByte2                  	; Clear EventByte2
+	call		ext_flash_byte_read_plus_0x20 	; Read Event byte
+	movff		temp1,EventByte					; store EventByte
+	decf		timeout_counter2,F				; reduce counter
 
-    btfss       EventByte,7                 ; Another Event byte?
-    bra         profile_no_second_eventbyte ; No
-    call		ext_flash_byte_read_plus_0x20; Read Event byte2
-    movff		temp1,EventByte2			; store EventByte2
-	decf		timeout_counter2,F			; reduce counter
-    bcf         EventByte,7                 ; Clear flag
+    btfss       EventByte,7                 	; Another Event byte?
+    bra         profile_no_second_eventbyte 	; No
+    call		ext_flash_byte_read_plus_0x20	; Read Event byte2
+    movff		temp1,EventByte2				; store EventByte2
+	decf		timeout_counter2,F				; reduce counter
+    bcf         EventByte,7                 	; Clear flag
 
 profile_no_second_eventbyte:
 ; Check event flags in the EventBytes
@@ -1383,10 +1395,10 @@
     return
 
 logbook_event4: ; Stored Gas changed!
-	call		ext_flash_byte_read_plus_0x20 ; Read Gas#
-	decf		timeout_counter2,F			  ; reduce counter
+	call		ext_flash_byte_read_plus_0x20		; Read Gas#
+	decf		timeout_counter2,F			  		; reduce counter
 	movff		temp1,average_depth_hold_total+3
-    rcall       profile_display_color         ; Change profile color according to gas number
+    rcall       profile_display_color         		; Change profile color according to gas number
 	return
 
 logbook_event1: ; Gas6 changed
@@ -1423,7 +1435,7 @@
 exit_profileview:
 ;	call		speed_fastest
 	bcf			sleepmode
-	clrf		timeout_counter2				; restore all registers to build same page again
+	clrf		timeout_counter2			; restore all registers to build same page again
 	movff		divemins_backup,divemins+0
 	movff		logbook_divenumber_temp, logbook_divenumber
 	movff		logbook_max_dive_counter_temp,logbook_max_dive_counter
@@ -1437,7 +1449,7 @@
     call        TFT_boot
     clrf        CCP1CON                     ; stop PWM
     bcf         PORTC,2                     ; Pull PWM out to GND
-        call        TFT_boot
+    call        TFT_boot
 ;	call		TFT_ClearScreen				; clear details/profile
 	goto		logbook2					; start search
 
@@ -1456,24 +1468,24 @@
 	goto		logbook2					; start search
 
 next_logbook3:
-	incf		menupos,F				; +1
+	incf		menupos,F					; +1
 	movlw		logbook_row_number+.2
-	cpfsgt		menupos					; =logbook_row_number+.3?
-	bra			next_logbook3a			; No
+	cpfsgt		menupos						; =logbook_row_number+.3?
+	bra			next_logbook3a				; No
 	movlw		.1
 	movwf		menupos
 	bra			next_logbook3b
 
 next_logbook3a:
-	incf		menupos3,W				; last entry in current page +1
-	cpfseq		menupos					; same as cursor pos.?
-	bra			next_logbook3b			; No
-	movlw		logbook_row_number+.1	; Yes, ...
-	movwf		menupos					; ... jump directly to "next page" if page is not full
+	incf		menupos3,W					; last entry in current page +1
+	cpfseq		menupos						; same as cursor pos.?
+	bra			next_logbook3b				; No
+	movlw		logbook_row_number+.1		; Yes, ...
+	movwf		menupos						; ... jump directly to "next page" if page is not full
 
 	movlw		logbook_row_number
-	cpfseq		menupos3				; Last dive was row logbook_row_number?
-	bsf			all_dives_shown			; No, set flag to load first page again (full reset)
+	cpfseq		menupos3					; Last dive was row logbook_row_number?
+	bsf			all_dives_shown				; No, set flag to load first page again (full reset)
 
 next_logbook3b:
 	clrf		timeout_counter2
@@ -1504,11 +1516,11 @@
 
 display_listdive1:
 	; Check limit (lo:hi must be <1000)
-	movlw	LOW		d'1000'            ; Compare to 1000
-	subwf   lo,W
-	movlw	HIGH	d'1000'
-	subwfb  hi,W
-	bc      display_listdive1b ; carry = no-borrow = > 1000, skip!
+	movlw		LOW		d'1000'            	; Compare to 1000
+	subwf   	lo,W
+	movlw		HIGH	d'1000'
+	subwfb  	hi,W
+	bc      	display_listdive1b ; carry = no-borrow = > 1000, skip!
 
 	infsnz      lo,F
 	incf        hi,F						; hi:lo = hi:lo + 1
@@ -1525,7 +1537,7 @@
     clrf        hi
 	movff		logbook_divenumber,lo		; lo=0 and hi=0 -> show without applied offset
 display_listdive1a:
-	output_16_3                     ; displays only last three figures from a 16Bit value (0-999), # of dive
+	output_16_3                     		; displays only last three figures from a 16Bit value (0-999), # of dive
 	PUTC		' '
     LOG_POINT_TO    log_date+1              ; Point to month
 	call		ext_flash_byte_read_plus	
@@ -1544,22 +1556,22 @@
 	call		ext_flash_byte_read_plus
 	movff		temp1,hi
 
-	TSTOSS      opt_units			; 0=Meters, 1=Feets
+	TSTOSS      opt_units					; 0=Meters, 1=Feets
 	bra			display_listdive2_metric
 ;display_listdive2_imperial:
-	call		convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
+	call		convert_mbar_to_feet    	; convert value in lo:hi from mbar to feet
 	PUTC	' '
 	bcf			leftbind
-    output_16_3                         ; limit to 999 and display only (0-999)
+    output_16_3                         	; limit to 999 and display only (0-999)
 	STRCAT_TEXT tFeets1
 	bra			display_listdive3
 
 display_listdive2_metric:
-    bsf     ignore_digit5               ; no cm...
-	movlw		d'1'					; +1
-	movff		WREG,ignore_digits		; no 1000m
+    bsf     ignore_digit5               	; no cm...
+	movlw		d'1'						; +1
+	movff		WREG,ignore_digits			; no 1000m
 	bcf			leftbind
-	output_16dp .3  					; xxx.y
+	output_16dp .3  						; xxx.y
 	STRCAT_TEXT tMeters
 	PUTC	' '
 
@@ -1570,8 +1582,8 @@
 	movff		temp1,hi
 	output_16_3								; Divetime minutes (0-999min)
 	STRCAT_TEXT tMinutes                    
-    clrf    WREG
-    movff   WREG,buffer+.21                 ; limit to 21 chars
+    clrf    	WREG
+    movff   	WREG,buffer+.21             ; limit to 21 chars
     STRCAT_PRINT ""                         ; Display header-row in list
 	return
 
@@ -1591,263 +1603,281 @@
 	movff		hi,sub_a+1
 	movff		divesecs,sub_b+0
 	clrf		sub_b+1
-	call		subU16						;  sub_c = sub_a - sub_b
+	call		subU16						; sub_c = sub_a - sub_b
 	movff		sub_c+0,lo
 	movff		sub_c+1,hi
 
 logbook_show_divenumber3:
 	WIN_MEDIUM	logbook_divenumer_column, logbook_divenumer_row
 	bsf			leftbind
-	output_16									; # of dive in logbook
+	output_16								; # of dive in logbook
 	bcf			leftbind
-	STRCAT_PRINT	""
+	STRCAT_PRINT ""
     return
 
 
 logbook_page2: ; Show more info
-    rcall   log_details_header	; Shows number, time/date and basic dive info
+    rcall   	log_details_header			; Shows number, time/date and basic dive info
 	
 	; Deco model
     WIN_SMALL   .5,.65
-    LOG_POINT_TO    log_decomodel
-    call	ext_flash_byte_read_plus	; read deco model
+    LOG_POINT_TO log_decomodel
+    call		ext_flash_byte_read_plus	; read deco model
     movff       temp1,lo
     decfsz      temp1,F
     bra         logbook_decomodel1
     ; Deco model GF Version
-    STRCAT_TEXT_PRINT    tZHL16GF
-    LOG_POINT_TO    log_gf_lo
+    STRCAT_PRINT "ZH-L16+GF"
+    LOG_POINT_TO log_gf_lo
     WIN_SMALL   .5,.90
     STRCPY_TEXT tGF
-    call	ext_flash_byte_read_plus            ; Read GF lo
+    call		ext_flash_byte_read_plus 	; Read GF lo
     movff       temp1,lo
     output_8
-    STRCAT	"%/"
+    STRCAT		"%/"
     bra         logbook_decomodel_common
 logbook_decomodel1:
     ; Deco model NON-GF Version
-    STRCAT_TEXT_PRINT    tZHL16
-    LOG_POINT_TO    log_sat_mult
+    STRCAT_PRINT "ZH-L16"
+    LOG_POINT_TO log_sat_mult
     WIN_SMALL   .5,.90
-    call	ext_flash_byte_read_plus            ; Read sat_mult
+    call		ext_flash_byte_read_plus	; Read sat_mult
     movff       temp1,lo
     output_8
-    STRCAT	"%/"
+    STRCAT		"%/"
 logbook_decomodel_common:
-    call	ext_flash_byte_read_plus            ; Read desat_mult or GF_hi
+    call		ext_flash_byte_read_plus	; Read desat_mult or GF_hi
     movff       temp1,lo
     output_8
-    STRCAT_PRINT	"%"
+    STRCAT_PRINT "%"
     
     ; CNS
-    LOG_POINT_TO    log_cns_start
+    LOG_POINT_TO log_cns_start
     WIN_SMALL    .5,.115
     STRCPY_TEXT tCNS2
-    call	ext_flash_byte_read_plus	; read cns low
+    call		ext_flash_byte_read_plus	; read cns low
     movff       temp1,lo
-    call	ext_flash_byte_read_plus	; read cns high
+    call		ext_flash_byte_read_plus	; read cns high
     movff       temp1,hi
     output_16
-    LOG_POINT_TO    log_cns_end
+    LOG_POINT_TO log_cns_end
     STRCAT      "->"
-    call	ext_flash_byte_read_plus	; read CNS low
+    call		ext_flash_byte_read_plus	; read CNS low
     movff       temp1,lo
-    call	ext_flash_byte_read_plus	; read CNS high
+    call		ext_flash_byte_read_plus	; read CNS high
     movff       temp1,hi
     output_16
-    STRCAT_PRINT	"%"
+    STRCAT_PRINT "%"
 
     ; Salinity
     WIN_SMALL	.5,.140
-    LOG_POINT_TO    log_salinity
+    LOG_POINT_TO log_salinity
     STRCPY_TEXT tDvSalinity
     bsf         leftbind
-    call	ext_flash_byte_read_plus	; read salinity
+    call		ext_flash_byte_read_plus		; read salinity
     movff       temp1,lo
-    movff       temp1,total_divetime_seconds+1  ; backup for average depth display
+    movff       temp1,total_divetime_seconds+1	; backup for average depth display
     output_8
-    STRCAT_PRINT	"%"
+    STRCAT_PRINT "%"
 
     ; Average depth
     WIN_SMALL	.5,.165
     STRCPY_TEXT tAVG
-    LOG_POINT_TO    log_avr_depth
-    call	ext_flash_byte_read_plus	; read avr low
+    LOG_POINT_TO log_avr_depth
+    call		ext_flash_byte_read_plus		; read avr low
     movff       temp1,lo
-    call	ext_flash_byte_read_plus	; read avr high
+    call		ext_flash_byte_read_plus		; read avr high
     movff       temp1,hi
-    movf        total_divetime_seconds+1,W         ; salinity for this dive
-    call        adjust_depth_with_salinity_log     ; computes salinity setting (FROM WREG!) into lo:hi [mbar]
+    movf        total_divetime_seconds+1,W      ; salinity for this dive
+    call        adjust_depth_with_salinity_log	; computes salinity setting (FROM WREG!) into lo:hi [mbar]
     output_16dp .3
-    STRCAT_PRINT    "m"
+    STRCAT_PRINT "m"
     
     ; Last deco
-    LOG_POINT_TO    log_last_stop
+    LOG_POINT_TO log_last_stop
     WIN_SMALL	.5,.190
     STRCPY_TEXT tLastDecostop
-    call	ext_flash_byte_read_plus            ; Read last stop
+    call		ext_flash_byte_read_plus		; Read last stop
     movff       temp1,lo
     output_8
-    STRCAT_PRINT    "m"
+    STRCAT_PRINT "m"
 
     movlw       color_lightblue
-    call	TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.2,.105; Top, Bottom, Left, Right
+    call		TFT_set_color
+    WIN_FRAME_COLOR16   .63,.220,.2,.105		; Top, Bottom, Left, Right
 
     ; Firmware
-    call	TFT_standard_color
+    call		TFT_standard_color
     WIN_SMALL	.110,.65
-    STRCAT  "V:"
-    LOG_POINT_TO    log_firmware
-    call	ext_flash_byte_read_plus	; read firmware xx
+    STRCAT  	"V:"
+    LOG_POINT_TO log_firmware
+    call		ext_flash_byte_read_plus		; read firmware xx
     movff       temp1,lo
-    bsf		neg_flag    ; set flag for 2.15 or newer
-    movlw	.1
-    cpfsgt	lo	    ; >1?
-    bcf		neg_flag    ; No, clear flag
-    movlw	.9
-    cpfslt	lo	    ; <9?
-    bcf		neg_flag    ; No, clear flag (When unit was updgraded from hwOS Sport (10.xx))
+    bsf			neg_flag    					; set flag for 2.15 or newer
+    movlw		.1
+    cpfsgt		lo	    						; >1?
+    bcf			neg_flag    					; No, clear flag
+    movlw		.9
+    cpfslt		lo	    						; <9?
+    bcf			neg_flag    					; No, clear flag (When unit was updgraded from hwOS Sport (10.xx))
     bsf         leftbind
     output_8
     PUTC        "."
-    call	ext_flash_byte_read_plus	; read firmware yy
+    call		ext_flash_byte_read_plus		; read firmware yy
     movff       temp1,lo
-    movlw	.14
-    cpfsgt	lo	    ; >14?
-    bcf		neg_flag    ; No, clear flag
+    movlw		.14
+    cpfsgt		lo	    ; >14?
+    bcf			neg_flag    ; No, clear flag
     output_99x
-    STRCAT_PRINT	""
+    STRCAT_PRINT ""
 
-    btfss   neg_flag    ; set flag for 2.15 or newer
-    bra	    logbook_no_batt_info
+    btfss   	neg_flag    					; set flag for 2.15 or newer
+    bra	    	logbook_no_batt_info
     
     ; Battery percent (for dives with 2.15 or newer)
     WIN_SMALL	.110,.140
-    LOG_POINT_TO    log_batt_info	    ; Battery percent
-    call	ext_flash_byte_read_plus	; read battery low
+    LOG_POINT_TO log_batt_info	    			; Battery percent
+    call		ext_flash_byte_read_plus		; read battery low
     movff       temp1,lo
     output_8
-    STRCAT_PRINT	"%"
+    STRCAT_PRINT "%"
 
-logbook_no_batt_info:		; dives with firmware <2.15
+logbook_no_batt_info:							; dives with firmware <2.15
 
     ; Battery voltage
     WIN_SMALL	.110,.90
-    STRCAT_PRINT     "Batt:"
+    STRCAT_PRINT "Batt:"
     WIN_SMALL	.110,.115
-    LOG_POINT_TO    log_battery	    ; Battery voltage...
-    call	ext_flash_byte_read_plus	; read battery low
+    LOG_POINT_TO log_battery	    			; Battery voltage...
+    call		ext_flash_byte_read_plus		; read battery low
     movff       temp1,lo
-    call	ext_flash_byte_read_plus	; read battery high
+    call		ext_flash_byte_read_plus		; read battery high
     movff       temp1,hi
     output_16dp  .2
-    STRCAT_PRINT	"V"
+    STRCAT_PRINT "V"
    
     ; surface pressure in mbar
-    LOG_POINT_TO    log_surface_press
-    call	ext_flash_byte_read_plus	; read surface pressure
+    LOG_POINT_TO log_surface_press
+    call		ext_flash_byte_read_plus		; read surface pressure
     movff       temp1,lo
-    call	ext_flash_byte_read_plus	; read surface pressure
+    call		ext_flash_byte_read_plus		; read surface pressure
     movff       temp1,hi
     WIN_SMALL	.110,.165
     lfsr        FSR2,buffer
-    bsf		leftbind
-    output_16							; Air pressure before dive
-    STRCAT_TEXT    tMBAR
-    clrf    WREG
-    movff   WREG,buffer+7	    ; limit to 7 chars
-    STRCAT_PRINT	""
+    bsf			leftbind
+    output_16									; Air pressure before dive
+    STRCAT_TEXT tMBAR
+    clrf    	WREG
+    movff   	WREG,buffer+7	    			; limit to 7 chars
+    STRCAT_PRINT ""
 
     movlw       color_greenish
-    call	TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.107,.159; Top, Bottom, Left, Right
+    call		TFT_set_color
+    WIN_FRAME_COLOR16   .63,.220,.107,.159		; Top, Bottom, Left, Right
 
-    rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
+    rcall       logbook_preloop_tasks       	; Clear some flags and set to Speed_eco
 display_details_loop:
-    btfsc		switch_left		; SET/MENU?
-    bra			logbook_page3		; Details, 2nd page
-    btfsc		switch_right		; ENTER?
-    bra			exit_profileview	; back to list
+	; REPLACE	## logbook look and feel
+    ; btfsc		switch_left		; SET/MENU?
+	; BY
+	btfsc		switch_right
+    bra			logbook_page3					; Details, 2nd page
+    ; REPLACE	## logbook look and feel
+	; btfsc		switch_right					; ENTER?
+	btfsc		switch_left
+    bra			exit_profileview				; back to list
     rcall		log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-    btfsc		sleepmode		; Timeout?
-    bra			exit_profileview	; back to list
-    bra			display_details_loop    ; wait for something to do
+    btfsc		sleepmode						; Timeout?
+    bra			exit_profileview				; back to list
+    bra			display_details_loop    		; wait for something to do
 
     global  logbook_preloop_tasks
 logbook_preloop_tasks:
-	movlw       CCP1CON_VALUE               ; See hwos.inc
-	movwf       CCP1CON                     ; Power-on backlight
+	movlw       CCP1CON_VALUE               	; See hwos.inc
+	movwf       CCP1CON                     	; Power-on backlight
 	call	    TFT_standard_color
-	bcf	    sleepmode			; clear some flags
+	bcf	    sleepmode							; clear some flags
 	bcf	    switch_right
 	bcf	    switch_left
 	clrf	    timeout_counter2
-	goto	    speed_normal                ; and return
+	goto	    speed_normal                	; and return
 
     
 logbook_page3: ; Show even more info
     rcall   log_details_header	; Shows number, time/date and basic dive info
 
-    ; OC/CC Gas List
+; REPLACE		## logbook look and feel
+;    ; OC/CC Gas List
+;    LOG_POINT_TO    log_divemode
+;    call	ext_flash_byte_read_plus            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
+;    WIN_SMALL   .5,.65
+;    WIN_COLOR   color_greenish
+;    STRCPY_TEXT_PRINT   tGaslist				; "OC Gas List" / tGaslistCC
+; BY
     bcf		leftbind
-    LOG_POINT_TO    log_gas1
-    movlw	color_white				; Color for Gas 1
-    call	TFT_set_color				; Set Color...
+    LOG_POINT_TO log_gas1
+    movlw		color_white					; Color for Gas 1
+    call		TFT_set_color				; Set Color...
     WIN_SMALL   .5,.90
     rcall       log_show_gas_common2
-    movlw	color_green				; Color for Gas 2
-    call	TFT_set_color				; Set Color...
+    movlw		color_green					; Color for Gas 2
+    call		TFT_set_color				; Set Color...
     WIN_SMALL   .5,.115
     rcall       log_show_gas_common2
-    movlw	color_red				; Color for Gas 3
-    call	TFT_set_color				; Set Color...
+    movlw		color_red					; Color for Gas 3
+    call		TFT_set_color				; Set Color...
     WIN_SMALL   .5,.140
     rcall       log_show_gas_common2
-    movlw	color_yellow				; Color for Gas 4
-    call	TFT_set_color				; Set Color...
+    movlw		color_yellow				; Color for Gas 4
+    call		TFT_set_color				; Set Color...
     WIN_SMALL   .5,.165
     rcall       log_show_gas_common2
-    movlw	color_cyan  				; Color for Gas 5
-    call	TFT_set_color				; Set Color...
+    movlw		color_cyan  				; Color for Gas 5
+    call		TFT_set_color				; Set Color...
     WIN_SMALL   .5,.190
     rcall       log_show_gas_common2
+    ; OC/CC Gas List
+    WIN_SMALL   .5,.65
+    WIN_COLOR   color_greenish
+    LOG_POINT_TO log_divemode
+    call		ext_flash_byte_read_plus    ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
+	decfsz		temp1,w						; =1 (CC)? 
+    bra     	logbook_page3a
+    STRCPY_TEXT_PRINT tGaslistCC
+	bra     	logbook_page3b
+logbook_page3a:
+    STRCPY_TEXT_PRINT tGaslist
+logbook_page3b:
 
-    ; OC/CC Gas List
-    WIN_SMALL	    .5,.65
-    WIN_COLOR	    color_greenish
-    LOG_POINT_TO    log_divemode
-    call	ext_flash_byte_read_plus            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1
-    decfsz	temp1,w		; =1 (CC)? 
-    bra		logbook_page3a
-    STRCPY_TEXT_PRINT   tGaslistCC  ; CC 
-    bra     logbook_page3b
-logbook_page3a:
-    STRCPY_TEXT_PRINT   tGaslist    ; OC
-logbook_page3b:
     movlw       color_lightblue
     call	TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.2,.90; Top, Bottom, Left, Right
+    WIN_FRAME_COLOR16   .63,.220,.2,.90		; Top, Bottom, Left, Right
     
     rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
 display_details2_loop:
-    btfsc		switch_left		; SET/MENU?
-    goto		logbook_page4		; Show more info
-    btfsc		switch_right		; ENTER?
-    bra			exit_profileview	; back to list
+	; REPLACE	## logbook look and feel
+    ; btfsc		switch_left					; SET/MENU?
+	; BY
+	btfsc		switch_right
+    goto		logbook_page4				; Show more info
+	; REPLACE	## logbook look and feel
+    ; btfsc		switch_right				; ENTER?
+	; BY
+	btfsc		switch_left
+    bra			exit_profileview			; back to list
     rcall		log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-    btfsc		sleepmode		; Timeout?
-    bra			exit_profileview	; back to list
-    bra			display_details2_loop   ; wait for something to do	
+    btfsc		sleepmode					; Timeout?
+    bra			exit_profileview			; back to list
+    bra			display_details2_loop   	; wait for something to do	
 
 logbook_page4: ; Show even more info in CC mode
     LOG_POINT_TO    log_divemode 
-    call	    ext_flash_byte_read ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into WREG and temp1 
-    decfsz	    temp1,w		; =1 (CC)? 
-    goto	    display_profile2	; no 
+    call	    ext_flash_byte_read 		; 0=OC, 1=CC, 2=Gauge, 3=Apnea into WREG and temp1 
+    decfsz	    temp1,w						; =1 (CC)? 
+    goto	    display_profile2			; no 
 
-    rcall   log_details_header	; Shows number, time/date and basic dive info
-        ; Setpoint list
+    rcall   log_details_header				; Shows number, time/date and basic dive info
+    ; Setpoint list
     LOG_POINT_TO    log_sp1
     WIN_SMALL   .5,.65
     WIN_COLOR   color_greenish
@@ -1866,26 +1896,31 @@
 
     movlw       color_greenish
     call	TFT_set_color
-    WIN_FRAME_COLOR16   .63,.220,.2,.112; Top, Bottom, Left, Right
+    WIN_FRAME_COLOR16   .63,.220,.2,.112	; Top, Bottom, Left, Right
 
     rcall       logbook_preloop_tasks       ; Clear some flags and set to Speed_eco
 display_details3_loop:
-    btfsc		switch_left		; SET/MENU?
-    goto		display_profile2        ; Show the profile view again
-    btfsc		switch_right		; ENTER?
-    bra			exit_profileview	; back to list
+	; REPLACE	## logbook look and feel
+    ; btfsc		switch_left					; SET/MENU?
+	; BY
+	btfsc		switch_right
+    goto		display_profile2			; Show the profile view again
+    ; REPLACE	## logbook look and feel
+	; btfsc		switch_right				; ENTER?
+	; BY
+	btfsc		switch_left
+    bra			exit_profileview			; back to list
     rcall		log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
-    btfsc		sleepmode		; Timeout?
-    bra			exit_profileview	; back to list
-    bra			display_details3_loop   ; wait for something to do	
-
+    btfsc		sleepmode					; Timeout?
+    bra			exit_profileview			; back to list
+    bra			display_details3_loop   	; wait for something to do	
     
     
 log_details_header:    
-    clrf        CCP1CON				; stop PWM
-    bcf         PORTC,2				; Pull PWM out to GND
+    clrf        CCP1CON						; stop PWM
+    bcf         PORTC,2						; Pull PWM out to GND
     call        TFT_boot
-    ;call	TFT_ClearScreen			; Clear screen
+    ;call	TFT_ClearScreen					; Clear screen
 
 ; Set ext_flash pointer to "#divesecs-oldest" dive
 ; compute read_int_eeprom .2 - divesecs
@@ -1893,13 +1928,13 @@
 ; look in header for pointer to begin of diveprofile (Byte 2-4)
 ; Set pointer (ext_flash_log_pointer:3) to this address, start drawing
 
-	decf	divesecs,F		;-1
+	decf	divesecs,F							;-1
 	read_int_eeprom .2
 	movf	EEDATA,W
 	bcf		STATUS,C
-	subfwb	divesecs,W		; max. dives (low value) - divesecs
-	movwf	lo				; result
-	incf	divesecs,F		;+1
+	subfwb	divesecs,W							; max. dives (low value) - divesecs
+	movwf	lo									; result
+	incf	divesecs,F							;+1
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
@@ -1910,13 +1945,13 @@
 	movlw		0x20
 	movwf		ext_flash_address+2
 	movlw		.16
-	mulwf		lo					; lo*16 = offset to 0x2000 (up:hi)
+	mulwf		lo								; lo*16 = offset to 0x2000 (up:hi)
 	movf		PRODL,W
 	addwf		ext_flash_address+1,F
 	movf		PRODH,W
 	addwfc		ext_flash_address+2,F
 	; pointer at the first 0xFA of header
-	rcall        logbook_show_divenumber             ; Show the dive number in medium font
+	rcall        logbook_show_divenumber        ; Show the dive number in medium font
 	; Show date and time in first row
     	WIN_SMALL	.59,.10
 	LOG_POINT_TO    log_date
@@ -1926,31 +1961,31 @@
 	movff		temp1,convert_value_temp+0		; Month
 	call		ext_flash_byte_read_plus
 	movff		temp1,convert_value_temp+1		; Day
-	call		TFT_convert_date			; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	call		TFT_convert_date				; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
 	PUTC		"-"
 	call		ext_flash_byte_read_plus		; hour
 	movff		temp1,lo
 	call		ext_flash_byte_read_plus		; Minutes
 	movff		temp1,hi
-	output_99x						; hour
+	output_99x									; hour
 	PUTC		':'
 	movff		hi,lo			
-	output_99x						; minute
-	STRCAT_PRINT	""					; Display 1st row of details
+	output_99x									; minute
+	STRCAT_PRINT	""							; Display 1st row of details
 
 	; Show max depth and dive time
 	WIN_SMALL	.5,.35
 	STRCAT		"Max:"
 	LOG_POINT_TO    log_max_depth
-	call		ext_flash_byte_read_plus	; read max depth
+	call		ext_flash_byte_read_plus		; read max depth
 	movff		temp1,lo				
-	call		ext_flash_byte_read_plus	; read max depth
+	call		ext_flash_byte_read_plus		; read max depth
 	movff		temp1,hi
 
-	TSTOSS		opt_units			; 0=Meters, 1=Feets
+	TSTOSS		opt_units						; 0=Meters, 1=Feets
 	bra		logbook_page2_depth_metric
 	; imperial
-	call		convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
+	call		convert_mbar_to_feet       		; convert value in lo:hi from mbar to feet
 	PUTC	' '
 	bcf		leftbind
 	output_16_3
@@ -1959,7 +1994,7 @@
 
 logbook_page2_depth_metric:
 	bsf		leftbind
-	output_16dp	d'3'					; max. depth
+	output_16dp	d'3'							; max. depth
 	STRCAT_TEXT     tMeters
 
 logbook_page2_depth_common:	
@@ -1967,29 +2002,29 @@
 	call		ext_flash_byte_read_plus		; divetime in minutes	
 	movff		temp1,lo
 	call		ext_flash_byte_read_plus	
-	movff		temp1,hi				; divetime in minutes
+	movff		temp1,hi						; divetime in minutes
 
 	bsf		leftbind
-	output_16						; divetime minutes
+	output_16									; divetime minutes
 	PUTC		"m"
         LOG_POINT_TO    log_divetime+.2
-	call		ext_flash_byte_read_plus				; read divetime seconds
+	call		ext_flash_byte_read_plus		; read divetime seconds
 	movff		temp1,lo
 	bsf		leftbind
-	output_99x							; divetime seconds
+	output_99x									; divetime seconds
 	call	TFT_standard_color
 	STRCAT_PRINT    "s"
 ;    ; Dive mode
 ;        LOG_POINT_TO    log_divemode
-;        call		ext_flash_byte_read_plus            ; Read divemode
+;        call		ext_flash_byte_read_plus    ; Read divemode
 ;        movff       temp1,lo
-;	call        TFT_display_decotype_surface1       ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
+;	call        TFT_display_decotype_surface1   ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE)
 	return
     
     
 log_show_sp_common:
     lfsr		FSR2,buffer
-	call		ext_flash_byte_read_plus					; Read setpoint
+	call		ext_flash_byte_read_plus		; Read setpoint
     movff       temp1,lo
    	clrf        hi
     bsf         leftbind
@@ -1997,52 +2032,52 @@
     bcf         leftbind
     STRCAT_TEXT tbar
     PUTC        " "
-    call		ext_flash_byte_read_plus					; change depth
+    call		ext_flash_byte_read_plus		; change depth
     movff		temp1,lo
 
-	TSTOSS	opt_units               ; 0=Meters, 1=Feets
+	TSTOSS	opt_units               			; 0=Meters, 1=Feets
 	bra		log_show_sp_common_metric
     movf    lo,W
-    mullw   .100                    ; convert meters to mbar
+    mullw   .100                    			; convert meters to mbar
     movff   PRODL,lo
     movff   PRODH,hi
-	call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet   				; convert value in lo:hi from mbar to feet
     output_16
-    STRCAT_TEXT	 tFeets				; "ft"
+    STRCAT_TEXT	 tFeets							; "ft"
     bra     log_show_sp_common_common
 log_show_sp_common_metric:
     output_8
-    STRCAT_TEXT	tMeters				; "m"
+    STRCAT_TEXT	tMeters							; "m"
 log_show_sp_common_common:
 	STRCAT_PRINT	""
     return
 
-log_show_gas_common2:   ; as log_show_gas_common but with change depth
+log_show_gas_common2:   						; as log_show_gas_common but with change depth
 	lfsr		FSR2,buffer
-	call		ext_flash_byte_read_plus					; current O2
+	call		ext_flash_byte_read_plus		; current O2
 	movff		temp1,lo
-	call		ext_flash_byte_read_plus					; current He
+	call		ext_flash_byte_read_plus		; current He
 	movff		temp1,hi
-    call		customview_show_mix                         ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-	call		ext_flash_byte_read_plus					; change depth
+    call		customview_show_mix             ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	call		ext_flash_byte_read_plus		; change depth
     movff		temp1,lo
 
-	TSTOSS	opt_units               ; 0=Meters, 1=Feets
+	TSTOSS	opt_units               			; 0=Meters, 1=Feets
 	bra		log_show_gas_common2_metric
     movf    lo,W
-    mullw   .100                    ; convert meters to mbar
+    mullw   .100                    			; convert meters to mbar
     movff   PRODL,lo
     movff   PRODH,hi
-	call	convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet    			; convert value in lo:hi from mbar to feet
     output_16
-    STRCAT_TEXT	 tFeets				; "ft"
+    STRCAT_TEXT	 tFeets							; "ft"
     bra     log_show_gas_common2_common
 log_show_gas_common2_metric:
     output_8
-    STRCAT_TEXT	tMeters				; "m"
+    STRCAT_TEXT	tMeters							; "m"
 log_show_gas_common2_common:
 	bcf		leftbind
-    call	ext_flash_byte_read_plus	; Gas Type
+    call	ext_flash_byte_read_plus			; Gas Type
 	STRCAT_PRINT	""
     return
 
--- a/src/menu_processor.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/menu_processor.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_processor.asm
+;   File menu_processor.asm							REFACTORED VERSION V2.91
 ;
 ;   Routines to handle all hwOS graphic/text menus.
 ;
@@ -81,10 +81,11 @@
         movff   TBLPTRH, menu_block+1
         movff   TBLPTRU, menu_block+2
 
-    extern  TFT_clear_divemode_menu
         btfss   divemode                ; In divemode?
         bra     menu_processor0         ; No
 
+	; Required for menus with less entries then the calling menu but not so nice when setting up gas 6.... mH
+	extern  TFT_clear_divemode_menu
         movlw   .1
         cpfsgt  menupos                 ; only if menupos=1...
         call    TFT_clear_divemode_menu ; ... Clear the menu!
@@ -127,7 +128,7 @@
         call    TFT_cat_firmware
         STRCAT_PRINT ""
         call    TFT_standard_color
-	bcf	win_invert
+		bcf		win_invert
         return
 
 ;=============================================================================
@@ -354,8 +355,9 @@
 		btfsc	settime_setdate			; In the Set Time or Set Date menu?
 		call	TFT_show_time_date_menu	; Yes, update clock
 
-        btfsc   menu_show_sensors       ; In the "Sensors" menu?
-        call    TFT_menu_hud            ; Yes, update HUD data
+		; DELETE - menu has been deleted	## memory
+        ; btfsc   menu_show_sensors       ; In the "Sensors" menu?
+        ; call    TFT_menu_hud            ; Yes, update HUD data
 
 		bcf		onesecupdate			; one second updates done
 
@@ -365,21 +367,21 @@
 		btfsc	divemode
 		goto	restart					; Enter Divemode if required
 
-        btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+        btfsc   enable_screen_dumps     ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
         bra     menu_line_loop3
-        btfsc   vusb_in                     ; USB plugged in?
-        call    comm_mode                   ; Start COMM mode
+        btfsc   vusb_in                 ; USB plugged in?
+        call    comm_mode               ; Start COMM mode
         bra     menu_line_loop4
 menu_line_loop3:
-        btfss   vusb_in                     ; USB (still) plugged in?
-        bcf     enable_screen_dumps         ; No, clear flag
+        btfss   vusb_in                 ; USB (still) plugged in?
+        bcf     enable_screen_dumps     ; No, clear flag
         call    rs232_get_byte
         btfsc   rs232_recieve_overflow
         bra     menu_line_loop4
         movlw   "l"
         cpfseq	RCREG1
         bra     menu_line_loop4
-        call    TFT_dump_screen             ; Dump the screen contents
+        call    TFT_dump_screen         ; Dump the screen contents
 menu_line_loop4:
 
         bra     menu_line_loop
@@ -445,12 +447,12 @@
         movlw   dm_menu_item1_column
         movff   WREG,win_leftx2
         clrf    start_item
-        movff   item_max,menupos4           ; Copy item_max for divemode cursor routine
+        movff   item_max,menupos4       ; Copy item_max for divemode cursor routine
         bra     menu_draw_lines_2
 
 menu_draw_lines:
-        btfsc   divemode                    ; in divemode?
-        bra     menu_draw_lines_divemode    ; Yes
+        btfsc   divemode                ; in divemode?
+        bra     menu_draw_lines_divemode; Yes
 
         btfsc   menu_flags,0            ; Dynamic title ?
         rcall   menu_processor_title    ; YES: redraw it then.
@@ -477,7 +479,7 @@
         movff   start_item, menu_item
 
 menu_draw_lines_1:
-        call    TFT_standard_color     ; Restore color after disabled lines.
+        call    TFT_standard_color     	; Restore color after disabled lines.
         
         movf    menu_item,W
         rcall   menu_read_item
--- a/src/menu_tree.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/menu_tree.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_tree.asm
+;   File menu_tree.asm								REFACTORED VERSION V2.95
 ;
 ;   OSTC menus
 ;
@@ -9,7 +9,7 @@
 ; HISTORY
 ;   2011-07-11 : [jDG] Creation.
 
-#include    "hwos.inc"                  ; Mandatory header
+#include    "hwos.inc"					; Mandatory header
 #include    "gaslist.inc"
 #include    "menu_processor.inc"
 #include    "start.inc"
@@ -18,18 +18,18 @@
 #include    "tft.inc"
 #include    "eeprom_rs232.inc"
 #include    "external_flash.inc"
-#include    "shared_definitions.h"      ; Mailbox from/to p2_deco.c
+#include    "shared_definitions.h"		; Mailbox from/to p2_deco.c
 #include    "isr.inc"
 #include    "ghostwriter.inc"
 #include    "adc_lightsensor.inc"
 #include    "wait.inc"
 #include    "i2c.inc"
 
-        CBLOCK  tmp+0x40                ; Keep space for menu processor
-            gaslist_gas ; Check ram position in gaslist.asm, too!
-        ENDC
+	CBLOCK  tmp+0x40					; Keep space for menu processor
+		gaslist_gas						; Check ram position in gaslist.asm, too!
+	ENDC
 
-gui     CODE
+gui		CODE
 ;=============================================================================
 ; Main Menu
         global  do_main_menu,do_main_menu2
@@ -58,9 +58,9 @@
 	MENU_BEGIN  tInfoMenu, .6
 	    MENU_DYNAMIC    info_menu_serial,       0
 	    MENU_DYNAMIC    info_menu_firmware,     0
-	    MENU_DYNAMIC    info_menu_total_dives,  0
-        MENU_DYNAMIC    info_menu_battery_volts,0
-	MENU_DYNAMIC    info_menu_uptime,0
+	    MENU_DYNAMIC    info_menu_battery_volts,0
+		MENU_DYNAMIC    info_menu_uptime,		0
+		MENU_DYNAMIC    info_menu_total_dives,  0
         MENU_CALL       tExit,                  do_return_settings
     MENU_END
 
@@ -71,47 +71,50 @@
     	rcall	menu_tree_double_pop	; drop exit line and back to last line
 
 do_ccr_menu:
-    bcf     menu_show_sensors           ; Clear flag
     bcf     menu_show_sensors2          ; Clear flag
     btfsc   analog_o2_input
     bra     do_ccr_menu_cR
-    btfss   optical_input
-    bra     do_ccr_menu_ostc2
+
+	; COMMENT OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
+	; btfss   optical_input
+    ; bra     do_ccr_menu_ostc2
 
-    MENU_BEGIN  tCCRSetup, .6          ; OSTC3 menu
-        MENU_OPTION     tCCRMode,    oCCRMode,    0
-        MENU_CALL       tCCRSensor,             do_ccr_sensor
-        MENU_CALL       tDiluentSetup,          do_diluent_setup
-        MENU_CALL       tFixedSetpoints,        do_fixed_setpoints
-	MENU_CALL	tPSCRMenu,		do_PSCR_menu
-        MENU_CALL       tExit,                  do_continue_main_menu
+    MENU_BEGIN  tCCRSetup, .6          ; OSTC3 menu (and currently also the OSTC2 menu)
+        MENU_OPTION     tCCRMode,				oCCRMode,		0
+        MENU_CALL       tDiluentSetup,			do_diluent_setup
+        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
+		MENU_CALL		tPSCRMenu,				do_PSCR_menu
+		MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0		
+        MENU_CALL       tExit,					do_continue_main_menu
     MENU_END
 
 do_ccr_menu_cR:                         ; cR menu
     MENU_BEGIN  tCCRSetup, .7
-        MENU_OPTION     tCCRMode,    oCCRMode,    0
-        MENU_CALL       tCCRSensor,             do_ccr_sensor
-        MENU_CALL       tCalibrateMenu,         do_calibrate_menu
-        MENU_CALL       tDiluentSetup,          do_diluent_setup
-        MENU_CALL       tFixedSetpoints,        do_fixed_setpoints
-	MENU_CALL	tPSCRMenu,		do_PSCR_menu
-        MENU_CALL       tExit,                  do_continue_main_menu
+        MENU_OPTION     tCCRMode,				oCCRMode,		0
+        MENU_CALL       tCalibrateMenu,			do_calibrate_menu
+        MENU_CALL       tDiluentSetup,			do_diluent_setup
+        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
+		MENU_CALL		tPSCRMenu,				do_PSCR_menu
+		MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0
+        MENU_CALL       tExit,					do_continue_main_menu
     MENU_END
 
-do_ccr_menu_ostc2:
-    MENU_BEGIN  tCCRSetup, .5           ; ostc2 menu
-        MENU_OPTION     tCCRMode,    oCCRMode,    0
-        MENU_CALL       tDiluentSetup,          do_diluent_setup
-        MENU_CALL       tFixedSetpoints,        do_fixed_setpoints
-	MENU_CALL	tPSCRMenu,		do_PSCR_menu
-        MENU_CALL       tExit,                  do_continue_main_menu
-    MENU_END
+; COMMENT OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
+;do_ccr_menu_ostc2:
+;    MENU_BEGIN  tCCRSetup, .6           ; ostc2 menu
+;        MENU_OPTION     tCCRMode,				oCCRMode,		0
+;        MENU_CALL       tDiluentSetup,			do_diluent_setup
+;        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
+;        MENU_CALL       tPSCRMenu,				do_PSCR_menu
+;        MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0
+;        MENU_CALL       tExit,					do_continue_main_menu
+;    MENU_END
 
 do_PSCR_menu:
-    MENU_BEGIN  tPSCRMenu, .3	; PSCR Menu
-	MENU_OPTION     tPSCR_O2_drop,	oPSCR_drop,	    0
-	MENU_OPTION     tPSCR_lungratio,oPSCR_lungratio,    0
-	MENU_CALL       tExit,          return_ccr_menu
+    MENU_BEGIN  tPSCRMenu, .3			; PSCR Menu
+		MENU_OPTION     tPSCR_O2_drop,			oPSCR_drop,			0
+		MENU_OPTION     tPSCR_lungratio,		oPSCR_lungratio,	0
+		MENU_CALL       tExit,					return_ccr_menu
     MENU_END
 
 do_calibrate_menu:
@@ -119,12 +122,12 @@
     bsf     menu_show_sensors2          ; Set flag
 do_calibrate_menu2:
 	MENU_BEGIN  tCalibrateMenu, .6
-	    MENU_CALL       tDiveHudMask1,       0
-        MENU_CALL       tDiveHudMask2,       0
-        MENU_CALL       tDiveHudMask3,       0
-        MENU_OPTION     tCalibrationGas,oCalGasO2,  0
-        MENU_CALL       tCalibrate,                 do_calibrate_mix
-        MENU_CALL       tExit,                      return_ccr_menu
+	    MENU_CALL       tDiveHudMask1,				0
+        MENU_CALL       tDiveHudMask2,				0
+        MENU_CALL       tDiveHudMask3,				0
+        MENU_OPTION     tCalibrationGas,oCalGasO2,	0
+        MENU_CALL       tCalibrate,				do_calibrate_mix
+        MENU_CALL       tExit,					return_ccr_menu
     MENU_END
 
 do_calibrate_mix:
@@ -132,19 +135,9 @@
     call    calibrate_mix               ; Calibrate with opt_calibration_O2_ratio, also calibrate S8 HUD if connected
     WAITMS  d'250'                      ; Wait for HUD v3
     movlw   .9 
-    movwf   customview_surfmode		; show sensor mV custom view after restart
+    movwf   customview_surfmode			; show sensor mV custom view after restart
     goto    restart                     ; Restart into surface mode
 
-do_ccr_sensor:
-    call    enable_ir_s8                ; Enable IR/S8-Port
-    bsf     menu_show_sensors           ; Set flag
-	MENU_BEGIN  tCCRSensor, .5
-	    MENU_CALL       tDiveHudMask1,       0
-        MENU_CALL       tDiveHudMask2,       0
-        MENU_CALL       tDiveHudMask3,       0
-        MENU_OPTION     tSensorFallback,oSensorFallback,  0
-        MENU_CALL       tExit,               return_ccr_menu
-    MENU_END
 
 do_diluent_setup:
        bsf     ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
@@ -164,7 +157,7 @@
 
 do_fixed_setpoints:
         bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-     MENU_BEGIN  tFixedSetpoints, .6
+	MENU_BEGIN  tFixedSetpoints, .6
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
         MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
@@ -211,7 +204,7 @@
 do_edit_gas_menu:
     call    gaslist_setgas              ; Save current item.
 do_edit_gas_menu_1:                     ; Keep current gas.
-    MENU_BEGIN          tGasEdit, .6
+	MENU_BEGIN          tGasEdit, .6
         MENU_DYNAMIC    gaslist_gastitle,       0
         MENU_DYNAMIC    gaslist_MOD_END,        0
         MENU_DYNAMIC    gaslist_show_type,      gaslist_toggle_type
@@ -235,7 +228,7 @@
         call    menu_processor_pop      ; drop exit line.
         goto	menu_processor_pop      ; back to last gas and return
 
-    
+
     global  do_gas_depth_menu
 do_gas_depth_menu:
     movff   gaslist_gas,WREG
@@ -257,6 +250,7 @@
         MENU_CALL       tExit,                  return_gas_depth
     MENU_END
 
+	
 ;=============================================================================
 ; Simulator menus
 
@@ -278,20 +272,21 @@
 do_planner_menu:
     extern  do_demo_planner
     MENU_BEGIN  tPlan, .7
+        MENU_OPTION     tIntvl, odiveInterval,  0
+        MENU_OPTION     tBtDep, obottomDepth,   0
 		MENU_CALL       tInter,                 do_demo_divemode
-        MENU_OPTION     tIntvl, odiveInterval,  0
         MENU_OPTION     tBtTm,  obottomTime,    0
-        MENU_OPTION     tMxDep, obottomDepth,   0
+        MENU_CALL       tDecoSetup,             do_planner_config
         MENU_CALL       tDeco,                  do_demo_planner
-        MENU_CALL       tSystSets,              do_planner_config
         MENU_CALL       tExit,                  do_continue_main_menu
     MENU_END
 
+
 do_planner_config:
     MENU_BEGIN  tPlan, .3
-        MENU_OPTION     tSetBotUse, obottom_usage,  0
-        MENU_OPTION     tSetDecoUse,  odeco_usage,  0
-        MENU_CALL       tExit,                      do_planner_menu
+		MENU_OPTION		tSelectSetpoint,oSimSetpoint,	0
+		MENU_OPTION		tuseAGF, 		oSimAGF,		0
+        MENU_CALL       tExit,							do_planner_menu
     MENU_END
 
 
@@ -306,17 +301,19 @@
         MENU_OPTION  tDvMode,    oDiveMode,     0
         MENU_OPTION  tDkMode,    oDecoMode,     0
         MENU_CALL    tppO2settings,          	do_ppo2_menu
-        MENU_OPTION  tsafetystopmenu,oSafetyStop,    0
-        MENU_OPTION  tFTTSMenu,                 oExtraTime,0
+        MENU_OPTION	 tsafetystopmenu,oSafetyStop,    0
+		MENU_CALL    t2ndDecoPlanMenu,			do_2nd_deco_plan_menu
         MENU_CALL    tDecoparameters,          	do_decoparameters_menu
         MENU_CALL    tExit,                  	do_continue_main_menu
     MENU_END
 
 do_ppo2_menu:
-    MENU_BEGIN  tppO2settings, .5
-	MENU_DYNAMIC divesets_ppo2_max,         do_toggle_ppo2_max
-	MENU_DYNAMIC divesets_ppo2_max_deco,    do_toggle_ppo2_max_deco
-	MENU_DYNAMIC divesets_ppo2_min,         do_toggle_ppo2_min
+	MENU_BEGIN  tppO2settings, .6
+	
+		MENU_DYNAMIC divesets_ppo2_max,         do_toggle_ppo2_max
+		MENU_DYNAMIC divesets_ppo2_max_deco,    do_toggle_ppo2_max_deco
+		MENU_DYNAMIC divesets_ppo2_min,         do_toggle_ppo2_min
+		MENU_DYNAMIC divesets_ppo2_min_cc,      do_toggle_ppo2_min_cc
         MENU_OPTION  tShowppO2, oShowppO2,      0
         MENU_CALL    tExit,                  	do_return_divemode_menu
     MENU_END
@@ -334,6 +331,47 @@
         MENU_CALL    tExit,                  	do_return_divemode_menu
     MENU_END
 
+
+do_return_2nd_deco_plan_menu:
+    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+
+
+do_2nd_deco_plan_menu
+    MENU_BEGIN  t2ndDecoPlanMenu, .7
+        MENU_OPTION  tFTTSMenu,		oExtraTime,		0
+		MENU_OPTION  tCalcAscGas,	oCalcAscGas,	0
+        MENU_OPTION  tSetBotUse,	obottom_usage,	0
+        MENU_OPTION  tSetDecoUse,	odeco_usage,	0
+		MENU_CALL	 tTankSizes,				do_tank_sizes_menu
+		MENU_CALL	 tTankFillPress,			do_tank_fill_press_menu
+		MENU_CALL    tExit,                  	do_return_divemode_menu
+    MENU_END
+
+	
+
+do_tank_sizes_menu:
+    MENU_BEGIN  tTankSizes, .6
+        MENU_OPTION  tGas1,	oTankSize1,			0
+        MENU_OPTION  tGas2,	oTankSize2,			0
+        MENU_OPTION  tGas3,	oTankSize3,			0
+        MENU_OPTION  tGas4,	oTankSize4,			0
+        MENU_OPTION  tGas5,	oTankSize5,			0
+        MENU_CALL    tExit,                  	do_return_2nd_deco_plan_menu
+    MENU_END
+
+	
+
+do_tank_fill_press_menu:
+    MENU_BEGIN  tTankFillPress, .6
+        MENU_OPTION  tGas1,	oTankFillPres1,		0
+        MENU_OPTION  tGas2,	oTankFillPres2,		0
+        MENU_OPTION  tGas3,	oTankFillPres3,		0
+        MENU_OPTION  tGas4,	oTankFillPres4,		0
+        MENU_OPTION  tGas5,	oTankFillPres5,		0
+        MENU_CALL    tExit,                  	do_return_2nd_deco_plan_menu
+    MENU_END
+
+	
 do_aGF_menu:
     MENU_BEGIN  taGFMenu, .4
         MENU_OPTION  taGF_enable,oEnable_aGF,    0
@@ -341,14 +379,16 @@
         MENU_OPTION  taGF_high,  oaGF_high,      0
         MENU_CALL    tExit,                  	do_return_decoparameters_menu
     MENU_END
+
+
 ;=============================================================================
 ; Setup Menu
 
 do_return_settings:
-		bcf		settime_setdate					; Clear flag
+	bcf		settime_setdate			; Clear flag
 	rcall	menu_tree_double_pop	; drop exit line and back to last line
         
-        extern  compass_calibration_loop
+	extern  compass_calibration_loop
 do_settings_menu:
     btfsc   ble_available           ; ble available
     bra     do_settings_menu_ble    ; Yes.
@@ -356,18 +396,18 @@
         MENU_CALL   tInfoMenu,      do_info_menu
         MENU_CALL   tSetTimeDate,   do_date_time_menu
         MENU_CALL   tDispSets,      do_dispsets_menu
-        MENU_OPTION tLanguage,      oLanguage,       0
+	MENU_OPTION tAltMode,	    oAltMode,	    0		
         MENU_CALL   tMore,          do_settings_menu_more
         MENU_CALL   tExit,          do_continue_main_menu
     MENU_END
 
 do_settings_menu_ble:
-    MENU_BEGIN  tSystSets, .7
+	MENU_BEGIN  tSystSets, .7
         MENU_CALL   tInfoMenu,      do_info_menu
         MENU_CALL   tBleTitle,      comm_mode0
         MENU_CALL   tSetTimeDate,   do_date_time_menu
         MENU_CALL   tDispSets,      do_dispsets_menu
-        MENU_OPTION tLanguage,      oLanguage,       0
+	MENU_OPTION tAltMode,	    oAltMode,	    0		
         MENU_CALL   tMore,          do_settings_menu_more
         MENU_CALL   tExit,          do_continue_main_menu
     MENU_END
@@ -376,18 +416,18 @@
     	rcall	menu_tree_double_pop	; drop exit line and back to last line
     
 do_settings_menu_more:
-    btfsc   battery_gauge_available            ; piezo buttons available
+    btfsc   battery_gauge_available		; piezo buttons available
     bra     do_settings_menu_more_piezo
-    btfsc   ble_available           ; ble available
+    btfsc   ble_available				; ble available
     bra     do_settings_menu_more_ostc3p
     MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,   do_compass_menu
-		MENU_CALL	tLogOffset,					do_log_offset_menu
-        MENU_OPTION tUnits,    oUnits,          0
-        MENU_OPTION tSamplingrate,oSamplingRate,0
-        MENU_OPTION tDvSalinity,oDiveSalinity,  0
-        MENU_CALL   tResetMenu,     do_reset_menu
-        MENU_CALL   tExit,          do_return_settings
+		MENU_CALL   tCompassMenu,   do_compass_menu
+		MENU_CALL	tLogOffset,		do_log_offset_menu
+		MENU_OPTION tUnits,    		oUnits,				0
+		MENU_OPTION tLanguage,      oLanguage,			0        
+		MENU_OPTION tDvSalinity,	oDiveSalinity,		0
+		MENU_CALL   tResetMenu,     do_reset_menu
+		MENU_CALL   tExit,          do_return_settings
     MENU_END
 
 do_settings_menu_more_piezo_exit:
@@ -397,13 +437,13 @@
 
 do_settings_menu_more_piezo:
     MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,   do_compass_menu
-		MENU_CALL	tLogOffset,					do_log_offset_menu
-        MENU_OPTION tUnits,    oUnits,          0
-        MENU_OPTION tSamplingrate,oSamplingRate,0
-        MENU_OPTION tDvSalinity,oDiveSalinity,  0
-        MENU_CALL   tMore,          do_settings_piezo_menu
-        MENU_CALL   tExit,          do_return_settings
+        MENU_CALL   tCompassMenu,	do_compass_menu
+		MENU_CALL	tLogOffset,		do_log_offset_menu
+        MENU_OPTION tUnits,			oUnits,				0
+        MENU_OPTION tLanguage,      oLanguage,			0        
+        MENU_OPTION tDvSalinity,	oDiveSalinity,		0
+        MENU_CALL   tMore,			do_settings_piezo_menu
+        MENU_CALL   tExit,			do_return_settings
     MENU_END
 
     extern  comm_mode0
@@ -411,19 +451,19 @@
 do_settings_piezo_menu:
     ; Menu with features only available in piezo button hardware
     MENU_BEGIN  tSystSets, .4
-        MENU_CALL   tResetMenu,     do_reset_menu
-        MENU_OPTION tButtonleft,ocR_button_left  ,0  ; left button sensitivity
-        MENU_OPTION tButtonright,ocR_button_right,0  ; right button sensitivity
+        MENU_CALL   tResetMenu,		do_reset_menu
+        MENU_OPTION tButtonleft,	ocR_button_left,	0  ; left button sensitivity
+        MENU_OPTION tButtonright,	ocR_button_right,	0  ; right button sensitivity
         MENU_CALL   tExit,          do_settings_menu_more_piezo_exit
     MENU_END
 
 do_settings_menu_more_ostc3p:  ; Menu with BLE feature
     MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,   do_compass_menu
-		MENU_CALL	tLogOffset,					do_log_offset_menu
-        MENU_OPTION tUnits,    oUnits,          0
-        MENU_OPTION tSamplingrate,oSamplingRate,0
-        MENU_OPTION tDvSalinity,oDiveSalinity,  0
+        MENU_CALL   tCompassMenu,	do_compass_menu
+		MENU_CALL	tLogOffset,		do_log_offset_menu
+        MENU_OPTION tUnits,			oUnits,				0
+        MENU_OPTION tLanguage,      oLanguage,			0        
+        MENU_OPTION tDvSalinity,	oDiveSalinity,		0
         MENU_CALL   tResetMenu,     do_reset_menu
         MENU_CALL   tExit,          do_return_settings
     MENU_END
@@ -431,11 +471,11 @@
 do_compass_menu:
     MENU_BEGIN  tSystSets, .5
         MENU_CALL   tCompassMenu,   compass_calibration_loop
-;        MENU_OPTION tCompassGain,   oCompassGain,       0
-	MENU_DYNAMIC    menu_cal_x,       0
-	MENU_DYNAMIC    menu_cal_y,       0
-	MENU_DYNAMIC    menu_cal_z,       0
-        MENU_CALL   tExit,          do_return_settings_more
+;       MENU_OPTION		tCompassGain,   oCompassGain,	0
+		MENU_DYNAMIC    menu_cal_x,						0
+		MENU_DYNAMIC    menu_cal_y,						0
+		MENU_DYNAMIC    menu_cal_z,						0
+        MENU_CALL		tExit,			do_return_settings_more
     MENU_END
 
 ;=============================================================================
@@ -443,36 +483,36 @@
 
 do_reset_menu:
     MENU_BEGIN  tResetMenu, .6
-        MENU_CALL       tExit,                  do_return_settings
-        MENU_CALL       tReboot,	        do_reset_menu2			; Confirm
-	MENU_CALL       tResetDeco,	        do_reset_menu3			; Confirm
-	MENU_CALL       tResetSettings,	        do_reset_menu4			; Confirm
-        MENU_CALL       tResetLogbook,	        do_reset_menu5			; Confirm
-        MENU_CALL       tResetBattery,          new_battery_menu        ; New Battery submenu
+        MENU_CALL       tExit,			do_return_settings
+        MENU_CALL       tReboot,		do_reset_menu2		; Confirm
+		MENU_CALL       tResetDeco,		do_reset_menu3		; Confirm
+		MENU_CALL       tResetSettings,	do_reset_menu4		; Confirm
+        MENU_CALL       tResetLogbook,	do_reset_menu5		; Confirm
+        MENU_CALL       tResetBattery,	new_battery_menu	; New Battery sub menu
     MENU_END
 
 do_reset_menu2:
     MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,                 do_continue_menu_3stack
-        MENU_CALL       tReboot,                do_reboot               ; Reboot
+        MENU_CALL       tAbort,			do_continue_menu_3stack
+        MENU_CALL       tReboot,		do_reboot               ; Reboot
     MENU_END
 
 do_reset_menu3:
     MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,                 do_continue_menu_3stack
-        MENU_CALL       tResetDeco,             do_reset_deco			; Reset Deco
+        MENU_CALL       tAbort,			do_continue_menu_3stack
+        MENU_CALL       tResetDeco,		do_reset_deco			; Reset Deco
     MENU_END
 
 do_reset_menu4:
     MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,                 do_continue_menu_3stack
-        MENU_CALL       tResetSettings,         do_reset_settings		; Reset all settings
+        MENU_CALL       tAbort,			do_continue_menu_3stack
+        MENU_CALL       tResetSettings,	do_reset_settings		; Reset all settings
     MENU_END
 
 do_reset_menu5:
     MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,                 do_continue_menu_3stack
-        MENU_CALL       tResetLogbook,          do_reset_logbook		; Reset logbook
+        MENU_CALL       tAbort,			do_continue_menu_3stack
+        MENU_CALL       tResetLogbook,	do_reset_logbook		; Reset logbook
     MENU_END
 
 do_reset_logbook:
@@ -493,39 +533,31 @@
 
 
 do_reset_deco:
-	movlw	d'79'							; 79% N2
-	movff	WREG,char_I_N2_ratio
-	movlw	d'0'
-	movff	WREG,char_I_step_is_1min		; 2 second deco mode
-    SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy for deco routine
-	movff	int_I_pres_respiration+0,int_I_pres_surface+0     ; copy for desat routine
-	movff	int_I_pres_respiration+1,int_I_pres_surface+1		
-
-	extern	deco_reset
-	call	deco_reset
-	call	deco_calc_desaturation_time     ; calculate desaturation time
-	banksel common
-	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode 
-	banksel common
-  	clrf	nofly_time+0	              	; Reset NoFly
-  	clrf	nofly_time+1
-	clrf	desaturation_time+0				; Reset Desat
-	clrf	desaturation_time+1
+	SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_respiration	; copy surface pressure to deco routine
+	SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_surface		; copy surface pressure to deco routine
+	
+    call    deco_clear_tissue       		; set all tissues to Pamb * N2_ratio (C-Code)
+    banksel common							; back to bank 1, needed after every return from C code
+	
+	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode
+	call	deco_calc_desaturation_time		; calculate desaturation and no-fly time
+	banksel	common	
+	
 	goto	do_return_settings				; back to menu
 
 do_reset_settings:
     call		TFT_ClearScreen				; Clear screen    
     banksel common
 	extern	option_reset_all
-    call	option_reset_all        	; Reset all options to factory default.
-	goto	restart                     ; Restart into surfacemode
+    call	option_reset_all				; Reset all options to factory default.
+	goto	restart							; Restart into surfacemode
 
-do_continue_menu_3stack:			; Return three levels deep
+do_continue_menu_3stack:					; Return three levels deep
     call    menu_processor_pop
 	goto	do_return_settings
 
 do_reboot:
-	call	ext_flash_enable_protection			; Enables write protection
+	call	ext_flash_enable_protection		; Enables write protection
 	reset
 
 
@@ -543,14 +575,14 @@
         MENU_OPTION tSetDay,	oSetDay,		0
 		MENU_OPTION	tSetMonth,	oSetMonth,  	0
         MENU_OPTION tSetYear,	oSetYear,		0
-        MENU_CALL   tExit,                      do_continue_menu_3stack
+        MENU_CALL   tExit,					do_continue_menu_3stack
     MENU_END
 
 
 do_reset_seconds:
 	clrf	secs
 	extern	rtc_set_rtc
-	call	rtc_set_rtc				; writes mins,sec,hours,day,month and year to rtc module
+	call	rtc_set_rtc			; writes mins,sec,hours,day,month and year to rtc module
 do_time_menu:
 	bsf		settime_setdate
     MENU_BEGIN  tSetTime, .4
@@ -561,8 +593,8 @@
     MENU_END
 
 
-do_toggle_ppo2_max:             ; add 0.1bar, with hard-coded max.
-    movff   opt_ppO2_max,lo     ; banksafe
+do_toggle_ppo2_max:				; add 0.1bar, with hard-coded max.
+    movff   char_I_ppO2_max,lo	; banksafe
     movlw	.10
 	addwf	lo,F
 	movlw	ppo2_highest_setting
@@ -571,11 +603,11 @@
 	movlw	.120
 	movwf	lo
 do_toggle_ppo2_max2:
-    movff   lo,opt_ppO2_max
+    movff   lo,char_I_ppO2_max
     return
 
-do_toggle_ppo2_max_deco:             ; add 0.1bar, with hard-coded max.
-    movff   opt_ppO2_max_deco,lo     ; banksafe
+do_toggle_ppo2_max_deco:		 ; add 0.1bar, with hard-coded max.
+    movff   char_I_ppO2_max_deco,lo ; banksafe
     movlw	.10
 	addwf	lo,F
 	movlw	ppo2_highest_setting_deco
@@ -584,11 +616,11 @@
 	movlw	.120
 	movwf	lo
 do_toggle_ppo2_max_deco2:
-    movff   lo,opt_ppO2_max_deco
+    movff   lo,char_I_ppO2_max_deco
     return
     
 do_toggle_ppo2_min:             ; sub 0.1bar, with hard-coded min.
-    movff   opt_ppO2_min,lo     ; banksafe
+    movff   char_I_ppO2_min,lo     ; banksafe
     incf    lo,F
 	movlw	.21
 	cpfsgt	lo
@@ -596,9 +628,21 @@
 	movlw	ppo2_lowest_setting
 	movwf	lo
 do_toggle_ppo2_min2:
-    movff   lo,opt_ppO2_min
+    movff   lo,char_I_ppO2_min
     return
 
+do_toggle_ppo2_min_cc:			; sub 0.1bar, with hard-coded min.
+    movff   char_I_ppO2_min_loop,lo	; banksafe
+    incf    lo,F
+	movlw	ppo2_warning_low_cc_max
+	cpfsgt	lo
+    bra     do_toggle_ppo2_min_cc2
+	movlw	ppo2_warning_low_cc_min
+	movwf	lo
+do_toggle_ppo2_min_cc2:
+    movff   lo,char_I_ppO2_min_loop
+    return
+	
 
 	; Logbook offset sub-menu
 do_log_offset_menu:
@@ -652,23 +696,25 @@
 
 do_dispsets_menu_3stack:
     bcf		in_color_menu
-    rcall	menu_tree_double_pop	; drop exit line and back to last line
+    call	menu_tree_double_pop	; drop exit line and back to last line
 
 do_dispsets_menu:
-    MENU_BEGIN  tDispSets, .5
+	MENU_BEGIN  tDispSets, .6
         MENU_OPTION tBright,       oBrightness,   0
         MENU_CALL   tColorScheme,                 do_color_scheme
+		MENU_OPTION tLanguage,     oLanguage,     0
         MENU_OPTION tFlip,         oFlipScreen,   0
         MENU_CALL   tMore,                        do_dispsets_menu_more
         MENU_CALL   tExit,                        do_return_settings
     MENU_END
 
 do_dispsets_menu_more:
-    MENU_BEGIN  tDispSets, .5
-        MENU_OPTION tMODwarning,   oMODwarning,   0
-        MENU_OPTION tVSItext2,     oVSItextv2,    0
-        MENU_OPTION tVSIgraph,     oVSIgraph,     0
-	MENU_OPTION tTimeoutDive,  oDiveTimeout,  0
+    MENU_BEGIN  tDispSets, .6
+        MENU_OPTION tMODwarning,   oMODwarning,   	0
+		MENU_OPTION tIBCDwarning,  oEnable_IBCD,	0
+        MENU_OPTION tVSItext2,     oVSItextv2,    	0
+        MENU_OPTION tVSIgraph,     oVSIgraph,     	0
+		MENU_OPTION tTimeoutDive,  oDiveTimeout,  	0
         MENU_CALL   tExit,                        do_dispsets_menu_3stack
     MENU_END
 
@@ -749,41 +795,41 @@
     
 menu_new_battery_AA_16650:
     MENU_BEGIN tNewBattTitle, .5
-	MENU_CALL   tNewBattOld,                 use_old_batteries
-        MENU_CALL   tNewBattNew36,               use_new_36V_batteries
-        MENU_CALL   tNewBattNew15,               use_new_15V_batteries
-	MENU_CALL   tNewBattAccu,		 use_36V_rechargeable
-	MENU_CALL   tNew16650,			 use_16650_battery
+		MENU_CALL   tNewBattOld,		use_old_batteries
+		MENU_CALL   tNewBattNew36,		use_new_36V_batteries
+		MENU_CALL   tNewBattNew15,		use_new_15V_batteries
+		MENU_CALL   tNewBattAccu,		use_36V_rechargeable
+		MENU_CALL   tNew16650,			use_16650_battery
     MENU_END
     
 menu_new_battery_AA:
     MENU_BEGIN tNewBattTitle, .4
-	MENU_CALL   tNewBattOld,                 use_old_batteries
-        MENU_CALL   tNewBattNew36,               use_new_36V_batteries
-        MENU_CALL   tNewBattNew15,               use_new_15V_batteries
-	MENU_CALL   tNewBattAccu,		 use_36V_rechargeable
+		MENU_CALL   tNewBattOld,		use_old_batteries
+		MENU_CALL   tNewBattNew36,		use_new_36V_batteries
+		MENU_CALL   tNewBattNew15,		use_new_15V_batteries
+		MENU_CALL   tNewBattAccu,		use_36V_rechargeable
     MENU_END
 
 menu_new_battery_18650:
     MENU_BEGIN tNewBattTitle, .2
-	MENU_CALL   tNewBattOld,                 use_old_batteries
-	MENU_CALL   tNew18650,			 use_18650_battery
+		MENU_CALL   tNewBattOld,		use_old_batteries
+		MENU_CALL   tNew18650,			use_18650_battery
     MENU_END
 
     
 	global	use_old_prior_209
 use_old_prior_209:
 	clrf	EEADRH
-	read_int_eeprom 0x0F	    ; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-	incfsz	EEDATA,F	    ; Was 0xFF?
-	return			    ; No, done.
+	read_int_eeprom 0x0F	    	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	incfsz	EEDATA,F	    		; Was 0xFF?
+	return			    			; No, done.
 
-	call    lt2942_get_status       ; Check for gauge IC
-	movlw   .3			; Assume a 18650
+	call    lt2942_get_status   	; Check for gauge IC
+	movlw   .3						; Assume a 18650
 	btfss   battery_gauge_available ; cR/2 hardware?
-	movlw   .1			; Assume a Saft
+	movlw   .1						; Assume a Saft
         movwf	EEDATA
-	write_int_eeprom 0x0F		; Store the new battery type into EEPROM
+	write_int_eeprom 0x0F			; Store the new battery type into EEPROM
 	return
 	
 	global	use_old_batteries
@@ -802,10 +848,10 @@
 	read_int_eeprom 0x0C
 	movff	EEDATA,battery_gauge+5
 	read_int_eeprom 0x0F
-	movff	EEDATA,battery_type; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+	movff	EEDATA,battery_type	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
 
 	rcall	setup_new_saft	    ; Any other value
-	incf	EEDATA,F	    ; 1 ... 5
+	incf	EEDATA,F	    	; 1 ... 5
 	dcfsnz	EEDATA,F
 	rcall	setup_new_15v	    ;=0
 	dcfsnz	EEDATA,F
@@ -824,7 +870,7 @@
     bsf	    charge_disable
     bcf	    TRISE,2
     movlw   .100
-    movwf   batt_percent                ; To have 1,5V batteries right after firmware update
+    movwf   batt_percent		; To have 1,5V batteries right after firmware update
     movlw   .0
     movff   WREG,battery_type
     return
@@ -921,11 +967,11 @@
 use_new_15V_batteries:
     rcall   setup_new_15v
 use_new_36V_2:
-    call    reset_battery_pointer       ; Resets battery pointer 0x07-0x0C and battery_gauge:5
-    goto    surfloop				; Jump to Surfaceloop!
+    call    reset_battery_pointer	; Resets battery pointer 0x07-0x0C and battery_gauge:5
+    goto    surfloop				; Jump to Surface loop!
 use_36V_rechargeable:
     rcall   setup_new_panasonic
     call    reset_battery_internal_only
-    goto    surfloop				; Jump to Surfaceloop!
+    goto    surfloop				; Jump to Surface loop!
 
     END
\ No newline at end of file
--- a/src/option_table.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/option_table.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File option_table.asm
+;   File option_table.asm							REFACTORED VERSION V2.95
 ;
 ;   The option table
 ;
@@ -45,6 +45,16 @@
         dw      register
         ENDM
 
+; NEW	## deco engine
+OPTION_UINT8p5  MACRO   lbl, min, max, default, unit, eeprom, register
+        global  lbl
+lbl:    db      0, default  ; Type0 = INT8
+        db      .5, min
+        db      max, eeprom
+        dw      unit
+        dw      register
+        ENDM		
+		
 OPTION_UINT8p10  MACRO   lbl, min, max, default, unit, eeprom, register
         global  lbl
 lbl:    db      0, default  ; Type0 = INT8
@@ -85,8 +95,30 @@
         extern  char_I_dive_interval, char_I_bottom_time, char_I_bottom_depth
         extern  char_I_deco_model, char_I_saturation_multiplier, char_I_desaturation_multiplier
         extern  char_I_extra_time
-        extern  tDefName
-        extern  char_I_bottom_usage,char_I_deco_usage,tLitersMinute
+        extern  tDefName, tblank
+        extern  char_I_bottom_usage, char_I_deco_usage, tLitersMinute
+		
+		; NEW	## deco engine
+		extern	char_I_PSCR_drop, char_I_PSCR_lungratio
+		
+		; NEW	## bailout gas needs
+		extern	char_I_tank_size, char_I_tank_pres_fill, tLiter, tbar10
+		
+		; NEW	## CCR max ppO2 limiter
+		extern	char_I_cc_max_frac_o2
+		
+		; NEW	## no fly altitude
+		extern	char_I_altitude_wait
+		
+		; NEW	## V2.94
+		extern	char_I_ppO2_max, char_I_ppO2_min, char_I_ppO2_max_deco, char_I_ppO2_min_loop
+		
+		; NEW	## V2.94 / V2.95
+		extern	char_I_ascent_speed, tMeterMinute
+		
+		; NEW	## V2.95
+		extern	char_I_gas_change_time, tmin
+		
     ; Option table
     ; OPTION_UINT8  Label,   min,    max,    default, text-string,   EEPROM location (-1 for RAM only),   RAM location
     global  option_table_begin
@@ -98,18 +130,18 @@
         OPTION_UINT8p3  obottomDepth,   .12,.120,    .21,    tMeters,  -1,     char_I_bottom_depth
         OPTION_ENUM8    oDiveMode,      5,  0,  tDvOC,               .8,    opt_dive_mode               ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR 
         OPTION_ENUM8    oDecoMode,      2,  1,  tZHL16,              .9,    char_I_deco_model           ; 0 = ZH-L16, 1 = ZH-L16-GF
-        OPTION_UINT8p10 oPPO2Max,       .120, ppo2_warning_high, .160,   0,      .10,    opt_ppO2_max
+        OPTION_UINT8p10 oPPO2Max,       .120, ppo2_warning_high, .160,   0,      .10,    char_I_ppO2_max
         OPTION_UINT8    oLastDeco,      .3,  .6, .3,  tMeters,      .11,    opt_last_stop
         OPTION_UINT8    oGF_low,       .10,  .100, .30,  tPercent,  .12,    opt_GF_low
         OPTION_UINT8    oGF_high,      .45,  .110, .85, tPercent,   .13,    opt_GF_high
-        OPTION_UINT8p10 osatmult,      .100,  .140, .110,tPercent,  .14,    char_I_saturation_multiplier
-        OPTION_UINT8p10 odesatmult,    .60,  .100,  .90,tPercent,   .15,    char_I_desaturation_multiplier
-        OPTION_UINT8p10 oPPO2Min,       .16, ppo2_warning_low, .19,   0,         .16,    opt_ppO2_min
+        OPTION_UINT8p5 osatmult,      .100,  .140, .110,tPercent,  .14,    char_I_saturation_multiplier
+        OPTION_UINT8p5 odesatmult,    .60,  .100,  .90,tPercent,   .15,    char_I_desaturation_multiplier
+        OPTION_UINT8p10 oPPO2Min,       .16, ppo2_warning_low, .19,   0,         .16,    char_I_ppO2_min
         OPTION_UINT8    oaGF_low,      .10,  .100, .30,  tPercent,  .17,    opt_aGF_low
         OPTION_UINT8    oaGF_high,     .45,  .110, .85, tPercent,   .18,    opt_aGF_high
         OPTION_BOOL     oEnable_aGF,    0,                          .19,    opt_enable_aGF              ; =1: aGF can be selected underwater
         OPTION_UINT8    oCompassGain,   0,  7,  6,       tMinutes,  .20,    opt_compass_gain            ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
-        OPTION_ENUM8    oSamplingRate,  2,  0,  tSampling2s,        .21,    opt_sampling_rate           ; =1: 10s, =0: 2s
+        OPTION_ENUM8    oSamplingRate,  2,  0,  tSetSeconds,        .21,    opt_sampling_rate           ; =1: 10s, =0: 2s
 
 ;=============================================================================
 ; Managing Settings
@@ -117,12 +149,13 @@
         OPTION_ENUM8    oBrightness,    3,  0,  tEco,           .23,    opt_brightness                  ; =0: Eco, =1:Medium, =2:Full
         OPTION_UINT8    oDiveSalinity,  0,  4, 0,  tPercent,    .24,    opt_salinity                    ; 0-4%
         OPTION_ENUM8    oCCRMode,    3,  0,  tCCRModeFixedSP,   .25,    opt_ccr_mode                    ; =0: Fixed SP, =1: Sensor, =2: Auto SP
-    IFNDEF	    french_italian
-	OPTION_ENUM8    oLanguage,      2,  0,  tEnglish,   .26,    opt_language                        ; 0=EN, 1=DE
-    ELSE
-	OPTION_ENUM8    oLanguage,      2,  0,  tFrench,    .26,    opt_language                        ; 0=FR, 1=IT
-    ENDIF
-	OPTION_ENUM8    oDateFormat,    3,  1,  tDateformat,.27,    opt_dateformat                      ; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
+
+		IFNDEF	french_italian
+		OPTION_ENUM8    oLanguage,      2,  0,  tEnglish,   .26,    opt_language                        ; 0=EN, 1=DE
+		ELSE
+		OPTION_ENUM8    oLanguage,      2,  0,  tFrench,    .26,    opt_language                        ; 0=FR, 1=IT
+		ENDIF
+		OPTION_ENUM8    oDateFormat,    3,  1,  tDateformat,.27,    opt_dateformat                      ; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD
         OPTION_ENUM8    oUnits,         2,  0,  tMetric,    .28,    opt_units                           ; 0=Meters, 1=Feets
 
 ;=============================================================================
@@ -193,29 +226,48 @@
 
 ;=============================================================================
 ; Misc
-        OPTION_ENUM8    oColorSetDive,  4,  0, tColorSetName0,        .146,    opt_dive_color_scheme            ; Color scheme divemode
-        OPTION_UINT8    oPressureAdjust, .0,.255,   .0,     -1,       .147,    opt_pressure_adjust              ; SIGNED int (-20/+20mbar max.)
-        OPTION_BOOL     oSafetyStop,    0,                            .148,    opt_enable_safetystop            ; =1: A safety stop is shown
-        OPTION_UINT8    oCalGasO2,      .21,.100,   .21,    tPercent, .149,    opt_calibration_O2_ratio         ; Calibration gas %O2 (Do not move in EEPROM, must stay at .149!)
-        OPTION_BOOL     oSensorFallback,1,                            .150,    opt_sensor_fallback              ; =1: Fallback to SP1 when sensor is lost
-        OPTION_BOOL     oFlipScreen,    0,                            .151,    opt_flip_screen                  ; =1: Flip the screen
-        OPTION_UINT8p10 ocR_button_left, .20, .100,   .40,  tPercent, .152,    opt_cR_button_left               ; left button sensitivity
-        OPTION_UINT8p10 ocR_button_right,.20, .100,   .40,  tPercent, .153,    opt_cR_button_right              ; right button sensitivity
-        OPTION_UINT8    obottom_usage,  .5,.50,   .20,tLitersMinute,  .154,    char_I_bottom_usage              ; l/min
-        OPTION_UINT8    odeco_usage,    .5,.50,   .20,tLitersMinute,  .155,    char_I_deco_usage                ; l/min
-        OPTION_BOOL     oMODwarning,    0,                            .156,    opt_modwarning                   ; =1: red depth blinking warning
-        OPTION_BOOL     oVSItextv2,     0,                            .157,    opt_vsitextv2                    ; =1: use the dynamic (depends on depth) ascend rate limits
-        OPTION_BOOL     oVSIgraph,      0,                            .158,    opt_vsigraph                     ; =1: draw the graphical VSI bar
-        OPTION_BOOL     oShowppO2,      0,                            .159,    opt_showppo2                     ; =1:always show the ppO2 value in the warning position
-        OPTION_UINT8    oTemperatureAdjust, .0,.255,   .0,     -1,    .160,    opt_temperature_adjust           ; SIGNED int (-2.0/+2.0 °C max.)
-        OPTION_UINT8    oSafetyStopLength, .60,.240,   .180,   -1,    .161,    opt_safety_stop_length           ; [s]
-        OPTION_UINT8    oSafetyStopStart,  .21,.61,     .51,   -1,    .162,    opt_safety_stop_start            ; [cbar], default 510mbar, min 210mbar, max 610mbar
-        OPTION_UINT8    oSafetyStopEnd,    .19,.39,     .29,   -1,    .163,    opt_safety_stop_end              ; [cbar], default 290mbar, min 190mbar, max 390mbar
-        OPTION_UINT8    oSafetyStopReset,  .81,.151,    .101,  -1,    .164,    opt_safety_stop_reset            ; [cbar], default 1010mbar, min 810mbar, max 1510mbar
+    OPTION_ENUM8    oColorSetDive,  4,  0, tColorSetName0,        .146,    opt_dive_color_scheme            ; Color scheme divemode
+    OPTION_UINT8    oPressureAdjust, .0,.255,   .0,     -1,       .147,    opt_pressure_adjust              ; SIGNED int (-20/+20mbar max.)
+    OPTION_BOOL     oSafetyStop,    0,                            .148,    opt_enable_safetystop            ; =1: A safety stop is shown
+    OPTION_UINT8    oCalGasO2,      .21,.100,   .21,    tPercent, .149,    opt_calibration_O2_ratio         ; Calibration gas %O2 (Do not move in EEPROM, must stay at .149!)
+    OPTION_BOOL     oFlipScreen,    0,                            .151,    opt_flip_screen                  ; =1: Flip the screen
+    OPTION_UINT8p10 ocR_button_left, .20, .100,   .40,  tPercent, .152,    opt_cR_button_left               ; left button sensitivity
+    OPTION_UINT8p10 ocR_button_right,.20, .100,   .40,  tPercent, .153,    opt_cR_button_right              ; right button sensitivity
+    OPTION_UINT8    obottom_usage,  .5,.50,   .20,tLitersMinute,  .154,    char_I_bottom_usage              ; l/min
+    OPTION_UINT8    odeco_usage,    .5,.50,   .20,tLitersMinute,  .155,    char_I_deco_usage                ; l/min
+    OPTION_BOOL     oMODwarning,    0,                            .156,    opt_modwarning                   ; =1: red depth blinking warning
+    OPTION_BOOL     oVSItextv2,     0,                            .157,    opt_vsitextv2                    ; =1: use the dynamic (depends on depth) ascend rate limits
+    OPTION_BOOL     oVSIgraph,      0,                            .158,    opt_vsigraph                     ; =1: draw the graphical VSI bar
+    OPTION_BOOL     oShowppO2,      0,                            .159,    opt_showppo2                     ; =1:always show the ppO2 value in the warning position
+    OPTION_UINT8    oTemperatureAdjust, .0,.255,   .0,     -1,    .160,    opt_temperature_adjust           ; SIGNED int (-2.0/+2.0 °C max.)
+    OPTION_UINT8    oSafetyStopLength, .60,.240,   .180,   -1,    .161,    opt_safety_stop_length           ; [s]
+    OPTION_UINT8    oSafetyStopStart,  .21,.61,     .51,   -1,    .162,    opt_safety_stop_start            ; [cbar], default 510mbar, min 210mbar, max 610mbar
+    OPTION_UINT8    oSafetyStopEnd,    .19,.39,     .29,   -1,    .163,    opt_safety_stop_end              ; [cbar], default 290mbar, min 190mbar, max 390mbar
+    OPTION_UINT8    oSafetyStopReset,  .81,.151,    .101,  -1,    .164,    opt_safety_stop_reset            ; [cbar], default 1010mbar, min 810mbar, max 1510mbar
 	OPTION_UINT8    oDiveTimeout,	    .1,.20,  divemode_timeout_default,   tMinutes,  .168,    opt_diveTimeout			; Timeout for divemode in minutes
-	OPTION_UINT8	oPSCR_drop,	.0,.15,	.4,	     tPercent,.169,    opt_PSCR_drop			; PSCR Drop [%]
-	OPTION_UINT8	oPSCR_lungratio,.5,.20,	.10,	     tPercent,.170,    opt_PSCR_lungratio		; PSCR Lung Ratio [1/x]
-	OPTION_UINT8p10 oPPO2MaxDeco,.120, ppo2_warning_high_deco,.160,0,.171, opt_ppO2_max_deco		; ppO2 max for deco gases
+	OPTION_UINT8	oPSCR_drop,	.0,.15,	.4,	     tPercent,.169,    char_I_PSCR_drop			; PSCR Drop [%]
+	OPTION_UINT8	oPSCR_lungratio,.5,.20,	.10, tPercent,.170,    char_I_PSCR_lungratio	; PSCR Lung Ratio [1/x]
+	OPTION_UINT8p10 oPPO2MaxDeco,.120, ppo2_warning_high_deco,.160,0,.171, char_I_ppO2_max_deco		; ppO2 max for deco gases
+	OPTION_UINT8p10 oPPO2MinCC,    ppo2_warning_low_cc_min,	 ppo2_warning_low_cc_max,  ppo2_warning_low_cc, 0,	.172, char_I_ppO2_min_loop ; ppO2 min for Loop
+	OPTION_UINT8    oTankSize1,     .1,  .40,  .11, tLiter,  .173, char_I_tank_size+0		; size of OC gas tank 1
+	OPTION_UINT8    oTankSize2,     .1,  .40,  .11, tLiter,  .174, char_I_tank_size+1		; size of OC gas tank 2
+	OPTION_UINT8    oTankSize3,     .1,  .40,  .11, tLiter,  .175, char_I_tank_size+2		; size of OC gas tank 3
+	OPTION_UINT8    oTankSize4,     .1,  .40,  .11, tLiter,  .176, char_I_tank_size+3		; size of OC gas tank 4
+	OPTION_UINT8    oTankSize5,     .1,  .40,  .11, tLiter,  .177, char_I_tank_size+4		; size of OC gas tank 5
+	OPTION_UINT8	oTankFillPres1, .5, .29,   .20, tbar10,  .178, char_I_tank_pres_fill+0	; fill press of OC gas tank 1
+	OPTION_UINT8	oTankFillPres2, .5, .29,   .20, tbar10,  .179, char_I_tank_pres_fill+1	; fill press of OC gas tank 2
+	OPTION_UINT8	oTankFillPres3, .5, .29,   .20, tbar10,  .180, char_I_tank_pres_fill+2	; fill press of OC gas tank 3
+	OPTION_UINT8	oTankFillPres4, .5, .29,   .20, tbar10,  .181, char_I_tank_pres_fill+3	; fill press of OC gas tank 4
+	OPTION_UINT8	oTankFillPres5, .5, .29,   .20, tbar10,  .182, char_I_tank_pres_fill+4	; fill press of OC gas tank 5
+	OPTION_UINT8	oCCmaxFracO2,  .80, .100,  .90, tPercent,.183, char_I_cc_max_frac_o2	; max. O2 % in Loop
+	OPTION_UINT8    oSimSetpoint,   .1,   .5,   .1, tblank,  .184, opt_sim_setpoint_number	; setpoint to use for deco calculation
+	OPTION_BOOL     oCalcAscGas,                 0,          .185, opt_calc_asc_gasvolume	; calculate OC gas volume needs for ascent
+    OPTION_BOOL     oSimAGF,                     0,            -1, opt_sim_use_aGF			; use GF (no) or aGF (yes) for deco calculation
+	OPTION_ENUM8    oAltMode,      	4,  	 0, tAltModeFly, .186, char_I_altitude_wait     ; 0=no-fly, 1=1000m, 2=2000m, 3=3000m
+	OPTION_BOOL     oEnable_IBCD,   0,                       .187, opt_enable_IBCD          ; =1: IBCD warning activated
+	OPTION_UINT8	oAscentSpeed,  .5, .10, .10,tMeterMinute,.188, char_I_ascent_speed		; ascent speed - Attention: proper operation with other values than the default of 10m/min has not been validated yet! Do not deviate from the default until further notice!
+	OPTION_UINT8	oGasChangeTime,.0, .3,  .1, tmin		,.198, char_I_gas_change_time	; (extra) time at a stop to change the gas
+	
 ;=============================================================================
 ; Set Time/Set Date (RAM only)
 		OPTION_UINT8    oSetHours,		.0,	.23, .0,	0, -1,		hours
--- a/src/options.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/options.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File options.asm
+;   File options.asm								REFACTORED VERSION V2.91
 ;
 ;   Manage all options data.
 ;
@@ -376,30 +376,41 @@
 ; OUTPUT: none
 ; TRASH:  TBLPTR, TABLAT, WREG, FSR0, FSR1
 option_inc:
-        ; Read type, default and register from table
-        rcall   option_read
+    ; Read type, default and register from table
+    rcall   option_read
         
-        ; Switch on type
-        movf    opt_type,W
-        bz      option_inc_uint8
-        dcfsnz  WREG
-        bra     option_inc_enum8
-        dcfsnz  WREG
-        bra     option_inc_string
+    ; Switch on type
+    movf    opt_type,W
+    bz      option_inc_uint8
+    dcfsnz  WREG
+    bra     option_inc_enum8
+    dcfsnz  WREG
+    bra     option_inc_string
 
+	
 option_inc_uint8:                       ; Defaults type too...
-        movf    INDF1,W
-        addwf   opt_inc,W
-        cpfslt  opt_max
-        bra     option_inc_1
-        movf    opt_min,W
+	movf    INDF1,W
+	addwf   opt_inc,W
+	cpfslt  opt_max
+	bra     option_inc_1
+	movf    opt_min,W
 option_inc_1:
-        movwf   INDF1
-	
+    movwf   INDF1
+		
+	; NEW FROM HERE...	## voting logic (allow sensors for pSCR)
+	; Now some rather crude hack into this routine to unify CCR & pSCR mode setting:
+	movlw	.25				; eeprom address of option oCCRMode
+	cpfseq	opt_eeprom		; skip next line if we deal with this option right now
+    bra		option_inc_2
+	btfsc	FLAG_pscr_mode	; skip next line if we are not in PSCR mode
+	bcf		opt_ccr_mode,1	; in pSCR mode, opt_ccr_mode may only be 0 or 1
+
+option_inc_2:
+; ...UNTILL HERE	
 	; Now some rather crude hack into this routine to make CCR Calibration more convenient:
 	movlw	.149			; eeprom address of option CalGasO2 
 	cpfseq	opt_eeprom		; skip next line if we deal with this option right now
-        return
+    return
 	
 	btfsc	FLAG_pscr_mode		; skip next line if we are not in PSCR mode 
 	return 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/p2_deco-TESTING.c	Wed Jan 31 19:39:37 2018 +0100
@@ -0,0 +1,3802 @@
+// **************************************************************
+// p2_deco.c							REFACTORED VERSION	V2.95
+//																			!!  SPECIAL TESTING VERSION - DO NOT USE FOR REAL DIVES  !!
+//  Created on: 12.05.2009													===========================================================
+//  Author: chsw															->  This version shows the alternative (bailout) stops   <-
+//																			->    instead of the stop from the normal dive plan.     <-
+// **************************************************************
+
+//////////////////////////////////////////////////////////////////////////////
+// OSTC - diving computer code
+// Copyright (C) 2011 HeinrichsWeikamp GbR
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco.c
+// part2 of the OSTC code
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// contributions by Ralph Lembcke
+//
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implementation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of char_I_depth_last_deco for Gradient Model
+// 03/31/09 v107: integration of FONT Incon24
+// 05/23/10 v109: 5 gas changes & 1 min timer
+// 07/13/10 v110: cns vault added
+// 12/25/10 v110: split in three files (deco.c, main.c, definitions.h)
+// 2011/01/20: [jDG] Create a common file included in ASM and C code.
+// 2011/01/24: [jDG] Make ascenttime an short. No more overflow!
+// 2011/01/25: [jDG] Fusion deco array for both models.
+// 2011/01/25: [jDG] Use CF(54) to reverse deco order.
+// 2011/02/11: [jDG] Reworked gradient-factor implementation.
+// 2011/02/15: [jDG] Fixed inconsistencies introduced by gas switch delays.
+// 2011/03/21: [jDG] Added gas consumption (CF56 & CF57) evaluation for OCR mode.
+// 2011/04/15: [jDG] Store low_depth in 32bits (w/o rounding), for a better stability.
+// 2011/04/25: [jDG] Added 1mn mode for CNS calculation, to allow it for deco planning.
+// 2011/04/27: [jDG] Fixed char_O_gradient_factor calculation when model uses gradient-factor.
+// 2011/05/02: [jDG] Added "Future TTS" function (CF58).
+// 2011/05/17: [jDG] Various cleanups.
+// 2011/08/08: [jDG] Computes CNS during deco planning ascent.
+// 2011/11/24: [jDG] Slightly faster and better NDL computation.
+// 2011/12/17: [mH]  Remove of the useless debug stuff
+// 2012/02/24: [jDG] Remove missed stop bug.
+// 2012/02/25: [jDG] Looking for a more stable LOW grad factor reference.
+// 2012/09/10: [mH]  Fill char_O_deco_time_for_log for logbook write
+// 2012/10/05: [jDG] Better gas_volumes accuracy (average depth, switch between stop).
+// 2013/03/05: [jDG] Should vault low_depth too.
+// 2013/03/05: [jDG] Wrobell remark: ascent_to_first_stop works better with finer steps (2sec).
+// 2013/05/08: [jDG] A. Salm remark: NOAA tables for CNS are in ATA, not bar.
+// 2013/12/21: [jDG] Fix CNS calculation in deco plan w/o marked gas switch
+// 2014/06/16: [jDG] Fix Helium diluent. Fix volumes with many travel mix.
+// 2014/06/29: [mH]  Compute int_O_ceiling
+// 2015/06/12: [jDG] Fix NDL prediction while desaturating with the Buhlmann model.
+// 2017/08/04: [mH]  Switch to absolute GF everywhere and apply safety margin parameters to both models (GF and non-GF), fixes from Ralph Lembcke
+// 2017/10/31: [rl]  enhancements for pSCR mode and introduction of 2nd deco plan computation
+// 2017/12/31: [rl]  completion of 2nd deco plan computation and various up-fixes
+//
+//
+// Literature:
+// Buhlmann, Albert: Tauchmedizin; 4. Auflage [2002];
+// Schr"oder, Kai & Reith, Steffen; 2000; S"attigungsvorg"ange beim Tauchen, das Modell ZH-L16, Funktionsweise von Tauchcomputern; http://www.achim-und-kai.de/kai/tausim/saett_faq
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+//
+//
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+#include <math.h>
+
+// ***********************************************
+// ** V A R I A B L E S   D E F I N I T I O N S **
+// ***********************************************
+
+#include "p2_definitions.h"
+#define  TEST_MAIN
+#include "shared_definitions.h"
+
+
+// ambient pressure at different mountain heights
+#define P_ambient_1000m					0.880	// [bar]  based on 990 hPa and 20°C at sea level, 15°C at altitude
+#define P_ambient_2000m					0.782	// [bar]
+#define P_ambient_3000m					0.695	// [bar]
+
+// ambient pressure in aircraft cabin during flying - worst case according to Buhlmann
+#define P_ambient_fly					0.600	// [bar], 0.600 bar is the value used by Buhlmann for his flying-after-diving calculations
+												//		  0.735 bar is a typical cabin pressure for nowadays commercial jet aircrafts
+												//        -----
+												//        0.135 bar safety margin
+
+// constants and factors
+#define ppWater        					0.0627	// water vapor partial pressure in the lungs
+#define METER_TO_BAR   					0.09985	// conversion factor
+#define BAR_TO_METER   					10.0150	// conversion factor (1.0/METER_TO_BAR)						
+#define SURFACE_DESAT_FACTOR    		0.7042	// surface desaturation safety factor
+#define HYST							1.0E-06	// threshold for tissue graphics on-gassing / off-gassing visualization
+
+// thresholds
+#define GF_warning_threshold			100		// threshold for GF   warning
+#define GF_prewarning_threshold			 70		// threshold for GF   attention
+#define CNS_warning_threshold			100		// threshold for CNS  warning
+#define CNS_prewarning_threshold		 70		// threshold for CNS  attention
+#define ppO2_prewarn_threshold			120		// threshold for ppO2 attention (master warnings come through options_table.asm)
+#define GAS_NEEDS_ATTENTION_THRESHOLD	0.70	// threshold for gas needs attention
+
+// deco engine states and modes
+#define DECO_STATUS_MASK				0x03
+#define DECO_STATUS_START				0x00
+#define DECO_STATUS_FINISHED			0x00
+#define DECO_STATUS_STOPS				0x01 
+#define DECO_STATUS_ASCENT				0x02
+#define DECO_STATUS_INIT				0x03
+
+#define DECO_MODE_MASK					0x0C
+#define DECO_MODE_LOOP					0x04
+#define DECO_MODE_CCR					0x04	// to be used with == operator in combination with DECO_MODE_MASK only!
+#define DECO_MODE_PSCR					0x08
+
+#define DECO_PLAN_ALTERNATE				0x10
+#define DECO_CNS_CALCULATE 				0x20
+#define DECO_VOLUME_CALCULATE	 		0x40
+#define DECO_ASCENT_DELAYED 			0x80
+
+// deco engine warnings
+#define	DECO_WARNING_IBCD				0x01
+#define	DECO_WARNING_IBCD_lock			0x02
+#define	DECO_WARNING_MBUBBLES 			0x04
+#define	DECO_WARNING_MBUBBLES_lock		0x08
+#define	DECO_WARNING_OUTSIDE			0x10
+#define	DECO_WARNING_OUTSIDE_lock		0x20
+#define DECO_WARNING_STOPTABLE_OVERFLOW	0x40
+#define DECO_FLAG						0x80
+
+// flags used with integer numbers
+#define INT_FLAG_INVALID				0x0400
+#define INT_FLAG_ZERO					0x0800
+#define INT_FLAG_LOW					0x1000
+#define	INT_FLAG_HIGH					0x2000
+#define INT_FLAG_PREWARNING				0x4000
+#define	INT_FLAG_WARNING				0x8000
+
+
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+
+static void calc_hauptroutine(void);
+static void calc_hauptroutine_data_input(void);
+static void calc_hauptroutine_update_tissues(void);
+static void calc_hauptroutine_calc_deco(void);
+static void calc_tissue(void);
+static void calc_limit(void);
+static void calc_nullzeit(void);
+static void calc_ascenttime(void);
+static void calc_dive_interval(void);
+static void calc_gradient_factor(void);
+static void calc_wo_deco_step_1_min(void);
+static void calc_desaturation_time(void);
+
+static void sim_extra_time(void);
+static void sim_ascent_to_first_stop(void);
+static void sim_limit(PARAMETER float GF_current);
+
+static void update_startvalues(void);
+static void gas_switch_set(void);
+static void compute_CNS_for_display(void);
+
+static void clear_deco_table(void);
+static void clear_tissue(void);
+
+static unsigned char gas_find_better(void);
+static unsigned char calc_nextdecodepth(void);
+static unsigned char update_deco_table(PARAMETER unsigned char time_increment);
+
+
+//---- Bank 5 parameters -----------------------------------------------------
+#ifndef UNIX
+#   pragma udata bank5=0x500
+#endif
+
+// general deco parameters
+
+static float			GF_low;							// initialized from deco parameters, constant during all computations
+static float			GF_high;						// initialized from deco parameters, constant during all computations
+static float			GF_delta;						// initialized from deco parameters, constant during all computations
+static float			locked_GF_step_norm;			// GF_delta / low_depth_norm in normal plan
+static float			locked_GF_step_alt;				// GF_delta / low_depth_alt  in alternative plan
+
+static float			low_depth_norm;					// Depth of deepest stop in normal plan
+static float			low_depth_alt;					// Depth of deepest stop in alternative plan
+
+static float			float_ascent_speed;				// ascent speed from options_table (1.0 .. 10.0 m/min)
+static float			float_saturation_multiplier;    // safety factor for on-gassing rates
+static float			float_desaturation_multiplier;  // safety factor for off-gassing rates
+static float			float_deco_distance;            // additional depth below stop depth for tissue, CNS and gas volume calculation
+
+
+// real context: what we are doing now.
+
+static float			calc_lead_tissue_limit;     	// minimum tolerated ambient pressure by Buhlmann model
+static float			CNS_fraction;                   // current CNS (1.00 = 100%)
+
+static unsigned short	deco_tissue_vector;				// 32 bit vector to memories all tissues that are in decompression
+static unsigned short	IBCD_tissue_vector;				// 32 bit vector to memories all tissues that experience IBCD
+
+// simulation context: used to predict ascent.
+
+static float			sim_lead_tissue_limit;			// minimum tolerated ambient pressure by Buhlmann model
+static float			CNS_sim_norm_fraction;			// CNS at end of dive in normal plan
+static float			CNS_sim_alt_fraction;			// CNS at end of dive in alternative plan
+
+static unsigned char	temp_depth_limit;				// depth of next stop in meters, used in deco calculations
+static unsigned char	sim_lead_tissue_no;				// Leading compartment number
+static unsigned char	split_N2_He[NUM_COMP];			// used for calculating the desaturation time
+
+
+// stops table
+
+static unsigned char	internal_deco_depth[NUM_STOPS];	// depth of the stop
+static unsigned char	internal_deco_time[NUM_STOPS];	// duration of the stop
+static unsigned char	internal_deco_gas[NUM_STOPS];	// gas used at the stop
+
+
+// transfer variables between calc_desaturation_time() and calc_desaturation_time_helper()
+
+static float			desat_factor;					// used to cache a pre-computed factor
+static float			var_ht;							// buffer for a half-time factor
+static float 			pres_target;					// target pressure for a compartment
+static float			pres_actual;					// current pressure of the compartment
+static unsigned short	short_time;						// time it takes for the compartment to reach the target pressure
+
+// transfer variables between gas_volumes() and gas_volumes_helper()
+static float			float_depth;					// depth of the stop or half-way point
+static float			float_time;						// duration of the stop or ascent phase
+static float			volume;							// computed volume of gas
+static unsigned char	usage;							// gas usage in l/min
+
+
+// 44 byte free space left in this bank
+
+
+//---- Bank 6 parameters -----------------------------------------------------
+#ifndef UNIX
+#   pragma udata bank6=0x600
+#endif
+
+// indexing and sequencing
+
+static unsigned char	ci;								// used as index to the Buhlmann tables
+static unsigned char	twosectimer = 0;				// used for timing the tissue updating
+static unsigned char	tissue_increment;				// Selector for real/simulated tissues and time increment
+
+
+// environmental and gas data
+
+static float            pres_respiration;				// current depth in absolute pressure
+static float            pres_surface;					// absolute pressure at the surface
+static float            temp_deco;						// simulated current depth in abs.pressure, used for deco calculations
+
+static float            O2_ratio;                       // real breathed gas oxygen ratio
+static float            N2_ratio;                       // real breathed gas nitrogen ratio
+static float            He_ratio;                       // real breathed gas helium ratio
+
+static float			calc_O2_ratio;					// simulated breathed gas oxygen ratio
+static float			calc_N2_ratio;                  // simulated breathed gas nitrogen ratio
+static float			calc_He_ratio;                  // simulated breathed gas helium ratio
+
+static float			O2_ppO2;						// ppO2 - calculated for pure oxygen at current depth
+static float			pSCR_ppO2;						// ppO2 - calculated for breathed from pSCR loop
+static float			pure_ppO2;						// ppO2 - calculated for breathed in OC mode
+
+static unsigned char	char_actual_ppO2;				// ppO2 - assumed to be breathed, as integer 100 = 1.00 bar
+
+static float			breathed_ppO2;					// partial pressure of breathed oxygen
+static float            ppN2;							// partial pressure of breathed nitrogen
+static float            ppHe;							// partial pressure of breathed helium
+
+
+// Buhlmann model parameters
+
+static float            var_N2_a;                       // Buhlmann a, for current N2 tissue
+static float            var_N2_b;                       // Buhlmann b, for current N2 tissue
+static float            var_He_a;                       // Buhlmann a, for current He tissue
+static float            var_He_b;                       // Buhlmann b, for current He tissue
+static float            var_N2_e;                       // exposition, for current N2 tissue
+static float            var_He_e;                       // exposition, for current He tissue
+static float            var_N2_ht;                      // half-time for current N2 tissue
+static float            var_He_ht;                      // half-time for current N2 tissue
+
+
+// gas switch history
+
+static unsigned char	sim_gas_first_used;				// Number of first used gas, for bottom segment
+static unsigned char    sim_gas_last_used;              // number of last  used gas
+static unsigned char    sim_gas_last_depth;             // change depth of last used gas
+
+
+// vault to back-up & restore tissue data
+
+static float			pres_tissue_N2_vault[NUM_COMP];	// stores the nitrogen tissue pressures
+static float			pres_tissue_He_vault[NUM_COMP];	// stores the helium tissue pressures
+static float			low_depth_norm_vault;			// stores a parameter of the GF model for normal plan
+static float			low_depth_alt_vault;			// stores a parameter of the GF model for alternative plan
+static float			cns_vault_float;				// stores current CNS (float representation)
+
+static unsigned int		cns_vault_int;					// stores current CNS (integer representation)
+static unsigned char	deco_warnings_vault;			// stores warnings status
+
+
+// auxiliary variables for local data buffering
+
+static float 			N2_equilibrium;					// used for N2 tissue graphics scaling
+static float            temp_tissue;					// auxiliary variable to buffer tissue pressures
+
+
+// 7 byte free space left in this bank
+
+
+//---- Bank 7 parameters -----------------------------------------------------
+#ifndef UNIX
+#   pragma udata bank7=0x700
+#endif
+
+// Keep order and position of the variables in bank 7 as they are backed-up to & restored from EEPROM 
+
+float					pres_tissue_N2[NUM_COMP];		// 16 floats = 64 bytes
+float					pres_tissue_He[NUM_COMP];		// 16 floats = 64 bytes
+float					sim_pres_tissue_N2[NUM_COMP];	// 16 floats = 64 bytes
+float					sim_pres_tissue_He[NUM_COMP];	// 16 floats = 64 bytes
+
+
+//---- Bank 8 parameters -----------------------------------------------------
+#ifndef UNIX
+#   pragma udata overlay bank8=0x800
+
+static char	  md_pi_subst[256];				// Overlay C-code data stack here, too.
+
+#   define C_STACK md_pi_subst
+#endif
+
+// Back to bank6 for further tmp data
+#ifndef UNIX
+#   pragma udata bank6
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+///////////////////////////// THE LOOKUP TABLES //////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+//
+// End of PROM code is 17F00, So push tables on PROM top...
+//
+#ifndef UNIX
+#   pragma romdata Buhlmann_tables = 0x1DD00  // Needs to be in UPPER bank.
+#endif
+
+rom const float Buhlmann_ab[4*16] = {
+// Data ZH-L16C, from Bühlmann Tauchmedizin 2002, option 1a (4mn)
+// a for N2    b for N2     a of He     b for He
+	1.2599,     0.5050,     1.7424,     0.4245,
+	1.0000,     0.6514,     1.3830,     0.5747,
+	0.8618,     0.7222,     1.1919,     0.6527,
+	0.7562,     0.7825,     1.0458,     0.7223,
+	0.6200,     0.8126,     0.9220,     0.7582,
+	0.5043,     0.8434,     0.8205,     0.7957,
+	0.4410,     0.8693,     0.7305,     0.8279,
+	0.4000,     0.8910,     0.6502,     0.8553,
+	0.3750,     0.9092,     0.5950,     0.8757,
+	0.3500,     0.9222,     0.5545,     0.8903,
+	0.3295,     0.9319,     0.5333,     0.8997,
+	0.3065,     0.9403,     0.5189,     0.9073,
+	0.2835,     0.9477,     0.5181,     0.9122,
+	0.2610,     0.9544,     0.5176,     0.9171,
+	0.2480,     0.9602,     0.5172,     0.9217,
+	0.2327,     0.9653,     0.5119,     0.9267
+};
+
+rom const float Buhlmann_ht[2*16] = {
+// Compartment half-life, in minute
+//--- N2 ---- He ----------------------
+	  4.0,    1.51,
+	  8.0,    3.02,
+	 12.5,    4.72,
+	 18.5,    6.99,
+	 27.0,   10.21,
+	 38.3,   14.48,
+	 54.3,   20.53,
+	 77.0,   29.11,
+	109.0,   41.20,
+	146.0,   55.19,
+	187.0,   70.69,
+	239.0,   90.34,
+	305.0,  115.29,
+	390.0,  147.42,
+	498.0,  188.24,
+	635.0,  240.03
+};
+
+rom const float e2secs[2*16] = {
+// result of  1 - 2^(-1/(2sec*HT))
+//---- N2 ------------- He ------------
+	5.75958E-03,    1.51848E-02,  
+	2.88395E-03,    7.62144E-03,
+	1.84669E-03,    4.88315E-03,
+    1.24813E-03,    3.29997E-03,
+    8.55371E-04,    2.26041E-03,
+    6.03079E-04,    1.59437E-03,
+    4.25414E-04,    1.12479E-03,
+    3.00019E-04,    7.93395E-04,
+    2.11949E-04,    5.60641E-04,
+    1.58240E-04,    4.18555E-04,
+    1.23548E-04,    3.26795E-04,
+    9.66686E-05,    2.55722E-04,
+    7.57509E-05,    2.00387E-04,
+    5.92416E-05,    1.56716E-04,
+    4.63943E-05,    1.22734E-04,
+    3.63850E-05,    9.62538E-05
+//-------------------------------------
+};
+
+rom const float e1min[2*16] = {
+// Integration constant for 1 minute,
+// Ie. 1- 2^(-1/HT)
+//----- N2 --------- e 1min He --------
+	1.59104E-01,    3.68109E-01,  	
+    8.29960E-02,   	2.05084E-01,     
+    5.39424E-02,    1.36579E-01,
+    3.67742E-02,    9.44046E-02,
+    2.53454E-02,    6.56359E-02,
+    1.79351E-02,    4.67416E-02,
+    1.26840E-02,    3.31991E-02,
+    8.96152E-03,    2.35301E-02,
+    6.33897E-03,    1.66832E-02,
+    4.73633E-03,    1.24808E-02,
+    3.69981E-03,    9.75753E-03,
+    2.89600E-03,    7.64329E-03,
+    2.27003E-03,    5.99417E-03,
+    1.77572E-03,    4.69082E-03,
+    1.39089E-03,    3.67548E-03,
+    1.09097E-03,    2.88359E-03
+//-------------------------------------
+};
+
+rom const float e10min[2*16] = {
+// The 10 min Value in float notation:
+//  result of 1 - 2^(-10/ht)
+//---- N2 -------------- He -----------
+	8.23223E-01,    9.89851E-01,  
+	5.79552E-01,  	8.99258E-01,
+    4.25651E-01,    7.69737E-01,
+    3.12487E-01,    6.29027E-01,
+    2.26416E-01,    4.92821E-01,
+    1.65547E-01,    3.80407E-01,
+    1.19840E-01,    2.86538E-01,
+    8.60863E-02,    2.11886E-01,
+    6.16117E-02,    1.54849E-01,
+    4.63665E-02,    1.18026E-01,
+    3.63881E-02,    9.34005E-02,
+    2.85855E-02,    7.38569E-02,
+    2.24698E-02,    5.83504E-02,
+    1.76160E-02,    4.59303E-02,
+    1.38222E-02,    3.61528E-02,
+    1.08563E-02,    2.84646E-02
+//-------------------------------------
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////////////////////////////// THE SUBROUTINES ///////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+//
+// all new in v.102
+// moved from 0x0D000 to 0x0C000 in v.108
+#ifndef UNIX
+#   pragma code p2_deco = 0x0C000
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+///////////////////////  U T I L I T I E S   /////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+// Bump to blue-screen when an assert is wrong
+#ifdef __DEBUG
+void assert_failed(PARAMETER short int line)
+{
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+// When calling C code from ASM context, the data stack pointer and
+// frames should be reset. Bank8 is used by stack
+
+#ifdef CROSS_COMPILE
+#       define RESET_C_STACK
+#else
+#   ifdef __DEBUG
+#       define RESET_C_STACK fillDataStack();
+        void fillDataStack(void)
+        {
+            _asm
+                LFSR    1,C_STACK
+                MOVLW   0xCC
+        loop:   MOVWF   POSTINC1,0
+                TSTFSZ  FSR1L,0
+                BRA     loop
+
+                LFSR    1,C_STACK
+                LFSR    2,C_STACK
+            _endasm
+        }
+#   else
+#       define RESET_C_STACK    \
+        _asm                    \
+            LFSR    1, C_STACK  \
+            LFSR    2, C_STACK  \
+        _endasm
+#   endif
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+// Fast subroutine to read timer 5.
+// Note: result is in 1/32 of milliseconds (30,51757813 us/bit to be precise)
+static unsigned short tmr5(void)
+{
+#ifndef CROSS_COMPILE
+    _asm
+        movff   0xf7c,PRODL     // TMR5L
+        movff   0xf7d,PRODH     // TMR5H
+    _endasm                     // result in PRODH:PRODL.
+#else
+    return 0;
+#endif
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// read Buhlmann tables A and B for compartment ci
+//
+static void read_Buhlmann_coefficients(void)
+{
+#ifndef CROSS_COMPILE
+    // Note: we don't use far rom pointer, because the
+    //       24 bits is too complex, hence we have to set
+    //       the UPPER page ourself...
+    //       --> Set zero if tables are moved to lower pages !
+    _asm
+        movlw 1
+        movwf TBLPTRU,0
+    _endasm
+#endif
+
+    assert( ci < NUM_COMP );
+
+    // Use an interleaved array (AoS) to access coefficients with a
+    // single addressing.
+    {
+        overlay rom const float* ptr = &Buhlmann_ab[4*ci];
+        var_N2_a = *ptr++;
+        var_N2_b = *ptr++;
+        var_He_a = *ptr++;
+        var_He_b = *ptr++;
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// read Buhlmann tables for compartment ci
+// If period == 0 : 2sec interval
+//              1 : 1 min interval
+//              2 : 10 min interval.
+static void read_Buhlmann_times(PARAMETER char period)
+{
+#ifndef CROSS_COMPILE
+    // Note: we don't use far rom pointer, because the
+    //       24 bits is to complex, hence we have to set
+    //       the UPPER page ourself...
+    //       --> Set zero if tables are moved to lower pages !
+    _asm
+        movlw 1
+        movwf TBLPTRU,0
+    _endasm
+#endif
+
+    assert( ci < NUM_COMP );
+
+    // Integration intervals.
+    switch(period)
+    {
+    case 0: //---- 2 sec -----------------------------------------------------
+        {
+            overlay rom const float* ptr = &e2secs[2*ci];
+            var_N2_e = *ptr++;
+            var_He_e = *ptr++;
+        }
+        break;
+
+    case 1: //---- 1 min -----------------------------------------------------
+       {
+            overlay rom const float* ptr = &e1min[2*ci];
+            var_N2_e = *ptr++;
+            var_He_e = *ptr++;
+        }
+        break;
+
+    case 2: //---- 10 min ----------------------------------------------------
+        {
+            overlay rom const float* ptr = &e10min[2*ci];
+            var_N2_e = *ptr++;
+            var_He_e = *ptr++;
+        }
+        break;
+
+    default:
+        assert(0);  // Never go there...
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// read Buhlmann tables for compartment ci
+//
+static void read_Buhlmann_ht(void)
+{
+
+#ifndef CROSS_COMPILE
+    // Note: we don't use far rom pointer, because the
+    //       24 bits is to complex, hence we have to set
+    //       the UPPER page ourself...
+    //       --> Set zero if tables are moved to lower pages !
+    _asm
+        movlw 1
+        movwf TBLPTRU,0
+    _endasm
+#endif
+
+    assert( ci < NUM_COMP );
+    {
+        overlay rom const float* ptr = &Buhlmann_ht[2*ci];
+        var_N2_ht = *ptr++;
+        var_He_ht = *ptr++;
+    }
+
+    assert( 4.0    <= var_N2_ht && var_N2_ht <= 635.0 );
+    assert( 1.5099 <= var_He_ht && var_He_ht <= 240.03 );
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_nextdecodepth
+//
+// new in v.102
+//
+// INPUT, changing during dive:
+//      temp_deco : current depth in absolute pressure
+//
+// INPUT, fixed during dive:
+//      pres_surface
+//      GF_delta
+//      GF_high
+//      GF_low
+//      char_I_depth_last_deco
+//
+// MODIFIED
+//      locked_GF_step_norm/_alt : used for GF model
+//      low_depth_norm/_alt      : used for GF model
+//
+// OUTPUT
+//      temp_depth_limit : depth of next stop in meters        (if RETURN == true )
+//                         depth we can ascent to without stop (if RETURN == false)
+//
+// RETURN TRUE if a stop is needed.
+//
+static unsigned char calc_nextdecodepth(void)
+{
+    overlay unsigned char need_stop;
+	
+	// compute current depth in meters
+    overlay float depth = (temp_deco - pres_surface) * BAR_TO_METER;
+
+    // compute depth in meters after 1 minute of ascent at float_ascent_speed (5..10 m/min)
+    overlay float min_depth = (depth > float_ascent_speed) ? (depth - float_ascent_speed) : 0.0;
+
+	
+	 // allow for 200mbar of weather dependent surface pressure change
+    assert( depth >= -0.2 );       
+
+
+	//---- check if a stop is needed for deco reasons ----------------------------
+	
+    // switch on deco model
+    if( char_I_deco_model != 0 )
+    {
+		//---- ZH-L16 + GRADIENT FACTOR Model ------------------------------------
+		
+		overlay float locked_GF_step;
+		overlay float low_depth;
+		overlay float pres_gradient;
+
+        overlay unsigned char first_stop = 0;
+		
+				
+		// calculate minimum depth we can ascent to in absolute pressure
+        sim_limit( GF_low );
+		
+		// ...and convert the depth into relative pressure
+        pres_gradient = sim_lead_tissue_limit - pres_surface;	
+
+		// check if we can surface directly
+        if( pres_gradient <= 0.0 )
+		{
+			min_depth = 0.0;		// set minimum depth to 0 meters = surface
+			goto no_deco_stop;		// done.
+		}
+
+		// convert minimum depth we can ascent to from relative pressure to depth in meters
+        pres_gradient *= BAR_TO_METER;							
+
+		// recall low_depth dependent on current plan
+		low_depth = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? low_depth_alt : low_depth_norm;
+		
+        // Store the deepest point needing a deco stop as the LOW reference for GF.
+        // NOTE: following stops will be validated using this LOW-HIGH GF scale,
+        //       so if we want to keep coherency, we should not validate this stop
+        //       yet, but apply the search to it, as for all the following stops afterward.
+        if( pres_gradient > low_depth )
+        {
+			// update GF parameters
+            low_depth      = pres_gradient;
+            locked_GF_step = GF_delta / low_depth;
+			
+			// store updated GF parameters dependent on current plan
+			if( char_O_deco_status & DECO_PLAN_ALTERNATE )
+			{
+				low_depth_alt       = low_depth;
+				locked_GF_step_alt  = locked_GF_step;
+			}
+			else
+			{
+				low_depth_norm      = low_depth;
+				locked_GF_step_norm = locked_GF_step;
+			}
+        }
+		else
+		{
+			// recall locked_GF_step dependent on current plan
+			locked_GF_step = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? locked_GF_step_alt : locked_GF_step_norm;
+		}
+
+		// invalidate this stop if we can ascent for 1 minute without going above minimum required deco depth
+        if( pres_gradient < min_depth ) goto no_deco_stop;         
+
+		
+		// if program execution passes here, we need a deco stop
+		
+        // Round to multiple of 3 meters
+        first_stop = 3 * (unsigned char)(0.9995 + pres_gradient * 0.333333);
+
+		// check a constraint
+        assert( first_stop < 128 );
+
+        // apply correction for the shallowest stop, use char_I_depth_last_deco (3..6 m) instead
+        if( first_stop == 3 ) first_stop = char_I_depth_last_deco;
+
+        // We have a stop candidate.
+        // But maybe ascending to the next stop will diminish the constraint,
+        // because the GF might decrease more than the pressure gradient...
+        while(first_stop > 0)
+        {
+			// Next depth
+            overlay unsigned char next_stop;            
+
+            // invalidate this stop if we can ascent one more minute without going above minimum required deco depth
+            if( first_stop <= (unsigned char)min_depth ) goto no_deco_stop;
+
+			// compute depth of next stop
+            if      ( first_stop <= char_I_depth_last_deco ) next_stop = 0;
+            else if ( first_stop == 6                      ) next_stop = char_I_depth_last_deco;
+            else                                             next_stop = first_stop - 3;
+
+            // compute total pressure at the new stop candidate
+            pres_gradient = next_stop * METER_TO_BAR + pres_surface;
+
+            // compute limit for the new stop candidate
+            if( (low_depth == 0.0) || (next_stop > low_depth) ) sim_limit( GF_low );
+            else                                                sim_limit( GF_high - next_stop * locked_GF_step );
+
+            // check if ascent to the next stop candidate is possible
+            if( sim_lead_tissue_limit >= pres_gradient ) goto deco_stop_found;	// no - ascent to next_stop forbidden
+
+            // else, validate that stop and loop...
+            first_stop = next_stop;
+        }
+
+no_deco_stop:
+		need_stop        = 0;              				// set flag for stop needed to 'no'
+		temp_depth_limit = (unsigned char)min_depth;	// report depth we can ascent to without stop
+		goto done;
+
+deco_stop_found:
+		need_stop        = 1;              				// set flag for stop needed to 'yes'
+		temp_depth_limit = (unsigned char)first_stop;	// stop depth, in meters
+
+done:
+        ;
+    }
+    else
+    {
+		//---- ZH-L16 model -------------------------------------------------
+		
+        overlay float pres_gradient;
+
+		
+        // calculate minimum depth we can ascent to in absolute pressure
+        sim_limit(1.0);
+
+		// ...and convert the depth into relative pressure 
+        pres_gradient = sim_lead_tissue_limit - pres_surface;
+
+		// check if we can surface directly
+        if (pres_gradient >= 0)
+        {
+			// no - set flag for stop needed to 'yes'
+            need_stop = 1;
+
+			// convert stop depth in relative pressure to stop index
+            pres_gradient *= BAR_TO_METER / 3;
+
+			// convert stop index to depth in meters, rounded to multiple of 3 meters
+            temp_depth_limit = 3 * (short) (pres_gradient + 0.99);
+
+            // correct last stop to 4m/5m/6m
+            if( temp_depth_limit == 3 ) temp_depth_limit = char_I_depth_last_deco;
+        }
+        else
+		{
+			// yes - set flag for stop needed to 'no'
+			need_stop        = 0;
+			
+			// set depth we can ascent to as 0 = surface
+            temp_depth_limit = 0;
+		}
+    }
+
+	
+	// After the first deco stop, gas changes are only done at deco stops now!
+	
+	// check if a stop is found and there is a better gas to switch to
+	if( need_stop && gas_find_better() )
+	{
+		// set the new calculation ratios for N2, He and O2
+		gas_switch_set();
+
+		// prime the deco stop with the gas change time
+		update_deco_table(char_I_gas_change_time); 
+	}
+
+    return need_stop;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// copy_deco_table
+//
+// Buffer the stops, once computed, so we can continue to display them
+// while computing the next set.
+//
+static void copy_deco_table(void)
+{
+    // Copy depth of the first (deepest) stop, because when reversing
+    // order, it will be hard to find...
+    char_O_first_deco_depth = internal_deco_depth[0];
+    char_O_first_deco_time  = internal_deco_time [0];
+
+    {
+        overlay unsigned char x, y;
+
+        for(x=0; x<NUM_STOPS; x++)
+        {
+            char_O_deco_depth[x] = internal_deco_depth[x];
+            char_O_deco_time [x] = internal_deco_time [x];
+            char_O_deco_gas  [x] = internal_deco_gas  [x];
+        }
+
+        //Now fill the char_O_deco_time_for_log array
+        //---- First: search the first non-null depth
+        for(x=(NUM_STOPS-1); x != 0; --x)
+            if( internal_deco_depth[x] != 0 ) break;
+
+        //---- Second: copy to output table (in reverse order)
+        for(y=0; y<NUM_STOPS; y++, --x)
+        {
+            char_O_deco_time_for_log[y] = internal_deco_time [x];
+
+            // Stop only once the last transfer is done.
+            if( x == 0 ) break;
+        }
+
+        //---- Third: fill table end with null
+        for(y++; y<NUM_STOPS; y++)
+        {
+            char_O_deco_time_for_log[y] = 0;
+        }
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// temp_tissue_safety
+//
+// outsourced in v.102
+//
+// Apply safety factors for both ZH-L16 models.
+//
+static void temp_tissue_safety(void)
+{
+    assert( 0.0 <  float_desaturation_multiplier && float_desaturation_multiplier <= 1.0 );
+    assert( 1.0 <= float_saturation_multiplier   && float_saturation_multiplier   <= 2.0 );
+
+	if( temp_tissue < 0.0 ) temp_tissue *= float_desaturation_multiplier;
+	else                    temp_tissue *= float_saturation_multiplier;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+// Called every second during diving.
+// updates tissues every second invocation.
+//
+// Every few seconds (or slower when TTS > 16):
+//    - updates deco table (char_O_deco_time/depth) with new values.
+//    - updates ascent time,
+//    - sets status to zero (so we can check there is new results).
+//
+void deco_calc_hauptroutine(void)
+{
+    RESET_C_STACK
+    calc_hauptroutine();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Reset decompression model:
+// + Set all tissues to equilibrium with Air at ambient pressure.
+// + Reset last stop to 0m
+// + Reset all model output.
+void deco_clear_tissue(void)
+{
+    RESET_C_STACK
+    clear_tissue();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void deco_calc_wo_deco_step_1_min(void)
+{
+    RESET_C_STACK
+    calc_wo_deco_step_1_min();
+ }
+
+//////////////////////////////////////////////////////////////////////////////
+
+void deco_calc_desaturation_time(void)
+{
+    RESET_C_STACK
+    calc_desaturation_time();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void deco_calc_dive_interval(void)
+{
+    RESET_C_STACK
+    calc_dive_interval();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Find current gas in the list (if any) and get its change depth
+//
+// Input:  char_I_current_gas : 1..6
+//
+// Output: sim_gas_last_used  : 1..6 or 0 if it is the gas set as FIRST
+//         sim_gas_last_depth : change depth in meters or 0 if it is the gas set as FIRST
+//
+static void gas_find_current(void)
+{
+    assert( 0 <= char_I_current_gas && char_I_current_gas <= NUM_GAS );
+
+    if( char_I_current_gas <= NUM_GAS )					// Gas1..Gas5
+    {
+        sim_gas_last_used = sim_gas_first_used = char_I_current_gas;
+
+        // If current gas is a deco gas get it's change depth.
+		// Set change depth to 0 if the current gas is the first gas or 
+		// a travel/normal gas, i.e. if it can be breathed at "any" depth.
+        if( char_I_deco_gas_change[sim_gas_last_used-1] ) sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1];
+		else                                              sim_gas_last_depth = 0;
+    }
+    else
+	{
+        sim_gas_last_used = sim_gas_first_used = 0;		// Gas 6 (the manually set one) has number 0 here
+		sim_gas_last_depth                     = 0;		// handle it as a travel/normal gas
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Find the deco gas with the shallowest change depth beyond current depth
+//
+// INPUT   temp_depth_limit	        : current depth in meters
+//         char_I_deco_gas_change[] : change depths of the deco gases
+//		   sim_gas_last_depth       : change depth of the currently used gas, 0 if on the gas set as FIRST
+//
+// OUTPUT  sim_gas_last_depth       : switch depth            - only if return value is true
+//         sim_gas_last_used        : index of the gas (1..5) - only if return value is true
+//
+// RETURNS TRUE if a better gas is available
+//
+static unsigned char gas_find_better(void)
+{
+	overlay unsigned char switch_depth = 255;
+	overlay unsigned char switch_gas   = 0;
+	overlay unsigned char j;
+	
+	
+	// no automatic gas changes in CCR mode and - as of now - in pSCR mode
+	if( char_O_deco_status & DECO_MODE_LOOP ) return 0;
+
+	// Loop over all deco gases to find the shallowest one below or at current depth.
+	for(j=0; j<NUM_GAS; ++j)
+	{
+		// Is this the gas we are already breathing?
+		// If yes, skip this gas.
+		if( j+1 == sim_gas_last_used ) continue;
+
+		// Is the change depth of the gas shallower than the current depth?
+		// If yes, skip this gas as it is not to be used yet.
+		// Remark: this check will also skip all disabled gases and the gas set
+		//         as 'first' because these have their change depth set to 0.
+		if( temp_depth_limit > char_I_deco_gas_change[j] ) continue;
+
+		// Is the change depth of the gas deeper than the change depth of the
+		// gas we are currently one?
+		// If yes, skip this gas as it is not better than the current one.
+		// Remark: if there is more than one gas with the same change depth,
+		//         the last one from the list will be taken.
+		if( sim_gas_last_depth && (char_I_deco_gas_change[j] > sim_gas_last_depth) ) continue;
+
+		// Is the change depth of the gas shallower or equal to the change depth
+		// of the best gas found so far, or is it the first better gas found?
+		// If yes, we have a better gas
+		if( char_I_deco_gas_change[j] <= switch_depth )
+		{
+			switch_gas   = j+1;							// remember this gas (1..5)
+			switch_depth = char_I_deco_gas_change[j];	// remember its change depth
+		}
+	}	// continue looping through all gases to eventually find an even better gas
+
+	// has a better gas been found?
+	if( switch_gas )
+	{
+		// yes
+		sim_gas_last_used  = switch_gas;				// report the index of the better
+		sim_gas_last_depth = switch_depth;				// report its change depth
+
+		assert( sim_gas_last_depth < switch_depth );
+		
+		return 1;										// signal a better gas was found
+	}
+	else
+	{
+		return 0;										// signal no better gas was found
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Set calc_N2/He/O2_ratios by sim_gas_last_used
+//
+// Input:  sim_gas_last_used  : index of gas to use
+//         N2_ratio, He_ratio : if gas 0 = the manually set gas is in use
+//
+// Output: calc_N2_ratio, calc_He_ratio, calc_O2ratio
+//
+static void gas_switch_set(void)
+{
+	assert( 0 <= sim_gas_last_used <= NUM_GAS );
+
+	if( sim_gas_last_used == 0 )    // Gas6 = manually set gas.
+	{
+		calc_O2_ratio = O2_ratio;
+		calc_He_ratio = He_ratio;
+	}
+	else
+	{
+	calc_O2_ratio = char_I_deco_O2_ratio[sim_gas_last_used-1] * 0.01;
+	calc_He_ratio = char_I_deco_He_ratio[sim_gas_last_used-1] * 0.01;
+	}
+
+	calc_N2_ratio = 1.0 - calc_O2_ratio - calc_He_ratio;
+
+	assert( 0.0 <= calc_N2_ratio && calc_N2_ratio <= 0.95 );
+	assert( 0.0 <= calc_He_ratio && calc_He_ratio <= 1.00 );
+	assert( (calc_N2_ratio + calc_He_ratio) <= 1.00 );
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Compute ppN2 and ppHe
+//
+// Input: calc_N2_ratio, calc_He_ratio : simulated gas mix.
+//        temp_deco                    : simulated respiration pressure
+//        float_deco_distance          : safety factor
+//        ppWater                      : water-vapor pressure inside respiratory tract
+//
+// Output: ppN2, ppHe.
+//
+static void sim_alveolar_presures(void)
+{
+    overlay float deco_diluent = temp_deco;
+	
+	// read ppO2 reported from sensors or by setpoint		// TODO: can be deleted
+	// char_actual_ppO2 = char_I_const_ppO2;
+
+
+    // Take deco offset into account, but not at surface.
+    // Note: this should be done on ambient pressure, hence before
+    //       computing the diluent partial pressure...
+    if( deco_diluent > pres_surface ) deco_diluent += float_deco_distance;
+
+	if( char_O_deco_status & DECO_MODE_LOOP )
+    {
+		//---- Loop mode : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR)-------
+
+		// get current setpoint (CCR) or sensor value (CCR, for pSCR see text below) as default
+		overlay float const_ppO2 = char_I_const_ppO2 * 0.01;
+		
+		if( char_O_deco_status & DECO_MODE_PSCR )
+		{
+			//---- PSCR mode : compute loop gas ----------------------------------------
+			//
+			// As the ppO2 in the loop changes with water depth, we can not use the current
+			// sensor value as with CCR mode, but need to compute the ppO2 for the given depth.
+			// Then we continue with the CCR mode code which calculates the increases of ppN2
+			// and ppH2 due to the reduction of the ppO2 in the loop. Essentially, diving a
+			// PSCR is like diving a CCR with a setpoint lower than the ambient pressure x the
+			// O2 fraction of the diluent would yield...
+			//
+
+			// deco_diluent          is 0.0 ...     in bar
+			// calc_O2_ratio         is 0.0 ...   1 as factor
+			// char_I_PSCR_drop      is 0   ...  15 as %
+			// char_I_PSCR_lungratio is 5   ...  20 as %
+			// const_ppO2		     is 0.0 ...     in bar
+
+			const_ppO2 = (deco_diluent * calc_O2_ratio) - (1 - calc_O2_ratio) * 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
+		
+			// capture failure condition
+			if( const_ppO2 < 0.0 ) const_ppO2 = 0.0;
+		}		
+		else
+		{
+			
+			//---- CCR mode ------------------------------------------------------------ 
+		
+			// Limit the setpoint to the maximum physically possible ppO2. This prevents for
+			// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
+			// Additionally, if limiting occurs, the ppO2 can be further reduced to account
+			// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
+		
+			if( const_ppO2 > deco_diluent )		// no ppWater subtracted here to give some margin for
+			{										// sensors delivering data a little bit over target
+			
+				const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (deco_diluent - ppWater);
+			}
+		}
+
+		if      ( const_ppO2 == 0.0   ) char_actual_ppO2 =   0;
+		else if ( const_ppO2 >  2.545 )	char_actual_ppO2 = 255;
+		else                            char_actual_ppO2 = (unsigned char)(const_ppO2*100 + 0.5);
+
+        // Note: ppO2 and ratios are known outside the lungs, so there is no ppWater in the equations below:
+        deco_diluent -= const_ppO2;
+        deco_diluent /= calc_N2_ratio + calc_He_ratio;
+        
+		// capture all failure conditions, including div/0 in case diluent is pure O2
+		if( (deco_diluent < 0.0) || (calc_O2_ratio > 99.5) )
+		{
+			deco_diluent = 0.0;
+			
+			char_actual_ppO2 = (unsigned char)(temp_deco*100 + 0.5);	// without float_deco_distance here as this situation
+																		// is likely to occur only at 6 meters or shallower
+		}
+    }
+	else 
+	{
+		//---- OC mode: char_actual_ppO2 will be needed for CNS calculation later --------------------------------
+
+		overlay float ppO2 = pres_respiration * calc_O2_ratio;
+		
+		if   ( ppO2 > 2.545 ) char_actual_ppO2 = 255;
+		else                  char_actual_ppO2 = (unsigned char)(ppO2*100 + 0.5);
+	}
+
+	
+    if( deco_diluent > ppWater )
+    {
+        ppN2 = calc_N2_ratio * (deco_diluent - ppWater);
+        ppHe = calc_He_ratio * (deco_diluent - ppWater);
+    }
+    else
+    {
+        ppN2 = 0.0;
+        ppHe = 0.0;
+    }
+
+    assert( 0.0 <= ppN2 && ppN2 < 14.0 );
+    assert( 0.0 <= ppHe && ppHe < 14.0 );
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// clear_tissue
+//
+// optimized in v.101 (var_N2_a)
+//
+// preload tissues with standard pressure for the given ambient pressure.
+// Note: fixed N2_ratio for standard air.
+//
+static void clear_tissue(void)
+{
+	pres_respiration = 0.001  * int_I_pres_respiration;
+	N2_equilibrium   = 0.7902 * (pres_respiration - ppWater);
+	
+    for(ci=0; ci<NUM_COMP; ci++)
+    {
+        // cycle through the 16 Buhlmann N2 tissues
+		pres_tissue_N2[ci] 				= N2_equilibrium;	// initialize data for "real" tissue
+		char_O_tissue_N2_saturation[ci] = 11;				// initialize data for tissue graphics
+			
+
+        // cycle through the 16 Buhlmann He tissues
+        pres_tissue_He[ci] 				= 0.0;				// initialize data for "real" tissue
+		char_O_tissue_He_saturation[ci] = 0;				// initialize data for tissue graphics
+    }
+
+	clear_CNS_fraction();
+	
+    clear_deco_table();
+	
+	char_O_main_status		= 0;
+    char_O_deco_status		= 0;
+    char_O_nullzeit			= 0;
+	char_O_gtissue_no		= 0;
+	char_O_deco_warnings	= 0;
+
+    int_O_ascenttime		= 0;
+    int_O_gradient_factor	= 0;
+
+	calc_lead_tissue_limit	= 0.0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_hauptroutine
+//
+// this is the major code in dive mode calculates:
+// 		the tissues,
+//		the bottom time,
+//		and simulates the ascend with all deco stops.
+//
+//
+static void calc_hauptroutine(void)
+{
+	unsigned int int_ppO2_min;
+	unsigned int int_ppO2_max;
+
+
+	//--- set-up part --------------------------------------------------------------------------------
+	
+	// twosectimer:
+	// calc_hauptroutine is now invoked every second to speed up the deco planning.
+	// Because the tissue and CNS calculations are based on a 2 seconds period, the
+	// the following toggle-timer will be used by the respective routines to skip
+	// every 2nd invocation.
+	twosectimer = (twosectimer) ? 0 : 1;			// toggle the toggle-timer
+	
+
+	// set up normal tissue updating or "fast forward" updating for simulator sim+5' function
+	// and deco calculator bottom time calculation
+	if( char_I_sim_advance_time > 0 )
+	{
+		// configure char_I_sim_advance_time minutes of tissue updating
+		tissue_increment = char_I_sim_advance_time	// given number of minutes, limited to 127
+						 | 128;						// set flag for updating the "real" tissues & CNS
+
+		char_I_sim_advance_time = 0;				// clear "mailbox"
+	}
+	else
+	{
+		// configure 2 seconds of tissue updating
+		tissue_increment = 0						// encoding for 2 seconds update
+						 | 128;						// set flag for updating the "real" tissues & CNS
+	}
+
+	//---- calculate the real tissue's data -----------------------------------------------------------------
+	
+	calc_hauptroutine_data_input();			// acquire current environment data 
+	
+	calc_hauptroutine_update_tissues();		// update tissue pressures, also sets char_actual_ppO2
+	
+	calc_CNS_fraction();					// calculate CNS% for the real tissues
+	
+	compute_CNS_for_display();				// compute integer copy of CNS value for display purpose
+		
+	calc_gradient_factor();					// compute current GF
+
+
+	//---- compute ppO2 warnings ------------------------------------------------------------------------------
+	
+	// compute conditional min/max values
+	int_ppO2_min = (char_O_main_status   & DECO_MODE_LOOP) ? (unsigned int)char_I_ppO2_min_loop : (unsigned int)char_I_ppO2_min;
+	int_ppO2_max = (char_O_deco_warnings & DECO_FLAG     ) ? (unsigned int)char_I_ppO2_max_deco : (unsigned int)char_I_ppO2_max;
+
+	// check for safe range of pure oxygen
+	if		( int_O_O2_ppO2   	  >=           int_ppO2_max    ) int_O_O2_ppO2 		 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+
+	// check for safe range of breathed gas
+	if		( int_O_breathed_ppO2 <=           int_ppO2_min    ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if ( int_O_breathed_ppO2 >=           int_ppO2_max    ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	else if ( int_O_breathed_ppO2 >= ppO2_prewarn_threshold    ) int_O_breathed_ppO2 |= INT_FLAG_PREWARNING;
+		
+	// check for safe range of pure diluent
+	if		( int_O_pure_ppO2 <= (unsigned int)char_I_ppO2_min ) int_O_pure_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if	( int_O_pure_ppO2 >=               int_ppO2_max    ) int_O_pure_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+		
+	// check for safe range of calculated pSCR loop gas
+	if		( int_O_pSCR_ppO2 <=               int_ppO2_min    ) int_O_pSCR_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if	( int_O_pSCR_ppO2 >=               int_ppO2_max    ) int_O_pSCR_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	
+
+    //---- toggle between calculation for NDL (bottom time), deco stops and more deco stops (continue) ------
+
+	switch( char_O_deco_status & DECO_STATUS_MASK )
+    {
+		overlay unsigned char i;
+
+	case DECO_STATUS_INIT: //---- At surface: start a new dive ---------------------
+
+		clear_deco_table();
+        copy_deco_table();
+		
+		char_I_ascent_speed    = 10;	// DEBUG - remove before flight!
+		char_I_gas_change_time = 1;		// DEBUG - remove before flight!
+		
+		float_ascent_speed            = 1.00 * char_I_ascent_speed;
+		float_desaturation_multiplier = 0.01 * char_I_desaturation_multiplier;
+		float_saturation_multiplier   = 0.01 * char_I_saturation_multiplier;
+		float_deco_distance           = 0.01 * char_I_deco_distance;
+		
+        int_O_ascenttime			  = 0;		// Reset ascent time in normal plan
+		int_O_alternate_ascenttime    = 0; 		// Reset ascent time in alternative plan
+		char_O_nullzeit               = 0;		// Reset no decompression limit (NDL) in normal plan
+		char_O_alternate_nullzeit     = 0;		// Reset no decompression limit (NDL) in alternative plan
+		char_O_deco_warnings          = 0;		// Reset all deco warning flags
+		deco_tissue_vector		      = 0;		// Reset tissue deco vector
+		IBCD_tissue_vector            = 0;		// Reset tissue IBCD vector
+		
+		int_O_desaturation_time       = 65535;	// tag desaturation time as invalid (it will not be computed during a dive)
+		
+
+		for(i=0; i<NUM_GAS; ++i)
+		{
+			int_O_gas_volumes[i]    = 0;
+			int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO;	// 0 bar + flag for 0 bar
+		}
+
+		for(i=0; i<NUM_COMP; ++i)
+		{		
+			split_N2_He[i] = 90;							// used for calculation of no-fly time
+		}
+		
+		
+		// init CNS counters
+		CNS_sim_norm_fraction     = CNS_sim_alt_fraction         = CNS_fraction;		// the floats
+		int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = int_O_CNS_fraction;	// the integers
+
+		
+        // Values that should be reset just once for the full real dive.
+        // This is used to record the lowest stop for the whole dive,
+        // including ACCROSS all simulated ascents.
+        low_depth_norm      = low_depth_alt      = 0.0;
+        locked_GF_step_norm = locked_GF_step_alt = 0.0;
+
+
+		// continue in state DECO_STATUS_START to calculate the bottom-part of the dive and the NDL
+		char_O_deco_status &= ~DECO_STATUS_MASK;	
+		
+		// code execution continues in state DECO_STATUS_START
+		
+		
+	case DECO_STATUS_START: //---- bottom time -------------------------------------
+    default:
+
+		// reread the GF settings in case there was a switch between GF/aGF
+		GF_low   = char_I_GF_Low_percentage  * 0.01;
+		GF_high  = char_I_GF_High_percentage * 0.01;
+		GF_delta = GF_high - GF_low;
+
+        // Lookup current gas and store it also as the first gas used. This gas will be used for the bottom
+		// segment of the dive and for the period of delayed ascent when calculating fTTS or bailout.
+		gas_find_current();		
+		
+		// setup the calculation ratio's for N2, He and O2
+        gas_switch_set();		
+
+		// clear the internal(!) stops table
+		clear_deco_table();		
+		
+		// initialize the simulated tissues with the current state of the real tissues
+		update_startvalues();	
+
+		// calculate the effect of extended bottom time due to delayed ascent / fTTS on current gas
+		if( char_O_deco_status & DECO_ASCENT_DELAYED ) sim_extra_time();
+		
+		// calculate if we are within no decompression limit (NDL)
+        calc_nullzeit();
+
+		// check which plan we are on
+		if( char_O_deco_status & DECO_PLAN_ALTERNATE )
+		{
+			// alternate dive plan
+			if( char_O_alternate_nullzeit > 0 )	// Some NDL time left in alternate plan?
+			{
+				copy_deco_table();	// DEBUG to be removed again
+				
+				// clear tank pressure needs
+				if( char_O_deco_status & DECO_VOLUME_CALCULATE )
+					for(i=0; i<NUM_GAS; ++i) int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO; // 0 bar + flag for 0 bar
+					
+				// calculate the CNS% at the end of the dive if requested:
+				// as we are in no stop, CNS at end of dive is more or less the same CNS we have now
+				if( char_O_deco_status & DECO_CNS_CALCULATE ) int_O_alternate_CNS_fraction = int_O_CNS_fraction;
+				
+				// clear fTTS ascent time
+				int_O_alternate_ascenttime = 0;
+
+				char_O_deco_status &= ~DECO_STATUS_MASK;	// YES: computation of alternate plan completed
+			}
+			else
+			{
+				char_O_deco_status &= ~DECO_STATUS_MASK;	// NO: clear status bits and set status bits
+				char_O_deco_status |=  DECO_STATUS_ASCENT;	// for calculation of ascent on next invocation
+			}
+		}
+		else
+		{
+			// normal dive plan
+			if( char_O_nullzeit > 0 )						// Some NDL time left in normal plan?
+			{
+				//copy_deco_table();			DEBUG original - comment in again				// copy (erased) internal to external stops table
+
+				// commented out - char_O_deco_last_stop not used for anything
+				// char_O_deco_last_stop = 0;				// set last stop to 0 (for OSTC menu animation)
+				
+				// clear tank pressure needs
+				if( char_O_deco_status & DECO_VOLUME_CALCULATE )
+					for(i=0; i<NUM_GAS; ++i) int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO;	// 0 bar + flag for 0 bar
+
+				// calculate the CNS% at the end of the dive if requested:
+				// as we are in no stop, CNS at end of dive is more or less the same CNS we have now
+				if( char_O_deco_status & DECO_CNS_CALCULATE ) int_O_normal_CNS_fraction = int_O_CNS_fraction;
+
+				char_O_deco_status &= ~DECO_STATUS_MASK;	// computation of normal plan completed
+			}
+			else
+			{
+				char_O_deco_status &= ~DECO_STATUS_MASK;	// clear status bits and set status bits
+				char_O_deco_status |=  DECO_STATUS_ASCENT;	// for calculation of ascent on next invocation
+			}
+		}
+
+		break;
+
+		
+	case DECO_STATUS_ASCENT: //---- Simulate ascent to first stop -------------------
+		
+		// initialize depth (in abs.pressure) for ascent and deco simulation, start from current real depth
+		temp_deco = pres_respiration;
+		
+		// calculate ascent to first stop
+        sim_ascent_to_first_stop();
+
+        // calculate all further stops next time
+		char_O_deco_status &= ~DECO_STATUS_MASK;	// clear status bits and set status bits
+		char_O_deco_status |=  DECO_STATUS_STOPS;	// for calculation of stops on next invocation
+		
+        break;
+
+
+	case DECO_STATUS_STOPS: //---- Simulate stops ----------------------------------
+	
+        calc_hauptroutine_calc_deco();
+
+		// If simulation is finished, do some more computations if requested
+		// and restore the GF low reference so that the next ascent simulation
+		// is done from the current depth: 
+		if( !(char_O_deco_status & DECO_STATUS_MASK) )
+        {
+			// Calculate ascent time, result in int_O_ascenttime or int_O_alternate_ascenttime
+            calc_ascenttime();
+
+			// the current depth is needed by calc_CNS_planning() and gas_volumes()
+			char_I_bottom_depth = (unsigned char)((pres_respiration - pres_surface)*BAR_TO_METER);
+			
+			// if requested, calculate the CNS% at the end of the dive (including the deco stops)
+			if( char_O_deco_status & DECO_CNS_CALCULATE    ) calc_CNS_planning();
+			
+			// if requested, calculate the required gas volumes and tank pressures at the end of the dive.
+			if( char_O_deco_status & DECO_VOLUME_CALCULATE ) gas_volumes();			
+			
+			// some more aftermath dependent on the current plan
+			if( char_O_deco_status & DECO_PLAN_ALTERNATE   )
+			{
+				//---- alternative plan ----------------------------------------------------
+
+copy_deco_table();			// DEBUG to be removed again
+
+				// was CNS at end of dive calculated?
+				if( char_O_deco_status & DECO_CNS_CALCULATE )
+				{
+					// yes - compute CNS value to display
+					if		( CNS_sim_alt_fraction < 0.01  ) int_O_alternate_CNS_fraction = 0;
+					else if ( CNS_sim_alt_fraction > 9.985 ) int_O_alternate_CNS_fraction = 999 + INT_FLAG_WARNING;
+					else
+					{	
+						// convert float to integer
+						int_O_alternate_CNS_fraction = (unsigned short)(100 * CNS_sim_alt_fraction + 0.5);
+	
+						// set warning flag if CNS is >= 100%
+						if( int_O_alternate_CNS_fraction >= 100 )
+						int_O_alternate_CNS_fraction |= INT_FLAG_WARNING;
+				
+						// set invalid flag if there is an overflow in the stops table
+						if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
+						int_O_alternate_CNS_fraction |= INT_FLAG_INVALID;
+					}
+				}
+				else
+				{
+					// no - invalidate value (value = 0, invalid flag set)
+					int_O_alternate_CNS_fraction = INT_FLAG_INVALID;
+				}
+			}
+			else
+			{
+				//---- normal plan ---------------------------------------------------------
+
+				// publish the stops table
+//				copy_deco_table();			// DEBUG original
+
+				// was CNS at end of dive calculated?
+				if( char_O_deco_status & DECO_CNS_CALCULATE )
+				{
+					// yes - compute CNS value to display
+					if		( CNS_sim_norm_fraction <  0.01  ) int_O_normal_CNS_fraction = 0;
+					else if ( CNS_sim_norm_fraction >= 9.985 ) int_O_normal_CNS_fraction = 999 + INT_FLAG_WARNING;
+					else
+					{	
+						// convert float to integer
+						int_O_normal_CNS_fraction = (unsigned short)(100 * CNS_sim_norm_fraction + 0.5);
+	
+						// set warning flag if CNS is >= 100%
+						if( int_O_normal_CNS_fraction >= 100 )
+							int_O_normal_CNS_fraction |= INT_FLAG_WARNING;
+				
+						// set invalid flag if there is an overflow in the stops table
+						if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
+							int_O_normal_CNS_fraction |= INT_FLAG_INVALID;
+					}
+				}
+				else
+				{
+					// no - invalidate value (value = 0, invalid flag set)
+					int_O_normal_CNS_fraction = INT_FLAG_INVALID;
+				}
+
+			} // aftermath
+		} // if
+		
+        break;
+		
+    } // switch
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_hauptroutine_data_input
+//
+// Reset all C-code dive parameters from their ASM-code values.
+// Detect gas change condition.
+//
+void calc_hauptroutine_data_input(void)
+{
+	// get the current pressures
+	pres_respiration = 0.001 * int_I_pres_respiration;
+    pres_surface     = 0.001 * int_I_pres_surface;
+
+	// get the currently breathed gas mixture
+	O2_ratio         = 0.01 * char_I_O2_ratio;
+    He_ratio         = 0.01 * char_I_He_ratio;
+
+	// N2 ratios are computed within p2_deco.c from the O2 and He ratios
+	N2_ratio         = 1.0 - O2_ratio - He_ratio;
+	
+	// N2 tissue pressure at surface equilibrium, used for tissue graphics scaling
+	N2_equilibrium   = 0.7902 * (pres_surface - ppWater);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//
+void calc_hauptroutine_update_tissues(void)
+{
+    overlay float pres_diluent = pres_respiration;
+
+	
+    assert( 0.00 <= N2_ratio && N2_ratio <= 1.00 );
+    assert( 0.00 <= He_ratio && He_ratio <= 1.00 );
+    assert( (N2_ratio + He_ratio) <= 1.00 );
+    assert( 0.800 < pres_respiration && pres_respiration < 14.0 );
+
+	
+	//---- OC, CCR and Bailout Mode Gas Calculations ------------------------------------------------------------
+	
+	// calculate ppO2 of pure oxygen
+	O2_ppO2 = (pres_respiration - ppWater);
+
+	// capture failure condition in case pres_respiration is < ppWater (should never happen...)
+	if( O2_ppO2 < 0.0 ) O2_ppO2 = 0.0;
+	
+	// calculate ppO2 of the pure gas (diluent)
+	pure_ppO2 = O2_ppO2 * O2_ratio;
+
+	
+	//---- PSCR Mode Gas Calculation-----------------------------------------------------------
+	
+	// With flags set for PSCR we compute the ppO2 in the loop from the diluent's O2
+	// ratio and the PSCR parameters. This figure will be used in the pSCR custom view.
+	// If sensors are used (char_I_const_ppO2 > 0), we will override the calculated ppO2
+	// with the sensor data. Then we continue with the CCR mode code which calculates
+	// the increase of ppN2 and ppH2 due to the reduction of the ppO2 in the loop.
+	// Essentially, diving a pSCR is like diving a CCR with a setpoint set lower than
+	// the ambient pressure multiplied with the O2 fraction of the diluent...
+			
+	// calculate pSCR ppO2
+	//
+	// pres_respiration      is 0.0 ...       in bar
+	// O2_ratio              is 0.0 ...   1.0 as factor
+	// char_I_PSCR_drop      is 0   ...  15   as %
+	// char_I_PSCR_lungratio is 5   ...  20   as %
+	// pSCRppO2				 is 0.0 ...       in bar
+
+	pSCR_ppO2 = (pres_respiration * O2_ratio) - (1 - O2_ratio) * 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
+
+	// capture failure condition if case pSCR_ppO2 becomes negative
+	if( pSCR_ppO2 < 0.0 ) pSCR_ppO2 = 0.0;	
+	
+	
+	//---- Loop modes : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR) ------------
+	if ( char_O_main_status & DECO_MODE_LOOP )
+    {
+		overlay float const_ppO2;
+
+		// get the current sensor reading (CCR / pSCR if fitted) or the fixed setpoint (CCR) / a zero (pSCR)
+        const_ppO2 = 0.01 * char_I_const_ppO2;
+		
+		// Limit the setpoint to the maximum physically possible ppO2. This prevents for
+		// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
+		// Additionally, if limiting occurs, the ppO2 can be further reduced to account
+		// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
+		
+		if( const_ppO2 > pres_respiration )	// no ppWater subtracted here to give some margin for
+		{									// sensors delivering data a little bit over target
+			
+			const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (pres_respiration - ppWater);
+		}
+				
+		// check which kind of loop we are on
+		if( char_O_main_status & DECO_MODE_PSCR ) 
+		{
+			//---- pSCR Mode --------------------------------------------------------------------------
+
+			// check if a sensor is fitted
+			if( char_I_const_ppO2 ) breathed_ppO2 = const_ppO2;	// yes - derive ppO2s from (char_I_)const_ppO2
+			else                    breathed_ppO2 = pSCR_ppO2;	// no  - derive ppO2s from calculated ppO2
+		}
+		else
+		{
+			//---- CCR Mode ---------------------------------------------------------------------------
+
+			// derive breathed ppO2 from (char_I_)const_ppO2, which holds sensor reading or fixed setpoint
+			breathed_ppO2 = const_ppO2;
+		}
+
+		// adjust diluent pressure (ppN2 + ppHe) for change in ppO2 due to setpoint (CCR) or drop (pSCR)
+        pres_diluent -= const_ppO2;
+        pres_diluent /= N2_ratio + He_ratio;
+
+		// capture all failure conditions, including div/0 in case diluent is pure O2
+		if( (pres_diluent < 0.0) || (char_I_O2_ratio == 100) )
+		{
+			pres_diluent  = 0.0;
+			breathed_ppO2 = pure_ppO2;
+		}
+
+	}
+	else
+	{	//---- OC mode -----------------------------------------------------------------------------------------
+	
+		// breathed ppO2 is ppO2 of pure gas
+		breathed_ppO2 = pure_ppO2;
+	}
+
+
+	// derive char_actual_ppO2 in [cbar], used for calculating CNS%
+	if      ( breathed_ppO2 <  0.01  ) char_actual_ppO2  =   0;
+	else if ( breathed_ppO2 >= 2.545 ) char_actual_ppO2  = 255;
+	else                               char_actual_ppO2  = (unsigned char)(100 * breathed_ppO2 + 0.5);
+
+	
+	//---- export ppO2 values in [cbar] for warning generation and display purpose ------------------------------
+
+	// pure oxygen ppO2
+	if		( O2_ppO2       <  0.01  ) int_O_O2_ppO2       =   0;
+	else if ( O2_ppO2       >= 9.995 ) int_O_O2_ppO2       = 999;
+	else                               int_O_O2_ppO2       = (unsigned int)(100 *       O2_ppO2 + 0.5);
+	
+	// pure gas ppO2
+	if      ( pure_ppO2     <  0.01  ) int_O_pure_ppO2     =   0;
+	else if ( pure_ppO2     >= 9.995 ) int_O_pure_ppO2     = 999;
+	else                               int_O_pure_ppO2     = (unsigned int)(100 *     pure_ppO2 + 0.5);
+	
+	// calculated pSCR ppO2
+	if		( pSCR_ppO2     <  0.01  ) int_O_pSCR_ppO2     =   0;
+	else if ( pSCR_ppO2     >= 9.995 ) int_O_pSCR_ppO2     = 999;
+	else                               int_O_pSCR_ppO2     = (unsigned int)(100 *     pSCR_ppO2 + 0.5);
+
+	// breathed ppO2
+	if		( breathed_ppO2 <  0.01  ) int_O_breathed_ppO2 =   0;
+	else if ( breathed_ppO2 >= 9.995 ) int_O_breathed_ppO2 = 999;
+	else                               int_O_breathed_ppO2 = (unsigned int)(100 * breathed_ppO2 + 0.5);
+	
+
+	//---- calculate ppN2, ppHe and EAD, END -------------------------------------------------------------------
+	
+    if( pres_diluent > ppWater )
+    {
+        overlay float EAD, END;
+
+        ppN2 = N2_ratio * (pres_diluent - ppWater);
+        ppHe = He_ratio * (pres_diluent - ppWater);
+
+        // EAD : Equivalent Air Depth. Equivalent depth for the same N2 level with plain air.
+        //       ppN2 = 79% * (P_EAD - ppWater)
+        //       EAD = (P_EAD - Psurface) * 10
+        //   ie: EAD = (ppN2 / 0.7902 + ppWater -Psurface) * 10
+
+        EAD = (ppN2 / 0.7902 + ppWater - pres_surface) * BAR_TO_METER;
+
+        if( (EAD < 0.0) || (EAD > 245.5) ) EAD = 0.0;
+
+        char_O_EAD = (unsigned char)(EAD + 0.5);
+
+		
+        // END : Equivalent Narcotic Depth.
+        //       Here we count O2 as narcotic too. Hence everything but helium (has a narcosis
+        //       factor of 0.23 btw). Hence the formula becomes:
+        //       END * BarPerMeter * (1.0 - 0.0) - ppWater + Psurface == Pambient - ppHe - ppWater
+        //  ie:  END = (Pambient - ppHe - Psurface) * BAR_TO_METER
+        //
+        // Source cited:
+        //       The Physiology and Medicine of Diving by Peter Bennett and David Elliott,
+        //       4th edition, 1993, W.B.Saunders Company Ltd, London.
+
+        END = (pres_respiration - ppHe - pres_surface) * BAR_TO_METER;
+
+        if( (END < 0.0) || (END > 245.5) ) END = 0.0;
+
+		char_O_END = (unsigned char)(END + 0.5);
+    }
+    else
+    {
+        ppN2 = ppHe = 0.0;
+		
+		char_O_EAD = char_O_END = 0;
+    }
+
+
+	//---- calculate decompression status ----------------------------------------------------------------------
+		
+	// Calculate tissues
+	calc_tissue();
+
+    // Calculate limit for surface, ie. GF_high.
+    calc_limit();
+	
+
+    // Fill int_O_ceiling (in mbar) if ceiling is below the surface
+    if( (calc_lead_tissue_limit - pres_surface) > 0 )
+	{	
+
+// compatibility version
+        int_O_ceiling = (short)((calc_lead_tissue_limit - pres_surface) * 1000);
+
+// new version
+//		// Round up to next 10 cm so that the ceiling disappears on the display only when the ceiling
+//		// limit is really zero. This will coincident then with TTS switching back to NDL time.
+//		int_O_ceiling = (short)((calc_lead_tissue_limit-pres_surface)*1000+9);
+				
+
+		// limit int_O_ceiling to 16000 mbar (150 m)
+		if( int_O_ceiling > 16000) int_O_ceiling = 16000;
+	}
+    else
+	{
+        int_O_ceiling = 0;
+	}
+
+    int_O_gtissue_press = (short)((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) * 1000);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Compute stops.
+//
+// Note: because this can be very long, break on 16 iterations, and set state
+//       to DECO_STATUS_FINISHED when finished, or to DECO_STATUS_STOPS when
+//       needing to continue.
+// Note: because each iteration might be very long too (~ 66 ms in 1.84beta),
+//       break the loop when elapsed time exceeds 512 milliseconds.
+//
+void calc_hauptroutine_calc_deco(void)
+{
+	overlay unsigned char loop;
+
+	for(loop = 0; loop < 16; ++loop)
+	{
+		// limit loops to 512ms, using timer 5
+		if( tmr5() & (512*32) ) break;
+
+		// calc_nextdecodepth()
+		//
+		// INPUT  temp_deco        : current depth in absolute pressure
+		// OUTPUT temp_depth_limit : depth of next stop in meters
+		// RETURN true if a stop is needed
+		//
+		// The function manages gas changes by itself, including priming
+		// the deco stop with the configured gas change time.
+		//
+		if( calc_nextdecodepth() )
+		{
+			if( temp_depth_limit == 0 ) goto Surface;	// this check should not bee needed as in
+														// this case the RETURN value will be false
+
+			//---- stop required at temp_depth_limit -------------------------------------
+
+			// convert stop depth in meters to absolute pressure
+			temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
+
+			// add one minute to the current stop, or add a new stop,
+			// or abort deco calculation if the deco table is full.
+			if( !update_deco_table(1) ) goto Surface;
+		}
+		else
+		{
+			//---- no stop required --------------------------------------
+			
+			// ascend by float_ascent_speed for 1 minute
+			temp_deco -= float_ascent_speed * METER_TO_BAR;
+
+			// finish deco calculation if surface is reached
+			if( temp_deco <= pres_surface )
+			{
+Surface:
+				// set deco engine status to done (DECO_STATUS_FINISHED)
+				char_O_deco_status &= ~DECO_STATUS_MASK;
+			
+				// commented out - char_O_deco_last_stop not used for anything
+				// surface reached (to animate menu)
+				// if( !(char_O_deco_status & DECO_PLAN_ALTERNATE)) char_O_deco_last_stop = 0;
+				
+				return;
+			}
+		}
+
+
+		//---- as one minute as passed now, update the tissues ----------------------
+
+		// program 1 minute interval on simulated tissues (Flagbit 7 = 0)
+		tissue_increment = 1;
+		
+		// compute current ppN2 and ppHe
+		sim_alveolar_presures();
+		
+		// update the tissues
+		calc_tissue();
+	}
+
+	// commented out - char_O_deco_last_stop not used for anything
+	// surface not reached, need more stops... store reached depth for menu animation.
+	// if( !(char_O_deco_status & DECO_PLAN_ALTERNATE) ) char_O_deco_last_stop = temp_depth_limit;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Simulate ascent to first deco stop.
+//
+//
+// Modified: temp_deco : current depth in ascent and deco simulation, in bar absolute pressure
+//
+void sim_ascent_to_first_stop(void)
+{
+	overlay unsigned char fast      = 1;	// 1 = 1 minute steps,  0 = 2 seconds steps
+	overlay unsigned char gaschange = 0;	// 1 = do a gas change, 0 = no better gas available
+	
+	
+	//---- Loop until first deco stop or surface is reached ----------
+	for(;;)
+	{
+		// depth in absolute pressure we came from
+		overlay float old_deco = temp_deco;
+		
+		// try ascending 1 full minute (fast) or 2 seconds (!fast)
+		if	( fast ) temp_deco -=  float_ascent_speed       * METER_TO_BAR;	// 1 min at float_ascent_speed ( 5 .. 10  m/min)
+		else         temp_deco -= (float_ascent_speed/30.0) * METER_TO_BAR;	// 2 sec at float_ascent_speed (17 .. 33 cm/min)
+
+		// but don't go over surface
+		if( temp_deco < pres_surface ) temp_deco = pres_surface;
+
+		// compute sim_lead_tissue_limit
+		if   ( char_I_deco_model != 0 ) sim_limit(GF_low);
+		else                            sim_limit(1.0);
+
+		// did we overshoot the first deco stop?
+		if( temp_deco < sim_lead_tissue_limit )
+		{
+			// YES - back to last depth below first stop
+			temp_deco = old_deco;
+
+			// switch to 2 seconds ascent if not yet in, else done
+			if( fast )
+			{
+				fast = 0;				// retry with 2 seconds ascent steps
+				continue;
+			}
+			else
+			{
+				break;					// done...
+			}
+		}
+
+		// If code execution passes along here, we did not overshoot the first stop.
+		
+		// did we reach the surface? if yes, done!
+		if( temp_deco == pres_surface ) break;
+
+		// depth in meters where we are now (no round-up)
+		temp_depth_limit = (unsigned char)((temp_deco - pres_surface) * BAR_TO_METER);
+		
+		// Check if there is a better gas to switch to, but only in alternative plan mode.
+		// If yes, introduce a stop for the gas change.
+		if( (char_O_deco_status & DECO_PLAN_ALTERNATE) && gas_find_better() )
+		{
+			// depth in meters we came from
+			overlay unsigned char old_depth_limit = (unsigned char)((old_deco - pres_surface) * BAR_TO_METER);			
+			
+			// adjust temp_depth_limit to the gas change depth, but not deeper than the depth we came from
+			temp_depth_limit = (sim_gas_last_depth < old_depth_limit) ? sim_gas_last_depth : old_depth_limit;
+			
+			// create a stop for the gas change
+			update_deco_table(char_I_gas_change_time);
+
+			// set the new calculation values for N2, He and O2
+			gas_switch_set();
+			
+			// signal to create a stop for the gas change and update the tissues
+			gaschange = char_I_gas_change_time;
+			
+			// Adjust the depth for the tissue update to the stop depth. In case of fast mode, this
+			// imposes that the ascent from the 'old_deco' depth to this stop took 1 minute although
+			// we might have only ascended one or two meters...
+			temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
+		}	
+		
+		// Did one minute pass by and/or do we have a gas change?
+		// Remark: The 2 seconds ascent iterations towards the first deco stop in !fast speed may take
+		// up to 28 seconds in total - for this rough half of a minute no tissue updates will be computed.
+		// Well, it could be done by setting tissue_increment = 0 in !fast condition and making calls to
+		// sim_alveolar_presures() and calc_tissue() - see code commented out.
+		if( fast || gaschange )
+		{
+			// program interval on simulated tissues (flag bit 7 = 0)
+			tissue_increment = fast + gaschange;
+			
+			// clear gas change signal
+			gaschange = 0;
+	//	}
+	//	else
+	//	{
+	//		// program 2 seconds interval on simulated tissues (flag bit 7 = 0)
+	//		tissue_increment = 0;
+	//	}
+	//	{
+			// compute ppN2/ppHe for current depth from temp_deco
+			sim_alveolar_presures();
+			
+			// update the tissues
+			calc_tissue();
+		}
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Simulate extra time at the current depth.
+//
+// This routine is used for the futureTTS / delayed ascent feature.
+//
+void sim_extra_time(void)
+{
+ 	overlay unsigned char backup = tissue_increment;	// back-up tissue_increment
+
+	tissue_increment  = char_I_extra_time;				// program interval on simulated tissues (Flagbit 7 = 0)
+	
+	calc_tissue();										// update the tissues
+	
+	tissue_increment = backup;							// restore tissue_increment
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_tissue
+//
+// optimized in v.101
+//
+// INPUT:	 ppN2, ppHe, tissue_increment
+// MODIFIED: pres_tissue_N2[], pres_tissue_He[]
+// OUTPUT:	 char_O_tissue_N2_saturation[], char_O_tissue_He_saturation[]
+//
+static void calc_tissue()
+{
+	overlay float			temp_tissue_N2;
+	overlay float			temp_tissue_He;
+	overlay unsigned char	period;
+	overlay unsigned char	i;
+		
+		
+    assert( 0.00 <= ppN2 && ppN2 < 11.2 );  // 80% N2 at 130m
+    assert( 0.00 <= ppHe && ppHe < 12.6 );  // 90% He at 130m
+	
+	
+    for (ci=0;ci<NUM_COMP;ci++)			// iterate through all compartments
+    {
+		i = tissue_increment & 127;		// extract number of minutes to do    (if i > 0)
+										// or if one 2 second period is to do (if i = 0)
+		
+		if( i == 0 )					// check if we shall do one 2-seconds period
+		{
+			read_Buhlmann_times(0); 	// YES, program coefficients for a 2 seconds period
+			period = 1;					//      set period length (in cycles)
+			i      = 1;					//      and one cycle to do
+		}
+		else if( i > 9 )				// check if we can start with 10 minutes periods
+		{
+			read_Buhlmann_times(2);		// YES, program coefficients for 10 minutes periods
+			period = 10;				//      set period length (in cycles) to ten
+		}
+		else							// we shall do 1 to 9 minutes
+		{
+			read_Buhlmann_times(1);		//      program coefficients for 1 minute periods
+			period = 1;					//      set period length (in cycles) to one
+		}
+
+		do
+		{
+			//---- N2 -------------------------------------------------------------------------------
+
+			temp_tissue = (tissue_increment & 128) ? pres_tissue_N2[ci] : sim_pres_tissue_N2[ci];
+
+			temp_tissue = (ppN2 - temp_tissue) * var_N2_e;
+
+			temp_tissue_safety();
+
+			if( tissue_increment & 128 )
+			{
+				// The temp variable takes on purpose just the tissue increment from the last loop's iteration.
+				temp_tissue_N2 = temp_tissue;
+				
+				// Update the real tissues if either we are on the 2 seconds interval,
+				// or if we shall advance the tissues on a one or several minutes basis.
+				if( twosectimer || (tissue_increment & 127) ) pres_tissue_N2[ci] += temp_tissue;
+			}
+			else
+			{
+				// Updates of the sim-tissues always comes on a 1 minutes basis,
+				// so we do not need to check of the 2 seconds interval.
+				sim_pres_tissue_N2[ci] += temp_tissue;
+			}
+
+
+			//---- He -------------------------------------------------------------------------------
+			
+			temp_tissue = (tissue_increment & 128) ? pres_tissue_He[ci] : sim_pres_tissue_He[ci];
+
+			temp_tissue = (ppHe - temp_tissue) * var_He_e;
+
+			temp_tissue_safety();
+
+			if( tissue_increment & 128 )
+			{
+				// The temp variable takes on purpose just the tissue increment from the last loop's iteration.
+				temp_tissue_He = temp_tissue;
+				
+				// Update the real tissues if either we are on the 2 seconds interval,
+				// or if we shall advance the tissues on a one or several minutes basis.
+				if( twosectimer || (tissue_increment & 127) ) pres_tissue_He[ci] += temp_tissue;
+
+			}
+			else
+			{
+				// Updates of the sim-tissues always comes on a 1 minutes basis,
+				// so we do not need to check of the 2 seconds interval.
+				sim_pres_tissue_He[ci] += temp_tissue;
+			}
+			
+
+			// decrement loop counter
+			i -= period;
+			
+			// check if we need to switch from 10 minute periods to 1 minute periods
+			if( (i > 0) && (period = 10) && (i < 10) )
+			{
+				read_Buhlmann_times(1); 	// program coefficients for 1 minute periods
+				period = 1;					// set period length (in cycles) to one
+			}
+		}
+		while( i );
+			
+			
+		// have the computations been done for the "real" tissues?
+		if( (tissue_increment & 128) && (twosectimer || (tissue_increment & 127)) )
+		{
+			// net tissue balance
+			temp_tissue = temp_tissue_N2 + temp_tissue_He;
+			
+			// check tissue on-/off-gassing and IBCD with applying a threshold of +/-HYST
+			//
+			if		( temp_tissue < -HYST )				// Check if the tissue is off-gassing
+			{
+				deco_tissue_vector	|=  (1 << ci);		// tag tissue as being in decompression
+				IBCD_tissue_vector	&= ~(1 << ci);		// tag tissue as not experiencing mentionable IBCD
+			}
+			else if ( temp_tissue > +HYST )				// check if the tissue in on-gassing
+			{
+				deco_tissue_vector	&= ~(1 << ci);		// tag tissue as not being in decompression
+				
+				if(		((temp_tissue_N2 > 0.0) && (temp_tissue_He < 0.0))		// check for counter diffusion
+					||	((temp_tissue_N2 < 0.0) && (temp_tissue_He > 0.0)) )
+				{
+					IBCD_tissue_vector |= (1 << ci);	// tag tissue as experiencing mentionable IBCD
+				}
+			}
+
+			
+			// keep the saturating / desaturating flags from last invocation
+			char_O_tissue_N2_saturation[ci] &= 128;
+			char_O_tissue_He_saturation[ci]	&= 128;
+			
+			// flip the flags applying a hysteresis of HYST (actual value: see #define of HYST)
+				 if( temp_tissue_N2 > +HYST ) char_O_tissue_N2_saturation[ci] = 128; // set flag for tissue pressure is increasing
+			else if( temp_tissue_N2 < -HYST ) char_O_tissue_N2_saturation[ci] =   0; // clear flag (-> tissue pressure is decreasing)
+
+				 if( temp_tissue_He > +HYST ) char_O_tissue_He_saturation[ci] = 128; // set flag for tissue pressure is increasing
+			else if( temp_tissue_He < -HYST ) char_O_tissue_He_saturation[ci] =   0; // clear flag (-> tissue pressure is decreasing)
+			
+			
+			// For N2 tissue display purpose:
+			// Scale tissue press so that saturation in 70m on AIR gives a value of approx. 80.
+			// The surface steady-state tissue loading of [0.7902 * (pres_respiration - ppWater)] bar
+			// gives then a 10. If N2 is completely washed out of the tissue, result will be 0.
+			// This scaling is adapted to the capabilities of the tissue graphics in the custom views.
+			temp_tissue = (pres_tissue_N2[ci] / N2_equilibrium) * 10;
+
+			 // limit to 127 to leave space for sat/desat flag
+			if (temp_tissue > 127) temp_tissue = 127;
+
+			// export as integer
+			char_O_tissue_N2_saturation[ci] += (unsigned char)temp_tissue;
+
+			
+			// For H2 tissue display purpose:
+			// Scale tissue press so that saturation in 120m on TMX 10/70 gives a value of approx. 70.
+			// With no He in a tissue, result will be 0.
+			// This scaling is adapted to the capabilities of the tissue graphics in the custom views.
+			temp_tissue = pres_tissue_He[ci] * 7.7;
+
+			// limit to 127 to leave space for sat/desat flag
+			if (temp_tissue > 127) temp_tissue = 127; 
+			
+			// export as integer
+			char_O_tissue_He_saturation[ci] += (unsigned char)temp_tissue;
+		}
+				
+    }// for
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_limit
+//
+// New in v.111 : separated from calc_tissue(), and depends on GF value.
+//
+static void calc_limit(void)
+{
+    char_O_gtissue_no 		= 0;
+    calc_lead_tissue_limit 	= 0.0;
+
+	// clear IBCD, microbubbles and outside warning flags (locked warnings will be preserved)
+	char_O_deco_warnings &= ~(DECO_WARNING_IBCD + DECO_WARNING_MBUBBLES + DECO_WARNING_OUTSIDE);
+
+
+    for(ci=0; ci<NUM_COMP; ci++)
+    {
+        overlay float N2 = pres_tissue_N2[ci];
+        overlay float He = pres_tissue_He[ci];
+		overlay float pres_tissue = N2 + He;
+		overlay float pres_min;
+		overlay float gf;
+		overlay float threshold;
+
+        read_Buhlmann_coefficients();
+        var_N2_a = (var_N2_a * N2 + var_He_a * He) / pres_tissue;
+        var_N2_b = (var_N2_b * N2 + var_He_b * He) / pres_tissue;
+
+		// calculate minimum ambient pressure that the tissue can withstand according to straight Buhlmann
+		pres_min = (pres_tissue - var_N2_a) * var_N2_b;
+		
+		// calculate current gf value (1.0 = 100%) of this tissue
+		gf = (pres_tissue - pres_respiration) / (pres_tissue - pres_min);
+		if( gf < 0.0 ) gf = 0.0;
+		
+		// calculate a threshold value for use below
+		// ToDo: finalize the definition of the threshold
+		threshold = 0.02 * ci + 0.9;
+
+		// check if this tissue is likely to develop microbubbles
+		// and/or if this tissue is outside the Buhlmann model
+		if( ci <= 5 )
+		{
+			if( gf >= threshold )
+			{
+				char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+				
+				if( gf >= 1.0 )
+				{
+					char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+				}
+			}
+		}
+		else
+		{
+			if( gf >= 1.0 )
+			{
+				char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+	
+				if( gf >= threshold )
+				{
+					char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+				}
+			}
+		}
+		
+		
+        // Apply the Eric Baker's varying gradient factor correction if the GF-Model is selected.
+        // Note: the correction factor depends both on GF and b,
+        //       Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
+        //       so that can change who is the leading gas...
+        // Note: Also depends of the GF. So the calculus is different for GF_low, current GF, or GF_high...
+        //       *BUT* calc_tissue() is used to compute bottom time, hence what would happen at surface,
+        //       hence at GF_high.
+		if( char_I_deco_model != 0 ) pres_min =   ( pres_tissue - var_N2_a * (      GF_high) ) * var_N2_b
+		                                        / ( GF_high     + var_N2_b * (1.0 - GF_high) );
+
+		// check if this tissue requires a higher ambient pressure than was found to be needed up to now
+        if( pres_min > calc_lead_tissue_limit )
+        {
+            char_O_gtissue_no      = ci;
+            calc_lead_tissue_limit = pres_min;
+        }
+    }
+	
+	// check IBCD condition
+	if( !IBCD_tissue_vector )
+	{
+		char_O_deco_warnings &= ~DECO_WARNING_IBCD;					// no IBCD in any tissue, clear flag
+	}
+	else if(    (IBCD_tissue_vector & (1 << char_O_gtissue_no))
+	         && ((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) > pres_respiration) )
+	{
+		// leading tissue is in IBCD condition and in super-saturation, set flags.
+		char_O_deco_warnings |= (DECO_WARNING_IBCD + DECO_WARNING_IBCD_lock);
+	}
+	
+	// check if is any tissue off-gassing
+	if	(deco_tissue_vector) char_O_deco_warnings |=  DECO_FLAG;	// yes,  set deco flag
+	else                     char_O_deco_warnings &= ~DECO_FLAG;	// no, clear deco flag 
+
+
+    assert( char_O_gtissue_no < NUM_COMP );
+    assert( 0.0 <= calc_lead_tissue_limit && calc_lead_tissue_limit <= 14.0);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_nullzeit
+//
+// calculates the remaining bottom time
+//
+// NOTE: Erik Baker's closed formula works for Nitroxes. Trimix adds a second
+//       exponential term to the M-value equation, making it impossible to
+//       invert... So we have to make a fast-simu until we find a better way.
+//
+// Input:  pres_respiration
+// Output: char_O_nullzeit / char_O_alternate_nullzeit
+//
+static void calc_nullzeit(void)
+{
+	overlay unsigned char nullzeit = 240;
+	
+	
+    //---- Compute ppN2 and ppHe ---------------------------------------------
+    temp_deco = pres_respiration;
+    sim_alveolar_presures();
+	
+    for(ci=0; ci<NUM_COMP; ci++)
+    {
+        //---- Read A/B values and loading factor for N2 and He --------------
+
+		overlay float tN2 = sim_pres_tissue_N2[ci];
+        overlay float tHe = sim_pres_tissue_He[ci];
+		
+        overlay float t = tN2 + tHe;
+        overlay unsigned char ndl;
+        overlay unsigned char period = 10;
+
+        read_Buhlmann_coefficients();
+        read_Buhlmann_times(2);             // Starts with a 10min period.
+
+        //---- Simulate for that tissue --------------------------------------
+        // NOTE: No need to simulate for longer than the already found NDL.
+		for(ndl=0; ndl<nullzeit;)
+        {
+			//---- Compute updated mix M-value at surface
+			overlay float a = (var_N2_a * tN2 + var_He_a * tHe) / t;
+			overlay float b = (var_N2_b * tN2 + var_He_b * tHe) / t;
+			overlay float M0 = (a + pres_surface/b);
+
+			//---- Add 10min/1min to N2/He tissues
+			overlay float dTN2 = (ppN2 - tN2) * var_N2_e;
+			overlay float dTHe = (ppHe - tHe) * var_He_e;
+
+			//---- Apply safety margin for both models
+			// NDL can be computed while ascending... SO we have
+			// to check if we are saturating or desaturating.
+			if( dTN2 > 0.0 ) dTN2 *= float_saturation_multiplier;
+			else             dTN2 *= float_desaturation_multiplier;
+
+			if( dTHe > 0.0 ) dTHe *= float_saturation_multiplier;
+			else             dTHe *= float_saturation_multiplier;
+
+			// adopt M0 value when using the GF extension
+			if (char_I_deco_model != 0 ) M0 = GF_high * (M0 - pres_surface) + pres_surface;
+
+            //---- Simulate off-gassing while going to surface
+            // TODO !
+            // dTN2 -= exp( ... ascent time ... ppN2...)
+            // dTHe -= exp( ... ascent time ... ppHe...)
+
+            //---- Ok now, and still ok to surface after 1 or 10 minutes ?
+            if( (t <= M0) && (t + dTN2 + dTHe <= M0) )
+            {
+                tN2 += dTN2;		// YES: apply gas loadings,
+                tHe += dTHe;
+				t    = tN2 + tHe;				
+				
+                ndl += period;		// increment NDL,
+
+                continue;			// and loop.
+            }
+
+            //---- Should we retry with smaller steps ?
+            if( period == 10 )
+            {
+                read_Buhlmann_times(1); // 1min coefs.
+                period = 1;
+
+                continue;
+            }
+
+            //---- ELSE make a linear approx for the last minute
+            // Useful to have a meaningful rounding of NDL.
+            // But ONLY if positive (negative casted to unsigned is bad).
+            if( M0 > t ) ndl += (unsigned char)(0.5f + (M0-t)/(dTN2+dTHe));
+			
+            break;
+        }
+
+        // Keep the shortest NDL found
+		if ( ndl < nullzeit ) nullzeit = ndl;
+    }
+	
+	if( char_O_deco_status & DECO_PLAN_ALTERNATE) char_O_alternate_nullzeit = nullzeit;
+	else                                          char_O_nullzeit           = nullzeit;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_ascenttime
+//
+// Sum up ascent from bottom to surface at float_ascent_speed,
+// but 1 minute per meter for the final ascent, and all stops.
+//
+// Result in int_O_ascenttime,
+//        or int_O_alternate_ascenttime if doing the alternative plan.
+//
+static void calc_ascenttime(void)
+{
+    overlay unsigned char  x;
+    overlay unsigned short sum;
+	
+	// preset final ascent
+	overlay float final  = (float)char_I_depth_last_deco;
+
+    // calculate depth
+    overlay float ascent = (pres_respiration - pres_surface) * BAR_TO_METER;
+	
+	// check if we are already in final ascent
+    if (ascent <= final)
+	{
+		// yes - all ascent is final ascent
+		final  = ascent;
+		ascent = 0.0;
+	}
+	else
+	{
+		// no - subtract final ascent part from overall ascent
+		ascent -= final;
+		
+		// compute time for ascent part without final ascent
+		ascent /= float_ascent_speed;		
+	}
+	
+	// add 1 minute for each meter of  final ascent
+	ascent += final;
+	
+	// convert to integer
+    sum = (unsigned short)(ascent + 0.5);
+
+	// add all stop times
+    for(x=0; x<NUM_STOPS && internal_deco_depth[x]; x++)
+        sum += (unsigned short)internal_deco_time[x];
+
+	// limit result to display max.
+	if( sum > 999) sum = 999;
+	
+	// tag result as invalid if there is an overflow in the stops table
+	if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW ) sum |= INT_FLAG_INVALID;
+	
+	// route result to output variable
+	if( char_O_deco_status & DECO_PLAN_ALTERNATE ) int_O_alternate_ascenttime = sum;
+    else                                           int_O_ascenttime           = sum;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// update_startvalues
+//
+// updated in v.102
+//
+void update_startvalues(void)
+{
+    overlay unsigned char x;
+
+    // Start ascent simulation with current tissue partial pressures.
+    for(x=0; x<NUM_COMP; x++)
+    {
+        sim_pres_tissue_N2[x] = pres_tissue_N2[x];
+        sim_pres_tissue_He[x] = pres_tissue_He[x];
+    }
+
+    // No leading tissue (yet) for this ascent simulation.
+    sim_lead_tissue_limit = 0.0;
+    sim_lead_tissue_no    = 1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// sim_limit()
+//
+// New in v.111
+//
+// Function separated from calc_tissue() to allow recomputing limit on
+// different depth, because it depends on current gradient factor.
+//
+static void sim_limit(PARAMETER float GF_current)
+{
+    assert( 0.0 < GF_current && GF_current <= 1.0 );
+
+    sim_lead_tissue_limit = 0.0;
+    sim_lead_tissue_no    = 0;		// If no one is critic, keep first tissue.
+
+    for(ci=0; ci<NUM_COMP; ci++)
+    {
+        overlay float N2 = sim_pres_tissue_N2[ci];
+        overlay float He = sim_pres_tissue_He[ci];
+        overlay float p = N2 + He;
+
+        read_Buhlmann_coefficients();
+        var_N2_a = (var_N2_a * N2 + var_He_a * He) / p;
+        var_N2_b = (var_N2_b * N2 + var_He_b * He) / p;
+
+        // Apply the Eric Baker's varying gradient factor correction.
+        // Note: the correction factor depends both on GF and b,
+        //       Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
+        //       so that can change who is the leading gas...
+        // Note: Also depends of the GF_current...
+		if( char_I_deco_model != 0 )  p =   ( p                - (var_N2_a   * GF_current) )
+		                                  / ( 1.0 - GF_current + (GF_current / var_N2_b  ) );
+
+		else                          p =   (p - var_N2_a) * var_N2_b;
+
+
+        if( p > sim_lead_tissue_limit )
+        {
+            sim_lead_tissue_no    = ci;
+            sim_lead_tissue_limit = p;
+        }
+    } // for ci
+
+    assert( sim_lead_tissue_no < NUM_COMP );
+    assert( 0.0 <= sim_lead_tissue_limit && sim_lead_tissue_limit <= 14.0 );
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// clear_deco_table
+//
+//
+static void clear_deco_table(void)
+{
+    overlay unsigned char x;
+
+    for(x=0; x<NUM_STOPS; ++x)
+    {
+        internal_deco_time [x] = 0;
+        internal_deco_depth[x] = 0;
+    }
+	
+	// clear stop table overflow warning
+	char_O_deco_warnings &= ~DECO_WARNING_STOPTABLE_OVERFLOW;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// update_deco_table
+//
+// Add time to a stop at temp_depth_limit
+//
+// It is possible to create stops with a duration of 0 minutes, e.g. to
+// note a gas change "on the fly" while ascending. Therefore the criteria
+// to have reached the end of the list needs always to be depth == 0.
+//
+// Input:   temp_depth_limit  : stop's depth, in meters.
+//          sim_gas_last_used : gas used at stop, as index 1..5
+//			PARAMETER time_increment    : number of minutes to add to the stop
+//
+// Updated: internal_deco_depth[] : depth    (in meters)  of each stop
+//          internal_deco_time [] : time     (in minutes) of each stop
+//          internal_deco_gas  [] : gas used (index 1-5)  at each stop
+//
+static unsigned char update_deco_table(PARAMETER unsigned char time_increment)
+{
+	overlay unsigned char x;
+
+	assert( temp_depth_limit > 0 );		// No stop at surface...
+
+	// loop through internal deco table
+	for(x=0; x<NUM_STOPS; ++x)
+	{
+		// Make sure deco-stops are recorded in order:
+		assert( !internal_deco_depth[x] || temp_depth_limit <= internal_deco_depth[x] );
+
+		// Is there already a stop entry for our current depth?
+		if( internal_deco_depth[x] == temp_depth_limit )
+		{
+			// Yes - increment stop time if possible
+			// Stop time entries are limited to 99 minutes because of display constraints.
+			// Else a limit of 254 would account because of constrains in calc_CNS_planning().
+			if( internal_deco_time[x] < (99 - time_increment) )
+			{
+				internal_deco_time[x] += time_increment;	// increment stop time
+				return 1;									// return with status 'success'
+			}
+		}
+
+		// If program flow passes here, there is either no stop entry for the current depth yet, or
+		// the existing entry is saturated with 99 minutes. So we are looking for the next unused
+		// table entry.
+		if( internal_deco_depth[x] == 0 )
+		{
+			internal_deco_time[x]  = time_increment;		// initialize entry with first stop's time,
+			internal_deco_depth[x] = temp_depth_limit;		// ... depth, and
+			internal_deco_gas[x]   = sim_gas_last_used;		// ... gas
+			return 1;										// return with status 'success'
+		}
+	}
+
+	// If program flow passes here, all deco table entries are used up.
+	
+	// set overflow warning
+	char_O_deco_warnings |= DECO_WARNING_STOPTABLE_OVERFLOW;
+	
+	
+	// return with status 'failed'.
+	return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_gradient_factor
+//
+// optimized in v.101 (var_N2_a)
+// new code in v.102
+//
+static void calc_gradient_factor(void)
+{
+    overlay float gf;
+    overlay float N2 = pres_tissue_N2[char_O_gtissue_no];
+    overlay float He = pres_tissue_He[char_O_gtissue_no];
+
+    assert( char_O_gtissue_no < NUM_COMP );
+    assert( 0.800 <= pres_respiration && pres_respiration < 14.0 );
+
+    // tissue > respiration (currently off-gassing)
+    // GF = 0.00 when respiration == tissue, ie. dissolved gases are at equilibrium.
+    // GF = 1.00 when respiration == limit.
+    temp_tissue = N2 + He;
+    if( temp_tissue <= pres_respiration )
+	{
+        gf = 0.0;
+		int_O_gradient_factor = 0;
+	}
+    else
+    {
+        overlay float limit = calc_lead_tissue_limit;
+        // NOTE: in GF model, calc_lead_tissue_limit include already the
+        //       correction due to gradient factor. To compute the actual
+        //       current GF, we need to (re-)compute the raw ambient-pressure
+        //       limit from the Buhlmann model.
+        if( char_I_deco_model != 0 )
+        {
+            ci = char_O_gtissue_no;
+
+            read_Buhlmann_coefficients();
+
+            var_N2_a = (var_N2_a * N2 + var_He_a * He) / temp_tissue;
+            var_N2_b = (var_N2_b * N2 + var_He_b * He) / temp_tissue;
+
+            limit    = (temp_tissue - var_N2_a) * var_N2_b;
+        }
+
+        gf = (temp_tissue - pres_respiration) / (temp_tissue - limit);
+		
+		// limit to 255 because of constraints in ghostwriter code
+		if     ( gf <= 0.0   ) int_O_gradient_factor = 0;
+        else if( gf >  2.545 ) int_O_gradient_factor = 255 + INT_FLAG_WARNING;
+        else
+		{
+			int_O_gradient_factor = (unsigned int)(100 * gf + 0.5);
+		
+			if 		( int_O_gradient_factor >= GF_warning_threshold    ) int_O_gradient_factor |= INT_FLAG_WARNING;
+			else if ( int_O_gradient_factor >= GF_prewarning_threshold ) int_O_gradient_factor |= INT_FLAG_PREWARNING;
+		}
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_desaturation_time
+//
+// FIXED N2_ratio
+// unchanged in v.101
+// Inputs:  int_I_pres_surface, ppWater, char_I_desaturation_multiplier
+// Outputs: int_O_desaturation_time, int_O_nofly_time
+//
+// Helper function
+//
+void calc_desaturation_time_helper(void)
+{
+	if( pres_actual > pres_target )					// check if actual pressure is higher then target pressure
+	{												// YES - compute remaining time
+		overlay	float pres_ratio;
+		
+		pres_ratio = pres_actual / pres_target;
+
+		// Compute desaturation time with result rounded up to multiples of 10 minutes.
+		// Main purpose is to avoid confusion, because the times do not clock down in one minute steps any more
+		// but get constantly re-computed according to current ambient pressure and may therefor make steps of
+		// several minutes forwards and backwards as ambient pressure rises and falls.
+		short_time = (unsigned short)( (var_ht * log(pres_ratio) / desat_factor) + 0.9 );
+	}
+	else
+	{												// NO  - desaturation state reached, no remaining time
+		short_time = 0;
+	}
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Main function
+//
+void calc_desaturation_time(void)
+{
+    assert( 800 < int_I_pres_surface             && int_I_pres_surface             < 1100 );
+    assert( 0   < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
+
+
+    N2_ratio       = 0.7902; 															// fraction of N2 in respired air
+	pres_surface   = 0.001    * int_I_pres_surface;										// surface pressure in bar
+	N2_equilibrium = N2_ratio * (pres_surface - ppWater); 								// partial pressure of N2 in respired air
+	desat_factor   = 0.06931  * char_I_desaturation_multiplier * SURFACE_DESAT_FACTOR;	// pre-computed term for later use: 
+																						// 10 [Min] * 0.01 [%] * 0.6931 [ln(2)] * ...
+	int_O_desaturation_time = 0;
+	int_O_nofly_time		= 0;
+	
+
+    for(ci=NUM_COMP; ci>0;)
+    {
+		overlay float			pres_tissue_max;
+		overlay float			P_ambient_altitude;
+		overlay signed char		search_direction;
+		overlay unsigned short	nofly_N2   =  0;
+		overlay unsigned short	nofly_He   =  0;
+		overlay unsigned short	nofly_last = ~0;
+
+		
+		ci -= 1;
+		
+        read_Buhlmann_ht();
+		read_Buhlmann_coefficients();
+		
+		// get selected target altitude
+		switch( char_I_altitude_wait )
+		{
+			case 1:  P_ambient_altitude = P_ambient_1000m;	break;
+			case 2:  P_ambient_altitude = P_ambient_2000m;	break;
+			case 3:  P_ambient_altitude = P_ambient_3000m;	break;
+			default: P_ambient_altitude = P_ambient_fly;	break;
+		}
+		
+		// Target pressure for the tissue is the Buhlmann limit. We use the Buhlmann
+		// coefficients for N2 also for He because it is easier to calculate and the
+		// N2 coefficients are more conservative than those for He, so we are on the
+		// safe side, too.
+        pres_tissue_max = (P_ambient_altitude/var_N2_b + var_N2_a);
+		
+		// Adjust target pressure in case the GF model is in use by GF-high
+		if( char_I_deco_model != 0 )
+		{
+			pres_tissue_max = ((pres_tissue_max - P_ambient_altitude) * char_I_GF_High_percentage * 0.01) + P_ambient_altitude;			
+		}
+		
+
+		//
+		// Desaturation time
+		//
+
+		// N2: actual amount of tissue pressure above equilibrium.
+		pres_actual = pres_tissue_N2[ci] - N2_equilibrium;
+		
+		// N2: half-time of the current tissue
+		var_ht		= var_N2_ht;
+
+		// Calculate desaturation time for N2 in tissue.
+		// Desaturated state is defined as residual tissue pressure <= 1.05 x ppN2 respired
+
+		pres_target = 0.05 * N2_equilibrium;
+
+		calc_desaturation_time_helper();
+
+		if( short_time > int_O_desaturation_time) int_O_desaturation_time = short_time;
+
+
+		// He: actual amount of tissue pressure above equilibrium.
+		pres_actual = pres_tissue_He[ci];								// equilibrium for He is 0 bar
+
+		// He: half-time of the current tissue
+		var_ht		= var_He_ht;
+		
+		// Calculate desaturation time for He in the tissue.
+		// Desaturated state is defined as residual tissue pressure <= 0.05 x ppN2 respired
+
+		pres_target = 0.05 * N2_equilibrium;
+
+		calc_desaturation_time_helper();
+
+		if( short_time > int_O_desaturation_time) int_O_desaturation_time = short_time;			
+
+
+		//
+		// no-fly time
+		//
+
+		// initialize search direction
+		search_direction = 0;
+		
+		for(;;)
+		{
+			// N2: actual amount of tissue pressure above equilibrium.
+			pres_actual = pres_tissue_N2[ci] - N2_equilibrium;
+		
+			// N2: half-time of the current tissue
+			var_ht		= var_N2_ht;
+		
+			// Calculate no-fly time for N2 in the tissue.
+			// Flying is permitted when the N2 pressure fits into the assigned fraction above equilibrium.
+
+			pres_target = (split_N2_He[ci] * 0.01) * (pres_tissue_max - N2_equilibrium);
+
+			if( pres_target < 0.0 )						// check if desaturation to fly target is possible
+			{
+				int_O_nofly_time = 288;					// NO  - set no-fly time to 288 * 10 min = 48 h
+				break;									// done for this compartment
+			}
+			else 
+			{
+				calc_desaturation_time_helper();
+				nofly_N2 = short_time;
+			}
+		
+			// He: actual amount of tissue pressure above equilibrium - equilibrium for He is 0 bar.
+			pres_actual = pres_tissue_He[ci];
+
+			// He: half-time of the current tissue
+			var_ht		= var_He_ht;
+		
+			// Calculate no-fly time for He in the tissue.
+			// Flying is permitted when the He pressure fits into the assigned fraction.
+
+			pres_target = ((100 - split_N2_He[ci]) * 0.01) * (pres_tissue_max - N2_equilibrium);
+
+			calc_desaturation_time_helper();
+			nofly_He = short_time;
+
+
+			// Because the sum of N2 and He tissue pressures needs to fit into the Buhlmann limit for
+			// no-fly time calculation, each gas gets assigned a fraction of the available total pressure
+			// limit. The optimum split between the two gases can not be computed by a single formular,
+			// because this would require the inversion of a function with two exponential terms, which is
+			// not possible. We do not want to do a computational complex simulation here like it is done
+			// in the deco calculation code (although we tackle the same base problem here), so we just let
+			// the computer try out which split will balance the no-fly times induced by the N2 and the He
+			// at best.
+			
+			// first of all, skip any optimization in case the current compartment is not the leading one
+			if( (nofly_N2 <= int_O_nofly_time) && (nofly_He <= int_O_nofly_time) ) break;
+
+			// check if the N2 requires more waiting time than the He
+			if( nofly_N2 >= nofly_He )							
+			{
+				// check if the search direction has changed, which means we are beyond the
+				// optimum now, or if we are at the upper stop limit of split_N2_He
+				if( (search_direction < 0) || (split_N2_He[ci] == 99) )
+				{	
+					// Either the just completed iteration was more close to the optimum or the one before
+					// was, so we take the best (i.e. shortest) time of both as the final no-fly time.
+					int_O_nofly_time = (nofly_N2 < nofly_last) ? nofly_N2 : nofly_last;
+					break;
+				}
+
+				// store the no-fly time found in this iteration
+				nofly_last = nofly_N2;				
+				
+				// increase the N2 fraction of the split and set search direction towards more N2
+				split_N2_He[ci]  +=  1;
+				search_direction  = +1;
+			}
+			else
+			{
+				// check if the search direction has changed, which means we are beyond the
+				// optimum now, or if we are at the lower stop limit of split_N2_He
+				if( (search_direction > 0) || (split_N2_He[ci] == 1) )
+				{	
+					// Either the just completed iteration was more close to the optimum or the one before
+					// was, so we take the best (i.e. shortest) time of both as the final no-fly time.
+					int_O_nofly_time = (nofly_He < nofly_last) ? nofly_He : nofly_last;
+					break;
+				}
+
+				// store the no-fly time found in this iteration
+				nofly_last = nofly_He;				
+				
+				// decrease the N2 fraction of the split and set search direction towards less N2
+				split_N2_He[ci]  -=  1;
+				search_direction  = -1;	
+			}
+			
+		} // for(;;)
+
+	} // for(compartments)
+
+		
+	// Rescale int_O_desaturation_time and int_O_nofly_time to full minutes for display purpose
+	int_O_desaturation_time *= 10;
+	int_O_nofly_time		*= 10;
+		
+	// Limit int_O_desaturation_time and int_O_nofly_time to 5999 = 99 hours + 59 minutes
+	// because of display space constraints and rounding done above.
+	if( int_O_desaturation_time > 5999 ) int_O_desaturation_time = 5999;
+	if( int_O_nofly_time        > 5999 ) int_O_nofly_time        = 5999;
+
+
+	// Clear the microbubbles warning when the current gradient factor is < GF_warning_threshold.
+	// As the locked warning will stay set, this will cause the warning be be displayed in attention
+	// color instead of warning color.
+	if( int_O_gradient_factor < GF_warning_threshold ) char_O_deco_warnings &= ~DECO_WARNING_MBUBBLES;
+	
+	// clear some warnings when the desaturation time has become zero
+	if( int_O_desaturation_time == 0 ) char_O_deco_warnings &= ~(   DECO_WARNING_IBCD     + DECO_WARNING_IBCD_lock
+																  + DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock
+																  + DECO_WARNING_OUTSIDE  + DECO_WARNING_OUTSIDE_lock  );
+
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_wo_deco_step_1_min
+//
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+//
+// Input: int_I_pres_surface [mbar]
+//
+static void calc_wo_deco_step_1_min(void)
+{
+    assert( 800 <  int_I_pres_surface             && int_I_pres_surface             <  1100 );
+    assert( 100 <= char_I_saturation_multiplier   && char_I_saturation_multiplier   <  200  );
+    assert( 0   <  char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100  );
+
+	// setup input data for deco routines
+    pres_respiration = pres_surface = int_I_pres_surface * 0.001;
+	
+	N2_ratio       = 0.7902; 									// according to Buhlmann
+	N2_equilibrium = N2_ratio * (pres_surface     - ppWater);	// used for N2 tissue graphics scaling
+    ppN2           = N2_ratio * (pres_respiration - ppWater);
+    ppHe           = 0.0;
+
+    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01 * SURFACE_DESAT_FACTOR;
+    float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
+
+
+	// program what to do: 128 = Flag for "real" tissues, 1 = 1 minute
+	tissue_increment = 128 + 1;
+
+	// update the pressure in the tissues N2/He in accordance with the new ambient pressure
+	calc_tissue();		
+	
+	// clock down CNS by a 1 minute step
+	CNS_fraction *= 0.992327946;
+	
+	// compute integer copy of CNS value
+	compute_CNS_for_display();
+	
+	// reset deco engine start condition (probably not needed to be done here...)
+	char_O_deco_status &= ~DECO_STATUS_MASK;	// clear bits
+	char_O_deco_status |= DECO_STATUS_INIT;		// set bits
+	
+	// reset some more data that are not applicable in surface mode
+    char_O_nullzeit            = 0;
+    int_O_ascenttime           = 0;
+	int_O_alternate_ascenttime = 0;
+	clear_deco_table();
+	
+	// calculate gradient factor
+    calc_gradient_factor();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_dive_interval
+//
+// Prepare tissue for delay before the next dive simulation.
+//
+// Inputs:   char_I_dive_interval == delay before dive (in 1 Minute steps).
+// Modified: CNS_fraction, int_O_CNS_fraction
+// 			 pres_tissue_N2/He[]
+//
+// Should be protected by deco_push_tissues_to_vault(),
+//                        deco_pull_tissues_from_vault()
+//
+// desaturation slowed down to 70,42%.
+//
+static void calc_dive_interval(void)
+{
+    overlay unsigned char t;
+    
+    //---- Initialize simulation parameters ----------------------------------
+    pres_respiration = pres_surface = int_I_pres_surface * 0.001;
+	
+	N2_ratio       = 0.7902; 									// according to buehlmann
+	N2_equilibrium = N2_ratio * (pres_surface     - ppWater);	// used for N2 tissue graphics scaling
+    ppN2           = N2_ratio * (pres_respiration - ppWater);
+    ppHe           = 0.0;
+	
+    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01 * SURFACE_DESAT_FACTOR;
+    float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
+	
+    //---- Perform simulation ------------------------------------------------
+
+	// Calculate tissues:
+	// Because tissue_increment is limited to 127 minutes, we have to do two passes
+	// in case char_I_dive_interval is bigger than 127.
+	// Ops: char_I_dive_interval must be limited to 254!
+
+	t = char_I_dive_interval;
+
+	if ( t == 255 ) t = 254;
+
+	if ( t > 127 )							// extra pass needed?
+	{
+		tissue_increment = 127				// dive interval length in minutes
+						 | 128;				// Flag to update the "real" tissues			
+		
+		calc_tissue();						// update tissues
+		
+		t -= 127;							// calculate remaining dive interval length
+	}
+
+	tissue_increment = t 					// dive interval length in minutes to do
+					 | 128;					// Flag to update the "real" tissues
+	calc_tissue();							// update tissues
+	
+
+	// Calculate CNS:
+	// To speed up things and because on most invocations of this code char_I_dive_interval
+	// is a multiple of 10 minutes, we loop the loop-counter down using two speeds.
+
+	t = char_I_dive_interval;
+
+	while ( t )
+	{
+		if( t > 9 )
+		{
+			CNS_fraction *= 0.925874712;	// Half-time = 90min -> 10 min: (1/2)^(1/9)
+			t            -= 10;				// fast speed looping
+		}
+		else
+		{
+			CNS_fraction *= 0.992327946;	// Half-time = 90min ->  1 min: (1/2)^(1/90)
+			t            -= 1;				// slow speed looping
+		}
+	}	
+
+	// compute integer copy of CNS value
+	compute_CNS_for_display();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// clear_CNS_fraction
+//
+// new in v.101
+//
+void clear_CNS_fraction(void)
+{
+	CNS_fraction       = CNS_sim_norm_fraction     = CNS_sim_alt_fraction         = 0;
+	int_O_CNS_fraction = int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_CNS_fraction
+//
+// Input:  char_actual_ppO2     : current ppO2 [decibars]
+//         tissue_increment  	: time increment and tissue selector
+//         CNS_fraction         : current CNS% as float before period
+//
+// Output: CNS_fraction,          int_O_CNS_fraction 			- for the real tissues
+//         CNS_sim_norm_fraction, int_O_normal_CNS_fraction		- in simulation mode, normal plan
+//         CNS_sim_alt_fraction,  int_O_alternate_CNS_fraction  - in simulation mode, alternative plan
+//
+void calc_CNS_fraction(void)
+{
+    overlay float time_factor       = 1.0;		// default is 2sec
+	overlay float CNS_fraction_temp = 0.0;
+	
+    assert( char_actual_ppO2 > 15 );
+	
+	// All deco code is now invoked every second. But as the CNS update is based on
+	// 2 seconds periods, we skip every 2nd seconds-based invocation of this function.
+	// 128 = 128 (flag for "real" CNS) + 0 (2 seconds period)
+	// To distribute computational load, the CNS% is calculated in "the other second"
+	// than the tissues.
+	if( (tissue_increment == 128) && (twosectimer) ) return;
+	
+	// adjust time factor if minute-based stepping is commanded, mask out flag bit
+	if( tissue_increment & 127 ) time_factor = 30.0 * (float)(tissue_increment & 127);
+
+		
+    //------------------------------------------------------------------------
+    // Don't increase CNS below 0.5 bar, but keep it steady.
+    if (char_actual_ppO2 < 50)
+        ;   // no changes
+    //------------------------------------------------------------------------
+    // Below (and including) 1.60 bar
+    else if (char_actual_ppO2 < 61)
+        CNS_fraction_temp = time_factor/(-533.07 * char_actual_ppO2 + 54000.0);
+    else if (char_actual_ppO2 < 71)
+        CNS_fraction_temp = time_factor/(-444.22 * char_actual_ppO2 + 48600.0);
+    else if (char_actual_ppO2 < 81)
+        CNS_fraction_temp = time_factor/(-355.38 * char_actual_ppO2 + 42300.0);
+    else if (char_actual_ppO2 < 91)
+        CNS_fraction_temp = time_factor/(-266.53 * char_actual_ppO2 + 35100.0);
+    else if (char_actual_ppO2 < 111)
+        CNS_fraction_temp = time_factor/(-177.69 * char_actual_ppO2 + 27000.0);
+    else if (char_actual_ppO2 < 152)
+        CNS_fraction_temp = time_factor/( -88.84 * char_actual_ppO2 + 17100.0);
+    else if (char_actual_ppO2 < 167)
+        CNS_fraction_temp = time_factor/(-222.11 * char_actual_ppO2 + 37350.0);
+    //------------------------------------------------------------------------
+    // Arieli et all.(2002): Modeling pulmonary and CNS O2 toxicity:
+    // J Appl Physiol 92: 248--256, 2002, doi:10.1152/japplphysiol.00434.2001
+    // Formula (A1) based on value for 1.55 and c=20
+    // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+    else if (char_actual_ppO2 < 172)
+        CNS_fraction_temp = time_factor*0.00102;
+    else if (char_actual_ppO2 < 177)
+        CNS_fraction_temp = time_factor*0.00136;
+    else if (char_actual_ppO2 < 182)
+        CNS_fraction_temp = time_factor*0.00180;
+    else if (char_actual_ppO2 < 187)
+        CNS_fraction_temp = time_factor*0.00237;
+    else if (char_actual_ppO2 < 192)
+        CNS_fraction_temp = time_factor*0.00310;
+    else if (char_actual_ppO2 < 198)
+        CNS_fraction_temp = time_factor*0.00401;
+    else if (char_actual_ppO2 < 203)
+        CNS_fraction_temp = time_factor*0.00517;
+    else if (char_actual_ppO2 < 233)
+        CNS_fraction_temp = time_factor*0.0209;
+    else
+        CNS_fraction_temp = time_factor*0.0482; // value for 2.5 bar, used for 2.33 bar and above
+
+
+	// Check from where we were called:
+	// flag (bit 7) is  set -> we were called from calc_hauptroutine()
+	// flag (bit 7) not set -> we were called from the deco planning routines
+	if       ( tissue_increment   & 128                 ) CNS_fraction          += CNS_fraction_temp;	// real tissues
+	else if  ( char_O_deco_status & DECO_PLAN_ALTERNATE ) CNS_sim_alt_fraction  += CNS_fraction_temp;	// alternative plan
+	     else                                             CNS_sim_norm_fraction += CNS_fraction_temp;	// normal plan
+
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_CNS_planning
+//
+// Compute CNS during predicted ascent.
+//
+// Note:    Needs a call to deco_push_tissues_to_vault(),
+//          deco_pull_tissues_from_vault() to avoid trashing everything...
+//
+// Input:   CNS_fraction, internal_deco_time[], internal_deco_depth[], internal_deco_gas[]
+// Output:  CNS_fraction, int_O_normal_CNS_fraction / int_O_alternate_CNS_fraction
+//
+void calc_CNS_planning(void)
+{
+	// start with CNS% we already have
+	if( char_O_deco_status & DECO_PLAN_ALTERNATE ) CNS_sim_alt_fraction  = CNS_fraction;
+	else                                           CNS_sim_norm_fraction = CNS_fraction;
+
+	
+    //---- CCR mode : do the full TTS at once ---------------------------------
+
+	if( ((char_O_deco_status & DECO_MODE_MASK) == DECO_MODE_CCR) )
+    {
+		overlay unsigned short t;       				// needs 16 bits here !
+
+		// get current ppO2 from sensors or setpoint
+        char_actual_ppO2 = char_I_const_ppO2;
+
+		// calculate CNS% for the period of additional staying at bottom depth (fTTS / delayed ascent)
+		if( char_O_deco_status & DECO_ASCENT_DELAYED)
+		{
+			tissue_increment  = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
+			calc_CNS_fraction();
+		}
+		
+		// get the ascent time dependent on the current plan
+		t = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? int_O_alternate_ascenttime : int_O_ascenttime;
+		
+		// start simulating CNS% in chunks of 127 minutes
+		tissue_increment = 127;
+
+		while( t > 127 )
+		{
+			t -= 127;									// tissue_increment is limited to 127 minutes because of flag in bit 7
+			calc_CNS_fraction();						// calculate CNS in chunks of full 127 minutes
+		}
+
+		tissue_increment = (char)t;						// get the remaining minutes <= 127
+		calc_CNS_fraction();							// calculate CNS for the remaining minutes
+    }
+	else //---- OC mode and pSCR without sensors: have to follow all gas switches... -----
+    {
+		overlay float float_actual_ppO2;
+		overlay float abs_pres;
+
+		overlay unsigned char stop_depth;
+		overlay unsigned char last_gas;
+		overlay unsigned char i;    					// stop table index
+
+		
+		// retrieve bottom gas 0 (manual gas) or 1-5 (configured gases)
+		last_gas = sim_gas_last_used = sim_gas_first_used;
+
+		// get the calc_N2/He/O2_ratios of the bottom gas
+		gas_switch_set();             
+
+		// calculate absolute pressure
+		abs_pres = pres_surface + char_I_bottom_depth * METER_TO_BAR;
+		
+		// switch on deco mode pSCR / OC
+		if( char_O_deco_status & DECO_MODE_PSCR )
+		{
+			//---- pSCR calculated --------------------------------------------
+
+			// abs_pres              is 0.0 ...     in bar
+			// calc_O2_ratio		 is 0.0 ...   1.0 as factor
+			// char_I_PSCR_drop      is 0   ...  15 as %
+			// char_I_PSCR_lungratio is 5   ...  20 as %
+			// float_actual_ppO2     is 0.0 ...     in cbar (!)
+
+			float_actual_ppO2 =   (100 * abs_pres * calc_O2_ratio)
+			                    - (1.0 - calc_O2_ratio) * char_I_PSCR_drop * char_I_PSCR_lungratio;
+		}
+		else
+		{
+			//---- OC ---------------------------------------------------------
+			
+			float_actual_ppO2 = abs_pres * calc_O2_ratio * 100; // in cbar (!)
+		}
+	
+		// caution: float_actual_ppO2 is in cbar here!
+		if      ( float_actual_ppO2 < 0.0   ) char_actual_ppO2 =   0;
+        else if ( float_actual_ppO2 > 254.5 ) char_actual_ppO2 = 255;
+        else                                  char_actual_ppO2 = (unsigned char)(float_actual_ppO2 + 0.5);
+		
+
+		// simulate extended bottom time (fTTS) / delay before ascent (bailout) if configured
+		if( char_O_deco_status & DECO_ASCENT_DELAYED )
+		{
+			tissue_increment  = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
+			calc_CNS_fraction();			
+		}
+
+		
+		// For simplicity reason (non-linearity of the relation between ppO2 and CNS increments), the
+		// whole ascent is calculated with bottom ppO2. This errs, but it does so to the safe side.
+		
+		// calculate ascent time (integer division and generous round-up)
+		tissue_increment = char_I_bottom_depth / char_I_ascent_speed + 1;
+		
+		// commented out - not needed when char_I_ascent_speed is limited to a
+		//                 minimum of 2.something, it is indeed limited to 5.
+		// limit tissue_increment to 127 minutes
+		// if( tissue_increment > 127 ) tissue_increment = 127;			
+
+		// simulate the CNS increase
+		calc_CNS_fraction();
+
+
+        //---- Stops ---------------------------------------------------------
+		
+        for(i=0; i<NUM_STOPS; ++i)
+        {
+			// get the depth of the stop
+			stop_depth = internal_deco_depth[i];
+
+			// did we reach the last entry (depth = 0)? if yes, done
+			if (stop_depth == 0) break;
+
+			// get the duration of the stop and the gas breathed
+			tissue_increment  = internal_deco_time[i];
+            sim_gas_last_used = internal_deco_gas[i];
+			
+            // do we have a gas switch?
+            if( sim_gas_last_used != last_gas )
+            {
+				// yes - get new calc ratios
+				gas_switch_set();				
+
+				// remember new gas as last gas
+				last_gas = sim_gas_last_used;
+			}
+
+            // calculate absolute pressure at stop depth
+			abs_pres = pres_surface + stop_depth * METER_TO_BAR;
+			
+			// pSCR mode
+			if( char_O_deco_status & DECO_MODE_PSCR )
+			{
+				// abs_pres              is 0.0 ...     in bar
+				// calc_O2_ratio		 is 0.0 ...   1.0 as factor
+				// char_I_PSCR_drop      is 0   ...  15 as %
+				// char_I_PSCR_lungratio is 5   ...  20 as %
+				// float_actual_ppO2     is 0.0 ...     in cbar (!)
+
+				float_actual_ppO2 =   (100 * abs_pres * calc_O2_ratio)
+				                    - (1.0 - calc_O2_ratio) * char_I_PSCR_drop * char_I_PSCR_lungratio;
+			}
+			else // OC mode
+			{
+				float_actual_ppO2 = abs_pres * calc_O2_ratio * 100;	// in cbar (!)
+			}
+
+			// caution: float_actual_ppO2 is in cbar here!
+			if      ( float_actual_ppO2 < 0.0   ) char_actual_ppO2 =   0;
+			else if ( float_actual_ppO2 > 254.5 ) char_actual_ppO2 = 255;
+			else                                  char_actual_ppO2 = (unsigned char)(float_actual_ppO2 + 0.5);
+
+			
+			// ** Currently, stop times per stop entry are limited to 99 minutes in update_deco_table(),
+			// ** so the following code block is not needed at times.
+			//
+			// // tissue_increment is limited to 127 when fed to deco_calc_CNS_fraction(),
+			// // so if the stop is longer than 127 minutes (but not longer than 254 minutes!)
+			// // we need to calculate the CNS in two chunks.
+			// if( tissue_increment > 127)
+			// {
+			//		tissue_increment -= 127;	// subtract full 127 minutes and do the "remaining" minutes first
+			//		calc_CNS_fraction();
+			//		tissue_increment  = 127;	// catch up with the previously subtracted full 127 minutes
+			// }
+
+            // calculate CNS% for the stop			
+			calc_CNS_fraction();
+        }
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// deco_calc_CNS_decrease_15min
+//
+// new in v.101
+//
+// calculates the half time of 90 minutes in 6 steps of 15 min
+// (Used in sleep mode, for low battery mode).
+//
+// Output: int_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+//
+void deco_calc_CNS_decrease_15min(void)
+{
+    RESET_C_STACK
+ 
+	// clock down CNS
+    CNS_fraction =  0.890899 * CNS_fraction;
+	
+	// compute integer copy of CNS value
+	compute_CNS_for_display();
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// gas_volumes
+//
+// calculates volumes and required tank fill pressures for each gas.
+//
+// Input:   char_I_bottom_depth		 depth of the bottom segment
+//			char_I_bottom_time		 duration of the bottom segment
+//			char_I_extra_time		 extra bottom time for fTTS / delayed ascent
+//			float_ascent_speed       ascent speed, in meters/minute
+//          sim_gas_first_used 		 the bottom gas (1-5 for configured gases, 0 for the manual gas)
+//          internal_deco_depth[]	 depth of the stops
+//			internal_deco_time[]	 duration of the stops
+//			internal_deco_gas[]      gas breathed at the stops
+//          char_I_bottom_usage 	 gas consumption during bottom part and initial ascent, in liters/minute
+//          char_I_deco_usage 		 gas consumption during stops and following ascents, in liters/minute
+//			char_I_tank_size[]       size of the tanks for gas 1-5, in liters
+//			char_I_tank_pres_fill[]  fill pressure of the tanks
+//
+// Output:  int_O_gas_volumes[]      amount of gas needed, in liters
+//			int_O_tank_pres_need[]   in bar, + flags for fast evaluation by dive mode warnings:
+//											   2^15: pres_need >= pres_fill
+//											   2^14: pres_need >= press_fill * GAS_NEEDS_ATTENTION_THRESHOLD
+//											   2^11: pres_need == 0
+//											   2^10: pres_need invalid
+//
+void gas_volumes_helper(void)
+{
+	// Calculate the gas volume needed at a given depth, time and usage (SAC rate).
+	// We use 1.0 for the surface pressure to have stable results when used through
+	// the deco calculator (simulation mode).
+	volume = (float_depth * METER_TO_BAR + 1.0) * float_time * usage;
+	
+	return;
+}
+
+void gas_volumes(void)
+{
+	overlay float volumes[NUM_GAS];
+
+	overlay unsigned char stop_gas;
+	overlay unsigned char stop_gas_last;
+	overlay unsigned char stop_time;
+	overlay unsigned char stop_depth;
+	overlay unsigned char stop_depth_last;
+	overlay unsigned char i;
+
+	
+    //---- initialization ----------------------------------------------------
+	
+	// null the volume accumulators
+    for(i=0; i<NUM_GAS; ++i) volumes[i] = 0.0;
+
+	// quit for CCR and pSCR mode
+	if( char_O_deco_status & DECO_MODE_LOOP ) goto done;
+
+
+    //---- bottom demand -----------------------------------------------------
+	
+	// sim_gas_first_used : gas used during bottom segment (0, 1-5)
+	// char_I_bottom_depth: depth of the bottom segment
+	
+	assert(0 <= sim_gas_first_used && sim_gas_first_used <= NUM_GAS);
+
+	// get the gas used during bottom segment
+	stop_gas_last = stop_gas = sim_gas_first_used;
+	
+	// set the usage (SAC rate) to bottom usage rate for bottom part and initial ascent
+	usage = char_I_bottom_usage;
+		
+	// volumes are only calculated for gases 1-5, but not the manually configured one
+	if( stop_gas )
+	{
+		// set the bottom depth
+		float_depth = (float)char_I_bottom_depth;
+		
+		// calculate either bottom segment or fTTS / delayed ascent
+		if( char_O_deco_status & DECO_ASCENT_DELAYED )
+		{
+			// duration of delayed ascent
+			float_time = (float)char_I_extra_time;
+		}
+		else
+		{
+			// duration of bottom segment
+			float_time = (float)char_I_bottom_time;
+		}
+		
+		// calculate gas demand
+		gas_volumes_helper();
+		
+		// take result
+		volumes[stop_gas-1] = volume;
+	}
+	
+	
+	// initialize stop index with first stop
+	i = 0;
+
+	
+	//---- initial ascent demand ---------------------------------------------
+	
+	// stop_gas                : gas from bottom segment
+	// char_I_bottom_depth     : depth of the bottom segment
+	// internal_deco_depth[i=0]: depth of the first stop, may be 0 if no stop exists
+	
+	// get the data of the first stop	
+	stop_depth = internal_deco_depth[i];
+	stop_time  = internal_deco_time[i];
+	
+	// volumes are only calculated for gases 1-5, but not the manually configured one
+	if( stop_gas )
+	{
+		// compute distance between bottom and first stop
+		float_depth = (float)char_I_bottom_depth - (float)stop_depth;
+		
+		// initial ascent exists only if ascent distance is > 0
+		if( float_depth > 0.0 )
+		{
+			// compute ascent time
+			float_time = float_depth / float_ascent_speed;
+		
+			// compute average depth between bottom and first stop
+			float_depth = (float)char_I_bottom_depth - float_depth * 0.5;
+
+			// calculate gas demand
+			gas_volumes_helper();
+
+			// add result
+			volumes[stop_gas-1] += volume;
+		}
+	}
+
+	// switch the usage (SAC rate) to deco usage rate
+	// for stops, intermediate and final ascent
+	usage = char_I_deco_usage;
+	
+	// is there a (first) stop? if yes, goto stops processing
+	if( stop_depth ) goto stops;
+	
+	// add demand of a 3 minutes safety stop at 5 meters, at least for contingency...
+	float_time  = 3.0;
+	float_depth = 5.0;
+
+	// calculate gas demand
+	gas_volumes_helper();
+
+	// add result
+	volumes[stop_gas-1] += volume;
+
+	// proceed to volume conversion and pressure calculations
+	goto done;			
+
+	
+	//---- intermediate ascent demand ---------------------------------------
+inter_ascents:
+
+	// store last stop depth and gas
+	stop_depth_last = stop_depth;
+	stop_gas_last   = stop_gas;
+	
+	// check if we are at the end of the stops table
+	if( i < NUM_STOPS-1 )
+	{
+		// there are more entries - get the next stop data
+		i++;
+
+		// get the next stop depth
+		stop_depth = internal_deco_depth[i];
+
+		// check if there is indeed another stop,
+		// if not (depth = 0) treat as end of table
+		if( stop_depth == 0 ) goto end_of_table;
+
+		// get the next stop duration
+		stop_time = internal_deco_time[i];
+	}
+	else
+	{
+end_of_table:
+
+		// End of the stops table reached or no more stops: Split the remaining
+		// ascent into an intermediate ascent and a final ascent by creating a
+		// dummy stop at the usual last deco stop depth. Stop gas doesn't change.
+		stop_time  = 0;
+		stop_depth = char_I_depth_last_deco;
+	}
+
+	// volumes are only calculated for gases 1-5, but not the manually configured one
+	if( stop_gas_last )
+	{
+		// compute distance between the two stops:
+		// last stop will always be deeper than current stop
+		float_depth = (float)(stop_depth_last - stop_depth);
+
+		// compute ascent time
+		float_time = float_depth / float_ascent_speed;
+		
+		// compute average depth between the two stops
+		float_depth = (float)stop_depth_last - float_depth * 0.5;
+
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result
+		volumes[stop_gas_last-1] += volume;
+	}
+
+
+	//---- next stop demand -------------------------------------------------
+stops:
+	
+	// convert depth of the stop
+	float_depth = (float)stop_depth;
+	
+	// get the next gas
+	stop_gas = internal_deco_gas[i];
+	
+	// do we we have a gas change?
+	if( stop_gas_last && (stop_gas != stop_gas_last) )
+	{
+		// yes - spend an additional char_I_gas_change_time on the old gas
+		float_time = (float)char_I_gas_change_time;
+		
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result
+		volumes[stop_gas_last-1] += volume;
+	}
+	
+	// calculate and add demand on new gas for the full stop duration
+	if( stop_gas )
+	{
+		// get the duration of the stop
+		float_time = (float)stop_time;
+				
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result to last gas
+		volumes[stop_gas-1] += volume;
+	}
+
+	// continue with the next intermediate ascent if this was not the last stop
+	if( stop_depth > char_I_depth_last_deco ) goto inter_ascents;
+
+
+	//---- final ascent demand -----------------------------------------------
+final_ascent:
+
+	// float_depth: depth of last stop
+	// stop_gas   : gas from last stop (0 or 1-5)
+	
+	// volumes are only calculated for gases 1-5, but not the manually configured one	
+	if( stop_gas )
+	{
+		// set ascent time according to an ascent speed of 1 meter per minute
+		float_time = float_depth;
+		
+		// set half-way depth
+		float_depth *= 0.5;
+		
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result
+		volumes[stop_gas-1] += volume;
+	}
+
+
+    //---- convert results for the assembler interface -----------------------------
+done:
+
+    for(i=0; i<NUM_GAS; ++i)
+	{
+        if( volumes[i] >= 65534.5 )
+		{
+			int_O_gas_volumes[i]	= 65535;
+			int_O_tank_pres_need[i]	= 999 + INT_FLAG_WARNING; // 999 bar + warning flag for > pres_fill
+		}
+		else
+		{
+			overlay unsigned short tank_pres_fill = 10.0 * (unsigned short)char_I_tank_pres_fill[i];
+			
+			// No distinct rounding done here because volumes are not accurate to the single liter anyhow
+			
+			// convert gas volumes to integers
+            int_O_gas_volumes[i]     = (unsigned short)volumes[i];
+		
+			// compute how much pressure in the tank will be needed [in bar]  (integer-division)
+			int_O_tank_pres_need[i]  = (unsigned short)(int_O_gas_volumes[i] / char_I_tank_size[i]);
+			
+			// limit to 999 bar because of display constraints
+			if( int_O_tank_pres_need[i] > 999 ) int_O_tank_pres_need[i] = 999;
+			
+			// set flags for fast evaluation by divemode check for warnings
+			if     ( int_O_tank_pres_need[i] == 0 )
+			{
+				// set flag for 0 bar
+				int_O_tank_pres_need[i] |= INT_FLAG_ZERO;
+			}
+			else if( int_O_tank_pres_need[i] >= tank_pres_fill )
+			{
+				// set warning flag
+				int_O_tank_pres_need[i] |= INT_FLAG_WARNING;
+
+			}
+			else if( int_O_tank_pres_need[i] >= tank_pres_fill * GAS_NEEDS_ATTENTION_THRESHOLD )
+			{
+				// set pre-warning flag
+				int_O_tank_pres_need[i] |= INT_FLAG_PREWARNING;	
+			}			
+
+			// set invalid flag if there is an overflow in the stops table
+			if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
+				int_O_tank_pres_need[i] |= INT_FLAG_INVALID;
+			
+		} // if( volumes[i] )
+	} // for
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void compute_CNS_for_display(void)
+{
+	if		( CNS_fraction <  0.01  ) int_O_CNS_fraction = 0;
+	else if ( CNS_fraction >= 9.985 ) int_O_CNS_fraction = 999 + INT_FLAG_WARNING;
+	else
+	{
+		// convert float to integer
+		int_O_CNS_fraction = (unsigned short)(100 * CNS_fraction + 0.5);
+	
+		// compute warnings
+		if		( int_O_CNS_fraction >= CNS_warning_threshold    )
+		{
+			// reset pre-warning and set main warning flag
+			int_O_CNS_fraction &= ~INT_FLAG_PREWARNING;			
+			int_O_CNS_fraction |=  INT_FLAG_WARNING;
+		}
+		else if	( int_O_CNS_fraction >= CNS_prewarning_threshold )
+		{
+			// reset main warning but set pre-warning flag
+			int_O_CNS_fraction &= ~INT_FLAG_WARNING;
+			int_O_CNS_fraction |=  INT_FLAG_PREWARNING;
+		}
+		else
+		{
+			// clear both warnings
+			int_O_CNS_fraction &= ~(INT_FLAG_WARNING + INT_FLAG_PREWARNING);
+		}
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void deco_push_tissues_to_vault(void)
+{
+    overlay unsigned char x;
+
+    RESET_C_STACK
+
+	low_depth_norm_vault = low_depth_norm;
+	low_depth_alt_vault  = low_depth_alt;
+    cns_vault_float      = CNS_fraction;
+	cns_vault_int        = int_O_CNS_fraction;
+	deco_warnings_vault  = char_O_deco_warnings;
+
+    for (x=0;x<NUM_COMP;x++)
+    {
+        pres_tissue_N2_vault[x] = pres_tissue_N2[x];
+        pres_tissue_He_vault[x] = pres_tissue_He[x];
+    }
+}
+
+void deco_pull_tissues_from_vault(void)
+{
+    overlay unsigned char x;
+
+    RESET_C_STACK
+
+	low_depth_norm       = low_depth_norm_vault;
+	low_depth_alt        = low_depth_alt_vault;
+    CNS_fraction         = cns_vault_float;
+    int_O_CNS_fraction   = cns_vault_int;
+	char_O_deco_warnings = deco_warnings_vault;
+	
+	locked_GF_step_norm  = GF_delta / low_depth_norm;
+	locked_GF_step_alt   = GF_delta / low_depth_alt;
+	
+    for (x=0; x<NUM_COMP; x++)
+    {
+        pres_tissue_N2[x] = pres_tissue_N2_vault[x];
+        pres_tissue_He[x] = pres_tissue_He_vault[x];
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+#ifndef CROSS_COMPILE
+void main() {}
+#endif
--- a/src/p2_deco.c	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/p2_deco.c	Wed Jan 31 19:39:37 2018 +0100
@@ -1,8 +1,8 @@
 // **************************************************************
-// p2_deco.c
+// p2_deco.c							REFACTORED VERSION	V2.95a2
 //
 //  Created on: 12.05.2009
-//  Author: chsw
+//  Author: heinrichs weikamp, contributions by Ralph Lembcke and others
 //
 // **************************************************************
 
@@ -25,38 +25,15 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
-// *****************************
-// ** I N T R O D U C T I O N **
-// *****************************
-//
-// OSTC
-//
-// code:
-// p2_deco_main_c_v101.c
-// part2 of the OSTC code
-// code with constant O2 partial pressure routines
-// under construction !!
-//
-// summary:
-// decompression routines
-// for the OSTC experimental project
-// written by Christian Weikamp
-// last revision __________
-// comments added _________
-//
-// additional files:
-// p2_tables_v100.romdata (other files)
-// 18f4685_ostc_v100.lkr (linker script)
-//
 // history:
 // 01/03/08 v100: first release candidate
 // 03/13/08 v101: start of programming ppO2 code
-// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101a: backup of interim version with ppO2 calculation
 // 03/13/25 v101: open circuit gas change during deco
 // 03/13/25 v101: CNS_fraction calculation
 // 03/13/26 v101: optimization of tissue calc routines
 // 07/xx/08 v102a: debug of bottom time routine
-// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 09/xx/08 v102d: Gradient Factor Model implementation
 // 10/10/08 v104: renamed to build v103 for v118 stable
 // 10/14/08	v104: integration of char_I_depth_last_deco for Gradient Model
 // 03/31/09 v107: integration of FONT Incon24
@@ -71,7 +48,7 @@
 // 2011/02/15: [jDG] Fixed inconsistencies introduced by gas switch delays.
 // 2011/03/21: [jDG] Added gas consumption (CF56 & CF57) evaluation for OCR mode.
 // 2011/04/15: [jDG] Store low_depth in 32bits (w/o rounding), for a better stability.
-// 2011/04/25: [jDG] Added 1mn mode for CNS calculation, to allow it for decoplanning.
+// 2011/04/25: [jDG] Added 1mn mode for CNS calculation, to allow it for deco planning.
 // 2011/04/27: [jDG] Fixed char_O_gradient_factor calculation when model uses gradient-factor.
 // 2011/05/02: [jDG] Added "Future TTS" function (CF58).
 // 2011/05/17: [jDG] Various cleanups.
@@ -81,17 +58,18 @@
 // 2012/02/24: [jDG] Remove missed stop bug.
 // 2012/02/25: [jDG] Looking for a more stable LOW grad factor reference.
 // 2012/09/10: [mH]  Fill char_O_deco_time_for_log for logbook write
-// 2012/10/05: [jDG] Better deco_gas_volumes accuracy (average depth, switch between stop).
+// 2012/10/05: [jDG] Better gas_volumes accuracy (average depth, switch between stop).
 // 2013/03/05: [jDG] Should vault low_depth too.
 // 2013/03/05: [jDG] Wrobell remark: ascent_to_first_stop works better with finer steps (2sec).
 // 2013/05/08: [jDG] A. Salm remark: NOAA tables for CNS are in ATA, not bar.
-// 2013/12/21: [jDG] Fix CNS calculation in decoplan w/o marked gas switch
-// 2014/06/16: [jDG] Fix Helium diluant. Fix volumes with many travel mix.
+// 2013/12/21: [jDG] Fix CNS calculation in deco plan w/o marked gas switch
+// 2014/06/16: [jDG] Fix Helium diluent. Fix volumes with many travel mix.
 // 2014/06/29: [mH]  Compute int_O_ceiling
 // 2015/06/12: [jDG] Fix NDL prediction while desaturating with the Buhlmann model.
-// 2017/08/04: [mH] Switch to absolute GF everywhere and apply safety margin parameters to both models (GF and non-GF), fixes from Ralph Lembcke
+// 2017/08/04: [mH]  Switch to absolute GF everywhere and apply safety margin parameters to both models (GF and non-GF), fixes from Ralph Lembcke
+// 2017/10/31: [rl]  enhancements for pSCR mode and introduction of 2nd deco plan computation
+// 2017/12/31: [rl]  completion of 2nd deco plan computation and various up-fixes
 //
-// TODO:
 //
 // Literature:
 // Buhlmann, Albert: Tauchmedizin; 4. Auflage [2002];
@@ -113,133 +91,280 @@
 // ***********************************************
 
 #include "p2_definitions.h"
-#define TEST_MAIN
+#define  TEST_MAIN
 #include "shared_definitions.h"
 
-// Water vapour partial pressure in the lungs
-#define ppWater        0.0627
-#define METER_TO_BAR   0.09985
-#define BAR_TO_METER   10.0150      // (1.0/METER_TO_BAR)
-
-// Surface security factor
-#define SURFACE_DESAT_FACTOR    0.7042
+
+// ambient pressure at different mountain heights
+#define P_ambient_1000m					0.880	// [bar]  based on 990 hPa and 20°C at sea level, 15°C at altitude
+#define P_ambient_2000m					0.782	// [bar]
+#define P_ambient_3000m					0.695	// [bar]
+
+// ambient pressure in aircraft cabin during flying - worst case according to Buhlmann
+#define P_ambient_fly					0.600	// [bar], 0.600 bar is the value used by Buhlmann for his flying-after-diving calculations
+												//		  0.735 bar is a typical cabin pressure for nowadays commercial jet aircrafts
+												//        -----
+												//        0.135 bar safety margin
+
+// constants and factors
+#define ppWater        					0.0627	// water vapor partial pressure in the lungs
+#define METER_TO_BAR   					0.09985	// conversion factor
+#define BAR_TO_METER   					10.0150	// conversion factor (1.0/METER_TO_BAR)						
+#define SURFACE_DESAT_FACTOR    		0.7042	// surface desaturation safety factor
+#define HYST							1.0E-06	// threshold for tissue graphics on-gassing / off-gassing visualization
+
+// thresholds
+#define GF_warning_threshold			100		// threshold for GF   warning (attention threshold is current GF_high)
+#define CNS_warning_threshold			100		// threshold for CNS  warning
+#define CNS_prewarning_threshold		 70		// threshold for CNS  attention
+#define ppO2_prewarn_threshold			120		// threshold for ppO2 attention (master warnings come through options_table.asm)
+#define GAS_NEEDS_ATTENTION_THRESHOLD	0.70	// threshold for gas needs attention
+
+// deco engine states and modes - char_O_deco_status
+#define DECO_STATUS_MASK				0x03
+#define DECO_STATUS_START				0x00
+#define DECO_STATUS_FINISHED			0x00
+#define DECO_STATUS_STOPS				0x01 
+#define DECO_STATUS_ASCENT				0x02
+#define DECO_STATUS_INIT				0x03
+
+#define DECO_MODE_MASK					0x0C
+#define DECO_MODE_LOOP					0x04
+#define DECO_MODE_CCR					0x04	// to be used with == operator in combination with DECO_MODE_MASK only!
+#define DECO_MODE_PSCR					0x08
+
+#define DECO_PLAN_ALTERNATE				0x10
+#define DECO_CNS_CALCULATE 				0x20
+#define DECO_VOLUME_CALCULATE	 		0x40
+#define DECO_ASCENT_DELAYED 			0x80
+
+// deco engine states and modes - char_O_main_status
+//#define DECO_MODE_MASK				0x0C
+//#define DECO_MODE_LOOP				0x04
+//#define DECO_MODE_CCR					0x04	// to be used with == operator in combination with DECO_MODE_MASK only!
+//#define DECO_MODE_PSCR				0x08
+#define DECO_GASCHANGE_OVRD 			0x10
+#define DECO_BOTTOM_CALCULATE			0x40
+
+
+// deco engine warnings
+#define	DECO_WARNING_IBCD				0x01
+#define	DECO_WARNING_IBCD_lock			0x02
+#define	DECO_WARNING_MBUBBLES 			0x04
+#define	DECO_WARNING_MBUBBLES_lock		0x08
+#define	DECO_WARNING_OUTSIDE			0x10
+#define	DECO_WARNING_OUTSIDE_lock		0x20
+#define DECO_WARNING_STOPTABLE_OVERFLOW	0x40
+#define DECO_FLAG						0x80
+
+// flags used with integer numbers
+#define INT_FLAG_INVALID				0x0400
+#define INT_FLAG_ZERO					0x0800
+#define INT_FLAG_LOW					0x1000
+#define	INT_FLAG_HIGH					0x2000
+#define INT_FLAG_PREWARNING				0x4000
+#define	INT_FLAG_WARNING				0x8000
+
+
 
 // *************************
 // ** P R O T O T Y P E S **
 // *************************
 
 static void calc_hauptroutine(void);
-static void calc_nullzeit(void);
-
-static void calc_tissue(PARAMETER unsigned char period);
-static void calc_limit(void);
-
-static void clear_tissue(void);
-static void calc_ascenttime(void);
-static void update_startvalues(void);
-static void clear_deco_table(void);
-static unsigned char update_deco_table(void);
-
-static void sim_tissue(PARAMETER unsigned char period);
-static void sim_limit(PARAMETER float GF_current);
-static void sim_extra_time(void);
-static void calc_dive_interval(void);
-
-static void calc_gradient_factor(void);
-static void calc_wo_deco_step_1_min(void);
-
 static void calc_hauptroutine_data_input(void);
 static void calc_hauptroutine_update_tissues(void);
 static void calc_hauptroutine_calc_deco(void);
+static void calc_tissue(void);
+static void calc_limit(void);
+static void calc_nullzeit(void);
+static void calc_ascenttime(void);
+static void calc_dive_interval(void);
+static void calc_gradient_factor(void);
+static void calc_wo_deco_step_1_min(void);
+static void calc_desaturation_time(void);
+
+static void sim_extra_time(void);
 static void sim_ascent_to_first_stop(void);
-
-static unsigned char gas_switch_deepest(void);
+static void sim_limit(PARAMETER float GF_current);
+
+static void update_startvalues(void);
 static void gas_switch_set(void);
-
+static void compute_CNS_for_display(void);
+
+static void clear_deco_table(void);
+static void clear_tissue(void);
+
+static unsigned char gas_find_better(void);
 static unsigned char calc_nextdecodepth(void);
+static unsigned char update_deco_table(PARAMETER unsigned char time_increment);
+
 
 //---- Bank 5 parameters -----------------------------------------------------
 #ifndef UNIX
 #   pragma udata bank5=0x500
 #endif
 
-static float			GF_low;
-static float			GF_high;
-static float			GF_delta;
-static float			locked_GF_step;             // GF_delta / low_depth
-
-static unsigned char    temp_depth_limit;
-float                   low_depth;                  // Depth of deepest stop
-
-// Simulation context: used to predict ascent.
-static unsigned char	sim_lead_tissue_no;         // Leading compatiment number.
-static float			sim_lead_tissue_limit;      // Buhlmann tolerated pressure.
-
-// Real context: what we are doing now.
-static float			calc_lead_tissue_limit;     //
-
-static unsigned char	internal_deco_time[NUM_STOPS];
-static unsigned char	internal_deco_depth[NUM_STOPS];
-
-static float cns_vault;
-static float low_depth_vault;
-static float pres_tissue_N2_vault[NUM_COMP];
-static float pres_tissue_He_vault[NUM_COMP];
+// general deco parameters
+
+static float			GF_low;							// initialized from deco parameters, constant during all computations
+static float			GF_high;						// initialized from deco parameters, constant during all computations
+static float			GF_delta;						// initialized from deco parameters, constant during all computations
+static float			locked_GF_step_norm;			// GF_delta / low_depth_norm in normal plan
+static float			locked_GF_step_alt;				// GF_delta / low_depth_alt  in alternative plan
+
+static float			low_depth_norm;					// Depth of deepest stop in normal plan
+static float			low_depth_alt;					// Depth of deepest stop in alternative plan
+
+static float			float_ascent_speed;				// ascent speed from options_table (1.0 .. 10.0 m/min)
+static float			float_saturation_multiplier;    // safety factor for on-gassing rates
+static float			float_desaturation_multiplier;  // safety factor for off-gassing rates
+static float			float_deco_distance;            // additional depth below stop depth for tissue, CNS and gas volume calculation
+
+
+// real context: what we are doing now.
+
+static float			calc_lead_tissue_limit;     	// minimum tolerated ambient pressure by Buhlmann model
+static float			CNS_fraction;                   // current CNS (1.00 = 100%)
+
+static unsigned short	deco_tissue_vector;				// 32 bit vector to memories all tissues that are in decompression
+static unsigned short	IBCD_tissue_vector;				// 32 bit vector to memories all tissues that experience IBCD
+
+// simulation context: used to predict ascent.
+
+static float			sim_lead_tissue_limit;			// minimum tolerated ambient pressure by Buhlmann model
+static float			CNS_sim_norm_fraction;			// CNS at end of dive in normal plan
+static float			CNS_sim_alt_fraction;			// CNS at end of dive in alternative plan
+
+static unsigned char	temp_depth_limit;				// depth of next stop in meters, used in deco calculations
+static unsigned char	sim_lead_tissue_no;				// Leading compartment number
+static unsigned char	split_N2_He[NUM_COMP];			// used for calculating the desaturation time
+
+
+// stops table
+
+static unsigned char	internal_deco_depth[NUM_STOPS];	// depth of the stop
+static unsigned char	internal_deco_time[NUM_STOPS];	// duration of the stop
+static unsigned char	internal_deco_gas[NUM_STOPS];	// gas used at the stop
+
+
+// transfer variables between calc_desaturation_time() and calc_desaturation_time_helper()
+
+static float			desat_factor;					// used to cache a pre-computed factor
+static float			var_ht;							// buffer for a half-time factor
+static float 			pres_target;					// target pressure for a compartment
+static float			pres_actual;					// current pressure of the compartment
+static unsigned short	short_time;						// time it takes for the compartment to reach the target pressure
+
+// transfer variables between gas_volumes() and gas_volumes_helper()
+static float			float_depth;					// depth of the stop or half-way point
+static float			float_time;						// duration of the stop or ascent phase
+static float			volume;							// computed volume of gas
+static unsigned char	usage;							// gas usage in l/min
+
+
+// 44 byte free space left in this bank
+
 
 //---- Bank 6 parameters -----------------------------------------------------
 #ifndef UNIX
 #   pragma udata bank6=0x600
 #endif
 
-static unsigned char	ci;
-static float            pres_respiration;
-static float            pres_surface;
-static float            temp_deco;
-static float            ppN2;
-static float            ppHe;
-static float            temp_tissue;
-static float            N2_ratio;                       // Breathed gas nitrogen ratio.
-static float            He_ratio;                       // Breathed gas helium ratio.
-static float            var_N2_a;                       // Buhlmann a, for current N2 tissue.
-static float            var_N2_b;                       // Buhlmann b, for current N2 tissue.
-static float            var_He_a;                       // Buhlmann a, for current He tissue.
-static float            var_He_b;                       // Buhlmann b, for current He tissue.
-static float            var_N2_e;                       // Exposition, for current N2 tissue.
-static float            var_He_e;                       // Exposition, for current He tissue.
-static float            var_N2_ht;                      // Half-time for current N2 tissue.
-static float            var_He_ht;                      // Half-time for current N2 tissue.
-
-static float            pres_diluent;                   // new in v.101
-static float            const_ppO2;                     // new in v.101
-
-static unsigned char    sim_gas_last_depth;             // Depth of last used gas, to detected a gas switch.
-static unsigned char    sim_gas_last_used;              // Number of last used gas, to detected a gas switch.
-static unsigned short   sim_dive_mins;                  // Simulated dive time.
-static float            calc_N2_ratio;                  // Simulated (switched) nitrogen ratio.
-static float            calc_He_ratio;                  // Simulated (switched) helium ratio.
-static float            CNS_fraction;                   // new in v.101
-static float            float_saturation_multiplier;    // new in v.101
-static float            float_desaturation_multiplier;  // new in v.101
-static float            float_deco_distance;            // new in v.101
-
-static unsigned char    deco_gas_change[NUM_GAS];       // new in v.109
-static unsigned char	internal_deco_gas  [NUM_STOPS];
+// indexing and sequencing
+
+static unsigned char	ci;								// used as index to the Buhlmann tables
+static unsigned char	twosectimer = 0;				// used for timing the tissue updating
+static unsigned char	tissue_increment;				// Selector for real/simulated tissues and time increment
+
+
+// environmental and gas data
+
+static float            pres_respiration;				// current depth in absolute pressure
+static float            pres_surface;					// absolute pressure at the surface
+static float            temp_deco;						// simulated current depth in abs.pressure, used for deco calculations
+
+static unsigned char	bottom_depth;					// bottom depth in meters, used by CNS and gas needs calculation
+
+static float            O2_ratio;                       // real breathed gas oxygen ratio
+static float            N2_ratio;                       // real breathed gas nitrogen ratio
+static float            He_ratio;                       // real breathed gas helium ratio
+
+static float			calc_O2_ratio;					// simulated breathed gas oxygen ratio
+static float			calc_N2_ratio;                  // simulated breathed gas nitrogen ratio
+static float			calc_He_ratio;                  // simulated breathed gas helium ratio
+
+static float			O2_ppO2;						// ppO2 - calculated for pure oxygen at current depth
+static float			pSCR_ppO2;						// ppO2 - calculated for breathed from pSCR loop
+static float			pure_ppO2;						// ppO2 - calculated for breathed in OC mode
+
+static unsigned char	char_actual_ppO2;				// ppO2 - assumed to be breathed, as integer 100 = 1.00 bar
+
+static float			breathed_ppO2;					// partial pressure of breathed oxygen
+static float            ppN2;							// partial pressure of breathed nitrogen
+static float            ppHe;							// partial pressure of breathed helium
+
+
+// Buhlmann model parameters
+
+static float            var_N2_a;                       // Buhlmann a, for current N2 tissue
+static float            var_N2_b;                       // Buhlmann b, for current N2 tissue
+static float            var_He_a;                       // Buhlmann a, for current He tissue
+static float            var_He_b;                       // Buhlmann b, for current He tissue
+static float            var_N2_e;                       // exposition, for current N2 tissue
+static float            var_He_e;                       // exposition, for current He tissue
+static float            var_N2_ht;                      // half-time for current N2 tissue
+static float            var_He_ht;                      // half-time for current N2 tissue
+
+
+// gas switch history
+
+static unsigned char	sim_gas_first_used;				// Number of first used gas, for bottom segment
+static unsigned char    sim_gas_last_used;              // number of last  used gas
+static unsigned char    sim_gas_last_depth;             // change depth of last used gas
+
+
+// vault to back-up & restore tissue data
+
+static float			pres_tissue_N2_vault[NUM_COMP];	// stores the nitrogen tissue pressures
+static float			pres_tissue_He_vault[NUM_COMP];	// stores the helium tissue pressures
+static float			low_depth_norm_vault;			// stores a parameter of the GF model for normal plan
+static float			low_depth_alt_vault;			// stores a parameter of the GF model for alternative plan
+static float			cns_vault_float;				// stores current CNS (float representation)
+
+static unsigned int		cns_vault_int;					// stores current CNS (integer representation)
+static unsigned char	deco_warnings_vault;			// stores warnings status
+
+
+// auxiliary variables for local data buffering
+
+static float 			N2_equilibrium;					// used for N2 tissue graphics scaling
+static float            temp_tissue;					// auxiliary variable to buffer tissue pressures
+
+
+// 6 byte free space left in this bank
+
 
 //---- Bank 7 parameters -----------------------------------------------------
 #ifndef UNIX
 #   pragma udata bank7=0x700
 #endif
-    // Keep order of 0x700 variables
-float  pres_tissue_N2[NUM_COMP];
-float  pres_tissue_He[NUM_COMP];
-float  sim_pres_tissue_N2[NUM_COMP];             // 16 floats = 64 bytes.
-float  sim_pres_tissue_He[NUM_COMP];             // 16 floats = 64 bytes.
+
+// Keep order and position of the variables in bank 7 as they are backed-up to & restored from EEPROM 
+
+float					pres_tissue_N2[NUM_COMP];		// 16 floats = 64 bytes
+float					pres_tissue_He[NUM_COMP];		// 16 floats = 64 bytes
+float					sim_pres_tissue_N2[NUM_COMP];	// 16 floats = 64 bytes
+float					sim_pres_tissue_He[NUM_COMP];	// 16 floats = 64 bytes
+
 
 //---- Bank 8 parameters -----------------------------------------------------
 #ifndef UNIX
 #   pragma udata overlay bank8=0x800
-    static char	  md_pi_subst[256];
-#   define C_STACK md_pi_subst      // Overlay C-code data stack here, too.
+
+static char	  md_pi_subst[256];				// Overlay C-code data stack here, too.
+
+#   define C_STACK md_pi_subst
 #endif
 
 // Back to bank6 for further tmp data
@@ -256,10 +381,10 @@
 // End of PROM code is 17F00, So push tables on PROM top...
 //
 #ifndef UNIX
-#   pragma romdata buhlmann_tables = 0x1DD00  // Needs to be in UPPER bank.
+#   pragma romdata Buhlmann_tables = 0x1DD00  // Needs to be in UPPER bank.
 #endif
 
-rom const float buhlmann_ab[4*16] = {
+rom const float Buhlmann_ab[4*16] = {
 // Data ZH-L16C, from Bühlmann Tauchmedizin 2002, option 1a (4mn)
 // a for N2    b for N2     a of He     b for He
 	1.2599,     0.5050,     1.7424,     0.4245,
@@ -280,9 +405,9 @@
 	0.2327,     0.9653,     0.5119,     0.9267
 };
 
-rom const float buhlmann_ht[2*16] = {
-// Compartiment half-life, in minute
-//-- N2 ---- He ---------------------------------------------------------------------
+rom const float Buhlmann_ht[2*16] = {
+// Compartment half-life, in minute
+//--- N2 ---- He ----------------------
 	  4.0,    1.51,
 	  8.0,    3.02,
 	 12.5,    4.72,
@@ -302,7 +427,7 @@
 };
 
 rom const float e2secs[2*16] = {
-// result of  1 - 2^(-1/(30sec*HT))
+// result of  1 - 2^(-1/(2sec*HT))
 //---- N2 ------------- He ------------
 	5.75958E-03,    1.51848E-02,  
 	2.88395E-03,    7.62144E-03,
@@ -428,7 +553,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 // Fast subroutine to read timer 5.
-// Note: result is in 1/32 of msecs (30,51757813 us/bit to be precise)
+// Note: result is in 1/32 of milliseconds (30,51757813 us/bit to be precise)
 static unsigned short tmr5(void)
 {
 #ifndef CROSS_COMPILE
@@ -441,11 +566,10 @@
 #endif
 }
 
-
 //////////////////////////////////////////////////////////////////////////////
-// read buhlmann tables A and B for compatriment ci
+// read Buhlmann tables A and B for compartment ci
 //
-static void read_buhlmann_coefficients(void)
+static void read_Buhlmann_coefficients(void)
 {
 #ifndef CROSS_COMPILE
     // Note: we don't use far rom pointer, because the
@@ -463,7 +587,7 @@
     // Use an interleaved array (AoS) to access coefficients with a
     // single addressing.
     {
-        overlay rom const float* ptr = &buhlmann_ab[4*ci];
+        overlay rom const float* ptr = &Buhlmann_ab[4*ci];
         var_N2_a = *ptr++;
         var_N2_b = *ptr++;
         var_He_a = *ptr++;
@@ -472,11 +596,11 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// read buhlmann tables for compatriment ci
+// read Buhlmann tables for compartment ci
 // If period == 0 : 2sec interval
 //              1 : 1 min interval
 //              2 : 10 min interval.
-static void read_buhlmann_times(PARAMETER char period)
+static void read_Buhlmann_times(PARAMETER char period)
 {
 #ifndef CROSS_COMPILE
     // Note: we don't use far rom pointer, because the
@@ -524,9 +648,9 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// read buhlmann tables for compatriment ci
+// read Buhlmann tables for compartment ci
 //
-static void read_buhlmann_ht(void)
+static void read_Buhlmann_ht(void)
 {
 
 #ifndef CROSS_COMPILE
@@ -542,7 +666,7 @@
 
     assert( ci < NUM_COMP );
     {
-        overlay rom const float* ptr = &buhlmann_ht[2*ci];
+        overlay rom const float* ptr = &Buhlmann_ht[2*ci];
         var_N2_ht = *ptr++;
         var_He_ht = *ptr++;
     }
@@ -557,8 +681,7 @@
 // new in v.102
 //
 // INPUT, changing during dive:
-//      temp_deco
-//      low_depth
+//      temp_deco : current depth in absolute pressure
 //
 // INPUT, fixed during dive:
 //      pres_surface
@@ -566,139 +689,200 @@
 //      GF_high
 //      GF_low
 //      char_I_depth_last_deco
-//      float_deco_distance
 //
-// RETURN TRUE iff a stop is needed.
+// MODIFIED
+//      locked_GF_step_norm/_alt : used for GF model
+//      low_depth_norm/_alt      : used for GF model
 //
 // OUTPUT
-//      locked_GF_step
-//      temp_depth_limt
-//      low_depth
+//      temp_depth_limit : depth of next stop in meters        (if RETURN == true )
+//                         depth we can ascent to without stop (if RETURN == false)
+//
+// RETURN TRUE if a stop is needed.
 //
 static unsigned char calc_nextdecodepth(void)
 {
-    //--- Max ascent speed ---------------------------------------------------
-    // Recompute leading gas limit, at current depth:
+    overlay unsigned char need_stop;
+	
+	// compute current depth in meters
     overlay float depth = (temp_deco - pres_surface) * BAR_TO_METER;
 
-    // At most, ascent 1 minute, at 10m/min == 10.0 m.
-    overlay float min_depth = (depth > 10.0) ? (depth - 10.0) : 0.0;
-
-    // Do we need to stop at current depth ?
-    overlay unsigned char need_stop = 0;
-
-    assert( depth >= -0.2 );        // Allow for 200mbar of weather change.
-
-    //---- ZH-L16 + GRADIENT FACTOR model ------------------------------------
+    // compute depth in meters after 1 minute of ascent at float_ascent_speed (5..10 m/min)
+    overlay float min_depth = (depth > float_ascent_speed) ? (depth - float_ascent_speed) : 0.0;
+
+	
+	 // allow for 200mbar of weather dependent surface pressure change
+    assert( depth >= -0.2 );       
+
+
+	//---- check if a stop is needed for deco reasons ----------------------------
+	
+    // switch on deco model
     if( char_I_deco_model != 0 )
     {
+		//---- ZH-L16 + GRADIENT FACTOR Model ------------------------------------
+		
+		overlay float locked_GF_step;
+		overlay float low_depth;
+		overlay float pres_gradient;
+
         overlay unsigned char first_stop = 0;
-        overlay float p;
-
+		
+				
+		// calculate minimum depth we can ascent to in absolute pressure
         sim_limit( GF_low );
-        p = sim_lead_tissue_limit - pres_surface;
-        if( p <= 0.0f )
-            goto no_deco_stop;          // We can surface directly...
-
-        p *= BAR_TO_METER;
-
+		
+		// ...and convert the depth into relative pressure
+        pres_gradient = sim_lead_tissue_limit - pres_surface;	
+
+		// check if we can surface directly
+        if( pres_gradient <= 0.0 )
+		{
+			min_depth = 0.0;		// set minimum depth to 0 meters = surface
+			goto no_deco_stop;		// done.
+		}
+
+		// convert minimum depth we can ascent to from relative pressure to depth in meters
+        pres_gradient *= BAR_TO_METER;							
+
+		// recall low_depth dependent on current plan
+		low_depth = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? low_depth_alt : low_depth_norm;
+		
         // Store the deepest point needing a deco stop as the LOW reference for GF.
-        // NOTE: following stops will be validated using this LOW-HIGH gf scale,
+        // NOTE: following stops will be validated using this LOW-HIGH GF scale,
         //       so if we want to keep coherency, we should not validate this stop
         //       yet, but apply the search to it, as for all the following stops afterward.
-        if( p > low_depth )
+        if( pres_gradient > low_depth )
         {
-            low_depth = p;
+			// update GF parameters
+            low_depth      = pres_gradient;
             locked_GF_step = GF_delta / low_depth;
+			
+			// store updated GF parameters dependent on current plan
+			if( char_O_deco_status & DECO_PLAN_ALTERNATE )
+			{
+				low_depth_alt       = low_depth;
+				locked_GF_step_alt  = locked_GF_step;
+			}
+			else
+			{
+				low_depth_norm      = low_depth;
+				locked_GF_step_norm = locked_GF_step;
+			}
         }
-
-        if( p < min_depth )
-            goto no_deco_stop;          // First stop is higher than 1' ascent.
-
-        // Round to multiple of 3m.
-        first_stop = 3 * (short)(0.9995f + p*0.333333f);
+		else
+		{
+			// recall locked_GF_step dependent on current plan
+			locked_GF_step = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? locked_GF_step_alt : locked_GF_step_norm;
+		}
+
+		// invalidate this stop if we can ascent for 1 minute without going above minimum required deco depth
+        if( pres_gradient < min_depth ) goto no_deco_stop;         
+
+		
+		// if program execution passes here, we need a deco stop
+		
+        // Round to multiple of 3 meters
+        first_stop = 3 * (unsigned char)(0.9995 + pres_gradient * 0.333333);
+
+		// check a constraint
         assert( first_stop < 128 );
 
-        // Apply correction for the shallowest stop.
-        if( first_stop == 3 )                           // new in v104
-            first_stop = char_I_depth_last_deco;        // Use last 3m..6m instead.
+        // apply correction for the shallowest stop, use char_I_depth_last_deco (3..6 m) instead
+        if( first_stop == 3 ) first_stop = char_I_depth_last_deco;
 
         // We have a stop candidate.
         // But maybe ascending to the next stop will diminish the constraint,
-        // because the GF might decrease more than the preassure gradient...
+        // because the GF might decrease more than the pressure gradient...
         while(first_stop > 0)
         {
-            overlay unsigned char next_stop;            // Next depth (0..90m)
-
-            // Check max speed, or reaching surface.
-            if( first_stop <= min_depth )
-                goto no_deco_stop;
-
-            if( first_stop <= char_I_depth_last_deco )  // new in v104
-                next_stop = 0;
-            else if( first_stop == 6 )
-                next_stop = char_I_depth_last_deco;
-            else
-                next_stop = first_stop - 3;             // Index of next (upper) stop.
-
-            // Total preassure at the new stop candidate:
-            p = next_stop * METER_TO_BAR
-              + pres_surface;
-
-            // Recompute limit for this new stop:
-            if( !low_depth || next_stop > low_depth )
-                sim_limit( GF_low );
-            else
-                sim_limit( GF_high - next_stop * locked_GF_step );
-
-            // Check upper limit (lowest ambiant pressure tolerated):
-            if( sim_lead_tissue_limit >= p )
-                goto deco_stop_found;       // Ascent to next_stop forbiden.
-
-            // Else, validate that stop and loop...
+			// Next depth
+            overlay unsigned char next_stop;            
+
+            // invalidate this stop if we can ascent one more minute without going above minimum required deco depth
+            if( first_stop <= (unsigned char)min_depth ) goto no_deco_stop;
+
+			// compute depth of next stop
+            if      ( first_stop <= char_I_depth_last_deco ) next_stop = 0;
+            else if ( first_stop == 6                      ) next_stop = char_I_depth_last_deco;
+            else                                             next_stop = first_stop - 3;
+
+            // compute total pressure at the new stop candidate
+            pres_gradient = next_stop * METER_TO_BAR + pres_surface;
+
+            // compute limit for the new stop candidate
+            if( (low_depth == 0.0) || (next_stop > low_depth) ) sim_limit( GF_low );
+            else                                                sim_limit( GF_high - next_stop * locked_GF_step );
+
+            // check if ascent to the next stop candidate is possible
+            if( sim_lead_tissue_limit >= pres_gradient ) goto deco_stop_found;	// no - ascent to next_stop forbidden
+
+            // else, validate that stop and loop...
             first_stop = next_stop;
         }
 
 no_deco_stop:
-        temp_depth_limit = min_depth;
-        goto done;
+		need_stop        = 0;              				// set flag for stop needed to 'no'
+		temp_depth_limit = (unsigned char)min_depth;	// report depth we can ascent to without stop
+		goto done;
 
 deco_stop_found:
-        // next stop is the last validated depth found, aka first_stop
-        need_stop = 1;                  // Hit.
-        temp_depth_limit = first_stop;  // Stop depth, in meter.
+		need_stop        = 1;              				// set flag for stop needed to 'yes'
+		temp_depth_limit = (unsigned char)first_stop;	// stop depth, in meters
 
 done:
         ;
     }
-    else //---- ZH-L16 model -------------------------------------------------
+    else
     {
+		//---- ZH-L16 model -------------------------------------------------
+		
         overlay float pres_gradient;
 
-        // Original model
-        // optimized in v.101
-        // char_I_depth_last_deco included in v.101
-
-        // Compute sim_lead_tissue_limit too, but just once.
+		
+        // calculate minimum depth we can ascent to in absolute pressure
         sim_limit(1.0);
 
+		// ...and convert the depth into relative pressure 
         pres_gradient = sim_lead_tissue_limit - pres_surface;
+
+		// check if we can surface directly
         if (pres_gradient >= 0)
         {
-            pres_gradient *= BAR_TO_METER/3;                        // bar --> stop number;
-            temp_depth_limit = 3 * (short) (pres_gradient + 0.99);  // --> metre : depth for deco
-            need_stop = 1;                                          // Hit.
-
-            // Implement last stop at 4m/5m/6m...
-            if( temp_depth_limit == 3 )
-                temp_depth_limit = char_I_depth_last_deco;
+			// no - set flag for stop needed to 'yes'
+            need_stop = 1;
+
+			// convert stop depth in relative pressure to stop index
+            pres_gradient *= BAR_TO_METER / 3;
+
+			// convert stop index to depth in meters, rounded to multiple of 3 meters
+            temp_depth_limit = 3 * (short) (pres_gradient + 0.99);
+
+            // correct last stop to 4m/5m/6m
+            if( temp_depth_limit == 3 ) temp_depth_limit = char_I_depth_last_deco;
         }
         else
+		{
+			// yes - set flag for stop needed to 'no'
+			need_stop        = 0;
+			
+			// set depth we can ascent to as 0 = surface
             temp_depth_limit = 0;
+		}
     }
 
-    //---- Check gas change --------------------------------------------------
-    need_stop |= gas_switch_deepest();  // Update temp_depth_limit if there is a change,
+	
+	// After the first deco stop, gas changes are only done at deco stops now!
+	
+	// check if a stop is found and there is a better gas to switch to
+	if( need_stop && gas_find_better() )
+	{
+		// set the new calculation ratios for N2, He and O2
+		gas_switch_set();
+
+		// prime the deco stop with the gas change time
+		update_deco_table(char_I_gas_change_time); 
+	}
 
     return need_stop;
 }
@@ -743,13 +927,13 @@
         //---- Third: fill table end with null
         for(y++; y<NUM_STOPS; y++)
         {
-            char_O_deco_time_for_log [y] = 0;
+            char_O_deco_time_for_log[y] = 0;
         }
     }
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// temp_tissue_safety //
+// temp_tissue_safety
 //
 // outsourced in v.102
 //
@@ -760,10 +944,8 @@
     assert( 0.0 <  float_desaturation_multiplier && float_desaturation_multiplier <= 1.0 );
     assert( 1.0 <= float_saturation_multiplier   && float_saturation_multiplier   <= 2.0 );
 
-        if( temp_tissue < 0.0 )
-            temp_tissue *= float_desaturation_multiplier;
-        else
-            temp_tissue *= float_saturation_multiplier;
+	if( temp_tissue < 0.0 ) temp_tissue *= float_desaturation_multiplier;
+	else                    temp_tissue *= float_saturation_multiplier;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -774,19 +956,18 @@
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
-// Called every 2 seconds during diving.
-// update tissues every time.
+// Called every second during diving.
+// updates tissues every second invocation.
 //
-// Every 6 seconds (or slower when TTS > 16):
-//    - update deco table (char_O_deco_time/depth) with new values.
-//    - update ascent time,
-//    - set status to zero (so we can check there is new results).
+// Every few seconds (or slower when TTS > 16):
+//    - updates deco table (char_O_deco_time/depth) with new values.
+//    - updates ascent time,
+//    - sets status to zero (so we can check there is new results).
 //
 void deco_calc_hauptroutine(void)
 {
     RESET_C_STACK
     calc_hauptroutine();
-    int_O_desaturation_time = 65535;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -801,22 +982,19 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// Called every 1 min during decoplanning.
-// Update tissues for 1 min.
-//
-void deco_calc_tissue(void)
-{
-    RESET_C_STACK
-    calc_hauptroutine_update_tissues();
-}
-
-//////////////////////////////////////////////////////////////////////////////
 
 void deco_calc_wo_deco_step_1_min(void)
 {
     RESET_C_STACK
     calc_wo_deco_step_1_min();
-    deco_calc_desaturation_time();
+ }
+
+//////////////////////////////////////////////////////////////////////////////
+
+void deco_calc_desaturation_time(void)
+{
+    RESET_C_STACK
+    calc_desaturation_time();
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -828,144 +1006,255 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// Find current gas in the list (if any).
+// deco_calc_CNS_decrease_15min
 //
-// Input:  char_I_current_gas = 1..6
+// new in v.101
 //
-// Output: sim_gas_last_depth = 0..5, temp_depth_limit.
+// calculates the half time of 90 minutes in 6 steps of 15 min
+// (Used in sleep mode, for low battery mode).
 //
-static void gas_switch_find_current(void)
+// Output: int_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+//
+void deco_calc_CNS_decrease_15min(void)
 {
-    assert( 0 < char_I_current_gas && char_I_current_gas <= (2*NUM_GAS) );
-
-    if( char_I_current_gas <= NUM_GAS )                 // Gas1..Gas5
+    RESET_C_STACK
+ 
+	// clock down CNS
+    CNS_fraction =  0.890899 * CNS_fraction;
+	
+	// compute integer copy of CNS value
+	compute_CNS_for_display();
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Find current gas in the list (if any) and get its change depth
+//
+// Input:  char_I_current_gas : 1..5 or 6
+//
+// Output: sim_gas_last_used  : 1..6 or 0 if it is the gas set as FIRST
+//         sim_gas_last_depth : change depth in meters or 0 if it is the gas set as FIRST
+//
+static void gas_find_current(void)
+{
+    assert( 1 <= char_I_current_gas && char_I_current_gas <= 6 );
+
+    if( char_I_current_gas <= NUM_GAS )					// Gas 1-5
     {
-        sim_gas_last_used  = char_I_current_gas;
-
-        // Note: if current is first gas, we must find it, but not set
-        //       last depth change to surface.
-        if( char_I_deco_gas_change[sim_gas_last_used-1] )
-            sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1];
+        sim_gas_last_used = sim_gas_first_used = char_I_current_gas;
+
+        // If current gas is a deco gas get it's change depth.
+		// Set change depth to 0 if the current gas is the first gas or 
+		// a travel/normal gas, i.e. if it can be breathed at "any" depth.
+        if( char_I_deco_gas_change[sim_gas_last_used-1] ) sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1];
+		else                                              sim_gas_last_depth = 0;
     }
     else
-        sim_gas_last_used = 0;                          // Gas 6 = manual set
+	{
+        sim_gas_last_used = sim_gas_first_used = 0;		// Gas 6 (the manually set one) has number 0 here
+		sim_gas_last_depth                     = 0;		// handle it as a travel/normal gas
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Find the deco gas with the shallowest change depth beyond current depth
+//
+// INPUT   temp_depth_limit	        : current depth in meters
+//         char_I_deco_gas_change[] : change depths of the deco gases
+//		   sim_gas_last_depth       : change depth of the currently used gas, 0 if on the gas set as FIRST
+//
+// OUTPUT  sim_gas_last_depth       : switch depth            - only if return value is true
+//         sim_gas_last_used        : index of the gas (1..5) - only if return value is true
+//
+// RETURNS TRUE if a better gas is available
+//
+static unsigned char gas_find_better(void)
+{
+	overlay unsigned char switch_depth = 255;
+	overlay unsigned char switch_gas   = 0;
+	overlay unsigned char j;
+	
+	
+	// no automatic gas changes in CCR mode and - as of now - in pSCR mode
+	if( char_O_deco_status & DECO_MODE_LOOP ) return 0;
+
+	// Loop over all deco gases to find the shallowest one below or at current depth.
+	for(j=0; j<NUM_GAS; ++j)
+	{
+		// Is this the gas we are already breathing?
+		// If yes, skip this gas.
+		if( j+1 == sim_gas_last_used ) continue;
+
+		// Is the change depth of the gas shallower than the current depth?
+		// If yes, skip this gas as it is not to be used yet.
+		// Remark: this check will also skip all disabled gases and the gas set
+		//         as 'first' because these have their change depth set to 0.
+		if( temp_depth_limit > char_I_deco_gas_change[j] ) continue;
+
+		// Is the change depth of the gas deeper than the change depth of the
+		// gas we are currently one?
+		// If yes, skip this gas as it is not better than the current one.
+		// Remark: if there is more than one gas with the same change depth,
+		//         the last one from the list will be taken.
+		if( sim_gas_last_depth && (char_I_deco_gas_change[j] > sim_gas_last_depth) ) continue;
+
+		// Is the change depth of the gas shallower or equal to the change depth
+		// of the best gas found so far, or is it the first better gas found?
+		// If yes, we have a better gas
+		if( char_I_deco_gas_change[j] <= switch_depth )
+		{
+			switch_gas   = j+1;							// remember this gas (1..5)
+			switch_depth = char_I_deco_gas_change[j];	// remember its change depth
+		}
+	}	// continue looping through all gases to eventually find an even better gas
+
+	// has a better gas been found?
+	if( switch_gas )
+	{
+		// yes
+		sim_gas_last_used  = switch_gas;				// report the index of the better
+		sim_gas_last_depth = switch_depth;				// report its change depth
+
+		assert( sim_gas_last_depth < switch_depth );
+		
+		return 1;										// signal a better gas was found
+	}
+	else
+	{
+		return 0;										// signal no better gas was found
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// Find deepest available gas.
-//
-// Input:  temp_depth_limit,
-//         deco_gas_change[]
-//         sim_gas_depth_used, sim_dive_mins.
-//
-// RETURNS TRUE if a stop is needed for gas switch.
+// Set calc_N2/He/O2_ratios by sim_gas_last_used
 //
-// Output: temp_depth_limit, sim_gas_depth_used IFF the is a switch.
+// Input:  sim_gas_last_used  : index of gas to use
+//         N2_ratio, He_ratio : if gas 0 = the manually set gas is in use
 //
-// NOTE: might be called from bottom (when sim_gas_delay and sim_gas_depth_used
-//       are null), or during the ascent to make sure we are not passing a
-//       stop (in which case both can be already set).
+// Output: calc_N2_ratio, calc_He_ratio, calc_O2ratio
 //
-static unsigned char gas_switch_deepest(void)
+static void gas_switch_set(void)
 {
-    overlay unsigned char switch_deco = 0, switch_last = 0;
-
-    if (char_I_const_ppO2 == 0)
-    {
-        overlay unsigned char j;
-
-        // Loop over all enabled gas, to find the deepest one,
-        // above last used gas, but below temp_depth_limit.
-        for(j=0; j<NUM_GAS; ++j)
-        {
-            // Gas not (yet) allowed ? Skip !
-            if( temp_depth_limit > deco_gas_change[j] )
-                continue;
-
-            // Gas deeper (or equal) than the current one ? Skip !
-            if( sim_gas_last_depth && deco_gas_change[j] >= sim_gas_last_depth )
-                continue;
-
-            // First, or deeper ?
-            if( switch_deco < deco_gas_change[j] )
-            {
-                switch_deco = deco_gas_change[j];
-                switch_last = j+1;  // 1..5
-            }
-        }
-    }
-
-    // If there is a better gas available
-    if( switch_deco )
-    {
-        assert( !sim_gas_last_depth || sim_gas_last_depth > switch_deco );
-
-        sim_gas_last_depth = switch_deco;
-        sim_gas_last_used  = switch_last;
-    }
-    return 0;
+	assert( 0 <= sim_gas_last_used <= NUM_GAS );
+
+	if( sim_gas_last_used == 0 )    // Gas6 = manually set gas.
+	{
+		calc_O2_ratio = O2_ratio;
+		calc_He_ratio = He_ratio;
+	}
+	else
+	{
+	calc_O2_ratio = char_I_deco_O2_ratio[sim_gas_last_used-1] * 0.01;
+	calc_He_ratio = char_I_deco_He_ratio[sim_gas_last_used-1] * 0.01;
+	}
+
+	calc_N2_ratio = 1.0 - calc_O2_ratio - calc_He_ratio;
+
+	assert( 0.0 <= calc_N2_ratio && calc_N2_ratio <= 0.95 );
+	assert( 0.0 <= calc_He_ratio && calc_He_ratio <= 1.00 );
+	assert( (calc_N2_ratio + calc_He_ratio) <= 1.00 );
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// Calculate gas switches
-//
-//
-// Input:  N2_ratio, He_ratio.
-//         sim_gas_last_used
-//
-// Output: calc_N2_ratio, calc_He_ratio
-//
-static void gas_switch_set(void)
-{
-    assert( sim_gas_last_used <= NUM_GAS );
-
-    if( sim_gas_last_used == 0 )    // Gas6 = manualy set gas.
-    {
-        calc_N2_ratio = N2_ratio;
-        calc_He_ratio = He_ratio;
-    }
-    else
-    {
-        calc_N2_ratio = char_I_deco_N2_ratio[sim_gas_last_used-1] * 0.01;
-        calc_He_ratio = char_I_deco_He_ratio[sim_gas_last_used-1] * 0.01;
-    }
-
-    assert( 0.0 <= calc_N2_ratio && calc_N2_ratio <= 0.95 );
-    assert( 0.0 <= calc_He_ratio && calc_He_ratio <= 1.00 );
-    assert( (calc_N2_ratio + calc_He_ratio) <= 1.00 );
-}
-
-//////////////////////////////////////////////////////////////////////////////
+// Compute ppN2 and ppHe
 //
 // Input: calc_N2_ratio, calc_He_ratio : simulated gas mix.
-//        temp_deco : simulated respiration pressure
-//        float_deco_distance : security factor.
-//        Water-vapor pressure inside limbs (ppWater).
+//        temp_deco                    : simulated respiration pressure
+//        float_deco_distance          : safety factor
+//        ppWater                      : water-vapor pressure inside respiratory tract
 //
 // Output: ppN2, ppHe.
 //
 static void sim_alveolar_presures(void)
 {
-    overlay float deco_diluent = temp_deco;                 // new in v.101
+    overlay float deco_diluent = temp_deco;
+	
+	// read ppO2 reported from sensors or by setpoint		// TODO: can be deleted
+	// char_actual_ppO2 = char_I_const_ppO2;
+
 
     // Take deco offset into account, but not at surface.
-    // Note: this should be done on ambiant pressure, hence before
-    //       computing the diluant partial pressure...
-    if( deco_diluent > pres_surface )
-        deco_diluent += float_deco_distance;
-
-    //---- CCR mode : deco gas switch ? --------------------------------------
-    if( char_I_const_ppO2 != 0 )
+    // Note: this should be done on ambient pressure, hence before
+    //       computing the diluent partial pressure...
+    if( deco_diluent > pres_surface ) deco_diluent += float_deco_distance;
+
+	if( char_O_deco_status & DECO_MODE_LOOP )
     {
-        // In CCR mode, use calc_XX_ratio instead of XX_ratio.
-        // Note: PPO2 and ratios are known outside the lumbs, so there is no
-        //       ppWater in the equations below:
+		//---- Loop mode : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR)-------
+
+		// get current setpoint (CCR) or sensor value (CCR, for pSCR see text below) as default
+		overlay float const_ppO2 = char_I_const_ppO2 * 0.01;
+		
+		if( char_O_deco_status & DECO_MODE_PSCR )
+		{
+			//---- PSCR mode : compute loop gas ----------------------------------------
+			//
+			// As the ppO2 in the loop changes with water depth, we can not use the current
+			// sensor value as with CCR mode, but need to compute the ppO2 for the given depth.
+			// Then we continue with the CCR mode code which calculates the increases of ppN2
+			// and ppH2 due to the reduction of the ppO2 in the loop. Essentially, diving a
+			// PSCR is like diving a CCR with a setpoint lower than the ambient pressure x the
+			// O2 fraction of the diluent would yield...
+			//
+
+			// deco_diluent          is 0.0 ...     in bar
+			// calc_O2_ratio         is 0.0 ...   1 as factor
+			// char_I_PSCR_drop      is 0   ...  15 as %
+			// char_I_PSCR_lungratio is 5   ...  20 as %
+			// const_ppO2		     is 0.0 ...     in bar
+
+			const_ppO2 = (deco_diluent * calc_O2_ratio) - (1 - calc_O2_ratio) * 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
+		
+			// capture failure condition
+			if( const_ppO2 < 0.0 ) const_ppO2 = 0.0;
+		}		
+		else
+		{
+			
+			//---- CCR mode ------------------------------------------------------------ 
+		
+			// Limit the setpoint to the maximum physically possible ppO2. This prevents for
+			// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
+			// Additionally, if limiting occurs, the ppO2 can be further reduced to account
+			// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
+		
+			if( const_ppO2 > deco_diluent )		// no ppWater subtracted here to give some margin for
+			{										// sensors delivering data a little bit over target
+			
+				const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (deco_diluent - ppWater);
+			}
+		}
+
+		if      ( const_ppO2 == 0.0   ) char_actual_ppO2 =   0;
+		else if ( const_ppO2 >  2.545 )	char_actual_ppO2 = 255;
+		else                            char_actual_ppO2 = (unsigned char)(const_ppO2*100 + 0.5);
+
+        // Note: ppO2 and ratios are known outside the lungs, so there is no ppWater in the equations below:
         deco_diluent -= const_ppO2;
-        deco_diluent /= calc_N2_ratio + calc_He_ratio;// potential DIV/0 issue when O2 is used as diluent!
+        deco_diluent /= calc_N2_ratio + calc_He_ratio;
         
-        if(calc_N2_ratio==0&calc_He_ratio==0) deco_diluent = 0.0; // workaround for potential DIV/0 issue
+		// capture all failure conditions, including div/0 in case diluent is pure O2
+ 		if( (deco_diluent < 0.0) || (calc_O2_ratio > 99.5) )
+		{
+			deco_diluent = 0.0;
+			
+			char_actual_ppO2 = (unsigned char)(temp_deco*100 + 0.5);	// without float_deco_distance here as this situation
+																		// is likely to occur only at 6 meters or shallower
+		}
     }
-
+	else 
+	{
+		//---- OC mode: char_actual_ppO2 will be needed for CNS calculation later --------------------------------
+
+		overlay float ppO2 = pres_respiration * calc_O2_ratio;
+		
+		if   ( ppO2 > 2.545 ) char_actual_ppO2 = 255;
+		else                  char_actual_ppO2 = (unsigned char)(ppO2*100 + 0.5);
+	}
+
+	
     if( deco_diluent > ppWater )
     {
         ppN2 = calc_N2_ratio * (deco_diluent - ppWater);
@@ -976,6 +1265,7 @@
         ppN2 = 0.0;
         ppHe = 0.0;
     }
+
     assert( 0.0 <= ppN2 && ppN2 < 14.0 );
     assert( 0.0 <= ppHe && ppHe < 14.0 );
 }
@@ -990,30 +1280,35 @@
 //
 static void clear_tissue(void)
 {
-    overlay float p;
-
-    // Kludge: the 0.0002 of 0.7902 are missing with standard air.
-    N2_ratio = 0.7902;
-    pres_respiration = int_I_pres_respiration * 0.001;
-
-    p = N2_ratio * (pres_respiration -  ppWater);
+	pres_respiration = 0.001  * int_I_pres_respiration;
+	N2_equilibrium   = 0.7902 * (pres_respiration - ppWater);
+	
     for(ci=0; ci<NUM_COMP; ci++)
     {
         // cycle through the 16 Buhlmann N2 tissues
-        pres_tissue_N2[ci] = p;
-
-        // cycle through the 16 Buhlmann tissues for Helium
-        pres_tissue_He[ci] = 0.0;
+		pres_tissue_N2[ci] 				= N2_equilibrium;	// initialize data for "real" tissue
+		char_O_tissue_N2_saturation[ci] = 11;				// initialize data for tissue graphics
+			
+
+        // cycle through the 16 Buhlmann He tissues
+        pres_tissue_He[ci] 				= 0.0;				// initialize data for "real" tissue
+		char_O_tissue_He_saturation[ci] = 0;				// initialize data for tissue graphics
     }
 
+	clear_CNS_fraction();
+	
     clear_deco_table();
-    char_O_deco_status = 0;
-    char_O_nullzeit = 0;
-    int_O_ascenttime = 0;
-    char_O_gradient_factor = 0;
-
-    calc_lead_tissue_limit = 0.0;
-    char_O_gtissue_no = 0;
+	
+	char_O_main_status		= 0;
+    char_O_deco_status		= 0;
+    char_O_nullzeit			= 0;
+	char_O_gtissue_no		= 0;
+	char_O_deco_warnings	= 0;
+
+    int_O_ascenttime		= 0;
+    int_O_gradient_factor	= 0;
+
+	calc_lead_tissue_limit	= 0.0;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1024,100 +1319,344 @@
 //		the bottom time,
 //		and simulates the ascend with all deco stops.
 //
-// The deco_state sequence is :
-//       3 (at surface)
-// +---> 0 : calc nullzeit
-// |     2 : simulate ascent to first stop (at 10m/min, less that 16x 1min simu)
-// | +-> 1 : simulate up to 16min of stops.
-// | +------< not finished
-// +--------< finish
-//
-// Added steps 6,5 for @+5 calculation:
-//      6 = ascent to first stop (same as 2), except continue to 7
-//      7 = same as 1, except loop to 7.
 //
 static void calc_hauptroutine(void)
 {
-    static unsigned char backup_gas_used  = 0;
-    static unsigned char backup_gas_depth = 0;
-
-    calc_hauptroutine_data_input();
-
-    calc_hauptroutine_update_tissues();
-    calc_gradient_factor();
-
-    // toggle between calculation for nullzeit (bottom time),
-    //                deco stops
-    //                and more deco stops (continue)
-    switch( char_O_deco_status )
+	unsigned int int_ppO2_min;
+	unsigned int int_ppO2_max;
+
+
+	//--- set-up part --------------------------------------------------------------------------------
+	
+	// twosectimer:
+	// calc_hauptroutine is now invoked every second to speed up the deco planning.
+	// Because the tissue and CNS calculations are based on a 2 seconds period, the
+	// the following toggle-timer will be used by the respective routines to skip
+	// every 2nd invocation.
+	twosectimer = (twosectimer) ? 0 : 1;			// toggle the toggle-timer
+	
+
+	// set up normal tissue updating or "fast forward" updating for simulator sim+5' function
+	// and deco calculator bottom time calculation
+	if( char_I_sim_advance_time > 0 )
+	{
+		// configure char_I_sim_advance_time minutes of tissue updating
+		tissue_increment = char_I_sim_advance_time	// given number of minutes, limited to 127
+						 | 128;						// set flag for updating the "real" tissues & CNS
+
+		char_I_sim_advance_time = 0;				// clear "mailbox"
+	}
+	else
+	{
+		// configure 2 seconds of tissue updating
+		tissue_increment = 0						// encoding for 2 seconds update
+						 | 128;						// set flag for updating the "real" tissues & CNS
+	}
+
+	//---- calculate the real tissue's data -----------------------------------------------------------------
+	
+	calc_hauptroutine_data_input();			// acquire current environment data 
+	
+	calc_hauptroutine_update_tissues();		// update tissue pressures, also sets char_actual_ppO2
+	
+	calc_CNS_fraction();					// calculate CNS% for the real tissues
+	
+	compute_CNS_for_display();				// compute integer copy of CNS value for display purpose
+		
+	calc_gradient_factor();					// compute current GF
+
+
+	//---- compute ppO2 warnings ------------------------------------------------------------------------------
+	
+	// compute conditional min/max values
+	int_ppO2_min = (char_O_main_status   & DECO_MODE_LOOP) ? (unsigned int)char_I_ppO2_min_loop : (unsigned int)char_I_ppO2_min;
+	int_ppO2_max = (char_O_deco_warnings & DECO_FLAG     ) ? (unsigned int)char_I_ppO2_max_deco : (unsigned int)char_I_ppO2_max;
+
+	// check for safe range of pure oxygen
+	if		( int_O_O2_ppO2   	  >=           int_ppO2_max    ) int_O_O2_ppO2 		 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+
+	// check for safe range of breathed gas
+	if		( int_O_breathed_ppO2 <=           int_ppO2_min    ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if ( int_O_breathed_ppO2 >=           int_ppO2_max    ) int_O_breathed_ppO2 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	else if ( int_O_breathed_ppO2 >= ppO2_prewarn_threshold    ) int_O_breathed_ppO2 |= INT_FLAG_PREWARNING;
+		
+	// check for safe range of pure diluent
+	if		( int_O_pure_ppO2 <= (unsigned int)char_I_ppO2_min ) int_O_pure_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if	( int_O_pure_ppO2 >=               int_ppO2_max    ) int_O_pure_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+		
+	// check for safe range of calculated pSCR loop gas
+	if		( int_O_pSCR_ppO2 <=               int_ppO2_min    ) int_O_pSCR_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_LOW;
+	else if	( int_O_pSCR_ppO2 >=               int_ppO2_max    ) int_O_pSCR_ppO2 	 |= INT_FLAG_WARNING + INT_FLAG_HIGH;
+	
+
+    //---- toggle between calculation for NDL (bottom time), deco stops and more deco stops (continue) ------
+
+	switch( char_O_deco_status & DECO_STATUS_MASK )
     {
-    case 3: //---- At surface: start a new dive ------------------------------
-        clear_deco_table();
+		overlay unsigned char i;
+
+	case DECO_STATUS_INIT: //---- At surface: start a new dive ---------------------
+
+		clear_deco_table();
         copy_deco_table();
-        int_O_ascenttime = 0;       // Reset DTR.
-        int_O_extra_ascenttime = 0;
-        char_O_nullzeit = 0;        // Reset bottom time.
-        char_O_deco_status = 0;     // Calc bottom-time/nullzeit next iteration.
-
+
+
+		char_I_gas_change_time = 1;		// TODO: validate proper operation before enabling this options-table parameter		
+
+		char_I_ascent_speed    = 10;	// TODO: validate proper operation before enabling this options-table parameter,
+										//       caution: values < 10 may have an impact on the deco calculation run-times!
+
+		
+		float_ascent_speed            = 1.00 * char_I_ascent_speed;
+		float_desaturation_multiplier = 0.01 * char_I_desaturation_multiplier;
+		float_saturation_multiplier   = 0.01 * char_I_saturation_multiplier;
+		float_deco_distance           = 0.01 * char_I_deco_distance;
+		
+        int_O_ascenttime			  = 0;		// reset ascent time in normal plan
+		int_O_alternate_ascenttime    = 0; 		// reset ascent time in alternative plan
+		char_O_nullzeit               = 0;		// reset no decompression limit (NDL) in normal plan
+		char_O_alternate_nullzeit     = 0;		// reset no decompression limit (NDL) in alternative plan
+		char_O_deco_warnings          = 0;		// reset all deco warning flags
+		deco_tissue_vector		      = 0;		// reset tissue deco vector
+		IBCD_tissue_vector            = 0;		// reset tissue IBCD vector
+		
+		int_O_desaturation_time       = 65535;	// tag desaturation time as invalid (it will not be computed during a dive)
+		
+
+		for(i=0; i<NUM_GAS; ++i)
+		{
+			int_O_gas_volumes[i]    = 0;
+			int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO;	// 0 bar + flag for 0 bar
+		}
+
+		for(i=0; i<NUM_COMP; ++i)
+		{		
+			split_N2_He[i] = 90;							// used for calculation of no-fly time
+		}
+		
+		
+		// init CNS counters
+		CNS_sim_norm_fraction     = CNS_sim_alt_fraction         = CNS_fraction;		// the floats
+		int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = int_O_CNS_fraction;	// the integers
+
+		
         // Values that should be reset just once for the full real dive.
         // This is used to record the lowest stop for the whole dive,
-        // Including ACCROSS all simulated ascent.
-        low_depth = 0.0;
-        locked_GF_step = 0.0;
-
-        // Reset gas switch history.
-        backup_gas_used  = sim_gas_last_used  = 0;
-        backup_gas_depth = sim_gas_last_depth = 0;
-        sim_dive_mins = 0;
-        break;
-
-    case 0: //---- bottom time -----------------------------------------------
+        // including ACCROSS all simulated ascents.
+        low_depth_norm      = low_depth_alt      = 0.0;
+        locked_GF_step_norm = locked_GF_step_alt = 0.0;
+
+
+		// continue in state DECO_STATUS_START to calculate the bottom-part of the dive and the NDL
+		char_O_deco_status &= ~DECO_STATUS_MASK;	
+		
+		// code execution continues in state DECO_STATUS_START
+		
+		
+	case DECO_STATUS_START: //---- bottom time -------------------------------------
     default:
-        gas_switch_find_current();              // Lookup for current gas & time.
-        gas_switch_set();                       // setup calc_ratio's
-
+
+		// reread the GF settings in case there was a switch between GF/aGF
+		GF_low   = char_I_GF_Low_percentage  * 0.01;
+		GF_high  = char_I_GF_High_percentage * 0.01;
+		GF_delta = GF_high - GF_low;
+
+        // Lookup current gas and store it also as the first gas used. This gas will be used for the bottom
+		// segment of the dive and for the period of delayed ascent when calculating fTTS or bailout.
+		gas_find_current();		
+		
+		// setup the calculation ratio's calc_N2_ratio, calc_He_ratio and calc_O2_ratio
+        gas_switch_set();		
+
+		// calculate ppN2 and ppHe from calc_N2_ratio & calc_He_ratio
+		sim_alveolar_presures();
+
+		// clear the internal(!) stops table
+		clear_deco_table();		
+		
+		// initialize the simulated tissues with the current state of the real tissues
+		update_startvalues();	
+
+		// calculate the effect of extended bottom time due to delayed ascent / fTTS on current gas
+		if( char_O_deco_status & DECO_ASCENT_DELAYED ) sim_extra_time();
+		
+		// calculate if we are within no decompression limit (NDL)
         calc_nullzeit();
-        if( char_O_nullzeit > 0 )               // Some NDL time left ?
-        {
-            char_O_deco_status = 0;             // YES: recalc ndl next time.
-            clear_deco_table();                 // Also clear stops !
-            copy_deco_table();
-            char_O_deco_last_stop = 0;          // And last stop (OSTC menu anim)
-        }
-        else
-            char_O_deco_status = 2;             // NO: calc ascent next time.
+
+		// check which plan we are on
+		if( char_O_deco_status & DECO_PLAN_ALTERNATE )
+		{
+			//---- alternate dive plan --------------------------------------------------------------------
+			
+			// Some NDL time left in alternate plan?
+			if( char_O_alternate_nullzeit > 0 )
+			{
+				// clear tank pressure needs
+				if( char_O_deco_status & DECO_VOLUME_CALCULATE )
+					for(i=0; i<NUM_GAS; ++i) int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO; // 0 bar + flag for 0 bar
+
+				// calculate the CNS% at the end of the dive if requested:
+				// as we are in no stop, CNS at end of dive is more or less the same CNS we have now
+				if( char_O_deco_status & DECO_CNS_CALCULATE ) int_O_alternate_CNS_fraction = int_O_CNS_fraction;
+				
+				// clear fTTS ascent time
+				int_O_alternate_ascenttime = 0;
+
+				// YES - computation of alternate plan completed
+				char_O_deco_status &= ~DECO_STATUS_MASK;
+			}
+			else
+			{
+				// NO - clear status bits and set status bits for
+				//      calculation of ascent on next invocation
+				char_O_deco_status &= ~DECO_STATUS_MASK;
+				char_O_deco_status |=  DECO_STATUS_ASCENT;
+			}
+		}
+		else
+		{
+			//---- normal dive plan -------------------------------------------------------------------------
+			
+			// Some NDL time left in normal plan?
+			if( char_O_nullzeit > 0 )
+			{
+				// published (erased) stops table
+				copy_deco_table();
+
+				// ** commented out - char_O_deco_last_stop is not used for anything
+				//
+				// // set last stop to 0 (for OSTC menu animation)
+				// char_O_deco_last_stop = 0;
+				
+				// clear tank pressure needs
+				if( char_O_deco_status & DECO_VOLUME_CALCULATE )
+					for(i=0; i<NUM_GAS; ++i) int_O_tank_pres_need[i] = 0 + INT_FLAG_ZERO; // 0 bar + flag for 0 bar
+
+				// calculate the CNS% at the end of the dive if requested:
+				// as we are in no stop, CNS at end of dive is more or less the same CNS we have now
+				if( char_O_deco_status & DECO_CNS_CALCULATE ) int_O_normal_CNS_fraction = int_O_CNS_fraction;
+
+				// YES - computation of normal plan completed
+				char_O_deco_status &= ~DECO_STATUS_MASK;
+			}
+			else
+			{
+				// NO - clear status bits and set status bits for
+				//      calculation of ascent on next invocation
+				char_O_deco_status &= ~DECO_STATUS_MASK;
+				char_O_deco_status |=  DECO_STATUS_ASCENT;
+			}
+		}
+
+		break;
+
+		
+	case DECO_STATUS_ASCENT: //---- Simulate ascent to first stop -------------------
+		
+		// initialize depth (in abs.pressure) for ascent and deco simulation, start from current real depth
+		temp_deco = pres_respiration;
+		
+		// calculate ascent to first stop
+        sim_ascent_to_first_stop();
+
+        // calculate all further stops next time
+		char_O_deco_status &= ~DECO_STATUS_MASK;	// clear status bits and set status bits
+		char_O_deco_status |=  DECO_STATUS_STOPS;	// for calculation of stops on next invocation
+		
         break;
 
-    case 2: //---- Simulate ascent to first stop -----------------------------
-    case 6: // @+5min variation
-        // Check proposed gas at begin of ascent simulation
-        sim_dive_mins = int_I_divemins;         // Init current time.
-
-        gas_switch_find_current();              // Lookup for current gas & time.
-        gas_switch_set();                       // setup calc_ratio's
-
-        backup_gas_used  = sim_gas_last_used;   // And save for later simu steps.
-        backup_gas_depth = sim_gas_last_depth;  // And save for later simu steps.
-
-        sim_ascent_to_first_stop();
-
-        // Calc stops next time (deco or gas switch).
-        char_O_deco_status = 1 | ( char_O_deco_status & 4 );
+
+	case DECO_STATUS_STOPS: //---- Simulate stops ----------------------------------
+	
+        calc_hauptroutine_calc_deco();
+
+		// If simulation is finished, do some more computations if requested
+		// and restore the GF low reference so that the next ascent simulation
+		// is done from the current depth: 
+		if( !(char_O_deco_status & DECO_STATUS_MASK) )
+        {
+			// Calculate ascent time, result in int_O_ascenttime or int_O_alternate_ascenttime
+            calc_ascenttime();
+
+			// the current depth is needed by calc_CNS_planning() and gas_volumes()
+			bottom_depth = (unsigned char)((pres_respiration - pres_surface)*BAR_TO_METER);
+			
+			// if requested, calculate the CNS% at the end of the dive (including the deco stops)
+			if( char_O_deco_status & DECO_CNS_CALCULATE    ) calc_CNS_planning();
+			
+			// if requested, calculate the required gas volumes and tank pressures at the end of the dive.
+			if( char_O_deco_status & DECO_VOLUME_CALCULATE ) gas_volumes();			
+			
+			// some more aftermath dependent on the current plan
+			if( char_O_deco_status & DECO_PLAN_ALTERNATE   )
+			{
+				//---- alternative plan ----------------------------------------------------
+
+				// was CNS at end of dive calculated?
+				if( char_O_deco_status & DECO_CNS_CALCULATE )
+				{
+					// yes - compute CNS value to display
+					if		( CNS_sim_alt_fraction < 0.01  ) int_O_alternate_CNS_fraction = 0;
+					else if ( CNS_sim_alt_fraction > 9.985 ) int_O_alternate_CNS_fraction = 999 + INT_FLAG_WARNING;
+					else
+					{	
+						// convert float to integer
+						int_O_alternate_CNS_fraction = (unsigned short)(100 * CNS_sim_alt_fraction + 0.5);
+	
+						// set warning flag if CNS is >= 100%
+						if( int_O_alternate_CNS_fraction >= 100 )
+						int_O_alternate_CNS_fraction |= INT_FLAG_WARNING;
+				
+						// set invalid flag if there is an overflow in the stops table
+						if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
+						int_O_alternate_CNS_fraction |= INT_FLAG_INVALID;
+					}
+				}
+				else
+				{
+					// no - invalidate value (value = 0, invalid flag set)
+					int_O_alternate_CNS_fraction = INT_FLAG_INVALID;
+				}
+			}
+			else
+			{
+				//---- normal plan ---------------------------------------------------------
+
+				// publish the stops table
+				copy_deco_table();
+
+				// was CNS at end of dive calculated?
+				if( char_O_deco_status & DECO_CNS_CALCULATE )
+				{
+					// yes - compute CNS value to display
+					if		( CNS_sim_norm_fraction <  0.01  ) int_O_normal_CNS_fraction = 0;
+					else if ( CNS_sim_norm_fraction >= 9.985 ) int_O_normal_CNS_fraction = 999 + INT_FLAG_WARNING;
+					else
+					{	
+						// convert float to integer
+						int_O_normal_CNS_fraction = (unsigned short)(100 * CNS_sim_norm_fraction + 0.5);
+	
+						// set warning flag if CNS is >= 100%
+						if( int_O_normal_CNS_fraction >= 100 )
+							int_O_normal_CNS_fraction |= INT_FLAG_WARNING;
+				
+						// set invalid flag if there is an overflow in the stops table
+						if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
+							int_O_normal_CNS_fraction |= INT_FLAG_INVALID;
+					}
+				}
+				else
+				{
+					// no - invalidate value (value = 0, invalid flag set)
+					int_O_normal_CNS_fraction = INT_FLAG_INVALID;
+				}
+
+			} // aftermath
+		} // if
+		
         break;
-
-    case 1: //---- Simulate stops --------------------------------------------
-    case 5: // @+5 variation.
-        calc_hauptroutine_calc_deco();
-
-        // If simulation is finished, restore the GF low reference, so that
-        // next ascent simulation is done from the current depth:
-        if( (char_O_deco_status & 3) == 0 )
-        {
-            sim_gas_last_used  = backup_gas_used;
-            sim_gas_last_depth = backup_gas_depth;
-        }
-        break;
-    }
+		
+    } // switch
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1128,39 +1667,19 @@
 //
 void calc_hauptroutine_data_input(void)
 {
-    overlay short int_temp;
-    overlay unsigned char g;
-
-    pres_respiration    = int_I_pres_respiration * 0.001;
-    pres_surface        = int_I_pres_surface     * 0.001;
-    N2_ratio            = char_I_N2_ratio        * 0.01;
-    He_ratio            = char_I_He_ratio        * 0.01;
-    float_deco_distance = char_I_deco_distance   * 0.01;     // Get offset in mbar
-
-    // ____________________________________________________
-    //
-    // _____________ G A S _ C H A N G E S ________________
-    // ____________________________________________________
-
-    // Keep a margin of 150mbar = 1.50m
-    int_temp = (int_I_pres_respiration - int_I_pres_surface)
-             + MBAR_REACH_GASCHANGE_AUTO_CHANGE_OFF;
-
-    // Gas are selectable if we did not pass the change depth by more than 1.50m:
-    for(g=0; g < NUM_GAS; ++g)
-    {
-        deco_gas_change[g] = 0;
-        if(char_I_deco_gas_change[g])
-            if( int_temp > 100 *(short)char_I_deco_gas_change[g] )
-                deco_gas_change[g] = char_I_deco_gas_change[g];
-    }
-
-    const_ppO2 = char_I_const_ppO2 * 0.01;
-    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01;
-    float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
-    GF_low   = char_I_GF_Low_percentage  * 0.01;
-    GF_high  = char_I_GF_High_percentage * 0.01;
-    GF_delta = GF_high - GF_low;
+	// get the current pressures
+	pres_respiration = 0.001 * int_I_pres_respiration;
+    pres_surface     = 0.001 * int_I_pres_surface;
+
+	// get the currently breathed gas mixture
+	O2_ratio         = 0.01 * char_I_O2_ratio;
+    He_ratio         = 0.01 * char_I_He_ratio;
+
+	// N2 ratios are computed within p2_deco.c from the O2 and He ratios
+	N2_ratio         = 1.0 - O2_ratio - He_ratio;
+	
+	// N2 tissue pressure at surface equilibrium, used for tissue graphics scaling
+	N2_equilibrium   = 0.7902 * (pres_surface - ppWater);
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1168,29 +1687,138 @@
 //
 void calc_hauptroutine_update_tissues(void)
 {
+    overlay float pres_diluent = pres_respiration;
+
+	
     assert( 0.00 <= N2_ratio && N2_ratio <= 1.00 );
     assert( 0.00 <= He_ratio && He_ratio <= 1.00 );
     assert( (N2_ratio + He_ratio) <= 1.00 );
     assert( 0.800 < pres_respiration && pres_respiration < 14.0 );
 
-    pres_diluent = pres_respiration;
-    if( char_I_const_ppO2 != 0 )
+	
+	//---- OC, CCR and Bailout Mode Gas Calculations ------------------------------------------------------------
+	
+	// calculate ppO2 of pure oxygen
+	O2_ppO2 = (pres_respiration - ppWater);
+
+	// capture failure condition in case pres_respiration is < ppWater (should never happen...)
+	if( O2_ppO2 < 0.0 ) O2_ppO2 = 0.0;
+	
+	// calculate ppO2 of the pure gas (diluent)
+	pure_ppO2 = O2_ppO2 * O2_ratio;
+
+	
+	//---- PSCR Mode Gas Calculation-----------------------------------------------------------
+	
+	// With flags set for PSCR we compute the ppO2 in the loop from the diluent's O2
+	// ratio and the PSCR parameters. This figure will be used in the pSCR custom view.
+	// If sensors are used (char_I_const_ppO2 > 0), we will override the calculated ppO2
+	// with the sensor data. Then we continue with the CCR mode code which calculates
+	// the increase of ppN2 and ppH2 due to the reduction of the ppO2 in the loop.
+	// Essentially, diving a pSCR is like diving a CCR with a setpoint set lower than
+	// the ambient pressure multiplied with the O2 fraction of the diluent...
+			
+	// calculate pSCR ppO2
+	//
+	// pres_respiration      is 0.0 ...       in bar
+	// O2_ratio              is 0.0 ...   1.0 as factor
+	// char_I_PSCR_drop      is 0   ...  15   as %
+	// char_I_PSCR_lungratio is 5   ...  20   as %
+	// pSCRppO2				 is 0.0 ...       in bar
+
+	pSCR_ppO2 = (pres_respiration * O2_ratio) - (1 - O2_ratio) * 0.01 * char_I_PSCR_drop * char_I_PSCR_lungratio;
+
+	// capture failure condition if case pSCR_ppO2 becomes negative
+	if( pSCR_ppO2 < 0.0 ) pSCR_ppO2 = 0.0;	
+	
+	
+	//---- Loop modes : adjust ppN2 and ppHe for change in ppO2 due to setpoint (CCR) or drop (pSCR) ------------
+	if ( char_O_main_status & DECO_MODE_LOOP )
     {
-        overlay float flush_ppO2 = pres_respiration * (1.0 - N2_ratio - He_ratio);
-
+		overlay float const_ppO2;
+
+		// get the current sensor reading (CCR / pSCR if fitted) or the fixed setpoint (CCR) / a zero (pSCR)
+        const_ppO2 = 0.01 * char_I_const_ppO2;
+		
+		// Limit the setpoint to the maximum physically possible ppO2. This prevents for
+		// example calculating with a setpoint of 1.3 bar in only 2 meters of depth.
+		// Additionally, if limiting occurs, the ppO2 can be further reduced to account
+		// for residual inert gases by the user-adjustable setting char_I_cc_max_frac_o2.
+		
+		if( const_ppO2 > pres_respiration )	// no ppWater subtracted here to give some margin for
+		{									// sensors delivering data a little bit over target
+			
+			const_ppO2 = 0.01 * char_I_cc_max_frac_o2 * (pres_respiration - ppWater);
+		}
+				
+		// check which kind of loop we are on
+		if( char_O_main_status & DECO_MODE_PSCR ) 
+		{
+			//---- pSCR Mode --------------------------------------------------------------------------
+
+			// check if a sensor is fitted
+			if( char_I_const_ppO2 ) breathed_ppO2 = const_ppO2;	// yes - derive ppO2s from (char_I_)const_ppO2
+			else                    breathed_ppO2 = pSCR_ppO2;	// no  - derive ppO2s from calculated ppO2
+		}
+		else
+		{
+			//---- CCR Mode ---------------------------------------------------------------------------
+
+			// derive breathed ppO2 from (char_I_)const_ppO2, which holds sensor reading or fixed setpoint
+			breathed_ppO2 = const_ppO2;
+		}
+
+		// adjust diluent pressure (ppN2 + ppHe) for change in ppO2 due to setpoint (CCR) or drop (pSCR)
         pres_diluent -= const_ppO2;
-        pres_diluent /= N2_ratio + He_ratio;            // potential DIV/0 issue when O2 is used as diluent!
-        if( pres_diluent < 0.0 )
-            pres_diluent = 0.0;
-        if(N2_ratio==0&He_ratio==0) pres_diluent = 0.0; // workaround for potential DIV/0 issue
-
-        char_O_diluent = (unsigned char)(pres_diluent/pres_respiration*100.0 + 0.5);
-
-        if( flush_ppO2 > 2.545) flush_ppO2 = 2.55;
-        if( flush_ppO2 < 0.0  ) flush_ppO2 = 0.0;
-        char_O_flush_ppO2 = (unsigned char)(flush_ppO2*100.0 + 0.5);
-    }
-
+        pres_diluent /= N2_ratio + He_ratio;
+
+		// capture all failure conditions, including div/0 in case diluent is pure O2
+		if( (pres_diluent < 0.0) || (char_I_O2_ratio == 100) )
+		{
+			pres_diluent  = 0.0;
+			breathed_ppO2 = pure_ppO2;
+		}
+
+	}
+	else
+	{	//---- OC mode -----------------------------------------------------------------------------------------
+	
+		// breathed ppO2 is ppO2 of pure gas
+		breathed_ppO2 = pure_ppO2;
+	}
+
+
+	// derive char_actual_ppO2 in [cbar], used for calculating CNS%
+	if      ( breathed_ppO2 <  0.01  ) char_actual_ppO2  =   0;
+	else if ( breathed_ppO2 >= 2.545 ) char_actual_ppO2  = 255;
+	else                               char_actual_ppO2  = (unsigned char)(100 * breathed_ppO2 + 0.5);
+
+	
+	//---- export ppO2 values in [cbar] for warning generation and display purpose ------------------------------
+
+	// pure oxygen ppO2
+	if		( O2_ppO2       <  0.01  ) int_O_O2_ppO2       =   0;
+	else if ( O2_ppO2       >= 9.995 ) int_O_O2_ppO2       = 999;
+	else                               int_O_O2_ppO2       = (unsigned int)(100 *       O2_ppO2 + 0.5);
+	
+	// pure gas ppO2
+	if      ( pure_ppO2     <  0.01  ) int_O_pure_ppO2     =   0;
+	else if ( pure_ppO2     >= 9.995 ) int_O_pure_ppO2     = 999;
+	else                               int_O_pure_ppO2     = (unsigned int)(100 *     pure_ppO2 + 0.5);
+	
+	// calculated pSCR ppO2
+	if		( pSCR_ppO2     <  0.01  ) int_O_pSCR_ppO2     =   0;
+	else if ( pSCR_ppO2     >= 9.995 ) int_O_pSCR_ppO2     = 999;
+	else                               int_O_pSCR_ppO2     = (unsigned int)(100 *     pSCR_ppO2 + 0.5);
+
+	// breathed ppO2
+	if		( breathed_ppO2 <  0.01  ) int_O_breathed_ppO2 =   0;
+	else if ( breathed_ppO2 >= 9.995 ) int_O_breathed_ppO2 = 999;
+	else                               int_O_breathed_ppO2 = (unsigned int)(100 * breathed_ppO2 + 0.5);
+	
+
+	//---- calculate ppN2, ppHe and EAD, END -------------------------------------------------------------------
+	
     if( pres_diluent > ppWater )
     {
         overlay float EAD, END;
@@ -1198,48 +1826,71 @@
         ppN2 = N2_ratio * (pres_diluent - ppWater);
         ppHe = He_ratio * (pres_diluent - ppWater);
 
-        // EAD : Equivalent Air Dive. Equivalent depth for the same N2 level
-        //       with plain air.
+        // EAD : Equivalent Air Depth. Equivalent depth for the same N2 level with plain air.
         //       ppN2 = 79% * (P_EAD - ppWater)
         //       EAD = (P_EAD - Psurface) * 10
         //   ie: EAD = (ppN2 / 0.7902 + ppWater -Psurface) * 10
+
         EAD = (ppN2 / 0.7902 + ppWater - pres_surface) * BAR_TO_METER;
-        if( EAD < 0.0 || EAD > 245.5 ) EAD = 0.0;
+
+        if( (EAD < 0.0) || (EAD > 245.5) ) EAD = 0.0;
+
         char_O_EAD = (unsigned char)(EAD + 0.5);
 
-        // END : Equivalent Narcotic Dive.
-        //       Here we count O2 as narcotic too. Hence everything but helium (has a narcosis factor of
-        //       0.23 btw). Hence the formula becomes:
+		
+        // END : Equivalent Narcotic Depth.
+        //       Here we count O2 as narcotic too. Hence everything but helium (has a narcosis
+        //       factor of 0.23 btw). Hence the formula becomes:
         //       END * BarPerMeter * (1.0 - 0.0) - ppWater + Psurface == Pambient - ppHe - ppWater
         //  ie:  END = (Pambient - ppHe - Psurface) * BAR_TO_METER
         //
         // Source cited:
         //       The Physiology and Medicine of Diving by Peter Bennett and David Elliott,
         //       4th edition, 1993, W.B.Saunders Company Ltd, London.
+
         END = (pres_respiration - ppHe - pres_surface) * BAR_TO_METER;
-        if( END < 0.0 || END > 245.5 ) END = 0.0;
-        char_O_END = (unsigned char)(END  + 0.5);
+
+        if( (END < 0.0) || (END > 245.5) ) END = 0.0;
+
+		char_O_END = (unsigned char)(END + 0.5);
     }
-    else																		// new in v.101
+    else
     {
-        ppN2 = 0.0;
-        ppHe = 0.0;
-        char_O_EAD = char_O_END = 0;
+        ppN2 = ppHe = 0.0;
+		
+		char_O_EAD = char_O_END = 0;
     }
 
-    if(!char_I_step_is_1min)
-        calc_tissue(0);
-    else
-        calc_tissue(1);
-
-    // Calc limit for surface, ie. GF_high.
+
+	//---- calculate decompression status ----------------------------------------------------------------------
+		
+	// Calculate tissues
+	calc_tissue();
+
+    // Calculate limit for surface, ie. GF_high.
     calc_limit();
-
-    // Fill int_O_ceiling if ceiling is below the surface
-    if ((calc_lead_tissue_limit-pres_surface)>0)
-        int_O_ceiling = (short)((calc_lead_tissue_limit-pres_surface)*1000);
+	
+
+    // Fill int_O_ceiling (in mbar) if ceiling is below the surface
+    if( (calc_lead_tissue_limit - pres_surface) > 0 )
+	{	
+
+// compatibility version
+        int_O_ceiling = (short)((calc_lead_tissue_limit - pres_surface) * 1000);
+
+// new version
+//		// Round up to next 10 cm so that the ceiling disappears on the display only when the ceiling
+//		// limit is really zero. This will coincident then with TTS switching back to NDL time.
+//		int_O_ceiling = (short)((calc_lead_tissue_limit - pres_surface) * 1000 + 9);
+				
+
+		// limit int_O_ceiling to 16000 mbar (150 m)
+		if( int_O_ceiling > 16000) int_O_ceiling = 16000;
+	}
     else
+	{
         int_O_ceiling = 0;
+	}
 
     int_O_gtissue_press = (short)((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) * 1000);
 }
@@ -1249,154 +1900,209 @@
 // Compute stops.
 //
 // Note: because this can be very long, break on 16 iterations, and set state
-//       to 0 when finished, or to 1 when needing to continue.
+//       to DECO_STATUS_FINISHED when finished, or to DECO_STATUS_STOPS when
+//       needing to continue.
 // Note: because each iteration might be very long too (~ 66 ms in 1.84beta),
-//       break the loop when total time > 512msec.
+//       break the loop when elapsed time exceeds 512 milliseconds.
 //
 void calc_hauptroutine_calc_deco(void)
 {
-    overlay unsigned char loop;
-
-    for(loop = 0; loop < 16; ++loop)
-    {
-        // Limit loops to 512ms, using timer 5:
-        if( tmr5() & (512*32) )
-            break;
-
-            if( calc_nextdecodepth() )
-            {
-                if( temp_depth_limit == 0 )
-                    goto Surface;
-
-                //---- We hit a stop at temp_depth_limit ---------------------
-                temp_deco = temp_depth_limit * METER_TO_BAR // Convert to relative bar,
-                          + pres_surface;                   // To absolute.
-                if( !update_deco_table() )                  // Adds a one minute stops.
-                    goto Surface;                           // Deco table full: abort...
-            }
-            else
-            {
-                //---- No stop -----------------------------------------------
-                temp_deco -= (10*METER_TO_BAR);             // Ascend 10m, no wait.
-
-                //---- Finish computations once surface is reached -----------
-                if( temp_deco <= pres_surface )
-                {
+	overlay unsigned char loop;
+
+	for(loop = 0; loop < 16; ++loop)
+	{
+		// limit loops to 512ms, using timer 5
+		if( tmr5() & (512*32) ) break;
+
+		// calc_nextdecodepth()
+		//
+		// INPUT  temp_deco        : current depth in absolute pressure
+		// OUTPUT temp_depth_limit : depth of next stop in meters
+		// RETURN true if a stop is needed
+		//
+		// The function manages gas changes by itself, including priming
+		// the deco stop with the configured gas change time.
+		//
+		if( calc_nextdecodepth() )
+		{
+			if( temp_depth_limit == 0 ) goto Surface;	// this check should not bee needed as in
+														// this case the RETURN value will be false
+
+			//---- stop required at temp_depth_limit -------------------------------------
+
+			// convert stop depth in meters to absolute pressure
+			temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
+
+			// add one minute to the current stop, or add a new stop,
+			// or abort deco calculation if the deco table is full.
+			if( !update_deco_table(1) ) goto Surface;
+		}
+		else
+		{
+			//---- no stop required --------------------------------------
+			
+			// ascend by float_ascent_speed for 1 minute
+			temp_deco -= float_ascent_speed * METER_TO_BAR;
+
+			// finish deco calculation if surface is reached
+			if( temp_deco <= pres_surface )
+			{
 Surface:
-                    if( char_O_deco_status == 1 )   // Don't in @+5min variant.
-                        copy_deco_table();
-
-                    calc_ascenttime();
-                    char_O_deco_status = 0;         // calc nullzeit next time.
-                    char_O_deco_last_stop = 0;      // Surface reached (to animate menu)
-                    return;
-                }
-            }
-        //---- Then update tissue --------------------------------------------
-        sim_dive_mins++;            // Advance simulated time by 1 minute.
-        gas_switch_set();           // Apply any simulated gas change, once validated.
-        sim_alveolar_presures();    // Updates ppN2 and ppHe.
-        sim_tissue(1);              // Simulate compartiments for 1 minute.
-    }
-
-    // Surface not reached, need more stops... for menu animation.
-    char_O_deco_last_stop = temp_depth_limit;   // Reached depth.
+				// set deco engine status to done (DECO_STATUS_FINISHED)
+				char_O_deco_status &= ~DECO_STATUS_MASK;
+			
+				// ** commented out - char_O_deco_last_stop is not used for anything
+				//
+				// // surface reached (to animate menu)
+				// if( !(char_O_deco_status & DECO_PLAN_ALTERNATE)) char_O_deco_last_stop = 0;
+				
+				return;
+			}
+		}
+
+
+		//---- as one minute as passed now, update the tissues ----------------------
+
+		// program 1 minute interval on simulated tissues (Flagbit 7 = 0)
+		tissue_increment = 1;
+		
+		// compute current ppN2 and ppHe
+		sim_alveolar_presures();
+		
+		// update the tissues
+		calc_tissue();
+	}
+
+	// ** commented out - char_O_deco_last_stop is not used for anything
+	//
+	// // surface not reached, need more stops... store reached depth for menu animation.
+	// if( !(char_O_deco_status & DECO_PLAN_ALTERNATE) ) char_O_deco_last_stop = temp_depth_limit;
 }
 
 
 //////////////////////////////////////////////////////////////////////////////
-// Simulation ascention to first deco stop.
+// Simulate ascent to first deco stop.
 //
-// Note: because we ascent with a constant speed (10m/mn, ie. 1bar/mn),
-//       there is no need to break on more that 16 iterations
-//       (or we are already in deep shit).
 //
-// Input:  pres_respiration
-// Output: temp_deco
+// Modified: temp_deco : current depth in ascent and deco simulation, in bar absolute pressure
 //
-// if char_O_deco_status indicate @+5 variant, add extra time at current depth,
-// before ascent.
 void sim_ascent_to_first_stop(void)
 {
-    overlay unsigned char fast = 1; // 1min or 2sec steps.
-
-    update_startvalues();
-    clear_deco_table();
-
-    temp_deco = pres_respiration;       // Starts from current real depth.
-
-    // Are we doing the special @+5min variation ?
-    if(char_O_deco_status & 4)
-        sim_extra_time();
-
-    //---- Loop until first stop, gas switch, or surface is reached ----------
-    for(;;)
-    {
-        overlay float old_deco = temp_deco;     // Pamb backup (bars)
-
-        // Try ascending 1 full minute (fast) or 2sec (!fast):
-        if( fast )
-            temp_deco -= 10*METER_TO_BAR;   // 1 min, at 10m/min. ~ 1bar.
-        else
-            temp_deco -= (10.0/30.0)*METER_TO_BAR;  // 2sec at 10m/min.
-
-        if( temp_deco < pres_surface )  // But don't go over surface.
-            temp_deco = pres_surface;
-
-        // Recompute sim_lead_tissue_limit at GF_low (deepest stop), because
-        // one minute passed.
-        sim_limit(GF_low);
-
-        // Did we reach deepest remaining stop ?
-        if( temp_deco < sim_lead_tissue_limit )
-        {
-            temp_deco = old_deco;           // Restore last correct depth,
-
-            if( fast )
-            {
-                fast = 0;                   // Retry with 2sec steps.
-                continue;
-            }
-            else
-                break;                      // Done...
-        }
-
-        // Did we reach surface ?
-        // NOTE: we should round BEFORE checking surface is reached.
-        temp_depth_limit = (unsigned char)(0.5 + (temp_deco - pres_surface) * BAR_TO_METER);
-        if( temp_depth_limit == 0 )
-        {
-            temp_deco = pres_surface;   // Yes: finished !
-            break;
-        }
-
-        // Check for gas change below new depth ?
-        if( gas_switch_deepest() )
-        {
-            assert( temp_depth_limit > 0);
-
-            temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
-            break;
-        }
-
-        if( fast )
-            sim_dive_mins++;            // Advance simulated time by 1 minute.
-        sim_alveolar_presures();        // temp_deco --> ppN2/ppHe
-        sim_tissue(fast);               // and update tissues for 1 min.
-    }
+	overlay unsigned char fast      = 1;	// 1 = 1 minute steps,  0 = 2 seconds steps
+	overlay unsigned char gaschange = 0;	// 1 = do a gas change, 0 = no better gas available
+	
+	
+	//---- Loop until first deco stop or surface is reached ----------
+	for(;;)
+	{
+		// depth in absolute pressure we came from
+		overlay float old_deco = temp_deco;
+		
+		// try ascending 1 full minute (fast) or 2 seconds (!fast)
+		if	( fast ) temp_deco -=  float_ascent_speed       * METER_TO_BAR;	// 1 min at float_ascent_speed ( 5 .. 10  m/min)
+		else         temp_deco -= (float_ascent_speed/30.0) * METER_TO_BAR;	// 2 sec at float_ascent_speed (17 .. 33 cm/min)
+
+		// but don't go over surface
+		if( temp_deco < pres_surface ) temp_deco = pres_surface;
+
+		// compute sim_lead_tissue_limit
+		if   ( char_I_deco_model != 0 ) sim_limit(GF_low);
+		else                            sim_limit(1.0);
+
+		// did we overshoot the first deco stop?
+		if( temp_deco < sim_lead_tissue_limit )
+		{
+			// YES - back to last depth below first stop
+			temp_deco = old_deco;
+
+			// switch to 2 seconds ascent if not yet in, else done
+			if( fast )
+			{
+				fast = 0;				// retry with 2 seconds ascent steps
+				continue;
+			}
+			else
+			{
+				break;					// done...
+			}
+		}
+
+		// If code execution passes along here, we did not overshoot the first stop.
+		
+		// did we reach the surface? if yes, done!
+		if( temp_deco == pres_surface ) break;
+
+		// depth in meters where we are now (no round-up)
+		temp_depth_limit = (unsigned char)((temp_deco - pres_surface) * BAR_TO_METER);
+		
+		// Check if there is a better gas to switch to, but only in alternative plan mode
+		// or if override is set. If yes, introduce a stop for the gas change.
+		if(    ((char_O_deco_status & DECO_PLAN_ALTERNATE) || (char_O_main_status & DECO_GASCHANGE_OVRD))
+			&& gas_find_better() )
+		{
+			// depth in meters we came from
+			overlay unsigned char old_depth_limit = (unsigned char)((old_deco - pres_surface) * BAR_TO_METER);			
+			
+			// adjust temp_depth_limit to the gas change depth, but not deeper than the depth we came from
+			temp_depth_limit = (sim_gas_last_depth < old_depth_limit) ? sim_gas_last_depth : old_depth_limit;
+			
+			// create a stop for the gas change
+			update_deco_table(char_I_gas_change_time);
+
+			// set the new calculation values for N2, He and O2
+			gas_switch_set();
+			
+			// signal to create a stop for the gas change and update the tissues
+			gaschange = char_I_gas_change_time;
+			
+			// Adjust the depth for the tissue update to the stop depth. In case of fast mode, this
+			// imposes that the ascent from the 'old_deco' depth to this stop took 1 minute although
+			// we might have only ascended one or two meters...
+			temp_deco = temp_depth_limit * METER_TO_BAR + pres_surface;
+		}	
+		
+		// Did one minute pass by and/or do we have a gas change?
+		// Remark: The 2 seconds ascent iterations towards the first deco stop in !fast speed may take
+		// up to 28 seconds in total - for this rough half of a minute no tissue updates will be computed.
+		// Well, it could be done by setting tissue_increment = 0 in !fast condition and making calls to
+		// sim_alveolar_presures() and calc_tissue() - see code commented out below.
+		if( fast || gaschange )
+		{
+			// program interval on simulated tissues (flag bit 7 = 0)
+			tissue_increment = fast + gaschange;
+			
+			// clear gas change signal
+			gaschange = 0;
+	//	}
+	//	else
+	//	{
+	//		// program 2 seconds interval on simulated tissues (flag bit 7 = 0)
+	//		tissue_increment = 0;
+	//	}
+	//	{
+			// compute ppN2/ppHe for current depth from temp_deco
+			sim_alveolar_presures();
+			
+			// update the tissues
+			calc_tissue();
+		}
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// Simulation extra time at the current depth.
+// Simulate extra time at the current depth.
 //
-// This routine is used for @+5min feature.
+// This routine is used for the futureTTS / delayed ascent feature.
+//
 void sim_extra_time(void)
 {
-    overlay unsigned char extra = char_I_extra_time;
-    do {
-        sim_dive_mins++;                // Advance simulated time by 1 minute.
-        sim_tissue(1);                  // and update tissues for 1 min.
-    } while( --extra != 0 );
+ 	overlay unsigned char backup = tissue_increment;	// back-up tissue_increment
+
+	tissue_increment  = char_I_extra_time;				// program interval on simulated tissues (Flagbit 7 = 0)
+	
+	calc_tissue();										// update the tissues
+	
+	tissue_increment = backup;							// restore tissue_increment
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1404,25 +2110,175 @@
 //
 // optimized in v.101
 //
-static void calc_tissue(PARAMETER unsigned char period)
+// INPUT:	 ppN2, ppHe, tissue_increment
+// MODIFIED: pres_tissue_N2[], pres_tissue_He[]
+// OUTPUT:	 char_O_tissue_N2_saturation[], char_O_tissue_He_saturation[]
+//
+static void calc_tissue()
 {
+	overlay float			temp_tissue_N2;
+	overlay float			temp_tissue_He;
+	overlay unsigned char	period;
+	overlay unsigned char	i;
+		
+		
     assert( 0.00 <= ppN2 && ppN2 < 11.2 );  // 80% N2 at 130m
     assert( 0.00 <= ppHe && ppHe < 12.6 );  // 90% He at 130m
-
-    for (ci=0;ci<NUM_COMP;ci++)
+	
+	
+    for (ci=0;ci<NUM_COMP;ci++)			// iterate through all compartments
     {
-        read_buhlmann_times(period);        // 2 sec or 1 min period.
-
-        // N2
-        temp_tissue = (ppN2 - pres_tissue_N2[ci]) * var_N2_e;
-        temp_tissue_safety();
-        pres_tissue_N2[ci] += temp_tissue;
-
-        // He
-        temp_tissue = (ppHe - pres_tissue_He[ci]) * var_He_e;
-        temp_tissue_safety();
-        pres_tissue_He[ci] += temp_tissue;
-    }
+		i = tissue_increment & 127;		// extract number of minutes to do    (if i > 0)
+										// or if one 2 second period is to do (if i = 0)
+		
+		if( i == 0 )					// check if we shall do one 2-seconds period
+		{
+			read_Buhlmann_times(0); 	// YES, program coefficients for a 2 seconds period
+			period = 1;					//      set period length (in cycles)
+			i      = 1;					//      and one cycle to do
+		}
+		else if( i > 9 )				// check if we can start with 10 minutes periods
+		{
+			read_Buhlmann_times(2);		// YES, program coefficients for 10 minutes periods
+			period = 10;				//      set period length (in cycles) to ten
+		}
+		else							// we shall do 1 to 9 minutes
+		{
+			read_Buhlmann_times(1);		//      program coefficients for 1 minute periods
+			period = 1;					//      set period length (in cycles) to one
+		}
+
+		do
+		{
+			//---- N2 -------------------------------------------------------------------------------
+
+			temp_tissue = (tissue_increment & 128) ? pres_tissue_N2[ci] : sim_pres_tissue_N2[ci];
+
+			temp_tissue = (ppN2 - temp_tissue) * var_N2_e;
+
+			temp_tissue_safety();
+
+			if( tissue_increment & 128 )
+			{
+				// The temp variable takes on purpose just the tissue increment from the last loop's iteration.
+				temp_tissue_N2 = temp_tissue;
+				
+				// Update the real tissues if either we are on the 2 seconds interval,
+				// or if we shall advance the tissues on a one or several minutes basis.
+				if( twosectimer || (tissue_increment & 127) ) pres_tissue_N2[ci] += temp_tissue;
+			}
+			else
+			{
+				// Updates of the sim-tissues always comes on a 1 minutes basis,
+				// so we do not need to check of the 2 seconds interval.
+				sim_pres_tissue_N2[ci] += temp_tissue;
+			}
+
+
+			//---- He -------------------------------------------------------------------------------
+			
+			temp_tissue = (tissue_increment & 128) ? pres_tissue_He[ci] : sim_pres_tissue_He[ci];
+
+			temp_tissue = (ppHe - temp_tissue) * var_He_e;
+
+			temp_tissue_safety();
+
+			if( tissue_increment & 128 )
+			{
+				// The temp variable takes on purpose just the tissue increment from the last loop's iteration.
+				temp_tissue_He = temp_tissue;
+				
+				// Update the real tissues if either we are on the 2 seconds interval,
+				// or if we shall advance the tissues on a one or several minutes basis.
+				if( twosectimer || (tissue_increment & 127) ) pres_tissue_He[ci] += temp_tissue;
+
+			}
+			else
+			{
+				// Updates of the sim-tissues always comes on a 1 minutes basis,
+				// so we do not need to check of the 2 seconds interval.
+				sim_pres_tissue_He[ci] += temp_tissue;
+			}
+			
+
+			// decrement loop counter
+			i -= period;
+			
+			// check if we need to switch from 10 minute periods to 1 minute periods
+			if( (i > 0) && (period = 10) && (i < 10) )
+			{
+				read_Buhlmann_times(1); 	// program coefficients for 1 minute periods
+				period = 1;					// set period length (in cycles) to one
+			}
+		}
+		while( i );
+			
+			
+		// have the computations been done for the "real" tissues?
+		if( (tissue_increment & 128) && (twosectimer || (tissue_increment & 127)) )
+		{
+			// net tissue balance
+			temp_tissue = temp_tissue_N2 + temp_tissue_He;
+			
+			// check tissue on-/off-gassing and IBCD with applying a threshold of +/-HYST
+			//
+			if		( temp_tissue < -HYST )				// Check if the tissue is off-gassing
+			{
+				deco_tissue_vector	|=  (1 << ci);		// tag tissue as being in decompression
+				IBCD_tissue_vector	&= ~(1 << ci);		// tag tissue as not experiencing mentionable IBCD
+			}
+			else if ( temp_tissue > +HYST )				// check if the tissue in on-gassing
+			{
+				deco_tissue_vector	&= ~(1 << ci);		// tag tissue as not being in decompression
+				
+				if(		((temp_tissue_N2 > 0.0) && (temp_tissue_He < 0.0))		// check for counter diffusion
+					||	((temp_tissue_N2 < 0.0) && (temp_tissue_He > 0.0)) )
+				{
+					IBCD_tissue_vector |= (1 << ci);	// tag tissue as experiencing mentionable IBCD
+				}
+			}
+
+			
+			// keep the saturating / desaturating flags from last invocation
+			char_O_tissue_N2_saturation[ci] &= 128;
+			char_O_tissue_He_saturation[ci]	&= 128;
+			
+			// flip the flags applying a hysteresis of HYST (actual value: see #define of HYST)
+				 if( temp_tissue_N2 > +HYST ) char_O_tissue_N2_saturation[ci] = 128; // set flag for tissue pressure is increasing
+			else if( temp_tissue_N2 < -HYST ) char_O_tissue_N2_saturation[ci] =   0; // clear flag (-> tissue pressure is decreasing)
+
+				 if( temp_tissue_He > +HYST ) char_O_tissue_He_saturation[ci] = 128; // set flag for tissue pressure is increasing
+			else if( temp_tissue_He < -HYST ) char_O_tissue_He_saturation[ci] =   0; // clear flag (-> tissue pressure is decreasing)
+			
+			
+			// For N2 tissue display purpose:
+			// Scale tissue press so that saturation in 70m on AIR gives a value of approx. 80.
+			// The surface steady-state tissue loading of [0.7902 * (pres_respiration - ppWater)] bar
+			// gives then a 10. If N2 is completely washed out of the tissue, result will be 0.
+			// This scaling is adapted to the capabilities of the tissue graphics in the custom views.
+			temp_tissue = (pres_tissue_N2[ci] / N2_equilibrium) * 10;
+
+			 // limit to 127 to leave space for sat/desat flag
+			if (temp_tissue > 127) temp_tissue = 127;
+
+			// export as integer
+			char_O_tissue_N2_saturation[ci] += (unsigned char)temp_tissue;
+
+			
+			// For H2 tissue display purpose:
+			// Scale tissue press so that saturation in 120m on TMX 10/70 gives a value of approx. 70.
+			// With no He in a tissue, result will be 0.
+			// This scaling is adapted to the capabilities of the tissue graphics in the custom views.
+			temp_tissue = pres_tissue_He[ci] * 7.7;
+
+			// limit to 127 to leave space for sat/desat flag
+			if (temp_tissue > 127) temp_tissue = 127; 
+			
+			// export as integer
+			char_O_tissue_He_saturation[ci] += (unsigned char)temp_tissue;
+		}
+				
+    }// for
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1432,41 +2288,99 @@
 //
 static void calc_limit(void)
 {
-    char_O_gtissue_no   = 0;	// BUGFIX, changed from 255 to 0 to have a valid leading tissue number defined at any times
-    calc_lead_tissue_limit = 0.0;
-
-    for(ci=0; ci<NUM_COMP;ci++)
+    char_O_gtissue_no 		= 0;
+    calc_lead_tissue_limit 	= 0.0;
+
+	// clear IBCD, microbubbles and outside warning flags (locked warnings will be preserved)
+	char_O_deco_warnings &= ~(DECO_WARNING_IBCD + DECO_WARNING_MBUBBLES + DECO_WARNING_OUTSIDE);
+
+
+    for(ci=0; ci<NUM_COMP; ci++)
     {
         overlay float N2 = pres_tissue_N2[ci];
         overlay float He = pres_tissue_He[ci];
-        overlay float p = N2 + He;
-
-        read_buhlmann_coefficients();
-        var_N2_a = (var_N2_a * N2 + var_He_a * He) / p;
-        var_N2_b = (var_N2_b * N2 + var_He_b * He) / p;
-
-        // Apply the Eric Baker's varying gradient factor correction.
+		overlay float pres_tissue = N2 + He;
+		overlay float pres_min;
+		overlay float gf;
+		overlay float threshold;
+
+        read_Buhlmann_coefficients();
+        var_N2_a = (var_N2_a * N2 + var_He_a * He) / pres_tissue;
+        var_N2_b = (var_N2_b * N2 + var_He_b * He) / pres_tissue;
+
+		// calculate minimum ambient pressure that the tissue can withstand according to straight Buhlmann
+		pres_min = (pres_tissue - var_N2_a) * var_N2_b;
+		
+		// calculate current gf value (1.0 = 100%) of this tissue
+		gf = (pres_tissue - pres_respiration) / (pres_tissue - pres_min);
+		if( gf < 0.0 ) gf = 0.0;
+		
+		// calculate a threshold value for use below
+		// ToDo: finalize the definition of the threshold
+		threshold = 0.02 * ci + 0.9;
+
+		// check if this tissue is likely to develop microbubbles
+		// and/or if this tissue is outside the Buhlmann model
+		if( ci <= 5 )
+		{
+			if( gf >= threshold )
+			{
+				char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+				
+				if( gf >= 1.0 )
+				{
+					char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+				}
+			}
+		}
+		else
+		{
+			if( gf >= 1.0 )
+			{
+				char_O_deco_warnings |= (DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock);
+	
+				if( gf >= threshold )
+				{
+					char_O_deco_warnings |= (DECO_WARNING_OUTSIDE + DECO_WARNING_OUTSIDE_lock);
+				}
+			}
+		}
+		
+		
+        // Apply the Eric Baker's varying gradient factor correction if the GF-Model is selected.
         // Note: the correction factor depends both on GF and b,
         //       Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
         //       so that can change who is the leading gas...
-        // Note: Also depends of the GF. So the calcul is different for
-        //       GF_low, current GF, or GF_high...
-        //       *BUT* calc_tissue() is used to compute bottom time,
-        //       hence what would happend at surface,
+        // Note: Also depends of the GF. So the calculus is different for GF_low, current GF, or GF_high...
+        //       *BUT* calc_tissue() is used to compute bottom time, hence what would happen at surface,
         //       hence at GF_high.
-        if( char_I_deco_model != 0 )
-            p = ( p - var_N2_a * GF_high) * var_N2_b
-              / (GF_high + var_N2_b * (1.0 - GF_high));
-        else
-            p = (p - var_N2_a) * var_N2_b;
-        if( p < 0.0 ) p = 0.0;
-
-        if( p > calc_lead_tissue_limit )
+		if( char_I_deco_model != 0 ) pres_min =   ( pres_tissue - var_N2_a * (      GF_high) ) * var_N2_b
+		                                        / ( GF_high     + var_N2_b * (1.0 - GF_high) );
+
+		// check if this tissue requires a higher ambient pressure than was found to be needed up to now
+        if( pres_min > calc_lead_tissue_limit )
         {
-            char_O_gtissue_no = ci;
-            calc_lead_tissue_limit = p;
+            char_O_gtissue_no      = ci;
+            calc_lead_tissue_limit = pres_min;
         }
     }
+	
+	// check IBCD condition
+	if( !IBCD_tissue_vector )
+	{
+		char_O_deco_warnings &= ~DECO_WARNING_IBCD;					// no IBCD in any tissue, clear flag
+	}
+	else if(    (IBCD_tissue_vector & (1 << char_O_gtissue_no))
+	         && ((pres_tissue_N2[char_O_gtissue_no] + pres_tissue_He[char_O_gtissue_no]) > pres_respiration) )
+	{
+		// leading tissue is in IBCD condition and in super-saturation, set flags.
+		char_O_deco_warnings |= (DECO_WARNING_IBCD + DECO_WARNING_IBCD_lock);
+	}
+	
+	// check if is any tissue off-gassing
+	if	(deco_tissue_vector) char_O_deco_warnings |=  DECO_FLAG;	// yes,  set deco flag
+	else                     char_O_deco_warnings &= ~DECO_FLAG;	// no, clear deco flag 
+
 
     assert( char_O_gtissue_no < NUM_COMP );
     assert( 0.0 <= calc_lead_tissue_limit && calc_lead_tissue_limit <= 14.0);
@@ -1482,53 +2396,57 @@
 //       invert... So we have to make a fast-simu until we find a better way.
 //
 // Input:  pres_respiration
-// Output: char_O_nullzeit
+// Output: char_O_nullzeit / char_O_alternate_nullzeit
 //
 static void calc_nullzeit(void)
 {
+	overlay unsigned char nullzeit = 240;
+	
+	
     //---- Compute ppN2 and ppHe ---------------------------------------------
     temp_deco = pres_respiration;
     sim_alveolar_presures();
-
-    char_O_nullzeit = 240;
+	
     for(ci=0; ci<NUM_COMP; ci++)
     {
         //---- Read A/B values and loading factor for N2 and He --------------
-        overlay float tN2 = pres_tissue_N2[ci];
-        overlay float tHe = pres_tissue_He[ci];
+
+		overlay float tN2 = sim_pres_tissue_N2[ci];
+        overlay float tHe = sim_pres_tissue_He[ci];
+		
         overlay float t = tN2 + tHe;
         overlay unsigned char ndl;
         overlay unsigned char period = 10;
 
-        read_buhlmann_coefficients();
-        read_buhlmann_times(2);             // Starts with a 10min period.
+        read_Buhlmann_coefficients();
+        read_Buhlmann_times(2);             // Starts with a 10min period.
 
         //---- Simulate for that tissue --------------------------------------
-        // NOTE: No need to simulate for longuer than the already found NDL.
-        for(ndl=0; ndl<char_O_nullzeit;)
+        // NOTE: No need to simulate for longer than the already found NDL.
+		for(ndl=0; ndl<nullzeit;)
         {
-            //---- Compute updated mix M-value at surface
-            overlay float a = (var_N2_a * tN2 + var_He_a * tHe) / t;
-            overlay float b = (var_N2_b * tN2 + var_He_b * tHe) / t;
-            overlay float M0 = (a + pres_surface/b);
-
-            //---- Add 10min/1min to N2/He tissues
-            overlay float dTN2 = (ppN2 - tN2) * var_N2_e;
-            overlay float dTHe = (ppHe - tHe) * var_He_e;
-
-            //---- Apply security margin for both models
-                // NDL can be computed while ascending... SO we have
-                // to check wether we are saturating or desaturating.
-                if( dTN2 > 0.0 ) dTN2 *= float_saturation_multiplier;
-                else             dTN2 *= float_desaturation_multiplier;
-
-                if( dTHe > 0.0 ) dTHe *= float_saturation_multiplier;
-                else             dTHe *= float_saturation_multiplier;
-            
-            if (char_I_deco_model != 0 )
-                M0 = GF_high * (M0 - pres_surface) + pres_surface;
-
-            //---- Simulate off-gasing while going to surface
+			//---- Compute updated mix M-value at surface
+			overlay float a = (var_N2_a * tN2 + var_He_a * tHe) / t;
+			overlay float b = (var_N2_b * tN2 + var_He_b * tHe) / t;
+			overlay float M0 = (a + pres_surface/b);
+
+			//---- Add 10min/1min to N2/He tissues
+			overlay float dTN2 = (ppN2 - tN2) * var_N2_e;
+			overlay float dTHe = (ppHe - tHe) * var_He_e;
+
+			//---- Apply safety margin for both models
+			// NDL can be computed while ascending... SO we have
+			// to check if we are saturating or desaturating.
+			if( dTN2 > 0.0 ) dTN2 *= float_saturation_multiplier;
+			else             dTN2 *= float_desaturation_multiplier;
+
+			if( dTHe > 0.0 ) dTHe *= float_saturation_multiplier;
+			else             dTHe *= float_saturation_multiplier;
+
+			// adopt M0 value when using the GF extension
+			if (char_I_deco_model != 0 ) M0 = GF_high * (M0 - pres_surface) + pres_surface;
+
+            //---- Simulate off-gassing while going to surface
             // TODO !
             // dTN2 -= exp( ... ascent time ... ppN2...)
             // dTHe -= exp( ... ascent time ... ppHe...)
@@ -1536,61 +2454,95 @@
             //---- Ok now, and still ok to surface after 1 or 10 minutes ?
             if( (t <= M0) && (t + dTN2 + dTHe <= M0) )
             {
-                tN2 += dTN2;    // YES: apply gas loadings,
+                tN2 += dTN2;		// YES: apply gas loadings,
                 tHe += dTHe;
-                t = tN2 + tHe;
-                ndl += period;  // increment NDL,
-                continue;       // and loop.
+				t    = tN2 + tHe;				
+				
+                ndl += period;		// increment NDL,
+
+                continue;			// and loop.
             }
 
             //---- Should we retry with smaller steps ?
             if( period == 10 )
             {
-                read_buhlmann_times(1); // 1min coefs.
+                read_Buhlmann_times(1); // 1min coefs.
                 period = 1;
+
                 continue;
             }
 
             //---- ELSE make a linear approx for the last minute
-            // Usefull to have a meaningfull rounding of NDL.
-            // But ONLY it positive (negativ casted to unsigned is bad).
-            if( M0 > t )
-                ndl += (unsigned char)(0.5f + (M0-t)/(dTN2+dTHe));
+            // Useful to have a meaningful rounding of NDL.
+            // But ONLY if positive (negative casted to unsigned is bad).
+            if( M0 > t ) ndl += (unsigned char)(0.5f + (M0-t)/(dTN2+dTHe));
+			
             break;
         }
 
         // Keep the shortest NDL found
-        if( ndl < char_O_nullzeit )
-            char_O_nullzeit = ndl;
+		if ( ndl < nullzeit ) nullzeit = ndl;
     }
+	
+	if( char_O_deco_status & DECO_PLAN_ALTERNATE) char_O_alternate_nullzeit = nullzeit;
+	else                                          char_O_nullzeit           = nullzeit;
 }
 
 //////////////////////////////////////////////////////////////////////////////
 // calc_ascenttime
 //
-// Summup ascent from bottom to surface, at 1 bar/min, 1min for last 3 meters,
-// and all stops.
+// Sum up ascent from bottom to surface at float_ascent_speed,
+// but 1 minute per meter for the final ascent, and all stops.
 //
-// Result in int_O_ascenttime, or int_O_extra_ascenttime if in @+5min variant.
+// Result in int_O_ascenttime,
+//        or int_O_alternate_ascenttime if doing the alternative plan.
+//
 static void calc_ascenttime(void)
 {
-    overlay unsigned char x;
+    overlay unsigned char  x;
     overlay unsigned short sum;
-
-    // + 0.7 to count 1 minute ascent time from 3 metre to surface
-    overlay float ascent = pres_respiration - pres_surface + 0.7;
-    if (ascent < 0.0)
-        ascent = 0.0;
-    sum = (unsigned short)(ascent + 0.99);
-
+	
+	// preset final ascent
+	overlay float final  = (float)char_I_depth_last_deco;
+
+    // calculate depth
+    overlay float ascent = (pres_respiration - pres_surface) * BAR_TO_METER;
+	
+	// check if we are already in final ascent
+    if (ascent <= final)
+	{
+		// yes - all ascent is final ascent
+		final  = ascent;
+		ascent = 0.0;
+	}
+	else
+	{
+		// no - subtract final ascent part from overall ascent
+		ascent -= final;
+		
+		// compute time for ascent part without final ascent
+		ascent /= float_ascent_speed;		
+	}
+	
+	// add 1 minute for each meter of  final ascent
+	ascent += final;
+	
+	// convert to integer
+    sum = (unsigned short)(ascent + 0.5);
+
+	// add all stop times
     for(x=0; x<NUM_STOPS && internal_deco_depth[x]; x++)
         sum += (unsigned short)internal_deco_time[x];
 
-    if( char_O_deco_status == 1 )
-        int_O_ascenttime = sum;
-    else
-        int_O_extra_ascenttime = sum;
-
+	// limit result to display max.
+	if( sum > 999) sum = 999;
+	
+	// tag result as invalid if there is an overflow in the stops table
+	if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW ) sum |= INT_FLAG_INVALID;
+	
+	// route result to output variable
+	if( char_O_deco_status & DECO_PLAN_ALTERNATE ) int_O_alternate_ascenttime = sum;
+    else                                           int_O_ascenttime           = sum;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1611,36 +2563,7 @@
 
     // No leading tissue (yet) for this ascent simulation.
     sim_lead_tissue_limit = 0.0;
-    sim_lead_tissue_no = 255;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// sim_tissue
-//
-// optimized in v.101
-//
-// Function very simular to calc_tissue, but:
-//   + Use a 1min or 10min period.
-//   + Do it on sim_pres_tissue, instead of pres_tissue.
-static void sim_tissue(PARAMETER unsigned char period)
-{
-    assert( 0.00 <= ppN2 && ppN2 < 11.2 );  // 80% N2 at 130m
-    assert( 0.00 <= ppHe && ppHe < 12.6 );  // 90% He at 130m
-
-    for(ci=0; ci<NUM_COMP; ci++)
-    {
-        read_buhlmann_times(period);        // 1 or 10 minute(s) interval
-
-        // N2
-        temp_tissue = (ppN2 - sim_pres_tissue_N2[ci]) * var_N2_e;
-        temp_tissue_safety();
-        sim_pres_tissue_N2[ci] += temp_tissue;
-
-        // He
-        temp_tissue = (ppHe - sim_pres_tissue_He[ci]) * var_He_e;
-        temp_tissue_safety();
-        sim_pres_tissue_He[ci] += temp_tissue;
-    }
+    sim_lead_tissue_no    = 1;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1648,15 +2571,15 @@
 //
 // New in v.111
 //
-// Function separated from sim_tissue() to allow recomputing limit on
+// Function separated from calc_tissue() to allow recomputing limit on
 // different depth, because it depends on current gradient factor.
 //
 static void sim_limit(PARAMETER float GF_current)
 {
-    assert( 0.0 < GF_current && GF_current <= 1.0f);
+    assert( 0.0 < GF_current && GF_current <= 1.0 );
 
     sim_lead_tissue_limit = 0.0;
-    sim_lead_tissue_no = 0;             // If no one is critic, keep first tissue.
+    sim_lead_tissue_no    = 0;		// If no one is critic, keep first tissue.
 
     for(ci=0; ci<NUM_COMP; ci++)
     {
@@ -1664,7 +2587,7 @@
         overlay float He = sim_pres_tissue_He[ci];
         overlay float p = N2 + He;
 
-        read_buhlmann_coefficients();
+        read_Buhlmann_coefficients();
         var_N2_a = (var_N2_a * N2 + var_He_a * He) / p;
         var_N2_b = (var_N2_b * N2 + var_He_b * He) / p;
 
@@ -1673,15 +2596,15 @@
         //       Actual values are in the 1.5 .. 1.0 range (for a GF=30%),
         //       so that can change who is the leading gas...
         // Note: Also depends of the GF_current...
-        if( char_I_deco_model != 0 )
-            p = ( p - var_N2_a * GF_current)
-              / (GF_current / var_N2_b + 1.0 - GF_current);
-        else
-            p = (p - var_N2_a) * var_N2_b;
+		if( char_I_deco_model != 0 )  p =   ( p                - (var_N2_a   * GF_current) )
+		                                  / ( 1.0 - GF_current + (GF_current / var_N2_b  ) );
+
+		else                          p =   (p - var_N2_a) * var_N2_b;
+
 
         if( p > sim_lead_tissue_limit )
         {
-            sim_lead_tissue_no = ci;
+            sim_lead_tissue_no    = ci;
             sim_lead_tissue_limit = p;
         }
     } // for ci
@@ -1693,7 +2616,6 @@
 //////////////////////////////////////////////////////////////////////////////
 // clear_deco_table
 //
-// unchanged in v.101
 //
 static void clear_deco_table(void)
 {
@@ -1704,55 +2626,73 @@
         internal_deco_time [x] = 0;
         internal_deco_depth[x] = 0;
     }
+	
+	// clear stop table overflow warning
+	char_O_deco_warnings &= ~DECO_WARNING_STOPTABLE_OVERFLOW;
 }
 
 //////////////////////////////////////////////////////////////////////////////
 // update_deco_table
 //
-// Add 1 min to current stop.
+// Add time to a stop at temp_depth_limit
+//
+// It is possible to create stops with a duration of 0 minutes, e.g. to
+// note a gas change "on the fly" while ascending. Therefore the criteria
+// to have reached the end of the list needs always to be depth == 0.
 //
-// Inputs:
-//      temp_depth_limit = stop's depth, in meters.
-// In/Out:
-//      internal_deco_depth[] : depth (in metres) of each stops.
-//      internal_deco_time [] : time (in minutes) of each stops.
+// Input:   temp_depth_limit  : stop's depth, in meters.
+//          sim_gas_last_used : gas used at stop, as index 1..5 or 0 for gas 6
+//			PARAMETER time_increment    : number of minutes to add to the stop
 //
-static unsigned char update_deco_table()
+// Updated: internal_deco_depth[] : depth    (in meters)  of each stop
+//          internal_deco_time [] : time     (in minutes) of each stop
+//          internal_deco_gas  [] : gas used (index 1-5)  at each stop
+//
+static unsigned char update_deco_table(PARAMETER unsigned char time_increment)
 {
-    overlay unsigned char x;
-    assert( temp_depth_limit < 128 );   // Can't be negativ (overflown).
-    assert( temp_depth_limit > 0 );     // No stop at surface...
-
-    for(x=0; x<NUM_STOPS; ++x)
-    {
-        // Make sure deco-stops are recorded in order:
-        assert( !internal_deco_depth[x] || temp_depth_limit <= internal_deco_depth[x] );
-
-        if( internal_deco_depth[x]== temp_depth_limit )
-        {
-            // Do not overflow (max 255')
-            if( internal_deco_time[x] < 255 )
-            {
-                internal_deco_time[x]++;
-                return 1;
-            }
-            // But store extra in the next stop...
-        }
-
-        if( internal_deco_depth[x] == 0 )
-        {
-            internal_deco_depth[x] = temp_depth_limit;
-
-            internal_deco_time[x]  = 1;
-            internal_deco_gas[x] = sim_gas_last_used;
-            return 1;
-        }
-    }
-
-    // Can't store stops at more than 96m.
-    // Or stops at less that 3m too.
-    // Just do nothing with that...
-    return 0;
+	overlay unsigned char x;
+
+	assert( temp_depth_limit > 0 );		// No stop at surface...
+
+	// loop through internal deco table
+	for(x=0; x<NUM_STOPS; ++x)
+	{
+		// Make sure deco-stops are recorded in order:
+		assert( !internal_deco_depth[x] || temp_depth_limit <= internal_deco_depth[x] );
+
+		// Is there already a stop entry for our current depth?
+		if( internal_deco_depth[x] == temp_depth_limit )
+		{
+			// Yes - increment stop time if possible
+			// Stop time entries are limited to 99 minutes because of display constraints.
+			// Else a limit of 254 would account because of constrains in calc_CNS_planning().
+			if( internal_deco_time[x] < (100 - time_increment) )
+			{
+				internal_deco_time[x] += time_increment;	// increment stop time
+				return 1;									// return with status 'success'
+			}
+		}
+
+		// If program flow passes here, there is either no stop entry for the current depth yet, or
+		// the existing entry is saturated with 99 minutes. So we are looking for the next unused
+		// table entry.
+		if( internal_deco_depth[x] == 0 )
+		{
+			internal_deco_time[x]  = time_increment;		// initialize entry with first stop's time,
+			internal_deco_depth[x] = temp_depth_limit;		// ... depth, and
+			internal_deco_gas[x]   = sim_gas_last_used;		// ... gas
+			return 1;										// return with status 'success'
+		}
+	}
+
+	// If program flow passes here, all deco table entries are used up.
+	
+	// set overflow warning
+	char_O_deco_warnings |= DECO_WARNING_STOPTABLE_OVERFLOW;
+	
+	
+	// return with status 'failed'.
+	return 0;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1770,171 +2710,345 @@
     assert( char_O_gtissue_no < NUM_COMP );
     assert( 0.800 <= pres_respiration && pres_respiration < 14.0 );
 
-    // tissue > respiration (currently off-gasing)
-    // GF =   0% when respiration == tissue, ie. bubbles are at equilibrium.
-    // GF = 100% when respiration == limit.
+    // tissue > respiration (currently off-gassing)
+    // GF = 0.00 when respiration == tissue, ie. dissolved gases are at equilibrium.
+    // GF = 1.00 when respiration == limit.
     temp_tissue = N2 + He;
     if( temp_tissue <= pres_respiration )
+	{
         gf = 0.0;
+		int_O_gradient_factor = 0;
+	}
     else
     {
         overlay float limit = calc_lead_tissue_limit;
         // NOTE: in GF model, calc_lead_tissue_limit include already the
         //       correction due to gradient factor. To compute the actual
-        //       current GF, we need to (re-)compute the raw ambiant-pressure
+        //       current GF, we need to (re-)compute the raw ambient-pressure
         //       limit from the Buhlmann model.
         if( char_I_deco_model != 0 )
         {
             ci = char_O_gtissue_no;
-            read_buhlmann_coefficients();
+
+            read_Buhlmann_coefficients();
+
             var_N2_a = (var_N2_a * N2 + var_He_a * He) / temp_tissue;
             var_N2_b = (var_N2_b * N2 + var_He_b * He) / temp_tissue;
-            limit = (temp_tissue - var_N2_a) * var_N2_b;
+
+            limit    = (temp_tissue - var_N2_a) * var_N2_b;
         }
 
-        gf = (temp_tissue  - pres_respiration)
-           / (temp_tissue  - limit)
-           * 100.0;
-        if( gf > 254.5 ) gf = 255.0;
-        if( gf < 0.0   ) gf = 0.0;
-    }
-    char_O_gradient_factor = (unsigned char)(gf+0.5f);
-
+        gf = (temp_tissue - pres_respiration) / (temp_tissue - limit);
+		
+		// limit to 255 because of constraints in ghostwriter code
+		if     ( gf <= 0.0   ) int_O_gradient_factor = 0;
+        else if( gf >  2.545 ) int_O_gradient_factor = 255 + INT_FLAG_WARNING;
+        else
+		{
+			int_O_gradient_factor = (unsigned int)(100 * gf + 0.5);
+		
+			if 		( int_O_gradient_factor >= GF_warning_threshold      )
+				int_O_gradient_factor |= INT_FLAG_WARNING;
+
+			else if ( int_O_gradient_factor >= char_I_GF_High_percentage )
+				int_O_gradient_factor |= INT_FLAG_PREWARNING;
+		}
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// deco_calc_desaturation_time
+// calc_desaturation_time
 //
-// FIXED N2_ratio
-// unchanged in v.101
 // Inputs:  int_I_pres_surface, ppWater, char_I_desaturation_multiplier
-// Outputs: int_O_desaturation_time, char_O_tissue_saturation[0..31]
+// Outputs: int_O_desaturation_time, int_O_nofly_time
 //
-void deco_calc_desaturation_time(void)
+// Helper function
+//
+void calc_desaturation_time_helper(void)
 {
-    RESET_C_STACK
-
-    assert( 800 < int_I_pres_surface && int_I_pres_surface < 1100 );
-    assert( 0 < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
-
-    N2_ratio = 0.7902; // FIXED sum as stated in buhlmann
-    pres_surface = int_I_pres_surface * 0.001;
-    ppN2 = N2_ratio * (pres_surface - ppWater);
-    int_O_desaturation_time = 0;
-    float_desaturation_multiplier = char_I_desaturation_multiplier * (0.01 * SURFACE_DESAT_FACTOR);
-
-    for(ci=0; ci<NUM_COMP; ci++)
+	if( pres_actual > pres_target )					// check if actual pressure is higher then target pressure
+	{												// YES - compute remaining time
+		overlay	float pres_ratio;
+		
+		pres_ratio = pres_actual / pres_target;
+
+		// Compute desaturation time with result rounded up to multiples of 10 minutes.
+		// Main purpose is to avoid confusion, because the times do not clock down in one minute steps any more
+		// but get constantly re-computed according to current ambient pressure and may therefor make steps of
+		// several minutes forwards and backwards as ambient pressure rises and falls.
+		short_time = (unsigned short)( (var_ht * log(pres_ratio) / desat_factor) + 0.9 );
+	}
+	else
+	{												// NO  - desaturation state reached, no remaining time
+		short_time = 0;
+	}
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Main function
+//
+void calc_desaturation_time(void)
+{
+    assert( 800 < int_I_pres_surface             && int_I_pres_surface             < 1100 );
+    assert( 0   < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
+
+
+    N2_ratio       = 0.7902; 															// fraction of N2 in respired air
+	pres_surface   = 0.001    * int_I_pres_surface;										// surface pressure in bar
+	N2_equilibrium = N2_ratio * (pres_surface - ppWater); 								// partial pressure of N2 in respired air
+	desat_factor   = 0.06931  * char_I_desaturation_multiplier * SURFACE_DESAT_FACTOR;	// pre-computed term for later use: 
+																						// 10 [Min] * 0.01 [%] * 0.6931 [ln(2)] * ...
+	int_O_desaturation_time = 0;
+	int_O_nofly_time		= 0;
+	
+
+    for(ci=NUM_COMP; ci>0;)
     {
-        overlay unsigned short desat_time;    // For a particular compartiment, in min.
-        overlay float temp1;
-        overlay float temp2;
-        overlay float temp3;
-        overlay float temp4;
-
-        read_buhlmann_ht();
-
-        // saturation_time (for flight) and N2_saturation in multiples of halftime
-        // version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
-        // new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
-        // changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and NoFly calculations
-        // N2
-        temp1 = 1.05 * ppN2 - pres_tissue_N2[ci];
-        temp2 = ppN2 - pres_tissue_N2[ci];
-        if (temp2 >= 0.0)
-            temp1 = 0.0;
-        else
-            temp1 = temp1 / temp2;
-
-        if( 0.0 < temp1 && temp1 < 1.0 )
-        {
-            // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
-            // minus because log is negative.
-            temp1 = log(1.0 - temp1) / -0.6931; // temp1 is the multiples of half times necessary.
-            temp2 = var_N2_ht * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 5 percent)
-        }
-        else
-        {
-            temp1 = 0.0;
-            temp2 = 0.0;
-        }
-
-        // He
-        temp3 = 0.1 - pres_tissue_He[ci];
-        if (temp3 >= 0.0)
-            temp3 = 0.0;
-        else
-            temp3 = - temp3 / pres_tissue_He[ci];
-
-        if( 0.0 < temp3 && temp3 < 1.0 )
-        {
-            temp3 = log(1.0 - temp3) / -0.6931; // temp1 is the multiples of half times necessary.
-                                                // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
-                                                // minus because log is negative
-            temp4 = var_He_ht * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
-        }
-        else
-        {
-            temp3 = 0.0;
-            temp4 = 0.0;
-        }
-
-        // saturation_time (for flight)
-        if (temp4 > temp2)
-            desat_time = (unsigned short)temp4;
-        else
-            desat_time = (unsigned short)temp2;
-
-        if(desat_time > int_O_desaturation_time)
-            int_O_desaturation_time = desat_time;
-
-        // N2 saturation in multiples of halftime for display purposes
-        temp2 = temp1 * 20.0;   // 0 = 1/8, 120 = 0, 249 = 8
-        temp2 = temp2 + 80.0;   // set center
-        if (temp2 < 0.0)
-            temp2 = 0.0;
-        if (temp2 > 255.0)
-            temp2 = 255.0;
-        char_O_tissue_N2_saturation[ci] = (char)temp2;
-
-        // He saturation in multiples of halftime for display purposes
-        temp4 = temp3 * 20.0;   // 0 = 1/8, 120 = 0, 249 = 8
-        temp4 = temp4 + 80.0;   // set center
-        if (temp4 < 0.0)
-            temp4 = 0.0;
-        if (temp4 > 255.0)
-            temp4 = 255.0;
-        char_O_tissue_He_saturation[ci] = (char)temp4;
-    } // for
+		overlay float			pres_tissue_max;
+		overlay float			P_ambient_altitude;
+		overlay signed char		search_direction;
+		overlay unsigned short	nofly_N2   =  0;
+		overlay unsigned short	nofly_He   =  0;
+		overlay unsigned short	nofly_last = ~0;
+
+		
+		ci -= 1;
+		
+        read_Buhlmann_ht();
+		read_Buhlmann_coefficients();
+		
+		// get selected target altitude
+		switch( char_I_altitude_wait )
+		{
+			case 1:  P_ambient_altitude = P_ambient_1000m;	break;
+			case 2:  P_ambient_altitude = P_ambient_2000m;	break;
+			case 3:  P_ambient_altitude = P_ambient_3000m;	break;
+			default: P_ambient_altitude = P_ambient_fly;	break;
+		}
+		
+		// Target pressure for the tissue is the Buhlmann limit. We use the Buhlmann
+		// coefficients for N2 also for He because it is easier to calculate and the
+		// N2 coefficients are more conservative than those for He, so we are on the
+		// safe side, too.
+        pres_tissue_max = (P_ambient_altitude/var_N2_b + var_N2_a);
+		
+		// Adjust target pressure in case the GF model is in use by GF-high
+		if( char_I_deco_model != 0 )
+		{
+			pres_tissue_max = ((pres_tissue_max - P_ambient_altitude) * char_I_GF_High_percentage * 0.01) + P_ambient_altitude;			
+		}
+		
+
+		//
+		// Desaturation time
+		//
+
+		// N2: actual amount of tissue pressure above equilibrium.
+		pres_actual = pres_tissue_N2[ci] - N2_equilibrium;
+		
+		// N2: half-time of the current tissue
+		var_ht		= var_N2_ht;
+
+		// Calculate desaturation time for N2 in tissue.
+		// Desaturated state is defined as residual tissue pressure <= 1.05 x ppN2 respired
+
+		pres_target = 0.05 * N2_equilibrium;
+
+		calc_desaturation_time_helper();
+
+		if( short_time > int_O_desaturation_time) int_O_desaturation_time = short_time;
+
+
+		// He: actual amount of tissue pressure above equilibrium.
+		pres_actual = pres_tissue_He[ci];								// equilibrium for He is 0 bar
+
+		// He: half-time of the current tissue
+		var_ht		= var_He_ht;
+		
+		// Calculate desaturation time for He in the tissue.
+		// Desaturated state is defined as residual tissue pressure <= 0.05 x ppN2 respired
+
+		pres_target = 0.05 * N2_equilibrium;
+
+		calc_desaturation_time_helper();
+
+		if( short_time > int_O_desaturation_time) int_O_desaturation_time = short_time;			
+
+
+		//
+		// no-fly time
+		//
+
+		// initialize search direction
+		search_direction = 0;
+		
+		for(;;)
+		{
+			// N2: actual amount of tissue pressure above equilibrium.
+			pres_actual = pres_tissue_N2[ci] - N2_equilibrium;
+		
+			// N2: half-time of the current tissue
+			var_ht		= var_N2_ht;
+		
+			// Calculate no-fly time for N2 in the tissue.
+			// Flying is permitted when the N2 pressure fits into the assigned fraction above equilibrium.
+
+			pres_target = (split_N2_He[ci] * 0.01) * (pres_tissue_max - N2_equilibrium);
+
+			if( pres_target < 0.0 )						// check if desaturation to fly target is possible
+			{
+				int_O_nofly_time = 288;					// NO  - set no-fly time to 288 * 10 min = 48 h
+				break;									// done for this compartment
+			}
+			else 
+			{
+				calc_desaturation_time_helper();
+				nofly_N2 = short_time;
+			}
+		
+			// He: actual amount of tissue pressure above equilibrium - equilibrium for He is 0 bar.
+			pres_actual = pres_tissue_He[ci];
+
+			// He: half-time of the current tissue
+			var_ht		= var_He_ht;
+		
+			// Calculate no-fly time for He in the tissue.
+			// Flying is permitted when the He pressure fits into the assigned fraction.
+
+			pres_target = ((100 - split_N2_He[ci]) * 0.01) * (pres_tissue_max - N2_equilibrium);
+
+			calc_desaturation_time_helper();
+			nofly_He = short_time;
+
+
+			// Because the sum of N2 and He tissue pressures needs to fit into the Buhlmann limit for
+			// no-fly time calculation, each gas gets assigned a fraction of the available total pressure
+			// limit. The optimum split between the two gases can not be computed by a single formular,
+			// because this would require the inversion of a function with two exponential terms, which is
+			// not possible. We do not want to do a computational complex simulation here like it is done
+			// in the deco calculation code (although we tackle the same base problem here), so we just let
+			// the computer try out which split will balance the no-fly times induced by the N2 and the He
+			// at best.
+			
+			// first of all, skip any optimization in case the current compartment is not the leading one
+			if( (nofly_N2 <= int_O_nofly_time) && (nofly_He <= int_O_nofly_time) ) break;
+
+			// check if the N2 requires more waiting time than the He
+			if( nofly_N2 >= nofly_He )							
+			{
+				// check if the search direction has changed, which means we are beyond the
+				// optimum now, or if we are at the upper stop limit of split_N2_He
+				if( (search_direction < 0) || (split_N2_He[ci] == 99) )
+				{	
+					// Either the just completed iteration was more close to the optimum or the one before
+					// was, so we take the best (i.e. shortest) time of both as the final no-fly time.
+					int_O_nofly_time = (nofly_N2 < nofly_last) ? nofly_N2 : nofly_last;
+					break;
+				}
+
+				// store the no-fly time found in this iteration
+				nofly_last = nofly_N2;				
+				
+				// increase the N2 fraction of the split and set search direction towards more N2
+				split_N2_He[ci]  +=  1;
+				search_direction  = +1;
+			}
+			else
+			{
+				// check if the search direction has changed, which means we are beyond the
+				// optimum now, or if we are at the lower stop limit of split_N2_He
+				if( (search_direction > 0) || (split_N2_He[ci] == 1) )
+				{	
+					// Either the just completed iteration was more close to the optimum or the one before
+					// was, so we take the best (i.e. shortest) time of both as the final no-fly time.
+					int_O_nofly_time = (nofly_He < nofly_last) ? nofly_He : nofly_last;
+					break;
+				}
+
+				// store the no-fly time found in this iteration
+				nofly_last = nofly_He;				
+				
+				// decrease the N2 fraction of the split and set search direction towards less N2
+				split_N2_He[ci]  -=  1;
+				search_direction  = -1;	
+			}
+			
+		} // for(;;)
+
+	} // for(compartments)
+
+		
+	// Rescale int_O_desaturation_time and int_O_nofly_time to full minutes for display purpose
+	int_O_desaturation_time *= 10;
+	int_O_nofly_time		*= 10;
+		
+	// Limit int_O_desaturation_time and int_O_nofly_time to 5999 = 99 hours + 59 minutes
+	// because of display space constraints and rounding done above.
+	if( int_O_desaturation_time > 5999 ) int_O_desaturation_time = 5999;
+	if( int_O_nofly_time        > 5999 ) int_O_nofly_time        = 5999;
+
+
+	// Clear the microbubbles warning when the current gradient factor is < GF_warning_threshold.
+	// As the locked warning will stay set, this will cause the warning be be displayed in attention
+	// color instead of warning color.
+	if( int_O_gradient_factor < GF_warning_threshold ) char_O_deco_warnings &= ~DECO_WARNING_MBUBBLES;
+	
+	// clear some warnings when the desaturation time has become zero
+	if( int_O_desaturation_time == 0 ) char_O_deco_warnings &= ~(   DECO_WARNING_IBCD     + DECO_WARNING_IBCD_lock
+																  + DECO_WARNING_MBUBBLES + DECO_WARNING_MBUBBLES_lock
+																  + DECO_WARNING_OUTSIDE  + DECO_WARNING_OUTSIDE_lock  );
+
 }
 
 //////////////////////////////////////////////////////////////////////////////
 // calc_wo_deco_step_1_min
 //
-// FIXED N2 Ratio
 // optimized in v.101 (...saturation_multiplier)
 // desaturation slowed down to 70,42%
 //
+// Input: int_I_pres_surface [mbar]
+//
 static void calc_wo_deco_step_1_min(void)
 {
-    assert( 800 < int_I_pres_surface && int_I_pres_surface < 1100 );
-    assert( 800 < int_I_pres_respiration && int_I_pres_respiration < 1100 );
-    assert( 100 <= char_I_saturation_multiplier && char_I_saturation_multiplier < 200 );
-    assert( 0 < char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100 );
-
-    N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+    assert( 800 <  int_I_pres_surface             && int_I_pres_surface             <  1100 );
+    assert( 100 <= char_I_saturation_multiplier   && char_I_saturation_multiplier   <  200  );
+    assert( 0   <  char_I_desaturation_multiplier && char_I_desaturation_multiplier <= 100  );
+
+	// setup input data for deco routines
     pres_respiration = pres_surface = int_I_pres_surface * 0.001;
-    ppN2 = N2_ratio * (pres_respiration - ppWater);
-    ppHe = 0.0;
-    float_desaturation_multiplier = char_I_desaturation_multiplier * (0.01 * SURFACE_DESAT_FACTOR);
+	
+	N2_ratio       = 0.7902; 									// according to Buhlmann
+	N2_equilibrium = N2_ratio * (pres_surface     - ppWater);	// used for N2 tissue graphics scaling
+    ppN2           = N2_ratio * (pres_respiration - ppWater);
+    ppHe           = 0.0;
+
+    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01 * SURFACE_DESAT_FACTOR;
     float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
 
-    calc_tissue(1);  // update the pressure in the tissues N2/He in accordance with the new ambient pressure
-
-    clear_deco_table();
-    char_O_deco_status = 3;     // surface new in v.102 : stays in surface state.
-    char_O_nullzeit = 0;
-    int_O_ascenttime = 0;
-    int_O_extra_ascenttime = 0;
+
+	// program what to do: 128 = Flag for "real" tissues, 1 = 1 minute
+	tissue_increment = 128 + 1;
+
+	// update the pressure in the tissues N2/He in accordance with the new ambient pressure
+	calc_tissue();
+
+	// clock down CNS by a 1 minute step
+	//CNS_fraction *= 0.992327946;				// is done in deco_calc_CNS_decrease_15min
+
+	// compute integer copy of CNS value
+	//compute_CNS_for_display();				// is done in deco_calc_CNS_decrease_15min
+
+	// reset deco engine start condition (probably not needed to be done here...)
+	char_O_deco_status &= ~DECO_STATUS_MASK;	// clear bits
+	char_O_deco_status |= DECO_STATUS_INIT;		// set bits
+
+	// reset some more data that are not applicable in surface mode
+    char_O_nullzeit            = 0;
+    int_O_ascenttime           = 0;
+	int_O_alternate_ascenttime = 0;
+	clear_deco_table();
+	
+	// calculate gradient factor
     calc_gradient_factor();
 }
 
@@ -1943,8 +3057,9 @@
 //
 // Prepare tissue for delay before the next dive simulation.
 //
-// Inputs:  char_I_dive_interval == delay before dive (in 10' steps).
-// Outputs: pres_tissue_N2/He[], CNS_fraction
+// Inputs:   char_I_dive_interval == delay before dive (in 1 Minute steps).
+// Modified: CNS_fraction, int_O_CNS_fraction
+// 			 pres_tissue_N2/He[]
 //
 // Should be protected by deco_push_tissues_to_vault(),
 //                        deco_pull_tissues_from_vault()
@@ -1956,397 +3071,700 @@
     overlay unsigned char t;
     
     //---- Initialize simulation parameters ----------------------------------
-    N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
     pres_respiration = pres_surface = int_I_pres_surface * 0.001;
-    ppN2 = N2_ratio * (pres_respiration - ppWater);
-    ppHe = 0.0;
-    float_desaturation_multiplier = char_I_desaturation_multiplier * (0.01 * SURFACE_DESAT_FACTOR);
+	
+	N2_ratio       = 0.7902; 									// according to buehlmann
+	N2_equilibrium = N2_ratio * (pres_surface     - ppWater);	// used for N2 tissue graphics scaling
+    ppN2           = N2_ratio * (pres_respiration - ppWater);
+    ppHe           = 0.0;
+	
+    float_desaturation_multiplier = char_I_desaturation_multiplier * 0.01 * SURFACE_DESAT_FACTOR;
     float_saturation_multiplier   = char_I_saturation_multiplier   * 0.01;
-
+	
     //---- Perform simulation ------------------------------------------------
-    for(t=0; t<char_I_dive_interval; ++t)
-    {
-        calc_tissue(2);  // period = 10min.
-        CNS_fraction =  0.92587471 * CNS_fraction;  // Half-time = 90min: (1/2)^(1/9)
-    }
-    assert( 0.0 <= CNS_fraction && CNS_fraction <= 9.99 ); // 999 %
-    int_O_CNS_fraction = (unsigned short)(CNS_fraction * 100.0 + 0.5);
-
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// deco_clear_CNS_fraction
-//
-// new in v.101
-//
-void deco_clear_CNS_fraction(void)
-{
-    RESET_C_STACK
-
-    CNS_fraction = 0.0;
-    int_O_CNS_fraction = 0;
+
+	// Calculate tissues:
+	// Because tissue_increment is limited to 127 minutes, we have to do two passes
+	// in case char_I_dive_interval is bigger than 127.
+	// Ops: char_I_dive_interval must be limited to 254!
+
+	t = char_I_dive_interval;
+
+	if ( t == 255 ) t = 254;
+
+	if ( t > 127 )							// extra pass needed?
+	{
+		tissue_increment = 127				// dive interval length in minutes
+						 | 128;				// Flag to update the "real" tissues			
+		
+		calc_tissue();						// update tissues
+		
+		t -= 127;							// calculate remaining dive interval length
+	}
+
+	tissue_increment = t 					// dive interval length in minutes to do
+					 | 128;					// Flag to update the "real" tissues
+	calc_tissue();							// update tissues
+	
+
+	// Calculate CNS:
+	// To speed up things and because on most invocations of this code char_I_dive_interval
+	// is a multiple of 10 minutes, we loop the loop-counter down using two speeds.
+
+	t = char_I_dive_interval;
+
+	while ( t )
+	{
+		if( t > 9 )
+		{
+			CNS_fraction *= 0.925874712;	// Half-time = 90min -> 10 min: (1/2)^(1/9)
+			t            -= 10;				// fast speed looping
+		}
+		else
+		{
+			CNS_fraction *= 0.992327946;	// Half-time = 90min ->  1 min: (1/2)^(1/90)
+			t            -= 1;				// slow speed looping
+		}
+	}	
+
+	// compute integer copy of CNS value
+	compute_CNS_for_display();
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// deco_calc_CNS_fraction
+// clear_CNS_fraction
 //
-// Input:  char_I_actual_ppO2   : Current condition (in decibars).
-//         char_I_step_is_1min  : use 1min or 10min steps instead of 2sec.
-//         CNS_fraction         : velue before period.
-// Output: CNS_fraction, int_O_CNS_fraction
+// new in v.101
 //
-void deco_calc_CNS_fraction(void)
+void clear_CNS_fraction(void)
 {
-    overlay float time_factor = 1.0f;
-    RESET_C_STACK
-
-    assert( 0.0 <= CNS_fraction && CNS_fraction <= 9.99 );
-    assert( char_I_actual_ppO2 > 15 );
-
-    if( char_I_step_is_1min == 1 )
-        time_factor = 30.0f;
-    else if( char_I_step_is_1min == 2  )
-        time_factor = 300.0f;
+	CNS_fraction       = CNS_sim_norm_fraction     = CNS_sim_alt_fraction         = 0;
+	int_O_CNS_fraction = int_O_normal_CNS_fraction = int_O_alternate_CNS_fraction = 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// calc_CNS_fraction
+//
+// Input:  char_actual_ppO2     : current ppO2 [decibars]
+//         tissue_increment  	: time increment and tissue selector
+//         CNS_fraction         : current CNS% as float before period
+//
+// Output: CNS_fraction,          int_O_CNS_fraction 			- for the real tissues
+//         CNS_sim_norm_fraction, int_O_normal_CNS_fraction		- in simulation mode, normal plan
+//         CNS_sim_alt_fraction,  int_O_alternate_CNS_fraction  - in simulation mode, alternative plan
+//
+void calc_CNS_fraction(void)
+{
+    overlay float time_factor       = 1.0;		// default is 2sec
+	overlay float CNS_fraction_temp = 0.0;
+	
+    assert( char_actual_ppO2 > 15 );
+	
+	// All deco code is now invoked every second. But as the CNS update is based on
+	// 2 seconds periods, we skip every 2nd seconds-based invocation of this function.
+	// 128 = 128 (flag for "real" CNS) + 0 (2 seconds period)
+	// To distribute computational load, the CNS% is calculated in "the other second"
+	// than the tissues.
+	if( (tissue_increment == 128) && (twosectimer) ) return;
+	
+	// adjust time factor if minute-based stepping is commanded, mask out flag bit
+	if( tissue_increment & 127 ) time_factor = 30.0 * (float)(tissue_increment & 127);
+
+		
     //------------------------------------------------------------------------
     // Don't increase CNS below 0.5 bar, but keep it steady.
-    if (char_I_actual_ppO2 < 50)
+    if (char_actual_ppO2 < 50)
         ;   // no changes
     //------------------------------------------------------------------------
     // Below (and including) 1.60 bar
-    else if (char_I_actual_ppO2 < 61)
-        CNS_fraction += time_factor/(-533.07 * char_I_actual_ppO2 + 54000.0);
-    else if (char_I_actual_ppO2 < 71)
-        CNS_fraction += time_factor/(-444.22 * char_I_actual_ppO2 + 48600.0);
-    else if (char_I_actual_ppO2 < 81)
-        CNS_fraction += time_factor/(-355.38 * char_I_actual_ppO2 + 42300.0);
-    else if (char_I_actual_ppO2 < 91)
-        CNS_fraction += time_factor/(-266.53 * char_I_actual_ppO2 + 35100.0);
-    else if (char_I_actual_ppO2 < 111)
-        CNS_fraction += time_factor/(-177.69 * char_I_actual_ppO2 + 27000.0);
-    else if (char_I_actual_ppO2 < 152)
-        CNS_fraction += time_factor/( -88.84 * char_I_actual_ppO2 + 17100.0);
-    else if (char_I_actual_ppO2 < 167)
-        CNS_fraction += time_factor/(-222.11 * char_I_actual_ppO2 + 37350.0);
+    else if (char_actual_ppO2 < 61)
+        CNS_fraction_temp = time_factor/(-533.07 * char_actual_ppO2 + 54000.0);
+    else if (char_actual_ppO2 < 71)
+        CNS_fraction_temp = time_factor/(-444.22 * char_actual_ppO2 + 48600.0);
+    else if (char_actual_ppO2 < 81)
+        CNS_fraction_temp = time_factor/(-355.38 * char_actual_ppO2 + 42300.0);
+    else if (char_actual_ppO2 < 91)
+        CNS_fraction_temp = time_factor/(-266.53 * char_actual_ppO2 + 35100.0);
+    else if (char_actual_ppO2 < 111)
+        CNS_fraction_temp = time_factor/(-177.69 * char_actual_ppO2 + 27000.0);
+    else if (char_actual_ppO2 < 152)
+        CNS_fraction_temp = time_factor/( -88.84 * char_actual_ppO2 + 17100.0);
+    else if (char_actual_ppO2 < 167)
+        CNS_fraction_temp = time_factor/(-222.11 * char_actual_ppO2 + 37350.0);
     //------------------------------------------------------------------------
     // Arieli et all.(2002): Modeling pulmonary and CNS O2 toxicity:
     // J Appl Physiol 92: 248--256, 2002, doi:10.1152/japplphysiol.00434.2001
     // Formula (A1) based on value for 1.55 and c=20
     // example calculation: Sqrt((1.7/1.55)^20)*0.000404
-    else if (char_I_actual_ppO2 < 172)
-        CNS_fraction += time_factor*0.00102;
-    else if (char_I_actual_ppO2 < 177)
-        CNS_fraction += time_factor*0.00136;
-    else if (char_I_actual_ppO2 < 182)
-        CNS_fraction += time_factor*0.00180;
-    else if (char_I_actual_ppO2 < 187)
-        CNS_fraction += time_factor*0.00237;
-    else if (char_I_actual_ppO2 < 192)
-        CNS_fraction += time_factor*0.00310;
-    else if (char_I_actual_ppO2 < 198)
-        CNS_fraction += time_factor*0.00401;
-    else if (char_I_actual_ppO2 < 203)
-        CNS_fraction += time_factor*0.00517;
-    else if (char_I_actual_ppO2 < 233)
-        CNS_fraction += time_factor*0.0209;
+    else if (char_actual_ppO2 < 172)
+        CNS_fraction_temp = time_factor*0.00102;
+    else if (char_actual_ppO2 < 177)
+        CNS_fraction_temp = time_factor*0.00136;
+    else if (char_actual_ppO2 < 182)
+        CNS_fraction_temp = time_factor*0.00180;
+    else if (char_actual_ppO2 < 187)
+        CNS_fraction_temp = time_factor*0.00237;
+    else if (char_actual_ppO2 < 192)
+        CNS_fraction_temp = time_factor*0.00310;
+    else if (char_actual_ppO2 < 198)
+        CNS_fraction_temp = time_factor*0.00401;
+    else if (char_actual_ppO2 < 203)
+        CNS_fraction_temp = time_factor*0.00517;
+    else if (char_actual_ppO2 < 233)
+        CNS_fraction_temp = time_factor*0.0209;
     else
-        CNS_fraction += time_factor*0.0482; // value for 2.5
-
-    if( CNS_fraction > 9.99)    // Limit display to 999%
-        CNS_fraction = 9.99;
-    if( CNS_fraction < 0.0 )
-        CNS_fraction = 0.0;
-
-    int_O_CNS_fraction = (unsigned short)(100.0 * CNS_fraction + 0.5);
+        CNS_fraction_temp = time_factor*0.0482; // value for 2.5 bar, used for 2.33 bar and above
+
+
+	// Check from where we were called:
+	// flag (bit 7) is  set -> we were called from calc_hauptroutine()
+	// flag (bit 7) not set -> we were called from the deco planning routines
+	if       ( tissue_increment   & 128                 ) CNS_fraction          += CNS_fraction_temp;	// real tissues
+	else if  ( char_O_deco_status & DECO_PLAN_ALTERNATE ) CNS_sim_alt_fraction  += CNS_fraction_temp;	// alternative plan
+	     else                                             CNS_sim_norm_fraction += CNS_fraction_temp;	// normal plan
+
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// deco_calc_CNS_planning
+// calc_CNS_planning
 //
 // Compute CNS during predicted ascent.
 //
 // Note:    Needs a call to deco_push_tissues_to_vault(),
 //          deco_pull_tissues_from_vault() to avoid trashing everything...
 //
-// Input:   CNS_fraction, char_O_deco_time[], char_O_deco_depth[]
-// Output:  CNS_fraction, int_O_CNS_fraction
+// Input:   CNS_fraction, internal_deco_time[], internal_deco_depth[], internal_deco_gas[]
+// Output:  CNS_fraction, int_O_normal_CNS_fraction / int_O_alternate_CNS_fraction
 //
-void deco_calc_CNS_planning(void)
+void calc_CNS_planning(void)
 {
-    overlay unsigned char  backup_gas_last_depth;
-    overlay unsigned char  backup_gas_last_used;
-    overlay unsigned short backup_dive_mins;
-    overlay unsigned char  backup_actual_ppO2;
-
-    RESET_C_STACK
-
-    // Backup state machine
-    backup_gas_last_depth = sim_gas_last_depth;
-    backup_gas_last_used  = sim_gas_last_used;
-    backup_dive_mins      = sim_dive_mins;
-    backup_actual_ppO2    = char_I_actual_ppO2;
-
-    // Uses 1min CNS period:
-    char_I_step_is_1min = 1;
-
-    //---- Retrieve bottom Gas used, and set variables.
-    sim_gas_last_used  = char_I_first_gas;
-    sim_gas_last_depth = 0;             // Surface gas marker.
-    gas_switch_set();                   // Sets initial calc_N2/He_ratio
-
-    //---- CCR mode : do the full TTS at once --------------------------------
-    if( char_I_const_ppO2 != 0 )
+	// start with CNS% we already have
+	if( char_O_deco_status & DECO_PLAN_ALTERNATE ) CNS_sim_alt_fraction  = CNS_fraction;
+	else                                           CNS_sim_norm_fraction = CNS_fraction;
+
+	
+    //---- CCR mode : do the full TTS at once ---------------------------------
+
+	if( ((char_O_deco_status & DECO_MODE_MASK) == DECO_MODE_CCR) )
+    {
+		overlay unsigned short t;       				// needs 16 bits here !
+
+		// get current ppO2 from sensors or setpoint
+        char_actual_ppO2 = char_I_const_ppO2;
+
+		// calculate CNS% for the period of additional staying at bottom depth (fTTS / delayed ascent)
+		if( char_O_deco_status & DECO_ASCENT_DELAYED)
+		{
+			tissue_increment  = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
+			calc_CNS_fraction();
+		}
+		
+		// get the ascent time dependent on the current plan
+		t = (char_O_deco_status & DECO_PLAN_ALTERNATE) ? int_O_alternate_ascenttime : int_O_ascenttime;
+		
+		// start simulating CNS% in chunks of 127 minutes
+		tissue_increment = 127;
+
+		while( t > 127 )
+		{
+			t -= 127;									// tissue_increment is limited to 127 minutes because of flag in bit 7
+			calc_CNS_fraction();						// calculate CNS in chunks of full 127 minutes
+		}
+
+		tissue_increment = (char)t;						// get the remaining minutes <= 127
+		calc_CNS_fraction();							// calculate CNS for the remaining minutes
+    }
+	else //---- OC mode and pSCR without sensors: have to follow all gas switches... -----
     {
-        overlay unsigned short t;       // Needs 16bits here !
-        char_I_actual_ppO2 = char_I_const_ppO2;
-        for(t=0; t<int_O_ascenttime; ++t)
-            deco_calc_CNS_fraction();
-    }
-    else //---- OC mode : have to follow all gas switches... -----------------
-    {
-        overlay unsigned char i = 0;    // Decostop loop counter
-        overlay float actual_ppO2;
-        overlay unsigned char time, t;
-
-        //---- Ascent to surface delay
-        // NOTE: count as if time is spent with bottom pressure,
-        //       AND the bottom gas
-        actual_ppO2 = (pres_surface + char_I_bottom_depth * METER_TO_BAR)
-                    * (1.0 - calc_N2_ratio - calc_He_ratio);
-        if( actual_ppO2 < 0.0  ) actual_ppO2 = 0.0;
-        if( actual_ppO2 > 2.50 ) actual_ppO2 = 2.55;
-        char_I_actual_ppO2 = (unsigned char)(100.0 * actual_ppO2 + 0.5);
-
-        // Ascent time (rounded up):
-        time = (unsigned char)(0.1 * char_I_bottom_depth + 0.5);
-
-        for(t=0; t<time; ++t)
-        {
-            deco_calc_CNS_fraction();
-            sim_dive_mins++;
-        }
-
-        //---- Do all further stops ------------------------------------------
+		overlay float float_actual_ppO2;
+		overlay float abs_pres;
+
+		overlay unsigned char stop_depth;
+		overlay unsigned char last_gas;
+		overlay unsigned char i;    					// stop table index
+
+		
+		// retrieve bottom gas: 1-5 for the configured gases or 0 for the manually set gas
+		last_gas = sim_gas_last_used = sim_gas_first_used;
+
+		// get the calc_N2/He/O2_ratios of the bottom gas
+		gas_switch_set();             
+
+		// calculate absolute pressure
+		abs_pres = pres_surface + bottom_depth * METER_TO_BAR;
+		
+		// switch on deco mode pSCR / OC
+		if( char_O_deco_status & DECO_MODE_PSCR )
+		{
+			//---- pSCR calculated --------------------------------------------
+
+			// abs_pres              is 0.0 ...     in bar
+			// calc_O2_ratio		 is 0.0 ...   1.0 as factor
+			// char_I_PSCR_drop      is 0   ...  15 as %
+			// char_I_PSCR_lungratio is 5   ...  20 as %
+			// float_actual_ppO2     is 0.0 ...     in cbar (!)
+
+			float_actual_ppO2 =   (100 * abs_pres * calc_O2_ratio)
+			                    - (1.0 - calc_O2_ratio) * char_I_PSCR_drop * char_I_PSCR_lungratio;
+		}
+		else
+		{
+			//---- OC ---------------------------------------------------------
+			
+			float_actual_ppO2 = abs_pres * calc_O2_ratio * 100; // in cbar (!)
+		}
+	
+		// caution: float_actual_ppO2 is in cbar here!
+		if      ( float_actual_ppO2 < 0.0   ) char_actual_ppO2 =   0;
+        else if ( float_actual_ppO2 > 254.5 ) char_actual_ppO2 = 255;
+        else                                  char_actual_ppO2 = (unsigned char)(float_actual_ppO2 + 0.5);
+		
+
+		// simulate extended bottom time (fTTS) / delay before ascent (bailout) if configured
+		if( char_O_deco_status & DECO_ASCENT_DELAYED )
+		{
+			tissue_increment  = char_I_extra_time;		// must be limited to 127, is limited by range of char_I_extra_time
+			calc_CNS_fraction();			
+		}
+
+		
+		// For simplicity reason (non-linearity of the relation between ppO2 and CNS increments), the
+		// whole ascent is calculated with bottom ppO2. This errs, but it does so to the safe side.
+		
+		// calculate ascent time (integer division and generous round-up)
+		tissue_increment = bottom_depth / char_I_ascent_speed + 1;
+		
+		// ** commented out - not needed when char_I_ascent_speed is limited to a
+		// **                 minimum of 2.something, it is indeed limited to 5.
+		//
+		// // limit tissue_increment to 127 minutes
+		// if( tissue_increment > 127 ) tissue_increment = 127;			
+
+		// simulate the CNS increase
+		calc_CNS_fraction();
+
+
+        //---- Stops ---------------------------------------------------------
+		
         for(i=0; i<NUM_STOPS; ++i)
         {
-            overlay unsigned char stop_gas;
-
-            //---- Get next stop ---------------------------------------------
-            {
-                time             = char_O_deco_time[(NUM_STOPS-1)-i];
-                temp_depth_limit = char_O_deco_depth[(NUM_STOPS-1)-i];
-                stop_gas         = char_O_deco_gas[(NUM_STOPS-1)-i];
-            }
-            if( time == 0 ) continue;
-
-            //---- Gas Switch ? ----------------------------------------------
-            if( stop_gas != sim_gas_last_used )
+			// get the depth of the stop
+			stop_depth = internal_deco_depth[i];
+
+			// did we reach the last entry (depth = 0)? if yes, done
+			if (stop_depth == 0) break;
+
+			// get the duration of the stop and the gas breathed
+			tissue_increment  = internal_deco_time[i];
+            sim_gas_last_used = internal_deco_gas[i];
+			
+            // do we have a gas switch?
+            if( sim_gas_last_used != last_gas )
             {
-                sim_gas_last_depth = deco_gas_change[stop_gas-1];
-                sim_gas_last_used  = stop_gas;
-                gas_switch_set();
-            }
-
-            //---- Convert Depth and N2_ratio to ppO2 ------------------------
-            actual_ppO2 = (pres_surface + temp_depth_limit * METER_TO_BAR)
-                        * (1.0 - calc_N2_ratio - calc_He_ratio);
-            if( actual_ppO2 < 0.0  ) actual_ppO2 = 0.0;
-            if( actual_ppO2 > 2.50 ) actual_ppO2 = 2.55;
-            char_I_actual_ppO2 = (unsigned char)(100.0 * actual_ppO2 + 0.5);
-
-            //---- Apply the stop
-            for(t=0; t<time; ++t)
-            {
-                deco_calc_CNS_fraction();
-                sim_dive_mins++;
-            }
+				// yes - get new calc ratios
+				gas_switch_set();				
+
+				// remember new gas as last gas
+				last_gas = sim_gas_last_used;
+			}
+
+            // calculate absolute pressure at stop depth
+			abs_pres = pres_surface + stop_depth * METER_TO_BAR;
+			
+			// pSCR mode
+			if( char_O_deco_status & DECO_MODE_PSCR )
+			{
+				// abs_pres              is 0.0 ...     in bar
+				// calc_O2_ratio		 is 0.0 ...   1.0 as factor
+				// char_I_PSCR_drop      is 0   ...  15 as %
+				// char_I_PSCR_lungratio is 5   ...  20 as %
+				// float_actual_ppO2     is 0.0 ...     in cbar (!)
+
+				float_actual_ppO2 =   (100 * abs_pres * calc_O2_ratio)
+				                    - (1.0 - calc_O2_ratio) * char_I_PSCR_drop * char_I_PSCR_lungratio;
+			}
+			else // OC mode
+			{
+				float_actual_ppO2 = abs_pres * calc_O2_ratio * 100;	// in cbar (!)
+			}
+
+			// caution: float_actual_ppO2 is in cbar here!
+			if      ( float_actual_ppO2 < 0.0   ) char_actual_ppO2 =   0;
+			else if ( float_actual_ppO2 > 254.5 ) char_actual_ppO2 = 255;
+			else                                  char_actual_ppO2 = (unsigned char)(float_actual_ppO2 + 0.5);
+
+			
+			// ** Currently, stop times per stop entry are limited to 99 minutes in update_deco_table(),
+			// ** so the following code block is not needed at times.
+			//
+			// // tissue_increment is limited to 127 when fed to deco_calc_CNS_fraction(),
+			// // so if the stop is longer than 127 minutes (but not longer than 254 minutes!)
+			// // we need to calculate the CNS in two chunks.
+			// if( tissue_increment > 127)
+			// {
+			//		tissue_increment -= 127;	// subtract full 127 minutes and do the "remaining" minutes first
+			//		calc_CNS_fraction();
+			//		tissue_increment  = 127;	// catch up with the previously subtracted full 127 minutes
+			// }
+
+            // calculate CNS% for the stop			
+			calc_CNS_fraction();
         }
     }
-
-    //---- Back to normal mode... --------------------------------------------
-    char_I_step_is_1min = 0;
-    sim_gas_last_depth  = backup_gas_last_depth;
-    sim_gas_last_used   = backup_gas_last_used;
-    sim_dive_mins       = backup_dive_mins;
-    char_I_actual_ppO2  = backup_actual_ppO2;
 }
 
+
 //////////////////////////////////////////////////////////////////////////////
-// deco_calc_CNS_decrease_15min
+// gas_volumes
+//
+// calculates volumes and required tank fill pressures for each gas.
 //
-// new in v.101
+// Input:   bottom_depth			 depth of the bottom segment
+//			char_I_bottom_time		 duration of the bottom segment
+//			char_I_extra_time		 extra bottom time for fTTS / delayed ascent
+//			float_ascent_speed       ascent speed, in meters/minute
+//          sim_gas_first_used 		 the bottom gas (1-5 for configured gases, 0 for the manual gas)
+//          internal_deco_depth[]	 depth of the stops
+//			internal_deco_time[]	 duration of the stops
+//			internal_deco_gas[]      gas breathed at the stops
+//          char_I_bottom_usage 	 gas consumption during bottom part and initial ascent, in liters/minute
+//          char_I_deco_usage 		 gas consumption during stops and following ascents, in liters/minute
+//			char_I_tank_size[]       size of the tanks for gas 1-5, in liters
+//			char_I_tank_pres_fill[]  fill pressure of the tanks
 //
-// calculates the half time of 90 minutes in 6 steps of 15 min
-// (Used in sleepmode, for low battery mode).
+// Output:  int_O_gas_volumes[]      amount of gas needed, in liters
+//			int_O_tank_pres_need[]   in bar, + flags for fast evaluation by dive mode warnings:
+//											   2^15: pres_need >= pres_fill
+//											   2^14: pres_need >= press_fill * GAS_NEEDS_ATTENTION_THRESHOLD
+//											   2^11: pres_need == 0
+//											   2^10: pres_need invalid
 //
-// Output: int_O_CNS_fraction
-// Uses and Updates: CNS_fraction
-//
-void deco_calc_CNS_decrease_15min(void)
+void gas_volumes_helper(void)
+{
+	// Calculate the gas volume needed at a given depth, time and usage (SAC rate).
+	// We use 1.0 for the surface pressure to have stable results when used through
+	// the deco calculator (simulation mode).
+	volume = (float_depth * METER_TO_BAR + 1.0) * float_time * usage;
+	
+	return;
+}
+
+void gas_volumes(void)
 {
-    RESET_C_STACK
-    assert( 0.0 <= CNS_fraction && CNS_fraction <= 9.99 );
-
-    CNS_fraction =  0.890899 * CNS_fraction;
-    int_O_CNS_fraction = (unsigned short)(CNS_fraction * 100.0 + 0.5);
+	overlay float volumes[NUM_GAS];
+
+	overlay unsigned char stop_gas;
+	overlay unsigned char stop_gas_last;
+	overlay unsigned char stop_time;
+	overlay unsigned char stop_depth;
+	overlay unsigned char stop_depth_last;
+	overlay unsigned char i;
+
+	
+    //---- initialization ----------------------------------------------------
+	
+	// null the volume accumulators
+    for(i=0; i<NUM_GAS; ++i) volumes[i] = 0.0;
+
+	// quit for CCR and pSCR mode
+	if( char_O_deco_status & DECO_MODE_LOOP ) goto done;
+
+
+    //---- bottom demand -----------------------------------------------------
+	
+	// sim_gas_first_used : gas used during bottom segment (0, 1-5)
+	// bottom_depth: depth of the bottom segment
+	
+	assert(0 <= sim_gas_first_used && sim_gas_first_used <= NUM_GAS);
+
+	// get the gas used during bottom segment
+	stop_gas_last = stop_gas = sim_gas_first_used;
+	
+	// set the usage (SAC rate) to bottom usage rate for bottom part and initial ascent
+	usage = char_I_bottom_usage;
+		
+	// volumes are only calculated for gases 1-5, but not the manually configured one
+	if( stop_gas )
+	{
+		// set the bottom depth
+		float_depth = (float)bottom_depth;
+		
+		// calculate either bottom segment or just the fTTS/bailout delayed part
+		if( char_O_main_status & DECO_BOTTOM_CALCULATE )
+		{
+			// duration of bottom segment
+			float_time = (float)char_I_bottom_time;
+		}
+		else
+		{
+			// duration of delayed ascent
+			float_time = (float)char_I_extra_time;
+		}
+		
+		// calculate gas demand
+		gas_volumes_helper();
+		
+		// take result
+		volumes[stop_gas-1] = volume;
+	}
+	
+	
+	// initialize stop index with first stop
+	i = 0;
+
+	
+	//---- initial ascent demand ---------------------------------------------
+	
+	// stop_gas                : gas from bottom segment
+	// bottom_depth            : depth of the bottom segment in meters
+	// internal_deco_depth[i=0]: depth of the first stop, may be 0 if no stop exists
+	
+	// get the data of the first stop	
+	stop_depth = internal_deco_depth[i];
+	stop_time  = internal_deco_time[i];
+	
+	// volumes are only calculated for gases 1-5, but not the manually configured one
+	if( stop_gas )
+	{
+		// compute distance between bottom and first stop
+		float_depth = (float)bottom_depth - (float)stop_depth;
+		
+		// initial ascent exists only if ascent distance is > 0
+		if( float_depth > 0.0 )
+		{
+			// compute ascent time
+			float_time = float_depth / float_ascent_speed;
+		
+			// compute average depth between bottom and first stop
+			float_depth = (float)bottom_depth - float_depth * 0.5;
+
+			// calculate gas demand
+			gas_volumes_helper();
+
+			// add result
+			volumes[stop_gas-1] += volume;
+		}
+	}
+
+	// switch the usage (SAC rate) to deco usage rate
+	// for stops, intermediate and final ascent
+	usage = char_I_deco_usage;
+	
+	// is there a (first) stop? if yes, goto stops processing
+	if( stop_depth ) goto stops;
+	
+	// add demand of a 3 minutes safety stop at 5 meters, at least for contingency...
+	float_time  = 3.0;
+	float_depth = 5.0;
+
+	// calculate gas demand
+	gas_volumes_helper();
+
+	// add result
+	volumes[stop_gas-1] += volume;
+
+	// proceed to volume conversion and pressure calculations
+	goto done;			
+
+	
+	//---- intermediate ascent demand ---------------------------------------
+inter_ascents:
+
+	// store last stop depth and gas
+	stop_depth_last = stop_depth;
+	stop_gas_last   = stop_gas;
+	
+	// check if we are at the end of the stops table
+	if( i < NUM_STOPS-1 )
+	{
+		// there are more entries - get the next stop data
+		i++;
+
+		// get the next stop depth
+		stop_depth = internal_deco_depth[i];
+
+		// check if there is indeed another stop,
+		// if not (depth = 0) treat as end of table
+		if( stop_depth == 0 ) goto end_of_table;
+
+		// get the next stop duration
+		stop_time = internal_deco_time[i];
+	}
+	else
+	{
+end_of_table:
+
+		// End of the stops table reached or no more stops: Split the remaining
+		// ascent into an intermediate ascent and a final ascent by creating a
+		// dummy stop at the usual last deco stop depth. Stop gas doesn't change.
+		stop_time  = 0;
+		stop_depth = char_I_depth_last_deco;
+	}
+
+	// volumes are only calculated for gases 1-5, but not the manually configured one
+	if( stop_gas_last )
+	{
+		// compute distance between the two stops:
+		// last stop will always be deeper than current stop
+		float_depth = (float)(stop_depth_last - stop_depth);
+
+		// compute ascent time
+		float_time = float_depth / float_ascent_speed;
+		
+		// compute average depth between the two stops
+		float_depth = (float)stop_depth_last - float_depth * 0.5;
+
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result
+		volumes[stop_gas_last-1] += volume;
+	}
+
+
+	//---- next stop demand -------------------------------------------------
+stops:
+	
+	// convert depth of the stop
+	float_depth = (float)stop_depth;
+	
+	// get the next gas
+	stop_gas = internal_deco_gas[i];
+	
+	// do we we have a gas change?
+	if( stop_gas_last && (stop_gas != stop_gas_last) )
+	{
+		// yes - spend an additional char_I_gas_change_time on the old gas
+		float_time = (float)char_I_gas_change_time;
+		
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result
+		volumes[stop_gas_last-1] += volume;
+	}
+	
+	// calculate and add demand on new gas for the full stop duration
+	if( stop_gas )
+	{
+		// get the duration of the stop
+		float_time = (float)stop_time;
+				
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result to last gas
+		volumes[stop_gas-1] += volume;
+	}
+
+	// continue with the next intermediate ascent if this was not the last stop
+	if( stop_depth > char_I_depth_last_deco ) goto inter_ascents;
+
+
+	//---- final ascent demand -----------------------------------------------
+final_ascent:
+
+	// float_depth: depth of last stop
+	// stop_gas   : gas from last stop (0 or 1-5)
+	
+	// volumes are only calculated for gases 1-5, but not the manually configured one	
+	if( stop_gas )
+	{
+		// set ascent time according to an ascent speed of 1 meter per minute
+		float_time = float_depth;
+		
+		// set half-way depth
+		float_depth *= 0.5;
+		
+		// calculate gas demand
+		gas_volumes_helper();
+
+		// add result
+		volumes[stop_gas-1] += volume;
+	}
+
+
+    //---- convert results for the assembler interface -----------------------------
+done:
+
+    for(i=0; i<NUM_GAS; ++i)
+	{
+        if( volumes[i] >= 65534.5 )
+		{
+			int_O_gas_volumes[i]	= 65535;
+			int_O_tank_pres_need[i]	= 999 + INT_FLAG_WARNING; // 999 bar + warning flag for > pres_fill
+		}
+		else
+		{
+			overlay unsigned short tank_pres_fill = 10.0 * (unsigned short)char_I_tank_pres_fill[i];
+			
+			// No distinct rounding done here because volumes are not accurate to the single liter anyhow
+			
+			// convert gas volumes to integers
+            int_O_gas_volumes[i]     = (unsigned short)volumes[i];
+		
+			// compute how much pressure in the tank will be needed [in bar]  (integer-division)
+			int_O_tank_pres_need[i]  = (unsigned short)(int_O_gas_volumes[i] / char_I_tank_size[i]);
+			
+			// limit to 999 bar because of display constraints
+			if( int_O_tank_pres_need[i] > 999 ) int_O_tank_pres_need[i] = 999;
+			
+			// set flags for fast evaluation by divemode check for warnings
+			if     ( int_O_tank_pres_need[i] == 0 )
+			{
+				// set flag for 0 bar
+				int_O_tank_pres_need[i] |= INT_FLAG_ZERO;
+			}
+			else if( int_O_tank_pres_need[i] >= tank_pres_fill )
+			{
+				// set warning flag
+				int_O_tank_pres_need[i] |= INT_FLAG_WARNING;
+
+			}
+			else if( int_O_tank_pres_need[i] >= tank_pres_fill * GAS_NEEDS_ATTENTION_THRESHOLD )
+			{
+				// set pre-warning flag
+				int_O_tank_pres_need[i] |= INT_FLAG_PREWARNING;	
+			}			
+
+			// set invalid flag if there is an overflow in the stops table
+			if( char_O_deco_warnings & DECO_WARNING_STOPTABLE_OVERFLOW )
+				int_O_tank_pres_need[i] |= INT_FLAG_INVALID;
+			
+		} // if( volumes[i] )
+	} // for
 }
 
 //////////////////////////////////////////////////////////////////////////////
-// deco_calc_percentage
-//
-// new in v.101
-//
-// calculates int_I_temp * char_I_temp / 100
-// output is int_I_temp
-//
-// Used to compute NoFly remaining time.
-//
-void deco_calc_percentage(void)
-{
-    RESET_C_STACK
-
-    assert( 60 <= char_I_temp && char_I_temp <= 100 );
-    assert( int_I_temp  < 5760 );      // Less than 4 days = 96h...
-
-    int_I_temp = (unsigned short)(((float)int_I_temp * (float)char_I_temp) * 0.01 );
-
-    assert( int_I_temp < 5760 );                            // Less than 96h too...
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// deco_gas_volumes
-//
-// new in v.111
-//
-// calculates volumes for each gas.
-//
-// Input:   char_I_bottom_depth, char_I_bottom_time for planned dive.
-//          Gas list.
-//          char_I_first_gas is the bottom gas.
-//          decoplan (char_O_deco_depth, char_O_deco_time).
-//          char_I_bottom_usage is bottom liters/minutes (5 .. 50) or bar/min.
-//          char_I_deco_usage is deco liters/minutes (5 .. 50) or bar/min.
-// Output:  int_O_gas_volumes[0..4] in litters * 0.1
-//
-void deco_gas_volumes(void)
+
+void compute_CNS_for_display(void)
 {
-    overlay float volumes[NUM_GAS];
-    overlay float bottom_usage, deco_usage;
-    overlay unsigned char i;
-    overlay unsigned char gas, depth;
-    overlay unsigned char lastGasStop;
-    RESET_C_STACK
-
-    //---- initialize --------------------------------------------------------
-    for(i=0; i<NUM_GAS; ++i)                            // Nothing yet...
-        volumes[i] = 0.0;
-
-    bottom_usage = char_I_bottom_usage;      // In liter/minutes.
-    deco_usage   = char_I_deco_usage;        // In liter/minutes.
-
-    // Early return if not defined:
-    if( deco_usage <= 0.0 || bottom_usage <= 0.0 )
-        goto done;
-
-    //---- Bottom usage -----------------------------------------------------
-    assert(1 <= char_I_first_gas && char_I_first_gas <= NUM_GAS);
-    gas = char_I_first_gas - 1;
-
-    if( char_I_const_ppO2 == 0 )
-        volumes[gas]
-            = (char_I_bottom_depth*0.1 + 1.0)           // Use Psurface = 1.0 bar.
-            * char_I_bottom_time                        // in minutes.
-            * bottom_usage;                             // In liter/minutes.
-
-    //---- Ascent usage ------------------------------------------------------
-    depth = char_I_bottom_depth;
-    lastGasStop = 255;          // Allow deco gas at or below bottom depth
-
-    for(i=0; i<NUM_STOPS; ++i)
-    {
-        overlay unsigned char newDepth, time;
-
-        time = char_O_deco_time [i];
-        if( time == 0 ) break;          // End of table: done.
-
-        newDepth = char_O_deco_depth[i];
-        assert(0 < newDepth && newDepth <= depth);
-
-        //---- Any gas switch before this stop -------------------------------
-        for(;;)
-        {
-            overlay unsigned char newGas  = 0;
-            overlay unsigned char newStop = 0;  // Mark as NO CHANGE yet
-            overlay unsigned char j;
-
-            for(j=0; j<NUM_GAS; ++j)
-            {
-                // Skip gas without changing depth:
-                if( ! char_I_deco_gas_change[j] )
-                    continue;
-                // Select gas changed between [newDepth .. lastGasStop[
-                // Note that <= means changing gas at BEGINNING of this stop.
-                // Note that < means we cant use the same gas twice
-                if( newDepth <= char_I_deco_gas_change[j]
-                 && char_I_deco_gas_change[j] < lastGasStop )
-                {
-                    // Keep the DEEPEST gas in that range:
-                    if( char_I_deco_gas_change[j] >= newStop )
-                    {
-                        newGas  = j;
-                        newStop = char_I_deco_gas_change[j];
-                    }
-                }
-            }
-
-             // Did we find something ?
-            if( !newStop )
-                break;
-
-            //---- usage BEFORE gas switch (if any), at 10m/min :
-            if( depth > newStop )
-                // Plus usage during ascent to the next stop, at 10m/min.
-                volumes[gas] += ((depth+newStop)*0.05 + 1.0)    // average depth --> bar.
-                              * (depth-newStop)*0.1             // metre --> min
-                              * deco_usage;
-
-            //---- Do gas switch:
-            gas = newGas;
-
-            lastGasStop = newStop;          // Mark last used gas
-            if( newStop < depth )           // ascent to gas switch,
-                depth = newStop;
-        }
-
-        // Are we back to gas from the deco list (just in case):
-        assert(gas == char_O_deco_gas[i]-1);
-
-        //---- usage AFTER gas switch (if any), at 10m/min :
-        if( depth > newDepth )
-            volumes[gas] += ((depth+newDepth)*0.05 + 1.0)    // average depth --> bar.
-                          * (depth-newDepth)*0.1             // metre --> min
-                          * deco_usage;
-
-        //---- Do stop:
-        depth = newDepth;
-
-        //---- Usage at stop:
-        volumes[gas] += (depth*0.1 + 1.0)   // depth --> bar.
-                      * time                // in minutes.
-                      * deco_usage;         // in xxx / min @ 1bar.
-    }
-
-    // From last stop to surface
-    volumes[gas] += (depth*0.05 + 1.0)      // avg depth --> bar.
-                  * depth * 0.1             // time to surface, in minutes.
-                  * deco_usage;             // in xxx / min @ 1bar.
-
-    //---- convert results for the ASM interface -----------------------------
-done:
-    for(i=0; i<NUM_GAS; ++i)
-        if( volumes[i] > 65534.0 )
-            int_O_gas_volumes[i] = 65535;
-        else
-            int_O_gas_volumes[i] = (unsigned short)(volumes[i] + 0.5);
+	if		( CNS_fraction <  0.01  ) int_O_CNS_fraction = 0;
+	else if ( CNS_fraction >= 9.985 ) int_O_CNS_fraction = 999 + INT_FLAG_WARNING;
+	else
+	{
+		// convert float to integer
+		int_O_CNS_fraction = (unsigned short)(100 * CNS_fraction + 0.5);
+	
+		// compute warnings
+		if		( int_O_CNS_fraction >= CNS_warning_threshold    )
+		{
+			// reset pre-warning and set main warning flag
+			int_O_CNS_fraction &= ~INT_FLAG_PREWARNING;			
+			int_O_CNS_fraction |=  INT_FLAG_WARNING;
+		}
+		else if	( int_O_CNS_fraction >= CNS_prewarning_threshold )
+		{
+			// reset main warning but set pre-warning flag
+			int_O_CNS_fraction &= ~INT_FLAG_WARNING;
+			int_O_CNS_fraction |=  INT_FLAG_PREWARNING;
+		}
+		else
+		{
+			// clear both warnings
+			int_O_CNS_fraction &= ~(INT_FLAG_WARNING + INT_FLAG_PREWARNING);
+		}
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -2354,10 +3772,14 @@
 void deco_push_tissues_to_vault(void)
 {
     overlay unsigned char x;
+
     RESET_C_STACK
 
-    cns_vault = CNS_fraction;
-    low_depth_vault = low_depth;
+	low_depth_norm_vault = low_depth_norm;
+	low_depth_alt_vault  = low_depth_alt;
+    cns_vault_float      = CNS_fraction;
+	cns_vault_int        = int_O_CNS_fraction;
+	deco_warnings_vault  = char_O_deco_warnings;
 
     for (x=0;x<NUM_COMP;x++)
     {
@@ -2369,21 +3791,23 @@
 void deco_pull_tissues_from_vault(void)
 {
     overlay unsigned char x;
+
     RESET_C_STACK
 
+	low_depth_norm       = low_depth_norm_vault;
+	low_depth_alt        = low_depth_alt_vault;
+    CNS_fraction         = cns_vault_float;
+    int_O_CNS_fraction   = cns_vault_int;
+	char_O_deco_warnings = deco_warnings_vault;
+	
+	locked_GF_step_norm  = GF_delta / low_depth_norm;
+	locked_GF_step_alt   = GF_delta / low_depth_alt;
+	
     for (x=0; x<NUM_COMP; x++)
     {
         pres_tissue_N2[x] = pres_tissue_N2_vault[x];
         pres_tissue_He[x] = pres_tissue_He_vault[x];
     }
-
-    // Restore both CNS variable, too.
-    CNS_fraction = cns_vault;
-    int_O_CNS_fraction = (unsigned short)(CNS_fraction * 100.0 + 0.5);
-
-    // GF history too:
-    low_depth = low_depth_vault;
-    locked_GF_step = GF_delta / low_depth;
 }
 
 //////////////////////////////////////////////////////////////////////////////
--- a/src/p2_definitions.h	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/p2_definitions.h	Wed Jan 31 19:39:37 2018 +0100
@@ -2,6 +2,8 @@
 // ** Common definitions for the OSTC decompression code  **
 // *********************************************************
 
+//									REFACTORED VERSION	V2.95
+
 //////////////////////////////////////////////////////////////////////////////
 // OSTC - diving computer code
 // Copyright (C) 2008 HeinrichsWeikamp GbR
@@ -20,30 +22,26 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //
 //////////////////////////////////////////////////////////////////////////////
-// history:
-// 2010-12-25 v110: [jDG] split in three files (deco.c, main.c, definitions.h)
 
-#define	MBAR_REACH_GASCHANGE_AUTO_CHANGE_OFF	150
+
 
 // *************************
 // ** P R O T O T Y P E S **
 // *************************
 
-extern void calc_percentage(void);
 extern void deco_calc_hauptroutine(void);
 extern void deco_clear_tissue(void);
-extern void deco_calc_percentage(void);
 extern void deco_calc_wo_deco_step_1_min(void);
 extern void deco_calc_dive_interval(void);
-extern void deco_gradient_array(void);
 extern void deco_calc_desaturation_time(void);
-extern void deco_calc_CNS_fraction(void);
-extern void deco_calc_CNS_planning(void);
+extern void calc_CNS_fraction(void);
+extern void calc_CNS_planning(void);
 extern void deco_calc_CNS_decrease_15min(void);
-extern void deco_clear_CNS_fraction(void);
+extern void clear_CNS_fraction(void);
 extern void deco_push_tissues_to_vault(void);
 extern void deco_pull_tissues_from_vault(void);
-extern void deco_gas_volumes(void);
+extern void gas_volumes(void);
+
 
 // ***********************************************
 // **         Allow compile on VisualC          **
--- a/src/ports.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/ports.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -19,7 +19,7 @@
 #DEFINE	switch_right2	PORTB,0	; Switch
 #DEFINE mcp_power		PORTB,2	; RX Power supply
 #DEFINE	s8_npower		PORTB,3	; Powers S8 Bulkhead (inverted)
-#DEFINE	LEDg			PORTB,4	; LED green
+#DEFINE	LEDg			PORTB,4	; LED green / active_reset_ostc_rx (<- Do no longer use this LED unless for debugging)
 #DEFINE	tft_power		PORTB,5 ; via P-MOSFET (Inverted)
 #DEFINE	icsp_clk		PORTB,6	; ICSP
 #DEFINE	icsp_dat		PORTB,7	; ICSP
@@ -32,8 +32,8 @@
 #DEFINE	I2C_RC3			PORTC,3	; I²C
 #DEFINE	I2C_RC4			PORTC,4	; I²C
 #DEFINE	MS5541_mosi		PORTC,5	; MS5541
-#DEFINE	uart1_RC6		PORTC,6	; UART1 (USB)
-#DEFINE	uart1_RC7		PORTC,7	; UART1 (USB)
+#DEFINE	uart1_RC6		PORTC,6	; UART1 (USB/BLE)
+#DEFINE	uart1_RC7		PORTC,7	; UART1 (USB/BLE)
 ; TRIS=b'10011010'
 
 ; PORTD
@@ -82,7 +82,7 @@
 #DEFINE	CHRG_IN 		PORTJ,3	; CHRG_IN
 #DEFINE	vusb_in			PORTJ,4	; external power supply detect, USB enumerated
 #DEFINE	power_sw1		PORTJ,5	; Power supply for switch2 circuit
-#DEFINE	MS5541_clk		PORTJ,6	; MS5541 mH
-#DEFINE	MS5541_miso		PORTJ,7	; MS5541 mH
+#DEFINE	MS5541_clk		PORTJ,6	; MS5541
+#DEFINE	MS5541_miso		PORTJ,7	; MS5541
 ; TRIS=b'10010000'
 
--- a/src/rtc.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/rtc.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -21,9 +21,9 @@
 	movwf	mins
 	movlw	.12
 	movwf	hours
-	movlw	.29
+	movlw	.2
 	movwf	day
-	movlw	.3
+	movlw	.12
 	movwf	month
 	movlw	.17
 	movwf	year
--- a/src/shared_definitions.h	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/shared_definitions.h	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 ;
-;    shared_definitions.h
+;    shared_definitions.h							REFACTORED VERSION	V2.95a1
 ;
 ;    Declare variables used both in C and ASM code
 ;
@@ -67,20 +67,12 @@
 #define TAB_UINT(n,size)   n    res     2*size
 #endif
 
-#ifdef __18CXX
-    //---- BANK 3 DATA -------------------------------------------------------
-    // Gather all data C-code --> ASM-code
-#   pragma udata overlay bank3=0x300
-#else
-bank3   udata_ovr  0x300
-#endif
-
 
 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Define model dimensions.
     NUM_COMP  is the number of compartiments in the Bühlmann ZH-L16 model, ie 16.
     NUM_STOPS is the maximum number of stops computed by decoplanning. 
-              Note that the deapest stop is roughly limited to 3m * NUM_STOPS
+              Note that the deepest stop is roughly limited to 3m * NUM_STOPS
                    (this is assuming all stops up to the surface are used).
               Note also that if the table overflow, extra stops are ignored,
                    and not reported in TTS summing.
@@ -91,34 +83,64 @@
 #define NUM_STOPS   0x20
 #define NUM_GAS     5
 
-VAR_UINT  (int_O_gtissue_press);
-VAR_UINT  (int_O_desaturation_time);       // 
-VAR_UINT  (int_O_ascenttime);              // TTS (in minutes)
-VAR_UINT  (int_O_extra_ascenttime);        // TTS for @+5min variant (in minutes)
-VAR_UINT  (int_O_CNS_fraction);            // new in v.101
+
+#ifdef __18CXX
+    //---- BANK 3 DATA -------------------------------------------------------
+    // Gather all data C-code --> ASM-code
+#   pragma udata overlay bank3=0x300
+#else
+    ; In ASM, put the same bank, in overlay mode, at the same address
+bank3   udata_ovr  0x300
+#endif
+
+VAR_UINT  (int_O_gtissue_press);					// pressure of leading compartment
+
+VAR_UINT  (int_O_desaturation_time);       			// time until tissues desaturated to 5% remains, in minutes
+VAR_UINT  (int_O_nofly_time);			   			// altitude / no-fly waiting time time in minutes
+
+VAR_UINT  (int_O_ascenttime);              			// time-to-surface (TTS) in minutes
+VAR_UINT  (int_O_alternate_ascenttime);    			// TTS for the alternative dive plan
+
+VAR_UINT  (int_O_CNS_fraction);            			// current CNS%
+VAR_UINT  (int_O_normal_CNS_fraction); 	   			// CNS% at end of dive in normal dive plan
+VAR_UINT  (int_O_alternate_CNS_fraction);  			// CNS% at end of dive in alternative plan
+
+VAR_UINT  (int_O_gradient_factor);        			// current gradient factor in %
+
+VAR_UCHAR (char_O_nullzeit);               			// remaining NDL time in minutes
+VAR_UCHAR (char_O_alternate_nullzeit);	   			// remaining NDL time for the alternative dive plan
 
-VAR_UCHAR (char_O_nullzeit);               // 
-VAR_UCHAR (char_O_deco_status);            // Deko state-machine state.
-VAR_UCHAR (char_O_deco_last_stop);         // Depth reached during deko planning.
-VAR_UCHAR (char_O_gradient_factor);        // 
-VAR_UCHAR (char_O_gtissue_no);             // 
-VAR_UCHAR (char_O_diluent);                // new in v.101
-VAR_UCHAR (char_O_flush_ppO2);             // 2011-05-01: ppO2 from diluant (CCR mode).
-VAR_UCHAR (char_O_EAD);                    // 2011-05-01: Added EAD/END in deco model.
-VAR_UCHAR (char_O_END);                    // 2011-05-01: Added EAD/END in deco model.
+VAR_UCHAR (char_O_main_status);						// setup of the deco engine regarding the real tissue   computations
+VAR_UCHAR (char_O_deco_status);            			// setup of the deco engine regarding the decompression computations
+
+VAR_UCHAR (char_O_gtissue_no);             			// number of the leading compartment
+
+VAR_UCHAR (char_O_EAD);                    			// equivalent air      depth (EAD) of breathed gas
+VAR_UCHAR (char_O_END);                    			// equivalent narcosis depth (END) of breathed gas
+
+VAR_UCHAR (char_O_first_deco_depth);        		// depth of first stop (deco or gas change)
+VAR_UCHAR (char_O_first_deco_time) ;        		// duration of first stop
+
+TAB_UCHAR (char_O_deco_depth, NUM_STOPS);   		// stops table: depth, ...
+TAB_UCHAR (char_O_deco_time,  NUM_STOPS);   		// ... duration, and
+TAB_UCHAR (char_O_deco_gas,   NUM_STOPS);   		// ... gas breathed
 
-VAR_UCHAR (char_O_first_deco_depth);        // Depth of first stop.
-VAR_UCHAR (char_O_first_deco_time) ;        // Duration of first stop.
-TAB_UCHAR (char_O_deco_depth, NUM_STOPS);   // Fusionned decompression table:
-TAB_UCHAR (char_O_deco_time,  NUM_STOPS);   // Both ZH-L16 and L16-GF models.
-TAB_UCHAR (char_O_deco_gas,   NUM_STOPS);   // Both ZH-L16 and L16-GF models.
-TAB_UCHAR (char_O_deco_time_for_log, NUM_STOPS); // For logging the full decoplan
+TAB_UCHAR (char_O_deco_time_for_log, NUM_STOPS); 	// variant of the stops table for logging purpose
+
+TAB_UCHAR (char_O_tissue_N2_saturation, NUM_COMP); 	// nitrogen tissue pressures for display purpose
+TAB_UCHAR (char_O_tissue_He_saturation, NUM_COMP); 	// helium   tissue pressures for display purpose
+
+VAR_UCHAR (char_O_deco_warnings);					// vector of warnings generated by the deco engine
 
-TAB_UCHAR (char_O_tissue_N2_saturation, NUM_COMP); // Nitrogen compartiment desaturation time, in min.
-TAB_UCHAR (char_O_tissue_He_saturation, NUM_COMP); // Helium compartiment desaturation time, in min.
+TAB_UINT  (int_O_gas_volumes,    NUM_GAS);			// gas volumes    needed in liters
+TAB_UINT  (int_O_tank_pres_need, NUM_GAS);			// tank pressures needed in bar
+VAR_UINT  (int_O_ceiling);							// ultimate ascent bound in mbar relative pressure
 
-TAB_UINT (int_O_gas_volumes, 5);            // Volumes evaluation for each gas tank, in 0.1 liters.
-VAR_UINT (int_O_ceiling);                  // in mbar
+VAR_UINT  (int_O_O2_ppO2);				   			// ppO2 of pure O2 at current depth
+VAR_UINT  (int_O_pure_ppO2);						// ppO2 of the current gas or dil if breathed pure
+VAR_UINT  (int_O_pSCR_ppO2);			   			// ppO2 calculated in pSCR loop
+VAR_UINT  (int_O_breathed_ppO2);					// ppO2 actually breathed (= char_O_pure_ppO2 if in OC)
+
 
 #ifdef __18CXX
     //---- BANK 4 DATA -------------------------------------------------------
@@ -129,42 +151,72 @@
 bank4   udata_ovr  0x400
 #endif
 
-VAR_UCHAR (char_I_step_is_1min);           // Use 1min integration for tissue and CNS.
+VAR_UINT  (int_I_pres_respiration);        // absolute pressure breathed
+VAR_UINT  (int_I_pres_surface);            // absolute pressure at surface
+
+VAR_UCHAR (char_I_current_gas);            // number of gas currently breathed (1..5 for configured gases, 6 for the manual gas)
+VAR_UCHAR (char_I_He_ratio);               // helium   ratio of the currently breathed gas
+VAR_UCHAR (char_I_O2_ratio);               // oxygen   ratio of the currently breathed gas
+
+VAR_UCHAR (char_I_saturation_multiplier);  // safety factor, 100 = no conservatism, 150 = 50% faster saturation
+VAR_UCHAR (char_I_desaturation_multiplier);// safety factor, 100 = no conservatism,  66 = 50% slower desaturation 
+
+VAR_UCHAR (char_I_GF_High_percentage);     // GF model high value
+VAR_UCHAR (char_I_GF_Low_percentage);      // GF model low value
+
+VAR_UCHAR (char_I_deco_distance);          // assumed extra depth below required depth for CNS and gas volumes calculations
+VAR_UCHAR (char_I_depth_last_deco);        // depth of the last deco stop in meters
+
+VAR_UCHAR (char_I_deco_model);             // deco model selection: 0 = ZH-L16, 1 = ZH-L16-GF (with gradient factors)
+
+VAR_UCHAR (char_I_bottom_depth);           // bottom depth, used for gas volume calculations
+VAR_UCHAR (char_I_bottom_time);            // bottom time,  used for gas volume calculations
+
+VAR_UCHAR (char_I_dive_interval);          // duration of surface break before next dive in minutes, used in simulation
+VAR_UCHAR (char_I_sim_advance_time);	   // 'fast forward' of dive time, used in simulation (+5 min function)
+
+VAR_UCHAR (char_I_const_ppO2);             // ppO2 reported from sensors or by setpoint
+
+TAB_UCHAR (char_I_deco_gas_change,NUM_GAS); // change depths of the OC gases
+TAB_UCHAR (char_I_dil_change,     NUM_GAS); // change depths of the diluent gases. Attention: must be placed after char_I_deco_gas_change!	Remark: not used by C code, only by ASM code
+
+TAB_UCHAR (char_I_setpoint_change,NUM_GAS); // change depth for the setpoints in meter
+TAB_UCHAR (char_I_setpoint_cbar,  NUM_GAS); // setpoints in cbar
+
+TAB_UCHAR (char_I_deco_O2_ratio,  NUM_GAS); // oxygen ratios of the configured gases, used for deco calculations
+TAB_UCHAR (char_I_deco_He_ratio,  NUM_GAS); // helium ratios of the configured gases, used for deco calculations
 
-VAR_UINT  (int_I_pres_respiration);        // 
-VAR_UINT  (int_I_pres_surface);            // 
-VAR_UINT  (int_I_temp);                    // new in v101
-VAR_UINT  (int_I_divemins);                // Dive time (minutes)
-VAR_UCHAR (char_I_temp);                   // new in v101
-VAR_UCHAR (char_I_actual_ppO2);            // 
-VAR_UCHAR (char_I_first_gas);              // Gas used at start of dive (bottom mix)
-VAR_UCHAR (char_I_current_gas);            // Current gas breathed (1..6).
-VAR_UCHAR (char_I_N2_ratio);               //
-VAR_UCHAR (char_I_He_ratio);               //
-VAR_UCHAR (char_I_O2_ratio);               //
-VAR_UCHAR (char_I_saturation_multiplier);  // for conservatism/safety values 1.0  no conservatism to 1.5  50% faster saturation
-VAR_UCHAR (char_I_desaturation_multiplier);// for conservatism/safety values 0.66  50% slower desaturation to 1.0  no conservatism// consveratism used in calc_tissue , calc_tissue_step_1_min  and sim_tissue_1min 
-VAR_UCHAR (char_I_GF_High_percentage);     // new in v.102
-VAR_UCHAR (char_I_GF_Low_percentage);      // new in v.102
-VAR_UCHAR (char_I_deco_distance);          // 
-VAR_UCHAR (char_I_depth_last_deco);        // new in v.101 unit: [m]
-VAR_UCHAR (char_I_deco_model);             // new in v.102. 0 == ZH-L16, 1 = ZH-L16-GF (Gradiant factor)
-VAR_UCHAR (char_I_bottom_depth);           // Bottom depth for planning (used in gas volume evaluation).
-VAR_UCHAR (char_I_bottom_time);            // Bottom time for planning (used in gas volume evaluation).
-VAR_UCHAR (char_I_dive_interval);          // Delay before next dive simulation.
-VAR_UCHAR (char_I_const_ppO2);             // new in v.101
+TAB_UCHAR (char_I_tank_size,      NUM_GAS);	// tank sizes, used for pressure needs calculation
+TAB_UCHAR (char_I_tank_pres_fill, NUM_GAS);	// tank fill pressures, used for generating warnings
+
+VAR_UCHAR (char_I_cc_max_frac_o2);	 		// limiter for maximum O2% in loop
+VAR_UCHAR (char_I_PSCR_drop);				// pSCR parameter drop [%]
+VAR_UCHAR (char_I_PSCR_lungratio);			// pSCR parameter lung ratio [1/x]
+
+VAR_UCHAR (char_I_altitude_wait);			// selector for altitude / no-fly waiting time calculation
+
+VAR_UCHAR (char_I_bottom_usage);            // gas consumption during bottom part and initial ascent   in liters/minute
+VAR_UCHAR (char_I_deco_usage);              // gas consumption during deco stops and following ascents in liters/minute
+
+VAR_UCHAR (char_I_extra_time);              // extra bottom time for fTTs and delayed ascent calculation in minutes
 
-TAB_UCHAR (char_I_deco_gas_change,NUM_GAS); // new in v.101
-TAB_UCHAR (char_I_dil_change,NUM_GAS);      // Must be placed after char_I_deco_gas_change!
+VAR_UCHAR (char_I_ppO2_max);				// warning threshold for maximum ppO2 during working phase of the dive
+VAR_UCHAR (char_I_ppO2_max_deco);			// warning threshold for maximum ppO2 during deco phase of the dive
+VAR_UCHAR (char_I_ppO2_min);				// warning threshold for maximum ppO2 when breathing OC
+VAR_UCHAR (char_I_ppO2_min_loop);			// warning threshold for maximum ppO2 when breathing from CCR or pSCR
 
-TAB_UCHAR (char_I_setpoint_change,NUM_GAS); // Change depths in m
-TAB_UCHAR (char_I_deco_N2_ratio, NUM_GAS);  // new in v.101
-TAB_UCHAR (char_I_deco_He_ratio, NUM_GAS);  // new in v.101
+VAR_UCHAR (char_I_ascent_speed);			// ascent speed in meters/minute
+VAR_UCHAR (char_I_gas_change_time);			// extra time spent during a stop for doing a gas change, in minutes
+
 
-TAB_UCHAR (char_I_setpoint_cbar,NUM_GAS);         // Setpoints in cbar
-
-VAR_UCHAR (char_I_bottom_usage);            // [l/min]
-VAR_UCHAR (char_I_deco_usage);              // [l/min]
-
-VAR_UCHAR (char_I_extra_time);              // [min]
-VAR_UCHAR (temp_bankx400);                  // temp
+#ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+// VAR_UCHAR (char_I_step_is_1min);        // Use 1min integration for tissue and CNS.	DELETED ## V2.95 - made local to p2_deco.c
+// VAR_UINT  (int_I_temp);                 // new in v101								DELETED ## no fly
+// VAR_UINT  (int_I_divemins);             // Dive time (minutes)					 	DELETED ## V2.95 - not used by p2_deco.c
+// VAR_UCHAR (char_I_temp);                // new in v101							 	DELETED ## no fly
+// VAR_UCHAR (char_I_actual_ppO2);         //										 	DELETED ## V2.94
+// VAR_UCHAR (char_I_first_gas);           // Gas used at start of dive (bottom mix) 	DELETED ## V2.95 - made local to p2_deco.c
+// VAR_UCHAR (char_I_N2_ratio);            // N2 ratio of the currently breathed gas	DELETED ## V2.95 - not read from ASM, but actually computed by p2_deco.c from H2 and O2 ratio
+// VAR_UCHAR (char_O_deco_last_stop);      // Depth reached during deco planning.		DELETED ## V2.95 - not used in ASM
+// VAR_UCHAR (temp_bankx400);              // reserved space for temporary variables
+#endif
--- a/src/simulator.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/simulator.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File simulator.asm
+;   File simulator.asm								REFACTORED VERSION V2.95a1
 ;
 ;   Decoplan interface to C model code.
 ;
@@ -9,7 +9,7 @@
 ; HISTORY
 ;  2011-07-09 : [jDG] Creation...
 
-#include "hwos.inc"					; Mandatory include.
+#include "hwos.inc"						; Mandatory include
 #include "convert.inc"                  ; output_*
 #include "shared_definitions.h"         ; Mailbox from/to p2_deco.c
 #include "strings.inc"                  ; STRCPY,...
@@ -28,335 +28,152 @@
     extern  deco_push_tissues_to_vault
     extern  deco_calc_dive_interval
     extern  deco_calc_hauptroutine
-    extern  deco_calc_tissue
-    extern  deco_calc_CNS_fraction
-    extern  deco_calc_CNS_planning
     extern  deco_pull_tissues_from_vault
     extern  TFT_display_decotype_surface1
+	extern	get_first_dil_to_WREG
+	extern	get_first_gas_to_WREG
+	extern	setup_dil_registers
+	extern	setup_gas_registers
+	extern	deco_setup_cc_diluents
+	extern	deco_setup_oc_gases
+
 
     extern  log_screendump_and_onesecond, logbook_preloop_tasks
     extern  do_planner_menu
 
 ;---- Private temp variables -------------------------------------------------
-        CBLOCK  tmp+0x12                ; Reserved space for wordprocessor and convert
-            decoplan_index              ; within each page
-            decoplan_gindex             ; global index
-            decoplan_last               ; Depth of last stop (CF#29)
-            decoplan_flags              ; Various private flags.
-            decoplan_CNS:2              ; Backup CNS before vault restore
-            decoplan_page               ; page number
-            ; Reserved to tmp+0x18...
-        ENDC
-#define decoplan_last_ceiling_shown   decoplan_flags,0
 
-;---- Demo decoplanner -------------------------------------------------------
-        global  do_demo_planner
+	CBLOCK  tmp+0x12                ; Reserved space for word processor and convert
+		decoplan_index              ; within each page
+		decoplan_gindex             ; global index
+		decoplan_last               ; Depth of last stop (CF#29)
+		decoplan_flags              ; Various private flags.
+		decoplan_page               ; page number
+		decoplan_warnings			; deco engine warnings (ex reserved to tmp+0x18...)
+	ENDC
+		
+;---- Defines ----------------------------------------------------------------
+
+#define decoplan_last_ceiling_shown	decoplan_flags,0
+#define	decoplan_abort				decoplan_flags,1
+
+;---- Demo deco planner ------------------------------------------------------
+	global  do_demo_planner
 
 do_demo_planner:
-        btfsc   FLAG_gauge_mode          ; =1: In Gauge mode
-        goto    do_planner_menu
-        btfsc   FLAG_apnoe_mode          ; =1: In Apnea mode
-        goto    do_planner_menu
-;        call    deco_reset              ; TODO: remove reset all Decodata
-        rcall   deco_planer
-        rcall   deco_show_plan
-        goto    do_planner_menu
-
-;=============================================================================
-; Pass all parameters to the C code
-;
+	btfsc	FLAG_gauge_mode				; =1: In Gauge mode
+	goto	do_planner_menu
+	btfsc	FLAG_apnoe_mode				; =1: In Apnea mode
+	goto	do_planner_menu
+	bcf		decoplan_abort				; initialize (clear) abort flag
+	bcf		is_bailout					; clear bailout condition (may have remained set from last invocation)
+	rcall	deco_planer
+	btfss	decoplan_abort				; skip recall deco_show_plan if calculations were aborted
+	rcall	deco_show_plan
+	goto	do_planner_menu
 
-    global  get_first_dil_to_WREG
-get_first_dil_to_WREG:                  ; Gets first dil (0-4) into WREG
-        lfsr    FSR1,opt_dil_type       ; Point to dil types
-        clrf    lo                      ; start with Gas0
-get_first_dil_to_WREG2:
-        movf    lo,W                    ;
-        movf    PLUSW1,W                ; Get Type of Dil #lo
-        sublw   .1                      ; it is = 1 (First Dil)
-        bz      get_first_dil_to_WREG3  ; Found the first dil!
-        incf    lo,F                    ; ++
-        movlw   NUM_GAS+1
-        cpfseq  lo                      ; All done?
-        bra     get_first_dil_to_WREG2  ; Not yet
-        ; No first dil found, use #1
-        movlw   .0
-        movff   WREG,opt_dil_type+0     ; Set Dil1 to First
-        return
-get_first_dil_to_WREG3:
-        movf    lo,W                    ; Put into Wreg
-        return                          ; Done
 
-    global  get_first_gas_to_WREG
-get_first_gas_to_WREG:                  ; Gets first gas (0-4) into WREG
-        lfsr    FSR1,opt_gas_type       ; Point to gas types
-        clrf    lo                      ; start with Gas0
-get_first_gas_to_WREG2:
-        movf    lo,W                    ;
-        movf    PLUSW1,W                ; Get Type of Gas #lo
-        sublw   .1                      ; it is = 1 (First Gas)
-        bz      get_first_gas_to_WREG3  ; Found the first gas!
-        incf    lo,F                    ; ++
-        movlw   NUM_GAS+1
-        cpfseq  lo                      ; All done?
-        bra     get_first_gas_to_WREG2  ; Not yet
-        ; No first gas found, use #1
-        movlw   .0
-        movff   WREG,opt_gas_type+0     ; Set Gas1 to First
-        return
-get_first_gas_to_WREG3:
-        movf    lo,W                    ; Put into Wreg
-        return                          ; Done
-
+	global	deco_setup
 deco_setup:
-        banksel char_I_step_is_1min     ; Select the right bank...
-        clrf    char_I_step_is_1min     ; Default to 2sec steps.
-
-        ; Fixed ambient surface pressure to 1bar.
-        movlw   LOW(.1000)
-        movwf   int_I_pres_surface+0
-        movwf   int_I_pres_respiration+0
-        movlw   HIGH(.1000)
-        movwf   int_I_pres_surface+1
-        movwf   int_I_pres_respiration+1
-    
-        clrf    int_I_divemins+0         ; Dive start
-        clrf    int_I_divemins+1
+	banksel	common
+	btfsc	FLAG_ccr_mode
+	bra		deco_setup_cc
+	btfsc	FLAG_pscr_mode
+	bra		deco_setup_cc
+deco_setup_oc:
+	call    get_first_gas_to_WREG			; gets first gas (1-5) into WREG
+    call	setup_gas_registers				; with WREG=Gas 1-5
+	call	deco_setup_oc_gases				; setup OC/Bailout Gases and configure for OC deco calculation
+	bra		deco_setup_cont
+deco_setup_cc:
+    call    get_first_dil_to_WREG           ; gets first gas (1-5) into WREG
+    call	setup_dil_registers				; with WREG=Gas 1-5
+	call	deco_setup_cc_diluents			; setup CCR/pSCR diluents and configure for CCR/pSCR deco calculation
+deco_setup_cont:
+	; use ambient conditions for simulation ## V2.94
+	#include    "isr.inc"
+	SAFE_2BYTE_COPY last_surfpressure_30min, int_I_pres_surface	; copy surface pressure to deco routine
 	
-        banksel common                   ; Bank1
-        bcf     use_agf                  ; =1: Use aGF
-        
-        rcall   deco_setup_dive
-	
-	movlw	.0			; Bank safe "clrf"
-	movff	WREG,char_I_const_ppO2	; deactivate CCR-mode in deco calculations unless in CCR mode (char_I_const_ppO2 is filled below again)
-
-	; Setup char_I_const_ppO2 for CC modes
-        btfsc   FLAG_ccr_mode           ; =1: CCR mode (Fixed ppO2 or Sensor) active
-        movff   char_I_setpoint_cbar+0,char_I_const_ppO2    ; Setup fixed Setpoint (Always start with SP1)
-	rcall   get_first_gas_to_WREG           ; Gets first gas (0-4) into WREG
-
-	; Overwrite WREG in CCR and PSCR Mode
-	btfsc	FLAG_ccr_mode
-        rcall	get_first_dil_to_WREG
-        btfsc	FLAG_pscr_mode
-        rcall	get_first_dil_to_WREG
-
-	incf	WREG				; 1-5
-        movff   WREG,char_I_first_gas           ; Copy for compatibility
-	decf	WREG				; 0-4
-        extern  setup_gas_registers
-	call    setup_gas_registers             ; With WREG=Gas 0-4, set current N2/He/O2 ratios.
-        extern  set_actual_ppo2
-        goto    set_actual_ppo2                 ; Then configure char_I_actual_ppO2 (For CNS) (And return!)
-
-        global	deco_setup_dive
-deco_setup_dive:						; Called from divemode
-        banksel common                  ; Bank1
-
-        btfsc	is_bailout
-	bra	deco_setup_dive_oc
-	btfsc	FLAG_ccr_mode
-	bra	deco_setup_dive_cc
-	btfsc	FLAG_pscr_mode
-	bra	deco_setup_dive_cc
-	
-deco_setup_dive_oc:
-    rcall   deco_setup_oc_gases ; Setup OC/Bailout Gases
-    bra	    deco_setup_dive_cont
-deco_setup_dive_cc:
-    rcall   deco_setup_cc_diluents ; Setup CC Diluents
-deco_setup_dive_cont:	
-
-    	movff   divemins+0,int_I_divemins+0         ; Current dive time.
-    	movff   divemins+1,int_I_divemins+1
-
-        movlw   deco_distance
-        movff   WREG,char_I_deco_distance
-        movff   opt_last_stop,char_I_depth_last_deco
-        movff   opt_GF_low,char_I_GF_Low_percentage
-        movff   opt_GF_high,char_I_GF_High_percentage
-        ;Overwrite GF if aGF is wanted
-        btfsc   use_agf                         ; =1: Use aGF
-        movff   opt_aGF_low,char_I_GF_Low_percentage
-        btfsc   use_agf                         ; =1: Use aGF        
-        movff   opt_aGF_high,char_I_GF_High_percentage
-        return
-
-deco_setup_cc_diluents:
-        movff   opt_dil_He_ratio+0,char_I_deco_He_ratio+0
-        movff   char_I_deco_He_ratio+0,lo
-        movff   opt_dil_O2_ratio+0,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+0
-        movff   opt_dil_type+0,WREG   ; 0=Disabled, 1=First, 2=Normal
-        tstfsz  WREG                  ; Disabled?
-        bra     $+4                   ; No
-        movff   WREG,char_I_dil_change+0   ; Yes, clear char_I_deco_gas_change (Bank safe)
+	movlw	deco_distance
+	movff	WREG,char_I_deco_distance
 
-        movff   opt_dil_He_ratio+1,char_I_deco_He_ratio+1
-        movff   char_I_deco_He_ratio+1,lo
-        movff   opt_dil_O2_ratio+1,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+1
-        movff   opt_dil_type+1,WREG   ; 0=Disabled, 1=First, 2=Normal
-        tstfsz  WREG                  ; Disabled?
-        bra     $+4                   ; No
-        movff   WREG,char_I_dil_change+1   ; Yes, clear char_I_dil_change
-
-        movff   opt_dil_He_ratio+2,char_I_deco_He_ratio+2
-        movff   char_I_deco_He_ratio+2,lo
-        movff   opt_dil_O2_ratio+2,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+2
-        movff   opt_dil_type+2,WREG   ; 0=Disabled, 1=First, 2=Normal
-        tstfsz  WREG                  ; Disabled?
-        bra     $+4                   ; No
-        movff   WREG,char_I_dil_change+2   ; Yes, clear char_I_dil_change
+	movff	opt_last_stop,char_I_depth_last_deco
+	movff	opt_GF_low,char_I_GF_Low_percentage
+	movff	opt_GF_high,char_I_GF_High_percentage
+	
+	; overwrite GF if aGF is wanted
+	bsf		use_agf
+	TSTOSS	opt_sim_use_aGF
+	bcf		use_agf
 
-        movff   opt_dil_He_ratio+3,char_I_deco_He_ratio+3
-        movff   char_I_deco_He_ratio+3,lo
-        movff   opt_dil_O2_ratio+3,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+3
-        movff   opt_dil_type+3,WREG   ; 0=Disabled, 1=First, 2=Normal
-        tstfsz  WREG                  ; Disabled?
-        bra     $+4                   ; No
-        movff   WREG,char_I_dil_change+3   ; Yes, clear char_I_dil_change
-
-        movff   opt_dil_He_ratio+4,char_I_deco_He_ratio+4
-        movff   char_I_deco_He_ratio+4,lo
-        movff   opt_dil_O2_ratio+4,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+4
-        movff   opt_dil_type+4,WREG   ; 0=Disabled, 1=First, 2=Normal
-        tstfsz  WREG                  ; Disabled?
-        bra     $+4                   ; No
-        movff   WREG,char_I_dil_change+4   ; Yes, clear char_I_dil_change
-
-        ; Setup char_I_deco_gas_change array
-        movff   char_I_dil_change+0, char_I_deco_gas_change+0
-        movff   char_I_dil_change+1, char_I_deco_gas_change+1
-        movff   char_I_dil_change+2, char_I_deco_gas_change+2
-        movff   char_I_dil_change+3, char_I_deco_gas_change+3
-        movff   char_I_dil_change+4, char_I_deco_gas_change+4
-        return
-
-deco_setup_oc_gases:
-        movff   opt_gas_He_ratio+0,char_I_deco_He_ratio+0
-        movff   char_I_deco_He_ratio+0,lo
-        movff   opt_gas_O2_ratio+0,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+0
-        banksel opt_gas_type+0
-        movlw   .3                    ; 3=Deco
-        cpfseq  opt_gas_type+0        ; Gas is deco type?
-        clrf    opt_OC_bail_gas_change+0  ; No, clear depth for 0=Disabled, 1=First and 2=Travel
-        banksel common
+	btfsc	use_agf					; =1: Use aGF
+	movff	opt_aGF_low,char_I_GF_Low_percentage
+	btfsc	use_agf					; =1: Use aGF
+	movff	opt_aGF_high,char_I_GF_High_percentage
 
-        movff   opt_gas_He_ratio+1,char_I_deco_He_ratio+1
-        movff   char_I_deco_He_ratio+1,lo
-        movff   opt_gas_O2_ratio+1,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+1
-        banksel opt_gas_type+1
-        movlw   .3                    ; 3=Deco
-        cpfseq  opt_gas_type+1        ; Gas is deco type?
-        clrf    opt_OC_bail_gas_change+1  ; No, clear depth for 0=Disabled, 1=First and 2=Travel
-        banksel common
-
-        movff   opt_gas_He_ratio+2,char_I_deco_He_ratio+2
-        movff   char_I_deco_He_ratio+2,lo
-        movff   opt_gas_O2_ratio+2,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+2
-        banksel opt_gas_type+2
-        movlw   .3                    ; 3=Deco
-        cpfseq  opt_gas_type+2        ; Gas is deco type?
-        clrf    opt_OC_bail_gas_change+2  ; No, clear depth for 0=Disabled, 1=First and 2=Travel
-        banksel common
-
-        movff   opt_gas_He_ratio+3,char_I_deco_He_ratio+3
-        movff   char_I_deco_He_ratio+3,lo
-        movff   opt_gas_O2_ratio+3,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+3
-        banksel opt_gas_type+3
-        movlw   .3                    ; 3=Deco
-        cpfseq  opt_gas_type+3        ; Gas is deco type?
-        clrf    opt_OC_bail_gas_change+3  ; No, clear depth for 0=Disabled, 1=First and 2=Travel
-        banksel common
-
-        movff   opt_gas_He_ratio+4,char_I_deco_He_ratio+4
-        movff   char_I_deco_He_ratio+4,lo
-        movff   opt_gas_O2_ratio+4,WREG
-        addwf   lo,W                  ; O2 + He -> WREG
-        sublw   .100                  ; 100 - (O2 + He) -> WREG
-        movff   WREG,char_I_deco_N2_ratio+4
-        banksel opt_gas_type+4
-        movlw   .3                    ; 3=Deco
-        cpfseq  opt_gas_type+4        ; Gas is deco type?
-        clrf    opt_OC_bail_gas_change+4  ; No, clear depth for 0=Disabled, 1=First and 2=Travel
-        banksel common
-
-        movlw   .0
-        movff   WREG,char_I_const_ppO2  ; Clear constant ppO2 for OC/bailout
-
-        ; Setup char_I_deco_gas_change array
-        movff   opt_OC_bail_gas_change+0, char_I_deco_gas_change+0
-        movff   opt_OC_bail_gas_change+1, char_I_deco_gas_change+1
-        movff   opt_OC_bail_gas_change+2, char_I_deco_gas_change+2
-        movff   opt_OC_bail_gas_change+3, char_I_deco_gas_change+3
-        movff   opt_OC_bail_gas_change+4, char_I_deco_gas_change+4
-        return
-
+	bcf		is_bailout
+	
+	; setup char_I_const_ppO2 for CC modes
+	clrf	WREG
+	btfsc	FLAG_pscr_mode
+	movff	WREG,char_I_const_ppO2			; configure pSCR computations to calculated ppO2
+	btfss	FLAG_ccr_mode
+	return									; done if not in CCR mode
+	movff	opt_sim_setpoint_number,WREG	; configure CCR computations to selected setpoint
+	decf    WREG,W							; 1-5 -> 0-4
+	lfsr    FSR1,char_I_setpoint_cbar		; load base address of setpoint list
+	movff   PLUSW1,char_I_const_ppO2		; setup setpoint
+	return
+	
 ;=============================================================================
-; Reset decompression tissues
+; Launch deco planning
 ; 
-        global  deco_reset
-deco_reset:
-        rcall   deco_setup              ; Setup all model parameters.
-        call    deco_clear_tissue       ; Set all tissues to Pamb * N2_ratio
-        call    deco_clear_CNS_fraction ; Reset CNS value.
-        banksel common                  ; Bank1
-        return
-
-;=============================================================================
-; Launch decoplanning
-; 
-    global  deco_planer
+		global  deco_planer
 deco_planer:
-        call    speed_fastest           ; Quick !
-        rcall   deco_setup              ; Setup all model parameters.
-        call    deco_push_tissues_to_vault
-        banksel common                  ; Bank1
+        call    speed_fastest				; Quick !
+		call    deco_push_tissues_to_vault
+        rcall   deco_setup					; Setup all model parameters.
 
 ;---- Specific settings ------------------------------------------------------
+
+		; configure the deco engine for normal plan, CNS & gas volume calculation and no delayed ascent
+		movff	char_O_deco_status,WREG		; bank-safe copy
+		bcf		WREG,DECO_PLAN_FLAG			; normal plan mode,
+		bsf		WREG,DECO_CNS_FLAG			; enable CNS calculation (CNS at end of dive),
+		bsf		WREG,DECO_VOLUME_FLAG		; enable gas volume calculation, and
+		bcf		WREG,DECO_ASCENT_FLAG		; disable delayed ascent calculation
+		movff	WREG,char_O_deco_status		; bank-safe copy back
+
+		; configure the deco engine for total-dive gas volume calculation
+		movff	char_O_main_status,WREG		; bank-safe copy
+		bsf		WREG,DECO_BOTTOM_FLAG		; set bottom flag
+		movff	WREG,char_O_main_status		; bank-safe copy back
+
 deco_planer_redo:
-        banksel char_O_deco_status      ; Bank 2
-        movlw   .3                      ; Start in surface state.
-        movwf   char_O_deco_status
-    
-        banksel char_I_step_is_1min     ; Bank 3
-        movlw   1
-        movwf   char_I_step_is_1min     ; Set 1min steps
+
+		; show deco calculation is in progress
+		call	TFT_ClearScreen
+        WIN_COLOR	color_greenish
+		TEXT_SMALL	.20,.40, tCalculating
+		WIN_COLOR	color_lightblue
+		WIN_SMALL	.1,.215
+		STRCPY_TEXT_PRINT  tAbort
+
+		; configure the deco engine for restart:
+		movff	char_O_deco_status,WREG		; bank-safe copy
+		bsf		WREG,DECO_STATUS_0_FLAG		; configure init ...
+		bsf		WREG,DECO_STATUS_1_FLAG		; ... state,
+		movff	WREG,char_O_deco_status		; bank-safe copy back
 
 ;---- Add delay at surface, if needed ----------------------------------------
+		
+		banksel	char_I_dive_interval
         tstfsz  char_I_dive_interval
         call    deco_calc_dive_interval
 
 ;---- Dive loop --------------------------------------------------------------
 
-        ; Compute dive ambiant conditions
+        ; Compute dive ambient conditions
         banksel char_I_bottom_depth
         movf    char_I_bottom_depth,W
         mullw   .100
@@ -366,90 +183,94 @@
         movlw   HIGH(.1000)
         addwfc  PRODH,W
         movwf   int_I_pres_respiration+1
+		
+		banksel common
 
-        banksel int_I_divemins          ; Bank 4
-        clrf    int_I_divemins+0        ; Clear dive time
-        clrf    int_I_divemins+1
+		movff	char_I_bottom_time,char_I_sim_advance_time
+		
+        clrf    TMR5L
+        clrf    TMR5H                   	; 30,51757813µs/bit in TMR5L:TMR5H
 
-        clrf    TMR5L
-        clrf    TMR5H                   ; 30,51757813µs/bit in TMR5L:TMR5H
-        call    deco_calc_hauptroutine  ; Reset + simulate first min.
+        call    deco_calc_hauptroutine  	; initialization + complete bottom time part
+        banksel common
+		
+;---- BAILOUT: Switch to OC gases for ascent cycles --------------------------
 
-deco_planer_loop:
-        banksel int_I_divemins          ; Bank 3
-        incf    int_I_divemins,F        ; Done 1 min.
-        btg     LEDg
-    
-        movf    char_I_bottom_time,W    ; Finished ?
-        xorwf   int_I_divemins,W
-        bz      deco_planer_endloop     ; YES
+        btfss   is_bailout              	; Doing a bailout deco plan ?
+        bra     deco_planer_finishing   	; NO  - keep gases
+											; YES - switch to OC gas 
 
-        call	deco_calc_tissue	    ; JUST calc tissue (faster).
-        call	deco_calc_CNS_fraction  ; Also calculate CNS (in 1min loop)
-        bra     deco_planer_loop
+		; reconfigure the deco engine for delayed ascent mode
+		movff	char_O_deco_status,lo		; bank-safe copy
+		bsf		lo,DECO_ASCENT_FLAG			; set flag for delayed ascent calculation
+		movff	lo,char_O_deco_status		; bank-safe copy back
+
+		; configure the deco engine for delayed ascent part gas volume calculation
+		movff	char_O_main_status,WREG		; bank-safe copy
+		bcf		WREG,DECO_BOTTOM_FLAG		; set bottom flag
+		movff	WREG,char_O_main_status		; bank-safe copy back
 
-deco_planer_endloop:
-        banksel char_I_step_is_1min
-        clrf    char_I_step_is_1min     ; Back to 2sec loops
+		; reconfigure gas settings to OC gases
+		call    get_first_gas_to_WREG		; get first gas (1-5) into WREG
+		call	setup_gas_registers			; With WREG=Gas 1-5 (or 6, not applicable here)
+		call	deco_setup_oc_gases			; With WREG=Gas 1-5 (or 6, not applicable here)
+		
+		; set the gas change override flag to allow gas changes before deco stops as done in alternative plan
+		movff	char_O_main_status,lo		; bank-safe copy
+		bsf		lo,DECO_GASCHANGE_OVRD		; set flag for gas change override
+		movff	lo,char_O_main_status		; bank-safe copy back
+
+;---- Wait until status reaches zero -------------------------------------------
 
-;---- BAILOUT: Switch to OC gases for ascent cycles --------------------------
-        banksel common
-        btfss   is_bailout              ; Doing a bailout decoplan ?
-        bra     deco_planer_finishing   ; NO: keep gases
-        
-        rcall   deco_setup_oc_gases     ; Switch to OC gas and no const_ppO2
-	
-	movlw	.0
-	movff	WREG,char_I_const_ppO2	; deactivate CCR-mode deco calculations
-
-;---- Wait until status reach zero -------------------------------------------
 deco_planer_finishing:
-        btg     LEDg
-;       clrf    TMR5L
-;       clrf    TMR5H                   ; 30,51757813µs/bit in TMR5L:TMR5H
-        call    deco_calc_hauptroutine  ; Simulate 2sec more
-
-        banksel char_O_deco_status      ; Bank 2
-        movf    char_O_deco_status,W
-        bnz     deco_planer_finishing
+        call    deco_calc_hauptroutine  	; Simulate more dive time to trigger the deco calculations
+		banksel	common
+		
+		btfss	switch_left					; check if left button was pressed
+		bra		deco_planer_finishing_1		; NO  - continue calculations
+		bsf		decoplan_abort				; YES - set abort flag so that deco_show_plan will not be called
+		bra		deco_planer_finishing_2		;       do some clean-up and return
+deco_planer_finishing_1:
+		movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
+		movlw	DECO_STATUS_MASK			; bit mask for deco status bit set
+		andwf	lo,W						; mask out bits showing state of computation
+		tstfsz	WREG						; check if a compute cycle is finished (bits 1 and 0 == 0)
+		bra		deco_planer_finishing		; NO - needs more computation cycles
 
 ;---- Done: add CNS from decoplan, and restore tissues
-        call    deco_calc_CNS_planning
-        movff   int_O_CNS_fraction+0,decoplan_CNS+0
-        movff   int_O_CNS_fraction+1,decoplan_CNS+1
-        call    deco_pull_tissues_from_vault
-        bcf     LEDg
-        banksel common                  ; Bank1
-		movlw	b'00111000'				; 1:8 Prescaler -> 65,536ms@16MHz
-		movwf	T3CON
-        call    speed_normal
-        return
+
+deco_planer_finishing_2:
+
+	movff	char_O_deco_warnings,decoplan_warnings	; copy warnings
+		
+        call    deco_pull_tissues_from_vault			; restore "real" deco data
+        banksel common                  				; back to bank 1
+
+	movlw	b'00111000'								; 1:8 Prescaler -> 65,536ms@16MHz
+	movwf	T3CON
+        goto	speed_normal	    ;(and return)
 
 ;-----------------------------------------------------------------------------
 ; Draw a stop of the deco plan (simulator or dive).
 ; Inputs: lo      = depth. Range 3m...93m
-;                 + 80 if this is a switch-gas stop.
+;                 + 0x80 if this is a switch-gas stop.
 ;         up      = minutes. range 1'..240'.
 ;         win_top = line to draw on screen.
 ; Trashed: up, lo, win_height, win_leftx2, win_width, win_color*,
 ;          WREG, PROD, TBLPTR TABLAT.
 ;
 deco_plan_show_stop:
-        ;---- Print depth ----------------------------------------------------
-        btfss   lo,7                    ; Bit set ?
-        bra     deco_plan_show_std_stop  ; No : Just an usual stop.
 
-        call    TFT_attention_color
-        bcf     lo,7                    ; and cleanup depth.
-        bra     deco_plan_show_nstd_stop
+		;---- Print depth ----------------------------------------------------
+		bcf     lo,7					; clear gas-switch flag (not used any more anyhow)
+		lfsr	FSR2,char_O_deco_gas
+		movf    decoplan_gindex,W		; index
+    	movff	PLUSW2,WREG				; get current gas
+		rcall	simulator_color_gas		; set output color dependent on gas (1-5)
 
-deco_plan_show_std_stop:
-    	call    TFT_standard_color
-
-deco_plan_show_nstd_stop:        
 	    lfsr	FSR2,buffer
 
-		TSTOSS  opt_units			; 0=Meters, 1=Feets
+		TSTOSS  opt_units				; 0=Meters, 1=Feets
 		bra		deco_plan_show_nstd_stop_metric
 
         WIN_LEFT .85
@@ -457,7 +278,7 @@
 		mullw	.100					; PRODL:PRODH = mbar
 		movff	PRODL,lo
 		movff	PRODH,hi
-; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops...
+		; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops...
 		movff	lo,xA+0
 		movff	hi,xA+1
 		movlw	LOW 	d'334'          ; 334feet/100m
@@ -480,6 +301,7 @@
 		bsf		leftbind
 		bsf		ignore_digit4			; Only full feet
 		output_16
+		bcf     leftbind
 		STRCAT_PRINT	"ft "
 		bra		deco_plan_show_nstd_stop_common
 
@@ -487,6 +309,7 @@
         WIN_LEFT .90
 	    bsf     leftbind
 	    output_8					    ; outputs into Postinc2!
+		bcf     leftbind
         STRCAT_PRINT 	"m "
 deco_plan_show_nstd_stop_common:
         ;---- Print duration -------------------------------------------------
@@ -508,7 +331,7 @@
 	    movwf   up
 
         ;---------------------------------------------------------------------
-        ; Draw the bar graph used for deco stops (decoplan in simulator or dive).
+        ; Draw the bar graph used for deco stops (deco plan in simulator or dive).
         incf   win_top,F
         movlw	.19
         movwf   win_height
@@ -516,7 +339,7 @@
         movwf	win_leftx2    		    ; column left (0-159)
         movlw	.16
         movwf	win_width+0    		    ; column max width.
-	clrf    win_width+1
+		clrf    win_width+1
 
         ; Draw used area (up = minutes):
         movlw	.16                     ; Limit length (16min)
@@ -531,25 +354,25 @@
         return
 
 ;-----------------------------------------------------------------------------
-; Clear unused area belw last stop
+; Clear unused area below last stop
 ; Inputs: win_top : last used area...
 deco_plan_show_clear_bottom:
         movf    win_top,W               ; Get back from bank0
         sublw   .239                    ; No: bottom row in planning
         movwf   win_height
 
-        WIN_LEFT .85                    ; Full divemenu width
+        WIN_LEFT .85                    ; Full dive menu width
         movlw   .159-.85+1
         movwf   win_width+0
-	clrf    win_width+1
+		clrf    win_width+1
 
         clrf    win_color1              ; Fill with black
         clrf    win_color2
 
-        goto	TFT_box		    ; and return
+        goto	TFT_box		    		; and return
 
 ;-----------------------------------------------------------------------------
-; Display the decoplan (simulator).
+; Display the deco plan (simulator).
 ; Inputs: char_O_deco_table (array of stop times, in minutes)
 ;         decoplan_page = page number.
 ;
@@ -576,7 +399,7 @@
 
         ; Read stop parameters, indexed by decoplan_index and decoplan_page
         movf    decoplan_page,W         ; decoplan_gindex = 6*decoplan_page + decoplan_index
-        mullw   .8                      ; 8 lines/page in decoplan
+        mullw   .8                      ; 8 lines/page in deco plan
         movf    decoplan_index,W
         addwf   PRODL,W
         movwf   decoplan_gindex         ; --> decoplan_gindex
@@ -599,19 +422,19 @@
 
         ; Next
         movlw   .24
-        addwf   win_top,F               ; row: += 24
-	    incf	decoplan_index,F        ; local index += 1
-	    incf	decoplan_gindex,F       ; global index += 1
+        addwf   win_top,F				; row: += 24
+	    incf	decoplan_index,F		; local index += 1
+	    incf	decoplan_gindex,F		; global index += 1
 
         ; Max number of lines/page reached ?
-    	movlw   .8                      ; 8 lines/page in decoplan
+    	movlw   .8						; 8 lines/page in deco plan
     	cpfseq	decoplan_index
-    	bra		deco_plan_show_2         ; NO: loop
+    	bra		deco_plan_show_2		; NO: loop
 
-    	; Check if next stop if end-of-list ?
+    	; Check if next stop is end-of-list ?
     	movf    decoplan_gindex,W
-	    movf	PLUSW0,W                ; char_O_deco_depth[gindex]
-    	bz      deco_plan_show_99         ; End of list...
+	    movf	PLUSW0,W				; char_O_deco_depth[gindex]
+    	bz      deco_plan_show_99		; End of list...
 
         ; Display the message "more..."
         rcall   deco_plan_show_clear_bottom  ; Clear from next line
@@ -626,33 +449,35 @@
         return
 
 ;-----------------------------------------------------------------------------
-; Loop to show all pages of the decoplan (surfacemode)
+; Loop to show all pages of the deco plan (surface mode)
 
         global  deco_show_plan
 deco_show_plan:
         clrf    decoplan_page
         call    TFT_ClearScreen
         WIN_COLOR   color_greenish
-	btfsc	is_bailout
-	bra	deco_show_plan_bail_title
+		btfsc	is_bailout
+		bra	deco_show_plan_bail_title
         TEXT_SMALL  .1,.1, tDivePlan
-	bra	deco_show_plan2
+		bra	deco_show_plan2
 deco_show_plan_bail_title:	
-	TEXT_SMALL  .1,.1, tDiveBailout
+		TEXT_SMALL  .1,.1, tDiveBailout
 deco_show_plan2:
-	call    TFT_standard_color
-        ; Show plan parameters
+		call    TFT_standard_color
+        ;---- Display Plan Parameters
         WIN_SMALL   .0,.25
         STRCPY  "Int:"
         movff   char_I_dive_interval,lo
         bsf     leftbind
         output_8
+		bcf     leftbind
         STRCAT_PRINT  "'"
         WIN_SMALL   .0,.50
         STRCPY_TEXT tBtTm_short
         movff   char_I_bottom_time,lo
         bsf     leftbind
         output_8
+		bcf     leftbind
         STRCAT_PRINT  "'"
         WIN_SMALL   .0,.75
         STRCPY_TEXT tDepth
@@ -660,52 +485,84 @@
         movff   char_I_bottom_depth,lo
         bsf     leftbind
         output_8
+		bcf     leftbind
         STRCAT_PRINT  "m"
+		
+		WIN_SMALL   .0,.105					; set position for warnings or sat/dsat factors
+	
+		;---- Check for Stop Table Overflow
+		btfss	decoplan_warnings,stoptable_overflow	; check if we have a overflow warning
+		bra		deco_show_plan2a						; NO  - skip
+		;---- Display Overflow warning
+		call	TFT_warnings_color						; YES - show overflow warning
+		STRCAT_PRINT  "incomplete"						; max 10 characters
+		bra		deco_show_plan_m1						; skip displaying sat/dsat factors
 
-        ; Show deco mode
-        WIN_TOP .155
-        lfsr    FSR2,buffer
-        movff   opt_dive_mode,lo        ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-        call    TFT_display_decotype_surface1
-        
-        ;---- Display model
-        movff   char_I_deco_model,WREG
-        iorwf   WREG
-        bnz     deco_show_plan_m1
-        
-        ; Display ZH-L16 sat/desat model.
-        TEXT_SMALL  .0,.130,  tZHL16
-        WIN_SMALL   .14,.155
-        PUTC    ","
+deco_show_plan2a:		
+		;---- Check for IBCD Warning
+		btfss	decoplan_warnings,IBCD_warning_lock		; check if we have a locked IBCD warning
+		bra		deco_show_plan2b						; NO  - skip
+		;---- Display IBCD warning
+		call	TFT_attention_color						; YES - show IBCD warning
+		STRCAT_PRINT  "IBCD!"							; max 10 characters
+		bra		deco_show_plan_m1						; skip displaying sat/dsat factors
+		
+deco_show_plan2b:
+        ;---- Display Sat/Desat Factors --> is skipped if there were warnings
+		STRCAT_PRINT "SD:"
+        WIN_SMALL   .25,.105
+        movff   char_I_saturation_multiplier,lo
+        output_8
+        STRCAT  "/"
         movff   char_I_desaturation_multiplier,lo
         output_8
-        STRCAT  "%/"
-        movff   char_I_saturation_multiplier,lo
-        output_8
-        bra     deco_show_plan_m2
+        STRCAT_PRINT  ""
+
+deco_show_plan_m1:
+		call	TFT_standard_color			; clean-up from warnings
 
-        ; Display ZH-L16-GF low/high model.
-deco_show_plan_m1:
-        TEXT_SMALL  .0,.130,  tZHL16GF
-        WIN_SMALL   .14,.155
-        PUTC    ","
+		;---- Get Model
+        movff   char_I_deco_model,WREG
+        iorwf   WREG
+        bz     deco_show_plan_m2
+
+        ;---- Display GF low/high values
+        WIN_SMALL  .0,.130
+		STRCAT_PRINT "GF:"
+        WIN_SMALL   .25,.130
         movff   char_I_GF_Low_percentage,lo
         output_99x
-        STRCAT  "%/"
+        STRCAT  "/"
         movff   char_I_GF_High_percentage,lo
         output_99x
+        STRCAT_PRINT  ""
+
 deco_show_plan_m2:
-        STRCAT_PRINT  "%"
+		;---- Display Deco Mode
+		WIN_SMALL   .0,.155
+        lfsr    FSR2,buffer
+        movff   opt_dive_mode,lo        	; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+        call    TFT_display_decotype_surface1
+		btfss	FLAG_ccr_mode				; current dive mode = CCR ?
+		bra		deco_show_plan2c			; NO  - branch
+		WIN_SMALL   .25,.155
+        STRCPY  "SP:"						; output setpoint used for calculation
+        movff   opt_sim_setpoint_number,lo
+        bsf     leftbind
+        output_8
+		bcf     leftbind
+        STRCAT_PRINT  ""
 
+deco_show_plan2c:
         ;---- Display TTS result
         WIN_SMALL   .0,.180
         STRCPY_TEXT tTTS
         STRCAT  ": "
-
         movff   int_O_ascenttime+0,lo
         movff   int_O_ascenttime+1,hi
         bsf     leftbind
         output_16
+		bcf     leftbind
         STRCAT_PRINT "'"
 
         ;---- Display CNS result
@@ -713,25 +570,34 @@
         STRCPY_TEXT tCNS2	; "CNS:"
         movff   int_O_CNS_fraction+0,lo
         movff   int_O_CNS_fraction+1,hi
-        output_16_3                     ; limit to 999 and display only (0-999)
-        STRCAT  "%\x92"					; "->"
-        movff   decoplan_CNS+0,lo
-        movff   decoplan_CNS+1,hi
-        output_16_3                     ; limit to 999 and display only (0-999)
+		TFT_color_code	warn_cns			; Color-code CNS output
+		bsf		leftbind
+	    output_16_3                     	; limit to 999 and display only (0-999)
+		bcf		leftbind
+        STRCAT  "%\x92"						; "->"
+		movff   int_O_normal_CNS_fraction+0,lo
+        movff   int_O_normal_CNS_fraction+1,hi
+		TFT_color_code	warn_cns			; Color-code CNS output
+		bsf		leftbind
+        output_16_3                     	; limit to 999 and display only (0-999)
+		bcf		leftbind
         STRCAT_PRINT "%"
+		call	TFT_standard_color
        
         ;---- Loop through pages
 deco_show_plan_1:
+		; Clear the complete stop result column:
+		WIN_BOX_BLACK   .0, .239, .80, .159 ; top, bottom, left, right
+		
         rcall   deco_show_plan_page
         incf    decoplan_page,F
-
         call    logbook_preloop_tasks
 deco_show_plan_2:
         btfsc   switch_right
         bra     deco_show_plan_3
         btfsc   switch_left
         return                                  ; Return to simulator menu
-        call    log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
+        call    log_screendump_and_onesecond    ; Check if we need to make a screen shot and check for new second
     	btfsc	sleepmode                       ; Timeout?
         goto    restart
         bra     deco_show_plan_2
@@ -740,35 +606,24 @@
         btfss   decoplan_last_ceiling_shown
         bra     deco_show_plan_1
         ; All stops shown
-        	
-;---- In CCR mode, compute a BAILOUT decoplan ---------------------------------
-    banksel common
-    btfss   FLAG_ccr_mode               ; =1: CCR mode (Fixed ppO2 or Sensor) active
-    bra     simulator_show_decoplan5_0  ; NO: normal OC mode: just display
+       
+;---- In CCR and pSCR mode, compute a BAILOUT deco plan -----------------------
 
-    btfsc   is_bailout                  ; ALREADY in bailout mode ?
-    bra     simulator_show_decoplan5_0  ; YES: alreay BAIL plan: display gas
-    
-; Redo 2nd deco-plann, in bailout mode:
-    bsf     is_bailout                  ; Set special bailout mode.
-    rcall   deco_planer_redo            ; Redo plan computation
+    banksel common
+	movff	char_O_deco_status,WREG		; get deco calculation status
+	btfss	WREG,DECO_MODE_LOOP_FLAG	; check if in CCR or pSCR mode
+	bra     simulator_show_decoplan5_0  ; NO  - normal OC mode: just display
+    bsf     is_bailout                  ; YES - redo 2nd deco-plan in bailout mode
+	rcall   deco_planer_redo            ; 		redo plan computation
 
-    movff   char_I_setpoint_cbar+0,char_I_const_ppO2
-    bra     deco_show_plan              ; and display bailout stops
+	btfss	decoplan_abort				; shall we abort?
+    bra     deco_show_plan              ; NO  - display bailout stops
+	return								; YES
+
 
 ;---- In OC+BAIL modes, show the gas Usage special page -----------------------
 simulator_show_decoplan5_0:    
-    bcf     is_bailout                  ; Back to normal
-    bcf	    ccr_diluent_setup		; init for OC/Bailout
-
-    ; Make sure to pass first gas
-    call    get_first_gas_to_WREG       ; Gets first gas (0-4) into WREG
-    incf    WREG,f                      ; gas 1..5
-    movff   WREG,char_I_first_gas       ; Copy for compatibility
-
-    ; Compute gas consumption for each tank.
-    extern  deco_gas_volumes
-    call    deco_gas_volumes
+	
     movlb   .1
 
     ; Clear the complete stop result column:
@@ -785,6 +640,10 @@
 simulator_show_decoplan5_loop:
     movff   wait_temp,PRODL             ; Copy to PRODL first
     incf    wait_temp,F                 ; Increment gas #
+
+	movff	wait_temp,WREG
+	rcall	simulator_color_gas			; set output color according to gas (number 1-5 in WREG)
+
     lfsr    FSR2,buffer
     bsf     short_gas_decriptions
     bsf     divemode                    ; Tweak "customview_show_mix:"
@@ -797,74 +656,86 @@
 
     movff   POSTINC0,lo                 ; Read (16bit) result, low first,
     movff   POSTINC0,hi                 ; then high.
-    movf    lo,W                        ; Null ?
-    iorwf   hi,W
 
-    movf    lo,W                        ; == 65535 (saturated ?)
+    movf    lo,W
     andwf   hi,W
-    incf    WREG
-    bnz     simulator_show_decoplan5_2
-    call    TFT_attention_color
-    STRCAT_PRINT  ":xxxx.x"
-    call    TFT_standard_color   
+    incf    WREG						; > 65535? 
+    bnz     simulator_show_decoplan5_2	; NO
+	STRCAT_PRINT  ">65500"				; YES
     bra     simulator_show_decoplan5_1
     
 simulator_show_decoplan5_2: 
     PUTC    ":"
     bsf     leftbind
-    output_16                           ; No decimal anymore.
+    output_16                           	; No decimal anymore.
     bcf     leftbind
-    STRCAT_PRINT  ""                    ; No unit: can be bars or litters.
+    STRCAT_PRINT  ""                    	; No unit: can be bars or litters.
     
     ; Loop for all 5 gas
 simulator_show_decoplan5_1:
-	movlw	d'5'                        ; list all five gases
-	cpfseq	wait_temp                   ; All gases shown?
+	movlw	d'5'                        	; list all five gases
+	cpfseq	wait_temp                   	; All gases shown?
 	bra		simulator_show_decoplan5_loop	; No
 	
     WIN_COLOR   color_greenish
     WIN_SMALL   .80,.25
-
-;    btfsc   FLAG_ccr_mode               ; =1: CCR mode (Fixed ppO2 or Sensor) active
-;    bra     simulator_show_decoplan5_4  ; YES: This is bailout mode
-
-	STRCPY_TEXT tGasUsage               ; OC: "Gas Usage"
-;    bra     simulator_show_decoplan5_5
-
-;simulator_show_decoplan5_4:
-;	STRCPY_TEXT tDiveBailout            ; CCR: "Bailout"
-
-;simulator_show_decoplan5_5:
+	STRCPY_TEXT tGasUsage               	; OC: "Gas Usage"
     STRCAT_PRINT  ":"
     call	TFT_standard_color
+    call    logbook_preloop_tasks
 
-    call    logbook_preloop_tasks
 simulator_show_decoplan5_3:
-    btfsc   switch_right
+	btfss   switch_right
+	bra		simulator_show_decoplan5_3a
+	bcf		switch_right
+	clrf    decoplan_page
+	bra		deco_show_plan_1				; toggle between stops plan and gas usage
+simulator_show_decoplan5_3a:
+    btfss   switch_left						
+	bra		simulator_show_decoplan5_4
+    bcf     is_bailout                  	; Back to normal
+    bcf	    ccr_diluent_setup				; init for OC/Bailout
     return                                  ; Return to simulator menu
-    btfsc   switch_left
-    return                                  ; Return to simulator menu
-    call    log_screendump_and_onesecond    ; Check if we need to make a screenshot and check for new second
+	
+simulator_show_decoplan5_4:
+    call    log_screendump_and_onesecond    ; Check if we need to make a screen shot and check for new second
     btfsc	sleepmode                       ; Timeout?
     goto    restart
     bra     simulator_show_decoplan5_3
 
+
+simulator_color_gas:				; set output color dependent on gas (1-5, in WREG)
+	movwf	tft_temp1				; used in TFT_set_color anyway
+	dcfsnz	tft_temp1,F
+	movlw	color_white				; color for Gas 1
+	dcfsnz	tft_temp1,F
+	movlw	color_green				; color for Gas 2
+	dcfsnz	tft_temp1,F
+	movlw	color_red				; Color for Gas 3
+	dcfsnz	tft_temp1,F
+	movlw	color_yellow			; color for Gas 4
+	dcfsnz	tft_temp1,F
+	movlw	color_cyan				; color for Gas 5
+	goto	TFT_set_color			; set color and return...
+	
 ;=============================================================================
 ;
         global  do_demo_divemode
 do_demo_divemode:
 		extern	option_save_all
-		call	option_save_all			; Save all settings into EEPROM before starting simulation
+		call	option_save_all				; Save all settings into EEPROM before starting simulation
  		call    deco_push_tissues_to_vault
-        banksel common                  ; Bank1
-
-		bsf		restore_deco_data		; Restore tissue and CNS after sim
+        banksel common                  	; Bank1
 
-		bcf		pressure_refresh
-		btfss	pressure_refresh					; Wait for sensor
-		bra		$-2
+		; +++ COMMENTED OUT FOR TESTING PURPOSE ONLY !!! +++
+		; +++ DO NOT COMMENT OUT IN OPERATIONAL USE  !!! +++
+		bsf	restore_deco_data			; Restore tissue and CNS after simulator use
 
-		bsf		simulatormode_active				; Set Flag
+		bcf	pressure_refresh
+		btfss	pressure_refresh			; Wait for sensor
+		bra	$-2
+
+		bsf	simulatormode_active			; Set Flag
         ; Compute dive ambient conditions
         banksel char_I_bottom_depth
         movf    char_I_bottom_depth,W
@@ -878,9 +749,9 @@
         addwfc  PRODH,W
         movff   WREG,sim_pressure+1
 
-        banksel common                  ; Bank1
+        banksel common                  	; Bank1
 		bsf		divemode
-		goto	diveloop							; Switch into Divemode!
+		goto	diveloop					; Switch into Divemode!
 
 
         END
\ No newline at end of file
--- a/src/sleepmode.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/sleepmode.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -168,9 +168,11 @@
 	return
 	
 deepsleep_get_accel:
-	call    I2C_init_compass
+	call    I2C_init_compass	    ; required for compass1
+	call	I2C_init_accelerometer	    ; required for compass2
 	call    I2C_RX_accelerometer        ; read Accelerometer
-	call    I2C_sleep_compass
+	call    I2C_sleep_compass	    ; required for compass1
+	call	I2C_sleep_accelerometer	    ; required for compass2
 	movff	accel_DZ+0,WREG
 	return
 	
@@ -296,13 +298,11 @@
 	banksel 	common
 	rcall 		sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
 	rcall 		sleepmode_sleep			; Wait at least 35ms (every 62,5ms Timer7 wakeup)
-    bsf         LEDg                    ; Show some activity
 	banksel 	isr_backup              ; Back to Bank0 ISR data
 	call		get_pressure_value		; State2: Get pressure (51us)
 	call		calculate_compensation		; calculate temperature compensated pressure (27us)
 	banksel 	common
     SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure	; copy for compatibility
-    bcf         LEDg
 	return
 
 sleepmode_sleep:
--- a/src/start.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/start.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File start.asm
+;   File start.asm									REFACTORED VERSION	V2.95a1
 ;
 ;   Startup subroutines
 ;
@@ -34,7 +34,7 @@
 ;
 reset_v code     0x00000
 ;    goto    start
-	goto	0x1FF00     ; Bootloader
+	goto	0x1FF00     	; Bootloader
 
 	ORG     0x00004			; Needed for second-level bootloader
 	goto	start
@@ -53,7 +53,7 @@
     call    init_ostc
 
     ; Get button type from Bootloader-Info
-        movlw   .16
+	movlw   .16
 	movff   WREG,analog_counter	; init averaging
 	bsf	analog_switches
 	movlw   0x7C
@@ -62,7 +62,7 @@
 	movwf   TBLPTRH
 	movlw   0x01
 	movwf   TBLPTRU
-	TBLRD*+			; Reads 0x07 for analog buttons
+	TBLRD*+							; Reads 0x07 for analog buttons
 	movlw	0x07
 	cpfseq	TABLAT
 	bcf	analog_switches
@@ -72,16 +72,16 @@
 	movwf	EEADR
 	movlw	HIGH	.897
 	movwf	EEADRH
-	call    read_eeprom                ; EEDATA into EEPROM@EEADR
-	clrf	EEADRH			    ; Reset EEADRH
-	movff	EEDATA,button_polarity	    ; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
+	call    read_eeprom             ; EEDATA into EEPROM@EEADR
+	clrf	EEADRH			    	; Reset EEADRH
+	movff	EEDATA,button_polarity	; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) 
 
 ; Air pressure compensation	after reset
 	call	get_calibration_data	; Get calibration data from pressure sensor
 	banksel common                  ; get_calibration_data uses isr_backup
 
-        call	TFT_DisplayOff			; display off
-        bsf     LEDr                    ; Status LED
+	call	TFT_DisplayOff			; display off
+	bsf     LEDr                    ; Status LED
 	bcf	pressure_refresh
 ; First pass will not have valid temperature!
 	btfss	pressure_refresh 		; Air pressure compensation
@@ -105,9 +105,9 @@
 	movff	WREG,sub_a+1				; max. "allowed" airpressure in mbar
 	movff	last_surfpressure+0,sub_b+0
 	movff	last_surfpressure+1,sub_b+1
-	call	subU16					; sub_c = sub_a - sub_b
-	btfss	neg_flag                ; Is 1080mbar < amb_pressure ?
-	bra		start_copy_pressure		; NO: current airpressure is lower then "allowed" airpressure, ok!
+	call	subU16						; sub_c = sub_a - sub_b
+	btfss	neg_flag                	; Is 1080mbar < amb_pressure ?
+	bra		start_copy_pressure			; NO: current airpressure is lower then "allowed" airpressure, ok!
 
     ; not ok! Overwrite with max. "allowed" airpressure
 	movlw	LOW		max_surfpressure
@@ -119,36 +119,44 @@
 	movff	last_surfpressure+0,last_surfpressure_15min+0
 	movff	last_surfpressure+1,last_surfpressure_15min+1
 	movff	last_surfpressure+0,last_surfpressure_30min+0
-	movff	last_surfpressure+1,last_surfpressure_30min+1	; Rests all airpressure registers
+	movff	last_surfpressure+1,last_surfpressure_30min+1	; resets all airpressure registers
 
 ; reset deco data for surface mode
-	movlw	d'79'
-	movff	WREG,char_I_N2_ratio            ; 79% N2
-    SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy for deco routine
-	movff	int_I_pres_respiration+0,int_I_pres_surface+0     ; copy for desat routine
+	movlw	.21												; 21%
+	movff	WREG,char_I_O2_ratio            				; ... oxygen
+	movlw	.0												;  0%
+	movff	WREG,char_I_He_ratio            				; ... helium
+
+	; initialize GF high (needed by deco engine for color-coding the GF value)
+	movff	opt_GF_high,char_I_GF_High_percentage
+
+    SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration 	; breathing at surface
+	movff	int_I_pres_respiration+0,int_I_pres_surface+0	; surface pressue
 	movff	int_I_pres_respiration+1,int_I_pres_surface+1		
 
-	extern	deco_reset
-	call	deco_reset
+	extern	deco_setup
+	call	deco_setup				; set up all model parameters.
+    call    deco_clear_tissue       ; Set all tissues to Pamb * N2_ratio (C-Code)
+    banksel common                  ; back to bank 1, needed after every return from C code
 
 	call	rtc_init						; init clock
 
-    movlw   HIGH .512           ; =2
+    movlw   HIGH .512           			; =2
     movwf   EEADRH
     read_int_eeprom .0
     clrf    EEADRH
     movlw   0xAA
-    cpfseq  EEDATA              ; =0xAA
-    bra     no_deco_restore     ; No
+    cpfseq  EEDATA              			; =0xAA
+    bra     no_deco_restore     			; No
 
     extern  restore_decodata_from_eeprom
     call    restore_decodata_from_eeprom    ; Reload deco data and date/time from eeprom
 
 no_deco_restore:
-	call	deco_calc_desaturation_time     ; calculate desaturation time
+	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode
+	call	deco_calc_desaturation_time     ; calculate desaturation and no-fly time
 	banksel common
-	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode
-	banksel common
+	
 	bcf		menubit							; clear menu flag
 
 ; Check for Power-on reset here
@@ -158,16 +166,16 @@
     ; *****************************************************************************
 
     ; Try to migrate the old battery status from firmware 2.09 or earlier..
-    btfsc	RCON,POR					; Was this a power-on reset?
+    btfsc	RCON,POR						; Was this a power-on reset?
     call	use_old_prior_209				; No
 
     bcf		use_old_batt_flag	
-    btfsc	RCON,POR					; Was this a power-on reset?
+    btfsc	RCON,POR						; Was this a power-on reset?
     bsf		use_old_batt_flag				; No
     
     call    lt2942_get_status               ; Check for gauge IC
     btfss   battery_gauge_available         ; cR or 2 hardware?
-    bra	    power_on_return2		    ; no
+    bra	    power_on_return2		    	; no
 
     movlw   .30
     movff   WREG,opt_cR_button_right
@@ -223,8 +231,8 @@
 	movwf	lo
 	output_99x
 	bcf		leftbind
-	STRCAT_PRINT	""					; Print second row
-    call    TFT_Display_FadeIn          ; Display resulting surface screen.
+	STRCAT_PRINT	""				; Print second row
+    call    TFT_Display_FadeIn      ; Display resulting surface screen.
 
 ; place "after-update reset" here...
 
@@ -273,7 +281,7 @@
 
     call    option_restore_all      ; Restore everything from EEPROM into RAM
     call    option_check_all        ; Check all options (and reset if not within their min/max boundaries)
-    call    option_save_all	    ; Save all settings into EEPROM after they have been checked
+    call    option_save_all	    	; Save all settings into EEPROM after they have been checked
 
     clrf	flag1					; clear all flags
     clrf	flag2
@@ -287,7 +295,7 @@
     clrf	flag10
     ; Do not clear flag11 (Sensor calibration and charger status)
     clrf	flag12
-;    ; Do not clear flag13 (Important hardware flags)
+    ; Do not clear flag13 (Important hardware flags)
     clrf	flag14
     clrf	hardware_flag           ; hardware descriptor flag
     bsf		tft_is_dimming          ; TFT is dimming up (soon), ignore ambient sensor!
@@ -298,24 +306,24 @@
     bsf     optical_input           ; Set flag
 
     call    lt2942_get_status       ; Check for gauge IC
-    btfss   battery_gauge_available            ; cR/2 hardware?
+    btfss   battery_gauge_available	; cR/2 hardware?
     bra     restart2                ; No
 
     call    lt2942_init             ; Yes, init battery gauge IC
     bcf     optical_input           ; Clear flag
     
     banksel 0xF16
-    bcf	    ANCON0,7		    ; AN7 Digital input
+    bcf	    ANCON0,7		    	; AN7 Digital input
     banksel common
-    bcf	    lightsen_power	    ; Power-down ambient light sensor
+    bcf	    lightsen_power	    	; Power-down ambient light sensor
     bcf     ambient_sensor          ; Clear flag
     nop
-    btfss   PORTF,2		    ; Light sensor available?
+    btfss   PORTF,2		    		; Light sensor available?
     bsf	    ambient_sensor          ; Yes.
     banksel 0xF16
-    bsf	    ANCON0,7		    ; AN7 Analog again
+    bsf	    ANCON0,7		    	; AN7 Analog again
     banksel common
-    bsf	    lightsen_power	    ; Power-up ambient light sensor again
+    bsf	    lightsen_power	    	; Power-up ambient light sensor again
     
 restart2:
     btfsc   vusb_in
@@ -361,15 +369,15 @@
     TSTOSS  opt_flip_screen         ; =1: Flip the screen
     bcf     flip_screen             ; Normal orientation
 
-    btfsc   use_old_batt_flag   ; =1: load old battery information after power-on reset
-    goto    use_old_batteries	; Returns to "surfloop"!
+    btfsc   use_old_batt_flag   	; =1: load old battery information after power-on reset
+    goto    use_old_batteries		; Returns to "surfloop"!
 
-    btfsc   RCON,POR	    ; Was this a power-on reset?
-    goto    surfloop	    ; Jump to Surfaceloop!
-    bsf	    RCON,POR	    ; Set bit for next detection
+    btfsc   RCON,POR	   			; Was this a power-on reset?
+    goto    surfloop	    		; Jump to Surfaceloop!
+    bsf	    RCON,POR	    		; Set bit for next detection
     ; Things to do after a power-on reset
     extern  new_battery_menu,use_old_batteries
-    goto    new_battery_menu	; Returns to "surfloop"!
+    goto    new_battery_menu		; Returns to "surfloop"!
 
 ;=============================================================================
 ; Setup all flags and parameters for divemode and simulator computations.
@@ -386,20 +394,20 @@
     movlw   .10
     movwf   samplingrate
 restart_set_modes_and_flags1:
-    bcf	    twosecupdate		; to have divemode routines in sync
-    movlw   .3
-    movff   WREG,char_O_deco_status	; will init the deco_calc_hauptroutine on first invocation
+    bcf	    twosecupdate				; to have divemode routines in sync
+
     bcf	    FLAG_apnoe_mode
-    bcf     FLAG_ccr_mode		; =1: CCR mode (Fixed ppO2 or Sensor) active
-    bcf     FLAG_gauge_mode		; =1: In Gauge mode
+    bcf     FLAG_ccr_mode				; =1: CCR mode (Fixed ppO2 or Sensor) active
+    bcf     FLAG_gauge_mode				; =1: In Gauge mode
     bcf	    FLAG_pscr_mode
-    call    disable_ir_s8		; IR off
+    call    disable_ir_s8				; IR off
 
     movff   opt_dive_mode,lo            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
     
     tstfsz  lo
     bra     restart_set_modes_and_flags2
     ; OC Mode
+	
     return
 
 restart_set_modes_and_flags2:
@@ -419,15 +427,15 @@
     clrf    opt_ccr_mode                    ; Yes, reset to Fixed SP
 restart_set_modes_and_flags2b:
     banksel common
-	bsf     FLAG_ccr_mode               ; =1: CCR mode (Fixed SP, Auto SP or Sensor) active
-    call    enable_ir_s8                ; Enable IR/S8-Port
+	bsf     FLAG_ccr_mode               	; =1: CCR mode (Fixed SP, Auto SP or Sensor) active
+    call    enable_ir_s8                	; Enable IR/S8-Port
     return
 
 restart_set_modes_and_flags3:
     decfsz  lo,F
     bra     restart_set_modes_and_flags4
     ; Gauge Mode
-    bsf     FLAG_gauge_mode           ; =1: In Gauge mode
+    bsf     FLAG_gauge_mode           		; =1: In Gauge mode
     return
 
 restart_set_modes_and_flags4:
@@ -435,13 +443,30 @@
     bra     restart_set_modes_and_flags5
     ; Apnea Mode
     bsf		FLAG_apnoe_mode
-    return							    ; start in Surfacemode
+    return							    	; start in Surfacemode
 
 restart_set_modes_and_flags5:
-    ; PSCR Mode
-    bsf		FLAG_pscr_mode
-    return							    ; start in Surfacemode
-    
+	; PSCR Mode
+	btfsc	analog_o2_input					; cR?
+	bra		restart_set_modes_and_flags5b	; Yes, skip mode check
+	btfsc	optical_input					; 3
+	bra		restart_set_modes_and_flags5b	; Yes, skip mode check
+
+	; Make sure Sensor is not selected
+	; opt_ccr_mode must be <> 1 (=0: calculated ppO2, =1: Sensor, =2: Auto SP - not valid in pSCR, too)
+	banksel	opt_ccr_mode
+	movlw	.1
+	cpfseq	opt_ccr_mode					; = Sensor?
+	bra		restart_set_modes_and_flags5b	; No
+	clrf	opt_ccr_mode					; Yes, reset to calculated ppO2
+
+restart_set_modes_and_flags5b:
+	banksel	opt_ccr_mode
+	bcf		opt_ccr_mode,1					; in pSCR mode only calculated or Sensor, not 2 = Auto SP allowed
+	banksel	common
+	bsf		FLAG_pscr_mode
+	return									; start in Surfacemode
+
     
 backup_flash_page:       ; backup the first 128bytes from flash to EEPROM
     	; Start address in internal flash
@@ -451,20 +476,20 @@
         movwf   TBLPTRU
 
         movlw	.128
-        movwf	lo              ; Byte counter
+        movwf	lo              	; Byte counter
         clrf    EEADR
         movlw   .3
-        movwf   EEADRH          ; Setup backup address
+        movwf   EEADRH          	; Setup backup address
 
-        TBLRD*-					; Dummy read to be in 128 byte block
+        TBLRD*-						; Dummy read to be in 128 byte block
 backup_flash_loop:
-        tblrd+*					; Table Read with Pre-Increment
-        movff	TABLAT,EEDATA	; put 1 byte
-        call    write_eeprom    ; save it in EEPROM
+        tblrd+*						; Table Read with Pre-Increment
+        movff	TABLAT,EEDATA		; put 1 byte
+        call    write_eeprom    	; save it in EEPROM
         incf    EEADR,F
-        decfsz 	lo,F            ; 128byte done?
-        bra 	backup_flash_loop ; No
-        clrf    EEADRH          ; Reset EEADRH
-        return                  ; Done.
+        decfsz 	lo,F            	; 128byte done?
+        bra 	backup_flash_loop 	; No
+        clrf    EEADRH          	; Reset EEADRH
+        return                  	; Done.
 
 	END
\ No newline at end of file
--- a/src/start.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/start.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File start.inc
+;   File start.inc														V2.95
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
--- a/src/strings.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/strings.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File strings.asm
+;   File strings.asm									Version 2.92 = 2.26
 ;
 ;   Implementation code various string functions.
 ;
@@ -101,7 +101,7 @@
         global  text_get_tblptr
 text_get_tblptr:
         extern  text_1_base
-        movlw   UPPER(text_1_base); Complete 12bits to 24bits address.
+        movlw   UPPER(text_1_base)		; Complete 12bits to 24bits address.
         movwf   TBLPTRU
         movlw   HIGH(text_1_base)
         andlw   0xF0
@@ -109,10 +109,11 @@
         movwf   TBLPTRH
         movff   FSR1L,TBLPTRL
 
-        movff   opt_language,WREG       ; Get lang
-        bz      text_get_lang1        ; 0 == English
-        dcfsnz  WREG                    ; 1 == German
-        bra     text_get_lang2
+
+		movff   opt_language,WREG       ; Get lang
+		bz      text_get_lang1        	; 0 == English
+		dcfsnz  WREG                    ; 1 == German
+		bra     text_get_lang2
 ; Other ??? Keep language 1
 
 ; Read 2-byte pointer to string
@@ -126,21 +127,21 @@
 
 ; Add correction for German table:
 text_get_lang2:
-        extern  text_2_base
-        movlw   LOW(text_2_base)
-        addwf   TBLPTRL
-        movlw   HIGH(text_2_base)
-        addwfc  TBLPTRH
-        movlw   UPPER(text_2_base)
-        addwfc  TBLPTRU
+       extern  text_2_base
+       movlw   LOW(text_2_base)
+       addwf   TBLPTRL
+       movlw   HIGH(text_2_base)
+       addwfc  TBLPTRH
+       movlw   UPPER(text_2_base)
+       addwfc  TBLPTRU
 
-        movlw   LOW(text_1_base)
-        subwf   TBLPTRL
-        movlw   HIGH(text_1_base)
-        subwfb  TBLPTRH
-        movlw   UPPER(text_1_base)
-        subwfb  TBLPTRU
-        bra     text_get_lang1
+       movlw   LOW(text_1_base)
+       subwf   TBLPTRL
+       movlw   HIGH(text_1_base)
+       subwfb  TBLPTRH
+       movlw   UPPER(text_1_base)
+       subwfb  TBLPTRU
+       bra     text_get_lang1
         
 ;=============================================================================
 ; Copy a null-terminated string from TBLPTR to buffer.
@@ -183,33 +184,29 @@
         global      start_tiny_block
 start_tiny_block:
         clrf        WREG
-        movff       WREG, win_font      ; Need a bank-safe move here !
         bra         start_common
 
         global      start_small_block
 start_small_block:
         movlw       1
-        movff       WREG, win_font      ; Need a bank-safe move here !
         bra         start_common
 
         global      start_std_block
 start_std_block:
         movlw       2
-        movff       WREG, win_font      ; Need a bank-safe move here !
         bra         start_common
 
         global      start_medium_block
 start_medium_block:
         movlw       3
-        movff       WREG, win_font      ; Need a bank-safe move here !
         bra         start_common
 
         global      start_large_block
 start_large_block:
         movlw       4
-        movff       WREG, win_font      ; Need a bank-safe move here !
 ;        bra         start_common
 start_common:
+        movff       WREG, win_font      ; Need a bank-safe move here !
         VARARGS_BEGIN
             VARARGS_GET8    win_leftx2
             VARARGS_GET8    win_top
--- a/src/surfmode.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/surfmode.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File surfmode.asm
+;   File surfmode.asm								REFACTORED VERSION	V2.94
 ;
 ;   Surfacemode
 ;
@@ -9,7 +9,7 @@
 ; HISTORY
 ;  2011-08-07 : [mH] moving from OSTC code
 
-#include    "hwos.inc"                 ; Mandatory header
+#include    "hwos.inc"					; Mandatory header
 #include    "shared_definitions.h"      ; Mailbox from/to p2_deco.c
 #include    "start.inc"
 #include    "tft.inc"
@@ -43,16 +43,15 @@
 ; Boot tasks for all modes
 	global	surfloop
 surfloop:
-    call	speed_normal
+    call    speed_normal
     bcf     no_sensor_int           ; Normal pressure mode
 
-    bcf     LEDg
     bcf     LEDr
 
-    clrf	CCP1CON					; stop PWM
-	bcf		PORTC,2					; Pull PWM output to GND
-	call	TFT_boot                ; Initialize TFT (includes clear screen)
-	bcf		restore_deco_data
+    clrf    CCP1CON					; stop PWM
+    bcf	    PORTC,2					; Pull PWM output to GND
+    call    TFT_boot                ; Initialize TFT (includes clear screen)
+    bcf	    restore_deco_data
 
     WIN_TOP     .50
     WIN_LEFT    .10
@@ -100,8 +99,10 @@
     bcf     ccr_diluent_setup           ; Use OC gases for gaslist routine
 
 	bcf		simulatormode_active		; Quit simulator mode (if active)
-	bcf		switch_left
-	bcf		switch_right
+
+	; MOVE from here to below ## V2.94
+	; bcf		switch_left
+	; bcf		switch_right
 
 	;---- Fade to standard surface view --------------------------------------
 	; Wait 1 second
@@ -145,8 +146,12 @@
 	call	TFT_update_surf_press		; display surface pressure
 	call	TFT_temp_surfmode			; Displays temperature
 	call	TFT_display_decotype_surface
-    call    compute_ppo2                ; compute mv_sensorX and ppo2_sensorX arrays
-    call    check_sensors               ; Set enable/disable flags
+	
+; REPLACE	## voting logic
+;	call    compute_ppo2                ; compute mv_sensorX and ppo2_sensorX arrays
+;	call    check_sensors               ; Set enable/disable flags
+; BY
+	call	calc_deko_divemode_sensor
 
     movff   opt_dive_mode,lo            ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
     tstfsz  lo
@@ -158,20 +163,32 @@
 
     call    TFT_Display_FadeIn          ; Display resulting surface screen.
 
+	; MOVED from above to here	## V2.94
+	bcf		switch_left
+	bcf		switch_right
+	
     ;---- Late initialisations -----------------------------------------------    
-	movff	last_surfpressure_30min+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
-	movff	last_surfpressure_30min+1,int_I_pres_respiration+1		; 30min old values 
+	movff	last_surfpressure_30min+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine		## not used any more (!?)
+	movff	last_surfpressure_30min+1,int_I_pres_respiration+1		; 30min old values 								## not used any more (!?)
 	movff	last_surfpressure_30min+0,int_I_pres_surface+0			; copy surface air pressure to deco routine
 	movff	last_surfpressure_30min+1,int_I_pres_surface+1			; 30min old values 
 	movff	last_surfpressure_30min+0,last_surfpressure+0			; Use 30min old airpressure 
 	movff	last_surfpressure_30min+1,last_surfpressure+1			; Use 30min old airpressure
 
+	; NEW	## no fly
+	movff	opt_GF_low,char_I_GF_Low_percentage
+	movff	opt_GF_high,char_I_GF_High_percentage
+	
     ; Startup tasks for all modes
     ; Desaturation time needs:
     ;   int_I_pres_surface
     ;   char_I_desaturation_multiplier
 	call	deco_calc_desaturation_time ; calculate desaturation time
-	movlb	b'00000001'					; select ram bank 1
+	
+	; REPLACE	## (code unification)
+	; movlb	b'00000001'					; select ram bank 1
+	; BY
+	banksel	common
 
     btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
     call	enable_rs232				; Also sets to speed_normal ...
@@ -192,7 +209,6 @@
 	call	TFT_temp_surfmode			; Displays temperature
     btfss   secs,0                      ; Every two seconds...
     call    surfmode_check_for_warnings ; ... check for warnings (and display/update) them
-
 	bcf		onesecupdate				; every second tasks done
 	
 surfloop_loop2:	
@@ -222,23 +238,27 @@
     bcf     quarter_second_update
     
     ; Update Sensors
-    call    compute_ppo2                ; compute mv_sensorX and ppo2_sensorX arrays
-    call    check_sensors               ; Set enable/disable flags
+	; REPLACE	## voting logic
+	; call    compute_ppo2                ; compute mv_sensorX and ppo2_sensorX arrays
+	; call    check_sensors               ; Set enable/disable flags
+	; BY
+	call	calc_deko_divemode_sensor
+	
     btfsc   FLAG_ccr_mode               ; In CCR mode?
-    bra	    surfloop_loop2a1		; Yes.
+    bra	    surfloop_loop2a1			; Yes.
     btfss   FLAG_pscr_mode              ; In PSCR mode?
-    bra	    surfloop_loop2a		; No, skip
+    bra	    surfloop_loop2a				; No, skip
         
 surfloop_loop2a1:    
     movff   opt_ccr_mode,WREG           ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
     sublw   .1                          ; opt_ccr_mode = 1 (Sensor)?
-    bnz     surfloop_loop2a		; No, skip
+    bnz     surfloop_loop2a				; No, skip
 
     call    TFT_surface_sensor          ; ...update sensor data in surface mode
     call    TFT_sensor_surface_warning	; Show a warning arrow-down behind sensor readings when sensor is end-of-life
     movlw   .9 
-    cpfseq  menupos3			; in Sensor mV surface custom view? 
-    bra	    surfloop_loop2a		; No
+    cpfseq  menupos3					; in Sensor mV surface custom view? 
+    bra	    surfloop_loop2a				; No
     extern  TFT_sensor_mV 
     call    TFT_sensor_mV		; Yes, update mV readings (Each 1/4 second and not each second as in customview.asm)
 
@@ -255,8 +275,12 @@
 
     btfsc   enable_screen_dumps         ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
     bra     surfloop_loop3
-    btfsc   vusb_in                     ; USB plugged in?
-    call    comm_mode                   ; Start COMM mode
+	
+	; DELETE - In surface mode, only charing is available now - but now you can see the charging status :-)	## USB
+	;          To do USB communication, you now need to be in menu or logbook mode
+    ;btfsc   vusb_in                     ; USB plugged in?
+    ;call    comm_mode                   ; Start COMM mode
+	
     bra     surfloop_loop4
 surfloop_loop3:
     btfss   vusb_in                     ; USB (still) plugged in?
@@ -267,45 +291,87 @@
     movlw   "l"
     cpfseq	RCREG1
     bra     surfloop_loop4
-    call    TFT_dump_screen             ; Dump the screen contents
+    call    TFT_dump_screen             	; Dump the screen contents
 surfloop_loop4:
-	btfsc	sleepmode					; Sleepmode active?
-	goto	sleeploop					; Yes, switch into sleepmode!
+	btfsc	sleepmode						; Sleepmode active?
+	goto	sleeploop						; Yes, switch into sleepmode!
 
-	bra		surfloop_loop				; loop surfacemode
+	bra		surfloop_loop					; loop surfacemode
 
 update_surfloop60:
 ; One minute tasks for all modes
-	call	TFT_date					; Update date
-	call	calc_deko_surfmode			; calculate desaturation every minute
+	call	TFT_date						; Update date
+	
+	; REPLACE	## no fly 2
+	; call	calc_deko_surfmode				; calculate desaturation time every minute
+	; BY
+	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode. int_I_pres_surface gets updated by
+	call	deco_calc_desaturation_time		; TFT_update_surf_press when amb_pressure has changed by >= 10 mbar
+	banksel	common
+	
+	; NEW	## deco engine
+	; update tissue diagram if it is on display
+	movlw	.5								; number of tissue custom view
+	cpfseq	menupos3						; is this the current customview?
+	bra		update_surfloop60_1				; NO	
+	call    TFT_standard_color				; YES - set standard color
+    call	TFT_surface_tissues				; 	    show tissue diagram
+update_surfloop60_1:
+
+	; NEW	## no fly
+	; update last dive info if it is on display
+	movlw	.8								; number of the last dive info customview
+	cpfseq	menupos3						; is this the current customview?
+	bra		update_surfloop60_2				; NO	
+	call    TFT_standard_color				; YES - set standard color
+    call	TFT_surface_lastdive			; 	    show last dive infos
+update_surfloop60_2:
+
 	bcf		oneminupdate				
 	return
 
     extern  check_cns_violation,check_warn_battery,check_and_store_gf_violation
 surfmode_check_for_warnings:
-	movf	warning_counter_backup,W
-	cpfseq	warning_counter						; warning_counter_backup = warning_counter?
-	call	TFT_clear_warning_text              ; No, clear all warnings
-	movff	warning_counter,warning_counter_backup	; copy warning_counter
+
+	; DELETE	## (screen flicker)
+	; movf	warning_counter_backup,W
+	; cpfseq	warning_counter						; warning_counter_backup = warning_counter?
+	; call	TFT_clear_warning_text              ; No, clear all warnings
+	; movff	warning_counter,warning_counter_backup	; copy warning_counter
 
 	bcf		warning_active                      ; Clear flag
 	clrf	warning_counter						; Clear counter
 
     ; Warnings for all modes
     call	check_warn_battery                  ; Check if the battery level should be displayed/warned
-    rcall   surfmode_check_for_nofly            ; Check if nofly time should be shown
-    rcall   surfmode_check_for_desat            ; Check if desat time should be shown
-    rcall   surfmode_check_for_interval         ; Check if surface interval should be shown
+	
+	; DELETE HERE...	## (general fix)
+    ; rcall   surfmode_check_for_nofly            ; Check if nofly time should be shown
+    ; rcall   surfmode_check_for_desat            ; Check if desat time should be shown
+	
+	; DELETE - surface interval is now shown in last dive custom view, not as "warning" any more	## no fly
+    ; rcall   surfmode_check_for_interval         ; Check if surface interval should be shown
 
-	btfsc	FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
+	btfsc	FLAG_apnoe_mode             		; Done for Apnoe or Gauge mode
     bra     surfmode_check_for_warnings2
-	btfsc	FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
+	btfsc	FLAG_gauge_mode             		; Done for Apnoe or Gauge mode
 	bra     surfmode_check_for_warnings2
 
     ; Warnings only in deco modes
+	
+	; ...INSERT HERE ## (general fix) - desat and no-fly time belong to deco modes
+	rcall   surfmode_check_for_desat            ; Check if desat time should be shown
+	rcall   surfmode_check_for_nofly            ; Check if nofly time should be shown
+	
 	call	check_cns_violation					; Check CNS value and display it, if required
     call	check_and_store_gf_violation		; Check GF value and display it, if required
 
+	; NEW	## microbubbles
+	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
+	btfsc	WREG,mbubble_warning_lock			; do we have a microbubbles warning?
+	extern	warn_mbubbles
+	call	warn_mbubbles						; YES	
+
 surfmode_check_for_warnings2:
 ; Setup warning_page number
     incf    warning_page,F
@@ -313,51 +379,98 @@
     rlcf    warning_page,W                      ; *2
     cpfsgt  warning_counter                     ; > warning_counter
     clrf    warning_page                        ; No, clear
+	
+	; NEW	## (screen flicker)
+; Clear both rows of warnings if there is nothing to show at all
+	tstfsz	warning_counter						; any warnings?
+	bra		surfmode_check_for_warnings3		; YES - look if second row needs to be cleared
+	call	TFT_clear_warning_text              ; NO  - clear complete warnings area
+	return
+surfmode_check_for_warnings3:
 
 ; Clear 2nd row of warnings if there is nothing to show (on this page)
     btfss   second_row_warning                  ; =1: The second row contains a warning
     call    TFT_clear_warning_text_2nd_row      ; No, clear this row
     return                                      ; Done.
 
-surfmode_check_for_interval:
-	movf    	surface_interval+0,W            ; Is interval null ?
-    iorwf   	surface_interval+1,W
-    bnz     	surfmode_check_for_interval2	; No
-    return
-surfmode_check_for_interval2:
-	incf    warning_counter,F			; increase counter
-    call    TFT_interval
-    return
+; DELETE - surface interval is now shown in last dive custom view, not as "warning" any more	## no fly
+;
+;surfmode_check_for_interval:
+;	movf    surface_interval+0,W           		; Is interval null ?
+;    iorwf   surface_interval+1,W
+;    bnz     surfmode_check_for_interval2		; No
+;    return
+;surfmode_check_for_interval2:
+;	incf    warning_counter,F					; increase counter
+;    call    TFT_interval
+;    return
 
 
 surfmode_check_for_desat:
-	movf    	desaturation_time+0,W           ; Is nofly null ?
-    iorwf   	desaturation_time+1,W
-    bnz     	surfmode_check_for_desat2		; No
+	; REPLACE	## no fly
+	; movf    desaturation_time+0,W           	; Is nofly null ?
+    ; iorwf   desaturation_time+1,W
+	; BY
+	banksel	int_O_desaturation_time
+	movf    int_O_desaturation_time+0,W			; Is nofly null ?
+	iorwf   int_O_desaturation_time+1,W
+	
+    bnz     surfmode_check_for_desat2			; No
+	
+	; NEW	## no fly
+	banksel common
+	
     return
+
 surfmode_check_for_desat2:
-	incf	warning_counter,F			; increase counter
+	; NEW	## no fly
+	banksel common
+	
+	incf	warning_counter,F					; increase counter
     call    TFT_desaturation_time
     return
 
 surfmode_check_for_nofly:
- 	movf    nofly_time+0,W              ; Is nofly null ?
-    iorwf   nofly_time+1,W
-    bnz     surfmode_check_for_nofly2   ; No...
+	; REPLACE	## no fly
+ 	; movf    nofly_time+0,W              		; Is nofly null ?
+    ; iorwf   nofly_time+1,W
+	; BY
+	banksel	int_O_nofly_time
+	movf    int_O_nofly_time+0,W           		; Is nofly null ?
+	iorwf   int_O_nofly_time+1,W
+	
+    bnz     surfmode_check_for_nofly2   		; No...
+	
+	; NEW	## no fly
+	banksel	common
+	
     return
+
 surfmode_check_for_nofly2:
-	incf	warning_counter,F			; increase counter
+	; NEW	## no fly
+	banksel	common
+	
+	incf	warning_counter,F					; increase counter
     call    TFT_nofly_time
     return
 
 
 ;=============================================================================
-	global	calc_deko_surfmode
-calc_deko_surfmode:
-    SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine
-	call	deco_calc_wo_deco_step_1_min    ; calculate deco in surface mode
-	banksel		common
-	return
+
+; DELETE - not used any more	## no fly
+;	global	calc_deko_surfmode
+;calc_deko_surfmode:
+;
+;	; DELETE - deco_calc_wo_deco_step_1_min uses int_I_pres_surface, not int_I_pres_respiration	## no fly
+;    ; SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine
+;
+;	call	deco_calc_wo_deco_step_1_min    			; calculate deco in surface mode
+;	
+;	; NEW	## no fly
+;	; call	deco_calc_desaturation_time
+;	
+;	banksel		common
+;	return
 
 test_switches_surfmode:		; checks switches in surfacemode
 	btfsc	switch_right
@@ -383,7 +496,7 @@
 
 test_switches_surfmode3a:
 	bcf		switch_left
-	bsf		menubit					; Enter Menu!
+	bsf		menubit						; Enter Menu!
 	return
 
 test_switches_surfmode3b:
--- a/src/surfmode.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/surfmode.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File surfmode.inc
+;   File surfmode.inc								REFACTORED VERSION V2.92
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -9,7 +9,7 @@
 ;  2011-08-07 : [mH] moving from OSTC code
 
  extern surfloop
- extern	calc_deko_surfmode
+; extern	calc_deko_surfmode			DELETED - not used any more	## no fly
  extern	timeout_surfmode
  extern	timeout_testmode
 
@@ -39,7 +39,7 @@
 #DEFINE surf_warning_length     .11                 ; total string length
 
 #DEFINE	surf_temp_row		.185
-#DEFINE	surf_temp_column	.120
+#DEFINE	surf_temp_column	.120					; CHANGED - clear overlapp with warning text area ## temp
 #DEFINE	surf_press_row		.160
 #DEFINE	surf_press_column	.98
 
--- a/src/text_english.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/text_english.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;    File text_english.asm
+;    File text_english.asm							REFACTORED VERSION V2.95
 ;
 ;    English texts reference file.
 ;
@@ -8,291 +8,334 @@
 ;=============================================================================
 
 ; Basic texts
-	TCODE	tNo,        "No"            ; No
-	TCODE	tYes,       "Yes"           ; Yes = No + 1
-
+	TCODE	tNo,        	"No"           		; No
+	TCODE	tYes,       	"Yes"          		; Yes = No + 1
+	TCODE	tblank,			" "					; (a single space character)	## NEW (layout)
+	
 ; Surface-mode texts
-    TCODE   tBeta,      "beta"         	; beta
-    TCODE   tMenu,	"<Menu" 	; <Menu
-    TCODE   tView,      "View>"         ; View>
-    TCODE   tHeading,   "Heading:"      ; Heading:
-    TCODE   tLastDive,	"Last Dive"	; Last Dive (Max 10 chars)
-    TCODE   tSensorMilliVolt, "CCR Sensors mV" ; CCR Sensors mV
+    TCODE   tBeta,      	  "beta"   			; beta
+    TCODE   tMenu,			  "<Menu" 			; <Menu
+    TCODE   tView,      	  "View>"      		; View>
+    TCODE   tHeading,   	  "Heading:"   		; Heading:
+    TCODE   tLastDive,		  "Last Dive"		; Last Dive (Max 10 chars)
+    TCODE   tSensorMilliVolt, "CCR Sensors mV" 	; CCR Sensors mV
 
 ; Divemode Menu
     TCODE   tDivemenu_Gaslist,  "Gaslist"       ; Gaslist
     TCODE   tDivemenu_ResetAvg, "Reset Avg."    ; Reset Avg.
     TCODE   tDivemenu_Setpoint, "Setpoint"      ; Setpoint
-    TCODE   tDivemenu_UseSensor,"Use Sensor"    ; Use Sensor
+    TCODE   tDivemenu_UseSensor,"use Sensor"    ; Use Sensor
     TCODE   tDivemenu_ToggleGF, "Toggle GF"     ; Toggle GF
     TCODE   tDivemenu_Marker,   "Set Marker"    ; Set Marker
     TCODE   tDivemenu_LostGas,  "Lost Gas"      ; Lost Gas
 
 ; Main menu
-    TCODE   tNext,      "<Next"         ; <Next
-    TCODE   tEnter,     "Enter>"        ; Enter>
+    TCODE   tNext,      	"<Next"        		; <Next
+    TCODE   tEnter,     	"Enter>"       		; Enter>
 
-    TCODE   tMainMenu,  "Main Menu"     ; MainMenu
-    TCODE   tLogbook,   "Logbook"       ; Logbook
-    TCODE   tGasSetup,  "OC Gas Setup"  ; OC Gas Setup
-    TCODE   tSetTime,   "Set Time"		; Set Time
-    TCODE	tSetDate,	"Set Date"		; Set Date
-    TCODE	tSetTimeDate,"Set Time & Date"; Set Time & Date
-    TCODE   tDispSets,  "Display Settings" ; Display Settings
-    TCODE   tExit,      "Exit"          ; Exit
-	TCODE	tResetMenu, "Reset Menu"	; Reset Menu
-	TCODE	tDiveModeMenu,"Deco Mode"	; Deco Mode
-	TCODE	tInfoMenu,	"Information"	; Information
-    TCODE   tCCRSetup,  "CCR Setup"     ; CCR Setup
-    TCODE   tDiluentSetup,"Diluent Setup"   ; Diluent Setup
-    TCODE   tFixedSetpoints,"Fixed Setpoints" ; Fixed Setpoints
-    TCODE   tCCRSensor, "CCR Sensor"    ; CCR Sensor
-    TCODE   tCalibrateMenu, "Calibration"   ; Calibration
-    TCODE   tCalibrationGas, "Cal. Gas O2:"  ; Cal. Gas O2:
-    TCODE   tCalibrate, "Calibrate"     ; Calibrate
+    TCODE   tMainMenu,  	"Main Menu"    		; MainMenu
+    TCODE   tLogbook,   	"Logbook"       	; Logbook
+    TCODE   tGasSetup,  	"OC Gas Setup"  	; OC Gas Setup
+    TCODE   tSetTime,   	"Set Time"			; Set Time
+    TCODE	tSetDate,		"Set Date"			; Set Date
+    TCODE	tSetTimeDate,	"Set Time & Date"	; Set Time & Date
+    TCODE   tDispSets,  	"Display Settings" 	; Display Settings
+    TCODE   tExit,      	"Exit"          	; Exit
+	TCODE	tResetMenu, 	"Reset Menu"		; Reset Menu
+	TCODE	tDiveModeMenu,	"Deco Setup"		; Deco Setup					## MODIFIED (consistent naming)
+	TCODE	tInfoMenu,		"Information"		; Information
+	TCODE   tCCRSetup,  	"CCR/pSCR Setup" 	; CCR/pSCR Setup				## MODIFIED (consistent naming)
+    TCODE   tDiluentSetup,	"Diluent Setup"   	; Diluent Setup
+	TCODE   tFixedSetpoints,"CCR Setpoints" 	; Fixed Setpoints for CCR		## MODIFIED (consistent naming)
+	TCODE   tCCRSensor, 	"Sensor"   			; CCR/pSCR Sensor				## MODIFIED (consistent naming)
+    TCODE   tCalibrateMenu, "Calibration"   	; Calibration
+    TCODE   tCalibrationGas,"Cal. Gas O2:"  	; Cal. Gas O2:
+    TCODE   tCalibrate, 	"Calibrate"    		; Calibrate
+	TCODE	tBack,			 "back..."			;								## NEW 
 
 ; Gas menu
-    TCODE   tGaslist,   "OC Gas List"
-    TCODE   tGaslistCC, "CC Diluents"
-    TCODE   tGasEdit,   "Edit Gas"
-    TCODE   tType,      "Type: "
-    TCODE   tGasDisabled,"Disabled"  ; Disabled
-    TCODE   tGasFirst,   "First"     ; First
-    TCODE   tGasTravel,  "Travel"    ; Travel
-    TCODE   tGasDeco,    "Deco"      ; Deco
-    TCODE   tDilDisabled,"Disabled"  ; Disabled
-    TCODE   tDilFirst,   "First"     ; First
-    TCODE   tDilNorm,   "Normal"     ; Normal
-    TCODE   tAir,       "Air  "         ; Enum: values must follows (5 chars)
-    TCODE   tO2,        "O2   "         ; tAir + 5
-    TCODE   tO2Plus,    "O2 +"
-    TCODE   tO2Minus,   "O2 -"
-    TCODE   tHePlus,    "He +"
-    TCODE   tHeMinus,   "He -"
-    TCODE   tMOD,       "MOD:"
-    TCODE   tEAD,       "EAD:"
-    TCODE   tGasDepth,  "Change depth"
-    TCODE   tDepthPlus, "Depth +"
-    TCODE   tDepthMinus,"Depth -"
-    TCODE   tDepthReset,"Reset to MOD:"
-    TCODE   tSetup_mix, "Setup Mix"
-    TCODE   tCCRMode,   "CCR Mode:"             ; CCR Mode:
-    TCODE   tCCRModeFixedSP,  "Fixed SP"        ; Fixed SP
-    TCODE   tCCRModeSensor,   "Sensor"          ; Sensor
-    TCODE   tCCRModeAutoSP,   "Auto SP"         ; Auto SP
+    TCODE   tGaslist,   	"OC Gas List"
+    TCODE   tGaslistCC, 	"CC Diluents"
+    TCODE   tGasEdit,   	"Edit Gas"
+    TCODE   tType,      	"Type: "
+    TCODE   tGasDisabled,	"Disabled"  		; Disabled
+    TCODE   tGasFirst,   	"First"     		; First
+    TCODE   tGasTravel,  	"Travel"    		; Travel
+    TCODE   tGasDeco,    	"Deco"      		; Deco
+    TCODE   tDilDisabled,	"Disabled"  		; Disabled
+    TCODE   tDilFirst,   	"First"     		; First
+    TCODE   tDilNorm,   	"Normal"     		; Normal
+    TCODE   tAir,       	"Air  "         	; Enum: values must follow (5 chars)
+    TCODE   tO2,        	"O2   "         	; tAir + 5
+    TCODE   tO2Plus,    	"O2 +"
+    TCODE   tO2Minus,   	"O2 -"
+    TCODE   tHePlus,    	"He +"
+    TCODE   tHeMinus,   	"He -"
+    TCODE   tMOD,       	"MOD:"
+    TCODE   tEAD,       	"EAD:"
+    TCODE   tGasDepth,  	"Change depth"
+    TCODE   tDepthPlus, 	"Depth +"
+    TCODE   tDepthMinus,	"Depth -"
+    TCODE   tDepthReset,	"Reset to MOD:"
+    TCODE   tSetup_mix, 	"Setup Mix"
+	TCODE   tCCRMode,   	"Mode:"             ; Mode:							## MODIFIED (layout)
+    TCODE   tCCRModeFixedSP,"Fixed SP/Calc."  	; Fixed for CCR / Calc.for pSCR	## MODIFIED (layout)
+    TCODE   tCCRModeSensor,	"Sensor"          	; Sensor
+    TCODE   tCCRModeAutoSP,	"Auto SP"         	; Auto SP
     TCODE   tSP,            "SP"                ; SP (SetPoint)
-    TCODE   tSPPlus,    "ppO2+"                  ; pO2+
-    TCODE   tSensorFallback, "Fallback:"        ; Fallback:
-    TCODE   tppO2,      "ppO2:"                 ; ppO2:
-    TCODE   tppO2O2,	"ppO2(O2)"		; ppO2(O2)
-    TCODE   tppO2Dil,	"ppO2(Dil)"		; ppO2(Dil)
-
-	TCODE   tNewBattTitle,      "New Battery?"
-	TCODE	tNewBattOld,		"Keep old"
-	TCODE	tNewBattNew36,		"New 3.6V Saft"
-	TCODE	tNewBattNew15,		"New 1.5V AA"
-	TCODE	tNewBattAccu,		"3.6V LiIon AA"
+    TCODE   tSPPlus,    	"ppO2+"             ; pO2+
+    TCODE   tSensorFallback,"Fallback:"         ; Fallback:
+	TCODE	tCalculated,	"calculated"		; calculated
+    TCODE   tppO2,      	"ppO2:"             ; ppO2:
+    TCODE   tppO2O2,		"ppO2(O2)"			; ppO2(O2)
+    TCODE   tppO2Dil,		"ppO2(Dil)"			; ppO2(Dil)
+	TCODE   tppO2Mix,		"ppO2(Mix)"			; ppO2(Mix)
+	
+; New batteries menu
+	TCODE   tNewBattTitle,	"New Battery?"
+	TCODE	tNewBattOld,	"Keep old"
+	TCODE	tNewBattNew36,	"New 3.6V Saft"
+	TCODE	tNewBattNew15,	"New 1.5V AA"
+	TCODE	tNewBattAccu,	"3.6V LiIon AA"
 	TCODE	tNew18650,		"Internal 18650"
 	TCODE	tNew16650,		"Internal 16650"
 
-
 ; Gaslist management
-    TCODE   tGas,       "Gas"           ; Gas
-    TCODE   tGasErr,    "Err"           ; Err  (3 chars)
+    TCODE   tGas,       	"Gas"				; Gas
+    TCODE   tGasErr,    	"Err"           	; Err  (3 chars)
         
 ; Communication Menu
-	TCODE	tUsbTitle,	"USB Mode"
-    TCODE   tBleTitle,  "Bluetooth Mode"
-	TCODE	tUsbStarting,  "Starting..."
-	TCODE	tUsbStartDone, "Done."
-	TCODE	tUsbServiceMode, "Service mode enabled"
+	TCODE	tUsbTitle,		"USB Mode"
+    TCODE   tBleTitle,  	"Bluetooth Mode"
+	TCODE	tUsbStarting,  	"Starting..."
+	TCODE	tUsbStartDone, 	"Done."
+	TCODE	tUsbServiceMode,"Service mode enabled"
 	TCODE	tUsbClosed,		"Port closed"
 	TCODE	tUsbExit,		"Exited"
-	TCODE	tUsbDownloadMode, "Download mode enabled"
+	TCODE	tUsbDownloadMode,"Download mode enabled"
     TCODE   tUsbLlBld,      "Low-level Bootloader"
 
 ; Dive Settings
-    TCODE   tDvMode,    "Dive Mode:"
-    TCODE   tDvOC,      "OC"
-    TCODE   tDvCC,      "CC"
-    TCODE   tDvGauge,   "Gauge"
-    TCODE   tDvApnea,   "Apnea"
-    TCODE   tDvPSCR,	"PSCR"
-    TCODE   tDkMode,    "Decotype:"
-    TCODE   tZHL16,     "ZH-L16"
-    TCODE   tZHL16GF,   "ZH-L16+GF"
-    TCODE   tPPO2Max,   "ppO2 Max:"
-    TCODE   tPPO2DECO,	"ppO2 Deco:"
-    TCODE   tPPO2MIN,   "ppO2 Min:"
-    TCODE   tLastDecostop, "Last Deco:"
-    TCODE   tDecoparameters, "Deco Parameters"
-    TCODE   tGF_low,    "GF low:"
-    TCODE   tGF_high,   "GF high:"
-    TCODE   tSaturationMult,    "Saturation:"
-    TCODE   tDesaturationMult,  "Desaturation:"
-    TCODE   tFTTSMenu,  "Future TTS:"            ; Future TTS
-    TCODE   taGFMenu,   "Alternative GF"         ; Alternative GF
-    TCODE   taGF_low,   "aGF low:"               ; aGF low
-    TCODE   taGF_high,  "aGF high:"              ; aGF high
-    TCODE   taGF_enable,"aGF selectable:"        ; aGF Selectable
-    TCODE   tDiveaGF_active,"aGF!"               ; aGF!
-    TCODE   tppO2settings,"ppO2 Settings"        ; ppO2 Settings
-    TCODE   tsafetystopmenu,"Safety Stop:"       ; Safety Stop:
+    TCODE   tDvMode,    	"Dive Mode:"
+    TCODE   tDvOC,      	"OC"				; keep order, enum from here...
+    TCODE   tDvCCR,		"CCR"
+    TCODE   tDvGauge,   	"Gauge"
+    TCODE   tDvApnea,   	"Apnea"
+    TCODE   tDvPSCR,		"pSCR"				; ...up to here!
+    TCODE   tDvCC,      	"CC"
+    TCODE   tDkMode,    	"Decotype:ZH-L16"	;								## MODIFIED (memory needs)
+    TCODE   tZHL16,     	" "					; keep order, enum from here...	## MODIFIED (memory needs)
+    TCODE   tZHL16GF,   	"+GF"				; ...up to here!				## MODIFIED (memory needs)
+    TCODE   tPPO2Max,   	"Max     :"			;								## MODIFIED (layout)
+    TCODE   tPPO2DECO,		"Max Deco:"			;								## MODIFIED (layout)
+    TCODE   tPPO2MIN,   	"Min     :"			;								## MODIFIED (layout)
+	TCODE	tPPO2MINCC, 	"Min Loop:"			; 								## NEW ppO2 min cc
+    TCODE   tLastDecostop, 	"Last Deco:"
+    TCODE   tDecoparameters,"Deco Parameters"
+    TCODE   tGF_low,    	"GF low :"			; 								## MODIFIED (layout)
+    TCODE   tGF_high,   	"GF high:"
+    TCODE   tSaturationMult,  "Saturation  :"	; 								## MODIFIED (layout)
+    TCODE   tDesaturationMult,"Desaturation:"
+	TCODE   tFTTSMenu,  	"fTTS/Delay:"		; Future TTS / Ascent Delay		## MODIFIED (layout)
+    TCODE   taGFMenu,   	"Alternative GF"    ; Alternative GF
+    TCODE   taGF_low,   	"aGF low :"         ; aGF low						## MODIFIED (layout)
+    TCODE   taGF_high,  	"aGF high:"         ; aGF high
+    TCODE   taGF_enable,	"aGF selectable:"   ; aGF Selectable
+    TCODE   tDiveaGF_active,"aGF!"              ; aGF!
+    TCODE   tppO2settings,	"ppO2 Settings"     ; ppO2 Settings
+    TCODE   tsafetystopmenu,"Safety Stop:"		; Safety Stop:
+	TCODE   tGasUsage,  	"Gas Usage"         ; Gas Usage
+    TCODE   tSetBotUse, 	"Bottom Gas: "      ; Bottom Gas: (space)
+    TCODE   tSetDecoUse,	"Deco   Gas: "      ; Deco   Gas: (space)			## MODIFIED (layout)
+	TCODE	tCalcAscGas,	 "Calc.Gas (B/O):"	;								## NEW bailout gas needs
+	TCODE	tTankSizes,		 "Tank Sizes"		;								## NEW bailout gas needs
+	TCODE   tLiter,			 " l"				;								## NEW bailout gas needs 
+	TCODE	tTankFillPress,	 "Tank Press Budget";
+	TCODE	tGas1,			 "Gas 1:"			;								## NEW bailout gas needs
+	TCODE	tGas2,			 "Gas 2:"			;								## NEW bailout gas needs
+	TCODE	tGas3,			 "Gas 3:"			;								## NEW bailout gas needs
+	TCODE	tGas4,			 "Gas 4:"			;								## NEW bailout gas needs
+	TCODE	tGas5,			 "Gas 5:"			;								## NEW bailout gas needs
+	TCODE	tCCmaxFracO2,	 "Loop %O2 max.:"	;								## NEW CCR max ppO2 limiter
+	TCODE	t2ndDecoPlanMenu,"2nd Deco Plan"	;								## NEW deco engine
 
 ; Display Settings
-    TCODE   tBright,    "Brightness:"
-    TCODE   tEco,       "Eco"
-    TCODE   tMedium,    "Medium"
-    TCODE   tHigh,      "High"
-    TCODE   tDvSalinity,"Salinity:"             ; Salinity
-    TCODE   tFlip,      "Rotate Screen:"        ; Rotate Screen
-    TCODE   tMODwarning,"MOD warning:"          ; MOD warning
-    TCODE   tShowppO2,  "Always show ppO2:"     ; Always show ppO2:
-    TCODE   tTimeoutDive,"Dive Timeout:"	; Dive Timeout
-
+    TCODE   tBright,    	"Brightness:"
+    TCODE   tEco,       	"Eco"
+    TCODE   tMedium,    	"Medium"
+    TCODE   tHigh,      	"High"
+    TCODE   tDvSalinity,	"Salinity: "       	; Salinity						## MODIFIED (layout)
+	TCODE   tShowppO2,  	"Always show ppO2:"	; Always show ppO2:
+    TCODE   tFlip,      	"Rotate Screen:"    ; Rotate Screen
+    TCODE   tMODwarning,	"MOD  Warning  :"	; MOD warning					## MODIFIED (layout)
+	TCODE	tIBCDwarning,	"IBCD Warning  :"	; IBCD Warning					## NEW IBCD
+    TCODE   tTimeoutDive,	"Dive Timeout:"		; Dive Timeout					## MODIFIED (layout)
+	
 ; VSI display Settings
-    TCODE   tVSItext2,  "Variable speed:"     ; Variable speed:
-    TCODE   tVSIgraph,  "Speed graph:"        ; Speed graph:
+    TCODE   tVSItext2,  	"Variable Speed:"   ; Variable speed:				## MODIFIED (layout)
+    TCODE   tVSIgraph,  	"Speed    Graph:"   ; Speed graph:					## MODIFIED (layout)
 
 ; Setup Menu
-    TCODE   tSystSets,  "Settings"
-    TCODE   tLanguage,  "Language:"
-    TCODE   tEnglish,   "English"
-    TCODE   tGerman,    "German"
-    TCODE   tFrench,    "French"
-    TCODE   tItalian,   "Italian"
-    TCODE   tCompassMenu,"Compass calibration"  ; Compass calibration
-    TCODE   tCompassGain,"Compass Gain:"         ; Compass gain:
-    TCODE   tCalX,	 "Cal X:"		; Cal X
-    TCODE   tCalY,	 "Cal Y:"		; Cal Y
-    TCODE   tCalZ,	 "Cal Z:"		; Cal Z
+    TCODE   tSystSets,  	"Settings"
+    TCODE   tLanguage,  	"Language:"
+    TCODE   tEnglish,   	"English"
+    TCODE   tGerman,    	"German"
+    TCODE   tFrench,    	"French"
+    TCODE   tItalian,   	"Italian"
+    TCODE   tCompassMenu,	"Compass calibration"
+    TCODE   tCompassGain,	"Compass Gain:"
+    TCODE   tCalX,	 		"Cal X:"			; Cal X
+    TCODE   tCalY,	 		"Cal Y:"			; Cal Y
+    TCODE   tCalZ,	 		"Cal Z:"			; Cal Z
 
-    TCODE   tUnits,     "Units:"
-    TCODE   tMetric,     " m/°C"            ; Enum menu
-    TCODE   tImperial,   "ft/°F"
-	
-    TCODE   tDefName,   "HW OSTC"
-	TCODE	tbar,		"bar"				; bar
+    TCODE   tUnits,     	"Units:"
+    TCODE   tMetric,     	" m/°C"            	; Enum menu
+    TCODE   tImperial,   	"ft/°F"
+
+    TCODE   tDefName,   	"HW OSTC"
 
-    TCODE   tButtonleft,"Left button:"      ; Left button
-    TCODE   tButtonright,"Right button:"    ; Right button
+    TCODE   tButtonleft,	"Left button:"		; Left button
+    TCODE   tButtonright,	"Right button:"    	; Right button
+
+	TCODE	tAltMode,		"Waiting Time:"		;								## NEW no fly altitude
+	TCODE	tAltModeFly,	"Flying"			;								## NEW no fly altitude
+	TCODE	tAltMode1000,	"1000m"				;								## NEW no fly altitude
+	TCODE	tAltMode2000,	"2000m"				;								## NEW no fly altitude
+	TCODE	tAltMode3000,	"3000m"				;								## NEW no fly altitude
 
 ; Units for all menu
-    TCODE   tMeters,    "m"
-	TCODE	tFeets,		"ft"
-	TCODE	tFeets1,	"f"
-    TCODE   tMinutes,   "'"
-    TCODE   tPercent,   "%"
-    TCODE   tLitersMinute, "l/min"
+    TCODE   tMeters,    	"m"
+	TCODE	tFeets,			"ft"
+	TCODE	tFeets1,		"f"
+    TCODE   tMinutes,   	"'"
+    TCODE   tPercent,   	"%"
+    TCODE   tLitersMinute, 	"l/min"
+	TCODE	tbar,			" bar"				; bar							## MODIFIED (layout)
+	TCODE	tbar10,			"0 bar"				; bar							## NEW 2.95
+	TCODE	tMeterMinute,	"m/min"				; meter per minute				## ascent speed
+	TCODE	tmin,			"min"				; minutes
 
 ; Date
-	TCODE	tDateFormat, "Date:"
-	TCODE	tDateformat, "MMDDYY"
-	TCODE	tDateformat1,"DDMMYY"
-	TCODE	tDateformat2,"YYMMDD"
+	TCODE	tDateFormat, 	"Date:"
+	TCODE	tDateformat, 	"MMDDYY"
+	TCODE	tDateformat1,	"DDMMYY"
+	TCODE	tDateformat2,	"YYMMDD"
 
 ; Simulator menu
-    TCODE   tInter, 	"Start Simulator"  ; Start Simulator
-    TCODE   tPlan,  	"Simulator"        ; Simulator
+    TCODE   tInter, 		"Start Simulator"	; Start Simulator
+    TCODE   tPlan,  		"Simulator"			; Simulator
 
 ; Decoplanner submenu
-    TCODE   tBtTm,  	"Bot. Time:"        ; Bot. Time: (10 chars)
-    TCODE   tBtTm_short,"Time:"             ; Bot. Time: (max. 6 chars)
-    TCODE   tMxDep, 	"Max Depth:"        ; Max Depth: (10 chars)
-    TCODE   tIntvl, 	"Interval :"        ; Interval : (10 chars)
-    TCODE   tDeco,  	"Calculate Deco"    ; Calculate Deco
-    TCODE   tDivePlan,  "Dive Plan:"        ; Dive Plan:
-    TCODE   tNoDeco,    "No Deco"           ; No Deco
-    TCODE   tMore,      "More..."           ; More...
-    TCODE   tGasUsage,  "Gas Usage"         ; Gas Usage
-    TCODE   tSetBotUse, "Bottom Gas: "      ; Bottom Gas: (space)
-    TCODE   tSetDecoUse,"Deco Gas: "        ; Deco Gas: (space)
-
+    TCODE   tBtTm,  		"Bot.Time : "		; Bot. Time: (10 chars)			## MODIFIED (layout)
+    TCODE   tBtTm_short,	"Time:"             ; Bot. Time: (max. 6 chars)
+    TCODE   tBtDep, 		"Bot.Depth: "		; Max Depth: (10 chars)			## MODIFIED (layout)
+    TCODE   tIntvl, 		"Interval : "		; Interval : (10 chars)
+	TCODE	tDecoSetup,		"Calculator Setup"	;								## NEW (layout)
+	TCODE   tDeco,  		"Start Calculator"  ; Calculate Deco				## MODIFIED (layout)
+    TCODE   tDivePlan,  	"Dive Plan:"        ; Dive Plan:
+    TCODE   tNoDeco,    	"No Deco"           ; No Deco
+    TCODE   tMore,      	"More..."           ; More...
+	TCODE	tSelectSetpoint,"CCR Setpoint: "	;								## NEW deco calculator enhancement
+	TCODE	tuseAGF,		"use aGF: "			;								## NEW deco calculator enhancement
+	TCODE	tCalculating,	"Calculating..."	;								## NEW deco calculator enhancement
 
 ; Information menu
-    TCODE   tFirmware,  "Firmware: "        ; Firmware: (space)
-    TCODE   tSerial,    "Serial  : "        ; Serial  : (space)
-    TCODE   tTotalDives,"Total Dives: "	    ; Total Dives:
-    TCODE   tBatteryV,  "Battery: "         ; Battery:
-    TCODE   tUptime,	"Uptime: "	    ; Uptime: 
-    
+    TCODE   tFirmware,  	"Firmware: "        ; Firmware: (space)
+    TCODE   tSerial,    	"Serial  : "        ; Serial  : (space)
+    TCODE   tTotalDives,	"Total Dives: "	    ; Total Dives:
+    TCODE   tBatteryV,  	"Battery : "        ; Battery:						## MODIFIED	## info - added one space
+    TCODE   tUptime,		"Uptime  : "    	; Uptime:						## MODIFIED	## info - added two spaces
+   
 ; Divemode screen
-    TCODE   tNDL,       "NDL"
-    TCODE   tTTS,   	"TTS"
-	TCODE	tVelMetric,	 "m/min"
-	TCODE	tVelImperial,"ft/m "
-	TCODE	tGasSelect,  "Select Gas"       ; Select Gas
-	TCODE	tSelectAir,	 "Air "     		; Air
-	TCODE	tSelectO2,	 "O2  "             ; O2
-    TCODE   tSelectNx,   "Nx"               ; Nx
-    TCODE   tSelectTx,   "Tx"               ; Tx
-    TCODE   tDepth,      "Depth"            ; Depth
-    TCODE   tMaxDepth,   "Max. Depth"       ; Max. Depth - max 10chars!
-    TCODE   tDivetime,   "Divetime"         ; Divetime
+    TCODE   tNDL,       	"NDL"
+    TCODE   tTTS,   		"TTS"
+	TCODE	tVelMetric,	 	"m/min"
+	TCODE	tVelImperial,	"ft/m "
+	TCODE	tGasSelect,  	"Select Gas"		; Select Gas
+	TCODE	tSelectAir,	 	"Air "     			; Air
+	TCODE	tSelectO2,	 	"O2  "				; O2
+    TCODE   tSelectNx,   	"Nx"				; Nx
+    TCODE   tSelectTx,   	"Tx"				; Tx
+    TCODE   tDepth,      	"Depth"				; Depth
+    TCODE   tMaxDepth,   	"Max. Depth"		; Max. Depth - max 10chars!
+    TCODE   tDivetime,   	"Divetime"			; Divetime
     TCODE   tDiveHudMask1,  "Sensor 1"
     TCODE   tDiveHudMask2,  "Sensor 2"
     TCODE   tDiveHudMask3,  "Sensor 3"
     TCODE   tDiveTotalAvg,  "Total Avg"
     TCODE   tDiveStopwatch, "Stopwatch"
-    TCODE   tDiveStopAvg,   "Stopped Avg"   ; 11chars max
-    TCODE   tApnoeTotal,    " Total"        ; Total (Six chars, right alligned)
-    TCODE   tApnoeMax,      "Last Descent"  ; Last descent
-    TCODE   tApnoeSurface,  "Surface Time"  ; Surface Time
-    TCODE   tDiveDecoplan,  "Decoplan"      ; Decoplan
-    TCODE   tDiveClock,     "Clock"         ; Clock
-    TCODE   tDiveEAD_END,   "EAD/END"       ; EAD/END
-    TCODE   tDiveTissues,   "Tissues"       ; Tissues
-    TCODE   tEND,           "END:"          ; END:
-    TCODE   tHe,            "He"            ; He
-    TCODE   tN2,            "N2"            ; N2
-    TCODE   tDiveBailout,   "Bailout"       ; Bailout
-    TCODE   tGFactors,      "GF Values"     ; GF Values
-    TCODE   taGFactors,     "aGF Values"    ; aGF Values
-    TCODE   tGFInfo,        "Current GF"    ; GF Info
-    TCODE   tCeiling,       "Ceiling"       ; Ceiling
-    TCODE   tDiveSafetyStop,"Stop"         ; Stop (Four chars, right alligned)
-    TCODE   tDiveFallback,  "Fallback!"     ; Fallback! (max. nine chars)
-    TCODE   tSensorCheck,   "Sensor Check"  ; Sensor Check
-    TCODE   tdil,	    "Dil:"	    ; Diluent ppO2 Warning
+    TCODE   tDiveStopAvg,   "Stopped Avg"   	; 11chars max
+    TCODE   tApnoeTotal,    " Total"        	; Total (Six chars, right alligned)
+    TCODE   tApnoeMax,      "Last Descent"  	; Last descent
+    TCODE   tApnoeSurface,  "Surface Time"  	; Surface Time
+    TCODE   tDiveDecoplan,  "Decoplan"      	; Decoplan
+    TCODE   tDiveClock,     "Clock"         	; Clock
+    TCODE   tDiveEAD_END,   "EAD/END"       	; EAD/END
+    TCODE   tDiveTissues,   "Tissues"       	; Tissues
+    TCODE   tEND,           "END:"          	; END:
+    TCODE   tHe,            "He"            	; He
+    TCODE   tN2,            "N2"            	; N2
+    TCODE   tDiveBailout,   "Bailout"       	; Bailout
+    TCODE   tGFactors,      "GF Values"     	; GF Values
+    TCODE   taGFactors,     "aGF Values"    	; aGF Values
+    TCODE   tGFInfo,        "Current GF"    	; GF Info
+    TCODE   tCeiling,       "Ceiling"       	; Ceiling
+    TCODE   tDiveSafetyStop,"Stop"          	; Stop (Four chars, right alligned)
+    TCODE   tDiveFallback,  "Fallback!"     	; Fallback! (max. nine chars)
+	TCODE	tDecoInfo,		"Deco Zone"			; Deco info
+    TCODE   tSensorCheck,   "Sensor Check"  	; Sensor Check
+    TCODE   tdil,	    	"Dil:"	    		; Diluent ppO2 Warning
+	TCODE	tmix,			"Mix:"				; Pre-Mix ppO2 Warning
+	TCODE	tSensorDisagree,"Sensors<>"			; Sensors disagree Warning		## NEW voting logic
+	TCODE	tGasNeedsWarn,	"Gas Needs"			;								## NEW bailout gas needs
+	TCODE	tGasNeedsBar,	"Gas Needs (bar)"	;								## NEW bailout gas needs
+	TCODE	tCNSsurf,		"CNS Surf."			;								## NEW CNS at end-of-dive
+	TCODE	tCNSfTTS,		"CNS fTTS"			;								## NEW CNS at end-of-dive
+	TCODE	tCNSBO,			"CNS B/O"			;								## NEW CNS at end-of-dive
+	TCODE	tCNSnow,		"CNS now"			;								## NEW CNS at end-of-dive
+	TCODE	tCNSeod,		"CNS final"			;								## NEW CNS at end-of-dive
+	TCODE	tIBCD,			"IBCD N2He"			;								## NEW IBCD
+	TCODE	tMicroBubbles,	"M.Bubbles"			;								## NEW microbubbles
+	TCODE	tCNS,			"CNS: "				;								## V2.95 optics
 
 ; Divemode menu
-    TCODE   tDivePreMenu,   "Menu?"         ; Menu?
-    TCODE   tSetHeading,    "Bearing"       ; Bearing (Max. seven chars)
+    TCODE   tDivePreMenu,   "Menu?"         	; Menu?
+    TCODE   tSetHeading,    "Bearing"       	; Bearing (Max. seven chars)
 
 ; Simulator menu
-	TCODE	tQuitSim,	 "Quit?"            ; Quit Simulation?
+	TCODE	tQuitSim,	 	"Quit?"            	; Quit Simulation?
 
 ; Logbook
-	TCODE	tCNS2,		"CNS:"
-	TCODE	tAVG,		"Avg:"
-	TCODE	tGF,		"GF:"
-	TCODE	tSAT,		"Sat:"					; Sat:
+	TCODE	tCNS2,			"CNS:"
+	TCODE	tAVG,			"Avg:"
+	TCODE	tGF,			"GF:"
+	TCODE	tSAT,			"Sat:"				; Sat:
 
 ; Logbook units
-	TCODE	tLogTunitC,	"°C"	
-	TCODE	tLogTunitF,	"°F"
-	TCODE	tKGL,		"kg/l"
-	TCODE	tMBAR,		"mbar"
+	TCODE	tLogTunitC,		"°C"	
+	TCODE	tLogTunitF,		"°F"
+	TCODE	tKGL,			"kg/l"
+	TCODE	tMBAR,			"mbar"
 
 ; Logbook menu
-	TCODE	tNextLog, 	"Next Page"
+	TCODE	tNextLog, 		"Next Page"
 
 ; Reset menu
-	TCODE	tReboot,	"Reboot"			;Reboot
-	TCODE	tResetMenu2,"Are you sure?"		;Are you sure?
-	TCODE	tAbort,     "Abort"             ;Abort
-	TCODE	tResetSettings, "Reset all" 	;Reset all
-	TCODE	tResetDeco,	"Reset Deco"		;Reset Deco
-    TCODE	tResetBattery,	"Reset Battery"		;Reset Battery
-    TCODE	tResetLogbook,	"Reset Logbook"		;Reset Logbook
+	TCODE	tReboot,		"Reboot"			; Reboot
+	TCODE	tResetMenu2,	"Are you sure?"		; Are you sure?
+	TCODE	tAbort,     	"Abort"             ; Abort
+	TCODE	tResetSettings, "Reset all" 		; Reset all
+	TCODE	tResetDeco,		"Reset Deco"		; Reset Deco
+    TCODE	tResetBattery,	"Reset Battery"		; Reset Battery
+    TCODE	tResetLogbook,	"Reset Logbook"		; Reset Logbook
 
 ; Set Time Menu/Set Date Menu
-	TCODE	tSetHours,	"Set Hours"			; Set Hours
-	TCODE	tSetMinutes,"Set Minutes"		; Set Minutes
-	TCODE	tSetSeconds,"Clear Seconds"		; Clear seconds
-	TCODE	tSetDay,	"Set Day"			; Set Day
-	TCODE	tSetMonth,	"Set Month"			; Set Month
-	TCODE	tSetYear,	"Set Year"			; Set Year
+	TCODE	tSetHours,		"Set Hours"			; Set Hours
+	TCODE	tSetMinutes,	"Set Minutes"		; Set Minutes
+	TCODE	tSetSeconds,	"Clear Seconds"		; Clear seconds
+	TCODE	tSetDay,		"Set Day"			; Set Day
+	TCODE	tSetMonth,		"Set Month"			; Set Month
+	TCODE	tSetYear,		"Set Year"			; Set Year
 
 ; Logbook Offset Menu
 	TCODE	tLogOffset,		"Logbook offset"	; Logbook offset
@@ -301,19 +344,14 @@
 	TCODE	tLogOffsetm1,	"-1"				; -1
 	TCODE	tLogOffsetm10,	"-10"				; -10
 
-; Sampling rate
-    TCODE   tSamplingrate,  "Sampling rate:"    ; Sampling rate:
-    TCODE   tSampling2s,    "2s"                ; 2s
-    TCODE   tSampling10s,   "10s"               ; 10s
-
 ; Compass directions
-    TCODE   tN,             "N "                ; N(orth),338°-22°
-    TCODE   tNE,            "NE"                ; North-East,23°-67°
-    TCODE   tE,             "E "                ; E(east),68°-112°
+    TCODE   tN,             "N "                ; N(orth),	 338°- 22°
+    TCODE   tNE,            "NE"                ; North-East, 23°- 67°
+    TCODE   tE,             "E "                ; E(east),	  68°-112°
     TCODE   tSE,            "SE"                ; South-East,113°-157°
-    TCODE   tS,             "S "                ; S(outh),158°-202°
+    TCODE   tS,             "S "                ; S(outh),	 158°-202°
     TCODE   tSW,            "SW"                ; South-West,203°-247°
-    TCODE   tW,             "W "                ; W(West),248°-292°
+    TCODE   tW,             "W "                ; W(West),	 248°-292°
     TCODE   tNW,            "NW"                ; North-West,293°-337°
 
 ; Color Scheme menu
@@ -325,6 +363,6 @@
     TCODE   tColorSetName3, "Blue"              ; Blue
     
 ; PSCR Menu and Settings
-    TCODE   tPSCRMenu,	    "PSCR Menu"		; PSCR Menu
-    TCODE   tPSCR_O2_drop,  "O2 drop:"		; O2 drop
-    TCODE   tPSCR_lungratio,"Lung ratio:"	; lung ratio
+	TCODE   tPSCRMenu,	    "pSCR Setup"		; PSCR Menu						## MODIFIED (consistient naming)
+    TCODE   tPSCR_O2_drop,  "O2 drop:"			; O2 drop
+    TCODE   tPSCR_lungratio,"Lung ratio:"		; lung ratio
--- a/src/text_french.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/text_french.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================   >> OCTC3 V1.13b > ClaudeDive update proposed. 
 ;
-;    File text_french.asm   
+;    File text_french.asm							REFACTORED VERSION V2.95   
 ;
 ;    French texts translation file. 
 ;
@@ -10,6 +10,7 @@
 ; Basic texts
 	TCODE	tNo,    	"Non"        	; No
 	TCODE	tYes,   	"Oui"         	; Yes = No + 1
+	TCODE	tblank,		" "				; (a single space character)	## NEW (layout)
 
 ; Surface-mode texts
     TCODE   tBeta,      "béta"          ; beta
@@ -50,6 +51,7 @@
     TCODE   tCalibrateMenu, "Calibration"   ; Calibration
     TCODE   tCalibrationGas, "Cal. Gas O2:"  ; Cal. Gas O2:
     TCODE   tCalibrate, "Calibrate"     ; Calibrate
+	TCODE	tBack,			 "back..."			;								## NEW 
 
 ; Gas menu
     TCODE   tGaslist,   "Liste Gaz OC"		  ; OC Gas List
@@ -83,20 +85,20 @@
     TCODE   tSP,            "SP"                ; SP (SetPoint)
     TCODE   tSPPlus,    "ppO2+"                  ; pO2+
     TCODE   tSensorFallback, "Fallback:"        ; Fallback:
+	TCODE	tCalculated,	"calculated"		; calculated
     TCODE   tppO2,      "ppO2:"                 ; ppO2:
     TCODE   tppO2O2,	"ppO2(O2)"		; ppO2(O2)
     TCODE   tppO2Dil,	"ppO2(Dil)"		; ppO2(Dil)
-
-
+	TCODE   tppO2Mix,	"ppO2(Mix)"		; ppO2(Mix)
+	
 ; New batteries menu
 	TCODE   tNewBattTitle,      "Nouvelle Batterie?"
 	TCODE	tNewBattOld,		"Conserver"
-        TCODE	tNewBattNew36,		"Réinit. 3.6V Saft"
+    TCODE	tNewBattNew36,		"Réinit. 3.6V Saft"
 	TCODE	tNewBattNew15,		"Réinit. 1.5V AA"
 	TCODE	tNewBattAccu,		"3.6V LiIon AA"
 	TCODE	tNew18650,		"Internal 18650"
 	TCODE	tNew16650,		"Internal 16650"
-
 	
 ; Gaslist management
     TCODE   tGas,       "Gaz"           ; Gas
@@ -116,16 +118,18 @@
 ; Dive Settings
     TCODE   tDvMode,    "Mode:"
     TCODE   tDvOC,      "OC"
-    TCODE   tDvCC,      "CC"
+	TCODE	tDvCCR,		"CCR"
     TCODE   tDvGauge,   "Gauge"  
     TCODE   tDvApnea,   "Apnée"
-    TCODE   tDvPSCR,	"PSCR"
-    TCODE   tDkMode,    "Modèle:"
-    TCODE   tZHL16,     "ZH-L16"
-    TCODE   tZHL16GF,   "ZH-L16+GF"
+    TCODE   tDvPSCR,	"pSCR"
+    TCODE   tDvCC,      "CC"
+    TCODE   tDkMode,    "Modèle:ZH-L16"			;								## MODIFIED (memory)
+    TCODE   tZHL16,     " "						;								## MODIFIED (memory)
+    TCODE   tZHL16GF,   "+GF"					;								## MODIFIED (memory)
     TCODE   tPPO2Max,   "ppO2 Max:"
     TCODE   tPPO2DECO,	"ppO2 Déco:"
     TCODE   tPPO2MIN,   "ppO2 Min:"
+	TCODE	tPPO2MINCC, 	"Min Loop:"			; 								## NEW ppO2 min cc
     TCODE   tLastDecostop, "Dern.Palier:"
     TCODE   tDecoparameters, "Paramètres Déco"
     TCODE   tGF_low,    "GF Bas:"
@@ -140,6 +144,20 @@
     TCODE   tDiveaGF_active,"aGF!"          ; aGF!
     TCODE   tppO2settings,"Menu ppO2"        ; ppO2 Settings (max. 18 chars)
     TCODE   tsafetystopmenu,"Palier sécurité:"   ; Safety Stop: (max. 16 chars)
+	TCODE   tGasUsage,  	"Gas Usage"         ; Gas Usage
+    TCODE   tSetBotUse, 	"Bottom Gas: "      ; Bottom Gas: (space)
+    TCODE   tSetDecoUse,	"Deco   Gas: "      ; Deco   Gas: (space)			## MODIFIED (layout)
+	TCODE	tCalcAscGas,	 "Calc.Gas (B/O):"	;								## NEW bailout gas needs
+	TCODE	tTankSizes,		 "Tank Sizes"		;								## NEW bailout gas needs
+	TCODE   tLiter,			 " l"				;								## NEW bailout gas needs 
+	TCODE	tTankFillPress,	 "Tank Press Budget";								## NEW bailout gas needs
+	TCODE	tGas1,			 "Gas 1:"			;								## NEW bailout gas needs
+	TCODE	tGas2,			 "Gas 2:"			;								## NEW bailout gas needs
+	TCODE	tGas3,			 "Gas 3:"			;								## NEW bailout gas needs
+	TCODE	tGas4,			 "Gas 4:"			;								## NEW bailout gas needs
+	TCODE	tGas5,			 "Gas 5:"			;								## NEW bailout gas needs
+	TCODE	tCCmaxFracO2,	 "Loop %O2 max.:"	;								## NEW CCR max ppO2 limiter
+	TCODE	t2ndDecoPlanMenu,"2nd Deco Plan"	;								## NEW deco engine
 
 ; Display Settings
     TCODE   tBright,    "Luminosité:"
@@ -147,9 +165,10 @@
     TCODE   tMedium,    "Moyenne"
     TCODE   tHigh,      "Haute"
     TCODE   tDvSalinity,"Salinité:"             ; Salinity
+    TCODE   tShowppO2,  "Afficher ppO2:"        ; Always show ppO2:
     TCODE   tFlip,      "Pivoter l'écran:"      ; Rotate Screen
     TCODE   tMODwarning,"Alerte MOD:"           ; MOD warning
-    TCODE   tShowppO2,  "Afficher ppO2:"        ; Always show ppO2:
+	TCODE	tIBCDwarning,	"IBCD Warning  :"	; IBCD Warning					## NEW IBCD
     TCODE   tTimeoutDive,"Dive Timeout:"	; Dive Timeout
 
 ; VSI display Settings
@@ -169,17 +188,21 @@
     TCODE   tCalY,	 "Cal Y:"		; Cal Y
     TCODE   tCalZ,	 "Cal Z:"		; Cal Z
 
-
     TCODE   tUnits,     "Unités:"
     TCODE   tMetric,     " m/°C"            ; Enum menu
     TCODE   tImperial,   "ft/°F"
 
     TCODE   tDefName,   "HW OSTC"
-	TCODE	tbar,		"bar"				; bar
 
     TCODE   tButtonleft,"Bouton gauche:"     ; Left button
     TCODE   tButtonright,"Bouton droit:"    ; Right button
 
+	TCODE	tAltMode,		"Waiting Time:"		;								## NEW no fly altitude
+	TCODE	tAltModeFly,	"Flying"			;								## NEW no fly altitude
+	TCODE	tAltMode1000,	"1000m"				;								## NEW no fly altitude
+	TCODE	tAltMode2000,	"2000m"				;								## NEW no fly altitude
+	TCODE	tAltMode3000,	"3000m"				;								## NEW no fly altitude
+	
 ; Units for all menu
     TCODE   tMeters,    "m"
 	TCODE	tFeets,		"ft"
@@ -187,7 +210,11 @@
     TCODE   tMinutes,   "'"
     TCODE   tPercent,   "%"
     TCODE   tLitersMinute, "l/min"
-
+	TCODE	tbar,		"bar"				; bar
+	TCODE	tbar10,		"0 bar"				; bar								## NEW 2.95
+	TCODE	tMeterMinute,  "m/min"			; meter per minute					## ascent speed
+	TCODE	tmin,		"min"				; minutes
+	
 ; Date
 	TCODE	tDateFormat, "Date:"
 	TCODE	tDateformat, "MMJJAA"
@@ -203,14 +230,14 @@
     TCODE   tBtTm_short,"Temps:"            ; Bot. Time: (max. 6 chars)
     TCODE   tMxDep, 	"Prof. Max:"        ; Max Depth: (10 chars)
     TCODE   tIntvl, 	"Intervalle:"       ; Interval :  (10 chars)
+	TCODE	tDecoSetup,		"Calculator Setup"	;								## NEW (layout)
     TCODE   tDeco,  	"Calcul Déco"       ; Calculate Deco
     TCODE   tDivePlan,  "Runtime:"          ; Dive Plan:
     TCODE   tNoDeco,    "No Déco"           ; No Deco
     TCODE   tMore,      "Suite..."          ; More...
-    TCODE   tGasUsage,  "Util. Gaz"         ; Gas Usage
-    TCODE   tSetBotUse, "Gaz Fond: "      ; Bottom Gas: (space)
-    TCODE   tSetDecoUse,"Gaz Déco: "        ; Deco Gas: (space)
-
+	TCODE	tSelectSetpoint,"CCR Setpoint: "	;								## NEW deco calculator enhancement
+	TCODE	tuseAGF,		"use aGF: "			;								## NEW deco calculator enhancement
+	TCODE	tCalculating,	"Calculating..."	;								## NEW deco calculator enhancement
 
 ; Information menu
     TCODE   tFirmware,  "Logiciel: "        ; Firmware: (space)
@@ -253,11 +280,24 @@
     TCODE   taGFactors,     "Valeurs aGF"   ; aGF Values
     TCODE   tGFInfo,        "   GF Info"    ; GF Info
     TCODE   tCeiling,       "Ceiling"       ; Ceiling
-    TCODE   tDiveSafetyStop,"Stop"         ; Stop (Four chars, right alligned)
+    TCODE   tDiveSafetyStop,"Stop"			; Stop (Four chars, right alligned)
     TCODE   tDiveFallback,  "Fallback!"     ; Fallback! (max. nine chars)
+	TCODE	tDecoInfo,		"Deco Zone"		; Deco info
     TCODE   tSensorCheck,   "Sensor Check"  ; Sensor Check
-    TCODE   tdil,	    "Dil:"	    ; Diluent ppO2 Warning
-
+    TCODE   tdil,	    	"Dil:"	    	; Diluent ppO2 Warning
+	TCODE	tmix,			"Mix:"			; Pre-Mix ppO2 Warning
+	TCODE	tSensorDisagree,"Sensors<>"			; Sensors disagree Warning		## NEW voting logic
+	TCODE	tGasNeedsWarn,	"Gas Needs"			;								## NEW bailout gas needs
+	TCODE	tGasNeedsBar,	"Gas Needs (bar)"	;								## NEW bailout gas needs
+	TCODE	tCNSsurf,		"CNS Surf."			;								## NEW CNS at end-of-dive
+	TCODE	tCNSfTTS,		"CNS fTTS"			;								## NEW CNS at end-of-dive
+	TCODE	tCNSBO,			"CNS B/O"			;								## NEW CNS at end-of-dive
+	TCODE	tCNSnow,		"CNS now"			;								## NEW CNS at end-of-dive
+	TCODE	tCNSeod,		"CNS final"			;								## NEW CNS at end-of-dive
+	TCODE	tIBCD,			"IBCD N2He"			;								## NEW IBCD
+	TCODE	tMicroBubbles,	"M.Bubbles"			;								## NEW microbubbles
+	TCODE	tCNS,			"CNS: "				;								## V2.95 optics
+	
 ; Divemode menu
     TCODE   tDivePreMenu,   "Menu?"         ; Menu?
     TCODE   tSetHeading,    "Cap"           ; Bearing (Max. seven chars)
@@ -304,11 +344,6 @@
 	TCODE	tLogOffsetm1,	"-1"				; -1
 	TCODE	tLogOffsetm10,	"-10"				; -10
 
-; Sampling rate
-    TCODE   tSamplingrate,  "Fréq. Mesures:"    ; Sampling rate:
-    TCODE   tSampling2s,    "2s"                ; 2s
-    TCODE   tSampling10s,   "10s"               ; 10s
-
 ; Compass directions
     TCODE   tN,             "N "                ; N(orth),338°-22°
     TCODE   tNE,            "NE"                ; North-East,23°-67°
@@ -331,5 +366,3 @@
     TCODE   tPSCRMenu,	    "PSCR Menu"		; PSCR Menu
     TCODE   tPSCR_O2_drop,  "O2 drop:"		; O2 drop
     TCODE   tPSCR_lungratio,"Lung ratio:"	; lung ratio
-
-
--- a/src/text_german.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/text_german.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;    File text_german.asm
+;    File text_german.asm							REFACTORED VERSIOn V2.95
 ;
 ;    German texts translation file.
 ;
@@ -8,85 +8,88 @@
 ;=============================================================================
 
 ; Basic texts
-	TCODE	tNo,    "Nein"              ; No
-	TCODE	tYes,   "Ja"                ; Yes = No + 1
-
+	TCODE	tNo,    			"Nein"              	; No
+	TCODE	tYes,   			"Ja"                	; Yes = No + 1
+	TCODE	tblank,				" "						; (a single space character)
+	
 ; Surface-mode texts
-    TCODE   tBeta,      "beta"          ; beta
-	TCODE	tMenu,		"<Menü"     	; <Menu
-    TCODE   tView,      "View>"         ; View>
-    TCODE   tHeading,   "Kurs:"         ; Heading:
-    TCODE   tLastDive,	"Letzter TG"	; Last Dive (Max 10 chars)
-    TCODE   tSensorMilliVolt, "CCR Sensoren mV" ; CCR Sensors mV
+    TCODE   tBeta,      		"beta"          		; beta
+	TCODE	tMenu,				"<Menü"     			; <Menu
+    TCODE   tView,      		"View>"         		; View>
+    TCODE   tHeading,   		"Kurs:"         		; Heading:
+    TCODE   tLastDive,			"Letzter TG"			; Last Dive (Max 10 chars)
+    TCODE   tSensorMilliVolt, 	"CCR Sensoren mV"		; CCR Sensors mV
 
 ; Divemode Menu
-    TCODE   tDivemenu_Gaslist,  "Gasliste"    ; Gaslist
-    TCODE   tDivemenu_ResetAvg, "Stoppuhr"    ; Reset Avg.
-    TCODE   tDivemenu_Setpoint, "Setpoint"      ; Setpoint
-    TCODE   tDivemenu_UseSensor,"Akt. Sensor"    ; Use Sensor
-    TCODE   tDivemenu_ToggleGF, "Toggle GF"     ; Toggle GF
-    TCODE   tDivemenu_Marker,   "Markierung"    ; Set Marker
-    TCODE   tDivemenu_LostGas,  "Gasverlust"    ; Lost Gas
+    TCODE   tDivemenu_Gaslist,  "Gasliste"    			; Gaslist
+    TCODE   tDivemenu_ResetAvg, "Stoppuhr"    			; Reset Avg.
+    TCODE   tDivemenu_Setpoint, "Setpoint"      		; Setpoint
+    TCODE   tDivemenu_UseSensor,"akt. Sensor"    		; Use Sensor
+    TCODE   tDivemenu_ToggleGF, "Toggle GF"     		; Toggle GF
+    TCODE   tDivemenu_Marker,   "Markierung"    		; Set Marker
+    TCODE   tDivemenu_LostGas,  "Gasverlust"    		; Lost Gas
 
 ; Main menu
-    TCODE   tNext,      "<Weiter"         ; <Next
-    TCODE   tEnter,     "Enter>"        ; Enter>
+    TCODE   tNext,      		"<Weiter"     			; <Next
+    TCODE   tEnter,     		"Enter>"        		; Enter>
 
-    TCODE   tMainMenu,  "Hauptmenü"     ; MainMenu
-    TCODE   tLogbook,   "Logbuch"       ; Logbook
-    TCODE   tGasSetup,  "OC Gas Setup"  ; OC Gas Setup
-    TCODE   tSetTime,   "Zeit stellen" ; Set Time
-	TCODE	tSetDate,	"Datum stellen"	; Set Date
-	TCODE	tSetTimeDate,"Datum & Uhrzeit"; Set Time & Date
-    TCODE   tDispSets,  "Anzeige" ; Display Settings
-    TCODE   tExit,      "Ende"          ; Exit
-	TCODE	tResetMenu, "Reset Menü"	; Reset Menu
-	TCODE	tDiveModeMenu,"Dekoberechnung"	; Deco Mode
-	TCODE	tInfoMenu,	"Informationen"	; Information
-    TCODE   tCCRSetup,  "CCR Menü"     ; CCR Setup
-    TCODE   tDiluentSetup,"Diluent Menü"   ; Diluent Setup
-    TCODE   tFixedSetpoints,"Feste Setpoints" ; Fixed Setpoints
-    TCODE   tCCRSensor, "CCR Sensor"    ; CCR Sensor
-    TCODE   tCalibrateMenu, "Kalibrierung"   ; Calibration
-    TCODE   tCalibrationGas, "Kal. Gas O2:"  ; Cal. Gas O2:
-    TCODE   tCalibrate, "Kalibrieren"     ; Calibrate
+    TCODE   tMainMenu,  		"Hauptmenü"     		; MainMenu
+    TCODE   tLogbook,   		"Logbuch"       		; Logbook
+    TCODE   tGasSetup,  		"OC Gas Setup"  		; OC Gas Setup
+    TCODE   tSetTime,   		"Zeit  stellen"			; Set Time
+	TCODE	tSetDate,			"Datum stellen"			; Set Date
+	TCODE	tSetTimeDate,		"Datum & Uhrzeit"		; Set Time & Date
+    TCODE   tDispSets,  		"Anzeige" 				; Display Settings
+    TCODE   tExit,      		"Ende"          		; Exit
+	TCODE	tResetMenu, 		"Reset Menü"			; Reset Menu
+	TCODE	tDiveModeMenu,		"Deko Einstellung"		; Deco Mode
+	TCODE	tInfoMenu,			"Informationen"			; Information
+    TCODE   tCCRSetup,  		"CCR/pSCR Menü"     	; CCR Setup
+    TCODE   tDiluentSetup,		"Diluent Menü"   		; Diluent Setup
+    TCODE   tFixedSetpoints,	"CCR Setpoints" 		; Fixed Setpoints
+    TCODE   tCCRSensor, 		"Sensor"    			; CCR/pSCR Sensor
+    TCODE   tCalibrateMenu, 	"Kalibrierung"   		; Calibration
+    TCODE   tCalibrationGas, 	"Kal. Gas O2:"  		; Cal. Gas O2:
+    TCODE   tCalibrate, 		"Kalibrieren"     		; Calibrate
+	TCODE	tBack,			 	"zurück..."
 
 ; Gas menu
-    TCODE   tGaslist,   "OC Gas Liste"
-    TCODE   tGaslistCC, "CC Gas Liste"  ; CC Diluents
-    TCODE   tGasEdit,   "Gas einstellen"
-    TCODE   tType,      "Type: "
-    TCODE   tGasDisabled,"Deaktiviert"  ; Disabled
-    TCODE   tGasFirst,   "Start"        ; First
-    TCODE   tGasTravel,  "Reise"        ; Travel
-    TCODE   tGasDeco,    "Deko"         ; Deco
-    TCODE   tDilDisabled,"Deaktiviert"  ; Disabled
-    TCODE   tDilFirst,   "Start"        ; First
-    TCODE   tDilNorm,   "Normal"        ; Normal
-    TCODE   tAir,       "Luft "         ; Enum: values must follows (5 chars)
-    TCODE   tO2,        "O2   "         ; tAir + 5
-    TCODE   tO2Plus,    "O2 +"
-    TCODE   tO2Minus,   "O2 -"
-    TCODE   tHePlus,    "He +"
-    TCODE   tHeMinus,   "He -"
-    TCODE   tMOD,       "MOD:"
-    TCODE   tEAD,       "EAD:"
-    TCODE   tGasDepth,  "Wechseltiefe"
-    TCODE   tDepthPlus, "Tiefe +"
-    TCODE   tDepthMinus,"Tiefe -"
-    TCODE   tDepthReset,"Reset auf MOD:"
-    TCODE   tSetup_mix, "Mix Einstellen"
-    TCODE   tCCRMode,   "CCR Modus:"             ; CCR Mode:
-    TCODE   tCCRModeFixedSP,  "Fester SP"        ; Fixed SP
-    TCODE   tCCRModeSensor,   "Sensor"          ; Sensor
-    TCODE   tCCRModeAutoSP,   "Auto SP"         ; Auto SP
-    TCODE   tSP,            "SP"                ; SP (SetPoint)
-    TCODE   tSPPlus,    "ppO2+"                  ; pO2+
-    TCODE   tSensorFallback, "Fallback:"        ; Fallback:
-    TCODE   tppO2,      "ppO2:"                 ; ppO2:
-    TCODE   tppO2O2,	"ppO2(O2)"		; ppO2(O2)
-    TCODE   tppO2Dil,	"ppO2(Dil)"		; ppO2(Dil)
-
+    TCODE   tGaslist,   		"OC Gas Liste"
+    TCODE   tGaslistCC, 		"CC Gas Liste"  		; CC Diluents
+    TCODE   tGasEdit,   		"Gas einstellen"
+    TCODE   tType,      		"Type: "
+    TCODE   tGasDisabled,		"Deaktiviert"  			; Disabled
+    TCODE   tGasFirst,   		"Start"        			; First
+    TCODE   tGasTravel,  		"Reise"        			; Travel
+    TCODE   tGasDeco,    		"Deko"         			; Deco
+    TCODE   tDilDisabled,		"Deaktiviert"  			; Disabled
+    TCODE   tDilFirst,   		"Start"        			; First
+    TCODE   tDilNorm,   		"Normal"        		; Normal
+    TCODE   tAir,       		"Luft "         		; Enum: values must follows (5 chars)
+    TCODE   tO2,        		"O2   "         		; tAir + 5
+    TCODE   tO2Plus,    		"O2 +"
+    TCODE   tO2Minus,   		"O2 -"
+    TCODE   tHePlus,    		"He +"
+    TCODE   tHeMinus,   		"He -"
+    TCODE   tMOD,       		"MOD:"
+    TCODE   tEAD,       		"EAD:"
+    TCODE   tGasDepth,  		"Wechseltiefe"
+    TCODE   tDepthPlus, 		"Tiefe +"
+    TCODE   tDepthMinus,		"Tiefe -"
+    TCODE   tDepthReset,		"Reset auf MOD:"
+    TCODE   tSetup_mix, 		"Mix Einstellen"
+    TCODE   tCCRMode,   		"Modus:"             	; Mode:
+    TCODE   tCCRModeFixedSP,  	"fixeSP/Berech."   		; Fixed SP
+    TCODE   tCCRModeSensor,   	"Sensor"          		; Sensor
+    TCODE   tCCRModeAutoSP,   	"Auto SP"         		; Auto SP
+    TCODE   tSP,            	"SP"                	; SP (SetPoint)
+    TCODE   tSPPlus,    		"ppO2+"                 ; pO2+
+    TCODE   tSensorFallback, 	"Fallback:"        		; Fallback:
+	TCODE	tCalculated,		"berechnet"				; calculated
+    TCODE   tppO2,      		"ppO2:"                 ; ppO2:
+    TCODE   tppO2O2,			"ppO2(O2)"				; ppO2(O2)
+    TCODE   tppO2Dil,			"ppO2(Dil)"				; ppO2(Dil)
+	TCODE   tppO2Mix,			"ppO2(Mix)"				; ppO2(Mix)
 
 ; New batteries menu
 	TCODE   tNewBattTitle,      "Neue Batterie?"
@@ -94,238 +97,272 @@
 	TCODE	tNewBattNew36,		"Neue 3,6V Saft"
 	TCODE	tNewBattNew15,		"Neue 1,5V AA"
 	TCODE	tNewBattAccu,		"3,6V AA Akku"
- 	TCODE	tNew18650,		"Interne 18650"
-	TCODE	tNew16650,		"Interne 16650"
+ 	TCODE	tNew18650,			"Interne 18650"
+	TCODE	tNew16650,			"Interne 16650"
 
 ; Gaslist management
-    TCODE   tGas,       "Gas"           ; Gas
-    TCODE   tGasErr,    "Err"           ; Err  (3 chars)
+    TCODE   tGas,       		"Gas"           		; Gas
+    TCODE   tGasErr,    		"Err"           		; Err  (3 chars)
 
 ; Communication Menu
-	TCODE	tUsbTitle,	"USB Modus"
-    TCODE   tBleTitle,  "Bluetooth Modus"
-	TCODE	tUsbStarting,  "Starte....."
-	TCODE	tUsbStartDone, "Fertig."
-	TCODE	tUsbServiceMode, "Servicemodus aktiv"
-	TCODE	tUsbClosed,		"Abgebrochen"
-	TCODE	tUsbExit,		"Beendet"
-	TCODE	tUsbDownloadMode, "Downloadmodus aktiv"
-    TCODE   tUsbLlBld,      "Low-Level Bootloader"
+	TCODE	tUsbTitle,			"USB Modus"
+    TCODE   tBleTitle,  		"Bluetooth Modus"
+	TCODE	tUsbStarting,  		"Starte....."
+	TCODE	tUsbStartDone, 		"Fertig."
+	TCODE	tUsbServiceMode, 	"Servicemodus aktiv"
+	TCODE	tUsbClosed,			"Abgebrochen"
+	TCODE	tUsbExit,			"Beendet"
+	TCODE	tUsbDownloadMode, 	"Downloadmodus aktiv"
+    TCODE   tUsbLlBld,      	"Low-Level Bootloader"
 
 ; Dive Settings
-    TCODE   tDvMode,    "Betrieb:"
-    TCODE   tDvOC,      "OC"
-    TCODE   tDvCC,      "CC"
-    TCODE   tDvGauge,   "Gauge"
-    TCODE   tDvApnea,   "Apnoe"
-    TCODE   tDvPSCR,	"PSCR"
-    TCODE   tDkMode,    "Dekotyp:"
-    TCODE   tZHL16,     "ZH-L16"
-    TCODE   tZHL16GF,   "ZH-L16+GF"
-    TCODE   tPPO2Max,   "ppO2 Max:"
-    TCODE   tPPO2DECO,	"ppO2 Deko:"
-    TCODE   tPPO2MIN,   "ppO2 Min:"
-    TCODE   tLastDecostop, "Letzt. Stop:"
-    TCODE   tDecoparameters, "Deko Parameter"
-    TCODE   tGF_low,    "GF low:"
-    TCODE   tGF_high,   "GF high:"
-    TCODE   tSaturationMult,    "Sättigung:"
+    TCODE   tDvMode,    		"Betrieb:"
+    TCODE   tDvOC,      		"OC"
+	TCODE	tDvCCR,				"CCR"
+    TCODE   tDvGauge,   		"Gauge"
+    TCODE   tDvApnea,   		"Apnoe"
+    TCODE   tDvPSCR,			"pSCR"
+    TCODE   tDvCC,      		"CC"
+    TCODE   tDkMode,    		"Decotype:ZH-L16"		;								## MODIFIED (memory needs)
+    TCODE   tZHL16,     		" "						; keep order, enum from here...	## MODIFIED (memory needs)
+    TCODE   tZHL16GF,   		"+GF"					; ...up to here!				## MODIFIED (memory needs)
+    TCODE   tPPO2Max,   		"Max.     :"
+    TCODE   tPPO2DECO,			"Max. Deko:"
+    TCODE   tPPO2MIN,   		"Min.     :"
+	TCODE	tPPO2MINCC, 		"Min. Loop:"
+	TCODE   tLastDecostop, 		"Letzt.Stop:"
+    TCODE   tDecoparameters, 	"Deko Parameter"
+    TCODE   tGF_low,    		"GF low :"
+    TCODE   tGF_high,   		"GF high:"
+    TCODE   tSaturationMult,    "Sättigung   :"
     TCODE   tDesaturationMult,  "Entsättigung:"
-    TCODE   tFTTSMenu,  "Future TTS:"            ; Future TTS
-    TCODE   taGFMenu,   "Alternativ-GF"         ; Alternative GF
-    TCODE   taGF_low,   "aGF low:"               ; aGF low
-    TCODE   taGF_high,  "aGF high:"              ; aGF high
-    TCODE   taGF_enable,"aGF wählbar:"        ; aGF Selectable
-    TCODE   tDiveaGF_active,"aGF aktiv"      ; aGF Active
-    TCODE   tppO2settings,"ppO2 Parameter"   ; ppO2 Settings
-    TCODE   tsafetystopmenu,"Sicherheitsstop:"       ; Safety Stop:
-
+    TCODE   tFTTSMenu,  		"fTTS/Verz.:"	        ; Future TTS
+    TCODE   taGFMenu,   		"Alternativ-GF"         ; Alternative GF
+    TCODE   taGF_low,   		"aGF low :"             ; aGF low
+    TCODE   taGF_high,  		"aGF high:"             ; aGF high
+    TCODE   taGF_enable,		"aGF wählbar:"        	; aGF Selectable
+    TCODE   tDiveaGF_active,	"aGF aktiv"      		; aGF Active
+    TCODE   tppO2settings,		"ppO2 Parameter"   		; ppO2 Settings
+    TCODE   tsafetystopmenu,	"Sicherheitsstop:"      ; Safety Stop:
+	TCODE   tGasUsage,  		"Gas Usage"         	; Gas Usage
+    TCODE   tSetBotUse, 		"Reise Gas: "      		; Bottom Gas: (space)
+    TCODE   tSetDecoUse,		"Deko  Gas: "      		; Deco   Gas: (space)
+	TCODE	tCalcAscGas,	 	"Gasmenge(B/O):"
+	TCODE	tTankSizes,		 	"Tank Größen"
+	TCODE   tLiter,			 	" l"
+	TCODE	tTankFillPress,	 	"Tank Nutzmenge"
+	TCODE	tGas1,			 	"Gas 1:"
+	TCODE	tGas2,				"Gas 2:"
+	TCODE	tGas3,			 	"Gas 3:"
+	TCODE	tGas4,			 	"Gas 4:"
+	TCODE	tGas5,				"Gas 5:"
+	TCODE	tCCmaxFracO2,		"Loop %O2 max.:"
+	TCODE	t2ndDecoPlanMenu,	"2.Deko Plan"
+	
 ; Display Settings
-    TCODE   tBright,    "Helligkeit:"
-    TCODE   tEco,       "Eco"
-    TCODE   tMedium,    "Mittel"
-    TCODE   tHigh,      "Hoch"
-    TCODE   tDvSalinity,"Salinität:"             ; Salinity
-    TCODE   tFlip,      "Anzeige drehen:"        ; Rotate Screen
-    TCODE   tMODwarning,"MOD Warnung:"           ; MOD warning
-    TCODE   tShowppO2,  "ppO2 Dauerhaft:"        ; Always show ppO2:
-    TCODE   tTimeoutDive,"TG-Ende nach:"	; Dive Timeout
+    TCODE   tBright,    		"Helligkeit:"
+    TCODE   tEco,       		"Eco"
+    TCODE   tMedium,    		"Mittel"
+    TCODE   tHigh,      		"Hoch"
+    TCODE   tDvSalinity,		"Salinität: "			; Salinity
+	TCODE   tShowppO2,  		"ständig zeigen:"		; Always show ppO2:
+    TCODE   tFlip,      		"Anzeige drehen:"		; Rotate Screen
+    TCODE   tMODwarning,		"MOD  Warnung:"			; MOD warning
+	TCODE	tIBCDwarning,		"IBCD Warnung:"			; IBCD Warning	
+    TCODE   tTimeoutDive,		"TG-Ende nach:"			; Dive Timeout
 
 ; VSI display Settings
-    TCODE   tVSItext2,  "Variable Geschw.:"     ; Variable speed:
-    TCODE   tVSIgraph,  "Geschw. Grafik:"        ; Speed graph:
+    TCODE   tVSItext2,  		"Variable Geschw.:"     ; Variable speed:
+    TCODE   tVSIgraph,  		"Geschw.  Grafik :"		; Speed graph:
 
 ; Setup Menu
-    TCODE   tSystSets,  "Konfiguration"
-    TCODE   tLanguage,  "Sprache:"
-    TCODE   tEnglish,   "Englisch"
-    TCODE   tGerman,    "Deutsch"
-    TCODE   tFrench,    "Französisch"
-    TCODE   tItalian,   "Italienisch"
-    TCODE   tCompassMenu,"Kompass-Kalibrierung"  ; Compass calibration
-    TCODE   tCompassGain,"Empfindlichkeit:"      ; Compass gain:
-    TCODE   tCalX,	 "Kal. X:"		; Cal X
-    TCODE   tCalY,	 "Kal. Y:"		; Cal Y
-    TCODE   tCalZ,	 "Kal. Z:"		; Cal Z
+    TCODE   tSystSets,  		"Konfiguration"
+    TCODE   tLanguage,  		"Sprache:"
+    TCODE   tEnglish,   		"Englisch"
+    TCODE   tGerman,    		"Deutsch"
+    TCODE   tFrench,    		"Französisch"
+    TCODE   tItalian,   		"Italienisch"
+    TCODE   tCompassMenu,		"Kompass-Kalibrierung"  ; Compass calibration
+    TCODE   tCompassGain,		"Empfindlichkeit:"      ; Compass gain:
+    TCODE   tCalX,	 			"Kal. X:"				; Cal X
+    TCODE   tCalY,	 			"Kal. Y:"				; Cal Y
+    TCODE   tCalZ,	 			"Kal. Z:"				; Cal Z
 
+    TCODE   tUnits,     		"Einheiten:"
+    TCODE   tMetric,     		" m/°C"            		; Enum menu
+    TCODE   tImperial,   		"ft/°F"
+
+    TCODE   tDefName,   		"HW OSTC"
 
-    TCODE   tUnits,     "Einheiten:"
-    TCODE   tMetric,     " m/°C"            ; Enum menu
-    TCODE   tImperial,   "ft/°F"
-
-    TCODE   tDefName,   "HW OSTC"
-	TCODE	tbar,		"bar"				; bar
+    TCODE   tButtonleft,		"Taster links :"      	; Left button
+    TCODE   tButtonright,		"Taster rechts:"    	; Right button
 
-    TCODE   tButtonleft,"Taster links:"      ; Left button
-    TCODE   tButtonright,"Taster rechts:"    ; Right button
-
+	TCODE	tAltMode,			"Wartezeit:"
+	TCODE	tAltModeFly,		"Fliegen"
+	TCODE	tAltMode1000,		"1000m"
+	TCODE	tAltMode2000,		"2000m"
+	TCODE	tAltMode3000,		"3000m"
+	
 ; Units for all menu
-    TCODE   tMeters,    "m"
-	TCODE	tFeets,		"ft"
-	TCODE	tFeets1,	"f"
-    TCODE   tMinutes,   "'"
-    TCODE   tPercent,   "%"
-    TCODE   tLitersMinute, "l/min"
+    TCODE   tMeters,    		"m"
+	TCODE	tFeets,				"ft"
+	TCODE	tFeets1,			"f"
+    TCODE   tMinutes,  			"'"
+    TCODE   tPercent,   		"%"
+    TCODE   tLitersMinute, 		"l/min"
+	TCODE	tbar,				" bar"					; bar
+	TCODE	tbar10,				"0 bar"					; bar							## NEW 2.95
+	TCODE	tMeterMinute,		"m/min"					; meter per minute				## ascent speed
+	TCODE	tmin,				"min"					; minutes
 
 ; Date
-	TCODE	tDateFormat, "Datum:"
-	TCODE	tDateformat, "MMTTJJ"
-	TCODE	tDateformat1,"TTMMJJ"
-	TCODE	tDateformat2,"JJMMTT"
+	TCODE	tDateFormat, 		"Datum:"
+	TCODE	tDateformat, 		"MMTTJJ"
+	TCODE	tDateformat1,		"TTMMJJ"
+	TCODE	tDateformat2,		"JJMMTT"
 
 ; Simulator menu
-    TCODE   tInter, 	"Start Simulator"  ; Start Simulator
-    TCODE   tPlan,  	"Simulator"        ; Simulator
+    TCODE   tInter, 			"Start Simulator"  		; Start Simulator
+    TCODE   tPlan,  			"Simulator"        		; Simulator
 
 ; Decoplanner submenu
-    TCODE   tBtTm,  	"Grundzeit:"        ; Bot. Time: (10 chars)
-    TCODE   tBtTm_short,"Zeit:"             ; Bot. Time: (max. 6 chars)
-    TCODE   tMxDep, 	"Max.Tiefe:"        ; Max Depth: (10 chars)
-    TCODE   tIntvl, 	"Intervall:"        ; Interval : (10 chars)
-    TCODE   tDeco,  	"Deko berechnen"    ; Calculate Deco
-    TCODE   tDivePlan,  "Tauchplan:"        ; Dive Plan:
-    TCODE   tNoDeco,    "Keine Deko"        ; No Deco
-    TCODE   tMore,      "Mehr..."           ; More...
-    TCODE   tGasUsage,  "Verbrauch"         ; Gas Usage
-    TCODE   tSetBotUse, "Reise Gas: "       ; Bottom Gas: (space)
-    TCODE   tSetDecoUse,"Deko Gas: "        ; Deco Gas: (space)
+    TCODE   tBtTm,  			"Grundzeit:"        	; Bot. Time: (10 chars)
+    TCODE   tBtTm_short,		"Zeit:"             	; Bot. Time: (max. 6 chars)
+    TCODE   tMxDep, 			"Tiefe    :"        	; Max Depth: (10 chars)
+    TCODE   tIntvl, 			"Intervall:"        	; Interval : (10 chars)
+	TCODE	tDecoSetup, 		"Deko Parameter"
+    TCODE   tDeco,  			"Deko Berechnung"    	; Calculate Deco
+    TCODE   tDivePlan,  		"Tauchplan:"        	; Dive Plan:
+    TCODE   tNoDeco,    		"Keine Deko"        	; No Deco
+    TCODE   tMore,      		"Mehr..."           	; More...
+	TCODE	tSelectSetpoint,	"CCR Setpoint: "
+	TCODE	tuseAGF,		"Benutze aGF : "
+	TCODE	tCalculating,		"Berechnung läuft..."
 
 ; Information menu
-    TCODE   tFirmware,  "Firmware: "        ; Firmware: (space)
-    TCODE   tSerial,    "Seriennr.: "        ; Serial  : (space)
-	TCODE	tTotalDives,"Anzahl TG: "		; Total Dives:
-    TCODE   tBatteryV,  "Batterie: "        ; Battery:
-    TCODE   tUptime,	"Uptime: "	    ; Uptime: 
+    TCODE   tFirmware,  		"Firmware: "        	; Firmware: (space)
+    TCODE   tSerial,    		"Seriennr: "        	; Serial  : (space)	## MODIFIED	## info - removed dot
+	TCODE	tTotalDives,		"Anzahl TG: "			; Total Dives:
+    TCODE   tBatteryV,  		"Batterie: "        	; Battery:
+    TCODE   tUptime,			"Laufzeit: "	    	; Uptime: 
 
 ; Divemode screen
-    TCODE   tNDL,       " NZ"
-    TCODE   tTTS,   	"TTS"
-	TCODE	tVelMetric,	 "m/min"
-	TCODE	tVelImperial,"ft/m "
-	TCODE	tGasSelect,  "Wähle Gas"       ; Select Gas
-	TCODE	tSelectAir,	 "Air "     		; Air
-	TCODE	tSelectO2,	 "O2  "             ; O2
-    TCODE   tSelectNx,   "Nx"               ; Nx
-    TCODE   tSelectTx,   "Tx"               ; Tx
-    TCODE   tDepth,      "Tiefe"            ; Depth
-    TCODE   tMaxDepth,   "Max. Tiefe"       ; Max. Depth - max 10chars!
-    TCODE   tDivetime,   "    Zeit"         ; Divetime
-    TCODE   tDiveHudMask1,  "Sensor 1"
-    TCODE   tDiveHudMask2,  "Sensor 2"
-    TCODE   tDiveHudMask3,  "Sensor 3"
-    TCODE   tDiveTotalAvg,  "Durchschn.1"   
-    TCODE   tDiveStopwatch, "Stoppuhr"
-    TCODE   tDiveStopAvg,   "Durchschn.2"   ; 11chars max
-    TCODE   tApnoeTotal,    " Total"        ; Total (Six chars, right alligned)
-    TCODE   tApnoeMax,      "  Letzter TG"  ; Last descend
-    TCODE   tApnoeSurface,  "Oberflächenzeit"  ; Surface Time
-    TCODE   tDiveDecoplan,  "Dekoplan"      ; Decoplan
-    TCODE   tDiveClock,     "Uhr"           ; Clock
-    TCODE   tDiveEAD_END,   "EAD/END"       ; EAD/END
-    TCODE   tDiveTissues,   "Gewebe"        ; Tissues
-    TCODE   tEND,           "END:"          ; END:
-    TCODE   tHe,            "He"            ; He
-    TCODE   tN2,            "N2"            ; N2
-    TCODE   tDiveBailout,   "Bailout"       ; Bailout
-    TCODE   tGFactors,      "GF Values"     ; GF Values
-    TCODE   taGFactors,     "aGF Values"    ; aGF Values
-    TCODE   tGFInfo,        "GF Info"       ; GF Info
-    TCODE   tCeiling,       "Ceiling"       ; Ceiling
-    TCODE   tDiveSafetyStop,"Stop"         ; Stop (Four chars, right alligned)
-    TCODE   tDiveFallback,  "Fallback!"     ; Fallback! (max. nine chars)
-    TCODE   tSensorCheck,   "Sensor Test"   ; Sensor Check
-    TCODE   tdil,	    "Dil:"	    ; Diluent ppO2 Warning
-
+    TCODE   tNDL,       		" NZ"
+    TCODE   tTTS,   			"TTS"
+	TCODE	tVelMetric,	 		"m/min"
+	TCODE	tVelImperial,		"ft/m "
+	TCODE	tGasSelect,  		"Wähle Gas"       		; Select Gas
+	TCODE	tSelectAir,	 		"Air "     				; Air
+	TCODE	tSelectO2,	 		"O2  "             		; O2
+    TCODE   tSelectNx,   		"Nx"               		; Nx
+    TCODE   tSelectTx,   		"Tx"               		; Tx
+    TCODE   tDepth,      		"Tiefe"            		; Depth
+    TCODE   tMaxDepth,   		"Max. Tiefe"       		; Max. Depth - max 10chars!
+    TCODE   tDivetime,   		"    Zeit"         	; Divetime
+    TCODE   tDiveHudMask1,  	"Sensor 1"
+    TCODE   tDiveHudMask2,  	"Sensor 2"
+    TCODE   tDiveHudMask3,  	"Sensor 3"
+    TCODE   tDiveTotalAvg,  	"Durchschn.1"   
+    TCODE   tDiveStopwatch, 	"Stoppuhr"
+    TCODE   tDiveStopAvg,   	"Durchschn.2"   		; 11chars max
+    TCODE   tApnoeTotal,    	" Total"        		; Total (Six chars, right alligned)
+    TCODE   tApnoeMax,      	"  Letzter TG"  		; Last descend
+    TCODE   tApnoeSurface,  	"Oberflächenzeit"  		; Surface Time
+    TCODE   tDiveDecoplan,  	"Dekoplan"      		; Decoplan
+    TCODE   tDiveClock,     	"Uhr"           		; Clock
+    TCODE   tDiveEAD_END,   	"EAD/END"       		; EAD/END
+    TCODE   tDiveTissues,   	"Gewebe"        		; Tissues
+    TCODE   tEND,           	"END:"          		; END:
+    TCODE   tHe,            	"He"            		; He
+    TCODE   tN2,            	"N2"            		; N2
+    TCODE   tDiveBailout,   	"Bailout"       		; Bailout
+    TCODE   tGFactors,      	"GF Werte"     			; GF Values
+    TCODE   taGFactors,     	"aGF Werte"    			; aGF Values
+    TCODE   tGFInfo,        	"GF jetzt"       		; GF Info
+    TCODE   tCeiling,       	"Ceiling"       		; Ceiling
+    TCODE   tDiveSafetyStop,	"Stop"         			; Stop (Four chars, right alligned)
+    TCODE   tDiveFallback,  	"Fallback!"     		; Fallback! (max. nine chars)
+	TCODE	tDecoInfo,			"Deko Zone"				; Deco info
+    TCODE   tSensorCheck,   	"Sensor Test"   		; Sensor Check
+    TCODE   tdil,	    		"Dil:"	    			; Diluent ppO2 Warning
+	TCODE	tmix,				"Mix:"					; Pre-Mix ppO2 Warning
+	TCODE	tSensorDisagree,	"Sensoren!"				; Sensors disagree Warning
+	TCODE	tGasNeedsWarn,		"Gasbedarf"
+	TCODE	tGasNeedsBar,		"Gas Bedarf (bar)"
+	TCODE	tCNSsurf,			"ZNS Oberfl."
+	TCODE	tCNSfTTS,			"ZNS fTTS"
+	TCODE	tCNSBO,				"ZNS B/O"
+	TCODE	tCNSnow,			"ZNS jetzt"
+	TCODE	tCNSeod,			"ZNS Ende"
+	TCODE	tIBCD,				"IBCD N2He"
+	TCODE	tMicroBubbles,		"M.Blasen"
+	TCODE	tCNS,				"CNS: "
+	
 ; Divemode menu
-    TCODE   tDivePreMenu,   "Menü?"         ; Menu?
-    TCODE   tSetHeading,    "Peilung"       ; Bearing (Max. seven chars)
+    TCODE   tDivePreMenu,   	"Menü?"         		; Menu?
+    TCODE   tSetHeading,    	"Peilung"       		; Bearing (Max. seven chars)
 
 ; Simulator menu
-	TCODE	tQuitSim,	 "Ende?"            ; Quit Simulation?
+	TCODE	tQuitSim,	 		"Ende?"            		; Quit Simulation?
 
 ; Logbook
-	TCODE	tCNS2,		"ZNS:"
-	TCODE	tAVG,		"Mit:"
-	TCODE	tGF,		"GF:"
-	TCODE	tSAT,		"Sät:"					; Sat:
+	TCODE	tCNS2,				"ZNS:"
+	TCODE	tAVG,				"Mit:"
+	TCODE	tGF,				"GF:"
+	TCODE	tSAT,				"Sät:"					; Sat:
 
 ; Logbook units
-	TCODE	tLogTunitC,	"°C"	
-	TCODE	tLogTunitF,	"°F"
-	TCODE	tKGL,		"kg/l"
-	TCODE	tMBAR,		"mbar"
+	TCODE	tLogTunitC,			"°C"	
+	TCODE	tLogTunitF,			"°F"
+	TCODE	tKGL,				"kg/l"
+	TCODE	tMBAR,				"mbar"
 
 ; Logbook menu
-	TCODE	tNextLog, 	"Nächste Seite"
+	TCODE	tNextLog, 			"Nächste Seite"
 
 ; Reset menu
-	TCODE	tReboot,	"Neu starten"			;Reboot
-	TCODE	tResetMenu2,"Sind Sie sicher?"		;Are you sure?
-	TCODE	tAbort,     "Abbrechen"             ;Abort
-	TCODE	tResetSettings, "Alles zurücksetzen";Reset all
-	TCODE	tResetDeco,	"Deko zurücksetzen"		;Reset Deco
-    TCODE	tResetBattery,	"Batterie zurücksetzen"		;Reset Battery
-    TCODE	tResetLogbook,	"Logbuch zurücksetzen"		;Reset Logbook
+	TCODE	tReboot,			"Neu starten"			;Reboot
+	TCODE	tResetMenu2,		"Sind Sie sicher?"		;Are you sure?
+	TCODE	tAbort,     		"Abbrechen"             ;Abort
+	TCODE	tResetSettings, 	"Alles zurücksetzen"	;Reset all
+	TCODE	tResetDeco,			"Deko  zurücksetzen"	;Reset Deco
+    TCODE	tResetBattery,		"neue Batterie"			;Reset Battery
+    TCODE	tResetLogbook,		"Logbuch löschen"		;Reset Logbook
 
 ; Set Time Menu/Set Date Menu
-	TCODE	tSetHours,	"Stunden einst."	; Set Hours
-	TCODE	tSetMinutes,"Minuten einst."	; Set Minutes
-	TCODE	tSetSeconds,"Sekunden zurücks."	; Clear seconds
-	TCODE	tSetDay,	"Setze Tag"			; Set Day
-	TCODE	tSetMonth,	"Setze Monat"		; Set Month
-	TCODE	tSetYear,	"Setze Jahr"		; Set Year
+	TCODE	tSetHours,			"Stunden einst."		; Set Hours
+	TCODE	tSetMinutes,		"Minuten einst."		; Set Minutes
+	TCODE	tSetSeconds,		"Sekunden zurücks."		; Clear seconds
+	TCODE	tSetDay,			"Setze Tag"				; Set Day
+	TCODE	tSetMonth,			"Setze Monat"			; Set Month
+	TCODE	tSetYear,			"Setze Jahr"			; Set Year
 
 ; Logbook Offset Menu
-	TCODE	tLogOffset,	"Logbuch-Offset"	; Logbook offset
-	TCODE	tLogOffsetp1,	"+1"				; +1
-	TCODE	tLogOffsetp10,	"+10"				; +10
-	TCODE	tLogOffsetm1,	"-1"				; -1
-	TCODE	tLogOffsetm10,	"-10"				; -10
-
-; Sampling rate
-    TCODE   tSamplingrate,  "Abtastrate:"       ; Sampling rate:
-    TCODE   tSampling2s,    "2s"                ; 2s
-    TCODE   tSampling10s,   "10s"               ; 10s
+	TCODE	tLogOffset,			"Logbuch-Offset"		; Logbook offset
+	TCODE	tLogOffsetp1,		"+1"					; +1
+	TCODE	tLogOffsetp10,		"+10"					; +10
+	TCODE	tLogOffsetm1,		"-1"					; -1
+	TCODE	tLogOffsetm10,		"-10"					; -10
 
 ; Compass directions
-    TCODE   tN,             "N "                ; N(orth),338°-22°
-    TCODE   tNE,            "NO"                ; North-East,23°-67°
-    TCODE   tE,             "O "                ; E(east),68°-112°
-    TCODE   tSE,            "SO"                ; South-East,113°-157°
-    TCODE   tS,             "S "                ; S(outh),157°-202°
-    TCODE   tSW,            "SW"                ; South-West,203°-247°
-    TCODE   tW,             "W "                ; W(West),248°-292°
-    TCODE   tNW,            "NW"                ; North-West,293°-337°
+    TCODE   tN,             	"N "                	; N(orth),338°-22°
+    TCODE   tNE,            	"NO"               		; North-East,23°-67°
+    TCODE   tE,             	"O "                	; E(east),68°-112°
+    TCODE   tSE,            	"SO"                	; South-East,113°-157°
+    TCODE   tS,             	"S "                	; S(outh),157°-202°
+    TCODE   tSW,            	"SW"                	; South-West,203°-247°
+    TCODE   tW,             	"W "                	; W(West),248°-292°
+    TCODE   tNW,            	"NW"                	; North-West,293°-337°
 
 ; Color Scheme menu
-    TCODE   tColorScheme,   "Farbschema"        ; Colour Scheme
-    TCODE   tColorSetDive,  "Tauchmodus:"       ; Divemode:
-    TCODE   tColorSetName0, "Standard"          ; Standard
-    TCODE   tColorSetName1, "Rot"               ; Red
-    TCODE   tColorSetName2, "Grün"              ; Green
-    TCODE   tColorSetName3, "Blau"              ; Blue
+    TCODE   tColorScheme,   	"Farbschema"        	; Colour Scheme
+    TCODE   tColorSetDive,  	"Tauchmodus:"       	; Divemode:
+    TCODE   tColorSetName0, 	"Standard"         		; Standard
+    TCODE   tColorSetName1, 	"Rot"               	; Red
+    TCODE   tColorSetName2, 	"Grün"              	; Green
+    TCODE   tColorSetName3, 	"Blau"              	; Blue
     
-    ; PSCR Menu and Settings
-    TCODE   tPSCRMenu,	    "PSCR Menü"		; PSCR Menu
-    TCODE   tPSCR_O2_drop,  "O2 drop:"		; O2 drop
-    TCODE   tPSCR_lungratio,"Lung ratio:"	; lung ratio
+; PSCR Menu and Settings
+    TCODE   tPSCRMenu,	    	"pSCR Menü"				; PSCR Menu
+    TCODE   tPSCR_O2_drop,  	"O2 Abfall     :"		; O2 drop
+    TCODE   tPSCR_lungratio,	"Lungenverhält.:"		; lung ratio
--- a/src/text_italian.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/text_italian.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;    File text_italian.asm
+;    File text_italian.asm							REFACTORED VERSION V2.95
 ;
 ;    Italian texts translation file.
 ;
@@ -10,6 +10,7 @@
 ; Basic texts
 	TCODE	tNo,        "No"            ; No
 	TCODE	tYes,       "Si"            ; Yes = No + 1
+	TCODE	tblank,			" "					; (a single space character)	## NEW (layout)
 
 ; Surface-mode texts
     TCODE   tBeta,      "beta"         	; beta
@@ -23,7 +24,7 @@
     TCODE   tDivemenu_Gaslist,  "Lista Gas"       ; Gaslist
     TCODE   tDivemenu_ResetAvg, "Azzera Media"  ; Reset Avg.
     TCODE   tDivemenu_Setpoint, "Setpoint"      ; Setpoint
-    TCODE   tDivemenu_UseSensor,"Usa Sensori"    ; Use Sensor
+    TCODE   tDivemenu_UseSensor,"usa Sensori"    ; Use Sensor
     TCODE   tDivemenu_ToggleGF, "Alterna GF"     ; Toggle GF
     TCODE   tDivemenu_Marker,   "Set Marker"    ; Set Marker
     TCODE   tDivemenu_LostGas,  "Gas perduto"    ; Lost Gas
@@ -50,6 +51,7 @@
     TCODE   tCalibrateMenu, "Calibration"   ; Calibration
     TCODE   tCalibrationGas, "Cal. Gas O2:"  ; Cal. Gas O2:
     TCODE   tCalibrate, "Calibrate"     ; Calibrate
+	TCODE	tBack,			 "back..."			;								## NEW 
 
 ; Gas menu
     TCODE   tGaslist,   "Lista Gas OC"
@@ -78,15 +80,17 @@
     TCODE   tSetup_mix, "Imposta Miscela"
     TCODE   tCCRMode,   "Modo CCR:"             ; CCR Mode:
     TCODE   tCCRModeFixedSP,  "SP Fissi"        ; Fixed SP
-    TCODE   tCCRModeSensor,   "Sensori"          ; Sensor
+    TCODE   tCCRModeSensor,   "Sensori"			; Sensor
     TCODE   tCCRModeAutoSP,   "Auto SP"         ; Auto SP
     TCODE   tSP,            "SP"                ; SP (SetPoint)
-    TCODE   tSPPlus,    "ppO2+"                  ; pO2+
+    TCODE   tSPPlus,    "ppO2+"					; pO2+
     TCODE   tSensorFallback, "Fallback:"        ; Fallback:
+	TCODE	tCalculated,	"calculated"		; calculated
     TCODE   tppO2,      "ppO2:"                 ; ppO2:
-    TCODE   tppO2O2,	"ppO2(O2)"		; ppO2(O2)
-    TCODE   tppO2Dil,	"ppO2(Dil)"		; ppO2(Dil)
-    
+	TCODE   tppO2O2,	"ppO2(O2)"				; ppO2(O2)
+    TCODE   tppO2Dil,	"ppO2(Dil)"				; ppO2(Dil)
+    TCODE   tppO2Mix,	"ppO2(Mix)"				; ppO2(Mix)
+		
 ; New battery menu
 	TCODE   tNewBattTitle,      "Nuova Batteria?"
 	TCODE	tNewBattOld,		"Mantieni vecchio"
@@ -114,16 +118,18 @@
 ; Dive Settings
     TCODE   tDvMode,    "Modo Dive:"
     TCODE   tDvOC,      "OC"
-    TCODE   tDvCC,      "CC"
+	TCODE	tDvCCR,		"CCR"
     TCODE   tDvGauge,   "Gauge"
     TCODE   tDvApnea,   "Apnea"
-    TCODE   tDvPSCR,	"PSCR"
-    TCODE   tDkMode,    "Algorit.:"
-    TCODE   tZHL16,     "ZH-L16"
-    TCODE   tZHL16GF,   "ZH-L16+GF"
+    TCODE   tDvPSCR,	"pSCR"
+    TCODE   tDvCC,      "CC"
+    TCODE   tDkMode,    "Algorit.:ZH-L16"		;								## MODIFIED (memory)
+    TCODE   tZHL16,     " "						;								## MODIFIED (memory)
+    TCODE   tZHL16GF,   "+GF"					;								## MODIFIED (memory)
     TCODE   tPPO2Max,   "ppO2 Max:"
     TCODE   tPPO2DECO,	"ppO2 Deco:"
     TCODE   tPPO2MIN,   "ppO2 Min:"
+	TCODE	tPPO2MINCC, 	"Min Loop:"			; 								## NEW ppO2 min cc
     TCODE   tLastDecostop, "Ultima Deco:"
     TCODE   tDecoparameters, "Parametri Deco"
     TCODE   tGF_low,    "GF basso:"
@@ -138,6 +144,20 @@
     TCODE   tDiveaGF_active,"aGF!"          ; aGF!
     TCODE   tppO2settings,"Menu ppO2"        ; ppO2 Settings (max. 18 chars)
     TCODE   tsafetystopmenu,"Usa tappa sicur:"       ; Safety Stop: (max. 16 chars)
+	TCODE   tGasUsage,  	"Gas Usage"         ; Gas Usage
+    TCODE   tSetBotUse, 	"Bottom Gas: "      ; Bottom Gas: (space)
+    TCODE   tSetDecoUse,	"Deco   Gas: "      ; Deco   Gas: (space)			## MODIFIED (layout)
+	TCODE	tCalcAscGas,	 "Calc.Gas (B/O):"	;								## NEW bailout gas needs
+	TCODE	tTankSizes,		 "Tank Sizes"		;								## NEW bailout gas needs
+	TCODE   tLiter,			 " l"				;								## NEW bailout gas needs 
+	TCODE	tTankFillPress,	 "Tank Press Budget";								## NEW bailout gas needs
+	TCODE	tGas1,			 "Gas 1:"			;								## NEW bailout gas needs
+	TCODE	tGas2,			 "Gas 2:"			;								## NEW bailout gas needs
+	TCODE	tGas3,			 "Gas 3:"			;								## NEW bailout gas needs
+	TCODE	tGas4,			 "Gas 4:"			;								## NEW bailout gas needs
+	TCODE	tGas5,			 "Gas 5:"			;								## NEW bailout gas needs
+	TCODE	tCCmaxFracO2,	 "Loop %O2 max.:"	;								## NEW CCR max ppO2 limiter
+	TCODE	t2ndDecoPlanMenu,"2nd Deco Plan"	;								## NEW deco engine
 
 ; Display Settings
     TCODE   tBright,    "Luminosita':"
@@ -145,9 +165,10 @@
     TCODE   tMedium,    "Media"
     TCODE   tHigh,      "Alta"
     TCODE   tDvSalinity,"Salinita':"            ; Salinity
+	TCODE   tShowppO2,  "Always show ppO2:"     ; Always show ppO2:
     TCODE   tFlip,      "Ruotare schermo:"      ; Rotate Screen
     TCODE   tMODwarning,"MOD warning:"          ; MOD warning
-    TCODE   tShowppO2,  "Always show ppO2:"     ; Always show ppO2:
+	TCODE	tIBCDwarning,	"IBCD Warning  :"	; IBCD Warning					## NEW IBCD
     TCODE   tTimeoutDive,"Dive Timeout:"	; Dive Timeout
 
 ; VSI display Settings
@@ -167,17 +188,21 @@
     TCODE   tCalY,	 "Cal Y:"		; Cal Y
     TCODE   tCalZ,	 "Cal Z:"		; Cal Z
 
-
     TCODE   tUnits,     "Unita':"
     TCODE   tMetric,     " m/°C"            ; Enum menu
     TCODE   tImperial,   "ft/°F"
 
     TCODE   tDefName,   "HW OSTC"
-	TCODE	tbar,		"bar"				; bar
 
     TCODE   tButtonleft,"Bottone sinistra:"      ; Left button
     TCODE   tButtonright,"Bottone destra:"    ; Right button
 
+	TCODE	tAltMode,		"Waiting Time:"		;								## NEW no fly altitude
+	TCODE	tAltModeFly,	"Flying"			;								## NEW no fly altitude
+	TCODE	tAltMode1000,	"1000m"				;								## NEW no fly altitude
+	TCODE	tAltMode2000,	"2000m"				;								## NEW no fly altitude
+	TCODE	tAltMode3000,	"3000m"				;								## NEW no fly altitude
+	
 ; Units for all menu
     TCODE   tMeters,    "m"
 	TCODE	tFeets,		"ft"
@@ -185,7 +210,11 @@
     TCODE   tMinutes,   "'"
     TCODE   tPercent,   "%"
     TCODE   tLitersMinute, "l/min"
-
+	TCODE	tbar,		"bar"					; bar
+	TCODE	tbar10,		"0 bar"					; bar							## NEW 2.95
+	TCODE	tMeterMinute, "m/min"				; meter per minute				## NEW ascent speed
+	TCODE	tmin,		"min"					; minutes
+	
 ; Date
 	TCODE	tDateFormat, "Data:"
 	TCODE	tDateformat, "MMGGAA"
@@ -201,14 +230,14 @@
     TCODE   tBtTm_short,"Tempo:"               ; Bot. Time: (max. 6 chars)
     TCODE   tMxDep, 	"Profond. Max:"        ; Max Depth: (10 chars)
     TCODE   tIntvl, 	"Int.Superf. :"        ; Interval : (10 chars)
+	TCODE	tDecoSetup,	"Calculator Setup"	;									## NEW (layout)
     TCODE   tDeco,  	"Calcola Deco"         ; Calculate Deco
     TCODE   tDivePlan,  "Pianificat:"          ; Dive Plan:
     TCODE   tNoDeco,    "No Deco"              ; No Deco
     TCODE   tMore,      "Dettagli.."           ; More...
-    TCODE   tGasUsage,  "Gas Usage"            ; Gas Usage
-    TCODE   tSetBotUse, "Bottom Gas: "      ; Bottom Gas: (space)
-    TCODE   tSetDecoUse,"Deco Gas: "        ; Deco Gas: (space)
-
+	TCODE	tSelectSetpoint,"CCR Setpoint: "	;								## NEW deco calculator enhancement
+	TCODE	tuseAGF,		"use aGF: "			;								## NEW deco calculator enhancement
+	TCODE	tCalculating,	"Calculating..."	;								## NEW deco calculator enhancement
 
 ; Information menu
     TCODE   tFirmware,  "Firmware: "        ; Firmware: (space)
@@ -251,11 +280,24 @@
     TCODE   taGFactors,     "Valori aGF"    ; aGF Values
     TCODE   tGFInfo,        "Info GF"       ; GF Info
     TCODE   tCeiling,       "Ceiling"       ; Ceiling
-    TCODE   tDiveSafetyStop,"Stop"         ; Stop (Four chars, right alligned)
+    TCODE   tDiveSafetyStop,"Stop"			; Stop (Four chars, right alligned)
     TCODE   tDiveFallback,  "Fallback!"     ; Fallback! (max. nine chars)
+	TCODE	tDecoInfo,		"Deco Zone"		; Deco info
     TCODE   tSensorCheck,   "Sensor Check"  ; Sensor Check
     TCODE   tdil,	    "Dil:"	    ; Diluent ppO2 Warning
-
+	TCODE	tmix,			"Mix:"			; Pre-Mix ppO2 Warning
+    TCODE   tSensorDisagree,"Sensors<>"	    ; Sensors disagree Warning		## NEW voting logic
+    TCODE   tGasNeedsWarn,  "Gas Needs"	    ;					## NEW bailout gas needs
+    TCODE   tGasNeedsBar,   "Gas Needs (bar)"	;				## NEW bailout gas needs
+    TCODE   tCNSsurf,	    "CNS Surf."	    ;					## NEW CNS at end-of-dive
+    TCODE   tCNSfTTS,	    "CNS fTTS"	    ;					## NEW CNS at end-of-dive
+    TCODE   tCNSBO,	    	"CNS B/O"	    ;					## NEW CNS at end-of-dive
+    TCODE   tCNSnow,	    "CNS now"	    ;					## NEW CNS at end-of-dive
+    TCODE   tCNSeod,	    "CNS final"	    ;					## NEW CNS at end-of-dive
+    TCODE   tIBCD,	    	"IBCD N2He"	    ;					## NEW IBCD
+    TCODE   tMicroBubbles,  "M.Bubbles"	    ;					## NEW microbubbles
+	TCODE	tCNS,			"CNS: "			;					## V2.95 optics
+	
 ; Divemode menu
     TCODE   tDivePreMenu,   "Menu?"         ; Menu?
     TCODE   tSetHeading,    "Direz."        ; Bearing (Max. seven chars)
@@ -302,11 +344,6 @@
 	TCODE	tLogOffsetm1,	"-1"				; -1
 	TCODE	tLogOffsetm10,	"-10"				; -10
 
-; Sampling rate
-    TCODE   tSamplingrate,  "Campionamento:"    ; Sampling rate:
-    TCODE   tSampling2s,    "2s"                ; 2s
-    TCODE   tSampling10s,   "10s"               ; 10s
-
 ; Compass directions
     TCODE   tN,             "N "                ; N(orth),338°-22°
     TCODE   tNE,            "NE"                ; North-East,23°-67°
--- a/src/text_multilang.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/text_multilang.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File text_multilang.asm
+;   File text_multilang.asm								Version 2.92 = 2.26
 ;
 ;   Implementation text in various selectable languages.
 ;
@@ -20,7 +20,7 @@
             global  text_1_base
 text_1_base:
     IFNDEF	    french_italian
-    MESSG "hwOS code in English and German!"
+	MESSG "hwOS code in English and German!"
 ;---- PASS 1 : generate description block ------------------------------------
 tcode_idx   set     0
 LANG        set     0
@@ -35,7 +35,9 @@
 #undefine   TCODE
 
 ;=============================================================================
-            global  text_2_base
+
+
+	global  text_2_base
 text_2_base:
 
 ;---- PASS 1 : generate description block ------------------------------------
@@ -51,8 +53,8 @@
 #include    "text_german.inc"
 #undefine   TCODE
 
-    ELSE
-   MESSG "hwOS code in French and Italian!"
+	ELSE
+	MESSG "hwOS code in French and Italian!"
 ;=============================================================================
 ;---- PASS 1 : generate description block ------------------------------------
 tcode_idx   set     0
--- a/src/tft.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/tft.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -195,4 +195,4 @@
         movff   rowRegister,win_top
         call    half_pixel_write
         endm
-
+	
--- a/src/tft_outputs.asm	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/tft_outputs.asm	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File tft_outputs.asm
+;   File tft_outputs.asm							REFACTORED VERSION	V2.95a1
 ;
 ;   Startup subroutines
 ;
@@ -12,6 +12,7 @@
 #include    "hwos.inc"                  ; Mandatory header
 #include    "shared_definitions.h"      ; Mailbox from/to p2_deco.c
 #include    "tft.inc"
+#include    "start.inc"
 #include    "wait.inc"
 #include    "strings.inc"
 #include    "convert.inc"
@@ -29,6 +30,7 @@
 #include    "colorschemes.inc"
 #include    "calibrate.inc"
 
+
 	extern	aa_wordprocessor
 
 ;=============================================================================
@@ -39,70 +41,70 @@
     global   TFT_divemask_color
 TFT_divemask_color:
     movlw   color_green
-    btfsc   divemode            ; in Divemode?
+    btfsc   divemode            			; in Divemode?
     rcall   TFT_divemask_color_dive
 	bra		TFT_standard_color0
 
 TFT_divemask_color_dive:
-    movff   opt_dive_color_scheme,WREG  ; 0-3
+    movff   opt_dive_color_scheme,WREG  	; 0-3
     incf    WREG
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_mask1 ;0
+	retlw   color_scheme_divemode_mask1		;0
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_mask2 ;1
+	retlw   color_scheme_divemode_mask2		;1
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_mask3 ;2
-	retlw   color_scheme_divemode_mask4 ;3
+	retlw   color_scheme_divemode_mask3		;2
+	retlw   color_scheme_divemode_mask4		;3
 
 
     global  TFT_attention_color
 TFT_attention_color:
-    movlw   color_yellow           ; TODO
+    movlw   color_yellow					; TODO
 	bra		TFT_standard_color0
 TFT_attention_color_dive:
-    retlw   color_yellow           ; TODO
+    retlw   color_yellow					; TODO
 
     global  TFT_warnings_color
 TFT_warnings_color:
-    movlw   color_red           ; TODO
+    movlw   color_red						; TODO
 	bra		TFT_standard_color0
 TFT_warnings_color_dive:
-    retlw   color_red           ; TODO
+    retlw   color_red						; TODO
 
     global  TFT_disabled_color
 TFT_disabled_color:
-    movlw   color_grey          ; Default to OSTC grey (dark blue)
-    btfsc   divemode            ; in Divemode?
+    movlw   color_grey          			; Default to OSTC grey (dark blue)
+    btfsc   divemode            			; in Divemode?
     rcall   TFT_disabled_color_dive
     bra		TFT_standard_color0
 TFT_disabled_color_dive:
-    movff   opt_dive_color_scheme,WREG  ; 0-3
+    movff   opt_dive_color_scheme,WREG		; 0-3
     incf    WREG
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_dis1  ;0
+	retlw   color_scheme_divemode_dis1		;0
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_dis2  ;1
+	retlw   color_scheme_divemode_dis2		;1
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_dis3  ;2
-	retlw   color_scheme_divemode_dis4  ;3
+	retlw   color_scheme_divemode_dis3		;2
+	retlw   color_scheme_divemode_dis4		;3
 
     global  TFT_standard_color
 TFT_standard_color:
-    setf    WREG                ; Default white
-    btfsc   divemode            ; in Divemode?
+    setf    WREG                			; Default white
+    btfsc   divemode            			; in Divemode?
     rcall   TFT_standard_color_dive
 TFT_standard_color0:
-	goto	TFT_set_color	; and return...
+	goto	TFT_set_color					; and return...
 TFT_standard_color_dive:
-    movff   opt_dive_color_scheme,WREG  ; 0-3
+    movff   opt_dive_color_scheme,WREG		; 0-3
     incf    WREG
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_std1  ;0
+	retlw   color_scheme_divemode_std1		;0
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_std2  ;1
+	retlw   color_scheme_divemode_std2		;1
 	dcfsnz	WREG
-	retlw   color_scheme_divemode_std3  ;2
-    retlw   color_scheme_divemode_std4  ;3
+	retlw   color_scheme_divemode_std3		;2
+    retlw   color_scheme_divemode_std4		;3
 
 TFT_color_code macro color_code_temp
 	movlw	color_code_temp
@@ -110,273 +112,221 @@
 	endm
 	
 	global	TFT_color_code1
-TFT_color_code1:				; Color-codes the output, if required
+TFT_color_code1:						; Color-codes the output, if required
 	dcfsnz	WREG
 	bra		TFT_color_code_depth		; depth_warn_mbar [mbar], 16Bit
 	dcfsnz	WREG
-	bra		TFT_color_code_cns			; color_code_cns_high [%]
+	bra		TFT_color_code_cns			; color-code CNS values (CNS in hi:lo [%])
 	dcfsnz	WREG
-	bra		TFT_color_code_gf			; color_code_gf_warn_high [%]
+	bra		TFT_color_code_gf			; color-code GF value [%]
 	dcfsnz	WREG
-	bra		TFT_color_code_ppo2         ; Color-code the OC ppO2 results [cbar], opt_ppO2_max as threshold
+	bra		TFT_color_code_ppo2         ; Color-code ppO2 values (ppO2 in hi:lo [cbar]) by its warning flags
 	dcfsnz	WREG
-	bra		TFT_color_code_ceiling		; Show warning if current depth>shown ceiling
+	bra		TFT_color_code_ceiling		; Color-code the ceiling depth
 	dcfsnz	WREG
-	bra		TFT_color_code_gaslist		; Color-code current row in Gaslist (%O2 in hi), opt_ppO2_max as threshold
+	bra		TFT_color_code_gaslist		; Color-code current row in Gaslist (%O2 in hi) according to current amb_pressure
     dcfsnz	WREG
-    bra     TFT_color_code_ppo2_hud     ; Color-code the hud ppO2 readings [cbar], opt_ppO2_max as threshold
+    bra     TFT_color_code_ppo2_hud		; Color-code ppO2 values (ppO2 in --:lo [cbar]) by its value
     dcfsnz	WREG
-    bra     TFT_color_code_battery      ; Color-code the battery display
-
-TFT_color_code_gaslist:				; %O2 in hi
+    bra     TFT_color_code_battery		; Color-code the battery display
+	dcfsnz	WREG
+    bra     TFT_color_code_stop			; Color-code the stop depth
+
+
+TFT_color_code_gaslist:					; %O2 in hi
 ; Check very high ppO2 manually
     SAFE_2BYTE_COPY amb_pressure,xA
-	movlw		d'10'
-	movwf		xB+0
-	clrf		xB+1
-	call		div16x16				; xC=p_amb/10
-	movff		xC+0,xA+0
-	movff		xC+1,xA+1
-	movff		hi,xB+0
-	clrf		xB+1
-	call		mult16x16                   ; hi * p_amb/10
+	movlw	d'10'
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16					; xC=p_amb/10
+	movff	xC+0,xA+0
+	movff	xC+1,xA+1
+	movff	hi,xB+0
+	clrf	xB+1
+	call	mult16x16					; hi * p_amb/10
 ; Check if ppO2>6,55bar
-	tstfsz		xC+2						; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	bra			TFT_warnings_color       	; Yes, warn in warning color
+	tstfsz	xC+2						; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
+	bra		TFT_warnings_color			; Yes, warn in warning color
 ; Check if ppO2>3,30bar
-	btfsc		xC+1,7
-	bra			TFT_warnings_color          ; Yes, warn in warning color
-
+	btfsc	xC+1,7
+	bra		TFT_warnings_color			; Yes, warn in warning color
 ; Check for low ppo2
-	movff       xC+0,sub_a+0
-	movff       xC+1,sub_a+1
-    movff       opt_ppO2_min,WREG
-	mullw       d'100'                  ; opt_ppO2_min*100
-	movff       PRODL,sub_b+0
-	movff       PRODH,sub_b+1
-	call        subU16
-	btfsc       neg_flag
-    bra			TFT_warnings_color      ; too low -> Warning Color!
-
+	movff	xC+0,sub_a+0
+	movff	xC+1,sub_a+1
+    movff	char_I_ppO2_min,WREG
+	mullw	d'100'                  	; char_I_ppO2_min*100
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16
+	btfsc	neg_flag
+    bra		TFT_warnings_color      	; too low -> Warning Color!
 ; Check for high ppo2
-    	movff   gaslist_gas_global,WREG	; Read current gas O2 ratio
-	lfsr	FSR1,opt_gas_type	; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
-	movff   PLUSW1,xA+0		; xA+0 used as temp here -> holds type
-	
-	movff   opt_ppO2_max_deco,xB+1	; xB+1 used as temp here
+    movff   gaslist_gas_global,WREG		; Read current gas O2 ratio
+	lfsr	FSR1,opt_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents
+	movff   PLUSW1,xA+0					; xA+0 used as temp here -> holds type
+	movff   char_I_ppO2_max_deco,xB+1	; xB+1 used as temp here
 	movlw	.3			
-	cpfseq	xA+0			; Deco?
-	movff   opt_ppO2_max,xB+1	; No, overwrite with travel/bottom max
-	movf	xB+1,W			; Result in WREG
-	mullw	d'100'			; opt_ppO2_max*100
+	cpfseq	xA+0						; Deco?
+	movff   char_I_ppO2_max,xB+1		; No, overwrite with travel/bottom max
+	movf	xB+1,W						; Result in WREG
+	mullw	d'100'						; char_I_ppO2_max*100
 	movff	PRODL,sub_b+0
 	movff	PRODH,sub_b+1
 	infsnz	sub_a+0,F
-	incf	sub_a+1,F		; add 1mbar to avoid warning on equal
-	call	subU16			;  sub_c = sub_a - sub_b	
+	incf	sub_a+1,F					; add 1mbar to avoid warning on equal
+	call	subU16						; sub_c = sub_a - sub_b	
 	btfss	neg_flag
-	bra	TFT_warnings_color      ; too high -> Warning Color!
+	bra	TFT_warnings_color				; too high -> Warning Color!
 	return
-	
+
+
 TFT_color_code_ceiling:
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
-	movff	hi,xA+1
-	movff	lo,xA+0
-	movff	char_O_first_deco_depth,lo  ; Ceiling in m
-	decf	lo,F	                    ; -1
-	movlw	LOW		d'100'
-	movwf	xB+0
-	clrf	xB+1						; Devide/100 -> xC+0 = Depth in m
-	call	div16x16					; xA/xB=xC with xA as remainder 	
-	movf	xC+0,W						; Depth in m
-	subwf	lo,W
-	btfsc	STATUS,C
-	bra	TFT_warnings_color     	; Set to warning color
-	bra	TFT_standard_color  ; and return...
-
-TFT_color_code_depth:
-	movff	hi,hi_temp
-	movff	lo,lo_temp
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
-	movff	lo,sub_a+0
-	movff	hi,sub_a+1
-	movlw	LOW		depth_warn_mbar
-	movwf	lo
-	movlw	HIGH	depth_warn_mbar
-	movwf	hi
-	movff	lo,sub_b+0
-	movff	hi,sub_b+1
-	movff	hi_temp,hi
-	movff	lo_temp,lo			; Restore hi, lo
-
-    TSTOSS  opt_modwarning			; 0=standard, 1=blink
-	bra		TFT_color_code_depth_std
-;TFT_color_code_depth_blink:
-	call	subU16			;  sub_c = sub_a - sub_b
-	btfss	neg_flag
-	bra	TFT_color_code_depth_warn ; Set to warning color
-	bra    TFT_color_code_ppo2_depth  ; check depth against MOD	; and return...
-
-
-TFT_color_code_depth_std:
-	call	subU16			   ; sub_c = sub_a - sub_b
-	btfss	neg_flag
-	bra	TFT_warnings_color ; Set to warning color
-	bra    TFT_standard_color   ; and return...
-	
-
-TFT_color_code_ppo2_depth:
-	movff   opt_dive_mode,WREG        ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
-	decfsz	WREG,F			
-	bra	TFT_color_code_ppo2_depth_no_ccr   ; Not CCR...
-	
-	btfsc	is_bailout
-	bra	TFT_color_code_ppo2_depth_no_ccr   ; Is bailout -> Test for MOD warning
-
-	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-	decfsz	WREG,F
-	bra	TFT_color_code_ppo2_depth_no_ccr   ; Not Sensor
-	; -> CCR and Sensor: Skip this test
-	return
-TFT_color_code_ppo2_depth_no_ccr:
-    SAFE_2BYTE_COPY amb_pressure, xA
-	movlw	d'10'
+	btfsc	hi,char_invalid_flag		; is the invalid flag set?  (bit 7 here)
+	bra		TFT_color_code_ceiling_1	; YES
+	SAFE_2BYTE_COPY rel_pressure,sub_a	; NO
+    movff   lo,sub_b+0
+    movff   hi,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b :  sub_c = rel_pressure [cm] - int_O_ceiling [mbar => cm]
+	btfsc 	neg_flag					; is ceiling > current depth?
+	bra		TFT_warnings_color			; YES - set to warning  color and return	
+	bra		TFT_standard_color			; NO  - set to standard color and return
+TFT_color_code_ceiling_1:
+	bcf		hi,char_invalid_flag		; clear the invalid flag (bit 7 here)
+	bra		TFT_disabled_color			; set to disabled color and return
+
+
+TFT_color_code_stop:
+	movff	char_O_deco_gas+0,WREG		; get flag for invalid deco data
+	btfsc	WREG,char_invalid_flag		; is the invalid flag set?
+	bra		TFT_disabled_color			; set to disabled color and return
+    SAFE_2BYTE_COPY rel_pressure,xA		; get current pressure in mbar = cm
+	movlw	LOW	d'100'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; xC=p_amb/10
-
-	movff	xC+0,xA+0
-	movff	xC+1,xA+1
-    movff   char_I_O2_ratio,xB+0    ; =O2 ratio
-	clrf	xB+1
-	call	mult16x16               ; char_I_O2_ratio * p_amb/10
-
-; Check if ppO2>6,55bar
-	tstfsz	xC+2					; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	;bra		TFT_color_code_warn     ; Yes, warn in warning color
-    bra     TFT_color_code_depth_warn
-; Check if ppO2>3,30bar
-	btfsc	xC+1,7
-    bra     TFT_color_code_depth_warn
-
-	movff	xC+0,sub_a+0
-	movff	xC+1,sub_a+1
-	;active_gas_type -> 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
-	movff   active_gas_type,xA+0	; xA+0 used as temp here -> holds type
-	movff   opt_ppO2_max_deco,xB+1	; xB+1 used as temp here
-	movlw	.3			
-	cpfseq	xA+0			; Deco?
-	movff   opt_ppO2_max,xB+1	; No, overwrite with travel/bottom max
-	movf	xB+1,W			; Result in WREG
-	mullw	d'100'
-	movff	PRODL,sub_b+0
-	movff	PRODH,sub_b+1
-	infsnz	sub_a+0,F
-	incf	sub_a+1,F		; add 1mbar to avoid warning on equal
-	call	subU16			; sub_c = sub_a - sub_b
+	call	div16x16					; xA/xB=xC with xA as remainder: Divide/100 => xC+0 = current depth in meters
+	movff	char_O_first_deco_depth,WREG; get stop depth in m into WREG
+	subwf	xC+0,W						; compute current depth - stop depth
+	btfsc	STATUS,C					; result negative?
+	bra		TFT_standard_color			; NO  - set to standard color and return
+	bra		TFT_warnings_color			; YES - set to warning  color and return
+
+
+
+TFT_color_code_depth:					; with depth as rel_pressure in [mbar] in hi:lo
+	movff	lo,sub_a+0
+	movff	hi,sub_a+1
+	movlw	LOW	 depth_warn_mbar
+	movwf	sub_b+0
+	movlw	HIGH depth_warn_mbar
+	movwf	sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
+    TSTOSS  opt_modwarning				; 0=standard, 1=blink
+	bra		TFT_color_code_depth_std
+	btfss	neg_flag
+	bra		TFT_color_code_depth_warn	; set to warning color
+	bra		TFT_color_code_depth_ppO2	; check depth against MOD and return...
+TFT_color_code_depth_std:
 	btfss	neg_flag
-    bra     TFT_color_code_depth_warn
-
-	movff	xC+0,sub_a+0
-	movff	xC+1,sub_a+1
-	movff	opt_ppO2_min,WREG		; PPO2 min for Sensors and color coding in divemode
-	mullw	d'100'
-	movff	PRODL,sub_b+0
-	movff	PRODH,sub_b+1
-	call	subU16			  		; sub_c = sub_a - sub_b
-	btfsc	neg_flag
-    bra     TFT_color_code_depth_warn
-    if dm_offset != 0
-        call	TFT_standard_color
-    else
-        movlw   color_green
-    	call	TFT_set_color
-    endif
-    bcf     blinking_depth_warning      ; reset warning
-    return
-
+	bra		TFT_warnings_color			; set to warning  color and return
+	bra		TFT_standard_color			; set to standard color and return...
+TFT_color_code_depth_ppO2:
+	movff   opt_dive_mode,WREG			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	decfsz	WREG,F						; are we in CCR mode?
+	bra		TFT_color_code_depth_no_ccr	; NO  - continue checking for ppO2
+	btfsc	is_bailout					; YES - check if in bailout
+	bra		TFT_color_code_depth_no_ccr	; 		YES - continue checking for ppO2
+; no warning by depth for all CCR modes	when not in bailout ## V2.94
+	;movff	opt_ccr_mode,WREG					; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+	;decfsz	WREG,F
+	;bra	TFT_color_code_ppo2_depth_no_ccr	; Not Sensor
+	bcf     blinking_depth_warning		; reset warning
+	bra		TFT_standard_color			; no color coding, return.
+TFT_color_code_depth_no_ccr:
+	movff	int_O_breathed_ppO2+1,WREG	; get upper byte of currently breathed ppO2
+	btfsc	WREG,int_warning_flag		; is the warning flag set?
+	bra		TFT_color_code_depth_warn	; YES - animate in warning design
+	bcf     blinking_depth_warning		; NO  - reset warning
+	bra 	TFT_standard_color			;		set standard color and return
 TFT_color_code_depth_warn:
-   	bsf		blinking_depth_warning         ; Set warning
-    bra     TFT_warnings_color ; Set to warning color
-
-TFT_color_code_cns:
-    movff   int_O_CNS_fraction+1,lo		; copy into bank1
-    tstfsz  lo                          ; >255% ?
-    bra     TFT_warnings_color         ; Yes
-	movff	int_O_CNS_fraction+0,lo
-	movlw	color_code_cns_high		; CNS Warn [%]
-	subwf	lo,W
-	btfsc	STATUS,C
-	bra	TFT_warnings_color		; Set to warning color
-	bra	TFT_standard_color		; and return...
+   	bsf		blinking_depth_warning		; set warning
+    bra     TFT_warnings_color			; set to warning color and return...
+
+
+TFT_color_code_cns:						; with CNS% in hi:lo
+	btfss	hi,int_invalid_flag			; is the invalid flag set?
+	bra		TFT_color_code_cns_1		; NO
+	bcf		hi,int_invalid_flag			; YES - clear invalid flag							## Todo: use ~bitmask and AND
+	bcf		hi,int_warning_flag			;		clear warning     flag (it may be set)
+	bcf		hi,int_prewarning_flag		; 		clear pre-warning flag (it may be set)
+	bra		TFT_disabled_color			; 		set to disabled color and return
+TFT_color_code_cns_1
+	btfss	hi,int_warning_flag			; is the warning flag set?
+	bra		TFT_color_code_cns_2		; NO
+	bcf		hi,int_warning_flag			; YES - clear warning								## Todo: use ~bitmask and AND
+	bcf		hi,int_prewarning_flag		; 		clear pre-warning flag (it may be set)
+	bra		TFT_warnings_color			; 		set to warning color and return
+TFT_color_code_cns_2:
+	bcf		hi,int_prewarning_flag		; clear pre-warning flag (it may be set)
+	bra		TFT_standard_color			; set to standard color and return
+
 
 TFT_color_code_gf:
-	movff	char_O_gradient_factor,lo		; gradient factor
-	movlw	color_code_gf_warn_high 	; GF Warn [%]
-	subwf	lo,W
-	btfsc	STATUS,C
-	bra	TFT_warnings_color         ; Set to warning color
-	bra	TFT_standard_color	    ; and return...
+	btfsc	hi,int_warning_flag			; is the warning flag set?
+	bra		TFT_warnings_color			; YES - set to warning color and return
+	btfsc	hi,int_prewarning_flag		; is the attention flag set?
+	bra		TFT_attention_color			; YES - set to attention color and return
+	bra		TFT_standard_color			; NO  - set to normal  color and return
+
 
 TFT_color_code_ppo2:
-; Check if ppO2>6,55bar
-	tstfsz	xC+2					; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	bra		TFT_warnings_color     ; Yes, warn in warning color
-; Check if ppO2>3,30bar
-	btfsc	xC+1,7
-	bra		TFT_warnings_color     ; Yes, warn in warning color
-
-	movff	xC+0,sub_a+0
-	movff	xC+1,sub_a+1
-	
-	;active_gas_type -> 0=Disabled, 1=First, 2=Travel, 3=Deco for OC gases and 0=Disabled, 1=First, 2=Normal for diluents	
-	movff   active_gas_type,xA+0	; xA+0 used as temp here -> holds type
-	movff   opt_ppO2_max_deco,xB+1	; xB+1 used as temp here
-	movlw	.3			
-	cpfseq	xA+0			; Deco?
-	movff   opt_ppO2_max,xB+1	; No, overwrite with travel/bottom max
-	movf	xB+1,W			; Result in WREG
-
-	mullw	d'100'
-	movff	PRODL,sub_b+0
-	movff	PRODH,sub_b+1
-	infsnz	sub_a+0,F
-	incf	sub_a+1,F		; add 1mbar to avoid warning on equal
-	call	subU16			  		; sub_c = sub_a - sub_b
-	btfss	neg_flag
-	bra		TFT_warnings_color     ; Set to warning color
-
-	movff	xC+0,sub_a+0
-	movff	xC+1,sub_a+1
-	movff	opt_ppO2_min,WREG		; PPO2 min for Sensors and color coding in divemode
-	mullw	d'100'
-	movff	PRODL,sub_b+0
-	movff	PRODH,sub_b+1
-	call	subU16			  		; sub_c = sub_a - sub_b
-	btfsc	neg_flag
-	bra	TFT_warnings_color     ; Set to warning color
-	bra	TFT_standard_color	; and return...
-
-TFT_color_code_ppo2_hud:            ; With ppO2 [cbar] in lo
-	movff	opt_ppO2_max,WREG		; PPO2 Max for MOD calculation and color coding in divemode
-    cpfsgt  lo                      ; lo > opt_ppO2_max?
-    bra     TFT_color_code_ppo2_hud1; No
-    bra     TFT_warnings_color     ; Yes
+	btfss	hi,int_warning_flag			; is the warning flag set?
+	bra		TFT_color_code_ppo2_1		; NO
+	bcf		hi,int_warning_flag			; YES - clear warning flag							## Todo: use ~bitmask and AND
+	bcf		hi,int_prewarning_flag		;		clear  pre-warning flag (it may be set)
+	bcf		hi,int_high_flag			;		clear high warning flag (it may be set)
+	bcf		hi,int_low_flag				;		clear low  warning flag (it may be set)
+	bra		TFT_warnings_color     		; 		warn in warning color
+TFT_color_code_ppo2_1:
+	bcf		hi,int_prewarning_flag		;		clear  pre-warning flag (it may be set)		## Todo: use ~bitmask and AND
+	bcf		hi,int_high_flag			;		clear high warning flag (it may be set)
+	bcf		hi,int_low_flag				;		clear low  warning flag (it may be set)
+	bra		TFT_standard_color			; set to standard color and return
+
+
+TFT_color_code_ppo2_hud:            	; With ppO2 [cbar] in --:lo
+	movff	char_O_deco_warnings,WREG	; get the deco warnings vector
+	btfss	WREG,deco_flag				; are we in deco?
+	bra		TFT_color_code_ppo2_hud_a	; NO  - load normal max value as threshold
+	movff	char_I_ppO2_max_deco,WREG	; YES - load deco value as threshold
+	bra		TFT_color_code_ppo2_hud_b
+TFT_color_code_ppo2_hud_a:	
+	movff	char_I_ppO2_max,WREG		; ppO2 max while not in deco
+TFT_color_code_ppo2_hud_b:	
+    cpfsgt  lo                      	; lo > threshold?
+    bra     TFT_color_code_ppo2_hud1	; NO  - continue with checking for ppO2 low
+    bra     TFT_warnings_color     		; YES - set warning color and return
 TFT_color_code_ppo2_hud1:
-	movff	opt_ppO2_min,WREG		; PPO2 min for Sensors and color coding in divemode
-    cpfslt  lo                      ; lo < opt_ppO2_min?
-    bra     TFT_color_code_ppo2_hud2; No
-    bra     TFT_warnings_color     ; Yes
-TFT_color_code_ppo2_hud2:
-    bra	   TFT_standard_color	; and return...
-
-TFT_color_code_battery:             ; With battery percent in lo
-    movlw   color_code_battery_low
-    cpfsgt  lo                      ; lo < color_code_battery_low ?
-    bra     TFT_warnings_color     ; No
-    bra	    TFT_standard_color	    ; and return...
+	movff	opt_dive_mode,WREG			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	decfsz	WREG,F						; now:  0=CC, 1=Gauge, 2=Apnea, 3=PSCR
+	bra		TFT_color_code_ppo2_hud_nocc; not CCR...
+	btfsc	is_bailout
+	bra		TFT_color_code_ppo2_hud_nocc; is bailout, hence not loop mode...
+	movff	char_I_ppO2_min_loop,WREG	; ppO2 min loop mode color coding
+	bra		TFT_color_code_ppo2_hud_cont
+TFT_color_code_ppo2_hud_nocc:
+	movff	char_I_ppO2_min,WREG		; PPO2 min for all other modes
+TFT_color_code_ppo2_hud_cont:
+    cpfslt  lo                      	; lo < char_I_ppO2_min?
+    bra		TFT_standard_color			; NO  - set standard color and return...
+    bra     TFT_warnings_color     		; Yes - set warning  color and return
+
+
+TFT_color_code_battery:             	; With battery percent in lo
+    movlw   color_code_battery_low		; get warning threshold
+    cpfsgt  lo                      	; is battery percent < threshold?
+    bra     TFT_warnings_color     		; YES - set to warning  color and return
+    bra	    TFT_standard_color	    	; NO  - set to standard color and return
 
 ; ****************************************************************************
 
@@ -385,7 +335,8 @@
     ; Show first gas
     WIN_SMALL surf_decotype_column+.1,surf_decotype_row+.30
     extern  get_first_gas_to_WREG,gaslist_strcat_gas
-    call    get_first_gas_to_WREG       ; Gets first gas (0-4) into WREG
+    call    get_first_gas_to_WREG       ; Gets first gas (1-5) into WREG
+	decf	WREG,W						; 1-5 -> 0-4
     movwf   PRODL
     call    gaslist_strcat_gas          ; Input: PRODL : gas number (0..4), Output: Text appended into buffer pointed by FSR2.
     STRCAT_PRINT ""
@@ -402,7 +353,7 @@
 	WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left1, surf_decotype_boxes_left1+.8    ;top, bottom, left, right
 DISP_active_gas_surfmode3:
     rcall    TFT_disabled_color
-    movff   opt_gas_type+1,hi         ; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+1,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
     tstfsz  hi
     rcall    TFT_standard_color
 	WIN_LEFT	surf_decotype_boxes_left2+.1
@@ -412,40 +363,41 @@
 	WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left2, surf_decotype_boxes_left2+.8    ;top, bottom, left, right
 DISP_active_gas_surfmode4:
     rcall    TFT_disabled_color
-    movff   opt_gas_type+2,hi         ; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+2,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
     tstfsz  hi
     rcall    TFT_standard_color
 	WIN_LEFT	surf_decotype_boxes_left3+.1
     STRCPY_PRINT    "3"
     decfsz  hi,F                        ; Type = 1 (First)?
-    bra     DISP_active_gas_surfmode5       ; No, skip box
+    bra     DISP_active_gas_surfmode5   ; No, skip box
     WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left3, surf_decotype_boxes_left3+.8    ;top, bottom, left, right
 DISP_active_gas_surfmode5:
     rcall    TFT_disabled_color
-    movff   opt_gas_type+3,hi         ; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+3,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
     tstfsz  hi
     rcall    TFT_standard_color
 	WIN_LEFT	surf_decotype_boxes_left4+.1
     STRCPY_PRINT    "4"
     decfsz  hi,F                        ; Type = 1 (First)?
-    bra     DISP_active_gas_surfmode6       ; No, skip box
+    bra     DISP_active_gas_surfmode6   ; No, skip box
     WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left4, surf_decotype_boxes_left4+.8    ;top, bottom, left, right
 DISP_active_gas_surfmode6:
     rcall    TFT_disabled_color
-    movff   opt_gas_type+4,hi         ; 0=Disabled, 1=First, 2=Travel, 3=Deco
+    movff   opt_gas_type+4,hi           ; 0=Disabled, 1=First, 2=Travel, 3=Deco
     tstfsz  hi
     rcall    TFT_standard_color
 	WIN_LEFT	surf_decotype_boxes_left5+.1
     STRCPY_PRINT    "5"
-    rcall    TFT_standard_color          ; Reset color
+    rcall    TFT_standard_color         ; Reset color
     decfsz  hi,F                        ; Type = 1 (First)?
-    return                                  ; no, Done.
+    return                              ; no, Done.
     WIN_FRAME_STD   surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left5, surf_decotype_boxes_left5+.8    ;top, bottom, left, right
-    return                                  ; Done.
-
+    return                              ; Done.
+
+	
     global  TFT_show_color_schemes
-TFT_show_color_schemes:         ; update the color schemes
-    bsf     divemode            ; put in divemode
+TFT_show_color_schemes:					; update the color schemes
+    bsf     divemode					; put in divemode
     call    TFT_divemask_color
     WIN_TINY  .12,.40
     STRCAT_TEXT_PRINT	tDepth
@@ -465,9 +417,9 @@
     movwf   hi
 	bsf		leftbind
 	bsf		ignore_digit4
-	output_16						; Full meters in Big font
+	output_16							; Full meters in Big font
 	bcf		leftbind
-	STRCAT_PRINT ""					; Display full meters
+	STRCAT_PRINT ""						; Display full meters
     WIN_SMALL	.25,.66
     movlw   LOW     .5172
     movwf   lo
@@ -477,20 +429,20 @@
 	movlw	d'4'
 	movwf	ignore_digits
 	bsf		ignore_digit5
-	output_16dp	d'0'                ; .1m in SMALL font
-	STRCAT_PRINT ""					; Display decimeters
+	output_16dp	d'0'                	; .1m in SMALL font
+	STRCAT_PRINT ""						; Display decimeters
 	WIN_FONT 	FT_SMALL
 
     ; Max. Depth demo
     WIN_MEDIUM	.64,.54
-	bsf     ignore_digit4			; no 0.1m
+	bsf     ignore_digit4				; no 0.1m
     bsf     leftbind
     movlw   LOW     .6349
     movwf   lo
     movlw   HIGH    .6349
     movwf   hi
 	output_16
-	STRCAT_PRINT ""					; Display full meters
+	STRCAT_PRINT ""						; Display full meters
     bcf     leftbind
 	; .1m in SMALL font
 	WIN_SMALL	.87,.66
@@ -504,99 +456,90 @@
     movlw   HIGH    .6349
     movwf   hi
 	output_16dp	d'0'
-	STRCAT_PRINT ""					; Display decimeters
+	STRCAT_PRINT ""						; Display decimeters
     bcf     leftbind
 
     ; Divetime demo
     movff   mins,lo
     clrf    hi
 	WIN_MEDIUM	.103, .54
-	output_16_3                     ; limit to 999 and display only (0-999)
-	STRCAT_PRINT ""                 ; Show minutes in large font
-	WIN_SMALL  .139, .66   		; left position for two sec figures
+	output_16_3                     	; limit to 999 and display only (0-999)
+	STRCAT_PRINT ""                 	; Show minutes in large font
+	WIN_SMALL  .139, .66   				; left position for two sec figures
 	PUTC    ':'
 	bsf		leftbind
 	movff   secs,lo
 	output_99x
 	bcf     leftbind
-	STRCAT_PRINT ""                 ; Show seconds in small font
-
-    bcf     divemode                ; don't stay in divemode
+	STRCAT_PRINT ""                 	; Show seconds in small font
+
+    bcf     divemode                	; don't stay in divemode
 	return
 
 	global	TFT_divemode_mask
-TFT_divemode_mask:					; Displays mask in Dive-Mode
-    if dm_offset != 0
-        call    TFT_divemask_color
-        WIN_TINY            dm_mask_depth_column,dm_mask_depth_row
-        STRCAT_TEXT_PRINT   tDepth
-        WIN_TINY            dm_mask_maxdepth_column,dm_mask_maxdepth_row
-        TSTOSS  opt_vsigraph			; 0=skip, 1=draw
-        WIN_TINY            dm_mask_maxdepth_column_nvsi,dm_mask_maxdepth_row
-        STRCAT_TEXT_PRINT   tMaxDepth
-        WIN_TINY            dm_mask_divetime_column,dm_mask_divetime_row
-        STRCAT_TEXT_PRINT   tDivetime
-    endif
-
-    if dm_offset == 0
-        movlw       color_dark_red
-        call        TFT_set_color
-        TSTOSS  opt_vsigraph			; 0=skip, 1=draw
-        bra     $+4
-        WIN_FRAME_COLOR16 dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;top, bottom, left, right
-        WIN_FRAME_COLOR16 dm_sep_1_2_row, dm_sep_1_2_row, .0, .159 ;top, bottom, left, right
-        WIN_FRAME_COLOR16 dm_sep_2_3_row, dm_sep_2_3_row, .0, .159 ;top, bottom, left, right
-        WIN_FRAME_COLOR16 dm_warning_row-.1, dm_warning_row-.1, dm_warning_column, .159 ;top, bottom, left, right
-        TSTOSS  opt_vsigraph			; 0=skip, 1=draw
-        bra     $+4
-        WIN_FRAME_COLOR16 dm_warning_row-.1, dm_warning_row-.1, dm_max_depth_column_nvsi, .159 ;top, bottom, left, right
-        call    TFT_draw_gassep_line
-    endif
-
-    bra		TFT_standard_color ; and return...
-
+TFT_divemode_mask:						; Displays mask in divemode
+	bcf	    FLAG_TFT_divemode_mask
+	call    TFT_divemask_color
+	WIN_TINY dm_mask_depth_column,dm_mask_depth_row
+	STRCAT_TEXT_PRINT   tDepth
+	WIN_TINY dm_mask_maxdepth_column,dm_mask_maxdepth_row
+	TSTOSS  opt_vsigraph				; 0=skip, 1=draw
+	WIN_TINY dm_mask_maxdepth_column_nvsi,dm_mask_maxdepth_row
+	STRCAT_TEXT_PRINT   tMaxDepth
+	WIN_TINY dm_mask_divetime_column,dm_mask_divetime_row
+	STRCAT_TEXT_PRINT   tDivetime
+	bra		TFT_standard_color 			; and return...
+    
+    global  TFT_divemode_mask_alternative
+TFT_divemode_mask_alternative:			; Alt. mask for divemode
+    bcf	    FLAG_TFT_divemode_mask_alt
+    call    TFT_divemask_color
+    WIN_TINY dm_mask_depth_column,dm_mask_depth_row
+    STRCAT_TEXT_PRINT   tDepth
+    WIN_TINY dm_mask_divetime_column-.30,dm_mask_divetime_row
+    STRCAT_TEXT_PRINT   tDivetime
+    bra		TFT_standard_color 			; and return...
+    
     global	TFT_draw_gassep_line
 TFT_draw_gassep_line:
     btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
     return
     btfsc   divemode_menu               ; Is the dive mode menu shown?
     return                              ; Yes, return
-    if dm_offset == 0
-        movlw       color_dark_red
-        call        TFT_set_color
-        WIN_FRAME_COLOR16   dm_gassep_row, dm_gassep_bot, dm_gassep_column, dm_gassep_column
-    endif
-    bra		TFT_standard_color ; and return...
+    bra		TFT_standard_color 			; and return...
 
 ;=========================================================================
 
 	global	TFT_display_velocity
 TFT_display_velocity:						; With divA+0 = m/min, neg_flag_velocity: ascend=1, descend=0
-	bcf     STATUS,C
-    movlw	velocity_display_threshold_1	; lowest threshold for display vertical velocity
-	subwf	divA+0,W
-	btfss	STATUS,C
-	bra		TFT_velocity_clear              ; lower then threshold. Clear text and graph (If active)
+    bcf     STATUS,C
+    movlw   velocity_display_threshold_1	; lowest threshold for display vertical velocity
+    subwf   divA+0,W
+    btfss   STATUS,C
+    bra	    TFT_velocity_clear              ; lower then threshold. Clear text and graph (If active)
 
     ; We have something to display
-	bsf		display_velocity                ; Set flag
+    bsf	    display_velocity                ; Set flag
     ; check if descending: no warning color if descending
-    call	TFT_standard_color
-	btfsc	neg_flag_velocity                   ; Ignore for descent!
-    rcall   TFT_velocity_set_color              ; Set color for text and set threshold for graph
-
-	rcall   TFT_velocity_disp                   ; Show the text
-
-    TSTOSS  opt_vsigraph                        ; =1: draw the graphical VSI bar
-	bra     TFT_display_velocity_done           ; No graph
-
-	btfsc	neg_flag_velocity                   ; Ignore for descent!
-    rcall   TFT_velocity_graph                  ; Show the graph
-	btfss	neg_flag_velocity                   ; Ignore for descent!
-    rcall   TFT_velocity_clear_graph            ; Clear the graph for descent
+    rcall   TFT_standard_color
+    btfsc   neg_flag_velocity               ; Ignore for descent!
+    rcall   TFT_velocity_set_color          ; Set color for text and set threshold for graph
+
+    rcall   TFT_velocity_disp               ; Show the text
+
+    TSTOSS  opt_vsigraph                    ; =1: draw the graphical VSI bar
+    bra     TFT_display_velocity_done       ; No graph
+	
+    btfsc   alternative_divelayout	    ; Alternative layout?
+    bra     TFT_display_velocity_done       ; Yes, no graph! (no room when divetime minutes is three figures)
+
+    btfsc   neg_flag_velocity               ; Ignore for descent!
+    rcall   TFT_velocity_graph              ; Show the graph
+    btfss   neg_flag_velocity               ; Ignore for descent!
+    rcall   TFT_velocity_clear_graph        ; Clear the graph for descent
 
 TFT_display_velocity_done:	
-    bra 	TFT_standard_color      ; and return!
+    bra 	TFT_standard_color              ; and return!
 
 TFT_speed_table:
     ; use a depth-dependent ascent rate warning
@@ -619,21 +562,21 @@
     DB  .50,.19,.15,.0
     DB  .200,.20,.15,.0
 
-TFT_velocity_set_color:         ; Set color based on speed table or use static thresholds, with divA+0 = m/min
+TFT_velocity_set_color:                     ; Set color based on speed table or use static thresholds, with divA+0 = m/min
     ; check if old/new ascend logic is used
     TSTOSS  opt_vsitextv2       			; 0=standard, 1=dynamic
     bra     TFT_velocity_set_color_static   ; static ascend rate limit
 
     ; get the actual depth in m
     SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	hi,xA+1
 	movff	lo,xA+0
 	movlw	LOW		d'100'
 	movwf	xB+0
-	clrf	xB+1						; Devide/100 -> xC+0 = Depth in m
-	call	div16x16					; xA/xB=xC with xA as remainder 	
-	;movf	xC+0,W						; Depth in m
+	clrf	xB+1						    ; Devide/100 -> xC+0 = Depth in m
+	call	div16x16					    ; xA/xB=xC with xA as remainder 	
+	;movf	xC+0,W						    ; Depth in m
     
     ; point to speed table
     movlw   LOW     (TFT_speed_table-.3)
@@ -644,21 +587,21 @@
     movwf   TBLPTRU
 
 TFT_velocity_set_color_skip:
-    TBLRD*+         ; 3 dummy reads
+    TBLRD*+                                 ; 3 dummy reads
     TBLRD*+
     TBLRD*+
 
-    TBLRD*+         ; Get speed threshold
-    movf	xC+0,W						; Depth in m
-    cpfsgt  TABLAT  ; Threshold > current depth ?
-    bra     TFT_velocity_set_color_skip ; No
+    TBLRD*+                                 ; Get speed threshold
+    movf	xC+0,W						    ; Depth in m
+    cpfsgt  TABLAT                          ; Threshold > current depth ?
+    bra     TFT_velocity_set_color_skip     ; No
     
-    TBLRD*+         ; Get warning speed threshold
+    TBLRD*+                                 ; Get warning speed threshold
     movf    TABLAT,W
     movwf   divA+1                          ; Copy for graph routine
     cpfslt  divA+0                          ; smaller then actual value (in m/min)?
     bra     TFT_warnings_color              ; Set Warning color (And return)
-    TBLRD*+         ; Get attention speed threshold
+    TBLRD*+                                 ; Get attention speed threshold
     movf    TABLAT,W
     cpfslt  divA+0                          ; smaller then actual value (in m/min)?
     bra     TFT_attention_color             ; Set Attention color (And return)
@@ -676,7 +619,7 @@
 
 TFT_velocity_disp:
     WIN_SMALL	dm_velocity_text_column, dm_velocity_text_row
-    TSTOSS  opt_units			; 0=Meters, 1=Feets
+    TSTOSS  opt_units			            ; 0=Meters, 1=Feets
 	bra		TFT_velocity_metric
 ;TFT_velocity_imperial:
 	movff	divA+0,WREG						; divA+0 = m/min
@@ -692,7 +635,7 @@
 	output_16
 	bcf		leftbind
 	STRCAT_TEXT_PRINT  tVelImperial			; Unit switch
-        return
+    return
 
 TFT_velocity_metric:
 	movff	divA+0,lo						; divA+0 = m/min
@@ -702,11 +645,11 @@
 	movwf	POSTINC2
 	output_99
 	STRCAT_TEXT_PRINT  tVelMetric			; Unit switch
-        return
+    return
 
 TFT_velocity_graph:                         ; divA+0 = m/min
 	; divA+0 holding the ascend speed in m/min
-	movff	divA+0,hi	; Copy
+	movff	divA+0,hi	                    ; Copy
 	WIN_BOX_BLACK   dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;top, bottom, left, right -> outer frame
 	rcall   TFT_divemask_color_dive     ; Color -> WREG
     WIN_FRAME_COLOR   dm_velobar_top, dm_velobar_bot, dm_velobar_lft, dm_velobar_rgt ;inner frame
@@ -731,7 +674,7 @@
 	call	div16x16						;xA/xB=xC with xA as remainder 	
 	; xC+0 now holds amount of segments to show
 
-	movff	hi,divA+0	; Copy back for numeric output
+	movff	hi,divA+0	                    ; Copy back for numeric output
 	movlw	d'7'
 	cpfslt	xC+0
 	bra		DISP_graph_vel_7
@@ -777,7 +720,7 @@
     rcall   TFT_standard_color_dive     ; Color -> WREG
     WIN_BOX_COLOR   dm_velobar_top+.62, dm_velobar_top+.68, dm_velobar_lft+.2, dm_velobar_rgt-.2 ;top, bottom, left, right
 DISP_graph_vel_0:
-    return          ; Done.
+    return                              ; Done.
 
 	global	TFT_velocity_clear
 TFT_velocity_clear:
@@ -801,88 +744,207 @@
     WIN_BOX_BLACK   dm_decostop_1st_stop_row, .239, dm_decostop_1st_stop_column, .159	; top, bottom, left, right
 	return
 
+
     global  TFT_clear_divemode_menu
 TFT_clear_divemode_menu:
-    if dm_offset != 0
-        WIN_BOX_BLACK   dm_menu_row,   dm_menu_lower, dm_menu_left,  dm_menu_right	; top, bottom, left, right
-    else
-        WIN_BOX_BLACK   dm_3rdrow_top, dm_3rdrow_bot, dm_3rdrow_lft, dm_3rdrow_rgt	; top, bottom, left, right
-    endif
+    WIN_BOX_BLACK   dm_menu_row,   dm_menu_lower, dm_menu_left,  dm_menu_right	; top, bottom, left, right
 	return
 
+
 	global	TFT_display_ndl_mask
 TFT_display_ndl_mask:
+    bcf	    FLAG_TFT_display_ndl_mask
     btfsc   divemode_menu               ; Is the dive mode menu shown?
     return                              ; Yes, return
-	rcall	TFT_clear_decoarea			; Clear Dekostop and Dekosum
-    if dm_offset != 0
-        call    TFT_divemask_color
-    else
-        call    TFT_attention_color
-    endif
-   	WIN_STD 	dm_ndl_text_column, dm_ndl_text_row
+	call	TFT_clear_decoarea          ; Clear Dekostop and Dekosum
+    call    TFT_divemask_color
+   	WIN_STD dm_ndl_text_column, dm_ndl_text_row
 	STRCPY_TEXT_PRINT  tNDL             ; NDL
-	bra	TFT_standard_color  ; and return...
-
-	global	TFT_show_TTS_divemode
-TFT_show_TTS_divemode:
+	bra	TFT_standard_color              ; and return...
+
+
+	global	TFT_display_tts
+TFT_display_tts:
+    bcf	    FLAG_TFT_display_tts
     btfsc   divemode_menu               ; Is the dive mode menu shown?
     return                              ; Yes, return
 	call	TFT_standard_color
 	movff	int_O_ascenttime+0,lo       ; TTS
 	movff	int_O_ascenttime+1,hi       ; on 16bits
+	btfss	hi,int_invalid_flag			; is the invalid flag set?
+	bra		TFT_display_tts_1			; NO
+	bcf		hi,int_invalid_flag			; YES - clear flag
+	call	TFT_disabled_color			; 		switch to disabled color
+TFT_display_tts_1:
 	WIN_MEDIUM  dm_tts_value_column, dm_tts_value_row
-	output_16_3					;Displays only 0...999
+	output_16_3							; Displays only 0...999
 	STRCAT_PRINT "'"
 	return
 
+
 	global	TFT_display_ndl
 TFT_display_ndl:
+    bcf	    FLAG_TFT_display_ndl
     btfsc   divemode_menu               ; Is the dive mode menu shown?
     return                              ; Yes, return
-	WIN_MEDIUM	dm_ndl_value_column, dm_ndl_value_row
-	call	TFT_standard_color
-	movff	char_O_nullzeit,lo		; Get NDL from C-code
+    WIN_MEDIUM	dm_ndl_value_column, dm_ndl_value_row
+    call	TFT_standard_color
+    movff	char_O_nullzeit,lo			; Get NDL from C-code
+    output_8
+    STRCAT_PRINT "'"
+    return
+
+
+	global	TFT_big_deco_alt	        ; The big deco
+TFT_big_deco_alt:
+    bcf	    FLAG_TFT_big_deco_alt
+    
+    btfss   decostop_active             ; deco?
+    bra	    TFT_big_deco_ndl_alt	    ; NDL
+    
+    ; Deco
+    bcf	    FLAG_TFT_display_deko
+    call    TFT_divemask_color
+    WIN_STD 	.70,.165
+    STRCPY_TEXT_PRINT  tTTS             ; TTS
+    rcall   TFT_standard_color
+    
+    ; TTS
+    WIN_LARGE	.97,.170
+    movff	int_O_ascenttime+0,lo       ; TTS
+    movff	int_O_ascenttime+1,hi       ; on 16bits
+    btfss	hi,int_invalid_flag			; is the invalid flag set?
+    bra		TFT_display_tts_alt_1		; NO
+    bcf		hi,int_invalid_flag			; YES - clear flag
+    call	TFT_disabled_color			; 		switch to disabled color
+TFT_display_tts_alt_1:
+    output_16_3							; Displays only 0...999
+    STRCAT_PRINT ""
+    
+    ; 1st Stop
+    call    TFT_divemask_color
+    WIN_STD .25,dm_customview_row
+    STRCPY_TEXT_PRINT  tDiveSafetyStop  ; "Stop"
+    
+    WIN_LARGE	.60,.95
+    TFT_color_code	warn_stop		    ; Color-code Output
+    movff	char_O_first_deco_depth,lo  ; stop depth in m
+    rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
+    STRCAT_PRINT ""
+    
+    ; m or ft after the stop depth
+    WIN_MEDIUM 	.100,.118
+    TSTOSS	opt_units				    ; 0=m, 1=ft
+    bra		TFT_display_tts_alt_1_metric
+    STRCAT_TEXT_PRINT tFeets1
+    bra	    TFT_display_tts_alt_1_com
+TFT_display_tts_alt_1_metric:
+    STRCAT_TEXT_PRINT tMeters
+TFT_display_tts_alt_1_com:
+    WIN_LARGE	.117,.95
+    movff	char_O_first_deco_time,lo   ; length of first stop in min
+    bcf	    leftbind
+    output_99
+    STRCAT_PRINT ""
+    goto	TFT_standard_color			; and return...
+   
+TFT_big_deco_ndl_alt:
+    ; NDL
+    bcf	    FLAG_TFT_display_ndl
+    bcf	    decostop_active				; clear flag (again)
+    call    TFT_divemask_color
+    WIN_STD .70,.165
+    STRCPY_TEXT_PRINT  tNDL             ; NDL
+    call   TFT_standard_color
+    WIN_LARGE .97,.170
+    call	TFT_standard_color
+    movff	char_O_nullzeit,lo			; Get NDL from C-code
+    output_8
+    STRCAT_PRINT ""
+    
+    btfsc   FLAG_TFT_show_safety_stop
+    bra	    TFT_show_safety_stop_alt	; Show safety stop (And return)
+    ; Clear any safety stop or Decostop
+TFT_no_more_safety_stop_alt:
+    WIN_BOX_BLACK   dm_customview_row, .150, .0, .159	; top, bottom, left, right
+    WIN_BOX_BLACK   dm_customview_row, .164, .60, .159	; top, bottom, left, right
+    return
+
+TFT_show_safety_stop_alt:
+    bcf	    FLAG_TFT_show_safety_stop
+    tstfsz	safety_stop_countdown		; Countdown at zero?
+    bra		TFT_show_safety_stop_alt2	; No, show stop
+    bcf		show_safety_stop			; Clear flag
+    btfss	safety_stop_active			; Displayed?
+    return								; No
+    bcf		safety_stop_active			; Clear flag
+    bra		TFT_no_more_safety_stop_alt	; Yes, Clear stop ; and return...
+
+TFT_show_safety_stop_alt2:
+    bsf     safety_stop_active			; Set flag
+    decf    safety_stop_countdown,F		; Reduce countdown
+
+	call    TFT_divemask_color
+	WIN_STD 	.50,dm_customview_row
+	STRCPY_TEXT_PRINT tDiveSafetyStop
+	call    TFT_attention_color         ; show in yellow
+	WIN_LARGE	.90,.95
+	movff	safety_stop_countdown,lo
+	clrf	hi
+	call	convert_time				; converts hi:lo in seconds to mins (hi) and seconds (lo)
+	movf	hi,W
+	movff	lo,hi
+	movwf	lo							; exchange lo and hi
+	bsf     leftbind
 	output_8
-	STRCAT_PRINT "'"
-	return
+	STRCAT_PRINT ""
+	WIN_MEDIUM 	.112,.120
+	STRCAT_PRINT ":"
+	WIN_LARGE	.117,.95
+	bcf     leftbind
+	movff	hi,lo
+	output_99x
+	STRCAT_PRINT ""
+	WIN_FONT 	FT_SMALL
+	goto	TFT_standard_color			; and return...
+
 
 	global	TFT_divemode_warning
 TFT_divemode_warning:
-    bsf     dive_warning_displayed              ; =1: The warning sign is shown
-    WIN_TOP  	dm_warning_icon_row
-	WIN_LEFT 	dm_warning_icon_column
-    TFT_WRITE_PROM_IMAGE dive_warning2_block 	; Show Warning icon
-    return
+	bcf		FLAG_TFT_divemode_warning
+	bsf		dive_warning_displayed              ; =1: The warning sign is shown
+	WIN_TOP  dm_warning_icon_row
+	WIN_LEFT dm_warning_icon_column
+	TFT_WRITE_PROM_IMAGE dive_warning2_block 	; Show Warning icon
+	return
 
 	global	TFT_divemode_warning_clear
 TFT_divemode_warning_clear:
-    btfss   dive_warning_displayed              ; =1: The warning sign is shown
-    return
-    bcf     dive_warning_displayed              ; clear only once
-	WIN_BOX_BLACK   dm_warning_icon_row, dm_warning_icon_bot, dm_warning_icon_column, dm_warning_icon_rgt  ; top, bottom, left, right
+	bcf		FLAG_TFT_divemode_warning_clear
+	btfss	dive_warning_displayed              ; =1: The warning sign is shown
 	return
+	bcf		dive_warning_displayed              ; clear only once
+	WIN_BOX_BLACK dm_warning_icon_row, dm_warning_icon_bot, dm_warning_icon_column, dm_warning_icon_rgt  ; top, bottom, left, right
+	return
+
 
 	global	TFT_display_deko_mask
 TFT_display_deko_mask:
-	btfsc	divemode_menu	; Is the dive mode menu shown? 
-	return			; Yes, return
-    
-	rcall		TFT_clear_decoarea
-   	WIN_STD 	dm_tts_text_column, dm_tts_text_row
-    if dm_offset != 0
-        call    TFT_divemask_color
-    else
-        call    TFT_attention_color
-    endif
-	STRCPY_TEXT_PRINT  tTTS             ; TTS
-	call	TFT_standard_color
-    bcf		show_safety_stop            ; Clear safety stop flag
+    bcf		FLAG_TFT_display_deko_mask
+    btfsc	divemode_menu			; Is the dive mode menu shown? 
+    return							; Yes, return
+    rcall	TFT_clear_decoarea		; Clear Dekostop and Dekosum (and NDL in this case)
+    WIN_STD dm_tts_text_column, dm_tts_text_row
+    call	TFT_divemask_color
+    STRCPY_TEXT_PRINT  tTTS         ; TTS
+    call	TFT_standard_color
+    bcf		show_safety_stop        ; Clear safety stop flag
     return
 
-TFT_display_deko_output_depth:		; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
+
+TFT_display_deko_output_depth:		; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (for ft)
 	TSTOSS	opt_units				; 0=m, 1=ft
-	bra		TFT_display_deko_output_metric
+	bra	TFT_display_deko_output_metric
 ;TFT_display_deko_output_imperial:
 	movf	lo,W					; lo = m
 	mullw	.100					; PRODL:PRODH = mbar
@@ -909,29 +971,38 @@
 	movff	xC+0,lo
 	movff	xC+1,hi				    ; restore lo and hi with updated value
 	bcf		leftbind
+	btfsc	alternative_divelayout
+	bsf		leftbind		    	; left for alternative layout mode
 	bsf		ignore_digit4			; Only full feet
 	output_16
+	btfsc	alternative_divelayout
+	return					    	; Not for alternative layout mode
 	STRCAT_TEXT	tFeets1
 	return
 
 TFT_display_deko_output_metric:
 	output_99
+	btfsc	alternative_divelayout
+	return					    	; Not for alternative layout mode
 	STRCAT_TEXT	tMeters
 	PUTC	' '
 	return
 
+
 	global	TFT_display_deko
 TFT_display_deko:
+    bcf	    FLAG_TFT_display_deko
     btfsc   divemode_menu               ; Is the dive mode menu shown?
     return                              ; Yes, return
-	WIN_MEDIUM	dm_decostop_1st_stop_column, dm_decostop_1st_stop_row
-	TFT_color_code		warn_ceiling    ; Color-code Output
-	movff	char_O_first_deco_depth,lo  ; Ceiling in m
+	WIN_MEDIUM dm_decostop_1st_stop_column, dm_decostop_1st_stop_row
+	TFT_color_code	warn_stop		    ; Color-code Output
+	movff	char_O_first_deco_depth,lo  ; stop depth in m
 	rcall	TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft)
 	movff	char_O_first_deco_time,lo   ; length of first stop in min
 	output_99
 	STRCAT_PRINT "'"
-	goto	TFT_standard_color	; and return...
+	goto	TFT_standard_color			; and return...
+
 
     global  TFT_decoplan
 TFT_decoplan:
@@ -939,7 +1010,6 @@
     WIN_TINY    dm_custom_decoplan_title_column, dm_custom_decoplan_title_row
     STRCPY_TEXT_PRINT tDiveDecoplan
 	call	TFT_standard_color
-
 	movff	char_O_deco_depth+1,lo
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko2			; Yes
@@ -947,11 +1017,15 @@
 	call	TFT_standard_color
 	WIN_SMALL	dm_cust_dstop_4th_stop_column,dm_cust_dstop_4th_stop_row
 	STRCPY_PRINT "  ---  "
-	WIN_BOX_BLACK   dm_cust_dstop_2nd_stop_row, dm_customview_bot-.1, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
+	WIN_BOX_BLACK   dm_cust_dstop_2nd_stop_row, dm_customview_bot-.2, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
 	WIN_BOX_BLACK   dm_cust_dstop_5th_stop_row, dm_customview_bot, dm_cust_dstop_5th_stop_column, dm_cust_dstop_6th_stop_column	; top, bottom, left, right
 	WIN_BOX_BLACK   dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159	; top, bottom, left, right
-    return
+	goto	TFT_standard_color			; and return...
+	
 TFT_display_deko2:
+	movff	char_O_deco_gas+0,lo		; get flag for invalid deco data
+	btfsc	lo,char_invalid_flag		; is the invalid flag set?
+	call	TFT_disabled_color			; YES - set to disabled color
 	WIN_SMALL	dm_cust_dstop_2nd_stop_column, dm_cust_dstop_2nd_stop_row
 	movff	char_O_deco_depth+1,lo  	; stop in m
 	bcf     lo,7                        ; Clear GAS_SWITCH bit
@@ -963,9 +1037,9 @@
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko3			; Yes
 	; No, clear output and return
-	WIN_BOX_BLACK   dm_cust_dstop_3rd_stop_row, dm_customview_bot-.1, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
+	WIN_BOX_BLACK   dm_cust_dstop_3rd_stop_row, dm_customview_bot-.2, dm_cust_dstop_2nd_stop_column, dm_cust_dstop_4th_stop_column	; top, bottom, left, right
 	WIN_BOX_BLACK   dm_cust_dstop_4th_stop_row, dm_customview_bot, dm_cust_dstop_4th_stop_column, .159	; top, bottom, left, right
-	return
+	goto	TFT_standard_color			; and return...
 
 TFT_display_deko3:
 	WIN_SMALL	dm_cust_dstop_3rd_stop_column, dm_cust_dstop_3rd_stop_row
@@ -975,13 +1049,12 @@
 	movff	char_O_deco_time+2,lo   	; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
-
 	movff	char_O_deco_depth+3,lo
 	tstfsz	lo							; Show another stop?
 	bra		TFT_display_deko4			; Yes
 	; No, clear output and return
 	WIN_BOX_BLACK   dm_cust_dstop_4th_stop_row, dm_customview_bot, dm_cust_dstop_4th_stop_column, .159  ; top, bottom, left, right
-	return								; Done.
+	goto	TFT_standard_color			; and return...
 
 TFT_display_deko4:
 	WIN_SMALL	dm_cust_dstop_4th_stop_column, dm_cust_dstop_4th_stop_row
@@ -998,7 +1071,7 @@
 	; No, clear output and return
 	WIN_BOX_BLACK   dm_cust_dstop_5th_stop_row, dm_customview_bot, dm_cust_dstop_5th_stop_column, dm_cust_dstop_6th_stop_column	; top, bottom, left, right
 	WIN_BOX_BLACK   dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159                     ; top, bottom, left, right
-	return								; Done.
+	goto	TFT_standard_color			; and return...
 
 TFT_display_deko5:
 	WIN_SMALL	dm_cust_dstop_5th_stop_column, dm_cust_dstop_5th_stop_row
@@ -1013,7 +1086,8 @@
 	bra		TFT_display_deko6			; Yes
 	; No, clear output and return
 	WIN_BOX_BLACK   dm_cust_dstop_6th_stop_row, dm_customview_bot, dm_cust_dstop_6th_stop_column, .159        ; top, bottom, left, right
-	return								; Done.
+	goto	TFT_standard_color			; and return...
+	
 TFT_display_deko6:
 	WIN_SMALL	dm_cust_dstop_6th_stop_column, dm_cust_dstop_6th_stop_row
 	movff	char_O_deco_depth+5,lo  	; stop in m
@@ -1027,7 +1101,8 @@
 	bra		TFT_display_deko7			; Yes
 	; No, clear output and return
 	WIN_BOX_BLACK   dm_cust_dstop_7th_stop_row, dm_customview_bot, dm_cust_dstop_7th_stop_column, .159     ; top, bottom, left, right
-	return								; Done.
+	goto	TFT_standard_color			; and return...
+	
 TFT_display_deko7:
 	WIN_SMALL	dm_cust_dstop_7th_stop_column, dm_cust_dstop_7th_stop_row
 	movff	char_O_deco_depth+6,lo  	; stop in m
@@ -1036,55 +1111,40 @@
 	movff	char_O_deco_time+6,lo   	; length of stop in min
 	output_99
 	STRCAT_PRINT "'"
-	return								; Done.
-
-;TFT_display_deko1:
-;	movff	char_O_gradient_factor,lo		; gradient factor
-;	movlw	gf_display_threshold			; threshold for display
-;	cpfslt	lo				; show value?
-;	bra		TFT_display_deko2	; Yes
-;	; No
-;	bra		TFT_display_ndl_mask2	; Clear gradient factor
-;
+	goto	TFT_standard_color			; and return...
+
 
     global  TFT_clear_safety_stop
 TFT_clear_safety_stop:
+    bcf	    FLAG_TFT_clear_safety_stop		 ; clear flag
     WIN_BOX_BLACK   dm_safetystop_row, dm_safetystop_bot, dm_safetystop_text_column, .159	; top, bottom, left, right
     return
 
     global  TFT_show_safety_stop
 TFT_show_safety_stop:
+    bcf	    FLAG_TFT_show_safety_stop
 	tstfsz	safety_stop_countdown			; Countdown at zero?
 	bra		TFT_show_safety_stop2			; No, show stop
-
 	bcf		show_safety_stop				; Clear flag
-
 	btfss	safety_stop_active				; Displayed?
     return                                  ; No
 	bcf		safety_stop_active				; Clear flag
     btfsc   divemode_menu                   ; Is the dive mode menu shown?
     return                                  ; Yes, return
     bra		TFT_clear_safety_stop           ; Yes, Clear stop ; and return...
-
 TFT_show_safety_stop2:
     bsf     safety_stop_active				; Set flag
     decf	safety_stop_countdown,F			; Reduce countdown
-
     btfsc   divemode_menu                   ; Is the dive mode menu shown?
     return                                  ; Yes, return
     ;btfsc   menuview
-    ;bra     TFT_show_safety_stop3           ; No room when menuview=1...
-    if dm_offset != 0
-        call    TFT_divemask_color
-    else
-        call    TFT_standard_color
-    endif
+    ;bra     TFT_show_safety_stop3          ; No room when menuview=1...
+    call    TFT_divemask_color
     WIN_STD  dm_safetystop_text_column, dm_safetystop_text_row
     STRCPY_TEXT_PRINT tDiveSafetyStop
 TFT_show_safety_stop3:
-	call    TFT_attention_color            ; show in yellow
+	call    TFT_attention_color             ; show in yellow
     WIN_MEDIUM	dm_safetystop_column, dm_safetystop_row
-	lfsr	FSR2,buffer
 	movff	safety_stop_countdown,lo
 	clrf	hi
 	call	convert_time					; converts hi:lo in seconds to mins (hi) and seconds (lo)
@@ -1099,9 +1159,10 @@
 	output_99x
 	STRCAT_PRINT ""
 	WIN_FONT 	FT_SMALL
-	goto	TFT_standard_color; and return...
-
-    global  TFT_mask_avr_stopwatch             ; Show mask for average depth and stopwatch
+	goto	TFT_standard_color				; and return...
+
+
+    global  TFT_mask_avr_stopwatch      ; Show mask for average depth and stopwatch
 TFT_mask_avr_stopwatch:
     ; The mask
     call    TFT_divemask_color
@@ -1111,62 +1172,18 @@
     STRCPY_TEXT_PRINT tDiveStopwatch
     WIN_TINY          dm_custom_avr_stop_title_column3,dm_custom_avr_stop_title_row
     STRCPY_TEXT_PRINT tDiveStopAvg
-    goto	TFT_standard_color  ; and return...
-
-    global  TFT_dyn_gaslist
-TFT_dyn_gaslist:                            ; Show the dynamic gaslist
-    ; The mask
-    call    TFT_divemask_color
-    WIN_TINY    dm_custom_dyn_gas_mask_column,dm_custom_dyn_gas_mask_row
-    STRCPY_TEXT_PRINT tGaslist
-;    call	TFT_standard_color
-
-    WIN_SMALL   dm_custom_dyn_gas_column1,dm_custom_dyn_gas_row1
-    bsf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-    clrf    uart1_temp
-    rcall   TFT_dyn_gaslist_common
-    WIN_SMALL   dm_custom_dyn_gas_column1,dm_custom_dyn_gas_row2
-    rcall   TFT_dyn_gaslist_common
-    WIN_SMALL   dm_custom_dyn_gas_column2,dm_custom_dyn_gas_row1
-    rcall   TFT_dyn_gaslist_common
-    WIN_SMALL   dm_custom_dyn_gas_column2,dm_custom_dyn_gas_row2
-    rcall   TFT_dyn_gaslist_common
-    goto	TFT_standard_color  ; and return...
-
-TFT_dyn_gaslist_common:
-    incf    uart1_temp,F     ; +1
-    movf    uart1_temp,W     ; into W
-    cpfseq  active_gas  ;1-5
-    bra     TFT_dyn_gaslist_common2
-    incf    uart1_temp,F     ; +1
-TFT_dyn_gaslist_common2:
-    movff   uart1_temp,lo    ; gas number 1-5
-    movff   uart1_temp,PRODL
-    decf    PRODL,F     ;-1 to have 0-4
-    bsf     leftbind
-    output_8            ; Gas number
-    bcf     leftbind
-    PUTC    ":"
-    bcf	    ccr_diluent_setup
-    call    gaslist_strcat_gas_mod  ;Append gas description of gas #PRODL (0-4) to current string
-    PUTC    " "         ; Clearing space
-    movlw   0x00
-    movff   WREG,buffer+.11  ; limit to 11 chars
-    STRCAT_PRINT ""
-    bcf     win_invert
-    return
-
-
-    global  TFT_update_avr_stopwatch           ; Update average depth and stopwatch
+    goto	TFT_standard_color          ; and return...
+
+    global  TFT_update_avr_stopwatch    ; Update average depth and stopwatch
 TFT_update_avr_stopwatch:
     call    TFT_standard_color
     SAFE_2BYTE_COPY  average_divesecs,lo
-	call	convert_time			; lo=secs, hi=mins
+	call	convert_time				; lo=secs, hi=mins
     WIN_MEDIUM  dm_custom_avr_stop_column2,dm_custom_avr_stop_row
     bsf     leftbind
 	movf	hi,W
 	movff	lo,hi
-	movwf	lo					; exchange lo and hi
+	movwf	lo							; exchange lo and hi
 	output_8
 	PUTC    ':'
 	movff	hi,lo
@@ -1177,28 +1194,28 @@
     movff   WREG,buffer+.5              ; limit to 5 chars
 	STRCAT_PRINT ""
 
-    TSTOSS  opt_units   			; 0=m, 1=ft
+    TSTOSS  opt_units   				; 0=m, 1=ft
 	bra		TFT_update_avr_stopwatch_metric
 ;TFT_update_avr_stopwatch_imperial
     movff   avg_rel_pressure_total+0,lo
     movff   avg_rel_pressure_total+1,hi
-    call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
     call	convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
     WIN_MEDIUM  dm_custom_avr_stop_column1,dm_custom_avr_stop_row
     bsf     leftbind
-    output_16                       ; yxz
+    output_16                       	; yxz
     STRCAT_PRINT " "
     ; Stopped average depth
     movff   avg_rel_pressure+0,lo
     movff   avg_rel_pressure+1,hi
-    call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
     call	convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
     WIN_MEDIUM  dm_custom_avr_stop_column3,dm_custom_avr_stop_row
-    output_16                       ; yxz
+    output_16                       	; yxz
     bcf     leftbind
     PUTC    " "
     clrf    WREG
-    movff   WREG,buffer+.3                  ; limit string length to 3
+    movff   WREG,buffer+.3              ; limit string length to 3
     STRCAT_PRINT ""
     return
 
@@ -1206,373 +1223,436 @@
     ; Non-resettable average depth
     movff   avg_rel_pressure_total+0,lo
     movff   avg_rel_pressure_total+1,hi
-    call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
     WIN_MEDIUM  dm_custom_avr_stop_column1,dm_custom_avr_stop_row
-    bsf     ignore_digit5         ; no cm
-    output_16dp  .3               ; yxz.a
+    bsf     ignore_digit5         		; no cm
+    output_16dp  .3               		; yxz.a
     STRCAT_PRINT " "
     ; Stopped average depth
     movff   avg_rel_pressure+0,lo
     movff   avg_rel_pressure+1,hi
-    call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
     WIN_MEDIUM  dm_custom_avr_stop_column3,dm_custom_avr_stop_row
-    bsf     ignore_digit5         ; no cm
-    output_16dp  .3               ; yxz.a
+    bsf     ignore_digit5         		; no cm
+    output_16dp  .3               		; yxz.a
     bcf     leftbind
     bcf     ignore_digit5
     clrf    WREG
-    movff   WREG,buffer+.4                  ; limit string length to 4
+    movff   WREG,buffer+.4              ; limit string length to 4
     STRCAT_PRINT ""
     return
 
-    global  TFT_ceiling_mask                        ; The ceiling mask
+
+    global  TFT_ceiling_mask            ; The ceiling mask
 TFT_ceiling_mask:
     call    TFT_divemask_color
     WIN_TINY  dm_custom_ceiling_text_column,dm_custom_ceiling_text_row
     STRCPY_TEXT_PRINT tCeiling
-    goto	TFT_standard_color ; and return...
-
-    global  TFT_ceiling                             ; Ceiling
+    goto	TFT_standard_color 			; and return...
+
+    global  TFT_ceiling                 ; Ceiling
 TFT_ceiling:
-    call    TFT_standard_color
     WIN_MEDIUM  dm_custom_ceiling_value_column,dm_custom_ceiling_value_row
     movff   int_O_ceiling+0,lo
     movff   int_O_ceiling+1,hi
-    call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+	TFT_color_code	warn_ceiling		; color-code the output
+    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
     bsf     leftbind
-    TSTOSS  opt_units   			; 0=m, 1=ft
+    TSTOSS  opt_units   				; 0=m, 1=ft
 	bra		TFT_ceiling_metric
 ;TFT_ceiling_imperial
     call	convert_mbar_to_feet       	; convert value in lo:hi from mbar to feet
-    output_16                       ; yxz
+    output_16                       	; yxz
     bcf     leftbind
     STRCAT_PRINT " "
-    return
+	goto	TFT_standard_color
 
 TFT_ceiling_metric:
-    bsf     ignore_digit5         ; no cm
-    output_16dp  .3               ; yxz.a
+    bsf     ignore_digit5         		; no cm
+    output_16dp  .3               		; yxz.a
     bcf     leftbind
     bcf     ignore_digit5
     STRCAT_PRINT " "
-    return
-
-    global  TFT_hud_mask                        ; The HUD mask
+	goto	TFT_standard_color
+
+
+	global	TFT_CNS_mask
+TFT_CNS_mask:
+    call    TFT_divemask_color
+    WIN_TINY dm_custom_gf_title_col1, dm_custom_gf_title_row
+    STRCPY_TEXT_PRINT tCNSsurf
+    WIN_TINY dm_custom_gf_title_col2, dm_custom_gf_title_row
+	btfsc	FLAG_ccr_mode						; in CCR mode?
+	bra		TFT_CNS_mask_1						; YES - proceed with checking for bailout
+	btfsc	FLAG_pscr_mode						; NO  -	in pSCR mode?
+	bra		TFT_CNS_mask_1						; 		YES - proceed with checking for bailout
+	bra		TFT_CNS_mask_2						; 		NO  - must be OC then
+TFT_CNS_mask_1:									; in CCR or pSCR mode
+	btfsc	is_bailout							; in bailout?
+	bra		TFT_CNS_mask_2						; YES - print fTTS label (label will be printed, but a fTTS will actually not be calculated)
+	TSTOSS	opt_calc_asc_gasvolume				; NO  - bailout volume calculation requested?
+	bra		TFT_CNS_mask_2						;		NO  - print fTTS label
+	STRCPY_TEXT_PRINT tCNSBO					; 		YES - print bailout label
+	bra		TFT_CNS_mask_3
+TFT_CNS_mask_2:									; OC or bailout
+	STRCPY_TEXT_PRINT tCNSfTTS					; print fTTS label
+TFT_CNS_mask_3:
+    WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
+    STRCPY_TEXT_PRINT tCNSnow
+    goto	TFT_standard_color					; and return...
+	
+	global	TFT_CNS
+TFT_CNS:
+	; CNS at end of normal dive
+	WIN_STD dm_custom_hud_sensor1_column+.5,dm_custom_hud_data_row
+    movff   int_O_normal_CNS_fraction+0,lo
+	movff   int_O_normal_CNS_fraction+1,hi
+	TFT_color_code	warn_cns
+	bsf     leftbind
+    output_16_3									; output as xxx
+	bcf		leftbind
+    STRCAT_PRINT "% "
+	; fTTS / Bailout CNS, if enabled
+    WIN_STD dm_custom_hud_sensor2_column+.2,dm_custom_hud_data_row
+	btfsc	is_bailout							; in bailout?
+	bra		TFT_CNS_3							; YES - show "---"
+	TSTOSS	opt_calc_asc_gasvolume				; NO  - bailout volume calculation requested?
+	bra		TFT_CNS_1							;		NO  - continue checking fTTS extra time
+	btfsc	FLAG_ccr_mode						; 		YES - in CCR mode?
+	bra		TFT_CNS_2							; 			  YES - skip test for fTTS extra time and show CNS%
+	btfsc	FLAG_pscr_mode						; 			  in pSCR mode?
+	bra		TFT_CNS_2							; 			  YES - skip test for fTTS extra time and show CNS%
+TFT_CNS_1:										; not in bailout, no volume calculation
+	TSTOSS	char_I_extra_time					; fTTS extra time fTTS configured?
+	bra		TFT_CNS_3							; NO  - show "---"
+TFT_CNS_2:
+    movff   int_O_alternate_CNS_fraction+0,lo	; YES - show CNS%
+	movff   int_O_alternate_CNS_fraction+1,hi
+	TFT_color_code	warn_cns
+	bsf     leftbind
+    output_16_3	        						; output as xxx
+	bcf		leftbind
+    STRCAT_PRINT "% "
+	bra		TFT_CNS_4
+TFT_CNS_3:
+	call	TFT_standard_color
+	STRCPY_PRINT "---  "	
+TFT_CNS_4:
+	; current CNS
+	WIN_STD dm_custom_hud_sensor3_column,dm_custom_hud_data_row
+    movff   int_O_CNS_fraction+0,lo
+	movff   int_O_CNS_fraction+1,hi
+	TFT_color_code	warn_cns
+	bsf     leftbind
+    output_16_3	        						; output as xxx
+	bcf		leftbind
+    STRCAT_PRINT "%"
+	bcf     leftbind
+	goto	TFT_standard_color					; and return...
+	
+	
+    global  TFT_hud_mask            			; The HUD mask
 TFT_hud_mask:
     call    TFT_divemask_color
-    WIN_TINY          dm_custom_hud_column1,dm_custom_hud_row
+    WIN_TINY dm_custom_hud_column1,dm_custom_hud_row
     STRCPY_TEXT_PRINT tDiveHudMask1
-    WIN_TINY          dm_custom_hud_column2,dm_custom_hud_row
+    WIN_TINY dm_custom_hud_column2,dm_custom_hud_row
     STRCPY_TEXT_PRINT tDiveHudMask2
-    WIN_TINY          dm_custom_hud_column3,dm_custom_hud_row
+    WIN_TINY dm_custom_hud_column3,dm_custom_hud_row
     STRCPY_TEXT_PRINT tDiveHudMask3
-    goto	TFT_standard_color ; and return...
-
-    global  TFT_hud_voltages
-TFT_hud_voltages:                    ; Show HUD details
-    WIN_SMALL dm_custom_hud_sensor1_column,dm_custom_hud_data_row
-    call	TFT_standard_color
-    btfss   use_O2_sensor1
-    call    TFT_warnings_color
-    movff   o2_mv_sensor1+0,lo
-    movff   o2_mv_sensor1+1,hi
-    bsf     leftbind
-    output_16dp  .4         ; x.xx
-    bcf     leftbind
-    STRCAT_PRINT "mV  "
-    WIN_SMALL dm_custom_hud_sensor2_column,dm_custom_hud_data_row
-    call	TFT_standard_color
-    btfss   use_O2_sensor2
-    call    TFT_warnings_color
-    movff   o2_mv_sensor2+0,lo
-    movff   o2_mv_sensor2+1,hi
-    bsf     leftbind
-    output_16dp  .4         ; x.xx
-    bcf     leftbind
-    STRCAT_PRINT "mV  "
-    WIN_SMALL dm_custom_hud_sensor3_column,dm_custom_hud_data_row
-    call	TFT_standard_color
-    btfss   use_O2_sensor3
-    call    TFT_warnings_color
-    movff   o2_mv_sensor3+0,lo
-    movff   o2_mv_sensor3+1,hi
-    bsf     leftbind
-    output_16dp  .4         ; x.xx
-    bcf     leftbind
-    STRCAT  "mV  "
-    clrf    WREG
-    movff   WREG,buffer+.6                  ; limit string length to 6
-    STRCAT_PRINT    ""
-    goto	TFT_standard_color  ; and return...
+    goto	TFT_standard_color 					; and return...
+
 
     global  TFT_update_ppo2_sensors         ; Update Sensor data
 TFT_update_ppo2_sensors:
-    ; show three sensors
+;
+; Definition of the output:
+;
+;  sensorX		 use	 voting			 o2
+; _calibrated    _O2	 _logic        _ppo2        Output        Color
+;   _ok       _sensorX	_sensorX     _sensorX
+;-----------------------------------------------------------------------------------------------
+;    0  		-/-		  -/-		    -/-         "----"	  	  TFT_standard_color
+;    1			 0	      -/-           = 0	 	 o2_ppo2_sensorX  TFT_attention_color
+;    1			 0    	  -/-           > 0	 	 o2_ppo2_sensorX  TFT_disabled_color
+;    1		 	 1         0            -/-      o2_ppo2_sensorX  TFT_color_code warn_ppo2_hud + win_invert
+;    1    	 	 1         1            -/-      o2_ppo2_sensorX  TFT_color_code warn_ppo2_hud
+;
     bsf     leftbind
-    btfsc   use_O2_sensor1      ; Use Sensor 1?
-    bra     TFT_update_hud1     ; Yes
-    btfss   dive_hud1_displayed         ; Was the sensor shown?
-    bra     TFT_update_hud2             ; Yes, skip clear
-    bcf     dive_hud1_displayed         ; No, clear display flag
-    WIN_BOX_BLACK   dm_custom_hud_data_row, dm_customview_bot, dm_custom_hud_sensor1_column, dm_custom_hud_sensor2_column	; top, bottom, left, right
-	WIN_STD         dm_custom_hud_sensor1_column+.7, dm_custom_hud_data_row+.5
-   	call	TFT_standard_color
+	; sensor 1
+    btfsc   sensor1_calibrated_ok		; valid calibration?
+    bra     TFT_update_hud1b     		; yes
+	; no valid calibration
+	WIN_STD dm_custom_hud_sensor1_column+.7, dm_custom_hud_data_row+.5
+	call	TFT_standard_color
     STRCPY_PRINT "---"
-    bra     TFT_update_hud2 ; Skip Sensor 1
-TFT_update_hud1:
-    WIN_MEDIUM dm_custom_hud_sensor1_column,dm_custom_hud_data_row
-    movff   o2_ppo2_sensor1,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-    btfss   voting_logic_sensor1        ; Sensor within voting logic?       ; Make this configurable?
-    bsf     win_invert                  ; No, invert output...              ; Make this configurable?
-    btfss   voting_logic_sensor1
-    call    TFT_warnings_color          ; ... and draw in red
-    clrf    hi
-    output_16dp  .3         ; x.xx bar
+    bra     TFT_update_hud2a 			; continue with sensor 2
+TFT_update_hud1b:
+	; sensor has a valid calibration
+	WIN_MEDIUM dm_custom_hud_sensor1_column,dm_custom_hud_data_row
+    movff   o2_ppo2_sensor1,lo			; load ppO2 value into transfer storage for output
+    clrf    hi							; 
+	btfsc	use_O2_sensor1				; in use?
+	bra		TFT_update_hud1d			; yes
+	; valid calibration, but not in use
+	tstfsz	o2_ppo2_sensor1				; sensor value = 0?
+	bra		TFT_update_hud1c			; no
+	; valid calibration, not in use and value = 0
+	call    TFT_attention_color          ; output in yellow
+	bra		TFT_update_hud1e
+TFT_update_hud1c:
+	; sensor has valid calibration, is not in use and has a value > 0
+	call    TFT_disabled_color			; output in light blue
+	bra		TFT_update_hud1e
+TFT_update_hud1d:
+	; sensor has valid calibration and is in use
+	TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
+	btfsc	voting_logic_sensor1		; sensor value agrees with other sensor's values?
+	bra		TFT_update_hud1e			; yes
+	; valid calibration, in use, but value does not agree with other sensors
+	bsf     win_invert                  ; invert output
+TFT_update_hud1e:						
+	; all coloring is set up now, let's write the value to the display!
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
     STRCAT_PRINT ""
-    bcf     win_invert
-    bsf     dive_hud1_displayed         ; Set display flag
-TFT_update_hud2:
-    btfsc   use_O2_sensor2      ; Use Sensor 2?
-    bra     TFT_update_hud3     ; Yes
-    btfss   dive_hud2_displayed         ; Was the sensor shown?
-    bra     TFT_update_hud4             ; Yes, skip clear
-    bcf     dive_hud2_displayed         ; No, clear display flag
-    WIN_BOX_BLACK   dm_custom_hud_data_row, dm_customview_bot, dm_custom_hud_sensor2_column, dm_custom_hud_sensor3_column	; top, bottom, left, right
-    WIN_STD         dm_custom_hud_sensor2_column+.7, dm_custom_hud_data_row+.5
-   	call	TFT_standard_color
+    bcf		win_invert
+
+TFT_update_hud2a:						; sensor 2
+    btfsc   sensor2_calibrated_ok		; valid calibration?
+    bra     TFT_update_hud2b     		; yes
+	; no valid calibration
+	WIN_STD dm_custom_hud_sensor2_column+.7, dm_custom_hud_data_row+.5
+	call	TFT_standard_color
     STRCPY_PRINT "---"
-    bra     TFT_update_hud4 ; Skip Sensor 2
-TFT_update_hud3:
-    WIN_MEDIUM dm_custom_hud_sensor2_column,dm_custom_hud_data_row
-    movff   o2_ppo2_sensor2,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-    btfss   voting_logic_sensor2        ; Sensor within voting logic?       ; Make this configurable?
-    bsf     win_invert                  ; No, invert output...              ; Make this configurable?
-    btfss   voting_logic_sensor2
-    call    TFT_warnings_color          ; ... and draw in red
-    clrf    hi
-    output_16dp  .3         ; x.xx bar
+    bra     TFT_update_hud3a 			; continue with sensor 3
+TFT_update_hud2b:
+	; sensor has a valid calibration
+	WIN_MEDIUM dm_custom_hud_sensor2_column,dm_custom_hud_data_row
+    movff   o2_ppo2_sensor2,lo			; load ppO2 value into transfer storage for output
+    clrf    hi							; 
+	btfsc	use_O2_sensor2				; in use?
+	bra		TFT_update_hud2d			; yes
+	; valid calibration, but not in use
+	tstfsz	o2_ppo2_sensor2				; sensor value = 0?
+	bra		TFT_update_hud2c			; no
+	; valid calibration, not in use and value = 0
+	call    TFT_attention_color          ; output in yellow
+	bra		TFT_update_hud2e
+TFT_update_hud2c:
+	; sensor has valid calibration, is not in use and has a value > 0
+	call    TFT_disabled_color			; output in light blue
+	bra		TFT_update_hud2e
+TFT_update_hud2d:
+	; sensor has valid calibration and is in use
+	TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
+	btfsc	voting_logic_sensor2		; sensor value agrees with other sensor's vlaues?
+	bra		TFT_update_hud2e			; yes
+	; valid calibration, in use, but value does not agree with other sensors
+	bsf     win_invert                  ; invert output
+TFT_update_hud2e:						
+	; all coloring is set up now, let's write the value to the display!
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
     STRCAT_PRINT ""
-    bcf     win_invert
-    bsf     dive_hud2_displayed         ; Set display flag
-TFT_update_hud4:
-    btfsc   use_O2_sensor3      ; Use Sensor 3?
-    bra     TFT_update_hud5     ; Yes
-    btfss   dive_hud3_displayed         ; Was the sensor shown?
-    bra     TFT_update_hud6             ; Yes, skip clear
-    bcf     dive_hud3_displayed         ; No, clear display flag
-    WIN_BOX_BLACK   dm_custom_hud_data_row, dm_customview_bot, dm_custom_hud_sensor3_column, .159 ; top, bottom, left, right
-    WIN_STD         dm_custom_hud_sensor3_column+.7, dm_custom_hud_data_row+.5
-   	call	TFT_standard_color
+    bcf		win_invert
+
+TFT_update_hud3a:						; sensor 3
+    btfsc   sensor3_calibrated_ok		; valid calibration?
+    bra     TFT_update_hud3b     		; yes
+	; no valid calibration
+    WIN_STD dm_custom_hud_sensor3_column+.7, dm_custom_hud_data_row+.5
+	call	TFT_standard_color
     STRCPY_PRINT "---"
-    bra     TFT_update_hud6 ; Skip Sensor 3
-TFT_update_hud5:
-    WIN_MEDIUM dm_custom_hud_sensor3_column,dm_custom_hud_data_row
-    movff   o2_ppo2_sensor3,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-    btfss   voting_logic_sensor3        ; Sensor within voting logic?       ; Make this configurable?
-    bsf     win_invert                  ; No, invert output...              ; Make this configurable?
-    btfss   voting_logic_sensor3
-    call    TFT_warnings_color          ; ... and draw in red
-    clrf    hi
-    output_16dp  .3         ; x.xx bar
+    bra     TFT_update_hud4 			; done
+TFT_update_hud3b:
+	; sensor has a valid calibration
+	WIN_MEDIUM dm_custom_hud_sensor3_column,dm_custom_hud_data_row
+    movff   o2_ppo2_sensor3,lo			; load ppO2 value into transfer storage for output
+    clrf    hi							; 
+	btfsc	use_O2_sensor3				; in use?
+	bra		TFT_update_hud3d			; yes
+	; valid calibration, but not in use
+	tstfsz	o2_ppo2_sensor3				; sensor value = 0?
+	bra		TFT_update_hud3c			; no
+	; valid calibration, not in use and value = 0
+	call    TFT_attention_color          ; output in yellow
+	bra		TFT_update_hud3e
+TFT_update_hud3c:
+	; sensor has valid calibration, is not in use and has a value > 0
+	call    TFT_disabled_color			; output in light blue
+	bra		TFT_update_hud3e
+TFT_update_hud3d:
+	; sensor has valid calibration and is in use
+	TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
+	btfsc	voting_logic_sensor3		; sensor value agrees with other sensor's vlaues?
+	bra		TFT_update_hud3e			; yes
+	; valid calibration, in use, but value does not agree with other sensors
+	bsf     win_invert                  ; invert output
+TFT_update_hud3e:						
+	; all coloring is set up now, let's write the value to the display!
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
     STRCAT_PRINT ""
-    bcf     win_invert
-    bsf     dive_hud3_displayed         ; Set display flag
-TFT_update_hud6:
+    bcf		win_invert	
+	
+TFT_update_hud4:						; closure
     bcf     leftbind
-    goto	TFT_standard_color  ; and return...
-
-
-    global  TFT_surface_sensor             ; Update Sensor data in surface mode
+    goto	TFT_standard_color  		; and return...
+
+
+    global  TFT_surface_sensor			; Update Sensor data in surface mode
 TFT_surface_sensor:
     movf    hardware_flag,W
-    sublw   0x11        ; 2 with BLE
+    sublw   0x11						; 2 with BLE
     btfsc   STATUS,Z
-    return              ; Ignore for 0x11
-
+    return								; Ignore for 0x11
     ; show three sensors
     bsf     leftbind
     WIN_SMALL surf_hud_sensor1_column,surf_hud_sensor1_row
-    btfsc   use_O2_sensor1      ; Use Sensor 1?
-    bra     TFT_surface_sensor1 ; Yes
+	btfsc	sensor1_calibrated_ok
+    bra     TFT_surface_sensor1 		; Yes
    	call	TFT_standard_color
     STRCPY_PRINT "--- "
-    bra     TFT_surface_sensor2 ; Skip Sensor 1
+    bra     TFT_surface_sensor2			; Skip Sensor 1
 TFT_surface_sensor1:
     movff   o2_ppo2_sensor1,lo
     TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
     clrf    hi
-    output_16dp  .3         ; x.xx bar
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
     STRCAT_PRINT ""
 TFT_surface_sensor2:
     WIN_SMALL surf_hud_sensor2_column,surf_hud_sensor2_row
-    btfsc   use_O2_sensor2      ; Use Sensor 2?
-    bra     TFT_surface_sensor3 ; Yes
+	btfsc	sensor2_calibrated_ok
+    bra     TFT_surface_sensor3			; Yes
    	call	TFT_standard_color
     STRCPY_PRINT "--- "
-    bra     TFT_surface_sensor4 ; Skip Sensor 2
+    bra     TFT_surface_sensor4			; Skip Sensor 2
 TFT_surface_sensor3:
     movff   o2_ppo2_sensor2,lo
     TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
     clrf    hi
-    output_16dp  .3         ; x.xx bar
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
     STRCAT_PRINT ""
 TFT_surface_sensor4:
     WIN_SMALL surf_hud_sensor3_column,surf_hud_sensor3_row
-    btfsc   use_O2_sensor3      ; Use Sensor 3?
-    bra     TFT_surface_sensor5 ; Yes
+	btfsc	sensor3_calibrated_ok
+    bra     TFT_surface_sensor5 		; Yes
    	call	TFT_standard_color
     STRCPY_PRINT "--- "
-    bra     TFT_surface_sensor6 ; Skip Sensor 3
+    bra     TFT_surface_sensor6 		; Skip Sensor 3
 TFT_surface_sensor5:
     movff   o2_ppo2_sensor3,lo
     TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
     clrf    hi
-    output_16dp  .3         ; x.xx bar
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
     STRCAT_PRINT ""
 TFT_surface_sensor6:
     bcf     leftbind
     goto    TFT_standard_color; and return...
-    
+
+
     global TFT_sensor_mV 
 TFT_sensor_mV: 
     call    TFT_standard_color 
     bsf	    leftbind
     WIN_SMALL surf_mV_sensor_column,surf_mV_sensor1_row 
-    movff   o2_mv_sensor1+0,lo ; in 0.1mV steps 
-    movff   o2_mv_sensor1+1,hi ; in 0.1mV steps 
+    movff   o2_mv_sensor1+0,lo 			; in 0.1mV steps 
+    movff   o2_mv_sensor1+1,hi 			; in 0.1mV steps 
     STRCAT  "1: " 
-    output_16dp .4	; xxx.y mV 
+    output_16dp .4						; xxx.y mV 
     STRCAT_PRINT "mV "
     
     WIN_SMALL surf_mV_sensor_column,surf_mV_sensor2_row 
-    movff   o2_mv_sensor2+0,lo ; in 0.1mV steps
-    movff   o2_mv_sensor2+1,hi ; in 0.1mV steps 
+    movff   o2_mv_sensor2+0,lo 			; in 0.1mV steps
+    movff   o2_mv_sensor2+1,hi 			; in 0.1mV steps 
     STRCAT  "2: " 
-    output_16dp .4 ; xxx.y mV 
+    output_16dp .4 						; xxx.y mV 
     STRCAT_PRINT "mV "
 
     WIN_SMALL surf_mV_sensor_column,surf_mV_sensor3_row 
-    movff   o2_mv_sensor3+0,lo ; in 0.1mV steps 
-    movff   o2_mv_sensor3+1,hi ; in 0.1mV steps 
+    movff   o2_mv_sensor3+0,lo 			; in 0.1mV steps 
+    movff   o2_mv_sensor3+1,hi 			; in 0.1mV steps 
     STRCAT "3: " 
-    output_16dp .4 ; xxx.y mV 
+    output_16dp .4 						; xxx.y mV 
     STRCAT_PRINT "mV "
     bcf	    leftbind 
-    goto    TFT_standard_color ; and return...
+    goto    TFT_standard_color 			; and return...
+
 
     global TFT_sensor_surface_warning
 TFT_sensor_surface_warning: 
-    call    TFT_warnings_color     
-    movff   opt_x_s1+1,lo   ; into bank1
-    movf    lo,W	    ; when opt_x_s1 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
-    bz	    TFT_sensor_mV2  ; the sensor is not too bad yet for a warning 
+    call    TFT_warnings_color
+	btfss	sensor1_calibrated_ok		; do not show end of lifetime arrow if sensor failed calibration at all
+	bra		TFT_sensor_mV2
+    movff   opt_x_s1+1,lo				; into bank1
+    movf    lo,W						; when opt_x_s1 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
+    bz	    TFT_sensor_mV2				; the sensor is not too bad yet for a warning 
     WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor1_row-.5 
-    STRCPY_PRINT    "\xb8"  ; mark sensor as beeing at end of lifetime 
+    STRCPY_PRINT    "\xb8"				; mark sensor as being at end of lifetime 
 TFT_sensor_mV2:
-    movff   opt_x_s2+1,lo   ; into bank1
-    movf    lo,W	    ; when opt_x_s2 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
-    bz	    TFT_sensor_mV3  ; the sensor is not too bad yet for a warning 
+	btfss	sensor2_calibrated_ok		; do not show end of lifetime arrow if sensor failed calibration at all
+	bra		TFT_sensor_mV3
+    movff   opt_x_s2+1,lo				; into bank1
+    movf    lo,W						; when opt_x_s2 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
+    bz	    TFT_sensor_mV3				; the sensor is not too bad yet for a warning 
     WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor2_row-.5 
-    STRCPY_PRINT    "\xb8"  ; mark sensor as beeing at end of lifetime 
+    STRCPY_PRINT    "\xb8"	 			; mark sensor as being at end of lifetime 
 TFT_sensor_mV3:
-    movff   opt_x_s3+1,lo   ; into bank1
-    movf    lo,W	    ; when opt_x_s3 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
-    bz	    TFT_sensor_mV4  ; the sensor is not too bad yet for a warning 
+	btfss	sensor3_calibrated_ok		; do not show end of lifetime arrow if sensor failed calibration at all
+	bra		TFT_sensor_mV4
+    movff   opt_x_s3+1,lo				; into bank1
+    movf    lo,W						; when opt_x_s3 > 255 the sensor will just give 8 mV at a ppO2 of 0,21 any more 
+    bz	    TFT_sensor_mV4				; the sensor is not too bad yet for a warning 
     WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor3_row-.5
-    STRCPY_PRINT    "\xb8"  ; mark sensor as beeing at end of lifetime 
+    STRCPY_PRINT    "\xb8"				; mark sensor as beeing at end of lifetime 
 TFT_sensor_mV4:
-    goto    TFT_standard_color ; (And return) Done.
-    
-    global  TFT_menu_hud
-TFT_menu_hud:            ; Yes, update HUD data
-    call    compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
-    call    TFT_attention_color         ; show in yellow
-    bsf     leftbind
-    WIN_SMALL   surf_menu_sensor1_column,surf_menu_sensor1_row
-    movff   o2_ppo2_sensor1,lo
-    clrf    hi
-    output_16dp  .3         ; x.xx bar
-    PUTC    ","
-    movff   o2_mv_sensor1+0,lo      ; in 0.1mV steps
-    movff   o2_mv_sensor1+1,hi      ; in 0.1mV steps
-    output_16dp  .4         ; xxx.y mV
-    STRCAT  "mV "
-    clrf    WREG
-    movff   WREG,buffer+.10                  ; limit string length to 10
-    STRCAT_PRINT    ""
-    WIN_SMALL   surf_menu_sensor2_column,surf_menu_sensor2_row
-    movff   o2_ppo2_sensor2,lo
-    clrf    hi
-    output_16dp  .3         ; x.xx bar
-    PUTC    ","
-    movff   o2_mv_sensor2+0,lo      ; in 0.1mV steps
-    movff   o2_mv_sensor2+1,hi      ; in 0.1mV steps
-    output_16dp  .4         ; xxx.y mV
-    STRCAT  "mV "
-    clrf    WREG
-    movff   WREG,buffer+.10                  ; limit string length to 10
-    STRCAT_PRINT    ""
-    WIN_SMALL   surf_menu_sensor3_column,surf_menu_sensor3_row
-    movff   o2_ppo2_sensor3,lo
-    clrf    hi
-    output_16dp  .3         ; x.xx bar
-    PUTC    ","
-    movff   o2_mv_sensor3+0,lo      ; in 0.1mV steps
-    movff   o2_mv_sensor3+1,hi      ; in 0.1mV steps
-    output_16dp  .4         ; xxx.y mV
-    STRCAT  "mV "
-    clrf    WREG
-    movff   WREG,buffer+.10                  ; limit string length to 10
-    STRCAT_PRINT    ""
-    WIN_SMALL   surf_menu_sensor4_column,surf_menu_sensor4_row
-
-    btfss   analog_o2_input
-    bra     TFT_menu_hud_2  ; always for normal OSTC3
-    btfss   s8_digital
-    return                  ; Not for analog
-TFT_menu_hud_2:
-    STRCPY  "Batt:"
-    movff   hud_battery_mv+0,lo      ; in mV
-    movff   hud_battery_mv+1,hi      ; in mV
-    output_16dp  .2         ; x.yyy V
-    STRCAT_PRINT "V"
-    call    TFT_standard_color
-    bcf     leftbind
-    return
+    goto    TFT_standard_color 			; ...and return
+
 
     global  TFT_menu_calibrate
-TFT_menu_calibrate:     ; update mV data in calibration menu
-    call    compute_ppo2			; compute mv_sensorX and ppo2_sensorX arrays
+TFT_menu_calibrate:     				; update mV data in calibration menu
+	btfss   s8_digital					; =1: Digital I/O
+	bra     TFT_menu_calibrate_analog	; use analog
+TFT_menu_calibrate_wait:
+	btfss   new_s8_data_available       ; =1: New data frame recieved
+    bra		TFT_menu_calibrate_wait
+	call	compute_mvolts_for_all_sensors
+	bra		TFT_menu_calibrate_common
+TFT_menu_calibrate_analog:
+	call    get_analog_inputs
+TFT_menu_calibrate_common:
     call    TFT_attention_color         ; show in yellow
     bsf     leftbind
     WIN_SMALL   surf_menu_sensor1_column,surf_menu2_sensor1_row
-    movff   o2_mv_sensor1+0,lo      ; in 0.1mV steps
-    movff   o2_mv_sensor1+1,hi      ; in 0.1mV steps
-    output_16dp  .4         ; xxx.y mV
+    movff   o2_mv_sensor1+0,lo      	; in 0.1mV steps
+    movff   o2_mv_sensor1+1,hi      	; in 0.1mV steps
+    output_16dp  .4         			; xxx.y mV
     STRCAT_PRINT "mV  "
     WIN_SMALL   surf_menu_sensor2_column,surf_menu2_sensor2_row
-    movff   o2_mv_sensor2+0,lo      ; in 0.1mV steps
-    movff   o2_mv_sensor2+1,hi      ; in 0.1mV steps
-    output_16dp  .4         ; xxx.y mV
+    movff   o2_mv_sensor2+0,lo      	; in 0.1mV steps
+    movff   o2_mv_sensor2+1,hi      	; in 0.1mV steps
+    output_16dp  .4         			; xxx.y mV
     STRCAT_PRINT "mV  "
     WIN_SMALL   surf_menu_sensor3_column,surf_menu2_sensor3_row
-    movff   o2_mv_sensor3+0,lo      ; in 0.1mV steps
-    movff   o2_mv_sensor3+1,hi      ; in 0.1mV steps
-    output_16dp  .4         ; xxx.y mV
+    movff   o2_mv_sensor3+0,lo      	; in 0.1mV steps
+    movff   o2_mv_sensor3+1,hi      	; in 0.1mV steps
+    output_16dp  .4         			; xxx.y mV
     STRCAT_PRINT "mV  "
-;    WIN_SMALL   surf_menu2_ambient_column,surf_menu2_ambient_row
-;    PUTC    "@"
-;    SAFE_2BYTE_COPY amb_pressure, lo
-;    output_16
-;    STRCAT_TEXT tMBAR     ; mbar
-;    STRCAT_PRINT " "
     bcf	    leftbind
-    goto     TFT_standard_color	; and return...
-
-    	global	TFT_clock
+    goto	TFT_standard_color			; ...and return
+
+
+    global	TFT_clock
 TFT_clock:
 	WIN_SMALL  surf_clock_column,surf_clock_row
 TFT_clock2:                         ; called from divemode clock
@@ -1608,42 +1688,20 @@
 	call	TFT_convert_date		; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2	
 	STRCAT_PRINT " "
 	return
+
 ;=============================================================================
 
-    global  TFT_interval
-TFT_interval:
-	call	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call    TFT_warning_set_window_com
-	STRCPY	"Int:"
-	movff	surface_interval+0,lo
-	movff	surface_interval+1,hi
-	call	convert_time			; lo=mins, hi=hours
-	movf	hi,W
-	movff	lo,hi
-	movwf	lo					; exchange lo and hi
-	output_99x
-	PUTC    ':'
-	movff	hi,lo
-	output_99x
-    movlw   surf_warning_length         ; No, use surface string length
-    call    TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-	STRCAT_PRINT ""
-    bcf     win_invert
-    return
-
     global  TFT_surface_decosettings    ; Show all deco settings
 TFT_surface_decosettings:
-   ; Deco Mode
+	; Deco Mode
 	call	TFT_standard_color
+	WIN_SMALL surf_gaslist_column,surf_gaslist_row
+	STRCAT_PRINT  "ZH-L16"
     movff   char_I_deco_model,WREG
     iorwf   WREG
     bnz     TFT_surface_decosettings1
-
-    ; Display ZH-L16 sat/desat model.
-    TEXT_SMALL  surf_gaslist_column,surf_gaslist_row,  tZHL16
-    WIN_TOP surf_gaslist_row+(surf_gaslist_spacing*.1)
+	; Display ZH-L16 sat/desat model
+    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
     lfsr    FSR2,buffer
     movff   char_I_desaturation_multiplier,lo
     bsf     leftbind
@@ -1653,43 +1711,38 @@
     output_8
     STRCAT_PRINT  "%"
     bra     TFT_surface_decosettings2
-
-   ; Display ZH-L16-GF low/high model.
+   ; Display ZH-L16-GF low/high model
 TFT_surface_decosettings1:
-    TEXT_SMALL  surf_gaslist_column,surf_gaslist_row,  tZHL16GF
-    WIN_TOP surf_gaslist_row+(surf_gaslist_spacing*.1)
-    STRCPY_TEXT tGF         ; GF:
-    movff   char_I_GF_Low_percentage,lo
+    TEXT_SMALL  surf_gaslist_column+.43,surf_gaslist_row,tZHL16GF
+    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)
+    STRCPY_TEXT tGF  															; GF:
+	movff	opt_GF_low,lo
     output_99x
     STRCAT  "/"
-    movff   char_I_GF_High_percentage,lo
+	movff	opt_GF_high,lo
     output_99x
     STRCAT_PRINT  ""
-    ;bra     TFT_surface_decosettings2
-TFT_surface_decosettings2:
-    ; FTTS
-    WIN_TOP surf_gaslist_row+(surf_gaslist_spacing*.2)
+TFT_surface_decosettings2:														; fTTS
+    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)
     STRCPY_TEXT tFTTSMenu
     movff   char_I_extra_time,lo
     bsf     leftbind
     output_8
     STRCAT_TEXT_PRINT   tMinutes
-
     ; Last Stop
-    WIN_TOP surf_gaslist_row+(surf_gaslist_spacing*.3)
+    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)
     STRCPY_TEXT tLastDecostop
-    movff   char_I_depth_last_deco,lo
+	movff	opt_last_stop,lo
     output_8
     STRCAT_TEXT_PRINT   tMeters
-
     ; Salinity
-    WIN_TOP surf_gaslist_row+(surf_gaslist_spacing*.4)
+    WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4)
     STRCPY_TEXT tDvSalinity
     movff   opt_salinity,lo
     output_8
     bcf     leftbind
     STRCAT_TEXT_PRINT   tPercent
-    return                          ; Done.
+    return
 
 	global	TFT_debug_output
 TFT_debug_output:
@@ -1705,21 +1758,20 @@
     STRCAT_PRINT ""
     return
 
-    global  TFT_divetimeout                     ; Show timeout counter
+    global  TFT_divetimeout             ; Show timeout counter
 TFT_divetimeout:
 	call	TFT_warning_set_window		; Sets the row and column for the current warning
     tstfsz  WREG                        ; Is there room for the warning?
     return                              ; No
-    call    TFT_warning_set_window_com
     call	TFT_standard_color
     STRCPY  0x94                        ; "End of dive" icon
     movff	opt_diveTimeout,WREG	    ; in [min]
     mullw	.60
     movff	PRODL,sub_a+0
-    movff	PRODH,sub_a+1		    ; in [s]
+    movff	PRODH,sub_a+1		    	; in [s]
     movff   timeout_counter,sub_b+0
     movff   timeout_counter2,sub_b+1
-    call    subU16  ;  sub_c = sub_a - sub_b (with UNSIGNED values)
+    call    subU16  					;  sub_c = sub_a - sub_b (with UNSIGNED values)
 	movff	sub_c+0, lo
 	movff	sub_c+1, hi
 	call	convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
@@ -1730,137 +1782,153 @@
 	PUTC    ':'
 	movff	hi,lo
 	output_99x
-    movlw   dm_warning_length             ; Divemode string length
-    call    TFT_fillup_with_spaces     ; Fillup FSR2 with spaces (Total string length in #WREG)
+    movlw   dm_warning_length         	; Divemode string length
+    call    TFT_fillup_with_spaces     	; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
     bcf     win_invert
 	return
 
-	global	TFT_ftts
-TFT_ftts:
+	global	TFT_display_ftts
+TFT_display_ftts:
     movff   char_I_extra_time,lo
     tstfsz  lo
-    bra     $+4
-    return                              ; char_I_extra_time=0, return.
-
-    if dm_offset !=0
-        incf    warning_counter,F			; increase counter
-        call    TFT_warning_set_window		; Sets the row and column for the current warning
-        tstfsz  WREG                        ; Is there room for the warning?
-        return                              ; No
-        call    TFT_warning_set_window_com
-    else
-        btfsc   divemode_menu               ; Is the dive mode menu shown?
-        return                              ; Yes, return
-        call    TFT_standard_color
-        WIN_SMALL dm_ftts_value_column, dm_ftts_value_row
-    endif
-
-    movff   char_I_extra_time,lo
-    STRCPY  "@+"
+    bra     TFT_display_ftts_a
+    return                              	; char_I_extra_time=0, return.
+TFT_display_ftts_a:
+    movff   int_O_alternate_ascenttime+0,WREG
+    movff   int_O_alternate_ascenttime+1,hi
+    iorwf   hi,W                    		; int_O_alternate_ascenttime:2 == 0 ?
+    bnz     TFT_display_ftts_b
+    return  								; No deco, do nothing
+TFT_display_ftts_b:
+	btfsc	is_bailout						; check if we are in bailout mode
+	return									; YES - in bailout no fTTS will be computed, so nothing to display
+	incf    warning_counter,F				; increase counter
+	call    TFT_warning_set_window			; sets the row and column for the current warning
+	tstfsz  WREG                        	; is there room for the warning?
+	return                              	; NO
+ 	btfsc	FLAG_ccr_mode					; in CCR mode?
+	bra		TFT_display_ftts_1				; YES - print fTTS label
+	btfsc	FLAG_pscr_mode					; NO  -	in pSCR mode?
+	bra		TFT_display_ftts_1				; 		YES	- print fTTS label
+	bra		TFT_display_ftts_2				; 		NO  - must be OC then
+TFT_display_ftts_1:							; in CCR or pSCR mode
+	btfsc	is_bailout						; in bailout?
+	bra		TFT_display_ftts_2				; YES - print fTTS label
+	TSTOSS	opt_calc_asc_gasvolume			; NO  - bailout volume calculation requested?
+	bra		TFT_display_ftts_2				;		NO  - print fTTS label
+	STRCPY	"B/O"							; 		YES - print bailout label
+	bra		TFT_display_ftts_3
+TFT_display_ftts_2:							; OC or bailout
+	STRCPY	"@+"							; print fTTS label
+TFT_display_ftts_3:
+	movff   char_I_extra_time,lo
     bsf     leftbind
     output_8
     PUTC    ":"
-	movff   int_O_extra_ascenttime+0,lo
-    movff   int_O_extra_ascenttime+1,hi
-    movf    lo,W
-	iorwf   hi,W                    ; extra_ascenttime == 0 ?
-	bz      TFT_ftts2   			; No deco
-	movf    lo,W                    ; extra_ascenttime == 0xFFFF ?
-	andwf   hi,W
-	incf    WREG,w
-	bz      TFT_ftts2       		; Wait...
-	output_16
-	bcf         leftbind
+	movff   int_O_alternate_ascenttime+0,lo
+	movff   int_O_alternate_ascenttime+1,hi
+	btfss	hi,int_invalid_flag				; is the invalid flag set?
+	bra		TFT_display_ftts1				; NO
+	bcf		hi,int_invalid_flag				; YES - clear flag
+	call	TFT_disabled_color				; 		switch to disabled color
+TFT_display_ftts1:
+	movf    lo,W
+	iorwf   hi,W                    		; extra_ascenttime == 0 ?
+	bz      TFT_display_ftts2   			; YES - show dashes
+	btfsc	hi,int_not_yet_computed			; is the not-computed-yet flag set?
+	bra		TFT_display_ftts2				; YES
+	output_16								; NO
+	bcf		leftbind
     PUTC    "'"
-    movlw   dm_warning_length             ; Divemode string length
-    call    TFT_fillup_with_spaces     ; Fillup FSR2 with spaces (Total string length in #WREG)
+    movlw   dm_warning_length				; Divemode string length
+    call    TFT_fillup_with_spaces			; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
     bcf     win_invert
-	return
-
-TFT_ftts2:
+	goto	TFT_standard_color				; ...and return
+TFT_display_ftts2:
     STRCAT  "---"
 	bcf     leftbind
-    movlw   dm_warning_length             ; Divemode string length
-    call    TFT_fillup_with_spaces     ; Fillup FSR2 with spaces (Total string length in #WREG)
+    movlw   dm_warning_length				; Divemode string length
+    call    TFT_fillup_with_spaces 			; Fillup FSR2 with spaces (Total string length in #WREG)
     STRCAT_PRINT ""
     bcf     win_invert
-    return
+	goto	TFT_standard_color				; ...and return
 
 
 ;=============================================================================
-	
-    global    TFT_temp_surfmode
+
+	global	TFT_temp_surfmode
 TFT_temp_surfmode:
     call    TFT_divemask_color
-    WIN_SMALL   surf_temp_column+3*8,surf_temp_row
-    TSTOSS  opt_units                                           ; 0=°C, 1=°F
-    bra        TFT_temp_surfmode_metric
-    STRCAT_TEXT    tLogTunitF                            ; °F
-    bra        TFT_temp_surfmode_common
+	WIN_SMALL   surf_temp_column+3*8,surf_temp_row
+    TSTOSS  opt_units   					; 0=°C, 1=°F
+	bra		TFT_temp_surfmode_metric
+	STRCAT_TEXT	tLogTunitF					; °F
+	bra		TFT_temp_surfmode_common
 TFT_temp_surfmode_metric:
-    STRCAT_TEXT    tLogTunitC                            ; °C
+	STRCAT_TEXT	tLogTunitC					; °C
 TFT_temp_surfmode_common:
-    STRCAT_PRINT ""
-    WIN_SMALL   surf_temp_column,surf_temp_row
-    bra        TFT_temp_common
-   
-    global    TFT_temp_divemode
+	STRCAT_PRINT ""
+	WIN_SMALL   surf_temp_column,surf_temp_row
+	bra		TFT_temp_common
+	
+	global	TFT_temp_divemode
 TFT_temp_divemode:
-    btfsc   divemode_menu                                   ; Is the dive mode menu shown?
-    return                                                                  ; Yes, no update of temperature now
-    btfsc    blinking_better_gas                             ; blinking better Gas?
-    return                                                                  ; Yes, no update of temperature now
-    WIN_SMALL    dm_temp_column,dm_temp_row
-
+    bcf	    FLAG_TFT_temp_divemode
+    btfsc   divemode_menu					; Is the dive mode menu shown?
+    return									; Yes, no update of temperature now
+	btfsc	blinking_better_gas				; blinking better Gas?
+	return									; Yes, no update of temperature now
+	WIN_SMALL	dm_temp_column,dm_temp_row
 TFT_temp_common:
-    call    TFT_standard_color
-    SAFE_2BYTE_COPY    temperature, lo            ; get current temperature
-    TSTOSS  opt_units                                             ; 0=°C, 1=°F
-    bra        TFT_temp_common_1
-    call    convert_celsius_to_fahrenheit            ; convert value in lo:hi from celsius to fahrenheit
+	call    TFT_standard_color
+	SAFE_2BYTE_COPY temperature,lo			; get current temperature
+	TSTOSS  opt_units						; 0=°C, 1=°F
+	bra		TFT_temp_common_1
+	call	convert_celsius_to_fahrenheit	; convert value in lo:hi from celsius to fahrenheit
 TFT_temp_common_1:
-    rcall    TFT_convert_signed_16bit                ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    btfsc    neg_flag                                               ; is the temperature negative?
-    bra        TFT_temp_common_2                    ; YES - the minus sign has already been written
-    ; temp is positive, is it less then 10°C? 
-    tstfsz  hi
-    bra	    TFT_temp_common_1a			    ; >25,5°C, skip here
-    movlw   .100
-    cpfslt  lo
-    bra	    TFT_temp_common_1a			    ; >10,0°C, skip here
-    bsf	    leftbind
-    output_16dp	d'4'				    ; x.y°C
-    bcf	    leftbind
-    bra	    TFT_temp_common_3			    ; Done.
+	rcall	TFT_convert_signed_16bit		; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
+	btfsc	neg_flag						; is the temperature negative?
+	bra		TFT_temp_common_2				; YES - the minus sign has already been written
+	; temp is positive, is it less then 10°C? 
+	tstfsz  hi
+	bra		TFT_temp_common_1a				; >25.5°C, skip here
+	movlw	.100
+	cpfslt	lo
+	bra		TFT_temp_common_1a				; >10.0°C, skip here
+	bsf		leftbind
+	output_16dp	d'4'						; x.y°C
+	bcf		leftbind
+	bra		TFT_temp_common_3				; Done.
 TFT_temp_common_1a:
-    PUTC    " "                                                        ; NO  - write a space instead of the minus sign
+	PUTC	" "								; NO  - write a space instead of the minus sign
 TFT_temp_common_2:
-    bsf        ignore_digit5                                     ; ignore decimal
-    output_16_3                                                   ; output 0-999 without decimal -> writes ' ' - 99
-    bcf        ignore_digit5
-    movff    buffer+2,lo                                        ; get output from unit position
-    movlw    " "                                                      ; load code of the space character
-    cpfseq    lo                                                        ; is there a space sign on the unit position? (happens between +1 and -1)
-    bra        TFT_temp_common_3                     ; NO
-    movff    WREG,buffer+0                                 ; YES - replace potential minus sign with a space (temps from -0.9° to -0.1° else would appear as '- 0')
-    movlw    "0"                                                     ; load code of the zero character
-    movff    WREG,buffer+2                                 ; replace space with a zero
+	bsf		ignore_digit5					; ignore decimal
+	output_16_3								; output 0-999 without decimal -> writes ' ' - 99
+	bcf		ignore_digit5
+	movff    buffer+2,lo					; get output from unit position
+	movlw    " "							; load code of the space character
+	cpfseq	lo								; is there a space sign on the unit position? (happens between +1 and -1)
+	bra		TFT_temp_common_3				; NO
+	movff	WREG,buffer+0					; YES - replace potential minus sign with a space (temps from -0.9° to -0.1° else would appear as '- 0')
+	movlw	"0"								; load code of the zero character
+	movff	WREG,buffer+2					; replace space with a zero
 TFT_temp_common_3:
-    btfss    divemode                                            ; are we in dive mode?
-    bra        TFT_temp_common_5                    ; NO  - no unit to append
-    TSTOSS  opt_units                                          ; YES - check unit type: 0=°C, 1=°F
-    bra        TFT_temp_common_4                    ; go metric
-    STRCAT_TEXT    tLogTunitF                           ; append °F
-    bra        TFT_temp_common_5
+	btfss	divemode						; are we in dive mode?
+	bra		TFT_temp_common_5				; NO  - no unit to append
+	TSTOSS	opt_units						; YES - check unit type: 0=°C, 1=°F
+	bra		TFT_temp_common_4				; go metric
+	STRCAT_TEXT tLogTunitF					; append °F
+	bra		TFT_temp_common_5
 TFT_temp_common_4:
-    STRCAT_TEXT    tLogTunitC                          ; append °C   
+	STRCAT_TEXT tLogTunitC					; append °C   
 TFT_temp_common_5:
-    STRCAT_PRINT ""                                           ; output to screen
-    return                
-    
+	STRCAT_PRINT ""							; output to screen
+	return                
+	
 ;=============================================================================
+
     global  TFT_divemode_menu_cursor
 TFT_divemode_menu_cursor:
     WIN_BOX_BLACK   dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item1_column-.8, dm_menu_item1_column-.1
@@ -1868,11 +1936,11 @@
     call	TFT_standard_color
 
     movlw   dm_menu_item1_column-.8
-    btfsc   menupos,2       ; >3?
-    movlw   dm_menu_item4_column-.8  ; Yes
+    btfsc   menupos,2       			; >3?
+    movlw   dm_menu_item4_column-.8  	; Yes
     movff   WREG,win_leftx2
     
-    movff   menupos,lo                      ; Copy menu pos
+    movff   menupos,lo					; Copy menu pos
     movlw   dm_menu_item6_row
     dcfsnz  lo,F
     movlw   dm_menu_item1_row
@@ -1887,225 +1955,169 @@
     movff   WREG,win_top
     movlw   FT_SMALL
     movff   WREG,win_font
-    STRCPY_PRINT    "\xb7"          ; print cursor
-    return
-
-TFT_active_setpoint2:
-	movff	char_I_const_ppO2,lo
-    TFT_color_code  warn_ppo2_hud       ; With ppO2 [cbar] in lo
-	clrf	hi
-	bsf		leftbind
-	output_16dp d'3'
-    bcf		leftbind
-    STRCAT_TEXT tbar
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     TFT_active_setpoint2_a          ; No, skip
-    PUTC    "*"
-TFT_active_setpoint2_a:
-	STRCAT_PRINT ""
+    STRCPY_PRINT    "\xb7"          	; print cursor
     return
 
-TFT_active_setpoint:         ; Show setpoint
-	WIN_STD  dm_active_gas_column, dm_active_gas_row
-	call	TFT_standard_color
-    btfsc   is_bailout                  ; =1: Bailout
-    bra     TFT_active_setpoint_bail    ; Show "Bailout" instead of Setpoint
-
-    rcall   TFT_active_setpoint2        ; show setpoint (Non-Inverted in all cases)
-    
-    ; ****** new from R.L.******
-    btg	    blinking_setpoint		; Toggle blink bit...
-    
-    btfss   blinking_setpoint		; blink now?
-    bra	    TFT_active_setpoint_diluent ; no - Done. If no blink now, no need to do all checks
-    
-    btfsc   setpoint_fallback ; =1: Fallback to SP1 due to external O2 sensor failure
-    bra	    TFT_active_setpoint_b ; not clear, so process fallback case
-    
-    movff   char_I_const_ppO2, lo	; get current ppO2
-    movff   opt_ppO2_max, WREG		; PPO2 Max for MOD calculation and color coding 
-    cpfsgt  lo				; lo > opt_ppO2_max? 
-    Bra	    TFT_active_setpoint_d	; No ? continue with checking for low ppO2 condition 
-    Bra	    TFT_active_setpoint_e	; Yes ? set up blinking for ppO2 problem case
-    
-TFT_active_setpoint_d: 
-    movff   opt_ppO2_min, WREG		; PPO2 min for Sensors and color coding 
-    cpfslt  lo				; lo < opt_ppO2_min? 
-    bra	    TFT_active_setpoint_diluent ; No ? ppO2 is ok, continue with displaying diluent 
-    ;bra    TFT_active_setpoint_e	; Yes ? set up blinking for ppO2 problem case
-    
-TFT_active_setpoint_e:			; set up blinking for ppO2 problem case 
-    movlw   color_red			; blink in red 
-    call    TFT_set_color 
-    bra	    TFT_active_setpoint_c	; continue with blinking common part
-TFT_active_setpoint_b:			; set up blinking for fallback case 
-    movlw   color_yellow		; blink in yellow 
-    call    TFT_set_color 
-    ; bra TFT_active_setpoint_c ; just for clarity in the code
-TFT_active_setpoint_c: ; blinking common part    
-    ; ****** new from R.L.******
-    
-    bsf     win_invert              ; Set invert flag
-    WIN_STD dm_active_gas_column, dm_active_gas_row
-	movff	char_I_const_ppO2,lo
-	clrf	hi
-	bsf		leftbind
-	output_16dp d'3'
-    bcf		leftbind
-    STRCAT_TEXT tbar
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     TFT_active_setpoint_a            ; No, skip
-    PUTC    "*"
-TFT_active_setpoint_a:
-	STRCAT_PRINT ""
-	bcf     win_invert                  ; Reset invert flag
-
-TFT_active_setpoint_diluent:
-    call	TFT_standard_color
-    if dm_offset != 0
-    	WIN_SMALL  dm_active_dil_column, dm_active_dil_row
-    else
-    	WIN_STD    dm_active_dil_column, dm_active_dil_row
-    endif
-    movff   char_I_O2_ratio,lo          ; lo now stores O2 in %
-    movff   char_I_He_ratio,hi          ; hi now stores He in %
-    rcall   TFT_show_dil_divemode2      ; Show diluent  (Non-Inverted in all cases)
-
-	btfss	better_gas_available        ; =1: A better gas is available and a gas change is advised in divemode
-	return					; Done.
-	btg		blinking_better_gas         ; Toggle blink bit...
-	btfss	blinking_better_gas         ; blink now?
-	return                              ; No, Done.
-
-	movlw	color_yellow                ; Blink in yellow
-    call	TFT_set_color
-    bsf     win_invert              ; Set invert flag
-    if dm_offset != 0
-        WIN_SMALL   dm_active_dil_column, dm_active_dil_row
-    else
-        WIN_STD     dm_active_dil_column, dm_active_dil_row
-    endif
-    movff   char_I_O2_ratio,lo          ; lo now stores O2 in %
-    movff   char_I_He_ratio,hi          ; hi now stores He in %
-	rcall	TFT_show_dil_divemode2      ; Show gas
-	bcf     win_invert                  ; Reset invert flag
-	goto	TFT_standard_color; and return...
-
-TFT_show_dil_divemode2:
-    call    customview_show_mix         ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
-	STRCAT_PRINT ""
-	return
-
-TFT_active_setpoint_bail:
-    WIN_SMALL   dm_active_gas_column, dm_active_gas_row+.3  ; colides with diluent in FT_MEDIUM
-    STRCPY_TEXT_PRINT   tDiveBailout    ; Bailout
-    bra     TFT_active_setpoint_diluent
-
-TFT_show_pscr_mode_divemode:
-    WIN_TINY   dm_active_dil_column, dm_active_dil_row+.1
-    btfsc   is_bailout                  ; =1: Bailout
-    bra     TFT_show_pscr_mode_divemode_bail	; Show "Bailout" instead of PSCR
-    STRCPY_TEXT_PRINT   tDvPSCR		; PSCR
-    return
-    
-TFT_show_pscr_mode_divemode_bail:    
-    STRCPY_TEXT_PRINT   tDiveBailout    ; Bailout
-    return
-    
 	global	TFT_active_gas_divemode
 TFT_active_gas_divemode:				; Display gas/Setpoint
+    bcf	    FLAG_TFT_active_gas_divemode
     btfsc   divemode_menu               ; Is the dive mode menu shown?
     return                              ; Yes, return
-    btfsc	FLAG_apnoe_mode		; Ignore in Apnoe mode
+    btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
     return
     btfsc   FLAG_ccr_mode               ; in CCR mode?
-    bra     TFT_active_setpoint         ; Yes, show setpoint
-
-    call    TFT_standard_color
-
-    btfsc   FLAG_pscr_mode		; in PSCR mode?
-    rcall   TFT_show_pscr_mode_divemode ; Yes, show "PSCR"
-
-	WIN_STD dm_active_gas_column, dm_active_gas_row
-    movff   char_I_O2_ratio,lo          ; lo now stores O2 in %
-    movff   char_I_He_ratio,hi          ; hi now stores He in %
-	rcall	TFT_active_gas_divemode2    ; Show gas (Non-Inverted in all cases)
-	btfss	better_gas_available        ; =1: A better gas is available and a gas change is advised in divemode
-	return					; Done.
-
-	btg		blinking_better_gas         ; Toggle blink bit...
-	btfss	blinking_better_gas         ; blink now?
-	return                              ; No, Done.
-    call    TFT_attention_color         ; blink in yellow
-    bsf     win_invert                  ; Set invert flag
+    bra     TFT_active_setpoint         ; Yes, show setpoint and gas mix
+    btfsc   FLAG_pscr_mode				; in PSCR mode?
+    bra		TFT_active_setpoint         ; Yes, show setpoint and gas mix
+	call    TFT_standard_color
+	btfss	better_gas_available        ; check if a better gas is available and a gas change is advised in divemode
+	bra		TFT_active_gas_divemode2	; NO  - print in normal rendering
+	btg		blinking_better_gas         ; YES - toggle blink bit
+	btfss	blinking_better_gas         ; 		blink now?
+	bra		TFT_active_gas_divemode2	; 		NO  - print in normal rendering
+    call    TFT_attention_color         ; 		YES - blink in yellow
+    bsf     win_invert                  ; 			  set invert flag
+TFT_active_gas_divemode2:
     WIN_STD dm_active_gas_column, dm_active_gas_row
     movff   char_I_O2_ratio,lo          ; lo now stores O2 in %
     movff   char_I_He_ratio,hi          ; hi now stores He in %
-	rcall	TFT_active_gas_divemode2    ; Show gas (Non-Inverted in all cases)
-	bcf     win_invert                  ; Reset invert flag
+    call    customview_show_mix         ; put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	STRCAT_PRINT ""
+	bcf     win_invert                  ; reset invert flag
+	goto	TFT_standard_color			; ...and return
+
+TFT_active_setpoint:         			; Show setpoint
+    btfsc   is_bailout                  ; are we in bailout?
+    bra     TFT_active_setpoint_bail    ; YES - show "Bailout" instead of setpoint
+	movff	int_O_breathed_ppO2+0,lo
+	movff	int_O_breathed_ppO2+1,hi
+    TFT_color_code  warn_ppo2			; with ppO2 [cbar] in hi:lo
+    btg	    blinking_setpoint			; toggle blink bit...
+    btfss   blinking_setpoint			; blink now?
+    bra	    TFT_active_setpoint_print	; NO  - print ppO2 with normal rendering
+    btfsc   setpoint_fallback 			; YES - check if we are in fallback condition
+    bra	    TFT_active_setpoint_fallb	; 		YES - process fallback case
+    movff   int_O_breathed_ppO2+1,WREG	;		NO  - get flags again (have been cleared in hi:lo by TFT_color_code meanwhile)
+    btfss	WREG,int_warning_flag		;			  warning flag set?
+    bra	    TFT_active_setpoint_print	; 			  NO  - ppO2 is ok, print ppO2 with normal rendering
+    bra	    TFT_active_setpoint_com		; 			  YES - continue with blinking common part
+TFT_active_setpoint_fallb:				; set up fallback case 
+    movlw   color_yellow				; text in yellow 
+    call    TFT_set_color				; overwrite setting done by TFT_color_code warn_ppo2 
+TFT_active_setpoint_com:				; blinking common part    
+    bsf     win_invert              	; set invert flag
+TFT_active_setpoint_print:
+	WIN_STD dm_active_gas_column, dm_active_gas_row
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
+    STRCAT_TEXT tbar
+    movff   opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    sublw   .1							; opt_ccr_mode = 1 (Sensor)?
+    bnz     TFT_active_setpoint2_a		; NO  - skip
+    PUTC    "*"							; YES - add an astrix
+TFT_active_setpoint2_a:
+	STRCAT_PRINT ""
+	bcf     win_invert                  ; reset invert flag
+	call	TFT_standard_color			; revert to standard color
+	bra		TFT_active_setpoint_diluent ; continue with showing diluent
+TFT_active_setpoint_bail:
+	WIN_SMALL dm_active_gas_column, dm_active_gas_row+.3	; collides with diluent in FT_MEDIUM
 	call	TFT_standard_color
-	return                              ; Done.
-
-TFT_active_gas_divemode2:
-    call    customview_show_mix         ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
+	STRCPY_TEXT_PRINT tDiveBailout    						; Bailout
+TFT_active_setpoint_diluent:
+ 	btfss	better_gas_available        ; check if a better gas is available and a gas change is advised in divemode
+	bra		TFT_active_setpoint_diluent_show	; NO  - print in normal rendering
+	btg		blinking_better_gas         		; YES - toggle blink bit...
+	btfss	blinking_better_gas         		; blink now?
+	bra		TFT_active_setpoint_diluent_show	; NO  - print in normal rendering
+	movlw	color_yellow                		; YES - blink in yellow
+    call	TFT_set_color						;       set text color
+    bsf     win_invert              			; 		set invert flag
+TFT_active_setpoint_diluent_show:
+	WIN_SMALL dm_active_dil_column, dm_active_dil_row
+	movff	char_I_O2_ratio,lo          ; lo now stores O2 in %
+	movff	char_I_He_ratio,hi          ; hi now stores He in %
+	call	customview_show_mix         ; put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2
 	STRCAT_PRINT ""
+	bcf		win_invert                  ; reset invert flag
+	goto	TFT_standard_color			; ...and return
+
+
+	global	TFT_show_mode_divemode
+TFT_show_mode_divemode:
+	WIN_TINY dm_active_dil_column+.45, dm_active_dil_row+.3
+	btfsc	is_bailout					; in bailout?
+	return								; YES
+	btfsc	FLAG_ccr_mode				; NO  - in CCR mode?
+	bra		TFT_show_mode_divemode_ccr	;		YES	- write CCR label
+	btfsc	FLAG_pscr_mode				;		NO  - in pSCR mode?
+	bra		TFT_show_mode_divemode_pscr	;			  YES - write pSCR label
+	return								;			  NO  - done
+TFT_show_mode_divemode_ccr:
+	call	TFT_standard_color			; set standard color
+	STRCPY_TEXT_PRINT tDvCCR			; print "CCR"
+	return								; done
+TFT_show_mode_divemode_pscr:
+	call	TFT_standard_color			; set standard color
+	STRCPY_TEXT_PRINT tDvPSCR			; print "PSCR"
 	return
+	
 
 	global	TFT_display_decotype_surface
 TFT_display_decotype_surface:
 	WIN_STD  surf_decotype_column,surf_decotype_row
     WIN_COLOR	color_lightblue
-    movff   opt_dive_mode,lo        ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+    movff   opt_dive_mode,lo        		; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
     tstfsz  lo
     bra     TFT_display_decotype_surface2
 TFT_display_decotype_surface0:
-    STRCAT_TEXT_PRINT	tDvOC	; OC
+    STRCAT_TEXT_PRINT	tDvOC				; OC
     bra     TFT_display_decotype_exit
 TFT_display_decotype_surface2:
     decfsz  lo,F
     bra     TFT_display_decotype_surface3
-    STRCAT_TEXT_PRINT   tDvCC	; CC
+    STRCAT_TEXT_PRINT   tDvCC				; CC
     call	TFT_standard_color
 	WIN_TINY surf_decotype_column+.18,surf_decotype_row+.12
-
-    TSTOSS  opt_ccr_mode        ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
+    TSTOSS  opt_ccr_mode        			; =0: Fixed SP, =1: Sensor,  =2: Auto SP
     bra     TFT_display_decotype_cc_fixed
     ; Sensor mode or Auto
     movff   opt_ccr_mode,WREG
     sublw   .2
     bz      TFT_display_decotype_cc_auto
-    STRCPY_TEXT tCCRModeSensor ; Sensor
+    STRCPY_TEXT tCCRModeSensor 				; Sensor
     bra     TFT_display_decotype_cc_common
 TFT_display_decotype_cc_auto:
-    STRCPY_TEXT tCCRModeAutoSP  ; Auto SP
+    STRCPY_TEXT tCCRModeAutoSP  			; Auto SP
     bra     TFT_display_decotype_cc_common
 TFT_display_decotype_cc_fixed:
-    STRCPY_TEXT tCCRModeFixedSP ; Fixed SP
+    STRCPY_TEXT tCCRModeFixedSP 			; Fixed SP
 TFT_display_decotype_cc_common:
+	clrf    WREG
+	movff   WREG,buffer+.8					; limit string length to 8
     STRCAT_PRINT ""
     bra     TFT_display_decotype_exit
-
 TFT_display_decotype_surface3:
     decfsz  lo,F
     bra     TFT_display_decotype_surface4
 TFT_display_decotype_surface3_1:
-    STRCAT_TEXT_PRINT	tDvGauge	; Gauge
+    STRCAT_TEXT_PRINT	tDvGauge			; Gauge
     bra     TFT_display_decotype_exit
 TFT_display_decotype_surface4:
     decfsz  lo,F
     bra     TFT_display_decotype_surface5
 TFT_display_decotype_surface4_1:    
-    STRCAT_TEXT_PRINT	tDvApnea	; Apnea
+    STRCAT_TEXT_PRINT	tDvApnea			; Apnea
     bra     TFT_display_decotype_exit
 TFT_display_decotype_surface5:
-    STRCAT_TEXT_PRINT	tDvPSCR	    	; PSCR
+    STRCAT_TEXT_PRINT	tDvPSCR	    		; PSCR
 TFT_display_decotype_exit:
-    goto	TFT_standard_color  ; and return...
+    goto	TFT_standard_color  			; and return...
+
 
     global  TFT_display_decotype_surface1   ; Used from logbook!
-TFT_display_decotype_surface1:  ; Used from logbook!
+TFT_display_decotype_surface1:  			; Used from logbook!
     tstfsz  lo
     bra     TFT_display_decotype_surface1_2
     bra     TFT_display_decotype_surface0   ;OC
@@ -2124,10 +2136,10 @@
 
 ;=============================================================================
 
-    global  TFT_splist_surfmode     ; Show Setpoint list
+    global  TFT_splist_surfmode     	; Show Setpoint list
     extern  gaslist_strcat_setpoint
 TFT_splist_surfmode:
-    bsf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+    bsf     short_gas_decriptions   	; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
     ;SP 1
     WIN_SMALL surf_gaslist_column,surf_gaslist_row
     clrf    PRODL
@@ -2208,17 +2220,18 @@
 
 	global	TFT_depth
 TFT_depth:
+    bcf	    FLAG_TFT_depth
     SAFE_2BYTE_COPY rel_pressure, lo
-    call    adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
-
-    TFT_color_code  warn_depth			; Color-code the output
-    call TFT_depth_blink
+    call    adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+
+    TFT_color_code  warn_depth		; Color-code the output
+    rcall 	TFT_depth_blink
     WIN_LARGE   dm_depth_column, dm_depth_row
 
     TSTOSS  opt_units   			; 0=m, 1=ft
     bra     TFT_depth_metric
 ;TFT_depth_imperial
-    clrf    sub_a+1                     ; Display 0ft if lower then 30cm
+    clrf    sub_a+1                 ; Display 0ft if lower then 30cm
 	movlw	d'30'
 	movwf	sub_a+0
 	movff	hi,sub_b+1
@@ -2239,7 +2252,7 @@
 
 depth_less_0.3mtr_feet:
 	STRCAT_PRINT "0  "				; manual zero
-    bcf     win_invert                  ; Reset invert flag
+    bcf     win_invert              ; Reset invert flag
 	return
 
 TFT_depth_metric:
@@ -2247,9 +2260,9 @@
 	cpfslt	hi
     bra		depth_greater_99_84mtr
 
-	btfsc	depth_greater_100m			; Was depth>100m during last call
-	rcall	TFT_clear_depth             ; Yes, clear depth area
-	bcf		depth_greater_100m			; Do this once only...
+	btfsc	depth_greater_100m		; Was depth>100m during last call
+	rcall	TFT_clear_depth         ; Yes, clear depth area
+	bcf		depth_greater_100m		; Do this once only...
 
 	movlw	.039
 	cpfslt	hi
@@ -2292,11 +2305,13 @@
 
 	; .1m in MEDIUM font
 	WIN_MEDIUM	dm_depth_dm_column, dm_depth_dm_row
-	TFT_color_code	warn_depth			; Color-code the output
-
+
+	; TODO - check if needed, depth should still be in hi:lo
     SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
-
+	call	adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar]
+
+	TFT_color_code	warn_depth		; Color-code the output
+	
 	PUTC    "."
 	movlw	HIGH	d'30'			; Display 0.0m if lower then 30cm
 	movwf	sub_a+1
@@ -2313,30 +2328,30 @@
 	bsf		ignore_digit5
 	output_16dp	d'0'
 	STRCAT_PRINT ""					; Display decimeters
-    bcf     win_invert                  ; Reset invert flag
+    bcf     win_invert              ; Reset invert flag
 	WIN_FONT 	FT_SMALL
 	return
 
 depth_less_0.3mtr:
 	STRCAT_PRINT "0"				; Display 0.0m manually
-    bcf     win_invert                  ; Reset invert flag
+    bcf     win_invert              ; Reset invert flag
 	WIN_FONT 	FT_SMALL
 	return
 
-depth_greater_99_84mtr:			; Display only in full meters
+depth_greater_99_84mtr:				; Display only in full meters
 	btfss	depth_greater_100m		; Is depth>100m already?
 	rcall	TFT_clear_depth			; No, clear depth area and set flag
     TFT_color_code	warn_depth
 	; Depth is already in hi:lo
 	; Show depth in Full meters
-	; That means ignore figure 4 and 5
+	; That means ignore digit 4 and 5
 	lfsr    FSR2,buffer
 	bsf		ignore_digit4
 	bsf		leftbind
 	output_16
 	bcf		leftbind
     STRCAT_PRINT ""					; Display full meters only
-    bcf     win_invert                  ; Reset invert flag
+    bcf     win_invert              ; Reset invert flag
 	WIN_FONT 	FT_SMALL
 	return
 
@@ -2346,7 +2361,7 @@
 	return
 
 TFT_depth_blink:
-    TSTOSS  opt_modwarning			; 0=standard, 1=blink
+    TSTOSS  opt_modwarning				; 0=standard, 1=blink
     return
 
     ; check if previous cycle had the blinking warning or not
@@ -2373,13 +2388,13 @@
     bsf     blinking_depth_prev                 ; set prev flag
     ; and set toggle and invert if required
     btfss   blinking_depth_toggle               ; do we have the toggle set?
-    bra    TFT_depth_blink_set                  ; No:  set inverse,   do color_box, set flag
-    bra    TFT_depth_blink_reset                ; Yes: clear inverse, do black box, reset flag
+    bra		TFT_depth_blink_set                 ; No:  set inverse,   do color_box, set flag
+    bra		TFT_depth_blink_reset               ; Yes: clear inverse, do black box, reset flag
 
 TFT_depth_blink_prevwarn_nowarn:
     ; we had warning, but not now... (e.g. ascended or switched to better gas)
     ; reset the previous cycle flag for the next cycle...
-    bcf     blinking_depth_prev         ; reset prev flag
+    bcf     blinking_depth_prev         		; reset prev flag
     ; clear it - just in case if we had a blinked before
     bra    TFT_depth_blink_reset                ; Yes: clear inverse, do black box, reset flag
 
@@ -2416,7 +2431,7 @@
 ;=============================================================================
 
     global  TFT_custom_text
-TFT_custom_text:            ; Show the custom text
+TFT_custom_text:            			; Show the custom text
     lfsr        FSR0, opt_name          ; Source
     WIN_SMALL   surf_customtext_column,surf_customtext_row1 ; First row
     rcall       TFT_custom_text_2       ; Show up to 12 chars and print
@@ -2439,8 +2454,8 @@
     return                              ; No, all done.
     lfsr        FSR0, opt_name+.48      ; Source
     WIN_SMALL   surf_customtext_column,surf_customtext_row5 ; Fifth row
-    bra		TFT_custom_text_2       ; Show up to 12 chars and print ; and return...
-    
+    bra		TFT_custom_text_2       	; Show up to 12 chars and print ; and return...
+
 
 TFT_custom_text_2:
     lfsr        FSR2, buffer            ; destination
@@ -2459,6 +2474,7 @@
 
 
 ;=============================================================================
+
 	global	TFT_update_surf_press
 TFT_update_surf_press:
     WIN_SMALL   surf_press_column,surf_press_row
@@ -2468,21 +2484,21 @@
 	movff	hi,sub_a+1
 	movff	last_surfpressure_30min+0,sub_b+0
 	movff	last_surfpressure_30min+1,sub_b+1
-	call	subU16					; sub_c = sub_a - sub_b
-	btfsc	neg_flag				; Pressure lower?
-	rcall	update_surf_press2		; Yes, test threshold
-
-	tstfsz	sub_c+1					; >255mbar difference?
-	bra		update_surf_press_common; Yes, display!
-	movlw	d'10'					; 10mbar noise suppression
+	call	subU16								; sub_c = sub_a - sub_b
+	btfsc	neg_flag							; Pressure lower?
+	rcall	update_surf_press2					; Yes, test threshold
+	tstfsz	sub_c+1								; >255mbar difference?
+	bra		update_surf_press_common			; Yes, display!
+	movlw	d'11'								; 10mbar noise suppression
 	subwf	sub_c+0,W
 	btfsc	STATUS,C
-	bra		update_surf_press_common; Yes, display!
+	bra		update_surf_press_common			; Yes, display!
     SAFE_2BYTE_COPY last_surfpressure_30min, lo	; Overwrite with stable value...
-
 update_surf_press_common:
+	movff	lo,int_I_pres_surface+0				; copy displayed value to C code to have pressure displayed
+	movff	hi,int_I_pres_surface+1				; and pressure used for desaturation & no-fly time in sync
 	output_16
-	; Show only 4 figures
+	; Show only 4 digits
 	movff	buffer+1,buffer+0
 	movff	buffer+2,buffer+1
 	movff	buffer+3,buffer+2
@@ -2492,7 +2508,7 @@
 	STRCAT_PRINT  ""
     call    TFT_divemask_color
 	WIN_SMALL   surf_press_column+4*8,surf_press_row
-    STRCPY_TEXT_PRINT  tMBAR        ; mbar
+    STRCPY_TEXT_PRINT  tMBAR        			; mbar
 	return
 
 update_surf_press2:
@@ -2500,16 +2516,14 @@
 	movff	hi,sub_b+1
 	movff	last_surfpressure_30min+0,sub_a+0
 	movff	last_surfpressure_30min+1,sub_a+1
-	goto	subU16					; sub_c = sub_a - sub_b	; and return...
-
+	goto	subU16								; sub_c = sub_a - sub_b	; and return...
 
 ;=============================================================================
 
 	global	TFT_update_batt_voltage
 TFT_update_batt_voltage:
     movff   batt_percent,lo         ; Get battery percent
-    TFT_color_code		warn_battery; Color-code battery percent
-
+    TFT_color_code warn_battery		; Color-code battery percent
     ; Setup charge indicator
     btfsc   cc_active
     bsf     win_invert
@@ -2519,7 +2533,6 @@
     movlw   color_green
     btfsc   cc_active
     call	TFT_set_color
-
 	WIN_TINY batt_percent_column,batt_percent_row
 	bsf		leftbind
 	output_8
@@ -2531,11 +2544,11 @@
     bcf     win_invert
 	call	TFT_standard_color
 	WIN_TINY batt_voltage_column,batt_voltage_row
-        movff   battery_type,lo		; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
+    movff   battery_type,lo			; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
 	PUTC	"T"
 	bsf	leftbind
-        output_8
-        PUTC    ":"
+    output_8
+    PUTC    ":"
 	movff	batt_voltage+0,lo
 	movff	batt_voltage+1,hi
 	output_16dp	.2
@@ -2677,40 +2690,76 @@
 
 	global	TFT_date
 TFT_date:
-    WIN_SMALL  surf_date_column,surf_date_row				; Init new Wordprocessor
+    WIN_SMALL  surf_date_column,surf_date_row	; Init new Wordprocessor
 	call	TFT_standard_color
 	movff	month,convert_value_temp+0
 	movff	day,convert_value_temp+1
 	movff	year,convert_value_temp+2
-	call	TFT_convert_date		; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2	
+	call	TFT_convert_date					; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2	
 	STRCAT_PRINT ""
 	return
 
 ;=============================================================================
 
-	global	TFT_max_pressure
-TFT_max_pressure:
-	btfsc	FLAG_apnoe_mode						; different display in apnoe mode
-	bra		TFT_max_pressure_apnoe
-TFT_max_pressure2:
+	global	TFT_max_depth_alternative
+TFT_max_depth_alternative:	
+	bcf	FLAG_TFT_max_depth_alt
+	; The "mask"
+	call    TFT_divemask_color
+	WIN_TINY    dm_mask_depth_column, dm_max_alt_row-.14
+	STRCPY_TEXT_PRINT tMaxDepth
+
+	; The max. depth
+	SAFE_2BYTE_COPY max_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call    TFT_standard_color
+	TSTOSS  opt_units   				; 0=m, 1=ft
+	bra	TFT_max_depth_alt_metric
+;TFT_max_depth_alt_imperial:
+TFT_max_depth_alt_metric:
+	WIN_LARGE	dm_max_alt_column,dm_max_alt_row
+	bsf     ignore_digit4				; no 0.1m
+	output_16
+	STRCAT_PRINT ""
+	
+	WIN_MEDIUM	dm_max_dm_alt_column,dm_max_alt_row+.25
+	SAFE_2BYTE_COPY max_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	PUTC    "."
+	movlw	d'4'
+	movwf	ignore_digits
+	bsf	ignore_digit5
+	bsf     leftbind
+	output_16dp	d'0'
+	STRCAT_PRINT ""						; Display decimeters
+	bcf     leftbind
+	return
+   
+	
+	global	TFT_max_depth
+TFT_max_depth:
+	bcf	FLAG_TFT_max_depth
+	btfsc	FLAG_apnoe_mode				; different display in apnoe mode
+	bra	TFT_max_depth_apnoe
+TFT_max_depth2:
     SAFE_2BYTE_COPY max_pressure, lo
-TFT_max_pressure3:
-	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
-    TSTOSS  opt_units   			; 0=m, 1=ft
-	bra		TFT_max_pressure2_metric
-;TFT_max_pressure2_imperial
-	call	convert_mbar_to_feet              	; convert value in lo:hi from mbar to feet
+TFT_max_depth3:
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+    TSTOSS  opt_units   				; 0=m, 1=ft
+	bra		TFT_max_depth2_metric
+;TFT_max_depth2_imperial:
+	call	convert_mbar_to_feet        ; convert value in lo:hi from mbar to feet
 	WIN_MEDIUM	dm_max_depth_column, dm_max_depth_row
-	TSTOSS  opt_vsigraph			; 0=skip, 1=draw
+	TSTOSS  opt_vsigraph				; 0=skip, 1=draw
 	WIN_MEDIUM	dm_max_depth_column_nvsi, dm_max_depth_row
 	call	TFT_standard_color
 	output_16_3
 	STRCAT_PRINT ""
 	return
 
-TFT_max_pressure2_metric:
+TFT_max_depth2_metric:
 	WIN_MEDIUM	dm_max_depth_column, dm_max_depth_row
-	TSTOSS  opt_vsigraph			; 0=skip, 1=draw
+	TSTOSS  opt_vsigraph				; 0=skip, 1=draw
 	WIN_MEDIUM	dm_max_depth_column_nvsi, dm_max_depth_row
     call    TFT_standard_color
 
@@ -2718,9 +2767,9 @@
 	cpfslt	hi
     bra		max_depth_greater_99_84mtr
 
-	btfsc	max_depth_greater_100m			; Was depth>100m during last call
-	rcall	TFT_clear_max_depth             ; Yes, clear depth area
-	bcf		max_depth_greater_100m			; Do this once only...
+	btfsc	max_depth_greater_100m		; Was depth>100m during last call
+	rcall	TFT_clear_max_depth			; Yes, clear depth area
+	bcf		max_depth_greater_100m		; Do this once only...
 
 	movlw	.039
 	cpfslt	hi
@@ -2771,7 +2820,7 @@
 	WIN_SMALL	dm_max_depth_dm_column_nvsi, dm_max_depth_dm_row
 
     SAFE_2BYTE_COPY max_pressure, lo
-	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 
 	PUTC    "."
 
@@ -2780,7 +2829,7 @@
 	bsf		ignore_digit5
     bsf     leftbind
 	output_16dp	d'0'
-	STRCAT_PRINT ""					; Display decimeters
+	STRCAT_PRINT ""						; Display decimeters
     bcf     leftbind
 	return
 
@@ -2795,21 +2844,21 @@
 	bsf		leftbind
 	output_16
 	bcf		leftbind
-    STRCAT_PRINT ""					; Display full meters only
+    STRCAT_PRINT ""						; Display full meters only
 	WIN_FONT 	FT_SMALL
 	return
 
-TFT_clear_max_depth:            			; No, clear max. depth area and set flag
+TFT_clear_max_depth:            		; No, clear max. depth area and set flag
     WIN_BOX_BLACK   dm_max_depth_row, dm_max_depth_bot, dm_max_depth_column, dm_max_depth_rgt    ;top, bottom, left, right
-	bsf		max_depth_greater_100m			; Set Flag
+	bsf		max_depth_greater_100m		; Set Flag
 	return
 
 
-TFT_max_pressure_apnoe:
-	btfss	FLAG_active_descent				; Are we descending?			
-	bra		TFT_max_pressure2				; Yes, show normal max.
+TFT_max_depth_apnoe:
+	btfss	FLAG_active_descent			; Are we descending?			
+	bra		TFT_max_depth2			; Yes, show normal max.
 	SAFE_2BYTE_COPY apnoe_max_pressure, lo
-	bra		TFT_max_pressure3				; Show apnoe_max_pressure as max. depth
+	bra		TFT_max_depth3			; Show apnoe_max_pressure as max. depth
 
 	global	TFT_display_apnoe_last_max
 TFT_display_apnoe_last_max:
@@ -2819,11 +2868,11 @@
 
 	call	TFT_standard_color
 	SAFE_2BYTE_COPY max_pressure, lo
-    call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mbar]
-    TSTOSS  opt_units   			; 0=m, 1=ft
+    call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+    TSTOSS  opt_units   				; 0=m, 1=ft
 	bra		TFT_display_apnoe_last_m_metric
 ;TFT_display_apnoe_last_max_imperial
-	call	convert_mbar_to_feet              	; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet        ; convert value in lo:hi from mbar to feet
 	WIN_MEDIUM	dm_apnoe_last_max_depth_column, dm_apnoe_last_max_depth_row
 	output_16
 	STRCAT_PRINT ""
@@ -2837,22 +2886,23 @@
 	return
 
 ;=============================================================================
+
 	global	TFT_divemins
 TFT_divemins:
+	bcf	FLAG_TFT_divemins	    	; Clear flag
 	movff	divemins+0,lo
 	movff	divemins+1,hi
-	
 
     ; Already showing divemins > 99min
-	btfsc	no_more_divesecs	; Ignore seconds?
+	btfsc	no_more_divesecs		; Ignore seconds?
 	bra     TFT_divemins2           ; Show minutes only
 
 	tstfsz	hi                      ; hi = 0?
-	bra	TFT_divemins_clr	; No, show mins only
+	bra	TFT_divemins_clr			; No, show mins only
 
 	movlw	.99
 	cpfsgt	lo                      ; bigger than 99?
-	bra	TFT_divemins1		; No show mins:secs
+	bra	TFT_divemins1				; No show mins:secs
 
 TFT_divemins_clr:
 	; Yes, remove second display for the rest of the dive and clear seconds
@@ -2865,9 +2915,7 @@
     ; Print out the minutes, up to 99min, only 2chars !
 	call	TFT_standard_color
 	WIN_MEDIUM	dm_divetime_column, dm_divetime_row
-	bcf	leftbind
 	output_99                       ; displays only last two figures from a 8Bit value (0-99)
-	bcf     leftbind
 	STRCAT_PRINT ""                 ; Show minutes in large font
 
     ; Print out the seconds
@@ -2875,7 +2923,7 @@
 	PUTC    ':'
 	bsf	leftbind
 	movff   divesecs,lo
-	output_99x			; displays only last two figures from a 8Bit value with leading zero (00-99) 
+	output_99x						; displays only last two figures from a 8Bit value with leading zero (00-99) 
 	bcf     leftbind
 	STRCAT_PRINT ""                 ; Show seconds in small font
 	return
@@ -2886,10 +2934,31 @@
 	WIN_MEDIUM	dm_divetime_minsonly_column, dm_divetime_row
         bcf		leftbind
         output_16_4
-        STRCAT_PRINT ""                 ; Show minutes in large font
+        STRCAT_PRINT ""             ; Show minutes in large font
         return
+	
+	global	TFT_divemins_alternative
+TFT_divemins_alternative:
+    bcf	    FLAG_TFT_divemins	    ; Clear flag
+    call    TFT_standard_color
+    ; Print out the minutes (0-999) in large
+    WIN_LARGE	dm_divetime_alt_column, dm_divetime_alt_row
+    movff	divemins+0,lo
+    movff	divemins+1,hi
+    output_16_3                     ; limit to 999 and display only (0-999)
+    STRCAT_PRINT ""                 ; Show minutes
+    ; Print out the seconds in medium
+    WIN_MEDIUM	dm_divetime_alt_column+.60, dm_divetime_alt_row+.25
+    PUTC    ":"
+    bsf	    leftbind
+    movff   divesecs,lo
+    output_99x						; displays only last two figures from a 8Bit value with leading zero (00-99) 
+    bcf     leftbind
+    STRCAT_PRINT ""                 ; Show seconds in small font
+    return
 
 ;=============================================================================
+
 	global	TFT_display_apnoe_surface
 TFT_display_apnoe_surface:
     call    TFT_divemask_color
@@ -2909,18 +2978,18 @@
 	global	TFT_apnoe_clear_surface
 TFT_apnoe_clear_surface:
 	; Clear Surface timer....
-	WIN_BOX_BLACK   dm_apnoe_surface_time_text_row, .239, dm_apnoe_surface_time_text_col, .159                 ;top, bottom, left, right
+	WIN_BOX_BLACK   dm_apnoe_surface_time_text_row, .239, dm_apnoe_surface_time_text_col, .159	;top, bottom, left, right
 	return
 
 	global	TFT_display_apnoe_descent
-TFT_display_apnoe_descent:		; Descent divetime
+TFT_display_apnoe_descent:			; Descent divetime
 	movff	apnoe_mins,lo
     clrf    hi
 	WIN_MEDIUM	dm_divetime_apnoe_column, dm_divetime_apnoe_row
 	output_16_3                     ; displays only last three figures from a 16Bit value (0-999)
 	call	TFT_standard_color
 	STRCAT_PRINT ""                 ; Show minutes in large font
-	WIN_SMALL   dm_divetime_apnoe_secs_column, dm_divetime_apnoe_secs_row   		; left position for two sec figures
+	WIN_SMALL   dm_divetime_apnoe_secs_column, dm_divetime_apnoe_secs_row	; left position for two sec figures
 	PUTC    ':'
 	bsf		leftbind
 	movff	apnoe_secs,lo
@@ -2949,11 +3018,11 @@
 	
 ;=============================================================================
 ; Writes ostc #Serial and Firmware version in splash screen
-;
+
 	global	TFT_serial
 TFT_serial:		
     WIN_TINY	.5,.225
-    STRCPY  "OSTC"                    ; Won't translate that...
+    STRCPY  "OSTC"                  ; Won't translate that...
 
     movlw   0x0A
     cpfseq  hardware_flag
@@ -3002,15 +3071,14 @@
         WIN_LEFT    .160-4*9/2          ; Right pad.
         STRCPY_TEXT_PRINT tBeta
     endif
-    call    TFT_standard_color
+	call    TFT_standard_color
     bcf	    win_invert
     return
-
-
 	
 
 ;=============================================================================
 ; For the Information menu: append firmware x.yy version.
+
     global info_menu_firmware
     extern  tFirmware
 info_menu_firmware:
@@ -3055,6 +3123,7 @@
 
 ;-----------------------------------------------------------------------------
 ; For the Information menu: append serial number 
+
     global  info_menu_serial
     extern  tSerial
 info_menu_serial:
@@ -3077,6 +3146,7 @@
 
 ;-----------------------------------------------------------------------------
 ; For the Information menu: Append total dives
+
     global  info_menu_total_dives
     extern  tTotalDives
 info_menu_total_dives:
@@ -3101,8 +3171,8 @@
     movff   batt_voltage+1,hi
     movff   batt_voltage+0,lo
 	bsf		leftbind
-	output_16dp .2      ; x.xxx
-    STRCAT  "V (T"
+	output_16dp .2      		; x.xxx
+    STRCAT  "V(T"
     movff   battery_type,lo		; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
     output_8
     bcf		leftbind
@@ -3122,15 +3192,15 @@
     movlw   LOW	    .3600
     movwf   xB+0
     movlw   HIGH    .3600
-    movwf   xB+1		; One day = 3600s
-    call    div32x16	; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+    movwf   xB+1			; One day = 3600s
+    call    div32x16		; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
     ;xC+0:xC+1 -> Full hours
     movff   xC+1,xA+1
     movff   xC+0,xA+0
     clrf    xB+1
     movlw   .24
     movwf   xB+0
-    call    div16x16	;xA/xB=xC with xA+0 as remainder 	
+    call    div16x16		; xA/xB=xC with xA+0 as remainder 	
     movff   xC+0,lo
     movff   xC+1,hi	; Full days
     bsf	    leftbind
@@ -3182,49 +3252,61 @@
 
 ;-----------------------------------------------------------------------------
 ; ppO2 menu
+
 	global	divesets_ppo2_max
     extern  tPPO2Max
     extern  tbar
 divesets_ppo2_max:
     lfsr    FSR1,tPPO2Max
     call    strcat_text
-	movff	opt_ppO2_max,lo
+	movff	char_I_ppO2_max,lo
     movlw   ppo2_warning_high
+
 divesets_ppo2_common:
-    movwf   up                  ; Save default value
+    movwf   up                  	; Save default value
 	clrf	hi
 	bsf		leftbind
 	output_16dp d'3'
     bcf		leftbind
     lfsr    FSR1,tbar
     call    strcat_text
-
-    movf    up,W                ; Default value
-    cpfseq  lo                  ; Current value
-    bra     divesets_ppo2_common2 ; Not default, add *
-    return                      ; Default, Done.
+    movf    up,W                	; Default value
+    cpfseq  lo                  	; Current value
+    bra     divesets_ppo2_common2 	; Not default, add *
+    return                      	; Default, Done.
 divesets_ppo2_common2:
     PUTC    "*"
-    return                      ; Done.
+    return                      	; Done.
+
 
 	global	divesets_ppo2_min
     extern  tPPO2MIN
 divesets_ppo2_min:
     lfsr    FSR1,tPPO2MIN
     call    strcat_text
-	movff	opt_ppO2_min,lo
+	movff	char_I_ppO2_min,lo
     movlw   ppo2_warning_low
     bra     divesets_ppo2_common
 
+
 	global	divesets_ppo2_max_deco
     extern  tPPO2DECO
 divesets_ppo2_max_deco:
     lfsr    FSR1,tPPO2DECO
     call    strcat_text
-	movff	opt_ppO2_max_deco,lo
+	movff	char_I_ppO2_max_deco,lo
     movlw   ppo2_warning_high_deco
     bra     divesets_ppo2_common
-    
+	
+
+	global	divesets_ppo2_min_cc
+	extern	tPPO2MINCC
+divesets_ppo2_min_cc:
+	lfsr	FSR1,tPPO2MINCC
+	call	strcat_text
+	movff	char_I_ppO2_min_loop,lo
+	movlw	ppo2_warning_low_cc
+	bra		divesets_ppo2_common
     
 ;=============================================================================
 
@@ -3232,202 +3314,340 @@
 TFT_clear_warning_text:
     btfss   divemode                            ; in divemode?
     bra     TFT_clear_warning_text2             ; No, setup for surface mode
-    WIN_BOX_BLACK   dm_warning_row,    dm_warning_bot,        dm_warning_column,    dm_warning_rgt	;top, bottom, left, right
+    bcf	    FLAG_TFT_dive_warning_text_clear	; Clear flag
+    btfsc   alternative_divelayout
+    bra	    TFT_clear_warning_text_2nd_row	; In Alt mode, clear only row 2
+    WIN_BOX_BLACK dm_warning_row, dm_warning_bot, dm_warning_column, dm_warning_rgt		; top, bottom, left, right
     return
 TFT_clear_warning_text2:
-    WIN_BOX_BLACK   surf_warning1_row, surf_warning2_row+.24, surf_warning1_column, surf_warning1_column+.76     ;top, bottom, left, right
+    WIN_BOX_BLACK surf_warning1_row, surf_warning2_row+.24, surf_warning1_column, surf_warning1_column+.76	; top, bottom, left, right
     return
 
     global  TFT_clear_warning_text_2nd_row
 TFT_clear_warning_text_2nd_row:
     btfss   divemode                            ; in divemode?
     bra     TFT_clear_warning_text_2nd_2        ; No, setup for surface mode
-    WIN_BOX_BLACK  dm_warning2_row,    dm_warning2_bot,       dm_warning2_column,   dm_warning2_rgt	;top, bottom, left, right
+    bcf	    FLAG_TFT_dive_warning_text_clr2	; Clear flag
+	WIN_BOX_BLACK dm_warning2_row, dm_warning2_bot, dm_warning2_column, dm_warning2_rgt	; top, bottom, left, right
     return
 TFT_clear_warning_text_2nd_2:
-    WIN_BOX_BLACK   surf_warning2_row, surf_warning2_row+.24, surf_warning2_column, surf_warning2_column+.76     ;top, bottom, left, right
+    WIN_BOX_BLACK surf_warning2_row, surf_warning2_row+.24, surf_warning2_column, surf_warning2_column+.76	; top, bottom, left, right
     return
 
     global  TFT_fillup_with_spaces
-TFT_fillup_with_spaces:         ; Fillup FSR2 with spaces (Total string length in #WREG)
-    movwf   lo                  ; save max. string length into lo
-    movf    FSR2L,W             ; Get current string length
-    subwf   lo,F                ; lo-WREG
-    btfsc   STATUS,N            ; longer then #lo already?
-    return                      ; Yes, done.
-    tstfsz  lo                  ; Zero?
+TFT_fillup_with_spaces:         	; Fillup FSR2 with spaces (Total string length in #WREG)
+    movwf   lo                  	; save max. string length into lo
+    movf    FSR2L,W             	; Get current string length
+    subwf   lo,F                	; lo-WREG
+    btfsc   STATUS,N            	; longer then #lo already?
+    return                      	; Yes, done.
+    tstfsz  lo                 	    ; Zero?
     bra     TFT_fillup_with_spaces2 ; No.
-    return                      ; Yes, done.
+    return                      	; Yes, done.
 TFT_fillup_with_spaces2:
-    PUTC    " "                 ; Add one space
-    decfsz  lo,F                ; All done?
+    PUTC    " "                 	; Add one space
+    decfsz  lo,F                	; All done?
     bra     TFT_fillup_with_spaces2 ; No, loop
-    return                      ; Done.
-
+    return                      	; Done.
+
+;=============================================================================
+	
 	global	TFT_desaturation_time
 TFT_desaturation_time:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
     tstfsz  WREG                        ; Is there room for the warning?
     return                              ; No
-    call    TFT_warning_set_window_com
 	STRCPY	"Desat:"
-	movff		desaturation_time+0,lo			; divide by 60...
-	movff		desaturation_time+1,hi
-	call		convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
-	bsf			leftbind
-	movf		lo,W
-	movff		hi,lo
-	movwf		hi							; exchange lo and hi...
-	output_8								; Hours
-	PUTC        ':'
-	movff		hi,lo						; Minutes
+	movff	int_O_desaturation_time+0,lo
+	movff	int_O_desaturation_time+1,hi
+	call	convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	bsf		leftbind
+	movf	lo,W
+	movff	hi,lo
+	movwf	hi							; exchange lo and hi...
+	output_8							; Hours
+	PUTC	':'
+	movff	hi,lo						; Minutes
 	output_99x
 	bcf		leftbind
-    movlw   surf_warning_length             ; Only use surface string length
-    rcall   TFT_fillup_with_spaces          ; Fillup FSR2 with spaces (Total string length in #WREG)
-    movlw   .0
-    movff   WREG,buffer+11
-	STRCAT_PRINT	""
+    movlw   surf_warning_length         ; Only use surface string length
+    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
+    movlw   .0							; TODO - needed?
+    movff   WREG,buffer+11				; TODO - needed?
+	STRCAT_PRINT ""
     bcf     win_invert
 	return
 
+
 	global	TFT_nofly_time
 TFT_nofly_time:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
     tstfsz  WREG                        ; Is there room for the warning?
     return                              ; No
-    call    TFT_warning_set_window_com
+	movff	char_I_altitude_wait,WREG
+	tstfsz	WREG
+	bra		TFT_nofly_time_1
 	STRCPY	"NoFly:"
-	movff		nofly_time+0,lo			; divide by 60...
-	movff		nofly_time+1,hi
-	call		convert_time			; converts hi:lo in minutes to hours (hi) and minutes (lo)
-	bsf			leftbind
-	movf		lo,W
-	movff		hi,lo
-	movwf		hi							; exchange lo and hi...
-	output_8							; Hours
-	PUTC        ':'
-	movff		hi,lo					; Minutes
+	bra		TFT_nofly_time_2
+TFT_nofly_time_1:
+	STRCPY	"NoAlt:"
+TFT_nofly_time_2:
+	movff	int_O_nofly_time+0,lo
+	movff	int_O_nofly_time+1,hi
+	call	convert_time			; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	bsf		leftbind
+	movf	lo,W
+	movff	hi,lo
+	movwf	hi						; exchange lo and hi...
+	output_8						; Hours
+	PUTC	':'
+	movff	hi,lo					; Minutes
 	output_99x
 	bcf		leftbind
-    movlw   surf_warning_length         ; Only use surface string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    movlw   .0
-    movff   WREG,buffer+11
+    movlw   surf_warning_length		; Only use surface string length
+    rcall   TFT_fillup_with_spaces 	; Fillup FSR2 with spaces (Total string length in #WREG)
+    movlw   .0						; TODO - needed?
+    movff   WREG,buffer+11			; TODO - needed?
 	STRCAT_PRINT	""
     bcf     win_invert
 	return
 
+;=============================================================================
+
     global  TFT_warning_agf
 TFT_warning_agf:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
     tstfsz  WREG                        ; Is there room for the warning?
     return                              ; No
-    call    TFT_warning_set_window_com
     call	TFT_warnings_color
 	STRCPY_TEXT tDiveaGF_active         ; "aGF!"
-    movlw   dm_warning_length              ; Divemode string length
+    movlw   dm_warning_length           ; Divemode string length
     rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
     STRCAT_PRINT ""
-	call	TFT_standard_color
-    bcf     win_invert
-    return
+    ;bcf     win_invert
+    ;return
+	goto	TFT_standard_color
 
     global  TFT_warning_fallback
-TFT_warning_fallback:                ; Show fallback warning
+TFT_warning_fallback:					; Show fallback warning
+	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG						; Is there room for the warning?
+    return                              ; No
+    call	TFT_warnings_color
+	STRCPY_TEXT tDiveFallback			; "Fallback!"
+    movlw   dm_warning_length			; Divemode string length
+    rcall   TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+    STRCAT_PRINT ""
+    goto	TFT_standard_color			; and return...
+
+
+	global	TFT_info_deco
+TFT_info_deco							; show info when in decompression
+	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG						; Is there room for the warning?
+    return                              ; NO  - return
+	movlw	color_green					; YES - select green text color
+	call	TFT_set_color				;		set color
+	STRCPY_TEXT tDecoInfo				; 		write "Deco Zone"
+    movlw   dm_warning_length			; 		select Divemode string length
+    rcall   TFT_fillup_with_spaces		; 		Fillup FSR2 with spaces (Total string length in #WREG)
+    STRCAT_PRINT ""						;		print buffer
+    goto	TFT_standard_color			; 		and return...
+
+
+    global  TFT_warning_gf
+TFT_warning_gf:                         ; GF
+	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG                        ; Is there room for the warning?
+    return                              ; No
+	movff	int_O_gradient_factor+0,lo	; bank-safe copy gradient factor
+	movff	int_O_gradient_factor+1,hi	;
+	TFT_color_code warn_gf				; Color-code Output
+	STRCPY  "GF:  "						; the two spaces are on purpose to align the output with other warnings' outputs
+    bsf     leftbind
+	output_8							; print value of lo only, int_O_gradient_factor is limited to 255
+    PUTC    "%"
+    movlw   dm_warning_length			; Divemode string length
+    btfss   divemode					; In Divemode?
+    movlw   surf_warning_length			; No, use surface string length
+    rcall   TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+    STRCAT_PRINT  ""
+    bcf     leftbind
+    bcf	    win_invert
+    goto    TFT_standard_color			; and return...
+
+
+	global	TFT_warning_mbubbles
+TFT_warning_mbubbles:
+	rcall	TFT_warning_set_window		; sets the row and column for the current warning
+    tstfsz  WREG                        ; Is there room for the warning?
+    return                              ; NO
+	call	TFT_attention_color			; set attention color as default
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,mbubble_warning		; are we in the microbubbles zone right now?
+	call	TFT_warnings_color			; YES - reconfigure to warning color
+	STRCPY_TEXT tMicroBubbles
+    movlw   dm_warning_length			; divemode string length
+    btfss   divemode					; in Divemode?
+    movlw   surf_warning_length			; NO  - use surface string length
+    rcall   TFT_fillup_with_spaces		; fillup FSR2 with spaces (total string length in #WREG)
+    STRCAT_PRINT  ""	
+    goto    TFT_standard_color			; and return...
+
+
+	global	TFT_warning_outside
+TFT_warning_outside:
+	rcall	TFT_warning_set_window		; sets the row and column for the current warning
+    tstfsz  WREG                        ; is there room for the warning?
+    return                              ; NO
+	call	TFT_attention_color
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,outside_warning		; are we outside the ZH-L16 model right now?
+	call	TFT_warnings_color			; YES - reconfigure to warning color
+	STRCPY  "X-ZHL16-X"
+    movlw   dm_warning_length			; divemode string length
+    btfss   divemode					; in Divemode?
+    movlw   surf_warning_length			; NO  - use surface string length
+    rcall   TFT_fillup_with_spaces		; fillup FSR2 with spaces (total string length in #WREG)
+    STRCAT_PRINT  ""	
+    goto    TFT_standard_color			; and return...
+
+
+	global	TFT_warning_gas_needs_warn
+	global	TFT_warning_gas_needs_att
+TFT_warning_gas_needs_warn:
+	rcall	TFT_warning_gas_needs_war_helper
+	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG                        ; Is there room for the warning?
+    return                              ; No
+	call	TFT_warnings_color
+	bra		TFT_warning_gas_needs_com
+TFT_warning_gas_needs_att:
+	rcall	TFT_warning_gas_needs_att_helper
+	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG                        ; Is there room for the warning?
+    return                              ; No
+	call	TFT_attention_color
+TFT_warning_gas_needs_com:
+	STRCPY_TEXT tGasNeedsWarn			; "Gas Needs"
+    movlw   dm_warning_length           ; Divemode string length
+    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
+    STRCAT_PRINT ""	
+	goto	TFT_standard_color  		; and return...
+
+TFT_warning_gas_needs_war_helper:
+	incf	warning_counter,F			; increase counter
+	btfsc	gas_needs_warning			; is it a new warning?
+	return								; NO  - do not show the gas needs custom view again
+	bsf		gas_needs_warning			; YES - memorise it's an old now
+	bra		TFT_warning_gas_needs_helper_com
+TFT_warning_gas_needs_att_helper:
+	incf	warning_counter,F			; increase counter
+	btfsc	gas_needs_attention			; is it a new attention?
+	return								; NO  - do not show the gas needs custom view again
+	bsf		gas_needs_attention			; YES - memorise it's an old now
+TFT_warning_gas_needs_helper_com:
+	movlw	.12							; customview number one below gas needs view
+	movwf	menupos3					; set fake current view number
+	bsf		toggle_customview			; initiate toggle of customview -> gas needs view will be shown
+	return	
+
+
+	global	TFT_warning_IBCD
+TFT_warning_IBCD:
+	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG                        ; Is there room for the warning?
+    return                              ; No
+	call	TFT_attention_color			; select attention color as default
+	STRCPY_TEXT tIBCD					; "IBCD N2He"
+	movlw   dm_warning_length           ; Divemode string length
+    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
+    STRCAT_PRINT ""
+	goto	TFT_standard_color  		; and return...
+
+	
+    global  TFT_warning_sensor_disagree
+TFT_warning_sensor_disagree:            ; Show sensor disagree warning
+	rcall	TFT_warning_sensor_dis_helper
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
     tstfsz  WREG                        ; Is there room for the warning?
     return                              ; No
     call	TFT_warnings_color
-	STRCPY_TEXT tDiveFallback           ; "Fallback!"
-    movlw   dm_warning_length              ; Divemode string length
+	STRCPY_TEXT tSensorDisagree         ; "Sensors<>"
+    movlw   dm_warning_length           ; Divemode string length
     rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
     STRCAT_PRINT ""
-    goto	TFT_standard_color  ; and return...
-
-    global  TFT_warning_gf
-TFT_warning_gf:                         ;GF
-	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call    TFT_warning_set_window_com
-	TFT_color_code		warn_gf		; Color-code Output
-	STRCPY  "GF:"
-	movff	char_O_gradient_factor,lo		; gradient factor
-    bsf     leftbind
-	output_8
-    PUTC    "%"
-    movlw   dm_warning_length              ; Divemode string length
-    btfss   divemode                    ; In Divemode?
-    movlw   surf_warning_length         ; No, use surface string length
-    rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT  ""
-    bcf     leftbind
-    bcf	    win_invert
-    goto    TFT_standard_color	; and return...
-
+    goto	TFT_standard_color  		; and return...
+
+TFT_warning_sensor_dis_helper:
+	btfsc	sensor_warning				; is it a new warning?
+	return								; NO  - do not show the gas needs custom view again
+	bsf		sensor_warning				; YES - memories it's an old warning now
+	clrf	menupos3					; set fake current view number
+	bsf		toggle_customview			; initiate toggle of customview -> sensor view will be shown
+	return
+	
+;=============================================================================
+	
 TFT_warning_set_window:                 ; Sets the row and column for the current warning
     ; ignore warning (now)?
     decf    warning_counter,W           ; -1
     bcf     STATUS,C
+    btfss   alternative_divelayout		; In alt mode, do not divide...
     rrcf    WREG,W                      ; (warning_counter-1)/2
     cpfseq  warning_page
     retlw   .255                        ; WREG <> 0 -> Warning window not defined
-
     call	TFT_standard_color
-
     btfss   divemode                    ; in divemode?
     bra     TFT_warning_set_window3     ; No, setup for surface mode
-
+    btfss   alternative_divelayout
+    bra	    TFT_warning_set_window3a	; standard layout
+    bra	    TFT_warning_set_window2a	; alternative layout (Only lower row used)
+TFT_warning_set_window3a:    
     btfss   warning_counter,0           ; Toggle with each warning
-	bra		TFT_warning_set_window2
-	WIN_SMALL	dm_warning1_column, dm_warning1_row
+    bra		TFT_warning_set_window2
+    WIN_SMALL	dm_warning1_column, dm_warning1_row
     bcf     second_row_warning          ; =1: The second row contains a warning
-	retlw   .0                          ; WREG=0 -> Warning window defined
+    retlw   .0                          ; WREG=0 -> Warning window defined
 TFT_warning_set_window2:
-	WIN_SMALL	dm_warning2_column, dm_warning2_row
     bsf     second_row_warning          ; =1: The second row contains a warning
-	retlw   .0                          ; WREG=0 -> Warning window defined
-
+TFT_warning_set_window2a:    
+    WIN_SMALL	dm_warning2_column, dm_warning2_row
+    retlw   .0                          ; WREG=0 -> Warning window defined
 TFT_warning_set_window3:
     btfss   warning_counter,0           ; Toggle with each warning
-	bra		TFT_warning_set_window4
+    bra	    TFT_warning_set_window4
     WIN_SMALL	surf_warning1_column,surf_warning1_row
     bcf     second_row_warning          ; =1: The second row contains a warning
-	retlw   .0                          ; WREG=0 -> Warning window defined
+    retlw   .0                          ; WREG=0 -> Warning window defined
 TFT_warning_set_window4:
-	WIN_SMALL	surf_warning2_column,surf_warning2_row
+    WIN_SMALL	surf_warning2_column,surf_warning2_row
     bsf     second_row_warning          ; =1: The second row contains a warning
-	retlw   .0                          ; WREG=0 -> Warning window defined
-
-TFT_warning_set_window_com:
-    if dm_offset == 0
-        bsf     win_invert
-    endif
-    return
+    retlw   .0                          ; WREG=0 -> Warning window defined
+
 
 	global	TFT_update_batt_percent_divemode
 TFT_update_batt_percent_divemode:
 	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
     tstfsz  WREG                        ; Is there room for the warning?
     return                              ; No
-    call    TFT_warning_set_window_com
-    movff   batt_percent,lo         ; Get battery percent
-    TFT_color_code		warn_battery; Color-code battery percent
+    movff   batt_percent,lo         	; Get battery percent
+    TFT_color_code	warn_battery		; Color-code battery percent
     STRCPY  "Batt:"
 	bsf		leftbind
 	output_8
 	bcf		leftbind
     PUTC    "%"
-    movlw   dm_warning_length              ; Divemode string length
+    movlw   dm_warning_length           ; Divemode string length
     btfss   divemode                    ; In Divemode?
     movlw   surf_warning_length         ; No, use surface string length
     rcall   TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT	""
 	bcf	win_invert
-	goto	TFT_standard_color  ; and return...
-
-    global  TFT_gf_mask                         ; Setup Mask
+	goto	TFT_standard_color			; and return...
+
+
+    global  TFT_gf_mask					; Setup Mask
 TFT_gf_mask:
     ; The mask
     call    TFT_divemask_color
@@ -3437,12 +3657,10 @@
     STRCPY_TEXT_PRINT taGFactors
     WIN_TINY          dm_custom_gf_title_col3, dm_custom_gf_title_row
     STRCPY_TEXT_PRINT tGFInfo
-
     ; Show GF (Static)
     call    TFT_disabled_color
     btfss   use_agf
     call	TFT_standard_color
-
     WIN_STD   dm_custom_gf_column, dm_custom_gf_row
     bsf     leftbind
     movff   opt_GF_low,lo
@@ -3455,10 +3673,8 @@
     call	TFT_standard_color
     TSTOSS  opt_enable_aGF              ; =1: aGF can be selected underwater
     bra     TFT_gf_mask2                ; Show "---" instead
-
     btfss   use_agf
     call    TFT_disabled_color
-
     WIN_STD   dm_custom_agf_column, dm_custom_agf_row
     movff   opt_aGF_low,lo
     output_8
@@ -3475,59 +3691,60 @@
     bcf     leftbind
     return
 
+
     global  TFT_gf_mask_cGF                     ; Setup Mask
 TFT_gf_mask_cGF:
     ; The mask
-    call    TFT_divemask_color
-    WIN_TINY          dm_custom_gf_title_col3, dm_custom_gf_title_row
+    call	TFT_divemask_color
+    WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
     STRCPY_TEXT_PRINT tGFInfo
-    goto    	TFT_standard_color; and return...
+    goto	TFT_standard_color; and return...
 
     global  TFT_gf_info                         ; Show GF informations
 TFT_gf_info:
-    call	TFT_standard_color
-    ; Show current GF
-	movff	char_O_gradient_factor,lo			; gradient factor absolute (Non-GF model)
-	movff	char_I_deco_model,hi
     WIN_STD   dm_custom_currentgf_column, dm_custom_currentgf_row
-    output_8
+	movff	int_O_gradient_factor+0,lo			; gradient factor absolute (Non-GF model)
+	movff	int_O_gradient_factor+1,hi
+    TFT_color_code warn_gf						; Color-code Output
+    output_8									; print lo only, int_O_gradient_factor is limited to 255
     STRCAT_PRINT   "%"
     return
 
+
     global  TFT_battinfo_tissues_clock_mask      ; Setup Mask
 TFT_battinfo_tissues_clock_mask:
     ; The mask
     ; Put three columns at HUD positions
     call    TFT_divemask_color
-    btfsc   FLAG_apnoe_mode					; In Apnoe mode?
-    bra	    TFT_battinfo_tissues_clock_mask2 ; Yes
-    btfsc   FLAG_gauge_mode					; In Gauge mode?
-    bra	    TFT_battinfo_tissues_clock_mask2 ; Yes
-    WIN_TINY          dm_custom_tissue_title_column,  dm_custom_tissue_title_row
+    btfsc   FLAG_apnoe_mode						; In Apnoe mode?
+    bra	    TFT_battinfo_tissues_clock_mask2 	; Yes
+    btfsc   FLAG_gauge_mode						; In Gauge mode?
+    bra	    TFT_battinfo_tissues_clock_mask2 	; Yes
+    WIN_TINY dm_custom_tissue_title_column,  dm_custom_tissue_title_row
     STRCPY_TEXT_PRINT tDiveTissues
-TFT_battinfo_tissues_clock_mask2:            ; Show only clock
-    WIN_TINY          dm_custom_ead_column,     dm_custom_eadend_title_row
-    STRCPY_TEXT_PRINT tBatteryV	    ; "Battery: "
-    WIN_TINY    dm_custom_clock_column,  dm_custom_clock_title_row
+TFT_battinfo_tissues_clock_mask2:           	; Show only clock
+    WIN_TINY dm_custom_ead_column,     dm_custom_eadend_title_row
+    STRCPY_TEXT_PRINT tBatteryV	    			; "Battery: "
+    WIN_TINY dm_custom_clock_column,  dm_custom_clock_title_row
     STRCPY_TEXT_PRINT tDiveClock
-    goto	TFT_standard_color; and return...
-
-    global  TFT_battinfo_tissues_clock           ; Show EAD/END, Tissues and clock
+    goto	TFT_standard_color					; and return...
+
+    global  TFT_battinfo_tissues_clock      	; Show EAD/END, Tissues and clock
 TFT_battinfo_tissues_clock:
     ; Update clock and date
     WIN_SMALL   dm_custom_clock_column, dm_custom_clock_row
-    call    TFT_clock2                          ; print clock
+    call    TFT_clock2                      	; print clock
 
     ; Show Battery info
     WIN_SMALL   dm_custom_ead_column, dm_custom_ead_row
-    movff   batt_percent,lo         ; Get battery percent
-    TFT_color_code		warn_battery; Color-code battery percent
+    movff   batt_percent,lo         			; Get battery percent
+    TFT_color_code	warn_battery				; Color-code battery percent
     bsf		leftbind
     output_8
     bcf		leftbind
     STRCAT	"% "
     movlw	0x00
-    movff	WREG,buffer+4			; Only "xxx%"
+    movff	WREG,buffer+4						; Only "xxx%"
     STRCAT_PRINT	""
     bcf     win_invert
     call	TFT_standard_color
@@ -3540,106 +3757,217 @@
     PUTC	'V'
     movff	buffer+5,buffer+4
     movlw	0x00
-    movff	WREG,buffer+5			; Only "x.yzV"
+    movff	WREG,buffer+5						; Only "x.yzV"
     STRCAT_PRINT	""
 
-    btfsc	FLAG_apnoe_mode					; In Apnoe mode?
-    return                                  ; Yes, done.
-    btfsc	FLAG_gauge_mode					; In Gauge mode?
-    return                                  ; Yes, done.
+    btfsc	FLAG_apnoe_mode						; In Apnoe mode?
+    return                                  	; Yes, done.
+    btfsc	FLAG_gauge_mode						; In Gauge mode?
+    return                                  	; Yes, done.
     
     ; Show tissue diagram
     call    TFT_divemask_color
-    WIN_TINY    dm_custom_tissue_N2_column, dm_custom_tissue_N2_row
+    WIN_TINY dm_custom_tissue_N2_column, dm_custom_tissue_N2_row
     STRCPY_TEXT_PRINT   tN2
-    WIN_TINY    dm_custom_tissue_He_column, dm_custom_tissue_He_row
+    WIN_TINY dm_custom_tissue_He_column, dm_custom_tissue_He_row
     STRCPY_TEXT_PRINT   tHe
- 	call    deco_calc_desaturation_time         ; calculate desaturation time (and char_O_tissue_N2_saturation and char_O_tissue_He_saturation)
-	movlb	b'00000001'                         ; select ram bank 1
-    bra   DISP_tissue_saturation_graph        ; Show char_O_tissue_N2_saturation and char_O_tissue_He_saturation    ; and return...
+    bra   DISP_tissue_saturation_graph      ; Show char_O_tissue_N2_saturation and char_O_tissue_He_saturation and return...
 
     
     global  TFT_pscr_info_mask
-TFT_pscr_info_mask:		    ; Show ppO2, drop and lung ratio mask    
+TFT_pscr_info_mask:		    				; Show pSCR-ppO2, drop and lung ratio mask    
     rcall   TFT_mask_ppo2
     call    TFT_divemask_color
-    WIN_TINY          dm_custom_pscr_text_drop_column, dm_custom_pscr_text_row
+    WIN_TINY dm_custom_pscr_text_drop_column, dm_custom_pscr_text_row
     STRCPY_TEXT_PRINT tPSCR_O2_drop
-    WIN_TINY          dm_custom_pscr_text_ratio_column, dm_custom_pscr_text_row
+    WIN_TINY dm_custom_pscr_text_ratio_column, dm_custom_pscr_text_row
     STRCPY_TEXT_PRINT tPSCR_lungratio
-    goto    	TFT_standard_color; and return...
+    goto	TFT_standard_color				; and return...
     
-    global	TFT_pscr_info			; Show ppO2, drop and lung ratio
+    global	TFT_pscr_info					; Show pSCR-ppO2, drop and lung ratio
 TFT_pscr_info:
     ;show ppO2
-    rcall	TFT_display_ppo2_val
+	WIN_MEDIUM  dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
+	movff	int_O_pSCR_ppO2+0,lo			; copy pSCR ppO2 to hi:lo
+	movff	int_O_pSCR_ppO2+1,hi
+	TFT_color_code warn_ppo2				; color-code output
+	bsf		leftbind
+	output_16dp  .3         				; x.xx bar
+    bcf		leftbind
+    STRCAT_PRINT   ""
     ; Show Drop
     WIN_STD dm_custom_pscr_drop_column,dm_custom_pscr_drop_row
-    movff   opt_PSCR_drop,lo
+	call	TFT_standard_color
+	movff	char_I_PSCR_drop,lo
     bsf	    leftbind
     output_8
     STRCAT_PRINT "%"
     ; Show lung ratio
     WIN_STD dm_custom_pscr_ratio_column,dm_custom_pscr_ratio_row
-    movff   opt_PSCR_lungratio,lo
+    movff   char_I_PSCR_lungratio,lo
     bsf	    leftbind
     STRCPY  "1/"
     output_8
     STRCAT_PRINT   ""
     bcf	    leftbind
     return
-    
-    
-    global  TFT_ppo2_ead_end_cns_mask		; Show ppO2, END/EAD and CNS mask
-TFT_ppo2_ead_end_cns_mask:
-    rcall   TFT_mask_ppo2
+
+
+	global	TFT_gas_needs_mask
+TFT_gas_needs_mask:
+    call	TFT_divemask_color
+    WIN_TINY dm_custom_dyn_gas_mask_column-.10,dm_custom_dyn_gas_mask_row
+    STRCPY_TEXT_PRINT	tGasNeedsBar	; "Gas Needs (bar)"
+	goto	TFT_standard_color			; and return...
+
+	global	TFT_gas_needs
+TFT_gas_needs:							; LIMITATION: 	there is only space for 4 gases on the screen - if 5 gases
+	bsf     leftbind					;				have a pres_need > 0, then only the first 4 will be shown!
+	clrf	up
+	WIN_SMALL   dm_custom_dyn_gas_column1+.5,dm_custom_dyn_gas_row1
+	call	TFT_gas_needs_helper
+    WIN_SMALL   dm_custom_dyn_gas_column1+.5,dm_custom_dyn_gas_row2
+	call 	TFT_gas_needs_helper
+	WIN_SMALL   dm_custom_dyn_gas_column2+.5,dm_custom_dyn_gas_row1
+	call	TFT_gas_needs_helper
+    WIN_SMALL   dm_custom_dyn_gas_column2+.5,dm_custom_dyn_gas_row2
+ 	call	TFT_gas_needs_helper
+	bcf		leftbind
+	return
+
+TFT_gas_needs_helper:
+	call	TFT_standard_color
+	movlw	.5							; number of gases
+	cpfslt	up							; check if all gases have been processed
+	bra		TFT_gas_needs_helper_1		; yes -> clear display area
+    movf    up,W						; no  -> get gas number	and check if need of that gas is > 0
+	rlncf	WREG,W						; multipy by 2
+    lfsr    FSR1,int_O_tank_pres_need+1 ; read HIGH(int_O_tank_pres_need[up])
+	movff   PLUSW1,hi					; copy to temp storage hi
+	btfss	hi,int_is_zero				; check flag for pres_need == 0
+	bra		TFT_gas_needs_helper_2		; no  -> print gas type and pressure needed
+	incf	up,F						; yes -> increment to next gas...
+	bra		TFT_gas_needs_helper		; ...and try the next gas
+TFT_gas_needs_helper_1:					; no gases to show anymore, clear display area from potential remains of last invocation
+    STRCAT_PRINT "  ----   "			; overwrite outdated stuff if screen position is not needed
+	return
+TFT_gas_needs_helper_2:					; output gas type and pressure needed
+	movf    up,W						; get gas number (0-4) to WREG
+	lfsr    FSR1,opt_gas_O2_ratio		; read opt_gas_O2_ratio[WREG]
+    movff   PLUSW1,lo					; copy result to lo
+    movf    up,W						; get gas number (0-4) to WREG ; SHOULD NOT BE NEEDED AS movff SHOULD NOT ALTER wreg
+    lfsr    FSR1,opt_gas_He_ratio		; read opt_gas_He_ratio[WREG]
+    movff   PLUSW1,hi					; copy result to hi
+	call    customview_show_mix			; print "Air", "O2", "21/35", etc.
+	STRCAT	":"
+	movf    up,W						; get gas number (0-4) to WREG
+	rlncf	WREG,W						; multipy by 2
+    lfsr    FSR1,int_O_tank_pres_need+0	; read lower part of integer
+    movff   PLUSW1,lo
+    movf    up,W						; get gas number (0-4) to WREG ; SHOULD NOT BE NEEDED AS movff SHOULD NOT ALTER wreg
+	rlncf	WREG,W						; multipy by 2
+    lfsr    FSR1,int_O_tank_pres_need+1 ; read upper part of integer
+	movff   PLUSW1,hi
+	btfsc	hi,int_prewarning_flag		; check if pre-warning flag is set (pres_need > pres_fill * threshold)
+	call	TFT_attention_color			; yes, print gas need in yellow
+	btfsc	hi,int_warning_flag			; check if warning flag is set   (pres_need > pres_fill)
+	call    TFT_warnings_color			; yes, print gas need in red
+	movff	int_O_tank_pres_need+1,WREG	; get HIGH(int_O_tank_pres_need[0]) which hold flag for invalid data
+	btfsc	WREG,int_invalid_flag		; check if invalid data flag is set
+	call	TFT_disabled_color			; yes, print gas need in disabled color
+	bcf		hi,int_prewarning_flag		; clear pre-warning flag for attention color
+	bcf		hi,int_warning_flag			; clear     warning flag for warning   color
+	bcf		hi,int_invalid_flag			; clear flag for invalid data (will actually only be set with 1st gas)	
+    output_16_3 						; limit to 999 and display only (0-999)
+	STRCAT_PRINT " "					; adds a space to overwrite any potential remains of earlier outputs
+	incf	up,F						; increment to next gas
+	goto	TFT_standard_color  		; and return...
+
+	
+	global  TFT_mask_ppo2				; helper function for several custom views
+TFT_mask_ppo2:
     call    TFT_divemask_color
-    WIN_TINY          dm_custom_ead_column,     dm_custom_eadend_title_row
+    btfss   FLAG_ccr_mode 				; in CCR mode?
+    bra	    TFT_mask_ppo2a				; NO  - continue checking for pSCR and OC
+    btfsc   is_bailout					; in bailout?
+    bra	    TFT_mask_ppo2b				; YES
+    WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row	; tuned position for longer text
+    STRCPY_TEXT_PRINT tppO2Dil			; print "ppO2(Dil)"
+    goto    TFT_standard_color			; and return...
+TFT_mask_ppo2a:
+    btfss   FLAG_pscr_mode 				; in pSCR mode?
+    bra	    TFT_mask_ppo2b				; NO  - continue with OC mode (or bailout)
+    btfsc   is_bailout					; in bailout?
+    bra	    TFT_mask_ppo2b				; YES
+    WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row	; tuned position for longer text
+    STRCPY_TEXT_PRINT tppO2Mix			; print "ppO2(Mix)"
+    goto    TFT_standard_color			; and return... 
+TFT_mask_ppo2b:							; OC mode or bailout
+    WIN_TINY  dm_custom_ceiling_ppo2_column, dm_custom_ceiling_text_row	; normal position
+    STRCPY_TEXT_PRINT tppO2				; in all other modes
+    goto    TFT_standard_color			; and return...
+	
+	global	TFT_display_pure_ppo2		; show ppO2 of the pure gas - helper function for several custom views
+TFT_display_pure_ppo2:
+	WIN_MEDIUM  dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
+	movff	int_O_pure_ppO2+0,lo		; copy ppO2 of the pure gas to hi:lo
+	movff	int_O_pure_ppO2+1,hi
+	TFT_color_code warn_ppo2			; color-code output
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
+    STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
+	
+    
+    global  TFT_ppo2_ead_end_cns_mask			; Show ppO2, END/EAD and CNS mask
+TFT_ppo2_ead_end_cns_mask:
+    rcall	TFT_mask_ppo2
+    call	TFT_divemask_color
+    WIN_TINY dm_custom_ead_column, dm_custom_eadend_title_row
     STRCPY_TEXT_PRINT tDiveEAD_END
-    WIN_TINY          dm_custom_gf_title_col3, dm_custom_gf_title_row
+    WIN_TINY dm_custom_gf_title_col3, dm_custom_gf_title_row
     STRCPY_TEXT_PRINT tCNS2
-    goto    	TFT_standard_color; and return...
+    goto	TFT_standard_color					; and return...
     
-    
-    global  TFT_ppo2_ead_end_cns		; Show ppO2, END/EAD and CNS
+    global  TFT_ppo2_ead_end_cns				; Show ppO2, END/EAD and CNS
 TFT_ppo2_ead_end_cns:
     ;show ppO2
-    rcall	TFT_display_ppo2_val
+	rcall	TFT_display_pure_ppo2				; show ppO2 of the pure gas
     ; Show END/EAD
     WIN_SMALL   dm_custom_ead_column, dm_custom_ead_row
     STRCPY_TEXT tEAD                            ; EAD:
     movff   char_O_EAD,lo
     rcall   TFT_end_ead_common                  ; print "lo m" (or ft) and limit to 8 chars
-    WIN_SMALL   dm_custom_end_column, dm_custom_end_row
+    WIN_SMALL dm_custom_end_column, dm_custom_end_row
     STRCPY_TEXT tEND                            ; END:
     movff   char_O_END,lo
     rcall   TFT_end_ead_common                  ; print "lo m" (or ft) and limit to 8 chars
     ; Show CNS
     WIN_STD   dm_custom_currentgf_column, dm_custom_currentgf_row
-    TFT_color_code		warn_cns		; Color-code CNS output
     movff	int_O_CNS_fraction+0,lo
     movff	int_O_CNS_fraction+1,hi
+	TFT_color_code	warn_cns					; Color-code CNS output
     bsf		leftbind
-    output_16_3					;Displays only 0...999
+    output_16_3									; Displays only 0...999
     bcf		leftbind
     STRCAT_PRINT "%"
-    goto	TFT_standard_color; and return...
+    goto	TFT_standard_color					; and return...
     
-TFT_end_ead_common:           ; print "lo m" (or ft) and limit to 8 chars
+TFT_end_ead_common:           					; print "lo m" (or ft) and limit to 8 chars
     bsf     leftbind
-    TSTOSS  opt_units			; 0=Meters, 1=Feets
+    TSTOSS  opt_units							; 0=Meters, 1=Feets
 	bra		TFT_end_ead_common_metric
 ;TFT_end_ead_common_imperial:
-    ; With lo in m
-    movf    lo,W
-	mullw	.100							; PRODL:PRODH = mbar/min
+    movf    lo,W								; With lo in m
+	mullw	.100								; PRODL:PRODH = mbar/min
 	movff	PRODL,lo
 	movff	PRODH,hi
-	call	convert_mbar_to_feet			; convert value in lo:hi from mbar to feet
+	call	convert_mbar_to_feet				; convert value in lo:hi from mbar to feet
     output_16_3
     STRCAT_TEXT     tFeets
     clrf    WREG
-    movff   WREG,buffer+.8                  ; limit string length to 8
+    movff   WREG,buffer+.8                  	; limit string length to 8
     bra     TFT_end_ead_common_exit
 TFT_end_ead_common_metric:
     output_8
@@ -3647,59 +3975,45 @@
 TFT_end_ead_common_exit:
     bcf     leftbind
     movlw   .8
-    rcall   TFT_fillup_with_spaces          ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT    ""
+    rcall   TFT_fillup_with_spaces          	; Fillup FSR2 with spaces (Total string length in #WREG)
+    STRCAT_PRINT ""
     return
 
-    global  TFT_sensor_check_mask               ; Show ppO2 of O2 and Diluent mask
+
+    global  TFT_sensor_check_mask		; show ppO2 of O2 and Diluent mask
 TFT_sensor_check_mask:
     call    TFT_divemask_color
-    WIN_TINY    dm_custom_s_check_text_column, dm_custom_s_check_text_row
+    WIN_TINY dm_custom_s_check_text_column, dm_custom_s_check_text_row
     STRCPY_TEXT_PRINT   tSensorCheck
-    WIN_TINY    dm_custom_ppO2_text_column, dm_custom_s_check_text_row
+    WIN_TINY dm_custom_ppO2_text_column, dm_custom_s_check_text_row
     STRCPY_TEXT_PRINT tppO2O2
-    WIN_TINY    dm_custom_ppDil_text_column, dm_custom_s_check_text_row
+    WIN_TINY dm_custom_ppDil_text_column, dm_custom_s_check_text_row
     STRCPY_TEXT_PRINT tppO2Dil
-    return
-
-    global  TFT_sensor_check                    ; Show ppO2 of O2 and Diluent
+    goto	TFT_standard_color			; and return...
+
+    global  TFT_sensor_check			; show ppO2 of O2 and Diluent
 TFT_sensor_check:
     ; Show ppO2 of O2 in this depth
-    SAFE_2BYTE_COPY amb_pressure, xA
-	movlw	d'10'
-	movwf	xB+0
-	clrf	xB+1
-	call	div16x16				; xC=p_amb/10
-	movff	xC+0,xA+0
-	movff	xC+1,xA+1
-    movlw   .100
-    movwf   xB+0                    ; =O2 ratio
-	clrf	xB+1
-	call	mult16x16               ; char_I_O2_ratio * p_amb/10
-    call    TFT_standard_color
-	TFT_color_code		warn_ppo2		; Color-code output (ppO2 stored in xC)
-    WIN_MEDIUM   dm_custom_s_check_ppo2_o2_column, dm_custom_s_check_value_row
-;    ; hijacking neg_flag_velocity to know where the value is displayed
-    bsf     neg_flag_velocity
-    call    TFT_display_ppo2_com
-
+    WIN_MEDIUM dm_custom_s_check_ppo2_o2_column, dm_custom_s_check_value_row
+	movff	int_O_O2_ppO2+0,lo			; copy ppO2 of pure O2 to hi:lo
+	movff	int_O_O2_ppO2+1,hi
+	TFT_color_code warn_ppo2			; color-code output
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
+    STRCAT_PRINT ""
     ; Show ppO2 of the diluent in this depth
-    SAFE_2BYTE_COPY amb_pressure, xA
-	movlw	d'10'
-	movwf	xB+0
-	clrf	xB+1
-	call	div16x16				; xC=p_amb/10
-	movff	xC+0,xA+0
-	movff	xC+1,xA+1
-    movff   char_I_O2_ratio,xB+0    ; =O2 ratio
-	clrf	xB+1
-	call	mult16x16               ; char_I_O2_ratio * p_amb/10
-    call    TFT_standard_color
-	TFT_color_code		warn_ppo2		; Color-code output (ppO2 stored in xC)
     WIN_MEDIUM   dm_custom_s_check_ppo2_dil_col, dm_custom_s_check_value_row
-;    ; hijacking neg_flag_velocity to know where the value is displayed
-    bsf     neg_flag_velocity
-    goto    TFT_display_ppo2_com; and return...
+	movff	int_O_pure_ppO2+0,lo		; copy ppO2 of pure gas to hi:lo
+	movff	int_O_pure_ppO2+1,hi
+	TFT_color_code warn_ppo2			; color-code output
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
+    STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
+
+;=============================================================================
 
     global  TFT_surface_lastdive
 TFT_surface_lastdive:
@@ -3712,6 +4026,25 @@
     STRCAT_TEXT_PRINT   tMaxDepth		    ; Max. Depth
     call	TFT_standard_color
     WIN_SMALL    surf_gaslist_column+.48,surf_gaslist_row
+	
+	movff	int_O_desaturation_time+0,lo	; bank-safe copies
+	movff	int_O_desaturation_time+1,WREG
+	iorwf	lo,W							; check if desaturation time is zero
+    bz		TFT_surface_lastdive_1			; YES - show last dive time
+	movff	surface_interval+0,lo			; NO  - show dive interval
+	movff	surface_interval+1,hi
+	call	convert_time				; lo=mins, hi=hours
+	movf	hi,W
+	movff	lo,hi
+	movwf	lo							; exchange lo and hi
+	bsf	    leftbind
+	output_99x
+	PUTC    'h'
+	movff	hi,lo
+	output_99x
+	STRCAT_PRINT "m "
+	bra		TFT_surface_lastdive_2
+TFT_surface_lastdive_1:
     movff   lastdive_time+0,xC+0
     movff   lastdive_time+1,xC+1
     movff   lastdive_time+2,xC+2
@@ -3719,23 +4052,24 @@
     movlw   LOW	    .3600
     movwf   xB+0
     movlw   HIGH    .3600
-    movwf   xB+1		; One day = 3600s
-    call    div32x16	; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+    movwf   xB+1						; One day = 3600s
+    call    div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
     ;xC+0:xC+1 -> Full hours
     movff   xC+1,xA+1
     movff   xC+0,xA+0
     clrf    xB+1
     movlw   .24
     movwf   xB+0
-    call    div16x16	;xA/xB=xC with xA+0 as remainder 	
+    call    div16x16					;xA/xB=xC with xA+0 as remainder 	
     movff   xC+0,lo
-    movff   xC+1,hi	; Full days
+    movff   xC+1,hi						; Full days
     bsf	    leftbind
     output_16
     PUTC    "d"
-    movff   xA+0,lo	; Full hours
+    movff   xA+0,lo						; Full hours
     output_8
-    STRCAT_PRINT    "h"
+	STRCAT_PRINT "h "
+TFT_surface_lastdive_2:
     WIN_SMALL    surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.1)
     movff   lastdive_duration+0,lo
     movff   lastdive_duration+1,hi
@@ -3747,37 +4081,36 @@
     WIN_SMALL    surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.2)
     movff   lastdive_maxdepth+0,lo
     movff   lastdive_maxdepth+1,hi
-    TSTOSS  opt_units			; 0=Meters, 1=Feets
+    TSTOSS  opt_units					; 0=Meters, 1=Feets
     bra	    TFT_surface_lastdive_metric
 	;imperial
-    rcall   convert_mbar_to_feet    ; convert value in lo:hi from mbar to feet
+    rcall   convert_mbar_to_feet    	; convert value in lo:hi from mbar to feet
     output_16_3                         ; limit to 999 and display only (0-999)
     STRCAT_TEXT tFeets1
     bra	    TFT_surface_lastdive2
 
 TFT_surface_lastdive_metric:
     bsf     ignore_digit5               ; no cm...
-    movlw   d'1'					; +1
-    movff   WREG,ignore_digits		; no 1000m
+    movlw   d'1'						; +1
+    movff   WREG,ignore_digits			; no 1000m
     output_16dp .3  					; xxx.y
     STRCAT_TEXT tMeters
 TFT_surface_lastdive2:
     STRCAT_PRINT    ""
     bcf	    leftbind
-    return  ; Done.
-
+    return  							; Done.
+
+;=============================================================================
+	
     global  TFT_surface_tissues
-TFT_surface_tissues:             ; Show Tissue diagram in surface mode
+TFT_surface_tissues:             		; Show Tissue diagram in surface mode
     WIN_SMALL    surf_tissue_N2_column,surf_tissue_N2_row
     STRCPY_TEXT_PRINT   tN2
     WIN_SMALL    surf_tissue_He_column,surf_tissue_He_row
     STRCPY_TEXT_PRINT   tHe
 
- 	call    deco_calc_desaturation_time         ; calculate desaturation time (and char_O_tissue_N2_saturation and char_O_tissue_He_saturation)
-	movlb	b'00000001'                         ; select ram bank 1
-
-    movlw       color_deepblue
-	call		TFT_set_color				; Make this configurable?
+    movlw	color_deepblue
+	call	TFT_set_color				; Make this configurable?
     WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.29,.29
     WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.37,.37
     WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.45,.45
@@ -3786,261 +4119,226 @@
     WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.69,.69
     WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.77,.77
     WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.85,.85
-    WIN_FRAME_STD   surf_tissue_diagram_top, surf_tissue_diagram_bottom, surf_tissue_diagram_left, surf_tissue_diagram_right    ; outer frame
+    WIN_FRAME_STD	  surf_tissue_diagram_top, surf_tissue_diagram_bottom, surf_tissue_diagram_left, surf_tissue_diagram_right    ; outer frame
 
 	movlw	.1
-	movff	WREG,win_height             ; row bottom (0-239)
-    movlw   surf_tissue_diagram_left+.4      ; Surface mode
-	movff	WREG,win_leftx2             ; column left (0-159)
-	movlw	surf_tissue_diagram_right - surf_tissue_diagram_left - .4  ; Width
+	movff	WREG,win_height             								; row bottom (0-239)
+	
+    ;---- Draw N2 Tissues ----------------------------------------------------	
+
+    movlw   surf_tissue_diagram_left+.4 								; start position for N2 bars
+	movff	WREG,win_leftx2             								; column left (0-159)
+	movlw	surf_tissue_diagram_right - surf_tissue_diagram_left - .4	; max width for N2 bars
 	movff   WREG,win_width
 
-    ;---- Draw N2 Tissues
 	lfsr	FSR2, char_O_tissue_N2_saturation
 	movlw	d'16'
-	movwf	wait_temp                   ; 16 tissues
-	clrf	waitms_temp                 ; Row offset
+	movwf	wait_temp                   		; 16 tissues
+	clrf	waitms_temp                 		; row offset
 surf_tissue_saturation_graph_N2:
-    movlw   surf_tissue_diagram_top+.23 ; surface mode
+    movlw   surf_tissue_diagram_top+.23 		; surface mode
 	addwf	waitms_temp,W
-	movff	WREG,win_top                ; row top (0-239)
-    rcall   surf_tissue_saturation_loop    ; Show one tissue
+	movff	WREG,win_top                		; row top (0-239)
+    rcall   surf_tissue_saturation_loop 		; show one tissue
 	decfsz	wait_temp,F
 	bra		surf_tissue_saturation_graph_N2
 
     ;---- Draw He Tissues ----------------------------------------------------
+	
+	movlw	surf_tissue_diagram_left + .24								; start position for He bars (.15 without x2)
+	movff	WREG,win_leftx2 											; column left (0-159)
+	movlw	surf_tissue_diagram_right - surf_tissue_diagram_left - .24	; max width for He bars
+	movff 	WREG,win_width
+	
 	lfsr	FSR2, char_O_tissue_He_saturation
 	movlw	d'16'
-	movwf	wait_temp                   ; 16 tissues
-	clrf	waitms_temp                 ; Row offset
+	movwf	wait_temp                   		; 16 tissues
+	clrf	waitms_temp                 		; row offset
 surf_tissue_saturation_graph_He:
-    movlw   surf_tissue_diagram_top+.23+.56    ; surface mode
+    movlw   surf_tissue_diagram_top+.23+.56    	; surface mode
 	addwf	waitms_temp,W
-	movff	WREG,win_top                ; row top (0-239)
-    rcall   surf_tissue_saturation_loop    ; Show one tissue
+	movff	WREG,win_top                		; row top (0-239)
+    rcall   surf_tissue_saturation_loop    		; show one tissue
 	decfsz	wait_temp,F
 	bra		surf_tissue_saturation_graph_He
-    return
+	
+	WIN_SMALL surf_tissue_He_column+.22,surf_tissue_He_row	; position in-between tissue bars
+	movff	int_O_CNS_fraction+0,lo
+	movff	int_O_CNS_fraction+1,hi
+	TFT_color_code	warn_cns
+	STRCPY_TEXT tCNS2							; CNS:
+	bsf		leftbind
+	output_16_3									; Displays only 0...999
+	bcf		leftbind
+	STRCAT_PRINT "%"
+	goto	TFT_standard_color					; and return...
 
 surf_tissue_saturation_loop:
     call	TFT_standard_color
     movlw   .2                          ; row spacing
 	addwf   waitms_temp,F
-	movf	POSTINC2,W                  ; Get tissue load
-    bcf		STATUS,C
-	rrcf	WREG                        ; And divide by 2
+	movf	POSTINC2,W                  ; get tissue load
+	bcf		WREG,7						; clear flag bit for sat/desat info (not used in surface mode)
+	rlncf	WREG,W						; multiply with 2 (previously cleared bit 7 will be rotated to bit 0)
+	incf	WREG,W						; add 1 for a minimum visible bar (He-bars could be invisible else-wise)
 	movwf   temp1
-    movlw   .20
-    subwf   temp1,F                     ; Subtract some offset
-    movf    win_width+0,W              ; Max width.
-    cpfslt	temp1                       ; skip if WREG < win_width
-    movwf	temp1
+    movff   win_width+0,WREG			; get max window width (win_width)
+    cpfslt	temp1						; skip if WREG < win_width
+    movwf	temp1						; crop length to win_width
+										; no need to be able to draw longer bars –
+										; we are at the surface and if bars would
+										; even touch the max length possible here,
+										; the diver would be in severe decompression
+										; issues if not dead already...
     movff   temp1,win_bargraph
     clrf    win_width+1
-    goto	TFT_box	; and return...
+    goto	TFT_box						; and return...
 
 ;=============================================================================
-; Draw saturation graph, is surface mode or in dive mode.
+; Draw saturation graph in dive mode.
+
 DISP_tissue_saturation_graph:
     ;---- Draw Frame
     call	TFT_standard_color
     WIN_FRAME_COLOR16   dm_custom_tissue_diagram_top, dm_custom_tissue_diagram_bottom, dm_custom_tissue_diagram_left, .159    ; outer frame
 
 	movlw	.1
-	movff	WREG,win_height             ; row bottom (0-239)
-    movlw   dm_custom_tissue_diagram_left+.3      ; divemode
-	movff	WREG,win_leftx2             ; column left (0-159)
-	movlw	.159-dm_custom_tissue_diagram_left-.4  ; Width
+	movff	WREG,win_height             				; row bottom (0-239)
+	
+    ;---- Draw N2 Tissues ----------------------------------------------------	
+	
+    movlw   dm_custom_tissue_diagram_left+.3      		; divemode
+	movff	WREG,win_leftx2             				; column left (0-159)
+	movlw	.159-dm_custom_tissue_diagram_left-.4  		; width
 	movff   WREG,win_width
 
-    ;---- Draw N2 Tissues
 	lfsr	FSR2, char_O_tissue_N2_saturation
 	movlw	d'16'
-	movwf	wait_temp                   ; 16 tissues
-	clrf	waitms_temp                 ; Row offset
+	movwf	wait_temp                   				; 16 tissues
+	clrf	waitms_temp                 				; row offset
 tissue_saturation_graph_N2:
-    movlw   dm_custom_tissue_diagram_top+.3        ; divemode
-    rcall   tissue_saturation_graph_loop    ; Show one tissue
+    movlw   dm_custom_tissue_diagram_top+.3        		; divemode
+    rcall   tissue_saturation_graph_loop    			; show one tissue
 	decfsz	wait_temp,F
 	bra		tissue_saturation_graph_N2
 
     ;---- Draw He Tissues ----------------------------------------------------
+	
+	movlw	dm_custom_tissue_diagram_left + .8			; divemode
+	movff	WREG,win_leftx2								; column left (0-159)
+	movlw	.159 - dm_custom_tissue_diagram_left - .14	; width
+	movff	WREG,win_width
+		
 	lfsr	FSR2, char_O_tissue_He_saturation
 	movlw	d'16'
-	movwf	wait_temp                   ; 16 tissues
-	clrf	waitms_temp                 ; Row offset
+	movwf	wait_temp									; 16 tissues
+	clrf	waitms_temp									; row offset
 tissue_saturation_graph_He:
-    movlw   dm_custom_tissue_diagram_top+.3+.22    ; divemode
-    rcall   tissue_saturation_graph_loop    ; Show one tissue
-
+    movlw   dm_custom_tissue_diagram_top+.3+.22			; divemode
+    rcall   tissue_saturation_graph_loop    			; show one tissue
 	decfsz	wait_temp,F
 	bra		tissue_saturation_graph_He
-	return
+	goto	TFT_standard_color							; and return...
 
 tissue_saturation_graph_loop:
-    	addwf	waitms_temp,W
-	movff	WREG,win_top                ; row top (0-239)
-
-    call	TFT_standard_color
+    addwf	waitms_temp,W
+	movff	WREG,win_top                				; row top (0-239)
+	movlw   color_cyan									; preset color for tissues with decreasing pressure
+    call	TFT_set_color
 	incf	waitms_temp,F
 	movf	POSTINC2,W
-	bcf		STATUS,C
-	rrcf	WREG
+	btfss	WREG,7										; check fs flag for increasing tissue pressure set
+	bra		tissue_saturation_graph_loop_1				; NO  - keep color
+	movwf	temp1										; YES - buffer WREG
+	movlw   color_orange								; 		select color for tissues with increasing pressure
+    call	TFT_set_color								;		change color
+	movf	temp1,W										;		restore WREG
+tissue_saturation_graph_loop_1:
+	bcf		WREG,7										; clear flag bit
     bcf		STATUS,C
-	rrcf	WREG                        ; And divide by 4
+	rrcf	WREG                        				; divide by 2
+	incf	WREG,W										; add a bit for a minimum visible bar
 	movwf   temp1
-    movlw   .12
-    subwf   temp1,F                     ; Subtract some offset
-	movf   win_width,W                ; Max width.
-	cpfslt	temp1                       ; skip if WREG < win_width
+	;movlw	.1
+    ;addwf	temp1,F                     				; add a bit for a minimum visible bar (old version)
+	movf	win_width,W                					; get max window width (win_width)
+	cpfslt	temp1                       				; skip if WREG < win_width
 	movwf	temp1
 	movff   temp1,win_bargraph
     clrf    win_width+1
-    goto    TFT_box	    ; and return
-
+    goto    TFT_box	    								; and return...
+
+;=============================================================================
 
 	global	TFT_display_cns
 TFT_display_cns:
-	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call    TFT_warning_set_window_com
-	TFT_color_code		warn_cns		; Color-code CNS output
-	STRCPY_TEXT tCNS2                   ; CNS:
-	movff	int_O_CNS_fraction+0,lo
+	call	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG						; Is there room for the warning?
+    return								; No
+    STRCPY_TEXT tCNS					; CNS:
+    movff	int_O_CNS_fraction+0,lo
     movff	int_O_CNS_fraction+1,hi
-	bsf		leftbind
-	output_16_3					;Displays only 0...999
-	bcf		leftbind
+    TFT_color_code	warn_cns			; Color-code CNS output
+    bsf		leftbind
+    output_16_3							; Displays only 0...999
+    bcf		leftbind
     PUTC    "%"
-    movlw   dm_warning_length              ; Divemode string length
-    btfss   divemode                    ; In Divemode?
-    movlw   surf_warning_length         ; No, use surface string length
-    rcall   TFT_fillup_with_spaces          ; Fillup FSR2 with spaces (Total string length in #WREG)
+    movlw   dm_warning_length			; Divemode string length
+    btfss   divemode					; In Divemode?
+    movlw   surf_warning_length			; No, use surface string length
+    call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	bcf		win_invert
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_display_eod_cns
+TFT_display_eod_cns:
+	call	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG						; Is there room for the warning?
+    return								; No
+	call	TFT_warnings_color			; switch to warnings (red) text color
+	STRCPY_TEXT tCNSeod					; end-of-dive CNS warning text
+    movlw   dm_warning_length			; Divemode string length
+    call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
 	STRCAT_PRINT ""
-	bcf	win_invert
-	goto	TFT_standard_color; and return...
-
-    global  TFT_mask_ppo2
-TFT_mask_ppo2:
-    call    TFT_divemask_color
-    btfss   FLAG_ccr_mode 
-    bra	    TFT_mask_ppo2a	; not in CC mode 
-    btfsc   is_bailout 
-    bra	    TFT_mask_ppo2a	; in CC mode but in bailout 
-    WIN_TINY dm_custom_ceiling_ppo2_col_dil,dm_custom_ceiling_text_row ; NEW position for loger text
-    STRCPY_TEXT_PRINT tppO2Dil	; in CC mode and not bailout 
-    goto    TFT_standard_color ; and return... 
-
-TFT_mask_ppo2a:
-    WIN_TINY  dm_custom_ceiling_ppo2_column, dm_custom_ceiling_text_row
-    STRCPY_TEXT_PRINT tppO2	; in all other modes
-    goto    TFT_standard_color; and return...
-
-	global	TFT_display_ppo2_val
-TFT_display_ppo2_val:
-    btfss	FLAG_pscr_mode
-    bra		TFT_display_ppo2_val_non_pscr	; Non-PSCR modes...
-    btfsc	is_bailout
-    bra		TFT_display_ppo2_val_non_pscr	; In bailout
-
-    	; in PSCR mode
-    call		compute_pscr_ppo2		; pSCR ppO2 into sub_c:2
-    movff		sub_c+0,xA+0
-    movff		sub_c+1,xA+1
-    movlw		d'100'
-    movwf		xB+0
-    clrf		xB+1
-    call		div16x16				; /100
-    tstfsz      xC+1                    ; Is ppO2 > 2.55bar ?
-    setf        xC+0                    ; yes: bound to 2.55... better than wrap around.
-    movff		xC+0,char_I_actual_ppO2	; copy last ppO2 to buffer register (for pSCR CNS)
-    clrf		xC+2
-    clrf		xC+3
-    movff		sub_c+0,xC+0
-    movff		sub_c+1,xC+1			; copy for comptibility
-    bra			TFT_display_ppo2_val_com
-
-TFT_display_ppo2_val_non_pscr:
-    SAFE_2BYTE_COPY amb_pressure, xA
-	movlw	d'10'
-	movwf	xB+0
-	clrf	xB+1
-	call	div16x16				; xC=p_amb/10
-	movff	xC+0,xA+0
-	movff	xC+1,xA+1
-    movff   char_I_O2_ratio,xB+0    ; =O2 ratio
-	clrf	xB+1
-	call	mult16x16               ; char_I_O2_ratio * p_amb/10
-
-TFT_display_ppo2_val_com:
-    call    TFT_standard_color
-	TFT_color_code		warn_ppo2		; Color-code output (ppO2 stored in xC)
-    WIN_MEDIUM  dm_custom_ceiling_ppo2_val_col, dm_custom_ceiling_value_row
-    ; hijacking neg_flag_velocity to know where the value is displayed
-    bsf     neg_flag_velocity
-    bra     TFT_display_ppo2_com
-
-	global	TFT_display_ppo2
-TFT_display_ppo2:                       ; Show ppO2 (ppO2 stored in xC, in mbar!)
-	rcall	TFT_warning_set_window		; Sets the row and column for the current warning
-    tstfsz  WREG                        ; Is there room for the warning?
-    return                              ; No
-    call    TFT_warning_set_window_com
-    TFT_color_code		warn_ppo2		; Color-code output (ppO2 stored in xC)
+	goto	TFT_standard_color			; and return...
+
+
+	global	TFT_display_ppo2	
+TFT_display_ppo2:
+	call	TFT_warning_set_window		; Sets the row and column for the current warning
+    tstfsz  WREG						; Is there room for the warning?
+    return								; No
+	movff	int_O_pure_ppO2+0,lo		; copy ppO2 of the pure gas (OC: = breathed gas, loop: = diluent/premix) to hi:lo
+	movff	int_O_pure_ppO2+1,hi
+	TFT_color_code warn_ppo2			; Color-code output
+    btfss   FLAG_ccr_mode 				; in CCR mode?
+    bra	    TFT_display_diluent_1		; NO  - continue with pSCR or OC 
+    btfsc   is_bailout 					; YES - in bailout?
+    bra	    TFT_display_diluent_2		; 		YES - continue with OC 
+    STRCPY_TEXT tdil					; 		NO  - print "Dil:"
+    bra	    TFT_display_diluent_3
+TFT_display_diluent_1:
+	btfss   FLAG_pscr_mode 				; in pSCR mode?
+    bra	    TFT_display_diluent_2		; NO  - continue with pSCR or OC 
+    btfsc   is_bailout 					; YES - in bailout?
+    bra	    TFT_display_diluent_2		; 		YES - continue with OC 
+    STRCPY_TEXT tmix					; 		NO  - print "Mix:"
+    bra	    TFT_display_diluent_3
+TFT_display_diluent_2:
+    STRCPY_TEXT tppO2                   ; OC mode or bailout, print "ppO2:"
+TFT_display_diluent_3:
+	bsf		leftbind
+	output_16dp  .3         			; x.xx bar
+    bcf		leftbind
+	movlw   dm_warning_length			; Divemode string length
+    call	TFT_fillup_with_spaces		; Fillup FSR2 with spaces (Total string length in #WREG)
+	STRCAT_PRINT ""
+	goto	TFT_standard_color			; and return...
 	
-    btfss   FLAG_ccr_mode ; new code to conditionally name the warning ppO2: or Dil: 
-    bra	    TFT_display_ppo2_none_ccr ; ppO2 warning text 
-    btfsc   is_bailout 
-    bra	    TFT_display_ppo2_none_ccr ; ccr-mode but in bailout, ppO2 warning text again 
-    ; ccr-mode and no bailout 
-    STRCPY_TEXT tdil	    ; "Dil:"
-    bra	    TFT_display_ppo2_cont
-    
-TFT_display_ppo2_none_ccr:
-    STRCPY_TEXT tppO2                   ; "ppO2:"
-TFT_display_ppo2_cont:
-    ; hijacking neg_flag_velocity to know where the value is displayed
-    bcf     neg_flag_velocity
-TFT_display_ppo2_com:
-; Check very high ppO2 manually
-	tstfsz	xC+2                        ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	bra		TFT_show_ppO2_3             ; Yes, display fixed Value!
-	movff	xC+0,lo
-	movff	xC+1,hi
-	bsf		ignore_digit4               ; no mbar resolution
-	output_16dp	d'1'
-
-; Set ".xx" to "0.xx" (bar)
-    banksel buffer
-    movlw   " "
-    cpfseq  buffer+5                    ; For ppO2 in warning area
-    bra     TFT_show_ppO2_1
-    movlw   "0"                         ; Replace Space with "0"
-    movwf   buffer+5
-TFT_show_ppO2_1:
-    movlw   " "
-    cpfseq  buffer+0                    ; For ppO2 in custom view
-    bra     TFT_show_ppO2_2
-    movlw   "0"                         ; Replace Space with "0"
-    movwf   buffer+0
-TFT_show_ppO2_2:
-    banksel common
-    movlw   dm_warning_length           ; Divemode string length
-    ; neg_flag_velocity is hijacked, used to toggle the fillup lenght.
-    btfsc   neg_flag_velocity
-    movlw   .4
-    call    TFT_fillup_with_spaces      ; Fillup FSR2 with spaces (Total string length in #WREG)
-    STRCAT_PRINT ""
-    bcf	win_invert
-    goto	TFT_standard_color; and return...
-
-TFT_show_ppO2_3:
-;    STRCAT  "'6.6"                      ; Workaround until a ">" is available in STD font
-    STRCAT  "6.65"                      ; Workaround until a ">" is available in STD font
-	bra		TFT_show_ppO2_2
-
-
+;=============================================================================
+	
 	global	TFT_LogOffset_Logtitle
 TFT_LogOffset_Logtitle:
 	STRCPY_TEXT tLogOffset
@@ -4050,16 +4348,17 @@
 	output_16_4
 	bcf		leftbind
 	PUTC	" "
-	return			; No "_PRINT" here...
+	return							; No "_PRINT" here...
+	
+;=============================================================================
 	
 	global	adjust_depth_with_salinity
+	global  adjust_depth_with_salinity_log
 adjust_depth_with_salinity:			; computes salinity setting into lo:hi [mbar]
-	btfsc	simulatormode_active	; Do apply salinity in Simulatormode
+	btfsc	simulatormode_active	; Do not apply salinity in Simulatormode
 	return
-
-    global  adjust_depth_with_salinity_log
     movff   opt_salinity,WREG       ; 0-5%
-adjust_depth_with_salinity_log: ; computes salinity setting (FROM WREG!) into lo:hi [mbar]
+adjust_depth_with_salinity_log:		; computes salinity setting (FROM WREG!) into lo:hi [mbar]
 	addlw	d'100'                  ; 1.00kg/l
 	movwf	wait_temp
 	
@@ -4076,7 +4375,7 @@
 	movlw	d'102'					; 0,98bar/10m
 	movwf	xB+0
 	clrf	xB+1
-	call	mult16x16				;xA*xB=xC (lo:hi * 100)
+	call	mult16x16				; xA*xB=xC (lo:hi * 100)
 	movff	wait_temp,xB+0			; Salinity
 	clrf	xB+1
 	call	div32x16  				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
@@ -4084,6 +4383,8 @@
 	movff	xC+1,hi					; restore lo and hi with updated value
 	return
 
+;=============================================================================
+	
 	global	convert_mbar_to_feet   	; convert value in lo:hi from mbar to feet
 convert_mbar_to_feet:              	; convert value in lo:hi from mbar to feet
 	movff	lo,xA+0
@@ -4114,9 +4415,11 @@
 	movff	xC+1,hi				    ; restore lo and hi with updated value
 	return
 
+;=============================================================================	
+
     global    convert_celsius_to_fahrenheit    ; convert value in lo:hi from celsius to fahrenheit
-convert_celsius_to_fahrenheit:        ; convert value in lo:hi from celsius to fahrenheit
-    movff   lo,xA+0                    ; temperature in 1/10 of °C
+convert_celsius_to_fahrenheit:      ; convert value in lo:hi from celsius to fahrenheit
+    movff   lo,xA+0                 ; temperature in 1/10 of °C
     movff   hi,xA+1
    
     movlw   LOW  d'1000'            ; offset °C value by 1000 to get out of any negative numbers
@@ -4144,52 +4447,7 @@
     movff   xC+0,lo
     movff   xC+1,hi                 ; restore lo and hi with updated value
     return
-    
+
 ;=============================================================================
-    global	compute_pscr_ppo2
-compute_pscr_ppo2:
-; (Pressure[mbar]*char_I_O2_ratio)-(100-char_I_O2_ratio)*CF61*CF62*10	
-	movff	char_I_O2_ratio,WREG
-	sublw	.100			; 100-char_I_O2_ratio -> WREG
-	mullw	.10				; (100-char_I_O2_ratio)*10 -> PROD:2
-	movff	PRODL,xA+0
-	movff	PRODH,xA+1
-	movff	opt_PSCR_drop,xB+0	; O2 Drop
-	clrf	xB+1
-	call	mult16x16	;xA*xB=xC -> (100-char_I_O2_ratio)*10*CF61
-	movff	xC+0,xA+0
-	movff	xC+1,xA+1
-	movff	opt_PSCR_lungratio,xB+0	; Lung ratio
-	clrf	xB+1
-	call	mult16x16	;xA*xB=xC -> (100-char_I_O2_ratio)*10*CF61*CF62
-
-	movlw	.10
-	movwf	xB+0
-	clrf	xB+1
-	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-	; store xC:2 in lo:hi
-	movff	xC+0,lo
-	movff	xC+1,hi
-
-	SAFE_2BYTE_COPY amb_pressure, xA
-	movff	char_I_O2_ratio,xB+0
-	clrf	xB+1
-	call	mult16x16	;xA*xB=xC -> xC:4 = Pressure[mbar]*char_I_O2_ratio
-
-	movlw	.10
-	movwf	xB+0
-	clrf	xB+1
-	call	div32x16	  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
-
-	; store xC:2 in sub_a
-	movff	xC+0,sub_a+0
-	movff	xC+1,sub_a+1
-	; reload result from lo:hi
-	movff	lo,sub_b+0
-	movff	hi,sub_b+1
-
-	call	subU16		;sub_c = sub_a - sub_b (with UNSIGNED values)
-	return
-	
-	
+
 	END
\ No newline at end of file
--- a/src/tft_outputs.inc	Wed Dec 27 14:34:11 2017 +0100
+++ b/src/tft_outputs.inc	Wed Jan 31 19:39:37 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File tft_outputs.inc
+;   File tft_outputs.inc							REFACTORED VERSION	V2.94
 ;
 ;
 ;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
@@ -17,54 +17,43 @@
 
 ; Surface mode
 	extern	TFT_surface_lastdive
-    extern  TFT_show_OC_startgas_surface   ; Show first gas and "OSTC2-like" active gases
+    extern  TFT_show_OC_startgas_surface   		; Show first gas and "OSTC2-like" active gases
 	extern	TFT_serial
 	extern	TFT_clock
 	extern	TFT_date
 	extern	TFT_desaturation_time
 	extern	TFT_nofly_time
-    extern  TFT_interval
 	extern	TFT_gaslist_surfmode
     extern  TFT_dillist_surfmode
-    extern  TFT_splist_surfmode             ; Show Setpoint list
+    extern  TFT_splist_surfmode             	; Show Setpoint list
 	extern	TFT_temp_surfmode
 	extern	TFT_update_batt_voltage
 	extern	TFT_display_decotype_surface
-    extern  TFT_display_decotype_surface1   ; Used from logbook!
+    extern  TFT_display_decotype_surface1   	; Used from logbook!
 	extern	TFT_update_surf_press
-    extern  TFT_surface_sensor             ; Update HUD data in surface mode
+    extern  TFT_surface_sensor             		; Update HUD data in surface mode
     extern  TFT_sensor_surface_warning
-;    extern  TFT_clear_customview_surfacemode
-    extern  TFT_menu_hud                ; Update HUD data in menu (including mV)
-    extern  TFT_menu_calibrate               ; Update mV data in menu
-    extern  TFT_custom_text             ; The custom text
-    extern  TFT_surface_tissues         ; Show Tissue diagram in surface mode
-;    extern  TFT_surface_compass_mask    ; Compass heading mask
-;    extern  TFT_surface_compass_heading ; Compass heading value
-    extern  TFT_surface_decosettings    ; Show all deco settings
-    extern  TFT_cat_serial              ; Add serial to current string
-    extern  TFT_cat_firmware            ; Add firmware version to current string
-;    extern  TFT_compass_show_gain       ; Show the current compass gain
-;    extern  TFT_show_timeout_testmode   ; Show the timeout during calibration
+    extern  TFT_menu_calibrate               	; Update mV data in menu
+    extern  TFT_custom_text             		; The custom text
+    extern  TFT_surface_tissues         		; Show Tissue diagram in surface mode
+    extern  TFT_surface_decosettings    		; Show all deco settings
+    extern  TFT_cat_serial              		; Add serial to current string
+    extern  TFT_cat_firmware            		; Add firmware version to current string
+
 ; Menu
 	extern	TFT_LogOffset_Logtitle
-    extern  TFT_show_color_schemes      ; Yes, update the color schemes
-
-; Debug and useless stuff
-;	extern	TFT_update_raw_data
-;    extern	TFT_update_raw_data2
-;    extern  TFT_compass_fast
+    extern  TFT_show_color_schemes      		; Yes, update the color schemes
 
 ; Dive mode
 	extern	TFT_display_cns
 	extern	TFT_divemins
 	extern	TFT_depth
 	extern	TFT_temp_divemode
-	extern	TFT_max_pressure
+	extern	TFT_max_depth
 	extern	TFT_active_gas_divemode
 	extern	TFT_divemode_mask
 	extern	TFT_display_ndl_mask
-	extern	TFT_show_TTS_divemode
+	extern	TFT_display_tts
 	extern	TFT_display_ndl
 	extern	TFT_display_deko_mask
 	extern	TFT_divemode_warning
@@ -74,13 +63,12 @@
 	extern	TFT_display_deko
 	extern	TFT_mask_ppo2
 	extern	TFT_display_ppo2
-	extern	TFT_display_ppo2_val
 	extern	TFT_update_batt_percent_divemode
 	extern	TFT_display_apnoe_descent
 	extern	TFT_apnoe_clear_surface
 	extern	TFT_display_apnoe_surface
 	extern	TFT_display_apnoe_last_max
-	extern	TFT_ftts
+	extern	TFT_display_ftts
     extern  TFT_clear_warning_text
     extern  TFT_clear_warning_text_2nd_row
     extern  TFT_warning_gf
@@ -92,17 +80,13 @@
     extern  TFT_clear_divemode_menu             ; Clear the divemode menu
     extern  TFT_draw_gassep_line                ; Draw the gas separator grid line in spec mode only
     extern  TFT_divemode_menu_cursor            ; the divemode cursor
-    extern  TFT_battinfo_tissues_clock_mask      ; Setup Mask
-    extern  TFT_battinfo_tissues_clock           ; Show EAD/END, Tissues and clock
+    extern  TFT_battinfo_tissues_clock_mask     ; Setup Mask
+    extern  TFT_battinfo_tissues_clock          ; Show EAD/END, Tissues and clock
     extern  TFT_gf_mask                         ; Setup Mask
     extern  TFT_gf_mask_cGF                     ; Setup Mask - current GF only
     extern  TFT_gf_info                         ; Show GF informations
     extern  TFT_warning_agf                     ; Show a warning if aGF is selected
-;    extern  TFT_dive_compass_mask               ; Compass mask
-;    extern  TFT_dive_compass_heading            ; Compass heading
-    extern  TFT_dyn_gaslist                     ; Show the dyn gaslist
     extern  TFT_divetimeout                     ; Show timeout counter
-    extern  TFT_hud_voltages                    ; Show HUD details
     extern  TFT_show_safety_stop                ; Show the safety stop
     extern  TFT_clear_decoarea                  ; Cleanup deco area on screen
     extern  TFT_ceiling_mask                    ; The ceiling mask
@@ -111,19 +95,31 @@
     extern  TFT_warning_fallback                ; Show fallback warning
     extern  TFT_sensor_check_mask               ; Show ppO2 of O2 and Diluent mask
     extern  TFT_sensor_check                    ; Show ppO2 of O2 and Diluent
-    extern  TFT_ppo2_ead_end_cns_mask		; Show ppO2, END/EAD and CNS mask
-    extern  TFT_ppo2_ead_end_cns		; Show ppO2, END/EAD and CNS
-    extern  compute_pscr_ppo2			; Compute ppO2 for PSCR mode
-    extern  TFT_pscr_info_mask			; Show ppO2, drop and lung ratio mask
-    extern  TFT_pscr_info			; Show ppO2, drop and lung ratio
-
+    extern  TFT_ppo2_ead_end_cns_mask			; Show ppO2, END/EAD and CNS mask
+    extern  TFT_ppo2_ead_end_cns				; Show ppO2, END/EAD and CNS
+    extern  TFT_pscr_info_mask					; Show ppO2, drop and lung ratio mask
+    extern  TFT_pscr_info						; Show ppO2, drop and lung ratio
+	extern	TFT_gas_needs_mask
+	extern	TFT_gas_needs
+	extern	TFT_warning_gas_needs_warn
+	extern	TFT_warning_gas_needs_att
+	extern	TFT_warning_sensor_disagree
+	extern	TFT_warning_IBCD
+	extern	TFT_CNS_mask
+	extern	TFT_CNS
+	extern	TFT_display_eod_cns
+	extern	TFT_warning_mbubbles
+	extern	TFT_warning_outside
+	extern	TFT_display_pure_ppo2
+	extern	TFT_info_deco
+	extern	TFT_show_mode_divemode
 
 ; Misc
     extern	TFT_standard_color
     extern	TFT_disabled_color
     extern	TFT_attention_color
     extern	TFT_warnings_color
-    extern      TFT_divemask_color
+    extern  TFT_divemask_color
     extern	adjust_depth_with_salinity          ; computes salinity setting into lo:hi [mbar]
     extern	adjust_depth_with_salinity_log      ; computes salinity setting (FROM WREG!) into lo:hi [mbar]
     extern	TFT_convert_date_short
@@ -131,5 +127,11 @@
     extern	TFT_convert_date
     extern	TFT_debug_output
     extern	TFT_show_time_date_menu
-    extern	convert_mbar_to_feet   			; convert value in lo:hi from mbar to feet
-    extern	convert_celsius_to_fahrenheit	; convert value in lo:hi from celsius to fahrenheit
\ No newline at end of file
+    extern	convert_mbar_to_feet   				; convert value in lo:hi from mbar to feet
+    extern	convert_celsius_to_fahrenheit		; convert value in lo:hi from celsius to fahrenheit
+    
+; Alt dive mode (aka Blind mode)
+    extern	TFT_divemins_alternative
+    extern	TFT_divemode_mask_alternative
+    extern	TFT_max_depth_alternative
+    extern	TFT_big_deco_alt	    			; The big deco
\ No newline at end of file
--- a/tools/dev_ostc3_firmware.hex	Wed Dec 27 14:34:11 2017 +0100
+++ b/tools/dev_ostc3_firmware.hex	Wed Jan 31 19:39:37 2018 +0100
@@ -1,7682 +1,7682 @@
-:000000860cbb270091748074a7f4beb671c667
-:00001044167c0d515f9ca30ea1960ed17f4dcd
-:00002044d673830c4d3548de227fa72f8e5eb1
-:000030864ae825ecb3862292b33c3d29074de5
-:0000401fef954482586ce1a2e77461f36ea73e
-:000050a77dc521eb93ffdb149ae31b96452202
-:00006052ee394d064ca3ae6fee924ba24370dd
-:000070ddcbc57c1aeb10602efcb8f1402ae337
-:0000802f3727e72e87f100bf9d0981c9084c00
-:0000905ed9551b8b471bdd9e73d28798ab6c03
-:0000a0f0f6a9a6adfaa375548f3347b818628e
-:0000b0a9ca01fa76182cf7e0786a7b6a321f18
-:0000c06080631761a212bf4d0aaa6ada96d929
-:0000d0332d9d6e7d512c9f882a081142c2813b
-:0000e0fb6374d3e8dad11def353f0c8c870bb0
-:0000f038172a252761934563a696bd245770fe
-:00010096f21b3cea8c16a5374e946474d95f12
-:0001106befe9a96e3fc6db5c58aa69eebbbb21
-:000120f3c01a9ef64af638834ac9ef09c8d4d3
-:00013033fb7b6bea8b07ab4d8d978b5e596d23
-:000140acccbf01dab93364fc320a5e0a908faa
-:000150b427663ae0041790e3feb62e3eb87cbf
-:000160d4fd5483545028e0b355548f37c940a5
-:000170e42debf823dfe04ce5b81281323b5baa
-:00018028d678b2ebd9addf31e163252813b53a
-:0001909cecf6265f4ede586d0cf937b92ad717
-:0001a03060198f4b004a9baecfbf467b44e3e7
-:0001b03953dc669156938bc24a1b3528509ffb
-:0001c0bd277e7576b5ee2cf6ffe5f2dc3fac3e
-:0001d0a423817c2307191bfb14f4cf3cec9541
-:0001e02914e319bf1f51fdb4fd6f0223622b83
-:0001f04e907bb80f9a711b9bab4bfabc74c3cf
-:0002000b97e52dcc2db6d18cb0a129752729ed
-:000210903666bc801abc787005f390583b9c2d
-:000220046a58296f2c888f47e95be00078199f
-:000230035e48826d51fdedd4d8c74382da4ec5
-:0002402ef384d81f01d6e0e2461dc64d89f8ca
-:00025005161c675e7727b48d90ba827b45722e
-:00026038744486debc310fb6d2066ec7034fa4
-:000270217f9ac5e8b33d8a542d67235854f397
-:0002801b224764d4bb063e5dcb1de4761740df
-:00029085a383fc89839c577eaa3ea4e8d794a0
-:0002a07556a63024a9125b2fe631dcc8a47ab7
-:0002b0f34ef0f84c93e7caaf09923ab92c6d6f
-:0002c0cdeb618915b1bd0c6933aa1fb8743bc5
-:0002d0cfd1efdabf2431a07b9fb6548c530998
-:0002e0f676c13945bd04ebea63524f331a832e
-:0002f0310c668b1c1c99ec8f57031799f25fa7
-:000300e87336c0149e1d330e2b02b9ef89977a
-:000310db04e28ff42c710cc2e731af567d93eb
-:000320617ca9ceebb5e2f1b9b20e719f9e348a
-:0003301e45cbadb22a4cdb7de2aa1671f52623
-:0003408feb90c52e7f45d90db86eb73e80e034
-:000350d668f18d0a6d12c6e42bdd265f2646bd
-:0003601b57d192482dd48fb0911517060ae54b
-:000370870c7b5cbd2d8184c73213caecea101a
-:000380d1d7a806727203d4a36bb649ba6726e2
-:0003907270e5521fbf711daf53ec5c32826b68
-:0003a09e01c98ef313462b385a3a9b4654b6f0
-:0003b06b95fbc16d4284e00fbcf10d18b5a7e4
-:0003c06344803763e81b18f04f8469679dbbcc
-:0003d038b4e6a636b7a50af3e26862be1dcd6c
-:0003e075b034e059364e30c830f808db0dd6a5
-:0003f01a95174381a1bcbbc6e6fd8198c09c46
-:000400ef52eef2527ed04460547e3c67fb029d
-:00041086598a97387e5095e8e55fb60e8f8c57
-:000420a4e9d0a719aae79c78246211683860db
-:000430b60b6dc41ad4bc8b21ada94caa77e727
-:000440517769d8ba8bc98099b1f713c8dcebf6
-:000450e17a7a8da237dc513231a1eedd7c988a
-:000460d8e4c5b2f949b4df6a9af10f68949a30
-:000470c229e4c066a41ee581e0c55a3b6ce4e8
-:0004802d917c9ccf25f1a4d3c624e7b43f9cbe
-:0004908ab72bd0d15ce8ba59e6dd33da110d05
-:0004a0c6badf5a034a7c79b3e96fe2c852167b
-:0004b0da73ff807cdcef147898a7b094790ffb
-:0004c0053eadf7a9b0bf0fdb9f99227dc36894
-:0004d0198b842fae94a9a0b5bc5f7d0d87c826
-:0004e0eff7c6dcb349dce2ad2c3ba2dca7dab6
-:0004f0f77284576eeeeb39e79e58d70da41692
-:000500251aecee21171b90250bca87eaf8d5cd
-:00051086b7cd653fd3bbe4e557d4c4ca3bdb0a
-:0005202e321942514cbbee3da5084728e0aefb
-:000530e4a77e3cd8f7abbfc18b8d0437afb121
-:000540e4b8c9b27db04bbd8a3913c728cebbc1
-:0005503a44a89dd34d05960be80be9d08f0536
-:0005604a635aa33d0135b58f07a6329e98b7a1
-:00057040bbb25f6f80b4a2136914bf6625a519
-:0005809734d2b52935f5dd3cdeaa1d1d881f8a
-:000590ebb29f13cc262cd062e3057da22d6c79
-:0005a0a4abe0b2fde69957bdf34ae524057cbf
-:0005b0781b42d9e0d7650caa4175aef950f844
-:0005c01c2c80bbc21ab2550168a594b17fe3eb
-:0005d09b28f32ec7e660ae2140bbd99405ceec
-:0005e0a0670af1460ea1b2cb1c1e538966d04f
-:0005f057a518500a300eaa89276bffb7d8c035
-:0006004f7d1842e5768777732464068e2a220e
-:000610614cbcbefbfa668df7011a74354a6362
-:000620c168412772c3d51d786cdd9655154651
-:00063035be61fc65e061475d9333923ebe72bd
-:0006403ec2e969d9715c9e732c5e55c1aeb518
-:0006509b64bed1a9f021972123482915af72fc
-:0006605d5749131d64ac5b6634fb6a4400bba5
-:000670cdc8165465b979fd1119b2e4d7fde143
-:000680a939dfc44945f10258e66f513f8775d7
-:000690ccb6aaa8ee0a97efae528eb502643476
-:0006a0040733af1b883645ddfb97687daca352
-:0006b0f7b38a301870a76961e17f81a96dd2d7
-:0006c00c05e254fd8e8aeeb7ca269aa920ef3b
-:0006d076dc6e0bfc12980276b086e5118d4e75
-:0006e0fdbcb6f24bb747c3578b1d946dd9c8f0
-:0006f0d422acda3258249490a59bd66e18176e
-:000700e3de8a9d7a364683d54533fdb7aa069e
-:000710c5c143c8a71179aabd342e196058c1b7
-:00072074d5fcce2a7fce2ee373490d1defd78f
-:0007304488dab4d7cf42053ff781a92fa597f1
-:00074064995f4da4e84b217c38f7031603ebb3
-:0007503d789811ad11c25e898cd808f6107efe
-:000760bd69453af64aea31687b3faf136c1649
-:0007702dad809df0e3fac3f74c71f286a508d6
-:0007801b212661923a8a10c735fd83af8020f4
-:00079055b54c62c095ac406f6f2fea8296740a
-:0007a0ea451ee98b8fd4c73212731d9ed7b3f9
-:0007b0028379650dae3ed68030b4a9162c7da1
-:0007c0244d2619ec663e37a0849873ba4deec1
-:0007d065150964f5b38c2f9f0ebf252d009f6e
-:0007e024a21f9b91cf2af63701f6ed93812dd5
-:0007f0bb38539901216c0df23e58f93ca2033f
-:000800ece11104a3cedff48359f8c33ce19815
-:0008104fe6ad5f4fe2a895ba434bf89828e638
-:000820670ca39dd7c7408a65138b39530d42f1
-:000830593e9c406c49d5bbcf5228712b34d332
-:000840783dfd1db9eb325ca894423e326abf0d
-:000850144607cadbaa67f680f02c13d6127fb2
-:0008600ddfed4e0d4b84ef3691a62e90dfee2e
-:000870d488858e9e755fbf5bdf2604dcaa4d6c
-:000880fac7d4f2045adce3dece213c2d469f49
-:000890acd6876df80871cf6d970480d9570f60
-:0008a00a53a3bb29b79e0dd640db2feb241925
-:0008b0d44e3edfea1a04f8b715bf74a5f2a8d5
-:0008c0cc0be45c582b5f19dc1829e1ec1d7441
-:0008d05e4021eda4cb63a625732999fd6b5827
-:0008e0518d65df1d63ac6c57a860db6d3b5245
-:0008f00baf592159a69895101b88f20a8f0fc0
-:000900993728d32dc563b15fde7dd64c569861
-:0009101b71253ff1d9790203c8bb913dde02d2
-:00092067bc755b41e2d44e22e7a87c784a7676
-:0009301ac0c27b04a67883d65b46b441e1a957
-:0009403c5dc39c766ace95850e3b568d96d006
-:000950da65d2813f1f2970faabdfde89b5de4a
-:000960c038abacbe05c420d2ff98d7e50619cc
-:0009708f8f24555540388ad8912e91a5932747
-:0009800e6fe9bd53428c7bb61909ad8fc2cf4a
-:0009904a218e200501e950d781b8a8ac4b0523
-:0009a04e3c532fd8f24b2ba696d8144aa6a663
-:0009b0fac88c1ac0a18d6f1aa3496c72226fba
-:0009c0e9e21447a2b5cb55a1c706f273b3ed9a
-:0009d00fbf07fb773529294844824381a5c20a
-:0009e0f0ea127a38f8b2a5ba9268dcec3efc26
-:0009f038e71a2969d447a9bb78e72235ebca89
-:000a0052f43fabf3d931cf7a1168c5b71dea43
-:000a103d46c033c1569cf3bb494d52a564e4fb
-:000a20a43e759434165c379e942f30191cc71d
-:000a306182744d41448bb830ddb21cafc16652
-:000a404264be08ef193299512f88549ea81cbe
-:000a50cc0430aa543db8f694a102f768ec1a59
-:000a60d370de30eed20de9cdd54f45f068d9cc
-:000a70ff724a07c3a153db86c76ff39d8cde74
-:000a80cf3589e8c590fd51f6e9b581296f7692
-:000a9014f39d7b57f631134e5aec51e09c6914
-:000aa0b8b3b29233a90b8d7b97e31fb1cac5d0
-:000ab0261ed5144f8b044ecc28e1b2cf629bf6
-:000ac063a714c96d5c2449aa4b8b859691affd
-:000ad0fbd6da827085fc29cd39ae3d89eab9d1
-:000ae0c86a1e9f67b245a19c1cc80775249a8c
-:000af0beed8ff967e830b86f4cd82ee1977c4a
-:000b00e4761c8c172a62c12f5f0a8880d0e7c9
-:000b108973be6832cb3772c426d15e7ce8c6ab
-:000b20a880d3638a55118aca53035be23ddffa
-:000b303a1ebeaf3f67021d0a1aebda7595c8b9
-:000b401f6e9b0c20cc1121365f0c3ce3b75434
-:000b50c9d8e1348b6764c1d3bfa4e55687d991
-:000b6062f3c4f15de7fe6097d97baa83cb4dd1
-:000b700d91b7776d9f87fee635650b512f8759
-:000b8086ed6c92d59cfc45b69b976e981e28cf
-:000b903930c4ec24814236ad51d7dfc04698ce
-:000ba05f77850a94a112bd2f23bb67c00eef8f
-:000bb0144da77af58d2404d71bbba7140b7e43
-:000bc01ae8958d69ae2f6e0b8690fe3019fefb
-:000bd06f094145d630ccae311cf8c77721053d
-:000be0cbde9ff32fb3fcc6829037211309399a
-:000bf03358e41c99df0e41b18917758c7caa35
-:000c00dea70933b85d0c9f5e0096e0104e76d7
-:000c109f4167fe3d4f73dace9e3b16097ce81a
-:000c207d391ac391019861ab3b7a55d9015fe3
-:000c30380c336a6a275d81024052621bedca15
-:000c403075d2e634be90992c2d741611af4f16
-:000c5021ed4a005c50f0275815fe3dd9658b9e
-:000c6080a3b6c98811ace1108b9dd9f7b9eafb
-:000c708c505a366f47b81fdd6b5e19d0421181
-:000c80cb86d1e6f3e19776d3a4437320df9403
-:000c906e4ae9614c6c8f489e90a9a8ef889b54
-:000ca0864ea9d4b706ba5c8c247619d4b30557
-:000cb02e3070359938442ce0dd3d66b9dcecf6
-:000cc0f85fb618d9644ac57d2cb36cc46bd3de
-:000cd0bce14b479e55f2fbb6dcb00f63f79c95
-:000ce02d0b2f46824377114e4da4e06656b03a
-:000cf07c3088882784d64e065d365e271a580b
-:000d000654563e2b70a2d99b15b87dc8bcbecf
-:000d1037280a8cf7ab34b404d4740a768eb20e
-:000d209e0ed752b08dacfb7625bc7968aebe01
-:000d3016d038c91e019d8298d4ed60f4ed224e
-:000d405f4c145f102169b523bedf9200986744
-:000d501e3632737547ce9eeefea0f2ef5299a5
-:000d6048442acdba4376685daf1837202a0b7e
-:000d70b81a50d9d22b65143765a0e9143e5ddc
-:000d802f765b6ba722328894c5abe5abd6fdf9
-:000d90e3e98a96a1f48cc33ae421b2ca9635b7
-:000da0b3008c57acc8b32272748f73f425716c
-:000db018d52d80f8337b25cef9ded424bebce6
-:000dc018b2543281af4a571e048f22e16537c4
-:000dd059a5e765741466eac8df46f2939df5d3
-:000de0b8262cc4180092d1ab61b4367fb06fc3
-:000df099121c3eae8856ee1492d5e121e8583f
-:000e006966ad84eb27bd0663da9c5634977e51
-:000e106e00a27f5f37e8a6ac8f8e22c7ccc84a
-:000e20be997b0047242575dce4de4077abfe49
-:000e302226cd1ba992a3fc29ec669945c7f6b1
-:000e402de9b12108cc400c7d30071e4fea75d9
-:000e50e38bf68cf8a8c2692d0688cb21b81979
-:000e6046ec7fcc0186d8b6f27c5ca8ab2b6de4
-:000e707083b0c635a986fc63c5b2fae2fa2538
-:000e8079ff5f6d119cf338b3e50c9c6f5ec236
-:000e909a6c863676de32c2b454860ed75fc79b
-:000ea0b285c3b6f915efbc3e14a1cdebac75c7
-:000eb0e0bd12cbe0f6d8300000e2ba153be07b
-:000ec02d85f60a185b4f7abfeee9f0c7f98a6a
-:000ed057fe1f2bf941cf2226e2c96bc46e2b10
-:000ee0da2a1920541480da8606be92485b5344
-:000ef0ae1a75cb9d8234db62039a174083a893
-:000f004770e695628fff7222bf48fe00460c8d
-:000f10e90ad63fb9f7bb7a4f7b05bf903923ba
-:000f20547a67a233bfb54d31e8ef62170f85d8
-:000f300d9d262d56ea07ef7898071eb0592ec8
-:000f40362b46dc3409f365ff5c1c8ad3ddfa75
-:000f504a47be5ecb1bd4c35e2ff8ac91d6b4c5
-:000f60b997f332f6a450d2e80dcdbc8c682a3c
-:000f701e927a459944991b8580c22db3da9c1f
-:000f80e35491b0aa846fe74011ca4b61a25a70
-:000f90616048729331a87b3f6a6f4c7959fd23
-:000fa0f5c65bbb764ed15278acccaeb8c9f693
-:000fb0fa932e97d8dfa353df452a319526a2cd
-:000fc073d26c00efdbb427dca2d7991f52f469
-:000fd004b0fd3bdc4b304f6428d32d33078ed0
-:000fe01f418618ca7d2c624b8ec5db49f59405
-:000ff04d2eeee80fd5b6151bb786dbe19337fb
-:0010004b5f25ae25abff816cff39e08a6d54f6
-:0010104564ccc57a9a79b1f306bbd331af25ff
-:0010209d3e3579c890c8e9d58cdaa714bbd151
-:001030d10a76ebc3aaaabd58c8fc3f2b757297
-:001040853e31f1bbb0da3e6f7128e227519750
-:001050a75e1f3aa2d089fbb1ef3533b759e7a9
-:001060fcf5a5499932592f32fdacae9c018b83
-:001070b922c6ac5482ca82eaab0b9d7a3f4b96
-:001080ab6a8cd012af360e1f5cfad49932278d
-:0010901f9262d25fe9ead294302601012236b8
-:0010a0ce130994542bb3fd2f04a2ad30e1d7cb
-:0010b070154974955bb10cb2d4ed3eb1cd14c5
-:0010c0133546f6b603fefdfd1c4335b7fc71cd
-:0010d0829e52129da280630aa9d63308a2b8e9
-:0010e0d4e03d0a83a346d2c3d0a48689c731cb
-:0010f067b8bd5fe490742566a316b53e27c2fe
-:0011007f4494e09acb9d79d100e74ab1d56999
-:001110ca79f7aa60b1ac8f1559132ddff57ce0
-:0011209329e4f6aa5d2eeb8ea7434f937ae1e9
-:0011303d40ce21b68c7f2c2638e5262642f42b
-:001140aca1dd33edfd392431e940afe288d061
-:001150053d577a1d720672fb0f3d31c39bbffc
-:001160a4cadf4c6b8fba7ed67f0547b6272451
-:00117059b750b17406f9dd967f8ab0f35b055c
-:0011800dc7646d4584c43a079ed121044b401b
-:00119033268dfa15d643040fc0685e58827186
-:0011a03a726a5ef512125146766f6b09023fc4
-:0011b05658e069e8d3381a5236123793f277b1
-:0011c0675f10a64e49c762cccd02e67004e411
-:0011d0ac4b9be8d1f5388f55666674b7bf94c0
-:0011e0f4767c4e8b7a330a8dd151171ebea987
-:0011f0c3be81c06ff092ee6a3d1905d4b4b6e8
-:001200ce498a9122b90f67ed75c0bd811af97c
-:001210da55c6b92edd0ebc9d096f840e205c63
-:00122087097639225de047ba42ba9ba9b2e390
-:001230ca68b3b41eb9ee9397e990597e8f3b77
-:0012400b3956fdf7930574132ef8c03a162028
-:001250a661d73eaec59cc315a9aecd4800a762
-:001260d2d4372bac57cc62b016b3ad12cd8fdb
-:0012700de4a9d54f60829b6fe226fe56dbcb6e
-:0012808c6b3b41f4b34fcc7edb8a5d7321b7f0
-:0012909c8b3ec2a2d734d83b9c980d033419a2
-:0012a0d4c3e1c838d69ce11ed5e426d4100b23
-:0012b0e7a5248dc36b28e21aaccbbe0c969873
-:0012c0c6c1c38fa04475c119b066709159bed4
-:0012d06cdd8aa701cc98781d367654ae7a805e
-:0012e032aae571b19f51af7c4473bd29dc10ef
-:0012f045fc873c2def1a4c8ab489f2946d3a86
-:001300fa4a5c7fe312d955118b34449428dcac
-:00131069b437cf67bbc951b1dbed8199dce80d
-:00132018df9c8edf216578d32b7a9666a93777
-:0013304fe9bd25a2454133900f3b6f787abb5e
-:001340108e92d819f198d75c10d645a18b08d7
-:00135095181ea1711a9a1d7710cfa84c7d2114
-:0013601b627d9f9c4121f1c32572d3c840e49c
-:001370ceb2c91e4c12afc2b7a3c648e2fd1de7
-:001380828dc1e036983d43248fc50688af8150
-:0013900488b6b9d662e741ec4bbac72d113a8f
-:0013a06cb347c7ca814b5ee4aaa04779f2cf67
-:0013b0e9f9b0a2fb37f5781b3ba6b57b9196b4
-:0013c0caccca2a5a5a323dd75cff160add3db4
-:0013d0c377a202ee4658eb8fed50c4ae3978f0
-:0013e05152ad1e5bc5120a8564032a4264a7e6
-:0013f074f35ed07a5e9f24aca98e66d5614e6a
-:0014001d196725492cae0bc940979fc842d53b
-:0014105cccf7f9dcc1d5551fc3c625fd9e392b
-:001420db582c8aeb4d07a76a5979e13258b94d
-:001430d892219170e1805f0350d71fb8c0f9ab
-:0014404de1cd647488c11195b28aeca9559dfd
-:00145049915dc8e55c4dac6aa0636fddc2a902
-:00146008578740e2ab10c41c4593ed8cb92e58
-:001470cd851e4fea85058a579976ea008175a0
-:00148081c971220827eb4d4d6de37eabbdd7f0
-:001490e39ad0750f164884e8ae9a1f3c9603b1
-:0014a0f9635db38be369b3fbb4cf76e3eb9095
-:0014b0681be5386040fb9febaa69929065779b
-:0014c0157d57debcd11eda897b370186c6c161
-:0014d08d91723f85467a5362796feb37fcf0d4
-:0014e064051e89dde8269ed8b54c1a63f9d919
-:0014f06fe9b964416007deb31532e31beaabb0
-:001500ae8bd926adc38c87c575e0d14fb80a7c
-:0015105bc437a410c80e5afbabce573c0b69c6
-:001520422114f74dffcc5416aa5af2edea7be9
-:001530c5ec86b4f435304a9823a36744680733
-:001540e7d0db49778b5c3cd29a0c734df5e792
-:00155052896a59ae8a424615ac2f76a27275cf
-:001560c9cbfa80d06f4484f43b8d0ae9d0a82b
-:001570581c3883c543acbb45b6778b34aff19a
-:001580753fddbbeef3a7b174e7d70fdf38b1fe
-:001590eed9e99488766c90773185447ec2397e
-:0015a02334c8496d500af1372ec1d43392ad69
-:0015b07a9d9224f2e0fb4bcebe94dd51a84bc8
-:0015c0c16738967444cfc5116fac507c44f6d6
-:0015d0873ac9e5ab5f0a8958f4a990cd27cc1b
-:0015e06983e93ed8f5de85fe2a1807f69cf926
-:0015f0a1ab2a42c98b5da42d98cdfac12536dc
-:0016006c30856103d29153c9d27f1538ab937a
-:00161072433057f156f8f90808bd9b326fe207
-:0016200a4c40452c35c3e03707fc25296f9bd3
-:00163092ec1e8f3996a4aef738313d10ec21f6
-:001640621faf66f14bb1413ed68cece1975f36
-:0016509430551a60422638b28d80b08a2ed3a5
-:00166044845b54902c518fbe9b92b2ee8a3dc6
-:0016705d7a5314bc4737e2b2543174f259815f
-:00168027a5514b132f623f7044c0c02f293290
-:0016900f7ef9793bbc419c21eed0d35d2e1e4a
-:0016a0f04df1814ff16595319afa70234a4095
-:0016b0a01cf89a20dcdfb3028e8985140a0e23
-:0016c0d69ea480b5a4dc3b95f7b7e340440798
-:0016d0fccb9a801044ac82aa75c385800c26a3
-:0016e059915f0cad386070f4eec77303360c57
-:0016f01019f563dfbcae9c87f45fa97465d6e5
-:001700060832d77a64c47a1a5eab2729709b54
-:00171055659198190a5b062e3d2419b490b4d7
-:00172078ffd33a8097aa28625dc6df4740a215
-:0017307b7ba8c70e5b6bf645ba797b1571a281
-:001740de05c300c242e30fe81e4d868d3748b1
-:00175052aeeb115034aeed0fdeca2a79adb585
-:001760d7a8d63124c656def71bc106bd2ac153
-:0017707dead7bda5b06f7bfa59285fda6c3c1b
-:001780a7a935bb13d35ebb312c7099e6baa133
-:0017908ff7e7abcca82c5d236c2f16689554d4
-:0017a0de931de98029e530fbf0be1867591c83
-:0017b0c4aa3c5f19260774a48322e85ee84c1c
-:0017c0ce9e4ffc25d180c2138d6001cd69f9ee
-:0017d09d15c6c5e4150baaed3345658a03aace
-:0017e0119e16eb3ae53e1579b8ebf587dce75f
-:0017f077b284321c2fdf4694707a97feded757
-:0018003e2ca609736a6323b9e17ad6d6273160
-:001810f8408c3300471b25377bb5046232330a
-:0018206a65c71a51846eed645d0349ca3a64ef
-:001830c17f79734ae73b806f9f21ff37f9e75c
-:001840dad61050855dc380ff1ea2b8f9be92fd
-:001850be2ad7899039eae3da13ea045f8c64de
-:00186095e1fc0bf5a03d0f9567b3632c0ab778
-:001870edbf7d097c95db0cfeffaa4604731bb5
-:001880b7a1d37cbbcc0da2a75b59668702424b
-:001890fa756aeb6f3d8d28dd5b85e073bbf269
-:0018a031a11656c11e8c46a59f97741dfe0732
-:0018b060ea70ec85da9301d1bac4163c72ad01
-:0018c0f7c1d68d792b4219d47168022dfbf128
-:0018d08fd0aba51b973d0722f263a521aeb89d
-:0018e0e1a7a86fe8299cc844cfa3c0be648738
-:0018f0eb4f6eddba8b11eba5773d690f58e3ae
-:0019005d8de4f746ed07dd09c568c60fa427e7
-:001910079f7b78dc8c576381b147af910b83b5
-:0019201bd936d96ee473de76e1e1e09a766434
-:0019300928f214e41ab6f3fd0e381ea05e7379
-:001940c934cad9765a237175c4856b9f7d3d85
-:001950a52afcdb00fcdae31c2680ee1b646741
-:00196066c656c133a50396126910ba9018a0c6
-:00197062620bf5f4b3f8c4467e1d6f3603de10
-:001980febec5744a2982193e274cb2eed46d34
-:0019902f782ed0f2be92d3a37ee13fc7cb9bac
-:0019a011e06353a29a9d54ef199840f9315d4f
-:0019b01bceff44d9bd00d5053d16f3096f72a3
-:0019c016ae1d1432d5312bdb9a2de41145d878
-:0019d042d5dad67e2229eebf90b1f152c416ca
-:0019e01519fb965601e2e064cd97444f91264a
-:0019f0c46ffe9f73b43b109af9fe9b3347cdbe
-:001a00b2d675e49771d8edf16ed509e3a21990
-:001a10a6e7cdf1c3ee3805d4f4b160e3af7efe
-:001a20fa89b42ae148542cfc0409b583cf13f9
-:001a306945deae2c8b6aa04fb0e360bc3eabad
-:001a402dc645bb2831c9017a444f5bfb352f42
-:001a501f06019de2b396b3f92b60115d935715
-:001a60ab0a079061c79c7270237fd0f40d21b6
-:001a708342cc305e5a38000271c9194e5b9bec
-:001a80b52441cdd3d2ce55d76ce45fab1ba1d6
-:001a905e5984e90014ecf39e5b91093d406bad
-:001aa01ca969aca073a742a04a136d162b6e58
-:001ab06262f7106428df7aabc2edd84d6be234
-:001ac0d726b4468ffb0da5875321d5a3b3040f
-:001ad0c3fa920251fb57bc4e432d8fdf4aa15b
-:001ae0397a710d4846235e0914e19182b14bf4
-:001af0db97eb418772c66de89139787ddbb660
-:001b009b576c94d5b7e4761b45492f2ea28d88
-:001b106c2439c6b2944b9d0e25bbbe84d3f156
-:001b2014df857b38783e453b88868b72c5505f
-:001b30777ed8f5776e1d807cb9a78901dcfb11
-:001b4085daf58265ee4e3dc846d9cb20435f10
-:001b503b89495555ade1a496271d92b3895652
-:001b60c0acfd24929d0e024707effaa3c21405
-:001b7097d711efe2590be4975438d8c730fc67
-:001b80e806eeaaa538828dfe10a97a00007e45
-:001b9086907fe5d57200b3d0a3157b591d6482
-:001ba0d43fcecb74342525d3a3a98157b9e83d
-:001bb0fa4227cc21fb964cd5b18a0e134e1233
-:001bc0deefcd450eab37c9480abccc3d4313b8
-:001bd02862d4f8db1385879f8ce73b3023ef87
-:001be05ae9c051ef9dc7df88939adfb6685366
-:001bf0798bd03215a30c3c519cd26ad65d9376
-:001c0085e02907567e7cb6dbb04044b3b59ccb
-:001c10ec76d03bdf45d404db57b977008ec720
-:001c20683b76d965bed2bcc8128f06062f3743
-:001c30d122e73272cdf72a3b719f237eca698d
-:001c40a7641d386a2098283f32b4d3086fa820
-:001c50ee4f8e8cf4f97f764c303828dfe278fe
-:001c607e10e05d6d7a101a71ce3b8cf673c817
-:001c7020da51696b079cad2a14098631b9ddb4
-:001c804e3597894d1de8c578e41eb20e4eee26
-:001c900c62d8b16e397942ee542a9219f45a73
-:001ca0ff1ea9d1ba668dd00995bad09ec6e23a
-:001cb0b327f4b8ed11735002ca451e2f5bf17c
-:001cc0114987705ddd90c66809c68706bc0899
-:001cd0a484770375e1e0592baedf316a2ad354
-:001ce02d30d55b9a080ab6f3a4b132c72b245f
-:001cf029815a1a8d8cb043deac9ca76bdfdb59
-:001d009991b60bd660be2278aa9e63d9071d30
-:001d107e5386a7235775ba7b15c76aeb93788a
-:001d201228aeab8ae3238d8871651d511d3c26
-:001d3038bb0c8496ad8316854d2a013bd8f1e0
-:001d401e37f8c0ce8ab137432481cf3d45c973
-:001d5074645e262919b80366d3736caf4d8aa2
-:001d60708caefb59897c2893bb27864f6ce422
-:001d7099cf44db7b8b54bfcb5cbd154ac5a706
-:001d805c4d5061f6539d2cdd501c2c17a59b68
-:001d90d6e876df80995921de0c9f3b296c47b1
-:001da0b9cc6387a61520d130240e672f9f2b3c
-:001db062396f638633f134f2ac0f10f3d1aa2f
-:001dc0e0c6ac45314dd748f50f378ede752236
-:001dd09bca2845cc730a296605e95ee0eb0b37
-:001de09e05bc84062443af1c68a7b548e0767f
-:001df0ac1390b937f24562d80bc3bb7e325ad2
-:001e0018e38121fb343ec74ab6ff7301f38d8e
-:001e10896d58dbeee1a06e3a19126964d815b8
-:001e20e24c87c543c85956a842d49fa235b904
-:001e308c253ac6a7b0eafb614c34ee7a3cb234
-:001e4031216c2a8e9e98286b1c11305ed1352b
-:001e50b5d6c6768ef465fe43dce73f173db01b
-:001e60fef4b03321f0934c2789c76b8a1f1bec
-:001e70197f70a438d4c5f38c1b5c42a488e071
-:001e802452ea999b36feba956e1344a779ed37
-:001e90217c188d415ad8e0fbfd20a7c39c1301
-:001ea0d99cbf25d8057574c2839aeda8771a4a
-:001eb0cc335d9917845e2dc6840123cb1ec1bd
-:001ec0c3b3d0d60f517247bc8e2f38f9cc20e9
-:001ed07669c5bdea7b07e7d625caad561f8bdd
-:001ee0492b5b38b1ba611cd43b0c73825e739c
-:001ef0e1a116864c798cef1b9c4a99d9416b91
-:001f005f7c8aae9a021a6f2418ce3147b39f0f
-:001f108502a35a41e31fa1b03d0d70609d38e9
-:001f2054e850926ef1e74c4ca690e6facf1320
-:001f307d520b7404cc18fe29a2f873839ef938
-:001f40457707c7a8e713a75c377baf838ace04
-:001f506165bb87ff2ed1a3ab702f727b2d8edf
-:001f60ab761288e4d1b84a55eddb54c32792b0
-:001f701400b08b24e1dbf6ce49ad20f8308deb
-:001f8086c4b6f491446a1e823004a22bb4b61f
-:001f90d7d5c50e9fdfd577e977d14ebecadba1
-:001fa0a26cb881b2f443c449c06cb878449e82
-:001fb0000eb6b7ea22d1a42936a6a71b5abcf7
-:001fc03d45c646d133bc81ae0d8e8cb96d2237
-:001fd04469be3654159626084bd93bdcac310b
-:001fe07ff38f4cca4b867d5c85b9b99b4d35f1
-:001ff088109645dec6a65b3bc5f03a5afaa101
-:002000c4f9a1dd7e40e4e9d983d8d309ae2b5f
-:0020104e665be82198579c000ae0ba43d4c3d8
-:002020005fe5580bf4339bc60ba5675b23a4de
-:0020307c71a2b4c1a661823c6d9cfaf3f509f4
-:002040c81e153c6bcad2216749b2d894da7cff
-:00205063b54bbf832d3e1046821adfac5e3286
-:0020606735db53b1afc57411330feb5424827f
-:0020707db44a29137020adec5c7e0787bc4d76
-:00208071a0795837818e4e79035c287ce14b62
-:002090e08bb79a9ce7d2bb9cad009e50c94a8f
-:0020a0a55dc6137ec115e0627000049bdd5bd5
-:0020b0db98c02f1afc7ae980536a1e9bfbec22
-:0020c0570b5bc9bdc71eb78861f3200357aff8
-:0020d091141b666c8a7231ba7093b530768570
-:0020e0cebddea76f461d86d94567e9088355d9
-:0020f016b4ba7f559817d9bdcca1ad4590dfa4
-:0021008542f4c4d674bb04b5b9fcedb5145da2
-:0021102834898c05aa7f4ee9a74fc2dc876133
-:002120dd6ef57be1390ef1fc2f55b7ee257550
-:0021307c3dde152752af5b9e8a6089562b305e
-:00214088238749ccdf4f4cc1be5a0170b1daff
-:002150dd773e7b49ad6a678987bb5dedd498eb
-:0021608322007c438a14191b69c85aff1faf2d
-:0021708f2b3ec6049c8bdd7f018d13cecc3b2c
-:002180ff5de11ab06afd78f3491f26af2c8a8d
-:002190559343301bbc20775125aefebc9053d6
-:0021a039360e68cb42323105ca729bd08383e1
-:0021b0de441e490394e123a700b22544f4854a
-:0021c0de8ec244dd9d7e6f616ec201bd0a902c
-:0021d04eb24b4f57784be0ad485ad221e6bd49
-:0021e0c926d346a2b4e8720dba6406546f5db0
-:0021f0fc5dcf8a3af26034240eedd061b47831
-:002200c5236b3ed519f82a877fe64db2099ee3
-:002210966a03a7bd171ffcf8db6decafe49776
-:002220df41c772572931b77ba2e8ca5ceb6e8f
-:0022301638010826bb45c5449c2343c52e69a3
-:002240441984ea2f80341a14d4091cb245d2d2
-:00225059d832d93f5c7383e7f9ee3b6f3413d6
-:002260bc3cc1c2e992669580485b8ab9e37be0
-:00227076b26f5cc148dc27210e33b707268b9b
-:002280b08215aea15797af30d6f32a98f58035
-:0022909b0f3bfef96061d39ef0144b781ca068
-:0022a00f5bddaa804cb8bf99066976210dfa4b
-:0022b09dc2de7f8ad809ed8079f06031114b8f
-:0022c007dcfcb72588c8b5d54e46c83183085d
-:0022d04f3407842f318b91027a6582b314249d
-:0022e0410c1f835b5b1e5e76120d959466a45d
-:0022f0eba7225369c98908924d7b7a90adc477
-:00230027d0c27438c4570fb2b065075e80bca3
-:00231030e727c37d19dd872fd83dda6f5ac8f1
-:002320f7482fcb79e1b8fc2c8c281392f5e4cb
-:002330e384d1e048f087a1f91f552ef6b95f0f
-:002340da9e368a6220935c6d23347aa283fa29
-:0023507838faf0e48c9e0fb87df6ddc2169bf6
-:002360a26dc81f40e0766465ff584a401511e8
-:002370e1a2d105e443e869da919473a07858cd
-:002380ee928face428e6d9d361460b76648824
-:0023904fd8b02aa96105dcbab79797d4008a09
-:0023a0b4ea6ecbf447d896200ec0d46757b697
-:0023b02555f735f770d630893d5bf930d656d0
-:0023c0a75a4e2f5dced66ae1fc8754f5dd12ba
-:0023d02b1195d2a6ee765737a1b5046db1a29a
-:0023e0cb3fb234fc4547702bc9b994a12fd8bb
-:0023f0036a71c2daad17d68589d738a73e7075
-:0024006dd448731893111f511445b2312d8912
-:0024102a87932408e7ed5cd14a6d7147166392
-:002420be4701f20fafbd7d5e6f977f76732284
-:002430727e682f57bd082200cab06c10c02b76
-:00244002a021bf43dd3d8e8e87eb4cd1a0799c
-:002450d84c4db4fbebda5c6377e916b1960f93
-:0024603f94f854c186e8eb56a4dafe806f1be2
-:002470b2186251ff9e22c5824438a8721d9e77
-:0024806dc5988986f4584051e354d74fc08e1a
-:0024907ab48c59e91242e98c9e4cd68ed874a4
-:0024a0b8b388e43a235e13c1c19d57dead9c7a
-:0024b04e93b90b1af0d33868d6bb2f915ff345
-:0024c0da60357118b45c1999c4a094f4687013
-:0024d06f61715cd972f479f1f823f871c02436
-:0024e048b6711073ef21724a9d3dbd3adfa9f6
-:0024f02d28a1950b0fe46bc2315f5d29cab9da
-:0025002810f2c64acd8eca3ea89983f715adaf
-:002510feca5485ae680a6e3e4253f2db5c04e7
-:0025201e969abafdead087c3c3616d0b1466c2
-:00253003d4ed14f8e5c945e3fa36147704706c
-:0025409666a9b9c9c0d0df6151fc14e7924e91
-:002550c4c7985252b695e568813da24acb9750
-:0025609b1be6e4e1974262a46cf92d8636beae
-:002570358ae731e4f67f4b1813bbac5ec5621c
-:0025805f7f628942342886a9a536668236258f
-:00259031c0a7c9e5ad3132f468a61154ddf711
-:0025a0ae762c45ce10461b938fa24df1e711e5
-:0025b0e48015d5ef8ed165d2ced5a1b7b20359
-:0025c08d6bf12a8787be54431032c39fdf618d
-:0025d00fe8de439bbc9d952aecf9bc16ef5da4
-:0025e02f4098578c18329ef035ba0b773d2d6c
-:0025f01f657c066ae2eee207386f86f855a575
-:002600fd8722b6f1f35cb18b76fff8171f643c
-:002610b6c5b16369fb549a68cd72e96fe97e05
-:0026203ca9592f7c2c6279089e16c8ffe868f2
-:0026301e583af7b88ebf74d2a332fa77875611
-:00264020de37eccfe4008934f428c174da0c13
-:002650ec872d070e2660e0557add0be45700a0
-:0026603800ad60c855033933881e11124d5e71
-:0026707cfec262c67646cb226578fdbe1f0817
-:002680b2e020011adfe61d003e1f01980e1df6
-:002690bf0f477f9dd5005752bc15cc98f69bb1
-:0026a0e1cb3ac4f4d5714c1a570ea2d0fb3495
-:0026b0d05f65c97dffad707c224ce410dedcbd
-:0026c0c2a6aa0573d640d69088762513e79a30
-:0026d0659a069f48ce68882eea005061d03ecb
-:0026e0e43aede843649542ecbf9c88e1f1be6f
-:0026f037295da34753a1acb8e1d11007f535a7
-:0027000b4d9478fb13bf2972db1c33d15e7502
-:0027100968ab263f09fef6ea29f35e881ead11
-:00272098ca3dee8f69fce6c1d426d8a670fcdf
-:002730393a65c835a737a43d3ab15c5ccd3b9d
-:0027407854b4f55ef749bf6f4fc4a250bf45ec
-:0027506b889e1f35f52ef05ec5ef9900aac49f
-:002760a5491a5de50d10103557c1dc02d0961e
-:002770c41238b6f78f60b5399c2bae066756a6
-:00278055ae19b4c0c9e96a47c21f0407040276
-:002790ab84b3edddf418296e57709ca12a17a5
-:0027a0511cc9b6d6569c9f6db565d6c70f9cae
-:0027b05436be8a9b226eee2ee6d994bba5f130
-:0027c090a2528b22bf1362bae0598b6993c7c7
-:0027d0b88b3ce305faa7a4433bfc77788d48ef
-:0027e0cd8d39ade8d54e41e376cc6f43250782
-:0027f03c3bf13adb89d8c7f4273db1aaa61f6b
-:00280029dd2154145d4fc1e1be49a92076086e
-:00281028a99b14e42870913d9a8382dfed4f5d
-:002820a0f24a54c8056066aad8acee85a89c0c
-:002830b7bbf25da69aab845e7f7b3929214675
-:002840ef5ec075d80df506596d3568933e5706
-:002850d6ab486f7ad81619cdd642dabce00c34
-:00286075caf3756abbb52d154ffc4afd5e7186
-:0028705a58e8e466dfbf2e0b76003a3329a78f
-:002880b5ca1822b21f040130cebb90acefcfa2
-:002890b77967782763dd58d3156c36c230df71
-:0028a077d7930d7ac87c7b55f6f00cc5bc7d5b
-:0028b0fd5a16d4fe4a279c183f7432266c22f0
-:0028c015d5ee68e9400b911f93dcc055218c2b
-:0028d04ab1616a74ed0e45cc97c7ca22131864
-:0028e0c1f343a57d4c4d641c9630fb12223b53
-:0028f084f3b2e13dd034acebc829c22bb1dc16
-:002900141a4e487e742c6f28a2829c5c4adca0
-:002910a8584d0d6a75485d422ece53906fc369
-:00292005474979c1c9605a9521dd97e7d42746
-:0029300544a767fcc64612138dff531ad1d6c5
-:0029407c2e60a1c7eb896661ae6f212bd26c75
-:002950df798bf94e3259e9e12aa74ba7f3db65
-:002960170d49c7179d0a75447e4da363f8d497
-:0029701b8588d0547667e2f2a31f705459f3a7
-:00298019ae5fb8c4d9a16865661407bb550955
-:0029901558fd280ef72e496bbd54f083bf3eda
-:0029a0873609275de07aadb47dd7a41a509382
-:0029b0aa5c3199a9f2fef6de64b1d2b47003e7
-:0029c08339fa77714252cd08bc92ff9ba1c7d1
-:0029d020dc5bb6ccfac96c83fe14c9584eea54
-:0029e06e0673cc42f083228ea12dc953ef4c39
-:0029f0ad7ca7b495a51c08252e72521a765813
-:002a00fe9b7a13381d896b47cb49e5b098f083
-:002a10b1c9050030b77ffcb3e4e7be0358d374
-:002a205e58be2f127799a7bc706f0d702f67fd
-:002a307ec76701a206967856e01450212c7cec
-:002a40a452384343c806f5e732ce34807ceb45
-:002a5096499a37450627bddcdb1de539b5fad3
-:002a6055206db51665404b98a32c9407cc5d4d
-:002a70c9041d1fff38214100afa3cc23cb23ad
-:002a8087151f82a7f319050d98baf4fc026ffe
-:002a90cede999fb27aa5b701f73ad961c0c25d
-:002aa05992f10724652cdf401af61f02b8879b
-:002ab05349fe050db3f3da158c35374b9b43af
-:002ac04f1c4eb69982632b446f80b9f247c2c8
-:002ad0c66c67f8c52c168b2c1bcba84e6c7b39
-:002ae0f84b0ffe5450f811ea474fa6e4f6cb21
-:002af03c05b7a9d0270103e1da96e7a8f6473f
-:002b00978cc2472025eaac1ec9bc5b5b544e5a
-:002b102664090ea091446f8fc4550d60e1ebb9
-:002b20810a233df0be9ae85a06b385fd49172e
-:002b30e824e7edead2e5bfb84d431ce3acc124
-:002b40e2b6d8517f1aae77f9c677727c40930f
-:002b5082b1b778f2acd4b43d913c69934b2cef
-:002b605c1d67804fa9d95e519e6311846d1780
-:002b70d62748ed0b7a5b33c82176d45600a926
-:002b80c25371c367730e46bce3a778a86124b6
-:002b908809dbac56352afe77320311046bb50d
-:002ba0f93dc42522ce8eea95cc6b9fcc5e23a6
-:002bb05b81b1b5b56d945be25c9e4ca8ce82ba
-:002bc0e6a5fb656641aefdf91d404a8b315485
-:002bd0063d7c9a1c83b9581050a642388e82de
-:002be05943c648c4dcffcb26d3e657eeb2f422
-:002bf0784df3bcda61ed14ea0faa37f465a628
-:002c00194d1cb9f73cec1f4c55fb089828251e
-:002c1030b8480807593bd04f3b748314c5503c
-:002c20f3c137c5157db04cb5ea465b66b1f1f3
-:002c30211c4c796f5887a9f2bd7950660d034e
-:002c409c452e4b9facaf39eea17fee6699e185
-:002c504632800048d8c1e9a83017a12c2405c4
-:002c600cb42c39cbe1e1ce5e17132f301efa97
-:002c706eb67b3ba0dce3a19d8e9bf90e3f8ae0
-:002c80048d2f7daa16ddfb0dc971036a584938
-:002c9084fba9f2a118f21ed2dedd9631577530
-:002ca071395e10a8ee4c9964c1dc677d8b3fff
-:002cb0028213c4c8fa48f0c5f6490b15e3a767
-:002cc0121e012a2c9a1db51ec69364a1448544
-:002cd03c7130bcca05f08685fe2caf0d0fb4c3
-:002ce0d1b922c0b3a909976e12c806490e7052
-:002cf095b5b8829595e90b3dc973eaff021e4f
-:002d00e3f5f6230ba275036ea516507f4cb3f9
-:002d1052ba924024316b61c34fba4112824623
-:002d203da493c818013fcbd05624571ea56407
-:002d30cfc3bfc54c0a769f317e961ad6e84417
-:002d4079c8b01d7e105598b4db77b0896489a3
-:002d504e28a8b846740e9f087436ca9f3ee8c6
-:002d60e523c5609e243ac742d7c1692b8f859b
-:002d706d71d1622c75cd2d27d9686d4999e61b
-:002d80df3604038869b4c002822a8b98566c10
-:002d90eaf0af96613a8afa7f7e6cb49917e084
-:002da03a9f18b5d3c50e93329ba988bc15b716
-:002db08af923fbae2cf01612dd161cc1bf84b6
-:002dc07d3d4751fbb26ad43e94d3230542ead8
-:002dd025371cd10e1ea9f9596c4f2fd9526be2
-:002de078d3a4d1b239b0afdebfeec7483678d8
-:002df03f10623bb98de40348315d9e250430c9
-:002e00eda2d15bddb514098d486ff5bffa6f45
-:002e103c91064c79dcfbe7e3b5b8eafd1ad32c
-:002e2095bd390c4c256ac776d663b39d887963
-:002e3093dbc38f1f436f7b8476aeeb34ba112c
-:002e4075173eddb6a6a1d1ea983f48cc56345b
-:002e50dab61907c21f99eef7bb0673b706fb23
-:002e60d7b4345560ae2afd0acffe01add3a8e1
-:002e7026ba8a6de4518c7fbb9196816e3e0769
-:002e805b2f27ffb34ce071f602717741db06cf
-:002e907318a29930a708fa79d26af70374dc66
-:002ea0bc87c01393a7518ecb4e1a58106e3945
-:002eb011d70b113f3b0c898d0c08e284106daf
-:002ec0a2fe3b4739ade79a89cf4a1477001d72
-:002ed049e5f6f89bc97b1d7d8f97df3b7efb33
-:002ee0a26d180c3cd9d54b222e22335418f18e
-:002ef0fee948811274a0e112d0131e2b8cf73a
-:002f00a01ef2582b3505f1dc2ddb9d510f8866
-:002f10b652a59c0a8d64e689bfe06a858d596a
-:002f20aa445a8331189bb10bdb532fe0efbb1a
-:002f30946a4499bb3df8c0d898659ebcdc8922
-:002f4036a86f623575af3e899e5bd4e8df6631
-:002f50b83cfe86b137f005f61964dac9f365d7
-:002f606692d31e5c0459477e7b90026d7c1dfa
-:002f70301c1e567010aa588d988d4c1b511c21
-:002f80b3bfc3c34acc9ae2de3113113f8310a5
-:002f905bc43ec540e43b235051449d68227661
-:002fa075731efe5158fa6690b6a61b04a9a98c
-:002fb020030014ea27df4514af71b91c9bcaeb
-:002fc0d9e19fc50ccb7aaf4b757d08ea8c3eca
-:002fd0d4cbf533c0242bcba8fbf5f1474e0a96
-:002fe0e2722e766313abcca0f67e1744c588b0
-:002ff00047b048753dad401bd1059f56702935
-:003000fab22cd1dd97c781dc503178dab2f284
-:00301083308fec4b4459799067d0f0aea63166
-:003020fb31b0cdc0c35666506355b1533d3597
-:0030303b95b174f4f517ea4bc1619575b938b5
-:003040ddcda7c3c903c14916f713c57bbbee6f
-:003050cbcaca7a9704b59f3636085e2844d467
-:003060886d906098fdb93191e969760d81a04f
-:003070350c96a6928e58f6860994813697f28c
-:003080eef203456bf3ae201932327380717a1a
-:00309014b26ff29cc0c69acc8e69e2c1c5f8a7
-:0030a05d7082ee2bc80a3ed94e76cd900bc623
-:0030b046209818f53a2c86ff53e7a4aff66c5c
-:0030c0fb76d81d2e9e957b6aaa77559fcb1815
-:0030d0b9dc613593a0ab904e0cb2a3be5ffa47
-:0030e0908a0936d6984fe474e68cf03f21d03a
-:0030f097562198073450db6639beff69b79e79
-:00310020dc3d08bb66ea981927991a75cf01c0
-:0031108de65db842dd0352d61b111965ce9438
-:003120e00e7a0b861246546a5dd579008f2c03
-:0031303cf58ce4a76ab422bd32753df11f6b18
-:003140661ee3e54b2df3b6de540c273162418a
-:0031503043e17c9e2d86e22683fd275ed2f777
-:0031606fa05607e7cb0c23d120dce110413d73
-:003170dc16218f81ecdc578eadf8c4f478a717
-:003180d5cefdeb1661d80ac772e51e3d151d8b
-:0031907189876cdff737b62ac2b0422b314e27
-:0031a045b27f18580d753b19a2c2b92e41f34a
-:0031b00ec5e3c11bb463839fe5002c3d15f23d
-:0031c0ba23924ca8483af302eb2e8efcf056ce
-:0031d081d2cad224e05e02ec82796c73f9fdd9
-:0031e0043bc0fc8d2245470e8fa2fd6414e694
-:0031f0b6870f10750f7d948fd82192231bd0b6
-:0032007dd05b7c73d4ad7c986a381c0a2b90c4
-:00321073c97e81e28c63efc49c656764d9b5e6
-:003220e07e55e2b46e8d27786f83c35259b20c
-:003230e6e5ae5533128bda48f291e81989127d
-:003240be6c5cb684be826333aeb7c17e457187
-:003250c854b824de20a2931f355aa60b560757
-:0032607ca95aa085d01262e6f1af01165a4953
-:003270359a5527b29ba7f8926afe3511cd9d28
-:003280c23bb976c61f2fb1ca9b6031d336b2f1
-:003290158df327e15cd6f62bb434909b53f81c
-:0032a05724a695502edda0cedaf8003aced2bf
-:0032b0ee303bbe4244770a54ee695680210dcb
-:0032c0c8ee990722d3b537a50072a81f577779
-:0032d0f0400e267ab69cbd227a64305754abdb
-:0032e020fbf669894840580d3d6c28dade41ee
-:0032f0172d6bbfd3107002b907346e0b176815
-:0033006787134d3b7b03ac88ec928753ef4f83
-:003310a2a69659cc7d6d556f745f4c8de158f1
-:0033201232329a5f4ba669d1be3d9e06ed7778
-:003330598c5626064c28bdf54ed55bd2964f72
-:003340491b7a36f5ad039c8a21df87285c5ead
-:00335013aabbc74615a3e56d4059d5dd71084b
-:0033602c06aac1bd2ebf07b1c8526707930222
-:0033706e59f8b9aaf097005c2ceebea7ee8b99
-:00338090273ffbca883684007620e833188461
-:0033902facce92e4cfa6628eb93a4f6caa8261
-:0033a0da3aaf72633370d0fdbac187a769f90e
-:0033b02ecb7e88e6fe39f7a1ec148c37c7a35f
-:0033c0f5933569839137785f9990ac8bbe0923
-:0033d090c2cc7d00a342277a453ea6538d94f6
-:0033e0378717982a4b3ab2ad55170ed5d245ca
-:0033f048b374e6366227283255337ee03d50ed
-:00340023a97c68e5c8c0510f76b1d88a3d35af
-:0034100f35b6823c596e2f4ea8f65505abf4c7
-:0034200987390b47f15e6d6c0cfbcedda64c90
-:0034304615ff2bd98fc7bda1599669cb307ba3
-:0034409c316e414b92c11099064e808e840124
-:003450c6c23c381af36cb52d272c15a194aee5
-:003460ee45045b98142fc90cbe305572ae46f4
-:003470a84f3a3f621c06a0c053d154ce100641
-:003480338d58aa240a0b2ebdb3ff4bec832c68
-:0034904f023afa21b08ae23ea30cba88cb0f68
-:0034a0bc8872daf979b9972ebb9bc4468ab9f0
-:0034b0fb2d2000bbdf2ec31369599fb1fc8b55
-:0034c00d4c321a528ce9ae9d3324af5455d918
-:0034d0239dab34fc48f11e86b8dc0d31f57431
-:0034e0ee4666e38efd575bc0ce6635af2a4e17
-:0034f00eeb2c00eb7bad85c9d487fcd74ec9c8
-:003500bc15f42a6106f1ec5d9f105426b88bae
-:00351069e625312852249db099c67a5e5aed7d
-:003520979a3eadde42999808fc7d1a65db1595
-:003530f93885e52e7f0cd83d3d970fd0b7d737
-:003540915a74ebdcdbe155474f42fb972e5771
-:0035508ee8aee2ff98c2e1d268d635f147989a
-:003560d21d2b1fc2b7fc5858b8dfca193971dd
-:003570f0b6115fc9d9b7701c76a199e4ece11d
-:003580a3c5779a2e3fe2416b0aa9bab37e6ea9
-:003590e726592a83ec1213fcad1861a5079891
-:0035a08497e30c5890f978a009068491d4c15e
-:0035b09de63c782bade3153dd5389fa8fd9ac9
-:0035c060ef68cf7305729c4a69aa3584cef4fd
-:0035d0252b5725e6113b78429fd16b99c7271f
-:0035e046c34cea7eebfeeffedc999022834be0
-:0035f024e4dea7a007d7f5767fc87535e3b954
-:003600cf604b1041e62dd26a479997c4834a13
-:0036103b2fe2601c3b95621a452cda89cf3768
-:003620692b4fd64a1d9f13ce5be9adc8e612a0
-:00363055f051dfd53a9478ecc5f05401018b5c
-:0036400e0bf7d9f92f316bdac573575cab2f30
-:003650e07eb3de296b25d853fd842fc5519448
-:003660026d21d4f40184f864dbac6a1c77ba20
-:003670004239ed99ba9d0940547e8f6903e196
-:003680c779bcffc2ac0be5b293f45506c02b38
-:003690b16dce75fb47d4bc39013dabcb813df8
-:0036a02e92aece2d26100a14b8f9b1ed6631ff
-:0036b0567009b20bdbed8ab1dfa6e8baa436b9
-:0036c0456f5e465c121ef99539ca94362d0fbb
-:0036d0dd03291ec18f44ed569fde0e08d4db80
-:0036e05299cbb9610e050ba05b911e4d06b054
-:0036f093442a0ac5c139461325d7af011431e3
-:0037007b1f51d4dbed8d7306f9de816c273499
-:0037105f6e36b1762d9d7cdc556ac9f166cecc
-:003720b5b02dace3d4c91b5b17afd795adc1f8
-:00373024c267b76f9c77549f18e18a8be33351
-:003740d3529a591ea8a0a0f4c1fbe52ce2f554
-:003750cf96d4d2f9eb15a699c894ee1b4e3466
-:003760956f14291addddf80ca187b43dcb2206
-:0037708fb0f942aeadc491b9314d3481f51981
-:003780872430908d6f39dc1fc0322ba5ee51f7
-:003790ee7ab17c8e66beae31fce2ea1254da4d
-:0037a00fdc02f4e1fc2bb26a1341a0e775e827
-:0037b0d93bbc2f11f2011a3973c3509a6b41f3
-:0037c0d2310522f383099bc0e8c5379cc940f3
-:0037d055e535d75edb47f490f5becdcf6c1bee
-:0037e0ecd766c9f086281d7c78d05e2222ffa6
-:0037f0543e926e7db27c62d19fb1edc8d45c35
-:003800b0442533c95333eeb030218c36a0c050
-:003810d7e742ed7190af44b3de8fc264cd82ed
-:003820b3335297396b41aa0ec222b420999769
-:0038303d457d6cb18171d7dbf2dcb152b2d9d6
-:0038400d113e6b353fc5907fb3d6f7be11169a
-:0038508c8beda3f4626f7272fd557e219e54eb
-:003860ff5b1b2e895bb1b579e4c14071c11b95
-:003870784b1f40e25317b77bceedca2073a0f4
-:003880d2d22486f5c795975d8cd2e03bd47e06
-:0038908f443ed60f26df68964d92d1654ab2aa
-:0038a02c5f534ddf0dd69266313c2553569e62
-:0038b0a403ce9b26678597502a312443a4248b
-:0038c06bfed38188e57ba0932640bf742b58d2
-:0038d0ae8f8f9dd427253879e75f5400ba0d40
-:0038e0ee4df4c42c9c98ef1bf2f47cf85f4193
-:0038f0e3a879452db6e27b7c1667a74b14b0ee
-:003900a0f02c3551c55c74105fe01f599b3a95
-:003910534a7936357165ee049f8ab64caf903b
-:0039202d17eb878a7963263aa4c99c03f10530
-:003930a913c209131affe3269fc65a25293047
-:003940feffe2eaeca6dfead87f01d5b72735b6
-:0039500a02a45d3137724b1e2d47e33682ffa0
-:003960ac9508500c6d38a74287bfa4ee25ea23
-:0039706eceea635e19b9a531c34bff331a7f9f
-:00398050820537d524a0800ee82fcdf52dcee6
-:003990d9d05de1557269b93a4c4e1149fa7584
-:0039a0f24c16d345cc74a829468f248b8b0c8b
-:0039b09a49144cd64a4a45d5a5ca0907493162
-:0039c05a6a2d6dfbaa10a318cf193a3f7d4cf6
-:0039d0202d1a515d0b4a3337102e117adc110f
-:0039e0d5dd0fd1bdb665597076f60c06c31569
-:0039f0cda3be549f6e9ccdcbd2bd15b43ab089
-:003a00d083c004e44c4e3f19302684d809841f
-:003a10159bd877485a4e2845405395881ab922
-:003a2056de3619279d51d043879d3d9ce65940
-:003a304b5c283bdb309675a31983818459a76a
-:003a4079471ed380d23bd4f88b31755e18e706
-:003a5022905a982609ef7999dd79330a970d77
-:003a60c20e2cd482223d00736f19a9d060a408
-:003a70ac0a4aa5a9f2cab44bafc378593b97d5
-:003a80d76369ffa764cf123daee47065478da9
-:003a903ef8e34c3bdb577b444dcf0d6d3485bf
-:003aa058e2232cf3774d4e5497485332917f03
-:003ab0c651030bc08c3b3d2f2d69fb851f8e5e
-:003ac06fcc9ae71e5fbc5dbc157e7a59e69dfe
-:003ad09944508de5e62bd51eaf17003ffd0107
-:003ae0ef5f7843362acb888499a1c89e45309a
-:003af098ea75d2de49f1ce2ea158366723de66
-:003b00ee3beafdd00de81c1b9d3f6488ff17db
-:003b109e294fd10fcd87aef9a92210c46e7fb6
-:003b202050239141c53b23e9b3b9aecd50d113
-:003b308f857ad303207fd0c9e7467866ad7798
-:003b408db62fd99548712a8d6dbb8eafc33b31
-:003b50cfcac17d5d5b442433fc5b71bfc748bf
-:003b60d44980a81f0fd09b146cfd792dbca1d4
-:003b706fdf68629add1de5d0f36895f5cb99d2
-:003b806d64db05188f508b8ff7f1c03a4c6f3a
-:003b90c5c3272c1e804145bfb7e4d2d3607d75
-:003ba0f39c1781792edea3daab34a9f78c0e76
-:003bb05cb34ba30a512b9447c7d4b639b83555
-:003bc0fb12331d479b10d5383691b164110824
-:003bd079ff9601cecd5306c2d37504e706f639
-:003be073ecaefb595ab77eb3e8f3f5c3d343bc
-:003bf09d0e1b123f39c9296f054c0f0bd37e82
-:003c00b22e9f0b65a500f85ab7725b03bf326e
-:003c1067405656e536a04e0921ba1b8400a227
-:003c20ea68ca95b2302563c8c767c30e3a2bfa
-:003c3007548cd9431632f9f19a6cf5277121e5
-:003c40d8ba35097e9e296432260c4d548766d4
-:003c5025989ecd4594dafcacdcc9f984ffe4ef
-:003c600df9597caa7053ba35bff29fc75dc273
-:003c700c3e58d7440d9fa31bd68bd6f08f596b
-:003c803d1eacb87c13eb780b0dcbeff895ae02
-:003c90d1b37acba93a91971170b09f64ceede5
-:003ca0f2cf903982c34a0dac1ca1c751aef140
-:003cb040e5b82b9acc5a85de593b89611392ab
-:003cc05dc6a73a1680ea273f4cc2c59e6574ab
-:003cd0416120ddf3259cfceeaaed14217c1564
-:003ce05d7def6ee3ae26cd0f2bf4b978bcee8a
-:003cf06359996e116e403d7cbb4b9f952396f9
-:003d00dc985cd52f84a862e17f8aff8829e30a
-:003d1031a139a5cb52faca87bbea1b67837f35
-:003d201044a44e4eb261aa969430087144d82b
-:003d30786497b1347bea7dc2f912d5b5a9f063
-:003d4005141553f64318772a2967f6b46ee342
-:003d50de052ebe450dc7bae02747e733eeef70
-:003d6041900f250a9fac0549f8d68158da19d0
-:003d705ac23db716b02e29e6264facb3b934c4
-:003d80a23fbfd1fb460210c63e1a9defd6b1ab
-:003d909fc29c620feea1226c6cc1d51efd810e
-:003da09421669528c9c731904c60d2303e0514
-:003db00b8fa0f5c96610615fcc98a43b4393c0
-:003dc01b81197fd121bf3bebfbc440deaa9c47
-:003dd0622dd22f07b14e9a331b72c3e6ebf0dd
-:003de01175cfe2493c67d3238fad043bb1d0ef
-:003df07b6c588ab462e9bb323687bfc1936f8d
-:003e002b9ba1e7af0db66c5d644c0edfad9b0a
-:003e104e4515e8b397693a39d71af9da4442f1
-:003e20f813b1163101c8b4965c1e60681f64b2
-:003e30569d5a8d8d146e72f78d1214013310f5
-:003e409a914ad91daab10167399dbe8d24ab51
-:003e501179f135692c659c501a8d0fdb575453
-:003e60b67a4f627cdbfe3922f02c16186cd9f4
-:003e707964320e2950bd41fa35d9ea652151e9
-:003e80fb35382f019f2ca7663831537be94150
-:003e908362136974b847f8ddbe774944e27d1e
-:003ea0622be88660598b2742a84f4fe66b4921
-:003eb0043e0f49ce1a0a959f755ee5c6cf7af1
-:003ec0bcfee6e503bdf68f4887b9b7db4c9df4
-:003ed021ba10ffd9c13346a4ec95205d8beae2
-:003ee0ab05ae08911bf661b6ee04aa021999aa
-:003ef011ad0aff28fb09b3a25c3e6f55ebc584
-:003f0089c4367e555c43da4ec721e0613270c0
-:003f105a17785cd69232ad68fa998862fc63df
-:003f2062780fd097e195db35e55ea7dcf1fb08
-:003f30545599ef35fc8d162db292114e76e123
-:003f40a352523b0717def7651486a0acca0d01
-:003f50f99ce22dbb606d68d1f379720fd5bf88
-:003f60e95a2d3b53e64f43a2b59564b5372413
-:003f709241253281793d57796c0efd863797d1
-:003f80410872a41159af69535fcb9c37c66b96
-:003f90190f14879b2a95a80aeebab85005d6ec
-:003fa03838b601daede3e845e20568a7d80a79
-:003fb0aecc1756c44c3f503652cbc517c3fca7
-:003fc0f81040e9a8de1e387ea9ea461c5ca48b
-:003fd08a9e5fe5a74f38392a71944a7807b8f4
-:003fe05f81c6b69e27ccbe0a60475d0f449728
-:003ff0a36c63749afdc620af7f031877a2ae67
-:004000488da6abd5ec4dc9104593bc2a32f55f
-:004010d3a32059c36c4c3a3d49db81f4902b83
-:00402008c0e0e0e663af49175e04b46111dac1
-:00403012e3c0571636041afadf88cbe93119c6
-:0040408c33ac58162bcae42cd75f7c1f208eb2
-:00405031c203794e5aa9ec2b97f24e252ad17d
-:0040601428c9185830ca1ddbee947699d39cee
-:0040708b90b5e357ff6fb7bc785594a287d091
-:004080e1662a3a5c2c27dac64d5634cf65f906
-:004090ac401824df5ce051382bfc4d0df90c8e
-:0040a01df0644af3f0ab104c4d1061578e1983
-:0040b0a36efe16915da6040454056cacaa87af
-:0040c0538d78d557e3da60fe63720dc31ec80c
-:0040d0a64c924ac22e13475092388bdd157131
-:0040e05f5a0e9dd20ccb1762a060bf5af4d8a2
-:0040f099763d81448602059fbf015a59d19b60
-:0041003bbb141e7c4841297cd1500b25f1d15b
-:00411078d6461ae15b2615b8b5221f24cc34e3
-:004120b1c2c52bf3887c849bf3e2916dd543c6
-:004130eca12971089c30783bea32960e1606f1
-:0041409ec7f8f61502f2b2b8d14ba06448a944
-:0041508e4108bf815e9ac52d1710d78c403d75
-:00416057d310609aa416f6bf22b9f8dd9b83bf
-:004170883d2272c7aa65ea1af69c5fde370841
-:00418056f27e0f17324c1583f2eaad6934f8aa
-:004190bed51a290f12d23a07b22a315a636b1a
-:0041a0f2e4cc64f9a2cd3077843f12c4d603f8
-:0041b062b4f4cdfbd691b444d96c3dd5a89c0f
-:0041c077d6c2c27373f83ee564ec3868aaa574
-:0041d01e80ee04b985d2da636c924f0df6329a
-:0041e072d0788434a97fa304d9bcfb2fbc17f8
-:0041f02855a94ba417ce85c4c49a15db071995
-:004200b04f555f11ab56063ccd625bd399bc9c
-:00421049732745455b27b9c5ae42901a60caa8
-:004220f71ef963b16d38c177fcaa3b979dbd99
-:00423019f00d4cb987b15f8b6ec7b956272bf9
-:004240c8bcab60c426f7a9a12bfffd82581d49
-:00425078824daacddcda5281758325a3692c83
-:0042608e08e89e65733575ea1dd362391dce21
-:004270cfbb05cbc5141ad8c1ab6750d61988ee
-:004280b8a657512d8a852cd5a853fbef5a7b5c
-:004290b991997b976e661acfab6530a0019441
-:0042a0e4c3b3dba335df4ce0b2a0bf7522ee3c
-:0042b007aa062dfd461fbfe61ac637cc75cedd
-:0042c081100a52022dede0576ac26352f8ebe5
-:0042d0d7073ad3fd6e5a210ce3cc44662f6978
-:0042e008932a8cf2aa8b013bce01ce810dc171
-:0042f035860731dcd93ab45fbd33dde3837fc3
-:00430069622e29ec40202259c135b1188e3ad9
-:0043102717aed22a6235ffa4819310b131ba3c
-:00432031b156cd6593e40449426bb5724add30
-:004330f4523a104ebbc534c81718d5468dee24
-:00434081fcad69d4786e899980b7dd565e4110
-:00435084c76ac950d21589287170759708642c
-:0043604db518253858c92b527ab6537993653d
-:004370c095161ba827becf7dc3d32fd8909242
-:004380dc96fa8884e32a4cfc09390965b04aaa
-:0043900af084bd902e123d9e2f59c1735b79ef
-:0043a09d097bb0a9acc632bff9ea07b85dc6a9
-:0043b02c0ec3143e967a220f93144db3906538
-:0043c008523c5b5b82a822b635c61f9beebc6c
-:0043d05faa5f72a1793a1f215378a50efd1387
-:0043e0f41889b43893634d396c3e1aa1feb9c2
-:0043f0a15a0391c4282f390f369476be52620b
-:00440086eb5c2c532ccb6ca26236ee387bacdc
-:00441058e30db50c89ba4d8fbe9aa9bd579f52
-:004420e8054ce8cd0ca30fc1dbee44c3eb3b6a
-:004430c1bb3f7ca5ed6bf55bd8ba654ad385f0
-:00444074be1e0c8c1d75d8ba76ff9a9076f890
-:004450284330a3187f4017cfebb38d3a7b5276
-:004460870e20511bf925891d5d12aa8f03fca5
-:00447019acc15374fb4a5ba27e31db0cadb49e
-:004480498a394ce5f5baab753ddc9c1292f553
-:004490d4a2dec1ede2dcf11172a2e0455e61f5
-:0044a0c3c3181207ce2a7a5a99b62eefe37175
-:0044b0253c7dc1a6bac6d74e253d727edab5e2
-:0044c03193a9030a5329823e4a37b7310750e4
-:0044d0bddd44502616e41b06c92c27d6fd5f1d
-:0044e0ba820441cc2ceba5317b71f9eaa7a252
-:0044f069b82f872ee1b555e3aed233560d59a9
-:0045006dcb0ca1c79b22a6923b64c1941b68af
-:004510159ca41586f35c6597f09c08c246a192
-:004520511ac359f2d1d620d9bf71d1b6962fdf
-:004530a07e6de2b03bd138e71adb289c170cdd
-:004540da021c66e7569ab3a932a3f7d397d417
-:00455089ec87ca896afff38de2e725987db614
-:004560db3b6c6809b28975ca6a8d71c4e7f772
-:004570388ab524080c95729551b5b42fdb1399
-:004580bcff74238ac7f55b84c4c33529b269bd
-:00459080e8606e7617abb706f57939ac10e0b3
-:0045a097e01e2bd580256ece7371ff9676ccf7
-:0045b0961c0ec1f68b4e7c3330441c9d66ff6f
-:0045c0b9518d3a80ec7825b81e4e0e287aacbc
-:0045d034e5eafe5e3609b712bdb0763b14195e
-:0045e0545df610117ecc8b84a5dcfd3c916bf9
-:0045f05613741c9442c48e74931673ce5deb3a
-:0046000a3245156b6fb70e2f944cbbfd0a5a8d
-:004610df8bae69092b61d4d2cbe2fc42e4de26
-:00462034c66bac97160dd504ac007bfa315e47
-:0046305bbf56f8a589014d5ca7d83166805682
-:0046401a3d7310b43a5f10475b0621ae049c46
-:004650ef162d10e910baece019ba119c409871
-:004660a4718b99150734ce69921fe5cc3d061a
-:0046707a6094799d6f4929f356fb372aac2b3c
-:0046804a3eeb2501da8f732f865145cf7bed23
-:004690bb832b6b68b36a166fe5353d6b3bb28b
-:0046a07d51056cc947b41e8f8747cf8b59b4da
-:0046b0a751bf122b9dd33f0f8f16e1e53beeb5
-:0046c05d64c339365b99d5e48602ed1308ecf6
-:0046d0a7ceeaccf5a19444f608fa6b15a01e30
-:0046e01ef4983b30593dd4033a204e5db95e7b
-:0046f0d5d93acdbc21b2eb30b6faa3ba39c1da
-:00470058886b635c360308c4ee6b6cf88aaa3a
-:004710bae54160b4a43c15b63c0a4052da341b
-:004720254541ca125fdd5c783d0d29bfd208e8
-:004730830a06bef0e65befc4de18493ddcbfb0
-:0047407100b161a6c2678d0bee77b05b8d9f74
-:004750793e048274946cc97e5f0465e2e1a627
-:00476054633ca20c0d548c6e3d0d0d8b5f34ad
-:0047709cb62f1991615e24327f207afc4774ff
-:004780e2807bf37b13d645bff8935a546774f6
-:004790e7a4801a18c7695a7dbd52585246122b
-:0047a0220e6793e98fb9c969de8f66fe683712
-:0047b03d2df21682ca324ec339c1f872341c96
-:0047c0d25c099917dfa91ee0b4c3aa54f7fd17
-:0047d0a7fc9066f3d32beb0c0cfecf52f0574c
-:0047e0f2870b087009cf91c1e01ac744668e0d
-:0047f08896b3256aa61390289f1edf2e6eba78
-:00480008bd6df3f971fc7767937236fd2222fb
-:00481064f294609d07be99d43007819fb621f1
-:004820683a09a6a12234c3a7a2fc2f688047d1
-:0048309e406d6a6752f575592418971feb56a8
-:004840c3a11d22e88217b4200b5e436c068966
-:004850e5d9cfbd64d062f80f0cde05d6a54c71
-:0048600bb1761c3dfc3c1d6359f4f595a9f177
-:0048708034197f1c914cbeaaf7846b8f0d7183
-:004880488d9495e1e41a82bd4fc01a472fae04
-:0048902aeb5085a53c194ac8663fe3f44907a0
-:0048a066c9c982a7944689b3fbb1ab99af20ab
-:0048b083c52dabf3036752aa2c7a29ee0b8230
-:0048c0624af62b5743b966faedb3498c47bb71
-:0048d0ef24f04668a09fb501710450d68ff01b
-:0048e029c2fde41a610614c1fc3e0577aa8084
-:0048f0e53bef29519e39c64204edb3c1841723
-:00490014d6555572b3fa429ec8f823fc1c72cc
-:004910b4ad880736b5cd005dba6937f39d8224
-:004920b0dce38c84369dbf3a7acccca714ecf6
-:00493089428ad09d3523be5d9eb4ed2385eda8
-:00494059566a5078803f8c479d222dcaf1e27e
-:004950077b07fe30ac665242b627fa7fbdbf49
-:004960fa2a7ab043603fa5eeb9002c2a611f07
-:0049705cd3ab2076b38355b28f6adf7e0fa936
-:0049809edb87e949b3773edd2b9ce8b95d10e0
-:004990bf0f77ebb6fb0dec76eb2da3b69ec348
-:0049a0a15dcc657a844a0ddc6b72e2df942d4a
-:0049b0de71675e2dbdf37168ec823fd59ca4a0
-:0049c07631f5d35796b6967718ade0f0bc31ba
-:0049d04e43b9236866a5b7ab34532192ad721c
-:0049e0512e79dc508e1f72f775997c48deed4f
-:0049f09e6fd014dd6281828ac6d22f092e3d2b
-:004a00320edd91fefb3781701997080bc60e27
-:004a10a0b91593b03a15a076d1abd5fdf25084
-:004a207cb382ba59fc8cc5e20f8048c95575af
-:004a306589b25952110ed9b88277d3950b3532
-:004a407df922deb0b2005ff577a00df4f07f9b
-:004a5068d73caf8724e2ecd22b1bac98a07e15
-:004a60442ab450e1812905963c0ee0b0bab2a2
-:004a70e1af9b22ee2b854db381c570d6a8025c
-:004a80e90d05034e8d7f092a64227d327d9f41
-:004a90337fad0464582ffe8c9ae2f26a9f2f1e
-:004aa0bb3b40de80f7cb297f9cf948966bca6c
-:004ab0f66cdeb53a9dad13a7aec6d402e2f9dd
-:004ac038bdf1d7c780ec388929a9cc04867191
-:004ad0889b1a9c43674ba4d80cc3e956ab102c
-:004ae0eb610c15d061c1cab74e74079d291f18
-:004af09b9a68f870ffcaee1fb440c2d8be31f3
-:004b005126fcf0051fffe2e49abeb3f5d0f7da
-:004b1012ab75613511fa0b10a8e107f3a79af5
-:004b2008b184c5ff70784958b71b788bb7819d
-:004b30b056a89f812090f7bb0fd306080769c3
-:004b4097dd645e1b9daf9ca0e4229a153b6292
-:004b50c2ce3d7c18b33f8db928f4cd3a1a8aa6
-:004b60895a23daff763b41f9eb3ab5809aa7d9
-:004b706e99990f48b6df04f09ff65854981e31
-:004b801725ff541d71e4e1c1d6302229a465cb
-:004b901c80a1e6157a484d254f7da753cfa978
-:004ba0edeacd2bbd54f94f6a600190270ccd30
-:004bb0147707380af516471f5a284de116f897
-:004bc05c719476fa567e6251da897839cda4ec
-:004bd0ffcd750bfad67d79c9f8abfdabc4aefc
-:004be0ca9b688620595222969c278d7f26b669
-:004bf0af24373b00fdfc28f368447ccb1e7ed4
-:004c00765ce8d07554620709ab6326f7c16be2
-:004c1085b0f8f687cce8e3709794888faa37b0
-:004c20c74c232bdeb74cb364d17a5f51440775
-:004c306835e0c1a282c062ebd6b13ccc42d4f0
-:004c40f8da21da442f6d7127128b3fcdb825e2
-:004c50734d1197120733cfd41b35b88ceb9346
-:004c6053677a9d543ba4f970e26334a221e625
-:004c709f7c49e304d17081d0c5d3b27f5b9c3e
-:004c80b31651b407152cf1ba50a6e9c27a7002
-:004c90d18771523b315694b9470c87351517c6
-:004ca036b44d71dffc90ccac427e8045058838
-:004cb041c2d55862ec7ff651fad4fb7595b8b9
-:004cc0e3a1d6b9f25ec37ad2d9bc6bcb6ad27e
-:004cd05cdc7f5aa945c76688feff0776a6bba7
-:004ce093cc17e775433e154318bdd09f1be1e3
-:004cf0690e1c5c0c09563ae15ba3f90e5dd79c
-:004d00cb1f80dc5752bffabc21fea89ae7955d
-:004d1009b92bc305b68307947bd01ec9556ff0
-:004d200fe8b745c445528300bc52ff87798952
-:004d30eb13062df205b5e1aac14c7a10737142
-:004d4004a00a76d33b847167569368a719e936
-:004d503c33d1e28b0cb3076fe50618c81c7739
-:004d607333983d87ea77e09832cad3cbcffc06
-:004d703e41d7a28a1347b5aab5141739cd53c6
-:004d801d5a0cf2295886d254b889f095784814
-:004d90410746075b258ab708d5343e5ae5cfc8
-:004da0cefd879819ddd8d42de26ea90ef402ed
-:004db0c8eb9e0b5957dcba933743daffc4ea9f
-:004dc0134ad72ab5af81239d8feddb3a3e3ea2
-:004dd03f7ed355aba97cd91d724c93faf3af58
-:004de0f105b1d5e8c8a6979e6b2d0a808ba12a
-:004df0e1afd08321ef37ecdc87ee585a80ac55
-:004e0073299a8b41086862d93262dedd07a2ab
-:004e1067deb5bd39737a2ccd5da198453763c5
-:004e20f1e9d7df1ee3e63cc954dc01561631d4
-:004e30294136747e09723ee12ce0e9a9d6b41a
-:004e40c710e21353cfd72623a190edea7ed5be
-:004e50f57403d6a49f2cd621e638cb05644de4
-:004e600599c9d8404f42a24728bc8f30841194
-:004e70add3bc7e3cb5fddcbc5a92c801e3b24c
-:004e802d3ca3ee951c0f16b52d698f36b7dda3
-:004e9083767e6353e5491f657b897cbe086a37
-:004ea07a8cce0c7f3b59450801b98dbd29cf7c
-:004eb093e9a424838a35e01a6e2b8611073621
-:004ec0782af2d9b3c0bff9d07ad4c23a628904
-:004ed0d1f9c0c07c220e85351a55b2f2bf0d82
-:004ee01b032b9a7db58c8e67749490a7053d0b
-:004ef07fb07a30167311ef8de12d2c1638628e
-:004f0098581908b3f4d96a75ce05fa387c52fe
-:004f106efa2d96c1758b9cece81f236cc3d180
-:004f20d418eb430a2e674ed2b6f570bbe6ddb2
-:004f3061f0670e925d6b082e58239dcbd7ac1d
-:004f403a6408049da6bb6124540a5d5db8592f
-:004f50ff1bd55a136d0742827e14c91543b56a
-:004f6019ebabe55b4263eea42265ebaa9b4dbc
-:004f708df6b16ccbbdb55659ab71a3e41fe559
-:004f800b9610362cbc18fd92758e1eeb4eea48
-:004f90de055680b443c7a6db587dd9f6eb6921
-:004fa0e7d827bc62b3937706cd8247d09d9323
-:004fb0390194f23a0b0457b2b8d504d90559da
-:004fc01820c46f06bb03506e6cb6c138568813
-:004fd026968a66b7e9865e50eff8ec11d7493e
-:004fe098015e4a0602e5d5c4a69bcc62d4a6be
-:004ff0c24ac8f4e4efc613c0164de1d2f165b6
-:005000ed750b7d7ca101daecebee40d3b073c1
-:00501033161dd01c8f26361e2dda9309f0bba3
-:005020c3e097d9413f83cafc790a7a9e503617
-:00503001d1a268131a964b6400c4ad603a91bc
-:005040983743e1fa8f2f25c8ea65a8b4475cfc
-:00505030006efe7203a0710e86f269bd892c2d
-:00506082dc8c9ced8c0983586e71e43daeeff8
-:00507083ec942f1de08f914940eafccd27e9e1
-:0050809094af31c478fbbe330e486399e6bf1e
-:005090fd9e8d44dbc194897f2aa4207e0694af
-:0050a0729077684b8ad96a489fe238e08a6f0e
-:0050b077d78cea33787244e14f67bd22b54956
-:0050c09613e441b342857906547d49f62655b4
-:0050d0f76f5e4490739b2c37f8a5e8abf0bc3d
-:0050e03c313c09f5d69742f5ed7b048d11eca7
-:0050f0702a43c55753a366464171b4bdf482fc
-:0051006b94b9ab27c5f30d1022d2c0242c29d8
-:00511077d8655dfe956313c320c120b5f25969
-:005120b0545a1532eec396ff48d1a660545efa
-:00513029e287b58e0428c7a837a12a09ec5fb8
-:0051408c02cb5513ae203662fdb51e428fcca8
-:0051505d3e151851e73c9eebe9102ba4526485
-:0051606920529171e012688085718865f1b92a
-:005170a3ae9e450339c0ee843890466f9d71f0
-:005180fb26c7d4fc80fd460b3da8ea3a9dde89
-:005190e9352e93d3d407ee6537fc1b088f7f16
-:0051a0a74810b773f95bab862749943072a7a9
-:0051b0ae8f16403005d532f11d0c1ba8cdd9c2
-:0051c08fc2b9278183ed1ee9558c2a41559607
-:0051d07aa2a73830871b1e9709dbd80e67cc21
-:0051e013e82b4b71f3f9873526493b0e36239c
-:0051f0bc3aa9985aa0920b2cf3a538142d7e77
-:005200616f99143808226aa5de2b244ada0397
-:00521007c31a6852494996d67ce7cd2f893f10
-:0052201fa428e030feb9ca9a57e533d47e8a55
-:005230722eb501ba7ec77193047029f409bdce
-:005240d9af7956ad19df3c5464041e29a9568c
-:0052508ba95926fe95e0fa631b2f0d7d700d5b
-:005260b2a6bd7646b5e3de7c9467cfc99f1aa0
-:0052702890e8267cef189604c80dc9cfe38184
-:0052803f54875ec8390e422d3dbf42af928ee4
-:00529055fa6a862000e0d634712133eb35ff08
-:0052a0a35e120ea0f60b32618f7df33353e781
-:0052b08e4ca91baaf087e3ecf38ca69c90a64c
-:0052c025a7b6471ad4b027933d8d85e388ee84
-:0052d0ac5a8625424b88790aa19516c8b96655
-:0052e0e3cc9a7789ed3fed513dd1251862c245
-:0052f0e009fcf5af6a5dc728d504e55323d0d6
-:005300e73db458ec15cefb714e69122e283a38
-:005310ee92bdb4771fe9482e6cd66f12d8c2db
-:005320e82dc81e3c4bffb8cf27b44c404cdf3f
-:00533000681fe1b67ea4fbe3badab1b1f3fcef
-:005340a5a01a5b5c34c2bbf06ba9783b639ffb
-:0053502b233bc9e181959752088b8648741bf6
-:005360ca3f44127c1a342a967b7de08d53c2b2
-:0053707e0fe0555578f6d025f62ec8293a45f4
-:005380f126bd5d5f598b933a1901c291e375af
-:005390b4142c0d82f02fcf87a84222e4495f07
-:0053a0581de2764e70a464c5c088143d64baea
-:0053b08858d7b0b12c54dedaebaa8c2d96230d
-:0053c07fed02bd5a47b4180827f42f10b01f76
-:0053d06cc32ca14eb8e746248a06d59383d837
-:0053e0a7648064fa19ec92f7c79af672c6ebd0
-:0053f0178ced2cfa87c1611063a52c19664731
-:00540024420565334c50c2e9010593d8532b6f
-:005410ce18182d7e95d964f63c18a3a5541857
-:005420c5ad83a3d298c57e663633160d17c24f
-:00543075319f9c5ae386fe824591e30c3ddec8
-:0054404904722d86167b12b8e3ff2a39722143
-:005450ba7f85b392670a33634e68f7c81b84a9
-:0054609bcf43b56b16c863a230b77a3b15132d
-:00547020704449bdc54307f860b1d4ac01de47
-:005480d4043a58202fb7a8a8d80393f5d69315
-:0054901e3db8d2dcaefc5d3cb8fc877a871bb2
-:0054a001a78665ddccb0d4f5db25567ab90972
-:0054b0d9b617f170ca8bf5ca4f020d7e380792
-:0054c043ef99e047909b330e4c568900515cb1
-:0054d03118d8d0f69de068d208e3a984148e89
-:0054e0c36f4f9d4a403c7d3b1dcc4a5acc008e
-:0054f0ddd3b8615a5328f7930c00e910e76b4d
-:005500ea466cac159bb4343cd43ad322a38cdd
-:00551039b0dfaf3fbeaa55e6f60e18efd00215
-:0055206e02be6c5b4c5f24c130893390f4c5c1
-:0055305d67d600bc21720cdfb677cc5de4f38e
-:005540bf5915be7fd9edad19cd3aa79cd6a626
-:005550df75836753e44cae2d7c2dad3e743963
-:0055609974e54662cdb9d6f51330252c7c5104
-:0055704c7f420a647077bf32126d0658aeae82
-:0055804aef25d15de087224f489420adfdc5f4
-:0055908bd61d9b1031f6b688b9bbea37914b70
-:0055a08e221ce07151acbb3cc1df6d8497716b
-:0055b00861ca55371e3af1ac33f4954a1d65b2
-:0055c04e8a50b78b11632d98c320d9a20178ca
-:0055d0f7bd6370e53611f84df2b697b6bcdaa9
-:0055e08b65631ab3e48ddde6f3c14c72750774
-:0055f0053f35792615027536ca4471e54ab9eb
-:005600063a32bd60934a76455abb30e63fcc05
-:0056104c25b6c4fa136033c474f57a79630915
-:005620f6e9cd6eecdd4f925a854d5c909713aa
-:005630196ad1f767a77fdd185ded19b88ed2d9
-:00564091991d2599a8a278909140405141f87c
-:005650d403bd51121f4fde8c6ae067c66cac66
-:005660430d5f893872afa314cb98ba29c28625
-:00567054bf1e4309d07835ff07a40dcdd3505a
-:00568089480477249c526dad88ea270dfbf8b0
-:005690e264de57a6cc76e0709a9b9d34df8ef7
-:0056a0535059bc4f8f0d416ba908012a2fffa2
-:0056b093fa0308e0945620a85ccbcb9e662bfa
-:0056c0daf3765a81cbabd3ac1fdc408fcf0661
-:0056d0afd5cd0930e941d020365714b29663c6
-:0056e0448d1d8d4f4ffdeae32fd0cfd967c63b
-:0056f03d002505ea5314107b679a3be4a928ee
-:005700fca142abe638aee30c221fdcb707e584
-:005710ec3630b8b100420cbe375456b66c3534
-:00572048a7d18b77d26d8f2b4199cd41a86fc7
-:005730a7e31aa7bac9d3b26534b29c8ecbbeca
-:005740eaf6a094e2bd138d6c3b21847aaea63f
-:0057502b2935ce8c9b11d43533c1e98643077a
-:0057608865eaec13230cc636f8fe8a8266a9f5
-:005770757db7b070b265d336bd8403c1091efc
-:00578018573de5c9a078b5e6c7f37620027e33
-:005790403b48ac9d6398d093274db7d2775039
-:0057a0c040389cde00f1f9bbf1088c96436c31
-:0057b004e83d8f09475a96d763967ec9596af2
-:0057c03c8ae93865b9e4f5552120d62a57b5d1
-:0057d045060a594cdba69b96a9da14e643a0b8
-:0057e0aa5d4148a316d747ee5d09b5654f5141
-:0057f037c5d59c3986c156be9d1490967d1d70
-:005800d6a794f597fd2cd868ca5f922c079474
-:0058100abc2516a27014419f75551c8a74c485
-:005820f909f49645679d85db16ed838d8214d8
-:0058301b6d08a978efdacaaa5181dd25f2a05e
-:00584066a75b98df6258d1d7c78e07b96f540a
-:00585034feb69ccc16d8146f16a3af98ebf843
-:005860ad66f57f06cedad41b6373ca0b8d20cb
-:00587074ff269052ab16b1a6cd4d0b6958462c
-:00588072a73e522b7ff564ae60ed561c944fff
-:0058904ed57db46e7f06111626207b97e8d03b
-:0058a011f1503b27d1bb20ed5a668d4b9eea7a
-:0058b007734d924e623f1b9a6020747dbc1878
-:0058c073b738614bec476eba841d201014dce3
-:0058d004cbd45f634b31fda675cb998ddb8c93
-:0058e028bc06fccc06c49e917b0b2926673444
-:0058f0117f722d2136954f8bc4f170e7068178
-:005900111d85f51c30a5cc926fffd8e016e55c
-:005910c3cfba7e3fcb20564a156e5bb183eef1
-:005920721088e84bbbb15af96965e19815e296
-:005930d949b336467149e2a037c7c67fb7d9ef
-:0059403b08b7b4b1d542f54de40e70d2ddd382
-:005950a9f2a010812be0df41cbb514fe9d6fdc
-:005960306d6e6756fda6e739f52c217af904fc
-:005970727d7bad883207ebaef9a471e1a3ceb4
-:005980b6ebddbed1b076e7fc10c1ab21e5646b
-:00599026f2871e0c2b8c1146a2091cf4da8851
-:0059a0d4a2cfd38dceefefbfcf8a2ea97130ff
-:0059b0056aa85d2406b01d7ed41fd4a5f71fe0
-:0059c0868c6ed1c66fb21d235f62812021ccb6
-:0059d06445d125f2f3150563cb392cd13e56dc
-:0059e09a1af16d72817a80f1c25db9e10013a7
-:0059f04b59506ff602c41dfcbb52bf95aa85c3
-:005a00bfba5e755d12da611d9ab3d1453e865a
-:005a107b2350b1c44ece79c0d2e8587bdba2e4
-:005a2040cffd30977b5119fea74bec1e3f562d
-:005a301366729ee0252e0983c37cc3a2f10ec7
-:005a409fd9cb5b94e16af061db3988676023a0
-:005a50a8085357e74737df83d8ee3898be6da6
-:005a605e7e8318df779e27b6510f24ecea9cf5
-:005a707e9ad03c202172866a29db61eae49616
-:005a803117ccc2ef0f8df166c69762ecb82832
-:005a90f4873debe4b6394b7027d6ebf52ddfba
-:005aa049359426eefd042c3cea92c93565c114
-:005ab03b6a437a62680c0f40fc4bb16d303375
-:005ac02a42066e3266f7017eb24ccbfa55f2a5
-:005ad072be2dc0c50bf592ed2eb7e84294511f
-:005ae07b86942835eada1dce0daf4b35faf520
-:005af003303d7a9ccd10883a86a6793f58bff8
-:005b00ee405b40de250fc06effce127fbe6ee1
-:005b10624862376beee1137bc1aa2df1185699
-:005b20a891fc90078dec893c8da420954e4356
-:005b3090a4c20dfe2b44d55983b6c202375afc
-:005b40b2ea82631fd426f821050d337b52ad1b
-:005b5082cc8c7684143eca38baded0ec606e59
-:005b60a5fa41887ad097b55ddbd148e1d6237f
-:005b703abe21b39d76de6d846a9ab10103eb7a
-:005b8053a906a57bb0694863d96511101c5f5c
-:005b90e3f68ebb01fdc0b13321cccd7a7ccf07
-:005ba06a33b44c7c0b2ca2f037c216f6d52873
-:005bb0c5c504c7bfa3b2586960ecf735902f94
-:005bc0b2ca427328bf315cb340f5b3c2d58423
-:005bd0531a0c68a1b96596e4420dd629712f3f
-:005be0971442b663211a37bb35e58d181af1e5
-:005bf0855950dc269ac348a8236066321e490a
-:005c00c57f2e14d70cf4d3a73f4c733daa722f
-:005c103f0f2e19fd514326d8fe3dfa531a36be
-:005c20934c77df02d8dc618466fefe59ea81fb
-:005c30d1f463c753afb00c6ea6295a272b5632
-:005c40f0351a5ea8fdd53fd80099ea3b91f152
-:005c5048fe228f7eb23a077300abaada56f811
-:005c60fb1178728579a82f69922688ccb3528d
-:005c707edc16347dd6cb105476b9add13c660d
-:005c8004780d779337134d78ea697bba2343c3
-:005c903e394e3dadf28488f8b1092be2fb3d99
-:005ca0ad173b9fc75a2cfe94709aca6d2260b4
-:005cb02793aecd902388cbd725949cec4bc4bf
-:005cc091a1bf74220167d24fc409d9720dd5c4
-:005cd06ec7c0ef2494ce6c3596ce30380a6b32
-:005ce0b8f1209d56c5636f6b8513ce747fbb8f
-:005cf01a6f84add48121c3b32a5b485c0e7b32
-:005d00e592339421bec1dbf300256d8c653910
-:005d109d92c70f23cd5b2182b47fc4de826ec7
-:005d20856ea8fc77ad206b3f78a0d1027735ae
-:005d301a44b4c201512f84dcf3cf4654824cdc
-:005d40700fdebc5506d4cbd89e4f1b9ebdb748
-:005d508e0eb95253800fabf4b986a452bdfd48
-:005d60ac5805f9b32a8ea7d5626cebfc72892a
-:005d70bca4687cb73c4023ba4c375763f0f5cb
-:005d804c9039f91f03e9f6fe3d87a145716fef
-:005d900002356c73e576c4eea063628f60ea65
-:005da04bc4d41ffbe9b5e4470b7d47ba22ca88
-:005db0f73275255991979b21d58e1782f21c3d
-:005dc06cd48585aec0b4e198f1d92d20361ee8
-:005dd0b970f923b5dac89ce7ef8bd20fce2b72
-:005de073a395a58b5dfaaa7e456f6117d2fb33
-:005df05a38be9b3769b893c4a8d4f37327f545
-:005e00c1404a67c6bd28fd77ef924db3095d5d
-:005e10095362e4377f3dda817452b60ea82add
-:005e20824c2218b63398db9268203ec077c9e2
-:005e307cb4dba80483b734cf5234eda3a0c09c
-:005e40c837d00e5e2fcbaf4772bce2b30f656b
-:005e500b4272f412e3dc86ef8b4407694111bd
-:005e60524b971dbb3f63dd8c1cb54b4c30bf5d
-:005e70e83ce30a85ed9e3ad269c6cdc036e830
-:005e80ab2d637c3f72e0b4e4a4d6e7731c47e3
-:005e900605cd58001bc6a992435097f6b363cf
-:005ea0373264ff4208112aea3a9de9b535672f
-:005eb07c0249e6fc4def30669d1bd47e8f99c9
-:005ec07ca5c5641afa31f2632f8d7456ce2990
-:005ed0ca44cde82b5efb6fee213d3e7f4922bc
-:005ee0968c2fe1ec7b7f1bc0719b24455ffe89
-:005ef00210c62fc2349aba87d90bb0483184cc
-:005f008f5360dc6f860559bc3ea74a9358b8c9
-:005f1061c3ea17ba21b6e378bb150feb0b06a8
-:005f206c7a70197f74874e0580bb85cef7b5e8
-:005f30ef59d36ef1d4786bbcb9d87d2effb74e
-:005f4092db0d9b198e19bb00db0a51814b030c
-:005f508d666bea3d4c86a527051bf67688bf10
-:005f6005ebe512e6602887dd56cae307cee2a9
-:005f708a58a49a611a12949dacf268a945cb8a
-:005f80dfd1bb8c0e1c62121d5a90e8adad9b2e
-:005f90fa6158ca32dbac42dc1df8e14801ba2b
-:005fa0d046d4a45166180aaf5e8d1a1be8c031
-:005fb03133add2533d2109691b3c40ae5f46f8
-:005fc075868a1439cb6da29a20e29e90f88d86
-:005fd02533dc9a7ed904415d02d57b91f78061
-:005fe016da490e2eace80fcd35312b7ccecdf5
-:005ff01c74cab1df90ac46bce436987a26f6ce
-:006000ab1c1e2ac2094165644e76936de1f8ae
-:0060106eebc10453644e98b9d5f278fe88df9e
-:006020100c6685d6d323229b1f9ea1bd445f15
-:006030f9f379bb6da4075f0151d3b619f688da
-:0060407bf28eb7e5a2dac0ea29fb5d9af61a91
-:006050bf16d40fcf8ccfd4113d9bed5060bad9
-:006060516f6fb5b9b05614d529de0dae53148b
-:006070124031455a02f515ec56c1db1524499a
-:00608016486d3671e752bdbe1328889a8ad801
-:0060904fb5003dfd0f61048ff6265577ae700c
-:0060a0549536ce9c317ef2e574ce97b234cdad
-:0060b08f14aa970fbb947a2f8f082274dca0b2
-:0060c01e8b11f697234fd90aa7fc98108548df
-:0060d01cb3a1d40d6e57a13846cab55dd74f32
-:0060e0ce8259efdb534ebfb38838c2517c9626
-:0060f0de9ad60fa7258e3a066262a76cb87a9e
-:0061005e7f28dde57a8c6643eca6ca108ed114
-:006110b74a6d08ca21a8f52d1f8f05e5172d9d
-:0061205c9d017a31b5e7895b8d1371b7d45ba7
-:00613009ddc714966943af56d821e0ace6e4ef
-:0061408691e03bed64774904d6c819665ab302
-:006150544b1a5d2018cb5ecabdf8d9baa39e88
-:0061603a947896711b69c3a6d81eb9f339fc95
-:006170d21ffd623ac3a3a8d42bbbc5abfd7814
-:006180d26f661ea53e83728888d801e2f24fa7
-:006190be0b6405836a6e61c587a599ce48827b
-:0061a00dbdac15d91ee8c0f3c5410859b2f5e4
-:0061b088177bdb05a9dfbcf0a28a3ec94c4056
-:0061c02e797535444a93bd12dcf721f9ec4b97
-:0061d0ac2c9835aafb0ba216a3d00baba36559
-:0061e05971626abc010e3543f1a29a43414c1e
-:0061f0a02a85912966ccf4202a15244f5b429f
-:0062001703f48852429898a6cf8fca57d3e9ad
-:006210b0967bed275625a025005d6dcff6f1cd
-:00622048b3a2099caeb365af775dc1f25d56b0
-:006230fc20efebc726426b83951a60494772ce
-:0062402df5263db27742333228afe3660d8040
-:006250f2ef00daec1735bba0f393669165a46c
-:0062606f8c4d09f55322db65a4b73ba37b10b0
-:006270ecb143b1a96f3e3d95b7cf343b0e953b
-:006280f16dda0123ad5e11302c8c78f9e625b0
-:0062902f68fba16234d4b2954da6fe4be889a6
-:0062a075d6e7c3ba166b8d7f414ec243250130
-:0062b06b404c51008b774debba0f8966782b78
-:0062c097845f874b3c623b5482083549bb3e43
-:0062d0c2fb90e7b4bf0b9db2bb6c0ab0c4f199
-:0062e07aabe02aa2ff61b8f81000820229f1b5
-:0062f0fc646f6cffb660d95c0310a8c4e11528
-:006300d89457b9ff737a55374da031936ded20
-:006310bcd1ef5a9ca708b98382a89c867ebd56
-:006320ef3e43faaa6cce38942c10463b01b5c9
-:0063308651b8c77fc2b869b69f49e01ea11080
-:006340fcef5c3795235a2c6f4e3745c2e65bb9
-:006350618e2e9dd29a5760d23b590648b169c4
-:006360231b96d84a88c444f5828dc4ea6d4cb4
-:006370424ff40abd7da6b39e2a76c895145716
-:0063802e6aa2938c95de14f57d3691edd8e02f
-:00639034cc621f593aed29eae5de75421cfa32
-:0063a079a2bae05ab2b7906bea683781fef90e
-:0063b0e854d04dbe4c630e5a7096b4551de0f7
-:0063c0dbe3ba6961f10ae483523708847ed001
-:0063d0be74958036551b7783d47fbaaa121b08
-:0063e023e0cc281c91ca33cd79a60cbc76d543
-:0063f0ea5605183fa9063776c6ba520019b469
-:006400afc193aff46064a3e3b54fdf07859396
-:00641098996d81f078c78cef975c51bba4261c
-:006420fe80fe77df1619896c33c46794f985b5
-:006430bda7ce706e56e15f3a11acf6add889e7
-:0064400614f72022fe91e9d82b0c178d81371a
-:006450ef6fe8651f6ef798ce73d81acccdfdeb
-:00646004b90b70defe92df9324122b93354bd4
-:0064709584dd8e4819e57e4a93b827fe1dac2b
-:006480b62334617584913e78f56fa8bcd6e8f4
-:0064904a7833d01868c2b352d0ef5e501d9648
-:0064a0d3f88c431d7b9fe01468b32f11f00198
-:0064b06e0b5be47bc7a1f1cdfc91c67e945121
-:0064c0a28c983dc7453868e4c61b554c787bc4
-:0064d091b42af5f05d466f4254a76068263768
-:0064e019f5e81f8ee768be08584bbe7cfdc7bb
-:0064f0d58be249aa408d123836b8cdb4214389
-:0065009ffc2957729ffec7f83f75822ec4c5a8
-:0065101355f9c3592f4df9f82ca43cf54ca094
-:00652097c01ed2e370dc786282b9d7781a8fec
-:006530b756175b7bc2a34c71ee7e8a4568749c
-:00654096e0c09c9de43a094d0868609b7f739f
-:00655088f76e7409ebf1f14c7a267b5b218a75
-:0065602d8031f35a53abc833a5af1365676b2b
-:006570197c09c1ab50c2040ab2b04edf2d4fd5
-:00658076bfc21a842be2070614a2f1e99df0a1
-:00659054f2c7b75cbfa5c60707ae47f47b9f17
-:0065a0233b56adc4fb086892383fb9893cf9f4
-:0065b043d2b4e134208630e9edd95cb3534ca4
-:0065c02ed549bbf9cfd10f3ad1aa646accdb8d
-:0065d0cd7c8a248ce588425d4f96839a4e7470
-:0065e0501530f706a6e48faa1469ad72234e4c
-:0065f0094b3e2ed91e9a0b25c32a40c80fc251
-:006600438319d44be7493bd1f63a811003151e
-:006610e99caafbe2a36a7219bdcfec8eb0c716
-:006620f42cd114ff8c262d6869b1a7ee60d5a7
-:006630456c81238bbbba2ed0cacb152dca2c0c
-:00664006b8f5f5ec0c7af1cc4e5fcac0430e7b
-:006650ac39423ec7595215c5cd388f64b30ffe
-:00666022ae7b80fda00a32912bdadbab3d5c54
-:006670eb05e9db8ed6475745a8b17e2a111409
-:0066802aed06551f6ef1494febe185846e01ea
-:006690219be34635b505463a91feb2425f0e44
-:0066a08e365470e6be61cd356933a6af83865f
-:0066b0626a011770d493bde51d7790739554ab
-:0066c0c11652f58a11d595c8f30893afdcde8e
-:0066d03ab7d302f7e78fd779563d67389ca761
-:0066e0c530f282a0f254fd6e21bce68e003944
-:0066f04a061644b2209d0015545840bd23e06c
-:00670026f6b3d0a7797f296c4b4c823cc2bebb
-:006710af670e6386e00a4c4e063144f75fd3f9
-:006720f7994b8241f5a4cd09365863c7cd5094
-:006730fcec74dd5ee45473d321562027b8ac91
-:0067406c04d296bbf28b8de183f510198d3099
-:006750f6a7ae671df394ba3a244f99397f3bec
-:00676013c8487f33ad5393158f57b22029e570
-:006770ca32f2e73d66a12a74ab0585415e2023
-:006780bd91e13ff5f3d62d5cb4cac152a13db5
-:00679094a1427dc58dd0916538e88bb1a162e4
-:0067a0696909acc442004ef22a319b0d0a75d4
-:0067b0bd633ec72eaf5634662272ad5be61111
-:0067c0c0021f2bd9540c611e27018ad4e03038
-:0067d0182f97d272d97eab923afd3bf4687435
-:0067e0d13db3eef877c0983a7eb57c611c96cc
-:0067f02e29b7522b5ef336f779259aba4d5776
-:00680050c7ec7af3ccb4ae0a983dc8a23a01bc
-:0068107f7e67c454e9dc6ee6c1728255877314
-:00682071db57e0913403a06c477feb1b5b99b0
-:0068300393156a247d90c9aecd306f37f9ce4a
-:00684098528968340dbe62337c186de1f4220b
-:0068508d0f9c39409babd015cfee9bc460e928
-:006860777fd82f98c0d8e1cd7c940c2b023e26
-:0068706c11471bd6e7bc5d87873e37a9e9af12
-:006880ebf7353c24c496e27d17a8cd10a9595f
-:006890d180017fee4fcf4b7f450210cf91f7ea
-:0068a0cc49b5dcec1273626d6aacfb0a9a6dba
-:0068b0ace22e11fc5bfdc62467fab9171c7fd9
-:0068c01ed15e4430109a618adf1943c4ea5877
-:0068d03a70d56d6f1a61eb20ea82abc8fed16b
-:0068e0dcfe2ea6f04b771938bc83442004abed
-:0068f0622aa904e195eb83e8f20b5d3655ccbf
-:0069006579f95fb474469320286b7bb4159687
-:006910df49609fe9aed309a8d8976cd8b1abc9
-:006920510d4d76c66dd2ef8e23e882df816dec
-:006930e81a0fb623b1766230c4bc8443e3760d
-:006940d19d2ec902fbdca38e35f3ea0b83f02b
-:006950cb62c62b872b5dc20dd943b0963a19b5
-:006960ccf9fb694e012810c5bcd3f0e9e98f90
-:0069702db7f2a7376697ae9fc177b6af62cc5f
-:006980752a44039df7368a90d2a36d498db13c
-:006990e35c0c2de456c2a9b0b615243d22575b
-:0069a05ff48460d8a4db0254e0205f5cb5001e
-:0069b0de5d617ee53780bb59d46df2138bbcb7
-:0069c0b37532470ba72c251ab1df6cff39a850
-:0069d089dc68efc1527112b5069792bdd851a5
-:0069e0443b714376ebade55555f32b20436409
-:0069f028bf583782e1e8fbd210979674056209
-:006a009535a9b41a142f331763a10841582ec2
-:006a10786f6da58450926d341b0e027ae3e84f
-:006a20271746fa8f0098b2314cfc6ec76deb41
-:006a305d8e2582b481fbff8d1700079969bb87
-:006a407ade995646c975b8976591c7dbce028a
-:006a5033686f8788b5705483c490a85b6dd238
-:006a6023c14254b5d9177604f3a5fe3857c6e3
-:006a70a24130aea2284c049f86dcee65913eac
-:006a80e7563e29d9a0bd2b580e547b91efe2c6
-:006a909d03055a2bc0125798130aef6e3c824b
-:006aa07a1cb7f356406acd583ce6c1ba1de30d
-:006ab0fda8ab9b4f24eb6aea03b76419e6e9fd
-:006ac032d0030e9fac53b5640f5fc2d1449518
-:006ad006faf0d5c407dce221d5259f8e474822
-:006ae086f7bd81c3bb353f766665c3832ecc8b
-:006af08d3e9f03dde36028913c8ce5f29afcf7
-:006b0065af63c14931fd32d23cf33f87da3d7f
-:006b10c97b67ba55e205554415997b450a42bf
-:006b2004e76af4a11fedea4fa4cfa3f4dfe212
-:006b30eb5de9532b4a5d39797c74cbc8bf3b10
-:006b40235b115554fb1a54b04b0d40496a91c7
-:006b5021c2b51ffca83eaed5267c0e8bcae67b
-:006b60dffeb72b3a680e3d747f2129d5b7b6f1
-:006b7068900e005791ef501a1ab1d4d4d8ae8d
-:006b8072bd1eb3b8e4d1ef95a072a5c82be118
-:006b90e21742f9deb46e629e3ebf5944e2a42e
-:006ba0239c218bc670c0db77179f419c01ab04
-:006bb011645f930cf56bb945edd08c01b57837
-:006bc0e240bb27cda77d7ecabacf5e1c4cb04b
-:006bd026a3c9caa66ae217b9bf5805bbec46e9
-:006be0504862b44623ee1da4344b16fda14593
-:006bf0b86ab18e44af20f3edafdb70e7e8a003
-:006c000c490a7014927f8ec3d8066af3762f70
-:006c103a88799c347977728274e2876e3184ab
-:006c20f26b35c3287361012be2d9f2edeae34f
-:006c3003d85ebf5c91f6f8a2b4634983e28dcb
-:006c405a268505be879b1bf1e59d12a33a39c7
-:006c50beed729586458f4bd9dfc5c9ea95cdda
-:006c6071c5aa0e9a6323d864a601a99c42dc25
-:006c7074f1abe711f135abbc2e56777b317735
-:006c80c2c502b9dc3ee461f1f390c5b2ebd144
-:006c9089b291a5094ece0bc0733286c03ad8c7
-:006ca0565773d9a25891138a0b06e6eb8e0798
-:006cb0c1d80fbc2d47eec4123c5801daa9a876
-:006cc0718a69e60b9200b882f2790bc6b5e426
-:006cd046f734a94a55b4333b38e8a7fc4b1e26
-:006ce0e141349ccb962ca51d15371b20081a9f
-:006cf08973c817a414aad132b9c651a475b4f2
-:006d00760b51bf91e2861b8571c3470f792de3
-:006d105525e5dd6ec02a87cce82f386e65aeae
-:006d20e13365f602332c240c157c74b995f8f2
-:006d30e58142898e1201a78b04f400bddc6f2b
-:006d404fde8f7f5bc98969a3f10e64ddbbb64b
-:006d50bc4cc1d53ac97e63aece570a18c6873b
-:006d6053652451db7b180c1f624020531d16ce
-:006d70f0ea310f289236e4ad5e6775b20a30c2
-:006d80f1545ff2445d8fda32b337e175dcb45f
-:006d900807b4a4fc556c239e6dc3c4b734fa84
-:006da0cfd02553a47d88b605850df36ab3933e
-:006db0b8d2ca034731a75a84ec9aae8f1ec58b
-:006dc05890273fd95aa1c8654406b3c020c458
-:006dd0bdd673271c2077cf8165f11f90eed4f7
-:006de00157d8744a085f38ddbaa46685a46a1d
-:006df0b05eb68cc33ab5cc11c0cbe4eec31a38
-:006e0028a143a5652f0e6f6d44b0194fda8f97
-:006e10a43d55eba0e200816dd2b9f1f8d9c746
-:006e20633f421ae48d1e698803e1373fcaafd4
-:006e30e6c9189b831a302e50641eb402518977
-:006e404f6c3f55fd97ee3be81ef1a514c2529e
-:006e501e5e7f1ec3949e784937afc2a35e1f9a
-:006e602376241de91e9ab7d6efeae0a2afb601
-:006e70aa257d70c87d1a47b4bcede3f2fc6d7b
-:006e8003182ea556b7d02919b6aa0d5476390c
-:006e909f797c065244f18063572935d3aceecf
-:006ea0d63873dd6d5755164ce97bf1c9f49178
-:006eb03fda58cfdb20b1182d0fadac4690b100
-:006ec0575ce67e999fe226d00d3eac099d36ce
-:006ed003927858ae8a9f1c6416bcbca95f9811
-:006ee0e3291da713f7f416e52f818cd7693a7b
-:006ef03aa4cb57d0ff79b111b9e75eec1d19dc
-:006f003cef3f3dd7d1b40ba3a08f5703e29858
-:006f1042077606d64619bc135e8c368ba6348b
-:006f208a639cf0d7ebcb63a9e6139430cb6712
-:006f30d5f5f51d3f566d4756a23cdc0357c864
-:006f40ca9957bd0c2de291d8976216e6f41217
-:006f50b2d4f2507395438156c2f3931230f5e4
-:006f609c8eb5983d6016d0292529e08595335b
-:006f704554561444252557bda228a576ee2070
-:006f805733c1e59492c47c463168c341e5ece2
-:006f9091313832b383ad9e9437f321410c6552
-:006fa02e5c2f03f3d690e8bd148b940550e075
-:006fb007534ad4fff0bba27b7761f7d0a9d4a3
-:006fc02330a95ea01d880ffd4c3959fc80fa9c
-:006fd0a59c2bb1b9f575edec97035ddb451ab8
-:006fe01abce6dec6ca2a6572d5156d7ce5b2c8
-:006ff0b0b0516378eedddffb348b3ddb791878
-:00700005154aa11d1c5eaa756e39970d003c9f
-:00701006b38ddae6cba2970577253a39f7de6c
-:00702065c9a950bc61098a35470df2f56b4ea3
-:00703006eff4835a892418d72d06613692fb3c
-:0070407a777e57577d03013fd02654d832df01
-:0070506c976e713276c69280858042cee13324
-:0070600fa4ca22047653a1eafd748cadfcbd83
-:00707040e06fead48e86c0c056f620946fee52
-:007080c88a5864ba6cf94b33e9fe14a78f3881
-:007090ba13c85c02ff8a0ce3decb6748ceffd5
-:0070a05ff03dbc94c274164a3b03c1919221fc
-:0070b038df21670ac15795959fada507539059
-:0070c032df46ec153d37b0d38b60758330c351
-:0070d007dee7131653e65d1d71331d73603559
-:0070e0cb41fc7a9353420ca989777b9a5fecfc
-:0070f0d1138765cc4cea0931ae152e0f10f1fb
-:00710086ecb555ce8cacfebcc37a3dc228d8fd
-:007110a54182ccff6d0a0a1230ef209358a0b1
-:00712049612cb14feaf8f73197738014653dc8
-:00713004c6b11d49aa677da8e40057c1c9c4d2
-:007140c66608db6de2d916e11a6131006e65b7
-:0071507ceaf0ea4e6b4d9de461f3335a8792c9
-:0071603743d2aec9ea23877522301a968337fc
-:007170b9e4d6cc5bec365440343b4e8b28b7c7
-:0071802a11d4a55373b447229a6c915fe0f5d9
-:007190ae752a14c16845812f05411fe5f50566
-:0071a0cbb7468130ef9c08b8528b53917546dd
-:0071b0ae7855e11e593ed5cc6e52af8fe22753
-:0071c0eb501c861145add58b7b66c71d9291c1
-:0071d06ade974a6f79e9446a139751b593a5af
-:0071e08d1bfbc6f9c1f2e487afe3fa8b73eb6c
-:0071f023b1d74cb66584c6cd8c0c9a16627545
-:007200d9b404b6c1a87d1985ad243104fc0560
-:007210ab26ab9a184f719241ee640a9bb5544c
-:007220cc50c36de83010818f6187b148717865
-:007230833e34d24e6f6446d93874aa4238c19d
-:007240fda8fcb5ef9f6d35870a3290538eb7a1
-:007250a9f8b7a55d9f4f72f98a1e7c10154a10
-:007260ea6b7b52101ef5b6985cf735acda3f6b
-:0072704f6133393e8acfb07d0ea78d938a5545
-:007280130bd000d21b389312b01f8e0bef18a0
-:007290bbd0e7a81c1de99a8f06e81175995786
-:0072a0fdc790960bd1d5831be5690a997ee54d
-:0072b0bc0bfc2c145ca3395abe79dbab6276a9
-:0072c0fed86c9031bf1c80afa4e00a2b0d80eb
-:0072d07f40ada29e5f56e881bdc45d29003437
-:0072e0387510915676623e3083b7d702aebb17
-:0072f070d5342f31a20dc929dff0757ad13ff7
-:007300af24166f7dd6b527fe473623fa526a3a
-:007310a4adf734413389ae3745f0d7c3f28086
-:007320a9cd50036b43772b6b1c772477c2de58
-:0073306047d0324ea7ce964a49a51f2af427d4
-:007340dcf08d92060241a65eb880b21ffe6c34
-:0073508a260a6165e6ca418dc7d611dc8bcabb
-:007360fe07fbe16e6368def332e5d3febcc10a
-:0073709123cb29c3225593754a3033ffc2c81c
-:0073808b98dd54e213e09b1439512b4df923e3
-:0073909429577a73a7f6837f90728c9177e8db
-:0073a0aaaf159f7fec07ebb35c052b6d92bf8e
-:0073b04323d36b9f9528cca73186f96c8c1d3c
-:0073c0a1a794338ed3fd0ef5a4efda34eac32b
-:0073d0db738bc7edc2cca904a8b28fae36c498
-:0073e0f445de2874580536c52529dbd9dd582f
-:0073f066f8d60ebfbd5c5d83adb1a77bed02e5
-:007400b73cb7ce66b9d788542847b335ab8f54
-:007410fae9e768acdab9d6477ff22391addf43
-:00742075265c64e7b2d03f94a8e7ca907c1e75
-:007430194f102eb6ccfb2aa90d470f9ade9715
-:007440c50cee22d38c6132850ba059c4f5ce9f
-:007450c367857a85bebced7163edfd36c3fe24
-:007460435b7a4c11a1c70671bce3986e4cb0e4
-:0074707e1d42e1f1d30ef8ab8a3a1533856a6a
-:0074803cdc7a70c82e7ffb32f75053469821a6
-:007490d26957595fd13504b2d3a8af98e5ce84
-:0074a02813911dae8c0513618b29e97ac233d9
-:0074b0e1f014fae11583825f0a014df6b392af
-:0074c0e88b52b05f327e1d3fc7d88002444aa7
-:0074d0b6668e3af63d6376a0a2d2dd5f995881
-:0074e06666c44ba2c388e29da0cd8298ca3031
-:0074f026e44822bf391f606650ba94c271ad54
-:0075008200ecf37055b75db3826c3a3f42bb5b
-:00751066effad645ffc311e7f7fd59510cb595
-:007520331e35d7eda09fdcc7fe8b0622a6895b
-:0075304d0cada5634b1bdea3b4b3ebba50a0b6
-:0075401ccadb15dca0b0fcb3ec99cd4cff5314
-:007550ae2667224a0e5f78ed5529f93826b620
-:007560c0d34f26ecfee5413a2bee180862099d
-:007570bf7be97cdbbf32a6c82010132c681e04
-:007580d1e17da9064ec10bad5dbd8fc2f973b5
-:0075900f364f309e2e47bf2ca1f20171fabc8a
-:0075a05b20c1d8f79601d89a901464752493d0
-:0075b07fc94ca679c75023197d75a385804edd
-:0075c0f7206887c71d4d440d336e775b091f95
-:0075d0f3f005641a84f217f4817e42c78f32de
-:0075e05eb0999029d220663ebb2e6030f3aceb
-:0075f01600488a769e32c27cd2d2ea05221afc
-:007600bb49200d2885aaff1b6a2f455716b08a
-:00761089c019eb87d9d92912aa34938de92375
-:007620d9d2ffe1dce34bec0c7cb5750f4ea4e4
-:007630d3768fc0e39cddba284e8019a42fcb6a
-:007640d1b916b520bbf0b05a9f93153be9607b
-:007650e28d085517810e2e8616d318e78dc77b
-:007660ff6fa30e0d3bff199aa31e72e3a5bc60
-:007670900ce8004471ec001391edbf6835f66c
-:007680b13ce755f8e82cef566c548d92bbf23f
-:00769029a11d23cafe267cc82f515332a3da20
-:0076a0c2c921bead9c1d57e4b270638bc89553
-:0076b0f284979ce4395970c506f271c9bbd1e2
-:0076c0f37b11c584b9adc3d7b66d361533b7b1
-:0076d0fadd6aa15f30880f4e74d6b0634bc487
-:0076e03742895465f1ca358527a0b536dfe7da
-:0076f0cf2ff038f58f1fa7df8e93c96201ce72
-:0077008ae69a84496f4fc1a0ac4473061c381b
-:007710fb2ec2046f9eb47e3a482b1f402620ac
-:007720656e306f42f67cbb41eeb9487b852a2a
-:007730e3c649da2c46ff62b84f82b882078d81
-:007740d5e18b5c9e2871e07db04dfe035471f3
-:007750f8ae4646b15cc83ea13b07f75642800d
-:007760508f5e1ba791c889fb5fac563413afa7
-:00777059e76cbbdd0e82fd527d087f8db60004
-:007780a4f01a1ee6a0d517ddec346feaf25c8f
-:0077900539562e78095549a4bff1d91bec3bfa
-:0077a0cfe723288292af6a12bc097ae6d4e883
-:0077b0d2e39dc190665ddb55d228348ce70c2d
-:0077c01a256ee9375a3b16e0d621c2dd9c8e4c
-:0077d0c44c4d069ed6e03f5d08c0835049e41c
-:0077e06aceff85d8e173527960350ac0433137
-:0077f0a92d6ded739beceeb0a61a947bab6f8c
-:007800e238e708fd0c6640da10d0de44cb2452
-:00781045b1eb449b3460d138cde2c572e13fe7
-:007820239252039e6561007aa742f02ed232be
-:007830452df505e7e37bccf1a28d93806412c1
-:007840de8a8db96679ff9a7c7e1b7ae842b6de
-:007850883d0e3995a22cbdf06ef31a17dd4a71
-:007860647be419338e427cb150f0d325455a94
-:007870b24471e44cff49383196152294859328
-:00788079dd45e0129517b1f9841c8d917d25ed
-:0078903e5be12642c7011f19adca92646373d5
-:0078a08e420712b2de031236a83b7e240adf4b
-:0078b02b9da3f584d1235c76cc728122b5abe8
-:0078c09bc466322a19e4944f251b2e3927eb24
-:0078d021e79e77a6d87c909dcddc68befffcdb
-:0078e0b1f1ddb7ae03f882ca13c3affcf65cc9
-:0078f07fa19aad85d594864f177e71a28ecce4
-:007900a2e1bbedad545dcd3c3caad3fc398fd9
-:0079100d87c85a214e2d6f39139bdf07a9daef
-:0079206683a86227be05b74ee8885148d219b2
-:0079301f1d650af7770b47e2ec7a207c054dc0
-:007940bb373eb1985f736a4680bd24ed356cbd
-:0079502a33bf6fb399a8ded3fdf7b2b47b3955
-:00796095fa3417c7f494ff914bb885ca84d8c4
-:00797048d2c0839bff52dfc1a3fd64aa3ac69e
-:007980743be8997f7796c66cdf42db45aca413
-:0079901255c1170ab3189cb7fd720689f89728
-:0079a092e8d8fae7b4441e967c5e3fce8fb43a
-:0079b0a8938895217161759a7abdf83de5b294
-:0079c06ff682e9e636de3837d1d2f84f569b11
-:0079d0fcd400639b2117b8df2fc473b47db602
-:0079e030a8f7b63699845d0d3cf6419193919a
-:0079f0faf5806f68c80af1e5c1cbd620a3e166
-:007a0091011247809c852e7f009a188a0ba1be
-:007a10ebd6cfe07e2d274d061807d624f9d24c
-:007a2071fffd048f08940d3cd3a2afbd21039d
-:007a3019c7aa986d7b6af26121c7a1655a8e6a
-:007a409f73bb3be1900f69def684e35e5c5c32
-:007a50f8bef72e777e3d8e4dbcd3395c7f9827
-:007a605ae6cfea1a9fc8c897d2adfd89618847
-:007a70ca9689750d85be9d0f23c651a8627d05
-:007a807d3ccd2a78a0ae7d1c4958feb3c7d199
-:007a909460b92f0c9a5b7cee85ea5a295ab103
-:007aa00c44ab1657c08801605e3240b3cac7f4
-:007ab0af8f7005fbc51cfb9a59caee4cf0dfda
-:007ac093e443a00221d4a5923887066f7e6a29
-:007ad028625a6ed8766cdb06c27f17b51e9794
-:007ae0031a8d5e799fb013160bd76b51caa359
-:007af03f4271cbd509ccafba2b0cb779d7863d
-:007b0068a0b229ada40d55145a19f10d722483
-:007b108ba619d15ad0c11032ca51e02d4a6ad6
-:007b20dd0c0ad32b42d5b608cbbc3be7a1526f
-:007b300f1c1c971d38b6fc2bbba275af22b625
-:007b4085096db3a697a9a19058122fa231d6a7
-:007b504fdddc5cb18c0ce27641e28b105763f8
-:007b60b48c79eb9358e35a2e9af2699fbb04ef
-:007b70cd93774c72cbb721b6d536bbc7f280de
-:007b80fca6b6b1048483bb6769acd8f0b553ab
-:007b9098fc6a5fcb6a500592683c60890bb9b4
-:007ba0a4a80b7b0163d536b64caa45d929dd96
-:007bb09adaf4778c5979ae750e802233dd79d2
-:007bc0250c28b1ca6b4fbdb0b1e0a039e24061
-:007bd094d7a81fdb34426297c0ae0a7eb30cba
-:007be0c685e9f0afe0e4a466d883a813243ce4
-:007bf04f91cb3cec93dd599dacdce1e936b23c
-:007c00a3f6aafbb76c4ab8502531b2f3ccb95a
-:007c101131b2ceb98e9c2cec08ddb4796d8f13
-:007c203969fe6a69568b6ed114f94b548a6eab
-:007c3018a003c119bf2c9bc4fa78e869e10eca
-:007c406ed3fd3d298eeff557c3f4f1c7be9acb
-:007c509e36dfec2a2fb1abe855e4015c7fbbe2
-:007c60330477b73511972a0a93832e86517788
-:007c70f9b4f2438a1c29cc4942c92ddc0e7bc4
-:007c80beaf481da7f4d83df547efe2bc2e8e05
-:007c903f1ea4bb49e3d97497fd96547e4d5837
-:007ca075faeb23922866ab439d3c28583b609c
-:007cb08dfbbe3d0dca766c98f2cb28bf98c8e2
-:007cc04b5530d8ebc0f8bc17da3960ba4a2957
-:007cd094ceab4e3d5a4a0b76acb20ee5ed4dc2
-:007ce0d0bbaf5620582f0ea10cdd6f22fa24dc
-:007cf08f4e0c6feca7d9b5a3f84b0049f28041
-:007d007ab3d77e7b80fcfb2eae8450f927bdba
-:007d1050d18040c2cc71ecf603c0376ae71e11
-:007d204122373986a9cc1c67b3135beeecf45b
-:007d30cd4d12f2f3bd8b9c89507c85a00108e6
-:007d4078d93e37de816aea9b224f94a0e0dce8
-:007d50560ac34c7dfba97c199a6547cfdb39bb
-:007d6028aa9701e92f8ab7e335e73df268afa1
-:007d701e98993020b3fc7ea92afb651821cf7b
-:007d80ffce4a11904b609c04df64b725554195
-:007d90ae849c0717ad9e49c26249ad1efe795b
-:007da07c7926a0b6484e39bea3ed24209d7c05
-:007db0a6fdaf9821c43d71b9d2993634a38ad2
-:007dc0827e5565909ba6a34b4f5fa0882780fc
-:007dd0640dea1eb4262f7a77d183a260ce17e5
-:007de0c45af1f2311bb6b3ab9750467b0ffa24
-:007df0d88293c50d4a2448f3abe557b61abcc0
-:007e00bc55d450b72c7020455d266c2e1c8cd5
-:007e1017934f13bcdf643a9c185e1e9cc68780
-:007e204b2882b5b98ade95f7f83854362cbb7b
-:007e3022f0626816e3093d85ff443a2264ff5e
-:007e40a7c7716d329832d36d7284a0e84fe7da
-:007e50cbd701ff927f9946ca2be3908bd15dc6
-:007e600fe7526355a8c479d1871c5b9c9208b4
-:007e705f8b7577498cb6600bac21642e019bec
-:007e80beadd8d4e2fcd3f1ef411243127bdecd
-:007e905c39b17c09d42449e8303e80cbb11b15
-:007ea0d4093a37530f68cdd53994ec9d13dcb4
-:007eb0128ffee05befa983d0b62b3a4074f105
-:007ec0115399a6c4f1ff0c1800b34e9b5ded9b
-:007ed0d5725f3cd3f945c50c13df34ab80aa53
-:007ee056cff15b5f2e803da71410967fe8377b
-:007ef0b6f254e3bf15f1b406b31e5f9e7556dc
-:007f009f9912c5a560e7291d896fed2102ca41
-:007f108161da2e098464207fd95ca84c5b851f
-:007f20842aebdcbb8d5a4231000f5cd1afd14e
-:007f303d0a544298faa213033d00573efceba8
-:007f40bd30dfd2bd2ae1f4e916406720436ded
-:007f50a30556859e6e4aad8d90e35d27eec6af
-:007f60c4b639c064d9dde53f4c4d440fb3dbdd
-:007f706b1eec78016a322d8b8ea2112022f531
-:007f80eea9888acbad9f510d2aa17882ef183b
-:007f90c65530bc992b0a8200d6728dc84f200b
-:007fa074f932d331072d1282349f85372a7e1a
-:007fb043ee6bf88e377384ff007dff6df1c35d
-:007fc0b74ae5b97d2247050d041f780d685b46
-:007fd0ba40cd24e596fb30c37a3cf35feb0183
-:007fe093db948754d44f4422f68c0e1e182766
-:007ff021c010dcdd17ef0ce2e56d79ffa12ecd
-:00800009271a5fe5ad513cac56b36ad7bd5869
-:0080104fcd410e22dc017f51aeab080b858bc5
-:0080200c0198c007dceb3baea97b2fa5531587
-:008030fa7082bfe24f18a7c2c2b5bcdd13def9
-:0080402e1ef0073c2c17e3c0b5f352eccc002d
-:008050c3ac934b1f796c64ec58468e65493f2c
-:008060c46d7b66700c40344a601c6fc216ef3f
-:008070bcb5984a99149a00038fe2e73be3d543
-:00808042bb2f6bc890f0edea7b7438b484bf91
-:008090b2687ed0d40e05a49793a41618ceea79
-:0080a02819d9fea9042b82884e958a17645f12
-:0080b0bc34b06038f25a65ada381fa65744b8f
-:0080c06afb53765f6b103967de27cb0e4728cd
-:0080d01ce044d2fe02606597b04b849de5d17f
-:0080e0d426046b368b068dd436f1371bb18b8c
-:0080f072552d446aa25e1ed58af41f74727d15
-:0081009d7869744993cb78ba378356aa053e37
-:00811091d0a6cd1ab6059d42e106559d566c9d
-:008120e2cf31599f780cc4163b6cd572b9333a
-:0081305ed3fa3c9507a5f2133c29d7d6d67076
-:00814006f2f2d192d9accf6bd2136789138a4b
-:00815087cb827af59b5b307b2465f5aa7d6a5b
-:008160cc72c95b969a2fb88dbaf41a659c060a
-:008170b69b0f409b53b6bca3c09ecec0023389
-:00818019c3f705299528031bc036d899140521
-:0081902b2d68075e16c57a6625ef6924a03c07
-:0081a04a91b0aa79ec74bef874a3824631e67f
-:0081b068a92b4aa29f7a8db213b1f79eb143db
-:0081c07f17c2483d87375521abeca702a983b5
-:0081d05495f5d198faf055bc40d4980c3a9532
-:0081e0c7b3809d88955930da046b983018b8ff
-:0081f0d520fe4505b074ecc0fa19a16f258573
-:00820023ef0b136c4805e24d67d0c3060ef19d
-:0082108807adcf4e7d250bdb75a09275445f4d
-:0082203aa32cea14048f47aa08e431abfbbe0b
-:008230116803a9bced3f5284542aeb19ceba27
-:008240107e43863ca6134d26121ff22b0644a4
-:008250da462b384cc30eb2c1c4745a1234a7f3
-:0082601d6afdbd58b1c3bb868c5abb38a3baf5
-:008270031e3c92bd5eeddf180edf8d322d735f
-:00828029757aa856af033ef6aedf9329846c21
-:008290917b45ee235c7c50a6e90dbc0d521a76
-:0082a0c4269413d4afcb082886b6a15fdab34c
-:0082b05469dd465215b03b7fb4f217b185b279
-:0082c0b1fd6d86470d3c73ffe97fb6af0211ef
-:0082d07f8c51470455cd73241b27e11f17944c
-:0082e09626ffa295c63b1a249d95d6c152ea94
-:0082f0d1423af339f5df06422524b4e4e3f6af
-:008300867fb5b5cf6c7b06e1fe80964b214be0
-:008310231f54b493ddd25b87abd49a34e9b4ea
-:0083205772541501cdd1a69c138daea24f8c22
-:008330993703e049198de589996335ae36c366
-:008340d58fa5af490d3b97e065a3242157e6d6
-:0083506677053ab27ecc3174ee280c4f077162
-:008360a2d64aa2480f54ae13dfa8dccec8e031
-:008370ba14ac8cfb29a4389f105d172014bf6d
-:00838081286210b4950ae66794ff9cb3f237dc
-:0083904eb2c94d6ee35149d8afdd85f87aea1f
-:0083a01b61dfafad3b2436246274878e264fd9
-:0083b0a6c06009c66add232899fa09b948227d
-:0083c03109b6ad5f596cee4461c8cbdd4e0f78
-:0083d04cddf75dfa717a610a4f51694228f2a1
-:0083e092beb95d89662d621c08c4051169810a
-:0083f0b90e306e65c18d43b7495d9c68bbbe78
-:008400bbe7deb0412ef74c51092cade9471fbc
-:0084105ad1768c4222f904b91c9317a476389b
-:0084207558d8b59d394448d42c78c1653064eb
-:008430ff1d23417166eb331166dd7d8cfb6d86
-:008440e61aaadc5485948f2acbe841bedea927
-:0084506fe2150d589e4a61329b4987d79ee810
-:008460a50cfc701be36ee1d6795d79a5e01c25
-:008470114940d913efa46ac4bde6b9e0dc2ca6
-:00848008cb996daa3d3b53c5ecae59c331b088
-:0084906c3c8f7056a8934f6e72a8163dbf414b
-:0084a0119393e242eaecbc361232e3773ddd69
-:0084b0b8971081f9a9eeb6c9c5e42e9426c735
-:0084c00cf2b1906ccfc0b554ae07bccca60834
-:0084d07ef576313ef132cf4cf02201f6073982
-:0084e0624d6332ae243d90a024ec33888fa239
-:0084f07cbee59973ec41a4ab55896bf8884327
-:008500001fb9a011adb5acb67dfbbefd0f2d9b
-:0085102bbc696f9816c2a0a69e24e2db4c1e87
-:00852068fb7bdcbe64411201330955e0cebeab
-:00853083260837bf4cce54b67785a5a895632a
-:0085405af1169bda82c6c3e975fe2433746b7b
-:0085503a6fb09eec9d26245d43ed531d3d7411
-:008560093a8ee53d4c830fec4c4a3365055e3b
-:008570291544d37f6c6be35b253e6c6a7baaba
-:00858001f138606cb0865457d8bd1c69a59335
-:00859042dd0a64524418c91c9e7943aea1d1bb
-:0085a0cec16aa5a135ee5979c8151df051fb0f
-:0085b0c025a6df6c230a3ad15695bc531ca7ed
-:0085c08e0e2778564732aedbc0b13458b46bd4
-:0085d051249f88c895d6d9693419d623ca1dd8
-:0085e04f5bf4cf958f2e7fee436904939ed61d
-:0085f05676262bda02318310364caca982934e
-:00860095570ee1a77c85a52a93522696b52a61
-:008610a6e2ec097b039b669f5f3967780d1a56
-:0086205331420d31b591a79d962ac848dae697
-:008630d310eda69c40821f0382cd3f7a491e4c
-:0086408e7d47dcf9605452a549d1f667313bf2
-:008650688d1463a80891c81f5e3582438f87b8
-:008660eda316bce4a75e5f3bcfddb8df41dc7a
-:0086701d758dfff8e90251e686efd413b5c2d4
-:00868095f1f82b111e00ec233fcd8316713cda
-:00869080281fd384698702c0431c2fe354f986
-:0086a0615cee01aabf2f881ef56857d2a0be93
-:0086b012d5c64fade9df46ad36df58c418230c
-:0086c020e52efdf239051c2884cf976191dd0c
-:0086d0ada0095819194475e68e3a773823a630
-:0086e095898971b99acbaf8f629fcfd5a899b6
-:0086f0321250b786958c94172b6e3177febbf0
-:0087004157c69d731fbe5c52ff8279ba428e9f
-:008710ed31e70cef593d76f14331632db4a802
-:008720c980bc866454f22108acb2feb20cf5f5
-:00873018946877bc4d7006b03e4b83d9194e41
-:008740e2f3b624373f0a9ea3334105b5adbbe6
-:0087504c6d7403cb51d083b0dfb353f128a624
-:0087603036626737ef52ff058971ccdc91e074
-:008770df4bc430406e7468c87627398c50171c
-:0087809950ea6867341c1a938e8e42657e5e67
-:008790c8810bdcda6a7e9e1f28fafbfaa59d00
-:0087a07927c63e38bd6d80ebd5fe5727725fbb
-:0087b005290e24d1e453d280ce1f8f38842f83
-:0087c076590f1d9f61134361992030494b67a8
-:0087d0d6a033042e7ee417279f3f1fdeedc80b
-:0087e07c2b4d3a3bb37d283745bd6289e32a02
-:0087f01652d71f7c8d3e70a9370ee317c2864e
-:008800ea54817fec121d1e5bac7449bdc98978
-:0088104c70a911aca7eb80fd52da1d2c169e34
-:008820cbc4549d8d8766305faee2f77c845f1d
-:008830319e5d8f6f0e296d9ee6ba424ec399e4
-:00884080807887a5d24bc258ff788364f624b7
-:0088508feb0c05e6842416e13ce0201f67a8c6
-:00886024807e3feb63905fae7aa8a35662d888
-:008870f3e326b788f11d653655192a312543b5
-:0088802881c18b7095ca7310c323a434df6f76
-:0088902383e1f7cb236f89cb2c24fe4482e237
-:0088a032f6786fcf367873809a8aafb276e5ab
-:0088b06ee720c3f60f85b76be77c47aed9b5e5
-:0088c020c4cbc72898743b94d94ded044848af
-:0088d036e0d1f7204e9cb65fb86f6c5befcb91
-:0088e07a1a7fb11745104d66ac61c850d3987b
-:0088f0bc9da6aedb8ab0cf2c06742a7f54f5ed
-:0089009fa5f842c092f6cae1584ebca1a40161
-:008910aec2fd0b215bf6acb4af7d16909edb4a
-:0089203155b85aa5044ba29458f34012d611f2
-:008930718686e6be172ddd1180fbfc5ff81a67
-:0089406a2e847884ad7e94010c98fcaf7aa78e
-:0089503e4241c9fd10f711f04f35babf9152fc
-:0089608b0f1ea0a7548d0ec1f106b18ee02b5e
-:008970a198bd226ec48cde4e5d67c37e57b1f0
-:00898022c0a30c4b05f2c1b2b33c61fb1401ce
-:0089901370f63d93dda2fb1e7a9cddc601d119
-:0089a07be78f37d42e3860edfcce550ae3210c
-:0089b091bd13929de080de0a3569e5fe91b2bb
-:0089c0e73a1d96ddf378ff0208afb0941c61e2
-:0089d03723de833cb46c05f5d9f84f59a40e31
-:0089e05a37ac03dd86e4c1c16fe010d6284c5a
-:0089f0a4b01ae97856d0221223c7b7b431c36a
-:008a00339f472c9f2dfee44fd77ef15d99582f
-:008a1017de6f67d690b58a4e04930778539c2a
-:008a2078df7abbc3d4f4a82b6f8dd3cd924be3
-:008a301df92a035674ab452d814ca6fbead2cd
-:008a401f8a73398c805cb15ddbb8bfb4472565
-:008a50b19b2798afae859f2210dc44fd6eed14
-:008a6057c869d0f8808691fc8225fe5391922b
-:008a70ee9d50569a886f0bd1ec5ff489f0848d
-:008a8046d3d6857e5ab14a0e2317e540faceb4
-:008a9032867a0e5c7385ed4bacd86e56278a4c
-:008aa0655619cb893f7805baf2f297058a5f74
-:008ab0b145c9cfa4fb635f1afc531e09fdf2f5
-:008ac0cc2feefc9f08dc4ecb3130ae004ab41e
-:008ad049638d3a645b1333d5371c47d10afca2
-:008ae05cdaf773c8fae284253373ee6f4a6eb1
-:008af081823b031a1648c27b586e7c1ad8459c
-:008b004759a5c855dd63fe1568bd38c3336358
-:008b10a350a0c9ec00a0df55d4be14025e0ac4
-:008b205648bdbfe1b54e5986fe4ef1e0869829
-:008b305e553d390f230788e39ce9b2d91dd930
-:008b403a53b295ee083e6d5576376e39d97a6f
-:008b50040c6d93b142d5ccdab2f1434db9a71f
-:008b60921c91991570c5c77dfb18c160b8ee5a
-:008b705169a1f49cb1b1878000cfd52510328c
-:008b80dc96a2da4d3cea6d99bb57532e8193df
-:008b904ba158b080f50cb5afdfcd9e6b80c455
-:008ba05cdbb618a803b5487892caafff14c1fe
-:008bb0757b4e86ea6e877cdbfe56da2128db8b
-:008bc0f36df73c0fe4829a2bb240902eed96ca
-:008bd0c469da3e72077264ee847f134e9a58a4
-:008be0868251eb2ae3736c4ea8dcaa7c051009
-:008bf05602a79f94893b6e40993c5cb29f12bd
-:008c0026d3c1e2d0d7ddfaea3cb5614b85b817
-:008c101f6927ceb5143bd1824324d57e87c612
-:008c20d7886535a1289bf01d5a40bc9b35568b
-:008c30259739928a8b07febb263a28b0d7e9eb
-:008c4028baa19bc0d3da8f72b319c48bb2a04c
-:008c504579eff34a4d87d6b8f42c164f733e39
-:008c602aedd0397570b6c97c6ca0884ace685a
-:008c70af6e23a6ea830a512224a38db10678b2
-:008c80630fa6263e98551d364e84858719c1c0
-:008c90a368e74a39fc446e8d0b98081ba6afb9
-:008ca053da82cdcdd8f2159cbbb2bf76306866
-:008cb06143b27467c04ebced617cf043babb1f
-:008cc06be75ab57f6a55b60903b07026c82e21
-:008cd06d1e0e1f1b3b8f60abd2e545a26cf91b
-:008ce0af6b11d591188f19c7f9c29c51a2c306
-:008cf079ca29d76432cacb9007f00ec9c9bad1
-:008d0066138bb288371872615719f645435473
-:008d10f0e1d93fd0571c275165d325da1ae843
-:008d202e6d4f4954529286b3123654c0a44284
-:008d306f9cb75483c30baf2b1e60812483e810
-:008d409c6eed06e19d48f98d7e5a91d426011c
-:008d508a1898862ba53902b61f54892ab6cbdd
-:008d6037eaaaa7e4301ad6e461823451ea8b2e
-:008d704ffac382828cc7dfb9f978487c286d7d
-:008d806603b7b64683151ef3ca0306cedd1700
-:008d90c00a49d6e2a2459c10512dffddff60b5
-:008da05328df7ad8240cb0c6b0b812bcdc2117
-:008db0622bafa396a198bb7d7a9c19c64dcd73
-:008dc0cd9a9b20f747aa397f5de24054ddccd8
-:008dd04fd1316991f7ff4e7f7c733ee02ae4d9
-:008de076b47f13c2bf8d3bd5e3b98be1db228d
-:008df03862bab12d055e455e28bb77dec3e6d9
-:008e007915256e9a643cf7e523fbea76bf811f
-:008e106e0f145c520d57f1f507136964752b72
-:008e20bf2d783a17424dd0e41d2660065aad2e
-:008e30f43ae7669380012aaddd4885dbbb8346
-:008e40d8f5c9e6dcdcfa80209d4247d3fdec6a
-:008e5087e14a04c0d6794609692ba0c61178b6
-:008e603e5cbeb6a24daf3054ed5bbe8923ac36
-:008e70591ce770eebb8b2acc58ae4103680f83
-:008e80c8f27508bd5eacf98bcf23ffd07b634a
-:008e90f76ee832d27cfbad47b4a0e91d3d5ccd
-:008ea0442a6bff0230cdbc4305b2b223bfed73
-:008eb0e4b8e73926e88b5bfaa0947f08040f52
-:008ec030df881d9bca1ef5bc05b92dd68213cb
-:008ed0fa77685f0a972c7bee5c6292f7318b0b
-:008ee0a66ef6d633e60d37d2068deb1c2c57dd
-:008ef08a6fde362e26db80687dcc233b90c7ef
-:008f00eea27cf986c61fe6523e1a0b7d606085
-:008f10bd48bce5de3f15605a2b533b42116b66
-:008f2030b77ffc593c4fecc75a120f21a9d231
-:008f30152cbeb7e9003fc5705d70a09b7b1b41
-:008f40fc7aa262278a3753ab5525762f06f1aa
-:008f5098b9b9e5dd968db50d61438701b9ec63
-:008f60b47b02d35dbea5e0bc5af4ba9f120dfe
-:008f7015816d9b7738b6b5fdbd659cf56d5156
-:008f808edafcc22f426580be05742b22f0ed6c
-:008f908bf2d50589e2cf635c8e76c7fe55940b
-:008fa042c722f488b6ff7b2ed40812cada29e4
-:008fb01eaa243ba3e7384f160b041227058b2b
-:008fc0e47f086058ad310345a24c23aefabbcb
-:008fd090184dcb98e69e62912cd0f5d6b47019
-:008fe0c18cb565b1c808835a8f23166b63aba5
-:008ff0727a1cababc85eb751d975953469b8e9
-:009000c69ba9209c6606e047a17dc747c8f06e
-:00901017b356c38dd46b4d69731f6b167b488e
-:009020440337df170e01e2fcc4e90b3631e3c2
-:0090305a333e63a9f3e969d90c2f8ac0051092
-:0090409562b285a2463d0ccc5e46a164076f19
-:009050c27591e628de4916260624d208c53b66
-:0090603289fe982c3166bd1cceb0136385b961
-:0090706f297f73c9def285930fc9a56eb2c131
-:009080db77b3c56fd7e79ba928c634b47ba13e
-:0090904d392af6a3483099e5d628dd640f3e53
-:0090a016b44a59988aa24482ee363fdb67ef1e
-:0090b01e6227fec0223192dfac809c27846527
-:0090c064e87b8701240526397f9e9ffefcdf25
-:0090d051aa8de864dac7c55db07742a961d501
-:0090e0dd612fdca15e82024c218be12b4b85a7
-:0090f0b97de673cb82c9badcbcd681109dd2f7
-:009100cb454fd59a908da3cf0e3f8293586e1b
-:009110f4c502e5595edfe0724cb999130f6409
-:009120d5f75ad995f80ae0cffd1c5ccfb43e70
-:009130df34326750dea69480783ed1edb61c9f
-:0091407a15c4a65580a5ddb0ccf96168cc6633
-:009150a458a8e507f8cf0bb6e0fc9b942b0caf
-:009160f399e09036707980b2b8060989481528
-:0091706c9f58b5a1ded47b6f95fb7641621039
-:0091803ce20fa8bbbc51eb60b3e9ea50a4f4a0
-:0091905cb4d04b592a05936c5dea865b7f541d
-:0091a070044058233ba79314745254c698e601
-:0091b080d1700c1123c6735debb781413f9d09
-:0091c0e10bd54a867ee7d79eecdc952f545664
-:0091d0918a727749070441933562a68acc30d2
-:0091e0d41d788b5024429ba1c377dcfcd04f07
-:0091f0a469885d33f3634b90fa6052f2f6e789
-:00920005685d2556bd5260febd898da15df0af
-:009210656d87c0296b65aa2a12ec278f1168a2
-:009220b0969c16553843558b13b43fbdb2da61
-:00923070e175a5285230ac02ec18a000c63fe0
-:00924082d09d8a78b26d8c577b550e9907a0d9
-:009250494f972298dab0fc680f4183d43d19f0
-:00926037d7de13f9fa6c0ec06e05365cc8c4b2
-:009270d2777be1bf84c9bf0f44cdcb9f4f6017
-:00928047a659ed83a540af368bef68cbfe7d05
-:0092900832b0037f16dd91aadcb84e4513b11d
-:0092a012e11a802e188653dbd616965fc8dbad
-:0092b0de94cdc3b606e01ed847676c9b62417c
-:0092c0fb45fd43a8200e72611a07ac125ae303
-:0092d0d56c0be78ffd903c9870fad842840534
-:0092e0be3bad75e8f6aea2a3e6eb0a59d0c089
-:0092f0bc4abb59c14762f008a217692881910c
-:0093001cd3c4f92cd7fe2e050850643b201092
-:0093100aa6a4b610aceb7cc345e8a346d944c4
-:0093208d4055d9d894a5a95cd50d305f359637
-:009330079dad809afe9923373555d4dfac1e61
-:00934060fe7ff493c0da164d00f5e545d0f94a
-:00935006c2b72b2776901d5bf9882e1e05fbdf
-:009360415e12c2d006d1aadb419102935b62b8
-:0093709ee84e2e60c29102c7eb6234d2ac8575
-:009380602cc916880e665b5f6e12e8c4053bea
-:009390ec23774a8ba71a4e0911a1f8901b2623
-:0093a0c54c2bb58ada955468f0be78ce46451a
-:0093b0370106f3665ad2a34cfacde64897ad77
-:0093c05c61e1a7d7b31a2e0d35502e49e2a197
-:0093d0ab2346f4354f35be172603f87ff33252
-:0093e0b73739928d6a6b9564b49706239157f6
-:0093f01fb175c72de0e53406d71c76e7350d3f
-:0094007894e75fced46c79cd5b59b7e306076e
-:009410a117e746b1d951714e9fc2a6dad1ca35
-:009420bf7a2bb30fd22b1c54479e05c32db100
-:009430219598fe8ef12a04d915887b52fcf853
-:0094403f588b6b44acba52f1321ece2d5e611f
-:009450d92c7a5bcfba2feb57376aa83dc3e0d8
-:009460874bedcc3c8adbfb65e7890719efcff0
-:0094706e72f590d02ac6191d0b3722c5af2354
-:009480d1d6a76d79b5c04053327723fbce068e
-:0094902fea3bb4583afbac83b975810ff45759
-:0094a0bd404a57d49babfaaefc8e1183eeb487
-:0094b0795244fb1805622f6a69348b175fd5a4
-:0094c064c3968c15a57e31c852f2b27bf81400
-:0094d07a81dcfc1c3b984570a0c7ff7aa08fe3
-:0094e0853644a09d96114365ed04c3502bde04
-:0094f04fffd897ec3ebd6df4a28f03dffd04af
-:00950056ed2d7d72f2a67e25014569b13b262d
-:0095104f0b28ca93779b396509b2911523bed9
-:009520e0aba53e7c3fd7e94694f521a61fa841
-:00953014a1121d11c99e06ed3e9d54dd971780
-:00954009efba01736ae855c4c0be8c77b35550
-:0095501679828e42be7f75655f535f002a7b0a
-:0095606f9f09918e557a2407dee7072b3fcc41
-:00957028599c5fce1e0aae5a1c886b5c41e7e6
-:00958094e753a0b7c0ea517ca419e7d7cb91f9
-:0095900280594476a0117bb81de747f980219c
-:0095a077202e548a61b9f634c97f7c4de94d6c
-:0095b052e9c05e14ad4e26280c44e8718f8027
-:0095c004ea5eb0e831df319ccfd52a2fd3bd83
-:0095d037286c6f62a3220ac8799e3755f1e98d
-:0095e0555a75d4eab7762aa3ca31f18a1c182c
-:0095f0df317e0818631fd97a206acd21f24c21
-:009600b598b8a8ce855f16a0f9c09c00243e7d
-:009610b714b15495859157e78badd433d77926
-:009620226380378c06b8de9613779385d39f37
-:00963057afd276aa8782a404912c1fced0b0ff
-:009640afefdd8bd8d6f4116bd937c6a8751847
-:0096500d3c107d74371af57b23bae1b70f1d4c
-:0096604136b168211995470add20a2faaa33b4
-:00967051fdfd48196d2a6e2cd3f70c3703b009
-:0096809dbe7d0daf5c12361a3dfdfa3e2d5105
-:0096907cf5edb419565bfae023acd29e720906
-:0096a095a03d88b16136321f5adc29a47a2d23
-:0096b0eee822e48e25b60d7813b69880a37bbf
-:0096c0067943fd15fe7b7f0ed570c17e6fe36b
-:0096d0558fd9a20dbe070e6a92660d04956f1b
-:0096e0f5e219f74fe02bc80127da5fef3db481
-:0096f00b835b30986de3677f7c8b7928d44537
-:0097008a594979dc3166949dc80920ff3afdc0
-:009710ed5cd4dc9da1e8dacb1feea45ba185b3
-:009720017b02fa1e2a316fa748b3cc9a2a4e40
-:009730c30cefb9f2a4e379217a4e09c019cbe1
-:009740f3a6840752dede2abb09e2270032cd0a
-:0097504182d01a55180a1f49711885e26c7264
-:0097607568bf04a08daa8c31a677b71c636a13
-:0097707c767c308270c1873bc98dde33db6a3a
-:009780bd760ddda08327e44ece76f02e18f7dc
-:009790e6081b4a2636b38cef5c55afa6478cb5
-:0097a03c98a3c300babee0097007be5de495f6
-:0097b072e6595e7c7300d24fc956db069054d8
-:0097c017a3b06820a0b33a50a36bf0c88a6e9d
-:0097d082d317ee312c95c154e208065496b73c
-:0097e00826ca7eaad7ed6563165821bae0a71f
-:0097f08734bc9360454275202cae2597f95c4d
-:009800a081c2cd53e028aad48035b983e76ee8
-:009810cfc98b7946ebe4a2ab1571c53b9ccf39
-:009820a5052fd45c62e751b6c3dd9395291343
-:009830aabe52c5d3f8b0d251c6098aa4416b5e
-:0098408ac76575a81ddb3875ce4ebbbd3d43c7
-:00985087406a9d1752485a1eeaf7022aed3af8
-:00986003bc81d94f452b9789faeed5aed8fd7d
-:009870d9a7f43ee7e9b71454658b51e2a5232d
-:00988015282bc2ca26b0589a1d7ae1fca188ed
-:0098909571ba0379307f2c1d5edfcdc884a866
-:0098a0dab3cf0c4963065fc09e68b57eaef784
-:0098b0e04c599d9d7c7f0be5c7161d0c8cc672
-:0098c0e6bfc3d297ec26ba0a3ee64433529ba8
-:0098d0cd22ffd89db6a28ad40d8cde077226fb
-:0098e0d20e965d4eb7f0f0e9c5c4d56c890bd7
-:0098f065c603ece2542e9fa4a3d69c5d0bd94a
-:009900d7c96bac6a89e0ae0edc49f5a59a71f0
-:0099100152c8df05288bb63dfdcfe13e8c84a2
-:0099206bdca3a1c3f5c0a0d6eed35daae55503
-:00993058f0249cbea9827a06631f40e6f9948c
-:0099403b04b9c6e3a2a24fac2c863f2ed7e874
-:0099503a46810157d27c126d982c6fd80935c0
-:0099601f4b61a93e37cacb22b267ff6d98f19b
-:009970795a5a22d0af7e61893349ab99016929
-:009980b4b58713c9ff3d0f52611c646c098139
-:0099908d21a9b0190b6a6c5d144ea64ff2f8da
-:0099a0e79ebc3688b60ae68f08819b4ed84632
-:0099b034d99d69946991864bfd257fa80e73da
-:0099c0fd6ff9582d3927ec33e4416a99cced5a
-:0099d0b97089f756910255c9bef533d69556e2
-:0099e0dd5ba0d2213d10699da9c27f472e3de5
-:0099f07f5e0b907175e981f07bfdf1247d9c4e
-:009a005ecec0bce367a0b4bed61d9a2c2891e2
-:009a10d81e614424523315f29211b47791c2f5
-:009a208d14ddfd7b9378c3f30523fd114b0ced
-:009a302c81b1d4644f56633887d83332d47d95
-:009a4007816474ee97165111d638d1b5290414
-:009a505fd92cadad1ed9a5137a9e94c459dd5a
-:009a60d4864a08a8be81489df75fe796bd0deb
-:009a700d4b08c31a4cf73c5b72c1afcaa02e66
-:009a80a1c05979262b7da78d00f21e28807f95
-:009a902448028d6d22217b8aff15f1922130c0
-:009aa0950c236283e6d1b2c93d7f51133572e3
-:009ab0a18546e8f1ed31e1daa0d4740b88ec60
-:009ac06317ca8e7221a9b757b512cf2e244517
-:009ad069289624d0c3cf7cd525a807c83eea2d
-:009ae05b537b41399b464cd5241252aa83e86d
-:009af0a3a3c6446aead92bb0aba18b989f62bb
-:009b00ab503748cc5c874a36c3108c80e34bcc
-:009b1009144b8f92de392663d68c024653915b
-:009b20a2a360aa12a849e441c0273b537e4f27
-:009b30e561df20eaec2524abd3c9cf1f7ff179
-:009b40eec1b712d617064b99281f37ec7cb688
-:009b5078b3fdba4af8b4147eb7d6ac6e9ea331
-:009b6034a778416e2019ce00de3fa6841fecfd
-:009b7048eaf99ed112dd9a0b667cc7cbb6c63b
-:009b8004a757b61c059a0956c60609699e675d
-:009b904272154cd38b2f8d7a607a64a781458e
-:009ba0563c3edc7b66265e320c412d06f73af0
-:009bb0b1d98a9b3a426737c18d3f914a36bc0e
-:009bc031d0362f3878eafe27e1ba091a4da4c0
-:009bd0cb4a530f6202a01488b42aef6ee1a4e4
-:009be0aac6dbeadc8b644a0ae88375a1cec8f3
-:009bf0ffa6b756e7d9d1c5f191517175683715
-:009c00c7de64753690e372f4e0eaa96a7d69ff
-:009c10e687911b6989016df02b9608ff47c9a4
-:009c2093f49c840ddd3b023db98b4930614571
-:009c302df7c33b01c30f27166745a3d9a315ae
-:009c4080a98a18a9b3cb88db5d2746589a14ad
-:009c500dcab4b49d3800860f22c0a7bb9a5248
-:009c60e98f0a8182bc9d80ec5239143a3daf5e
-:009c70ced736f005195e1490849f82f93716db
-:009c807f89322c7888e02a5b9baf63778814fb
-:009c90d80e97bd2b63bf3baeeb8de0beab580e
-:009ca07546261c6978016de57f7fca5e8e8c80
-:009cb0c84a158cf886db81d0cc3dabb3a13729
-:009cc07bf9c699a2dda9672df60144014d411e
-:009cd061e39f7e32331b4060ee39f5bd856232
-:009ce0fa2695476edd4119fc02ed74b8ed9175
-:009cf0298d6936a70e531cb0a3907362c4bc9c
-:009d003e1fd9cc47d7857a116ccbf4e7ad66fa
-:009d1053a2f8883662add9a65d829a642b7edf
-:009d203eec0572febfe37eff6ccf823495baaa
-:009d30b7a1532ee3686bfdb16d42f7b0884a1a
-:009d401d537ec655ae12315c1c95dd7c087a97
-:009d505133510e11786715ddb0bef4624d64c8
-:009d60e004a8fb9311dc4c513f63d45ad1d91e
-:009d7059dd086c203f8a2d85aa3be3b5489747
-:009d807598dbc033d7763f41ae2789d79754e1
-:009d905eeca0455725eeaa25a204c51e337cce
-:009da0845797753ace279e01ee099b5a1aa5c3
-:009db0b6d40908ad9532707017446d6832a53e
-:009dc023766661c6b021475b144e2aa5ff300c
-:009dd0f12ad1bd3ad769780e88082ec9db6d5e
-:009de0531d1db1ae2aa4629007af2fadbf4076
-:009df0f84ddbcd770c5581ee259b18e3784c6b
-:009e0026572ea84556e023af7fff854b90b426
-:009e10bc5de28325e2fe1c2a4ca2812b16712e
-:009e20d327187fdd4339b47e3b0b63b5fa1e51
-:009e30c45dd97540ec975eef70c68f9117a722
-:009e40feceb88ba3a4efd1e13ef52816e1de09
-:009e507fb812fefea72a4a3d61ceedad50af9b
-:009e6085099810ea53ed01d0757ad08d869d87
-:009e70876bae87698d66e561e35ceac43c126c
-:009e80418e93f0890c6edc546331bb4c2c676a
-:009e90296adec85f960bbe84298afc4a10a4a4
-:009ea0d82d872c581ebd4f1b5c71e4c967156f
-:009eb022b05675365bbb6c95d37cec09e48081
-:009ec0a7e192a6a8fc168d17be9541fc738b9b
-:009ed0e1a4ec6bb7d6228afdc50104b7536da2
-:009ee0ef0f03f17c43a5cfcdddf5e0c9893daa
-:009ef03e36c9e0511281a05b4707e7b7824a2c
-:009f00ee32e275d1a923011654ee496944901c
-:009f1034187833303e9ba1be351be32aabd32c
-:009f20a804f71b0b7e85c193246aa8a70c3226
-:009f301b9a76608c706376817571eef444400e
-:009f401671e76584822eabc22ba7e24687d7da
-:009f50e9beb5c5f5a5795473f93e2f7895f145
-:009f600d3aa735e2325f37189277d06814cd8a
-:009f7007e00a4c16ebd509ab2f1164e6aafe58
-:009f8023f777384bc25413c528060c118eb2dd
-:009f90e296d65ee732cf396455bfa2a6f9277f
-:009fa017b4cb92b5e0cfaaa7450afdb3117bb4
-:009fb0b47cf015fbee0c4277bb67e682e82ec2
-:009fc0a4df26750985ea61c63af490b3e5d7f4
-:009fd00031f7761a9d4238fe3c3e3b3747f5fd
-:009fe01149fa859ce3eaac68e562f32e707f96
-:009ff03422c962a565216f7aae6ac694ae13a5
-:00a000a1ca44a3b003447738471a487a0788c4
-:00a010ef6cd9619b83031a5c04beda062d1075
-:00a020724a90b2aea351f32ad908b217438e11
-:00a0302941214e1af6e18417a067347cb2defb
-:00a040b8d28724573806a2283e7302962d0541
-:00a0505b76cb4730d6741a676d0f738f8047fc
-:00a0606f111692de61ee56cc454c136ce6319d
-:00a070ea55199ff409cda8ba596b81613ccff4
-:00a0806237c87a488df940174dec2957352dc7
-:00a0901d5141dcec0e450af4864fede79b48e7
-:00a0a0ed392bde5c53cce88b6b5b19562c1f6b
-:00a0b0e4f81981b249c562de67310fd6ea0946
-:00a0c02b42cb04ef4534123a0abf6ebdc92fd1
-:00a0d00ef73dbfc6cec3905ed4aa753b44eee2
-:00a0e08128d8f13ddac5b154b7132b7845e045
-:00a0f0aab25794b95f21c35ab4191be056ef45
-:00a100c6f55684fdd97fc6f3a9deccd607c1c5
-:00a110d3a1ac08c70ba762b77573d293f84dd9
-:00a120ead7090a9e8b7e2505f15dad084eccb5
-:00a130bc6a36ae1be8f9d1f08771c656856f83
-:00a140a656a45217603f089a375b7f3be6cf50
-:00a150394721545e8db0ce687b20da3ac1037c
-:00a1605114c183f14ce56da875bf9244de758f
-:00a170602180752f701ca7a70d0885fe782f94
-:00a180a45abc9dd94b95899036f63a661fdebf
-:00a190b2b46ed2d9a11b91abe85052cc039e73
-:00a1a0d30de10d6c8b230a2eefd2f5783aae6e
-:00a1b05f5b8ae85ec9c19c3900e84d7af8984b
-:00a1c04bbcf9f88674a020483fb632517bcf7d
-:00a1d0325d2ce6b1622ad4f64eb7d48c1aca48
-:00a1e07d1513c67891d3cec3a367bea9b503d2
-:00a1f020d79113592b2d782c69e4afa524a357
-:00a200218d067c2a82b077f150bb4305d81fae
-:00a210503b2cc7264415fac70b99d3815b63c4
-:00a2201f59597d775cb03e16835ef3d8fa5454
-:00a230b4645f27240ae9797164bb52ebfc95fe
-:00a240ddf044b05f13f13d0d8812a4359cdb81
-:00a250a43c65e77c1a0e1ce1d86bdb318defb1
-:00a260be39559b8702b6b87432c7ead3bfc0fe
-:00a2709572dd3a6121b7730dc43dbdf836bcd8
-:00a28088c9662e43b4f1ee0ea0142d3923983f
-:00a290c0ecd27ef6bfeab09d0bcda01c35c70e
-:00a2a0556a52e180fbfe07b99209fb096149ac
-:00a2b01b1ef0d8008a23542cd26f191f2ed69a
-:00a2c0ad4ff0987f8b1ea4a1cebb32ef6d7be6
-:00a2d043849d9017687e0801c4f133a624f3b1
-:00a2e0b17a8e6ed8a8852ed89a9bec97fa9c27
-:00a2f0fb34cf87d0440cb350c1506ed97f3757
-:00a300627497437176ce60d3fb8695c9ff6019
-:00a310eeb00d801b70ff4c4d70d44dc05f902b
-:00a320c246df8649e401b0fd4e396cd473ce57
-:00a3303879d3dffc8809dad4d1fc64a2a64f21
-:00a340436f0671d63fd133336349cc9840bf7f
-:00a350d15148e00a8c21ec6d82e6790df4da6e
-:00a36021346fb80dd7696c04ebaa68be322ff8
-:00a370770610e1aa6a9391bc2466d007192152
-:00a3802eee2ea2afa6ef158c97a363d0cac267
-:00a390f2c991016a53c766b8ac179a6c52e78b
-:00a3a03a10ba8b2da0165e3050f3064872aa99
-:00a3b03b662d1dd6d27133360301c98e261c08
-:00a3c0c4b8603a89a1ffff8595a821c8f92e47
-:00a3d0970c319779b8468009e1496453b4bcc3
-:00a3e01b9cf671ebcbc027a284380d71a84ab7
-:00a3f0dd38062a9d32aa744253de916e7f16d4
-:00a4009efb0c62ec63c836dc2049787962bdc7
-:00a410f541455ce7c3a4a4590698200e6029f7
-:00a42035eb79b021aee4f1e826293e06ec0955
-:00a43043419c089cd7a836228ac825cc9b3920
-:00a440f919f0ff59655b0844b0b17b3a48a7d1
-:00a450d815885869f4fc16fbe784f7dfce3abb
-:00a460d33e954b729d8f151ada73cb2ea57a61
-:00a470380b257d94ed12db6be98b2b10213870
-:00a4803d512e0fa43bcf332e97fe3b933c1c9b
-:00a490aaee1772630d08ac06429122633af94b
-:00a4a01eb56b8390c4fff965d6e4bfc1d0be70
-:00a4b0233efe5763da6a8a341b235b0185146b
-:00a4c0b4f06e9a5b30ea645fd53c6d406ff6d1
-:00a4d0e53e72df299ad05f46e2e5e45813e7f6
-:00a4e0f44e0ccb0bc23ffd6ebdb778538f972a
-:00a4f0ca42d576fc57f936cc09b259e6adba3a
-:00a50033dc6f295e4e1fa38600e80460698bb4
-:00a510efbf8865440ee748309e46661523edfb
-:00a520832a6f005f99157a7c0ead71ca034372
-:00a53082843fc42d7913efac259537e13a3673
-:00a54070fe470288fe4efa02e6d6cdd4d396d1
-:00a55039c8028a87a5e0c22a413df8c090092e
-:00a56061ebc96b9b7f1becb503a34ff4e1eb65
-:00a570d960b9fcd836cc0b61a95f3f7ccaa75d
-:00a58020936d61712fca2bafa4d9d4885bd59f
-:00a590c513868afc0db0f72a55a1805d4f89ea
-:00a5a05137b02da3b6f74bf198d1ed352e2e91
-:00a5b018090366adb94555ee7f60a9dfbbafbf
-:00a5c0ab2e74fd1e2ca26eb366cbb62fc156ee
-:00a5d02a151aa05044f7fe10c9b4d5e8e4c45d
-:00a5e011a4d86db82b526a596da85449341f08
-:00a5f023ec4cba7fd3c3898c1a449c85d89662
-:00a60069e25c5e235ea868b2ae96eb88ae2cbf
-:00a6109ab87c1eb316a79519dc88de6a18d45c
-:00a620a9ffcfc155ee57139649b1cb9dbf63cd
-:00a630bd5a2dc7623e239d8566689ca22662c5
-:00a640d0f87c923dab9b497c386a9925614a3d
-:00a6508c89d42ecc2c25460786cb1e15a27a4e
-:00a660736c147e08ad7f68980ab0b241e5047f
-:00a6705d829930a120ea31a8b978733b7872fb
-:00a680b0f217628bafa7c20e8231db80cd6442
-:00a690eea729b8fa41ed080893d5daa0d7bb0e
-:00a6a037f54e92b42737d104fa47b0d258fc58
-:00a6b05a27bc3b17c600b99d9519f179e56670
-:00a6c0b24c1f22a0ae0f9ebed12eccef58d937
-:00a6d03d171732bae22827d4c46b59b6b8b93d
-:00a6e02529af3b1a3a67ca68d6e05eed2fcf9c
-:00a6f018d2a2ccef1f3d0d01e60d3131d16d02
-:00a700ebae8e9a84e59d1f18dbe4e21fa1cd69
-:00a710242ac8b43c5fa3bda7f77e4b244874f5
-:00a72021480a5cd0a2154992e1545657b6465f
-:00a7303a5b35ef419b3283b75dc86a5d4a8619
-:00a7402459f13c73e80b453a8b0bdcada22580
-:00a750b0d4479e8039912ad8746be37882c7f3
-:00a7608f50eb30ef914f19722a29884a94c73f
-:00a7705fa3d8d16ae2bac4bec987fee4dff907
-:00a780188289a4cc0fe973b3711a4da3d1fd23
-:00a7908c9057a3d78da4d1b97083737d597681
-:00a7a0ba728631957454997c00cbbeba2bd138
-:00a7b07045c75645e601e96baca46a426157b9
-:00a7c0e40c4735bb97e1939a24b8557c8bd69a
-:00a7d02eee8ef2817d8a2e48d3b09d02fb06b0
-:00a7e02c43e54c8546354204f08e623bd5f41a
-:00a7f0be186c4b362d7b9c251fc98aa4d9a566
-:00a800e062ab3578014f42f534ceb067416fcf
-:00a8103e6752bf0af9cd1fabf0a7a2d271968a
-:00a820198fe3976fe8f8a5d7abc50c0c7910da
-:00a830ac8bd53d330ae77752200ff575040c20
-:00a840c6c35863ed12f4c40f5cd44c45746e78
-:00a850e533cea3eb6e752f780551889b6b767a
-:00a860ff2dda1f4aa4400171aaceb781612b6d
-:00a870967715df1d46327c6f205ca726e93a28
-:00a880f929d4caf659145759080e76ef8fcb41
-:00a890567602fa82c0bd0002ec63d19b1eff7e
-:00a8a0d8831a652693991588dad65acaf7d242
-:00a8b0e42579db11f9b13a4d0ed916451e3af9
-:00a8c08b6b41299f1c9414bb9a819aff390988
-:00a8d0e91d36c6a2bc8b33a54190c2fdf4a264
-:00a8e03c997cb3d5102df1d8b79c76cd319b35
-:00a8f0653619074dc7970b42b6aa96967b8a0b
-:00a9005f1fafd98f1eb64ffce798d86fcb158d
-:00a910c1b7561653b86ab086cab8b0d1a7cb90
-:00a92001c3251766095c0362afe1c59924b395
-:00a93081a0c467d2471fcdc52d13f585d6d3ff
-:00a9406204891638ed284fee84bf5459a2c7da
-:00a95097580b67d8ffbd9719d500d8bc5cb124
-:00a960beb5c0e378b32983787ecd0d16c38644
-:00a9708cc667071925b67aeaec0b2fde7fc548
-:00a980f9860466e51f411dbcb80f7bc2f6e996
-:00a990c21236f65f9da52c9f79e6fd97e5f5f4
-:00a9a02293d27090005794068d522fe31b31c4
-:00a9b0a28fa2099a39dd9a7677ad9c93b28d1d
-:00a9c05723f5fcb7873a26d4f720d4096d90cb
-:00a9d0f67321cf26a644d3a71284a7d1435287
-:00a9e0b5be8aa665ff695575e930f644d11090
-:00a9f07778843e0acacbc3911d74b19005b9ab
-:00aa00b791d0d3d16773c528e3a3bb7690b0b0
-:00aa10ecbe03da130cc7ea9e338114467f6b87
-:00aa204e5e3f10693012a6e4760da9f60c0e37
-:00aa30e4ca448ac5a43076503186a6a4ab982f
-:00aa40e56219e2e572e1d7a4ec67d208378503
-:00aa50034986305422a3d7145b7cd56d39959a
-:00aa608fd85087dce0cbfaecedd58c09652e56
-:00aa70f5d280129abd09e9cb1c6f2d330c9efe
-:00aa80b28ea9126421fd0716b479c1f25d986f
-:00aa907c0a7e89ee5846cad81e81d0d9b86e50
-:00aaa07b4a715ab3f27168c380e8af672388a4
-:00aab0c7947f81b8e9439538c360fb60a29a64
-:00aac055a8c488cfcf7868d73f7a1aadd6273c
-:00aad09578c82494ccf726c47a834cb49e0efe
-:00aae0a2e269f94f2d151ed0a97656e0171131
-:00aaf08067a0f89c55bc769e7132ead01e2c92
-:00ab007b1a3e1a57639564e496bfe2d4d59677
-:00ab108f8588b6e028ecd2e712401ce6db4bc5
-:00ab20bb006b6d4687d2926037af4e0e68563f
-:00ab30c145f7aa621a0b65d59393345ff34f79
-:00ab404fd0fc1083c725680f46b0d5217d28d4
-:00ab507942b6c9e9d0bcd9e2b74ee1bd10c0a7
-:00ab60a8ed5f00321f747202c9e451b60d032f
-:00ab700fda5763f7c5b4f301f02ffa40717988
-:00ab801294a2ad334da43781617d54ac73e95d
-:00ab9042d039cf62b6bbd0802f8b9b386e5914
-:00aba08bde2bc2626ca51198f82e9ca82861e1
-:00abb043499c1d9816651b0891f78c1ee9c498
-:00abc0fb00f312940b9b2c28c77a5018d81a25
-:00abd071ff5ca4640d720a2a9c0bd222d8c9e8
-:00abe01e7c60fa1ded6bda6b902768eace2f9d
-:00abf039913e7b6cce04e54087cece94daea88
-:00ac00db4d2971f2262e6f3623b6212c5866b3
-:00ac100bf77bc63778664b945451ea4b495ea0
-:00ac208152fe5a92b17d5b4c38217c25f56c91
-:00ac304471186d754293dabc00f4d3bb4437d3
-:00ac400dc85f6f0a74ff571230b1e75ce6e173
-:00ac50d7822a3a52fe5681cd2fd83f0578b052
-:00ac6050f1cf53f68733dcd314149b7f77f843
-:00ac70fc396053e91fa9f9028f4d2e2035a6a7
-:00ac80c6e83faa90e43a03ac26736fd050f4da
-:00ac90dd9958cc06ca26fd00304da57dfd4617
-:00aca083892fdd596213aced33e256d976d784
-:00acb0d45cc6ddac532b076b4b78b997c79580
-:00acc0358c38347dfc45d814bd0791dd5a138c
-:00acd05ccdc34e01744d4313a20075b6d25567
-:00ace0a2b6516a87f3305142ab4011a891518b
-:00acf071a1a4859810ed0357070e8227de428f
-:00ad008c994ff0543193a60ea2a879217391a5
-:00ad104baa4a7a88251cab7a98edf6ddace2fa
-:00ad2055e940053899dac34bde38e9fa1646db
-:00ad3024e247c06a2c6d5d7c00d2c744266c71
-:00ad4063e3f87cc1eb14fe4f584d550636d6e0
-:00ad5013c72caa8510f73a6933182d8bda58a2
-:00ad60e6e742018122ceb0c82f573eb39664e3
-:00ad70c8c40a721448c53308fea18ae4f6f7e9
-:00ad8060818cb027a8b6bdb1b185336bea3d1c
-:00ad9076caf90b51654d73d42e8636814db7e3
-:00ada0800ed8a111b8a9a0d4c161efe56203d9
-:00adb05a10b5f32d89dab103f25be5e02674b1
-:00adc0ea571dd140e5c7a64f4e0eaf4fa60baa
-:00add07a47bcd78e498c7e862a692c24a440f3
-:00ade0c194d254716f507a4cac0e4913f3f621
-:00adf0af4a659ea90f560712b17c50d5bcec24
-:00ae00e4e07d0cc3a4f8defa6e92a3b8df8249
-:00ae10095da81d480fd1851209ce01c08c74fc
-:00ae20f2303b15ea6957f0b884bfdc22d87901
-:00ae306d131bfb14c4802dcb7961d00936574e
-:00ae405ecde192e41e0b2b06773a67a3b65077
-:00ae50beee42119721c45377a243bb6e456178
-:00ae601107f87559d92aa063ce4aae83865963
-:00ae7078c8155d5f07a73ea09e2ce20741a434
-:00ae80e168cb984a4acd8aad235ada184d270f
-:00ae907f5cacd47f385b8bd3a324433b1679fa
-:00aea03d6c9e1b66f1e599ffa02bdc6b48b4b7
-:00aeb0cb197776730e062865bf125a13809b0f
-:00aec0b234a923b420027fd2a28c05ccc23e4a
-:00aed074c10ef2ac65ded39ced2d62ab590365
-:00aee07c805af143d6709adab865a5f9844b03
-:00aef0d5a28bd8b3995fb0b19e6a5bedf9d38e
-:00af00e241e612a06da615e85ee519785e9a0f
-:00af104bc2ac7f972c74d383be04827a18e4f4
-:00af205ed887f98875fb76388959e54adbe4b2
-:00af30ffb10464ff4c465f935f948eb5c32d04
-:00af40a84f964b31adcf7547f82d6492196ffe
-:00af5036a7274bc0fd531d84375976a4b5f346
-:00af60e67911184119f39da7514b2a8590bb90
-:00af70ead015fcd6235b3b515ba5b3cd90a9ac
-:00af80a910e3aede72b74a4bdf46cf51b11b83
-:00af90502d9f9ec642cf9bb1541484ec064447
-:00afa0b4e3d477b57b11b2d70982d430926c76
-:00afb01eb0aee836f8d7ad109b36599101d73d
-:00afc068e94e301e1d0d9d64a4eaea4f142b5e
-:00afd0ab3f722c3b80d341c14299e82f49481f
-:00afe074a887ce776113461edc83124279d24a
-:00aff0b4887324c082f7bdb95155ca2be43351
-:00b000da7d1f7e88d2d5aa79c6225bb487ff7b
-:00b010d82f93c39e2021d1bc56cbcaffc5e922
-:00b020fec06a590c2187c968328ee1dd1f0d8d
-:00b030f7ab7bd8621ccd0b5fee6e2d935e167e
-:00b040188f645a82b955761fc36a125f725f2a
-:00b050ae7b6e69ed4e8ff0a1644e69ab6e5762
-:00b0604b3281170eb5cabb2d0d86fc4f47f3d0
-:00b070954d9838fcc31914e207be070812d8f2
-:00b080d3f25b5446e13508a874c09e0c54214d
-:00b0905c85ba80bcc8c8331b20b60cfeea922b
-:00b0a090df002108c63796a4c6c714190e9819
-:00b0b0e48810044014f12c3b9912eac7f1d0a5
-:00b0c0607d026e8b3cd98330e74c89d3f16373
-:00b0d0247524b76a96e6843ccdf0caf015a8c8
-:00b0e039f99e732ceddc16ad99effb4193ed48
-:00b0f0d9fe7ff4dd67efe1ecd0bc3dfffa7559
-:00b100a812413d73ac4a8bf5d5e97517258c1c
-:00b110e5fe5868d6d1e41b4087377fc2340118
-:00b1202db6f1b8f9532067623d1b58976d5e27
-:00b130ce166401c42d976877f049fd9d2a182a
-:00b140ef05cacc125f06dba76d84175e58874a
-:00b1500aada97a7ec2e876cfae568a956e39e7
-:00b16032ed68870ad9b5091dfc57d5888c44ca
-:00b170ec508121fbebb70f7547011b8929945e
-:00b180efa4b6d33bd9caa95d9b3804c5ec6586
-:00b190b5df951bf9382b58832b23112e763add
-:00b1a01b122c5e195d27e44d7248d7fd6be059
-:00b1b06a4fc498a6a7b6c8813f6a7e7ad30ea9
-:00b1c09998bb1fa809e9ece1582c2c44d9d9dc
-:00b1d0156c67d72fa1fe47d63bca7d8a4d6f5e
-:00b1e03bc89c2647ab0fa3fda70827f2f1655b
-:00b1f02b667cae90923dd824005b93f31798bb
-:00b200337ad310598e7982eca16eac2eea0214
-:00b210eb2e03d8db974495a45fccea1588619e
-:00b22094ebf0a243db0c116c280eb0903718cf
-:00b2300504497667e6322cb22c4c350bbd6a00
-:00b240d7d8b83778db8ac162d9b6ba6ad1eba5
-:00b250322ba9b6e0d05d1deb2852bc117a7a69
-:00b260d7f72a02dc3a1232f32bf39b98017918
-:00b270dddb4204d73ffdc439407915723cb623
-:00b280331b00f5ebdbe943728b84fb4e7e4a4e
-:00b2902f068e4158951bd5d1a759ea17e61d51
-:00b2a0534908337e9feb77d0327839cc2ac577
-:00b2b0334f96e3a3eea7347cd12e838ba9d38e
-:00b2c043dbcb74cb8780f87660678de5036403
-:00b2d0397f7bbeb4b0a8397bd39fc4e1178529
-:00b2e090610e7257958e85642aea006083d325
-:00b2f02d27a3864070f4e3f22f9f1e5fc57e38
-:00b300f635189f91bdcf0961b079559b84987e
-:00b310cb90f047a2d579520b13c6ab6df6dee6
-:00b3203c54aef281281fdcc078caaddf1a774a
-:00b330aaa11a242769b4c724e0ed8a02a0c5aa
-:00b340f717070f715a8e53a4b9bb31d6794736
-:00b3500f76e1fea16c19135d2276c40958fdf6
-:00b3609c5dde1da0338ff7eed260a13cdc2b71
-:00b37004e63f086058576befa2ec438d4d4bd8
-:00b380848fc2ce1974fd232fc5a8b4ed6e12d2
-:00b3908352355e96cf065b83a5dd1f7b0335a5
-:00b3a0354e22b3f67d37ee450bc7465d4b7c40
-:00b3b07f9a0122e8c85a622b77c5c59d51a314
-:00b3c095f9d8da2d8d680a09aca28494621a39
-:00b3d0823df1218050396dcb7406b22c711fed
-:00b3e0750e0b8df4c5f86b319dcff92972a8d1
-:00b3f06d8b367ac56ebaeae9a198c438386653
-:00b4005e3b37de1fb0d6a46cf6e78f58977e90
-:00b410a1d2b44ad495eb1ac1a2bba6ab9d8f7f
-:00b420bece58990638ee71669a6da6a7f2d82b
-:00b430f76910438506ca8199015d6084481d64
-:00b440a273ae163f064c8348b4bdc9f42c8c7e
-:00b4504a4b8f8ee1ade5aa47631010e8ccf9cf
-:00b460245fd2ae5659b79386df348ef509fd95
-:00b47087572a1f1b3b9e1cfbc84804ff61477e
-:00b480c410039a772bccd871e67da14756297e
-:00b4905598760fd786d25b3a24159cec41a76b
-:00b4a0aa901e21d8fb520278bc8d3f11828f7e
-:00b4b02907e3b3146dcefccee56f4e910dae1c
-:00b4c0143950b3e4207621e409c6312f548e2e
-:00b4d06165b76333b918830adfb801f10316a5
-:00b4e086d5d1d4883675599dde308d71242123
-:00b4f0900739164db53dbb79f9ddf38a2663ac
-:00b50085fc96c2cbdab51e4f3101bbcf39a54a
-:00b5103fab3c3630b5dd44fd819996f1714460
-:00b5203d97b6d8a9d951f328dd64ee67b35b41
-:00b530df090c16ee27794390d3bb1ea4723252
-:00b54080a8b2719cc1dccbc94ebb73488f0c58
-:00b5506401f9572e7e162a0399338f18f6e93f
-:00b56073ee52a5076fc819a8836f825244b807
-:00b5700f60fd23edc433d440c0de94a3ae5d72
-:00b580e755ddd6bd7874d8d65dbee0fc5aa36d
-:00b590a09f1be29bd591d93c1a62e0eaa82ce2
-:00b5a09845f170e640d1b36b7fbecdc00c25b8
-:00b5b0c2b4532427c1ab244ac7ae9a81b5abfd
-:00b5c05fc49e2b7debc7498a0b5d8a8b20eca4
-:00b5d0ae2a1839b3464dd83b7765347e30864c
-:00b5e07cd97b5956847ef9f65ffc5e146aa88a
-:00b5f0c32da6c7cb32207b6adb019b01f7a069
-:00b600433f823c6fdedb2722be25bd0110f7c2
-:00b610fa2a80e81c6fb002c24e4bffeb1f658e
-:00b620151085681f986f0ac1499eafcea36a7b
-:00b6300ba3e17bbf391f5cfab0fe0c1466e538
-:00b640582b359f43db53c166683cf63ba7775e
-:00b650466a8a3c253d4dfed1ed028df33c5429
-:00b660873d5778b28d5802666bb4f597628208
-:00b6702a72f2791989fc8bc5e7732b06f9232b
-:00b6802bb1377af1741a615042e89294107fb5
-:00b6903033a4c469beb0c9bca40bb9d0b58b0f
-:00b6a0e7de2a26a9d7f924dadf4852be03433c
-:00b6b0714b3020ff073dc290a523096f261e31
-:00b6c04fe5d8bec6eb2b3a68a9cabd96538466
-:00b6d0e3c218ceaa53aa8594c0af4610ff0691
-:00b6e00f32dafe56a1d34bbbf5fea237a513df
-:00b6f0021083648c160629ce0ae53ea48d8e36
-:00b7003676e80b1d31b74f2623f6c642959c33
-:00b710a67709dcf1bed1c6264621fa616fe12b
-:00b72060c8c8634de13a404a692c07988293da
-:00b73022dec331fc4ed612fd8a0622735519bb
-:00b7407dfbfac14f787d2c8add4b3a400af626
-:00b75097c6c23b1633ad3e77a26f1afe894d4d
-:00b760a806a9ed4dc448c6f24e8f8fc0de601f
-:00b7704663c7e6848a51f8b330bdc20c3a5c5d
-:00b780bea1e84a13be993744e9b802063c86f5
-:00b7907ccf1c7e17958820a0cb9b2a4e27c948
-:00b7a0932a2c28358ec32b78d2973ebf198b3e
-:00b7b03b4434b88e00403c9a932c4567b67500
-:00b7c08f29e95191eed722339f306c1aca8461
-:00b7d03ea64b33cdfbbc4e02beba3ddeaa8913
-:00b7e0151d1e701694f59ba9ebcd34f8aa55f4
-:00b7f007d970600ad18bf8675c1d25c4fb52de
-:00b8004f5c25bc711d47a0b071c19ad7698fa3
-:00b8107a8085b92201d69c9d9d78ba8c579b4e
-:00b820dbbfaf82af3854eb287ba98546062490
-:00b83082f368838cc6d6859191ff11ea5723da
-:00b840827aa6651c562b2a76b88c69a51b312e
-:00b850370b5bc00866fb550ec31ab61b83e687
-:00b86004fb98b94494e2f8cfe85ae2cbc99829
-:00b8704b79cbbc9352ce8ec7d9d32517d8885e
-:00b88036a8284ccbc89d71ea10dc8189df185f
-:00b890aeb668095a99f3103cb2d33fe0f45acd
-:00b8a06467428e64d44655296a274f83c7f2e6
-:00b8b042319d6f7e365c32d1803017311bcab9
-:00b8c0d16c588585e5ec76690938ada1863113
-:00b8d01197c5493a4ed8713ce170f768d0ea95
-:00b8e00be82ea5dde85b07224ecf33d3dfa3b7
-:00b8f01d3ac3ab99149abc89a644468683ac9c
-:00b9007c710c141c168d0a809ec68521f2c16a
-:00b910f680f9ca89c4dcbb1d6f0bbc47d9f326
-:00b92079bd5b473f5e1ed015a299dab44f883a
-:00b930408a536dd4cc70395330e74e345b12fd
-:00b9400f9f8b8a61c07d9138ad6098c55023d9
-:00b950d5e74fe5d11c999eb9f10986e7bac9f1
-:00b9602d2a5c881f8df4decc4aedebb48cf2d1
-:00b97041eb7d9509e8fa6f34c8e48cc49f0e63
-:00b98083360c6a3ee611abd886ddec465d5909
-:00b990e5fbf7817e38d372c7ee53e5554ba138
-:00b9a0438d9e563aa82f6b2affef81d12960f8
-:00b9b08895c33309bcc184a6fdaa8a1ac72d77
-:00b9c055a3663b1a0cddaa7dfedbc989414222
-:00b9d0e0306cb9f6671d1c62dcd115073db416
-:00b9e0209e269f949ad19f2001c1b1915f7a19
-:00b9f0ab7f487d6d198af21a446e6056492299
-:00ba00b47f1608df6beb827ddfde8a874966bf
-:00ba105a0255825f9b1a51f4b403d60dded621
-:00ba20946390aace53c63ebcf16fc871e09dc4
-:00ba30d61ebacc3e4d4c87920ac6cd38c0f93d
-:00ba4056c87f0fc0119e75e685c3555c41ae44
-:00ba50469845d4306dcb2960afe2ec0ca5f7ac
-:00ba60175a7568efd5f4f3ed23edca7c08780b
-:00ba7096558238fa6a3e8ff1d3f1e2ecaccb98
-:00ba80d355e5aa340aded428a19c60a6bd48e2
-:00ba9052eac207feadb59699c45d87e4e5f064
-:00baa03efebe8eef28c51de02fe1ef7cd2fbc9
-:00bab09cbfc340cf3d3d34b24d112e5a4825b5
-:00bac03751b00081356eb2f022e12091f5334f
-:00bad01e9e3d7a2625608ba7e451cc82e92a33
-:00bae06c0794a0df388dc96ffa98c9dff912ec
-:00baf0e86af0c937b5baee34a62b2b76e51a45
-:00bb00e81c675223c44bb129a51f161391e795
-:00bb106eb6cf239be98fcf71be881c1c621aac
-:00bb205807d3486aa648849b240b1ef6e1f0f8
-:00bb305d08928905650e69ee3e7dccc6e8823d
-:00bb406cfefddd96c6679aaa504e543639c615
-:00bb50f90909bb86edf8dd841fcc3209ea5100
-:00bb604bbf57efca7e86cdcddff74c11ce2e9d
-:00bb70e1eeef071fd9a578936d627b18e7c7d0
-:00bb80479e92c091396303445a167295e59062
-:00bb906cff278a18fad1a5bc69cfb9d7a55af2
-:00bba00b19ebead841990a002d37eb6314cf71
-:00bbb0c248236f3a43e3df3d71eae622064298
-:00bbc08f51fde91bad71f9f7f821b623b6ff70
-:00bbd0d8762bca12e60db08bdd5156cec53f02
-:00bbe02ea7b6511582560ec70e97b0cb1f564c
-:00bbf02f9f932d2a1453955b66d95d6d02baae
-:00bc00e3ca9adbeb6066fcde8709bbf7163692
-:00bc100c0ef463c667bf284e8fb96d8194788f
-:00bc20112fd193803dd1f5176834ea2d9cd94b
-:00bc304208ca28e691bb736eec8f82fbd82ff0
-:00bc40bcf1dd83a696e56597cf87b801f94775
-:00bc50fe79c316acd65b244ab09fcd406d2bed
-:00bc6002e5421ac982b63d0aaeadba8fc4db0f
-:00bc70991e75291d14cce38c93ec7f53ef81ba
-:00bc80d44e523689fd8208668308077d89df28
-:00bc900e8856de15aee618c81eea4b3c0d19bf
-:00bca0cbee4cd6535ea40b9a574efba3401a36
-:00bcb0b8ab61ff7d14e474fe84f34bb54553de
-:00bcc0ad7cd205f9175f4f9c29291dbdec3395
-:00bcd00488a45d9b816948c7f1233cd9b5c364
-:00bce05b2a62679ab06f467f5f48b2176969dc
-:00bcf0da79136616446f85f98366992ccd5e17
-:00bd00345aab41f19d60e2292d746e28ea1741
-:00bd10fc7a4eb91d175d113f04dd972192e533
-:00bd20448e775f97d93cdf6a889c823ee3fee9
-:00bd30b02d62b4c81606ebb01118773147a50a
-:00bd4093b4419b83f8a9e8aa6c5241598d072f
-:00bd50e489e6ca4ce21ab513fc091ac2c5afca
-:00bd606ba3f811d5f14468aaf6b3b27dc5114a
-:00bd70f3b05d62ec9a35903668b6619087e8e5
-:00bd803726806b7db0d307631361d42ccdef0c
-:00bd90ff462179f12652be6372a1bded53aebb
-:00bda0773c77ae35a0d7bfcb9c32fad0d36b0a
-:00bdb0fdc491ffcfbbdbd044abcac6a2e72e9f
-:00bdc01646d0307a32f5eaf9a31d9fd4bc7f5c
-:00bdd0f685cf293d70d0bb76bc4163fee82258
-:00bde0954c05c2afb897ac77e928d6231540f3
-:00bdf09545216e9dbb2c2682bcc78cfd8e9ba6
-:00be000ef5fc08414ccdc57d967eea277d35ad
-:00be101a9bd2588cc6ba5b0c3be4339d15ab97
-:00be203dcc91f6d562bd0473ade0bfd15ed9c3
-:00be306458c8611a172eb5bbb83ee09aaa80c2
-:00be402b2212012545a14b4c5b83d3de342df1
-:00be503475b5aabadcc54d5b8d4f08b8bd3b3f
-:00be60c12eeaf97b5db2e5456531553061dc25
-:00be7019177f72cc38e8580e3d8e03cfaba501
-:00be80aee3a208abe8792d6375246d25a4e0e1
-:00be90197fb0c9c132c1d3534555e59a86de47
-:00bea0310122145faf67d312b26cf95dc84c25
-:00beb04d63f3d571a73340acec1b664f749970
-:00bec02d77b7cb92f96a504a5bd904fef4f66c
-:00bed02fe23dd41da22e3cdd641031fbd35c3b
-:00bee0103b39ed6879a627eb2f1b02b09b9b27
-:00bef06e5326411c1e4b68e47c1a3ecf55e47d
-:00bf00f6a832709db748b90c82983a31f963b6
-:00bf106afb0c0e5243db91aa58b7bf40a7dd78
-:00bf2065a80a9999c7b4307c517055636b375e
-:00bf30db6f4eca866cec4ec3145f9d3c8a25b4
-:00bf403f1c3f56e3d264a70c4311d688e70fe2
-:00bf501a6d180379ef57f952d6a8c89c1bfa99
-:00bf60007e2f0219d5bd3accd77b6afec31a87
-:00bf70144b49a49607ee71e72dcd8d26fac88c
-:00bf8041bcc1bba1da5c17f44f71806094d0f0
-:00bf9030075e898e1f78144039aa87dc93ac43
-:00bfa0237d857418a55c5210cf01afd8e1df82
-:00bfb04d1b05f66f141c6f87fe58a58594e5e4
-:00bfc01bd13bcc71b0c94c118fba73440c9984
-:00bfd0462a51a0ed9b3511018e7086a9ef5658
-:00bfe014a6c4d113d25dfda5bb5b90558f5bf1
-:00bff03b7c836387251b59a7a5ed5a1b7e0361
-:00c000da40fcfbe846fc7103dc971b38eebcd9
-:00c01057d0dec27790393d83bee4fb60a6c4ce
-:00c020a28c28e6be2791255afa2d9b0ac563e7
-:00c0303a8da7a37f595cfc28a0c6126260cd8d
-:00c040ac7301568367bfd8c9daa37d249324dc
-:00c0504f4d176dfe21b49023a3ce93a01d0392
-:00c060dcebead268b61fe8029e6003549dc53c
-:00c07018325d883b12933c2ffb077c3a258762
-:00c080dc8607fdaaeb6ec9da0a60fe3599b9b5
-:00c0906592547ed48a53e2c3d0ae8ead00e077
-:00c0a00480ab4ff7a8f506dfb7480cefb605bc
-:00c0b00ec5e975bbf170b9c69c04026b86e4f2
-:00c0c06d44c0e2255bb440721e53e1cffce32a
-:00c0d06521b666f2cf25f1df939bbd5089cd01
-:00c0e0282c8f91d21479c1ca36e7b124b0e0c9
-:00c0f0321a3b8445f7ef32aceef053f80ccd51
-:00c1000ae41401ccfb84faa900db2b30c6606b
-:00c1100f460ed8d340ddcea03e84d435edcfa0
-:00c1205d91020aea9efc105be7f888ba6ba5ea
-:00c130ce271c37e96705b85bbbdd7d031deb8e
-:00c140a2141e9fe65d7f15462bd69dc9d4ecb9
-:00c1500346531b9bea85afd7a581cbab3d5220
-:00c1606ccae5bd8311bc851edb62f9f589860d
-:00c170a8fa51a6dfef07e5b6da5e4a4a316bb5
-:00c180eb7a009742714d2a47286c5091c6ee93
-:00c190742c3a3030c1f39f739fe0e735a8bfdb
-:00c1a0210b4e98295d220d108009ca41c8077a
-:00c1b0a6cb8c60aa41c39eaadb2e6134d74ac6
-:00c1c0c8f11cda4f6c090aa24a4a496dbe574c
-:00c1d0efc971169d81236c697ea9d14d1db5db
-:00c1e0d0b1ca1b31b5696103f9410c4c05ae07
-:00c1f03844cee9d8fc7084fd0a3a4ec18d749b
-:00c2004dddeed9a5c1120427de69e68a9cc777
-:00c210f961b7a472036fb1580bb5215b7ef47f
-:00c2201d23611aed4c243e13ddf3d4e0ca906b
-:00c2305e489ba8db7924bc03a24eb2c9f92fba
-:00c240a2ff27fdb5d057f16afbc357bced6a55
-:00c2509301024dae5aab403544475dc35f84f0
-:00c260241aa6d7a4ded88e304c02c97ef025fe
-:00c270c56729faa4b1644309a7144effa1078b
-:00c280d6cb3c974ae426c21efd41d720d8fedb
-:00c290c0c7d5143f91d2a86dfe46fea603f1ac
-:00c2a07d85f8f9575c7541c3781a57ef71a4e8
-:00c2b0ecf73e5c5f430e636617a65d62678f9a
-:00c2c03ddc63f35803b62f976b193d13476872
-:00c2d05914e3c15104cd01fa012f02b1394697
-:00c2e00f78e00eede264f967510f8dcde1526d
-:00c2f0e90411929056be1c7195e187338eef0a
-:00c300ef0496ad118f211915fed8d31b5916c0
-:00c31045c5efcbb4519f1f73a05537c7555229
-:00c320d2041f8e61b8a3894d1c9cc542bb169f
-:00c330ed267bfbc87cbe73339b0b3d2b0cdaa6
-:00c34044b3d5cbf9ca6f0e974ca29b93573fa1
-:00c350c24ba2d7ec9be0686c60e8ab754a3d4a
-:00c360c48b37ba3be77b392cc321ead076d76d
-:00c3704a45afcfbf7dc9cd4fb2bc278d24e1d3
-:00c3804ecc01548d3deb7d58429509d2d6f2f9
-:00c390652080cc31c64458e15b51a37fdf64e7
-:00c3a08921fee7b65cd8533e15d8ecbaaae9d2
-:00c3b00de2f8c6f833a44cf9080530fb3ba6b4
-:00c3c0f17d55a239527512687087cb62bedeb0
-:00c3d0f988547b99bab8ee35447780d183a7ac
-:00c3e080802cf0705239813f9cc2d0325feb3e
-:00c3f0b96c328c6f60ee558e5052ac04a53457
-:00c400df7b59d23e3ebc1594e94fe1a4f9cb90
-:00c4103bf2af9679e8e25715d56ea0ea707823
-:00c420f1ec54cd263087d4524575e0101be59f
-:00c43072e49e183e325af166cdc964cfca11bd
-:00c440967e55cf094de4a34131bd673b96305e
-:00c45004b6ef2663cb14a5cf4d6c569015d66e
-:00c4600e7e93896d71a81565f30058d9552d94
-:00c470dcb900802aaab786b7643b2c8268c55d
-:00c48004ce75f31ce1822be279d6d7ba9a92b3
-:00c490d866d8b6a9aa52c19b902ee3876f1f88
-:00c4a0975b1b6c0406e4884375a70c5f0f6771
-:00c4b0306556a76b8b6430a9ef2a645e260e8f
-:00c4c02696cc5237d4146bbf12e5925c0a404a
-:00c4d07d7f1c1e5fcbc33b599f3061e358771b
-:00c4e03f1f26af4f3d071ed97160cbf2cd6212
-:00c4f0ca0add37b102d5df85ba03f757e5e3bb
-:00c50024b52e0e07ac70cab9fd9617e856db8f
-:00c51049e12ab5596c286214fd4ea60a6444bd
-:00c520af5167bc3b142518bde944c5d36c9545
-:00c5308257637547bbca3b1a285192142b1b56
-:00c54081c36bb5a0861fbad056e3b9a4307a5a
-:00c5508f4d14f963e8ade4da18af89cdd102c8
-:00c5601db1a142a167fbf66c1d441ab0fc3f43
-:00c57026af960b7574e8862829e80701d3e694
-:00c5800d12ea7ec28649accf371f11a5f50f82
-:00c590ed41754fe6bf73b0e5e036e15402efb3
-:00c5a098678901fcdfaed903fcee5998441d61
-:00c5b015a599b94e6cba0aa7fbab72ca883929
-:00c5c0e5964be82501709144213470d38b25fc
-:00c5d047900bec1a3cdbe60a0b3f524f60b042
-:00c5e0b6370799f86b383612df252faaa303e2
-:00c5f002a8f30a4e56ba88e21081e5a821c448
-:00c600791ee0d42e5a77f8655d35f2fc0539ee
-:00c61018274f65fe77e0ef364e9b4289a35eac
-:00c6202a51385b061c849c4bd48a9572e2dc53
-:00c63005943a52a95a4a8a69cf3ad9fee6c1a3
-:00c6408b688240096f4cc502f77f4310d4bdf9
-:00c65050c2de0544707fd6b24e7f43545ae34d
-:00c6607a91d1d9e5fbabd532f187708820f325
-:00c67073c4b91acbe32a4297b4d3044abd14d4
-:00c680a2a4c8a8744376c43057d5472dea0d3a
-:00c6903122a907432008acfc38f2a54cecb3a9
-:00c6a0ffec805b6782d1881a95dca58bd16604
-:00c6b09b7c10e58bb009ff952d82ba55ec4cc6
-:00c6c0dafabef2cae0bc9d6f3f5272e295bb73
-:00c6d064ab9768e3b87e3b75a592b441efba44
-:00c6e097c6a8607dca9d77906154e90e5e0340
-:00c6f0d726211e679f5ff6829286bc66c88e44
-:00c7008b32de3c8a2d9b4e3ae27b9aacd52e61
-:00c710ad27183e8ac04d49ddc1d0eb78ed6bbc
-:00c7203fbf94af32883a6411f21f73719d9d25
-:00c7301c3250ba08be82b3e240c8dbe6a445af
-:00c740ea28ff48698dcbdff8516d33a406406e
-:00c7508f352d57fada2b75371d0792b578082a
-:00c7603ff942eccb9b274df26825e174357406
-:00c770714b905c82b01a646f6ac0862bf4b761
-:00c7804281cbbc75de48226a7e48c737cd0676
-:00c7909199f1a7464aaecca5fdea597cd4395e
-:00c7a0a742df5434eb58b87196989b1156b9ca
-:00c7b0739d4e4301cc5186e9ef78da498aa5a1
-:00c7c09a407cb94b6e26a41c93a75e69a3c2f7
-:00c7d003bb343fef5e1f011f6b8fd665665656
-:00c7e0c94d0e9868254b83960f35f0df36bacd
-:00c7f054717ac733c8271578683c661444fee9
-:00c800ee049450db19405a9c39020a12ef7de3
-:00c8101e339bb0147ecf4eb822e7f04d61bef7
-:00c8203862a0dc36773458b5632769c7033fce
-:00c8307a7451154f2e4f7cfa29ef7ceefe5d56
-:00c840396f083557a880823ebe856976b6917f
-:00c850f556a56999d7a73eafd2a65ba86235f4
-:00c8602595cd990b2b3708e873d6fe6825eb42
-:00c8701c2dec13ddbc2763327eef885eb63f1b
-:00c88098d35382aabdf253f20de7ef23e76089
-:00c890b324e8cd9bee783aa2ff2175cda2b170
-:00c8a0779ce451a57a6e972633e171cdaa6a9e
-:00c8b056b8f53d8bebb19e0483274517583b13
-:00c8c09e67f1af3e78da4fb7b3d8d65d23338f
-:00c8d0d21864af40532e377bfd2ebde11a7e98
-:00c8e05bc6f692b44dddd6d91ab3504078d408
-:00c8f07e14b44fa08346371dd2266181fa281c
-:00c900aeb4922a0f14bd872949e040d15396c1
-:00c9108686234524e20c4e9d9e377866d2fb85
-:00c92070d9d9387745b06a6bce4e4573d089ca
-:00c9302d53c96defa5520e724e0dbd887b7bf5
-:00c94078468dc274dbcabb0d2fd666debb0a0c
-:00c950e0b17379a7c92ea7c0305cbd4957e715
-:00c960f6c29b28fa415aa45fdabd56adba7521
-:00c970dd96b67b312c50a79f382cee3538a9ac
-:00c9800f2a5b2046fbe3d2a176c9b601bed2c4
-:00c99086f6a87522b8fe64006ed23845cf4fcc
-:00c9a0db59252e14d9bee82e7e6a9582ff498f
-:00c9b0f684f5e0f59e0b0353b2df84f37450d3
-:00c9c0b3faf023c7e97ffb6016d4a7038b0281
-:00c9d0f29c3f893626fb627084582041858380
-:00c9e0495a1d9d6f1608bd705e9d3f5cde2977
-:00c9f07abdc5e65a716313b6cc50443bbff84c
-:00ca0050073d40f17f781ba4732b925f2792c0
-:00ca10bd56f04ab01fbc8d945155cb8976ae28
-:00ca208b8dc811fba418bb93e26dd31d07b0d8
-:00ca30cdbc32078a6219d47335e0cdcd826168
-:00ca403efe01be07e45fd0ed66396b308ebee4
-:00ca50959959f2c6cc069c754c95f51b8969f0
-:00ca60bdbee924485c9f7b7961a2984028224b
-:00ca700ff9703a565bf0a21d814866f39dc605
-:00ca803bf9a77de7dd22be6e9eab438c2ae739
-:00ca906a97f5f3f21a46e8a15847676d2e6515
-:00caa07795074051ff8694deb3959fa77dcd62
-:00cab0d4993c15b30ac983a3d8ec303bd7eab1
-:00cac0ed310d83bef47f9f6180b22ccd8bc43d
-:00cad05b4105114eab7c14ee4a986e83954956
-:00cae0da69a36949987b4ebc87f941484c6ba1
-:00caf0c82e97acd5ab765a23ba265e6cb1a7ff
-:00cb00cc9fe6980b36b1f10aea6b08a672cd95
-:00cb10345e7ed193a48ef8878e6f3524c1d847
-:00cb209217423d557a09aa94af62fdd8e10f7d
-:00cb30ce1acfe096f29f5ffc74c2168fb11ca0
-:00cb4010b49a52765290f1fdd455eaaa38aa27
-:00cb50a44d48e66298dafa8e3cd479126fa099
-:00cb60f7f8d69b3df1930c4d7b53aa80a280ec
-:00cb70792845515b92eb67aae183687e6ca5ed
-:00cb80d901fcaf95f2d4105a3f114910123dd5
-:00cb906efa90e03271e1cf7c5f0b6b1c763f32
-:00cba07e59ed7190f572e33ecc65e91f9a28da
-:00cbb08a7359505ebc5f2bbff94dc6d68df46c
-:00cbc0213a69010d24d728ae38725842c21621
-:00cbd0ec1fe4fe4745a2a92ac5d0144cac0c4b
-:00cbe01f0254f8f860ccb19a959673d2b85ba4
-:00cbf03740676b2370c7cb605fc1e0e7f33aaf
-:00cc00eba18ac55c28b04114ccfe9fab17467e
-:00cc10ea2d1912ab8e66f27e6c69c08dc49368
-:00cc2035142cff1eac1318c67e1dd70ff02591
-:00cc30ee298d8a402f317b0b2671cf4ca08265
-:00cc404157ae238de11d7c39635c3fc15b3b0e
-:00cc50ef9a0d3495ca6c73111a77e68680ec1a
-:00cc600b1c29fa51e0fbd0385336443cf2f04b
-:00cc705802a7e88eb10861af2753b185ccf749
-:00cc80fa69fb1734cf4ff734d1cc6f2dcc1180
-:00cc9025555b3c77aecee9615d69c8fa03ff35
-:00cca008add9d92e54a6c229346c8283ac9bbf
-:00ccb0b0808d6d7e304c021748eeb7d2b2429d
-:00ccc0877c8e5b14db7a90eb48829d2a038305
-:00ccd0056b9d6dd807e7a359803d481f54887e
-:00cce08cf140053cd14a542d88f2eaa0ce9e93
-:00ccf0dd924f3c665df6d6bb419fe2d80faee6
-:00cd00d8e31ef60ac9db54387d7d7edfebb5de
-:00cd105e9aa54dc96140576a31114893a386fc
-:00cd20d4ab0984d0f82f3e1a2884a53ac55eeb
-:00cd309574943927510fced54be8646188295e
-:00cd40095f1dd0829550603b080db1a307f6ed
-:00cd50ef2b361c56d557e87794cc7b5d2c7173
-:00cd601d8a2d76c01a8f623cee85c05d721878
-:00cd70091a0e2ff56fa37c2255805ca89c4908
-:00cd80dcf1108a223b288804b341cfc5222cff
-:00cd90c9a1a2a543e2ab7fbd014de0707031b6
-:00cda0bb28d7517fec986abd9b41264682efdf
-:00cdb0f43731558a696d3de808292df9775027
-:00cdc0069cd2f3b18ac1654baff1d5b4b86e08
-:00cdd0820f71a1bcbeed077a8d93bc32a98e63
-:00cde005024244f675f287934a322effc41cfc
-:00cdf0269bcd7cb0b18c9afaf3bf897bebf8e7
-:00ce008ef8d2f8b9b725164c1c3a6d1fc28696
-:00ce103e39a34f4fd3ac4a01420b1aabaf3f95
-:00ce20f977fda0c8e40085b625c018e218660b
-:00ce3025c573542f661db61f8a680fbe96b016
-:00ce40e2c73b05b59eaf1e2e2369d3aa74d3f5
-:00ce50a83e9560c683af7a87942c5acceb05b1
-:00ce60f6f439f4f6f83e6da837c223ec60af1b
-:00ce7076a1403c8edb9df47304367b4fac9ed7
-:00ce8009cd4c237d54c7f083aeeb75a884bba5
-:00ce908562df1757462e6d5e3c61235b7466b0
-:00cea005fa41691acede45b786261d78ac8406
-:00ceb0ae1a3b3a213133d471db263ffca29880
-:00cec057492e71c0c917fe7a7c7de16e9a93bf
-:00ced0366400670d7048b951cec673ed6446e0
-:00cee036cb0fcab75d077f0e6476a4b7a4f9bc
-:00cef0c0f2d4404c2ea8f56ad8bf432547678f
-:00cf007f48cad0e937342768b543b71c3ec88a
-:00cf10b30cba780f9f26e078298f70da091f70
-:00cf2046f5e78c33aae7adcbf06079e8c4781f
-:00cf3039dbe89a42fc734aba2b2acfd169c3dd
-:00cf40304f2a3ae30e3045290119489edcff1e
-:00cf502cadfe8a307e86b202734df0b75155d3
-:00cf600e609523cdc970151afb21d59b068abd
-:00cf70987936f7643500972584086df310e5fb
-:00cf80bfdb82a7ef37cdb64e60e00e21cc0833
-:00cf9084d40e922ab44868d94fe521d809b678
-:00cfa0a616b91f903085d075dd944f24fb5cdd
-:00cfb0ccbda5234921f70b115ced2e166fa769
-:00cfc02a9d295c971cacd87bf603136702cfb5
-:00cfd000bfda5ec58ad9f80a3c92a7f6274bec
-:00cfe0d393423b5249c958aa36bba3bb6095b4
-:00cff06ed2aba91773056c9151a5451c08306e
-:00d000ab8b98598ae2bd2bf7c28ec79b9767d7
-:00d0103251db646eda92fe01bf0dadc531a1b3
-:00d020a1af8d8e089210b58eab8a28d61d05bf
-:00d03021b6051c146876e91f055d1a006b8425
-:00d0403c3b2c45c137561d5983da6555dd80bd
-:00d0509d8b5b42ac501c7a4930967b7298efd6
-:00d0600c77ef5fae5a825e0ebf62f7206fd7f6
-:00d0702f738b2c6bb365d39ef36e7d7117a175
-:00d08017a704e4ed7fa90112629ee2b047826f
-:00d090ff2d2b590c5f8b84560eea37728fc228
-:00d0a05980b76600a8cd162d51aa7ca087a49c
-:00d0b0eb49df8cb15555148090e5be58962390
-:00d0c0d3d62c8860241ba1d25144a2349b7a7e
-:00d0d0f610559b1000d70cf12bcc776a8d6989
-:00d0e043ef986d2f3c508eac0ce605bfc82d44
-:00d0f05aaea75e1a30aa97f43532917f9539c1
-:00d100b0227ee7f1e0d57c1be8911c98a04dce
-:00d11071a09bb78e7ccf474fb472dffdd7e15c
-:00d1203003655faf952268194e871e17f952e8
-:00d13019eb5f79d93d21f3ff5cda85a095cbae
-:00d140c8e809cafa23545118f61d8f67d7588b
-:00d150a77221fd3f77e242ce3fd4b856f4ce1e
-:00d160264f2ab65a9ed44bd1961a6b5c1a5bfc
-:00d170cb827313b7a76204078a946590df4ae7
-:00d180dd289635df771a5dc9cfbce34fac7283
-:00d190eeaed94133e8818381d85ae346f19d3c
-:00d1a0d2923b831b0b7048fe72a398b4f01e45
-:00d1b0d1bb7c1516592d6738944f86ad45e28e
-:00d1c0a41e093ba1160b6a1b065d210d4c946b
-:00d1d03a31e3fa4fe04c4d2acfabf858ff5f50
-:00d1e04af8a4ec27575230b72d02c3dd77faf5
-:00d1f0d19877c042e304aa56b82e4a97fdcb88
-:00d200704aa1f83921f2afe5f50ecbf64b1599
-:00d21048aab36864c4ebc12428fb8b69620bbe
-:00d2202924f84cd85ecef4950c8bab3a9feb9a
-:00d2304ecc2369a7e1a3441b4a04836e2a4a2d
-:00d2409a0f04adcaa7c322933581248d23c033
-:00d250bb2d27db33beb02b6bfc43d989833fbd
-:00d260d81b0ee6ecf78713d55bf02b91653c58
-:00d270f3757eac8a98e06c94680069232afb14
-:00d28046425efdde8f0484699d54b13183809d
-:00d290fe278abc0773fb18aeeecd79a0b82fbe
-:00d2a0c0115729aa22b81e03b0cd1f47f90644
-:00d2b0b8f12e4031939b58ec2f61d51ace7f9e
-:00d2c0669e596b3ab1b2b10391a08cb2ac3286
-:00d2d089c5d58b9769595578e78abcc40acc99
-:00d2e02ed34696cbd32c1397e86dee4f3182d2
-:00d2f096fbebc3aec8808d8e2b51be4718abfe
-:00d300ee3768775cd3fb1450afa71fddb16992
-:00d310853ec16b09970d12c10a318942a02924
-:00d32060556255d8872e28b41723847ecece97
-:00d330c9fa017c0e9204167e8a1f466d13fb22
-:00d340351dcb5064a1b9c8d816b97daa02f324
-:00d350638f0280679f9f76052b3b72b2850031
-:00d3602dcd4f5b50ac97a20af8f7f07ef597df
-:00d370a41a2a0cbdefd43a5f2766517281201e
-:00d380d27c793daa087f5b6a5db1fa25e1dc8c
-:00d390f6e796a6b80a194ded7880fc064f3de2
-:00d3a053f0cf910c8aed67e54c2cefc9a6e573
-:00d3b0077a441d24ad8e56e1610a4cb3297109
-:00d3c02a20f23b8a7a2e91f957ff9fcb1553c4
-:00d3d056650c1d626db291e6ae269439bc5a61
-:00d3e0f43ce12b880596170bf5ea0c70225889
-:00d3f02221cc07629f9a03adf8f633f3b0a284
-:00d4005e57d2b4a1de137ccce0ba871e846145
-:00d4107c2bde7e4ae6ef9d60e05b8b3e92f7e5
-:00d42012e5b5ff052b68179a80f78fa710ced3
-:00d4307092ecdc42e33e45596e98b61abe3a3c
-:00d44011c1bae08a3d40b472cf4a46e291f750
-:00d450d3d25dfc5851da88e2cc55fb1c28d274
-:00d46062b3f6503fcd5ae1171a5b59c88da498
-:00d4702d548f7f2c0bbd60f0365f011eade1ed
-:00d48022f98e96c7b966250778ed7426032920
-:00d4908146e88d1feccc237b9db5f12372222f
-:00d4a00490fc71d6d2e8554f7c5b5ebdb359f6
-:00d4b0b8447c251ba8a99e1ec85050242f9dec
-:00d4c015353cb45ca188fc46c9e37166cc0a8d
-:00d4d0aa49052639be0b3b14203b7a69468c00
-:00d4e0ab496f30d4bee77a71a676eb45fcce04
-:00d4f0dd68884773cc42bfe2f984498eee15e2
-:00d500ffdfde4eaa9b209902a07a88104bc117
-:00d5109630dfc35ffd26f23c9f2a80a8146edb
-:00d52023317da94df747e8c60824b706a4346b
-:00d5304b5bccff673cbf43710eebe7522dae9b
-:00d5404e64bf65f1fa9c5b82453e3160080a19
-:00d55076649d3c37403f2d6504c30e0e89d646
-:00d560d21f9e207c561941108069694e52a4e8
-:00d570466a329c9b3541322ec642ff2a1f093a
-:00d58004a8eb81fd0b85d0eb2b9234a14ddf3e
-:00d59019eedc964fa72bc5660485f0586e4195
-:00d5a04b011e8933a4993b46df8c773590588f
-:00d5b0673c97af537bff143ebe00c70d500796
-:00d5c09947987af22bc2cc92f15d148b49e079
-:00d5d01edbaabd7473163adcc9f884ab53e2f8
-:00d5e02fa5b6b49b2acfdbc99cf78966785933
-:00d5f025de0da5455e1c0428914b9efb55ff1c
-:00d6006090e07d019266fe1f197de4f51e99d0
-:00d610a5c0e1126237620a204014c68302c738
-:00d620e93a2dcd227f01c8badde5fe1c3143e5
-:00d630f4d0f1e6d6bc7d8f068bc22c6935d81b
-:00d640a6959ee166dbc59efe55d25f3234d36d
-:00d650ee1d51f6fe7db42092a1b7bddce4e0cc
-:00d6600e3d2b9a88f24ad750ed4e4f917aa7df
-:00d670bd8f2d7f54b6c91f2621bdb36320c9d8
-:00d680a07af6c69af46b82050f9577d362edb0
-:00d690c9232a020be15900d44a5ed7d7fdfe94
-:00d6a061dbeef34548ec8fae65b29b79f09690
-:00d6b09c555253345b833fe0c87179cee5865d
-:00d6c0599b9473c53248114fbcadc9e994bde6
-:00d6d0e4b9deceef57fd73782dd78215ae2613
-:00d6e00efba8d7ea41b6e3d209c472ac4a2a7f
-:00d6f05594fcd83d84b468dedf78f17aeffc36
-:00d700fa8c2718231bfd24240a3074e2d42937
-:00d710f47e6c3426eb46b6b7c48a8361f16c88
-:00d7209da2dd5a0eb7e9bc90e9ab228dd6ef89
-:00d730305f17b9b13f0d830ae15cbab69b5a3e
-:00d740e9f142ee083f1a9bc549a1f79bca8798
-:00d750924738fd66ee30721182a1a8401bf6b7
-:00d760ecaa714685c8d198adc22642dd777688
-:00d77097053bc0c4b54fceb03df8a43acaed91
-:00d780bf7850d030e44c02afea9a470b72a1ea
-:00d790b1d4e67745abe86c5e0e197bc6561cf5
-:00d7a00232a933c9cd221d24b70cbedb193217
-:00d7b00966b6ce55fdf24bc93567bc06f68483
-:00d7c0e1aad3f8b1aff1fb4663e64aee5645da
-:00d7d07fe32147ef51ad936403956dc5398d17
-:00d7e0e1d2588692dca88d540c04cace08226c
-:00d7f0b37785d421606b0594e5bbde46010ff4
-:00d800c9a9c8a3c72965137c3710f2fd3bdec3
-:00d81027c4f823477ddd7a082492bcbac3a63c
-:00d820b82a1dd7dc41578ed64fb671fc4ebf85
-:00d8307d89b1fdc0af1257a2fada76789ea218
-:00d8407dbb14083cfdbba8b96edc09dea1da11
-:00d8502facac3d04009b3c2b2e176ccc65c2f5
-:00d860520115c855fe0ac868d80edd0313efbb
-:00d870ff0aabe38a941525eee52f837fb7ba48
-:00d880adbdfcb67ba5ed630fcea0f9fceb90f5
-:00d890a5d7aab22fe591a9b15b156b504f5449
-:00d8a0ab7e09fe08087dc380ca6cbc4e3dfcd9
-:00d8b022aefb3da67a97e6d22d04393801b60a
-:00d8c0188fb7cce18d74509cbf6ba8570d51bc
-:00d8d05bbb4df01a903784b69045f41659d60a
-:00d8e085144652757457b619e02b9fb7979a05
-:00d8f0e0999870fe4bacad5c5886ad317c6c51
-:00d9000aa0abb387588ed8405ff342d02c424b
-:00d9103c40c95d7eb2de980a172a1ab6ff82d1
-:00d92088d1d28a15b1be1b1b1a3c95e13c7baa
-:00d93024d022ab7f38fbe4664b5e90726dddbb
-:00d940a572327212af3782c07e1e231e3283e4
-:00d950db1cb3a27614621c523bd2d128c0fc84
-:00d960dea07707b8944e29f20b2e9aba3c81f4
-:00d970a9b4386db3343deded2e33655f978401
-:00d98012e10cbfac7dfd7fcbbef91151a28a4c
-:00d990f0869c52fa757c4f36d7d5316611d280
-:00d9a0c7b484b7bf5a4f1b9a6e5a074978abaa
-:00d9b066713883a7d7a6cc59e452112b648288
-:00d9c0592ea216e8a9d67503a63e2ed4be5167
-:00d9d066e233bccefec582fa11631285dca030
-:00d9e066f46fb2178f4faa3235e4b6f98ee196
-:00d9f0e1828e33586493fdcc028b8f60da0cf9
-:00da00a441d114ee07763c48a8dec111d6c442
-:00da107bb87824bb66cd7d4f7c6c7fad99eeb5
-:00da20eaede12c57893e23b8da4a2ac42b1436
-:00da30fdcc588838dc0be07a80503687836f5b
-:00da408c858c457dcdfa16591c28d0176a2904
-:00da50bbe0aaaaa31b721e03cfa466af7e1474
-:00da6047f84c5e2fa5659628500af8e664088c
-:00da70fece5ede0e0a1e5b730cecbae969347e
-:00da80fe07ae68aae35919a9f3876fa7c96a2b
-:00da902aa5537372c8670d43fa0deb8759734b
-:00daa0ac637d55a2bdedf951b578b6594116b8
-:00dab0437995a16edaec58f027166b7b14602f
-:00dac0101fc22f817eedc461493bcaf344ba3c
-:00dad0992d72c61b688fa20f26aca7746866f1
-:00dae0918c80d0442f35a6d66dfca254167c9d
-:00daf06abcee1c01e0fbedc8bf4a22031a2c6b
-:00db00eaa95394fec7a87795533b816df6483e
-:00db10e4afa16bf9563e6790740d8d7f51faf4
-:00db206f104ad2fb2e41dedfad9ad48b8b5dca
-:00db30904246bf5a5a89fc978a02245eaae623
-:00db4051dc4aaa183d0a0764b06aa72673c04a
-:00db50e180cb6ade28c514281283708cbdb20c
-:00db6052612b19419b2527687496c4336c946a
-:00db70fefe12cc571711da5a775ac6fd43b071
-:00db80423dd4f7429fae2a3e31ed11953c880a
-:00db90e178100d9dfa7090bdb5a425669280b2
-:00dba0fce4278f99fce4a5abca3c366503522c
-:00dbb006118a1aa4e7a2422658408a615f2a64
-:00dbc0d46e7f542b8d8acf539b810038cb5f8e
-:00dbd08ca482247fdeb71ca0173aab0ed30e35
-:00dbe097ce591f25d8dd35218589ffed9dee3a
-:00dbf0b621d8640e287637948338c77436d8cf
-:00dc00505fb03b499732e672a93f31c0aacfd0
-:00dc10688fd68cb65ed0f54bad3735ce598bdc
-:00dc2045a84c3630a0887f123e920300253fc1
-:00dc303b3c60f6ce38690fe8a38a1a402bb8cf
-:00dc40bf33d2ed4d1b313e39a3c222e4f6a4a3
-:00dc50faacc97537595012d98b8e94ad627457
-:00dc60ce24ec914b37da6a636e85d6bb236c24
-:00dc701fb7ece50061b32fdefc310541304075
-:00dc80e24f24fb88cc02b4a41a52b986b315e7
-:00dc90ce1f05af2310245978807db2e06ad545
-:00dca0f78be9280f921a75e462bb07d8248d94
-:00dcb054efd94445edf1433c60b2db3923abc1
-:00dcc09c129ac26d5ab5c4e271d8864134c5aa
-:00dcd042fccf9dd2cca9795682ed3b55d5f89f
-:00dce037ff27cf58919d8adedfed1847e1d01d
-:00dcf04fcedaa20538ca4aba34996eb65bc9a8
-:00dd0007376bcda25558a32b8eff1f70b82277
-:00dd10b1eba047a5727a58a5a893e2068719a0
-:00dd208f1cec4fb439c5af79ba26eeeecefbdf
-:00dd3099d2c73d6010fad18a33479e45d5c535
-:00dd4016c65197cffb8f916cca49c122a6fb3b
-:00dd507af7d39062290b29f836c1ca9919d9f8
-:00dd60092f62d1dc14f804235cc24d8dd96947
-:00dd703a1149e493020bd04a2da1263ec0ba2d
-:00dd80e58d5a51bf2d0810638fb721b460fa17
-:00dd90f3aa52499e9181b9aa87379aff71bf01
-:00dda0fc7d6bb902e28a91390f9f03bf4b5c9d
-:00ddb04b6f9f2074da3e12771323d2e17a25e7
-:00ddc0b09acfaf642001094d839bca85f052d3
-:00ddd0bdddd3e848fc3e5f8993904dee846654
-:00dde086eaaebfab5ebf5ddfd9e79fbc24f4df
-:00ddf0b04d04efddfae269d97d2f42f3131209
-:00de0036fd927f037fd48e951a2064a278406e
-:00de101668f92b0a4183091b9640e9bb4bd4c6
-:00de2042a9399c4ead7752f2bed0b6f3c679c7
-:00de3030323cdf0fc565884ac85e40ffeb1971
-:00de409c3d1011154ba52a15d127ed5b601645
-:00de5095408941a0f9171ed7102bf069b5f4a3
-:00de6008d08c5ac10df738fd84ba49a5f0f86f
-:00de70e67f0b6dd80ef1d7fb10b9850f91bbd4
-:00de80e721c907888258a7ac173bd3c44a43eb
-:00de90dff78a1978eb9119828861d3b181d510
-:00dea02d4ec2819d4e31fbd51a8c6b6eb8e304
-:00deb07d73ab260850b40405ba257762c91641
-:00dec028907c8dd4d98dc624300df48ffc6d95
-:00ded040b23e7384e487e321325c016519acf7
-:00dee0e5dfb874779deae42c40013dfa3a44b2
-:00def000189aa5aeefb0eee0b2bd3449e45c07
-:00df00df722082058c38d40278206af6b8617c
-:00df10cf0aa621103ff905d6a449bab0459128
-:00df20ad1aacd4790e81a8c12b2e57dc8d9729
-:00df308ec3e26c5b22dd6794c3903ea774cbbe
-:00df407bce5f4b9e44da6a2f01adae1544d3a0
-:00df500dc54a1b5719155cd79e9a76f1ac5d20
-:00df6048f948eecf7e8c21611061acd77d5e16
-:00df70dcb763f57c3f53339a45aa5963232baa
-:00df80056ca21f0b9c654de0d336f38656d549
-:00df905d47b35bec9cfd9cd2f00409f346da19
-:00dfa0a03e33cb6a65f42078893975a747e022
-:00dfb055ed56a9ea5db04a8c5d8994501835e7
-:00dfc0cdf388e1fad2e71cc614b8d7c105a094
-:00dfd0014e8b8ce005ffe7a1d6a2672603ccd1
-:00dfe0ab379bd66e5279b198fd1bf7ae35c6a3
-:00dff03cb990dc1fdaff53ae2aa1dfd213a19f
-:00e00027a2460f16c81229e547294109a18999
-:00e010c89ae134217de525eab95d20096afc6a
-:00e02084e74901ae6bcac000931900e07cbda9
-:00e030e89586fbc46eb0f25db4d167a38bbd09
-:00e040d5b13cc9d0c34a469a9dde6104297dec
-:00e0502ff991d60df44a577636cccc30439b86
-:00e060124be26bf067752097391ca005ddc168
-:00e070fa2827941c5fb4b01857a16e9c5039d5
-:00e080a4a13b618335127c7c58ec4d293f2d08
-:00e090c0db811eae8cda495eb3dd14e644acbc
-:00e0a0d2a122501a9575f48b3b62c4fe726f4f
-:00e0b0903dcdc4b64922b5006616d7c0c0cb4e
-:00e0c03afaafda13a6197556a9b38a17c35583
-:00e0d05bbc2034eced5102ee23dc1ab0bd760d
-:00e0e02f5d62c1cbd24f48078050a49058bbe8
-:00e0f00bce258440e7bade115ea334e11c4441
-:00e100621cf904a7ae41157a3f870fa9041afc
-:00e110c8dcc4a3b5895988896f32f4a1c883e3
-:00e12053ca82943807c6da8cd6d3083102d8a4
-:00e130f8d9916c08b87e95cd862424576274f3
-:00e140230d0d46b2392b2bf317d45e52d679e5
-:00e1502190138146a36b3541ac00e02fea7767
-:00e1601e7572f8070a9d1ef4a2cdac584008fc
-:00e170a87820949e5af970994f79ce830310a9
-:00e180f6c21de2665cf9255fd915c5c337fa38
-:00e1905bf41e0459e0d02cc2652f7e906eebfa
-:00e1a0cbc281b02735479b8ad1311888f96a7b
-:00e1b05856e3398d9f92f4a4d3f4a57693aa67
-:00e1c052586c7d46b0c793924d488e27ffbce0
-:00e1d0463bb0f0fc29242e7cdb73e208d1529b
-:00e1e0343b65f3848d5d1ed94211d262a1f579
-:00e1f063069f8a52983fff0e22f12e0a3fb023
-:00e20052248606b63be7bca9d4bbfda46609bc
-:00e210e957601ada3c9a3d0d36576600bd8bfc
-:00e220507500c3732a859c6dc160d00672b4bf
-:00e2304a6d46bbe401d1a253c924bcfa3321ce
-:00e240b0add4224c6fe420a42df903fb294352
-:00e250a7f0f943d2221fbac5f11a5b9d367a7e
-:00e26082f35bf1c2361ee69ecd094d18c5293d
-:00e270ce3e3cfb639be07d87ca55e52c477ce4
-:00e2800a7018e24562f25494c14f978c8cfdf9
-:00e2904e2bf0c68df030e5b35a3a0431c93c88
-:00e2a0cdfabd76251880d94870af9a2b1dad75
-:00e2b034000b209a7718b64fdcd287b8922568
-:00e2c00ef21bb4898f9b01a4083f4e4faf73a2
-:00e2d01efc84bc2e2819d63722ec2685a3cf44
-:00e2e01326107ffb4a17620b714ad2f2df29bc
-:00e2f0ca2f702284f2b37ebc4be73bc9fd826b
-:00e300146d0330be1e5e054de8cbb4fd1b9e6a
-:00e3108a9c9254d9c3bb6d7b9ea80b44febc93
-:00e320c09f9cf9a18715edf8c3276d545ac29b
-:00e330cf471139da20ed207a6823bfee7c9199
-:00e340a3ce096f3fd9635660ac8641e2f0e0c8
-:00e350e0af2107d719a9a879b70bd576adde33
-:00e360a812a6e270dbc104ed1ed343b7eac756
-:00e370b8a9c5f22a21a79be504a7e912a93e69
-:00e380ca395d43bdc0202ba1b7750e592ec9d6
-:00e39008067df756066b26441a0ed202b58e13
-:00e3a0ca47db518bccabd60283bdea5bd6d3e6
-:00e3b0cd79e0369f2d5d7b6a3f7f11ff3e917c
-:00e3c05e40249de808d48aac3077456151b213
-:00e3d07c585b4d323222c590b809b0e24fd954
-:00e3e085f444951c3eda486301b14ea292f345
-:00e3f0a0dda98117a15b15b5b7356520979f3c
-:00e40065700ff65a13d7f14c7ad9754a596722
-:00e41044a054901b6e9cf3474951f0a6eb1187
-:00e4208ded5bfd6261c4903c6dddc41d21238f
-:00e4308c660f00b5562ed6ed2c88df06c75cec
-:00e440bc04ea092905550424efc933ee5faea8
-:00e450f5f4b581f5a8ce0937ab93f57f98c1d5
-:00e460bef23a15750fe8f093342538c0a92ba9
-:00e4701d66bd8d2e3b5688e748592e9e59b87b
-:00e480a42863ff9afaa843807d3789394bfb04
-:00e49067c687bcc1a65d50dda23aaa64593926
-:00e4a0ec39bd876c1142ba3cf063d84bb55b5e
-:00e4b08a047abd68df652d0efe2cc32cfef6bb
-:00e4c0444c17e498e3d123f390a60b6c419542
-:00e4d0465e29b6dcfe07999e6c030bf968201e
-:00e4e01132780257278578f51844588293acb1
-:00e4f015b183b49d5fbe23f71bb4542ea4a535
-:00e500b15b13cf2adbf77eea9ae2d4373744fc
-:00e51017ffc1add12e29a5100905b2f41d5eb0
-:00e5207c835fce590be847268c5a32eb60a393
-:00e530a50aacd3972d7f87508969f81fd6dc18
-:00e5402e151471aeb350312232eb92666cb74d
-:00e5509e7f7fdcbd794fa088522b12b55b4983
-:00e560598b715590be0d28c59ab0452815d885
-:00e5708500562b35d4514b171c294e797d41d3
-:00e5803d6cd7cb3cd71e26f4ef3adc417cc25c
-:00e590c8a1804b5561c7a4afeb0f2aeb3b3339
-:00e5a03ecf4e87239be66f2e905dda13a8d85a
-:00e5b0a3cb6ba655ab4de86d04761929097e29
-:00e5c02aa3d22bbf41c77a2babf2e2a19ed2d2
-:00e5d07ceb4915b6a3eeb465275878e6c65181
-:00e5e0763a8bb3738dc16738151196f144de5a
-:00e5f0e10f0f9f683abafbe107883dc72ad926
-:00e600745d471260057f22fe11c2b51843b725
-:00e610946ee7db46b012b2484bc75686c2ddfb
-:00e620c15db3a0fce6d46829b66fc04ffd8b24
-:00e6306dd94a8a1d6ff0eee75d087df88b7d8c
-:00e640d0c5146267d9ee1d24ad68f614ba49eb
-:00e650e17b6d54d1502519937b84cffc7ff561
-:00e66055cab99a2c77d1c9f1bb285d9c7b889a
-:00e6703f445f3d7905f863e0d9077e2ede0e78
-:00e6806eb323a4c64bd46b2d14088b02a1439f
-:00e690bfcd2208471418ecb2a98152caa6047b
-:00e6a0c916ff3bfdfdbd3e723704292b5608e2
-:00e6b00ef13d2a222ee3c5a685e7f45372ca05
-:00e6c0f5cf4363af5fdd150ed6ae7bf8a48951
-:00e6d033e31a2ec3c61f954aa7ac93b25190f3
-:00e6e04d7808b0f46379cc26e27735ea80ecb0
-:00e6f029a3ec75c1d3b52a7c7b195742cd608f
-:00e700268a46b97dbb298b7c36062a92091f2b
-:00e710c33c05d3e3a951a6aa4c23b00b99352f
-:00e720f658499f77604b6edfa059fc42541e31
-:00e730a9ac66bf3969427c85076f1b8c2cdac5
-:00e740883ac62f873b63e67cc754530fdcadc6
-:00e750c625ecda6691255788bd243feaef1baf
-:00e760d307752602c1b9697d9127e15b654f92
-:00e77063153cb9d407ae718c75e7b40847576d
-:00e780f26a2457c172b3b0cf011f8495849d7f
-:00e790d2ab5399436a039ac5bd1aa3fb2208a1
-:00e7a0a7083a4a9db4f3a6ac2159c4d2922a80
-:00e7b0b1d4bfdebff4d2b8db0049554642c671
-:00e7c03efa68c00ee8e2d615d3513766afca67
-:00e7d098a4930612e7d7dc1c9286bb5968b095
-:00e7e062a575534f7302929c26db67ce77a81f
-:00e7f07967aad64f88cedf2c7058ffe4f21224
-:00e800281b76e19f1f470c346ba40134b1a27b
-:00e810fd77f961e407e67b3fb0dc0b9a9d64f3
-:00e82047fb048eb6827360c636ef680c19d79a
-:00e8307efcf91aef2f80f6d76966cfd334981d
-:00e8407e72b3d5f7f8c751b96840135d2afc87
-:00e850370f278a46afd16fa8087ef0c2692276
-:00e86024bd765596850a005189748576cff0d4
-:00e870edde18a702568ceae556170c6e8aff37
-:00e8800dc811f5f53bafc4dc27d83f3be63021
-:00e8903bf3e3d871da3bbd3ba5359bf8ec30f9
-:00e8a09d6cd15ec2e908492caee3352eaeae7c
-:00e8b06b8c16374073b0ae490878633bcd9514
-:00e8c0dde01db56af3099549f13fd563e6402a
-:00e8d04fe38ebaea0f34c861eb1e9bada8440c
-:00e8e0fdf52b15d5d09e50879398c275100298
-:00e8f06b94a285aa812634a48542c5ffb0c993
-:00e9004ccacc9e12f01db3076cb37e59cc9150
-:00e9101f8fac94c5f326fd83c3b9e9a48d1a88
-:00e9200049195f74e0832551b3dd727a2ae2b8
-:00e9302b9a1ecc007dbfe867369062f93eae5c
-:00e940a490aa152c112b3f319115b89913f6b0
-:00e950d9c2a1fcc4a561e44947079454d73f9d
-:00e960ac1cdc11f890730529e140b2ec9a2f4c
-:00e970117cb4f47367eb95419c3c0ee3bf0a46
-:00e980e77c953daee915deddef8f3b5cd8db57
-:00e9906fd3dfb5e4e9eaabaff088c247732277
-:00e9a066b590d66b0622b0609637db778c4fe7
-:00e9b008f2833b8c855b2f9c4343f36c374d18
-:00e9c0d94a84b32b8f418e71086e8fc0f93a85
-:00e9d0d10efcea985ef55457c0cdd9842d4563
-:00e9e00c87e36df2dbd1378bba25ba8a74c408
-:00e9f067e85724bf2bd61c4234725efd4997a5
-:00ea00061ac7fb42ce8e06547335adf4a4822b
-:00ea10dc985bc369a889107541a43a73240031
-:00ea20d3fd54031dd09f99a5613551513afc31
-:00ea30c216a5f3f252e30cfdc83c7b005b4332
-:00ea40325c36153a539d18267f25fa6a1b8021
-:00ea50d66761c5b5fa711e3071bc2a1ca095ee
-:00ea60941d52f5ccbd1f5371dad5f457338e4a
-:00ea70332f0cf043d18b1c920743f63f1d46e7
-:00ea80cda976372ed7b0acf840ff26eaebac9b
-:00ea9032b60aa52ec7506cc49e47f117267ffa
-:00eaa0b56c584b7e466cc1cf9f256278a55137
-:00eab08c8d9a86cbe682c5a68659012c6d4fa9
-:00eac08b35ebb859e0c390f9071e2db01d7f44
-:00ead078df30ee4bc0577e8b16c1374027fff0
-:00eae05cd23c9675241d13fa6f584068fbdbe8
-:00eaf0d111d3c3ea1cd73cbce0d12128a03139
-:00eb000dbff85a23151a4d4695b5ba009c235b
-:00eb1055ebe0c5c241b8bb7116d3e3e4ff42f9
-:00eb20c33b82135c84769ad3de2e7670d5f7cc
-:00eb30e7bfc39f5e11d8191841c1a6539e1e43
-:00eb40f230346e57d578f43f1b6167a71f4b4b
-:00eb50ce8ffbe236ab76ac5f6ee1b143318dc8
-:00eb60e10132c79f2917a731e4065434f8957f
-:00eb706f6892d4f1d48d4b8080a1741e7689d7
-:00eb80d117b6802b91e5940803ad89ed74a8e3
-:00eb907d3b53f48a83f93d2aa3e1b45adff4d2
-:00eba01d138a08157720db95c42066fe1425f0
-:00ebb07fd48378b01e8e483b14d59b48244c42
-:00ebc0b4b624326e5cae1b8eb98757c4d43941
-:00ebd06213a8f1d3117da4a24fdcb16b5dd9af
-:00ebe0b9c43c8ce6359ff676ea9bc574c0ab75
-:00ebf0226b64ad54a05ce09aad0162023e4514
-:00ec0024029ab07c1cafa7ccfc2ced864fb261
-:00ec108c1c94afbf2802c29918d35848b3f636
-:00ec2009d799ed6462248d03051fced0feba3e
-:00ec305602229adb70fd928b3e315f7bfa4cc8
-:00ec401a73807085c210a23810e13d15c9da19
-:00ec50183890d918176146e8d03d5a7cbb820b
-:00ec60f3bef3d9fc5a2e15bd1ee34b67df08db
-:00ec705ec0485928e24cf9ff68990a72c2a7c5
-:00ec80f3b2cb605608941604ae7ad33e18f177
-:00ec90e693c02e3de548599a3e9dd468c8291f
-:00eca07877008048bea0697bbfa619f3c2a7b0
-:00ecb0ee7d06ac5d90ead148c5a09f141aa0f7
-:00ecc0e78a22c270c4e227db53ad6b1a95ba0b
-:00ecd007e22d67a6a415ea56d58859ada47737
-:00ece0fd6f9f896713ff0f135add07a3582b8d
-:00ecf0a9d9f87f298c31f83438cb773b770329
-:00ed0015198ae62f73cc62b892d68cc16ce3b9
-:00ed10245cff3d2efe708bec2dc83e1e43a2e2
-:00ed2078de4c94be47bb3249f3df43837b518d
-:00ed3040658fd7f9ed10102e6439bee914a23d
-:00ed40ebbff5c49a9392d15f3254fb99657dae
-:00ed50c8686a83e190fba9868b6e97e2a07e37
-:00ed604a4c1d8ac55661905ff7efc3d6b76116
-:00ed70262ad360d8c3e7e13f0c91552d1a67b0
-:00ed803acd1d0efb25a999ab9a8b76a6cd0a29
-:00ed90f6ce5d3b210f95cd1c6464a9731f59ae
-:00eda0757039cf89af36acce8eaaa92e126662
-:00edb0b0d16efde275ea9fbc84a917cb2c0c76
-:00edc09f533f68406e95c1f7571ae399bfe957
-:00edd083e7f7d04b071597e501e973cad8f078
-:00ede033be227eae4bb235cadf380296937cdd
-:00edf0c8637e109788a4b147f2ee90440534f2
-:00ee00f13f34bddece6aa562449536f41361a9
-:00ee10264b126643511969739133d33e3f6832
-:00ee204a352db098b832bfd12a5b73b6c66f93
-:00ee30f5f5cd1e7911548c11b55c3b9067d79a
-:00ee40ba6ac68864507cf04108d7489a5e69b0
-:00ee5031f617772715e1f152f23ac995448403
-:00ee60a42b1104d4122d91947d540938f06c55
-:00ee70c482d1628c9cc9e967db4a010d6cb7d1
-:00ee8080c657652ea5b631a31faab6d3d4e26c
-:00ee90a4fe555aec302c8f43aa513780dc5d54
-:00eea01cd84b53f25d096d04fd3e4be84ef705
-:00eeb0fd6c3d83607cec28b83987efc44b1540
-:00eec0ce42fd80dbfe007096c3dc1af8b33fc4
-:00eed097ef6f20078c3626353a16cdf37a5445
-:00eee0ef04cca9406eee38e71dd0af5dbcb0a6
-:00eef02edadda60567fef45dc91735a1455e04
-:00ef00c150d640051d0d608f7a4fae5fcf3d62
-:00ef10e524c23864bbe1c0676cfac31e1af114
-:00ef2013fd17293f0d666cc34e106738b3f10e
-:00ef30600bbbbebb9671e7e55fd10609aa06c2
-:00ef40d35c6c65d7778f91aafb92e1b9306d3a
-:00ef506b25afcaa075b33f781e53e10cae7866
-:00ef605adf8e106591f67a5196938b1e6c8f02
-:00ef70cc84d71d6270f972be8a26392fa79592
-:00ef8050aab1c9eee131d2bdd4f26b2c37dc0c
-:00ef90ffac4f585a8c380330b1189cac34a4d2
-:00efa05398f0b2c1eca2497e1f172a912f9c69
-:00efb0433da5daffb998137d4a75418b23e91c
-:00efc0dce38eda606f8e40d651bc05c7af0993
-:00efd0956e906322d36a578e2cd53c71c0f809
-:00efe0cf78d4ed12bcfbde6051779138011360
-:00eff0d98bc26e5dee144de463b740945439de
-:00f000ae0e79350d4e1fa74234c10dc84e2fb2
-:00f0107f6321501b3c7a49823e883cd49d8cc4
-:00f020d7c5ddf75f0d3b26acff1154fed6a033
-:00f0303fad65299ccd6c2f2de98b75db4ac659
-:00f04032e82accdd9c81fb142436e930e543cd
-:00f05070838a730e162f23ad74d024686c395f
-:00f0608647db3376aa2664b4ff2592b01e10a4
-:00f0706155c412f50e1ad0f2acb038ee17bd10
-:00f080b4e43d5865f096d6540722b150b9a050
-:00f09095b503a846cf90517fa4f9a733719c13
-:00f0a074b2657c429d0745c744fe2f0687f160
-:00f0b0b8d824727ad71040d5c86696a8d49cf7
-:00f0c046f19543ad415cdc50312d60202b7350
-:00f0d047ac3db44951a6ba4dc5f0a4340232fb
-:00f0e04add912b8b6fcff94f36e2966ab1773d
-:00f0f0caecf3abec16be754139213d5218e2b5
-:00f100ab7cd72eea6c804ef684d3c05f95dd71
-:00f1100c25c0c2ecadd40aedaef44cd733e4d7
-:00f120fdda6d0aca278da626893b38312070fc
-:00f1309d606012d4c53370d9e15e15adbf1f60
-:00f1407dd6cad0d0e31bfabdadc6027c9d614f
-:00f1502e6b9a880772962895bd284f08a289b6
-:00f160b0b95e8d780df980bfa172d8d256012a
-:00f170f48ad2bb2020f3bdff43217957f91efa
-:00f1802f587d5d01cc1aadb808deb35252194b
-:00f190467250a7f76732cdaef2be109f7aeedf
-:00f1a0a214576ba2fc7e345f9519024e320ce4
-:00f1b04fec45a8a8153f24e8b98fdbaddf33af
-:00f1c014faec186582922f4144e92dc26b7506
-:00f1d0ccbfdbc17a2dbf2056b4ca8dc275f88b
-:00f1e0f52119172a641b1215c320745df5f50c
-:00f1f04234fd52e1f89155ca4601a36a215df8
-:00f200a4efb2194838db4e4449aeaeaadfff5f
-:00f210e925085f2449cbce703c176d670f8c40
-:00f220f448af3f6feb743fc44077b065633db8
-:00f230cf68128341110b2748b3b6cb89df7d12
-:00f240bb39feb645ac0dfd79f6b205a824130a
-:00f2503bd3ced214f08eec1b4a290f1e1f2571
-:00f260c08d3224610da165924e3356514b6208
-:00f270ab1cabe5491bc3150df06b489086243b
-:00f280a9fbed2563a37a1392c97d346ae24803
-:00f2902ca93df55e4ef704fac8c4348fae219c
-:00f2a044af9911a110d9c7d074935ea3fa9713
-:00f2b0c627207abb63ddd8fe3cf851fccc825c
-:00f2c0f4f4fbb0428217efcbf94260c2301e0e
-:00f2d0d80fa51896fd95c1123b50e9fa2e2c51
-:00f2e0c6e1a2876195c56034b55b2aa876cb4a
-:00f2f099ea996a9a58131f7be45c6792d0a3d1
-:00f30000b063b6eb106748008284bee5f4ac9f
-:00f310fe2dd4fa2238bb75bf75114d7d2191ef
-:00f320ee5ce89924b695cecc1c20b8f42fd558
-:00f33090bb01dcc60cbd24fba26c828f23def7
-:00f3400dade4f10a490244921bee2724f0ba82
-:00f350d7106b36e338c93ae2356d72c30fb80a
-:00f3604baa20ff7dc80602e34bd7a265f39c17
-:00f370258718d9776b4aeafda787477314dacf
-:00f38073ceec81ff3095db78c1629d02c4a7c8
-:00f3904e8074e4aedc5b3ad41897c6e5e017e8
-:00f3a05119c7c6d45e66d036d8a31dde046e5d
-:00f3b09d70efbaa9fcc99c9657451a596f6f89
-:00f3c03acfd90ea44218f3848dac0718e681f1
-:00f3d04916ff07967691c3b132916996fd2400
-:00f3e0eb5c2a84813e5e8c26321853767bdc87
-:00f3f08d9c77983dd1cf65e9458208e72f1a1a
-:00f4004615b52821b12cc8cedd1f290c425cbc
-:00f4108982c959528f45a5ed45c44d538d5606
-:00f4203e3d0001ef9933ddb831546c9c5894a0
-:00f430426c85ec19027bc7b71933d4ddc186f2
-:00f44002294e555be01b12869736343c888980
-:00f4500b818d0982746f8282cf519d1d847690
-:00f460c37a52863db6df822f37517c0696e5cc
-:00f4700156f9feb7881158100d40409a6f1c77
-:00f480c746eed99aefb4335e0bc00eabe8de50
-:00f490f54af2ac45f5e029f330830f4cc4ed51
-:00f4a01a40436b83619b7c3c29856785a9eaf3
-:00f4b07d5a7ad60688cc247a854f41e9ce1eee
-:00f4c0c928bba86fc96e6fed732e3cd3a556b6
-:00f4d0ea08e25c512555c69ea662d554a291d2
-:00f4e0ffb8c8290e917ebe7f1304727756f98b
-:00f4f0ce297185b712a95796a7e9e99b1fce5d
-:00f500cc80723561eeec0b70e28a05ae7bf839
-:00f510c68772f9c8f7abbec6bb340bb035425c
-:00f5206c85368dc1e29c277e1eef39e2be639f
-:00f530418e249f7f63f710927ac8b3ea2ab90b
-:00f540affd12d89bd30457d4703ef3b648b72f
-:00f55099152b39d8e10d907543b3f9ccec0948
-:00f56066d189a10e078e35b7e0ba348655405c
-:00f57017c5a6772465e7c0f330872a20ec734c
-:00f5805747718415b8a039c42cbcfb00e73113
-:00f590b36ac5656165a653cd0f2ecd10ceaec3
-:00f5a093bc983ce463e34f3375b24e0bd323d9
-:00f5b008b1340abe414ea603aa5c8456e04597
-:00f5c0669469cf6b20437603677d9b6b0e790d
-:00f5d0ac334183df74a1a97d31502d603d8c98
-:00f5e0d1e86adc1b67d7f31a8a0b351b05f566
-:00f5f07d7a25c69d26be42c02cdabd6497f8c3
-:00f600c0f90ecab82870c73905ae75caa8eddf
-:00f610868c03bd8769ce679ac952845ce9e7d2
-:00f620d702e664f1775090cefde036ad592e41
-:00f630ac163fb0e38c99fc9df99bddb9db9428
-:00f6403a45ec4e189b0707eab41f04d74b8a20
-:00f650bb4ae14de74330dfc24fd83a99137fdb
-:00f6603431e582b99e89310f853836e005c1ea
-:00f670c13119c6c97db353b47aa5404ea29509
-:00f680928da0e2f48deea3101ab397ac4be3a3
-:00f690d7bb13885d6a43f1900448a48d06d9cc
-:00f6a0a1340b3c72734ab9dbf42a91856cd0b0
-:00f6b012383ff91519f39caf1a1a34365fa38c
-:00f6c0d2ce7d5ef6259c4d7af6a7411442b7ca
-:00f6d0febab4688cf76e96788db448eb5cb854
-:00f6e00dd88635f9a7f5875aaa36be5b1d0a84
-:00f6f09d70a6e051f478683d75ae4d0660a668
-:00f7000a2f1bdfc9a256a01a3e46a6875bd0df
-:00f710f9ef54d389db32cad791630ccf13c42d
-:00f720987cc60919c23896a2542c7d77ce8f52
-:00f7303c52928b976013e1c8c2e6c8039cad46
-:00f7405270d2c87842dfed36a2f9e20f2dd2c7
-:00f750e7fdc2149a20b4ba6b1e05418458233e
-:00f7600b6d2062815ffabc9f3b56997fad86d5
-:00f770066650fc42bf5ffcd20b04995361a808
-:00f780f6f46a8161d7dd343f4aafb08539df8e
-:00f7905999b2b1d7b3c3f42f7ab8b391b89e68
-:00f7a0e3f76244a9941a62590110fddcb182ae
-:00f7b0356370f5437e0eb8ef0624ac277722c9
-:00f7c0f384de197a118570d621b46c8555ceb4
-:00f7d0acaf7e3a2351dddfb2cb3e0d2b18c44e
-:00f7e0dc65881115c997f835e41a14339188e6
-:00f7f0235dd8059cc139f78180ade82c26ba46
-:00f8009cc5e9d6eee526dfed63450912b683a9
-:00f810fb5bf24080fb2de53ba93c64f02f1e1d
-:00f8208cd4fa23c76a4ebf715a62b99be27120
-:00f83069d9a573c90203a7357f2eea4087609b
-:00f8407ab9bfaaefdfddacd067aadea7cff99a
-:00f850ce56613d15edd2a427a8dd7ef7f8fd55
-:00f86088271aeb8b6331cc3a8804e95286bc3d
-:00f870eb6d9df166ad6dc79442bb20a624da1e
-:00f880950c41d2df46a73000a052d8ae0c031c
-:00f8904b80eb648af5388d18a8697090e12428
-:00f8a0b2e056c7cd043683fdec43e5418898c2
-:00f8b00cdc8906d1727b37093371e22a82b644
-:00f8c07510961445bafc7ce5b086f7cd5630d0
-:00f8d090b7a2ef6bfa0372ce4465d8f987807a
-:00f8e0ac088f1076f6cd2f5a18fbde3313d14c
-:00f8f0d975c6fd930eb54ffd4a8e728880a91d
-:00f900c1df9016e15db80474c0d405bbd48942
-:00f9103961afc73fb116336add3df9a0c00b5c
-:00f920bc642d3df216a4cdc639b2b3a2e3d16e
-:00f93033ac6372e8a591d723042c2d21bf7e0c
-:00f9400044a5d7d74fed2e23ab07737bc5b5b8
-:00f950570f23bee82d45e7aa27ecee18cf6571
-:00f960f466278c76b2d3d4fe9d9c23d9f0aba1
-:00f9702b6d0e68d70bd6327c75a93268de2b71
-:00f980fdfad531976fe81382270cc1142417df
-:00f9907447aefe4800eccc1f1323fa8104ca1c
-:00f9a0ed7e6962a5870aa43afac628281b79d5
-:00f9b00efa1df8488e9ab8f9d8878b2e692a3f
-:00f9c01f7af9a9f1037bdb11796739ea3381b3
-:00f9d0e36ba1d81d23eac0da4c463d2d06d3ec
-:00f9e029254d28c256181a0a51060c64bf1260
-:00f9f01837fc486d71ed0ec7549e1f85f32824
-:00fa00b533de0bd712accb13a550802ad46b91
-:00fa100739c60e2e2331afe0f21a4a86b569a5
-:00fa20ae5f7690a1b52c75c5f245bd8c6a7572
-:00fa307d337896012acd572a6203137ae1b01f
-:00fa40d0d3f162599d5b3642d15d183f4a98e0
-:00fa5010aa684998b3824a48191ec18d24849e
-:00fa60253efda35a8fb9b69bcb76206c46907e
-:00fa70b12e14cc59ee506e74b95e7948611825
-:00fa80a20b3fba785fe2a2111a0af6596a7523
-:00fa90ce8c563b2d2430c08049eb4954ca8661
-:00faa07ec7143a875776c7d9d303da3cb85653
-:00fab0511a35f8e127bea4faf842ef99ddc1eb
-:00fac024d37bcbafc76b634dee059c0b9c48e4
-:00fad02cb712cd0958401d2da73648bc6b095c
-:00fae027cded5ab7b5edf5c19e697b4768d81e
-:00faf0802fd989992e417a7430e4446e92a533
-:00fb001ee337ce38ea27be30647a0d9fd2bfcf
-:00fb10e3f7c716666b969de657f19b96f50f38
-:00fb2029489ea956bda033337176670b781d47
-:00fb30d3458e88861a50a777a3be3d28408ec4
-:00fb4097aebb78ce6ec65209b794bfe90875fd
-:00fb5018144caa9b15cadbcbdeb497cb6d3389
-:00fb601bdaadc2c143670d12c157d734138ac9
-:00fb7065ca90609e1446cbe6b96e86075c8d67
-:00fb80665c8eb1f7d660b36445ec024534b037
-:00fb90ae407cecfd4737acd603d210f498407e
-:00fba0117aed0598404adf65f15986ce774979
-:00fbb00293915027f86dd9eb248b865f77afef
-:00fbc0a6fd2b77210f1f0c47ee9dac5d0ba5c5
-:00fbd0551db1a7e73d01d039e733db4b261e29
-:00fbe0286501d599cb73e0a768a8b038e71556
-:00fbf007f295f88429ec9a4b798b7dfe71d9bc
-:00fc00f677afb3afcd1bd2a8233e60843ec6f1
-:00fc1023658d55e7c5f513d3c09cfc49e29417
-:00fc20264a1a40c5ff1e30b550930e6272583d
-:00fc301879e0d3e435d70e9a62e61a68b3c3af
-:00fc40bf9e8883ce6a9ffc1adc8aec2e7b7906
-:00fc508ff2fe45945dc9cb1bcdcf8df13f47f1
-:00fc60144a3350371c19b4c5542bd56dfa53b5
-:00fc7085a171bdc426d003863a16ae710ad4c1
-:00fc808d383581fc2772081bd8e75d74441f61
-:00fc905dcb58a7a6128bfbf6f4f4356bbc1020
-:00fca0711048d047fc2f135720240390286bd3
-:00fcb0965c5a3244e30bd6d39728191dbed1c8
-:00fcc04ed6bf2291cfb1d827bc9e68b86a4f94
-:00fcd03f2908a3fe89e7bbe8b6414b6e94dd9d
-:00fce0d2d2abd52b90c50fa0933b51a3ec173c
-:00fcf0bcba0a8e4495c08a816a0b9bc2e05879
-:00fd0044959ea121fb5809752efa88fdd90be0
-:00fd10a43f452f9c6099596a1051084ac01d93
-:00fd206c69573ba835a835e124ef0dbd825f28
-:00fd30fba3c8f8b5c0ac5f99df24d960f375a3
-:00fd40e399cab0266ea9806950bbcf90f2bf69
-:00fd508a136a83e24adfdebec6ab0637626f76
-:00fd60000a0e4a73f1e07e37f222979abde7d0
-:00fd70cd0ead54874b48714826a0482111af9c
-:00fd8095a85b8d040de0c26c31a989d29e9d1c
-:00fd90b12207550c107199ed02f2011fcbc29c
-:00fda0171c0e17a1fcf5125080213f4abf973b
-:00fdb0c41f08a55164948c133bf9d11482a365
-:00fdc0a738f450a5b6db81598e5307797a168e
-:00fdd01d5b12cee5a25666dcbc7e3781824e76
-:00fde0f81ebc9c79550e878ae133fffd1c2918
-:00fdf0176ad46126ad6e1943407069559519ee
-:00fe006e5775dafb2eee77545702c191a80c48
-:00fe10f3bba988349c82256f3dfada80c58c32
-:00fe201ee40baf17f529b46d154c1fdb7912a5
-:00fe301ef3c7999798dcde71ef2af349967848
-:00fe40f2df2c863b7e8cfbfdda37418dcd7d20
-:00fe50a8b400e8b13d4152ec8f89675e87d66a
-:00fe60c8620cb6dfa9f31945d3b73989033f9e
-:00fe7085a2f9b9680b5a09a91946f1ce07b7eb
-:00fe80f06ed6e6734670fb3aa11108ef4389f3
-:00fe90f46b0e997d7e6e9eb3e8b2d6e7db36bc
-:00fea04acbe6a9cd30a451188186762586d9a3
-:00feb0287678093516d439b9913917c2f6410b
-:00fec06ca44188c9349f7befd49c38c4727314
-:00fed097b87be4b20c2055f3352341e8a192e7
-:00fee035e0d0fd220b108456d0ed091465247f
-:00fef0bc7fb42121a9fa2827babba4cabe60e8
-:00ff00c7aa07f71a4c47cee40b605fe304349e
-:00ff10b22a5e6be7d906b8643a4128ef06adc3
-:00ff20ea549ffc9647e3b5d87945968fd7147a
-:00ff3082911fe149575e7c5fd69492310aea72
-:00ff40b81bbb2082a99a8861b4600e05ae0645
-:00ff503654ef22b7737287fa8da56e43a3f6bd
-:00ff60aaa65a0a4dc463843399b43a16f2d878
-:00ff70201ce584effcaf4e50ed5889558908a7
-:00ff80ffb782360f4e9d885de51e47f88c6a63
-:00ff906de2fccc1f1f06f6c2303dbde02af480
-:00ffa0cde7dfc81a86d79130292809324e0851
-:00ffb0eb6027ce6331a44a990853ed9a604164
-:00ffc0d57a4c6750ca203f78efc9c6afffeab5
-:00ffd0c903636d1911d8a926d9dbc888ab77c8
-:00ffe05ad6a207f96c8cc60f28ebc4cfa3657b
-:00fff040615aa7e9bf75790565088df1a7d78b
-:010000b7aeff3289dbe1678a33ba6b296835e4
-:0100108c5d6f07b5f9aa6a8b3f93d522fc705e
-:0100202f999c74d3573da16410b0afb4210704
-:0100303fca9f27bcdebd17c524bbc2048b2c23
-:0100401a0683f158d927b87df823970b11f180
-:0100501316a6cf1724db88a8427b0b4c30f337
-:010060dd14d68804f3a3040b229c1f839519fe
-:01007092157faec29253c7f22cc71fd5982869
-:010080f66c0677e7a5a7c9735672392ed8a914
-:0100903ea0a4355ae84b18d385096bfddb9fec
-:0100a0f33ab6c7429b462d68898ae1504071a4
-:0100b046cb647c960307969a061c9d7bec516e
-:0100c01e8ee36cfdd13eb7738d35ed38a33808
-:0100d0a63dc8efded3bcc9c2a14ac0cdda0332
-:0100e0415a66b0fef9ab2559ee94988c29fae2
-:0100f02264699bff222f1a75027ea4c4e294f9
-:0101005e469a62666e7cf3000a24c05ea35029
-:0101109cc9beebf66e6a81b175302e69f59fa3
-:0101209d5dbbe24d13c54ddb428d2a3e4b2b23
-:0101309c5036f2377dac3f6772545003339ca7
-:010140ecc07004f71e2a9ab9b77ececfdb8cf4
-:010150a17f036b968f3dbca3f1c4723bd20f26
-:010160e739c44e6e1f341a273ad168c51ba446
-:0101702c4726d2eba83b2be8e8629fa468e552
-:01018004c1e8d2eca601d2ab092c919924e0c5
-:010190b9870116fe73d8f5af59df718f8737b5
-:0101a00a3c094bf7442fcce8155e1c077c4568
-:0101b0d0d37ee9081b30f22c921cdc783db87c
-:0101c0ba7bf4022c56a00b9b56192ef58cfdbe
-:0101d0f7d0156637f50f635343e16c27c17e76
-:0101e087d626247384a61ff21dd7a2bedb7c2c
-:0101f0685fbe1105eb2f7e0679837e11d562f2
-:010200d4ba143aee637598af61d9d171b73b63
-:010210ead9517d1466ab5d82bad24c5f847bb3
-:01022096a67ac014b0df619bea8427870ff40b
-:01023050543ed47e251a727ace4e786d883579
-:0102404a972856ab9427204b7a351f38f32ba4
-:01025002147e39ef37871e908a42af58e64350
-:01026037845fd4cd363f6bf3ce31c1b2797f67
-:0102702f52e5a8da9ec50bd2be798ce3d3c1b1
-:01028015f5fd5630d6cc98a688556c84036a40
-:0102907e1911ef894d7d660fcc6da6c6e9509c
-:0102a0f9662770e1524a3308a7bd00baf0f9ce
-:0102b080f52ec0caf401f5882e783160d158a2
-:0102c01d7f58df5230c50a28f892e1ba3b16fa
-:0102d0cc2a0d9c5b2e6b119171738b8a6d37a2
-:0102e0e532e66cc58af80bc14549ed6d59a8f0
-:0102f007dc731b10e2d965dfe1e918414f754b
-:0103000dcabc1ff2e17e614c76726514e3e86c
-:010310c4ed202dd75b3e5526a2b5dfb591ebce
-:010320d7bd8f6f87e2607adbfb254c70c76d10
-:010330505ede4af93f72f15856d7ecef74a349
-:0103402d3c323b47b0aa54c3c30046a70e9dc9
-:010350c7bd967443ef0c3003433d0d12050a18
-:010360f507859d6e56bbf3f528346621e8733d
-:010370d581445220575f75308832a8c9128af7
-:010380469d2cf8dab83b30031cbd19e208965e
-:010390ac92daf4fd2feba66ed2cb49a364e371
-:0103a097b627a37f6f4f3f704c840b2cda9ea5
-:0103b07c2d4d8df32e8f5bf2bfbfd917aa6d46
-:0103c03003c36d349af2346e9fa1915ca0a153
-:0103d0444af4a14c2d03d656e3ea130892c523
-:0103e050afd6993089d3ddfbb8ce9aceaa9188
-:0103f04999c80ff53cf5ba727f99b14e118f7d
-:010400ef5799d81256dc42389548a1589f257d
-:0104109d6530ea75f07ed0848861fed21ce186
-:010420d3ae050b4906fc8daaf28659999f50f5
-:01043075acbdfc593a0356addd20a4662bd2b3
-:01044037db9fff2f6f6fe402e363ba62116774
-:0104509157630d22a2a495e0a9f8f28b0b9b41
-:010460b59f9dbccbd1a7096a75ae844303e2b5
-:010470313fc6e6fb16ab29f79027db346a7a2b
-:0104807bcf5487852222e25690a50e459461ef
-:010490b847051408bb43e056a8ef320b271f66
-:0104a0187020313a6bce0051a32c9772b754e1
-:0104b003943c8e1d5085acaa94009e79cddf50
-:0104c07dbd5381c01fc140532ef59efee6fb8a
-:0104d0e659e33d26d597343ed928d2f010cb7e
-:0104e0df25aff89e870dbc476f6e124c73c6f8
-:0104f024c3fddcffdc1ba9693407a2faeae563
-:01050019e646b6cf70d8a6513a9fe4f5af32e8
-:01051027fc35ef11e41b4a7b896ae4749e7632
-:010520c44b575038b3cb8bb68c31ca95e8dd7b
-:0105304914f41ffc9bf00b70b36afa1d319d71
-:0105402ad179dd304f321da51b18e201e7e0b5
-:01055014ebe848ab39254bb136efe615b7f042
-:01056092b0014992b3c79cfa23a04086400b1e
-:010570497fd93996df09bdabb7cd7615ee200b
-:010580d76d6533057b869f3474af0ceba275ff
-:010590f5bc0e41ea340ed125d543f1224a31ba
-:0105a03ece6f4c6893b9161fae4dac6797e6c0
-:0105b060087a52e83b1b1ef7965e26e82ea181
-:0105c02cb22b641f3239e9e4c32367618f5652
-:0105d047972285cfffae1c5cba6ad8e4241884
-:0105e009cf86057cdfdf7e862487b2fe6888bc
-:0105f0e3daaeb3cd0945ff85a7a6215e37746b
-:010600e88a96275a0973d887129d3a0a8f7f93
-:010610f6aceb4fa735007d0a17ee0321671c13
-:01062044aae999158688e4b2dce9759c888dd9
-:010630452d2f78316669a24d8f869ec9f8ac8e
-:010640e3d5f5155ed9f7f521ab2982581df684
-:0106501c34f225b5a069bf508b3209d2e563da
-:01066078286bb930e7307920a8c0f739f5df09
-:0106703bf22ec88ab8ed78fb4e65ddd1fcc7b0
-:0106807d45310f957284421ae4a3e6813a1980
-:010690288c11abd048d3359611980efebd2c88
-:0106a077c3d047db85b7531daa18039ceb5a3d
-:0106b0bb6c12c4bc5ddb5d3c2913cdfb3639c3
-:0106c0c71577354548561e70b06942b1fdc0dd
-:0106d0960688cacc11e58393563b68bc1da83f
-:0106e049aea935968997ac066eab462154af59
-:0106f023a8f26d7b5c9c7e3f0adc37016eaa29
-:0107009390e2ca7879840a662502d599dc52f6
-:0107109030192b2e4b1ab6d4afc910f47ed55a
-:01072081a92c3d1c535b5d33edb0f2b15e6d15
-:01073048aef3d906b6bcb39f4374aa2e94fef9
-:0107405878f730b9c8fe602fc786868f582419
-:010750a2f1d5f34d6062d131d2dc0fe91ab6b1
-:010760def6fc6cf488b8756eb8de4f19987135
-:010770377525889b96aeffea3a24aa7cb0eafc
-:010780dec00d0370381c01352b76dc0d145580
-:01079038b589f7422f421e668c9bfdd09712ac
-:0107a09551e9a7bab9fd842162eec1ecfc0a63
-:0107b0be06eebb518e52e5d7671328b1637b02
-:0107c0b3f1b7fa47cbda3c6202a0a12d1f1224
-:0107d06b50305c3edcfe09abdb4d0d9481f186
-:0107e07d7dbc68437c29370953580efeffea6f
-:0107f094fdd6a952ab0599a8bd974bfacd7ba7
-:0108007da2cfdd28ad5b2025a148051502a913
-:01081009c4e22dbc3c5350013fd8fdc1ee02bc
-:0108203cfba1980e1da915d3532834bf7c79ac
-:010830efa74402c14a21265013334f8088b6c0
-:0108401f0f84fb9457347a642af9a62f4ce97c
-:0108508bc50d2dd4fec1ab5ab5541acf2f602d
-:010860f0d5b425f9f79d576a46513831c0f489
-:010870c679d9aade03ae8604881bbbca0d5887
-:01088066f8805d51f1b0b904790c2185ebde60
-:0108905c0f377018115a91bbe22841fb0e77be
-:0108a05bf511a3428b458f15bda4a68a4fa5c9
-:0108b0f20e1da85df7ee276ff94f55ebfc8983
-:0108c0a67ab5bcd3afb8690ede9604b1d2131e
-:0108d07ad1c859c80e505014c08eeed968d90a
-:0108e00556e36ce16a1bcd722263994e1a9c33
-:0108f0c0c3b9191ef07022a0f6840458162ec9
-:01090060d6150b23e4673af543816c5dda1379
-:010910ee40f9864a13fd8cc7fc3569105c5fa5
-:010920daaf1337202a75435fd7888b67dbf3c2
-:01093027c59681b98e70e1c725915ab2fe7532
-:01094025559e0efad87d95d25c0bb9a1800b1e
-:010950f6f5a2a86794052e127e13102b955811
-:010960a411c4b7f9a0c18471a96ff521b05bc2
-:0109701c2208bf18e90be1055106b00d880146
-:010980d628eedad5973e877233c283b08eeb1b
-:010990a1ca922239c4c51001ef84eeaba18dc8
-:0109a0f85498c3f77defd271feb0386c92bd3c
-:0109b039ae20a45bf96f392ceedb420fc49d62
-:0109c0a74d7cf7b235ab1065843012ad03f581
-:0109d037b511bc197f928d3b9967b3fa09ba2e
-:0109e054dca7eeeda7a5b8fdbd0fd863eabdd2
-:0109f03ad863f6f97e3ad3724b8ed5a57e12f0
-:010a0072d9de3999f0ed78d4fc838405e7c528
-:010a10c62b604a44ec653271b93e18865c6222
-:010a204ccb58b8eecc904df340cfa0fd8a1f14
-:010a30fcb2954277480ad8395da6f79c61e8aa
-:010a400fbbbb24b468ae20eb1f1a321a584707
-:010a50a1050a814bab15403ec7e2e930c3ca4d
-:010a60fb0c90f0ee513d083f6961e12975d0be
-:010a7062a8e6bd06be376cc89c3d21bcfbe541
-:010a8022166151a05a08c34bd54f88b11fc397
-:010a908d2fb06c3bff730e530aca12614c793a
-:010aa0f4c6a7a130e8f642df764cc15c10e226
-:010ab09954182570b97eb2ac92fe6b2c1ab41a
-:010ac053402dbb12e29dacbf5713e3972e89e9
-:010ad00199df101d4b62be59bd8678aedd1f70
-:010ae01a6065710b65ae4b572383f6d26fb0d0
-:010af0212767f827213dfddb6370daf2486fdb
-:010b008e6c69b7545a8c6ecbbebd24b810649f
-:010b1060973e3908697ee5494c8ec0ed7b7c38
-:010b20bb63bca143d0b4757ec4205375b394cc
-:010b30605228cdf5cf3bd29e8aa742e25a447d
-:010b408c9c054e961c9606652a6473fc0d6665
-:010b5079d1f7399eeed5ec137bd94e6533aefa
-:010b60293954bc8e5090de9ee68b191b233f9a
-:010b701493b52fe970fe3ba2b9746b9ab11b97
-:010b806f552f8c11b48818a082676e6e673423
-:010b903a2807f0a57ced52a8ee57d0b041f9de
-:010ba03a3ecbb207cf64eb30a9b1710b84bc2f
-:010bb05866ff92afd9c7c674216ff08485e64b
-:010bc03d367aaf61a40a89d7613d6165edb83c
-:010bd014577438e74019e9afca6d7f064bf2a6
-:010be0b1d67a60efdfc90159629ef04dd8daf0
-:010bf0aee2065d8374fa2b819c2513e24f8bc4
-:010c00526e7553f13790ca78aa1a054aff002b
-:010c10073126a0a726545e4b9a7834188cefc6
-:010c20e06b1e132736bc3d01f5cb34f55daaa8
-:010c305eb64f58cab56407d1f78fb4b041fc66
-:010c40e3f5668185658343d8f2966c5a19c40c
-:010c50a49a2fcf42b53f71d689adad0a14a456
-:010c6039886666e09c996f5441db26df084d99
-:010c70f12c22c091559b6ab74275d9314e0d05
-:010c80cc5fac47ba1be71bac19a24dad2a6c50
-:010c9048e7354caf7a8bca6dfe418ffa949b71
-:010ca0402d041e0b46870ec7db0ccd8a59beca
-:010cb09b02f29628a3a6deffa0d6d91c3f643d
-:010cc0f53b92df7f2f0be238fc4b4a3d6bda01
-:010cd0be6d9fd101b937887fa6faece68f6b0d
-:010ce092fb304825c57fd5df09b302a18b701c
-:010cf0d9743c5c0d98bc68e40d6b15e4b31df7
-:010d0032ab4c0f64cc5345c9d37e543ef994d2
-:010d108c5e3d7d1c53c8d324a3e8f9be6b16f5
-:010d20fd3435855d4bc3f558908223011c4f5f
-:010d3093e64c3c0426b6f96a85e7ba08f0ad3e
-:010d40cad1fbb177701a38f88fae9bc1f50bb6
-:010d50329cf84d5dd10c9674e0a82742ecdb7b
-:010d60517c30d710bb6bccb210397f54a95e85
-:010d70e43d2ee5cb2c5fc034680952abc21a75
-:010d803bef75354cb8c9a9e82181bf2eaf273c
-:010d9034e23f150871a45dfcbde6cb09fc608a
-:010da0d1e3425560a7796623076df4e7413c4b
-:010db05ebb3b785348282156ec09d7ca5ad596
-:010dc0bcb65eb96c8b4f2ed317ed0b18aca5b0
-:010dd01bb269d616373f5322981a288c50faa2
-:010de0d13cdc8b8f756c91d0181560c608a3ce
-:010df0ed910d7a58c5529e9106ff38cc597c33
-:010e00fde43291827b122384a31f8b6bb9caa5
-:010e10b2071006d79619d971111cd91ffb89dd
-:010e20a6ad940c7467997689b5f04178a10d16
-:010e30bfe8521fcc743286e2523d72941dac5b
-:010e400aa171e4d7959b50eafba257ee9d8374
-:010e505e9302a8a11a4189637e94f3d44d83fc
-:010e6014ac43766c6251b2b1cb7d75792d801a
-:010e70cd43e4cc6192a4399a490f94dbba622a
-:010e80634ac7b955d8e0d8f9e6d08d27b9126d
-:010e908def14ec442e80026aee0038a566577f
-:010ea05a24fedd5ba77fbfccfebbfff2ef9af5
-:010eb08859491f7e41df4b92f8d8dc6c8097ef
-:010ec008ad93e04cb1e865e52f2f04ba04c238
-:010ed0f98db2b4624051413552c50f452bb927
-:010ee0d4e562316a79c1f09818cdcb838a4fae
-:010ef07d2b8426b9866e37331f0d2fa69b8e02
-:010f006898eb8b1c9380995ad63a1c82ed2dca
-:010f106a8686c6091b08498017e7361fa12c22
-:010f2092af7590e3e168af4072a27f0b87d585
-:010f30401c3646666646a5bc043b4b6a9a4286
-:010f406310b2f640c1c9ad509b0773cc3def45
-:010f50ffb953a6bf5fd60ef5cd31cd60e14a0d
-:010f60d3b0e39acd05e8ba5b8b7b903561f6a9
-:010f70589f9d2c8d14105f75591499dcea4836
-:010f806936739c073c5709dd3e5eddd65c510c
-:010f900c56ee7e1653573e4814037053e1eb21
-:010fa06a1b7e1a200f76f415ef8a018180d00b
-:010fb02280a7bc8b814eaa20f791010795617e
-:010fc024761edb12ae1633d2abd4d58cf9fe0d
-:010fd075410988e5537255aa3b056a19b17bb5
-:010fe0391e9602f75287b843c5789ae5b135bf
-:010ff0115c14c04ae6ac60c0f4c2f67109a01f
-:011000d60b9212eec1dc4bea1d1a9040636f05
-:01101017d94da6d462874dcd31c977e46bda4e
-:01102081c56a656c891157f625c8fbe03548a8
-:0110303b5c10e4ed6058cde9f7a3b3b36c27e8
-:0110402adc0041fb7e351a5a86b4606b0808ae
-:011050f7af6433546fade2135e2cbc604551a0
-:011060a717744786c9175bb040a21a7892d797
-:011070592d9259deecfa3ded789d03ebb93727
-:011080759e1f210303b5a1c1f6ec045ff7360d
-:011090e776a05fdc79c2ca6f7c55c111fe70ff
-:0110a035de138b3ca49dc040b594ae0bba16f1
-:0110b007b0367d68ca6639983927d7297764b0
-:0110c040e468cd8679265de48f5ebf6fca533e
-:0110d0b7ece09f2a99573ce11ed7c2be724eb8
-:0110e0b9a3636543b71c9891865404f5b1e3e8
-:0110f01a34b353ea2c6ea840e049bdc58079ae
-:011100dfb28a5a38f3992f073a9b8aeb739670
-:011110682e52284343fdd4452c2a8c3732186b
-:0111208b5029dec31efb9687a698e45093959f
-:0111308abd4ca4e1b32e084656c4603632e77b
-:011140f5b13e20782daa9e15f711b82b4092ed
-:011150ac8388815c52a06a3eb609def5aba35f
-:011160c9d52a429c5c0c8c87de0a193c45e99f
-:0111704dc6ac81b21c41d13104ba72eb978ad7
-:0111800babe97c9395a18fe8bc821da1438bb9
-:011190509f46fa52880be6258661ae42fa45c7
-:0111a0387d8f967ab78b0da0cf864465fd9f72
-:0111b06ad40ba71896f9e5dc0a9ea3d2a84b9c
-:0111c0d0bd739abdc7150f6d6bfd9635df3c16
-:0111d02925c0a844367c4e766e792d814ddaf6
-:0111e0753a572889ae575f246be3ef52ebf154
-:0111f021221a463b85024721a2ea1d4e884449
-:011200d306a2486d525d9bf148ebc1207a49ed
-:011210ff6555b5131dd2f89aae87e0ac99f573
-:011220e086d33a24a9fce596855f809b43f7fc
-:011230bebddc008a81c2e86cb6e7068b046d75
-:011240db35607e1a1b30764eaa215142bfabd1
-:011250a4b9cb7a7aef84419e2c989be4e3f930
-:0112607fa8a19dabcb61243cc23e66716de4a6
-:0112702467187c12a0ce3eee07c6fca8b74b9b
-:0112805ef40be567f1f46b550a14592ca3032f
-:01129068b44561e888819cb1e708fbdefb4584
-:0112a09db7d2215344e36fa4ece922a60a430e
-:0112b008debbf011cee95cae16df513f9b478d
-:0112c036b6bb06965947751ce9c191cc039f72
-:0112d004cc62f3ac197130252248f741aa18f3
-:0112e03a3b877a4385afc4a89688d9ee8642f9
-:0112f04780634d1ada939c48cecb8bba2e34f4
-:01130038bc72c45354e6b84bcc5b9f5ffd0c83
-:01131016611285ebc46b3019da1773b12ffb81
-:011320d97271eed495ec9b0be1a154eb956527
-:011330fd01724542db6f68e30825987210d029
-:0113406b1dda8f0178487db357b3d6ac285ee8
-:011350c87809e3ab768266a0bde1f6eaaa578d
-:011360410f744281a152af90ab8582f14f6ba0
-:0113703f43bfde90bdae9438071a6d7a43b5aa
-:01138033bc72c21fdda753e64c8abf23c587f8
-:01139029011b54c8c5da772c2a30279e15f61c
-:0113a024ec6c95d2ee321e6cf8ca7d105f4631
-:0113b073fc6e94272035e13c286ec98e60d971
-:0113c097e20808e9ac812b4d7698a8b1759c8b
-:0113d0db0a3ba6e2c166ace7ce767e1c6b49d3
-:0113e0b3bbae59ec1296d4e41611cca6124f18
-:0113f0586b8f89fbaf16f0b1308045e77479d2
-:0114001812bc6914f78cb168d8f920c8185c16
-:011410b5f043acb6695e14faf7c93397a49242
-:011420b0533b701c4f6e3422548de89e7c2f42
-:011430062580a5db419d475706a01e2b88aa32
-:011440d5f49c11dcc97361e827dcae8a777476
-:011450ad88e7cb84d27ad9a985c54181e16a72
-:011460a68e3c1594f800aedb7666e719827ad1
-:0114703afcfaf392a682f74982bf56de8ae24b
-:011480f9d12882479d6f87eb3aa1883428fb91
-:011490ab130f0fc8ec45cb1b870550b4b28473
-:0114a0d56d126a8ff15b50a9668d32dda88336
-:0114b0a33d5488b4762887cd0477e69fb0294a
-:0114c09c94b68e1d1aa2ff7d06b1bcbe4587c2
-:0114d0ffafa897dd03890ed81dabd1fa65a74c
-:0114e045c6717f1ec59f13d2ef46d129b2fc8a
-:0114f03dbb6284fc7f9664c7f7aebacb9b1566
-:011500f5753f9b37dcee57d2cdaa813126c873
-:011510649704602e7a88f422e10a79d57ceb78
-:011520fdaaa2ed6ddc0e46193003c0d041e5e8
-:0115300b9d318ea8de017e0e1d0099d0459977
-:011540f768b4ee3f2d6f5bb26a772bc8222034
-:011550c499fe4cfc279fc2e66778b22d1ed226
-:0115607409814ddf40776356297a8103da6b72
-:011570b0c741c5cd320c44d2516b442cc3cfe3
-:011580339f987abfcd34e0ddfe09b3504212d2
-:011590e7214fe9fa65b88b39118e740ffef335
-:0115a0912a86436a206e2e530b5b7fbc08ea76
-:0115b0437c92110a441d563774d2b52f529af2
-:0115c056a201e1614b839fdea8fe1867dcb94e
-:0115d08da0c89ecb3e1818c49959c3cfca6a9a
-:0115e0db2060af6db4f47db556081e19dfbe90
-:0115f04004b57a036e73bd735a70c99ca62425
-:01160028e339a8065bfe793ea11d762070d27d
-:01161034fd022eadfdeab0a7841a1004b4e4bd
-:011620c31dd68a4b591b0ffd9f1efb150414bf
-:01163001d3967f5689d2ac69244c1c6b99a820
-:011640f292e7eed3c03696d35e46dbc6621c72
-:0116505b91724872cf68eeb695229057f0d215
-:0116609d32f7e43ce8e492cdbe04747750b8d7
-:011670cbb35bd7690a94ac66b1f6c628bf8054
-:0116802005f8440d36828528f3d94cdddd44e8
-:011690e7bccd843a72aaf727aded7b862173a1
-:0116a01150cad4b34fba915309e995b6177dda
-:0116b016239228f160f3e4129a22a3294703a4
-:0116c01a3f621d42ae894964fe92416d94582b
-:0116d0fa7408df5b655bd40a0469f8573c55d2
-:0116e01afd7ce29d90fd99e1bdf89d61578441
-:0116f0456ff2e94dcca5882b812b6dc7073f17
-:0117003c108956c8661f791c6df840da17a143
-:011710a17978c708720bca038a93c51dcfec22
-:011720791762fd451c4a2a2f76b02efbad9b14
-:0117305fb134e8377927c1e875e99b740fca65
-:0117408cb309489a6153686497f6988838e0b2
-:01175011e4e1da8fd0310d442c39973f2c0436
-:0117605d2d2f7b5d9b719307198b8e7c63733c
-:01177021d5ad5986b6077eeedb3d0a4c8e5a90
-:011780959c6817f60b1ee71760c1df87695cc5
-:0117902b53555a25369aafbde7b17eaa598882
-:0117a0b7e8876d6f06554897ce3b69b696c3d6
-:0117b0d667b1d4a20569f1aa4b6c3baf9cb5cb
-:0117c0d6f1c1641fc22bb622fdba0fac927a7c
-:0117d024152792b4f375a98290ea98d5f7cb02
-:0117e0ae4bfc017f2573158874777810b6562f
-:0117f019d8709e257444b7e6c067d7c263798a
-:01180072b1289842339830a155b45e8bfa69e7
-:011810a045e5c522c8860621fd4a0c5223043b
-:0118203d9afbce14f061b80a2d6b5ece2b7de4
-:0118305267a00fb56261f02acaf0ac5c46ae01
-:0118409bb03d2108d40b46c2e9d5e4534b19c3
-:011850dca3fd1328b4cc03810628212c40d129
-:01186079a5ec0987bee60570baba9b50338ea8
-:0118705d443dcfebc774cf6a3801a2292ba9f2
-:01188033e203059b376514431667147578c3ae
-:011890581ec6134293929900be7a6994b69fda
-:0118a065de472da9d5716568681220cddcb4d0
-:0118b0272a6b5122dd60182a047d054316983b
-:0118c0b3e33df8c991142f86f668ffa4b509d5
-:0118d00fe09eaf9deef4ca38f68ddb703e83ad
-:0118e03b4cc93c46b6503f977486c69949309e
-:0118f09786bfad7c1ebd8b7c161dfaf4f33444
-:01190025e10d99ea930f3cc4c6d249d11215d7
-:0119102bf18ae9090d17aa73270a2c760b23e1
-:01192039f972d90015b1bcc652ce733e2a62ac
-:011930aa19d586bd5102a3871d309892e024d4
-:0119402454e4abdc28371dab51e98db9d06814
-:01195094b7560c85990df1c8941e892a06b8f6
-:011960361498c98ec33e8da15668add34f8575
-:01197048879384d4f2bfa7444d289c1bd5d075
-:011980cef1d50498ca8b41522667a6eb424d86
-:011990b8265e462eee39fcc7e5c321f01879b5
-:0119a0f141625cf10f125644bdf9745263e59e
-:0119b0a3089b71aedb6afdee5c9c83755d1548
-:0119c0eaaa7b54ac982a85f067407d3d06bd4a
-:0119d0b24704bd80b5c2242e726d436ba13868
-:0119e043f96bf5454e26d526dd14eb8752afa0
-:0119f0c40648e5060c77ae924e7363c1b6bf00
-:011a0039098f0bb6ec60bc52537a33aa76863a
-:011a10aca11922c3918ee9491bf7f1f171a835
-:011a20fe5620c6f1dff08428f8501bc4a35daf
-:011a30dcde0947dfbf04c439f3685b55403329
-:011a40e50101949be1aa45ab05d97c2a46597c
-:011a502daa1ddee828bf4cc03c1d77fd0759a9
-:011a603d6a7a54ff5ec9eae6dd28064a0915c2
-:011a70628f8985e277bf0a1746f9a427c811b6
-:011a80aeb627339d95b12d2313d7825ecf220c
-:011a90f58063c36d3ce81f69cc7dcb841e9b68
-:011aa02f99ac88c41c247d42d7a7069ea431a8
-:011ab0ced8a48edbd2c7152aac842e976bc461
-:011ac044a1c8cf15e0e7dcd71856253368e0a7
-:011ad05449115d659eaa8daf8ba1d6422b1ece
-:011ae062a8fcd308d0832d68dca16dd892e854
-:011af0fa7eada59bca83ad2bfe9b62595db187
-:011b00e7a425e84f704d8423de8b00927d11fe
-:011b1053bb2ea8e481f948b6ea294f9f559ab4
-:011b20cdab4b1a530c2a89c7b443130aa0a3d2
-:011b30726af7aa26a678c37287ae798ac9b90e
-:011b40b5ca1745a3da9b38cd16f010b1cee5f9
-:011b50792bab366e65e279b74a11c99aaf4242
-:011b602031c94b70dbed7908186ec2720f6e23
-:011b702aba3ac984fe2974aa5e7afa224993af
-:011b80405e8411429114d68c4a17365ab042da
-:011b90c6527d85b80cd23b26c8f9c30f532236
-:011ba068ed6c0d3815d4b145e9c33829142a13
-:011bb02072cd822fe235093430e2e2c1eba88d
-:011bc0be3efbe34c64cb8bb64548ca3cecade3
-:011bd0f91d44cb895287cdc09a558b65454b29
-:011be0bb9658bce5b18543f099bfbe5d395d68
-:011bf01871bb796b5d6d1251a600728178e2c8
-:011c002020afd5b30e9755ccfda345cb7344f0
-:011c10e7b0866b5c0dbd3df389278a4df1eb7b
-:011c20a37bc6e6631c1deb3e80742b87afbd21
-:011c30a685840ca76d353bf86e74549d9ce81a
-:011c40bbe6dd0e297bbb79eb0d22538eb8e130
-:011c50077cb8784abb22a5445f01b4f025d3c3
-:011c6007715ce44e93c0f6d3ffd5beb854d414
-:011c70e221b724a5390d5d4999fcea3fb7a75f
-:011c8025f8bbf48d9b0c1bc1d81b7fe8aacaa1
-:011c905845e87501599edbb03162c099ac289d
-:011ca0ddabadb6ce69a50c89c7df32747ff5af
-:011cb0d08b0249fc486a947431eaff0c512dcc
-:011cc0a4903874429efcd7937036e40eaadf46
-:011cd074583225852d6bd1d4ffce4ca2ad3e17
-:011ce05cc3eef980c0b515098e97d10384337b
-:011cf02c181d153ee0d866b268457632a76a54
-:011d00e6880d2dac6b1be73ea5a5c6ad6a3ce9
-:011d10c6d03cd311e47824343d6e9f407fa175
-:011d208d05d20b42baadf7db5dbec2644f60f0
-:011d30828804a04098f24800683e597406e582
-:011d40e809089d2b0a330a63f64904003bbd82
-:011d50719567521166920c902ce343f7681821
-:011d60396fcd0ddaace1cdd64b4f4dadc68da1
-:011d70395496fdc2744b5bc4766b4e66b5e8aa
-:011d80a2c23b1b04ade44c619807c96181f1d8
-:011d90eb5aa291e4635e2c9279f69f9d9b82eb
-:011da05621ed4c5f5204829be2e60546b9f296
-:011db0b985e9706e15459e8d7d40a3cf426a61
-:011dc067e1bb89fb5c49162557a314904bc7a2
-:011dd0fa78683f89d0c6d1e0c13927335eb571
-:011de0b2e27ab4e9dd970ea707e32842581edd
-:011df053db000edc5d7681bf258f103dec570b
-:011e00244b3abfda22c6a5dceac948dc46e5ee
-:011e103b4cc38efca66f6a5c26899ca4c84a5e
-:011e20ebafcf0b2cf6a16ae3fb0a7df0b859a8
-:011e303e595b4ee831b5a3434c4d0f23989c95
-:011e4099f91e5fe65b22f8ae1308fbeb4ceb67
-:011e50ff2e3d7d6a70421e73039152e398cdf0
-:011e60204c834a7ae98751e3d280ab1feff9d9
-:011e70d95848c289fdc6f86e009122122ebf9c
-:011e80687c1149d0afb3e3592af6160112db1d
-:011e90233a8f16321e8cc2dc8a3a7cdc9c0602
-:011ea00ddc144a025d017580d7c233ff84fb70
-:011eb0f7fc33e88d4717179346af5cc6b83771
-:011ec06db9cc69581c681e27c4f3d2e26c4c33
-:011ed0f0c8247c126320563315ded1991ee996
-:011ee0e7e573cb105d8ca0c5dc2e2981cacadd
-:011ef0132621ad1d17e6da229e4b29b29c210d
-:011f0048a17eef013c7180e5b333d49aeda7f8
-:011f1058fd400775ff9512d1b820f7faea3380
-:011f20420513d3c7462e7f4b5b809127aef448
-:011f301f890d523a36b8b352ac46a56cfa202e
-:011f40c8552c2456b32c5d5756ee855d54ce44
-:011f507d5833757ead4663ce822c9a62b60394
-:011f60592656360b4655fdf3599814b1391c90
-:011f708611c93ab88bc9947faa6819474db2b1
-:011f80034422281ce4dd884b8875a556cfc601
-:011f9018960c3bbf98eeefa51ea7120b52c8a4
-:011fa059e9ca2efb5cdc1b93c254a935e58922
-:011fb0f824f384e204d08060c982e7ebfb27ab
-:011fc056919a400470331530aed0b5f6db5501
-:011fd0d47f0f45b322e49a6e5ec6d9b4c7f5cd
-:011fe0f329cc2eddb87a17cb6a23190042840b
-:011ff053d6fd15600b0b31c4861ca9f3caf7c2
-:01200060338717250189f1ad1bbe5b2dd89034
-:012010d02fe04f6773ae32db4cf46b4b81cc26
-:012020a43700e5153cccf020a77c0436237c1b
-:012030e4602be398f594ecf97a0c3d316ec288
-:0120400854828544667813e4e29c38bd29b0db
-:01205018b30d14c54ef505c144d58661448120
-:0120607df3173d27ffe166ffb54685a312e920
-:0120707154534a575eed638d026087ad2abe8a
-:0120801aed9f5e179591b7f606b3f7b5483be0
-:01209014b11f1bb6b91dc0dc1ccbd0c3835cf7
-:0120a041c4a772a986ee0e522a7769fb00dab4
-:0120b004db330fba28279552f0c97ae719430a
-:0120c0e818415dbf855cbfd784d5a9a605533b
-:0120d0ce6d0c7b07596aaf0f114fc4e6afe566
-:0120e0de083e3068e66015ac596125218eb2dc
-:0120f09134c17c3b75a3c796ccf56cce282dd1
-:0121003d95bdbf903730feab9eb9341c07fdb9
-:01211096ef358f0b2222c40905029f587da91b
-:01212062cd31ff39308cdbd3b9346c2c4bbfe1
-:012130d1ddf8813cad7d0a35907156cb1d4601
-:01214090845533de17ddc1a7c0c40f3aaabd5f
-:012150ce2d26951578aa21e34c68d08059947e
-:012160f3aeb3802f4cb65b9c3e557dcbf2b919
-:01217062c2356f09d0603d91478686c28636c0
-:012180a9288e105cbc73caad328d889b97a3c6
-:012190c85625022f54d62f8cac36b6dba91569
-:0121a0ecd99f9e552d4eaefa66c25b6e92c9ad
-:0121b095954a8ef334037745057e4bdb6a1d12
-:0121c0e5df402a208e6873f71aa5795aa35381
-:0121d065339455f9bc247b5ea9fbd781bd6967
-:0121e0094ab9b82735bacf5ee15e6f1669faf9
-:0121f0916482612b8f23a664eacd7e093a4a6d
-:012200605a192c823f0a0694b729d564ff7b37
-:01221038f37332c23c411f2a9048ce05cadd5c
-:012220759c3ccd949b6cf87558b3365cf48ae7
-:01223087b668cb37177eb5faeeedfc4a57748b
-:012240f78094acf6995ebdf7ff61879884d12a
-:012250abcd096dd71d627bcc6df65f4ebb8e20
-:012260c8b5ced11e0b22c701fb8c7b563aeb24
-:012270cbb3f24397e120819ab88d92d9730a2f
-:0122804785be8e85046175ab9916b5c8e345a2
-:012290cd3f434901e4821e6aa992aaf79a9bdc
-:0122a082512f516bae3453084682d6a7f92929
-:0122b08fd0b1bc1a4e016fcf9bb30ffe358471
-:0122c043bc58f4afc6f1c0d074dd8b6a88ccda
-:0122d07d1cea1a00cb9435131079a3f1cb7256
-:0122e01d26721f41a1a017d8991664af23f56d
-:0122f0d1997aa3d7cdfe37e21a1ef1aba7b8dd
-:012300b97c2f677dc051d7c8bfaf1c34958f91
-:012310854a101dce5e5d607379dbf7f3830ca1
-:01232049cf3ce30bd531e5ff6166a5cce5fdf9
-:0123305e8ff09361bc67ce71a4ccc1e5079d5f
-:012340f3684fe46c609c07b8967cacc025cb25
-:0123504fa313e8fadd34417fabbcb45ec6792d
-:012360a3481b9ab594c3c77c7d146a375ece2d
-:012370b44ca46eceff16f4b64d6d09f071d610
-:012380b6841c759a3bf437f899375489a457ee
-:0123900eaaea0d1dea27524456e2395fde4643
-:0123a02718d548d928da84b30653d9d92ab151
-:0123b0cd7da9cf731526d75550275465fac3b4
-:0123c069784cbcfd7760b6ea7c1a5b57e76fd5
-:0123d0fa5aa42423504212ea5c4203a8d7bb7b
-:0123e09dc239a79bcd97906fd83c56d3105193
-:0123f0cbbdc6b9f1f448df3118af6e2cc3771f
-:012400b04d24811ed0b3f778ab9396f76f6aeb
-:012410e041ac0d98ebd1af14249da630ef1378
-:01242074446436e2ed33e8c2eb72089b84f7d4
-:012430fd8890372ed5ef7e51023ef953cc6bb4
-:01244002411dc31a59fc0118599ff35fae45f4
-:01245068a510b3352641a6831d25d21a6a81ef
-:01246014e10a13ef5c9670ac877f99e3df9d57
-:0124706a2ba86305be1ac350f7092e7580e340
-:0124802b9ffe148ba3fbbf0a152f62c241f899
-:012490c2e5df63c86d7a9f0c106148219f046d
-:0124a0a6da844890ded2ec309bab251b7c3a3e
-:0124b06fd9df848575a579adb0d371f263a3d5
-:0124c057137b19dfcf2dda7dd0fec98d68a1ef
-:0124d07ef13ec8bc0a680e63670cdf3d0345d3
-:0124e0529ad3efcf0e841c400dbf0471542b67
-:0124f0259eb0a1f121951c548b82a356161ddb
-:012500587faf1a9b5ac9a9824726c96f6bdb8a
-:0125101ec9f713561cd82b7c1d9a00c222f638
-:012520c67b635fd11ab49bc2e9b8f2365d06b0
-:012530ca492accc399f3f7f2762bc3dba1765e
-:01254064d5e731e41c6d5500ccb757402c3bc8
-:012550fd5287fe9d4438cfda3ea2acdeaaa201
-:012560f08095d4e1f45b547ead9c30ad6044e6
-:01257016337491ac8bcacfeb98d44704c9db17
-:012580dab121a1803f4aa2ee479a91e65dcfbb
-:01259012e4715d3ce2086c96c8680fd49184d9
-:0125a06bdc20a48aa2e17ca0796c2499f2f5e5
-:0125b01db20620e25217b8fa59c7228d6f9122
-:0125c03d846a1de5ea145db138cdc9ca331dba
-:0125d02777d2a02f4cc90c9abd6227b900ac92
-:0125e0263869374164ece2067192d8cb38d91d
-:0125f0716023e82e25f48fc2aecaa040dac38f
-:01260010160178dfbafefd99d37fd7bb56cf73
-:012610d79a362acbea718d4317aef3b7c40d45
-:012620d548347a0c92fbb76aa4dba13b93e789
-:01263063a2fb554ee9b60250a4baa776ada12b
-:0126406063b522492a66a229b5472c859d5fd8
-:012650f7ba6e0a942d1c00a75d5900e30218f9
-:0126607bd8ef83f91fec0613d7ce45ca84e65e
-:0126707d63f46701924d4a15802f8e8b643701
-:01268016ce26bc6f5d2a311c9400c7a402f72f
-:012690bfa7058125b2d7427e3a2ee0aac33c30
-:0126a0ccf52895df71afaff08b6460bf5d9eb2
-:0126b0ca6f92774bb24141f1da195242914094
-:0126c0944b73d51234a5518d502ab8fa59f8cd
-:0126d0eff513019914516022d6ad1750609ec8
-:0126e01f229df987073ba96fa985e30ab67a20
-:0126f0d5e8cbdca8aa830a07782e7f26934310
-:012700e2b77945f559b1331ab63f30cc3e324b
-:0127104641da42164e65e025b4127c3ed4b925
-:0127207546236aa8714641c51461a1b4ae8402
-:012730f494a3ce1002139d40f3e7dc5fa2b26e
-:012740764443c69929520a4a87455e01a65b2e
-:012750fdac379e212589f3ddc040332e0a006c
-:012760b742868ab6b12e1261d83c95f4aee3f7
-:0127703376e7c73f84bc36d8a83a4157781fc5
-:01278022199faa44e7aeac7b0ab7144f4fdb3b
-:012790a105946af846412418cd746c1ab95e3f
-:0127a0b943017ab04a5ee1491e829a13fd6b3f
-:0127b01c11da0dd928c984b4234608e00ec129
-:0127c0c2d4874b00f417e177c9d7b3ba5a9c00
-:0127d0299b6136819ef1faded6cb7037bb2bd4
-:0127e0e9a311583a85efeea323dfff1405f513
-:0127f0b63f0a87f2c45a1e04c35179566275a5
-:0128004bfca95aa1491f53c52f648d4dd1ac67
-:0128100d938c77a82ea17fffbe66f36d5ad8d5
-:0128209156445b8352d663c6d0f939bf4c577e
-:012830a5ef74e3a0b61e4fc3273e547df7ae64
-:0128400cbb4a2956133e754639fccc5081bd98
-:0128505a72eee1756f23e0d94a23a53c92d1da
-:01286011a24ae504ac54f3bbeb3801ba881a2c
-:01287018cfc11dbd20033ee550fbbd77829a8b
-:012880d7a9887194e201d20119c94d37903439
-:012890c705b4cdf9d805c2c03c3837ba9992fd
-:0128a0c12d5beafa8d742bbf3c541c37377b16
-:0128b0dffcc27dd558d0373230f27547471036
-:0128c08338d99cc80a678bb281ea754ac7ac02
-:0128d003503e1fd3572fd6b3b88e340af9ed3e
-:0128e0aaec6468238d270e720fc3e265b596a3
-:0128f0ba47954b31d1a8f0483c4ac3e0070de8
-:012900c9326f773bf1718c05847bf5c2269ca6
-:012910d434c75424bdf0dc5b233954b32a239a
-:0129204ef4d9ca35ec315cec30542746593048
-:01293005335307511e8b0f64f85e0b095ee6a9
-:012940f53426a12f2c75873f5a96e35930175f
-:0129500d049efdf1841e80bba5c7036d05ad56
-:0129608a21909369020939b2592ffb7661d574
-:012970c569591898d5f5e37e6ad98006a98334
-:0129809b37a43a2b20ea834c0c4aa6cbd18ad1
-:01299044ac401b040ef32d6bc98e54c2069a30
-:0129a03f1971605321dd3dcc0047ad2e2251e5
-:0129b03923fdeb026745b0fe82f4aa0a3a0c8b
-:0129c013b65d58e30866002c36936be583f3a4
-:0129d0d2bcc04200b3f2e9835a839cc2cf079b
-:0129e00230a97ebf6ec50ef900db9737bc6104
-:0129f02006f065fe5066bc5933d0bdcf7d88c9
-:012a005b93610fbee28f861b68d013952c5a97
-:012a1091670c8cca371cfbeefee441a98b25be
-:012a2001eeb96cd187c2cb438db07f1db57e14
-:012a30b1011d31522107f93b6db8e04bcced7c
-:012a406213d9c088245324d8d562d5cea24844
-:012a50b24f70b619b37e0fa3a0f8602622a1c3
-:012a6007debcf6a568371a43404e5c3fe61e33
-:012a7033717307ead9d002662469f300ef8dba
-:012a80df8601b608e71ffdabafb600f7099f6e
-:012a9038ddf22b3cb4926c71d614ce32104300
-:012aa0986caeee79fda6ba34168ba3e06dc858
-:012ab0c0704bcd903cb0eff897ffeb0f13879c
-:012ac0606a101dfa5709a4fab5289b86d3535b
-:012ad078711e4851791c23d00eb2442aa49099
-:012ae083a4aff7aaae5a3b8cf9e2b69f142055
-:012af0c4395562d0d1f27737ee8cb5cefc5fa2
-:012b000c0c2998a634f4e16307f854c9115312
-:012b107ae1e120d0f3b76f733e1fc7c13427d5
-:012b2051f4325df475668c44ce7d80f00db091
-:012b301aa49bd68942984f310d23691e6460f0
-:012b4090c3ce4dc25ee4452b7ab372e529f228
-:012b50364206c8336425d2cd78aaa4ff8c461c
-:012b609bd3f9b320253d85c04a731f81f263e0
-:012b70c0fca0f50962acc7633a975f071eb18c
-:012b8042ccbafdd46ecfa74c4479b032036200
-:012b90abc0a246736e3f08d5d651fa16d2cf62
-:012ba0bbf08f1acb7f2fabe94985c4adceea62
-:012bb0ba0a69455e2f2fc8993ac2c498fe5246
-:012bc07f63fd4bffadfe571589b786d6ccefaa
-:012bd03d37827ff47160e24c13aeafe6c1cbef
-:012be0396f4661334773e0a33d4a876c2a7759
-:012bf0c75fc4beb267160cc74c45e8e462c2d4
-:012c00f2e01a54c4ae4732afd566512afa0c9e
-:012c105722354dcc240f72b7d16ae33e26cb1b
-:012c201e7eab4b71ad3e10db96b3c45d9279b1
-:012c30068350c80926381fce1c7c3a8435eeae
-:012c406db0b59690b1b7ad43c4fb6ce0defa35
-:012c50f3df1c6fe30c530b1bfbba29b8660b43
-:012c6081248d74c2813dee15a124ede1cb9391
-:012c7034995952caee1e843852dcceca2cbc66
-:012c800967995209e327df15d97866f994f278
-:012c90a1876bd9957b071f176346fc39f2ab3a
-:012ca02b5f6a61a91ff22811a9b4781d8bfd52
-:012cb0fe33c8e4671c0ead79b7fe8c68e1c6c4
-:012cc09e3f12d0018653da77a5fec0aa0fdd13
-:012cd079e2b23dd88935691208ee5673001890
-:012ce09b81e0ed83aeebc045f9631805475503
-:012cf0cf93b5c5f9d6def3be967844658572a1
-:012d004cba546b1c04b4bdbf78eb27a0c5e416
-:012d10c11b274f053d4b88f38664df851c5940
-:012d202bf4e9bdce8633366773c1bbafe6944e
-:012d300587df358363e946e9381d255734c153
-:012d4026c61a4187d3b5439db1c7dc101530e1
-:012d5014c461f08414c66ec59b1b8c84dfc068
-:012d60c4953e3ab710f1ed5a034ad83d70e347
-:012d7067403cab8d06d10d40c3d52e4d410ca8
-:012d8012102dc1fd1bca28f91a7859602034b6
-:012d906e4e51e9a684bca93107cc96d27532b4
-:012da0547a7ae0a3a6652e53f349d9ab8c14fd
-:012db0f1d29e90125652639549e72dd9d058cd
-:012dc09257f7d428d974f68481bb95bc6f67c5
-:012dd0deed8178397a4cd9383652f7b6ce52ec
-:012de0b024a6e5db2e59cfb85323a4f9ac0b53
-:012df0fc5494b25c9da770d5450a1904accf6f
-:012e0090a4a92081df17127ff0472fddd3aae3
-:012e10b7be57f7ceb5bd44ad05ccc5f59b1699
-:012e200ca19f6c1fe3cec0fcc30d359d0b45f3
-:012e30455cf805302ddc0c9392e91c5163bf22
-:012e406aea534bb6249692506f6973c3ff64e1
-:012e5056959f69105947cbc7872cd915eef5ee
-:012e607c06fb0744c4ccbb8cce58d79be01934
-:012e7025485f62b29a42b09039e5a29f3459cd
-:012e80d6693fe680a5956b259d9b39107a1336
-:012e906cfbba2215dafa3c57b8c001dbc3c88c
-:012ea068c1af6599f9a6d3a131a8fd0b708af3
-:012eb0f7bc1de3694a8719d690b8689f62198e
-:012ec05d9f897b6ca1794ca5617a0d63cf9cb1
-:012ed0b547ee2d86e1f791c2a872315f45dee8
-:012ee056463f76f6913b8582ed8f1cdb7cf010
-:012ef09608907d2bba39d25d442b817d95b6c4
-:012f00723c779e48194cbf0fd979ff7cfdb056
-:012f102fbbabc4ede49948d9d15ef1f951865e
-:012f207aa35677246b00ad62c2f1f061c23926
-:012f30e81f59b08dc83d6e9c539c1afbc3e671
-:012f40c0474f35b9737cc760c42a2620f38a79
-:012f504e55b954e070e6f6d93a53ad74216c98
-:012f60272173116d6dbd8df40f532e79781e4b
-:012f7079af74301d91d0e551f0ba88d7528530
-:012f80118f5364cad4f8c3aea4e280206fea0e
-:012f9003f770b8d53481bc678ed4a629868d03
-:012fa0dc61e15d83bf2c0a0c77ebd507de4790
-:012fb06c30d5248a4355d6ac51dee06905bf06
-:012fc0a09f7af2fd86dc36c44f29e3d99fe75a
-:012fd09552a6556be8bd051ec89fb1add3b35b
-:012fe0c511df2135380862b0aed59af2775885
-:012ff0a3e8d2a50e5c1c4acf72f06abca7d7c4
-:013000b9607d8372bdeec690a9ebb2a941e72e
-:0130106a2fa1625798e985c47da2fb1923350e
-:013020b67d8d2e0cec3b10135064226a2d1cec
-:0130307bca5aa9d07ddb344ea79b4e9a07a2ec
-:013040605d5408c98de4007970df5823fa2177
-:0130500b435c5b6df9ddca5eb15591bb40e31d
-:0130604d28a6b3d35867bb36720dbc7d4bee43
-:01307000eab0ec401a301451b0d380ce01c9fb
-:0130805eba615be55bb1ef7405f38bf8c9a882
-:0130907f81897e49ad1c14c62ca9fcde8772dc
-:0130a0f9d699b95817bd2a276436edebeec2f7
-:0130b0031e08507359cf0c10ba8c76364d648d
-:0130c0285880e86b6f10bf67a72896ee97f32c
-:0130d0fc30dfd13504f812a4c623aeb5df4fe3
-:0130e0e38752a1b2761bfc615f3f169f23d393
-:0130f0d4fdc5f39d1e59d1496b23f115be727f
-:01310086d38035cfb123ceee8f651228a5d5e4
-:0131109de6cb3613f678df0a7a1fc5d503f588
-:01312088fb9b2c88102236a86f40b54ae134a1
-:0131300fc0ec96681de8c7a667cccb839639ba
-:01314021bfbf0e7e9d6814c01754c3f425679a
-:013150b4f1e1cffb0758eed04d413b3b1f32d4
-:013160ae3051dfe642d896d75f9363eb4cd4b2
-:0131702c12f11f99d92e917488ff233610e9da
-:0131809360de9f437a509267537b364296415b
-:013190174463563882db423cc5cef33ca74de4
-:0131a09a9a563032dbbe54c59a2d8675bd485d
-:0131b0b90708f50c90e1c7306cec64276ca1b4
-:0131c0ee66ce6c63609d8668ddd364d2224ece
-:0131d0b301c772d3ac8b0081f61ba7d176f85c
-:0131e0374b7ab073ac1e988c1240e4164f59c3
-:0131f0d8a2a7135fd589987383585a3538cd4b
-:013200f4db633b272440f64b9602747db2d531
-:013210f78c3210d70dcfc14c296fc922811e4d
-:0132205e247c90146a71f6f5ff8e082e9a1d92
-:013230451df1c5ebaabdddb3be5c5f0d0342cb
-:0132408233c4d4f5982d30f5c43f4565d3f1ef
-:0132502ee3844b74db80a13bb2a62aa1c85abc
-:01326031f4e3095be7041f7114cc9b64fb9fa2
-:01327050558a40ad27096f7283c298eb9095b0
-:01328073942c9a208e45ac549969b219481bd0
-:013290db0af46e072bc26cc28c2d4d56c33703
-:0132a0a2c16276efc6b13286988454a15769fb
-:0132b0f708c6e044a558acb1572188e7878af5
-:0132c0988e6a0b517f33ea43b90327d2adb5da
-:0132d0c020359e2b3e1e663fc741777effce77
-:0132e0245ca3b0e840ff6992f29315b78ff68f
-:0132f048e885b0496e7d9f6fd1e17fb227169e
-:013300b10894123b048ca1528d5b421322d7fa
-:0133104a03f63ebf71325f54a18ea247db5a78
-:013320cf14a707fee038537a7632dd23acbb2c
-:0133306cc2e799332baef1b07c5f0b36b020ae
-:013340f639ce9dd0eac52a992d10246038e876
-:013350e8a0456cdb97a70694efc42994a0f75f
-:013360237c0cac7bf8ef2bfb58fff8c1bb8ec8
-:013370436620412e69dfa27e167835853798ca
-:01338003aae3aa9e44c058e0a21225d726211f
-:01339036f4a2ac1e52a74235c21bc7fe01ca3b
-:0133a06aa0ecd52761098132cfa7f50cfb2b90
-:0133b009fdc2cdcf4c943cdf24635948f6baf2
-:0133c0cb78ad4a750354c95006ebc9f5eef2b1
-:0133d0b9c691e835b1dfc319ca5f68cdafc589
-:0133e06070efb15a6b49761866a7e08ac813c8
-:0133f067f3df8de350395b3b706b345b650d87
-:0134000c01775d797437295506ebe9ca350139
-:013410c2a028dbba86b439e6bce5cc7ee8f96c
-:013420a35f02f2a295a56376d5d9a175d85b92
-:013430ed6e1be163529add7eac73abb1ff06e5
-:013440154af049e588ec80e21b7aa8c920800b
-:01345068e3cb51efb6bea04dfe68faaa81326d
-:01346074d35c5df0788dacdc08292055842038
-:0134704390166ffcdd0ba6ea269e2c1869de7e
-:013480f3a962c48cf950716d2792c5498d37f5
-:013490c49b9ebfdd2da86fa9547af096f0d5e9
-:0134a0a76375cf83862e93887db8869cb70792
-:0134b0149ace7d8fac57655c56691f8a082c6c
-:0134c04dcc48dbd50eb5fffc6c1241e2e27ddf
-:0134d06a390ff0fbc0cc405073a042da05849c
-:0134e01b16ad837bead7525db97a921375cbae
-:0134f076d40a3ed8aa2bc37feb3971e31112ff
-:0135008545475fb9de261d69296cec7313e287
-:013510b3224c14703d25e4f9bc9475a38c0900
-:01352026f3d60e3afb6f8f8eef0c046596a66d
-:013530b6c9b44338d4d95647f869e36e7b11e3
-:0135406f081c4bc4fe34a2c20c716e1af85428
-:013550d3a04ea19a00a2bb14cc7e76ff6a8b4d
-:0135607ca39388cf93e35e5f79e89574e3c8a2
-:013570ac64e8e29f3ce327eeab527c823022a7
-:01358040de3f3b6df283e649f57081f0e532ee
-:0135902974f36413c7dca2d446ce6995e6f380
-:0135a0d186ce58cead52eaaf509c1a868a8d19
-:0135b057a373159a1a6639f5fe07082e922755
-:0135c0ebc681b9e8d67c04b489225bf52e4ad8
-:0135d0bb8c0700ad9d1c45c561ada6b01b915f
-:0135e0689f5816bed667a0cd72fc0b7ca84959
-:0135f0e8a4eae66007cbef8a4adbd6ed5e7da9
-:013600e485b000dd37eb1988e0ef3d2b191423
-:013610c5e5582e00e84c2eb3c480571071ab9e
-:013620692908f093dc88fef5749d96ede0c071
-:013630bef743567cef6b06d2695ae32b9905b7
-:01364003364ca368ce1a7f1330fe28c365e6fb
-:01365015c37ee622cba8853a0e4130f5dcad96
-:01366075320852dd1624a632b0912ea2d93d1b
-:013670dcf74ef54ae5db9fce164c6ee924bc9a
-:013680e880f829314dbb46fd733e5bcfbdcefe
-:013690ebd7e2d008fa0d5fd541f7c96e92fefd
-:0136a07712764376b06264d983cf74556a2bba
-:0136b041b54539d206631ceb8cc0beead68061
-:0136c0584eeb0a04a6295da73745f203f2512d
-:0136d05c4a5102067b8d1e17c04bf408aa42b6
-:0136e0120b312643e18440027f4380076f2c3a
-:0136f00f593821b036fe697c1a779b0f0c5fc9
-:01370011c2648ec3230260187fc3548e3cd629
-:013710ae5532a9b040206282f875400f7b197b
-:0137203b93d03dac4aecedc148465dd088a310
-:0137306dbcf3bf57e30acb2571f6a346da3b8b
-:013740259f860286645853caf7100e71e2b842
-:0137500902405e814150deada85aec73637981
-:0137608345d1088cb7bc4fc81d310398cf15df
-:0137701aa71ab4d10ce8095bdaba1636278f18
-:013780da1dc7931d8ab0502b58a0a4c1485ee7
-:013790317ade51ca14f89c895b7726bbde8e6c
-:0137a07c79827d2c28f4dafec9e3edbc075ca7
-:0137b037dfef1fba7d1eb46846924f2585bd3e
-:0137c06381e900b2d98984ae0da745fd505e53
-:0137d0484a2035b6de2e59a75ecf27cef43c61
-:0137e024b3dd9a8544cb735404922281c42481
-:0137f0a431bc6b21f13e55bec72147c191ab28
-:013800c1828f64254a7bec19d5baf5f82b0c88
-:0138108ece174216686d080d3a2eed635930d2
-:013820928d99dff71192747617e3896a904afa
-:01383019acee7f8c41b3f9533637d083e6d451
-:013840ca4c8b1d32f424a1c1c759d5377bdd4a
-:013850496c46fc0a3ea267bb1abdad096ae12d
-:013860aa474bb8b259570427d0566837b69c99
-:01387049099efaa8df9c6b3701c08e703af273
-:013880b716a81b8343ea01e5655a472b5ec47a
-:01389041c61f5912df014d69336f3ce358d4cd
-:0138a0ae98b62e49be0ba4b66ea2582aff3dcb
-:0138b0e87bae476f38f3a99fb92c6145301d23
-:0138c0c1423070eb2e9a3ca320d0bc91c55715
-:0138d010066d031e36e087d07c364865d8fb48
-:0138e0c65968b6c45a44d2021e2219e8d80025
-:0138f060ee9b4867d11a6f63555b7ab7ea848a
-:013900744b65c35cb63753992d3d0e6c62cb96
-:01391006aae351724a9e3f711773379f558fdf
-:01392011dbfa2feae68e2e5982428e946a770a
-:0139309e03f7d55017980f65eb5b01e25914b0
-:013940933ee49cbad2145f2f95774b9bbf34a2
-:013950132b351040e0513f6d7f544e81377e79
-:013960ba3afcc37e8b193fa98a70654886089c
-:013970d89419cdf0c028e5e74f524b2d1921be
-:01398023a415e06ef95f2ae778a3eef1bd940a
-:013990e0dc818bcff64f40fcdf07ca272df028
-:0139a0a0f61ebb8e531c178b3914e17c63ed68
-:0139b06486a48e3edabcee123247ed0e32bf4d
-:0139c0aa7fcdfe269adef9f17848c4a0a5cd4f
-:0139d0ebce93453a08b7cf009189d0a051665f
-:0139e0cf9261426ace8ae5e324dbef7b078f69
-:0139f04209f1724a7816732b5545860146a688
-:013a00b082784a5115e62a47da4df9037fd4ac
-:013a1026014f3cc9cc8f429e35f9f1b51dff8c
-:013a20c0038c502e3b32d6736f4bc61dddcf13
-:013a30c7e45beabc26973344cb826fdfca9598
-:013a40c3cc2df555ccbda49d0538439cc9e968
-:013a50bc561eb3276fb597018869eef1a337fe
-:013a6009a1da18fc7b47e1e079047d27b96716
-:013a70334aebfdbf24575e49d996b0d0fab5e0
-:013a803e00646674bbdb94d6c357a76126ffa5
-:013a90cb59e271c50fd59c90b8c2e5cf768c44
-:013aa01f5c69a035af124a291289e82232cb26
-:013ab00011a2e357569baeea55d6569d15ca22
-:013ac0a74861e5cc1c71eb458c7204f7542f7f
-:013ad084b37aa8cbd6e14e7c54a387102a1b1f
-:013ae06344a01f7b3d541c64632ab371824cc5
-:013af0d338b11400e72b24ed90fdad1716b222
-:013b009d88d6c37199179d7fe47e9066adb899
-:013b10ef10003cc3ed01ccdedd909ef696e246
-:013b20ac1279cca457025900c890eacb283650
-:013b306f230ad2a0dfebd712d7310c29d85dd5
-:013b400bcb39280798a315fbd61dad2d7b652b
-:013b506a9adac95985643fe824bfdd063590c3
-:013b60da2087160e412244a9763501829153b6
-:013b7040fd032b8d7d8a1545994cd62ec7163e
-:013b80e277699feb300475be728cfb20adc52e
-:013b90ffbf4509f7c26df23ccfa7f1d0b80d56
-:013ba02bb776bd71fbcb2cab4582337823e8ce
-:013bb02fb26dec788546d5cd602b9ae044bf53
-:013bc0eb1c928c4d42e8ff13a15692eca8f792
-:013bd0f914a89e14613a640d0d9a7dc34b96c9
-:013be00b8a3d2957dffb38aef274c2eca2c082
-:013bf09e7356f3539c7532011d60423e3553a4
-:013c008a28e77e9d8b829c95f657e6fb61d467
-:013c10143092650ac8d148aadc7e25d3c1a884
-:013c20419a52dd142c66f4ae7b8964b4f68955
-:013c30608a8f565ee1c414e5285ab6a7959227
-:013c40778bb7c6998df9b1cd5908419c727d3e
-:013c500a5370ffb36b7d1ad86f94995df965a0
-:013c6044d8c15cb1dbfa1a6d509836bca6d4eb
-:013c709025a5db79ac2d6f9ffb99eb39989c99
-:013c803451bf0e5eb326e08e873433ccf8dbdb
-:013c90854bccb300cb13ac09bf438db6cd0723
-:013ca0eca8a3e50ed11190b7aba69d6c728fdf
-:013cb0b23e235532656ca9b52b34ef6c07ca3c
-:013cc04b91c5d19a64224a14971cb63583fc41
-:013cd0d7c22b5baa3a500f238f43e78d8506c9
-:013ce0023eb127e56ac8e772d3a6e574d4a27d
-:013cf02ff1dfa7b6975417402ee46c5b97324e
-:013d005604b41fdfc9f70bb10f50ee9397b748
-:013d100545d4a00f927234fcdaffadd60e4e7b
-:013d209ab1d2066927f631aea12082d9a0e068
-:013d30c639431612397bab69b94f7a8dc9fbbb
-:013d4032dc7f4b6a1324cb4b5747c2b4040d33
-:013d509151ef37b5ad33e7d1dfb50c6cd56d83
-:013d603272d5d4ae720cff0a47f47514cc3d1b
-:013d709a4b5265e96983ab87718479efc922d5
-:013d80cdc19f2d8293421433b89403a95ca8f7
-:013d9028b4a8f4816eda3ed74a8a569f4deabc
-:013da05bedb3e9b08685b46039e55dfd4e36c2
-:013db0eeaf16a24bbb8abec88a56a98618c48f
-:013dc061fc84c2af98a494984538a1124641a9
-:013dd076bb4ebc5936135ce449b8ce9f46e4fa
-:013de0f7ee18b1497e10434d05d7dcc687ced9
-:013df058b6ae7ed56245a22638a84a20a60bd4
-:013e007c93fd91e934db5713ac442abc78c97d
-:013e10e3bc430a2cbb7eefa1ea5182adbf9767
-:013e20f2255bce438738f43de58504857293fa
-:013e30b35bf4373bf440f7c79c8e7b123db60d
-:013e40ce27255848be606daa9187fb98f9bf7b
-:013e50955ddcd9dda556d17ec3b348be7f7290
-:013e6054afebb1ad734f2db274cf6923866d55
-:013e7040fd74c7b143b69ffa783d9834e5bdaa
-:013e802e6fd1c61ffc6a61347c4130f9907fda
-:013e901389594f39bbcf674a6104b7d48ad3d8
-:013ea046d25c1426491ef00dc4bfd95d13ef19
-:013eb0c225397de9f9b5e915b291fa9f348f13
-:013ec07b5f8cfbdfbfeea280f95c5cac4ac5ca
-:013ed061e4790ce9dd3bb100d1519c3c6707c5
-:013ee0d8702e93019cab3e2fc16dfd35eccf17
-:013ef03f8ec07692495c173b90d3425cf1a965
-:013f0097180cc0efdd3a8977791b4afd4a485a
-:013f1082db37db901b04fce44b16a4aa125b40
-:013f20427b7f3b9c3324d5f69111a925d46ae5
-:013f3040c4edaf7256e252dcc145eec884f749
-:013f407c6bb7fe9ea86c6865faaf16ded99eb2
-:013f50422bba2abfa79219e32663f48474039d
-:013f6000c74715efd02689f08e599c551a6327
-:013f70332c6b4ac56ca2bc560c4abf61b66845
-:013f80ff599cf6c382e07370974d210584f875
-:013f903992862f0aeb9061a37665d3ff201f72
-:013fa0a3e6254f3e8cde8e98e00ca9731eb594
-:013fb028ee59ff73e4682f82e03b6f6d9275fd
-:013fc00ccc756f61647617754302a22fea9f80
-:013fd0482637f0d846e4d232fc23c36e03ee55
-:013fe079141d32bdfc40eea1c04d7436b96002
-:013ff070d2853e500493905dec52b62d5d67d8
-:0140003ff1f184b6d60538e7ed1c29c67b8542
-:014010fd3d6cc08d122fad6e6a8f9ffd67db34
-:014020ca6494ed3ef21c4fa5f56f3a5d658123
-:0140306dbd16e1b4112ff4896a16c752cd5060
-:01404074ef5245db7c471b302cdf3d44be9a55
-:0140500d008bc46d320dc8006123b8214296a5
-:0140600cefa663399b7df013bbdc085c08c991
-:0140708bdfd997bab51813f61bd2f0e2c26eb4
-:014080b3838db6677079d8421b30431809e9c1
-:0140906c2485898bf732052fcb26884ebf42ef
-:0140a0b16dc8ecfce1bc65cf1bc8f01a203917
-:0140b06c1a0a390c8f49c615933d786e39b8ad
-:0140c0bed18d93545decac19ced8e838a3fbdd
-:0140d0dfc49ea366509bb377f7ef4d91b36e28
-:0140e038cdbe26bdb3bc52299dc1a1c3152c51
-:0140f0ca76c5d0cd3740ecee214cf64767b9b4
-:0141003d4cd5ec1414227a1c57b3905ecd0b96
-:014110938a476cfd1fbbdfd8e6295bd252d62b
-:014120831d4aff845ae9670b2c61a590f64488
-:0141302325aaba751df5fb6e799a33c8e9cf4d
-:01414074de28998662a90eff96bdb6fec190fc
-:014150ff41309e5e25bdca73caa7060c394689
-:014160c19c142b243964fb4bade0d529da884e
-:014170936451e901b0cd34fc483d681af0fd40
-:014180bf655eaf5bcb28da3bc0105619973c95
-:01419052a7a41cea5237cc7fb8a92593403ec9
-:0141a05e70982effd7631230b60ac9db744f9a
-:0141b0045794b3e1b7c626030fcdf5be724039
-:0141c0e7076aede4db2a4e33a1b5cb6afef4c6
-:0141d0660cff7a49806618312473f73448e28d
-:0141e031c2287215d73ea1d29224d516e8ead8
-:0141f09f22a041a8ed3b25783bb22fb0f9fe5a
-:0142002f0d2a8a697f7758f74620b3f64c4750
-:014210bbae755c706a46ef8ba9623104007bf9
-:01422002027658d900ff498c686c351d8ce7fd
-:0142305c44c98fdbb7962feb1da9c630aff4d5
-:014240ee7f9e834ad4099e9b7378db6475b912
-:01425015585efab638e4c964ba5734037f3f71
-:01426074b99d3d3997bf1b8de586eb9bb6fe04
-:014270d1301d67424f47274a9c56bff62c369a
-:014280d6e373aba0caca4f4259e0422fe6d85a
-:0142906c5ea567874853efcfcc36834e28b7c9
-:0142a04dbd364b0051659bd579bad5fbfaf394
-:0142b0247f079ddb205f3ff0b496f63d6c5494
-:0142c0f022e0a6b9c26c5a62bbd461f87192f9
-:0142d0b9f076489c82aa132f1f5ef7a6d815d1
-:0142e06ca78375777b33d8e1ec2eaf96d81e63
-:0142f02930d28bfcb084c5aeb215d76c0e579f
-:014300dcecfdcf9981ea74e89acf7ecbac1c1d
-:014310d19923c21873d9acaaac3c41d7d46a48
-:014320252676159a56120afb7cb625ae548519
-:01433014eb7d3731f055d3c34e634c64846795
-:014340710bd26391876caa314ed126f35cfdf8
-:014350d9cfc40e283872fba3eadf2c94de435e
-:0143609f588e645cfe8b68b1db5f2d289d65ff
-:0143706852ba1942ddca777110b7780670bfa6
-:014380294954e09096c1e59007fa4022ac15ab
-:01439062df6e29e25adf18bd760479bd647514
-:0143a0c0a295a9c94e69953fa771a01645b6ae
-:0143b005a467d913ad0270898977c4a638f9a8
-:0143c0f63a01e01037e8cc31145abd1f85bd86
-:0143d07c5113bf1561f8304e33b561c4e1fd5b
-:0143e082596ca81791763b6197235f91c73249
-:0143f019303d9966f9787807fefdd64eb6cd71
-:014400352d6876bafa885e2a4f252eb3ba4887
-:014410e05e79faee4c808f3f9029231003afe8
-:0144206705fc8eb7c06c9855345023aac494e6
-:01443096402143d0cec2db488267abec42475e
-:01444005cfd9493f19fec84447d5c8966a0844
-:01445097e6f606a8820b0dff721057da779279
-:014460cb99caac7860483c57b6e6fa699b41a1
-:014470ca6be54ea75032005ec972fde7cf9cb5
-:01448058ab808d33f28f5e13c0309caef1b61b
-:014490da445a986ea1e64eb28b8637992a9251
-:0144a0220370a5bb67d66fb479ad7d6af992ad
-:0144b0a89197f64373fd0e0f046b0793a5f985
-:0144c0545be9d5a0ebb0bc28c79182a7ef1c17
-:0144d00f5bc8b827d431cef13124585ebcd06c
-:0144e0c6d364008215f6f52935e2493a194cff
-:0144f07d9fa029b0e04cf19fb844def6384aa8
-:0145001d1623d490438d48b824b2f06dad415a
-:0145101dcb30bf0acfceea8db994a566edd447
-:014520b34477a5fc7ec08bdc21744379e1b5c0
-:01453051e4253d7cc6423728f39604a88d3436
-:0145405d9279f80dcadac6dfe65a963feb64c7
-:0145506c91d68519e086b49f752db3d01cbdb7
-:0145608e721af33ff30d92f1d7f9b25732c291
-:01457027bca299e2cd5187fb6c4cc186b3638e
-:0145808d8fc5838a189ef0c3cde4301fd06f7b
-:01459069ed2ce8539b17a6de5df6ff07e89f56
-:0145a0ff869d7b39318df0d547d24f0f6c9d9d
-:0145b09cda6bf5b8c891ad5b9938174c6ac875
-:0145c05172b1071c9a95f43302e0a1d28b8d57
-:0145d0e0afcfc139912f30bb7cb8a8d1390f5d
-:0145e012b535f8996d37508672a6bb45269483
-:0145f0aac7385750da78f70eee76ebe123785a
-:014600e00fb6c5a5e2998c2a9549a396464aee
-:014610bd90ed5479fd319fc8f9c144c5059b6e
-:0146209761ead2bc31f605f90c3deee13208f0
-:014630e55622e87636b71b19c1b58559642413
-:014640691fa9b76a9b69bf8b0341df0f1ea65e
-:014650050cc8a02a23f8354b06f70278affd08
-:0146606885c271a8be55a2b30b1aa9f92e16ad
-:014670ada085f6516bad5efdeb94d14b9ab886
-:0146806359d49a82fea8ee7c8058be83d67862
-:014690ec663dd3c1c9f385035e430d2df73487
-:0146a0dfd89fb549c3cceeefc31d72570f7208
-:0146b0746d28063546b8a3c9012a7248118c80
-:0146c0f45d556c3588049c2645f889004c3440
-:0146d0b52db08da876cabdad6c3e3871087ddd
-:0146e0dd30d1691fb21432dd5f59b0d7c43150
-:0146f0110d18086da83764409a2c97476237c1
-:014700bee9bf2a5d28f9d03466d646a412f409
-:014710f370289dad2d7dbbc3aa0201c953eeed
-:014720ee251838c34d05de33825706dd767fcb
-:014730541d85a3624b0e5a0bf1b3ff183c4427
-:014740d204bf54479fa9268bf45122dfe1c10b
-:014750c1b77f271f1c3ae32078788b955eadff
-:01476055bc21e61c9c5b8b2d72066b74dc674a
-:014770ce32f54e66123a20430bbe258ffc1104
-:014780b97d40ff0472fe0d9b9a24b2e8b27488
-:014790d51ef672bca0c9de382449744c6dc6dd
-:0147a010ce504042e7f5bc3d5903b42f194715
-:0147b04e061f2abe0de9e670caa06cc87570e1
-:0147c0964101ec44363d49f750199ba33ff4c5
-:0147d084dba79d74790f91b2f1300eadcf637c
-:0147e0ccc803304c5c6277a0bafeb6fd6026bd
-:0147f0bac21e207216fe5096928ac50378d576
-:014800efebf852939adcab4b0ad9e4f417e1e8
-:014810957da39cf044f1b3f9ca16a9f2b85c3f
-:014820c8ce14f2452b1ff3518c7e29f5cf8886
-:0148302e902ad610d83b8268e1c4883eb4e1a8
-:014840d59a6dde1375e10e25f4d77bc2b0e48c
-:0148504d1112e315dd5c5a2e658bfbb375e3f6
-:014860e3beb5dd3c9f3741ff40921a38d6b1d5
-:01487080ec5b9ce35c4047c04e7f15e66daf52
-:0148808943dc1eafc089f7f0256c4d1eefa246
-:01489008dd3b7ddd39ed98da3006856f63babb
-:0148a0e11adcd2194c2cf43c6a61f8f6e9a7dd
-:0148b029ff42236401bc3e0ce7b4527ae44567
-:0148c098a0f384d14ffc82ecec8d991b218d04
-:0148d0e005934f3878dcfb0361abea86408ec4
-:0148e00977b54ec1e1ac105463fc1bc9c6809d
-:0148f02b8b98274097bd699eee68924c0ab5bf
-:014900f14f6972b1d77e7ba267edb6f7ad5e04
-:014910be32292294b746b6ff1c344e8ab04d21
-:01492069ba8940268dbe707da904191017789b
-:01493050443eb075d5535f597b932842029922
-:014940258188863727ee2ed37bee7628fcdece
-:0149503d0d1ac531eeb3a00440411f002084ac
-:01496061eb4eccdcf46ec86b019b37e4ceffda
-:014970ed99b76ea2baf2905c46ee6b6048bc23
-:0149803db06097dfe413ecfc65496d36533c26
-:01499055d8ae0e737852648d15b5bcfb3c8a2a
-:0149a06426a101a6caba97b249746b181390dd
-:0149b09defadfa95ca77a48a8cdd2c09b7588a
-:0149c0344144141195f8682adbac452476d397
-:0149d0c1465946510544ccc086c00a9307bb0b
-:0149e05b9c69cf68844197cecedd1e436b3c49
-:0149f020ec686aa89ad9abf83bd59a1dafc5a5
-:014a00bd53442873bf46d772f2645e607f235e
-:014a1029843601d78cd26054267deca18be438
-:014a205787f985b2707bffd9a764854a59f062
-:014a304b96b68d426eabe2872124b658a9f914
-:014a4049d56528e791b9efcf08a169c9e8f1e4
-:014a502bff77990fd73cf99cead603519b53c2
-:014a6078a58e6589724532b83155efcc4b2459
-:014a70edce7e55e36989d7db8fbc5d27c6e1d2
-:014a80e6f09cc0aed7af4032dc404c3337a250
-:014a9010ec314c644c7b547b3a777bdd45e65c
-:014aa02e561e14cc6b34b51024adb50d8b6706
-:014ab05727040a46f00320296d682cc2381051
-:014ac07b473fd061106d1ca80951943d3fea73
-:014ad046bd7ddc0cb01c2fb1d4065c4d8796b8
-:014ae0e10f379a94f0144f0de2643b636c84fe
-:014af0528ad2ffd00185779e333ae071a6b5d4
-:014b00b13fc555e4d41f000715cf4f6eff9cf5
-:014b10038c240b4300c78a6dd49ab1b8b91137
-:014b20a541191553978f0ebef4c6708b2523ce
-:014b305dcb3c4cc39f6456e6611941276a07e5
-:014b4040e5cb58281256fe22777f5e67eb3f4f
-:014b506379af27ff493341365128439bc80ecc
-:014b6077d969f1ad6fc70afc252525854f8791
-:014b702fc615aeffcdf3a64bef47f187d5c320
-:014b80a7016eb3a70fa6aa26b9fa9e02b62d41
-:014b901ca74610a2febef8b214e5a57a6a3940
-:014ba06f679457da50b5dac762f09b07646846
-:014bb0a25a6242ec84e62fed11697e8cf667b4
-:014bc07d10e27c21f5e0625f6dc9b64decd672
-:014bd0861c766ad0162c49eba140c29235d8be
-:014be0a11b614387af6b7fc53325b9a417da2b
-:014bf0a058ce400af4169f71c0cb6a8b01cf0d
-:014c00e8fde6224ffd1c05b2225799884eb0ca
-:014c10ebf6e6cda3de1794fac1bbd72dbaf58d
-:014c208d352a5438bf51b2c63a918412649733
-:014c30a8592426836332f808f51f2a92c62b7f
-:014c407d756c3bc88ef45bb41ad65b2f43fc41
-:014c5056fdf65c3ee2eaaa4ed45e01b1667373
-:014c60275d94cc2823e43fcb305bbe1e4ee44b
-:014c70ec91f30225e0cb4081228d818c2af130
-:014c800a3df528d904c4219e530ea6f45b7e58
-:014c907e1db06808a689c7a8a7c3dcd4938532
-:014ca06bc66d2c301fa61d4fe55db42d169d0a
-:014cb093b595c1958f02a895945b86aa5bb295
-:014cc08bd5558a898cbe1ad5a140009e4053b7
-:014cd05ebd69b5cddb7b66b54af141823dc383
-:014ce0ecb66eed08a3a422c7bb84fa0b0f9cb8
-:014cf035e62afb2b04b4957b8fe957e5ae1953
-:014d0070a3fa18eb38eb0cd542ec8377b712b7
-:014d1059af2a276e40b1a7f315fc449808345d
-:014d20ba7f5ae781e078d85ec17a5ee9096935
-:014d30b1264f9e97ec92f9fa0159330b0fc4d9
-:014d406f44acb3e356d4290b69b1d211509e74
-:014d50a328fb27ab88a8c64bcd31b03e0fe9c0
-:014d6066304a9a1b959e4bdffc06aca983421b
-:014d7057923d9d1657f229065486e5ca980339
-:014d801b056caf59772f3707993e495978ea79
-:014d90ec5b295b0591e036522d767579f241f1
-:014da04f4c4f8a8424f208124a894d0cf71fb3
-:014db0d4076f92644cf9242ab741764b69e9a2
-:014dc0a731b6d74a26aebf19950470c87bf59b
-:014dd0b5115bc905a7cea53fc0608d804df7ba
-:014de023c7f252ff9cd8049e2bcbb87dda1799
-:014df0c34a17d5ec020adf78e1914570099b4c
-:014e0091ed00ed6a85794585a0e70a5bca1723
-:014e100a3664523ca73a1f407a833e80d401bc
-:014e20b46c6ce62c3f3ca1d47d9b6ecb3c35ea
-:014e302dce53add518b72604d50df00cda4216
-:014e405bbaa273bc2bb7dfec4c48c41d5db2fe
-:014e50e94e0fecda1143ec3a1e942126684b28
-:014e60a269f4ffcc3421c7808ffcf261f45734
-:014e70d5745bce4dc1d3fa89074db6b0ed951d
-:014e808e8aa116a4f670ef9a0ba04b6bde0b2a
-:014e90ecf8e2edc2aeab024144b9cf95195e9f
-:014ea029659f85937ab24f2d12403b00cf4861
-:014eb025839c621cba2cd3fb119ebac1862b74
-:014ec02197723ca35bc09624f8d1db5cab6c95
-:014ed034cc65b3b6606bfb40eff427e1c27892
-:014ee06840b63f5b46360ef203f85b38cd6f9d
-:014ef095296c1a574fe8ec187052644bab65b5
-:014f0057a74e72b64407550f2368e4c9d37394
-:014f10d0276e6143920e9baa54f1a9aef87b25
-:014f206652024624abe939d0491fec4bad48b6
-:014f3057b7d8d5a30d85a4c88efb0cbc8a3cc4
-:014f40bdb302b3649d51693c1f027d8e7a1c9b
-:014f509c7f3af726ccf331698d6562b67d87d0
-:014f606ec4c7ebb0becdb9e30adaa9b636714c
-:014f708e61e8a95cd0730ace387399daada1ea
-:014f80a503c863f87fd5be6cd38f0eab9ba77b
-:014f90ac96a3a79497c83b4541c70d2a9dd203
-:014fa022e217009cbc17ffbe8e533d658db227
-:014fb0dc0d5185c9bd4af24687719e93e3d74c
-:014fc0bd7da0978b60da6ba04d80e95d218903
-:014fd0bc42035ef27069b5411e1dcf5e619174
-:014fe0c09fca3247c1d5d8d3a81b4937d55010
-:014ff087eee2065b8e6d0a26c4347392959747
-:01500060b403bb8b14a429b2d5cdfaa3a35ec6
-:01501060ab390ec8e11f22686fc0bd383c89b8
-:015020e20a8f974c5babc48c12cd247c3d9e13
-:01503071b441b348632b16a83afec3fb922108
-:0150409277210225d7734acb953d43e011b628
-:015050909ae0c3f9682e2c478c5083f6d51080
-:01506070f3731b71a52c14568bd79c47ed51af
-:0150705d158c562fbe0f8554088e55fae983f9
-:015080aa0e9fa4160590f42db76a8985f8723e
-:01509045423b3fead8a5620334da85a66d224f
-:0150a08a16bfd79a059b55e577539c80d6e5ad
-:0150b0287faf1f50404081d468c2e77689657a
-:0150c0e9a627bb7cf8f5b2d79376a5b265679d
-:0150d05501e2dcd64428a7bb9ee06f64e81d6b
-:0150e00b20a022156d2e384b1197fc57d96162
-:0150f0b437b4cfc8b156d664d69ad3754e7c1f
-:01510000c4acd36336430a350d447d8830a23e
-:015110b82867da2940739846477d805ada1772
-:015120150b49204380b8eb87874f03d19af17b
-:0151304c2de7f631cf7df91ab024f014542266
-:015140bc825916af8e58300d1f20fe52e592eb
-:01515038dcd28d6cc671978f94c01ba0b87d98
-:015160fef78e0112a170fdc5f57a24bcb2cbc5
-:015170fba8a42f7e0ab24150eb91c0fe856410
-:01518055f595eae7a966aec4c1387ff51b8d10
-:015190362c39175a13752fe1137ab93a01589e
-:0151a0965607f837eeadfbb443714ea1667474
-:0151b0c7c56915841eb1fddc76e3afd79b5991
-:0151c0c319801b1e5e321fffe8f9502ce8d827
-:0151d0741c733f40de393e3b1eae02e35d6ea0
-:0151e0bbfb494bebcfc2685feedfae574cee48
-:0151f09738af9e984cc0b6cdcce09c6c237fc0
-:015200214c4de8e82993eeadb1814ab46252bc
-:015210483e510d264c027efe089be3a607cbf7
-:0152202bff28e2d240cc57a8f8eb7c17ac4961
-:015230627ff0e5d1b3e6289be3e8668bc47fd9
-:0152406467293886cc3a2149e8626ec90e154c
-:0152509b9a80abdb36525202e041ef22e23403
-:01526007318f4e3d4a9e00a73419b17b30cd00
-:01527069559a14d416c4e46ae3b647f490e031
-:015280e600bd9cfb048a86411076ee6f00dae4
-:0152904375c4cf68f32c126139f85757272e9c
-:0152a0a40c85ba0436d1df3c07bd4ae21e747a
-:0152b059cd3e279e5321187cac326df3bee76a
-:0152c0a182788b89b9e462754cef26d327c691
-:0152d0575be421a152a3e556a0cd43edb5d7a3
-:0152e06ca14517c47c719a8bbb70181c1b0ed2
-:0152f019356795c802ba9d2d452e1e4398f7b3
-:015300af8667d81f3d04c420a77744f6be15cf
-:01531002b4b42c2f260072de37c858bb8aa55a
-:0153204af387aaa94ad94699a1fff4878ba08b
-:015330813cb6c369cc310376fb3022be572185
-:0153408354284ee48f7369b750659142d6edca
-:015350538bc067bca5aa8bab18e56aba8eced0
-:015360f0b3f1945f615e2926b51f8a90be7059
-:01537034cdd5119b0171e3d0157c8327fccd0e
-:0153803fb53546593688bd45484717e8d13f75
-:01539041b7300cb49f23de65c959121033fef8
-:0153a027c218678a5dd8921b67dd96cddf463b
-:0153b0f1b085b60a87686da30193e0ce011d41
-:0153c0751544ab63812c697ff8a50ad658364a
-:0153d067f80afd69df4b82883b086750fff3d3
-:0153e048c090dc45117c2e3ddeb2b7ee527158
-:0153f02b0f18d06d658bf814f49344b84d5806
-:01540031a93f064278bef15d45509c7245b0bc
-:01541050f03400ae66db505cf940c548911dad
-:0154203aa2eb545793a83f9f5dc0de413bcd31
-:0154305fc571c3fca354d749de60063dae4753
-:015440a225c0a8ea0c5a900824e4b6881d9fbd
-:01545056602ba4cf6a13def8cb666a6c733892
-:015460f1d30a1eb17bd6006e8d07612cedb5f5
-:01547091686fac1ff129008e92a7c7058c151e
-:015480e9b4034ac030336112ee6bcb3a08087c
-:015490d3b9100a41de39ae5b1e0c74c57af7e0
-:0154a01a4c1554cdf3935bb4909bb9b4124cde
-:0154b0ffbbd6a2ceb70c61c46cb5ce22a1d99b
-:0154c079c3fd6a919e1649b7bd1771aab3c691
-:0154d0074bba09e0d270755fe6563a41c638cb
-:0154e00a87253eb7c6dc7f181422402e1d6e89
-:0154f0a241af3a9b9e1a8231aeec4665fa986a
-:01550002516069df9138039660df7b26ec6e88
-:015510b6b241b9319e18a7f79c907f9bbae758
-:015520946e3c9349489c6af3178fa22e728934
-:015530b97c073975a0f7c5175c83ef77f23222
-:01554058a0f875957c2d4fc5dc26d7b9ee5a03
-:01555087c784e1f084e638c7fdab13fb031d6d
-:015560f0fc86b0c9ffb465860983065fb3768f
-:0155706e8d4a8142a68b317874a0c88146f236
-:015580474eefd0e44555a8f6c8bb2f58ca541e
-:0155905814e35383262484fe104b953df18842
-:0155a0d69f195d32b3bf1a77975a08b4a41394
-:0155b06d31b023daf6e9e4d964f78649af905d
-:0155c0eebf8865bbe9367751507b8864992984
-:0155d0aac73ec6d2b67606a8d6a3db4cdc8f36
-:0155e069a27c19bcea21925b5282cfeb3e954c
-:0155f0572646014821ade9a05a086de18c05df
-:01560097e578a45c74a13887a30f8d3d7be552
-:015610f154393d0e98f9cb96ee473a1e295aba
-:01562027f704054602924a9678633a0f419851
-:0156301b19002aca381fd8ab1ef08ad2c3a16d
-:015640713c541aa9193351557010d69d73a2c8
-:01565092d14ba6fffd7032d9880069698fb08b
-:015660815c90e6b57cea1dbfd6b3db4f9730f5
-:015670cb05ffe406b88ef725154d83aa1bd199
-:015680dc01a6c51e5f576d24b508f1f0baa840
-:015690cb1305bf5362f9876d4380b632fadf84
-:0156a0513052c3ed6555878c9c8a09799f1cd8
-:0156b0de72e8ff69639e36ee7572a9a87b7157
-:0156c04030cec85f67e5c00a329b53f6f13121
-:0156d01974ca0c6bc7f5f5208d1526d272a708
-:0156e0817eeecb4842819256a33343ba00758d
-:0156f02af927506f73dd3e7eb7dd36c0992cfe
-:015700b7d9bdc2cf8c67f1445a787a7b2610a0
-:0157106e25f44cbacc181f5553f7e31b1d652e
-:0157201e921332a1560990df0f2497344fb9d7
-:01573038807648b56f55fddd5e57224c9f8b5d
-:0157400153e6dbec9b49f010826f8b6df32205
-:01575037a8f84325335997ea69ce36716ffa9d
-:01576064a6bf64a478d704daa9924f99cb52e2
-:0157706ad6c10f9358b3b4bfaa64df74a5095f
-:0157804257f2f32c9fb0604894dcd586b994a9
-:01579011cf4942bcfad9bd8b067a075e5f9691
-:0157a0e5955eedf59b317e4cbf6c52502cf909
-:0157b0fcffcc3da471e8bcb10a82695b8db457
-:0157c07291742e0eb8240c9a5e179f006664d3
-:0157d0ab234ad7c5b340d5fd66d0eea6bb4be5
-:0157e00e85733c29be7011cc26b813c582dc7e
-:0157f0ee34c3c73a7e01475217025aac8a3691
-:015800ad9b9b1fa655ae2d9554a68815829622
-:015810d00849f2ec7b880f1741bb1497aa43b9
-:015820b5641d5b47dc95d4de8394dfa828d534
-:015830f4243f1bfd5dd4643e0b52cf7c9b8733
-:0158400676b8d1c4ef616a24d614210ffe755c
-:01585065958dfe91b11fa3f77ae6ad086edbd8
-:0158601db9466aac4cdf6223369f13cbe7e2f9
-:0158709d511eabd16ab950d0e0360a95d573b6
-:0158801a313e4fa5b405b772e83a8d080088c6
-:01589066fa4ddf9f8ea6125e8eed22f3eb1bbe
-:0158a0ec6f6f8d7763f28eac44bb809be51f81
-:0158b07421c0884d59ca2db17b3ad1fc32afa9
-:0158c05942e701669203474b606166c0459d53
-:0158d052f18065c398f19b563b4c55c61c2611
-:0158e04e77514930c848e29d3a593526cd8bf9
-:0158f08caed9a452862c3d2199a291e9e82f06
-:0159007de06ab695cfe38731ed50db0c39cac3
-:015910d399791a60b97aa9612721a9680ca61b
-:015920b6d219c0f408e70e82fafff9cc53a2a1
-:015930e8af43a7c193fde13fd3a4a1a9f89bc7
-:01594053f14c7cddcc151dcca07fad1593ff86
-:015950fb7c2344cd909b37e28eb3c15fb7184d
-:015960ea64cb0fce263a79e1d7ed59a4d561ff
-:015970902c4e531c487dcca2ad25f9db808f71
-:01598093e16728e163e8ee36883dd446f4f466
-:01599053750ff7617b6f8c6c5264e5dfb04880
-:0159a0c16ed5b3f1c5beef3d828c078b6791ad
-:0159b0a773cb4bb77f0c87688fe2e64a9369ab
-:0159c015fc314326ab359cd89da3228a925ce5
-:0159d0d318de6fa3c5fc9b6e130a7a735f1559
-:0159e0064ae92fd5ca25846412edd81d4691f9
-:0159f034a00a4ecf9c9678f39e56c8549700c6
-:015a002910f40dc6200c2594c9a237042c4044
-:015a10e389b65dac6348d01cd13e45e42c98c5
-:015a200c3b12775342d7a1a6a32a374906d46d
-:015a3096f773c0069c21ab1af836aa17f76e06
-:015a4004f7ff56da56b241c6533a3e811d6646
-:015a505a5e37c6b8cb1c4d625814f27bb57602
-:015a6078faa5424ad12ffd10cd855cb9e8def4
-:015a7038d8f5b1b4f7e46014e83501635062ce
-:015a80c2eae76179ca80955ce0f7471b0e494b
-:015a90487b7ebabe2a00033f9afb748cfe8025
-:015aa0bbbc1de63a7dffbad243e43f3f7e8eca
-:015ab00b1ebd82e94a5c389bae8889bd251769
-:015ac0cb587d1977f076a340e9c6a5f4ae386c
-:015ad07e3e792f80d239b588ac795dfbf6a12d
-:015ae045dcaa8af871b9ec9d1a491547802da2
-:015af062b646519dc7d661539467e10d30da65
-:015b00a8ddcbb8a9cdc100e7ad16ed5697e21f
-:015b101cc0472a67e7505c45b4e1feee654943
-:015b208cd987b264bc4fda97715e54290614e3
-:015b30c431c21af4c1d898cc73e52f8db22758
-:015b408f1397e7b1bca948b3ab425d2b067491
-:015b501053ae01dd5bf7298888176663115574
-:015b608cd284ac8b9bb4eb5cead9361b713ee3
-:015b7046df0ee6994e4b1cf4679373b06279db
-:015b80058661c337368067101587ace500e13e
-:015b90edae61d52f2fdd6fd8b44473a4e2ae13
-:015ba02660c05857206d477c251c12fb5825e6
-:015bb0089e32518db3fe68eb9f11daea559d24
-:015bc0422f869aa80d618c0e7261afa3b1c2ce
-:015bd098578b94aaf466f295198ea69ec7ac1f
-:015be09e80f605a3221160d5cd82c298132077
-:015bf098ad1f5d68170f4af3c80e0e8760e502
-:015c000f432cdd99e0152ace66eae95f7e7360
-:015c106ab5545502f4c096d92022658e13d9e1
-:015c20ef7e26af4882cc345459a2064097c487
-:015c30e230199ae2ded4858eb97612092900c1
-:015c4078a64e8f6149310bc4429234b22b515e
-:015c5001f86df901cdfdbbac62c1889a81487c
-:015c60400dceddc9609d81a437544a331740dd
-:015c7019f5916ea9f23920d24925f7bd328dc0
-:015c80426bbe87b90972e7686e360371d83a81
-:015c90233d5d354b7c9ec50da0f12d8df9ecab
-:015ca04de56af0324386bed8542a5999df186b
-:015cb03b6bf2bfcebc708b309053e08a9f4baf
-:015cc002ee3c68f3052f4c94b263436d9705ef
-:015cd0fb6993e25e0b75d1d8188054d859ae3f
-:015ce0c6e22b0044f14aad02ba95a16ce1831b
-:015cf08c06314468cf47118a443217a03efad3
-:015d00c90b323a25ee66a334509db43253b370
-:015d1016c8152713d5bc2d5add61c78592dbe3
-:015d20d2606d0c823d23b8a0f3d2cffefa436a
-:015d30d774f756891d0aba23a1b5b26a851006
-:015d40a91b4acc3a35386990d13a6e53c52675
-:015d50d09472c6ecbcc7fbf2b05886303cc809
-:015d60d132598317d4cc9fe61a62da054cb71a
-:015d705269c37ec181856c9b5430d270eeb2c9
-:015d803fde5b1b53dac072b3e94daf5a8ae5e6
-:015d908b06aa0b8b1c00df8ba39ee209c2360c
-:015da0327f3df9a62125725f3e9f39a45a59fa
-:015db0568f2ded9cc094d0c38772035e34915c
-:015dc0dea972c19445ca7072b01faa0499772f
-:015dd0e097619e42670af94b42a9b417179186
-:015de0100ce3b995a6ade983e55fa048037e58
-:015df0dc89b272fbdf382f9d23561312db9025
-:015e008fd2defcc9fea7257d9fd75e64803a30
-:015e10f16839505ac29022e5e614228a6f53ee
-:015e2012eb6d724a61da7d85a34bc482a80b9b
-:015e302ec25fcf2c96060ba21dcf3bf21270e1
-:015e405df6fa01b78d2947fddb82c7648aac91
-:015e50ce9dfc161f01fcfcb3f941c6e2e0d84c
-:015e608a916502044dc4607f9d8cd6e719cf55
-:015e704e0a7b1f13a57b7e3500b259dbed3299
-:015e8093fe9db3073d0916f6006fe9a7377065
-:015e90d51ba89dd55b95741dd8f2f176dc9caa
-:015ea04de93120a4799b744500f61c2a9fbe88
-:015eb069fe1f71947c4729ca57c68dfc25e6ab
-:015ec0c4e6959b5fd7f10082b19d025f801bd0
-:015ed0db8cacfa8d924a956eaa31e7fcdb18cc
-:015ee098b88764904ce4bb9af97f7a0527895d
-:015ef020546c3a8fb9087a734bb445f088f3d1
-:015f00e3a3fe9dc23555402ce13430253db983
-:015f104d26261812140f125468d0543d45b923
-:015f20862282c4a8ebb558a4789fe9b288d53d
-:015f30c5f3e291fe9b4db3aa403a2784f487b4
-:015f401ed61e55ae8c9aab575e7c390cde72c3
-:015f50ea208f7a355823183ce6a6b0130bfb6d
-:015f60172d0d45b3d5a6834b5c97e815bb97de
-:015f70f47583bf7911420dc3ae04dd080d4049
-:015f80b8e5994c7e4a90164309cac620a787b9
-:015f90f89e5fe5b493baf83a53e5ad4b249616
-:015fa06c86322ca1d77276f285ded75eb90cda
-:015fb08f738ffecc221a7320372651f6f7b472
-:015fc0980cf85b2da69eb28a79b18c4967ae4c
-:015fd0e6629ad9a2f5654a0651646894c0ebcf
-:015fe0292aac7c422a90ace320409c3fcf9711
-:015ff05d63d5c137b13214a77b5e686424a536
-:016000407edbe4b9abbdc75c95811cd44ac449
-:0160101480f96fbdb31414200c7316a3ec4480
-:016020f5b65e9f607458c00b07b1dc1adb3aad
-:016030680bc9498522f8ad17c13f4ee4739fec
-:016040406ee4e6ce07d0f4ee7b76a82d039536
-:016050e53ed66eafbb1f79e85400c8350f4ded
-:016060ab36b37a26ca02abfb5a1c3bd328fe7f
-:01607047d9f98460724de0feda9d695d08ae76
-:0160800d1b7935d6e8ed2534621a1b4ddff4da
-:0160906b5ca6aadc33b41b2083ccccc24a551d
-:0160a0ab89d7ef8f87287de389645889b2a22a
-:0160b0940c40313cba41e8d1473c4e98868eb3
-:0160c0fbf37dadc31fdee5d32704b9124a7234
-:0160d0955f3c2a2cf6b7f3b33af7aa27c61716
-:0160e071c33feb64877c59a61c98a630a9062a
-:0160f05c2b26b9762e9e3007ed052f91989b2f
-:0161006925b08edf99723dfce1c8c85e4bb734
-:016110987c76358ddca21f2eefba876db77712
-:0161204c2f45e1988684c972d0f76f0e8bb468
-:016130d8852e4827103f8afa3ec19fb03b6438
-:01614078950b22773376d29feeba34dab4ebc1
-:01615087d060850088113f622bf8b42073d539
-:0161604bb62833860acedf60f2ceb58f4681a6
-:0161703798477b81e95ce0e07eb7277f0de190
-:0161803808af034712f99b5c928c458f5bd07c
-:01619006c095ad5d85cf3f51b0cddb4ec9e12f
-:0161a059f1d9be4d3347f0d992f08df54eccc7
-:0161b05c1c81854de0cd269ee5811a29e8eb90
-:0161c07dad9b8e277453dde77a99bf1f6978cc
-:0161d0366a17547c282408819436c16abe074b
-:0161e0a00b61497d96a72e99e63bcaec39827c
-:0161f0951eb397a53a8e51d01b0224c8cec73b
-:0162009d5813433bba5a4edef0c5ccb8673950
-:016210fabf70b588f70937b4fd2b02beab42b0
-:016220c66400ae39b3290e5b3eaf92fb9421f2
-:0162302f512996b4f8e1a9781698fe4fc71180
-:01624086d8f409823eb0a3b8dfaee0371a5317
-:01625003650e00c19be685821f5c07d646384a
-:01626064cc71dd955a720b252b35aa77046e86
-:0162703eb166a51da9f896d22dbd6f8f9307cd
-:0162801c69c31f53e93eb26182b5e2492daf8c
-:016290a07818cb904f39be18cfd79f7295713f
-:0162a0232825a7cba7d2c4dc1a360f781bf056
-:0162b0d8caed5de4d5ef9bbe6ec02df0aaa152
-:0162c0b65e031f887443ab9a9ec40aac119c2b
-:0162d0c837728da576c0bcb198432ab984d0ad
-:0162e08bad193ac4c8c6414c7c7ea61779d279
-:0162f09d1bba22f9bb0a46b7f44623c7ece3fc
-:0163000528d5cd44a19d6abafabcb8a4ccc7ce
-:0163102574d3c600332dd083af535fb4bc5196
-:016320a329d6513f12b379ff731930f386e432
-:016330dffa62bb48f02ed2d2bfdbdf8a44207d
-:0163401ad58e822e66a894a2b450d2153ae728
-:01635024d2c438d3242e177eef5b43becc75d2
-:0163603801e5de482647c45cacbb3544e0dbc5
-:016370d5c19aae0dd331ba7b38d08a8e7c23f3
-:01638001d3fda9266aa55c68e8d6b0a0df726f
-:016390fa9d616c416a5f6eabf6695926db7c54
-:0163a0e3afc3ac8e9973b885205cc956a9139e
-:0163b02ea97719e8435694ef28ca2ffad2d31d
-:0163c03e8d0c5f16bcb189608734690e3b51fd
-:0163d08c7d68fda4ce7e14ee5d84ac55eedc06
-:0163e01ad195673630c52cc658940f72703888
-:0163f0dd037fb243df5e17613850e6dac67b34
-:016400964964fe4ec8c5e4ee77a7ac01a24012
-:016410ed13b11eaf3621e16c83bf82467b0345
-:016420a7b481b0f65f8714028ac76e997f30d2
-:01643010bfc5d6107ac255dfef9f025561c4c4
-:01644007b4f7876da9941f1d6b7ffa933e6f94
-:016450609a2e9e3a255e69bb603d57cda4ed5e
-:0164608b527bd6a72d4c78e115f2f909d175a5
-:016470c25e51d6616ba432bc46980e4e7eb2ed
-:016480e6175a781fe84d868ec9902c2a57bbb1
-:016490006e8a61f257d554616d84486a99ba15
-:0164a0360f2c750f0931a8cb309426af6a4969
-:0164b08163b97c54fef8f925fc30e34dfd378c
-:0164c01e431bbdc4c08c0de304a98f56fe12b6
-:0164d0320c37ee678949490e9a7071657b08b6
-:0164e052d27e0742af95e0ab31b5306b9ce792
-:0164f051b1b83bee4125c8dd32ddd92899efb6
-:016500631eaf8794a61c5aac390e3f89fd8d30
-:0165105041f5dfa718a294ed12a5f2529aa112
-:016520dd0f8d79a0bc333f06ba571227c2455c
-:016530f67fff1093a4121ad9f2b9ae7c9b45f6
-:0165404efa2d30ce8e185d685dd1cb9cb44a8a
-:0165502c1fde3d67c7db315ee80b2bcd901f0d
-:01656029e2a603d297bf4cc96acead82d44e24
-:01657054e1369b913c6ae399ed4554c488cf2a
-:0165807453560a4fc9b2d4fe3271e241b786a8
-:016590d86a6316009d0f11440a371390932e1c
-:0165a0a575a725db638372420007b3601d0021
-:0165b055275ae51051e422667f5de30bf614b3
-:0165c0d647e0bb3769ba27b32273418deabebe
-:0165d05970b38772055413c5882ebf9fb2f766
-:0165e040b43a56e31fae1c00ce4658fac6cf7c
-:0165f05420d25ecab7291d074604f5f2193928
-:016600b6a9e31b19823a3e58b7690f698889bc
-:016610c85f264831a1b2aaa919c90b5f234750
-:016620061ab0c78d56c75d62ce87d923d5eb9b
-:016630622b8fdd1e5c5ca56e82dd9e60baee9f
-:016640a1b6cedb8fad4b8495173d200a83c5da
-:016650949815e9323c70b0ffd626b5d70d237b
-:0166605a76706a834f27fa3a3e4168f3343848
-:0166708ea1a064e81e0a8eeaa2485320f3dab8
-:01668040e17bdb66e907b890682c0a0e720c2d
-:016690c7497a5756e3dae335b67fde4c505b39
-:0166a02484ff115299a3a19b8a17ff2632c5a4
-:0166b0f6f5554c0b2637819dbb296f61507555
-:0166c085fca7f682330c8446914c70a4773819
-:0166d0881c843ba8b5fa5cfe46230a3e82ee00
-:0166e0bfb1adf8ae0dc1b3e100ca209b7c4e3a
-:0166f05e7c00b303b9cd7759c204e760d785a1
-:016700a535d3e4e105979f7f67e2b604f9b401
-:01671087b0a575d228608a8fc15222f08adc01
-:016720ce09892bf49179371270028b16c7411f
-:016730a1bd899a788db25bdf97e1364126cd32
-:016740e0845bc2121b12d636e0aa84ecb4f634
-:01675047b5283b2a7387171f96717600d187d9
-:0167600fa99d59d76601d27118317be9507f2c
-:0167704247964f604ca0ba84297b13437690e8
-:016780c07c097b5d0dcf50b79cf01fb5eee4a0
-:016790d367f77a8564e59b85ee095277e663fd
-:0167a0a0a75d658411c7ec7d0af6aaa06604db
-:0167b05c691fa6ca2bf06d50ecbde3a0a2413c
-:0167c0d7865b99264ea21b5968f4feae8df834
-:0167d09ec5a8091fc36996ca5bc926c37a75ab
-:0167e0dc7b3354198a9681894761783c791c5d
-:0167f0ca80f27ac9f0f7843d76c953b06264c1
-:016800e28b23af76887848601798e5ecfafeba
-:016810f1a989fa1bea1475a82d0a73bf5eca3a
-:0168205c2da5550e9f3fc3d36de1fe65ac44c3
-:01683073edbbaa194e8ba2bf6da0de6557cd34
-:0168401668bd329080e884ceea26662508ce6b
-:0168505601572541d6eca528909ea168567fd6
-:016860dd1db7ce456d7b16a60182a8f98ee10a
-:01687022a94dc17232ef39ab15ec938e98985b
-:0168808d22e7563896261b832b9f795ca2d8c4
-:01689075a3f6e2b3d13f8fba24f94223b1a849
-:0168a0176aeb7ef7d3946fb5bce74ffa9dd601
-:0168b018ef6fdeafcc73448df4d8899f2189e8
-:0168c0cbd9b7656c7a0fd357cdc3a107e250bf
-:0168d0d5e9f9adc0d40711ea5f66532a8732a1
-:0168e0a3b180cb957efb08344d2c1c9a94c602
-:0168f08480233331ad5575b7fb6e607de53c79
-:01690060ca0bc55fd21f1e0dd7f33fe151bd96
-:0169100783c3f54a498764e1c1b27fa916e713
-:0169208564923f200422c03d74ccc04bf8e2bf
-:01693054be7b9bff0f4db842cbe2a99fadf811
-:016940650133d6fd798aad4142041e79764ee2
-:016950a7af0a428649a1d121403edbf6d2f511
-:016960bd71ee83a9a75f382aeb094acd2491fb
-:016970a464163e44109137540926964dd1093b
-:0169804979d17d78b4dcc2deca24409eb41e6b
-:016990810b80eb30ae4c45396e6a4b05f94bb8
-:0169a0c6c9da197975daa7706b642eeb86fc55
-:0169b08cd15d03d774db968b7aaeca741049db
-:0169c067370880426be209f41470fd05efe610
-:0169d0370bf65e8992cc4891f6260dc829572b
-:0169e07d9cb9b8194f03fe73f9ce8e06b62cf7
-:0169f0329a89e29010e8b43c4014f65bc1e7e4
-:016a00232da772420444657b3a5f97fe0877bc
-:016a1065cd06c5d4e7f333a64874733bce77da
-:016a203ed9d485f499adc2b9984d3f7423e4bf
-:016a30c519b5e602589abc5d163e2bd9b434b5
-:016a40b232929822e941041e0e085c03cf3ec8
-:016a50b4b4c30b990ba16faa2dfcb1d8504afc
-:016a6023b8aa50ebeee37247d7fee9df72dd97
-:016a70fabe64cf4e3898ad024665d5207043d5
-:016a8024d08e46f3b8a3cfc81f8f5e0a7ea0c8
-:016a904368f50762ac17a942114de74908830c
-:016aa01bea7bd9cfed9f66ee40f910fbc17d9a
-:016ab07ba3651f3f55946c0869e5ff890b4d16
-:016ac048bf1692e20f02dc76b21a3485eb4ea7
-:016ad09745f6d5f19a6b30d4402106ce5f575d
-:016ae088314d1368b9a726f9eb5eb2257274f9
-:016af04d00e69952ea02e4914a45c64f04a837
-:016b005995d473cb52f424192888f47f06c635
-:016b10dde47f236aafa18b6820cef1c2198e0c
-:016b20638e23beb23cc11033abda080471b4ac
-:016b30e997179b2310134832673f5cc98a5d26
-:016b40c4daee75cebd7c1152baa1c5f19d99b5
-:016b50c14685f2296bcf5d0e0d7005ca86bba0
-:016b60c60e5e975ffbb91bffedbbd0bc3f9c12
-:016b707803b1015a08d9791e84d297884f272e
-:016b80442f246944fa0cdc01403fb098232e45
-:016b909bc492dd79822c2b10b6796bb98c6676
-:016ba0cd40de07211b8a04f1dfbc93baff730d
-:016bb0617bafee236d51897ad7542c9df66100
-:016bc0ff0058553b8257e53602a69ab039bbc6
-:016bd0c9c6d6ff378181ee1230c1108fc40421
-:016be06ecabafcc6b0b5c929e6a0c1b4785586
-:016bf0bd17bab80cbc276e1619e14a4ad56f39
-:016c0000d70e7d27b293bf5a80a53166c7d940
-:016c107a12b36a227199dac02dc5fe8aa895b0
-:016c20e8e38642f21d493b7e072b6fbe4a1a19
-:016c30642aed336103025a67d0fcec298d08f4
-:016c4061eeacae1897c659b18327f4c8f4fb9e
-:016c50a2e63e92c47bc56ca4ce176ce04cebbe
-:016c60d47efe7d9c1c9f03137ad0f853bd6a64
-:016c70f1c26e3d8a7db33f73a97f32aab1fc5e
-:016c80dedd88d2535f4a836b4b94e25626ddc8
-:016c90bab8f9f6f4f0c54af5ecdcf55ed205fe
-:016ca0fa8be3463d778986b5ae91c90f267f19
-:016cb00d660fc59c5496d92b45766663db9cc4
-:016cc03d7f7b5beb434fd51e08b1d375adbb94
-:016cd0b7522a6591665d90853ba9461c51bc35
-:016ce0aba1fb8a2116bef7d7ba49d838f625f9
-:016cf0203e16935a7b098d3564f6a97a370ebe
-:016d00061a7de4bdb606384ccc163ac89994ba
-:016d10bb39d7562558cf8d743a1daed27f0b0d
-:016d206640ec933f8c413a52c664483e802c36
-:016d30f2758b1593868d481a6905483e274743
-:016d40177c5ca09376e5c569271e4849a13ac9
-:016d5043683428521e14a985da9d9681a2b7f7
-:016d60f86cdc9f2a4a46bb8d86a7e1dc989ab4
-:016d707b75fa63981482e75f20ba5aa31f74b4
-:016d80419d38b6bbadd53392ecb9ab02d4c4d0
-:016d90523f1df6072e463cd14d3a274b1fb923
-:016da08da90bb178d2821edb6f7fc96209dc81
-:016db015157bfa825309010a1486a2d5be4386
-:016dc09f354cf7fd8ff0d823e43e63b884e05e
-:016dd02bed61140bf7e2c26c149ab9c9d36195
-:016de0e7617a7d22da3972c0eee9f7a1d1ae1f
-:016df04d95899205207728466be6d72859c05b
-:016e00ffb974eff79af8aaa22009a156c83856
-:016e1001088835f6148b721576af08fc311e0c
-:016e200a8b1ef20c04c7774283a0dc3aa79714
-:016e3070d168c4364d7d005d99b7f0d4a5b55e
-:016e40f458d7b16d95e691ffa05719b1a1c311
-:016e50e1c7c622cc78eedb207ab3a65e47c7cf
-:016e60d83e07536148f9ffa1fddf53de2ea786
-:016e7097c68cbaefbe3cfcf03dc2b754fb58f5
-:016e80156f99dbe79cbd80b67bbd2a833cceac
-:016e90fccf94020366f82708628e9c8e9d679f
-:016ea0c334746d7a696b2a9bf3112e9909ef5e
-:016eb08d96a9a7452106829f6b5247c799884d
-:016ec05fbaae81e3a99c4ece214b3111e0d7d6
-:016ed01d1952ee5099b6db4a7252abd3293a3d
-:016ee0e8acd4b11eeb16a85db1362df132e300
-:016ef0f2c5394a515895d2e7a8eb366e5bc165
-:016f0051c5300858a3f247baefee10c3fb6bd4
-:016f10c17b0f429d9e37c4ef6863c45bafbc55
-:016f20d5976fc347e123e271e1bdfc4e010cc5
-:016f30ce5b4d3125db8996d536f54c5c199a36
-:016f405671ef90538495fc5e498a43333d7e87
-:016f5003648c1abd9eb23c99169fbfaff2fdf8
-:016f60d433aebdba5afa316f833d6068b60404
-:016f705577c443705d8c71ef2b713e17463d1d
-:016f8027ea2b177f887c8548b859b451512163
-:016f90135ff2cb6ce3dcf8424fbfb242aa8ad7
-:016fa02f6fc23442a003944b1dede08bd3e19f
-:016fb0940859194fa204443a946309150bdc09
-:016fc053958967b2d58891d9bc68d20998f66e
-:016fd095c9d472e525bbdcdb8ec59b48e36277
-:016fe0d572949d52fb7e11668048376593ac82
-:016ff0218a1bdf3a0fb7b25c945e27b1bda918
-:0170001ce1d17d53b45957e5b51d01e1b181dd
-:017010a12fee93d94071bfcdce439fee7bcf80
-:0170206df66b0aeebbf6120ae6d624e9fd5c18
-:017030b1f08fdb889e63114782aa7a0dab40f7
-:017040ecc4d0f490abd4712e41e65eeb34766e
-:0170502d4de2e156d2628bb2023b1746b718bf
-:01706009f988104563941e8101880419dd46a8
-:01707051c0aac46dafaabe5922fb4058561c33
-:017080992b279280e9723b049a67a3ae08cd5a
-:017090c87f29dc3c45e8ef921d39619272e346
-:0170a0e64eed7159022b6e10951f2e583dfad5
-:0170b0d887c0b2757b836ee4a6d438723b1aea
-:0170c0647ad1018d49a62e8f8161e8f166be5f
-:0170d0e6243900e52b33fc2c6cdd48eb1a64b2
-:0170e0f284d7a8f5b3bfa0991a1daf2a1a45af
-:0170f0b0ee846e1f8deda83aca185b2d6069e6
-:01710062229043c898df34b06e55668fb5610c
-:0171106fab6e7d6ccbd6b4f2e2e0e26240bac0
-:017120f71c2c50ac2e3dad67d3947c4bf05bb7
-:017130cd53b253fb9d76e9b8200c711e3b5df6
-:0171402a5649fc39310ad4f7b49d7b194c3417
-:017150f45c155988b68e1afa23467bdfe73d3b
-:0171605e268adc872b6c8659376729df1968bc
-:017170a3761c99690f0003ea8fa71f0fffd863
-:017180a8be9fb28687ea1285fbe10b1b19e76b
-:017190a9c776a9a9aa977afc3842d1d178e6d0
-:0171a001375913dec66e6a626205da4976ec0e
-:0171b08c0010ebb43a4d4e07f79faf145f6a36
-:0171c08fa52d9d68da3d358fa07f3ddb849608
-:0171d086ea83e01186ce0c670793b6d2728cf8
-:0171e082906fc7c13403489f3bc7ada0a04ea9
-:0171f0ce9557dbffc3c97fef4d256a996c3918
-:01720025344415f287b15112e4c874258951b1
-:0172101c5f287ae5d693e1bf621cd217086813
-:017220592ccf41320643d1fa4fc0a278dd7f85
-:017230ad8809eccdb7e6a8f16a10b0ceb255ff
-:017240dade98655c3ed997b07915a5085384e6
-:01725051651fb473ea3eed561024b064fc76cf
-:01726091994c1251ae7662067006d3004f4fc6
-:017270d396cf9a0081fcd08bae7ee34b76064b
-:017280687f7727fcba83f0c97bdc63b4bf5575
-:0172906fe639439aa48e01f0dcdf73f2e9fa9c
-:0172a0f8f1b86088d7040689d809e847427108
-:0172b06dcb92603b8dd37ccaf85ff2a8f8d0ca
-:0172c07ef1160eff12079259a02e3bab436133
-:0172d03364463c53997e78b9c23fbdbbce09f2
-:0172e0b1747faf0ae8286408a4c8b108b6b857
-:0172f00225e51b29b384f2ca5c2cc0f3613438
-:017300f1c69e9c90edb6f8975ef2d8930fd1d1
-:0173109b9e344762a2b32aa41d73d1447bf971
-:017320f5b0738e04a5dc928ac953f974227075
-:017330a4c0c976b19d6a2eac32f79d05705e5b
-:017340c2d95f85b8b83735f6cc28f31419b306
-:017350f192f3ba56dfae3e406c19f9f53164fc
-:01736085afdc9c9526175e513bcdc5fc17d29a
-:017370e45c76bd2b4d82bfb94a5e233920dca5
-:017380ebf7cb3505d5428c886d08777ce85c70
-:017390bb738f6b40ced48a2e5e530eb8f9ba8e
-:0173a0b242dcb85925282b698075d1dd9cf151
-:0173b07bc234c4f905b8bfd555e804315e543f
-:0173c020ac77c3bff5f2342e512e3c31ba5806
-:0173d03f06a8bb65afde53492a805adb793eed
-:0173e0fee95310d39029d3397ae99670acd3e0
-:0173f0ec0436be7e74fb96bb2122c8568cf971
-:017400d9f6457755c542f71632b82604fa88ca
-:017410d56d42084dc27cf459f6920cbae642a1
-:017420f705d74e8f1856d44e000e6a22dc5137
-:017430917178eaa8c8e383138de18f1a661126
-:0174409d38c5d906b98b0d72201dd05f95f7d4
-:0174504d8acfa2e723c0d37a906d9f95946aa1
-:01746051de45414ba84348982947cb450fc774
-:01747061c4a6c54f1fb022f6ec253bd0ca7904
-:01748080e1a9449e7c2c7d3ab6280085c08203
-:0174908b14cd9b0119aeab5286fafbf6255fb9
-:0174a0cb2b3fd9ac01c2bc8c707c251f6ea0eb
-:0174b07a72655a66dfd67cd331b2d50779cf47
-:0174c0a5947ac2c773674b43ac327a872b68dd
-:0174d03bb7f2a95a6b490183d1c367682b1e8f
-:0174e0092d39f86f4631581d3954cde580f85b
-:0174f07096b337cc4bf923f1690363d97da810
-:0175003066763e6db54d5f0bf3cc886a7cea5e
-:01751049e621b2414564941bba3bac8515c365
-:017520b177d8e6586aae07c0aaa23f07e4d14a
-:01753041fb4e3817d79e3ef6222ed339e7ae3e
-:017540ed5d74503989aeba9c039c995ca46a93
-:0175502660fddcf50565a4747deef11c084336
-:017560221ee4035b2e00ee6397177b8b2d4aad
-:01757072ef526bd4969b5f8c7e794251a58228
-:017580bf8ea085fea768575d6a7528480f6cf2
-:017590b541928e0e912bee17f1e7c10cb3447f
-:0175a05e6d5dcaffc73b81e62aeac44bdb91ee
-:0175b00fc59e1de782e9bce372faf12dc1c2f6
-:0175c040baa62d3cf756ab7fa06f9ca62b214e
-:0175d073f4075b47b74ef1793901e442d7ea00
-:0175e081edea76b70a65415f3b6d4bae11ea9e
-:0175f039a08cdc54e4eb5159124bae88f8a74a
-:017600030f09cb85b691eae060f42bce79f3b8
-:0176101050945a9dea9c179c73f7712b2cd027
-:017620a2ff6d1a48c7952ac1edc3a2a5e04cad
-:017630455b3257d81b0d601ad5ad50c7c0c6af
-:0176406a8d56f79541b84c8d86e50f4a0e501a
-:017650aabcfb310adeb28be41f450c03412a11
-:01766069e7be6ce86914709bb69da70ebf7071
-:017670b5580fa4c6230213f933fe9535f130d8
-:01768042ceaf53c66d71e7c90c18bff9d0e319
-:017690dbf859f6eb14f8b0acda13e8236b063b
-:0176a04c0da0e911815fadc7592f6509de4d7a
-:0176b073c81879c2c17f7edbdce41bc75282bd
-:0176c095735f955d0d0e895af8d17dfdfc6d88
-:0176d007ea78b52bf5414f70f0565b274d206a
-:0176e0985d5b2d4813472f31e7ce95b4d1f1c0
-:0176f0729b3e155b7ec368f09227691052697d
-:017700824340811069ec3e0ceec7822e840d02
-:0177108a889c0757cb78fc819757a90091338f
-:017720764b83b548280abfcbb90dbd52ae5fb0
-:017730a7ab46603fbfc261fa2e00b897b4d5e7
-:017740542e486a6fec7fe5c489a365fe0e2add
-:0177502da9ea0ba5309aa7329ad89a39a5c466
-:017760b8664a60eb7608b5a0e5022b703fdf4c
-:017770cf82f024dec23428cb94db40700d3de9
-:017780e8b4db3fa49eacceb6e0165cf35af6fd
-:017790326d89097bd96e4c73929676afc6c611
-:0177a0cc7e9a217fe286817684473798bf788c
-:0177b04a3427ac2e5daf49646f1cfd2db63fd9
-:0177c08cdad05916a51200450d90cd0f1df7e4
-:0177d098e78579bcc148fb231ba964f374a491
-:0177e090ea351f77e8b71d418847b175b53e94
-:0177f04b2cc65b72f91fe0c4240795bb866506
-:017800473879064638e4293e5434d44aa0229e
-:0178101030881dd56ed1d07446e9f2861ee559
-:0178203319d359e1aede8c70871207c48991f6
-:0178300cefaaea116dc32f12665627a591f2ce
-:017840b162347c44e0d7d1db65c30c0a9e8df8
-:017850b67cc66f6beff555550c282e867b5847
-:0178605c69f589312620da6c2acc9d84bd4791
-:0178709415913f1408f634667cb87989b77beb
-:01788096fe1f4b88d18a2101c23e385ffbad99
-:017890e962085cae8e471da601682657089e4c
-:0178a01db58945faa3ec7115db991ff8b33627
-:0178b08d778443b178b300a1bedae7349c07ef
-:0178c0e21eb8f9661d5a41aa9476b6f1423bc9
-:0178d0488a6eea6875dce53159d67df75a8b42
-:0178e09a9613b1a7739a920d59773aa2d3522e
-:0178f031861039c91bf02fe9bfed2c39761c00
-:0179001400951875b539b301af623c420dbe2d
-:017910e6f936a1e02bf521e86201f4d933c2e4
-:017920d197c437e4748fa917235a20a7900f34
-:017930393e271abe3406d517423b8465326d35
-:017940294df3cc4242ea0eadd523c156a3e0ff
-:017950f04d795acdbdd662a4479804978aa086
-:0179600c8e61d55a1792b30793d5a276323aba
-:017970196e6d915da9ad1fb24a617825c5a539
-:017980dfcd38a46170cec8455840c032e42d29
-:01799071e8ca8a7cd8b11464d8358956540ae3
-:0179a06c29c2280962a27ab5c4175a90a2b9e9
-:0179b0fa0605fa1c442d146e9aa88a918ec2ab
-:0179c063dcdc70764ed2d56f3718f30f1c63c0
-:0179d0588e7769f6d05e066f9846ba5d5487f6
-:0179e06a1083323ad8be7466a467675e6c5395
-:0179f0126997e45c42025e995e287c9df7a946
-:017a005c78f0d4327f74944806682e42c40e94
-:017a102d3519f769b3b38872174efa689a198c
-:017a20fcc6548b8de620f8608127d818daa9f9
-:017a3090ef43c45134391b92f501f11ba85121
-:017a4086b613e78098ab7c4deb4d0b918df363
-:017a5032621f0f7ec226f4c81fd9e01131802b
-:017a6007aa3d26999e015fa5f1a88524ef303b
-:017a70505e906a0b8325023473d2d3e4160042
-:017a80f38401280debd6e8b4b8b5fd24291793
-:017a90aa9aab17f6dd7e92365668347791c02a
-:017aa049cb56adf59797e4565b06e57c7d489a
-:017ab0ef9974e9cbc03c6d761fe7226ec4133e
-:017ac0cda5e49d99f648a017c10b5f809ec65b
-:017ad0a9cf508be155b5fdd3af24391df42974
-:017ae00c79574dabeaa82abd986ec6b4398e76
-:017af06f0674ffa19f43fa136b2018140f0f5b
-:017b00f7ed812bef346a9bb30d2255d8a8302f
-:017b10502e21084247223460ab007da5b58edb
-:017b204e6aa4ddad89177d9da4f7aebddc9d2e
-:017b30bffe3b6737037d6597aab06145859d7b
-:017b40e5472c553d44bc7a342b3951a0d09021
-:017b50377f21d13b4993a9dd193551b562f87d
-:017b60f7e703d6145c0ebe27c82010ca26b7fd
-:017b70e6a3f7e328eee6a8cad8db3481e2f968
-:017b80346bd401563b06d63a9b6d1699611d16
-:017b90025c5d1031ee42d500cbe0aae4b1daf4
-:017ba0e2cbd2c3b9101690e9a8e7dab087ccd4
-:017bb07b54dd86ffbd6ede083aadc8ec467260
-:017bc02fb82c7172fc8210d15c3b3b81d30cf3
-:017bd0dc80a5153821ba615fac4a8412325913
-:017be03d0616bf518c66e751d5469cb8ab787f
-:017bf01cdbafb22c8450b74cf57ad17796a617
-:017c0069aaeed903a44110463ae3669d9b094b
-:017c10a495695b984b3ab12e1de6d482f1ab1f
-:017c20e0c74030fa5da72b4b85834c9fe815cd
-:017c3072095c68f5d2ada3a89a5e20a872904e
-:017c401be2c0bc35178da781e1ed12fcd2cbca
-:017c50174da8399e6265e4d4c93b77bb75b89b
-:017c6040b089685a99fce9457be77736a4d0fa
-:017c705752eeaeb120fd0bae11f403b09ad780
-:017c8092ef9ba991cfdbc67562d937009ba070
-:017c9012996ad8c0d58bd1afb1ddd8b38343b7
-:017ca08758bd8f01cf627b2186f63878d7db28
-:017cb04779f629beb9b29660ae71edd7a0eab6
-:017cc02f5fb11601e045853aeb1156b08e880f
-:017cd06a570f879d1b68f5b7d75cc93383e704
-:017ce0b616c02b67ddd38d7326075413f30ce7
-:017cf019e8431ec59ca641c125a5bf67eb4d3b
-:017d00604edefb323f0888712dcd3f6c6a11e7
-:017d100a30e8bc0b26724c1a9dcb9825e7b684
-:017d20108c0785d75e6e1894034715221be397
-:017d3032661fc2452247a2e5f365351fd94220
-:017d404a945534265b0af92773e5cb70a7b518
-:017d504edb99367553f68493ae484010b6beef
-:017d60778f4d8c76c99d68d089ca8b1e889483
-:017d705f86b9fbc889fdbff34197c029d9406d
-:017d803ac75dfb315ff77bc312e474e2042e26
-:017d900893a50e859eb4a299dfc5569a6dee93
-:017da0f59e5b10dd5e5436e9d8b7cccbeb5aa2
-:017db016ae60403b87e3a9356f7e4297b919c0
-:017dc0fca0586535216dc73d8dcddb9d80510c
-:017dd07f8c8260552e707325a625564fa6c17b
-:017de0288632d6aa5d93958313eabdf4b2201b
-:017df0ac3109905d74510edcb9f7f0312b8abe
-:017e0022a50710fde8f1aab89006a5d2b58204
-:017e10508cf24ea5a7e94ab974b0ae992e86a8
-:017e203e7165adea47b24a1c3b316dd50804cf
-:017e30d8de3ee33fd20dbaa078e299d0ca3ebf
-:017e40002e1cad44cef9c8360a36a3285bb81e
-:017e5032b20e511006add96dded376d0c0d0c0
-:017e601e95cb1888c5f4062b9ed265c80b09ce
-:017e707d7a751362c3eedf79c71d854d81364d
-:017e80fae40102aa49703fc8e7c1f70a090c6e
-:017e905a6da4fa7a0278b01f61fb35f7d61264
-:017ea08d318fc7d259d793cca7807a8c8c5192
-:017eb0d160d63eb71e1834feacd84b8a104535
-:017ec0fc838f25936be0b9e07cfa45e96c6552
-:017ed0c17201d2539cd76cdec715dd426a8e7d
-:017ee0301f632964326701654a0467b07baa56
-:017ef0eca29ea42135659faf091ee9fabe4820
-:017f006345f4f542ece070070d1584d3e4547d
-:017f10951377e8f91716710ec616bfb132a515
-:017f203fb15b63ad7d64a873aca2a0a7e1f56f
-:017f30a8b33ba83de8543d840f90316311721e
-:017f409a1e81dbd88721a88a657212afc7c03b
-:017f50d6ab606c61de6f01040ef444f676909b
-:017f60a4283cdf0057f8718882907985b0354d
-:017f702fea248e754e512287527b3b2dbc2775
-:017f80ebd0746547d32a21f3436cc120dd693b
-:017f90dda1480b5c26dc3f54001a229ab716b9
-:017fa0d9df5889de4921d56876c7be5f2cc65a
-:017fb00df4efe77c9dbc389a376ae7c27ef55a
-:017fc03c7f4f8f62a98844762268d1f8fe0d62
-:017fd0956a10b143e27b771b3a5ef5b8a10d10
-:017fe01f37daf4ca58dfac4b87d17ad486902f
-:017ff0aade9f6f9ff92659f45163b1fb03f05f
-:018000be86870f727121e53da8f7ce0e796cfe
-:018010cd0de9ff5b2070c5719eef4645431d6a
-:018020ea36a940ba6016b8ad5b1fa676d01c29
-:01803061efda49f70ddce32fd1095d733948b5
-:018040b350ca11404c3acff54e982b6d109c35
-:018050764a0e2dd67bce2f888f8ab7add64469
-:01806002d680d1e672c7234607d27564900942
-:0180707ce63327920b280a115b6d74b6167d47
-:01808073c8e9c33faae7783d0f078c34d99add
-:0180909f9cf4e39334440104bfd350e47aa49a
-:0180a0d774b6a308efdf35509702e88b661930
-:0180b0179036d817fc019c7aa772039d3d4f03
-:0180c039a5723519259f12003f217aaabebf3e
-:0180d01adf337030962c240f5ca01c5362a308
-:0180e0f987875e8e0ada18764d09b8ed4a8e6e
-:0180f0cd2b724cb1a49cf840855b496286fe1b
-:018100a69efc3a791cf7c5f6478c17afb84dfb
-:01811014f90a611fa48743a54887dc864f2d13
-:0181200abdd264e1ee0868dc89ce1dee478840
-:01813036ec6e27d2048de5218a267e8be16b93
-:018140fd759791d1d9c826112211578a873a1f
-:0181508c97f4e95b8d97112148d00d9b6e00fe
-:018160f50f3401245f9965954863e3710e4c01
-:01817002cf451ec5091220d1e2b6ed2d01a7f2
-:018180fe7a3f9e621a138f4c5fe582d829bef3
-:0181907a0e2a62e0d6fbcfdb19dea03df70fd9
-:0181a04d8b24c38815d32f744995b627019b1a
-:0181b01bf3121da5011fd18212f101dc880538
-:0181c0158519cf4347e27f33352a743512cb1a
-:0181d04f1fdc8968a820bd072655ab6f95a6dc
-:0181e048be8cce95082b1e9fc4b9511fd298be
-:0181f0a1d1e255d175e0ef467d4628647a4bd1
-:0182007285829ffb49334e5f749359c058174b
-:01821041604d7fd0fe8d2be56f6b9392333364
-:0182200d1eb92401ec764b2fe9d6d104992153
-:018230607912e3d2900a51733929b746a4303f
-:0182408948b88fc3006cfdc15bd3032933253f
-:01825044ad19ee286d7ed9a8e934187adb3a45
-:01826080c6cf66517666cc8245ef5c41c861c1
-:018270bc3bdc35e4e649a005e4e15a9b7ddb7c
-:01828083af1768062755953c06171d0a5bf470
-:0182905096e8bb3372b30e30dae9dbdea195f6
-:0182a0907e17423418b6e095b5ec1e95368828
-:0182b04276b194cf9376585f049832af389f2a
-:0182c01a1987db16da4b0121325a8935eee6b5
-:0182d0558aa7bb5769cc9248ce47b2d42513a3
-:0182e0a852151b2e9f6285a5f196cd8d52862b
-:0182f0313ef3f5435e30bff9bfe02bbcb9cb8b
-:0183003f73b04b0937346b825019645fc95fb2
-:018310594c889c4280089a22e4e516716ee99a
-:0183201bba03d7759bb674f99f67104acf37e2
-:0183301afbfea1694c9eb5e8b12777d0fb393b
-:018340c3fbab4ba0d79800ca1dea1e196263ed
-:018350f440ada21ea419ee69feb39e5ab4e5cc
-:0183603b6dbc509b7e28e842f21f7b0ecc19e2
-:01837018ae923ec8653cc652a1546bdd274bff
-:0183805124bd8e2e3234df31aa4200f050dab7
-:01839021a2a048eabeb875a272eda7bb239067
-:0183a02d77cb885af536709ae341ce80eac7b7
-:0183b055e7c54b34b2845989eee537026927bf
-:0183c0f91ec77241d5719deb6d4e301184574e
-:0183d000d124fcec0413f9999a9525f83f1d55
-:0183e0faff576b2db6e2b83ccc7e07d12d11b8
-:0183f075debf260dbdceee65827d9bd6f66210
-:018400478e2b2dd877c553cebed51ceb6bbb26
-:0184106128ca597630caea630e98736f90453d
-:0184208514ff54c5f43deceafd4cb9b85e03e3
-:01843089eb58e81944ccca4905aab619393f07
-:018440e32ab81aaf70c71517f0aca1ab40f2e8
-:01845027b4e039c56307fb45d30dff970fcdf3
-:018460460ea3a20b38376a371867c465d14ba5
-:018470823c6100d0cca1cfd03b70387f8f54e6
-:01848068e066a5a1e5bc9b6d7b3d6b3dc2a53a
-:018490a2276dd4cbaca8c4a59dbc17deb3e8fb
-:0184a0bd1ceffca86aab8fcbb7be2d4e7f8884
-:0184b0b1cc377b243d16eeff701a7deb35abe7
-:0184c0d42de32c6cbd22ca11d436475e379128
-:0184d0726cfb0c979a916d241e57a652a86604
-:0184e0606bb4fc552b2818bd2ab7d9a4ca8ac5
-:0184f083a4d9628da4cf6ca344b47a148bab46
-:0185003b22e130a94ac1ad03c4548e83db0692
-:01851092337589dfb4656e3644ce27f2f7cc33
-:018520d5113fb08c2bb8ef98314d3f696c0ca7
-:018530a3b2c3f9ca85948115ba79cde93d0f8e
-:0185403100042e829d97a92bc005321b24a361
-:018550ebd7e89e5b48a572576eec308f26a9e7
-:0185607b32bac3b01c24ea71601fc3ca61cce0
-:018570185f66fcad5a301b5ce95c522d648135
-:018580ed2a9030edb17a5604c9235a42b8ff44
-:0185901f4e74836b30f328eafcbd42ec6bb6aa
-:0185a09084e93b9d8cdfe263f27ebeda48b0b5
-:0185b0653afe1b6bcb79ac000eea5291e558c5
-:0185c0c0744a04b1588e40d5287fe73387586c
-:0185d09371b22a3ca61b15473030fac94c23c7
-:0185e0d4c4907917f2636e6cef76ce0363be2e
-:0185f0d4fe6409e03619f9820eed8f9d857a7a
-:0186007325a3bdaa468b976529512f3236c434
-:018610bc124b1b9491ad7c3c29a09017a5333b
-:0186205d7a661bccbe88b2bb3bdefab6475fcf
-:018630678e6d0ab79e2df42ec74c6ac505a19b
-:018640876c7dc60832afc0c395f9c3405379aa
-:01865085cdaf26bcdd9e7c790a7efd2c9dfb04
-:018660e9993defdcd85075c836980d5aa9889f
-:01867083dbee78e3748ed1fd5b6bfa29027a1d
-:018680a4c182061c5152a185ce8f66ffe61e94
-:01869003c60ca23fa80f62b3a609d32eb656dc
-:0186a086aedd4cba17c81b438804d943a41560
-:0186b0fd891b2766066fe0aca6d7ef3094936a
-:0186c0ae4dda3c837250d517d458391b3a8701
-:0186d05db1dd33cee31bfcd8be58f76b7bbd8d
-:0186e0c978fd6f00b42570da19b76d123dd6cb
-:0186f0cfe9fe73cf63727a8b1e6468699170d9
-:018700a076d3f75b5362e4141953722ff917bc
-:0187103f46ac1a5942583925c39ac01835090d
-:01872000dda0c2960b0c6818c830beb570ed85
-:018730c48ffbb017a2756863e372c4b0056e5b
-:0187400c0b5aea8f58be0729f07ea73c87d83f
-:01875095aab0b475ee19deee6ff83541bd74fa
-:01876073ac86436dff542d5f2918396df81994
-:0187703e203993f225c54eb46cf8f7906375ec
-:018780f78c10c0e5d123ab3839bdd5d562ddd9
-:018790b197cd1e932152aa9bf0fe1e24eb9661
-:0187a0343a10464ef4fde14c4f18a50829fec9
-:0187b095d052d79a44be19811ba3ba9a1353d4
-:0187c05142413f5fd8139d8aa35772547b8d85
-:0187d011344f9fe44d44666bb29f5c1eaae850
-:0187e0038a3076ba812cb62459c43bb422ab55
-:0187f03ebcdb06e469b66cb780259618d10aae
-:0188009752bebe707952735a0d58785b260359
-:018810f82aae7dcaeb20fd9c4520690b1add27
-:0188203324f1ee7cfdd5003e6e4a6de60cd190
-:0188303cc9a7418d9a5d54109e669234a2f81c
-:018840e251051bb990cb879c8ce13933805fab
-:0188502dfd263f38ef9d9a1b981be91df25509
-:0188601fafcca1b629029bbd13d0edc23e1d19
-:01887082d7730a328ab5aff911def886de261b
-:018880513c2d4dc99d7696366d2bdd789a90cf
-:018890ec51af6423087ca609dfe124219fbad5
-:0188a07c756896f35d17b4d79b57f6e38e9833
-:0188b0ed0c0114d87cb868c7003a5369ee92a8
-:0188c00ce1e392277ae5f48e00633c8e206c24
-:0188d0fcb966b2043d378ce632ce8176a4af78
-:0188e09b31145223fdc69dc834028bfc54a300
-:0188f09c65d791c37a9833c00d71989d98b5c3
-:018900b2129ad6cc8b4cbbec61b7d9b74e6201
-:01891078ef0b0fc9f666a00129c4727d4f56b4
-:01892061b2c395929466edae4761403a425217
-:0189303a197553bfe76b39b84bf2d7507a4755
-:018940a07e8b3bab90233cae9f1301b8f7f2c8
-:0189505268066b284f5c634235dd4120ae9280
-:018960b8dab3ef23b890993fa52ec6971e833d
-:018970e2363a7dc6dd3f93bf6f0d01fd583d61
-:018980ff5c9120ccf935536ce0cfa0e4ee846b
-:01899069f335d030b8077c6dc29e049b033a27
-:0189a0825311c37aae46f933676023795a6d60
-:0189b0f093b8efcdd0065d9c450de93b966a24
-:0189c0515442442c7759c73d2f8fdcd8d7d095
-:0189d00409e6a7aec8496093ffd420a4a74ac8
-:0189e057e34c6222b17c117b712f0fcfaf9118
-:0189f0e8f2164902507b015c5f621d147be4ac
-:018a00b78a2e754fd6c003e545c9a1ee5d7fc7
-:018a1020f57714d61289daaa5f588fb7739945
-:018a206e6f4dc1b09e12d2bd72c77936c095b6
-:018a30c4a5f5dc5d51e735c6bbf1446cf003f2
-:018a4072c0d4ecdb3bc716f167d03d5b2cd402
-:018a5076115c381cea45568c7a41abfe2cf21d
-:018a60a847be1cbf075be845be20d84aa4eb68
-:018a70c2abb914f8b5908cb7308d97d029c7a7
-:018a80abb17882cd4346af4b326db2bb7d6815
-:018a90419f9b894d271cad984332d4db96e51d
-:018aa0a177df08ec3842a718f0dc2aee9fffb3
-:018ab0bec81187d1fc17e0c234b0ec1a770c03
-:018ac058f6ee391c453c02d560fb13b95a6fef
-:018ad0229bb8caab4a73e6f35e8415efe4371a
-:018ae0b75a205397f9bb5a443e4ebff82208d4
-:018af0c0f8d9ddb48aa66f3a0ebc640762f906
-:018b00d6f074df9bbb0ffc5d7667bdfa0d3cf0
-:018b10c33bfb3819bac60f977709a9cd3ca3d6
-:018b2086a642e5ea3790d4a36694e352ee478c
-:018b30bf463e97d0c08664ef107987c36ea44b
-:018b40c8100411dffb19efc15e9bc437e22bc8
-:018b5061264b916c04f3c69a34286f09c200a2
-:018b6006b6ff338fd019141ea929a9cf8ab032
-:018b70ddb5b98cb7352f58f973f5ce9b4b075e
-:018b808bc8b0bffa6419cd6c0e001d9fced124
-:018b9044c26bc7a917420b44b4499e6a4faa22
-:018ba04cefae07d21c34fd190757c76accc50e
-:018bb0070de2a89d179a301e0187ce353f13a5
-:018bc044419998f29b38e2ae6bc9c60281e5be
-:018bd07ba48c769f697921449451ec107be0fc
-:018be0cff10ebaba4f81a630cb7fbf69f41d80
-:018bf0a8c7a2e88b71a1bcdd37e389b44aa222
-:018c001516122aa4925d48d94a536c313af2f8
-:018c101ec4fcef97897851401fc7cde23e48ae
-:018c2085942230379bb5eddc03f52b14dd87fe
-:018c30d0af3c82d6a5c361c5e4c34f5100db6b
-:018c40eeda540d2f7c0276a1e3780b27551426
-:018c500aaf235317af65c3f85a7d14ca0829cd
-:018c60786b736b3a1412d12596fa43abb76a34
-:018c7020c2bb26bae2db14fb5e12c09637fb72
-:018c8068ad98c3fce6b10992251db1a592af24
-:018c901e8e06f85b9fc4a693fce12f22d87d8b
-:018ca0940f145b6f9de7ff3d1f710f84988491
-:018cb0b753cc1cfe4f7805cc1d64f3632726f4
-:018cc0a41d5e0daf94f382d139357d4d92d547
-:018cd0bf39afc531a37bc0c9cb900b636df794
-:018ce02c58409d7e19727982fe0043d5f474f6
-:018cf0354123c085dca026194e41e50a3e0280
-:018d008bf61b8d5eec2b366fe3ccb51d53b305
-:018d10a911ba8b1acb7a338884524dfa1c3778
-:018d202f46bc0545a88048914a97aa3c2f7c7d
-:018d306d64acaaca0ce849f827675df0019a4b
-:018d401c8becb3ba48c8a20c50871194111d75
-:018d50b7bb58589200012a1858e83c12e481fd
-:018d60f45a8cab99509532a0c0af776c56cd3d
-:018d7056b9659f3c8a222d4320b1e2f331f9d4
-:018d8031c3076ae5a678cf56a25b3550852452
-:018d903197b9a1fe923ebb6596f2e8ef60b5b5
-:018da0cb6f73a0b3c0ba152d5edda15256befb
-:018db0150b4b5dcb70bae505cb1dd753a465b3
-:018dc0c99d698677e32b0437d9ecda64bfc6fd
-:018dd0012a02ddaf8eb6dab7b790d0ed27ed71
-:018de0e7d04ed532fdd490b36b93fb6321857a
-:018df064c78bff746cd0534330d4524a94971b
-:018e000fe2d56a6366a7701cdbbdf9da35aefe
-:018e10e5d38b3fad2a8eb8a6cbb4714f25d7b9
-:018e2013120a8f0ebcf2c5a7b3dab4c2430bb5
-:018e3004fbb1ac87e13be8629a3c5956e79d3b
-:018e4026dc3cd3b7a953e48eede813b6fbab59
-:018e5073eebb70a73fdafe3f955bba5f1ee251
-:018e606705a670344c4682b4d7024d15de594d
-:018e70436ac814f90c03413f4600c705e29bde
-:018e8085b9371e6d9fcc6abd2227d06ff1a1eb
-:018e90ec6050e0d1aceacf48855753d7028572
-:018ea0e1d7a301e355534fe6676a30409d654c
-:018eb08b59794fb53394556080552aa8e7f9a5
-:018ec0ae8eedcb36a01ba9cde3b1976ca51126
-:018ed0ba001bb33369a54c534ec09f290e3b7c
-:018ee03a485d8aa5e46880c1bfade00152984b
-:018ef03e937d1ba9245b6fa756b5e1960040e6
-:018f00f2295dc429ac4433e067fc53b820322b
-:018f10e3131bab7f553853b876d94d6d8ac1b3
-:018f20828bfbe144025b337d557ea518cded30
-:018f3083193c33b42a8056be1d7afb504c7134
-:018f4098539d9ff94815d0f82b4ac1ec25f123
-:018f50752be03f1e8bc3f11a60360c483b80a5
-:018f6044f1b09d37fc3acd6364fac196b49d5c
-:018f701ad3499f0df53c2ae75e6690a9c6d990
-:018f8061acfa9d879807ea56028d0c4982768f
-:018f90c667d6604b4d2c19ea89d64455b75558
-:018fa0255c3fc2cc236ddeea8b608ab6c6f557
-:018fb0782a3ae255afbd93f03443b9e3f42a14
-:018fc02afce8ff873115616fe116470c889b69
-:018fd0c011f5c52a6e43c31484f737c909f141
-:018fe009c25fd60fe32c3eb1451cc9c742da14
-:018ff04567623213b757eccafd42f219fa197b
-:019000ad4f0d7fa4b6ade858dee67ba7e0a096
-:0190109fce6ff5d4fbe8ffef6e83ff4dbcc4f8
-:019020af3cc0ceb1396710d7d78a85e88e40bd
-:01903004196fe70f295af9eb90999ee073853f
-:019040f09c3c15ae5683bf4c76ce70d459bc1c
-:01905005d6b929ef2c54a763402b484cca191f
-:01906092a52f2c591dbacd7f95359c832feb76
-:0190700ed7648d9013e12e45c93181e592fad3
-:01908010760a6667b1363be0c6b6bb946dae46
-:01909038d6f76c7de5a142e0d6b6887375c296
-:0190a0315929777a7291ca469a548d9d036282
-:0190b09efcf6d685c724a7b33e1cfd518d392b
-:0190c0b60467e9a83eb8a97414534c3bbd5a91
-:0190d0bef6ae8ce6f647b7752ccce5482e9018
-:0190e0d77775833c72ecdabeacfb48cfb12423
-:0190f00c3d279fc752adf8660e58d8a8b42ae9
-:0191002e4ea395ba71e5f512e05db8a019006c
-:01911002843c8818c3a830358fa2be30f062da
-:019120c3ec128ac8eaca08699089b2fd6cd637
-:0191303306e90e59c631d258238d51cab6563c
-:0191402ee08d673c1e7e5bf73c9444d7f8e087
-:0191507b3bf6ae21efe4dc63b212b1dd659952
-:01916092eb92b941021e6fdb7443b75466c5ba
-:019170c83c743e4b386b17b3f17d7eb2adedbb
-:0191803ce01b6b187d0b8f8112c7a1db943a52
-:019190e4d23367245ea25d7f27fcdb0c989783
-:0191a0c6b3231ab85ba6409a72496367a0e0b6
-:0191b0178798d0b72290f08089e6a6c9e07626
-:0191c03b13dfca62bc9b827211a2e245551fe9
-:0191d00f6418424ed3a5a9d7ee9225105961c5
-:0191e01f87ec659e3dfcb095b9ed09b00ab07e
-:0191f06d5bb2bb0bea29b662c02c863026be94
-:019200311a737adae765545f393eddb20a98de
-:019210307754c10f04a86586084e6c8219f63f
-:019220550a2c8b69fce21b91df2c058738f0e9
-:019230dd16d90cf0f529a64c161c00633a1ce7
-:019240877756eff79b8c9cd07b2ebbdf3ee618
-:019250d47308a114de286eb20be08696e0120d
-:01926050dff304b69fe96711a5ab659c77d589
-:0192704ba775872a18d8e83aa4e2c6c0ad5ce4
-:019280ca38c99576699ed2d2d72fac9a45f64e
-:019290446eb0697ab94a39ced2e75a1870a773
-:0192a0d4b6eb69b48e7821a6882d3ea46c8e31
-:0192b0d818db0a0cd2e0c03982235ab67eb04f
-:0192c096dfa85d372ca7241ff48fd78b9bba52
-:0192d01f91b27b43dfc59cbd4e29a95eb29188
-:0192e0e5c97695d2c85572c38fad41cdcc9753
-:0192f004b6e90c552191019f567c63c9dd1516
-:0193000677df99ce7ec5ffad8828ffa4d1ef99
-:0193100fde8519c3d1ebf0d5a37154f23fd496
-:019320b4f5158542585de287cae331ade1a9c9
-:01933010546ddba03bb0a9906ae3d64abfd14c
-:0193403ef085ed239371229b571266d034bece
-:019350a4dca8ff0edc7c4463b79e7c8617175f
-:0193603eeb22d58946aa61b9a0b80a9d55643b
-:0193702e5f9819a3e8e4a2de6cbc1ae391646a
-:019380a75be1a010d328bf93464cac5c1b1a59
-:019390c2ff422fd7f660bdffaf1fe6b99603cb
-:0193a077505e63c0361097b7618ff7d33fb4f8
-:0193b0604b18adb77f6bbf9b442b677e904464
-:0193c05bc66e9c4b29990ab6b81848df84277b
-:0193d02263faa8d9eec8273eb32172b6ac4a5d
-:0193e094939062e277d0b993360ec8fa19a6be
-:0193f05abd7e2141b8f71ced103211aa50e552
-:01940097783fb29887708adb590cf918fa1595
-:019410d95b199c2b5092a552409e8c4acd4d23
-:0194204aae4a4f859873c5587d5ca1ecd3dab8
-:01943031a65b5741807db12cc97ed4c6725a6e
-:0194405d77c3ce0a53db4d386fcde89b739904
-:019450a534b72456f071a0bafa474868c29e66
-:019460f993cbf6a92821612e6c0c143b9e6fa4
-:019470f719245d81de119ae598ebe0315081b5
-:019480e32aff99b8abb7db7e82b6ba2dd0743c
-:0194906bb6d15410c1008d44130330f949cd7d
-:0194a01f39f26da71800bd3c31f4e446697dc3
-:0194b0e8b337348ba1330d4d502423f90dbd34
-:0194c08c401187af9d5fd812886dcbf18ccc97
-:0194d07d6a9d7305483b8a7b0e4109ad1d5a18
-:0194e0ddd6cfc22e287e6c802e9cd93b823881
-:0194f06180fe914d87ac0e9454644bfcbe6154
-:0195007f294ed7027be2710a576aa1926d2aab
-:019510f4a2c616a468dc3b1f4562f70bd2ee17
-:0195203f31894bc5da8623e213a4ca0a3ce120
-:01953036d07b6ef19c1c4ecf27d70f297108f1
-:0195400e028659a67aa8a22e3fcd19bab67722
-:019550580a6233c449215e1a78b18903c0ed2b
-:019560d3e49c4f002a892f87650be8722105c2
-:019570e9a4e040c9c74bbdc251d04937dacd88
-:0195801ff3fb5a92867ac36756bd42932e90a8
-:019590170e77fc87d2256ab0089cc3aac485fc
-:0195a0d61bb8f30c270f69f46df2ab96738c71
-:0195b0bd849e7aea524f82df26cb5142f9ac32
-:0195c08c0ece6fe237580a029c0816ab7f3a0d
-:0195d003b6d56857cf1818f44641a6116a3425
-:0195e01f3178d5cbce5234b19771b79b1418aa
-:0195f0931e2db3eb2eea8d43e355eeca4a2792
-:01960088921c506bf1cc44bc86f2ab26cb860f
-:019610c3e6ca8da5d1bb983acfd6e21bf50e86
-:01962007cbbca9dc68bd5e3416c8a8185fc412
-:01963057379629ea13931c328b04f84a8b1e0f
-:0196409992ae8fa5e521406353ed4527d2fa7a
-:01965031e3514612c2842ba5af8303ef94171d
-:019660282df845aad22ccc32ac531df5bb9cf6
-:0196706f99e1ba46a53d275dd09a1d3c79de94
-:019680c98ca6fa420e16365ace9c718bb86a93
-:019690cecd37d6d389f711a4bd2e01a7550cc8
-:0196a043b8cfb711ad7bf97ab7b2c66c8f4ac4
-:0196b009db9c3756addc9ee51f561b32dd56b5
-:0196c060a464b35484f3946c6167820f251f3c
-:0196d019ce846b59801cb48009029b5e3bb0ed
-:0196e0fcd420269275b25ec5396a22d89645ae
-:0196f0627ee9759cef67b4db39cfb35737958c
-:0197009965496b7cbd1d8a60946281c9715773
-:0197109212e5146fd69239aa024ee0952f1dd4
-:01972020110db469d2a4d52e089869426212e9
-:01973036def7100155ec4632bcf6f880f85429
-:019740cba0334c41e09701896997a985647e91
-:019750526e9e345b30e942603e9cae5f12a58a
-:0197607117a3aebcf6237a9cb21b5682598b3a
-:019770364cf178534662a1dcdd1ccd80319056
-:0197809b675344ba2c5b36241d80dcd851326e
-:019790b8cf298c3e95455ee410248406e9fbe7
-:0197a0bcc819130822df755a5364f80eed736d
-:0197b0a4a5bc959acf177e5dcb424713033e44
-:0197c07d83dc8eb0500edac82f61b4b4d65b15
-:0197d0186465707d4e3f2443a2d9a88af72aac
-:0197e06e183b93952dab1ab2f2343ea5c667bd
-:0197f023c31727507f2ed2467deb8566eb233e
-:019800df5af4a626e6d6d52c8e65b98b73a21d
-:01981004dd5cd8bb552d8751287757f84dbfa9
-:0198208396af7017dd2790e3b323d8311ee21d
-:01983051f11fb23833e4884f39e641d53417a3
-:019840825d01c8f8cdb7d84e88d40bdf89a511
-:01985078f565ccd7e2ef670d49d8c89ba8be6b
-:019860dc6753e34f56b7d061dfacc07f1c39e5
-:01987011988f911a0f952d5a4c25042cb8f17d
-:019880eede8aa895385a1291ae9d24f7168ac8
-:0198906c8abbe3a9961a6087122260e5c27958
-:0198a0e560fd14facc3b56e66ecc6f4f97a68c
-:0198b0aad47a25f9981092e8bde7c2dd77dd0e
-:0198c0b2053478bb7bdf235e3d004755016ed1
-:0198d074a712c8890f227ed8688cdc6d904ec5
-:0198e05a7fb115eb31dc3c57582eb0291c468f
-:0198f0d3e6e84b9c5f045150403f4cef6e3c6a
-:019900cbe5d346b5cc8ab489bfdd388f87e30d
-:019910eb124ef88cfa6c68aaa921d7c6454538
-:019920043c9ff484e0aaa3764790ea5d9ee4e6
-:019930eeda84e1e9ced1f1a20c7c6ec30418d3
-:0199401084996e7682fe00ccc009bc5609eb92
-:0199508735b472959d041d40e25f8ee9a1bf53
-:019960bf8bc9d812c73dd65d66fc10527041e2
-:0199705ef9437066b8d44401f646c50bc86c6b
-:019980aab7437e57935eca12755de7ce692846
-:01999079ad07431e8df4d3ad7561320f7368be
-:0199a031b08f33be7521c731f10cf80e4779d5
-:0199b0cc543ab9b6774c5b2d1b8605b3211755
-:0199c0fb8f1f9db31ec072213b580f2ec4bc76
-:0199d00b914a5876b71a600878479a1781264d
-:0199e06ba15cedb81eafe2f282370dae66d8db
-:0199f0e08c11ee3b1b5071126f0ab68533b4c1
-:019a00f2fd9d1c3bb998983de817dedaa57044
-:019a101670b2eb979ec62ab02874224c51ce1a
-:019a206c311154087b1639815f710fc66587ff
-:019a30cc50a2a7cf9c81b94d08caa8937259fd
-:019a4089e6d174dd6e3c8f38fb5c2883995d76
-:019a5090c31ff2be8f7349297ef3865b6dfc41
-:019a60a3a06cf6e1db46f081d85e942c12b4b5
-:019a70c62c149802449d4f6e381a2d2d4df35f
-:019a805058bace0624cbcf4319544b27e2df96
-:019a90af5bd962c78b00fd022d80d1d78b44cb
-:019aa0a2ad39b990af597c71c4dfe98c790f6c
-:019ab090a45f4f91c32fc839f59136e5639017
-:019ac0ff72ffc809a0c3dc1b4337e11ba6dce6
-:019ad0b5c05b79d39830c48ed586268e97917e
-:019ae0d1f4f4349f2e599940badd871fe70be3
-:019af0121ff80511fcc8caf4e512b41f4ee7c7
-:019b00a987e836f736ccae3eb53be0d38520f0
-:019b109d4faf58f24dd5e24a0e8806d174c261
-:019b20ea2fd799bc34fc0e9d83c349d2f535c7
-:019b302f2f1c44a1250e149fd856d88ad43e44
-:019b40eac1b498cf534b0a852d9356c0bd3d5b
-:019b50a60776d4049bd030846c208796464f68
-:019b6061bb54860622296aa25435f9a48d33d7
-:019b7068399d19728aa35088ef5522b095388f
-:019b80eba89a8adf670cde4488fb4827182ece
-:019b9063555de1099286b53514599a9ae222c1
-:019ba07edf4bf3ada00bdc99b8469a61a7cb1b
-:019bb0ed4db48825a949b486432f2bd0de7f9d
-:019bc0448ab18bc475cbfc6e39552df58f85f8
-:019bd0e6ca7fa67288541ee11192c2ea331c56
-:019be03e6cfaf6f19b49439eafefc63ea417f8
-:019bf0501cda23c755bcc3b9a1080808f711d5
-:019c00fc24c160cc040202f00914e84b3b6836
-:019c10920b0ee412116f12ecc5740ad4b20409
-:019c206122ec7b5593ceca9836bcb8b7fe6461
-:019c30b2eacac4e372b6a40024927cd1bc2b4c
-:019c407701a828c6a46629c74082a2d3bc8a78
-:019c507e4bbe225fa2cae25de5f92f39cfcfca
-:019c6008174fed63e13f68b2126e944d3e23af
-:019c7079ebf098608c01d6e8d1263794457982
-:019c80d1fba7adcba02e15d183c853019cd402
-:019c90c3df748c2df889a517b4954339713f36
-:019ca0a1aa282e860dc96691b03c90ea5c2652
-:019cb02c6fccd299a9396e2c4023af21a5b2bd
-:019cc0481bd1eda5c3f8a9728faf215b63ba17
-:019cd0a750537d1e5c4573f8cef1137812cd1f
-:019ce05b9aa20ab40ec2484bb3779ef2bd4189
-:019cf059a724eea1f1a4beeedbe22444b4f191
-:019d00b004d3c250095f9f75be96d27b1f35a3
-:019d101c68939e5f134cc3019ee07f7f23f19c
-:019d200a06aa9309939e6dfb6efe8443ec7b93
-:019d309697520d6d55aa13e7d4c6d7f4122fe9
-:019d40259b96fc74c07999d118f353e8e7fd8c
-:019d50e16718af5f18536e2e5e19c7ce800931
-:019d60b3523e9082a48a435704e3ab5fc3f06a
-:019d70cde81846bc36634e758be28971ae7492
-:019d809f14db68c6cc151a3217b852e0823f88
-:019d9013e8c6658abe7d538fdf9eaec3799dce
-:019da06a417b283ebcbf9ca3f02b0e2a1efbcb
-:019db02cfeeb776897f9f3a2eea8fc977ffa76
-:019dc0f3a643982eb0f2e5deaec4e1e1923c59
-:019dd09d62921095a956db1e8a2ca630803cf9
-:019de01a1fb89cf5b4700a0279fb8c02faab92
-:019df0aa3f72ec93df861dd2c72a00121d9e3c
-:019e00d9889f7e8dd94a765ea7e4b0533c7d11
-:019e1057aa6131f689a980ad7b5fafa0bf3ede
-:019e20c73683e7e9c4c735983449d7c83f992f
-:019e3084d5fade8c82ca1e002af3aa60f319c2
-:019e40b9b186d9f23072bb7256ca70fa5e71ad
-:019e50447029012d57daea5e437b36e07a499c
-:019e606790b8656e3ea3ec57779e226cada380
-:019e70a1e510717df3a2afd68a8636fa46f043
-:019e80200cdf0792315ddf0ec5d167af40496e
-:019e903db6db021f6137fc204e4b08de0369ec
-:019ea04bb138b537bd3373332333ba5ddb73dd
-:019eb0cfbb8d4aa703f54f367935c0354942b3
-:019ec0a91bde8101dfdc2909e4f1ea2cc89941
-:019ed0bb63044b601db8bd99bf49b31c583372
-:019ee05983a7018931859abf609fd66ee90440
-:019ef0473158ffa7f6bb240f625ab82f2df765
-:019f003911a049dbfc24201889f2a91700d6c5
-:019f10d72020ad7e10810e2e7ad17ec6490e44
-:019f2096e0e63f5db82eebc89b4c5c0be9bfd1
-:019f30b5e15f334f2d43afc0ed14a29ead03fc
-:019f409cde575acb7f754508f235f303960f2e
-:019f5073d752f5c69e238f6b07be879f66f0bb
-:019f60c5b4df76368e43e034e59eec1b78f076
-:019f704383a65f12c0c946a97788966c34ade8
-:019f8093746c640209aba95ceec7fc3ec334ad
-:019f90899502173eeaa83c0027bebc120f17a1
-:019fa05a1c2bae3ec47ed8567e4d090c93f63a
-:019fb01546a1faf29f1c5d65b3ca08058e658a
-:019fc0d908ba59d0869080b65bd70bbcc42b93
-:019fd0d81dbd3aced8d532e14d8fc5b3f28d04
-:019fe02cfe2e7f38cadff359bebe1bdc4c47d0
-:019ff07398a827082f40d0b0e2dd4d764b6282
-:01a000b025adfa0d643ba7e7bd522199b69868
-:01a0101e9e87c1ebf45a5b4ccce9d42206daf3
-:01a020366dce34b800fb779495e095454b976d
-:01a03061dc0898f8f4d9fa7c6af5dee8c2af36
-:01a040881c6c37f8f767452a58166a9de3be9d
-:01a0504e28554d94b7098f42be6a10dfef7dc1
-:01a060f208643b067adf30acfe81ba35685666
-:01a0708abb3d133222d9b2d9f8f1a8c55877dc
-:01a0800cc555f79ac1698d11dcc3dd729c3c73
-:01a090d505431d8151c712f443a148f7da6db7
-:01a0a04a468196854de754e6788472ba351e89
-:01a0b0aad53b61d6ac8ba398a9d66e63b5c3fd
-:01a0c0527fc7a4afdd0836bedc6e388bc6cd3d
-:01a0d0b72973b84e26df54c08650eb0e826441
-:01a0e051607e6b4a1d869e3d9f14397ac7f703
-:01a0f0acf7a885e52d1fb57c2b5e51fe7e3455
-:01a100d6bbb7df92d3609b524132ae4ad61ce0
-:01a110e119daf38b59646c5d6e48ea8a0fcbb5
-:01a1202a4a15ac996ed0f56d5753e50aee9f7f
-:01a130e349f11afae457df0cf8e1e94860b8b3
-:01a140b81af46b637f5e407daa20c0144aa8e7
-:01a150fb5fdec580ba6be69dc2dd968df679f4
-:01a1607db12225d874e600aa0aeefa3b737366
-:01a170fdb07ddad458305ee9dd273d17d57f68
-:01a180636b51a3dd2e13b2cd7a35b446609a81
-:01a190f7bb75887d6e723f1c566e9f0e9b9738
-:01a1a0aa645fee9bf8ee56f7af9c26f610ac13
-:01a1b0234a1b3ffed9ba544e3743cc849b8a5e
-:01a1c08a414fef48699068ee33af4a2f19cacb
-:01a1d05d5f11e8e087734531fcb5526238cb6c
-:01a1e0e16611c98e5b6fa37feb63c5f5e97924
-:01a1f04270b947ff17b55bd75f2f089300dbb9
-:01a20002f41b313a3d340b026a48ca1ca831a8
-:01a210d3a8061ce7707439840390a586a89472
-:01a220715e8939bd437b86320ef91a7f8e9d64
-:01a230c567daf9dd157422fa1c58efe3023ae6
-:01a240be4a308707d1fc662eacd204d780d394
-:01a2506873dd27112a5a2bdf234b33d44ea7d8
-:01a260f60d12f91670cb156e0dd03a3c9be8d3
-:01a2708afd2c79d91a943f3953875dfaec7cec
-:01a2809e2d084af32c2ead25ba83d2a1dcf827
-:01a290e9cba785a67b2125f49c3767f5c2c2fb
-:01a2a0844fd14d0b5fe368e9c1844ac7b01d71
-:01a2b0ff66ce90772f53173b4de8b571094616
-:01a2c05f6ee21a1b2ef35b805ae1646b6bc343
-:01a2d020da2ba57d66e99ace5cc93749dc5b5d
-:01a2e02ddc67ba8551d0d8c56d56f389572cd9
-:01a2f09239efab3617c1045fea3c2b6f116905
-:01a3007bb707caf72f0dcf5826e5927606c655
-:01a3104fe8dca3528db6bff100075a81d5b2d6
-:01a320b7c59efb36aa98c2fb6095b90305d5b2
-:01a330da35f1cb491fadf292e0db6b918b7cb3
-:01a340971c6ce7710bfdf1ff84308bb6409f18
-:01a350ad1b95c9e0dfebba35155cf19cc4a099
-:01a36059613cb0e764b58f4e2449c52c49433e
-:01a3707b1a0fdf9e5a8e25892e34b9b71dd671
-:01a3801a136ef8a0e680fb79416dd3414ec1c4
-:01a390d9acbe1f440c85fec360871397631197
-:01a3a02a53105519ec9491f1f0e1766faf98b0
-:01a3b0c8a0a6358ce04e55b139b8b53ec046cd
-:01a3c0d67ab8ac742c1fb7f9baadebd4305845
-:01a3d090451f9672f25b546e8f0229f78995e6
-:01a3e0d51239e81a120ac047d963d131cba09e
-:01a3f034cbf80c3ef5096663766145044d4db4
-:01a400f8b0f18c640bced7d04033e685bb449b
-:01a41080f8af6da206c1cd07cd27dcdce04742
-:01a420a40b820fb3c2181eb1dafcd6e94891ec
-:01a430e2a3cab8efa8c1d92d76053e22213f8e
-:01a44023614911283f704f006fc84c2216ce46
-:01a450bf3580377b835d408ededb95ee9dd489
-:01a46026981266a9f48ba887b65c264b09bddc
-:01a4700f7fa5935c8ccfb480ee2c551061944a
-:01a480175920f54153a4bd7aa82b7dd39cd73d
-:01a490eb25d2c621b27ac03d90b53e6d930e87
-:01a4a07b7ab6669b334b815d2fdbf5fa7cfb41
-:01a4b0feccfee515f7122327612580c6055e4b
-:01a4c0da3dc6a450d6e096c89e90f03d422420
-:01a4d09ba35acfd28fc4db5253180e660f45c1
-:01a4e0d2560ed5b7afe4fba4d51ae08596d939
-:01a4f00009f48d5272ab9200f3e01a4dd41f15
-:01a500a9ddd180b3d824d09c1250d983508dda
-:01a5108acca740f857d7d6ccaa6a6eaf29c945
-:01a5207084f452418034451f41dbb449ac17b2
-:01a530fd915b24099d8dc68fa31d5ef8b3c8a0
-:01a5401d68ebb3e812fa3229bdab741f395c2f
-:01a55069e7785c5e80175c0f42e8432b1d5476
-:01a56059c516a054a23b977172f4c790ed8cd1
-:01a570c7bb39ff549a98664a7402fa3d2ce9fa
-:01a5801be52f9573558e12cece00458c1a67c9
-:01a5905ac189f5fe525ab3a877b9c7b70f4022
-:01a5a00a1ffd03f47d63df4f565b2dfcb88074
-:01a5b0faa38aa36b8833772917ce84295bb79b
-:01a5c085f183765e0d3ea21f59ab2c8fcce4dc
-:01a5d0e2c93dea7852458e801fd8946999d01c
-:01a5e0a2bde37d9c9768afdd871fb4e55e2946
-:01a5f0f221e2e0cbf051cafb69203700315e9d
-:01a6000ec76f34152c7bec6c19b1c94c94ba85
-:01a610cf7732a02044c6fdba1192ded2713023
-:01a6202e6c1b74cfa08b70bb0a4b966cf51441
-:01a6305849f821f27eb3973dc0dd220d0c8ff8
-:01a6408abb7016486e124094e7d52939769a2f
-:01a650799498572f5b8291b7a30043cde88aa8
-:01a6600d0feecf208c6333139608fa85fa476f
-:01a670da8c4b19a9ea7560d91f1732472e2951
-:01a68045d26b864344174e9913685271dbda26
-:01a6904478972913f461503dea436620d411d1
-:01a6a0d398ed519494432056c17b69dd889fec
-:01a6b01e1e3549e9932ab57383bd2cce2bff54
-:01a6c09d529d5563163ff06c475052e92a8aff
-:01a6d07e471e08327dd4c4553a67c2d179df0e
-:01a6e093c78128b6e47eb0dd7096f5f95ab129
-:01a6f0d26f07669c1b32284d6c5d94ae39be5c
-:01a7008a7f8b94ce10a59737bb6030e7767b3b
-:01a71039e6c778124d177ee3fcefb6c1b28087
-:01a720d44f760fd2b210ac1cd186bbd3f48d65
-:01a73027e95d85f60e10578a83987bfb6173e0
-:01a740a7e0aa41445547164b6fa6bee75e06cc
-:01a7508ed6400f1284432f2d710e2d5a138d80
-:01a760f7973d08ef1d7f8c3178b41750183e7a
-:01a7707d434bf46eef2c112106c32c2ee8720e
-:01a7801585f67c90be323dcf6db80512ea027b
-:01a790a2b214293a08da98024c4b5bc8dbc50b
-:01a7a016728f81cc697e93d0eaa89dc0c1b9c0
-:01a7b0a06e6fb5751dacf57412ecc2c79f2f10
-:01a7c004d32f0daa40b37aa550c2ebb5bbd62d
-:01a7d034546ded4a40d6e9cfed99685bfc5243
-:01a7e0272aebddeb385f4f9a0024570bb9b9f7
-:01a7f09e0c5ee072e6b9b815a57387edc4c10d
-:01a80094d697be7fdde9db84b3449ce649ef97
-:01a810ab62a443547ee3fc1d6e5bdba66d9167
-:01a820af092a77db1a40f4d1ee1462a57583bd
-:01a8301cacd27290de9a748d11801b82aa1158
-:01a840439e8697719329c150d03ab6834b9efb
-:01a8502fe4f5c264cc809959f79313655d2f65
-:01a8606daa32af8380e78cc40d9b3c2566765a
-:01a870512051df49af5412881a8724431d191f
-:01a8800c17067f14bc6ef9d8a1562ac2cb6757
-:01a890a171a2b491187ae1fe49280b54f22f33
-:01a8a0d43e6abed1e33b434f12530a23c0dd20
-:01a8b0ae5d3a7350e5967be59e22d7f0372bc0
-:01a8c088ac39863fd9d145bdb1297c7c4db303
-:01a8d055ba10190e17bbe68ece0d7ad5e861c8
-:01a8e0f070f895469892319cffa52937cd3692
-:01a8f028b30954e24918b371c3be6d23ceea3b
-:01a900e3227f07ce1d5ba7d96d68d650a14ecd
-:01a91026244e6f7f3f1fd7fbbefe7c83b21f3a
-:01a92052ea03ff6d0145bb8af83a861ec852c4
-:01a93032b5dc3927bfda100be15e49cfa2396f
-:01a9404d928ac07e073ad19c9b372c8a1115e3
-:01a9500bbf2f6daa45d62b6895b640da08d910
-:01a960f1f4c222d8899584a0c87ec2a19e87b9
-:01a970aed55e1e195a40a4304780d01ce57555
-:01a980d05a0d6d671097287cc725c3ed66acbe
-:01a990a4d4bea715eb56759147bda91cabb712
-:01a9a03acd35a6051d9afa0edf370f6676ee14
-:01a9b093e155a368cdc904dc2d039f181812d7
-:01a9c0b35a71f1bf97a024fc6459b749f91ca2
-:01a9d0c4b98033e2952685cdc4508b5471f3f1
-:01a9e09f7e96964c08b1eedac4e8aff556b589
-:01a9f078ff3fcf5404a738ac55ae65a89f2a4f
-:01aa00dcabcfa6d26a65f3fbaea82e0e247089
-:01aa10c9c250e3e651ed2f294312af2c2cfb4d
-:01aa203df3925d0ea397ff1c1ab3a196f1b998
-:01aa3074edcae4569ebeed7119d48f635eab20
-:01aa4092ee7c831e7ea138288949f456574cad
-:01aa50cb428ab6b81c6781ec3356a765849eac
-:01aa601d06deb901db8cf3a391dfa038bcb1ec
-:01aa70c036d287e48cccefba99f89906408590
-:01aa80dfb6d3b59a51bcbba4d56ea5a3d92314
-:01aa90c3292627bcecdc2e5c15aea3841d6aee
-:01aaa08ebe8cdc627a8fc97b2508579914cb32
-:01aab0701a6e23333b2b7cedacb1d7459a5ff7
-:01aac0dbf1035530c5d804bf9cce2612d4879d
-:01aad06b510d736333ae4b38a95c4ab551d4a1
-:01aae0cd85c44b5eb1d5083ebbfa2bbd1c55c0
-:01aaf01b384b59090f451f5ed73bba4f5fd741
-:01ab0083e8b5442aa5b897a242e35f6dc74e71
-:01ab10179912a3f413ff93678337e64ae82ba5
-:01ab2007cc73288d314ba3f239e5cb25676a4c
-:01ab303763ea5b15fe22790c3d19ac1eae19e3
-:01ab4045110af745408f7f8feb4fd7eb680e8b
-:01ab50f5c955ac23a33b561c37152b66f5e963
-:01ab60361d1c958613b7c0b2e0dad41b2de1ad
-:01ab70aadbc7e9457a10a31363b927e16950da
-:01ab800ab891d82004d2e4307969b5fad0cb20
-:01ab909388be564e959ac213428299781d2262
-:01aba0aeb52c58c0f7af63d54aacbfe46b43f5
-:01abb0829dc52a8c10f1013039063038b91360
-:01abc06515f003940c539a5b4004fecd298d32
-:01abd0fc7db84d88f53d031d91c2c7f062fa6d
-:01abe05493a3c3a7b25860dc924bf81074814d
-:01abf08486da268019ac91ef66a53fe3154ac3
-:01ac00833e3c38ed2dbc3dfb53b983444eaf57
-:01ac1009400d3cfd80bc6f3cc36403def45462
-:01ac201004da2a55b479688a02d8337c93e11f
-:01ac30278094283142e54f611fe73d8caf1ae7
-:01ac409ce0d93517214495808c167d0584ded2
-:01ac5009b52c0659fa9d42ac003fd0f400c3ba
-:01ac60cd9719a1c5dece990b179256e55e140e
-:01ac70fd835287d0b55a0956d67865165ae8e4
-:01ac802219f4743a2fcac749914d07df544114
-:01ac90ae98506ec34a367faf2217ba62110bf4
-:01aca0f16834fbbbb82ad7edbe0f23d4ffc3a5
-:01acb055958ca586cbf957f45c759efc8230fb
-:01acc0f119d1f9b9f38afba9ada3d517390486
-:01acd0c39bc3752f3d62c3c5c61ce7ea9b6b5c
-:01ace0dbe02785217d12341a7bc6f46ab235c7
-:01acf0840b48b744d54dbdad8fbdafbe7f60c0
-:01ad000768b84d2ef81d5e72d82330c4609cf8
-:01ad104f457087e204b0dc6e4735540216c36c
-:01ad20c81aa6598b1281d472bae9ba6059520e
-:01ad30a28e171360d082d8957265c1cc28bc83
-:01ad4055a7b58e3b28627d8c3f78efca3f7f16
-:01ad50afe723178c8234f012049a1de548e498
-:01ad60df046bb47aae3785b234a242d8b8d002
-:01ad706c94dc5f0ac8ab2e223b3da960381607
-:01ad8046827834ec2ef5993988f5390c49320d
-:01ad90b6e1a2316daca5d8154cac41cc7e56c1
-:01ada0d2da174387459b22488d780a89aa0731
-:01adb0d695109dcee3aebd5c693ff75aed7251
-:01adc0011dd709425556db1bb8b1ec69b598c7
-:01add012f90b537a5c2aa72cc2f1c46408d395
-:01ade0c7cd722cb8961474c4f3b507713ad888
-:01adf0a21d5a1861c71a3e9a3d6e294354a660
-:01ae008ec0531678b341c996d8b3e8278307e0
-:01ae109d706e4dbb2e846fbcf9dd903d1fb965
-:01ae20635b63c66ccd1301d27c51a25ba4c172
-:01ae301027fbaa6bf4d83dd5fa064ae6d8bd58
-:01ae40f2d29791605180f218073a6674d93cd4
-:01ae50e04a866e1688c433e847818391fe790a
-:01ae6058bcabb9c84eb28e923bebfcd0b3daf3
-:01ae703e7746910e1395ddf1562df20830475b
-:01ae80abe99fb8a908b59fb45d9766ccdb441c
-:01ae902650803e5b85e2741db3d1eb4bffb751
-:01aea0da8dbdd5caf86b8ee4eae2ebf356cd37
-:01aeb034249d7e9061e1e6506dd1b99f239635
-:01aec08d5ca401fa17d7aa47f7753f14b12281
-:01aed05a27b31495f527dc35c7afa9e3fa67c9
-:01aee088df8cb9af59ef89b64206cca89a403b
-:01aef013c936a96a09a63de8381225daeeec07
-:01af006e9699486abaeee31ad302c9391cd14f
-:01af10c2f07c9be2fa4445a01e55c5dd3e1e92
-:01af2004f92484271e3a53410a9c204a413cb6
-:01af306acb9ec8ce99980319552a8bfe612862
-:01af4055e0beb483570c6a53d9937cefbd915d
-:01af5064ff0aa4f939727f688a9889592ab9a8
-:01af608150dff175dcb3bb2d92eb8d03feabcd
-:01af7007da7c2aa53d0bd7a27f3247dd197841
-:01af80b38735df790042b489f3a45ebfeb8789
-:01af908b895dccbe8bb69ce074f2fa8b60e730
-:01afa02cdb66bc4187bdf053fab18949a1e4fa
-:01afb01ab7d05d391ea02554bfbd349ee09a3e
-:01afc0719c5885add19e97729711d0e34dca70
-:01afd0c211a6c0616cdadaae8b1a1962e4ae29
-:01afe00abb861bae07c00e90637136a3361260
-:01aff0b912c3e0ed27a9f992a53669f34e2488
-:01b0008699f9bc7f242bc28e1cb15423eda91f
-:01b010ca724cd3d31ef75c94ad5048fd322ba6
-:01b02031feb8dadb7ecb898095c31701cf2313
-:01b030cbee600207d933bb407a766a7c096e49
-:01b04014c3566bbff9e6219fce5d4513e870ec
-:01b0501129a198fdcec08ccc563a1ace602bd6
-:01b060219c70fa9cd7937ed1a9dafa04d3eb35
-:01b0709011877038fdd74f0f3944cb8df7441d
-:01b08072a713ff534ba77976a178d47245aa38
-:01b09026f9d7111898c55df979573bfaa4a43e
-:01b0a0e0522e41f3902a952807a07b62268c25
-:01b0b036fa70b410f5dea6e5d7d67c219adcc1
-:01b0c0aefd72a584d01d08572031893ab3f6a6
-:01b0d0cfd3f461a8d13ce45129debaffdec0ca
-:01b0e04028061f737adc9b36485ae03db5ac2b
-:01b0f053e02578e133d555252f56c019c1920f
-:01b1006c99b46adaf72f9ce12b56b1bb6f4afa
-:01b110814886ed627dabc4375de4446a59d005
-:01b120d079501be8f5e09b99ac4ebb30ccc887
-:01b130dc9d214143ae8c374efbb83f5d512ba6
-:01b140c5155f18efc175d57167a76bcee3e618
-:01b15091c22eab5aaee72b8e9a033b37b171f4
-:01b160dd836491346c4d59087f3a11c11af335
-:01b170171fc95aa65d5b96060464d1ed0876bd
-:01b18035557fa820b63d66dc9b283eac660b31
-:01b190817d517f6633b280222d95f872c46149
-:01b1a0e86ea276951d3f9b9327bf88a266a8cd
-:01b1b017436673adadea4e28c485db2cbbdba1
-:01b1c0a1b0e7fc4b15a78dcd1e804e740ce34f
-:01b1d0da2b91b06be09c42b902a6284cd9faae
-:01b1e077ed6d9b02b02731a289d8e8fe3d6692
-:01b1f0276f76112292987a3a6d89914eac8b18
-:01b200e5b54358fc1e4d657f2025dac21110af
-:01b2103d57a99dc1a3dcfb2603a74b678e21a4
-:01b220b8c173088a76c5abe66ef6c77c5856bd
-:01b23059efc4020fcb51fa255c2a17a7037716
-:01b240a674e70dc7efde54c0d7638922f2bd0b
-:01b250e58573957c6262c0732dd962e355c97b
-:01b2608b227d368cf85fdf013bae011ced05cc
-:01b2704229e8245d0caadbe14d3e786850f5ca
-:01b280fa11fb3ec905dd86be1e8fdeef859929
-:01b290b9c6c195a6c0c87e9f7f80bb165eadce
-:01b2a0957cba3a078c38b2a7e6a46e65a2c567
-:01b2b06248733625b8775e07449b2cc7323d87
-:01b2c0df3bd4811b5f3a43299535d76a159e59
-:01b2d0d4b924be44ef3eebc196f8e458ffd84f
-:01b2e029a97842694446b2a2247db6fc7e1c8d
-:01b2f0b6aa94a480a549e365ad83fd6afdf477
-:01b30054ce2019f9d64a5309be4643bfd5453d
-:01b310eff942e0d6f0c1b421e27cc66ba7a09c
-:01b32020277344f0ce32808a2800bef72d0612
-:01b330982d30ec7f92b04537539c73329650b4
-:01b340b217c16238f0e93f663dd47ae18491e1
-:01b350d573952d667f6b4caeb54ce06997fd10
-:01b360a8d6834197a57450b8a0ba533777b08e
-:01b370539778b6a9436043a944339f1d833a29
-:01b3807803d008d79c15f94ff088c383a8dfd2
-:01b3900d4b5c291a467c03485a16b9876498d9
-:01b3a0b0d364b88a1156f5d488581fed214588
-:01b3b0f82b92e5e7b8f4ddcdf012f250a1fd99
-:01b3c07264d0d710f486118d68f9cea6011490
-:01b3d0e4308f63cba78481574315e50c808e04
-:01b3e0a74e129be7603409ece36ff53ccca693
-:01b3f06b1ab4d87a8f32e4856a1e2c786435aa
-:01b4007a62882e7928957ddeab551aa4c06b0a
-:01b410d5efcd0120b2f8a94f9f57e1e377c7c3
-:01b420b55627a8243dd473f5379750b4a68371
-:01b430d50d7aa7919641f5f37899c7384dc24d
-:01b440d22ad95e3ef6377c3305053f8070805d
-:01b450a174bc585c3a53d39be5ab9865998cd4
-:01b4600fc5183cb5096b8aecf15c94adf05b3f
-:01b47089ae0904d76b108b516d3b3bf0971c3c
-:01b480ab6b3003b3dbc15c269d6066278435d5
-:01b49080454ae9db0eae4141a7213051fc1be2
-:01b4a054437d7db3b2d9e06c2cc6316a731b7c
-:01b4b027549bb6745f4ae2f43aa3ba749b09dd
-:01b4c01cebecaba78bd23627a46d23b59f4049
-:01b4d0e90159d1d3ec453af6b03626bb559134
-:01b4e062b1b6dfc7fdbd0a1d82f0e24c963490
-:01b4f07dbf46082921751880958ea53bb2f53a
-:01b50003955f18a0ecae0fe366c5224b3541df
-:01b510a031bf0e49103219434ea1ceb9f2aac8
-:01b520a93b3bf36c65e886331889101bfbf9dd
-:01b530f54e0f227b1f3c73221f842ea7af083c
-:01b5406513ddad0afeeb767d220d36cecad47d
-:01b550cb14c77106ff6f6dff9d4de5988ccd5a
-:01b5600433c37987e8de8a788846ce0591958b
-:01b570d21de65b9d35020ead148e29ddd86b0a
-:01b5802aa5a959ab24bede9d8c2d31c0b63239
-:01b590ba5cb31a79c32f4b1b947de5135cf5d3
-:01b5a0b8a3fbb84f0c001008ce869526293bd3
-:01b5b09676d88229843cd8ba7bc293df708b45
-:01b5c0a8e393fba6444edb5138cc78496cead8
-:01b5d008b089a7fb2a46248e4add53aaa393eb
-:01b5e065df9f1f9eca01a12b8e2c38c394e64f
-:01b5f026144293d8b58c46f6f900104f4a69bd
-:01b600f7f01b249e477f6df5f45f5a4b41a23e
-:01b610b7c1b5dff9393a78f66188f32cb08f1a
-:01b620679e534399c75bb57bc4e8c0b9a029ac
-:01b630aa07169948f500209a39a1707c2f95bd
-:01b6406c15002bfc208c7ab6f8c5eab80dfe67
-:01b650828a54e6792841d820d9b97de5e11656
-:01b660267bdf1196c12f9c2c996a5e285ff31a
-:01b670b3d6e3efd3684dc8deb49119bbf510b1
-:01b680ca5c1e83c246161243de6ca4d3b96fc6
-:01b690b097a2a59a330d57a36b5acd14ede17e
-:01b6a0f384a5b58208b8f831fddd3195c6c2f0
-:01b6b063728cbd6335e24443ee0b104ed6aa9a
-:01b6c00d111a69eda44660ed532d2b47c9193b
-:01b6d08d989b0b57b4ad763ca09c68de95d00a
-:01b6e049e5955b1e7c39f2081042b5d13059ee
-:01b6f0c9d32a015a9f0a1b76c24916a11d37c7
-:01b700c937838271c82b1bf7eda2d9995b60da
-:01b7106af8ecc4ca2d5b90ac959db1f2e192e8
-:01b720b752c7131679a25decb27e4962669057
-:01b7302bb0666db44d44a4d6360758663d531c
-:01b7407ce648144a984302f3164c96b5c1b254
-:01b750411a13074c1712af185e59b72ed5795d
-:01b760670691af4675eb49f2ea98af65253f87
-:01b7704ffa725a027a0f014d2057abb320be99
-:01b78071d8347da5505aa8d560cb606f0af1c0
-:01b790d548db6bfd0aa6ea8740a1b012bc6d67
-:01b7a0c0307b63ff5a20a1e377c74c6220da9e
-:01b7b01af3c0119823a37c0716819a8d768ecc
-:01b7c04d178185562bf481658f86da29b8fb44
-:01b7d036e49772dbc271320aaed2e3c63af786
-:01b7e0143761af3ed6144d59e5018d0e2dc8d2
-:01b7f0896a344a3d35199a26c0c780e292217b
-:01b8006ecb3e87c016e8b04f580a902d9e6852
-:01b8103865ec3c2b14bcedf1c53e8848a55a30
-:01b8209ae8220ff2333b6ad7384f7e67b1ce3e
-:01b830064f22769699097e1d4d291e14647c15
-:01b840445495e00668a3e1ed8c54e55fc8689b
-:01b850ac585facc94034c0185796254e6af565
-:01b8604d8b57c531b2ba27b0e935d39231cffa
-:01b8704140a6ae470669951f6667a2420c580d
-:01b88028ea8adfa04932985eababd0f1a31859
-:01b8903e3985d4eced5e49e4f4f10f63673899
-:01b8a0abd2a65477594fdd8b0d12b44bf6d577
-:01b8b04216759c5e1b4e66323257440d059114
-:01b8c026cdebf2a99e595057e5b44630dc66d0
-:01b8d0ddbeb8a6902bf6ab3f5eb95c668adade
-:01b8e0c861cd7d412dc67ddd308fa24364ab02
-:01b8f05553bf09056e5aa52ce52207a21911d8
-:01b90085fa218508a9eb7a31b7dbd1b43cf6fc
-:01b910ae788901e62366129b99af1eee8e9d7d
-:01b920b42eee2e8a635633d2ee478d49d6fed4
-:01b93098df6b90e87c94fb249cf5e0f2ea33fa
-:01b940251dc157443809ca7b67305244839437
-:01b95083e3f21d9d81de40d1faed62b70d8079
-:01b96081959d802b81de9cdf9bf3dd6fdf8450
-:01b970c3ef594e0fc0c5d4cbc00a3c514f8143
-:01b980b0e902d0f9c3c55559bdef334dd4237d
-:01b990f3efca6f49832bf9ac34ae88a4d3ff99
-:01b9a00de6d756e7c8ada17b2156a997cf54d4
-:01b9b05a8f9fcd7aa15326c6f91831016479f9
-:01b9c04beb1cbf937e206aa24159ab11b39de4
-:01b9d01508c4d83f65f065e3e44e2867bf8fb1
-:01b9e0c5e24120e2e65f1754ecfbd44eed73ae
-:01b9f091305260547f9a7d77ef07fddbbdedcb
-:01ba0047a92a9fb13511ecca134ceab3289967
-:01ba10696a96db2dbf5f08d4bfb19f4375a7c7
-:01ba205428a4991740ebe35d9fc33918b39cdc
-:01ba30dedbb7ffbba16e5cffed5c82a103f956
-:01ba409ce5d929df45f15c7176f9f323c28f40
-:01ba50fc30c0d7d2adc2e7adc34e87be4d3476
-:01ba6001a1535e5123a12a55af9be7689f712c
-:01ba709859698bedc7db2f9602bfdfe42cc51e
-:01ba80b930521e4afbf2e9020c4e72a32e0070
-:01ba90be36ecdbf6574838d5ebff36b5d22b67
-:01baa03abd0e0dbe25c59ad1adc12c64c3eb29
-:01bab0eb6afad2449db0013c57b4947fde005e
-:01bac08c01e28bb1731ee41f6ddc11aa794f58
-:01bad026414a17171361ec68a9ccd2131b7699
-:01bae0ea596b7132e4035871d6ad3859b9ee98
-:01baf0e96a2df1191706f50f7e79fbe26c228f
-:01bb002219fbd35327552a605216f0eb8797b3
-:01bb107f41d4c0c5c0a02754b5ee6cb94fcc1d
-:01bb20767a3ecdde860123c6428de5f2118676
-:01bb308755e1a6103cfc0d7e80ebaa89341186
-:01bb404304cc4f274377c34b560ec351a54851
-:01bb50f1c579cd800f2c32a78a383561554ca7
-:01bb60e565c318dae3873f58dfcd0fe88a602c
-:01bb7099e8d89bb125c33fae08f97c52cc6871
-:01bb80e819dce2dc7c609a5a357de3443999d2
-:01bb902db7581577e99f023f592ccd3cf9015b
-:01bba02bb54a6e1003cba5b7cdb20bf94b70fe
-:01bbb0de0c35393478f25577ea74beda940bcd
-:01bbc000bc2afd117c0108f1bcdd1303667d68
-:01bbd03973a8b91f9caf2970f0c034c4625260
-:01bbe03b86ca226c5ed54b2c565b1cab00ba9c
-:01bbf0ecbf7e700c937b49e5e829e269703fef
-:01bc00e11421bfab559bc1370bed059b6528fd
-:01bc10b29a8eff1df2f6904b4e86ddc77089a9
-:01bc209d0cfb7322160771b005e7b0ae6f35b5
-:01bc30064442b9c46f77c91e68e282c85fab89
-:01bc4000cfeae5fbb9428f0c584aea8792b7a0
-:01bc505db850d6a35fc7f537e0ecb7c0dac84e
-:01bc606bcf58ab405baabdcb95da3462a5439d
-:01bc708a4006aa7b7ca60fcfbc63f9a43aa985
-:01bc80d1d2055b1a939166c2ba3278d08f750b
-:01bc900ebbcdd2d7ae441b315181d6d430b684
-:01bca07a604e7418ace6401e450f98a4960ba2
-:01bcb0e09daee21b694a6dda13afb3cbbbf07a
-:01bcc03e5c2d870f98a8c4d54fe893424e7cc8
-:01bcd015d720ddb735c7c862b2f23f70e99813
-:01bce0c68d57cab5756cf697a4c604e8d63d0a
-:01bcf0fe51a7663d1c84e3684599b91b8b72ca
-:01bd009f1d08c2fe943a2b24a82a3c8d113158
-:01bd103d79bd35205a542e01b0b26ed02e0898
-:01bd20111d85f901255acc302bf473f7e4efc8
-:01bd30cdd32f929d5de76cf06c63a328a2564f
-:01bd40916c6b9d4b284fa1070c538b10abf15f
-:01bd505c28d8a7c8e510621b187f254fe76657
-:01bd601a8b627a4f5737c3c4bf08877bd88423
-:01bd70e1c7a6c9f66772d813be937dedcb8d67
-:01bd809b3d3da397b5d47e23a5140acd6f3f48
-:01bd90a65c4bdc09b8f307a38714095a521d6a
-:01bda0dec01095a72ffe125803c4c7e2a4b069
-:01bdb0245b677d1831fdfd0b1eb9545ab0db73
-:01bdc087d93849f18ab44dc95ea705f41f103a
-:01bdd08c8c8fd52d7723c8dbe0d56117a2c104
-:01bde066faf8133e3a253a4306ec40e75f230c
-:01bdf00d6e0ace76a3c33b5ecd14faccaa880f
-:01be00536363e60110e60228cc5341b2b3a513
-:01be107fd961eb6b623644e98650f120c65566
-:01be20b53c32bb23a5abb11dcad83b01f46046
-:01be309901d4ab6ebb5f6744df5ea2e2f67441
-:01be40396a0e155e6684c1d1f513410557bde1
-:01be50d3d990d992630cc1ef81279e42c61bec
-:01be6050352b66f4c29b631fce9c73e8447b6a
-:01be70d2941c70b22bd42ed3ce17a2d5ca2a5d
-:01be808589002b3d76120593cf510cd588d517
-:01be90fc6c7e0df1bd462790eb2ebc450900ce
-:01bea0c4fd54eab52bdbb186f606aff28d903f
-:01beb072fce6f5e96a2a0cca27426979369ece
-:01bec0a9868674d33678ebe63de9b62a99c034
-:01bed04e327a3f85eeb44d4ac98e2b551837af
-:01bee043a5e35b3537ea55c38662b1b059a965
-:01bef0388e0f5b7c1fb4de4075ffb2ee993a77
-:01bf00dcc8e08bd35ef56e84399724cfad1120
-:01bf10f8bf109e8fb7cef82919caee16d7572d
-:01bf208ef9c35c86347a9a902507220a1175ed
-:01bf30226c70e496b5f74612940d0b9c51c102
-:01bf400f6e168f59476730a3f03e838e8b8144
-:01bf50e10367f0e888528e185f35b21a4af5bb
-:01bf606842ddd48769611f652f2ba26cea140a
-:01bf70e189ab3693cdea62df1a58df17da9131
-:01bf800d9a88f378da1873fec44fbd1602c25f
-:01bf903416f1b71c6572855a2ebabf6edb11a0
-:01bfa08edd8b77ecef16f87784b412f2fa2297
-:01bfb0e0af333a372d714f410bd35fd5d61c4e
-:01bfc08d6a6d79783fbf404d388efc2a7f3335
-:01bfd000e246264212363c93c905ed3dc1ec59
-:01bfe0f4b61ac4ce7f6761ce766bde4de59101
-:01bff0e28970c07ea88e637619936053ae5425
-:01c00043b854cd43ec6b5b388e570f3c038165
-:01c0106475a6537e0c8b1b0c29b248c975d460
-:01c020ac5c48ee626ee544654903b9550c5a09
-:01c0304abb5d947c895ff1d440783b66217984
-:01c040aac06cb18779fa0b95b7aa94a845d6f5
-:01c0502e8693c2bc4ce6e72d1eb661161fa735
-:01c060da1e40df4ec755c42e91055043d091f2
-:01c0705d33517654eec3e5b45e820f575b13f9
-:01c08007a36a76d6ce4c2587344193f97b517b
-:01c090ed468305b96b81b61d3a6fbbe3cff12c
-:01c0a0a184775492aa8502e44063172b63d000
-:01c0b04672913ff5a7e11b929dff33859313b1
-:01c0c0f7a47b6d0761936fa673f17e4bd4ce22
-:01c0d03380bbc1fae0bbe5a01895f394d61527
-:01c0e03292745944da0ca741d19ea33d79d9b8
-:01c0f0d224a5c90452f9d0dfcc946d422bf5c3
-:01c100df955d299a016e1f030d0a60bacc9c23
-:01c1105d3e29890a8056338ea6c3832022ee33
-:01c120ac6bbb4c1b834530091e6abdc2fb6973
-:01c1304824ed5f3e726750b78246c7a7c474b3
-:01c1408ab1db019a8b80308f51b21750974430
-:01c150562481c291bea9ad3d03778ce394d070
-:01c160203eb5695a7dd4ae58cc7f4a359e8595
-:01c1700143d8db2f4023fb3a8c2ceb4e6f982e
-:01c1806214b3a2db6e3038621a727ce8ee50cf
-:01c190b44b70fd5225836ad41588e7b5a41dbf
-:01c1a06a69dd71801293b108bea0ba2664034a
-:01c1b0f44938748655797492f454828f58425a
-:01c1c0d610a5a67cc870c48f5dcb4911db2a8e
-:01c1d06eca6fd99fce73e4d88e1f99026e07dd
-:01c1e04de9849c72bf27b489b99c0b81f5c364
-:01c1f036c30dfd1c57779f82d1dfb43217744f
-:01c2008e32c7c2da072f332c57bb99a5638063
-:01c21084b3c82ddbf037e86b0d5bf63e333afe
-:01c220bcd40c06c42d92899be4372d153beb15
-:01c23063be25078f3a07e271e4f8433437fbec
-:01c240010e1d9a81566ecd582f92dff46cd73b
-:01c250d7522a17cbbb0b608a710a9923d296c9
-:01c260deb4984d78a027f92a19e15e4cc2781e
-:01c270cc091a907c5a71c15fb30c164fd3da20
-:01c2801c21ecc24cb0b4a6a9ea7c290c48ed96
-:01c29069b42c740137798a3a97f0a14b88a946
-:01c2a023e65bd8eba5f9816c4e3eb9fc6af2e2
-:01c2b04c00a04a469106f006441c19b30ebb04
-:01c2c0432055aa74a5e2081fa807f645e30edf
-:01c2d065f9d0f1d04e6267b986f938d2ef880a
-:01c2e0c631cc8b388017710fe1a44156d9f1bb
-:01c2f0d3f3a39c1efee34a92854435615017ea
-:01c300616893aa00b410d65cff819d718a93df
-:01c3105ed444f894f7a29eed2ce73856b6f28c
-:01c3208cd2443dd8d6576899244a76558d38e0
-:01c3305e0a19803a98cc6614ca80431cc90e03
-:01c34094e86acf24c9d7219337326e27f79fd6
-:01c3500395b7bdc057e8fc8f25c152cbb41caa
-:01c36055f77768232eb3d34869ac824fe46c12
-:01c370f2cb319893221223fd71aea9f195d880
-:01c380fb3bf4a31ff297147d4e18813980aac1
-:01c39023ad335f5cde40cc55b60f061103d414
-:01c3a0aef9edb1c970027704322509fef921c7
-:01c3b0ecb358dda3f01080b2413c93b0ca79a9
-:01c3c0c803f96002c38cb6b6c5965c657b7658
-:01c3d0eb2210702195e4c19cc2edc95682b2d9
-:01c3e0477a8660da27b21b0aa2aca5e3547afc
-:01c3f00eea990a692ac3286c217bf49286885a
-:01c400d82594e5fddf52a5b55f46127490f1e2
-:01c410f3e4c07828ef0f1ede8acebe59d390ce
-:01c42067b647fdce508104b4c9dd3c1c3139d3
-:01c430402c3f1750430e3d99cf3f5e466518fa
-:01c4409047aa42e1bdb1c1d5a2b314bfc4dcba
-:01c45082873c71e7eaf52b22092d0cd47c2906
-:01c460ea186f4ff4e08044f0a0da84a17af39f
-:01c470328deb59d996355279dce94ba59062eb
-:01c4805c7e18673c58b15a92acfdaebb4605f7
-:01c49034770abb340d47de9a2f9f75f3598922
-:01c4a0a48ee690e917eb7ba1eda727394f3aea
-:01c4b06e473a680024adb4a02352a74ee851f3
-:01c4c0e0eb8e356612844998262152864d6299
-:01c4d05ba47e68fc2d35111a94088eaab76905
-:01c4e0105ace2413879c658428add4cded9741
-:01c4f0398407935b59d1fcdb59f526928aaee8
-:01c5008bbda78e028c60dc01ef8baa07a8c63d
-:01c51072bdbcd57770a9ebdb2e69d22fb5b9f7
-:01c520c85bc08b2f835f5f7020d501f9600b2b
-:01c530d72dafb06d7244cbcad4359497829e77
-:01c540dae7d76928290fb60620706c43bd1e49
-:01c55064cd852aa1580e7b973fd9771470ebcc
-:01c56047a932c5324028cdb24a0df86f776034
-:01c5704a2900246ed47420815c87cc3c85ce4b
-:01c580178a0a9a59888fb210852abe36f8df3e
-:01c590d1bb47eb44dcb4fe0983faef467817a3
-:01c5a0783dbda48075327f77fe072c550da8e1
-:01c5b0e6c93ccb38f25b2c830d9614cf31d20a
-:01c5c0297be77a51746369ac1e53d4b0bebf97
-:01c5d0f3df3432d883f0efd4aca8cacd968377
-:01c5e0435e03e8f5ac3baf68feb0b5d5bafb97
-:01c5f0af3bde73d6ce7d96f5e8914aa42c792c
-:01c60086c11f145864be19352f79e4c7c6823b
-:01c610134e232b82c3b25e6ea1c094a6ec51fb
-:01c62084729d5e4ad01b0b4959497526631951
-:01c63031aad1b223d61f0d2a3dab7cf8872d50
-:01c64070af5efe8bc29701995033d577adfa0c
-:01c6503c8cf4d20c8bf608c24758f0f6b65e29
-:01c660c6af2c3fbaf3f1cfb2de599e8fee5dcb
-:01c67061a66231e91962921eae3f8ccecd7298
-:01c680431f62de84dbfdce938714fd2a2ff653
-:01c690a9b3c9e8b4e1d2c69637fdbd0f7f6931
-:01c6a0e6918fb135772e440632c36634c64b17
-:01c6b058c6523ddeb0b84205277dc74134585d
-:01c6c0b7581c2281cb99b8f526e0050bd59b05
-:01c6d0b71a60d16f79ea295d2c195881dfc46c
-:01c6e03007340ff7e69498f31614b6f97b819f
-:01c6f0b70cbd653fa5532ab1a597da181d6335
-:01c7008d12a2708932f7c38f8cf01d69fbeb47
-:01c710f1e031ebcc7b8b0610871aa39c526d6b
-:01c7204ac1c117281b8f5537b577747abdec4b
-:01c730dfac8a3a20b4b79cb0897292352c4aaa
-:01c7400de3819ca22cd13e7de930f892de04eb
-:01c75061b957e82f690d184fb5b58017a9eb1c
-:01c7607f97dcf50d8948ed56bb7241ed5b3688
-:01c770e9587e17a86c572b0b8a3fbf90b522fb
-:01c7802be71c3187ff327a0a51fd57b03c755e
-:01c7909316ce74295b66b32a387cb720671847
-:01c7a0f665f531265ff35500e2290e9012efef
-:01c7b0d1d0311bbbf04989b0bd41612407c6d1
-:01c7c01d7aa7aa10e8cde0337173f96a438d73
-:01c7d0a61a31f51dd1ea68db25bdfa0ce7765b
-:01c7e00c6ac84efc62fff628410384fdb429e7
-:01c7f0382256532f00f108ca19c7757f147629
-:01c80016b9ba97222bee8dac2e17fb12316c10
-:01c810c3275230f3f8cefbe7b42c1ed52a4f63
-:01c820fa158cd487d64bf672a7603187d92f7e
-:01c830b0d6528ebdc176f0237843b9fb57923f
-:01c840e8d6abce0dfe41d76bf5fd398f7ca4e0
-:01c850b39ce9729c0f2c51fed43627e8562826
-:01c8605a7096123c972f561b239896beac7d5a
-:01c8700c4d048a1b3442a05d01a8ff1227b169
-:01c8801e66cbff2a934ae1e41dfaf2506609cd
-:01c89029c6d5ddb0ba3e0363168c28950269b5
-:01c8a0900fe2faf89f159b637c914c19f65ed9
-:01c8b0e00d3eb9956b3337ea3c4915301d379f
-:01c8c03baee520bbc63e29054a0542bbd65812
-:01c8d03eda542aafb65e3a15459a620955b547
-:01c8e0a6a2035032f2d08ca0f50f9850e739f3
-:01c8f007a83da764c1b54c04e0c8e877de07dc
-:01c900f0efac7213da597315301386e1bb756c
-:01c91087f28b7644adc914308ef5651af4670c
-:01c9203b60f5a8a6b4486a0f4f62a41dc6058b
-:01c930d0742c47bf183cfa2cc9533cf984ab8e
-:01c9406c9d82a27808490b91bc0e6cac0b1fae
-:01c9501b40baceb95c4c60306b6e9e2ebe4dc0
-:01c960d96ea039074442a0b35e0bdde900e8d5
-:01c970522e41fbf38dcf3a6b3187773449ce08
-:01c98036f72993fa21666bd82fe7081fac5084
-:01c990d486af01603d7e7401e0f063e79a27cb
-:01c9a09c432d9beec745af94a06847a5f2e651
-:01c9b0122e9ba9db4af86d937373938ac9d852
-:01c9c0b1e56e60d6990576e0e6ff119ded11d6
-:01c9d04c961faa5b21c7a8a7b93dc1816e0002
-:01c9e09d9709e6c8a76bf6383f4901b5e43f39
-:01c9f09a5d59ec3cd823113bb3dd26bb2749b4
-:01ca00d6805a7cdce54addb68cd447f5fad390
-:01ca1093f6935dcb557a2578fea5ca86889788
-:01ca2059617193d14ecba0c483fd8c43145e9e
-:01ca3048f0e59a8cc2c0185c4ce4d2106a6de9
-:01ca4073d4c4e177e2b126916b78b0ff17b066
-:01ca5005db006633f5c1ab2fd47a0142a39326
-:01ca60a407061e8aef0a2c3f3707eebb85c3d7
-:01ca70f2930782bf883a4f6b8df804c4320e78
-:01ca80addea49bce28185471cdc3f1b83bc364
-:01ca90e1f290d754073c62bd804b8c3cac1e60
-:01caa03a0b3eada3800ab9bd7b9f5a8765d168
-:01cab0161101af27c23521bbdbee94421a22bf
-:01cac01dd70f5491717b727bf560aa208e2288
-:01cad099b00b4380a31d8c67062600b5895277
-:01cae0e0239347fc7b75239450c465bb69c243
-:01caf002cc350d824a77daaca3dbdb1a1bca2a
-:01cb00185013ec88f563b3ee4fad02402a98d4
-:01cb10bad2d1dc3ed34c40a8a5649634aa71d0
-:01cb2022685037cc7c60d32dcb47d02091b959
-:01cb30480e21cb2a6bd245b4f270882d142526
-:01cb40fadc222afc168fcc8e77b74980b6b28f
-:01cb50efb3b83a8ad660110014730fe9aa48cc
-:01cb6047cbce30bf59d5eba086a6fdb2877b1a
-:01cb70d78e9c9974ddb0cee1bb9868b367ac25
-:01cb8038d9617e83c9304e4222c56a667176d6
-:01cb90b122fc0ea20c00650b493b1ca2690c8b
-:01cba0dad5f851ac4f059d43bc7134a042f1b3
-:01cbb06aae7116488996f957b87a2ddf1845d9
-:01cbc0079d5c388a823c6003f89da678b1498f
-:01cbd0e6407b1d63af27f996716840e9e385fc
-:01cbe027304cd41688b8559aeff5e9ac634e2a
-:01cbf09637ab9e0e6549c3494daa5ed7911a1f
-:01cc0068b73514be9355daf4c18de4357ab17e
-:01cc10ef00d75dadaa39bcdc6259d3f5e88a7b
-:01cc2047d10af3b2d939255644e5f21ab45cec
-:01cc3011d005a866e082db75a7f52f3d94d927
-:01cc40cc7dea2f0107593f257e476a3b404feb
-:01cc504397c8bd3b8230e1e0629b193184e9b6
-:01cc60e8523143e52a8853b073e12c1f61c227
-:01cc70ece9fa74536cc2090a6129e83e973155
-:01cc803f77a250a4c0a932537fcb9b05e160bc
-:01cc9091019ecf2547df9472598bb7c7fe26f1
-:01cca01d1b3c86c8035d3f607f603415354a46
-:01ccb094b963981e20d1b43522dd3468ce2f46
-:01ccc0190740929960ad9ad55feb0c97de3269
-:01ccd04b0c2985db54edd9c6cd67ca91957095
-:01cce0b082762ede15ee42be76d3b12902f465
-:01ccf058074d3c25241731fd0d5a123fb359cc
-:01cd00e3d1516fb1fc72e16784cd1d07f377d6
-:01cd10c750395cad566d49e8ef5fc258e1cdb3
-:01cd20836d51c8446bdaafdf560acc53566d68
-:01cd300a9671e7b3471d36826b3e4b39ec9073
-:01cd40e85b9e48a6a1b2316a6c0a21439b0c90
-:01cd503a023c999e3ee283ff5d1cbc21598701
-:01cd601c4da723fc1b78c8f05fe4ec6b7d92ff
-:01cd705378d362afd1efa042c2f03220927da6
-:01cd805aa7898974c454eaee127aa75783bac9
-:01cd909e928a2c7f0aea20d654ae15018551cd
-:01cda0d2ccb9b7793d4e6a09dc561bbb806449
-:01cdb0553e9cbbc43e6744565801d1cb7d1b49
-:01cdc0973d073143e2e6e79563008491bf2628
-:01cdd0cd94d7735c5f62b573e2ce207009f741
-:01cde0136d641d05c1a11ffe03ba3545372413
-:01cdf034d50843fc5ecc61589381d82f237cb0
-:01ce00f6e017b606a9217545e82170dcdd0747
-:01ce109a682737754cd6a5506b1152540781c2
-:01ce2005f78e5324c58e8610410795d117a9e6
-:01ce3077db00cd5b274af132a2ab58badcec43
-:01ce4086524de80986bf9f1bfe2dc6581d14ef
-:01ce50845cf2fa59b47baaf9ed14b05591a60f
-:01ce602bba233b3cc3b9ffdf6b8fe6d2769a89
-:01ce708e2c38d85aec295ef41041bb658a5ef7
-:01ce802868e23b0191568d6f3292fe74892e05
-:01ce90c3307e0f510d60e0582c125f653a4f1d
-:01cea0e3a938fd3d3ba910aff1f883ed4430cb
-:01ceb0f126239c5017a92a1df43997b75a6f34
-:01cec0bcd7a9548df2996071ebcc5ba4d20c6d
-:01ced0a4840599d9202d72ad61306dad41dcce
-:01cee0eed3b85e02aada512541a7882bc4c2e6
-:01cef04678062b56e8b827999888cebaa996c9
-:01cf003478f69c32c16a5709be0b9e15095a10
-:01cf1076cc1e4c23ea120cde9a3dbb8888d925
-:01cf2072978dbd986e8cdbc4ce07a2dfdde4cb
-:01cf30c7b307fb402338f935e6cbad28326537
-:01cf40d5b9190e63ea6a7746b50dfb8a1135f4
-:01cf50c8b296aa466e23e0fbf641e41320c5f7
-:01cf6069c1adb9cf24b25b25d8625297fc5f03
-:01cf70daf4321bc9a11fd8531d3e473ec0ee55
-:01cf8002d250ed5471b0c6dc9389e9fca46246
-:01cf90660e109825aa53af00394a9d9956c021
-:01cfa02d42125ec75ac87f57d2d8cf00e2753a
-:01cfb0e32d2c5342bf9dc217aa33a4faf34e48
-:01cfc05c1f193ae2166bdf36c7f9e503945614
-:01cfd001a74d9c8a330c166d8ae9924cee9523
-:01cfe02f720f01d3167d88454a9679da833700
-:01cff08af4d85afdc90427bb7a5911f893e0ce
-:01d0001bc7d66d86d3644de587a7e111311596
-:01d0102d31c80a9a2a95e2494217594a0e101f
-:01d020d001af6da045c9ea1b47c2059924859e
-:01d030c7a16658fbc1e3a0c8b1be51cee822cb
-:01d040d5b01f1944d72577e8eff86c460c180d
-:01d0502d5075d82a719c316479d506d85d4891
-:01d060938e3aee190a557d31955811291adfdb
-:01d0700dc085f984fa4e2ce4ba2051b6d45ed2
-:01d080b6d359abfdbcb73b7c07006f686ad2e3
-:01d0907589f39115680ec643e9b4daa540f0e3
-:01d0a0e27cac48fd51574d0e4c463986f6c48a
-:01d0b0c5c71c48786a0978a7df3039c147f68e
-:01d0c0824224eaa6c9a86f95d05290a3edaf19
-:01d0d0bb09a118b472b70fe38e21463e92a3b6
-:01d0e0ecfdd628803e27ba40e7de6a3df28507
-:01d0f073298a996b44df10b35e309da4ca5bd6
-:01d1001a7e214ae32c2967deb70c764df64aae
-:01d11050ff4af9a17b340a115ec620ff0fb555
-:01d12051c98d08928ee46464f760d2c5d02cce
-:01d13094dec807e37b4a65f396b32c88a85201
-:01d14081bdbe4e92f9a73ec045a6e6f5147608
-:01d150080318206ca87475b64e9f72413210d9
-:01d16091f8f9b86ad77b3983109e3c37d15b9d
-:01d170a6d3af1d17782b895bb0b12eca04392b
-:01d180847b25e6aa711dffb9a379f312fe314f
-:01d190625ed6af2808bfd9d580a42b167c665e
-:01d1a0c7e764a32e525fdfa7bcd2b4d32a884c
-:01d1b0d7292b2f5cf84ca0378eb8783ed61169
-:01d1c073835d80e7232f5d59ed1e25102490e4
-:01d1d00c168e2f0dd9a9263f73cd609182e4f5
-:01d1e002dc439852b6abb2d00825540d415cce
-:01d1f03c8599d74418e9091fda9651bc41146f
-:01d20004606c62f55c625f983c8784fdcd2e87
-:01d210b870b8a15b525e70699a44d667467080
-:01d2204fa06a6d6b490969c9c0699605e48d19
-:01d2304c09b605344a600578ca6cbf704283bb
-:01d240dfb07fc78daa740e289d84246c9bdbbe
-:01d250cf1e3f80266ec94e1dfb0629a1309367
-:01d26086f6fa264278a87efcb94b8ef58f85d6
-:01d2705da9ed3f9d6ed510f257e36e27913501
-:01d28093160ec6de989df7b951911a230eabad
-:01d29016564c8ae1296f868df0f5dd85fe39ea
-:01d2a04700e511be8f49b26ba0fb67a010d98f
-:01d2b084f1a6495eb31b95c9241de25db99876
-:01d2c09ff820c5049da44aededc579bf3fe753
-:01d2d0bd9632639d58d9aef6c2173f626fcde2
-:01d2e00690270b8f801a5855b8307702933876
-:01d2f0b073119b5f2c2000ae10c9bfa8b14dbd
-:01d300ee3907252ac8d151cb48e9e70546b954
-:01d310a065e7a657de468d8b3d55293480ce9f
-:01d3202846cc93cdd33b660f785418892bbab5
-:01d330b816ba15fb5301d0fe3d7136142b4388
-:01d3402fe69c6280a4e9b3d9a379953b44ec9a
-:01d350f203135d9a405c72665dd9ca6353302e
-:01d3606e99fefca66ded0f5f7db3c44875c8fd
-:01d37071c78a65aa365c2dc8046fce4ee8949c
-:01d380e1a42b57ea798673ea010bad6712cfcf
-:01d39003d4beef30b0cc7b8e5a35cd69da0ccf
-:01d3a003f9bba9b44bf7bbaf0ac9f28fbd9996
-:01d3b0f0c1b6e23c27cc649bdc786afa835208
-:01d3c0caa81fc0ed4d44746abfd6c3f2d21ea7
-:01d3d08605b202e6482d824cfca56359bda278
-:01d3e0cb014b1f28a306edf3af610277b53a08
-:01d3f00d46b656e61c1b69085e8aff54772a8f
-:01d400fd674413d4bdfb1fd21ccc541b0e7a84
-:01d410e502867a2cd88a0501d897a134f0146c
-:01d420690cf23996e78610423bbf11675d6d4d
-:01d430a26d9d65fda2fd99fa143df1c830e09e
-:01d44090aef9b3a6d1c15209a93eca590774d9
-:01d450df077978406fc6d659b837f74bc48f13
-:01d4602ac37bd36285281451cf1c1a07b6f179
-:01d470e954c994684a29a39c47932a76a5b5a0
-:01d480c16187bd8db248c993e8fc06940f7f5f
-:01d4908bec8d2af69ca91bac9b2472037f38fa
-:01d4a047b0eeb2ee662f8f25b8e61371df1aca
-:01d4b00c2e6a3a2d477d27ec3abeaf35249311
-:01d4c08d71efb721a38309d9260c2821bfc762
-:01d4d0366622ca63f1e58b1d7b04c3840879d3
-:01d4e0dedaa92f7e5a65e9e6088dec70db06cc
-:01d4f02465b2bdb72d8c3f4c36b307464ca6a9
-:01d500e5e2263a0a7c44c8560a8b76d4cfca98
-:01d510ba4159bbda7751662cf9bb1c5c6adb5e
-:01d520c4c1944ebf1017ca437d31793017b1a0
-:01d53024b586b19b3ada20c171f657fcdec638
-:01d5404b24daf06882f28957091ca0465763d3
-:01d55098d736c8f0c4462f4c68093f13035026
-:01d560723349d4d9c4adc987fe7de15529dc60
-:01d57073f541d2f4933a1273f31c2c1cbada9e
-:01d580cf8502fc0b52f7409363116014a7c376
-:01d59087a5d36038f45675ac148a77506898fa
-:01d5a09cda79ca641345381c9d680aaaf75ed5
-:01d5b05050a0ef5e8408c258aa7563808e76ab
-:01d5c0292b3e674e72cf902239f26880c05a79
-:01d5d053c8717ac4d7232b0aa13a9f83452f31
-:01d5e06e5d3ad193c6c8fe7b9c7715ec734197
-:01d5f0179d710609417bb6213c39cd90bb74ab
-:01d600b8a07245ed796b6326ff3a16009c6fbb
-:01d610c59afed4e4d32c17bfa8c8089738c6c7
-:01d6207c5ee25e43eff4e148c6336733b25b07
-:01d630ddccac14480dacc8eb6d4572b4c664ff
-:01d640cca55d9d37444a5567aee14ff26760ff
-:01d6500da9517ef2c2c51bb36382d0b16c188d
-:01d66030cad5dd62b529aac6eb6f756c7f7b68
-:01d6707bb97250e0c6b9d962e98c99e10cd67c
-:01d68031c54b828420e0d2e1197e98e2fe5b3e
-:01d69046704ea0ffd4ae242c60681b873e070a
-:01d6a0ab289d5003fd1b47529a569e202a37c4
-:01d6b0e849348ecbc1d299ebed73ce5e0c02b4
-:01d6c05de258bccb894527cf8d6d3ed5497892
-:01d6d0e14cf33f02db456763dd4478e35297b6
-:01d6e0a636c61499093121338e6b928a37d282
-:01d6f0508ffad0f5ffa2727aa1e3c3abad97c1
-:01d7009ddb3fec91134e17e5582c5fbf8e5553
-:01d710e9e9564ba5ca2293428af13788ca544d
-:01d720e374e1008da30bc9bbe9364821c14c7b
-:01d73071b3c1469988bcb4ae5e327b7c561b81
-:01d740141cefa2c7d73e5876a1f6a80bfa9030
-:01d75091d3d38c3af23d623765cdea0dfbbb76
-:01d760bb0385c9a579005a65c7baf5abe1823e
-:01d77072dbb6287b7a9714d96023b8cd2c91ce
-:01d780e05c6090600592f0347b62901fe56ab8
-:01d790e6c2e7b614b1ee4c6d9d9692f32561dd
-:01d7a097fc8ebf23b390cef07aeefdfa32b7f5
-:01d7b05a2e9f305ec3c025df8ad85e4421672d
-:01d7c05fe3576b0e6820c83a2932d9d251928e
-:01d7d050d7f32fd5a2797af0c35f9e609e6bd9
-:01d7e070974eec748b3ac1d9027bc6e63b1795
-:01d7f08f81d95bcc6f871d6ab27f51bbcec1cc
-:01d8004157957eb9fad7ccbd56b2deb42c0deb
-:01d810624610128fec1807303f7e00fbc13caa
-:01d82053321b936bf65f3b15276f12848d272e
-:01d83015a6bd6f855fe87fc33ed427b774c3e1
-:01d8406434ed5de4ebc3cf37f7c96db6c5dd9f
-:01d850f9386fc3c6f7dce583eecd8fda9de8db
-:01d8604e85e38a6fb760d1ca078937686b37ff
-:01d870eb8149db423c7af260f190127fcb7f9c
-:01d880a6b6ac153d265eeff23accfa5d7aa163
-:01d890e230ceb2a4fed0911dfd6e801453e038
-:01d8a0c25daf3b03404d8f96cd39eeef8295ed
-:01d8b0acd7769e1c1ca0bd8eb0d0f30ed3e00c
-:01d8c0652d073394e472dda994f412e020305c
-:01d8d03844562e89121284355091cb58ffae68
-:01d8e0ffcb3fdcdf4e83b9596260a24590986f
-:01d8f037cb36329e8710a1bd2891c01cfa2e8b
-:01d900cf1600539a4121ec318258dec70edf61
-:01d910bfdb354aa3e8a3453185c2583a6e216e
-:01d920439d201a3989c3fb40666df68f4ca395
-:01d930eff16f77b186a9df3e875d2f89ad8214
-:01d9403d2afe07853ef4db83c1b68b2bed04a2
-:01d95091e6ae9c3491d918abedcb75fdacf6c4
-:01d960f742b8782f6f54fa581b9c2463e9419e
-:01d970cf26fe15ee02c11c8fdb10ef2439e6df
-:01d9809df6e6f12a5d3e4f87b256ca76284e39
-:01d9901c4e41af24e66bd52d7ed4b44ec75a24
-:01d9a0f0ba999b975ac773b07c7330a581113c
-:01d9b0f478a51a02dd6cfe9b8c3f691be99939
-:01d9c0c7287f58162e43582f234d2fdb4d023f
-:01d9d0199281f8010ca0831d3eb28dc1a2c0ce
-:01d9e03791f6b6e7382216dcab97eea8fbe70b
-:01d9f0a396f2cda05bf0eac23e66a949f0096d
-:01da00a0c464bf60d3a2df93e55bbf73252365
-:01da10991ba9a5e3cc1cffb67ecdaa777fa7f4
-:01da209aeb94d42024bfedec196d16fa6dcc0b
-:01da303088920c0cca8647594933e68750a54e
-:01da40f989b09ac801dbad4b3b1acb32532e89
-:01da50b744706ab36e9d74238e684fd756ea17
-:01da608249e0b18105dc8605e53d6ddf307115
-:01da7045283278fca8bf3e556f8cee69844f70
-:01da805673a547949e4e8644d294b2c6e46512
-:01da90f266c4532de437a224cb88835919f321
-:01daa0623a771aaa276512f870bebb23146659
-:01dab04294cba8d059d08c385c306602114e4c
-:01dac0dc4818e1d437f7c5a1227e33d0fdb1f3
-:01dad0869abda0f110fe94f94bf732095f5320
-:01dae0117216d17f9efabb21638c3b9566ecc4
-:01daf0735bd48ad8f2fc0b9ce5e4337031c2ca
-:01db00f4f127865484eefbbce8b9523d8198bc
-:01db10419b873b776522f1393344076c132b0b
-:01db2052aef4ac9dadbbdb49d119ffeffcce04
-:01db309f0b9599d5307a11dec9f81f4cbe4e7a
-:01db40bccafd8b5956e301c9b064c06fcac3ff
-:01db50bb6abbc021145357eec9f6d11f8d6efe
-:01db601eaf46728f0738fdfa4a953690c59d9c
-:01db70dc8345b096002a29d777e53cfd04a373
-:01db8014430245acd43dc9b75ba93d0b5e64ee
-:01db9021a0a4a105c5fbd4080f28cf4529edf1
-:01dba090c3a7820778f711c851eb9b1307ff74
-:01dbb090ab45bec375d8776748c00bc542c85b
-:01dbc00e704dc0e8576b52fb7e9822128dcb3e
-:01dbd00b322407fec741cbebc48bdf823f11b2
-:01dbe0608f1928c0ddb6f4eaee263e46c6ecc9
-:01dbf0f983d9d747edecad069e4ec1f132449e
-:01dc00c3e14ce696ca6ac1b92d0e0163ac725d
-:01dc10dcdb197e3799fb61f31a233541c7d04e
-:01dc209c41b75983b0d81a2ebc27aeff9876cf
-:01dc30c86ce17cf217c297e894013cb997b9c3
-:01dc400a8c2e6b35a79bea643e5ff4159af993
-:01dc5034e544c705da884bd2b7e62ead4ea1de
-:01dc60f0fae376482524246b94e564e6a6447d
-:01dc708fab90b26bbef1b529badb117b40dc99
-:01dc80ee75b53251aaa582e99b5110e5ce22ad
-:01dc909dd9576109a8514ef85d5eaa88ed6d98
-:01dca0e681b847071ae0b4d6b59713f7a3e390
-:01dcb0f0ec95a885e90c352ff1203d4634b49b
-:01dcc03fd6f550897e14b2d7f09ab101c617e6
-:01dcd0826f1f0a6eac5adfeb287c768f09b959
-:01dce06f4535853a0a4a3704355b547601ea13
-:01dcf0d183648d35343f70667c67d6e817238c
-:01dd00748f0cd3367a6c91549e60250e3a138e
-:01dd10a0fda0fea62f6f19967e17a295891e88
-:01dd20c1de2defc12b3aa03e6b336873de71c8
-:01dd309da36036b2d460044d272304125a4904
-:01dd406a3821447dde5793284e33e63acc489e
-:01dd5085d4c8e1682208d51f8f119b4a86aa24
-:01dd604d7767c5a746989de0a1980c44da8b0d
-:01dd7018e98c01450af6a441f7fc7fb9cefec0
-:01dd8028f0b229ca4f2ca04368c349b92c92be
-:01dd90522f0aa852f0370d856e1f7152dfa48c
-:01dda088d416630a477dd6034e471936711129
-:01ddb0b84d55e7358d205bfd1038c1d40de494
-:01ddc0a603aac859a2f6c82dcaab771e976c67
-:01ddd0722d94bba01a507fa81c69069b69598d
-:01dde0ce44d37d039f7751a475f556fa716cf8
-:01ddf091fa77c2e2dc838c0315cbab06850ca0
-:01de0056096a143f02e0531d18c40ea068b59d
-:01de10f266c4fe16801a0ad951861162451f3f
-:01de20dc42f092633f46eefed67d040f95b76a
-:01de30ac9514bea553e149446b7e552aaf0a62
-:01de4023089d0c286a03c7df628503ca70ba63
-:01de501c44608c1b196f7a658e6b412e2260f5
-:01de60be4e40926031a2f51a00c996cbdd93f0
-:01de70148cff5a1a45d127495c1038b5d48b76
-:01de8005d2ef2ce9ca42dedf259a27be6b59e6
-:01de90c45a925372e7c7d3cddd508b3b5509da
-:01dea0106246d9f4be241c9a37a855b3c36efb
-:01deb02594df940737cea8f85573e3f8461f49
-:01dec007b6e361512e5dc5cf15c0e05c4f2430
-:01ded025d2155bb47bd0c044661ddf7c7aa52d
-:01dee0300380c7d7f8c049d5bd7d0e98dde9b0
-:01def08f66b4e4292ffc7bb149d0dc5d6909d2
-:01df003705cf185b7044f5757f60bab1a9fdd1
-:01df106dc4895387c69bc2758a6354b19ad330
-:01df2029b599acb188744592a74f794e5c2810
-:01df30d9a76c4a9feabc337a1ef43bf092c096
-:01df408102dd1455fcb90d53707cb1fbf77d1a
-:01df502e5e024e5964b9b8f770e10b2ddc80a6
-:01df6049e006a023745d5899b620ae5c1d594e
-:01df7040a1caf918466735b8eedbd1a733cee2
-:01df8062a46bab85d92cd742d13c95aa3e928e
-:01df90f6e1de1d059896673ac7506c7550d539
-:01dfa062223bda43c2bbe5141677d373d5af9b
-:01dfb085b9db6bf88caef9c9cb7bfbaa4cea34
-:01dfc0f6553545e496c7885265560ea1b9a893
-:01dfd0749ba0e27a6fa02f0f26e8d406d5e8ed
-:01dfe0d93cb09796c914915ffbd9af67cedee5
-:01dff0c8e9979e89142cfc6b5356107c543b12
-:01e000391f62ae10252793f5623d093206d118
-:01e010cf183597
+:000000d691711877307a88fcca1d6e95b83118
+:000010b3870898a777d43b3de0bed0cba8ac48
+:00002072c3958e801acd6c4ad1869276b017d1
+:0000305294072be0ef26ed6662e532144e53f5
+:000040066d547a13c44b5487c37b44e02e33ba
+:000050a8d16dcce579c4534333055784b9c2c3
+:000060bf5b6a2c38228dbb288d6267030f2ea4
+:0000704231f629c8f038f21d2489730510fe09
+:00008014d2f5a1aeefc9b78acbcacb665e5203
+:000090b41a26b444d8736e89ebb5512b11f2be
+:0000a0730c42abf08c5ee5fc87b17ac41487dd
+:0000b018d883dd532f39b90a4bf8b98dd65451
+:0000c0b751d5e9e0801ec1c04acfe0c3ec8379
+:0000d0e021bb6f8f8bf99e347422c17a027efc
+:0000e08f8d633585563ecbfd9bcdb719239d12
+:0000f03c2a08d50f65ab33b69a2d1ba6e81358
+:0001003e7f2ae374b94033a070224bba4932ca
+:000110c5800dde758b04f703279f742823848b
+:000120a5012b96b655d5c433eca3de33923a39
+:000130a9a157a47849e016f5be2717ac2e7bcc
+:0001402318202e13522ec0ea357f4b02b8e31d
+:0001503fb0bfe38f3b0f25c10da4e8323987e6
+:000160c44759aa275031d6f815b37b07cb5e86
+:000170b8e68c12e82e9728a6a06da2240790bf
+:000180b1c084f208c4f06b75ecfc0173a4b325
+:000190a49dde300548bce0cd1b35403d37a7d2
+:0001a0a5048acdff56cb67ec0d6df2bf7bc0aa
+:0001b0e6c05a2acd2d7d2474b1cfb38e95b4b9
+:0001c0edf41c02614d5b580bb952fa0831ad31
+:0001d0d15cd0058455850bfa3b5650a3a5edea
+:0001e0442203a3dc67150df77e1ed3cc3a72bf
+:0001f0cc9bab049a5c1342bdfc6a732f8790b6
+:0002001981a03a02e3e2ec73864b6ba229d169
+:00021027a7a81fee89e0602f6ad8d3c9fbd842
+:0002208843bf4e69e488f8c067a786d8270e5b
+:0002303dd89f6b0c29f46127e342d1757e585b
+:000240c043f96d74841179873b6fcb0e15d3c3
+:000250b5df9e1d041d86ab75355ffcc7ebc42f
+:0002603fc5d664763298fb2628b46cd2202a70
+:00027097dcd40277f8471e9ae92520d922da1d
+:000280a156f6a734836fa77d07acbca90a92ba
+:000290da8efd4639c8943d735e33e346d97210
+:0002a0fefbb9c4c927fd5b9270768f1637ddfb
+:0002b05241f898dbaa025ebc9ac208d600ae67
+:0002c0d9832d46141efcf0f39a4bb4e79fc788
+:0002d07cbd421f2f2032b4bf25140f5561427f
+:0002e06fc963f587c20d5893fd254f8184baa0
+:0002f07edfd3d5aac9209b7d28ca16455ef76b
+:0003006a7efd73341eb4988b915372a7a59b94
+:000310d5d16f6bb520220cd2f9ecf2ec96e4d0
+:00032032715bfcbc660188275216fb4190c10e
+:00033048475c895fa89b12ee3d244969ba588e
+:00034084deb8bcd853ccee97d9573928a7871c
+:000350eb36b62365e0ff1c4c3926eed611395d
+:0003604d5b26bf45db8d9c03f7e175f6d03bd7
+:000370df89d7e3fa22e2edb7baafffcb667daf
+:00038067b2a7cd489d00e82d8f533499905758
+:00039001c9614fd512aaa59939067ade1f6bf4
+:0003a0e618dd140cfb36fe65a700ce4b559e91
+:0003b0b83d066018d60e5d34f59bdd729d67d4
+:0003c007a94df8a31c1fde93299e48f83a89b4
+:0003d0c19af85fc139482ae3512a6a63066c6c
+:0003e0ec676596e9a6fed899da31d2b65a9d26
+:0003f0dcec26a38a7e6f09a2330b0054c50fc4
+:000400a7a103def62a6d708692a42cb2114d8a
+:000410fd2aee4f640f5e7479d1f0648c3172b9
+:000420b9f5c86a910583bfa9af13538da702bd
+:000430f0b4fb0d4f3663949138ba4d10abe275
+:00044040f112c8f3599e12bd447d658a8c4235
+:0004508d99edcf7dfe5d61cecca0f34259de4c
+:000460adec195aec773bb13a133760002f02cd
+:000470c2309783f74cafc419c02f22e984fa42
+:000480b615b070fc1f2e4b74c54d65aa566300
+:0004906f9a51eb969ec11e78ec2032b7894013
+:0004a05537c36e7bdcc9c3957d324992085c2e
+:0004b072c6d678e10f81ff2605d8520ce38bdb
+:0004c0a1a438610335e4e3f68299a3b1eab173
+:0004d0e2e756e85a5a3afa5617299485ca4717
+:0004e0de22ec916807a7bdf91663d3191434e6
+:0004f03753ee5a9840cf9eba23f5924ba7759a
+:000500e66ac8b82e03670240f5206dd4483f62
+:000510ce5176a3d7272921c2b2660d457e7e83
+:000520549e8fb6593b2d90d84045dfc3dd28a6
+:0005304c51a79a34be89dbf4f166b244125c80
+:00054004f47b4274af6772c9e4d41b42cf6c9f
+:00055095a66a974353e243ebd59922bf4ee75f
+:00056068fceed978bffeea982ee34893ab7a05
+:000570f0cdcc67275cdd9c442528e3fd612140
+:000580391fd016daa4359f4ed2e9fc0321b49a
+:000590147d3a9ff2025280df9272f176c00df5
+:0005a0b1b5449e2d7df249c3c2930f93a7a877
+:0005b03bcf017a7034a3f1d3919da693796344
+:0005c0f233f0e49ceba9d177b2a267c2e3c145
+:0005d0b12cb112c2ebe6b20f68443557195f3c
+:0005e0f9f83ab8a1ce29e5718dd2d89fb3215e
+:0005f0133c6ef25774694325880e07126ce180
+:000600975967fb98182eab5a45551fb93638e5
+:00061045170d9ab697ced3cc205eab8f22ff46
+:000620c65f370c7c6e4973423176f4309847c2
+:000630fcd69167af3c5c2b2d742ddb01444da1
+:0006402b2b6ccad2f6914ec8b0a44b1fbd6bbe
+:0006501ee01f03ce81c99f6eb4414942bcb9e4
+:00066010d8063e67089ef35b0391a22c3740f0
+:000670c9d2a85e3baf0b3bcf22a11799497301
+:0006807aacfad88f35ab0c5cb223c185a93925
+:000690302016c6de36c649ffeb2e5b3f8576ab
+:0006a001eb5c3d2bff79bdb56a169a4310ab9a
+:0006b06a351644f6cdd0a32f80b8403f234159
+:0006c072b7bd5282065d9fa68afe8c695c7d8d
+:0006d0091a704965cac2e54abe7625fdad4119
+:0006e0bb9394ab9bb9abc4722fce827d614223
+:0006f02f84131da51523f47503138d0fffd741
+:000700840dc45f2343962c7df8ea72c7c600b0
+:000710b4bf0e9072bf06c16f97bf2d4d77c33f
+:000720a9d5598853162d202c9abb3f1462507f
+:000730c76a1416e4d9b4e7667ab4ecfafc1fc9
+:00074011c7cbdac3481527f1fba3ac5b27cd67
+:0007501d9a0449d8addc4741d3ba4cc1e00c6d
+:000760e6d3ced52af1df0f54e6b276b6bbb124
+:000770280e91fb2e4fe47f03c92682a0f5a303
+:0007804f8b1255efeb8b48af074b36f213fb20
+:000790b15941ab56e9804cc1fb856e2d263578
+:0007a0f88c817be5a8065fd6b12f6b08a32975
+:0007b0ae0d975a21fb43862e6a5dd8f209133d
+:0007c0f2be6d746668f7a6007b5fd82bc10a3a
+:0007d0cfe32930c8d66ee0e72076c071356a43
+:0007e0aae9168ddd56609e162abdb1438c62f4
+:0007f0f0f3c259063b60569a9bc981e67ff53b
+:000800267d5f4071f1fccc788935932e739102
+:0008108cc8a78fb7676b8c0ae3190dd1944da1
+:000820b35d567893bedc2a721e29966da9c8c9
+:0008303c07b0629b3f6159a34d03809e472c02
+:000840f0b1c6387ae5379b73ebc16a15b17cc5
+:0008502fa21fd4bb69b9b6e604d07ad420bc19
+:000860d8f780895d7765021841740c015146c5
+:0008701cf387bbded91f0c3d7b33f5862fa820
+:000880eaf422bb69c1b34278f33dba9a53d39f
+:000890fd092446a046373818c46e7bf0aa604a
+:0008a0c241c0e88d9af1d1d9ddd0a76851cb00
+:0008b02cd9e53c2ec902f5b7a0a4ac034a21cb
+:0008c079fad05771dba8f44f79810acde4f814
+:0008d059256a8bbfaa6cf599c83633d0077ec2
+:0008e0ec2109608eae99a69371545d246eeb9a
+:0008f00e070c5df4ecda26491c13dace2473ce
+:000900c7378710dc9ff92227964e90fbaab87f
+:0009108e3a2d5f01c9ddd3fd601a704ccc3ef9
+:000920489f52fa6538a513c6646e16e524b988
+:0009303c737d3ceab84f2dc8d4c07e195a065a
+:000940f18a35b73ab98c6d5c6e9b0b8aab3f70
+:0009508752b153bbef1bed9fc73173a4678b3f
+:0009603e59e9e7f77e450717313178c57295fd
+:00097075ffdd362b1f6d35cddfdb0856363026
+:000980a2c78e407fd07a4d69c31fdf3486246f
+:000990568e76e4f9b3c86a6e35cb42e3dfb6ed
+:0009a02d8634a85cb3e4e049d4ec1ab9df6614
+:0009b057e44e22a6a74249abc5120d65d1cec8
+:0009c01eea8a09926618ab1e48edf0fb96f5f7
+:0009d068500029d2366102d97b65b478cfbf94
+:0009e0f076a6332e7a31439019da0401faa655
+:0009f0660bab4bf8ebb6c99287318e8f1ab7db
+:000a001c14085f763ec93203820e5fc2062d8b
+:000a1050dcbe5b50ef6a6f413aa21c48b64a22
+:000a20109da0795886ae7b73609733c4ba25d4
+:000a303a634aa55c8b517da3ec6a181152f2e1
+:000a40813659bdec54e04ac7549b81e7d18089
+:000a5084e2633c3d990f655846a8b4a360c686
+:000a60c5689e0b8906c9e0196490d9b5967bd1
+:000a703d2b02e1bd493ebd9093535b719a68a1
+:000a80f0e49c3a68016786d66d8770eba246d8
+:000a90c90ed99c8ab2079da34ab692c14547a8
+:000aa0d9d5f645a1d6f6922cd514b2f5603603
+:000ab06bfee04649a74ceb704ece815590eb80
+:000ac084f583b5e927c407247fac41dae3487f
+:000ad05b0b7892941a1584b585d8f82c403b4c
+:000ae0b5fce1de92fe164e42b344ea0e2a939d
+:000af0092ed69d8faf11c5f3550ea4437bc518
+:000b00e3f3963afe12eb00a0b40b72fb2e7a2b
+:000b10d6859e835ccaacadfbebaaadb8d1b4a4
+:000b20af7d611ff54986b87e1d0b643060e6f3
+:000b304f9465d2a53d0bb725e8adb67b6c20b6
+:000b4076632906836b0c1177d66dc60436abd4
+:000b502b38c9d0e732fc5828391e3f5df5c715
+:000b601b868d06dbb577774f7f323b6210d6b3
+:000b707485688cc7f0b91323b208fc87160d22
+:000b80c5b5c8865203a35acd7703196e4db2cc
+:000b902cda4e23c6912baacbafd6a9c3e7ec7b
+:000ba0abfdd95d9a2b4d64d19d16a7dfcfd8b9
+:000bb06b3b37b6a057de073e2e1132a801dfb6
+:000bc0b333a82b564272b5743be8caaf47bda7
+:000bd0486c27872c0aacf3ad32623a98e3c9d8
+:000be05e0f49cbcc81a9cb7c4d333d5efa4d7d
+:000bf02a93e362a58c005fdafe10987bae27d7
+:000c00996ce2456f18daa26623ee7c753cdb07
+:000c108510206117863e2c9a523ab5e5c9bdb6
+:000c202174e9e5b3bd4a881e40baa416566d06
+:000c304259a2262b9aee9f2da54624d81e6a7b
+:000c404f8ea710c847643d0d4cb7f47817c5b4
+:000c50d65ab3f5e2c109360442d1ec71000ed7
+:000c60c5618acd9b8570358a0079da12e89971
+:000c7002d64790e13b1315b763924de33e13d6
+:000c80166d8e0c88f4290bceec7a45d1862202
+:000c9052d5f7ce27262fdb0fcbec047f42de71
+:000ca0d543083011be0685c518fc6dea639baa
+:000cb0373fccbb1385cf5e0bb2cdcaed5c61f3
+:000cc026f7fce0cf46219f5bb34466c9b35bc4
+:000cd08740928c26259dbd10bc1d3e2a21e8a7
+:000ce0599631bdeeda7f7c4985ef187e80b72e
+:000cf05f8be59d07d16c24d0c9ef7fc6e87eff
+:000d00efbb2bcd1c33dfd6edd81cda092b6ff7
+:000d10014d667615a0e37f599f24dfcb08ff74
+:000d2089c875131e3d8b6eae5dbc7b6166478e
+:000d308595e9c8cdada3427c15fb73a08fbf9f
+:000d4015578957ce186731c296ad798e848dfd
+:000d502f3eb0f01c6329252228e09e6f5f1a2f
+:000d60c2c83ca6bbdf68ee0d91ab9bc00fef2d
+:000d7044332f90a9f4b4e2dabbcca89ead22f1
+:000d80270604cd9a921f98a0c408d1a5ea73c5
+:000d90d951ac0aa669411335873c67c81d6707
+:000da0f5fa72105e15bc7ef6a05b2cc4819383
+:000db0839cbbb013e8dd24de2820b01d7960ea
+:000dc0680486a72c3aea26a6b7830e124c8f1a
+:000dd069432608f67332574697508903eebd49
+:000de04e4fef74a82e7a4d529cd1ccc246d24c
+:000df0696ccae16499e580b9fde16b9c0ec74a
+:000e00308c18ed8b508e47314e1c1273a9297d
+:000e10b447c61fc0fe2f9f5e2dc7f6910b3eb4
+:000e2036b49fd81f671bea2cf73fff094e9db4
+:000e3045ce05f831ee4c47c0d89005a5d2e0a0
+:000e407ebec741127d4967b646b5d2dcd2cf87
+:000e50266aad54f39d450ad728269b3b8a8bf4
+:000e608a087262036988022993c818ea61ac82
+:000e7068c0795af9a260e369f853057b81080b
+:000e809b4da0b23cc93e9c2e20efccf1cf90f6
+:000e90094c7277cafb1c0b3dc21ee267ef2409
+:000ea06a74dd2fef350b00c54bed3e8c020a33
+:000eb0a6315e02b3068855cc633436b2bf5897
+:000ec0da7b9a8fcb08812f13e7f36a383077ca
+:000ed00eec0a4eb878885794953018c7f34e45
+:000ee0ff3e8e8f9a284884cdd29e64dd5cc4b8
+:000ef015917ba2c7816ba67b6604c39f0aa65d
+:000f00374e93903a477490e4bfe4e859155127
+:000f10cadbe93d048c291f461aa0cfedd3f668
+:000f20fad3caabc5b7cfd4d042dcacd209b2ce
+:000f30c362573f0bd312c6d25dc1a141f3d6f7
+:000f40f2ebcb7f4d3ce879ffa89980f7528c28
+:000f508eb06f354cac46d66c51eb612d0330a8
+:000f605ce25f57ab5a84efd79fd82a144daa22
+:000f70406f69caf2f9989b6ab340439888edb8
+:000f80e5980463b1eb40ee5484a5bdba63ece1
+:000f909627c398c9734c7ce3fc9eb47b949a01
+:000fa00f07fdd6c5f15ad5957b7c286d570ac9
+:000fb08ac799e44ce659d36a8114937c68fe98
+:000fc0ba5a24c4c40220030a67fb7bd1e21b35
+:000fd01998d777c67d896adb716913172f482c
+:000fe00884c278e95bd8455935e84122e72085
+:000ff0651555795e202525dfde89e147323978
+:00100027669e09cc80a5120e9f01e44a7979f2
+:0010108c1756f05e0b46a705941f7c50a415bf
+:0010205a5ddfe260245264d457b1c7d662afe4
+:00103079a3fcb72751012bbb51b4ab64288ad9
+:001040f533be089d65cb3f8c31a9dbed9f8eb7
+:001050ac36448a1c158ce9826060ad45eba484
+:001060b291c75903581b14f9381200e1de5bae
+:0010701de172277ebb4937d18aacdb1edb61ce
+:001080a57ae99915975c501fb496532bd21c98
+:0010901ea4ae78a2f593f23bd79ad2005ce18c
+:0010a07dad728c96f6a14234bd1d8adf3eb616
+:0010b046cd1bdc66ce3a2e2501577006b15624
+:0010c067acf8ecfe30bc94c73c9b36a14c5125
+:0010d04da4e880f1a3798e02b99745922dba7f
+:0010e06cd43dac184a583b0dcdad491d9d23e7
+:0010f0dc04cafcc995f4c5869f447ca114f7de
+:001100113ae536eab62793d1d8a1bcbeaa2c74
+:001110c5a6c5de85c6832dd3d6996329e56aa0
+:001120218474accf2f1a501e8930150a354ed7
+:001130e8b22ba3eaccb3e8fdf6fd61b5f0b6f7
+:0011408e5089c58c1c4c8e06af39b475841ec8
+:0011507b5d5eb27a6290ddefaa52b2cd0259f6
+:001160293d65da506e51de5230b8698f5142dc
+:001170d4cd9cbc413f4f72e853352c50f647db
+:001180881524e19e1f00703c4ad7569454e27a
+:0011907c4b0b91e6dbb6fb84deabcb2663f751
+:0011a0d805fcd8278a8ca83fc556955ba5c6ca
+:0011b02397e79493f4f51f027c7e1db5913e00
+:0011c09a02591c8fdd0faacfb4b7012b227dbb
+:0011d0b2f3be25942d7d46855fd697646b6d72
+:0011e088bb267b2ddd101bf87ca1cdea4c2fff
+:0011f0e41c8c5545c329a769ac521f9bd2e785
+:0012008a8a41a4a721d75e4981b736b018d9cf
+:001210b02e0917fe959f4a907a0e491b8f1ce1
+:00122001a287f803c5eaa0eb70b2ce66e9d634
+:0012300ca02ca1c5ebaff96eb65fcda707a06b
+:001240e40160873d0f2ed98b4c9b9a9e748d5b
+:0012502223d8cb2fb6ebbba0ca0d60d145b9d0
+:001260bb59568e3d793ad997179363f31be5a5
+:001270f30647029b4c6c8c1359dd3ae495fb94
+:0012803ac50c352935464a8d60804c14aae9e1
+:00129010a16c8e9de1001959ee9bf52239a443
+:0012a08946910c4d9f6b031fb5c68764cce979
+:0012b081b498e0c5fe5680ab193923624f52a6
+:0012c0470da293d5cfc8b821b7303b221144d7
+:0012d0b1d08aa65bd039131de9e6736e66a793
+:0012e08df346ddf3d90d2a4ab37d091ad3da8b
+:0012f0d8409a2043796e218ba5a1057fe069c0
+:001300645ce414b7126398ae78e3c97f811cdf
+:001310e754c57681596a50adf5161b0dd8f978
+:001320f23233563b395e6912e8eb4c2b8d3eb4
+:001330d7410c9bc21a0feab8a86d245913614f
+:001340897c6d110551621c04c4d7bb245d381e
+:00135080faa3a7f7ec39b1cca65536d2e39173
+:001360149e02d0d366050b0aa0f944842edab7
+:001370c132d28d475c6dea8f59b648154c8156
+:001380477b2c4423a9a3c2c0ced87c1ef1be66
+:001390b562d1f0f5656057a6bc3bb7cd9d2b3c
+:0013a01812ed4aaa96b9bd3bec528113a7ed1c
+:0013b0335610cac7162f9abc1c923ffbd068be
+:0013c07aed8dd944b07ed6420ecc5c6d7b5c14
+:0013d0e986f0849487040ab21f919fc30db987
+:0013e0837cf9819a016aa893758b7dd3f6b7f0
+:0013f072a55647503a5b10931fce38862936bc
+:001400bf583423a93ff511cdfdf1f008f82ae0
+:001410bbbf038c7c87bc31dead90eb9a3f2a88
+:001420d6151eb8148492f18f41944619061c4d
+:00143067c263250279183ae567a5bf14e7c553
+:0014405a6582a07b1a7ad4d9e31933555e6bf1
+:001450f47c476385c2cf26084b4596d03255bb
+:00146071c806d33529fcd6cbb7c99d37e291d6
+:0014708c1011e6e073cef1d0f8d6577f53eabf
+:00148085be23234eb06e3c7aaf09c2c73ca624
+:0014909842bf42d77a11209f1986db329a4dc9
+:0014a034b78420642850b542e5188094508cbf
+:0014b09608505fb42d1d2b32e03fb4d2e3d696
+:0014c07c439966c49efb035df0bb3d92e61d27
+:0014d0541d9621d3605a95f68c7a331d0340e6
+:0014e0f261eafc62976ca95f03457f9eb86561
+:0014f028f35bed05acc1f9cd92ce5e5d488ad9
+:00150070cf98a3ef77d9d692ff38962187691b
+:00151050ae37bcc9a54920b34245f5ec71c6bc
+:0015202fddd75b4fe4a03359d0a52491af566a
+:001530f06f37ad66a3336bb84968b5dc8b710b
+:001540958548dfd6361f6509c27951e8ca0015
+:00155078fd245f2ab3266d53b8556f4f117505
+:001560e9b74adfb2db4e9e0732d1129ee11338
+:0015701d738b7d5592e648af119cd6d2e9d399
+:001580d1bd511f218cfdf53266f6dc9ec5c9fe
+:001590001cd1b4d10e9d51e04607e3a449b117
+:0015a07d37a92e451f8c3c23608e5e80ceff5b
+:0015b00ebdee7a38c499d4b98440b7f8e65bd8
+:0015c0e904e474195a8e63db65f8ecd0a15f0e
+:0015d097f3200d789a50aa6c6a88d4d75ced55
+:0015e0beb79bb88663e59d1b3c1995d67246c9
+:0015f030da4a139cd20ccc1c4f0afc2f5ae87f
+:00160054caa52ccf9f8487c246872cf8c7517a
+:001610d4a84a900b82509dd2d21cfb096fe6d6
+:001620c2e2e1133b061dedc1cb466f47db51dd
+:001630a338b0921453c35312928fad54f29613
+:00164040f1836e7f80de0a3437291a89a4f612
+:001650ba5f369faef482fc7294b351c11f3be3
+:001660c360c4ef3aa159e1152f043adaf7d10c
+:001670c22c1b4c21ff4d09c914d9e98a62fe4b
+:001680364b36520c935fb6c6a9d18a7c1797ae
+:0016908c50155bdaf7d05ee45fed015c9236e0
+:0016a014ce7fb8a431c799aec2752dbbbf49eb
+:0016b0cf08b855d7774f7af0b1893abb5a2f43
+:0016c024dda4caeb22e4810c3158aeac95bbef
+:0016d0dffe400d4fb5ccd0e1d7fd5593a26b5d
+:0016e0f79c002c08a9b9f80d10c24d2f5d5ae3
+:0016f0402cd98b84667f8c17f40f764a9cc2ce
+:001700aa5048990932c5bfd1739b84b89b7aa8
+:00171065dfcb2828b4223df407c3ed4232edb4
+:001720a7fc8e098d155363e5fd5514a5150408
+:00173038796f5d6817a42115c51334d9e2fe95
+:001740ae2f35b97fa973d68341e3d1dfecccda
+:0017507246803a037907e58f9652ce7c05ce14
+:0017607a9d16ccc864a74758d3ccde77a672dc
+:001770d52da2d2ddc9cc9cbdbb5b3f949817b5
+:00178016f1d5e80d06e5b3971fde02d4055991
+:0017906c3f2cbcba39685fa20efd242f2a1cec
+:0017a025c6c15ef4f1ad6b92afe52bd974a52f
+:0017b0bdd6dca809fef84c2e3cdb78563a84b1
+:0017c008e89874b14448713fcdbb8b69fe172a
+:0017d0f2371dc9000c492df1c81fc49366866a
+:0017e07da9562bf7f4ac4c41926105796c2514
+:0017f0c23738a691055ca98e7219a38bcae561
+:001800bdd6751a0d9577c1f76d3e9ee7b529d6
+:0018107a960eb621fdb538de28be74c09c86c1
+:0018203e067e6a156a35ced43d4f4c98872e21
+:0018308d5c56931774092c99087dc8ba2e8e66
+:00184049fe7ae1e510610bde169db3d461526c
+:00185093df8c001122bfa2a9a6d0bfb56d003d
+:0018609093919d79edbf674957c9b3a578c8c4
+:00187096a4f388bf518e762b627ff046a4ce20
+:001880be508dadbee124be557986eb4ca9768b
+:001890cfd61fb8ded5d0d7f788817f332b7145
+:0018a0d2737dba21c662816fcae8eab9d93d3d
+:0018b098536e4cf57a40fdfa578aeab00f5c2c
+:0018c042a614644552781aa05299a059ea5bd1
+:0018d09110a0ff935b23ab20bd6e4afc43b34c
+:0018e0a70740f33cb244468b9a043abd82bae5
+:0018f06ffe7d453e65d1a9ef99c6700fc14aea
+:001900f5dab328f5534bae7a7728ea002e5767
+:00191019cc7c1185f67e3e866e2d8b93be6681
+:00192082e6be47c14c4787231cb9bc99010b88
+:0019301c70e2504fab4cbabb291a5acd1035f6
+:001940681f08987c376601e07ec75a156fbb51
+:0019500b7ab7b2f2b6ebe4f2d1465224ab5aec
+:001960f25d23fd6e388ecb642b55af50f8c36c
+:0019708019b76c6b7e04fb6d5c91029d7c6387
+:001980f162ca0be8f9861c833a2588df52644c
+:001990e3ba3fc04d8ca41f7e4aec828fe78540
+:0019a0769691fb9566c09a88936be76e29f037
+:0019b00a6d610ed4ca831dfcdb86b8ac9eb6a1
+:0019c005389d87f6366f40e6f9deb72d23bed3
+:0019d0da9418adfb7f4b0e836b9e9997991c13
+:0019e0e3a3ea20133af8daf7d8c11e9f7e1a30
+:0019f0bc773ef27e1345616dd2776908e7a471
+:001a00167586e0eb7fff58265fc0f3158c456e
+:001a104f95a0a3fbc660c6816e72953a6c1781
+:001a20ca39c6221b86ceff826bf53b7076be7f
+:001a306db54e60fe3f3501f9484ee07cd7efaf
+:001a40df07b9f605f86df8752e7da8c52b9f03
+:001a5062f0b73b12eeb2caf6a38f95756f3dff
+:001a60e2d4b4572e9670080beeb04e1e64715a
+:001a706d2ecd8b7709cf6892d2cd66db45b2d3
+:001a8037c5798d98d54c0ad3a6d0f7ccb92ef7
+:001a9059fbad0ac9f6ea3dd57dac173d9229cc
+:001aa026bda99e32830e09f3bb1802e3edf259
+:001ab04368c7b9e292fec1cec17a7a2e5bb231
+:001ac029b992a96dbe1bc69c1ef658dc101df7
+:001ad00a38adc3e245cbb94a6a3b9a827a897a
+:001ae04f3210aff981dbc878f063f436c38024
+:001af02dc66b5ffe62c1864dd295c334187ebb
+:001b00c02cfb148b2f4f30f92d77f178a1740c
+:001b1042d16140ee4b4550a2aebf70b0d73b96
+:001b203ed414e865c3cd4f8fe5d080fd27d177
+:001b307f0bf8d8e505d6859453e4f6fa515a31
+:001b40e5fd11a431aadd13d27e5479b9e3a930
+:001b5015d297c2523756d1c8c461e88c8a131d
+:001b60763b44ec0b07f8a2c230b1c7330ecfc9
+:001b7034107e247cfd597ab450448d9a62c325
+:001b803bd4bf0114f1e95bb4c9670aa58c0b64
+:001b90fd0f97ac7fb267d6459bcba7a35908ee
+:001ba098cff16e8480307154ee15fd72bebbac
+:001bb06f30cc6a19669cfe366a2d412ef8965e
+:001bc0bc893e429a93ff22644c677ce2127fcd
+:001bd0e7fd5175432522f24bf5a386811cb76b
+:001be0b1598d99435b7a532f523107c3384938
+:001bf0f4f4c4bc1fcae5d882148b25313f721a
+:001c000653ee8336838ff23e88bb90e0719277
+:001c10e861fe710c72b2f6d0caa9d359afd665
+:001c2060816e635aa3c93ffbf94bb09e183832
+:001c309b5c58bec5beaf9ef403e235b96ed607
+:001c40d2c44e02230a9d88690291d11f572769
+:001c5076d46ffcd04a9f0ad5753c17ea4021d8
+:001c60f944d2977818ce0b02b06789a5359b2e
+:001c7097ac6cf071ae10d00ecc1c724794eaae
+:001c802f0e5881dba6098d54d8f9b48c5dad5e
+:001c90e02b3e57321e68001f7de84c0a81bd97
+:001ca0869c14e366a83dc405110289b97d794e
+:001cb0ad1e56847f714e87928560e289930341
+:001cc0ec047e2b622112226db885c6ba487223
+:001cd0fd890dbd4e75de19499ab2f3b15c5045
+:001ce059727c00d2ecdf6924897d40227a39cc
+:001cf0599a72bd06bff1e501bfd5aa1dc1595e
+:001d00a504a1e5390aaa98a0f5efeb61176020
+:001d103981f9c12fb202139515571be0fc94c0
+:001d2011995296bbd39fcf4067fdfad5098c6a
+:001d301f8f48519e63f96a777fdbbd2bba430d
+:001d40fd8bb6250417f9f95a518c94c6c4f786
+:001d50d1fea5c43865aa35c7c760f552fc1428
+:001d6003289d01bb9c9d3c53d1a3081754c62e
+:001d70d54d402048f262f896983df852611499
+:001d80d044abe3a6ddd451dbc95e0c16637d25
+:001d90b3727657cb28c9aacc3e1fbcbad28755
+:001da0c7f66ab5661bfa0fbd8576575582f43a
+:001db0d6d19f51ef828c0c901278f65578c15f
+:001dc00d4f1a3e05484a981bad8f48f1ba5964
+:001dd048fb6510e189b69b50192bafa3f5bf87
+:001de07b728b086562e6307db59de71cd29903
+:001df0e2cacee894670044bb289ac230c89a8c
+:001e00bdbebc39b4ae58ede38d1edbc1f896c4
+:001e10a1277aa9a021a907d3b060620fa03861
+:001e20a8b8cf697e44b311c116ed7dd91fcc57
+:001e3031d6b96e19a2c1b805c12773235b37f7
+:001e408e7c5ede74a668ff7ac3e01a896191e7
+:001e5001aa342462efb038b7ed1ac9dc3068a5
+:001e6058b985cd00901dca81e599f72926068f
+:001e70e54d7de7617826e2ef5310e7a52253e2
+:001e80425942141a1322ace40bd4e30a6a053f
+:001e902d2e8a20e837d9f7e9e88bced42dd057
+:001ea0d46d3ccc733c23a90e64d091ebd7a151
+:001eb0e0a9af11dca92c1284dbc28b9b8d57e8
+:001ec0502b371380c86dcf8e5e0bfc50b55ac4
+:001ed05c89a79da0b49d89994e84a9be1d20f0
+:001ee082f8230e765f1785fc20ebf4bd5013da
+:001ef012f0e9f4c74f0f49590ece012b835db7
+:001f00c0fe9abde21bbd2592d0648f23962925
+:001f10f67838520694090dd6734314271fc04a
+:001f2090dbb0b4575520be4c2dd934b571473c
+:001f30dac7ab126668f69e71d06465561aaa1b
+:001f40a9dfba31bed22f1c9f2e6715b9972fbc
+:001f505d68cef9ed4ecf693b491297cf8bdbea
+:001f6034ea9d8e713b53730547881b1119d4cc
+:001f70de8c3299f3bd429f537f97a42d46e27b
+:001f8087852f184e2c080b429c2c3de88d0bc6
+:001f9075adda499ea52ccd9b783c600da7b914
+:001fa0b34a55f5379235f7c28d3fa0f90ff5d7
+:001fb031d950795ae1ee8c50ac9aec50414c3a
+:001fc07b61dc8d408d0025584c41738846cc79
+:001fd084b3e502e475ed82132f3175781fedf5
+:001fe036ddf9a442b9b2832cd54d347e71c293
+:001ff0d61ba2e5647b5253f80a0cd9eba72c6d
+:0020004163de674c9bf46b867b8602a25b082f
+:00201055494dae60b31d0e47c9975d29ffd8ac
+:0020206c6a6b88120db582a8153001992b6d3a
+:002030c8f7110a86c428cc83134fee525f3ab8
+:0020402b022142576f18c8021f5d3b351e67e6
+:002050af2cf7bd17f13d4cd5a90dfe74096ce5
+:00206039cd2a84d72970287b94599cf7dde27a
+:002070e08c7fb399b29266ecdb3f8a62876538
+:002080dda5a00aa2e7cd3b23767a79d5e6872d
+:0020903f859a7f3b17d51ba87b4d0a26669723
+:0020a0a7cab39af181ffe4b904f19e6f768e08
+:0020b0e3acfa6ed771b7a697aba8bd3b5315ba
+:0020c04f5e120275a41f00fd695654a8494f5f
+:0020d0d45ee7fa00071d7f83810f2ad1e2b372
+:0020e07857dfdee42d98adf80c9a423a4f1d5f
+:0020f0b1ad2a686b80931b8617689a89948e0f
+:002100affb37e62c25dbf075603fcb8b3f3d23
+:0021102cca87fdce84f8881596ccda3cf77a32
+:0021204c3a5379015d01b59f0b30816963106d
+:0021307529982d866f3275d51067bbd802d547
+:0021401900869cd48ec68ed2f958c0d562d37b
+:002150689b8c93f1ad2a7d0c64d7a916fe8600
+:002160688007ad8f99df18925ff9c37e312ac9
+:002170b52235dde88c2e2df18162aa00c8156d
+:00218063a9af28cf424e03456fb92d623a66b8
+:002190221e2c371c38e10b8dddbb86f7d9d50b
+:0021a0a153a4a2b669f52d6a75c90e0a163928
+:0021b0bb144446af40970af7095752ad7a536e
+:0021c09081a2824a052419f3df04f44900b183
+:0021d054e66505eb1a1563bbbfd4257c2651a9
+:0021e0e56fab4fae66347e12c2022eaeb64efe
+:0021f0e0fd0a2712d7cb6cf271cdb261d62f82
+:00220045cda5eb65c8868884ebecdafba9c909
+:0022105bb355bfc9235128df64212995680f90
+:002220b59c9067321f5c36a0ae3cf5ca60cb17
+:002230b33b7564cede0a240874c119e78a6549
+:002240962351bf16e191d1d063770ce9d46905
+:002250afcda08c0e5d93470eae02ade945268b
+:002260a6c2782b7afd07e3db84200ab3cd53be
+:00227060e7d2810ca7de0db3c2cd397b2f2adf
+:0022805249692b5401e291babdf3393b646350
+:002290c2e0cdee0a4f5e9f75c032d3dc35c12d
+:0022a038cef138053646473b39eeb80bfb4ad9
+:0022b06030c87e4a1d2df6edc9590f16d953c5
+:0022c0841b6dc3c5f28fd70372dca9b7e4bd4d
+:0022d0197e0bda7c8b6510b0c4b31ffa778089
+:0022e08a903095e333fe0ef7e454fec2cebd13
+:0022f0671235bf70a9429b2b4b67f66150ed4a
+:0023008e4e16c2420282bc064a767dc46480ef
+:002310367399e3cc2f7f7296fa789054a89817
+:00232071438a4f8d4c821f7bc1e80882649370
+:002330f48a0afe41b25cdb6dbfb837ec8fbbae
+:002340ba84af67c01e25da84d4e89d548e9d4a
+:00235094d45449d6d42b8c8b466fe23061863c
+:0023607078eae199c1628a4e85e4c1384d7118
+:0023703adf7abf15c099adddf00e2c3b5d15bb
+:002380698410dd399eb2d0eac700ee2729d561
+:0023902f9b6816ad9c180fde3deff57e2d568d
+:0023a0f60dbdd90b9101e27341ed87b2dd12fc
+:0023b09e3dc1c15bed0cd541141f8703cb1a4d
+:0023c0e9f30fb6845200a16f0b240c899bcb1a
+:0023d0b441c8dce0fa972283e3f4ff1ab8e9fa
+:0023e0cfebb222bf08c3aa2b4ff73ab240d440
+:0023f0f571774ac35a3a109baddb5057e4d984
+:0024003c265a395f54ff39b3eb6f8f24b5a9ce
+:0024101499ab20f85bdae4f3703f4ffbf2755e
+:002420927eaaf14215b391fed35125ebde368f
+:002430d85819e4b53b5af5188164124eae0ad6
+:00244091ec214493c9e26d51dc5800d4708eda
+:002450960c8f0ceb10cf31382b483b0e32d892
+:0024605143904c4b0813e7051976b6b163d787
+:0024700e26407f593918edc2e1e4b4431df447
+:0024804a6700efb9662ca2f6d56d10ec186304
+:00249076325675ce42c09626d6b905f7600974
+:0024a022ba2ab266cf270da5300e0b127b1cf2
+:0024b0f5ab0d1abe4e16ac430d66dba577f67e
+:0024c0eeab429eb087368f78c4a01d2788496b
+:0024d0fe829be7c31a558227123667f7ebcacc
+:0024e0e6283b87303f279d7c48ca280659e13b
+:0024f025676c97f31c736c72dd66ab2ceac2a9
+:0025007e1c0dbb6bcaed5a8a70e289684a2d4b
+:0025109813c9155fda3e5c7204c95c0ffe9fdd
+:00252029d212020ca787c09fad2039311d7fc5
+:002530ee1b49b84c90988d175bdc4c44f8dc8b
+:0025401804e3780c0f781ce9cc2d2cd252d61e
+:002550f30e784e1d6db93437d3dec29e28ac62
+:002560771b60583a3e300ea7fc9d836b0012a8
+:0025703748c1f0fa718157b20996739710b138
+:00258023ad59bbcbdb2f47223ed70a7431afd7
+:0025901d5e3859b0b9449203a58f9d4756b985
+:0025a046e4e4348a3824b199ce5c9fa8b7782e
+:0025b0d4ce1e4c1a5d53d5c7bb0c0a7f310488
+:0025c0175e3cb696bb9010b384395e2b9588fb
+:0025d060a00a722ab7b7b7494ee69dbf1e8d04
+:0025e0a2a7812124a82d02bcef707c7446fa87
+:0025f0e11157cb35aa924bcd5b69831775c4f0
+:0026009d6b9565b7b684ff7cd2c7cd4763e197
+:00261050e2f02ed546d934877ddf293e050935
+:002620a10c30b2ae04750714a91b4647430e26
+:0026303b880edaf0c3ffa77af22b38e150f7f5
+:00264064ad01a9764f9befacc082a86640bcc9
+:002650dbea446088090d3ede59bdc3039a10ee
+:0026607a48778abd8241b630d46e0eaaec4996
+:00267016af0773f26d736c32fdef91c88c7446
+:002680ee038855f684596685e353bcc31dc237
+:0026903d86f51d815f4978819cd024501c857b
+:0026a06c71e3b439f7f2a4f5fb442fe68e82fa
+:0026b0268f6ad0e7aef0d74198ced3ee3b441c
+:0026c0bb1318730503941b194122798a3618fa
+:0026d0ec2710b74cc1da55bd5889ce62109550
+:0026e0ed9370ae6c758fa97cb8bdbf175dc2b7
+:0026f0f962c30162457828eba4109dcd46fec0
+:00270042525f5ecb91614b6fdec39834fa8b04
+:00271062521596c69335735acc92a56a65eb6d
+:00272023679f36cb37ccaa06d862d947d87879
+:002730dd1c32d9a7bbba126c7f2cb6e4455790
+:002740110aabe1cd612902458dafa48a3d8a2a
+:002750ae38a862632cb77bc8dfac3d2250e8b9
+:0027603de873fa4c120be6f246f73518d4da8e
+:0027704e176385f8dac833ad2885618059ea57
+:0027801a755bea98b252a22be637e6f9924041
+:002790ab01ecc3e5deacf8f0b7902e121305ce
+:0027a0ada38711f8739817c0e416e2e5b1540b
+:0027b095a11496c91c5caea2a90b119aa515e1
+:0027c0f035305698245a82548eeb7882071971
+:0027d00e500764b98e6057661d8c25f47d79c1
+:0027e01764e294149fec9a86a99b4da0a6fbb6
+:0027f08b7ad3a0aaa1e875318a773eedf20f31
+:002800ed6a1c8043a72f8ce24ce44fb41a9e35
+:002810cf9fc08c99baa0974a0a63b462a114d3
+:002820bce2ce9be100e2e0e37a42f2d73c47a9
+:002830bb55d963d740e03d6bb0e3c423e487c3
+:0028407b644e9bb538ab901383b12daafa6e07
+:0028500f8a931e2ea3082eeac9c0b490fe0f91
+:002860dbaf1f407a8d1d8241e094fe0b7a2614
+:002870c12b4db9c778c04f7f48e54c110f6b5c
+:00288004cc5fd5b0a17bfd89d810da16b9b2cb
+:0028909d82abc7248d5dd4a2cc6a5fecafb98c
+:0028a0cfd4cf3611d9594c895bad07559a7517
+:0028b0ec183db6fd6b9e61e65a8b554734bc57
+:0028c0f74c9b476a4b919ff4c7f49f3d203a6d
+:0028d09bcec2334914665685c45f2315085fc1
+:0028e045797997e355d867a55ac655555ad5fd
+:0028f0cf922452029cadc806d16326157a2bf6
+:002900fc703883371bf5de485641fd34435fa9
+:0029103d50239bcac5e077b1daebdb14a1949d
+:002920d4e4702566f640236c4d3f4d0c3c8c48
+:0029309ac1114a5aab3590261e6d3e80bdda80
+:002940dc7bf3cd0a920dc5c80156e6ccea9afe
+:002950e94da265477be84861d2d7403b9f669b
+:002960aec81053e19c8016ac8bb18bd7ff640e
+:002970abbd6fe0b939d7214fedccf966e1ac1d
+:0029801ba1d07492974b2aad627fb999fe7372
+:002990d96966774600ea139c95deed145efce7
+:0029a056245c20835074113116a9d9470f63b3
+:0029b0f4a0c2df30c0520eb517bdc77b32df37
+:0029c06e6316cc3996d993105f89a4614a351d
+:0029d052fbd997ac7da9570453a6de61c83da7
+:0029e0e75342192837f345de9906993a08dc82
+:0029f0b446de1b9cc0a08b484ba81ba0f27d6f
+:002a00b46fff88185b59a4e6683e2bea6ee530
+:002a101b35c6a278d48c9d94c5825b4823ed7a
+:002a20640d87648d885b339d6eb7b1ec899bce
+:002a30db8bef6eff88a4e8b7ec00d28f67b277
+:002a40c952ef222a12212cce0aa29631451af4
+:002a5085031d04d5b5a92a316994dbd501e278
+:002a60405411b2e24151143f8078c70a244949
+:002a70fc59303c6accc9ba79e0488dfff8711d
+:002a80c180052b778ed73edfcb6c736f1358d5
+:002a902889c218c0f2ef3a09695d937c50062b
+:002aa0b20181be87ab66f821a7c66037237d72
+:002ab0ad7b0ddcdfed06992f6346f7dce5420e
+:002ac06c401b61fce6f5460e275547331d5543
+:002ad0b3ca9eb2a86068e893f03b9c43bdd23e
+:002ae07f2bf12a9242376dff5a0695e71b360e
+:002af0986b5f2c9debe01377c20d73beeba4a8
+:002b00be39a5c03175502e5055ff262f35f4b8
+:002b10966541ee181d02cc95b9ac7ebee4f8f3
+:002b201d13db8cda12a73c568b148118c5cfbc
+:002b308b575559eb1f8b40f8faf5b2dcb11035
+:002b40eeede0bc75902e184cd40a253ec34fb8
+:002b5024f7c45c51d7385771ab6f5ec7defa97
+:002b6033f67d94d52b4ded17de0cfe2cc8e1d4
+:002b70181142272ec5a251dd55ea53581f3db2
+:002b8043eae0a4b930b21ccc937134c88a16d1
+:002b90c38e97bfd846b24400cd6e2698a9c871
+:002ba09432ba00e91671cdf50a2b84f12a86db
+:002bb0389c28f82d8920526c7f297ba76f25ef
+:002bc0b768ad5b245ec55d30fea57409c99a4f
+:002bd07c596847c30e9b63431b8d033cb43889
+:002be0edd48021efc5db61d342eccf9095c9ee
+:002bf01dac8dc3665a5f9f729af5b895107dec
+:002c003ff28cbdcc4aa6a52f1228993d9e805e
+:002c10bae558424241675f0385bd7800c85ee0
+:002c201e5da05e8f4bd7c4997bbc8a16f156a2
+:002c3012c8f9c4757d26fd0153d0ab052d51f0
+:002c40d6f31a339b6471ac7d4cfa75530706df
+:002c50a3a505b72ef62bba3cd1f1fc19b07bbf
+:002c60c07e43ec3a88b49c00e1885577eb9572
+:002c70481801c3c7587ad94da00c7b5ebfd033
+:002c805269161da90a37c1d320ec45d201b12d
+:002c90fb02f2fcc3f66064672d969800f4eae8
+:002ca00199a3bb8da09043281c416664b57261
+:002cb0c118abe32a2115f4eca71f50a1f5d613
+:002cc0809b1fbe74b831feb4ab8ec1b0af9ca8
+:002cd05976617a58bef85f895399784e1e6129
+:002ce07b160ec3d6459fbbc508d61cddd55db9
+:002cf0c2976a8b86cb8acd418942c5b095a57d
+:002d0012cdb63b6a3e51529f2b87fe8ea4c9d2
+:002d104d3cbc54b76e1fd0ccacb04e2643068b
+:002d20bbc00048cc7f3c2996b688a2f58c7989
+:002d305e53e40cad33d16913b3aeea7d3d0a7d
+:002d40a37eb8802dbbb608335b51b6683767f4
+:002d50de72437476ba63ab1686916720aa7f6b
+:002d604ef76496de5d4c4cd450ed5178a3bdf3
+:002d703e6c218efbe547ec813d301397f9ef4d
+:002d802095bc9062090d7f56fbb73986746f6e
+:002d90ded57f9e3c82a00dd8a5d4b4a37b2f24
+:002da00d21e459b2ce733134f72648901d0263
+:002db064caf308ea25ce8901ed2d8eea624a6a
+:002dc053d751e9288a70b497f9a680d8c0d0c1
+:002dd03daea6546e0e9b5a486f9a255a5435fc
+:002de04e546392dad30ffb7f40ad820f4782a6
+:002df0504c643a92646437a0c39c856fe01aa5
+:002e005cf562e409ed62818c4b875397c73472
+:002e107869e53b5f6ce0fe0f9ac3e3a9d9c143
+:002e209e7045dd00141f6a5d7b02640843aa42
+:002e300ffb8fe63adf494d0ca2c080b35687f3
+:002e405edafdad8dcd61af10ebd98c1967f7d4
+:002e507e2a56bcbfe9d128dc927c0e2c256128
+:002e60df68ae3645c434877c6c1826f3036022
+:002e709b33216f1d1a0916a90e4cd42e539e6e
+:002e80a4aabf0e875e3f4d1bd2d5bff62a2327
+:002e9071de7b86f6b3d43003f7512f5ac2222d
+:002ea0dcfeb86de5e56edb146f5c0ba4fc242c
+:002eb08519e8bdc0587bb84ab28037463248c0
+:002ec09292106a9182f04a7a742208e0e09e85
+:002ed0ddb76612983f23180f65b8536fd7a297
+:002ee017286ac61389c8d5a59d147a194e1f9f
+:002ef0b334cfd157b479be648945868db6e4c1
+:002f00055571607521d570aaaa166273add3ab
+:002f10485a497ae3aff489f9fa125cae67e233
+:002f2033a53408302e3a437cb6a766efcf6860
+:002f305ede0ebcdf0d115a3d0088a797b0f01f
+:002f404a9e93e8c4b146bc6ec9ce5dbda443c1
+:002f5033a4016e33572e3dcf497028bde328bc
+:002f60e7796d57ea244d25510b7864e0e8e071
+:002f70572259fefb195829b24d14f1fb24da10
+:002f807c6183a57c1f1cd512b84874e13d263a
+:002f9005d25e85ca2cf7881d5c6f79d1e75189
+:002fa088587924445a62f56a2094f2d8b6f357
+:002fb07b66485baf8cff4f3992a9d1d49666b6
+:002fc02b4b1e763f9ceeea0651121c3507007c
+:002fd0ded74067522e8cc88e5ab39b38fc4149
+:002fe0fe6e26971ecdf8f12549ad223d63f7ed
+:002ff08c9d95e8e9f81f1ffeac2e812c4debdf
+:0030007e9bcb8cbb7b63f9b2b67d3effda0bd7
+:003010f1fc2a6d8dae99ab68531e8e5613fa38
+:003020b1a7580e6a3e809266c68810a37de67c
+:003030cf153134f9a11d53d3de688a624c35ba
+:003040b2ff4362195f013783b07c8a03f2b4f3
+:003050f5cefee25578b93d581c718d674a601f
+:003060a2fb6dfcd198bae887ba81a062b3ac78
+:003070f8bb76b1273083c7a19cbbde583c1ca7
+:003080a9eb30f88bbe5576c1dd816a2a62e587
+:00309059f0886aa6458e8032d0be3fa81e3919
+:0030a01404b219ccd5113ed1d359c88d04bad8
+:0030b06a77ee0adb82cb2a7e0722351e87b045
+:0030c098589eb89dcbdb376750ea4994df6600
+:0030d05dbd545c83eaef3d7ec06c81615b99a2
+:0030e042ffcc54592b44647eef10a2bf200a12
+:0030f03aa93027b69c5d0c2300c690af333099
+:0031003b376e03062d819ddd48765d46bb3ed3
+:003110816b78c35ce19535870fc8ca944ca8a9
+:00312020b629b0a9f56bd29daff18bb6ceba52
+:00313043840a8d15bbc45d521a9d42b267590f
+:003140c191197d6673db5e3ae90b2f685680a8
+:0031501f05d481dc337f0bd76eca04ef2203c1
+:0031600745cbcdeca7546bab950cce0231218d
+:0031709128bae74a1469a11f7f5795dd3d4bd9
+:0031805897942d2819f53bf5bd5c32437b38df
+:003190b7d197a6d3f1c11f1f63f6f2cc76168a
+:0031a0b74ca0a1a33eb2b9d6dd3dfbfd7de9ed
+:0031b09a10aa698f106b5305ea7c95c3bba22e
+:0031c0c70f2a6f29f20e5ec8111651aa863fa5
+:0031d0d45bc36654a625e9268345fe57d3a90d
+:0031e0ecea07463273496e9bab70d780c3be32
+:0031f0b12b21f045614637d67446bb665bc389
+:003200c86082a03b4526d7657d13a21dfd6ae4
+:0032106e2b41edaef2a096d10f7029a9ec61a2
+:00322017cfc78d22083eec398ef3e6020b6078
+:003230b09d958f1fa2a796dc40edd61bffdd4e
+:0032400dc91fc0ee099f65ec4351577e756897
+:00325022339b92da49a34d2deacc3cf906f854
+:0032601f2cf56095e995e828e4bfe3d74b2381
+:003270234928d83aeb09fa4f8a71e4be7d0630
+:00328044cac5e1b20f5719cedb750170c33f79
+:00329058e3d0a21520bb24e23ceb33090011b8
+:0032a0a2951710acbb582f440424a9dae81a7c
+:0032b0064ab7ccfbe36f8c4799cf40dfaf040d
+:0032c02c6c28e8e2d53dc5f012eed6d7969e9f
+:0032d0f6d1c0dbd09d9076043d55f86b22dee7
+:0032e07224b0db43eb261ad11afc2b3673865e
+:0032f0fe232ff0bc47e8917e20a5ec71272ac4
+:003300df5c5b28aa45dec27e909dc861af4404
+:00331036ed4541a6e63048f6baeabc65e2c876
+:00332085fbcb702ef7850005768cb97028d338
+:003330b2e2d1636c960201b6d42d6d7e836e84
+:00334003e65acaf0d19ce49294e5c579f9024f
+:003350c5042d7d1bf86d81c0fdb2a7f92b17f7
+:003360268e1c0578b00b966af2cfc609480928
+:003370dfbf2d179c0cf19788051de70f4cf5fb
+:003380038bc8f09387834bf77f661c0ac5b2cf
+:003390778e3d5ad0f3353bb5fbdaae5ee2a9c1
+:0033a047564de0ebc888c17713252696eb3a88
+:0033b0b776e5bd36ae304a7d2e772bd7d113f6
+:0033c0ad9b2c8751f64a3d02ce55874962e274
+:0033d097836d85a5fff7ab65594268fe39c658
+:0033e0c9fb5efc58b862ad01b0b5690457ab9d
+:0033f0d33b1005e7f4911301fe9f07e11d981a
+:003400d81ec253331cd6c3d213048df44602ca
+:003410890c9ab61c967e15584170a313ce5bbf
+:0034202d9cdd2e33a4905d40b0f2790845fef5
+:0034302c8e1b6533833a96ceb90744058a5643
+:003440046b5d108ac3d61dde7623889117c681
+:0034505d5c61c00de2e5dc63d45f890be84ec9
+:003460ae80afa615f6026c0f067857995ed004
+:003470e9f6144302f9a964746a3b28f7832f3a
+:0034806888f44b7809d3b48ef95ea90abbdd0c
+:0034909c14f3efd71933c5688f1273c93599c7
+:0034a084d260b2ec2ebd3693a6e42ac0640f42
+:0034b0dce82bbaa863ebae352655ac02b7b210
+:0034c0b80ea4e0a8e291b1ff3178bc3569834d
+:0034d0e7a5c6dd009350b1d82454af078a1a12
+:0034e01e5df0b94eec91890a27928c443f220b
+:0034f0642410cfc76f3d11db638c3da65616e4
+:00350081f0e009b2b058d089634818fa8253cb
+:0035101b719d30137075a1b4a02e53814683aa
+:0035204464d407ec808950a3606ec878946c5d
+:0035300c5c68f0796dc410371b21e154cce79a
+:0035404cf76d8b7606f0d9e4f34c3849b2d657
+:00355038ad42efc4f7db4a1744f7f6624ce164
+:003560c2e3a324e7fbd7a88fb266be09364b00
+:003570e399fc4c6583442e8c107b601f7cf446
+:0035804a4903c57acd36c7f035cab91e9f9968
+:003590837091e6df123e4b9395159e442dcd01
+:0035a03175884bd50f9c99f7f1534b60f4b30c
+:0035b0ab9ee797ae226a1897550a8a02e66a13
+:0035c03d4867b3ae3be9fe641dc0054b50a66d
+:0035d010c0af7649fb7d9f6faa2a9fb9238716
+:0035e0e7c3e450bb771f2f6b518c7486178474
+:0035f0ab4e7af2eb49de72d429e61a6ed2c505
+:00360002c6be44371e524edb871355b1d173a7
+:003610005a236613cc855f755930d5e8db026a
+:003620ac06241c50a4e4c8d0d3981abb2dcd32
+:00363091a1a9b08a1f860a88d805e3ca08e4fc
+:003640a05888d8a8be46087d99665372a28bae
+:00365064c3e25656832b406a2cd7582e396af6
+:00366068923aa04c3d190410f74e3de97d1101
+:003670c9b646b8059113d8d2f8f1ac25e3ddec
+:0036806fe0af18231341aee975314ad2934e1b
+:003690dbc4779baced192a542f2ff4b26290ed
+:0036a0838288f6b81ad6ea8a18d17bb95aacf0
+:0036b0083fff7df058edcd3f5c427478d02f85
+:0036c0e4e03cc84e76e7b15a415ba56a10abde
+:0036d01841f9a695151f5d8384778dd6dda5a3
+:0036e0590a707ee856d7756bd5725f2a2a13e4
+:0036f0cc17278257c28eae4941fcc9932670e7
+:003700515379857f3e9f8f810a18e7b1fbfff2
+:00371028e01dd605ab26291547602fed66efcc
+:00372026c934ef72c082bc8d9955e46e90b714
+:003730e788c7272f61c637f3311ddb9a79cc94
+:003740e63d189baff2db88e29c9b76488cdee3
+:003750253fb90207a0b61e0418991568a54fd8
+:003760941874ce763b4638569b56db948d8100
+:003770b3b8d49352c61786b955854186f554a3
+:0037808fc080561e01d33bb34cd305d8ac9ad0
+:003790abdce8a4338f62b3185fe8e7d1ed891d
+:0037a03a6f2a9f3632dd146dab859d5c925370
+:0037b00d23ce7001e524031b5f2e6da79ddba2
+:0037c0ba915c04ebb137c6b754e327de9f7686
+:0037d0078ef3d1307c17042d66848d9f7ca598
+:0037e019de27d3823b43ae431a8f67e814747d
+:0037f02a8f818c7eb92e44a1515d0f4c74013b
+:003800d5f5057a230d4a9311c142b4db74a07b
+:003810dc10370529ac4422dcde56fa697cbeef
+:003820c5fd107a11aea8cd1953db2b086bc01c
+:0038302f1f4c74eb26e73a1a7aebfbcdf9ccbc
+:0038403ac9e8a15bd7e2c9418e7bdaa1d55b09
+:0038505f8694eacdf0949fb8c842af952620e2
+:003860ccdd5a3efb54a7dbc8ae9b0f757445f1
+:0038701f93a0dcfcb08d7046a92aafbd615a5d
+:00388087a51d6c7395950172f07e44ddc97ea9
+:00389051acbf4031dace067de049e7758dd5ca
+:0038a0eaa9921030bb3919162bd35b5ccc03e4
+:0038b0b9267297c07ec50642682fe8fe286cea
+:0038c01fa4f8e740c601ce3f0660dafda350ca
+:0038d09147af1e8bcd8e887ec8e46c5d475722
+:0038e00d46f85744c4dc300aa6a01ac8866802
+:0038f0f2c6c483b42215918d7d15f508be258b
+:0039009ab39a3036665404e1da1ae7dd1d2047
+:0039109925e8b1b7141730acee55f2a42ca2a2
+:00392031ff1f1f5c9d6e5805894db5d40d2ddf
+:003930bf97efc1ef1a238efdb993299fdf1fbd
+:0039405016285037cdfb73b80ef75ca187f6c8
+:003950c6dba245790b829ae8baf232ce392d6d
+:003960ecdae522ad59c79590e059282e8cb0ca
+:0039705263eb27bc07e657d81356ffdb9c7055
+:003980137a3a130584abbad1a7db4d49734702
+:003990ed7a2183bcd88fe0936d43811a32a0e9
+:0039a0b13d4016302cec990d9ba3810937556c
+:0039b0241c72c95019d12e14eef0b061a282d9
+:0039c06aa79b3198261bb7543b34eabd4b5048
+:0039d0375c2539d5b7d266ef9e988afb0716ef
+:0039e00d1befb71d23c8d7aa10d533c72f6a09
+:0039f0c04db65205e8e57700b3f2b54b2539f6
+:003a0036e69336fd3fc94a647f981e17413273
+:003a1010828bc72d3c4fd1bfae9857302a6f0c
+:003a20905bf6ef7a20a024592b53e3647f9ae1
+:003a30ce2c6c31a686e6a22e65e788675bb510
+:003a40bf02b5480e81f626bf493991ffa92b44
+:003a502c7bee9106b63e2fb9e4cd96fbf5913c
+:003a6049bcd471127c8f9a99465e22b1c79845
+:003a706e360ca147a3911f1748aef160af05e3
+:003a80b3badab633d622bc22cd06cf8e138c3e
+:003a901d765170e86ad7f5b8de90d0dc0ab6f5
+:003aa071d592d08dc248e9b2ea5a0194694c14
+:003ab09bba2a4de4677ed4fd825bb0704a2186
+:003ac08b0e89fd8ffd83a03a5d98f4582eda19
+:003ad0c9e347cf035d348b64064e2621ca9c46
+:003ae07743d09557e8516482407c04c64909be
+:003af0c2b407a41fa51dd18a2708b2fad0c0a6
+:003b00144840304538534334aaa4890e81f624
+:003b108f47d44c9241f00ad49ba898f383f370
+:003b209b5af280ef4bf4c6801255ee6ad8a7aa
+:003b30d8d686b9d3585d1a8547637c7cd8e3c9
+:003b4053d271fd645758e4642ec10b3b8ccc2b
+:003b50f8349b664e3eaae88d80456090ee3a6f
+:003b60b0022199876e69ad72b77cb9e1cbe35c
+:003b7062d59072c56f71f5a1dd5d314a5e8c8d
+:003b80dc4fdf4722b682dec561368aaaf1308a
+:003b9096dc45e4571cb7049b9bcb91315e653f
+:003ba0ac103a571fa2be5266aa5a5e27055263
+:003bb0c4c6700a14ce825a5ec9d0cbba395c19
+:003bc0b122531094ddd516b6d99c5819d247cb
+:003bd0ba83c0a5b3bff3d195b72077aa5b4bdd
+:003be04caab04ea8dc720e2e5d76c8a462f4ab
+:003bf0d6baec126e4c07b582e90b285cab0688
+:003c00d7b4136e514b63939750199fbae07365
+:003c10768d59e0f0999f34e4cea24a32ddcb97
+:003c20f310d0849968d836b7570bdcea001e5b
+:003c30e55e03b61f6f9c716cc83fc0f521d2bb
+:003c4009335bcdd0d7b6d1aeb0bdff0aaf033c
+:003c50f18c8ed3a0b7a0a01f5485c0f91fce69
+:003c6072c994753c451c5942d2db5cda24296d
+:003c70e11b4eb6ee7180065fcf06f779b8c35e
+:003c80c26fac066cbde35ca9a8833c35da7c14
+:003c90edb5d92251f90b4819c74922d8ff15d5
+:003ca018b069f829958b7e7a214fe2a1b70b1f
+:003cb088e282ba283c2197a097b6421b48f320
+:003cc0ec14fe233e82b872b70364c878d4049b
+:003cd0b37280d28c9b5086e85819fdd21a1949
+:003ce0a8628c6e2eb15e2e877fc462e7d83a3d
+:003cf06fde98a8e4004e3f4319880593e25cc0
+:003d00b92567ffcf88a562c25c483e1b39fca0
+:003d10ce4ab837c6563ee25936bdaeba7862c7
+:003d20972a04459e4efc5bcdbec1188ce080a3
+:003d30f2dad7c28f6254a069ca287684d0dad3
+:003d40ddd0499711d16773dd0634ad56e5e52e
+:003d5080ab5db2a720a96a3855b1cf7d9f29a9
+:003d607806428d5a932913b19906820542249e
+:003d70e013365d13635f937547264b7aa64691
+:003d806d46d46ecdf26e662fbf950fe6e2d3a9
+:003d903d50ea8eab6335f68c8d9146fc27748f
+:003da02df4d24231ee4670fca21cda2fc35322
+:003db02dd179aa1275fae7c05dc68ce04e064f
+:003dc0771d63d8605a4231e71d639311d6e357
+:003dd019d8f3dcc7ee0ff2f924a51a7f4a750f
+:003de09f7cbb94fb03aadc18f64b0a45f9733d
+:003df0e84c69b0535e02385479edbf8aeb09e5
+:003e0099649aff5d24e13d1d8c6335b74a4163
+:003e10c4b96b2aa00a67415694ed97c810500d
+:003e2004c779f46603c664c3161814f54e7e77
+:003e302a4596e03c120aa1d14a8c3eab83db76
+:003e40d8681daac9141d09f777f91c73bc30dd
+:003e5008a366b0ae5c22ba5878ee45fb182d0f
+:003e60c7d1f0f0b1d4905c1ce35dd191bccb94
+:003e702f9754380ac652a6b245cf2aa040b3b1
+:003e809eed2d77af3a7b1ef4ebd8c9d178f76c
+:003e9019a2d4d1636c0d3db33f2b916b77168e
+:003ea0fd7199a819d0402b8f5bf11e303f999d
+:003eb02cd456565b2ce96fca949727359b908f
+:003ec02691c50ca34e24a505f9dfaf444affbe
+:003ed0713000c6d67d653e4a042ea5b8797199
+:003ee0c7e8373ba689895b4c225a65ab8a94af
+:003ef0b252567a6e981f34bb908f6fcb08a3de
+:003f00f6505005bbb9625fb14fcf2d1fa7b905
+:003f10faf4b53e789ee0c4cf3703f29c5285e0
+:003f20bbd7fe79d7c57e978861284db7f9a19f
+:003f30f336b3c872fcf936eafd8f0235e78f1b
+:003f40eec3dfc30e6f8c2f32bbb06dbe7962f5
+:003f506f256371559115d736851b03a87fd792
+:003f607d345055798e94c66b0a1023d3775051
+:003f70314d6ee1b0a3df61a6f3f1f704e0e276
+:003f80053c4eceb6d7591a24cd099d24e04ff8
+:003f901613ed789f7b5f96d17a41ebebf97fcf
+:003fa00c5269c38c76a1808b23367c7788e13c
+:003fb0de201a632ae6ee80d06f47816bbbbb8a
+:003fc041b4ff8dd137b12f085020bc2060424a
+:003fd07bff097665e27136e9e5ae7a00a2cbeb
+:003fe0f69fb5ce0fef67678377724e6ed9bb34
+:003ff02716c8703d697c4ef1d65effd07dd50b
+:0040008f59c11a15ec73184837c3a70c071517
+:004010d87a34428a8b7ddb99eee3c3fd1e9981
+:0040200fbf5ccbac29c7eb40936717b1dcb07b
+:004030367f232d0a5608b5071e637943680e2e
+:004040ef630696d48981a782175b2796b50d48
+:004050cdaf9935120be633ee99624dd1726bf6
+:004060b5c6269d9a2b7c332398d32479b5dbc9
+:004070dcc91f6e576eaf1cf1d16e655e6692ab
+:0040803ca861f0c583e30aa55c18684ff105c0
+:0040900530db660a91415dd00e97dd0922086c
+:0040a01d5e7e0fe82e40c7a9e77a6522b8c413
+:0040b02d7ad6f8789f7e67cb6bed09828ecda2
+:0040c07d37838a7636c643822cadae390ef803
+:0040d011538ae13298ae303e6a6504f869bdc4
+:0040e0b09609ff6af041ee91fe8066256b5a33
+:0040f0abff148b763b4221880d77e0e2402843
+:00410082002e23f82157a840028278cc857e34
+:004110adad27891c41b3c1e85fcc30c95e5395
+:0041207bfbee35d22ab20a27620759a1078b39
+:0041309123ee542c87abe19bffd1997bdc96cf
+:00414043d63d8818b695e93708c9da83755c00
+:0041509020588b9e749c0afbf82a8923f62956
+:004160d15ccc001e578ff6cf66b20079e03e47
+:004170a8ec36d8479d5db119f6daaa7edd8413
+:004180b7ac91909855d8543790502343c3b931
+:00419006a7a7f92f8e13ef7149f5678a29c8b2
+:0041a007369f7f2f969c077ee74c9b6e94ec8e
+:0041b0257f2900b19eeafb779f483b6cd0d2a9
+:0041c0227fe4376879dbf8a8e72b7fd76be652
+:0041d0f40ba758197398cab586a75346b3efc3
+:0041e08e36e223ad924d32b17e7487d0a35e98
+:0041f08b808bcd09277b4a3374d4dd1264ac3f
+:004200c585a2fcae2f10633790a261d9f747ef
+:0042106a2b18bf034fd60550454cb75c293534
+:004220eb4b7aa9f312cc1d56333697d8a70bfb
+:0042300acbbb452dd84591bdb4ab49575b3d4b
+:004240c4f5e63e76054912a757bd7abea0e119
+:0042501d76bb87402956f88737f5fd87df4e9b
+:0042606aadf49867cd689d63cb2c4511835a23
+:00427001c3fcaf147c84336bae544c3745adb4
+:00428072fa9a55b176d61bab4d2f5ec1c3f73f
+:004290866f4742207db1381c80a0d5228789bb
+:0042a04e9b77a4811c36becf4d2e6f1169d9d1
+:0042b019f80f784e168e09ffbb9dd3b4ade64e
+:0042c0cadf174e418d0ef7f952f5fb9e87a2cb
+:0042d0a90541a463832690767e356465a67956
+:0042e08a638cc9139a0a9cf7f4e52112a35fd3
+:0042f02199271eb0f8a05a0f54d59c062ca2db
+:004300e0432d0d4b531c935de79fc520d3f6a6
+:004310fd14f999e10b327ef1acd29b908cab30
+:0043204ccc998550b2e0fa3a7b0c40d62bbd5f
+:004330f731c82f42bf7e901bdb818561130cd0
+:00434091d4577343f4b2d1e6ae304e479fbb7f
+:0043506f1a4cbe6a02ff89691ad4ab8066d51b
+:0043605270325fe526618a2691a619112d844c
+:0043708ee864cf2c959a5006a35acb87b3e237
+:00438062881dd2f7ed36a0b436cdc55c13e47a
+:004390e83e26c8528d1fe2fc3d68ce5c1161a5
+:0043a0d78abc0479ebcb6d8cbe3f64253cd72b
+:0043b08f48fdf7a1e5c67ac409438b868bc880
+:0043c065f81a2b4a7a7e3cd6c660c0549fc2d6
+:0043d0efe2a2d77d251fff3194d8ce3ac94ced
+:0043e08e01912f54c6c46308c50070dff340c3
+:0043f038995ecd479a56b356fc8b3b9f0a585b
+:004400fa03f5e6bfd047b62eea9ba02888c174
+:0044107de2ab8f8f5b016b92ebbb2f5da7ce16
+:004420e4114d76987ac08dadb251aeedc3bbf2
+:004430ed48ef2f068e30bc7b90103ba8165566
+:00444062e67d230b74f9ecae55a9edbcb8ea08
+:0044507a86899719a9b7575b317c0b97181e7e
+:0044607e3bb309c69e24ea59fdba9c93f8edfd
+:0044701e6865ccedb2f789109c764e9b1e921c
+:004480877237e424635116380c18c963a5ad77
+:0044905dbc846e503683692f8da30bccfcbd92
+:0044a077db39bbd6525f6c2d324a25ce7b66d8
+:0044b049b84be248ca26fbaf29e47dcfb509de
+:0044c0bc291c410b23aa7d516308e703390909
+:0044d0d141a4b839bd1866d6beed2eea212037
+:0044e0331788d8d987930d8f941b876eea8880
+:0044f00e0aa358648d3bbb25bb2fd8514279ce
+:004500763d77fae2918d781c3d41b93a180eb9
+:004510c422502992264d7e3514ff5ecb269d0c
+:004520b2cc56e72dd5e909600e2a68ad059ce2
+:00453021df821eab21c2d7c566e2d296ba9a28
+:004540f15cd4277eebd5575eaec2e0c1edccce
+:004550e371971530f15876ba0011ce357f798e
+:00456094e4d610d7f9eb1dd30e471c4c36cf9a
+:00457048a68fbdb186c9129e7f03578fab806b
+:0045802b5153680e3002a095f4109bf193ec3e
+:004590cc621d7a972061c8a31f98129a57b3e3
+:0045a0fb75195fd6cb9ee91a949b901f32f8b0
+:0045b08fced77f84e9629a8138604ee1982d78
+:0045c0a81156c875077dbc744de3c73c54633a
+:0045d04062ef8bf3a55b37068bb47ea4c44387
+:0045e0077187db5112172ff21ba0a48943662c
+:0045f0a0fb814e360b2b5b0b2fc7ebe50f4e61
+:004600525f639149dc55e53b5aaa1793a0347a
+:004610ea7f172c414404c0e75d193ef419ced8
+:004620bd7add99da8b70b7a0ba37debcb63f9a
+:0046306487b0715d3a927e5c89ad06b60d8378
+:004640b456f9aa64b846d8ede62c330b1ceac5
+:004650a639de770b6790725445d6fdfae28ce6
+:004660f024e6b13eb863ccaaaf151db44899cf
+:004670d37240290ca0c9594c61a4c57b0abd66
+:0046809fe69834c810c86196e4fb249f8aa36f
+:004690c17a8b026d49bd4b1d249cbb48dd557d
+:0046a068d6ad6b362ad7180c294041b53786a9
+:0046b0b6ad9be45824bc5f448043d2f740216a
+:0046c03e6dc84b4e4f32fb06be760a46175ce1
+:0046d027e6d32b540cd1423f3db26c24631f8e
+:0046e0f2e3677e037db08e0d7166d02347f3a7
+:0046f006dbbbe561279e9b1882f0cc56d1517d
+:004700abc18b95ccf80291ed62e84cb05e3b64
+:004710447c47a109180cc541faa5509ddf5b25
+:004720fcdbe28be54ad2562348c321891d73cc
+:0047302e316fdf5a30a2cf3766a284b853adc9
+:004740bf5a4cf7318423962b086682eab32bb0
+:0047502115184e9565be081aadce5c981c333b
+:004760f3fb37721dfd7d9a8e8d32f131d7a2fc
+:0047705dd33340be27119fee38308065283d9f
+:004780d4cf1f3f05ab7dde1d903f09cc542113
+:004790048cf76687ce7ae7ea981813a3700ce3
+:0047a01e0f562d41beaeebf542cf2213b88033
+:0047b084eefeb945c2a1375e535f96fc37bc52
+:0047c04156e319390cf37ba0afc10f6762a169
+:0047d014e0b72f8631dea526a51016f736f83d
+:0047e011740af785f9d2201bb0ef412c339e1d
+:0047f00d833954f6020926a288842c0970e84c
+:004800ab52cac2d4f89da5336ad0ea3261b2dc
+:0048108db55db4d780b8d705d4f5af78a74203
+:004820a78767fc2c65fc18c3a0d4acfd2f2865
+:0048305745ebb2f113c60da6d63081f3610af0
+:00484091f49410d8a3ab82506cc9fcd63f4034
+:00485004f3be99c86c85e767db3bf5d377c579
+:004860da3d6c489466325b2b788978e8ddb224
+:0048706aa109b687e868d510ed3ee0ef0fbea3
+:0048802e295db2c29c32428452a847fda48744
+:004890cfa5e06574ce55b9a91cebb68241b5a8
+:0048a095529d29a6d8c7c24dc6f3589859db53
+:0048b0ca774d62368d42d3e101562eb4417203
+:0048c001eb1a647a5bb4b33ac0ca759cdcd9fd
+:0048d00f40460e312009416107f49b753c9206
+:0048e0d579b68d2376063754b329281511988f
+:0048f05617d1cc8081ae25acb7c7881e02a0e6
+:004900e31dfb252f52af247f491842022208b5
+:00491032a5d0d7bee33f0f518709ae1400de3b
+:004920a944d4acf68b75db8da5a531b105e46a
+:0049307c3ce1bc20786cab686b274762ec8bc5
+:0049405452c5994217d2b93ce46ac6d7c74ebe
+:0049507bf909ea767763f0690c71841a00a9f1
+:00496017d606906f93c35f193392eb6f34a510
+:00497028420eef300a6496512782e0a4d55471
+:004980d20cb4d4f6e5dbd9b6227a9d3ccfd1b6
+:00499062e58afb35628ad1785100b498882e95
+:0049a0a7d5c0d1be926706b84d19efb035a913
+:0049b0afc8fecb605a8ba228d67a1d9af12197
+:0049c0ec75956c169b1ab63447bb4c83e852c6
+:0049d0aef5bd5289d26733de0bd39d32d3319a
+:0049e08b000e52f5ccf191ee55a851730ddcdb
+:0049f09da0ef5cca85c6cff964b3c553a1b61b
+:004a0042f88011ea0e714efde209e12d5bcf10
+:004a1069ac01b1726c7f1e0d3c8b3e4b7ff4e6
+:004a20b834c508b490035b0021ac887d27e496
+:004a30b4b726dc5694ef971e442093a34c9fe8
+:004a40c3c2a485f9bc9146079cb585ef721ed7
+:004a50d0e417d32c9373dec660b9baf6d73209
+:004a60271ee674148f68fa2fe10cf3b72babda
+:004a7001bba27fc240e773e0501ff401e640a1
+:004a801332755c7bde239d5ae245b870db77dd
+:004a9017ec140be4605f1a39907188da8a4b3f
+:004aa0f79e58a1d9631f98be4f3cf48c17d592
+:004ab0f2fd22fb5a553b96ae71e5931afb0fc1
+:004ac06a48f357267c2cea7aee096666d1786e
+:004ad0567b63687dc89b79b2bf3a22edbd24e0
+:004ae0f731c03a5f48198277dd78cd637b3e43
+:004af021ecfd2767f78d1e485faf72dbcf2854
+:004b00f546abfffa80a547e363f38f33fcf211
+:004b10bb0d3feffb593d8dd3a159b356e42131
+:004b20e6f6cb5d555725c88797642c06f920e8
+:004b3083d5c34d09256bc26be42c12979332e9
+:004b406793952d92d0dd07fad083ba6ab51a09
+:004b504a0ffb9f3b48df2c98282fc48f4f503b
+:004b6031cef23b1887e4b4728f26583c5c0667
+:004b701afaecc5366263cae70f96d56a2a9fe8
+:004b8054f5ff9adc4715cbbbe90e2d956cc406
+:004b90e820904b94384b0f33b69e81a17eccb0
+:004ba0e773b60bed479adb0826facb4fbd4887
+:004bb060cb77dd9d561279d2ebf70d6a37889c
+:004bc0cbf1815c5da958e9499cc3200797039f
+:004bd0d81fa75c8798855d6689722bb4bd6b4b
+:004be0b0b044b1fddf378e2e4cca18ea220739
+:004bf042787e72a8ea199b4d3587a963a1a610
+:004c00b410dbbd6eea1d6fb6b889f383578dd9
+:004c10c946bd41d662cee076864a57d18bdbe5
+:004c20e2f48674fd19885dee7db31dba316f33
+:004c30147c38edef9d451dd320834468f304c9
+:004c409ca11971edbbcae7e7896a33460191fd
+:004c5059e56de180c22465493f967f62b64fc4
+:004c600a80b2f816546eeeacfb09a0655e6cc9
+:004c7092d85111c76d0aeeadd44e5f6407d8ce
+:004c808bec9a321c0815fe9860839f805661b1
+:004c90b81ec377b384892e1f86500120ff08f0
+:004ca05cea76a2ce49a3807991381f7ddc97f0
+:004cb0f9e8e1ebd32287b4376c0fbc44eab2ff
+:004cc084ff9b82fcd5c8ad6ca17762be667bce
+:004cd0e165c0c61dcd185164fd9c6f682f54bb
+:004ce0bb19be27b2ea3d1bb83b84e86720c1da
+:004cf019d5c6b9bc5bd21b1193f5a0499d7573
+:004d007bfa7ee7204f046a3be279f8f93aad23
+:004d10268734bdcf3753ff4b1313096a42eab5
+:004d20c1e3575e21e28ab7521dbbfbac6e693f
+:004d300b8dccf0a995e9e8238c9a6efabf180a
+:004d406020dd41e99f2ad62d96400b9b6c1633
+:004d50e1f5e93bd284b3877d111909b79861e0
+:004d609e00c67fe172d878f93cb76b51732d10
+:004d7023a1ec2e76782047f5d4c9ebd3ce9df5
+:004d809e2c7fb1beec6b5d6fcb5efb1c3ff141
+:004d90da1cffd24d1aeadeaf3da8c51d7e8b17
+:004da00a99350dc3a9983b3b503b4350469a37
+:004db090b692d0fc0717050d125cc889671155
+:004dc05cd5d4457c49b8f0f40e08ff38de6157
+:004dd0cdf6becbda8491c42d43a116467a39e2
+:004de0549fe3f767a458f624e4b597f81e1b70
+:004df08f285280ff729def852aae40ac246e44
+:004e0015ec3990930249c1ec5d17222b749d1c
+:004e1069367b8e28caa836b533f59b7cdb7d9e
+:004e208d1e28f0178b9eef0b4cb55909fb0a9e
+:004e308204ee662c984164c70dc356898fcf61
+:004e40073393ecff3364a31003b36b5d68be84
+:004e500bab43a7773109a49ee76891acc8dd49
+:004e6027e340b3df90ab4c096ccbb717c48dbe
+:004e7079957e2523485b02c6ecc489dafd5038
+:004e809bd495296b769fed2b68a37bb6f73ecc
+:004e90b641f562c1eaa4230a1b7dac84ce48ac
+:004ea08e68b5b6ea181ee9d31bbc756aaa20ab
+:004eb0ed52aff2afb867d78df96c42d5fc08f1
+:004ec0aa59063172b4f2d9de7c101013189afe
+:004ed0364201995242ccaa0594778c91a566a9
+:004ee0b5c649ce54c254ec7ce0d57ba4c8c2d5
+:004ef0a6f1396354bcdd89518ded7198f94096
+:004f00a90df21f6612ba0ea12762ef8c8ad41b
+:004f10ed11a6eee7e0703a084d50018d26bcea
+:004f2011be6d3f841c211fbdc61ab40dbd0237
+:004f30c7854dddc71ad3e1e0a2e30daa473e98
+:004f4041e8b2c22e80e9a5ff40130909d8ed06
+:004f503e3fc17b6d50080107741d851c052bbe
+:004f60c60c12c0f43b13217d3a4759343c1d32
+:004f70f15cf442cdef21974c644888474d68ff
+:004f8021a7eb5297e7246dbf28b2d8dfed54ad
+:004f907d9485c92413a3fdf5bd827427af33d5
+:004fa0b9226fc4ac7518badb5a96a577ac7901
+:004fb0b47f3121306393ccf322467cce560f5c
+:004fc0ae320ee32012b415c5ce2b26a471d2b2
+:004fd0fdd945ca46cb21d84373e3429b43aff7
+:004fe069f710b5dc8bb6ab8fe720c41081035a
+:004ff03c7117472f94e3da455a7f6cf185f5e3
+:0050004d06ead94474af19391e0080432a71c2
+:005010571a2a0f2a89b5ec850899db3333b8b2
+:0050200d318336c8e969e9bacefc7611e87761
+:00503052dfec5cd089b24b5588445019b1cf46
+:0050403708c84d2d04af6183a225055ef15b87
+:005050a0074cd8688e2b31533cb750ff0aadb9
+:005060b6558c43d7c777996f59b2969d931ee7
+:0050700c94acd408bf7a8edfc1b2978078079d
+:0050800f6c85b648faac052729ea762e90650b
+:00509053de9e50cc44c925b0766da42f6d44d1
+:0050a00de35d45ad58fb71a7481bf32437609d
+:0050b0b0cb3321b2e8b4f5ac4b18ca067f5d15
+:0050c09a1072ab3dd0ed7a9303bb3251312124
+:0050d0ab1c020389eff495b6e956823785864d
+:0050e091c819bf6d28e251ea927bc7be515b53
+:0050f04e1f55b2ae86fa5e394810951225158e
+:0051007f5db70c77e0ffa2d947046d83f681d4
+:00511065c6da94aa2aad546e763dbb8a21cb6a
+:0051205a4e93acb4e02b5bffc3f8ffafa039a7
+:005130ad9f70e8edcbf856b027eb3932dad556
+:005140479c699f1d69f7a741ac464e4ab7be54
+:005150514a20349f73e48e18baa50acca69620
+:005160e84b914ae780e896c16fd42f52d4172d
+:0051701425100540ac6bf63864d2d87c08ad8e
+:005180814c2aa6314d0950966eec60848bc2f4
+:005190ce01aeb9a71cdcad7f0800831670c40f
+:0051a037936b427af0395745f112c8f72fcad0
+:0051b0700d80f49d877db7fd1868b556d279e2
+:0051c0b359ba622873e445364a1ec310a91f4d
+:0051d021d1538ce4a0b74011bfbfc7ffb782c4
+:0051e01306a757d28ee5d864d90c360d8d88e0
+:0051f02f70e260eee0976c5366b7bcfe7236e1
+:0052005ac2d9c8522b09ef85bdb46f1efe4e52
+:005210c8faf9ecbf1be3ebab1edf6b82049e93
+:0052200a6e14dfa959b8b534d36f3e4690f761
+:005230777fdb100fa8244c46511317cbec17e0
+:005240e4ad6b101850f2bb45719bd68ebafc08
+:005250492203cc37917049b16bbdd7b03ed995
+:00526082e960ab4104733596cadd8e3a8d7f04
+:0052708cc8248fbf252951c3c2b95e045dc916
+:005280ec6d1f7068d986ff733698d64db38afc
+:005290cc86a67082060ed02135028bd2f620e6
+:0052a0f691a789463b7f92b5812d62c6b01817
+:0052b00f80f08f44e5e87acc19889174159ffa
+:0052c0299fc21fe76dc4135eee9b563250452e
+:0052d0ccbd531227677488888a7afd3ae6cfde
+:0052e0f7180eeb495635e1b97a853efb20a13e
+:0052f0c4ee32331f84501705711b4ca671c3fe
+:005300ac39c2b9cd17f8f5e75dbc4aa7deed75
+:005310b155efeb83757bedfec37fce8ab3be2c
+:00532047804e1ce93051b416f5b41fd8d149d7
+:0053308eb52aa6aecb637fff22082093451461
+:005340fdb5344c678d8a0402dc720df31f3b37
+:00535081d5170a7f17249af1d37c9dec8115cf
+:005360a9fce789723d609e198523633736f2b5
+:0053705e74f74205656e155680213ddd46e0a0
+:005380b31ddf1c2449b7bd96fa6425db229300
+:005390eedbeaec901db559130d2eb263e1385f
+:0053a0eb89f49e36d5f93b4f141867539d0f1f
+:0053b0cd5f6309642fa0021e1bd0821b0e29de
+:0053c01eaac7b83149c811cf705c02f9af3098
+:0053d0a5aab333ee93b553610043a75152e31b
+:0053e0d48ce7a36cdef341832eff303d10bff8
+:0053f00dec58238eb62fdf73537a93929c3a9b
+:005400d8118cd63c971734936e81e0110f7443
+:0054108451cde186aaeda32dde06bf781b3ad7
+:005420cd55c30ebc8fb7afef6113ae0cd2023b
+:0054304aaf23eb6be985e4a0ea852b55f6516a
+:005440e8c6d02983b9eb1d5eaf0de53e040756
+:00545055249b10f70c447e8fa701755f133288
+:0054601bb86bab8d86172a78523eef325a6824
+:0054704710137b02031fef858feb4dae0ab02e
+:005480fd3e7c7f9679797f272d0c623bfa9b64
+:005490447f4a8e311925b1bc7e82de54585533
+:0054a077ac5df0bcddf16612c4704bbe7c29d9
+:0054b06140b6b0969c706d4808bbb67e7f0a56
+:0054c04d60952d556f26ff7edcbfac3f916644
+:0054d00798fdc8cdf2da7555392bb04786d847
+:0054e007deb50bb932b68cf60de20808c464f1
+:0054f02366ff7b5334df5d96fce58e26d81e7f
+:005500d25e96633395034fdaf3ef2d55d5a0c5
+:005510f7189c51c53d975d6fdc587c14abd16e
+:0055206bf7fd6c1439e318e1aee76b31063805
+:005530e0f6127a2b61e6dfd111c1631dadbc27
+:0055403e1efe27f75dcdb54c260d484afa3fa9
+:00555009706b58232dbb5de2881e80342cd949
+:00556051d1eb6392566419e0a6f1c14b1cef86
+:00557064039a57869d6918870e74aeb1ac13fd
+:0055807b51695b60aa3b1877e3a9e820ce9643
+:0055908317789d94a6080b30b60fbf99432618
+:0055a036b729c01231d24e429b74fa698e5e33
+:0055b0effaad749772fbb50e3a98b5edb3509b
+:0055c085f99878af12b0c81b21a5017e21c2d5
+:0055d0b3c87068907548740b52d8335b581af6
+:0055e057e9fce6e73d216e5e641443a5adf4ec
+:0055f0b703022713f8d730b509837338a15466
+:0056003df6b7fd67768e90fcb160de637eb980
+:0056103600cbf8f8b761de63fbcb6cc78dde2c
+:005620042ec59a6f4a44ddb7ab9db894cd5a9d
+:00563023053ca49583c1152492867a4be05d2e
+:00564086f29f61ee1a6695a38bb415759ed62c
+:0056504f7a79b92627fe1b12a8c1b9e1e46f56
+:005660ae039949be0375508088dc7d8ebba059
+:0056705de716980a872740833d71600155c562
+:005680c56e30db1bb7bf1643a9d7215e064fdc
+:005690f033158ecd41b67067ed285deb4bda45
+:0056a0ab3a18dd0d9bef620985b26c0e4038db
+:0056b0e66ff32c8544b9588949802c5a2530a6
+:0056c03ed3799aef1426c6c5842513e433e050
+:0056d0e0e8f5259aad7fff846d2651d5b21bab
+:0056e054cbaf7e6bedc27c17e4ba13aa0d4e52
+:0056f0a082d0809a8f9252bdbaed1a23ac5308
+:0057007cafc434630b0ed26e6338120314c3cf
+:0057100395e9d522b5958ce8831781bcbaf6c3
+:0057205e1ecc7a73970ff9182f4261c6f02b17
+:005730d4c769f8619d132501883558e9a90490
+:0057402519bec3b5ac7b563c4d3bf239572d85
+:005750509f3e1f7649d81dfbdca87dfe67c5e4
+:005760e7df4bfdbb59ccfc4b04511b570e5d2f
+:0057706b9dcba077e3bffaffe06f2f0438cf6c
+:0057801b4cbf838127f5a0e5d3877cb4c3a426
+:005790267382dde52d3c19cfc4b2665694dde6
+:0057a012b308f0640802e946d5b800ee25350e
+:0057b02b739c6d951dc7ffc6e41bb9cc36089b
+:0057c01c91c7176692018ab437517411020365
+:0057d0aa18c7d06b06d72d3d8fbd6dfd1af654
+:0057e0fcb036651fb6111193d86bd94264997f
+:0057f051f679d4f1784110fff7cda90e262855
+:0058004bd61ec4debfd45820832f4b886aef74
+:005810421fa8a3058ea72917a3a04dc1e4aabf
+:0058204b6620609e734ee739d1adbce71cc9c4
+:005830bf2714d0ec1c71633a21cae2da983a69
+:00584010ff0aae07e9c1d6ac5a1c0c7b0617be
+:005850259e07792c3974dd2b7229eecac89f02
+:005860a4b7693ca8a6851020b4b1f8ff9ee6f8
+:0058708ae7af648307a5eff8ad2f7494b015f5
+:005880c30f4ced65065e2a3ef601cc4aecb4f2
+:005890fec63d432e2c1884c18f8de35daa6eec
+:0058a058fa3c98aaf9b5f94f780b8491760c95
+:0058b0290dc5c14f5ced5c0793dba80b282e8e
+:0058c084a9188e35a155475e11b0c7dfd13060
+:0058d05ca44c64dd772cbab1b95df35bba28ed
+:0058e00d5ba64519941be64c05138a3feebce0
+:0058f016bfac05a126bead534bf53b11385c78
+:005900108400480cad445332ca7012927c4003
+:005910922bfd0d3a9e74a22a5ce84e14677345
+:00592041e62fe3549b5bd7cff13b12081a7614
+:005930548d22891c2aa90d06ad2b98fca08942
+:005940b36685c0b920687e6dbd8b9fd591440f
+:005950e161eacfdcd0746cd71f44151bb6e965
+:005960e0298c6a835949b7ce1b4b68610bda59
+:0059700698445608054412a97308512119fedb
+:005980f7e48aeb359add60db8b571517554a1f
+:00599079277dd11382205ad3dbdda427ddf615
+:0059a003f0e53a9fdd43f183b084edaf6f61a2
+:0059b07bed1a4b0024bd46cb45c85470280430
+:0059c09efef8d0b4b884aef701253b45ef3565
+:0059d0a49574327a6e0ecc3135035a9ec3969d
+:0059e0f9e14b73c32c0cbc2bb93059168e55a2
+:0059f0cbb1d34f354ed8ad962f8b610b999258
+:005a002700cafa5bac6668a2a7bbb7242f16a3
+:005a1033f203eac991da8338dbf2026bd4c71f
+:005a205119f49e963c4eb85242af788759fe3b
+:005a30a740cea21e3bda03d09d5fbdf7d174a0
+:005a400398edf42e3de254e350d62793d86f16
+:005a507220ba617e5ee8dcc6c4fcd76c5344b0
+:005a605f993032dc8c1dc5b6ea1791e0142191
+:005a7074450983677e826ab2c8ef52dd75edc7
+:005a805ba70b9372032679b186c7da842cd8bb
+:005a90a308eca372d86f5218a03f8e4fbff176
+:005aa0bdb328a009fd7ae6b3876ad40e4a57aa
+:005ab0fe4a4567f47459417c9e1dd10d9412bc
+:005ac022194e98e646442f0aab58ca3a37ebe5
+:005ad040bc827259457fcd7d265dbeccecb53a
+:005ae03f7ce6803db85df768e6dcce9bd70f34
+:005af01a9cb93a12dc1519ae0ec94a66e18b38
+:005b009223481f001e15131f058c7837d50b4e
+:005b10e69330bd4d9c59a8d4b7ee5f5253e486
+:005b20c360163f13987e68df784b45f00a4a41
+:005b3045437ed08fc9acfb118612c5e5264fda
+:005b4006bbf1b99792cea8d9b3f82b580aff1d
+:005b5029407bca4e29522973c1f1721cdf4db8
+:005b6028c69e2343cd50f3aa54230cb71d7e28
+:005b70c817c50e755d042f8b8eb9a8fb2efbf3
+:005b80186d017debb2104ce04c58f48e80c90c
+:005b903132e99debbbefeabaf8d2a407096658
+:005ba03093096ca02086efb4c09aa357a7c679
+:005bb00d95a9c66d4f80b4d68adc14cd1f2abb
+:005bc066d17c83a7a4471b1070ab6e8907358e
+:005bd09b158a012b198f18c2dce8cb936b0f88
+:005be07631138701affe3c51b52aeafe6dc556
+:005bf02478cf4a3076d960ef7b2a5f8f5e7dc2
+:005c00b0a8681f979a1b0a73d6e4084c344703
+:005c106ed554ff0f5efb2b90bbffac2d38c036
+:005c20e07307749901f0838efd08546fbc551b
+:005c30028e525564fdca62ac6bd617407196ad
+:005c40801a05d0a05af2e96233182177626df6
+:005c50471b871b66c29e8bfe427e35963dd5d8
+:005c60607decc986d8b00d486f383133a9e771
+:005c700b464c4b117f4f3046282760c165229e
+:005c80131206138ffcdd94503fdf5d6e8cc3e5
+:005c90e8c5ce736aafe0af2cc9c623eb3b55b5
+:005ca0e2a5349327d00244b48faf5c16319acc
+:005cb00a079b722c1864edbd0b5e3243109633
+:005cc07483bbe0e122e6aad32bbc39a5b7aee3
+:005cd0f1a099ce2943a0a8736026ef518884fa
+:005ce0cc28a508bbd622493dfe96f26d51dba9
+:005cf0dd8e0be7aa7a7ec4e1bd0bbc02bf8872
+:005d0051dfaa7c474dbf97ac409c4c1584f039
+:005d10f71179ea92b11dea2ee42237cc4a7c19
+:005d206bd988d0eff28ef932486be7b7b625e6
+:005d30192fb273c88cd71a93cd81032d1055af
+:005d40ede3545e647c7f4cb0ee6cb08fc8bf46
+:005d50d51d4dd20ad897b569f3ea0d16f0767d
+:005d603b777b6fec36c2b0ef15acc2add3438e
+:005d7076cae1a779f415772a8b330c97167ab3
+:005d80943fe36c8fe580c27ba9aab5fc151c1e
+:005d901e053383ac6bb6015c5850b7085b98e4
+:005da0216ef05e8c21db11d390ba9da211a002
+:005db0ed8ea38f19f2b602b885ad85f955f47d
+:005dc0c0397bb92466040f73561513575d51d0
+:005dd04e00a13a7e7479cf04bf23d094efdd4d
+:005de07295f5d71f9c3968e5e2c779239d5c1a
+:005df0de5bfb603f57963c86596bd21f24eddf
+:005e0021aaa3dd01865a1ae4c6600438476852
+:005e10bdf1ab59472e59ef416669f80c1062f0
+:005e201b7e0d1ce84c53df746f3161f8ed4af8
+:005e30b03d2491d4595e4f5120b448a860807e
+:005e4039fa1e030efbc7d2d841c53233002db5
+:005e50b977391e84d0622890b9134a8bcc9e75
+:005e60021b9668d46583cf5e4fa1845b3e7078
+:005e704024e9fb004f1289ca156808d32addfc
+:005e804387a6936d68bc6c87f8da5c45b7a55f
+:005e90ce8e232308fa0b79b68467c2c1cc063e
+:005ea07282791c45e80eed221aed8ce0230eb3
+:005eb0e6f12f777dcdabd5e12281cd84cd12b1
+:005ec094f801533450e95eada350228c3aca0a
+:005ed0aec65fc1a43dc510a81cfcebe933296f
+:005ee0c6879e35a06358af59a1e2e2dc3f2217
+:005ef09d0ecfebfc47178b1f781449954e840e
+:005f00aae9b75eb7f0b90c0a83ba6240e6b29e
+:005f1010efdda4eb660db8a0c797eacb6e49d6
+:005f2097b7261e8494dc09c9f1baa624327235
+:005f30987cf6451168327512b3bdde5a569787
+:005f40698f787ede7e97a82b42d3d01fff616e
+:005f50fbc266372924c6f66a9affc2a5a39eb1
+:005f60af3732210961e3d8fd58d2dc19e613ba
+:005f70d86a8741bbf9c85c2c75fc0a97d77af7
+:005f805ffae1035e20fe506952d04646114757
+:005f9049fdf51cd53d6fac59974aa087fde7a7
+:005fa0d2cb11c9bffbb3978b239e1e5eab808c
+:005fb08ba75743b9fa9c1dbd7698075e1cc6d0
+:005fc0daf266c107661342d7b0db0939e59bea
+:005fd003d4ae3fc1c36cf5cb075e1863758414
+:005fe0398ef23ddb82992fcb0b8f5afb30e483
+:005ff022ffc81715d52ee30ee0d97613b38f95
+:0060004264b9966dea972cf3183cdfe2bfd202
+:0060101af7e876958c2ef46c33871cd5d02d0f
+:0060204bb8373ce36eba4c67d1762bc2f8e017
+:0060305416536d2f7e22c4cb55ad145fd50bed
+:0060408951798bd7d4d0de390cf1120dff2220
+:006050e382435847f57d64aeb460f86b8a5626
+:006060e8beb088af783ab70181be115d53a2eb
+:0060707f4bc82cdce41f0e2398df54ea512f20
+:0060802d7fd325ef4e46a7b43175062a62f0ef
+:0060903b541141dfd56bf10672adb323cf30ff
+:0060a0b2d413bacd945c9636958b591626aa27
+:0060b0b9b373cd0173d5ebd6b4a952d4c5ec11
+:0060c08e06fecca8ba45b4196f0905e4c022c0
+:0060d04d17df67fcb7fef2fa73224303437733
+:0060e063a751da6ad7e125098a33bd411b6d8d
+:0060f0537669a8494e45bd2bbe44156c419275
+:006100f19937885da327a3a6e880e2d64868cb
+:006110f2c854b8c0012817a08f1996fc78cac3
+:00612004c338ab6a24c06c4ef697bf4752a4bb
+:006130368e76cf599c3b19df043d42b40bec48
+:0061403198c920e6eba85de3c472c24b96412c
+:00615035394d86145c2727ab701bc07e6e04a9
+:006160129eae6f40cfff0596b284fadd3b00b1
+:006170d8cc49d9adeba6b3ba28fccba889ee5b
+:00618099dcb087a5544c66ed53aba0f991d30a
+:00619090ddcf0ccfb8d0b342bcd7acc80eea12
+:0061a00460b4879838f29a30afa01db3920a09
+:0061b0be748ef79be70b14ba9d0a8a015ab535
+:0061c0114fdd49f04d9cf4667595797b81c4a9
+:0061d00092643a3db27eb6856af9b8f084dd47
+:0061e0ff3320f666f189cfb7c52bf09e5bc209
+:0061f06e31bae0ea2257968c55527392425599
+:0062001a738438b8cc67cd54fc502f68411b0d
+:0062104b9c2635fa7b17adc050b9f26c6fff24
+:0062201ce548c62add1877db38660d3ab34ec9
+:006230d025182c3505e57cfab0d95b319b3983
+:006240ac77b1762009c1f787a76bcfdc69c6ec
+:0062501b5952f8031b745759c016b08332a1bf
+:00626026134b012db7fa5e81daff4839253d52
+:00627081886163c78722e42943bac9ed486e53
+:0062803200a8f82050acd838039390c84d4068
+:0062902719f75206006e9122cae90b46a2230f
+:0062a022389f30383bdc7fd2af4c4a1e2ce3a9
+:0062b02cdfc0a2704fdf85787948338259018c
+:0062c0a62d136d45efdba03a4e538175620973
+:0062d0742258975f97092817c20d4347c58111
+:0062e057612e35c65e8d52b67ae26752de4cef
+:0062f041c282d10a2fb41c668a718b39130476
+:00630051fb942b95197888d65e95938c031cac
+:00631073b77a8ddc6b72ce488d4f6fafb2443b
+:0063202fef1d7824b5e0e823426b2884c0a9dd
+:006330a903ed075744b1825a9add816c36bf8f
+:006340cfb5932423104c1b7999c63fa271fe90
+:006350b998c7e3aed0cf213d7de7b52f2c553c
+:0063606820bb69cbc76622a9c4bdc363f0d67c
+:006370297ccb1f2713796012b1b36b56045f30
+:0063808956669e454ce12285bf7ae9730fd878
+:00639015de69f0ddcee62be8a05e97b2ef15f6
+:0063a0021c5e1bd03c7f6e042dc8ab982cff7e
+:0063b0e70d474d546b3003c35d034458190409
+:0063c0c6aec4e2591655fb9add78235eae76c6
+:0063d00ac1de550e6f6914413c8330ec9935a7
+:0063e074c4cd481ef9f7b0a2205b061b49b11b
+:0063f0794dbd2684e591dc5716fc0a7b719dbe
+:006400fafdfb591f71faa601f2561aea8df989
+:006410e6d3728c7677f67b01ce1e469ef0dfcb
+:00642090f54a42e0f8c1a6bc7b0e66323233cf
+:0064304f12237391af6666530efb303d6307d2
+:0064409c3bd563e5deb0663e39eecd1a18b79a
+:006450f4a4c199a5790ae98e63f78d080ac114
+:006460ec551d1180a32cc967b2f44bcc8db430
+:006470ea535828a11b44ae9ae38cde8ad093ea
+:00648082a377f4c2d1e8d2f30f4754d75ef3b8
+:0064900c94ed82749242ad4d8068cba30a0602
+:0064a0bdf743c3c427344fdc04b3a7c9af85f5
+:0064b07c6ff260af71d44adfe1a0a0a3ea1f8a
+:0064c046a4dafdc464f4286caa362213c7823c
+:0064d0ca3bf72e1f211aa4c3eecac7c49425d4
+:0064e046c1e8e95f55b2c22da2b056a73e4416
+:0064f00c0c0ef86684328472a402cab8167ee4
+:006500174ca0cc9ddb0f3bd6de17255eb12401
+:006510399023ce11a89139405e30f03ffc7f81
+:0065209697cc1fd91d6fe4a07383ac283a456c
+:00653088921588fa32e49173ab1cc96f0d9b6d
+:0065408b3be51b8959d001548c5858b185daed
+:0065508e418c50fe4a58beebb8411cd504b09f
+:00656007d7ed43c8f5c1e91a9992d2445ca89a
+:0065707365f756ecb62807808281dd253de281
+:0065800261e28ca99a53df5fcf5d1235e5b786
+:00659054928e4f5c907be6b98c7c3d69af98f6
+:0065a0e4a3d17907595f1abede56123b649d47
+:0065b03baea79bd015f8196069dba278718244
+:0065c05458a4ffe28926ca3c46ea9ba8ccd934
+:0065d04f6393cb7789c018f60ed0d5403ef666
+:0065e0f7225a3768643218f514c8595ba5b007
+:0065f01ea780a2bada714fcd69d31c2cc28fe2
+:00660078086cef498bf68cf8d48a697a7d6063
+:006610003c1c7cb94605cb11491ab0f1dc8468
+:006620db05ae46b64f98414e1a3eedf022f158
+:006630356d18442191e2e98517700210036ca1
+:00664079bd2ec0d6dd237c7e1073120c4123cf
+:0066509f742682a38698c42b4b8e61a3f83e4b
+:006660aa58d3f01599898a008c8521de982117
+:0066701704cd344cd03f4bc118d09a139d9f98
+:00668050e604d7fe78e89026e6d168ba506c73
+:00669021c4580afa91fdd266acc285074fd12f
+:0066a0316067bee6c42b08afe6e50f9471a366
+:0066b06315bfad6818fe67b286162f6bdbba37
+:0066c0248b47f7e44663ddaaa970bba443fee7
+:0066d0536b3337fa81821ead5f60a3ab86e44c
+:0066e078ade912f6e340acf17300cea95cef6a
+:0066f02de4f8fd3bf280eef5d9fb11921b038f
+:0067003f2fdc44674cb54bf6d5f382eb34bd50
+:006710387d12bb530b88bac79bce374de2fed2
+:0067201627245e54ec122c591ad47eb05f4487
+:006730804dae92f0f357876e327995ce90c186
+:006740b41e6db7231bff698bc848d390322b1d
+:00675077ddc135d4465ac5f39bc96fbd7253fc
+:006760fa87189f757535356a69b1f3f01fa404
+:0067705362b7dde70afa529bf086a64ab13d6b
+:006780a7537bbfd4703e707c8f5edb500934fe
+:0067900130f125b97f74fe8e3eec33390a78a6
+:0067a0390a1f745aabf2fc2691c40bdf68355f
+:0067b07fda8a21f010b7aea2c4ab7af044d7bf
+:0067c0a9852739ae2d84ce3e3d5fd4418723c4
+:0067d0037d04a604f56bccd1ada44381c7ce6c
+:0067e0a84f136323243072770568b922374401
+:0067f054f013d6ee6fff80080b4a55d568286b
+:00680034df7c9e7a44e5ed12410c9a4543908a
+:006810739dd7a17bc1a507c4bc9bdded526ea4
+:006820d6f0e4f70a1129ca3fc3371c24abe8c3
+:0068304d607482f42ef807583887f7913c1d07
+:006840e4437fca24926cf0163c582ef833aa61
+:00685013468528aa1ac6cad814d0182a05c9e0
+:006860b5eec0b4ccfeaf3be70dfa4e2fc0fa37
+:006870bb60721f72d1a0f3e9b2f7507a5629a0
+:006880f38fa62e48af26d331d6757342cf8166
+:006890ed422524c7c6dd35b76da3b28ae4514f
+:0068a019ce9ecd16430ec9b6e1b8642b7eb538
+:0068b062b5ec441980fe127322bf619708422e
+:0068c0c2683ded6a00bc89cd326c1c850b2b89
+:0068d04ead26196d6b6ed4e0aca0ae1b05465b
+:0068e03549288e9f82fec6cb4877a5d167ca81
+:0068f086321a0bfd65b1f2906e63de98c945f5
+:006900201cc33efa1286f7f6fbb2e4f59e4e98
+:006910c6c6fcfda7628e412700ea5766da7986
+:006920d40a13888266989b9c76fcbb56fefecc
+:0069308ac88cc10debfce532e861e587c21895
+:00694008af5c4d472be00994877b64a65362e5
+:00695012f1eb6471c9645370c6e8ee455268e2
+:0069607c1f74efe0e5871a89acdc2b03af9d80
+:0069703d38cb868ace3259d3e7455e104e88cd
+:006980ee98328b0d0c08bddf66b0597efadb4e
+:00699088d2a40e5be944c8c2e751b379446b30
+:0069a02818f3a39c8904a9d9cfb5c8cffe2dcd
+:0069b06773931423229381ef50d1a468f3e826
+:0069c00fa42f6015be6cbd4d9f46bc5c1643e2
+:0069d080fab8cb7322a266645489cf705f2057
+:0069e0b74a4745ba89eb222c49d8be31d7a35e
+:0069f079effe436ce7cedf332292ba04b055ad
+:006a0017cf717ff885b039d4fbaf5f3cda3b9a
+:006a10f83371172c8e61514495e621859ec406
+:006a209e030eb58a019886dba50e6e826f4331
+:006a305550fbb8b1f0afc12590ff9cc6f7b016
+:006a40e21dfbfd2c3e6a8d2d83a194b7a96b49
+:006a508613d64ee3b58e17a1672ac84b8d060b
+:006a60c0446cecd09bb744b4fffb4d45924157
+:006a7036d852e6d90de9b45d1a1daa1993b12d
+:006a809d2f3fcd6a2a5cab5746ac8dc711037c
+:006a900baf30e7f339adc693456e6534f5d45f
+:006aa0a4de61964f908ad0968609a1de9e0a4e
+:006ab04915ff873129f251ee114952c2cf744a
+:006ac057cb50030253b01118c2da5d0e2b3cac
+:006ad090fdcdfa54b2ad542ecbc395770df2a2
+:006ae0a739d0f72ad16d3e5a687a17ba35c43f
+:006af0aa2b911e2111b91b046dc369f8dc3648
+:006b00b14c56bf8e36d7b0f54583a5148e4173
+:006b1080657608afa3a96966538fce613df667
+:006b20345a7f679aca11c712858c052d8618fd
+:006b30d949db488bd9562b503410c1d3441b61
+:006b40405821137e8de3218dc0e60a4f19c26d
+:006b50746ed235030db5a1af3c60d70eb6c4f5
+:006b60017ed721799b0d9024f7833fbcdbf270
+:006b70629015f23900c30fa3a9e10ca88e794d
+:006b802abbd19258209645831a2d928d0e0ff0
+:006b9004b92878bfd1309cad6e7521e0f7d257
+:006ba0c40c99513c47471c8540dec4d11fe04f
+:006bb07cbd64fe4018927a86868ff154930d13
+:006bc04e86b80b8b0ecef8f532ed461da02602
+:006bd008b348d922c694f7691d328de17a4a59
+:006be0216f0eeec603ec5d787804d0bd4d04f9
+:006bf011f458d764ebfe2190cf6280a1be5e19
+:006c0002e8d2eccc4c1b75cb91607af736ad70
+:006c102ead716ea39d4ad7cc229a4ce03ea91d
+:006c2063eb6c7403bd90240b60055fbffe0e4e
+:006c308e2c62a7d1381a3afc1bb3a0aada49a2
+:006c40863fd965593ccba95b5eb74478658b03
+:006c50cdc3ffd0cc30b05631835af65d3a8714
+:006c60d7fc9252ab63b121adb6b6ad169e09c2
+:006c704baf3a4b6314f8e637463581af62a88c
+:006c80be20944573e9199dfa1cfdb9cc0e4faa
+:006c904814dc00810709cefd4d43cee60d5c19
+:006ca01bb4a8ec89637ab390acf5f441fda49f
+:006cb0e9c2d8e35b8820c471a30cd390405d3e
+:006cc0f09e3ba443bc9d3557fbe242c28e353d
+:006cd0673950d5b9174f74d67a94c8edc68287
+:006ce093eaefa4f9bed973a4d079f712e70eb7
+:006cf095a4492453a6af5707bdc1203ae94c7a
+:006d00818c3a83a7ac28c91ecc92e4ad7ffe3d
+:006d109b50b357d38fabb4630f8e2f6e0b15f7
+:006d20d51a523b9c62432b513f064cd6813790
+:006d30b464886075c9a96681028a2fd827dae6
+:006d40380d86fb6ecdfad43801847b969ff4bf
+:006d50accd4cf6795ec4ccbea842bd7464f59d
+:006d6047f58ae3192795453090d5a95c02204a
+:006d709e6c9b111bacc425597ee5ac47b4a460
+:006d801ed8cac16443a732fe90029e507a40ec
+:006d9029275c587e645308218e43f0a946ed82
+:006da02fdb7452da8ac2792bd865fb53d2ef7a
+:006db07c7815b9a7a440606e7d260dba0d4d4a
+:006dc042242cabc1f62c79a44871d96ef20c6c
+:006dd0d1ec82fc941e0d7bf762ac44986c7e9a
+:006de04eccefb4b8511ead45b22a901196ec71
+:006df0a39edd6cb92450fae2db79fea344d6d7
+:006e0030935a87bfe814b79752a54448b0e50c
+:006e10e7c631989340bbaa04fd9b34e40e959c
+:006e20e58815f588d5d3616c2569181b086288
+:006e3080bf4cb8d28fb479fb6d182f37850d64
+:006e40ec82ca4da9e0c6ba48cf7a03691b4fe7
+:006e50e0f33937a3c18696e124005cbf3cc012
+:006e6037db42c4131a261ab7213be4bed6f8bc
+:006e7070a8feb6fb1f1ff0a3b14344e32f5a9b
+:006e80aa815669984ecac871d414c252eb33fe
+:006e90768a44eccc5d5127cf0414c9bb23f55a
+:006ea049298546d1b5764309fadbf337475bba
+:006eb0d888473b19fbd873d20ce43e20b97970
+:006ec00efb40b7d7b65bf970d826294c9b6759
+:006ed02684b5a08b0262501ab2217d0da4c1b7
+:006ee01d3edc90dd9da74e8fd49dd4e9b98a5b
+:006ef08aecea74fff903a720dff06cd2fd16ca
+:006f002ae66eee9d0a33759b92aeb12121f182
+:006f104fdc2bf09b62c00b4325532ec5f0f934
+:006f204447f26d1bc30fbb2c68ff7530276b08
+:006f3066ddba5cbe8b87b45e18bac9b20ce940
+:006f40464872a01a292f7a6191e0e4347dbe0f
+:006f5008a504e0ee4ef7ee34c30d1fcb53c1df
+:006f604301df37bbedc0dcdcffeeb4b91e6a92
+:006f703c1400bd7f8a91db1d98bc830c59c428
+:006f8040fdc2339e442799b82426af50576c9e
+:006f90721fe896354a630462e0701be663d132
+:006fa0684b1603c42885920ce48d8277609651
+:006fb0933cf20bde4279d58da5004e97a8518a
+:006fc033e32a589976e670842cc7d66e6ea510
+:006fd0c2921e4501308a54e4ee027f4308d4f5
+:006fe0e6fb11917a01c3f7f613cc742fa53e5c
+:006ff0f663b9be8bedbd368dc7a0f3280dae7e
+:007000620e565b69feeeaadb0e4c60296bdc0f
+:007010e1a2da439d03fd23e128c9bf45eaf0f2
+:007020b20610c1c9ee4548383adde4fdfa5b8e
+:007030f81e06419069bab6f34855e668b660f0
+:007040a9892df13b4554ab95ede026a11eb871
+:0070507b2cc87d2c93f21c91a1cfe8b2b2c935
+:007060d15caa138278a8bcdfcc457352e18605
+:00707033566853c993445d10052a00d70c75cc
+:0070801e618394e0aa548f1dfaef327218db46
+:007090417890adf316f94f160c2c979232e3ef
+:0070a04405ede5e53e8be1c1c38e1be7ee9ac4
+:0070b0af211a6402df04607035436c5e29900c
+:0070c0165bbf261f519c7374e44f7ecff21d5f
+:0070d06a15db50322101f6e9f27f8c9a1ef15c
+:0070e0b43ede10969bafae58cbcc2561b1a981
+:0070f01a0b33449192e44461583ff0654cbefd
+:007100c4a632191bf490e83cfcd84aea915163
+:00711077923f749f93903694bd6a7c5b256529
+:007120c0d7bd23852f9c11a62146baa52f66ce
+:00713000ca8062caac7fb808c8f7533f2fbeed
+:007140025ac51d8fdd64f781ac32fce836c0d8
+:007150697bb34e7717570b660af282b3204e26
+:00716021f5fe68345036a7fabaf2c83fe27c5e
+:0071701c9482884025dabcbdbc6368378e1825
+:00718026fbfb4179491bb96e746c8fc36436b0
+:0071901688ca456f25520199d4dafa058b865b
+:0071a08a30ab84d8ac664f6eed2aea5efc6917
+:0071b062f292b00be7f750cee58152b8b17717
+:0071c08faeaab380356f4d047549854ddb99ed
+:0071d0073cf929e73c858aab634ce3a3f987eb
+:0071e02f221806863267d0a3c9dcb4ece88bab
+:0071f095749288a52ad88a03e3db06c6c649c3
+:007200f75ffc582be8ee8c9050bf54ea252702
+:007210ca8accea52adb555bd6972ebe012a901
+:0072206363eb158664f7ace3f82a0b02a93412
+:007230003425a19aea76697bd46f8cb00b4d99
+:0072407537b7a240169177513281f36f018d1c
+:007250ee2498aed3bd292039be7bf30e537082
+:0072608c398d03406f7515bcb60be551109195
+:0072704e9ee9e2c1b56ec32c34cc26b960a998
+:00728012defb115f511221749f842d24b73706
+:0072908b46f8fce337cc2013593d077810dcc2
+:0072a02f3610d40c2e13c852612d2470de172b
+:0072b092f0357ca3eaef3a90c3a51b6e4384f0
+:0072c01fb437c079a07345b15f3e4ca4f446bc
+:0072d05aae05d3f460154e1290ccd29678e5ac
+:0072e0cf5f92e9a0ffd1dbe561d93f93d00b87
+:0072f0c31a02faeeb61b6c6e45016fb5948d78
+:0073000742382a62c997ac8655b1bf61a9bca1
+:0073101d3161b215f60becfb28c586c2d2787b
+:007320b1867dfa65c7cb3968770e326dbbe677
+:007330b3eccc770e09985bc3be042b0712263d
+:007340f49932921dcde1ff2a7b77fdbc5df7e1
+:007350210cc02df3fa74bc52a7ccbf25ba2dc3
+:007360b72dc3e84444b98160477908707362f2
+:0073708dcc93cd31ed1e968a3e91919951fdbc
+:0073809b55dd5057fff1b89dbc7b13b1ad9b9d
+:0073900b21f8385db478fc74abfcc793e1e73d
+:0073a01be1ed62e30d0052adc449aeb89664cf
+:0073b02b0533ffcbcd2231e6b883f9c9ff3d43
+:0073c03f2d5412368d68335300c12d0c02884e
+:0073d059c921fded6144a18324677dfd991b76
+:0073e0d2b62232135af844800b03920c5f73c4
+:0073f0ee9c01168c18cbe48f5ac2e88ffe1ab3
+:0074001bafb0acfa60a713f9ae7370c52b55ac
+:0074109e4c8e1853484cd91f842ecec43892ef
+:0074201be8b000581d24d7449687dbcf572881
+:007430e0de7feb6baee4891ddc516df9179d80
+:007440cce5b867fbad92a651e25693a3495dc1
+:007450eb50ddaad253400e93ffeec4b70b62ad
+:0074604e3b399ebbaba1ebe370c94f46639d54
+:0074704edada3fc67d917d6a646ecd12dcea79
+:007480b4f000eec3ca88e8a5d66fc4367e7e2b
+:0074907b33d72c4003d570393bf49104056bfd
+:0074a0af0440e353324eaed3c54f3b72961db9
+:0074b0ead9a43d146e1f2ecaffff453b04a7f6
+:0074c0dbc1e3f21d8fe9eb2d7e3854621d0994
+:0074d0987fbb8995258eba97544dc3f4dc2ed4
+:0074e02c45feb17b5a4a1adeddc74c6eba50ce
+:0074f088b5081965d975e4a5a421bcd65de514
+:0075001aa80782c244e5e2b9d56c0c236be35a
+:0075100bc45038739d622de29cefc255e30588
+:00752056d10dd697f724b1c296ccfe464c845d
+:007530592c8f2f3513eb705b4b67acdbc26a2d
+:007540779e37bbe2a3e48f1f7ccc6dee49053f
+:0075505b671427aa93d92e6b8a10e8eca7f490
+:0075605d76aeafc2e1dec32f906a11636b1e4b
+:007570ffabc65b936795472f33d3c8b9342459
+:007580ab119d509d041af3c5165d50220e3dc7
+:00759050fedfecec8f747722784b97c14b5de6
+:0075a0f3d8cdd45a2b63be10a1382593b296a4
+:0075b0d6a4103faa2989830dc23f56185373d7
+:0075c01e8b4923d850d88f1312629940bbeea6
+:0075d0cb4a216e3d04325e94e12d9426743beb
+:0075e03493de0add83ef428c6676bb95558cc8
+:0075f00238389913ae4a0e821d14cdb1fad795
+:007600f59e51e92b1307ce7378fda1067feb79
+:007610ef423aa04a21894e466f52eb76bf52af
+:00762095338fb0ea6c247fba47b055d87730cb
+:007630a9256f541c64aecf1f283ba04fa1397d
+:00764059f2795d448b1345921c3ccb202e1e0a
+:007650f28bbd00451398e245bde4e382e16ec2
+:007660bbd9ac24a5c5b71cac30db29e4f9c72d
+:007670123e90bed974cfd2e4245755c07e86e6
+:00768055c8701e90965f2eb52930c3ff134917
+:0076909727736268d44c99f79a48f4471a0bbf
+:0076a0a0b9f7a66459f4ef946cb7cf866c306e
+:0076b0b891df739c9442d7ba450697bbd29eae
+:0076c0240aac145f725b2879f30cf5ece13540
+:0076d0a17507879a791105579b966474bcc357
+:0076e05a97d756f31024255aa5fdc6278118c7
+:0076f00f4190e60eaf15cb00b12818f88300d9
+:007700e1257e5ff09da872c4a22e7e6d594319
+:007710c992483e1565e8ad1f671287f0fcd2bb
+:0077208a2bc72e55df8848588c4a62dc99dee9
+:0077305aca284a3f25648495d39f9d4f082d23
+:007740dfe2da5d12b8bda600111de0d5ae4e62
+:007750629ba7acb1abbd01abfabfd554fd051f
+:0077605da80c49f1584bce7fd15da220a8a29b
+:007770d6b8be13163533269435f2e373535d04
+:0077803ddf48b195a68b8c2bcbfb36e3a3ada8
+:007790a07a9bf313489458e37a740343353ac4
+:0077a0f6c085de22016a454f7b778c1e7b16b6
+:0077b0efa08244535304b21111608854921b77
+:0077c07d09dd4d7c87eb031b51e2e50f1aee37
+:0077d0823146bd5782fd3237e563ffebaccf73
+:0077e0912d1e932fb10e769f923f9fc2afad69
+:0077f0d0ea0541f6603d3ffe5975bf5feab947
+:007800bfad4bad45e5fa8f6bbc729d26e51fbd
+:0078101ae0f6696fa3ddad4c72af861f521c3d
+:007820701aa5f7b41e8f8f6c2f17637681cec8
+:007830a80d433b9e63c4a505b6005bffedcf6c
+:007840736cb5f13e9f067713fa66ad52d8a553
+:00785085ec0cd33e6e638389083c02886e6f6d
+:007860c15602301ba5cf5671847703be6365f4
+:007870880c7ad75604ff6d5ddc887dd5d748c7
+:007880f3ebb20701477e99cdb28aed5df77394
+:00789084a63b4155248e2f1c5f4fc21b859f96
+:0078a08290a53285bb069c7619226f4381240d
+:0078b0508536c6ddf4b44f79dbc845141a25cb
+:0078c0b091ffac0f0410446df90396453fd8a2
+:0078d00ebbef2db4d9cd2b95c8d9794dc55393
+:0078e0c107b53f370d3a3af8a9206fa1f24ba7
+:0078f053f553e8a38e61c0a05c75c00446b5da
+:007900a59dffef6ec3715874c8226b09b35291
+:00791071904116db8166e9342c7db7309db77c
+:007920590df2f0bee09b73128ca903d3c415bf
+:0079302b7a2c5bfe99b1e9d73ba84021e528b3
+:0079401729e0835284279626171d8bd74f0b98
+:00795076f79923b40cf5a723dabfbc0cc845ff
+:007960a00227a9d26e3a7b5ac49f589c1415e6
+:007970621be5c57330631c25e84b0c697b6f8b
+:007980d1c7d65f3ccbe0746b09f6a244a0fc33
+:00799013c93013412ad5e9e0a40b117fabef3b
+:0079a004501742bc8cae7996b8ef13e3ee9fcb
+:0079b031983448bcd707270c2ad29acfa7b94c
+:0079c0a9444586b1af0ebe03c21604814f2636
+:0079d03acda2397a6288c9f9be388c7116bbcf
+:0079e09531bc420deef0440bb9f68b63ae0869
+:0079f0332240c947e0c81fb6ddeb0bd6ccb056
+:007a00003945d30da185f90784c5bb57405860
+:007a1072f5ae30a0f40665b9ff30a8989e154f
+:007a20569c216e38e90716fa40c9475eb16f73
+:007a30caf820bb3aa076c6c8ba7846000551df
+:007a4005bf9584c5314629d69801d038ea8532
+:007a509019208935260982bf8214686ec06899
+:007a603882157a9f1584116ad914d9d4e9039f
+:007a7026fc1999d798e04535457fc788f02af9
+:007a8008b666ac225bf9da9e1994b5cc5f49dc
+:007a9022fd32919b8368db0de34693b2144f6f
+:007aa00e7058e4039452a2392c197f74349a76
+:007ab07ececac561d86ee023e786d35bf50612
+:007ac0e1832388a0049c37626e8d57dd060d54
+:007ad05f0d000f2447cd54e8b7f74e07c1d711
+:007ae0d988fbdc67d27be29005fca1b9ffc95a
+:007af0fb878f295b77e2df0a630bc8d96e1556
+:007b00275d213fb33252f1a0fc15168d401acd
+:007b102792cea6c279f85abac1764e29dadaf8
+:007b2093308bc39d1bd9fc374c0b00227bd51f
+:007b3039818e1e71042000b20fb2b64d32f63e
+:007b4074ad7147b2fb28f26650c6be521501b8
+:007b50de0cbfe02a4b4626faf2768ba4dd8d25
+:007b604e39a86b84cde96c251c13c9d7b696e0
+:007b70e62f4e5abee0135b790c5d06b9e99f9a
+:007b80c42d175de162e3d6ed58fd4239924163
+:007b902fd990a833a74b9a95e20de97e61f885
+:007ba09105d443975a8b67dd14d3ce6f03207c
+:007bb0b48a678dafa85e8c49e13e3e843ef5fa
+:007bc00d6fd7c35430628172dad20f80109958
+:007bd0115625a04c70ba2291c6b32d5c2d2a5e
+:007be0d277aa81f17aeedb00fd4fb715283d28
+:007bf057ff06e59ee26630638bdc53acecd0fe
+:007c00bf38999b442f897ebd0937a3b4a648c7
+:007c101b6f05235d349a847fe1b669cbc01d75
+:007c2000c42e68ab3e041d49e498f27c39bb5a
+:007c30c52b7dea5d77f81ffa311673d549f06e
+:007c40598c979d228c2d2f35b4b45202457f55
+:007c50e4f7c5b7e63876dbeac6f57521fc6325
+:007c604d9b45ba1f68a2c2a3eadeb6e8c40396
+:007c700f07521dd7c0227f1cbb2f2a0f7134e0
+:007c802d2ac2eaad5b0fbb117f65104ad2e7f5
+:007c901d73ea9c0fabc46ca417b90ea591e856
+:007ca0c607b3cfcd920c85c0e3666a8ed8a9bb
+:007cb00ef1de08151118bd59b1e67a29d1bd52
+:007cc005a57baecdaa6ee1333c2e29470bd97c
+:007cd086a1f30b207d74888d9c4b002d786437
+:007ce0a14191163e71bf25eff8e6a8036cf5e4
+:007cf0dec7f2edc0feac7f45356ade884be695
+:007d0060321c2587ba6e8033cf2e80615b8989
+:007d10026a5dab9f6e4bfb225e88942cdd9d5b
+:007d20f15c2073b443e9fc0d87a60989a63f60
+:007d30fb43941e20b5d627f671275f94a63e1f
+:007d40f009259907e93b7f19932c6c604130f7
+:007d50862c315d259e82348167285a13156831
+:007d6054536332e48004de23ac176a48055478
+:007d70198518770161862f365ede56331495d0
+:007d80468c0386014213109597875bc04e7ad1
+:007d9036dae1448aeec332457c17c85898d852
+:007da0900c8b5c4c2c995fe519e4f22f19068f
+:007db04bb371ef2aba255b692cc8ada6314535
+:007dc0fb006f92fca85f46da56b2525c594ef5
+:007dd077dacbb4050edbd06acf35f13a0bb1f7
+:007de0e98d9c72e9513e91324b41af77aaaf40
+:007df0910ffe43ee773c7f16afaadb65bdf18d
+:007e009e79f2a7e493ca5e5d61a19d699880cb
+:007e1002699a56c93a980e16a12af9b634c616
+:007e209cdb93575fc71c2ecedc3516b9d8a950
+:007e30dc75f2b3d7c9bd97904cd7da4df9b266
+:007e402b6dcba6ab2030d730270177467b215f
+:007e5003e8de9456d116aee3a247818940e875
+:007e607cc3225a6cdc06afc84cd5e140cbc9b2
+:007e70084a9a33e828515a99851d2bf23f1b6e
+:007e80aa0b67a1cd8112448823265cfecb2139
+:007e900a5f77903cfcd66ed9c4fcb680446117
+:007ea0884d9e244d3d38f3f6b48cfcc1898a4b
+:007eb01402f556280d82bfd85a1f309ec4f5c4
+:007ec04ed020e07a6b8fbc566aa9ea8995b2b0
+:007ed0ad8afe924da1e228d197775f47db86b1
+:007ee09184ee1fce3aa174b3c020444524b268
+:007ef0dc22dbd251c5991fb9107388c185a262
+:007f0013a436b3c452fb528b734aba3f9d7fb8
+:007f108eb903a4e9b1ced0e838e0d665999740
+:007f20a8325da5408391fb72f81eeab9177955
+:007f302505c4b9b3b986acce15b7c673721e5c
+:007f4067090485a2d299971afeecbed5b50d22
+:007f5005909b54f3b77349373272ba7ace7714
+:007f603eee51078201b0d295044e180e4570e2
+:007f7025b9e2806ec585399b51b4a7df593968
+:007f8030477978ebc01d544477c5843ce30d05
+:007f90c41d68b85c3686f88af68a002ece8f14
+:007fa0bcad21e1d3d0cf4fea81d9010bdd5a50
+:007fb022a621d81bb631121836058f6f2ee701
+:007fc0c6af4df13405bae96fe5719a22d103cc
+:007fd03c94c38ac89e9250007cd7359e230c1f
+:007fe072e2cf72eb47ebf09b201a2b09ce9f0f
+:007ff09a4a583adee94346525629741c612a28
+:00800054094a28c7ed4cbc991db5db822d89b5
+:008010225810be6e4a8c31b9e837aa19c3ecbf
+:0080200520502f3f5cb634d54aa42019420b11
+:00803069344cc21d051f8643ee846bd0dc3570
+:00804059e24c3e1e2b8cb7cb3d7241bea57db6
+:0080506c7d3f1dc4bab9504e6b8fbd45fa34af
+:0080600e0feae723cf6cfd8a5c2bcc76577158
+:0080704013d83001b627c8c856729e6a2c0c8d
+:008080ce6b027c5edcd2deea1c3f606a7fce4a
+:0080908f5697e92f5b5ea6965cd54fec27ead1
+:0080a01439ca4c93b731ebd7fb9ed46abdff6f
+:0080b0aed6c8c4093759520b31a91fbc1e2923
+:0080c07a856e3e21918677398a85532a997455
+:0080d038f5f8946807b09f6c5996de561bd656
+:0080e096208326d5965773597d2c5008eece67
+:0080f00cfbb089d5330959c627be8122ff2745
+:00810048bc1bd0e5f43b0ad20d263a7fefe1bb
+:0081103b298809190b008994e91501c774234c
+:0081200e805746f18953a7be240bc9b22d6183
+:008130f8f657fb00b8f0f4e931d1c11093c00a
+:0081405d2d9abf1a2699d38117cb3581813cbc
+:008150bf6bc0054b74121393055a1cf180e2cf
+:0081600a95ae794072e8c9c7bedbacbf6a9e7a
+:0081700383e086efb54caa01c6dc1d21820340
+:008180a5f0a9ff6bd0039807e6fa9bb95446b7
+:0081900dfc710e168a076df03897a93264715c
+:0081a08cde75a265abe3bf00ed1bfc8b123abc
+:0081b0a87ad27d9e1a6d41145b401e0218c8fc
+:0081c0510c15c021b3bab48b9f82bdc3fe4192
+:0081d05a847295ba00d7d565c920e7713a9d10
+:0081e0116b76e2e7fc60936a0d984ed7bc73e8
+:0081f0295c59ee11bf8d4bdd7d7089e3d48367
+:0082002d88039ee2dde336ee1f37962cfc883e
+:0082108fcf689b2169504a11af5a7d9248df0e
+:008220c0c46cb6e8ef97f898d16f0e8f48bc1a
+:00823086cb28f51d13dca36475ddb001209d79
+:00824055c129d33de9de06a6a826e30470993a
+:00825075b52b0e3692efae252a11176929fa01
+:0082602978f95049957d444f3b3dd146e2c1fb
+:008270c53830484017b42ec245eac0cf0746e1
+:008280f141b1ee06bafa099985ad551c4fbbc1
+:0082904c9b1edb5dae7f06603778e61867f756
+:0082a01dc1cdea3abc0d7c0e534ee4e8d1d905
+:0082b0c8b3fa952fbef59a5a9da2834880fdb9
+:0082c00ba8db0ab058bb89a8cda13ed74b8686
+:0082d03f2eb4bd2992c9919701ac89b5e41752
+:0082e06d7d8a70dcc892633501496c85e81b69
+:0082f03fd6d9a4b1713310eb54224b6b06be88
+:00830029e4c75076b5fda0d0646e26f83fecb1
+:008310ad5cd9706716beea6e23dcd8a69cf057
+:0083205f01b156449fc8e5d648f7f3f64e4c68
+:008330a665ad721f9d019a3f3dd1288edc6592
+:00834041a776e830cdc19e36752a92886ad373
+:0083500be2a39759fc16498dbf0da4478c627a
+:00836020b7b49d707410783c647c866b8df905
+:0083705a188e7f29faf4250900cd595ac8a6cb
+:008380aa258050e50305dc7a38fc91f4b91013
+:00839002a647d62b75e23888ebbd06a283df12
+:0083a054aaf852e74e9914ab2953637596f130
+:0083b08ff14ba7d5643c59d0011b3d551a917e
+:0083c0e29fa993fab6148aaa0e4e0f762f68ff
+:0083d0fe0ad287fb41cd20a4905e1794964a93
+:0083e0b75b71c42ee04be013c9b3467802d0a8
+:0083f081829725beb61549f50487802b3ee51c
+:008400b56a6aefee13253d872450690eafa505
+:0084108d7af860c815ed1b7d9221cc6a411d01
+:00842067f5c97d9461e03fc3c25127f8bf498a
+:008430cbc739668dd7019e1173d59866aabb15
+:008440ceee6eb690e1bfbe64a100cfbfcf7060
+:008450d61d04fbc444e2a7eb8e6fe80b95fd43
+:008460db5eca82e699063633b2bb9bcd4be09c
+:00847048c5c4ceae4e4e1c3dbd9c5a2a97f89f
+:0084801c7c7e24f0641ec7bc1cf3ea69524100
+:0084908018ca9e96c982b48ae824af17c4ec24
+:0084a0282832f7c7b75cf0c6f2c301e3d18fd6
+:0084b0c6d34981c12bd1c39552564d73c38e28
+:0084c018745d60af7b5fa252977c47adda211c
+:0084d0402e4189054f0e32dcaff2734ddf2f20
+:0084e0db015c7c1a1a50f0c0a207583fd1a240
+:0084f07589ef04fb83797d62d67df5c3d01cbb
+:008500485379fd48605e5c430d7ec7dfd5fa3c
+:0085102e78231a53db348246520b13c4fecf10
+:008520d84be5723566b1fb87f0693fe5ed837a
+:008530e32c63bdf0d979b9d53474c149126f76
+:008540d44b2cb5091b34d536a03ab25d02b2c6
+:00855022b34cc5cf9f0ec8883e09f4fe2f688c
+:008560a0f52f1ee92101143c6953049c931a52
+:008570e2d20d60fe2f7369e2f3e4bd625af120
+:008580ca781109565573c34922d1f4ecd05d15
+:0085902633a43c680f2cf6f21e80258440a77f
+:0085a048967cf0fbd728d33485191ddd9abaa0
+:0085b02b062074998eb31b92837ab6fbc18b93
+:0085c0991ef4ed8b2c67cde6e49f2e0cab52ae
+:0085d00de21ef117f38a4a4e7af736750af9a4
+:0085e0da89bb80546397dab1d66e555d60afb9
+:0085f08b79a87decc7a06dbf6a9c98980850ac
+:008600037bbe1ffff7e359fdb3291c4c91c550
+:0086108508de5000c317fd2ed265fbc39fbe71
+:008620a78b3c51a59d48f83c731818511f42ab
+:008630d45438777bc48889712531bd80919c5e
+:008640f0427a98a4fce0e86667c9b9f6352b92
+:008650380651f6a059858b871a2d299c12233f
+:008660dd8a4767133028e12b418905d1361bbe
+:008670426943eaa0c5d65ee1cda46c86a3720a
+:0086804c41126945e1cd4ebb209a411b5b3902
+:008690ac1ca79e393cbfd11647a6c150ede792
+:0086a08d69fa578be9acd22bd208d572f0ef88
+:0086b060c2b74180e7f92790dbaec791b7aea0
+:0086c0235505b48589bb07fafe6e168b7146c9
+:0086d05d1e5f3c37a5e39da0d1ac21ecc36cd6
+:0086e0a6fb7301a0cbb5f695e9b0fabcf17383
+:0086f06cabb47a823e573e9b648d7bfd0addd5
+:00870044e9f75874296f3f95fae79196184744
+:008710025cc12405e421138c6089a7cbbe652e
+:0087206945634cf11814d1fb504c44d18449bf
+:0087308c6ee160cea9bf87e740e2c6139acf1b
+:008740fb89908950bb54a3a1da07ad9b361a95
+:008750a32d2b98867eecefcd9e04c10da15eb6
+:00876026a80a2a6a78236b0065ac7aaca79578
+:00877021d0568b67898508015d990bfe0f169f
+:008780ccdd1b5f629ee1954e2c23b0a0745aaa
+:00879010a0e4b585175185f788fc21f3fdac12
+:0087a0a5b28673e95f361876fc5b50cf69be32
+:0087b0f1657c8d8b3072f8efcfb9f50f9d47eb
+:0087c0f116f0ce209d1580060a83051f37fac3
+:0087d08f819d6c1e1ae7277e91d2636a0dbb87
+:0087e05c1cdda362af416072730ec7ee4c2285
+:0087f0c0253a95a9ec6d9d5284668f1ea0c307
+:00880077c2d838643afa932b5daf92f553514a
+:0088102a48a1dbb8e3950b4c760452b42a4689
+:008820f8f56a240cab0a0479acb5a31cfd27b9
+:0088303fe2252a097f9862859406aff5d0b3c4
+:00884014b877e480f340330e448647595fee01
+:00885095e66f5efe8eb92e65fec893eb61fea8
+:008860f573101e04a40d05c38164d5174271de
+:0088706ff35420fd6c91c872687d7746271f13
+:0088803524f0f7431f6ab031ba79298d795916
+:008890a7decc8192c89fcc341a002e590499d0
+:0088a00ba6853a15c8ab800f20d04a681b6e30
+:0088b050c03e0a1cd2d7d6c618444d15c359c6
+:0088c029f82725fbf71e89624f4fe1faccb0fb
+:0088d0b8bcb0616ab71f1770664cd1531e39ee
+:0088e0a1f173d690354c816ffacb48726f1bb6
+:0088f0b363ff7c615ef324d14b8003eaca6a17
+:008900d8d4596b2a294a0075879b85f245f19f
+:0089102e755fdf956b6b389f56d41c0ef62142
+:0089200eec66aa7a38c125cfea95c3d313ba32
+:0089307fbb1d726b7304f38b88337716f99890
+:0089404c8b25fb8cb47b0758f8efbbd04a7004
+:008950d4e917a0b5af4c4c699406d97d02bbff
+:008960929d07af4e1fcedd53bd8e0efec30d1b
+:008970633841d4d62d68e6401254c4de889fd9
+:008980a5064f52788c696a53cd5bab3a31d659
+:008990514960fd6c691b111362444fd44a3b67
+:0089a0637517448cddbcd16630aeee647c7dfd
+:0089b0a7d6cee13a58fe70c7762b3c3546a231
+:0089c0893abb902f424d71c17c424310224415
+:0089d01ed782d1ad68b2ef9b0649f39c53f449
+:0089e00a6df6ad2aaff46cda4ac23db06d7baf
+:0089f049398a10681cee26b90f8ca7130f42fa
+:008a00c09f4c0ff187fdaa592838cbf8c67f09
+:008a105053874b392a532902f143ef3c41ef90
+:008a20d35fcd70fd180e89b62f107a8aef8b86
+:008a303c6d3684ccb977b3a2884080b7b4d32f
+:008a4029d717c65783aa9e69a8564cfcc10ba3
+:008a502a108d4eb68740573c6a377b760fa1b0
+:008a60194f96e552c4851aff4fcbc4acac00c3
+:008a70e692c66aa777fb6aac6c906955a900fa
+:008a803b0622c4dee4ac70420a31703100ed8a
+:008a900cbbda71532a350303b7e0581b9212a4
+:008aa0af9a518af3cdedbd09680516f380bb85
+:008ab0464114142c1b70d944a58236c486b69d
+:008ac0aa25f28e62af5622196893138a7e9b1d
+:008ad0f6be7fc39875a7996fa7ca71a379f8d3
+:008ae068495e9aaa419a4892d1c38f64f7c46d
+:008af0cf4752b6a283afeb2bb9d6d092691ef8
+:008b00d93c0a1b5848efc5e2980567ac4d8113
+:008b108a86bc50152c41d9ffe2d0907747b8cf
+:008b20dcdc243d898514c4a0e49c7b7e9bca9f
+:008b30bdbc5fa6c9ae6cb6a14e9c2efbfba14c
+:008b4036fd121a82fa28dbb6f898395cf54d18
+:008b5052a5f4d483bbb1b26f9bcd5dd4918fc1
+:008b6060e55169e56f3ab738715e5b20ee82a7
+:008b709143a0e99813442f589a652b15b8abb8
+:008b80b0fd7501fddd37d760bef84567120f29
+:008b90217a8372e3d37fa4302dfe58a6d8735a
+:008ba007274784b379e0475624dff97e83c521
+:008bb077ae9e7bb378b4c5e9c9d68e63d10f9f
+:008bc04a1a54bdd2330a4d8d79e73ea46eea58
+:008bd043161cbbcfc3592c0c4ad7b094d976a5
+:008be0b148313cedf7e174a15f5ebae9066d4f
+:008bf070fe8d5d5b16fd062375d20fa5888824
+:008c00d5d3747da662d86ba3f3d6691ca97a17
+:008c10f92925bff0d5bcfdf3d74d44d74a4788
+:008c205c657ff51341baf42fb163755d75daac
+:008c30a68a6cbc32b1f91f3de313515cb7e955
+:008c40f10b12bb0bcf01bea68709838cdcef68
+:008c5059153e9d29e015032f2504c98fb8ae11
+:008c6028e6757d443dc723953bae81d7a453b6
+:008c70596c37925e8ec5ede90f0fe4d711fa58
+:008c80e623c808aafea94bd0e8050d3c75cbcf
+:008c900134cb44be051305ceba128062fbe6de
+:008ca07d978632129020972aef5b2b66504078
+:008cb0991f7fc4b1a6f930c4e6f3daed30ad24
+:008cc02e7f6c1da17942e8b679e430e846e980
+:008cd0c35f40530ba8e72e5d050cf353c85bd2
+:008ce0d9648c6ad4371acc989a1ad871bb49db
+:008cf05cb3228038f30ff3ff44eb3778107210
+:008d00740f2de73fac6c0f3f6c4aab70fb796d
+:008d10c3d5feb3a70f9f799881186230abb036
+:008d20c6705651d253478f5875704429aaf9d8
+:008d30e9a2949a28e710a677b665506dbe68e4
+:008d4003d66c10746b54272171c7abce6f48df
+:008d50da967371f137dfea7824e2a30ab77fff
+:008d60280583ba357f14622482e8f9f4562d47
+:008d700c69247f06f445ae065d03a41c3e6f1a
+:008d8057868f7bb10f5c0d063ea007eaf1d7de
+:008d90737da3be2a789eeb0a93df2650e59b12
+:008da0967e5ce5cf0d85ad930933127ef69a94
+:008db089f72fd45049ce89d2c5b3aceeababbc
+:008dc0c8e11050731d46468abbe9db56f3ac27
+:008dd05210955920f25b8cb1ae87a344d4cbff
+:008de00203ef05ff6f6c675b3ac6a8b9d19749
+:008df07ea495ab15fe1a82c87acdb93db2dc5f
+:008e00957ca35545593b2b6df1babf71c3fb9a
+:008e10f36e03cd84beaa47804d0833aaf2fc3b
+:008e201d0cbd89671752db3741259bdce256c9
+:008e3000546a725c2edbd6ac4f99e7fad215fa
+:008e40d00239cab51562e1df5477a1a1206144
+:008e5017ab560f29f7b33afabf38ec00fa39ed
+:008e608ab2ca7cb812331f6e33050a422b0591
+:008e702f776f632e4ed3c31838288f2e97f401
+:008e80265a18f0e57815ee79b766b8f1e4803a
+:008e9024c25580dabc7bd1444f86652889dd8c
+:008ea02735367be1dbbacd84eab9482ef8020b
+:008eb03d6b1cd528326a33f9f59dfb85f88dc5
+:008ec0862cc1002dc8606fef1eb88a5a41cd7e
+:008ed0390ebee91ec50ee2782fc9bd9043eb4a
+:008ee0d87b7512a04d5d8bfc5129c1d91106e5
+:008ef08e87d559e9f530a2b95a8bce7965ab44
+:008f000f85274c377548a53dafd8e9052141a9
+:008f1066e6d9e276ae1c8f3807f5302b60cf2e
+:008f20da340c503ecf2bd42b3ebdfcbba24ebd
+:008f304a66269c4e4ceb3de26397321679a959
+:008f40b22b973b172bcc1e89be89365b97e29f
+:008f5005eaa2f5f9b7cdbe961452b1af6d0f1a
+:008f60768bbe4b74693d0ebbcc2696f7f1214c
+:008f70aea451a5a57021732b2f143fc5ae0050
+:008f8078aed082b71172a7e8df63421b04e713
+:008f90088e8b7bc22ce85299d831c3a04a6e08
+:008fa0e203c4f000f904167e36a9739c0e6390
+:008fb01d3a05984b1db803e7a606426611c4e3
+:008fc01cda70c513df2789327565a202aa88ce
+:008fd009b5129ab568583c495467eee0178af9
+:008fe0bd712f2c1db8ea6bf47fa64ff2f1e6de
+:008ff0883acd5a4c9713cc2f08ef15427d89d0
+:009000a6443315c317b6f48063ce1eef05386e
+:00901015eeec57adfe37d371884c5e4765c0e8
+:009020e96e8e67563dd780b5fbf0f5f033831d
+:00903047de55d60eba6c98d6715457df9ac9b9
+:009040d1039ccc3a4a9f13361f4b09bab28f47
+:0090509b17bec7dcefe3e18c66a26219e2d6ec
+:009060d5f0b24f45d7a45f250a0a7f7387dfa1
+:0090708ad6e4b9514ccd665ad64bd568113a5f
+:00908012fb90ca087b4fb8324265228b9f7d05
+:00909076e8f10463e70e4a408daedf8b98fe59
+:0090a009259b0f678b89c22669c378d8d4f5ce
+:0090b0ea0c33122f6f3a91a7fb18a2f3a2b05f
+:0090c0d29084800840f097abf77c579cfbad12
+:0090d01551d64ec1b7192e725d0d811119fd50
+:0090e094bf9d3c4e9de7c63954548396df5429
+:0090f0942b7ed352e20260134f2f8fe90c9db2
+:009100997c38b842a92c4eae402b1d10b9ed96
+:009110a89895b02bc9eeee999ad937e9e63cca
+:009120ec307df706ff1bbd84db5c4c76b9aee3
+:00913044e010bd0f2f0919ed7568ae96fa2b64
+:00914053dc3840d313e0c6a56ce893a12b6b57
+:009150f953bf9ad5f534d9a181479836df8e2f
+:0091609a7a057313155670d4f7a2d70f3dc371
+:009170de2beb398c512dd4425e051e0f90a12d
+:009180e80a41d97728ec9beec6a4eeee26619b
+:00919082b35d018429d186f8831aef997705eb
+:0091a0131f15d28ac82d1d9943552f3db00967
+:0091b073c73a058330f4e4743e1ed00add176c
+:0091c0780b06fd22d776165c66ca9361f511ed
+:0091d0fe35db37bf5c9a45c562b2585da0973e
+:0091e02f2d2393bddb415f122d27ee163f065c
+:0091f0d7ffb13ff2c8d165cddc84b7e1c4d6eb
+:009200649dc230e1daf5803e895a5690f524e2
+:009210e6f1c404ed5f020d9e1f5a6dd80665b7
+:0092200de331c2d0b5ba8cdc489c2077ce4ce9
+:00923054b8c849fc09806322f99281931f2a27
+:00924064c0029495fcd22f09380c582e1df9e7
+:009250472970978da9bcadabe10e0b1b46494a
+:009260cf428a8f2f2ec5c1ce365f923c76492b
+:009270bc888c0cad6609b36c47d1a291866353
+:009280c66357ded2877d282d031bda14a98463
+:009290754c2f75494c134e6f260473a8c76517
+:0092a099eb621e124e8c36e7922fac7b48d6d5
+:0092b04f0cbce5855f6ff060ab96a4a81c7ffd
+:0092c09c48cb8c7238906c979844346ac5abe4
+:0092d015710c428a7c761f299bf558f940a8d9
+:0092e0c03f0e87820373a3f0d5271f17ffa094
+:0092f09f3891bbaacc7613cf11f5bb53a603e6
+:00930087bf245251544d3f9678b67f341f7292
+:009310fcb8c410ff46be250daab63ed612ccca
+:009320b60a1b40ca53e4a54dd85cd8f9136525
+:00933043dbf27a505274e9f3f8fc672f205998
+:009340094af90e6ae032e34ff1d64d1351cbc4
+:00935005ddbd297de72a051ac75f79e59ce964
+:009360cc15e0eae49218ea1313fa09f2e70e11
+:009370d4fda537cc183d5ac26e8d2ed57842af
+:009380eb15cc197fd9d8fbf93736374fe6b673
+:0093901e623f84be7bd26296d6157947851974
+:0093a03085988d2309164d203e5c94e25327da
+:0093b0bc2bd7d679d09a5e255b1da2dd38a4e6
+:0093c0aec85079dee460be3f024bbb0d6df829
+:0093d0d31a7530fb41c62dd214a8a2032fd674
+:0093e0fddef79112ca659507c3f45383db84a4
+:0093f06de970f0c8b0cd1ce9718ba1b6e7d054
+:00940073c31ce116f1c31b92cfd313f46fa54a
+:009410c687123058ce10ced3b3e92bdbe3715f
+:009420cdfbec6e1d13113d01ce4494580b6a1e
+:0094309a8fba65570d6cf26d2a9aadfed37af3
+:0094404458168c9b792f5135e2a5b0783ea6ea
+:00945037d9e73c60d2773e67d67d1e2ff5e9f9
+:009460d1cf5c9d6ac6f83e9da7d0574ca3dd5c
+:009470388761cffde6e11eec9ed7a59e66bd7f
+:00948065e0dbee273f2630b96b636b7e2d3ae3
+:0094900dcd28d0c997a7a132b7697abc362753
+:0094a036c0c6c9964a204112cd78ff0ed83405
+:0094b088f90c80d54f35a980f6a091e578ef68
+:0094c00a701f6e7fc494c1cd9bd07de4467b72
+:0094d07b75c830d34354073d8e973fe4a0ec9d
+:0094e05ddb29c8851151a5b1b9539566a4ad1a
+:0094f0bbf4953bc2a245ecc909db91b362201e
+:0095003728f5b49089f21c639cc7ad690d6e16
+:009510600df85e234ea3f5bdf473a6dc620f32
+:00952054ba55fd4c2ff522258d01a715e3720e
+:009530a12b1a47fda96ff16873dc16faa48bb2
+:0095407f3ec144bb6d17f0d92791a882925262
+:009550a3da93aa533549cd571b54deaba096a6
+:009560235199d683853ed75ea99b38871c52e4
+:009570933f32a06c0c6673f85f7ae60d125310
+:0095801f4a8a53790e3a52d8fee33b0169c265
+:00959066913a565cc42be63e9734111a7c76f5
+:0095a0898710e7a724317acd62fc828a3abfff
+:0095b01ecae7f74b223f751e5436d7aff93069
+:0095c048a3ede42ba0daffff03a12cc761d898
+:0095d089774b3848942dd689ca284c27817215
+:0095e00049851e731da1fad1b78edc464096d5
+:0095f0921c14278da2e0e7855be0f4648892a4
+:0096009ab2f88fad1d602db22f15bbc0a20977
+:009610f54c50654cd4a427f90fc5861bd97cf0
+:0096201ef480b3d50d01bc5b8a17bc687e851d
+:009630e3b4a5d01e25edc0d9a58e5660897115
+:009640ba1b670dd9463be731a232045e4f7889
+:0096506907034e1d4b3c35479c08fe63cbcd48
+:0096605edb681fa061cbd981bc072984b80ac5
+:0096707bc120ba28371b7d95f971a2f128fc04
+:00968091357312bd778d9ba07810763df835ef
+:009690449d0183804080e383f8459a3eefa872
+:0096a0475dfc1929fcab2fee67c91b7016ab3f
+:0096b00d5dc8bc4ba7b863ff8866cf713a87f0
+:0096c0392aff9a3944bb6ab803c3500c6cabab
+:0096d0e9896c4ad92d9d22958ddc78c0ca8478
+:0096e0c184a562f19380cea2fe704cacb0f7a7
+:0096f089d32bbbecee62f99275129f0b404811
+:009700400ac5bfef09e02421f01b7362da2d97
+:00971073c7d5fa8a671af3e8a1464b33e4d25f
+:009720698bb888235ee65883b788542820ce58
+:009730ee006e9f264b537c23c35383e5514d61
+:0097400fc0bd6481af8253d80264f1691a7a3f
+:009750025275ef9af4a3175a577b03c9ea7050
+:009760f33b9f83cc95d2c3bc2251cf6b9f49a3
+:00977013198b54bafa1aac011d4c68472987ac
+:0097806d13239763e8230ee2170f4d984981da
+:0097900b8f1b5f02875f134d6f5d45e94f6ccc
+:0097a0588636d70426caf793569941f147e1fe
+:0097b03c839b7979c7484d6b1d3d91578c3fef
+:0097c060ae0019537746b8d3bd6b547c1b588c
+:0097d092ad2d630c8acd681dbef85552e1490f
+:0097e07fef5abb583c7695f3c0cefe8a0a00c5
+:0097f0525a3b647a2a493a4304ca6565471b43
+:00980071b661d5f41d91fe70b54940623e49ac
+:009810222ba1a48491fa3c2126bbb4abbe798a
+:0098201fd8074d7dcc755ed6c7e5797d5a21d7
+:009830a5b559c7e4a73bc8857a0693e1c6b107
+:009840d16d8668869a4ef1d754b79e0fa29ecf
+:0098506e9055f948893e6c399679e489c9d8a3
+:009860991af2f73fb2a8bc41b297c9e193137d
+:00987049cfcb0fc2c3dbd050c8180ecd9de432
+:0098808f35f5e1414b547b01d1a779f1584b17
+:009890a0eedc7eb9c6d371a5b0c107862e031a
+:0098a0ce8e0d230818a3f932b77d177565f6a5
+:0098b0b15dcb102673bb1feb685e998904e9e9
+:0098c01846f2e3cb9a8f400fdec3b9cf74690b
+:0098d0802bee4ea8ec2732d4e60379296855eb
+:0098e0a281e803e8236f00c67299475bc96bc0
+:0098f014bc5a1332d94386a3339f7b58e22501
+:009900b20f8adf29d1331087523f09de1f0f32
+:009910d74c08b057fda71be2c5e28249ccc6a4
+:009920a845f5c98eab75bfd0f14e372b80c242
+:0099305f8023d3102d36313423ef2351e44996
+:009940427c778c6dab01b54959e3d3df0f1248
+:009950f921554ce65d1e39cd7e3d12bb2b55a3
+:0099600298a158f70bb1e3905e68c7b7a690c8
+:009970c5713c90e8b631bf607cac5662052796
+:0099803b3a9dba03d46d64be2faecf2b56c84b
+:0099903b30277785e7095f5ae094da380a3d20
+:0099a0e9327832c5d201f33aa9c2b51721013b
+:0099b0a26e881cfd2408058aa62dd6fbda95c8
+:0099c0ba415d988f86844bd8ce7717063f906b
+:0099d0440adebaaf1a2fe3c4be815402f0ec11
+:0099e03d11b313b85060a864da73ce4724d8ae
+:0099f084968ece6684d12723a6255030ac1433
+:009a006a0c11d00aacb4d7ad9929cdb516ba74
+:009a1063b08c863aa611be0f57681731a6d6ad
+:009a201f586d634cb14ac40a130c5c9cb3e552
+:009a30dfb19d336f9b82617434c8bc2e22ebf8
+:009a40bcd301516a1dc1243befa8680b6b449c
+:009a502f68c9b830a65c4f651c54562cf8e389
+:009a60034e70758ca51f784c3b7fd86969a8c6
+:009a70a80d9b99873538743927f23257e1eca8
+:009a80006a3a8e2eb04787495f527d6e49c6fd
+:009a90887c178296f1cc6be9937f67300b9b55
+:009aa04a10becf7212985af4ccbb0492234c0d
+:009ab037283e15a252208b945d6d2bad71fd7e
+:009ac034c31a8e5e1ad9e984d817b7bcaca703
+:009ad0ece441a5318a37305f0f5241b8321f10
+:009ae0185ba26c0cc39511e5750d4646ec7e8a
+:009af06ae5abacb1cff65d690f956b5970a28c
+:009b0086037a428c1bda2caf272d8e4df9fd65
+:009b100f88d90cc8e82eb045bb545c42ea1d21
+:009b206b779aeb925982dd84b64c363025ef7b
+:009b30bfb983cc26d480dacef97fae60b86ec3
+:009b40dcf90f1c084984ff98ec98a2d2aa8b3c
+:009b508dadb4590264687ca348705138ac227a
+:009b604be24a6f0296123071a86883aff6a414
+:009b709a6a91d8e083cfe18968545c9e13a55d
+:009b80031407a44c92ae1e830bd76af566ce2c
+:009b900bdef968223bfe0c3ebd6ec3b0aba134
+:009ba0d43a9002d796fc6bdb14e1031c528143
+:009bb0b90f196b0371a25242d59e47a04cbb61
+:009bc0101d31f261ef9f6ee75b17d29e9e7dc3
+:009bd02fa8002102d3477933cf5534f598e30c
+:009be0ef63e1751ce45468b191ecf49f3daee6
+:009bf05fa579b213f671b096168f9ab409b741
+:009c00aa4d2cd193753713edd5ae19b03eebbc
+:009c107838225ec7678e32520f8aff3fe8ac86
+:009c20f88b20686960ebc5c111529c469a061a
+:009c30f25b445d28fca2b8dba89e2a1868a2ab
+:009c40fad9669803fed0302d6dbeceb5e96780
+:009c50f79896469048349f4864f8d7bf62065c
+:009c609ceddf0c198be2017b091329a5e5962d
+:009c70a4ca3530f2e72b8fea30d957d8d6c7a6
+:009c8073513f0f8ce256bdd341a9a4c2cde759
+:009c90b9dd7a3264527ce1a7c14cf9701884a5
+:009ca07ced6895c06465f8002c7580e6f04b08
+:009cb068e0d00ae40f38a82db84c3fdda9ccee
+:009cc074381ff50189c71de8510b54cae44e9b
+:009cd080b42e7054ce42f9db2d37c3da229a01
+:009ce059ddbc1646450eeaf2a42edd269a6c81
+:009cf0209e7ed7bd89056df384fba400d0a7fd
+:009d00d5801d7269f7a806f35485dc2c5f3514
+:009d10f484edcbc19db692d5e49749cecd57c3
+:009d20f32d0415a235e076e21f07f98901c034
+:009d308b32736755bf8bccf9b5b634768cef35
+:009d402b2bc69f4c61b10998bec5a1bb02387d
+:009d503818ac05f21824eda7c42cba3f39f0d3
+:009d60c3d0c0f4cf6f922994fd541a31d766bf
+:009d70a039484fba94debaf7d3f991c8ce36af
+:009d80291cd38a082d8d3f5e2676c4a1cb3952
+:009d90769f8557097fa6f967badc011742a36c
+:009da043b2b2d6eb3b4381f6611ed91985f68c
+:009db0b211a00dd763daa1deb562e3e262a0c6
+:009dc02e6922c963e65d107cef45d3767f7f1c
+:009dd04b107b64f7c49c64a1cf026442d7a2e8
+:009de05f5acff4b2c573d3543f376650c3d030
+:009df056171b2fcf2929ad88d22bd87bcb3fe6
+:009e00b83a7b43037af8b38c64a5f80e2e5336
+:009e10b3df2fab0bf5f8c4526abc02ea10944d
+:009e20a668695994d18c95ea4e219cb18832b1
+:009e3009227fd905d3197cb179123e57b8095b
+:009e4013ff7e31a2ba91aefb0d23be5f237c95
+:009e5052bdb0b2ccbbdca679331bba62b15e9f
+:009e60827c943f893a72ecc10133ebb48c41a0
+:009e70ef28e132569926104bc2895a83f97180
+:009e8019c6d4fef3682dea181afac914fbbda1
+:009e906a2d0db1cf602b3cd7ca0774976735c0
+:009ea04af23c380ed7a05bc84dc8f5b0ee002a
+:009eb0114549d63ede3c9dba3bf00790b323c8
+:009ec0f9811617e6df53a7daec3d78f8e00496
+:009ed04a31518afba1db2229be6d84d7671a17
+:009ee043699c8db290b02b4fb800fc6d8a2ed3
+:009ef070af17972400fd4e18b5957be6b8b8aa
+:009f00bcf3f0400f2f7f21a220129ea18c3c39
+:009f106afa059a19877a532b6392304fec5aa4
+:009f201aced50a30f988066783de2848e2fe06
+:009f30615a0192e54686758d16a1071953c621
+:009f40aa67fbc5f59022dbefa919084743ed1d
+:009f50f61d743066048b905a4267d836780ced
+:009f609a0cd549a98b43e9e3c6ed3d7bf579e0
+:009f707f55945496946fc7ef43387b0ea280bc
+:009f805a8d0e8873868b51a1d6366db76c4597
+:009f90753f9ce200f0035ed4fc7bdf763fbeec
+:009fa03d774ba2f4be95f89b35c9ec96d4917f
+:009fb0c2b19bdc5ddb3aa6506e84db5fac3457
+:009fc0e28c25721095b05cef2560f4f0b075ba
+:009fd0ab3f769631a51a69210abe43da41ed47
+:009fe054a637dcbd1c00dd915de6a9b75669fd
+:009ff0050116822c41c0284dc333a762b260d8
+:00a000172f13eb3da6174209dfd8093ce286f7
+:00a0109d31a4ca7162eaa9338d111f3fa03014
+:00a020d12af5193a1cf98a551bfbce92fa4fda
+:00a03009e9295d469eb0bc72551e914fcbfbfb
+:00a04065e352f962dff382e8fa3b0d34a57730
+:00a05038febf8992ce2caf5d5aa463cb3f425a
+:00a060c354deddd22ce82e1f2913c9594b6f98
+:00a070114e8fb89a39bebcf04753c58d83b1af
+:00a0805697c276992d3849c9aab32549b4714a
+:00a0904633e21d8d65e8d84e2fcd87f33ce9a0
+:00a0a0ec25b8d5bf1c1826f914ad60a5491b23
+:00a0b006da30b4bb009270a6fe903c8ba24404
+:00a0c0cbe7feb9cc2bc52dc50fcac7cd532dc9
+:00a0d0b18f706d82bffde0d6621d348dfa4693
+:00a0e09d21ce38a5cc4399991200500bcc4248
+:00a0f008c32ce79a19376fa9681ece4c475509
+:00a100695ce049929e726e44c5badf5e42a3e4
+:00a11031cf9f00b71a86e2919850ff53a3e46f
+:00a120914f3b06c41b4fca44c33936d7f0820b
+:00a13046c32fab9347d357863b528e0377f297
+:00a140beb24cbbc1fe05ae745c48d364a19cc6
+:00a150030e2c89bed81d75873d66521d7d1a94
+:00a160d6e5adddf8d1ea9b5fda7b4a3bc0dc71
+:00a17095895811f9bb67313da853415bb385fb
+:00a180e84f195e378444f4f825f9aaf6872796
+:00a190b453edb694e755f578dbcac158486700
+:00a1a0d5bcd77c255754c5ca0f6eef1d7c9eb5
+:00a1b0c466822098ec9bf9028cf3089107ad98
+:00a1c05c70c29537844193e42601e29bd7e4a0
+:00a1d0d9d4b1d85bbfc2083849923233017c4c
+:00a1e0a39d83416594e4875984b8152dee3f8d
+:00a1f0267e65a3a59d1335a65a2af7026cbbdc
+:00a200c6a0350f5360236bd849ef381b516f5b
+:00a2104e7956ce43d82ab0e9f3183f76fcaef8
+:00a2205927f153fa68d53a25588f0feb896f78
+:00a230c476de2a6dc2c99cea552ccec64449f5
+:00a2403799885368adb5800016188c1b524fc6
+:00a2509a97ab7997d460d4586f1f5a8ca8251a
+:00a260ef502b296f7b1d0bbc46b6c8dd14ed27
+:00a2703cdb3bc5e5d818a7eb599adf9064c42b
+:00a280a9b7dbb0277056736846e8a0f29bd3ec
+:00a290345b2203c2fdf0377a8115b06f7d7c5a
+:00a2a0df8f8289d4a01a58effae9d30608b7f2
+:00a2b005735bbbd014b6ebef4c12bce84592d2
+:00a2c0e517d1460a5e2308add5222a3b32b386
+:00a2d0900b58e4355f298d1ebbcb48d381e5df
+:00a2e088b12ec89fa6681ce1887dfdf54148de
+:00a2f02170aa1dd2b6535e7f149110a2be5ec9
+:00a3005d9688ddfb98e45a8dae313f4a9bd10b
+:00a3100e0bc437cb8a16b46a0420aace05d1d7
+:00a32052c14d40eeb95385911fe0bcd3883582
+:00a3303d5fce808d9e324075e05c8f8f494dd8
+:00a340c3cc8f2466c4ae1a946591d7a89d32dc
+:00a3500cacd9f9a81b7746eaf2524b6bd8571d
+:00a360dccec3195e6e30b7ea6bb33f879aa610
+:00a370ea707bb8216db50ae5d5b04349edc96a
+:00a380ba94ed9c12f2f047b6fb50666908bb67
+:00a39051f6e8cd96dcc9107ae0605268b82888
+:00a3a068b9a004f88b761b7a4bc7ffebec6bb4
+:00a3b030c346dee4bbbc8cc2dc6f1ba2965ed1
+:00a3c0f9ec6a3662ff76d3828f7fe2eb7cddd9
+:00a3d00933f14ea30b7304dc6bf7b9896dc859
+:00a3e0b68e37d34280a0f7725af7e0b858815e
+:00a3f0fe9c8d8902bf07f2a8d5bd93cc2ee89d
+:00a4005dc41175be54f92b5b07805c62696469
+:00a4105f02451a71c3698a950eda9f152e79eb
+:00a4207bea4999a462a2ee8803dabc1d8c4a51
+:00a430d421d6bac8d45329d95544f022168399
+:00a4406c4cafc95fa7211c60179d05e53a8006
+:00a450f39aa0c82bad63d7fa31a567121cb724
+:00a4607921e8867e8f592f9f62ade36eddc823
+:00a47031a5876d3875e640a7c6d058d28953a8
+:00a48075e28e1fa929b7cac1cf9be87e0dc1b3
+:00a490df2ef745f63ef7e7ac436bd1bb502d05
+:00a4a0d2d6c0b58bb63f698cb641888de16979
+:00a4b012acaabdf2cd89fc7961211e3afe61b8
+:00a4c0129bb2fe07b5188230c523afc2909567
+:00a4d0782995441e3637bfb5b3f6ef2477e00d
+:00a4e013a307156b7c6652e101789af948159e
+:00a4f053e38e707c3d45869d8b9f1f544e2528
+:00a5007451da51f8a0c987cb5667052d27304d
+:00a510e1df3346ef8f6a118d4ddb3e254f3e35
+:00a520aed91ae96ff0d87221290c38764dc099
+:00a530f630f75a47fbfd489e6a22a2eb994234
+:00a540954167907f380215792e3780dbd8af1d
+:00a550c8f540c8589779d5123f14d47e4ae6c6
+:00a5607318953564df36f282702605c5f5cfe0
+:00a57040e063c91e404c6b964ec662678571f8
+:00a580f4f9932ec35b7c8344fc0bb7068e8aec
+:00a590e6ed845194038d7bf29f4db8cfe4431a
+:00a5a0e21a02dbdb4178f971360e36e7c2e861
+:00a5b0d17da975e958a033be74790713773d8b
+:00a5c093dc598677ba8f138fcd1cda6f42089a
+:00a5d0410f1039f3800badbb2fb901ed9f0fe9
+:00a5e00fda4a88c055793fd6e03f33e6b6301f
+:00a5f05544450214b00784969f74ea605fce3c
+:00a600e7c0c11cbd6ccbad8afeff95d1ffba76
+:00a6100541e06b3b0e30956853c332f3732170
+:00a6202681b74a0ce7381a56dc1de192eee153
+:00a630ece8633d68f7194aa2a5239f96b75ae3
+:00a640a95c60879c344b0e29fd25ceb4750e2e
+:00a65007d7bb3efa02df0bc0635859749eeda7
+:00a66000fc4d52fb85e3f61b4508636ce1ed3c
+:00a67021d473984546ba54dfbfd655de18d322
+:00a680569830cadbb711d20f1b3963d6061b5d
+:00a690dcbb3a9c3b0c4eb61ad446abb61d2dce
+:00a6a055a377db433376e000ab3a5822c55fbb
+:00a6b0e8a51e12986c2885ed389641ed073178
+:00a6c0f814f9044d5dea422c4b0c9279c3be39
+:00a6d0c593b14871c1de439e3818508cfc9ad0
+:00a6e030ea7d8f247f39cf18d950a0d38b019b
+:00a6f0a23470909f32de66076d200e8d0d9fb3
+:00a700dd5d4f7176b8f191de606bfcb409b77d
+:00a710272ecd5873955c1c5b256bc2b1b6eb8f
+:00a720963fb9e11bbd10b5ec668b918d755028
+:00a730a917501ff293c1ac576464fceff99fed
+:00a74051b0fccce5784ccca0b0270a336ecde3
+:00a7503bdb9623f14cc9fb38224a5cf6342d04
+:00a760ab6f51a1c876f5dd1c1fd4bb309467cd
+:00a770279a384ee6ae4d83d330017ea126e400
+:00a78077300892ce7a6f2b4945a47316e6c05f
+:00a79075d4e90d080308182897a1f4dbfc99b4
+:00a7a0978ee2c11908c1831d5054aa2540d4c5
+:00a7b088d99e526ef86126ffbf4de7781f85e5
+:00a7c0d207e4e3de2464bb3fb33718ad57835f
+:00a7d0fabbff5cdc1dfc606da8b012885468e7
+:00a7e055eeed5f7f13f4fca7f0dbed9f69279a
+:00a7f00dcb19f1027411955fbd2a13a5155ee5
+:00a8007796d88475ef640e6c4d735f415c0274
+:00a810f029569bb1ac011a12aaf274c7eff911
+:00a82033781a918a601df048e7a3c12471587f
+:00a8309950770394c94c41e4eb8db31776c024
+:00a840fb4ed699c50e4642c27797ee7756dc53
+:00a8502a5a1a7e4b10a1873fa3d3b156a34e30
+:00a8603036085c03f8897c47e8dfbc0ef3b42c
+:00a870622f3f50bc9b65facb11926917e62c1d
+:00a8807b83478495bbbb8e01bba98d1abb93c7
+:00a8904ff4efbf680264fb7d2ec8b13e36764d
+:00a8a08b5d70dd14460dcea7f01c0e1900cd97
+:00a8b0659866b363233100bd5de78b4a78f6d3
+:00a8c0ca277c1fa3ac6e53f95cc6d0cf05514f
+:00a8d04dc247fcb29a4a8010171a993b108b96
+:00a8e01b775bd093aa01fc6987563e77d766a9
+:00a8f0f986c7941c6c99870639e769730af244
+:00a90012f93c018ccf9f795e7cd30a5c68710b
+:00a9100de801e2bfa4b82f73861c38bf2988b9
+:00a920d13eb4d3f92c71f4a7128836528f7499
+:00a930552271bb4fd0cd1db081a31f3809d4e4
+:00a9406837ae2f4bf91cb0b54c9500868baf84
+:00a950b2d25e463aed0abed2db17bb11450395
+:00a9608a897ada80893375c3cf94f3d98d54c3
+:00a970a6499ece52d13e08974b01c359897d68
+:00a9806815b344914541ca983240fa7ee3a705
+:00a99018cc8d69662683938592eb7042a87869
+:00a9a04a003d4c53e979bedf7ff7a28443de3a
+:00a9b0cf903d4759df9c5725288937ade3b6e0
+:00a9c0836fdbe307c466c0402fe1e6d014c39d
+:00a9d05e798dc0d179b16a12257756dff6ef03
+:00a9e0e5bb21e7a464785604655f0d4c0beded
+:00a9f02ea45a4b87e0422f04a1b71a50467d84
+:00aa00a290aa24f7b65b7f61e410d077ffbb43
+:00aa10c3072ccf840df36412a4ed3280c4f5ec
+:00aa2097904d2334177b474ad870df98b7fd9b
+:00aa30a3ff5fd7c7d190e66788f8af8c95cc38
+:00aa40cbfe1e1ace7960e792cb4bfb1c709258
+:00aa50770a60932248a39641c742d82e64677a
+:00aa60a247fc283753a2f30ecd9b826b21cba7
+:00aa702e191453225e3f2c4d87589732868f87
+:00aa806419c77c82ab2f59edb6ba7d9406a6bc
+:00aa90007217d8b80ef9b7a8fedafa378da363
+:00aaa048a1e35e180b60b1247edba731e22758
+:00aab0fcedc5c817a654e269de19d9dc423024
+:00aac024204eaf67faf2a290ea8fcc807259e9
+:00aad0c01f21d441dd76e2b1734247aa30bafc
+:00aae0d4fb372c30f5c11537f6a98c84c208f3
+:00aaf0316774c5e9be913ccd432375f2721a0b
+:00ab007eb2b0ee2e695ff12d31fbea9a5acb9f
+:00ab10df8afc4dc4c084569096b24e7bf606ac
+:00ab20deb6e6c4ffd7c9144b855414a49230df
+:00ab30bd81d46e601eaf2d1ff689ca6811d844
+:00ab40a95a66957cb5bcc64d105743ac7a1d37
+:00ab507b5a77d60411fe5bdfd33676d4b283de
+:00ab6040b877bbf441e983cf115d9cf23262e0
+:00ab701ba9e4f0ece8caf20791d00defe0384a
+:00ab80a723c795da087c3de2f9342d8d7c6739
+:00ab9049c0a9980f625428efdd9405d41b23f7
+:00aba0a5376d7ad868f0045ac1a8513f13ec84
+:00abb07cdf60d565969168a18b0b9189ae1cc6
+:00abc03906d5cd22fa69a5ac1569b7c7b7284e
+:00abd099fd9576bd014b0d8c79bcdf15c32f14
+:00abe0824f239101aff24426fd87c60d12db85
+:00abf019e2e64cc3cb8082423eb97a68046cc0
+:00ac00c83dcfc01182d5e6b8a82c195c2238de
+:00ac10e2ed03af5cb329d12fd6914b31518e8e
+:00ac20ede4dd25baa61fd0631127baad883c97
+:00ac306c4fef4a560da6c46dd2c0422d055cd6
+:00ac40a7a89281d4202ee0c425c29765cd28bc
+:00ac50d56b068dd9f62652801d0206be932d6a
+:00ac60afcdd3c7b2c96df513df0d01637932c3
+:00ac70c7d7f7ca7d9ff268b9b97a94d24d0f72
+:00ac801358af31fcbe045607b8552b6f6b9ccd
+:00ac9062be4b32544e0679c2de9976fcb86dfd
+:00aca022eb641ac1a8d3761c8d40e934d36309
+:00acb035479fc23c782dd8610e7f34ae132191
+:00acc09e7c5dfeccb92c8834eee97f556f8844
+:00acd05c19f9371fd9a705e77b95f70eeefc4b
+:00ace03571c6b33125c0d6b0b07d26f78ded98
+:00acf07d32c693e3f886bfb3b42f0256304a6e
+:00ad00b55600e1b86752814e9e79c0a0ee12b7
+:00ad107d0615e7f0b9c693a9ea61046eddca65
+:00ad20892eccba66124789e8803d85ea1672f3
+:00ad30334cd2bbbca53a188d31fc25cd293aaa
+:00ad40fde9c29ae5a86b813b90505a8aef53e0
+:00ad5077dc2e7d0677ffbf4d271f15d0760517
+:00ad60292cddd9d36b4863c471b57684a78031
+:00ad70ccf96678ae1c92f94e2df3278b3f03b7
+:00ad80df6c966ecd1e0c155c319548781b2c73
+:00ad905e80c660114261f8b70bc0363837e176
+:00ada02b71370b4a8ea358bc65036dce6f24aa
+:00adb019bf3d1786f2f72d68d98ed4fcbf13f8
+:00adc06a220fc9104aaccc889ee6a7ef1d8d35
+:00add05111e37e18ffe67eb21d6b2988083d30
+:00ade0f499f8c762f8865a6cc3fa1edabaef72
+:00adf08d76dd4bc4f972cd3da1323d6a281ea6
+:00ae000e24c741c33b5589c363b453391cf904
+:00ae10806a786d9808e9d786cdf054bcca9650
+:00ae203ef43613e02450edd269624e5a300d8d
+:00ae3033a58597dd2770f305b22e2a5fda67fa
+:00ae40830e07dbbbfee893d4e9e4b81ff42b48
+:00ae50a5d807a61c2d9e49229759f5e5375b70
+:00ae60257ace80b9134ced7128dbffc2163c44
+:00ae70dd35a3835b44770bd898c3749c5a06d2
+:00ae8064092df79dba5caa87da165d6ed8d5fd
+:00ae9079ac81903fdf0165edd6c916684322c3
+:00aea014eec16ccde6e2cae0f2fca83cc8e9c4
+:00aeb015127c1e4b36934cc3dc7a3c31e6de8f
+:00aec0463c9c80806efe7c6fb3be698745ac2b
+:00aed0325d0713193b36343941968e91c200c2
+:00aee0b6fe44443fd58eede4b4b0e3294638c2
+:00aef0df7cd02904c0d2d173abc4ba0933c1b5
+:00af0068d0fb140cee69ea8cc6374bce6a0e94
+:00af10efd8256b5e23e88dfae50fea3c09c631
+:00af2004539808c02f897fe3818621917406bb
+:00af307a37acb41f3431d9564c812d6202d83d
+:00af406c74265bde168ecdb027e9b5fbfe80e7
+:00af50d2c39b727db2c00e57fe1a31413e056c
+:00af606c83c7dabefca1f92436c4eb0b7d6487
+:00af709909258a4950a363b09713504b134137
+:00af801dd79f93f2790db0ffe3e8570114dff6
+:00af90180dca60d0f16362976d6ac337776d61
+:00afa0eccee042c4f7ece25ef6bfc672523ce3
+:00afb059419fa13c7dfe7c55d4447ff1ace452
+:00afc087faebc9e2def25b13196eb63cacfe47
+:00afd0d2cbd60a447c0bfeb335c41e0f471bae
+:00afe03c760965ece06a15839e3faa73ea30d5
+:00aff0026163932f6166e2d6465ebf9cf69e52
+:00b000d3352d5fba56ca61c90ecbfe12807e53
+:00b010a26521771ee74981bb099c21a3aea6e4
+:00b0207795f401a87653c4b78bb63b14b8a5ea
+:00b0309e5faa564f3cd87098eae7205f035050
+:00b040438573b862898eb7d6d356de314c14e8
+:00b050ace5fb94316e70fe2a2766bcdadceb90
+:00b060e7b2d98dcb036821ab5deb3f647b5a63
+:00b070d8102cfca060355869bdddcb0d17cc34
+:00b08073fbbfc0c74d8368ff37571d13fe2977
+:00b0903fb3f9d17de57f428aa6236176129ab6
+:00b0a0a6e0191e7d71c46f4341db6ab5317db8
+:00b0b0eb43d52814873afa4249035d1c378ccd
+:00b0c03857823b2ff84312dd97e0b3a321c35b
+:00b0d0092bd51cbfb6d8649e86306b36a3f035
+:00b0e0b25a89a0b4e66a3ccb6297c3127a7008
+:00b0f0bdf1e784d950f49f4236910eb27a0832
+:00b100297c036065180259f671f659bd3ef803
+:00b1106679143313e822ce6646c8b71acba3b7
+:00b12097d1cc7fb23880c6609e2677d5cc8c78
+:00b13074ac9deba287cf388ac5272519fa16c1
+:00b140a1dcb8201d41577a1374f5d11fc649ca
+:00b1501b687a40320dd5ae3500a393b905dbd6
+:00b160f789169df1ecdf957fe52dfe4ce0758f
+:00b170f1fe5ff704b53d96817d842c4f07534e
+:00b1808a46ea3396f12b54baf6fc06eb278cd9
+:00b19067434202c753f63deb0416283731dfea
+:00b1a0908b7b29e88401c5c3b69c0939c0f7a8
+:00b1b038e043a50cd24e544098f7828c989162
+:00b1c0597d9c5a3c7ab859395cf364f54addf2
+:00b1d06cd515bf83713075d399c65bdc0d48b7
+:00b1e05aeadba3d1a682f89a4d9f2d737481ca
+:00b1f0f70c73831a45ade0604c3330bcde5130
+:00b2005917260f478d32e56e73c87d1848714b
+:00b21088ba7784d04d32de151a79720a16f1c8
+:00b22086fe979f4f7de5144d347245dcce56e2
+:00b23025c2c0012d55e15d28f39e4784661910
+:00b240d671eb87721e922fd3463446469085d0
+:00b250b7c2945ea8610ddfcd67c8170c37c2ef
+:00b2607f58c855464e0aa5e9005029db135231
+:00b270b47035b1f5ba4f0159cffe40bd0a4252
+:00b280badb083cefa8232c6660b6e4a58e4918
+:00b2900107f0172adbbfd7444e59083464f0bf
+:00b2a07693804a23af90ee69a47f12630f163d
+:00b2b098c4f36985e7b0d67a958274d9dd28e6
+:00b2c0eb5a24c6d27b42009e24481fb2758a39
+:00b2d0ee57d9f2676943a69dc14fb73004a22c
+:00b2e0f2bc1c5f3fd78fd347b2e3aeca916a58
+:00b2f097e0c788348a111c53dd159b0d3741e5
+:00b300949b08291e1d9b058815c9979f2d25dc
+:00b3102ba4e25a724da75dff982d6f7b1adaed
+:00b3209f7f86a015e50ba316cce6dfe98f006c
+:00b3303bac8eaf3157f7fe0f6bcd574c213825
+:00b34080f508dc201421622e975d05dc847ec1
+:00b3509ca5d74992df8cf4f6d7db640e17ccf5
+:00b3605988a71612eb4a711bcaa157a31f4324
+:00b370c730c87c3c693408c1a950a921d410bf
+:00b38068e2eebc46bff3fa7644aed565aee62f
+:00b39084597e9c383972275c49dd8b89eb9d4c
+:00b3a0a705bb498798fedfdfa011b39be2e8d1
+:00b3b0397ef1334fdf3dfebec450be5f2a7952
+:00b3c0a12d7a16a5a2713c23f39270f2d3b17b
+:00b3d025ca51c2ac6397181800566141def104
+:00b3e07357922f06b2de126168b245cbed79da
+:00b3f0ab5390d118118333173f947d0eab0aa2
+:00b400ae8fcef8663760b01118b1ae5e893edd
+:00b41021efef131544b54f3d381638b616b228
+:00b420feac96fd4c5ea054c930eee097000430
+:00b430b1e7128d8c95aec6dd193a1cf9cae41f
+:00b4405c4fada94bd5b787d6a094d8649b34ca
+:00b4500cabefeb00ab6fd3d0de124bd475d530
+:00b4604ab8de63f851928b0d7e157b996a8b36
+:00b4703f7fa23878b04319851442e62ea6adb9
+:00b480edace19346c6841e110b0bb0232d9137
+:00b490664c1f69ae446fc2b99dae0136d67032
+:00b4a0567387f8731a4fcebd506c3e6b026e59
+:00b4b0ec25c1c4124f46bedbcc56f7deea619f
+:00b4c03430eab4dfe7f75405df76323c3c8d11
+:00b4d0bbc0b0417e4b64c223af803f7e28e9b1
+:00b4e0d1f3869e928b94652363c809e35c8133
+:00b4f0518d83f195798a690a6ce3bebebb8057
+:00b5006573a9567d6561ad3a7697195d7c4906
+:00b51085089c1839ca4325c7507c8ad0ab87ca
+:00b5200dfed3e58d0b5d22a65702ae59751711
+:00b530625853ea46252b2297ac8d64c28ad668
+:00b540862660a98283ec8cb7c2328ef39b7ade
+:00b550bc3fb99dfd661a98a406bcb66dc313bd
+:00b560c86fed0135948c1e9342ce509ed7e450
+:00b57010193e68c9ae1c26606e3e60b557d3f4
+:00b5802311c3050a185709365fd83030e266f1
+:00b5903141a4e8fc93dbf574757b72a56d75fa
+:00b5a080cf79d74f45ab2ccdb5670a13cd544e
+:00b5b0f25bcd0c58e32345cc8e7259c2f1c74d
+:00b5c0cf5c07a97c5f90b7f77ad40f9f97846e
+:00b5d02d62b298bcf28c3511434a8ad5afcdb5
+:00b5e0b841aeeffd2cf4215c9feba94690bb80
+:00b5f005b62e7737fcaa93a91b50a6cd09879b
+:00b600cefc88d17180037551c0ae24c77297b9
+:00b610f7d60b7fbfca20914acc62feb55dfdd8
+:00b620ada268e0ccbd6791afe11e09315a1047
+:00b6303d8fcab83d0908261c0738c585bacf51
+:00b6403f9e45d9173933134311208b7da56d41
+:00b6505a52be69ba938e5cfc978743ec3f4a2d
+:00b6600ce487fd4e8ab9963108861c4e44231e
+:00b670ae09a35855feac0da39581af69a3e2bf
+:00b680ee61cb0789c4d7e37f00051b6a6a83d7
+:00b6903a4461b2a2f4839111fd9d6b57b8e474
+:00b6a0a1c9605a71c42e4a676a8a066f01c8dd
+:00b6b0101372c8d8b42d184b4cf39f62d73684
+:00b6c010527ecee14c4a1ff05e1f87a94c02d3
+:00b6d0208fa1e3efe312f9eea0b4015146ddcb
+:00b6e0ed9ace5d49e1e8ee38494fa8a7b32b67
+:00b6f05db0bb1c8040c5c791058d747ac38399
+:00b70052de1d56d8fa3dc8fcded42844439f06
+:00b7102d15b0fdbb9464020d1cd642f88fd466
+:00b720f8082f7c3be3373683cbd0d080cb6e52
+:00b730afdfd3ceaa323a179fb88c4ff4a91c8c
+:00b74064a497103662af6d07dc90d43e72be97
+:00b7503e779aeb6b1878dc7c8a05eb3bf31452
+:00b76051272246be21340c4596ba7156d2753b
+:00b77048023a154fd7a5b3ad9ea07af00a60aa
+:00b78088405dc84e3f651a1ea8f182fe76b058
+:00b7900b930f0d3f513f47cfa1245c8cda973a
+:00b7a0b8285ae35d81d526f5a869ad2c038ecd
+:00b7b04c7352eb9e8fbf1f01eac100e51cb5db
+:00b7c0d9f1c347804f21a279edb24c4d68e257
+:00b7d0fa5a9e90603b6a72b0461c7c8f357920
+:00b7e044fa7add17c6b94fd8dece977bedaa96
+:00b7f0a3eb0595bab6b2f81347f1bc7a06461c
+:00b80037d07bdfb6403ade8655a9d3e33eaa8d
+:00b81083c4d9a7e93e42247ad441e07589dfe2
+:00b8204ff5ba9c847844b288eefc97b35dfe9d
+:00b830ec736192b009a74a5554befddb8542d5
+:00b840b930361cdf220ac9e19e937a6a4eb9be
+:00b8504a9d52496ce84c0d268f6fbcdd8e7171
+:00b860d1802caf9bd18f80d0c7c679a78830e9
+:00b870e3a45a420b494f59e193f5898d8a2932
+:00b880d51e8d3fff31e07df6752bbd03793455
+:00b890edb380adff9c1a27a089cdcd4667283f
+:00b8a0369555e67f09efc20f52ae1f4d886020
+:00b8b0ed7e29f2585081bcd15c68b82cea32f6
+:00b8c0f2da6cb9bdae378f2ef858ea21a89c14
+:00b8d0c1a85de31004ec99d94c4dca4f6644e7
+:00b8e09866b344cc6b72a402637d83ea03a22a
+:00b8f0bd7193b60a6822524c5b8e8d87c413a0
+:00b900e0f8d43460a352f4ac17e7c8b8211453
+:00b9106ee6c9eeee703f5f4d85ef026ca2d8a4
+:00b920c4f928c4a1bcefae9b6508b26e193aa7
+:00b9304748ed9ccd599dc60f1f932ac1abd7bb
+:00b940beed1a6386c60f735f0e5dac0475434c
+:00b9500cbe3c021823fb51f5f982c5af99a097
+:00b9605908556fedf39951ceab8c69fb3f3c9a
+:00b970df659033a906d46bfdb45a191c961834
+:00b9809ef347d7b38952218823c10c2b1b78c7
+:00b99068cb3996ddd173e1681bd9fb4c31a40f
+:00b9a0e421c3c7ff145df2d155dceda0483086
+:00b9b06fae85c0228674041d6acdd502c1b06a
+:00b9c04c844cf303853e86ff31cc8bacd0ea75
+:00b9d0e055eecff1e4fad43b7738af3a3efb8b
+:00b9e0562f43d13607cd4bd901b391e2ed45c6
+:00b9f07e9a09e8e21e3f883e133144a4339b56
+:00ba009f8e483578a1f44f95d2a6f9a4676aa5
+:00ba10834c19c472897ba57be19358c1d62d6c
+:00ba20c5b2d2cf417f52549b2f183ce94e88a8
+:00ba302d7244945b3eee653009001c36ac30e5
+:00ba40946170a895e62241f82038c19376480f
+:00ba50c1eb6a2992495cb563cfd7955829da31
+:00ba6002ce38cb51e066aded55e16bd327184d
+:00ba70793a521a498d338f6e4e4bd6f60ac2ef
+:00ba806dfd25e47ce5d7d5ef5cfbda1057a003
+:00ba904ba14a4e8205e37c8db71279941ce905
+:00baa0c4f22dcc8dd6490754b4d53b6efbbe3b
+:00bab0b3585edfc999e4f41c57003bb748ca29
+:00bac08581acb35351ee42815e2546c6c6b764
+:00bad06f65953dfe058169563bada7ae8f4019
+:00bae0576295a78fcef271df63219608a0d4f7
+:00baf0c40ea4ad8280680da6038e2c2df4faf3
+:00bb00602483c43278670441ba1adafd55bfb2
+:00bb1047961ad86532a5084c76b2e1775f0b31
+:00bb20be3d494290da99eb0a01dd0887242923
+:00bb3027340e3f22c0ac878412c27aa59e71b7
+:00bb40a3d6d7b62ea873de8ebd3abf5df6d080
+:00bb50bb2486570ecddf7bd48f18c775a8456b
+:00bb608a2b530e722fe0f28201ec25f5fd7974
+:00bb7079f9bd7b36a738c3c04d61beac5f7a67
+:00bb80735084900f64696664f32b0a90df6e74
+:00bb90dccecbdefb2f9878cc9838227789d679
+:00bba05272bfcb90101f01485450ecdec4a9bf
+:00bbb0751dc33a55b5afca7b175e73cb15148b
+:00bbc09e1a06b1f1966ac6ccffe81a010a95c0
+:00bbd0b63a779e191a0524974434a62e0648c0
+:00bbe071a36c279e29d219511b3c855925d016
+:00bbf09e978cbf4fd7521ef26c9a20a4df92b6
+:00bc003fce0a0dcdbb09898eae3dc37c21ad38
+:00bc10b81934c14a689ef2d3d0cf5b2ca8a8ff
+:00bc200dd79e3e18e0952bc1e48e8c9a8becff
+:00bc30f3e77fbc3b1dee39f3ac51e21fb70aad
+:00bc407d625ce24a5ed3978147c3b51dd63979
+:00bc50e734e8a412e0c2a2d5e449798d2ea326
+:00bc602d02db44fa9a59044e998c686a9f8bbd
+:00bc70498792034207dcf4057aa6390b5cf4bb
+:00bc800b8f3d094e2796d923e9e8b740dae6d5
+:00bc90bbdca8ab7973f52cdd3aea4c2662e975
+:00bca04ebd5be39b813d38c85b14cb875582e4
+:00bcb03e588e59aa8d10f25a99e99bc9b9f04c
+:00bcc00bc1fc1de4a0476880f9672e501d3384
+:00bcd056128b000f5c719e210189d205d65b6d
+:00bce066f6de3008dbf58915002628cf8ec328
+:00bcf039d23666cbc5ad46c2b69ef26f7ad2ef
+:00bd0021d2d33b66c06a936ee9dc06612b698a
+:00bd106142d8c598fe4b5b0cc8c7511e8dab2d
+:00bd2051b6bc77e13e5ac96caae72d55834c13
+:00bd30a1a943b4170a15c6736600680a6f87fe
+:00bd40f3d80bd6b28822344e4fcf68ab36e297
+:00bd50189d01922d094b8c5ee5609fb617bcd2
+:00bd60df9cab0e2a404b7bb9b1c28beaa1ce65
+:00bd70fe912b7db3a0d178ee219cc766af4b54
+:00bd80cd616762e0870c4f6f1dfe0385efe245
+:00bd90985bf91cdcc8f8759f6ecb24471d35ca
+:00bda02a9d012e10fb3f120b4a8b1ddc00efb6
+:00bdb0123675992ba970d2b552cd66d1d307d9
+:00bdc05ce43afafe56f152f4efe4a27c551bfd
+:00bdd0d4ad152243558d8ee0ae406b8d409d69
+:00bde04b5f508e66030664e9d6e701e0e7e556
+:00bdf0d732d4af23bcbf31eda3bd482287a488
+:00be00ef6fd21343e52a1b5fa85bb7a375f85c
+:00be105b369f6b7fe6467c4701a0162b74ebc0
+:00be20bb50664e1b33c15febcc7b0f5bbb0af6
+:00be30f1f3e837a26b9441f44522a7ffa7e819
+:00be40946a975541717516254fb54a9955cf59
+:00be500bdfc20bad698953b34f78a1b8efa844
+:00be607965f74f3ef5abbfe49383489465dae8
+:00be70cf5eee23ab8fd010e3d6ddd147323a24
+:00be80c7a18b7b2ec8951c98207f88ad4e82ba
+:00be9022e3372d2d990425452af8a4aecbce02
+:00bea0a626cd098f7611cbf0e4c70a86f0c318
+:00beb03269950c5a0f2709f587e689f3d997bd
+:00bec0da5e518022f0ea790a0fde570b24c19d
+:00bed09a252e2f16b6ff4b6681127d2764ca16
+:00bee035cee9e364d010d4156a2be0bef8edd5
+:00bef01b7166e622b951317d4f4adb2225dd87
+:00bf006901c19de046c5d82fc1e778992a0e0b
+:00bf10f243e26739e18c7fcd74de0dfa6bd057
+:00bf20a0cf90c7254f5a74d124cf3f69e6b763
+:00bf30ab56c8f14e2d8a1a8232021b2d319b2b
+:00bf408a479026b91a0f1149fa4fed3fed0556
+:00bf5009bc8d4b7cc265298b5c91c8bf3b6de1
+:00bf6092cf921c396bdeceedcadf43df4dbc97
+:00bf7069c03ea3be93a0dbe777858f0cdfa5eb
+:00bf80764c0b7f54552cb4205a9a2154c4f8da
+:00bf90c1977fb71a1bce1ae620f399f5168e6a
+:00bfa063ee445a210d8a2847e9d2b9c8184a93
+:00bfb08eac5506ef5e9b97dfb55e5fe747cdb7
+:00bfc0c3e6794e887922b54942946414d20acd
+:00bfd0282f312745cf2dc865ed91b0a6724a4e
+:00bfe0a23804e1e0142d989778230a52a68ad3
+:00bff0f4c76a3c85b771d51dc1d0010b8ec9f9
+:00c000378c4a0ecf65eca17ab6222ab8c73b25
+:00c01001c4896157b4f20104fc0b5a97880f4b
+:00c0202da5dc2f8d82a8bdebf46ccc5fc8dc4d
+:00c030724412e5955b2e423bae0b8f7d364155
+:00c040fd608fe58648bb46d2cd46de55ae4e4f
+:00c0503c0329b8154cb6584de8926729097843
+:00c0609c27a9abe67b2f3ef555b8b2e0c8daec
+:00c07001331525fa026f0687126ba5105a8938
+:00c080889d114bf7d04f95477483ff5b7a87fb
+:00c090fb1e19e3ae534b7077c310c47d8eab88
+:00c0a0b6f3b13b0f38fcc9d234b41b02fd47c5
+:00c0b0fc9ab355132b0ea79507e44acbe41be5
+:00c0c04e911d6c72f487ef94deb2e6c741448d
+:00c0d09ee926cb5acdeba48941b1c106ba7202
+:00c0e059680beb8aead9a045ec9919d9dd119e
+:00c0f076ab2b2aa267443ec1db3e7f65e414cc
+:00c100b1910b9bd13a0d47652b525cc16947eb
+:00c110a24effef8f48709a9c05c501b2ff244b
+:00c1207a9fcfd66de422e4a1ed14d7e6fccec9
+:00c130e76b6e78b2ecf495aea36a82b2c0cafd
+:00c1407457029f70562311b31d0e48b6805df8
+:00c150bfbff88fe5592f52619e76beb09a4376
+:00c1609eb334188bb344d680f432d5edd53f67
+:00c170762889cd2d3ab4236fa6cc3c09106d27
+:00c18068d9b9d0b5288c7c0d5baea5b1a7ae54
+:00c19049e8384d2ab332d4ced70aa17a602d29
+:00c1a08e8258956689a856200c1585347bc6b9
+:00c1b0affde2db62a207af7b9364089afefffe
+:00c1c0ae604e6bdbc1430186aaaeca20c34db6
+:00c1d0040b27a4eef39f20e022be72cc0a7d21
+:00c1e0ee28e582687900a261335bd7d6ec101e
+:00c1f0c59b757c35e54c97aeb3de440153732e
+:00c200c379c33bb2f925522dc7f76c46c5a31a
+:00c2101d8cc5aca2324edb0ebbe2aa079d47f6
+:00c220977f23e2fe6406979be0ea8f4d63929d
+:00c230152c4c04fa6714d159387371ee4d782d
+:00c2404d7a0a3c19a54e615d58f15d391b69fd
+:00c250c9f583516ffe9fc17024ded450350e74
+:00c260e294695051cc2aa4cb4527616f7fddeb
+:00c27073f671361abd91137bfb355877cccac6
+:00c2804543969f8f0367711cebbae6461ac500
+:00c2908363ca206364cbb17598da37b6f06155
+:00c2a0ecd977cb064e088038d24997659ef03b
+:00c2b04fbca76a514493e75ccc02644ec05394
+:00c2c06c69c835dc0cbb3333ef34b690c71a0b
+:00c2d0b81f1ec773af664c852ac5dbb2757bac
+:00c2e00e4023624b0f9290eb676cd6234cc296
+:00c2f003d40640950723f00a276fb912f44aa3
+:00c300dd23820bfe73c143f9ae3abbf82e1995
+:00c310232489776d6174ebd32e09867684e791
+:00c320e3349f55257b90a6954d1bd527224fd6
+:00c330ee35b1c947ce06931e7b6a8ea3d4f36f
+:00c340a6145453b12a77c44235951cbdb98c88
+:00c35008fd6259b22e382c99c2c2bf9148026e
+:00c360a548662f2e18b1011b59bc2f1a295180
+:00c370e9b8984cfbf3dbd90ba06708545e73e4
+:00c380236c87ab50a0f05939ff7e23f9275149
+:00c3906218f61b2d83cac802f12a89a491aa78
+:00c3a047aa8be9608949569b42c5a50db5f11e
+:00c3b0d6b0bb3a25a31e8e015582ff35436753
+:00c3c07f0e6bc0dc1230b137aff14bc03ff96a
+:00c3d048c32b070ac4dfea5332c861559c7aed
+:00c3e0c30001b56d7b864bedc1f40cb1e69330
+:00c3f026528245952f0c49642b3458f58b3f43
+:00c4008a673c79489b5c3f46967f9a9d572fb2
+:00c4103fcdfa558227aeecc8c14fe3c80ddcde
+:00c420721eaefb31b1e76e8c03e61d1a1b6bcf
+:00c4308e74911b8b5ecde696ed02dcee0549f4
+:00c4408138379b20403054ed51d0794f3996f6
+:00c4503c4baaa729cf30384b24e2b83dbb50bd
+:00c4608b3f16311b4f54e43e086bf938237474
+:00c4702967def233cb7972503df0f9d5052e16
+:00c480ab3e3114cd3bb6e0ca0434ce015faba0
+:00c49029bb2f97a43990a1b22a87c4eae1d168
+:00c4a0a3cc143db6843b4bf4e1998a7cc1b137
+:00c4b0e7e460bd2fceb14fc9bc68b09e72e272
+:00c4c0ce796163b0d9c879a90be883eafa2c12
+:00c4d0d5b0d2e4cf047a7064be63cbe967a791
+:00c4e0f4209e147798e9ec2363843a87170af6
+:00c4f08fc87d03afec24665286f16f2a5aa75f
+:00c5002652e73ea8892c64d360a59479fec3dd
+:00c510a29dc050c4fbbfe470e08256c3cdbe22
+:00c52001906722f9e3872ff7785e5d6df89595
+:00c530868d3007e251bd720e22a62e33284d6d
+:00c54083a4e9b081b79c0e52e6ad55a6843a72
+:00c550a47aacd836fc37542b73bf449e706b37
+:00c5606e4aa79fd69ef57037eabf093d491ebd
+:00c570411c14dc5ded592d1582cafe1462a342
+:00c58026b113c7cf56cbfed2ac1530490b8d50
+:00c59030d62b7ff9d76563a34b0e62710abb2b
+:00c5a067eabe9c438fb5340db80f9ad91f0455
+:00c5b0b26aa20c12b63113785409feadce3838
+:00c5c04e0c9b4168b7d21ed8c43da84bb7a82e
+:00c5d05eb146a29d7f102909b72d068058f1b2
+:00c5e0a93f214e8ee952af2aef0675d063c436
+:00c5f0af1664e8d60cb8bdadd32327185b8195
+:00c6004297188ced3b61229fbf349812d47511
+:00c61041d5759df43a9a2869d92f9b5980119f
+:00c620ef654c39facb1bbe42024144b1abebbe
+:00c63096f0116fb62dd2baf05bc0ff63f66962
+:00c640637f318ac16693e34c05544414e5792d
+:00c650f5ba0344192dce5c266b5e8520916a57
+:00c660e32b5fe505964c22d3fbd959fda66d99
+:00c67051123ae24b592a69904deb0cf2c5d0ae
+:00c68078e3ab36a611bac913711c300c49ecf1
+:00c690c4db77acd5f0d4a2816000eb8c65ceae
+:00c6a03efc20c1d0b3cc824935e70710d79b64
+:00c6b0bc6b3420a856f79484ceee19ff41d0fb
+:00c6c06d4bac1718fd8898e1714d7bcfe3bebe
+:00c6d0ec9e4ba64900810191810f18b8246879
+:00c6e0fa025e58873ceab9af20f1f581904a82
+:00c6f0ce89f9292e85285f11b0db3aa093b4c0
+:00c700d269729175f7e7801149248a6d5a873d
+:00c710fc4877e931c875793ab63d69b6436720
+:00c720a0297a9545d44fbb9a8e19d6437f9560
+:00c730895b6ff77e10f1fc7c184039c0eac465
+:00c74082dd713428e3ffcf67cd9b32866043fc
+:00c7501a5088a01b84663b6c6a35bd15925b65
+:00c7602c34851060e83f80983530852e98bf1e
+:00c770cefe095913235cef527cc14f97d0c8e1
+:00c780bf692258e2d7df154a913b972e87fe5d
+:00c790faf0757a4cf0301b28f94d4e6e1821ae
+:00c7a023b4c9aebf1112bfc72f688d682cc992
+:00c7b0b578fc586c8b501fe31aeb9f1f723cf2
+:00c7c03252ef7049331b65c60b06d713bae434
+:00c7d02248c8d12f36fc9fe7d2c5b226609754
+:00c7e0c946b6af8330cbc0827bfe055506ab72
+:00c7f04d3da9f3067f2c8ad851d49a9e5a1b27
+:00c80014fabb2c7b6c6b49957a1fb954814f33
+:00c8104cfd0de02895fda4b03d7faeafb8722e
+:00c8202d052ad601317cf47139144766c75df0
+:00c830f6d0a11eb7b79f14d48ad04a02434165
+:00c840d17d5f3b5afaac46cd3ed18f5df62e68
+:00c8507c57c34c64f55bf83528a8e0b8b63bea
+:00c86040a3a9d1a61706c2ed34543743594b8e
+:00c870afba4287664fb11c659c8af79db93885
+:00c880987bf5b61718ac35cdc6493e5c2321e2
+:00c890dedbe67a679ccc59ffb3f89984043648
+:00c8a0a8dc1bfe68211686801f3f41fea57628
+:00c8b0e3141547f2d878b97b26e57cc73b4e73
+:00c8c05330b1495119258ca5aa1d421b3c993a
+:00c8d061421f0d90e50f9842ab7f51dbfaf892
+:00c8e0d6bf2f89688885f24555e5c9ae7ad5fa
+:00c8f03cfabed62f42e8d727a2d968f0c1a457
+:00c9006aed069dd23a539bb2701c4b235701c2
+:00c910bd584ef5e711fc3f50f5a09eca16daef
+:00c920264a58f8d76c538a18982c3b17144941
+:00c930787a8303a714f1c875b92442b80fecf9
+:00c940b1046d2345329fc9ea59c495d529a200
+:00c950a2147b71d990d27a4931e1ea33ff739c
+:00c960b7506025a002511e41772145f261185e
+:00c970264f12615834abe6049b6c77ef17afbe
+:00c9809e019d70e78c5d2c83c2dc2af1b3373a
+:00c9909aa2e4ac3e4770750e2c99d014dd1a08
+:00c9a08a8f7b650ef323771ea6c8063bdc057a
+:00c9b07fbda040b2fc9f92f9779116bdc7cd0d
+:00c9c00e38a7f5d613725d44e4700f5f881a88
+:00c9d0378e5f9811ba2db9ef86fd6a8689a152
+:00c9e0afb53db3eb431a1961c4f2772b994765
+:00c9f08ac68b6c19357965b62172e42a4255a0
+:00ca000aafa71abc268789e2d2c8cb3bfb9537
+:00ca1024b701fd2f3f291ae9617c003638bc27
+:00ca200080a0a1ce0f36b84b55ee61fa251bdc
+:00ca301b7e579ccfec356dc2cb6987fd1509f7
+:00ca40b79adeac9341456d3ef77f86e023dae2
+:00ca5061700ae3746b2d122a10fd3942327505
+:00ca60ed593f589d13f4e5fdd2ccc2c47fbccb
+:00ca70e989a45d56cca555090442fdf73b9098
+:00ca8092743b0af418231294aa23f11396e3b9
+:00ca90007b35f0a71d8de7a20ba49c19f9901e
+:00caa0958c8a6f7f1747e8a466c519f8315d06
+:00cab03eca6ea0ef353bc9682b15475cdcb5a7
+:00cac030da2081a78a4345abb0072e7ff68083
+:00cad05301232a8c9f1894062b77f362a72ee8
+:00cae05b6e2714fcbdb36e75c5715e6125d306
+:00caf09dc475648a2676ebc212d0439837635a
+:00cb0047a21ab73edd24c27208e8e03b6749b7
+:00cb1021dadf9784fbc6316c320851cdbde168
+:00cb20d6837c5a452a6fb11b60921427d53a94
+:00cb309fc3a0fb6fe6689add68ec3ad44d609e
+:00cb400973d8fc3c6a85e13e2ae3b7db81f81d
+:00cb50a538d5de527371465157ba3d130f26dc
+:00cb60484f5a8f38b83b55f6f196520fc1c2b0
+:00cb709bf7a801b4d984bbe19e9b326463d27b
+:00cb80845cfe04506970c53e4e5e19412df4eb
+:00cb90cfea677916455efa717090dd808256cd
+:00cba0f3ad3aa42376abeb8d81d7a29056a29d
+:00cbb07a42c867b6e9cd9ccaad78645f532846
+:00cbc0a637a663359c68954b9cd677d1ba50e6
+:00cbd0fe140526862e07c07ffdf7d5f26b8fb9
+:00cbe0b20a9ccae7b982fdc1f569b3afd2272f
+:00cbf043551cd1a24ffb846cdf1ec9fd8d7e95
+:00cc008740b8368541bc9d2ff0e2b3ed25e8cb
+:00cc10fef79305de16a6137ef6de56657217cf
+:00cc20073f3bdba4c43569abf0734be884675d
+:00cc3031c9a9dc8dc61d57568b753b7218972e
+:00cc40a55916bd81a0590e7288428432fa2f77
+:00cc50d9ac348e723d1699f4e55f11b322880e
+:00cc60195984532249b9f1f7da24361bb047ca
+:00cc709892c260bfe312565e87ca1f0b946182
+:00cc80c5550e7b8bab82cdb8e18560170c51eb
+:00cc907ef1bd060e30a9faa9f78cebec733b4c
+:00cca067bba0e7f6fdd0b2da78fe97c4c9613f
+:00ccb06818537fff0143bf14054d73168ae83f
+:00ccc0a1c4a370ea8bb54373024275df277b2b
+:00ccd0bed89e255e79b30e78af3981c2737674
+:00cce0d5f11901fef8551fbe0761f278390029
+:00ccf0c492835bda091bc9f1c403ec81c63802
+:00cd0032740d4bf40713e8f14ad31127ed4caf
+:00cd103f14bd1b8d9553643502591bbb793c4c
+:00cd206a97bc6b741ffde0b40a53efe76f3357
+:00cd300b48b7f9eae7d3a3aa4965353caed486
+:00cd4090d150bd950b3ee1d7fa3aec37d5a678
+:00cd505a7a03824eef1c20b7f7a3dc02f5044a
+:00cd6076b349f92fc8c47b35df54117a66e839
+:00cd70f17e9e3456a915883d70113349457750
+:00cd80bd2cb721ff6a9d7adfbfb5e1347a7927
+:00cd9086be33f7f1bd6cc45773a0f341f1e2be
+:00cda0fce6b6d6f3f1c72cc774ab8b9875ac8b
+:00cdb0e062e3856bd83d75fc23e17c4137d21f
+:00cdc0d008cbb6976a330245b295313ca76b24
+:00cdd07865b6de257d09d42d70d29ac4d09be5
+:00cde0409e1b0626addfa6bb42bfff353cbb37
+:00cdf09ea0f18c7ac2c87d5dbbc6e24a8ceb98
+:00ce0054766efae52fe4d7558d4839272dc56a
+:00ce1032ab82e5ef70e94223fa399af59d739e
+:00ce20aea8e62cb6036b6454bbf0b5714f837c
+:00ce3030fcb4ba67528319f72c5816db107628
+:00ce4076f1dffbb0d84a6e75f7fdad32ad91b8
+:00ce505fbb394fc49266de7304c1bff67b70a9
+:00ce60b7e1c260cb235b1d1eaf7ecf7affe7a0
+:00ce70771015c563ec2b3d7f428a7f4b5e9835
+:00ce80a9d5dbf585877657079db5ccf4e8f938
+:00ce90514f2fac034ec21e4e36b53515ed0d21
+:00cea06b4550671ea47cc275508e5533890ee5
+:00ceb0dc472179700715f80dade6ed910d1d13
+:00cec02a8fa2c6f85ab95c9528e8b5f8f4beba
+:00ced02830f365185dd2a232279472ba51865a
+:00cee03c74e01e4036a9d7705169f7d4cb7697
+:00cef04c3cab505ad211ef88a0edf93b155e64
+:00cf0080c01e8a43e57cbdd22012b75d2e61a4
+:00cf109db6bf7071c2db57ad8bc0f26f2f40bc
+:00cf20d7a5ab7bd8f025aabf16137e2cda9af5
+:00cf30810290c11a0d7c95ed8a6b164f8e2391
+:00cf406f72b7f650b0a196acf5bf0798145048
+:00cf5019710278530718cb3ef25113fc05b52e
+:00cf605084c72a940ff31daf2fa2f1deade4b0
+:00cf7031aee7c2a66b99d57dc186517844a1d6
+:00cf80d70a3a2be6b927040dba9f09b6290ff7
+:00cf9093fe5f581029d0876cb2a4c77406f560
+:00cfa07bd0de2b2173849c883ad57e52ac0e8d
+:00cfb009fde77ec757d937bd795569fdee367c
+:00cfc081d3bd34d901068c460d3a1fb3f246b6
+:00cfd01f7abd9824e17ef9eeeca6ab79cda25e
+:00cfe09a5ca1d2e71c995e5e7790bd4455832b
+:00cff0fa093678bb0bb550788977bdef31ac1e
+:00d000ec15f5577da3513c889feab0a1579c15
+:00d010da79e87342d4d5bcf1a125a7c6e1721d
+:00d0208a8ca454051484bda3fd9e19eb871919
+:00d030a9feab9deca4489700b95ff3b1d8217d
+:00d04039f420612fdaca60694b7d19e16163cb
+:00d050bb28ed0536ca53ae7f672e12f91065f2
+:00d0603c958d52b2475f54af1e33f38315990b
+:00d070f8451cac0d45888d87729b74f2123aed
+:00d08043ea75a65a4c61069bc6d67c2305c702
+:00d090290757b62071e56b502f9df67b42f84b
+:00d0a01fef969e302e9691dbbd89bbfaefdf1e
+:00d0b080f6aca1aac9c8e0293b70f3f395ea26
+:00d0c0cc9a77ee6642b0b5cb23e31eefe477a1
+:00d0d04c1f5ff99ca5e060be9923f7249cc1d7
+:00d0e0272fd3004aee5d1565b474656cf93f62
+:00d0f07624df929239024ab716f19ccbad2280
+:00d1009592e0d9f53aad8da19f75afa10fdfe8
+:00d1100d5062425a8cfc34865deabe8919b7fa
+:00d1206cbbefc346ad2c6287b6200ff60ea754
+:00d130b820e8766c9690b9a2bf06f683ff12d2
+:00d140ed3a06a7fa072abfdffe70e909e92e95
+:00d150158b802dcffc125ba21ac48cf22dd21a
+:00d160be2bea5379d11bf8ce23156dc5050e54
+:00d1709595000ba487cc351eadee0e00689a56
+:00d180de0d0df5341d50c7dadcca04a5b90a85
+:00d19047d0c2b185644ce97d656e93bff7ddca
+:00d1a05918976ab17fdc5b2d55368520a1a7ff
+:00d1b049662e0933bd2cc48198408030edafe9
+:00d1c078a55cf6c090b5e8c8f7cf90ac96d711
+:00d1d0522ad82f981a8b9f1140bf5e19a8f57a
+:00d1e05c0520d0f8aa1e7f03bbd3d81ce6f787
+:00d1f076e28271b1380da0f12bc7dfbd48caa5
+:00d200483d199a143d7e55c2591098d37f5060
+:00d21019ff83f183485156e3ddc4dd68b9c365
+:00d2203bcc8c6b37721206ab20abb9585c410b
+:00d230683a6d08272219880b215a26310f4839
+:00d2400f489a65f816bfea49ee062f7c30d47e
+:00d2508d5a908f14c625f4db04d4a19fcdd668
+:00d260b981a3add460d4480c5388e9489607a6
+:00d2708fe8af7a379fda10ad805e9bf22a1eae
+:00d28018ea09b2274ad2d05831c72b1a2aa61d
+:00d2907cde58d464939bea094fc55cbfe3842d
+:00d2a05d025fabe8a4e86b61476150641d13d0
+:00d2b099a9243a671a4869fcd231212c2322a5
+:00d2c0cafa3cac05b034a2d2e6b6c7b2e7d76c
+:00d2d006d38a52eff8eb17cf007a0c2323d90e
+:00d2e0fcad307dcea4e908f6e80a9ec41afc84
+:00d2f03e412b9796ed3fc6b3862e3eb8f995d0
+:00d300a6de164ba03f293fde60ac65b693c039
+:00d310b05a9dfa0ceedc393655ab14daf21cbc
+:00d320fe3bc1513a396b20d87724d75facddaf
+:00d330062a9fca944e9d01a85eead63c24882f
+:00d34070e52e7201183e9ccd7624ed43ebbe14
+:00d350112c7c21d27bbc5422598f2f43b0f3bc
+:00d360550fe9beee0dd67898ec914c251ba8ad
+:00d37082e2f504605f6b2543b04f25020d8627
+:00d38020c2db0bc6686360248c369e1bd9eca4
+:00d3900b271432eb0dfb767d16aec8256af875
+:00d3a096c816c75b88ecff32756659fe7e8589
+:00d3b0e3a9f758b8107bdad22de5af2e393c74
+:00d3c085f98be4f991135f49ad6984b28b0c58
+:00d3d003b0fc936d862ac6ab010285705f545b
+:00d3e0dda5f13e19e3c3db4acc68f367da48f2
+:00d3f0cf8f3f0eff141875ba3d77b3d151d3c1
+:00d400815c9f4f91789c42f87067f14ed319bc
+:00d41021bc0dcf101f6abf38e3d3876819aa7b
+:00d4202405175752fc21aee42cce5f5cbd6296
+:00d430fda850625da1422d45386aacc9c3ce80
+:00d4400af8522242b67b038b927d79d085b61a
+:00d450ff00ab1edc56d99d49f7e7f45d496aad
+:00d460d7588b63580c773b011c561a7704047d
+:00d4701b767265674df34fc5f51a5f1483e1e0
+:00d480a9bb4d7a98f1a593563d87978f764d52
+:00d490599a6a8c6f526bf2b4f62c49ec6f69c4
+:00d4a0f85999b7eab05f73cc16b7b1f5f1edcf
+:00d4b0087e03348e4bd8456975cfaf180e1b9d
+:00d4c087644d9bd6cd167541ca5d76c05c4352
+:00d4d02427dfb477108c8e5d96652798d43c02
+:00d4e014993b8373577b3debf199d3343b170e
+:00d4f09a007407006c2812f7819561198551c6
+:00d500cb359508a05689b10df2434007596afc
+:00d510fc41314b3480a4923b4e14d24eb630f2
+:00d5209840d1942c3e315aea2966d0a2dc457c
+:00d530d7d021cb6270d8c33af33705433b0ec1
+:00d540c7a4b6cc060c44c971702398badd2c74
+:00d55084549e996bf98b07b0c0431f8dce7740
+:00d5606ecf520460029ffb00818eaf2da6603e
+:00d57077e9bdc259acf1985a22d21ed7022cd1
+:00d580caa122b9f07dfb7e3509fc670639c915
+:00d590d35d7262848deca04b56884861de3cb1
+:00d5a05ff6dc74192f84f707977990f4072b8a
+:00d5b082939a2efd85275af488b5f1f6706370
+:00d5c0990a06b5ad98ce860138335841fc0b50
+:00d5d0b776d96ea0fff118b75027db05f1ee51
+:00d5e069fe40768dbada84c79b064fa6f3aa9f
+:00d5f013f778a166e01d93e058b303b5bd1fb0
+:00d60063b80d1e6c3128f84077d336995d0dbc
+:00d61082227649d8bb4d2be370d8e1ea16be98
+:00d62027d8801888061c0672cb621f46f2490d
+:00d630f5cf9ba7d06dc1cdd66d54a2d637ebeb
+:00d640cb16c6a58d798d68fd70f2add67f089b
+:00d650803b4c2babc9c40e0bc95a3d06459c20
+:00d6606d652043105cc00ec9e5023c08d50305
+:00d670e5c2bf6199262e2e352e94a492fd4151
+:00d6808e7a5fa1ef43c33531d4d4367a647289
+:00d690fbcbd7776893582992ed3167c0ce3e0e
+:00d6a007858fa6e243e95d9f2f2c492256b212
+:00d6b01c973dfaa8fdaae9d6d2029733335fc6
+:00d6c038b958336ea557ede39861048e2e1005
+:00d6d06e9d6ca6a91a0052984e54dce90c92ba
+:00d6e0baa10c6324c5411f66ed566a607c890f
+:00d6f04e743d3db593bca77ca1ff8da78ece2f
+:00d700a9a08aafdd2bfb15d86966c38e256522
+:00d71082891f790f7185b8173ab78f142335ff
+:00d7209d0b9cbdd7290e9202e51ad77c156eea
+:00d7306fbe212070a17c52df1cd8d3e5092e9f
+:00d740287d69efb3e94729d1c4f5a3a3e611c1
+:00d750ddf314c08057818342d2ac304af574a2
+:00d760d760b0dbc027e7542a104fdd271da5a2
+:00d770238fa94c7acf70cb8f9924b32a3b6d0d
+:00d780026d89f9bb8c6f76f4b75f15b02e3ce0
+:00d790fd27797b26b61d8b5d56a83f8b3a86b5
+:00d7a0f6dfdf6b8ffac8283f8c1c3254a3fd2c
+:00d7b09e535cf7ecec7831c91a59130fba8089
+:00d7c000082b55e2a0c764e4d0e8c3f26b4463
+:00d7d0641053c8964626b57e23c14bf4ded992
+:00d7e06960495c89670b27e07ff0a7bf7aba67
+:00d7f0a4833a8b098371947ba9345ccfa02b06
+:00d80018879e3e958df9abdd0f37ccd982aef9
+:00d8102f7948019fad6129225b5b01c1485d1d
+:00d8204ba4d83a65e46cf85603e04461bde138
+:00d8305e7e86662cafbb94bc89718300aae21a
+:00d8404d9745e30cc2147748c5ef78f3ceb245
+:00d8509bace93321baf1518f24a777e09f4004
+:00d8606ca8cafb492410342b04ddf98e489e08
+:00d87022826aabe1eb0760b4bc2b774c83016c
+:00d88087d004996ccad90c6225ff277e6d75bd
+:00d890f5b228703161897e39f513866cb1a2f3
+:00d8a087a90ade535e40d2030d59bea350ad7a
+:00d8b0db50f69b751bf082b6d695b06557d2a7
+:00d8c0e8e4487101d24d4451d8ca48c6d277e1
+:00d8d01f684e8a3912752ef16f54dd72c51270
+:00d8e09d6ea6aea8441dda18653bc54db69b70
+:00d8f0402602b7765514f2df40c555563a00a5
+:00d90084396d91f0e3921ac85449d127f5c156
+:00d9100c6f7277c67df49eae6c28738e888484
+:00d920ca5a51d0d80fa0c2ba0f73c85c7923db
+:00d930fe7362eaf861e24bbe5a7924a5999190
+:00d94061325517beefbad139fcc9a0af8f6a73
+:00d950659db3a1c979d053adf2fcbcedf3ed6a
+:00d960f10fbc21efb3aa1ee499fca09b98bd86
+:00d970b4ab56143c1dbcf585ed05f89b47383d
+:00d980271a05e8de5ccbb682df80add798ed0b
+:00d990fa313f4824f4cdc16b1b7dc1906a7e20
+:00d9a036e9024a0a7d6cdfcf542c20ef20f734
+:00d9b0bc7c327be96766d023588cb45846d37a
+:00d9c09a4efc2a84495c3fae3a037e313a1559
+:00d9d0a29e4216da4975df82c362dc3ba913c7
+:00d9e09fef735a7dfb548affece88e2ae1b1a0
+:00d9f0750637bf33f99571e7f8083587618ae6
+:00da004644ecd58acffad0d1d73a73de10a091
+:00da101a9747dff7fbd011371effd2df66c702
+:00da2021108ebe306b53cd97f30d2620c94a8c
+:00da301e3697533cf250e475b55cabe9aac3f9
+:00da40f02151f0dfcd6272bf548e0c77b443ef
+:00da507b1e4d93492820fdd36af99f0e13d457
+:00da60821a818db5ba6feb7cb7efb9b3a45292
+:00da70c24f1d76888aef9c88d2256b66018075
+:00da80485d847ba5731f0817d6a4c0ef790a06
+:00da909b84057aa3e38a9157b8e3e7c31e1d29
+:00daa029956fa02e5dfaba98a35d29949f52d5
+:00dab07084c027b8441100696228f4433b0f07
+:00dac0d0d7338ddf222e593ed5e30dde405e9a
+:00dad059a9d00b9962d914f3b636eb9e344c37
+:00dae0e311a7b8ea33bc7c065d32599256ba90
+:00daf090d28062b8eea38c94e780b21da18ca9
+:00db00532a3aa2d6637845898dc1d360130611
+:00db106c246b6adbcdb596df3c8cf19b28a266
+:00db20916e338bcfdb7e789959e1cdc8b1c9ba
+:00db30fa9b75b924246b17c0653a92bc2cfa86
+:00db40c20c58b11073068342f641f0bcd21412
+:00db502cf11afad0e5feec3a710512b9f28b2e
+:00db60762a51939fa997de58ed6b9e3cbc9221
+:00db702e0d6ce81f6a71a4580ee11d1dc684d0
+:00db803ebfef5d3cd6e144214a858fbc513975
+:00db90265ee0b3d9d544a474b4ca6fe0486c63
+:00dba0455038c8f96650a0728ef2621ebb5436
+:00dbb0ee4a7674efad40eb4ca55c2a2a098db6
+:00dbc04554fb00c2e0208eb90a559942cf0d96
+:00dbd01fd4b1695ddc0f09758415be2a80ca8b
+:00dbe0b08793f1b845805648fa1af772a64929
+:00dbf05ef87aebc630bd7346fe11be96b51d08
+:00dc00bacfb0eaec1dfe5b6f6c470dece5f370
+:00dc1094853d5aacbd0a505a1a6c7260a303ac
+:00dc20b48f9d02185a87feb6cdb6fb72ac3c7e
+:00dc30469108c445c0e128aaf5bcfe410c77d7
+:00dc403191956595e1d55b75bb22afaf2bd58a
+:00dc502b45e0724ecabcbbcd90e793d08c88f8
+:00dc60b64684d61f9913cac9cbf048a4e21bd6
+:00dc7005c1f93c71d2da4bdeae664a6b30f869
+:00dc804934c12f413cf04c53ad2383fa5d2f8f
+:00dc904be3b96528c35f099fa58bd85ce2f5c5
+:00dca0985b7025e2608df02a8a4e92d24d9371
+:00dcb0ca27a509966a049d68ac7103621900ff
+:00dcc0e54e5f7aebb40ec0748018ee1ed064b9
+:00dcd0608bb7ba9265a045e9841afe7d8ccf63
+:00dce0c07020f85f4ed4f8f4b1e3960a1a641d
+:00dcf019055809bb5e3ce8426a474f2530b2f6
+:00dd007436d6eef133610d1c789f0b3df77b05
+:00dd10cfd7cd47c2a574476f7924ae6e754896
+:00dd201ddadd2272cffc8aaa7aa6c832e2c128
+:00dd3016b5a48fc46f46381208558c06b08544
+:00dd4094aaeed6dfbb43fa027b3e241d3f638c
+:00dd50896bea561231a3c02f6a1965c427b0df
+:00dd60fdbed642f23673594479e316e0921e49
+:00dd70f770a00121816800dc61a4aa73accca3
+:00dd80cb2c60abf60ed11bcb99cb8adf429ee7
+:00dd909bf5420f67a60e63c007142ca37cac82
+:00dda0643bc3815cd1eb78e59188b342a669cb
+:00ddb0dcbe97efd9515e1bf74056ca0ae8f7f9
+:00ddc0b8f7c25a77f159c7dd7fc4ef7a9aabe3
+:00ddd011874849933874ff45c3717a7c1af88e
+:00dde0c313c3d2b658ce55d9dccd44aadcb800
+:00ddf03cb189977dab7254ead77a6154c53e27
+:00de00703c7e1ee525bfb2996f961385773120
+:00de10e65a6de982e140b0b8fe561a4b75f36f
+:00de20513027bfd98985dd68b9cf270dfa5678
+:00de305f74de2e28b49f0f4309513054467a56
+:00de403788935de6396880ec85b3aae0b5c1fe
+:00de50957c2043bbc54ac6802e085bc73d81db
+:00de60821684ae0ada854759906b32287a3511
+:00de703b69a6bcd4a0c5be2868977bd4a38b12
+:00de8077a91983a49176448f45140d9ae1cc03
+:00de90c54c330770c527bc314bbc15a554eaad
+:00dea0b17a047f4de52485110969f24f435bb5
+:00deb009f222bff9384337b182da3c3d593cc9
+:00dec0ddd1a761ef4500b584aa99191a867c04
+:00ded0938599f3cba9b8961090f53b8eb1dcd4
+:00dee03e9b56f0236a1a34d4103944fe958fd8
+:00def08583600f0a5cf1b24a840be1b167e687
+:00df0042077c4ec7af15cd94bab54a2bcedee6
+:00df1031b17d902d762285ee70127009018580
+:00df205e4da16351945b03aa8cc5d2489736f5
+:00df30e07955cdb63b992e060047a735b86a25
+:00df404f0fb1f1bdcf618957aba874cf4dc546
+:00df50d5c2287ccc7b0a3500c2e0cd512bb5c5
+:00df60aae40181b62fe24a3bc7341ef70a7e9f
+:00df7095acc651dab6c89ce8f360d3741d9389
+:00df80325a1ee36c096f28ec86ae1c7213d8d3
+:00df90f70652982d49b7938824a56f4b09681a
+:00dfa0c86cd6eaaa25e6b6c56c2c42d6329b89
+:00dfb09493cc35f60b4d2849d6d4e775bcf261
+:00dfc0266daf30447e3f1620664a58f77dc297
+:00dfd0f8f92e90c7d2d0b61ccce37f9995dd42
+:00dfe052aad1ed4f4522fa4c96d7d46f804c0c
+:00dff03c491379c085f7e49fc0053b229f0400
+:00e00018aeada5bd6df6a993576308b9ca31f4
+:00e010a75b7630ff0082dff5e77e916781f251
+:00e020587a695e67251c3d01e2959413cd6179
+:00e0306ce05ab23dac1942e267ef95ad744909
+:00e040f8cfb5447649695d978eec942db4149a
+:00e050981cf2fd243342445de5468ef00879ed
+:00e06069cad4044db9cb34e9906da42a8eefa4
+:00e07005b78c5ddcc302162eaf0b504cdf0d92
+:00e080955e4ee68469915cface6a1198d9f98a
+:00e090cb8863627e9f764446d5303dc622b12e
+:00e0a0141c6d44ebd900d0cb24183eccca8a51
+:00e0b0cdbf2b5d0242b6855902c01f17e46f4d
+:00e0c00b7ed7c543959cfd6afa4a0b72c6dbbe
+:00e0d0ed61f2460c3f15ac45334fa8d4685947
+:00e0e0cd5e3f5a6b223c055c422678db5ef45e
+:00e0f08904b2645fe7c6a748cda87fcbb46a7b
+:00e100a93145c2a4a78fa543ffe0b93bfcdd57
+:00e1103a68d016041b35eb5b069bd9f444ac92
+:00e1205fac5be756805fb7bb953b8b1c79eb08
+:00e130aaf3b76454624a80fdc4d0ede1aede1d
+:00e140678a4c07dbe989a3addb422fc05f35c6
+:00e150c865329f077debd4034ead8198f6cfc9
+:00e1607b5be7494669fd9ee03e0e620128d81a
+:00e170db2fe7fbfa587b8ea1fd620568b4a63f
+:00e180310675d89af038a47637aea890508228
+:00e190e9b2e8f84c1bae93212ac9fec190790c
+:00e1a0cf28ac4d623e355c8e24ab14238126ef
+:00e1b0c0eab2f004645ff1c1ff246b04280226
+:00e1c01db19d8d2affc10c2d9a8776d10a1fe4
+:00e1d0e6433d25c8224a314d80990c44c5d6cc
+:00e1e0538e4f3d33de05d8103157dc801e5a47
+:00e1f07dcca3758e970248c90ba57324473af1
+:00e20071d36d51ae2ac8e48d2636a3e1c2bc70
+:00e210018531804d211554a1eda77bc1629e30
+:00e220a11f6ce4a8824b3216d8034b42d2b72c
+:00e23021d070b1046651a9ce401088870e8000
+:00e240caa094fa2418a80ca1f91288d5b70fb8
+:00e2500acd2f0850191aadf599243fcb884eed
+:00e2603ea603e9fd8439906f2fcaa88fdc4467
+:00e270dbe13e4907d43b8d3676551aa56c7e9d
+:00e28027651ddbe0b8ce39c8060d956cc0e01b
+:00e29064bf9cabac142db90271697dfe313f57
+:00e2a006a506c0b88fad41a4d0693dd7cfc183
+:00e2b07bb97ad9cb364509552055447d79442d
+:00e2c007065030b2fed53243e59d0cb4f4a41b
+:00e2d073e435211449f610c03342135f8d217e
+:00e2e067e0ec8cb92fc6dc0b555876b1d24221
+:00e2f072f1cd1a605ec61d4f4f0c4b427afa6d
+:00e300d9f00c4e32de33a3b6b825ae65bd64ff
+:00e310059cfa9fa24fe5ef62b53895a4bca908
+:00e3208ff30b7754f12a8fdebabd10432006b8
+:00e3305805ef1d8dd31aa7ff195d1f8ccb63e8
+:00e3401a07fff5162218e54e28340ab4f9ad00
+:00e35036589cc266a52a01cd27b754d889ee2d
+:00e360bd1541ce84237cc6b55a167f4b2eff99
+:00e3705fe7a356f0e2899645ea86e049f0af6f
+:00e3806b4517b73c6860f2925fa328f33ec368
+:00e3905ae69e48b12833de4c9fa70e6780b64b
+:00e3a0066982bf0a8c6ef8d53ad42ef7f62074
+:00e3b0983efbb53690a8e473d6a6c6d1b300ed
+:00e3c0c91dad2288a9d41521b30dac991eff46
+:00e3d09ca0d618fb6e2f3a6d4102f66d9a3255
+:00e3e07f758b607e600f953a927d48144dc0f7
+:00e3f0c533b265af7c92654803ba25cbfcb6d2
+:00e400c4acba3428f93fdb41a50614a076f2e6
+:00e410ea64209e3ba0a7602343b4636368a588
+:00e420bb1ad4b71146106b2ce0f7543d871f2e
+:00e430b2c0793299dfbdce3cdbd033481c4565
+:00e4402c7f7686bb5dab2ceec600853564c2b4
+:00e4504f8f42f21434ff34798f21fdb37f66eb
+:00e4601c4595685ab08522f798bdf1ee4c7978
+:00e470f832394f1a5707208a8b96ca90afac5c
+:00e4808f7bc9827a3b6b26a269157dd14476ec
+:00e49074d9c27f88233c7e2f75ba5800f98a44
+:00e4a064ad40df17db4c446b6def64fe430101
+:00e4b0dad19e0225ff7df6631a38c5aaf645e4
+:00e4c0577d4ee5e9a35777454bec66036839a5
+:00e4d04303a07f6f785f6b03ac21dae4101de6
+:00e4e0580487a992a0857e9007429cc1c43fb1
+:00e4f0c0cf3027c3f4d90959a763bad2edffd2
+:00e500ce2bd04d1937af0fc931bd382cafe736
+:00e510f73e63ec14e2ea4ae690bba8be069564
+:00e52069725ac7e70c03681e695346ae747c49
+:00e5303cd9f6895eee32096b04ff7c385ee0ce
+:00e5406273804a4ba69a0e15606e60777de47d
+:00e5508a313310920a45f0eba18ae2203d032d
+:00e560f613d743288b5e7b3ce3500f943a340c
+:00e5703971208360904b3d6a58d5654150d2aa
+:00e580313437852535fba89139143afdaa8ee6
+:00e590c0046cbad1ae209a4a3a3b5150f57e09
+:00e5a04b74a62a3f83bf38b8a05762b0b0a841
+:00e5b0e81a9bda02005e5580126a7ed1a2cd42
+:00e5c0dce0421bbff78101ed24cbe171170196
+:00e5d01d32867a53eb17a6cfe63804a4624f44
+:00e5e0e74d6d34a9af6e03792ea542dda5e712
+:00e5f079b78cdafcd14464aa4a3d282e23e226
+:00e600d4786ef451ac8bca770de2792e7ad8fa
+:00e610de7f322c2b86170a01403c1c02da1095
+:00e6207829ad38767a942ade1808847daa03c7
+:00e63095c220fde377aa762840846ca552fd3f
+:00e64092f410a8c634a05e36a0724c3e647075
+:00e6507401ec601d97b6ee025247e865cbc99e
+:00e6601d0d339e89edecf5b2ac1ff1fd958264
+:00e67045dae404dcb6cd48f13faf049f769a77
+:00e6806450653b83292fe45caf1bcfa41e0669
+:00e690eabbb9b529898a7f89093310aa4e4f8e
+:00e6a05c28227a7a8e85df0c95a70bfef58e2e
+:00e6b0009a25908460c8aca0bf2b4bdf789d2d
+:00e6c0b3e0fcffc0ab34829b7ebc84fb9a1424
+:00e6d0764f3cbfebf39540960d002cd556c8fd
+:00e6e0bbf810dd2eb80922ab712f662bbfc745
+:00e6f0a7766311f2d74d8c1f36dee752f74538
+:00e700277410d27cbb1658d8e30b769039a10a
+:00e71014a6b3a65992fa20492e9f6294277ec4
+:00e720a81a48237f15300154956434e96e22d4
+:00e730bb2bde4c20822104bfc3ffb6356dc57b
+:00e7407ecdf432163507ae7432784ecf0e58bf
+:00e750fc3211e7cf144f6063d7c4545880fa9b
+:00e76082664f41545dd5ee6bc2652684490811
+:00e7706e8038c852a8fa20f45153d6f073b4ab
+:00e780876b16e6bd63d8f12a863daba71a51e5
+:00e790d9a0ce718a5946179f9d9935c4391aef
+:00e7a09ffb95700ee8f21de46e64f84e8a0c74
+:00e7b055744743d58e14b6584e624a9d707fd1
+:00e7c0b85cbc93282019eaceaf3411da01fa08
+:00e7d0445392047008927ab364b92751340fba
+:00e7e073a9a401df2bbfd6d8d85fb3f4437571
+:00e7f063ca25435a094e456cbc7891cbc0be65
+:00e8005a19b0683b8e15bcf5667864e563ced0
+:00e81043fb514ac0897af38676e0552cae536f
+:00e8202d1e2d726bb3af2d7b1cd880e37af079
+:00e830081b0ef72e0e1cc2c081ce282fa51f3d
+:00e84035b2a0dc1287c50b8294f572ce09ad99
+:00e850f79623883ae41f1f7268a654acd0fe25
+:00e860fcc1e2e428084bc3068dea14aff0f5b5
+:00e8700dd36288c92be6f4b514e063391e0b0f
+:00e880a4ae9b416070e65797ed7149687d3392
+:00e890b940d245dc1267a2e0dfcb5f0b493b94
+:00e8a04c6e691e89c22a82dee7e79bd30f86d1
+:00e8b04ad62375ced400038aa9c54141b24c52
+:00e8c0ca66cdc4260f488e17316a3e03bd50fc
+:00e8d02ded2087304a58e3c144b26a38c4e209
+:00e8e0c66cb9002846501dcce9ddba1eedc9f6
+:00e8f06058f88fdd59dbc578130c129e4e0da8
+:00e900d52c773b9a1ead3e289f66642bb265c4
+:00e910083f89dacd20f1b0fcb515dbdda1f4fb
+:00e920abe27657e5925b12aa2561dde4ca97f9
+:00e930a665c2103a550b4a5c36a24540395c42
+:00e940cb090b8244ad2eca2aea7a813a5d3473
+:00e9505925bec3ed17f3ede2c00eef8e3a3054
+:00e96046b74d2be5fd3bded4d9ea01c535590d
+:00e970e2d23dd089e429e6ab68eaffa8909538
+:00e980785ab105c48b45ec4e73ebce64b06430
+:00e9900946244e974705b4ad674c402fd8ad11
+:00e9a0f0fe1bdbfb922105b4e0baafbcc86bfa
+:00e9b09a098b077ddec4a23226448e6d454848
+:00e9c0c8a3ac43fe1b61e4cd1b9c1cdd7a2c48
+:00e9d014b3a5f510b739f94c706416b60241b5
+:00e9e0aebc9c3300fdaec8309a576fea4e112f
+:00e9f00395888e16a0c6c19b376b9570775ca1
+:00ea00bb3fe342a535c9162fdde87e65e91fff
+:00ea10cb9f864576527583ce906485e91d9c95
+:00ea20b4c7c72caa506bb43e3a5bbbc698ea6b
+:00ea30d788a56f16592c3a1d1d77ca7e13c931
+:00ea400e5cd7e4918785118e39b5c0d611ac6e
+:00ea502a87a89aff83e1e6eead5ec8e38ff249
+:00ea6040b42a715ea0176334c88a0ba56dba68
+:00ea70fbc36cf3f3f3b07b49f71b248edabc5a
+:00ea80c123f98fff0060d928ac1752df224f59
+:00ea90c50973f7d6f454b719fd58010165eae4
+:00eaa0964930473fd12412473ccd0585fe75ed
+:00eab0bd11277dfa511cd108d0528884f53508
+:00eac07ed27687496cc855ce6446df75b769db
+:00ead06e0f95c4fdecfbc795c5e5634003c5be
+:00eae073534cec799185bcbe8c6ab3c762febe
+:00eaf047e7887d79489fdec32ae9fbd5fc5063
+:00eb00dff2a459e12367e808c8605cbea3feb8
+:00eb10b0f042b8bc2bedc074404df6632c32d4
+:00eb208e06c7d2638b8f77232d14510e4b4350
+:00eb302b1c4467f82284df9301a2545484e289
+:00eb40fe6ae69391fc4b74b539d517fd82f054
+:00eb504d01d1873e615fec5c8d0706884a552c
+:00eb603691863b0a211778b68ba7c3b27a11c3
+:00eb709b5fedbdce30d8d74b80d766a09a9116
+:00eb809de5bfa337b720f73040b5e18e8eb15b
+:00eb905c5d2b032e5a41222b931ee842bd0fa9
+:00eba047888c80a84e7977ec21c85c7b1f4053
+:00ebb0324565b6fde3a5aa426b520365649b45
+:00ebc06ec88e33029a112ef69cc80235901f69
+:00ebd0315916a7904ed879b40c95d1fdbe7e98
+:00ebe08338564d5e69181ef8800e50f7c9e611
+:00ebf0af7d519a6a1b89383371b8daa2aa2747
+:00ec00db517b8039ffbe01fb588026d20bf903
+:00ec10ac4da081a4f0f5967ed6114aa060c710
+:00ec206a8291eb2486058fb565c914676bcf28
+:00ec30d5eef22608ae7c68767dbcdf7037cca7
+:00ec405c4ab9c4213375b411db595aae036638
+:00ec50bb9c782da09cb0de973b3ef8be0636d6
+:00ec60d1fcac3b78946ffdbfa638e90996e1aa
+:00ec70f43adaa42ead3f4798050f0e33c0ea9f
+:00ec800435b485ac479fe63cf710a1a0deb672
+:00ec90acb5ce6981e4071bdd6fd75937d4a8e1
+:00eca055e655dbadfae5f2efb2ba5f8a6af7fd
+:00ecb079f3820ae70ed2c34dc6e48620b9ddb7
+:00ecc0549c02677d28cf7200f361b3cd189547
+:00ecd0d66864bc88ac3bdaa3f61af48a1c4882
+:00ece0fb6b5700adf1df5290577f4646bd442b
+:00ecf0d175ea098c771bbf8423b7c76eb71c6b
+:00ed0068c3233d00c71c10a986c68630b42dbc
+:00ed10fc11b0a7fadd590a23fb196ac001fa98
+:00ed2078abf2082c8c5cbbb95b26306c14bf54
+:00ed302397756793362ab20db6b70342c9d3ca
+:00ed4080b20a87061123e9f4a1f952bfbfdc96
+:00ed50edb122107a30ef4b2a5dcf36bb09a13d
+:00ed60cf7595d7778450e0e8853cf0fd7ca02a
+:00ed70818f434f813793c06fd544b37d19b5d0
+:00ed80265c931113a267c811469e4fc085fe3b
+:00ed90c1303e7a5a3ad9c3fcba7ce28bc3d988
+:00eda05e31737e586fc5637e562ea2a47fc340
+:00edb0a62628da53d7d88c7d08c666e568846a
+:00edc08d61aba107a75b5b9d624f6625da0f18
+:00edd0bee7a83a8c00e1a346487deadb4dd4cc
+:00ede041a98266c68f53acb71882da9a84740d
+:00edf03a99a9558018235f5f5d02b7b7bfe8b7
+:00ee001b0877c4d6660a61d147e3e0e2610945
+:00ee10c645ad06426369140870762d47b31886
+:00ee202a6ddf94a6a008976e1e0e5859dc45e4
+:00ee30cc9144d617a8f607d9c150ee9a968b86
+:00ee4059ad9cd35eb12351f7dcf0ab239a677c
+:00ee5062e173731d2a6327878991cf05095d3f
+:00ee608d94079603b1ffeff14fbaa1ee403dcf
+:00ee7026693e6f99997ad0456980481c3bb3ff
+:00ee809a7c031ed90b643a42e8225ed20ca458
+:00ee90c62b257738e3142be9076a80add7fa2e
+:00eea017cbae936273e72b6d1cf01ce09d2cec
+:00eeb038c8eb77df793534f22be91a10eceece
+:00eec01c3cabf41a093717046e48fac39f10ea
+:00eed02feb3a17b28fa10de88263f5b052c8a6
+:00eee037b81bdfd724ef4e78abbeee6e2ef14a
+:00eef0967c3d034f2756ba9ff572c4714e6717
+:00ef00ee1a5ea48ffbd52c666c876d826f6e33
+:00ef10b586a3c92b78ffdc9602937b8a6ad0f7
+:00ef2053e397b1644dc9261105551b68cdcbb7
+:00ef3077f9c4ad70b36fd82307465ed2e89738
+:00ef40cc8035c110d93f71a44390bdd74dc6c5
+:00ef50136c803c94c6222dbdba39fedc4e3aef
+:00ef60dff4424fbfe4f53db10e190390d72ea4
+:00ef709e0394aa477af47fc0f0123bb0432ee4
+:00ef8085752be18e9a703a34803a83064937ef
+:00ef90b1864a3288dce144b523699b60a57a7a
+:00efa0f32681155b3a141e8eb750bd75ed6578
+:00efb0295b66895ec0cb61bf5125955099ebda
+:00efc0875c577fd97324adcb7e8720fbe62cb0
+:00efd0db1306e039fbb879f7a3d3106d1c2c6e
+:00efe01eb9199256fc57f5cbbe6044d0c232bf
+:00eff077d6e21f4b03b6c31295219ec89ca409
+:00f0005f2611b3d923ad7d6d673876328339ca
+:00f01003a41804ed331d3fc7176f6713960df2
+:00f02092a837a361af8466f68a6e4f7db07f00
+:00f0304321b954af6b115a28f7adbe51b3aa14
+:00f040a3f63021464ac3e2f7b1c7db513b90f9
+:00f05043da276b0e86f7eeda80a4085d10fd62
+:00f06052b0917587ccaec3991b529a74bf7396
+:00f0707326a11e366944ac55459ac21c22e131
+:00f0807142f11881ce63e97ecb7b126bb2e831
+:00f090d9a70d9a8a816439572a3351b17d6873
+:00f0a00a5f19a46c8f02d74b0adc6f3becf48e
+:00f0b0092a8dae4233b2f257a542f03667ac75
+:00f0c02f1951f67baffac255dcf2481980bd5f
+:00f0d0229ce0cd6bc7ae12812358826f289fbf
+:00f0e058d650d7472d545beebe807bff2326c3
+:00f0f05eefa3e94a8b5a6273be03da59eb8be7
+:00f100130bcaa469613e4c8054dd8a0df2ba0f
+:00f110188c01848896a84513ffd352276403ef
+:00f120d6cbc16df8a2314f8f52c67ba7b029e5
+:00f1309db8cfdb6b72ed8577c50dcc5333062e
+:00f1407bb70661ebdc560f37a2f3a7b8a0162a
+:00f150057dfaac989c5da2fed266d426bde11b
+:00f16030a4fa6509e4bdd158a86a6c6da0cdb8
+:00f170aa83a8cbda314b3c9848c75627a16025
+:00f1808d9ebf6da39f49238cce3d296fbf0fef
+:00f19077034d248374038597a1d25ca5f6e92c
+:00f1a0eed36ce2b4215e0251b82a18697b5bb3
+:00f1b0b9af9f684a9d198e4c79441598e23a9a
+:00f1c0102f33ed3fea540914c747d6298cc1e1
+:00f1d0c56781e93bcce28167bc27e9a6ed2ccd
+:00f1e0e8d147e15f225eb7b087bbb81dc4f56c
+:00f1f0e21f703bf270194f1a070350616ccfac
+:00f2000a1a6b44b040c904f18582bf81c52ea1
+:00f2103a5f8075d95d450a14276ff89aa1c9d5
+:00f220c35d496e71c92da11756aae29b8175b3
+:00f2300655537e7415dce6bbb0b275dab83abe
+:00f240a42e66f55b03fe024cca2dd7d0bf5b3c
+:00f250451929b35625f2bec0e37c5233547891
+:00f26018fe0dbe6af1b2413c4c473b506b205e
+:00f270f9301510e101484daccdd9c6483494f8
+:00f280e37924852812de46424523f25f93a92a
+:00f290ecce056e47c9acd4c5b4143a3db21fb2
+:00f2a00df0b3685e6c51fd8c06f5de3e17a79c
+:00f2b069450f7a29522fc0eda4a44fa2f5e250
+:00f2c0b4ef595b1b090de190803183ddc9d6f1
+:00f2d093b0c6911aefcf5d41a0fb976e6d8fbf
+:00f2e038143819d291f1cc82524cd661d05e0c
+:00f2f06c5ab8fe498dff50014ad87855b21698
+:00f30018c950a8218a83fab6e15e2dbc05f6f0
+:00f31022eff9ca44dbd69239524166229bb9a3
+:00f320257f51ec6098288986a4a56895527e93
+:00f3301642e4968ef88b8b9b4f42bf6e6872cb
+:00f340d1516daa4e77ac4be0e197a6369fb43e
+:00f35060165b30ca1af1f388e6a53746af44ae
+:00f360cb394a0ea0a48fb44cbe0320d9d8d7dc
+:00f37042df7a29356b7d26f00ff5ae7c37e048
+:00f380c02c49169cda7bf5d54476fa106f1f3b
+:00f390cecb68fe487b6de3c847cb18042f0d9f
+:00f3a0a9a2fcd755fc9dab2f02b70d910cbaf3
+:00f3b0792e9811484d81ae281ca5bf129c9570
+:00f3c0d905b9d2a49c58209b24793db72a986f
+:00f3d0976d3eaf9aa426315d10b6d909cae616
+:00f3e00445178d18e6f3d6f76a8cd9272be8bf
+:00f3f0cd8b0732aac04a8e03b7d38f93ddc176
+:00f400710460b1835eda544992413c98f871b2
+:00f41042c105d316b2fe616e7aff6e715ca59f
+:00f420100f67f436bedbcfef78816afabb4ae4
+:00f43068ed0d48ed96ab27cb2e16dac9e5cb1d
+:00f4405438b3ef29bd214cb8f38f4d183bffe1
+:00f45058918316f26fafca582ce0af28137325
+:00f4606d6ce1c99bdda5d9a20714cdae63a7f3
+:00f470d9a4025eb00c16add53e5311a6ed94e0
+:00f4801c6a8e659818714c30e65bb3c254dc4c
+:00f490dec53cdb286d12d895cf2508475bc980
+:00f4a08637c4f2279c06935b75aaea5fdc7654
+:00f4b02f42f612a9994694f1661ea311104fcc
+:00f4c07bf47ffc48549d82f3f833d466f921f4
+:00f4d023f48e1a88043554dd0edbdc4580ec9d
+:00f4e0edbebc8b39aff9e5ba3db6ac397d3cc7
+:00f4f023851489d96291f706a02527e7b22102
+:00f5005ec8d1e3e90c81d6c48a4716a53b063a
+:00f510a4c758936f4bbe86520d591f7e80fbdb
+:00f52040736ef9f710565be980851273c058ac
+:00f530c7fda3fe4d2f70045d240a8b0a918f3d
+:00f540c7fa5d787a9a0714e45e793a9e66ce8f
+:00f5508bcd0411414b4832b3cf9ff28d562d55
+:00f5609b180e62ec46ee7cb71d60c846c1f35a
+:00f5700b9f4a8b51e13c94329d4e6446c52d44
+:00f5804d637fa5156b8fc4d9644f55fc889b91
+:00f590798393a0bf26a32601ab9a3ebf1fd988
+:00f5a0ee7f6618aeb22ac8f9f16e42cd087442
+:00f5b09c37979773f5b9ed288e66f037d72500
+:00f5c096be09721bf1b4de679c4139bef50a57
+:00f5d0bfd6823193f737f61c151e1ad031ca52
+:00f5e05c73905400f0097f61312f4bd32f8442
+:00f5f05906b6360df4932878712af7e241356a
+:00f60073aed2d4569a2178e7d3090236d8a237
+:00f6101283150256cb7a1224ec3262d8c1d280
+:00f620ec2abc78e1012e7ef24ce83632055031
+:00f6302915a6e0febe7cb0b44215c204931d34
+:00f6407ce86f352fbb685414342de616864298
+:00f650e21b484635fc43f698699b87be76bdcd
+:00f660947da5bfcb497d0a9780427ba22ada0b
+:00f670abd69a2105d756be27e56697009c1d59
+:00f680a9b40c2b78e414490fa411540ef3a32f
+:00f69082ae30ed6d2b0aed7852d4cd8d16ccef
+:00f6a0a4c7a6c23821c2e4ad8ba350f9ef1640
+:00f6b089ed8f492a53f673a5bbbc4e05b6ae36
+:00f6c0028759b118af067f1cc3d2b4b4de6a23
+:00f6d0075f20b76520049fda5ccf6f92a29a04
+:00f6e06780ebabd282a1d61be8659ac88179af
+:00f6f0728ee8c945eb4ec8b3fa4b8ebc8ad7f4
+:00f700bc0649bb04989d003ddae9cba7534aa5
+:00f71042225764261a44d85d21efeccd11e55d
+:00f7206a3cf197c8d6863cb00410c4367a9680
+:00f730dc660c67d3e6545a5210b6b5ccaa25d2
+:00f740aeae5fb496f3dcfff3a8376fbae355b1
+:00f750c8b89b16533263a014cd7a16ec36d51b
+:00f76064b2f020487d7c257e68809e667e412f
+:00f7704d404fbf607fb4459e0f68c83ea3e003
+:00f780ffb9a7cd2079f870e60e72c0f8611f9f
+:00f790e2fd28e14589456fd3e049805f653fa0
+:00f7a035a0f6dc64461e649f161da75751e09b
+:00f7b07438e2a6bc73efc3fb0a0bda579bbe7d
+:00f7c039baba8acf205a55ded21cf789c3f661
+:00f7d0159e30dca15b4e1ff4117c1da01e3172
+:00f7e036a3644a044e27121393f320c6be3deb
+:00f7f040d1ba871f0d5dd56a4b28220b1a2864
+:00f8001002d3f4c5140fdf17d58d3198467020
+:00f810ab768c6f3005a766d4bfeb9b5ae95ed8
+:00f820212da854ea2148be9d6f7095bc394cff
+:00f83068741862e559cbd711c85e8bcf2376bd
+:00f840b46f3ea31d75b4b7635bbfe9bb2d576a
+:00f850c078bfbe1e688f441e6c0b0baee52eb7
+:00f8602e7d8dbbe6cd3c536bf04a117fe5b8e3
+:00f87042886b8698a1c44b06941f541b5feaa9
+:00f880818cc1a0f113620790cef3f323cccc5c
+:00f89039bf9bad68a78ebd9d7dc5dc1d6dc5c1
+:00f8a0c9657082b7594fc9048137e2203b9975
+:00f8b010b7d46b4eb5eaf4e6da2a12a52e40a5
+:00f8c0b276f8081bfc35eb97edd88a3b083601
+:00f8d0c02ce34a73048ff2a72eb7b0f3fdf61a
+:00f8e0be19782f9c54a83fe8beebaae60c9cea
+:00f8f08938e4eef62386ba852c867a3e4f2006
+:00f90017874805fa8ea08c87335df5bdae5b18
+:00f91000152ccc3a2d63660f81fa87ac2ec91f
+:00f920defc7c479b38f7fb66fc83c184753bab
+:00f930b51dc3d4cb07c5f6bcff3cb0c47a64bd
+:00f940034b6cb6d3c3569a7fa1c834b0f799bc
+:00f9501f1d122267dbe6f3d07a8e13e83d7a68
+:00f96084cd4c80adefe05fca8bad513d646046
+:00f9706d73ef8a4de2e7ef8594d4af137fc0fe
+:00f98075cb3da43f5cd958ad603cc17ff191b1
+:00f990d15537b33da2448fef3012a42c54d88b
+:00f9a068fb57f7fffd81d852ebdc56c2acc8f9
+:00f9b016fd865a484a4901e5f2d98f5330cb71
+:00f9c02c10ea28750fa5d0f97f864497c504b3
+:00f9d08785561ec12b22142ef3f9e18e423131
+:00f9e06cab2b07f0c39e60f6bdc5555427132d
+:00f9f0fe438a474a450f193c034315d40804b8
+:00fa00390bfa83a225fb2eca4d6b0f05943b51
+:00fa10e531b4a8ce0d2c67ae56858128d7768c
+:00fa203103b8dadec7418477389d10602d7c42
+:00fa30dc424c965b95d75c3d25f55549abef00
+:00fa40db37894f63486082cacc27315452f564
+:00fa50bee379748244660e29380497541d7bcd
+:00fa606616ef807daffa75f7ccfd4cbdcf35f1
+:00fa7079eb23030705cc19f52974c9ea9205e0
+:00fa8073ec427aa192b9cb1e70f836bd47c008
+:00fa90f05d73a5d92eecbc9401d8c0c352b362
+:00faa0aa8cd00fdc352c2fac2a090542c97dd6
+:00fab09e8065014f9e3c34ac6bffe3d0e60e34
+:00fac0e3963915c31404beff1e24051f49d50c
+:00fad0f826342e0439370e230d5fc24aa3e4f2
+:00fae0f1eb6d11bdaa76af1c935b0f865faa65
+:00faf0f4708bdad73532fc65ab7dcf5c89d93f
+:00fb005e5be3d8e530cb659670c18caa48304f
+:00fb108849980e35f5279711e98c69377877d5
+:00fb20e9f4cdc356667198577c3b724e5db3a0
+:00fb301e1c69d4408a6be68aec1d75fe09624a
+:00fb406908508dc41a2837c994d89125a3d7c7
+:00fb501068e4bce4f157a49f845da189cb0d0f
+:00fb60e917d0aff0bf93b969bd4fd71262e9ae
+:00fb703faba2f70afa66fd73e3d86db57675cf
+:00fb80945fbc7e130005f86fccacd833bbeb90
+:00fb90b84e859d5d0f37603d1663950a7689a5
+:00fba028f7ba0554da40bde98e0a691422c351
+:00fbb05da40803eaf8b49c86cac753cdd418fd
+:00fbc008c0946166bd718b20e4d398a91d91f7
+:00fbd084f557726dfab2467a121afcd326fc60
+:00fbe0b85e6d822424ea1654feda3a9ea55206
+:00fbf0edc69dedea21d40cf2188b2a21f48767
+:00fc008d87dce68258772849ad56726f74ce0c
+:00fc103db6bc197c08bfd5b7a7ca3c6e2f3c97
+:00fc205bf5841339a8f7a0468fa8ee8e989fac
+:00fc30b557271640929cb1c736c31e650ac0e2
+:00fc409cd86bd1f8a0ec702b42a3239453685c
+:00fc50d1fb9b23d13a4e4594a3c10eba2faa23
+:00fc60955cfdf33b5a7f1edf56cf4b8d291587
+:00fc70286649271f6df88d56fb7f2c9e111753
+:00fc805b78f828d1196395f042b9b9f73a9bba
+:00fc9006d047dd7b4a61db8f5fdaedb8917b8e
+:00fca0a9d8b4448e71dc7f1463a46f8c1057cf
+:00fcb037c25394b9039fc1299b1039534acc14
+:00fcc0e0b414609099d15bd30b6302ee5310b0
+:00fcd09fefa8153b1e3b1302688541fc859b9c
+:00fce0931bf68f27131e539443014abbd1633a
+:00fcf0e5830f9ee3093e4da5824fbf2f77cfce
+:00fd00cd51abfc2533a583acbd892c8788caef
+:00fd10566bcfd67e981a27b710a1c206425bb3
+:00fd2086a4b22da99aa36e6a058fbe61d87991
+:00fd30c44bd2ccdfc2bc4e134264946ed49921
+:00fd40e637e06a8c623999bffea17c92edd3ac
+:00fd5030b1505f35dd0c728ad3c243476d5bf3
+:00fd60331c7d58a3c1e7edadac6de55f4e1efb
+:00fd7081da0d0a57219e9bb0e5c16fc02568f8
+:00fd807d385faa13ecc51c28752fb74a4e117b
+:00fd904daa008060b2816d0bc82f9a919b0a43
+:00fda092e29f545630e6e29636716df1d1f563
+:00fdb047c2b066f8686dbf675bc8c2048b2ca2
+:00fdc0c60d161550e10651967e2ff7f9e6a40e
+:00fdd0972ff2f810340df596a4df6c9940a0f2
+:00fde0c60ca2b93e7c2be9e0049c724c9ba743
+:00fdf00fba231903fa738a9b42979627a14416
+:00fe00d6bce1423f666e89edcedaeb63a989cf
+:00fe1048ffc700c0cac07c962592fb6d1fc16f
+:00fe20c4773f4ee2edcddd52c06978198167b6
+:00fe30a4fa37e0d62c255bd3dfa09b896505ae
+:00fe40209af8381ab2cbdfb1f4f28834cbdf4b
+:00fe50277297014ace0e9e2f7408f4ef740c0a
+:00fe60f6ebe8b5c4d16f169966ab9e3b669655
+:00fe70ae1400d3ab173d5ca3f009ca910cb8ab
+:00fe8035d1a62be6f82d901e027d23e0af59c1
+:00fe90eb0bf87c2d0d23709f0257f84c0ec2b1
+:00fea0a0d05ca3f11de5b03aa40cdc5cf0187c
+:00feb0776d3caf79cebada5f7ab9a6f25d47d2
+:00fec0b233115684d9d1ba3204cbab17bb7b6b
+:00fed0f254565d76350c34b78f68728b49d568
+:00fee0e5118639abc85fcb7f91297a7a005006
+:00fef0c79ad987ee1cffb1bbf91ddae4f99ec4
+:00ff0005b27b0beff8d7665ae7af876c41310d
+:00ff1074ba126885062c262cab996e30ae0c98
+:00ff20870a1ccaffdac89165c286d6808b963f
+:00ff30e7d48c5860a7d79167753795f304c5e7
+:00ff400926826dc818d6894b292245539af72f
+:00ff50933a53b5ae149bc60d56802750c3aa0a
+:00ff60d9c01f2594a6051fff37ece05699d121
+:00ff707411b081bc7e274ce3850d67ae135e17
+:00ff806a303996366323a8ac71c7b23cb517c0
+:00ff90a3e2cd83be8950cd7eb2c6a5f3c4082d
+:00ffa0362496a6d1ae3c7e75b45747c46601ba
+:00ffb0ee2efca061fff0cdab1f22b2d050dce5
+:00ffc0ae50eaa8e470ad64147dada4d74ab336
+:00ffd0d2e311f733c97983b027b8b0f0e3596f
+:00ffe0713ebcb67360b183b8afbd9e721b0cc6
+:00fff063ae4db7d7ba2d1c04ebad48bee6aabd
+:010000f937d5c65422ce44d3cc300e4d0ade07
+:010010f5114450d89f24320e0d5ea465ffbe40
+:01002013d25213f61d090eaefb9ef774e26515
+:010030ac12225d163b2ff6f48eafadef222ae3
+:0100403faebbd000220a6af02ac959faf4d944
+:010050d5505c35ea8ad454eb6298252599c156
+:0100606b2e9cc27f3f5672b4817dcc67480c90
+:010070510e5d8b6c683a419b57155a72550ca0
+:01008009462efae483e842bb2c148f00733bd7
+:010090e165888753c20e4d81daded184377785
+:0100a07bded326bf67712c83a02cc8f7c1bebb
+:0100b0ed95b716946599ce0ec31b8ecdb9265d
+:0100c08975bf2951f2e3599790d76d737385de
+:0100d0e714414922af8a830bc553e454997c4c
+:0100e040ba3fba35aaa14bafcbe6fe6aa120c2
+:0100f0b2c6df9949ad3b265402b5f25dd87860
+:010100460e29abe43da06b4de2c5843bc17d4b
+:010110b44d5e9ce626c7bcef4d71d9b486c274
+:01012079796d0492f9d004e60869e8d9a65f51
+:0101304db1dba3758c61e44241fcba8d44d880
+:010140a25baa0572e0df256cf8390182144c17
+:01015077e93372392c2d7843521b697f5c045d
+:0101605f706dcd1f101e51f3d509bd22873d64
+:0101703b6aab73193167b5fde86e2e09783ab1
+:0101807242936e16594c29e9a436c07c7e992a
+:0101907707a7213318960a64ca5efb9c4c6e34
+:0101a087602be153438d0149e33aaf5448e51c
+:0101b0cf6fca327d0d5f985fb3c27660d46f98
+:0101c00bfefb8e192a411983dd138bdc500cf9
+:0101d0cca4e361cd4dd81f03322e5759c58e82
+:0101e0e080c156a882a7d43c36844b7875e92e
+:0101f07412a15a9e407f21db5d22ac409b1a7d
+:010200421f0cd8685b5301c062cc8de743738c
+:010210139fd83ec0ff560c3642e5ec6d57a083
+:0102204389ef7a4b8b1c0a6cb254ff846821d3
+:010230bcef92dcc0943fc4fb6c16ff2554529c
+:0102408f7b69f8c891bb2c4948e167b4609ba4
+:010250387109a1c40b1afb71dfb30fddd7e734
+:010260777888406608f32ec22b37c2bfd680e5
+:010270b581791e111d9acb3985f10e14a5d9ba
+:010280e9efe82adebc94fb0b6706e70abfcc9e
+:0102901e9e08ca9f6a300637ec8133875336de
+:0102a0ed6f740794ef0d10846e078429499eb1
+:0102b0dd202dbfb5951e7ac8fbb98683c92823
+:0102c0e05654f5faf62c1831b954643a6ac0df
+:0102d0a5739627517e5ecebbafa37c24cc1681
+:0102e0b9af60f40c983589aad75d454ec6da01
+:0102f069a52eae6278f3df5b6b0573e5c813e4
+:0103004a8c9d098d30f35e8516ab0b6a5572fb
+:010310cc081b429acfa423a76bd6f10277229e
+:01032021f5bb97b7b3a8a11a044dea9c274255
+:010330830ffbc977a07f27701b6e39c32cbc18
+:010340dd55d17d0bd14bf1fae42196970c3e10
+:010350df7848536fa1b1c2ef52c2dff744eae0
+:0103607bbc9db9c65b3d94bc4ab6197f3ec6d8
+:0103706e1fbb4f767e1aa7687477173c541c90
+:01038039fdcd0fa084632392f6cd0aa17ec230
+:010390fca39766c7c65e2fbccbe3f3f53fa467
+:0103a0a7e093297688b45a7fbe6fc5a10d3f9a
+:0103b06b94d944e2c37a617c7a7f52d16c9380
+:0103c08fd5e21c1700a521b38d36cacb25cf53
+:0103d03e4c4293d9e11635d4dcadd3423f782a
+:0103e0c1cc523913721a7bd58df44c2db79975
+:0103f08c4302361005b028ecb68ae73ca6ecf7
+:0104009a646809932e39e3aff2a1b617167063
+:0104100673becd26155b7a3c7cb2528a687308
+:0104202bda501f89ea1f9bfa0d66969d2913fa
+:01043068b32ff73c65a71b3ed407d73e090d7d
+:0104409dcd41c6f9b29754510e3531ff73f6a1
+:0104501c8af5f67dd59f925395feec26486637
+:010460049155e4cd664a96f2d584749df19cfc
+:0104708185bd689ad838d44975e7ef3594bbe0
+:0104806959713dc868dd0db93e139400feff11
+:01049055e3be3da2746d596474ab614ab8741e
+:0104a073d0a7b6051fa15da08a921a1ea71853
+:0104b0377b43a5bd2fbfb6aa50218d587abac0
+:0104c0fbee911b81252da9dfd92d4cf382f01d
+:0104d0fd58dfa9864b5ae229ff2b800af54884
+:0104e0cda2304cc07b5c9525f72334b985f3a4
+:0104f03c4457a3ad2d9057275f819a5a4e6d37
+:010500d1b26bea95ba04ddf5518e58a7e8e96b
+:01051081bee3770b28f36125bb901786426dd8
+:010520310e36536a70a88b990df5928bb5dc42
+:0105307066ecc2005ad3e3e29d0a2fd36d420c
+:010540cfff3122f8fc774e85965dc5a9a45163
+:01055035de805a5897e821b2c1b434763dceaa
+:0105609d9ba10a2be86d4e238503039f4430db
+:010570bdf249f8d15674365b7cea8588654748
+:0105805521a99ba0fbdde0f12646f866db9f2f
+:010590c5d0d63aee3942a44be4ae6b6b147e01
+:0105a0c3a71d4f1680a0436cf9c97201d3a0bf
+:0105b0ae8baff0c62aa5b623c2c242ec404f7b
+:0105c09a636729dcc251178cb57a17e579e61c
+:0105d02fadf01d14bb9d5fb2d2fe5b08a329f4
+:0105e04e53077683b7caf97f20fcf6b211118b
+:0105f06e9280cf00857af8b10fef36d5726c39
+:0106007fbdb5ea52382ff69974a5750eaa4564
+:0106107afeb9f35c60dc1f0a9338c4bf0b90cd
+:010620ba5f5f4bd3883c53b4c1a3917e793be1
+:010630101834a2f5684b3749032432205e8419
+:010640d69db54c54e42b96e0ec673b91b42e62
+:01065078c196b4d03e19dbcc0135923f76de7f
+:010660036ed161a46e7507def634a9670e8827
+:01067062f55fd4374027c16ac7bcdc583d57d3
+:0106800efe48626322e17ecdf64809ba38f708
+:010690c2c2025fae6f10c1d4599114b0bcb95d
+:0106a090deebef1c9266e6bd09503db61fec44
+:0106b0a6004aace03f5070508e847de6b1603b
+:0106c03f271cb78f7855d7d1b9cfd704b4856a
+:0106d04be24d0bfbc87d7c0c339bd11455838d
+:0106e006c0128a5b90d25dbddde1fc49afcf64
+:0106f09ac8378166b4cb95f025e6c5a0c44cf0
+:01070080be95ac59c900510509bc621cd4ac51
+:010710585ce61dc0412922a8ac5382e18154d5
+:010720f034a3db229cabff6fffc54a55611c88
+:0107303fe0d5333e728dca87891cef0d5d3ea5
+:010740529f6816be5014b7a64d9cc4646cac09
+:0107500d29638bec84a675fdd07e00058a48c7
+:010760b47f081efe649faac9a70498b592ac5b
+:0107701476107a634e459462d9e6ee75ec6a09
+:01078093624b7df61c1255158a6ca8ae95d47c
+:0107908b63d42b699d6f0738d6ec637c87cf12
+:0107a0d0752fa16136c2bd693af62cdd8bfebe
+:0107b077e4056104ae3acaff546f63caa185d9
+:0107c01eacbd82070c4fcd27e1ee68475aa6dd
+:0107d0ffec73eaa89b7be32ae988d4091f4031
+:0107e0a1d7d9135b1b55c46c5980ee4fb9b3e9
+:0107f02c9dbbe65b29b78d6397b584e55367b6
+:010800c172a2ca56c8acf695b53bbe2989062e
+:0108104db7adf161f860818f9aa62e9e56527c
+:010820953fa38680b8cf688b661f5f64ef3f3d
+:010830ab74905110d023ca86a211f1b90a3864
+:0108406ae27cb87beb4ca1b4b730ffe0fde171
+:01085092bfc6c891fcd3b429328a0ce3e30129
+:01086005f4174f211ea4d3db35887c7dee16f2
+:01087070e04deba6a25e9f1482db7ba554e6eb
+:010880ea44bc78ad6972b8f2c0be686f624d14
+:010890535e06754d3fe1270f710d740e3f4ec9
+:0108a09ba11256cea845a87e5effe259b61f2f
+:0108b0d53fddb8245eb45808fd4f0f65eb2da9
+:0108c09acd2d1b66020e55aacd0a1e296f3fec
+:0108d016a631ad2c08cfe91530e84f875f37fa
+:0108e030584c02003f4b65c3ca5d8e4f48c9b0
+:0108f01af123ebe6bb724873740a6473905c55
+:0109001574e6574a7898985ce7ffa143fd949d
+:01091015613f2b89514195ac83e78a15f76ba9
+:010920ea1f1a007ee6f408e921122a7a6d6a7e
+:010930c227416f58846a607a36ee49938b2254
+:01094005ff02508be1ad6ddaf7947db8788687
+:010950732f26017aa26f848c043f18659c64dd
+:010960277881f67dfb16220f99af1cf4bf1e33
+:010970b192ac9216247e15ac2889417eae42c0
+:010980d04ce32b756f0d018c0329737d9ba62b
+:010990ac03ea8081058e1e8503ae8d4a584a0f
+:0109a0710b1179dae2e4fbbd67a94bf549331f
+:0109b01082ca0ab7e71cf6fd0124ad065607a4
+:0109c062e54f0c6f14dde3e2e4087f3457a0b7
+:0109d099a6ff963420b913d1a1458e0b56f8d5
+:0109e00011318b9917e22b85f429b78db811ee
+:0109f057796af5f1cfbae17ffdac664398d1e8
+:010a00ae973beab8e4e076d0666930ed170eaa
+:010a103730034775dda74602ce2870f2cbc3c6
+:010a205678d53335914e6b7571de7c8cdf4aee
+:010a30b8e547eb92f4e265da50592bf9831358
+:010a40e93aabf005a58b6c7bdf3acb9f7536ba
+:010a5015e11f2e23b419e7373fb98825041fd7
+:010a60757aba0970bd055d246ccb0640f2aa25
+:010a7012e689ab10e4f76f240ba47ffe816c1b
+:010a8049dd85253e7eb6fb1f13959d276d2ee9
+:010a90f1b40068ad6e03c8523bbf8d988b0611
+:010aa0c2d7fb5b262054a673782e12808f3cdd
+:010ab0f9f511e8659be7bcf0906c104e29e614
+:010ac041c973e96453008a4bfceebc10e5d405
+:010ad0387d0903da71151b46ca8610cf20967a
+:010ae02cb55a95abe9468e1020e1e081d6ee7d
+:010af0038a89db807160e7bf5611575569efbb
+:010b00414babe3eebbd611df9808d2df5bda92
+:010b103da74255351ba21763d93d1936026b48
+:010b20885a9153065900e9e720dc4f21c8d780
+:010b30847d1e5a0d0ef21ad49a12938a9d668e
+:010b40b4a5e8e621a2f2e147d13c853cd19cef
+:010b50f14a145db03d5e3a8e0d6829daf102ff
+:010b60388f15c3cd241fb20ff96625565e1f73
+:010b70bb22640505440c17726455ff7b5793ef
+:010b80cc004e6552895dad28cf17f092224a1d
+:010b90c5841d504732e6205bfcf81503090802
+:010ba09b07a95f09401092c5d8cb07d31484a8
+:010bb0e5709e2027fe22200d468ec986d75032
+:010bc0d2f0ffb6399d71f8cbe79229fbdc4cd0
+:010bd0ae3182fe5f7c14de1c57c051ec63ec77
+:010be0ec081520dd550c7a808c2f52ed1821b5
+:010bf072cf0c09a8e4582aba65c7386b553108
+:010c00a3b051fd18f1c5d97207abf3d5e47cdc
+:010c109a390a4e343d04c1a948b51293cc291d
+:010c20d93be3670852cf978e185351cb11b979
+:010c3076298aca23674952638018d9b1a2826e
+:010c4090b202cbb740bf0eab1774f5153f31e3
+:010c50187acba5807af984893532fc280db7ed
+:010c60a4e34c866d6f609841898a0a5e5e4a3f
+:010c70d559e56676756a7de2cbe0ab2874f3ed
+:010c80349ab7f014884e9aef662c6848d37330
+:010c909c2b74e01161277be6074dceff2016d1
+:010ca0a204a10d585b27326e1675a45693e241
+:010cb0842e46633a3aff118e07864358e6581e
+:010cc0bf799a16acf4b2b69395f2696fcce664
+:010cd096da19dfa20b6935852cebf8fe86f273
+:010ce07aa5d4fe0be7447bb2ca1309db2876d5
+:010cf0677bd6b528ff5394365abd9a832fde65
+:010d0057777f7b2140be64abecc99632c5a9e6
+:010d10db72f56671159cdaf3ba4a4b59b147ef
+:010d204e598f672ea2d93be85525e9c5337dfc
+:010d30f793a25f804a063e171d1dfe8a4104fe
+:010d4025636c85c88af56d09c18593c2c41dfb
+:010d50a826ddaae4ee001d83f9ab83e2bb1ef0
+:010d603967956037b03d78a03f5a7babdaeb9a
+:010d70d4bde07bf4fe44706a7e328935820153
+:010d807abc9fadc37a0e4546a4bd5385fd7903
+:010d909043498ef659c931f5a45bc06f7a32b4
+:010da067bb92fa64e1eadfde8342e7522a1508
+:010db09235b49dab3e11e877864811f05a29bf
+:010dc0785ff9bd30689e0f12b5106b544a2a3b
+:010dd00e7beeccbd8db652fa675152a29592d9
+:010de001ea4659dc19bb773772ec6d05547e62
+:010df0d8778065d550ee57f36c833ada483280
+:010e00ebda37520bf4d14d0daca23520076357
+:010e104cae2305f82c3c0f9d3133e05aa771bd
+:010e2035d4307cdd7015cfecc777c296762d33
+:010e300b9de7d4b4946e83d77238b4534ece1f
+:010e4047b9da668b06b4a005e9c9d6ba3ccaef
+:010e507778b66286f06807d493af7ce870775f
+:010e60900de8fb3dbc7f088f7bd8a07915f3d5
+:010e70d08843c161175b69a9d2e3d05840b14d
+:010e806025725a4b40cdc6b72deef6775e6b16
+:010e90216633f63d7d86729aaea87420dc31d9
+:010ea09e9b6d0c34f38896c3fbae25c7df5ff2
+:010eb03396e4652bdb1946498853a6ff757e20
+:010ec0584e4de174245ada28cb9664a5328b42
+:010ed03f2cb25fb9b30b0425643eff955fbfd3
+:010ee048a2bf898c690b94a1078a2d7ceafbee
+:010ef0ec2c2a7db6e66ad163de97864e87b253
+:010f00cc98a08ba1214e28585ea38a845363be
+:010f1090a20ba6a0b5ad42d564f3155b9889d8
+:010f20a00c5c5740cd5c2b2307098b025f935f
+:010f30d7f7b8eac5eb604618b9dc2543f3aca5
+:010f404213b06ae6dcb81f7a2d772a47d73662
+:010f5059f431ad49af70dc846281482ede3940
+:010f6091520fd3be7d691a642aa61ec8927344
+:010f70abcb381f0a1a7e1d7f7ef97fa2a679d2
+:010f80adf1c2c2b177df4cc610d6cf86929105
+:010f9098b32f5593053617fd57d6f8764be976
+:010fa09be15b1c36928c458d023c798ba508e1
+:010fb0fc6652a09aafe6e7e76bdf0a57247cf6
+:010fc0490fc4ddd8f9bff3bb52fb9316f9bd5a
+:010fd0f1af5dd9f9d40c1f691177571e8bd7d3
+:010fe09dadbe797d6f55abdc2c9c79d13e8b39
+:010ff0e775b611ef8ad6f9ce92e27e64060297
+:011000e01f12406439fd9247eedf498f0507ff
+:011010b81fa8c5650d4c6a840d21ee6cbe091f
+:011020a2f3d1b54149e7a8571e8e9ff6654da5
+:011030b4546abaec59128a580c88c4597f87d3
+:0110408b2c4c1b1f45a0aa5a3bfdfb462009e1
+:011050e3c7d2794ce13bded1ec6061a1579cd6
+:0110606038b255a88c4e09034de288a3c2b59e
+:0110702f5cee2fa10f2065365b6e7d7dab1753
+:0110801f0654bac2e78711833e9279baec86d9
+:011090a72e0ad0614cd42ab74cb0b6885f5424
+:0110a0326aa3d56689f63fe13ad5c3abb859d1
+:0110b094fb8bf501a31b75ea7c3aa4d469c069
+:0110c0f801c065b4d7ccca3d61636746824459
+:0110d029bb50f9ab8a90b9a3b3046d9a60b3de
+:0110e054d61a4eb1cc68be2ec9dc62f542a415
+:0110f08592c516e70355dc5a4e1993d50426b4
+:011100e15c60fa5e16dd44c6407ad26e0ecc54
+:011110b92786b07072b4016ef7bc2994ab0743
+:01112025779b3f40f843dba47a78ed9e14e728
+:0111302e57319313c4ab4751637c832d1a38b0
+:011140590ae9ed30aac720bd0b467d42fa93ee
+:0111505422c098b4d72e6364fa43d7b08de599
+:01116064b59d28d23df098360158d086ac323f
+:011170112c863194265043578f14025ce12fc5
+:0111809aa24e497d3646095ad42f0f3b635bb3
+:01119053734dd833bac968c9f85e2b9447deee
+:0111a0ad3daf516f838de97e6896c39cb64a45
+:0111b09cf378961be9093aa99f57e2fce42168
+:0111c0eafb324e21a157a367d76a220ab4447b
+:0111d09961381736e748bedae234aed0131d91
+:0111e0eb072ec363d1edf3077519d8436f2e79
+:0111f08f2129b7d212ad75eb699d779602ff03
+:011200a6e520aef9e84be0ad6b2ff0eea1e25c
+:0112104c8b06f0a8324ac21b8ce77c651eab1b
+:0112201802fecad4e3bec9e76085b22a5b31d9
+:01123077cc34f846c45f30f8f1bcc59a614152
+:01124046b7ea291c0e1c40373b725557dbf931
+:011250e19555b477b392b9ffbbb93676ab5f29
+:01126083edead0014b4b898541f24404693b26
+:011270c2b2764316344598ff5f2570099f56f7
+:011280bc996162347df7f90def0ba8abf25775
+:011290ebe4f1a1778505048dade5c76bfad33c
+:0112a04f039a223ddc0038d7945c2b2ca3a555
+:0112b07475cd390bc914aa2b681644d16b6b22
+:0112c01b5f6d929bd63a31ebceac83e090ef55
+:0112d065130afb6f7f2f9635a317d7cc1324a2
+:0112e0a22de8c99b76d00855e268fac59be3f9
+:0112f0c5340e41da5089fcd72527e6a318a0e7
+:011300661cedcd89e890a381408f67673570bf
+:0113106f85263100f5bbfdf61f43040ade831f
+:01132011ab2518b57a49d31e8f67e53fabdbca
+:011330fbc31aee69cd013aef71398f243ce790
+:011340da4ea6e9e60d294663c044a2440fe49d
+:0113504deea5b61809b5f98fbfc83acb085653
+:0113604cd2557961b7523bf7e4ca65e8080c02
+:011370e700f0f0411a7d404d3fcaab4260596b
+:011380cb8eb593cb79e516ff8780b71f5a9721
+:011390a261f8eebc9d9a34b3f4c47b6caa88dc
+:0113a02e6ede69a4d89a03932f2fce91a3c9d1
+:0113b06fc54d446f0ec3c1454574e881877c10
+:0113c0e567425a6fbf50eaf89d25e0d90d5af7
+:0113d08bef97315fa4ac71fd89f7dc9287b6d4
+:0113e09117696797df594138e20d380728acfc
+:0113f08a1ad2827698047d7ea1107a00611b3a
+:011400912359359ce447a75f879d876a9a0cf5
+:011410c6b1901ea69410e275268635ea4c6e28
+:01142080a061ce6b4e622f13b8b4969dbd13f7
+:0114304c0b17416825399cf37a4107dcbb7ca7
+:01144092ab260a351f84931d6798b82696a87f
+:0114502debe568f68af6bd499a8dd6a83c7c63
+:0114601b3a06778d899bc83c5d71ae2975b5e4
+:0114709197bff31947ee32fcd36a2c6d953b97
+:0114807e7169d912bfb625177b419fc00491f9
+:01149052cc1d7a78a864956c3e92f03806be19
+:0114a08cc388502946c8417d793302757c4f17
+:0114b01b20318e07304fa0121172a02b269a0e
+:0114c05b94cae836606b52f29134936c4d7b1e
+:0114d063ad147419fd3d998f51930007e18a8c
+:0114e0876cf92501f13205c66f3ccc0a691a07
+:0114f069a897dcbe413a54505c626b9c05c0e4
+:01150054b3699f53eef1bbe32490178adfc612
+:01151025111b4f0245426b0849a4f79a4346ea
+:011520d87e1ed66caa4741ddd0e31d5fb47750
+:011530e850c95edcd4dce0c8a09d3bdbb3f990
+:0115408d37ba6b60a65b67a0526d4ac71a720b
+:011550a68d6609e73c96716348586b4b153b21
+:01156022175def399e191451b5126aff882048
+:011570c150ea2be3f5f177f778fb374757bf66
+:011580840327ee9def0cd201edd11bf9c3506e
+:011590082cb7a33d9f42b32cba6ad355a08e20
+:0115a049aaeadde2f3c19896c70fa0d5ad19d8
+:0115b0ed4559ea1ae63824c39ce6c8f8305e09
+:0115c0707987098829e68028e453ebbd45c318
+:0115d0bb76b45506e99d41dac9d5e3f02d2ef8
+:0115e0fb7552972981dbe31d3284ddbd81ce3c
+:0115f021c700ca1f4d045b30574ba633297fc1
+:0116000107503f97c342654e8656091a203f5b
+:011610db97147a2ae9a249d05e94658d537488
+:011620d9be9c9dc713898d36281d4e43db8ecd
+:011630dd5e4f09aa9f3bf803a479dbcfe9e712
+:01164086db58b8d18d3283c8b8a9cb8aad921b
+:01165085e682cffacebefbb8e5d70e680e19e0
+:011660bc6750c4fe49b165120c61f90c60871c
+:0116705ca39b1fdf3c13bde5086e6f3d13c0ae
+:0116803f7c491ec1fe68f6735a7fc7388f638c
+:011690061133e87eda5fe0ba1fba1e4e93faf4
+:0116a0fbfee238c290fc9a803c8fa211feb0bd
+:0116b0e21daf86883cba23dd64b81be91bb0b9
+:0116c091b61fbf64ec11602546f3fc4f9133b2
+:0116d07be52ce931eae62514671e604f5d0800
+:0116e08ca5c045b848bf86b6e1b6f2ad8156d5
+:0116f031bfb96a6351a97d09fbd1fbc26c26a9
+:0117000d5702ae992afc413d2073d4aab88941
+:011710c5fde51c00431b9b2a82fcd964a572a5
+:01172014bd6109c9303a1461c1e9b1220d4572
+:0117303bdb3edef376d7088fefd42d6753b8d5
+:011740105e81bd2e44e8ff09abdb4aba8cb0aa
+:011750e2780d79838a0a22a72c77c891d4a202
+:01176010d66b4f2d11b75c23fe3500bb28ebf7
+:011770606dabbeb1a1ab5e431e7f8a3fac78f0
+:0117804c5cb8db1d5cf095127ace6f2000d861
+:011790f45e89d03e9eace5d2b69984432dc6f0
+:0117a0891e0b927b82a46ce9d0e0e8807e0015
+:0117b0c1b503c6be52da152f1913d5770e6802
+:0117c0ef10ee0feadf3f651b2d72bcced767ba
+:0117d0b0709e27d2e8e1523f45895e9737b41e
+:0117e0621166b1e480ba143c8f43abd1af7cf8
+:0117f064731758fb32199f2007d21be62ef7ab
+:0118008af8c70d1618d5b33762e2dba9450bd3
+:0118102074dfe45a755324a764e3931686fe6d
+:011820f0a2238179bbb15bda160a7e4fcdaf0f
+:0118308f3b371329fda931688fab270362f086
+:011840fa859424d6b38155607b9a2f9045bb99
+:011850c3eb7216f5f9195317cb2caac8687f81
+:01186028697774bf3360385c910d6829bd49e1
+:011870fcff653ad29e9d42de3f78e3a5ca0325
+:011880993de7a1a16c2641b520f944f518d307
+:01189048960349527a9295dceac47011e8972a
+:0118a0cfffab9cbe8973ea4a977d1edd95d8e5
+:0118b0ab9bbb3f1616aa259883c88fae2d40e3
+:0118c0962b7cf8643da487e6eaf92b83a53157
+:0118d01697753b9d7dde445adb51b7e4d27887
+:0118e0eb10e2fc0d2aabbb965bf503e03e04b9
+:0118f0416d892779651c097764d42545fac958
+:011900d99ed8b5775c2c3a3fe33f2c700db75d
+:011910b61bbb47ab0656fe30a082b97fd7d525
+:011920dbca79f5b6aa88fdd4ebfb5950c19512
+:011930ef72dd677231525b3d4101261d42654e
+:0119407136d3bcb80da473498307ba177bd93d
+:011950be3124265798b1892e8ab3031087c521
+:0119607f6577e2c8191ba0366e839a9978140c
+:011970a82c3f9783b5e66e8b148420b99e0390
+:0119804daf4fc234f06f8200091d682ae5e82b
+:0119901936690e0843c9beb5134cb70b493982
+:0119a0badaeb83e74834c6ca98195bd44a06b4
+:0119b0fae3d6156b8ba0b155d9551df2816d71
+:0119c05cb6052ad0a6757dbd71b21d187b2c71
+:0119d0b48c9a75cbc88172fb5dcb2662dd058f
+:0119e0fed4831503191b19fcdfc1d77d413fcb
+:0119f05c5e9803b1d6aa4e0cd21a7be62ca421
+:011a000777a8e45df4df52302ddba2f2990786
+:011a10b2ad79d521092e012bc10ce7571ab0b5
+:011a2052ff6d06d0819277f69cea034e363354
+:011a30cdaee00b76c0a5687e4d99ceb8cc9541
+:011a4003c9005d6aad5934cd2e6503af8dcbc9
+:011a50ad4738e1edbd0c4eeaa32939d19cca9e
+:011a60cdc4d02458e11437ae4f12f471946401
+:011a70512583d49859d906c5a58ae31e735a57
+:011a8075acda2f9487988bc70803391f9184b1
+:011a903f6817b969f7baba5bec806a6a86aa5c
+:011aa05fa597b914d217a779b189a72239a2c2
+:011ab0447195c524d028a4e013b6393871e843
+:011ac0a8bce07828c422eb69e63684bd62f6e4
+:011ad007a3c20ab891b775a1f40910e916a1b6
+:011ae07308d5fd39c390ba871eddc99ede60d9
+:011af07f8688b34b32becf945083c4cf73641a
+:011b00014b499fc95d88bf8a0de08dc40d730b
+:011b10e787ac4860fd1ad5c6f2a506a284cd52
+:011b20c3a21ba3b2ef0a225789f359c6b1e104
+:011b3090fa3671bfe1f992c0e8fe27b53407ec
+:011b4067a7c9ab72ed6d56815e96803cd7102e
+:011b50a39fccb86b4d7baadc25475d836b8209
+:011b60b883602da3f89e56b9fee9b357f0a42c
+:011b70952184ad488e06ed32b07dd846a97209
+:011b8024fabf1308e1b89189d574e7bb1208e2
+:011b90c33890afda4dca5f10645a7ad7c5d11d
+:011ba0748708d410088d4832e23181636a8221
+:011bb04ea8093288579bd3fdd1ca9cc75f9b13
+:011bc0797c6beb1bf2ffe3f105967f9cc4ebc9
+:011bd08aa3794799982c0d6a376f1506b692cc
+:011be0a971e2896bd58fc6c254765d4e2a0487
+:011bf0c513ec06f157aa97da03f4b8ddc24027
+:011c00b5eaf0010fc4019e3d538072965dbbb1
+:011c10148af699c4cb33d55701634d69683a12
+:011c204ee161d4e0ea811678a4ddedd7ac818b
+:011c30a43c46605d341fd1b58959d63d8310f1
+:011c40d3b0e1fa96a955865363726d8fb35ecc
+:011c501ceb76dd273345510e159d8d2b778d89
+:011c60dddd5c2c57eed2ec080acdf914b9d25b
+:011c70ed92ed9c7d1e285ea82f07e31f8565c1
+:011c80d48044e84da5d08785c6725ff82e0b9b
+:011c901c4b69cbdce0b074165cd82befb85f20
+:011ca0e85e802959936d32b2ba6f6cce24ba71
+:011cb08aae008ac18e5c71af813d3c83d41f48
+:011cc0dcdcc6266abd6c5e06107a411cb89388
+:011cd0857b3ab058432c35828ac46ec31305c0
+:011ce06cc5907358c41fa4a2e1373281ae70a5
+:011cf0c0f9b48ccc09a6df5dbfdae5af87b3a5
+:011d002018b4aaaf50ae5cd2021ff9b4070257
+:011d10a27b4d0f4d7e173da8b7e7210da4185b
+:011d20c58a797f3ab14baa0770ea937dbcaf7d
+:011d300bf21fdaf0da05ccf84d54ff12cf3a36
+:011d40442259e300e893c9add9a986e39cc77e
+:011d5040a0f46459aafe77b84dbd8e19e63f33
+:011d60feb9b79ad64585174d5758f4812a68be
+:011d707f5ff6386e75c01eceb5e96ee8e53e7b
+:011d80bdf3f4f87b220a9dc3b7871774f57c6e
+:011d90bb3ebdbcd7bbe9595462fc840dfed57b
+:011da0448ff602d08b958df6679618b64c1ce4
+:011db0fec6e1e973237d5dc60f97122f9eddc2
+:011dc0fe92ffc7a96246319d2854bc26700baf
+:011dd0870386cf01d9b36d15b6c2d247cfc9d7
+:011de0fe8f099cc6ace15955461dc9c73d5bfe
+:011df00282ddbf3e421e5753d6c87cad629261
+:011e009bcf7a59b1f36b07c40d105d68a457e8
+:011e105caa4c0c073de5340da828ffe3913db0
+:011e20d8aa7e8b8395e52fee5c71267a186558
+:011e30377d12a7a5817db6d74af7f5a803ea11
+:011e40c7e693fbe1aef0614fff317cd441a3a1
+:011e50d7e418854d23777ee40df52888a2007a
+:011e6086803baffd4a033e91be02c9dda1a712
+:011e70e15f132fc23d5077b892fa91f300f665
+:011e80e815041221be67ad8cc5bc01d209e9a0
+:011e90d927801de679fd0db3144bc341047b98
+:011ea099d0c0242056ac3938caafacddc180d2
+:011eb0cb97b2489c134676087da2ace9d934b1
+:011ec0c679fad5abdaba97a3833fea983f7f4e
+:011ed08835e9927f594ad5e69d698ab2e14a54
+:011ee014adc075afe0e676269c8764c5815f6f
+:011ef0a85bf6b6aad5e38a4f95a5f1ea6ecd41
+:011f0042856dfc9df9570ff613e0895ed13480
+:011f104429f7fc9b84b3a7aec8fced00870164
+:011f203ab1c3350cc590eca8ff962cba376000
+:011f30dcdfd6d8db40dad9e6acd7900ee0d8a0
+:011f40e1a7b4ff56201bedc4e057c066e00618
+:011f508d0a7cb7b748074e709e69760d2c47cc
+:011f609305040e5ddf04d02fe9819285e2ea59
+:011f7099315b915fae33edb005a1bdc8f45844
+:011f80d3473d1b8bfeeed902f633584cf81d74
+:011f90f21307c95782f56490187d69066209a3
+:011fa0ac7295ba67f346b0a887a68a1d6441d7
+:011fb0edc14b10f88abb1826f6e78c33da705c
+:011fc0a9c4bc4994b9e1f321945e6ea8a7a6d4
+:011fd0e3740b41a509a2a62e6fe31fca2c2c7d
+:011fe03e999b2002f18e182f5a0987178038ea
+:011ff09f5b31a00b8a4fb7aefd2462371dcdab
+:0120005a659183bb1953d0eb5265141610e28e
+:012010a7e2274a7e9cbd39aeb1c4af7f6152f2
+:012020d7ee4ff882923f0d8c8d0c645d85cf48
+:0120306b36076ee42d2ef3dbf177ce90c445e9
+:01204020e09ee3c8187a3b6904d087fd8f7627
+:0120508894da9fbed0b5bc4fb4bd243e9f7894
+:01206023011e459727c6941d3e54f4247b2fbe
+:012070827e5936048f88d6e2d7289d0a0a70cb
+:01208029baaec8649daaa990d61cf709e9a85f
+:0120900a01d5ddb613d8d90fba97eea65f8a2f
+:0120a0062d74fe99d2c190b3acd5b39248a467
+:0120b09ee0c5c6aa6b35af58ae5de0379d4617
+:0120c0800b963dfdd7ca9787c6042df621d48e
+:0120d075802ec8359e448e0f76a81cf5f642c4
+:0120e0a8e188fdac1b49491effbc555800bef7
+:0120f0e6448f0d05e8aad6c3cc3fd530b5720b
+:012100c8508470609f7b16fe9fe213ab3a7e1c
+:012110a0ad5b0ea05f5cc9a5ecaa58bdfeb023
+:0121202fa0229b595434f546d5fb345feabdfa
+:012130040769d55c3adafbf9ae1a21ee0aa45a
+:012140f5ab04148e899453dd37fbda43276c53
+:012150f16bf54fae1aa94f0561391939b2b515
+:0121603d0e40b1b97b418afd475731244237c7
+:0121708cb506ec4f1c848348e02726880099af
+:01218066661ea739771c4547e2783f329086b7
+:0121905a1f50711826b300d681f36dd17ca965
+:0121a020e3f41581889aa2f45a18576a9d1c90
+:0121b0dbf22b8017e41cd7206f643991fa3fbe
+:0121c02340937011bd3c83e2ccad9701a214a2
+:0121d07a75e10828a22b160387f6bc7081c726
+:0121e08ba768f094c41b0dd1df9e987a9adbf6
+:0121f0062150d76e96342682bce38c3186029f
+:01220098f2333d3a7bb80d27d7be64a16eab9f
+:012210c89797d9d305e3495d63005c104ec2dc
+:0122208f0f281d5904737b75147bb0e0eac007
+:01223089a0109a6be3cb948410d3aa4f9d5f5a
+:0122406d031179f1ebf5dacb2fcf8a0850662a
+:012250b5742c0b63c34406b327737c47d617c3
+:012260cfa68284257faec236f3c44126eb9728
+:012270af908776249bce9823c5b19aecc8e870
+:01228043dc1637446be099108fefb81f572e56
+:012290817678c9a6c109ae9abed8013cf9f443
+:0122a01eaefdf0952ff66df3ddcd76b014940e
+:0122b07db8d46c38ef79131842380557f79e7c
+:0122c0db8e959e2330bb8b7e86fe3240d42efc
+:0122d0e37e55cb0a78ec61d419d66bf00c2cff
+:0122e058ae9dd69cfba8b950b5f1faacdb38eb
+:0122f036091ba3e473d735f62afb3935bdf384
+:01230033e0b4df7c9355e161128fb333aa6c1a
+:012310e5b105d1282dcda2dc3de19a483ec112
+:0123201f94de82133e50b88f07e01c7c9af1b6
+:0123307d6b8b269f5cd71905f6d022c0990248
+:0123404322442697695e36deb6c21aae32892e
+:0123501765b29203ca5be33188d305e88c3dfc
+:012360f121670d1755bca20acdc79e85cb6cbf
+:012370338fd3c885751adabd40cadaa374269c
+:01238093e0692ae0d3eb61f17d3ed8badb41f5
+:012390595538b49c62d89ced092e57871c8d27
+:0123a0e3e7c49d2b3553c8bd6cfb70f290dcbe
+:0123b03def5e8c87b3cb4eb262e6aed0647702
+:0123c06f18d4815a2ccc6aa9fc21254dea1000
+:0123d0e71088939eb657537f30c135dbb474ac
+:0123e055c3dc507b96bbb09594d68097bd2a57
+:0123f05b45f4c9e430832615380099827d875b
+:012400b6daa7069e136058f5393674a220beda
+:012410323f51d573b7c761081e38cfe9d56316
+:01242020d47c5a195facf518c7ed1bf7bb31b1
+:012430216ab607e09ed782a878cc98b6e77c3d
+:0124406385628f5f5e31353f4b617a5a02aa14
+:012450b170058b0e7c1b7da7406cfae3d2562a
+:012460d8932b25a3db6402ef4d1e9a782428ea
+:012470153db16d7903f35bbb62bd2e40852a9d
+:0124800a007fdc41e981ecffcb848d26da005c
+:01249091913be6a41b2dbb78c3b83d770f567f
+:0124a000947e811376ea1ad3194ab33ef551e6
+:0124b0cd348e0660273dc6ec57f6ee278152a6
+:0124c020f4a356a1b94baea89e86217584b5ea
+:0124d079c8575866b09359d6c3b760509f2902
+:0124e09f747b6ea372cbfe2d5150cd92131c40
+:0124f0ffb0ed976d60862404725ebe780c0f42
+:01250019bd8865895331b9835e9e4358d787c1
+:01251072bc36e0cfc1d88675836dae03bdd195
+:012520a5ade25604d89a675f31620da4163798
+:01253058c9c9fb22e94e90be0171d92f51e0a8
+:01254087ca106283fa06e1bbcb76c393c972f0
+:01255005615af3e55cb96a901fecc3ea1e8e0e
+:0125600274f01c9876d5e13d8418c6fbe2c8e8
+:0125705839409642d87a5be8540a36d14d0563
+:012580186ff1e2af0ff9a2ed3c9e654794e385
+:012590f352b8d374b3bb092da9c5d6cc90961f
+:0125a00ddb327056580fbc929a8e42de2ba63d
+:0125b0c9d773f774a1f50d6f1641e7f921925b
+:0125c0130f763d5895bf4dea38ad2903415794
+:0125d0b16f20658caa2b78b95f9b9ac49b75ae
+:0125e0c10df1aa8bbeed0a41f1029acaa32473
+:0125f03eb059dfd80ea9a8e9638277ba8c48ab
+:012600adeac620ab4d30876b6cc3240c8f7d57
+:012610c0f3e8adfeb8cbfab58b5513ab896e4e
+:012620ae790547ef81bb5d0ecc054021654d80
+:01263062354a0b4eabab41f11f035b68486c5c
+:0126408065d8ef87383e1c1092fe83a9df83da
+:0126501c5008393561e7afeb905b2dc5236ee7
+:012660415b3c39f5d6f6f940fdf12f60b729d8
+:0126700fd03f907e59dd4f22533ef1a8105909
+:0126803dae557a70c773a0bf531cef5a243c6d
+:012690cd92213e6e021d867aea5a668a33b1af
+:0126a0094726f6abefb3f791478e1119d77f94
+:0126b05222dcecce17a405dc3ce5c4bb7e006d
+:0126c06f3ea086e8d4a75d4e555a41fa7140a4
+:0126d00dd3a679e5b10185170ea58700d25bf8
+:0126e0cb10e7c646f3eb46dfa14c7df79058b1
+:0126f090d7e08219d133399a907930c93a73da
+:0127002973cfe2796bec84e78e60e0c720f227
+:0127101b73a6b498d8c8f061c9553c9eb04fc2
+:012720dd631e683cddbefefd343577f90f897e
+:012730bb3100e8ad196be28ff265bfac3c153c
+:012740f49106065eaa5500fa3d78946b6610ab
+:01275010853aeafff00510c058bd280caa1853
+:012760f681d8593662d9daa1266778b634a12f
+:0127706205d9164f7a49f8c84927ac419df1a4
+:0127804296334b5042c35da2d4744caa4244e3
+:0127900bd3e4bbe250fd8028c0cfe8a62005ba
+:0127a060495bb7b4f65927780fb86901cb313f
+:0127b0449e9fac67e0cac8745c1a0b276b819b
+:0127c052fa35c87a571ec54d4489791a90b1e6
+:0127d0b12ffe7a8d82888952cad4e502ba6c1b
+:0127e006294ccb5e7c73f193061e1804038604
+:0127f01f84812e71577e0f79afb05bc818c994
+:012800dc93b037a964cb29b675d25783b8d2a1
+:01281041111bda3c8149bf263720e6addfe262
+:012820d44a116619fe5e60aeffb98ea22e181c
+:012830c8fdd0a064bd05242ddcbd646ea82417
+:0128403b016108f3fd361276e84898fcfadbac
+:01285019b6135de28442a3e37731859f5980cb
+:012860ba34a80d158467baeb491d2c9447e24f
+:01287043f86cf9663c53b934611789da5c79d3
+:0128800dc8f81ad0505697290bedfd5a0d95cf
+:0128903dfc772e5dd8ce2554410d09145ca045
+:0128a01a1b937a889f4ad27fc14d020f71026f
+:0128b0bfa51d8046a8ef6abd00fd484dae936a
+:0128c09ff88bb20ad110b810fc7501d502a258
+:0128d0b21dcdbb706a9ba168e2f149b7673d53
+:0128e049465824c0d9eecc50cf4e95e6d293cb
+:0128f08043a0b452b6199df9dafe553b34b79b
+:012900f30aa3b6a03d897bcd9b40cf47294b0c
+:012910ce612a56da61bf7f7318234b4051b954
+:0129208a286b1054daeab04eb9681f8f4ca12f
+:012930c0884f9b7dc465a1950dd2e924ccb2b7
+:0129406360df042ab0183aed360d74b083da91
+:012950d3e74dbea4a0299a7b2503eeeb6a04c3
+:0129600210cea9a4599c566c1aa97d6e74969c
+:012970520db816357893c9d9f8443e8ab309d6
+:0129809b60956dcb3f3e4db50eaa2bcb7db25d
+:012990d9c6254fa8aa63fc3b3a665c75940033
+:0129a076e136a351a2e53fb262b0db6dc8bafd
+:0129b05861a57139d8ae0f3cf970fb5dd70a9a
+:0129c0d5096d8d84e1d6cd3a302e225367ce76
+:0129d0609ceb6cac3e4fea0ae26125e92cddf6
+:0129e01964954d0cee6cb5c59e59d7dba8d06e
+:0129f0d64789d325eb1da49c84ca2479b85c5a
+:012a00306a7618a75cd7fac1b54ebf8025c043
+:012a10f2e04401d1dc816a10e44dfd3d0e0915
+:012a2034063adb6c079d9fca54c7cd5d20ac8f
+:012a30d71982d4179440598e9b68c90842aed1
+:012a400db7b3339d92e39bd9a08ce72509a77b
+:012a50496af715e0035de7baad6bf76aaa1a80
+:012a609ffc6aed507dd6738baf611c9033f3fc
+:012a700162b063400fa7ae27f58c97d28a1bf2
+:012a80bef095419dc44868d5257b6350574cac
+:012a90b00d887cceefe90fb651fbf1d40ed72b
+:012aa0963b1ee9bbda7b821ff58fd5acdefb8b
+:012ab046a2f6a8a9cedb84b21fe03a4b2f58de
+:012ac0e01ad5802e048d5dad34d97282b5bd58
+:012ad0acc725c856a05bb71ed882b6c17d34fd
+:012ae0c07965d00dcf683b3195edbb9d890f4c
+:012af018476763260b11f7f389779b47cd4ac4
+:012b00ada23f984355e078574a978dcab3d324
+:012b10eb677eaf748b2238f466d63dbc4defc3
+:012b20db4d4aeefd5f7e0527455205265ea9d8
+:012b301bba417cd5ef7a11c5e702578a8e92ec
+:012b40bab58d8ed53d4b5e70067bcce8258d86
+:012b50914509807e4fb21c50c1a9df938e8205
+:012b605c306eca4f97ac34bf1bd91fa72a3919
+:012b705c602912e37e0d64cee0a13802f3868d
+:012b80fce0af43b1c8af552104d54d383759ef
+:012b909ca7adee8a8992feab8567e592262b2e
+:012ba0c3c61daca7df070eea8549663b8c022a
+:012bb076a0eae56c8b8360512d4f0c49b0cb92
+:012bc0e1fb8b1d31bf03e4a5074ea2edaa30ca
+:012bd05f21f2054ae67bf61538061b6f2c1944
+:012be07aa9834edf4d3f2e3ea882293fac20d5
+:012bf0f8d813fc5d5e92ebe320bd4f291d7b00
+:012c00a30255a6cdbd5c262d7f44ceab13579f
+:012c10322f31ce18d1afba73cf8c3e329f6b65
+:012c200f769934dc84001efbf652f8acac0fd8
+:012c30d1aff8715d30c45be5e9abd646b159b6
+:012c404cd9b55118b7ab1923ccd1048d7935da
+:012c5021216b95b19228767ace6f60e262bd8b
+:012c6077ea4fc8039657221801943e4cd319ad
+:012c709e4561a864842a0f317a204eb985a875
+:012c8038091ac9a0685b303356664bf16a205a
+:012c908610c19cd746db8befe6cbc14e1c64aa
+:012ca0db072d6a67519474b3fd925ef4b62a3d
+:012cb0c5e94563428b6a166048c902c43c2bbb
+:012cc077cc698de8b3584214af53edae835612
+:012cd0e3ff5c7a09187086905b8c422357e86c
+:012ce039bf1c9cfc3c2c4673eee22e6b1aec43
+:012cf0979c3c6bd47a32350acc4dd7a6260710
+:012d0023e616521721afb0b57596d9dca80d32
+:012d101406c1d8f64a20be24e66c28f380a7bd
+:012d20d15415519f7b03eecd971dcab7bf585d
+:012d30353c7090b8d0a1e7ebebdf01a2bd2536
+:012d40c50082bb193719a6854028fffe65671f
+:012d50861d931998d577f0bd08237276f57866
+:012d60f93535d8657e5b677e82869ee1631992
+:012d708ce97d9a98b2aa07c1f5889b3ea0dcd9
+:012d80be9bce096041bc98ee9193d013f1609c
+:012d907f0cfb87e652ed10788bf59958a55365
+:012da08e4082d222240a23808488943b10d2f5
+:012db01d31d05cebc01e726c7a24ed2bb45479
+:012dc00ee4ba466813bd20d23289a18a60fab8
+:012dd0cae4848f9bfd1e8f56c313124f3fadca
+:012de0cdbe1357983f5a6aea505e8c2e323cfe
+:012df07283a45c4855ba45d0a9818206d50b7c
+:012e0053dea69d0a5c74ae3729ca830bd4654d
+:012e105ce23f2a275643b8e97ada0d8563c837
+:012e204e5d548304edd42249a57d36ce5a3778
+:012e309af3004be391995a97ad9f2cc2a9af4c
+:012e400c0abd085362ba1fed625b607d1949b7
+:012e50f945382d9a9f9b961814847961fae33a
+:012e60fa59dcfa4c2ffb98ae61357d4eea826c
+:012e705a9cf228f6952b6e6f4edea81db3b1c3
+:012e8037b7b7e4ef58eb9f20f42451274d5dbe
+:012e90917acc4f7766a9774700bd0cfa2df9a3
+:012ea003785fcf3c696de21b02d43bc9e279e9
+:012eb02c7a3382365400a79df97aea97f2c44e
+:012ec0fbdee35ebb6a9a6db09faec138d57ef1
+:012ed02ae39938ddfdb93997d9a3df5f68b383
+:012ee04e0b4e2ceaddc0f019d2d93eed769273
+:012ef0f74604e36f7dec66b6b78a753d4e75fe
+:012f00ca541b568d0e2d3be5d4d5f315afb2ba
+:012f1066a780ef2357f672adbb72e0f9a7de2b
+:012f205787184f58e5fdd2e9e086017e0ae9d3
+:012f303464512119ce7b9d68cb75474c55aa71
+:012f4081453747879cfdab990b1c34ab4dc7de
+:012f50459588411b4d4fc8960b460cb0ee25fb
+:012f60bbc070cba7ed6c2c85fe156c153b0fe7
+:012f70029b4768e9d9d63e7e2ab4b352b3ce13
+:012f80042653c0ca60e6d778ed33ce4ea30e5e
+:012f909977abcc68453d4bfd73dbdbea08b8b3
+:012fa075d6495ea84a8b8bbd61bad627d96d63
+:012fb005f06ff73d3ebfee344f7c7b2e2c1571
+:012fc0118ed2a11f4add9e904bb80a433baace
+:012fd007e983992d796fecbdb50c436c5e0bd6
+:012fe0eeb96ffd80f277cf48332b5b1717cc22
+:012ff084da5a260e9c4b9e61b69f0b1ab905b4
+:013000069a001bdf811d0f79d2b905178f1f5c
+:0130105ac286ad9ebd0fca2ad2475e44995d7a
+:01302059e61ff89341cf3ce1150db55d48e3bd
+:0130306e7c2c11884918020a3a28953e2383b3
+:01304003cfa51a53e373f950252063f2b25507
+:013050bc2b34c107926c9d2d56ddfd7a3eb365
+:013060bb70b17961de61bc2f0ecec94afb19d3
+:01307082643a44f871a1aec0e70c6117fdcf1d
+:0130802c935f2cc2ef17de4dfcb88d72bf6799
+:013090a4a502b378fe31c2521d0aa5276632bc
+:0130a06edbb318fe1cc7391a10033659adfa24
+:0130b0e476c455dce02667f229db24394c534a
+:0130c09408495bd198c80d70de966ce43ffaa7
+:0130d0d81ed00e86314e87a9b68e1ca493ef4d
+:0130e02aef9ac2834b6953f4a784a3fb8e9da2
+:0130f0dd6886fa55fe7278cb8ecef1d2e917eb
+:0131004dcc41d71500198f97a546af5c142343
+:013110e84d94b7fa8765c0dd02d6f5397736a8
+:013120d3253af1537927896d09ddce75a28fcb
+:0131306ccd2b5aef45838d806a03e694cde138
+:013140b6370c1231e47bf483003fcaaa9179cb
+:013150d81e97e9483c1f75a4151227d7d578b8
+:013160f60dafd7fb99b6b5b1873767a74fbde4
+:0131702162ad87c44e54e52e6624f03e37bc54
+:0131803475dc43fe522f336a31e1918363bb9e
+:013190e63f43ad64170386a622fa5d3fa97163
+:0131a0a50df76a08b1ce1a7eff0201a955f2e7
+:0131b0c073b7ae1db16473e75babf630bc61d2
+:0131c00d544e5eed2ae7fb5f1de0e092898553
+:0131d018c9c94b39f00a5a1b60c862f0678d5a
+:0131e05f0e7c5f1074f538e9678b3421aa466b
+:0131f054b564478ed4ee75c114c5b47853e509
+:013200dd664d3890ad49b3653737810cb2863a
+:0132107d5f2c504a2dbaaffb56335531a63fbd
+:0132208c3ebd7821a4c2dcb06bd9a26e86110a
+:01323076f0a7fea4bf5213927962f4587e91c0
+:0132402a2b14ea4d5167e3f13e8b5493a25d7f
+:013250d6ed4ec6726b2e1218f31b7b3c8a7269
+:0132608a8552c1a590eb0a1bf2f3ed778d1fe7
+:01327091300d6d444d27cdabab67908fc265de
+:0132807c63a0ff407b6546af91bd32ddecd55e
+:013290b5f976d1f02660e2538003fbc8fda200
+:0132a0264dc5207feca7ae7aba977d74df153c
+:0132b057f429e695cf4f45ef3f97185764137a
+:0132c0b0063c89df51d16ee638cf96f715f67f
+:0132d00e85354b9409b37f7060ca6e2b0093eb
+:0132e084fd37638d20dd8fa7fb197bdcd8d668
+:0132f0848309813c2791d7cd61851b0901ee7e
+:013300dbe2a707a3bef1aafc7a93e163b03395
+:013310f51a99485e7745068687241663a992c9
+:0133207c420883900af475d5dd584a934159d6
+:013330fb0113b057662a32ba26cf7751492624
+:0133409f505c08a55af68a063fd0e8a3150a8b
+:0133502da9cf319654a857971bf42992ba169b
+:013360ae6bfe2384a3daa359b44e908d3b18eb
+:013370e32a1c219ebfeeb18d82664213e821b9
+:013380c323b29113a3a9dc2a7cfbc68a371065
+:013390777195f14557f5dc41034b66ae7f9170
+:0133a07859e0d4504aae5983d256654544df48
+:0133b0111b4d6d37721af046e27ce6dae7c492
+:0133c0798d00c0f4c77cabd34a94384ff9cd37
+:0133d0fb386585f247407446ee86a5eb117923
+:0133e0356fa44471d2e2b811855c8645ff8cac
+:0133f0ed3abf29de283252ce02abd501302150
+:013400a9b6d610084052fe3fb39d1003884052
+:0134105ce17226c71e0656ae96bb59ea1c5723
+:01342036580773a35e85c205988e3b03e3cf33
+:013430a38426eaedb0729b44ae362170914021
+:013440988259c04b0d83885f96a475e65c3122
+:0134509368e6764525d28e121d14ce639828c5
+:0134600f6d4a975caff5dd9f25cbb869e0ab6b
+:0134706848c75298600aa43858176280adbc3b
+:013480f0ba3e221d45694d44e9e4b5acd2d164
+:013490529146eb05a034128bb02404d605a4ed
+:0134a0cba337f3a02f65f7c701142bbb9721e5
+:0134b0e75d49781abf12c9d92c2ae1cc465325
+:0134c056869a882530b14f59350accbba5ccbf
+:0134d048b7b5077d0f1cbba69a9a8eb73fa62f
+:0134e02b34d47066ade119439d5a9c28ea8864
+:0134f051904b32bd96faf6f2b51190e10effd9
+:01350035a60707e7b22f347cbfe8832e91f153
+:0135105c33fea2a4dd0c42fcc0eb3dcf2b61f9
+:0135209b0473e9237fffcbd9cf59c89521df58
+:0135306fccf6880915208cfe4675c53f271168
+:013540a049d4bbbc0d0d8ac1027d32a3c56b9f
+:0135502feb2c09ace4130052a5f88dcaedfecf
+:0135607b747b49b83d608fb07623101920abd4
+:013570f9e56bfbbbb849c77e5c9fd4cf801bd3
+:013580428cf9a3f1734c0991d9966256351b5e
+:01359081188b9fbb8241db572b0bd2ae3a9e6f
+:0135a08c2dbcde8b35781e5538439d3c5d96fd
+:0135b0b1a5e948480b648e97652a4b32e0fe32
+:0135c0b7d39e821e19219f670c5ab4ee54aec1
+:0135d0ab9d075e260f49370171cd1c226230e2
+:0135e069c9dcab3fd0cfb5ce1fa2cbb77cee24
+:0135f0c57206c47ed97969bc9d66a683386347
+:01360065f12ad28516ef1bc465b8b59a35f010
+:013610957aa8b1590a9255fce6ab72ebedc41f
+:01362094a7000464894640032056cb0fe64cd6
+:013630b92e28a54597ffd4f1b15f508d325359
+:013640d17169c122f02d2fef51e5e2839928c0
+:013650c4a92f1ed2dd3f006136576d21b4f284
+:0136602a083733cc9ad144c216d5927fa6796e
+:0136707d1953fb0b97a44590c3ed3040615aaf
+:0136805316220652ab6e2e28c0d5720113dfc4
+:013690a349ac7cd27340e2eb9db3e51cf662cd
+:0136a01997fda4b6d0ec9f97d968f291a627ed
+:0136b0a80fa9ec2d23f84faa72a9a14ed43c8e
+:0136c07245ab953cd721403b514d1248109977
+:0136d0cd152a02e1cf215e567f16e57bdcf3fe
+:0136e0b05ce4c46aebd1950b4db1319f1324c3
+:0136f0434ca436bbe705122777a8e8facbd584
+:01370046334acb1088412cdf170e9b92794d95
+:013710d3f1926ebce3f41c42cd922ecb38a078
+:0137204ec9be093330dded671855cff4c1f950
+:0137306079c92a3313c4bed0b29797d7a57502
+:013740c58238c9ec8600efd455bfeb91542f3f
+:013750eb51aa8d06b69885ff7881d57396f769
+:013760502de634576c401cfd8d8019df89f9bb
+:0137702da495ebbd960920fba328a62a8e4454
+:013780da74c4c0678637156d29fff3bee43f39
+:0137909ff6471709d0753a73b9013a68567f1c
+:0137a032acd0d787a3e8a9a0de0f9eaf77ad85
+:0137b0267f59f237ad8f7b5528c2b92f8d9e21
+:0137c0abf76c4a6155b25c63fbb5ac63fb0c54
+:0137d0acca1c7210bb49d7b64a133b727f1c2d
+:0137e03d109669d05408d4bc9e1cc7970c0b1b
+:0137f021e63b9527240bd08c1bb045f9eeb43d
+:0138000080fa43bef3bb34d6b5a886ca50eebe
+:013810681d0517bfedee4ad897b8cf40145add
+:013820711cdf3dc3aa08847b0c6c16efd52176
+:013830e1f2b0ba688d26656c9fa16cca3bbf65
+:013840af188e14711ddce86d2dff962e72c7b3
+:013850fbdc7cd4b62f129e79e32865d9d90b67
+:0138606a634380ee3da58fb824fe700254f69d
+:0138703b9f6787f88f77eac242c07043dcaaa4
+:0138805129c70e827c81b12ca3709176fbea99
+:013890b266cc5aca1928b21f3685f06fbe0b3f
+:0138a05ae2a2f22974c741dc0445e2c9a6e25a
+:0138b0a09b6ee9200513914d915e27de1304e5
+:0138c0d42eb101a581d9e3c70d05fb2abf2f9e
+:0138d0adbb1b242ba17178e6b0381fdecc1396
+:0138e008aebe85056e6c067c5412add1f3fedf
+:0138f00f69a01d4db0514effdd62018f4a9b8e
+:01390058da6d145e5cbd440a30f13442ac630a
+:01391004c38f3c4d9087a95092681a18a957d9
+:0139202fca689033fb6a75799c711d63d279d6
+:013930a3f44ecb65b5f61ca31ac402fc668cd0
+:013940b698bc479a5e534b852acabd7c234c04
+:0139507b9002e26dd3b30d4454fe0b2e5bc11f
+:01396096bf8db40b8a7cb5fc32f79dff7fdfef
+:0139702d9a12581f00d4e86d62d2dea8b8a700
+:013980fc0b707e5ad62681ccbf3c25e3aefd83
+:01399034674d2c564f02239e46612c0281d6ce
+:0139a00779d5cc93fe3eae88375a2f70512ae5
+:0139b08ba703a4c55aaabeff841acc2345a36a
+:0139c0a5569487dec0448c73a2f211d2030cec
+:0139d09286e4ee76faf0a6d5d495f17d58698b
+:0139e01351c9e39c796552b0cbf9b2e8929d33
+:0139f027fdd297d1ab331e0bffff6e01c71c31
+:013a00e8e38cc66117df880b519445672d419d
+:013a101058a0669e948ad0780a0de33bee25dc
+:013a207b3abf8929e17d11930025142775f040
+:013a302a9881098deaad030f1386fde980cd8c
+:013a40ae35d4687de8b2de2d21a8564afdbcff
+:013a5011d8ee9ddc09773ff76fd9389686ca2b
+:013a6080923180dbf66f7b95272f6f0d896814
+:013a70f9ba8a1a678890f814ceef65690abf00
+:013a80ad1b63eb54459a3bdb575a3ffa1a0211
+:013a9018e888ee9052fcfd9b0ac710db59b9b3
+:013aa07840542c58c7160273a7f67f2ad8b4fc
+:013ab0b06d34afa22fdc5b34260472a7cf4c19
+:013ac004fdbd4c7b247fe08e1c9f6ba08ea0d8
+:013ad09388ec1848a8cdab389fc14259473bbe
+:013ae0a9e804f5fb8ec60d3dee2803b2a32910
+:013af052d5d8467bd8b80fef32f779e70b4338
+:013b00e181d3156dff1ed9d29d435be6d8b24b
+:013b108882e2df4018d2f1439fd771d2b1949d
+:013b202205fed6c0891f2ea95b364691a50f6c
+:013b3024756da0e19d2345d23ed09665403fc0
+:013b408f0ccc05fe84e04b665652b03b15f4c4
+:013b508016e1ae65413702f73049acd3e1b05a
+:013b6034c50174d82fb947bb5a69740b89fed2
+:013b7020c76b515a3e66a24dc58a0a9acc51e6
+:013b8069fbb29f3eb905ad2c3ca91c64ce01ca
+:013b907e0ff33c408b4b49706e0a94c9b9fc57
+:013ba05fdbf1d544a2e17c2c17da80d00db984
+:013bb022bc06549ce2b42a7caa27e93354bc66
+:013bc0935b1477e9902b21cb809d0a6d22fd36
+:013bd01b03f0dd185265344d9b607c87c022c6
+:013be0d39d42c858a31a0d89e387434e419b59
+:013bf0b35108ee21f5c57e8366d957df1d98a8
+:013c00daf8d2d9aa6f02f3a2ef284fff1954d0
+:013c1039e0818d17c229e0fc978e2b6e6847a3
+:013c209da2aa62400a1889eac7b936cfdd3fe5
+:013c300e5d237d54f8ae4f361e9badd66ab1c4
+:013c40ac1bccfe0cac93bd9d8945f4ce636187
+:013c503a2c798a1182f2eaa32b3aad30412fcc
+:013c60c4e024a92f9e7a3579d18ad067316580
+:013c70a1a958fc5be74b63bcd6090b35268bbf
+:013c8033d5bdaf68f99e4e3e417f5c233c156f
+:013c906549b4c5d13e41371c5ae62764055888
+:013ca0dbde4d9e8a8de04338b8a79e7f56b052
+:013cb034ad76984e221486b980f27344d62ee4
+:013cc0a18e4d71a8d80fa2418810672d73877e
+:013cd0fba2c3c9b34af9e4b216ce0806db5fa7
+:013ce0db9f84db9088fa47681490b2528227af
+:013cf02d29ba82d1c905a432dfbe111b75a338
+:013d0038e64b3b222d4c9f8fc79e547cddf2f6
+:013d104dd9c80fc620efc37a9772ebc75e22a0
+:013d20ed4f8c39ad661a93ab4c1240bc35ed52
+:013d3090a42c06d70d97d2a5949cf6480d7d3f
+:013d401b5db925ea08fbf4c0ace8b71741661a
+:013d50a316100e8bb07012b9f03b418bdd1349
+:013d6001128676eeaa90676527ce6d3b52480f
+:013d701cc4e348ac6136487bf288f720c4b707
+:013d802a8c3230e1d351550021dc5b585ee205
+:013d907bd3d145af925d9f4a1c74f09390cb88
+:013da0fb04935a30b242e8b573d545f3f52e0b
+:013db022bdcdaf491998900ad657e10ab45c1a
+:013dc070cbd51557819f6458f7a1db504e5eac
+:013dd0ac19432a5dbc0d50fecbb0039fc01de6
+:013de0368e87a35a702b23fd9fad080e971e4c
+:013df05c23cbcc4d2056220c2d82fca4fccc7c
+:013e00a70d369ac6297b78ae18a7f694248ab1
+:013e10b49141ff2387a507aa424c7c3bf4754f
+:013e2014736298e6e0c1ee3e1056e1af84d034
+:013e302aa502dda55adb8d57b7fe832a614655
+:013e4023d65f809313de3e9522f68692337ceb
+:013e50ae944a5c785bb38cd78c4a409c8bf4ff
+:013e6087f753c7867b668a86fb38f521635e63
+:013e705789aac2f633fc475dd7036d50c6df56
+:013e802db831a31015c66bb93136c8024f08d8
+:013e90dda7156b68609cf168854a7b0fa15952
+:013ea024552db064a08b25e2c5564e0831a3fa
+:013eb04604f359eeffadd5d13a972a7b19edf6
+:013ec01f25c4190550b4db1ac08573e41344b5
+:013ed0d8f54886e8b497b4570752e9c6945cf5
+:013ee004b7b22c3ac8aae298526f06e6f120a9
+:013ef07e8d9fbe8abd6c4aa4678146054f7024
+:013f00d1752c45f1b6d5317745775e2813954f
+:013f1031c9bdf26e792a11467a4f9d8b8acff2
+:013f20eadfa9a96aaad1ebcbc3f17c1ed8072c
+:013f3057fd2f4079b7eea82e8d71898fee2947
+:013f402e245cd0f82b5b618de438d6d20cf48d
+:013f5001e7ac1c6fc23f1dbf08ceff1f213248
+:013f60e290fc0d2973b782965589d18d150f7d
+:013f70a5a5d06e904ef544399144bfd7f1a87c
+:013f809d9ea318c8f670b5dc0e6394f52e22bd
+:013f9043a9e12c8e7bac1b46be277eeb69d11c
+:013fa00704c9284a71c9e9acab5ae5c28ff035
+:013fb0788d81534c55771386c93093ebfefc6f
+:013fc0706c18ca8f8f7575c486e09ce2d322a8
+:013fd05824e1034ee98f03990d6069d5a7f517
+:013fe0bcc6ccfd452ca07f9e4ebad41417245a
+:013ff058d14dd1fa5b8085b365d134b0d4f935
+:014000a0bd79cedbe0a313301dbd3ef48ddafc
+:0140109d3f9ae092b306ca437cdac3e40b60a6
+:014020ca5eeae48a7608dba5daa73cb2645283
+:014030d5f818294c29ef6b4055455cff2a7bc6
+:01404064086cb26d6e4fb0114169970b51b878
+:014050e5ac5280228823fc463e3f3f1308e0bc
+:0140604933c86137f6013e70b78e4687db5605
+:0140704fa6e1603f60dd54f63ac1dd7e0d10af
+:014080064e7c43971bb224d07ccbb26ee40f88
+:0140908166eedf3ec000a876a568008352e813
+:0140a01d1025bc1cb2415c82e00bb4a9e6a7ae
+:0140b01ef9e35635c9b9f8adc17eb116c64f3f
+:0140c0048788f6939ffc600ea0b781a0c48d39
+:0140d0d0d6205e7317316430910c64824662fc
+:0140e0fca1d2753132138d5d3f838177a53db1
+:0140f04072dd2073ffb16fe7cfd92cac9e5879
+:014100d1791784eaa064cb05786f348fdd0343
+:01411028cb294833bf4f89bdf59b1449b0f1fe
+:014120c706ef3738cf6ea7267000625b31807f
+:01413073194f10fc4338e7f9630132434117f3
+:0141404648a28b96e278c3a07461cbee3cbd8c
+:01415009b5d32745c3b0c25c5111efd91c717a
+:01416063af679676af8e2cb06c79630bdf6407
+:014170c2e2435430ac3ba9a83f9b26d4bcc9d2
+:01418020eea9cb309c1f20a8af4d395d6515aa
+:014190e961c0544dc63e0655067b1d9d41dc15
+:0141a040920aa9824d2ce76ac046722559327f
+:0141b001bb1d68dabdaddee5dd188667fcb9ee
+:0141c067b81c8e79ea257c38e79edfea2f0685
+:0141d0f072766f57268da046a22bda1913a6f7
+:0141e071c5f18c2937db9d4c80eedff8375d8b
+:0141f042c44476a03f77dd73d2060115fe7694
+:0142004e2e63521d7861ce7c0134286bb532fd
+:0142107b90a5f64716d0dfd9e1fc39cdb27198
+:0142204f50fb41456a93c1c49120d550c9942a
+:014230977136e250b633b0d6744aa2a83b3968
+:0142409a28f4314f0ca0f01cd4fdcf0857c73e
+:0142503e1ef87bfe0b7aac0baef925043c60ab
+:014260d6a1345ecc93b95295761498879f99d9
+:014270959e96d9573a67f1de411b26db89e7bd
+:0142800b64fddc5ad4e5e0b2e323d8d5c67744
+:014290def0d90f85a6c7948d0059a6b406f554
+:0142a05c7374f9f9d5840745e3dcde66af94f2
+:0142b04364996511882150aac45558b863b21e
+:0142c0fb7990ca0439cbd8b926371a24a16ed1
+:0142d01f59b35742f9cb68b5ac47957eb38017
+:0142e025c9cd45f26ec084b94bf487421dea2d
+:0142f0f160fa6b166c7241d1e5acf873d6eabd
+:014300f0892bda5f030aeace58634a98100e54
+:014310637c9dca9ba48bba369b81c97dc1b291
+:014320a4aec12216adb442fedd46f145879bfe
+:014330e8fd17dca9494aedd7a775f9c22dad06
+:0143403df56baf8690323a56451f4d17881fd6
+:01435072102e167a5c0cf9cef2be6562bdf695
+:014360672e20ad528f62790dd61640bfe32674
+:0143702d015dd0e144c1b5a2882f9ed28a00a9
+:014380d1d96587c06ff92e56fcb63e3e3556aa
+:014390a5cb78e26edb6e5a539cce6ec36a7f8c
+:0143a0469c61256e336284ff26d47377dc7143
+:0143b0e819d5206d490a289c2d373b884f9050
+:0143c0ab88d0c6c37e8452fc3702bb53165919
+:0143d055b9d55da449e25a267f51243be3e353
+:0143e0c4968987419be5771c9c6a95e02d7623
+:0143f0510b84bd05f4282fd2979d9a1905eab0
+:014400835d15fe2f4212567807e356d227f0bd
+:014410bfb6c6ac2e4fec924e2a58ff0789feeb
+:0144206a200139bc900cd0ad7e723fdd9ed7d9
+:0144301ed1b162e4a900150db00ec5005178c4
+:01444094f7ed391b20b7345b2939c5fdbe0299
+:01445085e64fd7c6501587af902030f853d9e2
+:01446027ee63230c8bd45a7d1acda68ed274a1
+:014470400472038f0f4ef36eabcefe970c3afa
+:014480cf33e48a0875129adcf772905db6532b
+:0144903f2343c7422d6cadd65c63c405581d2c
+:0144a046c994b1732f192dc01f7a646f04f3fa
+:0144b01c290537e4d1743ae6025a7aba7a3056
+:0144c0260556692dc6b15badbd9e22a0b2875c
+:0144d0f39cc193b086d1ae3884c08ee67b7b15
+:0144e03375a1c7265d039b5daf128d8d57453a
+:0144f056b786a7ec5a197839d05f56dad38ab3
+:014500c1fe97762a7224dc180750ed0c285f00
+:01451076be17ec9593b752bcd667bd254ed964
+:0145207865cc16f9e0c939ba0953e197bb8ad2
+:0145305a338b13d4bb31931b222ee26533ff7b
+:01454052305f006c6e670409e47fc9105dd3d3
+:0145505b9424c3ecb60fd784d55c971b19eaef
+:01456078a33ba2920333404e8a21e14d9dab1c
+:014570140cbe2199cf05e499f4df91f8734499
+:0145809f979605e09eee2664e014db8161a33d
+:014590ab9e0c2ccc431e466e65ffc8c14c573c
+:0145a01b1e04690ac5819fa4d4fc38ceb954e2
+:0145b0df999f8d118d6dfdfd896c0413339062
+:0145c01cc18dcd79c380d81262de63062e3885
+:0145d0b01248b6a0630c9fe6aa0ff53023af28
+:0145e0a5e75c1e3554f97562a54e9c5eb6507c
+:0145f010fedb274af56c6b273b0ae697ea69eb
+:014600de66621298c04fe3c1e2f3b1ab1f4580
+:0146102de27603590de978ffb7955082babe60
+:014620366ff29a16af0840ef58f29de6118220
+:014630819740fff85a2e4d84dee70ca61c7906
+:014640a3ff6aaec958da83c766a0a7a5dccbd4
+:0146507f4dba656ab5dd2bbd870a2118ffc0ad
+:014660b55acf2ff67c6161e3a52baf47a9c7cb
+:01467093ae9bc930c2f0bae21bd33581b6ef06
+:0146803fdf566e40c8b17cf6b9aba8b5c286aa
+:014690292966fa08922d68d898921d63823ae8
+:0146a00c9f9e56b2e2ba4571b7c42f8f3bb900
+:0146b01eed5b1f9f35f0dc663093f2e66f3cdb
+:0146c010c2d21244ac5b8b3f2dd2da2d12a978
+:0146d06ada189e0c252c6c46ab21454d2d36c9
+:0146e004691abd669a265ad6b2c2323bf01737
+:0146f09e2a34ef2191d72fb2dbeb31eee31d0b
+:01470058da64c07444216410aea6815d28fd1b
+:014710f1448fa6bd912dc05dda814c3084d344
+:014720f737d55dc8537895a87bc10b2c9473fa
+:014730e91a33b4d0f4e3c06be2de320d094a8b
+:014740f726881d403037036b7f3d43722568f2
+:014750b0a2b872ef0161c5421f7ee5200b7c84
+:014760ab141d55a23ccae02aaef20da68d47f0
+:0147709c873133d4a63f17a45e0d708b77b16f
+:014780279835641db1cc7074fcc9cda3ec2567
+:0147907cc6aae92869779ae1474d8e87c405bc
+:0147a0b7ce8700e173be3a3d08d65fe0979050
+:0147b0695f2bbacaf74b16486ebdf76e944ba1
+:0147c08ee295ef9545a1d89b30586feeb11f63
+:0147d0b54a0e2f8685b629c36a2ea17324b522
+:0147e08ccaee2ae2e56cf1e88f3db08fa8971f
+:0147f023e00359737494b01ba250a9a62240a4
+:014800b4df541b294d87c5b28885460e9e64aa
+:01481033d3d98bed175d4c8c547bd083304896
+:0148201aed47a837770d4ca2bee051cab3358d
+:014830a16c2fcb54b5deeb0a61e839d29bf27a
+:0148401a0d9d9484cc2c4c53214d33b0364d78
+:01485025801bb73065da063bacb56f284195c7
+:01486071aac6ac8920776e4d8b5a36c4cc7a88
+:014870b20418eeb46f1f89af1fcaadce106903
+:0148806b4385fab7dc6c87cb511af6cb949808
+:01489098ee2c11b09918241f530a6e60b5aeec
+:0148a0fd2243d7642f3f1bc3e3866089a59e44
+:0148b07301467b7e950f7d3f901558aca20913
+:0148c0961112a5f23f1adad158824c3d5579fa
+:0148d07805011d51a006a495ce40ee511529f7
+:0148e0535a1302af264a00b2a4d689e97fd348
+:0148f08e16b5217b56b217c6d1053ea7eb19ba
+:014900a04f87c2487134188fe8480e262d2ce8
+:0149107e8c9118a19dff01e0bd3b85d9ad85c9
+:01492045d2d0de0ebfd438924ec69dd754e31a
+:0149305ab4c8da2172229a0eb13f46029f4bd7
+:014940ae09d03a8ed6e63742d5c840835711c2
+:014950dc2a30df84e1d8e74a20b587053db80e
+:0149609337eae936e9503211bf7a57fbde51fd
+:01497028d42d18def3a2d0791e2d83874ce528
+:014980accdb86397a6aaf59f8072252b58b7b5
+:0149902449f59bd51b528a762393e039d9b954
+:0149a0316031fb11f52a903f14ed5d6832938a
+:0149b004c6a3bd080696ca9eb2c8eff43fd6d5
+:0149c0720ba7fb8f459747ed45f66bc5f038d0
+:0149d0e379d6ed4eb05a43ea4393349313d44f
+:0149e0f30d6f2f0c02524c8cb869e9b5e4c4c0
+:0149f0d5f8e3bd770cb8a5886d1f49727c2306
+:014a00affca1b2fe1bce457feb5d8cac5cdd5a
+:014a10204a7f627333b2ea60baec055538a505
+:014a20a2730d4ef737df52ada6f1049c7390d7
+:014a30c285473090c3c3934212e7939afa9697
+:014a40bbf30f7fa0c2b73f9b54653f1190cda8
+:014a50d4b2622999388059f01052b43cbda9e6
+:014a606e1ddce246f10e5b107da2b8abd4e51d
+:014a708ba4b98e39589566c77d272213d458fd
+:014a801be5701e3475edef3df51f94076c1ca8
+:014a90e339dcf35e85ac70332ebd727a2d65cb
+:014aa07e98a886d8c106175803a356b8ebbc0f
+:014ab0cdb48259e7a2b1a9a4ef34a685b7cce9
+:014ac0dd83eeab0bac5f9cc7d864ba84fcbca5
+:014ad00a59f86f0a1db66c62f7a96dd4c76680
+:014ae0f7f6bb220186bf6e9aa4f45b322521e4
+:014af07bb10493c91005a11b6249382f1fc780
+:014b00b7bf25b45ff3178b61ef3a817b5c95e0
+:014b10afaf64688a2fb782cd39d3b3f16673bc
+:014b2053636fdde99180954521f604c7641ced
+:014b30279376bec033b821a55838eedec246b0
+:014b403c1eb5ce9e1b9d2d3d1725d545277893
+:014b50d3416e0712db3b02047cf85a3badcb74
+:014b6051cf353424d282f831e3c70f6523ad07
+:014b7085f290f1b6efc972ff6b89fbda992e5d
+:014b800e498f09779cbba691bf49e7739f41e7
+:014b90686307ae6f06ba191d6ba2429205a624
+:014ba002cfb407f37e40d1f752c900fe56eb9a
+:014bb0c5094e1962a2107d4c7f9be1dad8ce0b
+:014bc0b241417abe5ce241a0b57fedccb428b0
+:014bd066dfa62d1412a3f5a89a1524d160c952
+:014be0180c480e17273d96c3187afee786c3b0
+:014bf09f424a31c4c9e2d46357621bc08469d3
+:014c0032f0c485789a65d80ad9c0804d5c8e77
+:014c10a5e16736fa6cad29003d5cf79a926cfa
+:014c20512a4debde6dfb81d51e0b625aafcdc2
+:014c30d700464f9c73ae7882642d37a3cf2f6e
+:014c40c402e1b714634705857a0199659ccb63
+:014c501c62db6a02e17153f2069f92ab6e391a
+:014c607ddbff1836ee1b047054eb2eddbd6b34
+:014c70ceb1d1007bbbec9d305c94f5fadc9403
+:014c807602aa8fef675e77d4670eede098574d
+:014c90707435de702fe553f428ac9679329b4d
+:014ca0b93266931653936868209b05a64f5469
+:014cb08645f1384486724897be3750afc0bdd3
+:014cc0e04527bd5e57f5dad0b01054d65f845c
+:014cd0427eba2eea27009fa2077c571ec1b036
+:014ce0a3f2b4387f3d6094966204dcfd07efcd
+:014cf0c016486b12cee285155d17a9ad9e8391
+:014d0036904157a9b765dc02d407817d25bf0d
+:014d108c0d93915358931d9769b7ecfb2d14cc
+:014d20c455f172e47975d6a9a161cad8755ff2
+:014d300948a0955dc71e9e2034c25598e3bf91
+:014d40f00e84cc617659499a5c54468c6723e9
+:014d504b2710efc604e15323ca1fc9b365bf23
+:014d602c8e49f2591eccb1e37c982dcac4be26
+:014d707cfda4afb75456f08bedacada642c61d
+:014d8062b3b591eabc4e57fb5f5a9a509165a6
+:014d907725cae1ea013c7566be9b1473dc4967
+:014da0199020c13de55eb62c8203b82c10c8c3
+:014db0166e0c9f94b3c87d3957d4d853680e24
+:014dc05cf89f1937fa3f2b944ff17f3c84c13e
+:014dd00ef3af4dbf0b40e69a36c5bcf3636d17
+:014de0c02f1e00d02c2337641d58e4da66ed81
+:014df0ab4ab7321bcd89056a18c103a5c3b6f8
+:014e00f03b5cf2966c95face8a75c8d402f993
+:014e10c4aa65782fbfc7d436cca590e34b7580
+:014e207bfcc10ad509b76f3f83e89288515a26
+:014e307733a2697c8a98f21015db2b7996e618
+:014e40177bb71669605a13c425b8c37a12c480
+:014e50fa454d03ace2347c8cfbfec7d48964f4
+:014e601b7b9215e6b7bbf49dc89fc92aa71987
+:014e7002c912c86a39ba684a40e365a3fb61e4
+:014e80cd4fdc5bdc17e7f734e8c8bb80d3ef09
+:014e90e5726c773806f939902ad82ae02c1752
+:014ea05a655b435b44bad723c4ae2455b38488
+:014eb0c017405d8791e1589d4106bc398ba4d2
+:014ec0c868a7c26890c690595006a8f7578e8c
+:014ed03afb2996eb0ba4dc127c02b78fa8aa8a
+:014ee0f14c81c53f13c4b3cb283fc85e0d8bcd
+:014ef0cfb494d7fa17c75db5bdda363d9dbd70
+:014f00ee442b59d72dfe868a836a1f423f2848
+:014f1010036fcee75f52e6707b917b5a186079
+:014f2096b19ba9a5c5b3ce3e0f4c3a20bd94a8
+:014f3017df60a6aefa735767d57017432e2905
+:014f400328993e247d46fad8eaafc189ab58f5
+:014f50904a76eb39571e999f23099faae58fcb
+:014f60757d248089aa3eb346038d79a3f63bf0
+:014f70503bb18ccfbb579cdfef0ea0bdd06a55
+:014f80bceb1a49eda90dd6fe84cceebed7745d
+:014f905c1b81c830097eb532e2509dafaf0511
+:014fa0ace185bbd1aca0141b24ec874609f815
+:014fb053bf3e3b66d86b771ae3ef33c169f699
+:014fc052a2d6aef14d14f017766a11a0c9f1ff
+:014fd0daa0bd3c7b0a4fac8d61da85626f529b
+:014fe04987d788d38b0df51f8acec92be94c34
+:014ff0a4c3f781aa23134fae77182d875638cc
+:0150004dc0aec5ee1baf250864761f99d90acf
+:015010d8538677771c929ec8cbfc8b4f108653
+:015020a975ba44cb6cebf0e8f5980d3723a366
+:015030fd36cc5417d2eede2e2f7bc2f2969be1
+:0150402c29427fc6f146208c483288062637d4
+:015050c43df458296c8fb1063b5b0a2407c941
+:015060066384226a52d415eb0df6501bfae54f
+:0150703028b419cb48e6ed7fd6440c8ad93d90
+:0150807120c731d6f74761b28a0e1febbc2f5c
+:01509000354d076e812276ada431a1de40ca3f
+:0150a078c829b2d8099e63558df1f28e0da57d
+:0150b0a3694bebd105ef026475578bf0e8c302
+:0150c0e7580792d28028892a025d47006ef496
+:0150d0c5c5d8971cbb8323bb0b075deea42f16
+:0150e09396a20e88646474b718f4afa9d69cea
+:0150f02da11f858d15adae4979cfe5012565ad
+:015100c07bfee9375a606ab903fdb34c321ceb
+:015110deaf767160aa95b43c4ab0d0f083aaae
+:015120b4377adb95ddc1236ff56f22384c33e1
+:01513020bf2ea0248b32126816c7280b138f53
+:0151408d6ccf275c00da689c04a063f0a4fe45
+:015150613ec161a327a1dd32071435716d96ca
+:0151603e2f0cf30d2f761324a4cc39890030d7
+:0151700eea9f1ffd33a77e0094294e44b0af61
+:0151802b554586cd825778a16725b48bd65873
+:01519018538cfd73958f5453b47e1078b00036
+:0151a014a0bff9f714bc3a040d615870e812d6
+:0151b0a91efaf4b8388cc460cfb2b3e34954b8
+:0151c05a844318c44f6044ff287d67acad451b
+:0151d081baa525bac27c02a1354bffa6951d75
+:0151e0fc9df8346168fccaf9ca18d51336630f
+:0151f0039b174e39f62456d9496f8db4f30647
+:015200765d16ca6da75d976ae424585f14ae51
+:015210c5d0efa2516c7d78048f74026974b3db
+:015220a45f6d82d4a7dcf3cc2569c85332c115
+:0152306b9c615439ab59fad65c73a617538adf
+:0152407affc1cfaee4e84f593e963900a9f2f5
+:01525075563f22c164c5ccc2784082a6b7f87e
+:015260b062836225fdcf039ab28765b06a5a78
+:015270707c0940868118bd284738d7f2f5a4c3
+:015280c50e924636edff0520808013d6a2610c
+:015290c91ecab3d49291521ddc3316a4174cbd
+:0152a07431e2c13c4f063bc9b7c2cd0def9781
+:0152b08ce74cadc52b5349eba5c48b272e75ec
+:0152c01ebd602e5349959b187c80f588084e99
+:0152d0435625a76549a3f6de2a64b00a66044d
+:0152e0dfcf647a00c8767b56b85a3c425d2375
+:0152f086745c36ce15ea51e0c582c06937340a
+:015300938936055b3f3ab6565ca50226a03975
+:015310354d27fe9ca74c548b96a13dec6335b8
+:0153203a8b8243cfd60dce22b9bf40e0f91854
+:0153305cc05cfadcb18360b3215805619fa26b
+:0153403e07ae52c62f60d0fc1a225c6eefee0d
+:015350fdf64f11488d6e59300dfb56afab93e7
+:01536049198c134acf4e7e4b1c024700208e8d
+:0153707ff80d3fdd658dae1f0ece54058a9033
+:015380fd2594d15785187c242a42aa8e87f918
+:01539065a3d281417cfa8d485dd25e0d640994
+:0153a0beec39842f18489338a9b89ed7ea56a2
+:0153b0b48f767b525e2742163beceedc1a4c53
+:0153c02afb9a86765367e5863e67313aa04f36
+:0153d0a0c49a171e61887d3a177d2784ed7331
+:0153e0356b8ab5b3728553a125f641e27fa622
+:0153f00ac9fa0db21d00da61c022a37daec48c
+:015400a9dff9c494c6b6ccdc1e0a9bed859af8
+:015410e2b1cf6abf91238deb6bd14069d431d3
+:015420f212b532d34313d99fbbb43d189c3bc4
+:015430febe7ddb40a62bc27edcc1a4da6d59e6
+:0154408b6e16048a8fec13ccf4e61ba732f684
+:01545004d8b5f5c08e6ca04e6ba954f25a78b4
+:0154605963246a9cf30325b443a137ee53682e
+:0154706642a2bbb171d836544c113c0fdf4c1c
+:0154805e4fec000c57d26a02304c601f997e34
+:01549065ca1f6473664013971f26a70473d0f8
+:0154a08ddc7cd02ec324545a1cb863c060ee3c
+:0154b02dddb2352ef604c986e04d8b4970ca70
+:0154c0e8ece2f93894ae853a6481050057d8c1
+:0154d05eb9d44c1e36a173ab46a14d5e869452
+:0154e02ec659a91d84b3a4976a8f92b691eea3
+:0154f005fb49c59c219e961e48f97d01821c6d
+:0155003456c8e5cab06efda845a2b6cf6cf05d
+:01551020fcd6eb3b559536cd74532ddf053ef4
+:0155201db653c2de648b7c2ddcd9e349ba8ba1
+:01553040a4f9e8110b130d7afb5b7ff25e8d8e
+:015540aa3cc2d5235a33d4d0fa09e1886c06b4
+:0155503e30453f38011ee867e2c92eb2010133
+:015560a53f862b5760538a000391ecbe1ad7da
+:015570a3773a308e6573cb00e7278cc588689d
+:0155807a8b0a68f029d93b7fdb2b463864bc36
+:0155900aae76db0b0906d72779722d54a31e2c
+:0155a01e06864f7178021ecb8fbfe49e24145e
+:0155b0f7c40de3be7448c01c508acdf414730b
+:0155c0bea121fa528b1a1b7bee487575e96103
+:0155d06209bb2f93e11f9ca33fd9ce07824d9c
+:0155e012aa7d98903bb7d53826af0e672792f6
+:0155f097379a1bbcc4dd755db2296f8d0eae59
+:0156007a78db4e10010e26f68b85cdf0dc15e7
+:015610e9f38dcd7ed9bcdf306e0a21856564b8
+:0156209214efb6ef34c2d83fc7de69b05bc1cc
+:0156307e9bcee339b8ef8cce73b11ceb4ecc99
+:015640f22db236f1cb12d66aa5ebe57ffda8dd
+:015650978e409b9bd372b178129e8d6728ed7c
+:015660c8f5a2f0ff3aaa1a1d32d538fde88628
+:015670491ae3aecd74f3cbad9af53eaa63089a
+:01568047e9818ee04d31bf05af3a37772d00a4
+:0156902f028693d123ebc5faa7b437cd6fe992
+:0156a07a990d4b8673ab3448cd00fb9ebced89
+:0156b0d0fa8f1e1b6ce6bfd9a9d2943fa332a4
+:0156c0a57f5fc20b8323a3857323c2022dfc50
+:0156d0caf6d762d4332f35849dff8443e37903
+:0156e017e0b1b8daf61050cb25a77c2596c048
+:0156f01825c38881a4750ae06064cb678ce292
+:01570068da5e97a2c85bd02ac6145e31ba5f42
+:015710bb86aa19e61d492ac5fc1f4da0448900
+:0157207ea3ada6b9030c7ab6c6b7a6cc24bf6f
+:0157307af336c8e8cfcbbeac1096ea196b463b
+:015740b9dc0ebcf736c0a0518e62ee84a78fc9
+:0157503bc6c73b5d8c19bae78049b1fafb583d
+:015760af75d671676ef02cbdd7af2eafc95b5d
+:0157706a7dc7277dafbdff93466147503baefe
+:015780a0ae6139007b1d6dccea49582830b45b
+:0157902e1c7c5c0fcd578c249e2bdad367fdc2
+:0157a0ebb1efef1bce289c308b1cefbc756f43
+:0157b0216c164b1fcbd740875fee9557e96743
+:0157c0a84621573330617ea5889a38b7938721
+:0157d02f66dc18b7b88cff0435864afc56cbf3
+:0157e05be3d40c8a09108ebefaa2731937bfca
+:0157f0abc1606ecb33d7dd766aa2593a52385b
+:01580042400573c335680288620b700597c027
+:0158106d99ce3e2c90df6f5661a8cdd28076f2
+:0158201ceff643ece82ad69955096b085b0c32
+:015830e0df5fb1104b165a41b9ef79d0d608ae
+:015840330cf5a3f5ec0fc013e2c676b7f75c1e
+:015850f905a948fa6b2dac332f27608af7d1c9
+:015860a5e223adf8344bc10434fed1b33a9297
+:0158709a349c4f941d7a454bea1e1ee74956c0
+:015880c6b443b718dbc271e6c3dbe48a929e70
+:0158908747c59faca8cb2bccc4835ff0c4ede2
+:0158a02723ff2bf66893efe15a527147d426cc
+:0158b0b334f2216d62ab712d07b27f065eaa76
+:0158c09c8951285813f7986ea42e068618ac5d
+:0158d0dbfb39d42fa1b96df39562b89e2647c3
+:0158e01b66103ca02a9066c938ec92b93619e1
+:0158f0d34d106cabe67ae2864e8120a57a1489
+:015900ff5f802e448e40921971600f4bf93e10
+:01591038654469e729bd0be0486b80cc3a626e
+:015920ec425b64fe896ba583d93cce94b998fe
+:015930400e993b1b40534d54bd687c80666e8c
+:0159407e2bc7d57f07afbe1a24bd86ee522b8b
+:015950f84db9568033420196156dc7e01b6598
+:015960aac4c7efa169bd94ed85c5adaa4fc9a1
+:0159706618eb4cf35c4cece17b65b5cfea256c
+:0159802299f3943075cd0416e9841aee6a9115
+:01599085a23e713050a80f52d74874013ddfb1
+:0159a0feb1ba3f2118c3aef8f48a6577a46724
+:0159b0ccbe83b118864dcde0a7af952f3193ae
+:0159c0bf0779fb0dd433e9a90f09d20715d2f3
+:0159d0e17d172b27c4b25a72aba1b393524539
+:0159e0812adab5fe6bcdb6403f3f624008d72c
+:0159f04eb6683b5dc67b54fc8ef82b6525de14
+:015a00a012410b250d398954a05ceff30d9b72
+:015a10cc9df8f34149c60dfa3c1efa54f34b7f
+:015a202b746e8633c885cdd35f6600abe4c82a
+:015a3033605efece0ba39ef7798e758ec1a662
+:015a401fa85a05dca246b45eb62881293bdb2d
+:015a5079ae4c7ba7d3722d74d84f1b9839aa5b
+:015a605b86db07f181b60eb7b859e50ed8ad2a
+:015a708e41b44d5c53097137e39de8a56cb54d
+:015a80c903f7ce87b1a6d41df51ebd328247dd
+:015a901a3c9ad5985efd6618604df7c370ac8a
+:015aa0c19f5e64880aebfc656d61d896a8f32d
+:015ab0a66fe86ad2c8430a5328eb821119c58f
+:015ac0eb6187132aafaf13c4de04e0dcf2ed50
+:015ad059abd309f9dc27fcc5c0ac425496126a
+:015ae037ba9b83aecd3d572018ed096dbc2a7b
+:015af01e72628833fdc11c3f01fe6f62a1019f
+:015b00f8d299e06709ff0baf0e383c96ca85a4
+:015b10bd655db321ff09405d8deaca24366e0b
+:015b209bd5cb5ceaa3ed85406ab5ea02763f1e
+:015b30b2fd0e32a7064c5e107207c3cca436a0
+:015b40d2d89974bf70a76160382f9845496ebd
+:015b50b793075963192e1c135654148c7d9980
+:015b60ad35d79a8e68ecb8130727363c50c245
+:015b705599a6a23fc3d028f9641b23be582929
+:015b80f6c837e814624ff37b9aa395027db7cd
+:015b907abe46ae27ebfdfa3fa9cebffc848751
+:015ba06415e6ef14b976cd5e4a965bd0c772e8
+:015bb0619a44700ab27c8a40ac56cc93993b7a
+:015bc0246cd6a3ee8f04b752ad91775a70f283
+:015bd0cba9bd93372539eb851c418cdd835a8c
+:015be0b34dfe48d553a06acc7bd297c7498365
+:015bf049ecd9cbf4713ef3483e967186c7da7b
+:015c00d6648d6e14473a0fad1db8a038d27fe2
+:015c100b7afdb68880c459177702cd98800567
+:015c206c6394ffa100b32a15c159e0187ef934
+:015c30f02c1701d88051586090a1d0756a144c
+:015c402bb8e318db5c8b165a77826ed212d63a
+:015c50135a9890e08da029631b54e376b65abf
+:015c6015d09b847e38968a921c17117c4e0404
+:015c70d0dc7517593580de49cbc00976625c6c
+:015c80e2a7c14fcbde47f9000fb69cdab1a793
+:015c90ebfec7369b516d6d100d3ce02f9ed813
+:015ca047dc042fbd636155681ca21cd0f1f6a1
+:015cb026e64c25e5d97380d02f528bb00c64bf
+:015cc09746a7ca6cf4076574d0740b67923bea
+:015cd0397bcaf1ca9a606924e47ef863dfd6f2
+:015ce0eecf7235b3e25855a2ded47ac1bc564a
+:015cf09616ef0d08fabea1c5e730fbf8da2281
+:015d000d0fa9c746305cf705b981d94bd61d8d
+:015d1044b77c5afdbbf38f1815c13e5626bf77
+:015d20e208c8c39c0fd0b4c89a59b22afd4e61
+:015d30e7eb5304af50e537133365c451db1310
+:015d40427badb70d0a3f939d6ab3e2c9b3525a
+:015d50bdcae1785d9ecdee25c7e509b4a688dd
+:015d60644e027ebe64773af3e7c70e4ffdd3ea
+:015d70c80b508fa64eeb0c2b5db97d8e34932d
+:015d803ed1422647e34c878f97abb7f14baa8d
+:015d90a388062480608d014ea6763f6571ff8f
+:015da0148b5d84f71ff3e318fe775ad8f02fd2
+:015db0196abb3edd7c4c8f0be16ff91c542914
+:015dc009601bcb9fae67c0ae23cd10705a1034
+:015dd03b23f4ccf9e8b64437ddd23b5932412e
+:015de0c051eb12f24e9fe314249e1f81129379
+:015df08ab4a12411a7ecd8be0645b4fec5798c
+:015e000bd7c3abb1535330e9fa4b1f67e8d5f0
+:015e10805cf194748876f6f397ef1b84143eb2
+:015e200870a1a07036299dae659fc1d2e24ed0
+:015e300ec70256e9b00f23967c10782925fae3
+:015e40bd7365d732f34ad12b36b5eeb67f691f
+:015e50bd8e4acdae37ecdbd501d17cb85bce79
+:015e604f508c9d417c0fbd4b42b4b8599a2e56
+:015e704b906242f1b4e565aa4113dd899956a9
+:015e80b2d219b05e6867b8ca630880468f5a49
+:015e90068216c38da5a94e2c80a2aaefc757d1
+:015ea0c94f4f76da05f6a7499b6e68d03de944
+:015eb032a69e35c339892a18ce92a257f23f69
+:015ec0e38dbb43c4ef9d48351c23dac06c0c6c
+:015ed0bb1857228ae660953eb4eaf2e6116d92
+:015ee0a887ac35999104f292ca3280e6781c5a
+:015ef0c4eb1de6d0954cf336a951e9e2b8c634
+:015f002575f55fb9566d277348ea7659418479
+:015f1049451432e87f917fe9fa9b346dfd1968
+:015f20402829ff3424a4b779224548ae4e7565
+:015f30c62e55da37dcca3c7840dbd44d69fc7a
+:015f40d330904d6482235711b646f01d0b14c1
+:015f5076b9bc335e0b428cf67a289b915f7444
+:015f60aa64f7ea6c7993700ff5aee7a232a1c9
+:015f70c3982b0db176f7f8170db56bf90ba651
+:015f800c38f77c6bd0e3ffb926d8b307f6e9cb
+:015f90a81d1031f7c67325b28dbd8665c1f66b
+:015fa0bcbe4944264322a731f16e24925e67e0
+:015fb0302e2047036a8c412792735aad7a2959
+:015fc0bf4c63180afb853d5a43f4b9685a5338
+:015fd039a7a1320f8316d68a2509aae274d09e
+:015fe091521d51e4018fe6339ba2eb29e78af0
+:015ff0067ff6c110f7a533df39e9daea5b0703
+:01600008e466b7e3939089caa989344aae16a9
+:016010176ca3a41b7e014f87f9238fd99287fd
+:0160206193ef3f3b0981183e8410e3a8977aaa
+:016030282adf87dc2b616d3d1bc8f3380581e5
+:0160407ea993973e509d3be6c51c57f5577369
+:01605085f9aa306e8d66a36221e5f0017edcbe
+:016060bb9d85c78fe7e5bcb7d7d9f5ccff4484
+:016070ad75c52d7e7f2782f91a475b499b1a95
+:016080ac42e61c0b11b120b50a847bcd1669e2
+:01609032afeecdba177a1607b173941005ac24
+:0160a0efec1e10b7b74443324a934e7ed8f60e
+:0160b07c38302c330153bab74c460dc3bc127d
+:0160c07fb274bd57ac17a3aef34e5d65481ce4
+:0160d01b61d3e2c1c7e5ee23b47b14ad513fe1
+:0160e021b5733ab6121963595b4a47f3ceb116
+:0160f096ae428b99fad9f876d1985952114744
+:01610047cad9a398da3b8cab6c8006dcbafffb
+:0161109893bb0c5c09ccbdb3d1df361357d25f
+:016120196897c6b41d7be0500f91ab93c8ac30
+:016130842132fa85c60eb5f09c6a8c3b96a65f
+:0161408a6749fe574034a3813bf32b130c840b
+:0161501d887eb776d82b8f85bd479648a3c99e
+:01616043f3f2a0a7a26785093f61509a3483e1
+:016170c93e8703d688998b1a8618e9a9f76c85
+:016180637059a03a9e2940313793895a30a0d9
+:01619047e8952784473a3c9aef59f9a7b71465
+:0161a0e0a02fc9a2fbc94ad968054486224a30
+:0161b0b3c2fc93ebbeffedfd250b6e8fcf5c82
+:0161c0bb9092e7b699a8fc0975c486beafcb13
+:0161d0f26bd46d41c236a2417125ef360cd65e
+:0161e07dfe19e639d2a34a2a23d4ec1fa215b2
+:0161f02851d37a4149cd6169c2e4f243710fa0
+:0162003f29c28dcd0efd036f2d5d59e822a329
+:0162102811ccab1631425a1c491d58cbef7728
+:016220dad1779a68d44b2e0f5f26fa248c9a33
+:0162303f6e985b41f5cacdcafce2404fac546d
+:016240d588cc8f6cc12748c7ca82cebdbda4c1
+:01625088e5c71d6f124d70b466e399325f11b4
+:01626009b349290013f406690559c4985f7bef
+:016270af87a3901045cb4cc5963d9b7d07a469
+:01628094f40256a10da066b86cbf0bdbd810cd
+:016290667843b2bb8b23f521a375de32ae777a
+:0162a07a0b456ce3aad1fdd31b873e2c8e3116
+:0162b015abdfa3c0040033a91bb53c3e6de76d
+:0162c0101c6b2afc064caa0934d1b1a04da434
+:0162d0131b0bc1340a4fe5a8f6bf4396f1b622
+:0162e0be5975f7877f226b5ffb6dedbf9641e3
+:0162f048a25624ab4de3d9d667c11ed75e5e86
+:016300f3738e5812180c757260f293c746e9ac
+:01631094566f9e0e37a562a5e83be79d2444e8
+:0163201e9fcb3b45fd57c80e244890475e19d8
+:016330d107752737c828f883b5e9246f39ae5a
+:016340da10b9ca4777a8c038c031ff96342ab1
+:016350b650defbc9477911ece6b2453eb32526
+:016360b99bacec957f285ad81a1a58f836b07a
+:01637028eb9383e154791d63d930de133d859d
+:016380f8438828d8920e906f595e91f21c928e
+:0163902f2fea375b13405b465e2dbcc48e2004
+:0163a012aa2048064a0958eb8e969e1aa7b120
+:0163b0e7b725aee00f8b7b15ae325902a47441
+:0163c0976f3bab4cec4f5b98f3c0f13ba2ee1f
+:0163d0d75ec08aa618a5c4beaaca70f7c2ada0
+:0163e0f89c261a618c22ae5687c4913590d4aa
+:0163f0383777f27fbb279aca2f7f0fb81573fb
+:016400a7dd60d67ea47def2da99d66f8cf94ad
+:016410c2ed347ac45a194908a0b52eed4fb577
+:01642096ae46ad90e7c2499543f3930bac33d2
+:016430c215714bd0090b221cd4d35da0d9290d
+:016440a198155010a42373d8861d72ad8485e9
+:016450202881270b2c4e66b34d755bc3031ee0
+:016460e0dee05dfec23f5ef0512a74ff1a575b
+:0164704b30fabedbfaf26a22aeab7998b287a7
+:016480df6dcbb300540aaa72e95997210b85f4
+:0164905fd8f1d25e2424111e4d218dad7653dd
+:0164a0f1177c500261c7d096b6c0c2472fc449
+:0164b029419f7472df03dcce9841cae61b8539
+:0164c0c7666e42f5de73210958e3604090e287
+:0164d00188c25e7ba12c6644529ad4c7667972
+:0164e0a9316ffb5820347176ab10b5b9acea6f
+:0164f06f82d99f48e89b3d29bbdcf83c515b82
+:016500abd851cecde7e9532381d1895c5fed8e
+:016510eda5d746d194a25e47db868c74fb853d
+:01652040f97c2d6311ead3d2984116b6f8b4a0
+:016530f1fecbfea54f3dd9ab3a78b87c33dfa9
+:0165406ccecd0d4319daf8999f42a2b4dec273
+:01655028787e7b552d84dcd2f1ae1260728d66
+:016560860dce46fe6d26feac3493acb6a4f54d
+:016570a0e6a7c877b09166b9b4c5db490dbfdb
+:0165804b5a0d367c9ef2ef0178c51c40c87002
+:0165901598c6ab341ef9322527b5360f332ffd
+:0165a00050537e426c000b1f91413260458c0f
+:0165b0a8b764203e83539318bdc256428f1316
+:0165c0860e7ce5842c6704c951c2cdb32c4a2a
+:0165d0e114c85d91a358ece9a4062136efa23e
+:0165e042423f086d2017dcb57a9b7755ee8e86
+:0165f086b89c1cd9b0e65a63a6604d3e9d6753
+:01660089545783024a765dcb0a4c500f8e1960
+:0166105333234b12cd3e39c9b678cec7776232
+:016620ec06c11242309a0b012b3a8bdf8d42d7
+:0166300886aa77a479792da3ead0102cac3035
+:016640a3460f79a268a764b394bb4f6e2a4e70
+:016650049ef02aa1a6773c4d42be7270e918fa
+:01666072e5e0fe77076f548949bd9fb14dd2bf
+:01667095ecddb1489044b6c2c55ef9f212b55f
+:01668063ae00924fbdf2835c080e6c15ad5d94
+:016690a97992c6cc8a449c42b46aaeda5239d0
+:0166a0a1855cd5bbda8192aa931812a13a5c34
+:0166b0cff4bfeeed0791a3616b0ba7fe3d9fd6
+:0166c04699764b8c0a4da34e3ec941a47082aa
+:0166d0b1107319c19a833c8611dd161074bb60
+:0166e0fb68c20f4eeb64a3598a774f0360edb0
+:0166f03f5e4cb4c6cadefc332e97749fa74445
+:016700e7a88902226101cf9c6559f9d4ff0536
+:016710b4e2a1b6eb0c4ebc67712f439a21aa3c
+:0167202ab010f1342edf85140e1340809d71b5
+:016730d71e4ba2d597844fe13efc8996912c93
+:0167409f10b0f9544153153439d85fe37b0156
+:016750b4a415b4b9e47c958d52fdfc1fe2d20c
+:0167608abed0683d522859a17b61a6c82b9a9a
+:0167702ac0890e04d975561ddeefcb8065bdba
+:016780801b9bb4d2499c20fe317cbb4a4e8b8a
+:016790efbc4a12bd44ddf33884ea8c9d714440
+:0167a0476abf096e47eae7a06f4d870badb8c2
+:0167b0f3f6cc23cb37b51855629eb4e672c52f
+:0167c0db34a0299b36eaf7d6c18d154d38134f
+:0167d0ada636a614ac2d8de376fee4a8e2ecc2
+:0167e0c78366fc6b37c502170315a55291dd2b
+:0167f002b425b0f88154154a3a56300bbc831a
+:01680062db46b9d5d08c830d6a0a4e78844dd3
+:0168105ea409b01b5874a053060ae235e8f415
+:016820cba6736557768d06132a74c010f68fb5
+:0168304843d01af50d5eab2a206a8949a5d4b6
+:0168403aecc0624e33a1ec07504a34c3b20f85
+:0168501ba3f08febe5a36561fa6c07b3bf4beb
+:0168600d6833050b4f71bd2c692ed3a0f70457
+:016870489a7b9e71cf8554c93b37e5ae324f75
+:016880b0cf0ebc56d1c46c790ec5f70f2f86a0
+:01689060aac6b693554531bdaeb766c625495a
+:0168a0b618225cf5fc6ec87d69646c5e665b86
+:0168b0938a60f8fbfccc3c935c873300944ca0
+:0168c039f3bd95e33566659ac8c5b427b76ac4
+:0168d0da4cc82e92fb34108c5966d554358c24
+:0168e06225203ff8c7150b3193ed76a65066a1
+:0168f03395c192b79a00a616d65b925858a2c5
+:0169005a54c6623711cd59925e75c436177a81
+:01691061efdf0c53f5317583e2b48f0c2eb554
+:01692091ac12f453e50b80fcdf60374a55b1c9
+:0169302ddf4ba77aba7e0fb66c78c50928d3e3
+:016940fc56f887a4c3910d3f00787ed0965082
+:0169507b73f543fb25c35412db4a1a67c6c0ff
+:0169603825571beabbe0b9ae91faf9a5b18ecf
+:016970ced66c0447513903224176280e1045d9
+:0169807ef12be7b7630aeec24fc7fd5a857e5a
+:01699026c7a35b96987b37e5a47440079e0856
+:0169a0584b17f879ba52f6b8a5f5c06c24feee
+:0169b0773c3d94410396b52eea1ebabe9e2390
+:0169c0b8d6d537d2e090162c88e3e871904998
+:0169d000e07bd7cafaad306cddb1bc1fcdb334
+:0169e096ae742942b3e4f4992609c70527e881
+:0169f0e03bf6a002e15a4a8dd48d64d96f2b15
+:016a00696e309961bd6af215712cce0bcdb8c6
+:016a10cbf7d1ca800cd6fc0afa48b3b9278679
+:016a20058c513be20fb70a50a084a48bd51bf2
+:016a30d30940ade2a4bc68b3bcad8cdb8b38ba
+:016a400af825ab134cd6058776d845a3351ed4
+:016a500e2b0974d5b5606660603cc7102d407d
+:016a60223b72a75a3d306d7b47372c33f5b6b7
+:016a70a15f7d50688f31cffb653b25dc16d311
+:016a805879cac2d19c88886225ee4c9c58382a
+:016a90346ee13374ac2906e7fd6e4b348dc73d
+:016aa09a8348afddc805d276d7d810a60e9a95
+:016ab0f6903b4070efce638a133f92c9b99d85
+:016ac07c0fbe48e1d882a1bff52199bf06fd4f
+:016ad0e6cbb57e9d6cfa84a3d1a907cbaad985
+:016ae0efa836492bce92d3bdcac4d3e23b706b
+:016af062f2fc13695850263c12a06fe02823ec
+:016b00ef8c493f4f0c509cb5888b2fc6d580fd
+:016b10428242bf58367a203f10283191fd34b2
+:016b20c2c737771452fe8f630749a41b01c00b
+:016b30a1c156536d6fe44018e4120f4a1398d3
+:016b408a14672af7d4f073f316a37e17124276
+:016b5030f1faa90a4269a4a77025717f4c427d
+:016b60d810f587cf36c2069a8ccc7006cd34c6
+:016b707d2f5c17e3e15507d45d92fe9a769574
+:016b804ac42874c7d06109f02c61dfb52edfd1
+:016b905d11cb1c3eda9f61ae1879b660ff498c
+:016ba0b0426742d170d3a0194d12dd240efeee
+:016bb06eee975574ec95c8f73b8eda193271e0
+:016bc000fd8f3b96869129d6c029f1cb7e4717
+:016bd0441c1fa0b2562dcbaaa2c541450add8a
+:016be09a0c78e843bd4020fb36524b91272d50
+:016bf008782dd89e04b3b4037b563545e4ad7f
+:016c00c4c813790f68cf4dc086df3777fe022e
+:016c102a19d29c34f7290ec95e06f48c5f6cf8
+:016c207602d810f335d8af00f3dbe36efaba00
+:016c30d80cb4c615ad20e8b5bbaa4957e893de
+:016c40e96c2dfa3a9632d08d23c233ef7e7210
+:016c50158e26666cb2555bb1cb9e1e116abbb7
+:016c60def6bed7ca9a57ab8da1914ad63447fd
+:016c70ce016d86b38d6eb542e6237d7d4410eb
+:016c809738a33586ccdc494ba31fbb1e12feb2
+:016c90d167a5bc8ec04b82e852ff5dd4d55275
+:016ca0a78a99c5f7c5ad62c8c144a6a78576fa
+:016cb0debd4b1f871843f0c7820b9647428e2d
+:016cc0d19acd90fc40d28217deeedf27448b1f
+:016cd0145ba52536def635304e001148561fa1
+:016ce07cb03a9108c5c3743fa1a2ad15de511c
+:016cf01e884f8ca8cddc598e01af74a7f71daa
+:016d002c6eb4eac77ddc191f501d611cfe9324
+:016d105095734353c3ca3e4db1f1109775a729
+:016d20016d2423dc24e55c28d1aa26d5edb665
+:016d30683fdbbbe46aef3580c6b2e5cc1576ac
+:016d40ce6f66175613ce10f29813f0fdfcacfc
+:016d50b30747a52c3d4211ed9df8ebf0b8ea6c
+:016d6073d62a1c39e407264d9c0fba0c3be4dc
+:016d7004f4990eeb03fd96e9f229471a13f39a
+:016d8073dc5b4772287640522f1a491ddce203
+:016d9021e3fc2470adde00a7987eefc1a57f3b
+:016da086334a8549afd97c166523b44b241263
+:016db0f6d3fd572075ee2d5dacb68034cf0332
+:016dc07413a1903cf0abeff1b643175094f8ed
+:016dd0f029596f47b7c9e3378f57ba160bedcd
+:016de0ba61ddab9fa356337b91ab1429197b9a
+:016df059e823b06d5816de1e743aa45ce7c98e
+:016e0041b085a4df1982c53f7799566c5f8202
+:016e1036364335138111609531ce9b40097416
+:016e204b514348cd75799c8e257f0b7a21d2c5
+:016e3097f1bf84595bc3ecc1a5a3afc72b22a9
+:016e40444b914547c55c6a1196100d680f8f48
+:016e50bbb2c905442fb67f75ec8bfb77be31ef
+:016e605e83d75171b6ab74bc12af73b4876eab
+:016e704373e87489b2ae66be5699b6f86fe18b
+:016e80ac9e013d1aff3a69f3b2e93dfa5cb8d9
+:016e9028cdcfff209b983ecd90c812155501cb
+:016ea02dfb3b134aaa5ce9e8992f0ec53917f1
+:016eb0328638c48e3fff7ecc039e0110d07716
+:016ec0ce7816f50a6f32bd24f76db47afbb861
+:016ed0355019be71ca011df8fb82a0375815ec
+:016ee080f1bde64181f4d850e30019313e4b17
+:016ef0694392554dbe2a98e0cb1caff3e0de3e
+:016f00fd923d711952ee10b9e1f3b46baece52
+:016f10c6fb2a3b0f12d484a35311396f2add32
+:016f20cd04ba2651270e14c9181a7748a25de0
+:016f304ff91786b9c9f777bc4c573a2f5240e9
+:016f40960ac23a608d3610051eb6630ee5a521
+:016f50923517a1b95118254375ab1c42d64448
+:016f605be2f3be8044eeb446d3f48f268123e6
+:016f70317f042d0b56ea5c343b1604a5832572
+:016f804b4c6560daa1a9b8a3189755dbe419bd
+:016f90945bcab105e5925474424c3edbac075b
+:016fa004736c3ad44882f44856ab8300a37df5
+:016fb0325c3c43b43445def2c293e19d72df84
+:016fc0b322d381c0d9e234c42ddb022d6298b5
+:016fd0e3f0e5c8a11bd60806bad3a758097fb0
+:016fe04d10ebfcdd7352cc40a4630aa82fe24e
+:016ff0ad0182a2163ac90000b03fb28f2ac685
+:01700008c698a10e569d0dbf78f34e6c2f4771
+:01701008e1595b926dd093787ba9b7fb0d53c7
+:0170204e59bd95e2dfa0b61631b277129d3a90
+:0170307d63aa2a7a99c21696874b20de8325d4
+:017040f94d3ba9e6bbb9d41ef2f1385e5d505e
+:017050269b3fc61bd00cf909a5bf1882cc5214
+:017060c95652ba077c3b9bb160e611c5b6d026
+:0170705dfa62182da294b0b910d24a8dd9f064
+:0170803850fc54546f29bc334ce8dfd9b45568
+:01709002fe20059156d072c6eb749d184c5a0d
+:0170a03de28e7daeb126fb4d23ed32cf4b3fe7
+:0170b04341702c349eb43fc0de55a76e1a347a
+:0170c077c9ad64ffc9015ccc0e17e10963911a
+:0170d02938f938b903b17d610112029025e2a7
+:0170e038559685208c2424f195977ccc6ab189
+:0170f084c7bf777bea64154db3257769e5dd8e
+:017100413209f464cb176779c28e303ed69f20
+:01711050edf1472c3a5f9bf484cfd51af6ebe4
+:0171202337d066e294cc7df646a1e78ec06ed9
+:01713068a8464548e2ae65267cdb5d999b21d3
+:0171400924745c235da3044afa286c9082bee4
+:0171506d844a202d715c466ae9eb3448636e9c
+:017160c2fb88d431e6d130718d9417facdd51a
+:017170ba797deeb20c2ccc69c83e43f332ae57
+:01718012fb26491504df454e06b1355fb919ff
+:017190eff199d830ab7458ef81c94d8c1e9592
+:0171a04a7af8852cd5c95f5920945ddddff850
+:0171b0d076940422af28cf5db51ae33b242477
+:0171c06e3b8f1d108628e9d7aceaed138abebd
+:0171d07ea3040d51d57c76b92e1a0a3eaa58d7
+:0171e0de9bb2cadda0bc3f5882a96b982ab81b
+:0171f066538dee2f321601bd71ca5e13871b84
+:017200783d4562451ea8b1d407b68db79eab29
+:01721012c58e909d807727e0373cd3da8a8755
+:017220ce765dd1b3e4e6b8caf284eb32660171
+:017230dabcf1c516ac494647df6b99c0f01c34
+:017240026d5fe0ff62d149e30196f9a4dca5ae
+:01725070758b4fb9ddb4565dcdf4868db59512
+:0172600bcdf66d62c148b934730255cbf21da9
+:017270cee50ab7e7fcf0a69fe5bbef62e2174f
+:01728000e021e730d8febd881f1800467bfee9
+:017290d68776d6dacb88f0b75789f0e37b8943
+:0172a031e438f662a821b2870cd02f7916e32e
+:0172b0632a780f1631be874b2ff37556ad8f28
+:0172c064063f10fa717ca8dd61eb5b54c36e81
+:0172d0a7b50b0a78b5cfb09c0579ae94b77d0d
+:0172e032569cd11b0486e81c20569a237a0350
+:0172f078844169f141abf943ffb6a3e19d62ff
+:017300acab18c32b73510fa28b5c42f8c132fd
+:017310549a2900fad61428bbb334a546110791
+:017320243426316b715007dbb87b88e8afc4dc
+:0173307c0dfccef2045e7a11fbfbe8f901494b
+:017340e05c9062b13ff2978ce42ce1a8eecef8
+:0173501b42845d3bc668cd6f92f73257b5e359
+:01736032fcf298729c4479b9eaf4e951cabc4b
+:017370e19304905793ea5351649f14465d7704
+:0173808bdb8ea2b9cb50ec7e137d12e93cf3cf
+:0173904bbe2718f51d364e121af215c51e11a0
+:0173a09a1e333e77294ebe859adec22f2a3c36
+:0173b0247f7be7de7f49d7b83ebbb532228d36
+:0173c0df7ae9fdc0deee0a980e2428340d5683
+:0173d0c3ae5736d1b26eb328c5afe42d7b8b11
+:0173e0e581eb3eabff4b6be2b6f769ca8a2eaf
+:0173f01744cc728a1bb5c56bca65f8da6b77f6
+:017400d8742dc3157a18c0b170c1844aaaf64f
+:01741066f684af3e2441826708979b0d1269ec
+:017420217ca294f0ed4240326b0fa3625b85c3
+:01743010d17df667d994693960282ce0267240
+:017440262c755f8011be6c4ff51f155c39542b
+:0174509f097e8819fccafd9329ab26abf20205
+:017460cf23095e093d75c5f9b27725b0e83132
+:017470325931ccc14b2fe8ac8c8020aa3ff8ce
+:0174800d5713850b91e7497361427e558fcdab
+:017490e77d2108e4c9bb6f722bf8141f324135
+:0174a0432dbd975e8b673c05237a9f1e215bda
+:0174b051d1629792359a304a8928e6c98a2aa4
+:0174c02f4b4172acf73034b8f80285d5c3f33f
+:0174d0a6e37d056a587cff964671e2cfbbadf8
+:0174e0f3a3508862be1a01b7e240666e5ac15b
+:0174f0294d48caf91c1052a36f3d304fd6fb77
+:01750029430310291a33c1c89b99a8310d10f1
+:017510d790de730b1a1799515009d4141cdd89
+:0175207ce23bf2af9552d3758479b8e9482ab1
+:0175308172dd2ef9e85428fd8b76a704195a99
+:0175408562e1848eccf3363379e0ad600588d4
+:0175508af64ef7c3c1dd33238dfb3e00489e9c
+:017560d3b3e32b0ee6fc9cd82e6a05e6e16f69
+:017570fb33a2cbb65a8801b9a749ea8f263e14
+:0175806219251235d0bb3ab373e33bb4a59924
+:01759092e6a4cd15435292a24fe12ab8f330e7
+:0175a09d691eeae4449a6da5493fa7bc949052
+:0175b083cddcdebdafc1ef924275ec593b6324
+:0175c077705ca84f28457985a3a9dbfbe07d01
+:0175d0dec647f7ecd7eb88047e6847741d98ce
+:0175e0405b87dbf077bfd5b8c94d9a2e9fbd7c
+:0175f0f68decf77b237b4437ab6a10157181d1
+:0176007fa9082c019fa5b0f812d8e37b43de23
+:01761084cedd6c105b6f9e4754a76f27ca469b
+:01762040d318c9232b3d586471bb9863c85a26
+:01763080bb8c651dcf3392cedb5b600524a0e8
+:017640806ad6b68e32f257e6d62f3268e473b3
+:017650f80a1131296f01b648c1adc1b5e4c36e
+:0176607a035c8aedd99dea647769260c3b90f1
+:01767026c3218f1b61ee15eb857cb264197a14
+:017680d91e5f20d97d683e26f3b7058b98190f
+:0176907910e5713c2f0c686030782e8dcbf4ff
+:0176a018f85f86cd0b9851820e81d21710ab5f
+:0176b05a615c8ca1bf0e900211c28cf3416299
+:0176c04d53b7a150d95011641d8167c6ab1bd7
+:0176d082172315d808dd0c58cea36989993fc8
+:0176e02c6e1e6e76624e5899e44850a99a8ce8
+:0176f02eb4a6cc79def4eced870ac0de8fcf00
+:0177008f330cd967c732609704c0bc4548a45b
+:017710289d051709adc74755fa9f5e4d9d83f7
+:0177207355689f337a5c98456947f5ab44cb73
+:017730b8fbf4b53e0f25b70975ea6123993030
+:0177404ae70fba728f109eda719d1a561d9b8c
+:017750d4a15a4f18197b0cc9c4bcb8a7e4a98b
+:017760b0bb2e381a0369a66c43907080b1faa9
+:0177701523ba50607367a361166ff110ce7c6a
+:0177808a6acd18d65b2dff2e9f86930e62a3e3
+:01779017f35ae3e37546e2bbdb42ed33cc58e6
+:0177a0239aec9b6169a8dd5de79745a527ceca
+:0177b08b270e8df6a44407c124d122ada4418b
+:0177c0225e4052aedc092b46fe1de7ecb013f7
+:0177d0ceb2a66f4ed70240c97b26bbad4a48d1
+:0177e02567d3146d1f881d06d3d5b9bf77f762
+:0177f06badbb3d5f34668360b9673dd2e1d03c
+:017800321eee3631b1958862fa4a63444ca2dd
+:017810ccdef1df3ddd83731093e19e9bd6b639
+:01782054a51fe239b4126c0c46fe3100ab146d
+:0178300b341680fc900b398308e01454f068e3
+:017840962a713aade1dae73aceb7a7ebaa63c7
+:01785019c7357e6f6a6784cf5f4c5b51ab4046
+:0178601339d14cacd16dee8b797762cdf31683
+:01787064fe8701849283aa1108630ac5d3a424
+:01788013c93699e27c5dd3f84ea13f7c1d50ce
+:017890b7d24f238ddc48d8a4ae0c561beedac3
+:0178a0a1bb56ba45ad8ab0cd8459bc3e9be4d7
+:0178b09583b1b788ae626cd834989ae77c43df
+:0178c0356f16bfe9178f949cc00cee3a96ad51
+:0178d03c6cc6c51130f03f3413512f92dcccb3
+:0178e0655d7a3db0f2a2105f1182f0b9c1532f
+:0178f07e7c482172edc43af4f95ad8b58da1bb
+:017900fa772f5c448418a24a850834f7facdce
+:017910e363388e6e0267094c29a24c97f08fe1
+:0179203a8c262a3b2842ef25eba1d605f8a50e
+:0179307ab442916e9be14b0cb8abe238a9a7e0
+:017940363d476d9fce772a576e11d2274adb68
+:01795004d67f5e86ca7d54a36bf2437ad920bd
+:017960996449cbbfe1f3e19e5514fca8b7ec4e
+:0179702a2c167bc7225e2e922543145f4fb101
+:01798082f113d57720a619cf8ad80b920c48a8
+:0179900abfc8b9ad571b363c9d8ca278cf7af7
+:0179a0faa7b2a615293a8da88a4b56344959e3
+:0179b024957873b457dc77311bbe11c101f153
+:0179c0205872d07b9e4efbcb0df5c585e9052e
+:0179d028dc20c44e08be32e8e46621a2315bc5
+:0179e0083c69649c98b2f8e3f792bdae3cd3b3
+:0179f00e75da18c7762f6a9bb9c2f3b2fdf329
+:017a00c22098a2287ddd5d103c94fcadfb697b
+:017a10af1cf8995e88bf5f8516cda088c6e757
+:017a201c2ef09d646beff68c1ec4f15d1e0c71
+:017a30ff82ab5f6d11b6ecb9c4810514dfe384
+:017a40c0bb97e42af52f1785b167168354779d
+:017a5051ec90d67bea8ab32ffca08a947bed1f
+:017a6062bba2570fd1b2ec2b60657d2faccb22
+:017a702dd1ed7f00e94799ee0bc533e3d62228
+:017a80a6dbfe7e2a55ffe2f2f203fb90b52bd9
+:017a908bb6f3f67a50332e8c878887cada8a35
+:017aa07a2a71d74eb1acc23635f5f7d9f8d02d
+:017ab076f4d24606b490b26f0b4718d07a3a37
+:017ac0893847319a293921cd1a26acd526fcd6
+:017ad0523446afd800453f466fa4b586870db4
+:017ae0d706fa3c26ce4f4d70ed6a3bba0063b0
+:017af0c757c8cd6fb3b76e6a5ce3c825910e90
+:017b00953c92b6a5b56c32394012dfaefd586d
+:017b10c106ee6b3daf6855aa3abecf70e48b99
+:017b207ff48fa08190bbe694fac1fc8e87931f
+:017b3012659398c8c37bee01d72d6165f612f4
+:017b40636c39f397e0fddeadacf558d990724f
+:017b50402022e82d291cb499ed60a5353a6255
+:017b600c3e99c2c5aa966e071cc2693ff0747f
+:017b70f48edb21b96caaab81c69576a16367e9
+:017b80fcacb3219f5d499cefbb182b09f5abb4
+:017b90263761b8a752650ab36ed2c4cb7c9847
+:017ba02d165e0d63a069805ae32d5a77e5cf5c
+:017bb0e9b61e3018c0a82fe3a3a790947081b0
+:017bc0bd11e7ef28776ab4af3094164db0cfd5
+:017bd07a447619de5b13f361dc6ab0ecece4d7
+:017be0cdc4d526c9ae60877024b98a9e7f802d
+:017bf05d67bea350dd1d7dd46ef0578d26bdf4
+:017c00ec1168fef91d3d2f07e5d49f4988a37e
+:017c10868fda1baab25e00aca45a8eddd5179d
+:017c20b10de88b387041481d38e62912b0cb03
+:017c30085a26f0feea0aa40dc3e10d2fb54005
+:017c405de969bcf0f619d0fa30b8ee7825da13
+:017c50526e938c9a73ecdd6a9d1856af754352
+:017c60b1ecbd8afa5380b751806ac4a370e5ab
+:017c702894c09c73baf7f4f9a3444012403e0b
+:017c800f841fa17c117d49973151fa82cd49e0
+:017c90f549d4a1f70d5a825b4ce950463a818d
+:017ca0d845a32e6e78bcc10f903037ec19ce76
+:017cb04e1609621169b33b63f9aa8333a3c94e
+:017cc04797aef08cae4b99171cdb3355b03213
+:017cd0d66ad8f90b9cdc6d64096052b1a5d8a4
+:017ce07b9cc4501ffcf735fbdd95cf8e1ff91b
+:017cf067c04605b10bb1e768560cddc82daa94
+:017d00f20ebdbb9dad98e94af6bf4e67176b18
+:017d10a451632272c85eb40d67496dcdda175d
+:017d20e8bbad3e5e63203dbb856d1b6df387ef
+:017d301ad00acde3e2c36a4196caba027b0422
+:017d40ceb1f76109fd9defe782ec915384f265
+:017d5008834e1ff892fdc022d0d1e1723c25dc
+:017d60f90ac62888a42e75dab55fc1cb25c51e
+:017d70f7cbae6add70efe156f6f19e6b5f1ee2
+:017d8018f381f2c8e2845b1768536bd5eb4eda
+:017d902bb690fd74e6f1faeba8aa2287fb482c
+:017da07de465fdb37ca8db02670b61119474ec
+:017db0dc1ae357581651bd179adf206e355d37
+:017dc0f9a5ac6e8e4213d90fd8d39e0dd106cd
+:017dd093682d3ffc1b1617ac063cb6b747e27b
+:017de03174d08e6eaefad39e8701b12c503c89
+:017df06ba80103d160b0546f4895c092d91794
+:017e00c36cb3a0a98c4e6928a82dc41d2fbce3
+:017e10efe22cd98a29e7e78cb12818e5367757
+:017e20175a8105fe53acbfbc0965fdad51de72
+:017e30d1b2246eceedf747564dcce21c3f4b92
+:017e400dd9c1e591780533de181cdccde603a6
+:017e501e23eaed2a13206296eba11c71ab25da
+:017e604292c1d17b4d34c5a3b39e5b4d68a5c2
+:017e700c65cf7a4138d42b17ee99c60b722aa0
+:017e8086037b52476518f759208ecd0bcf840a
+:017e90414a5bc701d662e0f02ef8121ae3f05b
+:017ea08d6682f45e4cd23a675a520c51d344ca
+:017eb0152f2b209a83e0e87ed183615113f6b8
+:017ec0b38b451a98116a57b78acd79e49ccf77
+:017ed0fd5a15a7d9e022f92c56d828b9464a6a
+:017ee0cf97434d4606f8c898ea4ac2dfa4d4e7
+:017ef07baf67147866bae8f1df73a6fbaebf3e
+:017f00fabcb629575a5f5dbfb8565333ffa8f0
+:017f103b784758564204666c68ee769313b00d
+:017f20a25e6666e319c5475a19fbfca3f4d0cb
+:017f309f619972456887643b60bb8f73854bab
+:017f409d816fd5aed59605f38e44a3e0359b27
+:017f50a11005f2b0d160716a2b0d30e90e848d
+:017f60d79e3b5a684a231c9f43283f19915895
+:017f70c8864b83944c395d630ede452bae331e
+:017f80fdc732c454d248c9f07c6ca3349d1cb2
+:017f9044c9a546333dd623714defda901103ef
+:017fa015283d89fac9d63d6dc3696da24792a0
+:017fb02d6a9fb0f8f5a33b90a74ae1b1269582
+:017fc063a2909bfea177f290d0a25eae5db101
+:017fd0626eeba4352bd097557677e635bf13b4
+:017fe0eed5fa2cab156ff9361e58123de02abb
+:017ff07c3ee8e02c9a5bdeaed252d16de47181
+:01800050f49f207ba5630d1453391d735b8c33
+:018010d27f802abd8d965f72b44371d8ba97ad
+:018020def1eb5ef76d9410dd71dfc585ff4ba3
+:018030b47dbb44ab42f32536650a014cb33ff1
+:0180402c0d58813dec748ece4d5c49da620079
+:0180509cc225346dcfdcbd4947f4e2e13a7cf8
+:01806064585c2c6065e17ddfdc47d4a04e9b84
+:0180708aa938db0979a6b664b59c522b46f0d9
+:0180805d464b48b5335b99595c183314160c47
+:018090e80a6d187aacd180415a7a8c39617686
+:0180a0667bb666a4618278fd7df2e9c80bdf9f
+:0180b08e851d851a39caf6247dcd3f6ee1e34f
+:0180c010721e126f7cd277a6adf50b55c32914
+:0180d0d48b2af36d5bd85732aa351c7cf1186c
+:0180e0bf5ed28e87a0d52507e95d8fe035912a
+:0180f039c51bba8a4edccf87c995f261c65771
+:0181000e31a7daecba7d0e2d4f7d32d8f0dc56
+:018110252bc6b88b5aa2e60e3dab0446a75c5c
+:01812025bd014424f7d871f09e5b6e24298bc1
+:018130d6c3d4af698815d5ffb2395a3b7d87fb
+:018140ea8791e132816d31c2e2baf4c938d33b
+:018150f97d83fb103cf326a2fb5de71efd02d5
+:01816089890fead24d0706eb35eace12cd02ce
+:018170f504de23af1d0c20bc1e6e4dc538f031
+:018180ae4e4182c1e0ac76960effb7e7794104
+:0181906f99aa153565e535cf5d9babca389701
+:0181a02749e46cb8e751ee83bc04f538b91c9a
+:0181b0c40396145ed294fac2ce33611fddc0df
+:0181c04a4db85a628d818633cecdc8c9a3b35a
+:0181d0900389074da5eb55b40e9a7591d5e466
+:0181e08278630c0011ca63649c4246ab7d6655
+:0181f094cb1312e6caa2db66162915eed7b55c
+:018200a7fd313abb96c1f349e76df63e64a715
+:018210016cb3470d93ad47a3cf26afb86d3505
+:0182200e878b0c17062bd79116c8959569888c
+:01823087d551b62a9b98f8a7c2bcb15cc3f04b
+:0182408681c8590e8889ca08328d6def47bfea
+:01825029465b8d077f8acbbf36c5cffbf6c0f3
+:0182603557c898aec6028f51ec35104b518b41
+:0182708a35615f03be6ac68384b684c3885f12
+:01828097536312d08baf4f40e0c67e732eaaef
+:0182906650dbef7449b0dbdbfa83effdd62b1f
+:0182a02b14bd61714debe4d111718367bcc401
+:0182b011380b2b9c56fa75fe60400ac5da06aa
+:0182c08907c98a2c337d84c0f28ab4b75dbfb2
+:0182d0a2d2506b5173327334c8e45d45226c79
+:0182e07201cb6b9b3036a79f21791df703ba14
+:0182f083ecfadedd5e481e083922623a593073
+:018300d31c87a9f6f99954c325193eba3afaf9
+:018310fbab4af72e862bda8a4b7a894de5edd1
+:018320587d8d4dfd0762863917a8253fafe0fe
+:01833040eca1333804df611eecccb06df745cf
+:018340241669596d41e2636406336535bc1e80
+:0183501f2a0aa8d599afc428dab8d3e1cfe3ea
+:0183601a73862ce0ccf4092a82a6ca5c2fefae
+:0183703d323ce7270fdd07e9282b692b00de2f
+:018380625f7fb1b289c91b7a14a6f829f1e17e
+:018390eb25be6618ceb1daeec0df47c3ed2815
+:0183a0218cdfe005a3e07a888d76d24620c38c
+:0183b05c826170e42df2ac06f412e276579b8e
+:0183c061b05086fbb2d7c0f7c3b1477e41baa0
+:0183d0412be0be76b3d1e2ff8cf26ab8dc5b8b
+:0183e0c5e8c3f31883104236b75060c3bf7583
+:0183f0c302fbaba4484fbefc3df31b22fe44e0
+:018400e5e180de625899d7a7613ecef9a9c2ba
+:0184106c1295b8c330a47abee263b1bbbd0b66
+:0184202ea1bd01322e32cbd4783ad6c92bfb14
+:0184308fef3f50df2c9caee921c99b200718a2
+:01844083fb9b3a9f8d7ff9807dd5ca195c7ebf
+:018450c1749dde3dad01d177bdf03205dc644e
+:0184607d58affbf97408c2bc59ed7488ffa72a
+:018470a8821ec185b75fb267f17d8064de31ad
+:0184800c5a64c67250efa1d70fb8952b3bb07f
+:0184908d37cc9fa1ad81c33a172ff5ba9a1c64
+:0184a05f1432f3e87ca1dcf54700e80ed3265b
+:0184b0bb82940383d7ec587c7987d07a223d89
+:0184c0bda9ec0c839cbf132b4e4853a8861a66
+:0184d03215e87e6788e53ce9f0d2cc08d862eb
+:0184e007d45884110ed6c36a2bd33dba2fdb2a
+:0184f0b23ee551ce25b63031732aa2ba0644db
+:01850093758700a77cffabe667f2aac2f913f7
+:0185106829bb3a9c3929680ca22933c5d88739
+:018520c7dd0f19f851423c5e97512809975d83
+:0185305694d46a3550497fa2333df48f21aa89
+:018540fa44836033e54c06060c68e0a00aba57
+:0185501d5eb73537a73fad5bcba45b9db2d7ee
+:0185606568e4cf7410b7f37401328b3baadd57
+:0185700c2e18127780c6e367a64b346ff51987
+:0185808f0bd1dc042471f5aa9fed8415c180f9
+:0185907737e149062785ac87ce6ca782d47641
+:0185a05c3a93b0010c4ed082591c86c873b0b1
+:0185b0ce20a542f818df3a40fd90b85880ada3
+:0185c0a6c163aa72ae64d6d23e789ced258b7b
+:0185d0b77b463d481a39755ea4ec357f058171
+:0185e0735e65ba55532fdaaafea54e55596a03
+:0185f051254c39aef5fe31ee2d90d2cd7f2071
+:018600114d64d5b49637b8652b18a4d8744e80
+:0186100e0612496602807c0f1a4d9da4528c77
+:01862027c232e8ceb63fd24eabfe8296911343
+:018630784f35d9626fbd0af5c4d1f6aa525179
+:0186403b19511bdac92291da5e458b2701efd0
+:0186504a563417c083210a2c68b8d2aba6b8c6
+:018660f640ae124f32d75298e908b5f0e29b97
+:018670affa0a00d8dd2712bd69deb0e62a1861
+:01868006005650e70eac55ea5371e3ce332f2f
+:01869027cbcb2b6c2f29b54ff1587cb51cffaa
+:0186a0618e78555d2130a3c23600e1c487de4b
+:0186b0cfc900d2978fe9811b21965ea2f5bbfc
+:0186c0db1acd64490e2267a2ed7db60fe1f610
+:0186d0df62a33f20afa6e1930a476cce8b0d12
+:0186e0e9c7a85a16e020becc1a5d544fb96b03
+:0186f015982c7800353ddc011b726f9fa70689
+:018700ef4ccc3d2a9d74a3bf011361c147dcd9
+:018710417ba6758cfb6f451a1f1a1bac5ba279
+:018720d788c3cce2b5b64e09a2bb22a63ba685
+:01873025cabf82d1b3d8f45bf73582c8a051e3
+:0187403f62ff1bcb995f03beb6f8bcb250ee49
+:018750ea84b2b3aca4458c8320e3be8b2f4294
+:01876047f8bed7ca1deb41997f8a44c2b781c5
+:018770d4a050ea4f5fe3271c66394b1ce95b27
+:01878027f75a312855c07ff7081927da5153ac
+:01879029dcc9d77d6290fd5294f1c86a1ac807
+:0187a028532070c7c3ee4003ed29f99b175b13
+:0187b0a0fcd4c5fc19a43d0bdbbdc2d65fc078
+:0187c0b8de06b61713ba30d2eb23cc9754a350
+:0187d04d06976d8d03ebebb6944248448e5f80
+:0187e0373eda0d32cebfcef6b17486d2fa71a0
+:0187f0bf188c8b5861e9fcc0e4520e90f0d14e
+:0188004d6da4061995521a40d38a6704b56165
+:018810f9962ddbed1f2e43b4f56ec3ff0efb3c
+:018820ea84de4fe21e44d0c93928f0fd070a68
+:018830e2420b17e91116c81c0c526602575895
+:0188407e9edb4af9feb5d94e9004fe9e510c39
+:018850550c8de85beea68bbbebd1875b7bacdd
+:018860585a6b4ad79d508e8bdfdf16471c78d7
+:018870c8738f85a38074964e6163d67e0d5bde
+:0188804abd829b95fdf5e7abb42eae6925c45a
+:0188909936e1b245ec1211be640d3ca1109084
+:0188a0b72bdec969e276aea09c607bfb0c7461
+:0188b0edd9e67294e91205958565d7efbea1cf
+:0188c0163e0e9d3d08c0dca7651cd82cca26a3
+:0188d056eaec6a20dec5af39daf56af0c07649
+:0188e0b57f02a99f58671221caf7b068d17028
+:0188f0dcd7c3323c64ddd0e5cb8f6f06614245
+:0189000beb5cfde621e2a9b49e33409ec110a9
+:018910b2d80ff7f06544d1e3a3cff13454a68e
+:018920181b797f1f49534154e51952cb6ec3a1
+:0189307e81075401fab8bf8a230e88331cba46
+:018940e1228de284efa82e1dadaca5cbe1cc25
+:018950ea35c17f1a8299f70fdb333ac271abd7
+:018960c15a1612cb234a02df2cef86a2ea0e85
+:018970a36d7f54795409e388496a207aac86e7
+:0189803e81c13d72efc20217ce045749f1dace
+:018990a030f85415f4924164dbd5132db13049
+:0189a0c84a1b5b9967fef3577882c4a7867992
+:0189b0f1f232231e5fdba9361dd0ffa6a4b2fd
+:0189c063cc20db04cc07cda16904db735f41f7
+:0189d03848a4c44adad94a25179a1b1fac3799
+:0189e0ac8ee86c6ba7931228a1de8f3e4d6d71
+:0189f08c0ff45145a63802ab3a669eb981686c
+:018a001b18ed274439eb8c4bfc07d84a596388
+:018a10577b63a370b21f77c757a41c77124347
+:018a20108c5207e887c51b475300e0c3e3c574
+:018a309429e100b78fb509dacd238455b6ae5f
+:018a406622d6b66d51116b5653df5c629dc267
+:018a50ade94d087c4f23e910c91a81857336cc
+:018a60df60c4ca37988343d163dcd94e55c415
+:018a702a1e1bdb96fe0102e52679be6a40ee91
+:018a80f26b0cb25c86c27c562e5b167df39780
+:018a90fe2ce9e48fa76d4b865c30cdbfb0b8ef
+:018aa00f6417a3e815826130f169b2cebb527a
+:018ab063d78239520eed86aea71b12e3bfe2b8
+:018ac085e42d9ee72bad2b68881cb87ad5a4c3
+:018ad0ecad32c43edab2a200bb2f247302536d
+:018ae07df0c9e02e797df037fd66195db9f30f
+:018af0c4fd323d666375827475278fe22d531a
+:018b0014c99c7720819b666fa442448c221c31
+:018b106c90903ec36f7d832a15cf846a21bebc
+:018b206168a4a8c839993b83aad21710ae9e35
+:018b30c8664cf2b9e90977322cc9788b5e9942
+:018b40e21bda2b1449be296c10984adc570d00
+:018b502712ae9e7fed155d1dd9ad308ae1abdc
+:018b606fd487742c1b7136dfaaef38717c5c69
+:018b70efcbe104d6e8dd71b16d0e82fcf8c666
+:018b80bc8d64fe094c82e58d445af26391a175
+:018b90ab40e18d58fc2beab8daca526d613811
+:018ba0b9c4a6d57957973a3516061f7e244fb3
+:018bb0f2bb85b7383b0f6a5f9ef0e904f484e9
+:018bc0e03f92782235b83c8360271764b7514b
+:018bd03fe1f7014b8cba2233c45f14e5cf1a7e
+:018be067e99f85293440a09cea562a4ec7c52e
+:018bf07f4f1027a186c8f9cf69fc04a3f18662
+:018c00fe642d79689b823160db9958590cb5f5
+:018c101b0dd37c78faec2df5d4333b18ebf9ba
+:018c2077fe59d041878a7f8fcc994ad788f0f8
+:018c302e95b3132fa8fcae3c963609e64f17f6
+:018c40e208356e1b987d7523ea1caa931bfacd
+:018c50b345a6678aac2081bb0c5197f18aedd3
+:018c606bd37c9de27a7a59ae0e14f195745084
+:018c7095bf1952a97032dc3d5b474edf9c5289
+:018c8041a2156a1c70d354b4e8387b46188acf
+:018c9083c8801c4ff73306527ce4cec99630fa
+:018ca0636ed4e3d3d3435bc5227dd3d369f512
+:018cb0546df581ae0be66e8e738f91d621a9ee
+:018cc0b1ade709eb7f10ba5c48418e7970d0e6
+:018cd0d48b49016d1be412cc139edc4ab79b63
+:018ce06943a4538dc929ba498172d526f17f69
+:018cf002948eb7f86f53a8ba8963b808bf45f1
+:018d006ae1bf7d5d8f584ff017ed169db4a3ba
+:018d10bd46169dda083d04d6fbde6fae438792
+:018d20a46149485afce7e396770e6890893897
+:018d30a91058b89d41aa289f62a8282ab8b792
+:018d4021fb3f4b1ae4663456b2b0df5cbc55a7
+:018d50acee1ca48fbe4a6a579a894deaa4c5bd
+:018d6075f76d9b83cfe204ceb505ee68ca89c7
+:018d7055dee3efb97271e22d20b0609d0964b7
+:018d80b7f182d3c6cfe9254b35101be75d83c6
+:018d90b1bc8e6dbf882c1249622082fc3492eb
+:018da0e449d76906c767c5723341d433d096ad
+:018db099e838a5484bcc221ce2775e574cace3
+:018dc08fdca92346ee2c58b9e5c570ad5fb7eb
+:018dd0da2fa1ae40a88febbfdc885348acc124
+:018de020fd6898399aad8bd64dcdaa59e8d02d
+:018df0d653e7829ee6432c088108ae88d9c44a
+:018e00a683290fe337a239a7ec552ad9719125
+:018e101b6ec57c4c5c46f4eb19a845bb10cb9c
+:018e204b8ab1c70726e7cc1e3ac63d02d15afb
+:018e3099eb1b65a9d97c5a645b46d7d9a24878
+:018e4030c1e2ed18cd49399f3461f4d5fcf531
+:018e50ee078ccf1ac6ba3f7f3e3de8385d39da
+:018e609bb45807efe1cba44c22b283916b5755
+:018e700c9b48361fa7604a3374c65f86531275
+:018e80e00ee28ba6d283eeed41c6f87cfd8d52
+:018e90973a1888bdbef59ca89a062ebdd436ce
+:018ea0ff4de53e81fb8688c3a51b236547ebb4
+:018eb04cb4bf8f16ce2f5ab9acd03905403836
+:018ec08d74b3c8c015e3351c37ec741894c80e
+:018ed02d4d14658862f3f608309436f3aab20b
+:018ee0241bf3eb9fdb4cef4db84cedcfdf2d25
+:018ef06bfd81d0749bf071051026584e81b4d9
+:018f00fdbd4b0c8c67bac4de6d8d7d15102bb0
+:018f10d72fbff58981458e13adeb8d51e6b0a0
+:018f20bfb6d68e18f1223e5509b2618d374446
+:018f30882e210700c7ec0394bb7d555497b524
+:018f40f4ec98d557fef23ae77dcbef57d464cb
+:018f50347c904e2609ee6eed0e3450f9799e8d
+:018f60873cce5668e9521d8025f2a0013f1b90
+:018f70ea8ca39b8191267a44bfb9a1795c1b1e
+:018f80f3eaa4bfcf48bb3b52e1f2aed11da833
+:018f909b820b9dd6c98ea51515b887ed2b7298
+:018fa06fd50e785d2b4791121611b496061eef
+:018fb0d5e17ca32beca34f1e715de6943d1e25
+:018fc0c09da0d361c1a18b97a30b6b122bcd50
+:018fd0df784656096ae0bf267ce743521729b9
+:018fe0ecc6f3699ec78ef0c33c111b22908758
+:018ff0a33ce97dddfc431e0b72c25a6f33cb6e
+:01900044d60790cc1428d29859f28aac4ca8b6
+:019010655362186e5b64cb4abe29047804fabc
+:0190207a2056290fc560af8e9e5601f6e2cc65
+:019030098d9c367d20d0f749735e0800538100
+:019040567365a4c276916ca902ff728bd56904
+:019050781555a1a2c339288026597e704c8269
+:0190608957bb8cb3e2ef2a52d2fb2f5847ff60
+:019070e203998f6f90990924e56dc2c9493788
+:019080188e581e751b15282ba03133d9b400b9
+:0190907b8a6ea1ababfdf965dad90b313000b6
+:0190a00b7cdb0cad66fd88b8e4b94072d6a2fa
+:0190b0ed52623b26ddbc6655ef6d30e0ee2ba6
+:0190c027de671462d6381273e126a77e2349d6
+:0190d003fa63d6c08fd0f49ea4d2e746d189c4
+:0190e011bb82cd555469150fda3067093e4d26
+:0190f037b93e0894f252d637ca14ee2cfb4833
+:0191008eec603b0abb58cb2b431dd6344672e9
+:019110a475241843a860e9b2745c9d45471977
+:0191208eb5897b7804dc83f9ad057f41b53968
+:0191309586038cfa949fb8dc2a425b650057f4
+:0191406e618ad377b1260de684a5d90ba5c8ea
+:0191508568c81871b651b11dcea60963fe1053
+:019160ff0a9b45774047d02d93f710a9a19355
+:01917053015e2560df6ea9d2bde138b96cc074
+:0191808a3a0ba88f33127eef7201d94e4dda0c
+:019190fe81c24fdfeff3a3a0f12d40e28b74c2
+:0191a0bdef510d77df1761b63e4cb8da89c3dd
+:0191b01a9cc3551d513704663f4cc4c7dc1c34
+:0191c0ddf0b7c4af51a93ca11ba8422c9fad2b
+:0191d06dc7774039fafb85894ffe156f3252b3
+:0191e0686a280635d9dcc3265a09f4a6889b12
+:0191f088589d4e59e13eaa665e71055b74a223
+:0192009e35a6b2737b59815f9548a7afa8a3c5
+:019210b5c4720ef971ff1a0d0c1cadaa61f854
+:019220554e4ec5d7f8910b6efc45aa30087d08
+:0192301710a937de8f56e83e1b65e61dc60e0e
+:019240f76920810c195d0972135cd1d36c8e9f
+:0192501fcf25ae0b01cabdaea1b26a0a01263f
+:0192601a7ec7cf502dfb681892404a0cd87606
+:0192706d25f69577b1e0f3675d487d057638ee
+:0192806ecb9b496eec6eb3b2eb95d285b9b481
+:019290ef57f536f16070b430dea5b41906c28c
+:0192a03e6ebd86499d374a3e1c6af7333341d8
+:0192b00aa2add1f782664864a499435d21a235
+:0192c07b7e4d1369d7f92ddd3f677c3a72ad40
+:0192d07685d1b3cd03737ed025764298a182aa
+:0192e02bb849175168832629955d066a98369b
+:0192f0ec3fe4bc4bc26c8589f68deb2cc46db5
+:01930096587a239808f48e6229bdf3e8fffb64
+:019310cbfe8e1e2f2ebacfa483f74b94e88323
+:019320170cd7cc2917971efd04cddc6c744ad9
+:019330df86b5794b27d8f7fd7130af931fb499
+:0193402796035d631d508a5e0029cf34b70dd7
+:019350a3fbab310096239526cedb504ad0fb89
+:019360d81836bc614ac732799b799bebbff4cb
+:019370632e8ba323a932838c98b2b6e8c28259
+:019380a3f8eb4b72d4bb3cd4bc35c0838e73a1
+:019390d2a233a1faab038284aedc07627b9e64
+:0193a0652e54e71ffe820aeec096a0c64aead7
+:0193b068d317f8091f5ab250c9cba23b173023
+:0193c0f52b1a8a3a149fc369e3a300f28fd9b9
+:0193d03f983e0e630c2f2ae2737e7a4052320c
+:0193e0c75d99ca371167f9ee81e56428e386e0
+:0193f0ed945382f2803237b080a12f415e3a8a
+:019400f2d30bf79793e10a20916774c32f3db7
+:0194102fde9284aa48e663cb29655bbf658ddf
+:01942069f1f75327ace1342d807a6bd821f6e6
+:019430c1dd09db775884bfb3cbc754b8519938
+:019440907651f12da9ff282b25fb00ad5af13b
+:019450a9e339babdf6f730adc6304dd35d4457
+:0194605410c92c2c4d478aed1a702bedd127df
+:019470bac0f6ea6bb0ce03aacb7dc4bc26abde
+:01948099794a97f17ad87b260cf2fcec9f3c52
+:0194902c09fd98c2b36fe1233780ba038bbf3f
+:0194a0348d9b644ccd6ffafb9f8ab5e2c250a8
+:0194b053391f51b5a4a4f0ad85e2dc38e67e8f
+:0194c0c938d7782d6e6b795dc7ff1aeec992c1
+:0194d05e369aafeb88af2ace0e5e90e413a262
+:0194e014cd16bbf6db37475bcde7a521a120fa
+:0194f07ee2a5e64ad2a76622c9b25d5aae358d
+:019500e46219e92fbf1fc6962d1b4d0afc0849
+:0195105086884a0611f361d1b9705ba6492d5f
+:019520b3e1cd73bc4227a3fb895866e5a24fa0
+:019530e6f7aa9f6378c84c24c643a95b4401cd
+:01954094d6eda2c07d1ce4ffebdef6ce69d9af
+:019550be76566ace9e3c27db5e675e79b38aed
+:0195605ea4284f415a50dfb70587a2cfdea256
+:0195707a4e29a0d150c1030a8d966f2aef0c04
+:01958014993895a049dfb98cc80193a1f08c05
+:019590993203f7c4a907f39ac413883b7b5328
+:0195a0bca0454ddebd8893f8740195ac5895c6
+:0195b00494f9dc3d0030be5d0f8149d62bc618
+:0195c0f54c082627a8c808680696d8277314c8
+:0195d04a959922580abd29231b255c42f36ccb
+:0195e08e19e43a60f4246e5098ecb8fbd796fa
+:0195f0d42b8b5ca6c70e3656f9a6e06ab01a4a
+:01960096e45d493a1a2b69662096934d1d7612
+:019610865452720d2c384cf048ec7e735f625a
+:0196203b8b1d6e0b9ecd6fad02e10ccff4fcbb
+:019630dab3b9065efe2771b4436737e5431720
+:0196402a0eb546973b225fab90353088199787
+:019650a02d56ce2b5693373a6d4e27448f3076
+:0196601489b33ce090b44fb9e5d319a988a1a6
+:019670878131720626f820f8e830f7f3a033e9
+:019680797242b1ce1f91e8240490866349df4a
+:019690341c9f3d9c56d9b154dcefc12682a14a
+:0196a0fdc1059ef78581ac2f09b9e740885649
+:0196b007e5b39fdb2f71602df3b84a6a4326a4
+:0196c02866d5ed0231b41636f171096254ce11
+:0196d0b63408011dbc76adaca7df4a8c185d02
+:0196e06e8e808e29f2cd66553c65b4d8d26566
+:0196f00728e0782a1ee4ceadfa0e962e52e798
+:019700e6eaa4d2e3e3a0c82a59d308d140a8d8
+:019710b83717f5a610a06c411ad012547df3b4
+:0197201380504c1028ea6c63a5ee8cbeaba898
+:0197304429b0dd3433f9b3020ed202dedebfe7
+:019740efd9b4470b31456013757837b5605ba0
+:0197503a5097b746c7a8fdf702824dcf8c48de
+:0197605ac1fbadfb069c1fdcca5517f667e5a7
+:01977003e6694605e98a107999dbd9e7e27aef
+:019780324decf55c280efa2389139c037888bf
+:019790be3bf635c05478741f7f15739a844555
+:0197a060c7f514e25dc48d9801e663eaac1646
+:0197b0bdebe883bafa94fef77c44bbd4e97c72
+:0197c0003bdf44830ee03f35aefc9f04aaad49
+:0197d00c53fa4156230d5cdf943212f134fe5c
+:0197e0e795faba476a291f64077f5f1ac49a63
+:0197f0c71b66936397a03fc181984c87f54f71
+:01980057992360cc17e88c9801d2729ebf7976
+:019810b70a58754ea5a078aa948fdbc9f1e777
+:019820018816395217e1e3c95fc1b021a8863c
+:019830c89dc06cb1e19bc02fe2132c5ab51eb6
+:019840d62f36ed4393ec1a6bb4e6a10c547edd
+:01985032f0d4bd122faccd4b364ec9c904f673
+:0198602f6013f6e76db6bc2af9e38b5ce44502
+:019870174aa6f3b8722ac5d3add432e1451ae0
+:019880a217d76dbfa9b7ab6a85f095019c5581
+:0198909b2fab945ee5e33c617088e49e8c2e5c
+:0198a013ae81fa890d03fb9374590a44fc267c
+:0198b0ae61230d34ee1e72ab601beb079d7b97
+:0198c06dc292546595259bf94cfa3e9a050340
+:0198d0b065992ca03ded4181cf63c5aad299b0
+:0198e03f58c9418abc4f8e843da5ae7e810ecf
+:0198f008a439291354653af43324e191a6cffe
+:019900f41bee6f37dd49d68ad05034b78f6a79
+:0199105f3b5b066ed641890c2062f6080f89e2
+:019920b8533ed525d72826815b66262929ef26
+:0199308a772e0ec9d5dd8c05e7158ce89ce853
+:01994056d6cda7c6ca4251a078b58463946451
+:019950727ac865756682f056e61bb1e74af868
+:01996033f04c1d67579abbdb150620dc58c8e9
+:0199704e6e94a384ab260866a252faa4720389
+:019980c79eb0ecdf07126ba1931d88b11ed70e
+:019990bea01710d190ea01b1bbf9a2e42bd2ad
+:0199a0d61d16c7187bcfd9f60b4a27c8db9bbf
+:0199b08a58396d49f29d76bf73860c1525ce8b
+:0199c094417a79df83234a64532261b1f1a461
+:0199d0b30fe060fdfab99069b0996aee292f0a
+:0199e0d8188677194d1e42e095332c81f5a184
+:0199f0a69e9eaa7836a9894f1447a34ff81fa0
+:019a00d833c279fc6cddfba8bc17ecb72cef62
+:019a10156d32315aaa123cf5a646b7a0d06577
+:019a20f5dd2aa228305994aaf6793ac7d69389
+:019a30690069d04ed4a8b49eb9c866e15a17e3
+:019a40cde3d8bf011359a54e9947e4e64935c5
+:019a5052052eaae06a06bdb159e64504ffcacf
+:019a60894e012ccdbddcf0eecb23c1fe26a245
+:019a708d799e5805bdfc545c1aee5540387753
+:019a805c05816ca35fdaa7e845b72af6034da6
+:019a908c5bd266d4aae573064a582e202e2ed8
+:019aa060a538e744ba98dcdaee30f5561a3e90
+:019ab053cfca19cd5fc28b1f147d22ac6d0db9
+:019ac09adbdba94b4b34b68dbfc125cbd93d19
+:019ad02f02eb801a246ee1d2ff62cec9b75782
+:019ae00f2628fdf5b56940f29b380cb4ff86d3
+:019af029b8e82eec8bb1177e2d699d6477b95f
+:019b00d3d6077b32634397a036c641aba0cf1c
+:019b106827cd4c6921cbe7c4ace522b9a054ed
+:019b20ed8b320af61f1a263ae1e7abcf8783ee
+:019b309ea8d1ca6fcb59c6fe6e06d024a6a2f5
+:019b40780620cb1f61c65e5a236028339684ca
+:019b5075e14ed15c4a5ca94e0d9cf19ef66bcf
+:019b608eab9b4ce15e144d8e277fc663af9e7b
+:019b708eaf3b8b4f4a72906704d975046ad85c
+:019b80cf315c8e6da9907314d3bdb15990fab9
+:019b9054c485b19ad67d074107e86042717368
+:019ba07f4331c4980e21ac4910dfffa6104a43
+:019bb02faa2c340495ce21cb675685096a8fc8
+:019bc0e87cbfe00c787cc0d489ba37250ba842
+:019bd023e1796415a4ee0c484443f37431f99a
+:019be0a2b496951d5f8a44abd2276c3db8fe73
+:019bf0c8e48496bf59c0cd077a31492ee9359c
+:019c00782e8a910af35cf2c005944e628f81a3
+:019c105f5c3c645f4de9d054cd2ff180423bbb
+:019c20770ace692ab21b19f7104e6279ca298c
+:019c30d104e3ecfeff5392e778a6c26f40ac95
+:019c405989b398baa188f080910e7a9323cc62
+:019c503211dbe709ab0972b3085abe392a763d
+:019c608771afe919e167f16e44f448153907a6
+:019c70a80b610878e5afc83feef885831e554a
+:019c80ecb772a274eb10fa9797e05324da7183
+:019c90cd78de56fbdfb7547fd85cfffb33a0d2
+:019ca0d4d9524abf0f36f96b167a3489d5a9f2
+:019cb0a3f3097a1bedd94bf663b387fb35b748
+:019cc02f4b6697068fca1591937a0cceeaa930
+:019cd084571e531264d4c0271eab937ca1e026
+:019ce06afe902c0855631bf5e91b653864ea22
+:019cf0281b7c7b0b5d3fff41cefaf02b8ea310
+:019d00ac31136e6906e54175d5101b9dd922ce
+:019d10b236ddc0082c4aee19039df52e57c82a
+:019d2042a7ed14cfe6d4e4d71d49c4dc339a89
+:019d30056c1d0662b9827f70c4790fba7c01d8
+:019d401f3ef817419e5825521594f59404db26
+:019d507222e8964d692ec2e9909d9485c0b988
+:019d60f2e7766bf3063126bc29b99e88940c3b
+:019d70324e595b42360e21f1f9ec78a66322c6
+:019d8088d1e3c85100553ace5624d27f5db20a
+:019d90d4ec71eae5fc15e9815a25e623ed72f1
+:019da0298b2755a0a34cf86df599efdb0439c3
+:019db0926490f54b9d80bc80f69accda500595
+:019dc064056e6d18b2370c70ab7387ab93a69a
+:019dd043309bfb5570e69227763b9a1250b7ab
+:019de0cf8b95aaab423580caa987e521319990
+:019df066dfcd414e78ca27f3aa6b85446ec731
+:019e007b7b9507b1d59d30a0f25d86c50e5688
+:019e108913388b88c45b5f923ebeb299317839
+:019e20759094350e8aa0d91f84b9a4b99278ad
+:019e30335ebfecf53caffeb90a44ecb98f81e8
+:019e40bd1d420288559c0ded545c52208abdb2
+:019e5071bb2a400ed9726d03f6e1814b1323e0
+:019e606e45f3f179dbc58b0a39b0a25780b8eb
+:019e70c623893b1a801c6988863bd9ca24a148
+:019e8034490e08eb4c6a4411de8085273d9a2f
+:019e90c913f0007b1cd12781a965d7a014846b
+:019ea03480afdd71a152b3ca2ac311f238fa9f
+:019eb03e14ca280619e82d4c5642c51f7c95fc
+:019ec0402067521c7a55849313b6f05fac082e
+:019ed0f80733923cf4a4f6030943dc86a041d5
+:019ee01ea32a3ce71ecdff747d64b2ae02b19b
+:019ef00b568a24ca5a0780031fce7fd16da859
+:019f00a698675f999d9f7a94c91fd5ec85dba6
+:019f10f84947811d047514dfdf78609de236f2
+:019f204703977324e75b77f58d994adbcf0778
+:019f3019e27842567a52e3bfea3430342f56ed
+:019f4009a4ac57fc4e9e99a185a0d9d31d3c8c
+:019f5097df43e276e7c458445588dd3f610803
+:019f60cebe14387f5e8f40ba4c5a09c1aa205d
+:019f7006185f6bb5e49e066c99873c689ea13b
+:019f803b0afffb18ba79c53b4e5d699e3a084a
+:019f907df817f7554a0cbca3e7d3d4624507a7
+:019fa0074f60c20035d743770c3b95ab64d7a3
+:019fb0039928e3548b026c1f7ba7a28ede7a78
+:019fc0f2e68e10e2e6985cb3ca169304884e05
+:019fd09f787d98162860cd5595b84982cc3875
+:019fe0e1f1c5b8b1d76fc2f3cb4f7f8842d2e4
+:019ff0bc870fa349b543a6a740b6bde560f1c5
+:01a000c10d837e340957cdfe6fbda23a70c2fb
+:01a01099cfa9dd0d5114fec6ff5c373b3af0eb
+:01a0201b491b3ec880cb1b17fdc660e7c7b570
+:01a030db4fab38dcce168db8b3c47b66af357f
+:01a040601f20335bffbd28d374214f77ebd55d
+:01a050e83ab0bbf44a8f3b4ec76e912860fefd
+:01a060877fb968d88f659cb7b8cda67c256ee5
+:01a0700a897bc42328865bef3d0bbd64718833
+:01a080ca9d1e9e415c434ccb59895cea5dbb5a
+:01a0902483466676d7bfea93daba49aabe3ecb
+:01a0a05447ffcfaeb16d794fa3253212455399
+:01a0b091f99ff96ca44be169487f34fa76c082
+:01a0c0e8bfa36ace9fabf26113f08db6d0705c
+:01a0d0806e185cb83164bd9f02cecbacaf6dc0
+:01a0e05845f64b3d24d1ceaf6585821fee753a
+:01a0f075a9dba3b68e66c0da81b28422b6d3f9
+:01a1004e90b6bc149ee9d1b614359464a73f28
+:01a110f5acdb2b1bed4313e62b3f237098fc2f
+:01a1208f445e8422988b3b4f70155ca3869cad
+:01a130210fbe56dd1b20d198872f1a1c0d803a
+:01a1402f8c055012b07ad787f2ca8dd43eb5a0
+:01a150b5547f874b31516d41f602307f5f0e52
+:01a160a8a86e3d1b5aad3d3dbb643ce481d05b
+:01a170c6ab86d61f817c68d292e3855282aa86
+:01a1800dc7f55b691434184f4310d155a76040
+:01a190d2fdfd844869fdae4d59975f2129e389
+:01a1a02284f746df7672f517e3bfd166cb9272
+:01a1b080071d8ed2d59e1ec61669cd3ba26e9d
+:01a1c0fec8396104e2c08bdc540c9289bdf8e1
+:01a1d04efbe83c7f79476214cb7d861d3aa35e
+:01a1e0158e12c3c5a9cb59b11fe81e4409c408
+:01a1f08b1d0bb06a9a03c494a70d5629d8de92
+:01a2004965a18d916dd20ec270d7665449818f
+:01a21095b9ccd53dd4ac4b074714dea4db1b5d
+:01a220e2a52702211d01753a19c7c454797582
+:01a2300054850562db75faf90aca1761b56dd9
+:01a24090a57b6cedf850bb7c43c3b17abae9c0
+:01a250d91f93ced4ee137aa05ca2523ea5aefd
+:01a260c03152ed9c52a8baecfa08f8898365c9
+:01a27056703833f3ab6412cf123e626a31e3f1
+:01a280b585690e76bd892c8c2cac5b217fc6d5
+:01a2909b5d0ad2e11674dc232884c42bcdc09c
+:01a2a05fa7709e6b4de04f15958204af19b501
+:01a2b00a920401219504f02adc30b16fd54d6d
+:01a2c0b05a6137b8097c7fb31ea39370bd5353
+:01a2d0a4eb2adc44038a44fb31868f3d52ef5d
+:01a2e0a12ac45a7713e11cd807f925df208303
+:01a2f031267ae95d31fbf43434583b918084af
+:01a3002016114e3af43ae7926afddf4b2cdd6b
+:01a31098da4b1c0b6769d641cbd9f3638d9260
+:01a3206f31d7f302a4fa49210aab1088c8b816
+:01a330f3ed93abe644aeffe3036316f8f52c26
+:01a34022ac8e380ffb661590f86b28b5ebdc5e
+:01a350eaadac87a9547fa2137066a9dbedee0c
+:01a360fc2bdadc4b0a669a5a6b67956dc4d497
+:01a37072098d5276eae2839cb638480117e92e
+:01a380f85cf477841270669e64f42757e1c51e
+:01a39018c04cbb0c5c9b9ee0ca3bcdc3d3c4ee
+:01a3a07b96a41f6aee7e12fdcfefecfe64e96a
+:01a3b071ac8b4c78ef5878a1e86ef4bd108024
+:01a3c0e74b3140a011ce2619886b1bc69d0744
+:01a3d0635b5a44c1296fdb9bf972bcc69e88fb
+:01a3e0cb58eb8dcbfc3c2136e0d2a3145a3f7c
+:01a3f0c2d2840b6880ae31f0a67612a00d390e
+:01a4001ed75aa05a83a35d4a96f96db118a1d6
+:01a41041755bbc571959998cb88f52757a349a
+:01a420c36397f5d13c822a29662349a9d5114e
+:01a4305bd8257844e36ab0c12421076961ac67
+:01a440bf4643c4820256b6e717f39e231c1d6c
+:01a4508e22a3ddca85098f3db7c81ab392fd8d
+:01a4609642d40ff48efddaa6f77d60e1b1a13e
+:01a47015555fab97eaee8ca638716eb5bae0f3
+:01a4802584e73efd1b3d79829fd20ddb0226e7
+:01a490d6b3f3e4d8a3b723ae9cef458893eeb1
+:01a4a020d9da05eb32a5ae9bc971c470020249
+:01a4b0bd35e208089da4838086f8d3468e75e9
+:01a4c0c094de6e140de422d00c5bb8d8743d6a
+:01a4d0228534eed7c14e6f2316c63bed238267
+:01a4e01367c78574a84696df80678927eadec2
+:01a4f09bc633ad81b2fa8436859f06d88a4e2d
+:01a500bcd2202d3f6647767e13314c070468aa
+:01a510bda2c283fb42cc85b7d1ea526b3f8e72
+:01a520716c664432e5703507f7ddc29d8fa04a
+:01a53003e0e1620ac7b662520c5acc56d9f80d
+:01a540f5a2eae62ff9486aba331fd34bbb120f
+:01a550eb77b9766c88c50118f665f076d741b1
+:01a560cc9a72e3ce4c1024cc92c9e1050ee99f
+:01a57020845016e6677f4a52a24c36e6b0acee
+:01a580f54544bc7feb81c556b459b075634bb4
+:01a590713b0a69cb2fe63661bd59b36d023324
+:01a5a0b8dd7403fbfa1ff54c1300470503ca3a
+:01a5b0dbbb3ec7047a7e906340d91f25fff2cb
+:01a5c0dbf0d7c0e7e0e6daef4d92488fb24279
+:01a5d0629180ec922d6707992ba583c1b73e2c
+:01a5e0c89b3f01c70c1b5f40114c2d59b6eb36
+:01a5f09d7e7090a1b9edd63baa4b92816b6559
+:01a600b9edf6000489f3fbbecbd895586e6158
+:01a61099e77956ea1834fa005a099c8b679dae
+:01a6200ebd75906775dca937dbc5628f7867cf
+:01a6306ae0b600d6631feb1217093a7b6eecb3
+:01a640a5d464c56caeb49ac9882e44caca2be3
+:01a650c81a5778b40c39479e167136c325a3b1
+:01a660c41bd45ecd8870cf32e5c6bf580e68f0
+:01a670770e28f2417c0cd5ba30472951f84d5e
+:01a680cc0118baf5f9845d41fc83fefc74e444
+:01a69069051e5426d55af28565fcdec9a055a1
+:01a6a0629f7fd2ce3b00bc4666a0f380178ba3
+:01a6b0b91af99fac4ebb0fe8e3bbf02cbf0f52
+:01a6c01717a6d69275888981ecba6054097cfc
+:01a6d097196230c592a6bfb25f1c66966aaf52
+:01a6e03246718eb2fe6d41109aeb6a4fab468f
+:01a6f01c1049d6b82ad1a9f8f8943aa133e3bd
+:01a700a60e481f5d7913f2dd4fa115c962c521
+:01a710f14ef0b332ffc54ee6f0d57b1183e947
+:01a720f137919ccdf5814c45e42c9fc6c1cdff
+:01a730bfb4361aaa4dfb40294195ef5b58db2d
+:01a740aeebdd5ebb8dfc9c5938f9b02f73cd3b
+:01a750385d66c263ea0ba910da9d20cedca770
+:01a760eedd942f7618e854ce4851f9c1c116da
+:01a770dbfd057e087ba30561abee84e1a9897c
+:01a780291761d618d173ee6c882aff176585e9
+:01a79019c7017a49710eaa9c9bb4a856a0e744
+:01a7a0e53b7b2e59fa8039653fde75239a143e
+:01a7b037a9ac473ab4d625fa2523138b1b54b6
+:01a7c08dbdf1f150cb99c6bacb1302d6cbf9ac
+:01a7d0827bd5812ad703f56149ba933aaadf03
+:01a7e0b7a1c1831a2d73b1ebef95c4e469a9b5
+:01a7f0f980aaa56dccc19a0977c5483321f072
+:01a8008a6bb35342740e05f65546b110af6886
+:01a8103659981a7d845dbd1214c02e37eb1492
+:01a8204ebdfd0665208debc437ed0a4fa57f78
+:01a830912b93ad6723096682067aa0ccc7b470
+:01a840fd8c429dc9cb2831dc4fd594965c0ed1
+:01a8505cbcb70cfbed03649ed16c606844bd15
+:01a8604398be8ecaa19aa432f54856770dfdf4
+:01a8707e1c8dec06b2243924bcc73b91fe1d5d
+:01a88009a20a5228313ff8de6a8952edfa7596
+:01a8902016157a3b72d862ab7372cf5bb7ca73
+:01a8a03f97056598e860e45ca1e8026194dc6a
+:01a8b0057d013789ff88408b5f8e851ba71e09
+:01a8c02fca8ae32404ec48e72c7d3bfbcf08d8
+:01a8d0a712deaf78aeb47b0dc8ae57e0f2f5fc
+:01a8e06b5e43984366eb7438bcaf0e645e1c13
+:01a8f09a42401bf99a8fd60381f70b45286d81
+:01a90049b39ede321dbc4c2df22d12f987e984
+:01a910498ff3d2e48adca05216102cf9d7f1b7
+:01a92018a1df032f107f097e2b75963dc51da2
+:01a93051de2f728fd2c684b45a0057b2805643
+:01a94013b60b1d958fe8efdfa0a898c0db08f7
+:01a9509775138e4f54deece8b3ba74e5e025e3
+:01a960e8f1c058e9050aa70929bcbb02fb9c7a
+:01a9708aa51fcd47d644f29f7048baa331fc98
+:01a9808a7262d9b32e023b2527a5a86a1b3853
+:01a990e01ce374b42ed36e80f4ad0d0b81dc70
+:01a9a02e5bb178de150543838fad270ca16a0c
+:01a9b07f9327d890f308c91be2f853ee9907bc
+:01a9c052203a40a6cebc903456918820012ecf
+:01a9d0a374a6a5c1cc7aa62bbf6815de4daf7c
+:01a9e0f08a3eeb88e918c36f6d9a0d0022703f
+:01a9f0c83457c0fe26c9ac72c5f0e6cb007394
+:01aa00c61ece627452ecdf6cd06261b62c0e4f
+:01aa10eaa92ca68591b2a23ef545cbc0f7bdb6
+:01aa20c0fc2a3b718d84e3d95c72ae71b718e6
+:01aa3044531da867f3ee501bac13df42efa30f
+:01aa408f7f1cea740f80326e54d45f5507ee62
+:01aa50cf6499141f19bb0b7f6fa201ec92dc54
+:01aa60a444a06bca84e40f1a7fa122124acc36
+:01aa708da625a60c602c3148ebf7e2790366f4
+:01aa80f1af850ebbac1d43fa4e31a92d3f7108
+:01aa90028f788b62b16906411e623e904857c4
+:01aaa028f8af66dd43ddd9032431154c3dfef4
+:01aab0debba5857231d25ee68fed4b1dfc304f
+:01aac0eed74dac8422d103bcb2d5b29c09792e
+:01aad0a60c022f088ef10089c10d0f7a9f3aa6
+:01aae0f1eb5e538f8cbb0b14e7a902ae48e273
+:01aaf04f801c01bfbe6ecd7809ca9eb7ff7ede
+:01ab008b59247193a35a7348b2ec00ab12da05
+:01ab100fb6da4a4329c2219aa08ede43086d0e
+:01ab208432da30a968b283541c3a2a0a11873a
+:01ab30908b2b25bbe4074c12e40efe6b4ea6a7
+:01ab40f4905fd5318cd6335be19c7bc7025190
+:01ab5015e11f695cb1aa6d07f5779a340768e1
+:01ab600bc0516ac39f4ae572523b9d577fee77
+:01ab7037b0e877b9b7ba1916a4a3a85896a4c6
+:01ab805706616959e3d83d0c0957151d9ab270
+:01ab9033589f14cf46a44622d5c0d270e47d9d
+:01aba081b369ec453c051773bce17203c3c76d
+:01abb08314f92d80de4dcac3ae2352d1d7e69c
+:01abc0c9c921d39f79896a0832f695879c102e
+:01abd0d06f0366b5bcc7e4008ea4c77766be82
+:01abe08df85677f30d02dc1ede1efe92b6a3f4
+:01abf09bd3fbee0d4477f46fc5e94d75ba9e38
+:01ac00835cedf65e22ad3be21a542c2746313b
+:01ac1048fc6ec34cee7400dffbce106932894b
+:01ac2071d8340c8c07dc57b74bfe9466bcdd4e
+:01ac304dd2c21d5b9e4f91b784811f5a25432a
+:01ac40b93da6f3bdf72eba697a2d68d2835f9b
+:01ac5045c9d119ef7b412107b7b848c9f6fd3c
+:01ac60bad5c163f8fd92cf44db5330e14d6d64
+:01ac70a869810f0d3aec1908dcce88778df906
+:01ac80617d2288e552d003563b80f935e40902
+:01ac9033f8139ac6398b6af64379587fa4e588
+:01aca07eb9cdd79bad519a2229883a1de76329
+:01acb0293b900a0987462b64355d48e1a30181
+:01acc0169d8d4c916b41ec317c2f802bc8bba8
+:01acd0b97caf28e9d793b2b0699d6bff0faff4
+:01ace0db62f1f53668eeead97d1f7a428b75d7
+:01acf0a4056dd18f2c1ac94a0d91eedfe9b516
+:01ad00723d5c5930710cef2743c5bde25ff55c
+:01ad107757bcb74ead6034aa8872d1c8cbb1c3
+:01ad20c72c3000090c836ae597ece4ddb002f3
+:01ad30ab4863ab6179bbd1a42afcfa51594234
+:01ad40bd3b3eb15b97c4d35246c5859af591a3
+:01ad509a7cdaffecf4f4f807d63a561e089204
+:01ad60930710337df0350a57232335e14fbb0f
+:01ad70ce60e4c6174f20cabd977bb592b57b9b
+:01ad80cc6c6087ccada3d3e6144075897fe668
+:01ad901181e367a18a1ff9564f11e271269bcd
+:01ada08390ee71a867a225ccaff57f874f730b
+:01adb00155cbc236886b3ee827e3574283b36c
+:01adc0720695a84e2e7cef511d553e7377be26
+:01add08894b023c5dd655b59cb0c2c1436ce27
+:01ade0105507cb6e984cc2d55bf4ee0adf0dc6
+:01adf0817cbf96da7e9e929a9dea6be72e8812
+:01ae00add8303c699ba48b7a0e283780b53eae
+:01ae1079be7726f9a9f531389a8696fe53a1b7
+:01ae20845173278dc5129b07089173af89e56b
+:01ae30fcab03d0c88cc61d26e6ec44717e238a
+:01ae405f859b93e88923e7c3a15183c4f1816f
+:01ae500e2dd102532623a35a0d2127f39d2142
+:01ae60a223e86a0fd20cf2247dd0030859cc55
+:01ae70598e792dee5053d792a3e815871156e5
+:01ae80c6098c9079ec2738dc4016c43fb409cf
+:01ae90706a48033391b2aea5d1beb30b7bb1ce
+:01aea09c1bfffd3f98769870089800eb861cc9
+:01aeb01b27821b9f996fa97addd6cc558a734d
+:01aec0edadcb6f06ad4fb2b754cf93b4350482
+:01aed022b64d12df469b1dc168be4a4e0b237f
+:01aee0b7670238b9bb196789b1d4023c0eb10b
+:01aef00c0b04d93323939ed384c63a87d9e6ba
+:01af00ef4c786353e7d171b9c1f3be7968aa77
+:01af10842c926633c2ce880fac23a9fd15b306
+:01af20b63481a89212c874abb9f3bfa76b8737
+:01af30271927dd6ed0285bf8ac37a30fc7d5a0
+:01af4094ada6e8ca61d6561cefd567af23b8f6
+:01af5032a421c62ff1a2e74ceb4d88597ced76
+:01af6019c0addd595195d74ce3dfb02ff0a780
+:01af700c4684111f2df71f49756abfe3742256
+:01af805558a02dfbc43c70a086c25b851aa3e0
+:01af904d92f6f2c1f3cc354532905506ab4c54
+:01afa02f47e94bce75396c40edec7648cab110
+:01afb0be13b4ba8b80c9dea2ce706aa4fa368e
+:01afc03cd7906e751699516292b838813d188d
+:01afd02d7f14c7fce0e98f79398357a567d3a3
+:01afe0bb51bd0fbe2715673f2f57b7295b7942
+:01aff0dd7c4016b8f8bd2d3b9171af6b2a9eb3
+:01b000c2d0b08f0fa1de64b9f319528a64e170
+:01b010edc147cf214327f6cdd93ab05816adbb
+:01b020f2937f0de98044b2d1a9def3d1a3c692
+:01b030783f66244a16557788b13d2c137431aa
+:01b040dc8ccf34b752b93d0127e91fc76ac92a
+:01b050375cd402e64f60c0940e8d435551acbc
+:01b060cb65239d0cb4f95bd223c2bc6bb7557f
+:01b07059a2ecefa5ef2c38308bc597065c1bdb
+:01b08057ef7a362d50f74c45cace8a88ac9ac1
+:01b090cd696813c40757f4edc66208b398af02
+:01b0a02dabc237f719f9342bdfb02415add7ab
+:01b0b05bfe414d22b741f3d30d111e722af7ff
+:01b0c060a7e6f1b6a90a1d3ff5f8cc2c7dab3a
+:01b0d0c3c6e71635c6f01e56b45b9124cf4751
+:01b0e022ededab035556acdd227f596a9befa9
+:01b0f0d4e11bbea3dad66fd4f8ced41a2e89df
+:01b100d218ca53ccaa1d6d7508b59f96c4d940
+:01b110c7430ab86cdc196451ce3eff6a9b1fbe
+:01b1207b1c9774012252f4053c9e4f56b25ddf
+:01b1306f579d5ff4dd8780cb8eece20c574bef
+:01b1403697ff877a43eae1271b4a8a98005fa2
+:01b150508d2b50bc9d26a88af6e60253bdad3d
+:01b16094926a06d2a307db80c3756f2170f2a9
+:01b170aeba0af04d47be6540adc2c7c252b598
+:01b180d5e1cde00d5087414f1a82c8b372e014
+:01b1906bfdd193ec6292ea9cc5c2e52df0f96f
+:01b1a058970721a80da107392df77edf454a85
+:01b1b02884773f2d94994a679952b9b214a903
+:01b1c0d6a990a78dbf627a1a420798ad803089
+:01b1d04db23fd6229fa243f5aa72846b2365a4
+:01b1e06dfd450b419185ac99cad268bafb9a05
+:01b1f0c8e946a31db5ec2354e21d717f036c34
+:01b2003bc98de07291221d9d79c034a3e3dd44
+:01b210e6d5634f319d329640438f82b0958fd0
+:01b220cd9537a7fd6dccb54e875444dce7440c
+:01b2303dfd54084ce35067dcf21f94b284c034
+:01b240a3b941749196255b254a7a5c9558ed18
+:01b2503352036be4dc304a9db763c9cd81c863
+:01b260db5e75d6d2d44f924aca301a8de67866
+:01b270c2b0a3b6a3c5d0f30dd716ad0ef63e10
+:01b280cee08489086e7eabb2a99f5e8db242f0
+:01b2900203ef5555a1fc452d08c1867a11fe35
+:01b2a025651f38377e0eedeeee8959a6ac965b
+:01b2b0cfbe93e65cea0bd7407c9fa8d2f98adf
+:01b2c045ed261ca46997f3fe04d6a304aa96c3
+:01b2d0e3b4f2aa502c1eeeaecf0fe51f935ab7
+:01b2e05c4815a6f135408f6abfc9b061825966
+:01b2f03ea01a1e295cb0edb2bc401fb8374f02
+:01b30021c25e806c4b708955e9fd6090b68106
+:01b3102c1bb8f7d13597a8aad5de3bd21fc7d2
+:01b3204b2cc0d947bc4f63348c1c2bbdd8fa4c
+:01b330f94ada2b80b869ed327460e2f51864ff
+:01b34086c94f01925b64180da0f750b5488921
+:01b35052f411d1e137f6ceed873dd506161cb1
+:01b360b7beff3f7d8db6d2644c809d6e07c8b9
+:01b370fac2c9b8a9d54a6a807301d6affd8773
+:01b380d391169f629da81bae62272811045061
+:01b390c6e1deaccfc25846e291e401bf7fd23b
+:01b3a0d05c89954721a6f0b2cd1e543ef4d241
+:01b3b0baf813864d09e9b88c66a9558a60ada5
+:01b3c089af601745356351dc9f4807ec48deb0
+:01b3d03c39b039c4a1fe3ddca9e9eeaf81219f
+:01b3e023939beb8869278e49dd93adf3db4720
+:01b3f0f8422a0baccfb6b9352547a86d92c394
+:01b4003bfef60f85e73a20e1f1b717f29aa9bc
+:01b410bbca709ec7924170738ac076cf7de8eb
+:01b42018e1ff1be72fac4d8d13691bbe88c093
+:01b43041b077d7d94a09524c4f31150d2a9c94
+:01b4409ba261eb09f891cc677819562f1cdc6a
+:01b45000898286499e324e306f7754efda8d2f
+:01b46013f788779ea41af968b85f2e2ffe2b26
+:01b470ba12706c7f3c62c40ac58a6041aea0b4
+:01b4809e5d90576df90e7805a960f688a55bc2
+:01b490e25ea561042dfd2d2cb1448075d4c4c2
+:01b4a0be117f15cdd7dd0beda07f23a362b29e
+:01b4b08dbe2fd62b174d6ad0801997e85b060f
+:01b4c0459f916156c0206197b117036d6ca228
+:01b4d0a2d4affb2dee3a9c9d72e6a3725861cd
+:01b4e0912e457af677abb194c4e470535b272e
+:01b4f002b1f1944e6e23508d5fad6294f46ce3
+:01b5006466439a2f49c11ac1305b0e1334fac6
+:01b510ddd27f3dfc8430ac0a85f23ee0f2c538
+:01b52048729968cbb918123195c7088f587ad7
+:01b5300641269c8f688631ff8e446d6150fbc7
+:01b540f55a645ace24ecd1c61528fba9a57fae
+:01b550c4e482eff8321caff9b4241a21e2ced2
+:01b560192e0c7577bc1fbd7d4098f5532de085
+:01b570e904b07b07964f260c3d5fc3bfedd85b
+:01b580d1a7c308d51a5ef769036ef3a0a2de5d
+:01b590d09ec5ccc7b1097d56825d367e0fca8a
+:01b5a0c5fb35b1e3e169f06b727534fbd868a1
+:01b5b0c814401d227eed86afdbce05ad61a06e
+:01b5c0a3d3936cfc62fcef49113783db94c511
+:01b5d0d7370b6d0cdb8d5dcbc99cc2571494f5
+:01b5e069a38b1986a5bb0884834e409e3ee974
+:01b5f0877f1369f4d09d9a7051a8a5b544c73b
+:01b60099cc6bfcf4a2f6df49075ca3282d2197
+:01b6104a1fa285cb8d46dac8b24b7cde7e2bdb
+:01b6204c5ecbacabb129c50ba99433b64bce3f
+:01b630067e68066bd4899825cd26e5c118a618
+:01b640e3c2d064589043e3c3265bf61869ecef
+:01b6507d84042d5610e141e5101cdcc85b40c3
+:01b660ed49b0a3f3d3534e3cf4c146694cba43
+:01b6705f477a4ad51ec9d188d5fa1d0e183f92
+:01b6805f6406f3fb25e0557152f8d616318db2
+:01b690692b50f6c2dedf9086fc7d1d3eca05d5
+:01b6a0764ccf7e3c9d4396bd7c9ad8223fdbec
+:01b6b0cc046f28024731f1d505d5426cf9c03d
+:01b6c0d1c2d5e03d22ebcc75e47d857c9718b6
+:01b6d0153c8d6cba627f903ac040af19b7fdcf
+:01b6e0a8fc5f30425099d1cdda9a6ca3b14d41
+:01b6f05f7bbd19f0f03d9715eb0aea33faa6c6
+:01b7001a16eb68365914d49969005d3fe5ba42
+:01b7103ce74e5adf17ad5dc88a8ff09c54a9cd
+:01b720f9b2b7073a43d62eff49c07ba579173f
+:01b7303e6531eccdfd375e50f6be87600242f9
+:01b7407e327eeb7239683c063d5052e252dd7b
+:01b750c27b6a574e775f181b3eaee694ddbc8d
+:01b7609c4a402857ee6ececf035236935fe7fa
+:01b77032460a9dd68a4fd1b1c0f9390023463a
+:01b78032a37462031989a5a8f02c2c95cdc891
+:01b790c2935e23363e254c6ea5f69b68140f60
+:01b7a0a5bebb5e10063cd738f5682250d4d4aa
+:01b7b06bfc894eba0b3adab8feb34fba10962f
+:01b7c065c21e0e73d2ed24914481b4a21aaead
+:01b7d07a0355aa634a1d0a333512fb48db63cb
+:01b7e02634b293f3d250338933ad535adad857
+:01b7f0c8b67460ba5ecbbefcba7baba7a51405
+:01b800850653d648a99c36d8a3fdf7b711d56c
+:01b810b51bc0c55e52c7f2e9454771c0bf2dc7
+:01b820b036bda614ed7b7c53a0081427e8fb8a
+:01b83048c4da42f4cb8bc9a2c4c46f219855be
+:01b840765a16e2c190a367f046ac965d789537
+:01b8508bd75baa2b4d12b31be990fbccee5568
+:01b86085aa09c3f018f8140c30d2fdbf199834
+:01b87096b10dadb26235b49e58c66a1f272ac5
+:01b88035bfbf17a5153a2ca7ed51e8ffc96623
+:01b890b61ca601ad259cb0eb6c705fa048ebe1
+:01b8a0fab71425f7213dac77414da7a346b9bd
+:01b8b0b3ef2ce79ae52d106b8999f755a06f69
+:01b8c094156f11af290663829886c3c18dbb68
+:01b8d05fb22b564c8937a6ced00e201d2d690c
+:01b8e0fd78d3805b47b9379d4b1922de5af925
+:01b8f0437ce9958563176a6be5d5ab1349bec3
+:01b900724039535f93b0944020967651f2eda8
+:01b9107a3bb07e1b64bbc2d00589fd2a6ec9d3
+:01b920ae7eb06d01d9ee8201e8a62115422444
+:01b930325691d277efec60771fceeb82826d8c
+:01b940b721d1b1abc45d6dcaed7c51bc28e2ef
+:01b950274da6660dd72c8eb8ec15735d911fd1
+:01b960eb600cc0f8617df04e1a93f5595d5d4c
+:01b970dcc8ce0396abfe6e6f59ffac68956d0f
+:01b98020966b8f4c3c01825a4132bf969e3ed3
+:01b9909faefe31b59b29f616078706e929cb91
+:01b9a05543fc784f7273ee2abe013cc7f47023
+:01b9b0c9ea8c2b4e9e2c72255fe8e4a90f75f6
+:01b9c0f4d36c3b1a784fba593cab21412dc879
+:01b9d0d36e933f606e04ac8a5a3280af4391a5
+:01b9e07b6f596237c1afab5e1784a19b057f2b
+:01b9f034aa8b7ebd7440f052d7da6d5041f126
+:01ba00487f8a38dfec38dd935c59c5dc0f4e42
+:01ba108c99447b5438476f791a2f23070a8049
+:01ba20cfbb83901edcd9479794b4a47a815aae
+:01ba30521f05e131b2a050d4dfeaedd8c49a27
+:01ba40790d3140365770932f2f15a49d01c55b
+:01ba5016ee1e80c605eee4489572301ea5e248
+:01ba602a2283b0852cd607d75b253d3aaeecc0
+:01ba7035349a47673480780ff43a08aef611ac
+:01ba80bc1e47714752e9298e226359be728b56
+:01ba90f611f62c0d24bf91f862ef8ee17641dd
+:01baa0aca539a7c6b6b9e7a737caf0132324bb
+:01bab0951cd46d371926f2a24c4beedb3809d3
+:01bac034cc36fef37ff6cda5f20f3be890a592
+:01bad0eb034afe398acbbcb492ce5e2b57cb52
+:01bae05ed380b80ec4bf8adad865492df697a3
+:01baf058208f7b9fdcfda6ccb0e76b5ea0c31e
+:01bb0082f4f161bc96e6f47c5fe609c92f9744
+:01bb103ea221576356ccb66735963de853414d
+:01bb20b1175d0fe0c3efba27cb09be3d66064c
+:01bb306094920044b7ef417da0df5c475b1c92
+:01bb407fe2bccf9e15fdfa7fafc78b8acbfd4d
+:01bb504701e9ad240cc0cf0ef51d65ea5d8ea0
+:01bb60a39f8737a871db91e8bed436eaa43001
+:01bb706d2d76ecc6be494f93b771e502d3575a
+:01bb8043e34205b7964197975b19f3b5888599
+:01bb90532b845c9fa45395c271fefa4c43db59
+:01bba05d309bf8fa275c7c16baaf5164698b72
+:01bbb09fb67c29dbe2de35105a8ee28180c15f
+:01bbc0f4f46763c674e0d147b07dd5c7a6f39c
+:01bbd039cbb14313384cdd4b8f4d79f4094ff7
+:01bbe09cef36660658ebd54691a2449372995b
+:01bbf095cfa35afd193843486798ae331f89d7
+:01bc009aaa244a9af18dc7b994bce13c3006aa
+:01bc109d4721cfb9cb4cce7b4fef435fa8cf0c
+:01bc206c6ce8414e40c2f6cf93a68134c408b0
+:01bc3039ad82ca03ebfbc1adb0f4cf404d1dee
+:01bc40cec02bafa3f4a7b53766d5fb8a97e0f4
+:01bc5035de9e7e3296eb4030fdabff92928a8c
+:01bc608f14e767a6e28ed2b03c3420d9f50b5b
+:01bc707928ff41eb3992d239e52614e61f180f
+:01bc800f34869b30183794aeeb16bbbd03baad
+:01bc902b3691590632a2caa7ada1c90880bca5
+:01bca08b7ee71aff29cfbe05c5ec94fccc9849
+:01bcb07181ac18296b7eb2d7357e5fd1a277f5
+:01bcc0f0910461c4b690ec09a4d0846f3b5e5a
+:01bcd014d9bab3e74d184ca2b56ec255ad23f2
+:01bce07be617ad54507732afc6cbdee4a79a92
+:01bcf0c161a895c2b06da0efa34f237957faf7
+:01bd00358239d330f651e8808570253c731120
+:01bd10f60678957bf693776e094863787ab605
+:01bd205f876714847beb96d7cce30d04305ca1
+:01bd301bcf7856ea972d12d9f675326ac46992
+:01bd403e5d12a0351fef9edcc05f0947f3fbcd
+:01bd506ac99f5442254f200d9a6711b663e3af
+:01bd605a90ad001e0e965c90f4183548dc4ac5
+:01bd70cb1ab1691afdf8e082a1409d48261ab2
+:01bd805c9d840baf59f552b4bdb52a09efdadc
+:01bd9026a7efb7ed6e84cc36656548412d63d7
+:01bda0d3c37af05705de49b1093b40bde3c975
+:01bdb0eaf562d8b661c2efd529d2b607f9e73a
+:01bdc08866210dc5366b26fb2a6da77142e172
+:01bdd004466d908a92396c53671c5c3ebc7e81
+:01bde0212258da98882b86def2608f4076619d
+:01bdf0300b59a2038c771c5e5e96e2f494c144
+:01be00ce6de7d4793267b7a367f9f443c2ae68
+:01be10b35db3218f2a863e0ed7d52923edc7fb
+:01be20ac24da036ce049538c3846972b335be4
+:01be3088898f481db40ccbb543cbb4208e3f57
+:01be4066a223952a5d4578fdb5f4d3fd320418
+:01be504a218d6291067cf20ff56aa75d039483
+:01be60d532d8ebd12d3734c0c5b97f8b17828d
+:01be704dbeabd975a92200893b19439f7bfb09
+:01be804e9e290c0ecf00a6949f94a03fcf09a1
+:01be90a46eeb4cadde4752640bc9781f5c9c59
+:01bea0affbb5e2774272fc64be976459cf124b
+:01beb03544a741e7d8ce04ee4d4d21cf962587
+:01bec049ed3b174f5501a9ebb210c5c95384c7
+:01bed0228156c45f75be02f2fad2fb21701917
+:01bee0e43554cef6fddcbf057207c5e6d4a4b6
+:01bef0e99d2435eebd0d7ce94d76a6072a39cf
+:01bf00f4585961d24716aaad2bae33c4ca96c8
+:01bf1014687a44956f2fb33ec60e810f17bfaa
+:01bf2090f24eb8feca1605d9074412a21d966e
+:01bf30eb2e6472e33118e83582da76e2144046
+:01bf404a083b25c72119de83e39423aceae6fc
+:01bf50eca59de400fdcc44c3c55e956972f907
+:01bf6093e0bd732d849d43677b6955afc64093
+:01bf70ed75cb8d9b9acb44bfacbabc98b970a9
+:01bf80df277b6615e087f8f91a7683316c3ee9
+:01bf9083bce6442f28a62c50ef3a151c538821
+:01bfa08ff929a98c0ea0b4f817e81ba76cba4a
+:01bfb0760b8a6d1c8e58029fe8b64c264ecdec
+:01bfc0dcaa54975aed804e933e2bdb0c9a606c
+:01bfd0dcf21a2d0f208493b8525ff21e1cd14f
+:01bfe0a234cbfd151ef9bca383a79bfc63cece
+:01bff015ab72fe190aeac32e98cf7d52db058d
+:01c000f571a42066b75983fa2c96f0dcd4008f
+:01c010052bd7555ea8bb68eec4d99004b097e0
+:01c0206c66a4c2fb7edcbdac05e4b5c8236481
+:01c0303dcd5f6f54d06f740dbba0ff103202ac
+:01c040bb5519dc5b490ec4715bddeabe69182f
+:01c05052cbefee81a36fc34f74ce9bdf2a539a
+:01c0607866a5cda84570ab4da222cdb9120630
+:01c070687a20bc5d5b5ceaa67a23045821334f
+:01c080b545cfaed339825dcf5bba0543febd0f
+:01c0908e6da7c6e543aa75317a88deba0ebad6
+:01c0a079498a7dfdfdf83178324a9734694fe7
+:01c0b0a464a91a20ce3eb7d9c4898703790fd6
+:01c0c0a87b93f21d6ab868eb3485aa5f2563d6
+:01c0d0b8f1439105d68d03860af8698504888a
+:01c0e0278b952f9be60c0cc326d968ed36e156
+:01c0f0b40aae1a5c0792d689e4e8e586f89422
+:01c100732fb6ff9df86198778ba5ac2c3cb8c1
+:01c110bc0ad3762f374f62c4886d6f36fd53af
+:01c12008a83253ad170b1811a3c5bb9b54cb82
+:01c13031a311438359f07fa26d4471810f0363
+:01c1400eacd76fb2545221a09f2959d60e9190
+:01c150d25896194f7a94b635919fba5b028f06
+:01c16081068fb2bda6a607382419e109fe7094
+:01c170ed356a8083713fd24332a3daf0ce52b9
+:01c180e833b2ea1aaa069de333adc41f6f595c
+:01c190ce50d1b8cc1555fad4e7442e8ae36907
+:01c1a04b2dc49c39e363cc346b3c6cb99fd8f3
+:01c1b034b6adb42b9aaf2fd6aac22b1419b6db
+:01c1c075a301eabbedec561b8b7c704b63b9dd
+:01c1d0c355741e14d8599554d85834261906ba
+:01c1e0d41e967dacfa831c1203ee13765da585
+:01c1f0f4fa61217962827108c05e4e73394419
+:01c200f8a342cd35dcc0271959cb437b7b5c23
+:01c2108486aaaf0bfbe0d1dbb9025979f18a07
+:01c220bf53f6f902bd6149f4277a91ef81b5af
+:01c230c91658fabed7c3d316644a5a10608728
+:01c2409fa664a1907ec546658abb11ea0277bc
+:01c2506d4231c71f7cf9680c65c88653629dd0
+:01c260c4c24e5c851b38a0c0614067dea8f0cd
+:01c270b357904bdca62611762fdb42ba62931a
+:01c280312eeac2c82706c6e038532e31bdfb21
+:01c2907194c94e5db98ec525be777131af3dba
+:01c2a04ae38228d0becc4916479a6f4d215abd
+:01c2b08dc14a46c070469dbfb5d91a8760d38e
+:01c2c0f1be3e34603b61bab28f7f8a1c7aba23
+:01c2d04ad87863e4a71972f733df1c6e224bf5
+:01c2e0ab98eff2b2fe14e8d7c3af7946396b60
+:01c2f0d00dc9272d4830f35223b78de5ca5416
+:01c3007be8cc16922495048af249da6eb5f368
+:01c310a65f61ba772dfe9995dff9a1843e4bcc
+:01c3205b8a1b5daa74c278dbc893a8b3e497c1
+:01c330458a5856ee937d185b36f20e06bdb138
+:01c340a968570d14fb33c71e40f4390c8e640c
+:01c3503587616f965faf41409968fb20549223
+:01c360199eb570acbf9fa2191b0b8a9a5f8788
+:01c37071e2c7ba23e80cfe2d89d4472bbbd532
+:01c3809efbfcfb0ec9098bcb7a1586a8a9a66c
+:01c3901613770b2386db4a47e562fabb76f241
+:01c3a04dcf42193e213f2215bec6aea85ed85b
+:01c3b01533424bee0491b87e075e4599d2415e
+:01c3c0b2394f2499773ed961691257ca027d72
+:01c3d0f5f1df39d1251ed6c8c5b8adf0cab393
+:01c3e010a5fb17f86f90690d6eb8bb39e75a64
+:01c3f063cc00eea73d7306aa9e953b85a79660
+:01c4001efe4dce50dfbe6af504277b6140406c
+:01c410801858704cbf4625855bb7c2c661d027
+:01c42081f19f4fe8c8a1f1a4041d7fd38e2304
+:01c430370f508c3da27f4a59889e08175b436e
+:01c440c81c461031c51345d5a5e355c22f4c92
+:01c450eb2f3cf6a49d537fdd7ed18aed6a8039
+:01c460534e23080360ebf5f9bc31a4d81402a5
+:01c470e1b9ffdc970ff33241280cdf0ec3a4bf
+:01c4803784999bcd926fc1571afdd8bc4967c0
+:01c490b6f90cd9cc4d2821f4f447f50cd602f0
+:01c4a01ab9d5e824c3f8cbe7b4dc9bc50caf5b
+:01c4b0bd3cf03710a35622c23089e7d8446064
+:01c4c096479d5b4bd898f34b5ea256ccb418af
+:01c4d00ee563bf19d6cca2c93cfd099b7ab32d
+:01c4e053cc5c046b1924dad070e233dad86dc7
+:01c4f0ab360de79107e805fd9feb2fee279667
+:01c500d39a52392f98edd91dde279e0ed7d340
+:01c510dfd69ec61b8fc33b09d4b1e3d3fb530a
+:01c520a3bda436d901fb8a06813583ca474e99
+:01c53038ec064905d2758ad21b29d27487ed10
+:01c540252115ee16992963a8a7cdeb1b1562f4
+:01c550da4535a9d5b6ddcab07c72b641e73995
+:01c560327c62ffc714bebab9b717ed6c7d50f8
+:01c570613e81cd171280ca5b61218f8bfc1ed1
+:01c5800249c0472d87d7b2e672908382c39bf4
+:01c590547c4b5de4240c143c60bb7bd44022ef
+:01c5a08f0ff51568e693721b8a7ac978b5d6ff
+:01c5b0a4b908694e6566ae6cd6c5e3d1f87c18
+:01c5c00b0ff481a3948b42574b6f1e20f6a073
+:01c5d095ae60ceff952813436b3a17bc70e664
+:01c5e0dbeee32e2201848e5c514fdf3f423c16
+:01c5f0c33c7a546b954588136b1c9755899ed6
+:01c60016342678760953a5e13c7948f6139d21
+:01c61094de8c18beac316d40c4efb9e3530088
+:01c6207f6a92dc6f5169c85a3654751982378e
+:01c6309735d64425a8877b6d59e37a78f68e0e
+:01c6401aabb2980089d40df21147e0751bf676
+:01c65002bce797a2711cd80a019fd885016c96
+:01c660431a94e7a0703c8461f1968f534ca048
+:01c67062ff65ad15d3f458f502a62044d6c63e
+:01c680f264069be91000b6e6de7ef777eddd19
+:01c6905e35254dc20112160eea89c5067b8e06
+:01c6a05b2e550c2ddd496fb27afd30b73b288a
+:01c6b02d918cdfc509c52f3a25625cff509fc4
+:01c6c048160387b46b5c454230dc21f97462e0
+:01c6d002fbd7646abf4231a4620ba75a4b3c2d
+:01c6e0029466112615c22ab5a7028e2c8e44e6
+:01c6f016c4d2befba3f6c0aa698c6e7774f228
+:01c700f0e6a43315ae4bdf0e50859c430506f1
+:01c710c7d75b4542e164b917359cfa32766993
+:01c720e345d877cfdc7f58e2317e411813ea86
+:01c7304e5a1a3d77fe44e7a15f8c4fa4423631
+:01c7405d1a6d982d8305b40b7b1cd09f44bba3
+:01c7501a139eea9c42a0049b4869b89e3dae20
+:01c7600f43c0411901f9c39ec6fc99f030d9cf
+:01c7702947cd517a27f2082b0b6c12737d7903
+:01c780bea5af9b8b710bcafa523fdfdd5700a5
+:01c790270b1a1c126a4fd78471ceaf7686164d
+:01c7a0f7475953c3f412de81b8bedbf8f0c1c4
+:01c7b02f4266de0916b3d341f2cdca171e694d
+:01c7c06146b110622d89e46920a06b07268178
+:01c7d080df7380fb7e7710b0ca753e53c9d250
+:01c7e072f9fb70f88d200e04cbd68af5aa4f09
+:01c7f01e8623abc0c3b94ce820fa32a5c2e6c5
+:01c80094f947665eaac0b33ee5d3c45a5c3d60
+:01c81077dd8af37f1fe8f0c24fba5538ec14c1
+:01c820339dbdd16cb550ec94ec5f2ece7f8928
+:01c83097b7531bfa1968faabb9c925d27916b2
+:01c8400c7e279b3bec3a4f5f3242d3efd5ab89
+:01c850d74d708816d348ea4d51061af29d1096
+:01c860ac1bfeaa7eb81a4b39e592dd3265836f
+:01c8703c756cd958b1a07ac6ca8f9a8a12bab7
+:01c8803f692e6b9f68c0b561062e85a1401366
+:01c89077e22ab0bc8c4fe8e307fa28e7d0a70b
+:01c8a0c2401154fb5688b39fb5651b3444c637
+:01c8b0609379fcebe31affa05a78d60639638c
+:01c8c09c9c20e2cc2f05bcf1e25685154f4bc6
+:01c8d0bc4e6cf790ca73a634c55e63e22869cf
+:01c8e0fc1bafff771ff232a8ea7d2a2d24c03c
+:01c8f056cedc20699993c2ca3c52d36d360cd3
+:01c9007892923b3bef3bbf4c1c6748ad7bf23a
+:01c910bc01f0641382d391ef6ae8bede582410
+:01c920866e276e3f014667822ad948af04ac92
+:01c930c713ad7767ab4dea59ce3f99b9477cb8
+:01c940b4ca702758241d8191ea0de692c7baf2
+:01c950e6f6448eab240c93117f0a3ac25d6afe
+:01c9602919f044864eda27fc2867b4b4141127
+:01c970c35a6bbd8238af0919a3884d1390207e
+:01c980304889a8150f28dbe6fd98c8cd82e51d
+:01c990aaa9ee6d70ac3c3cd169801e676bebcd
+:01c9a0177f6efa340278c77db6820805ab904a
+:01c9b042111f47367eab6e0439f82482c87d68
+:01c9c0133e05cfe0694f5561dd16f5dafdb0ed
+:01c9d0049db4d2032f779352062f427ac4b2e9
+:01c9e0e60e8f027804c1b8c72cfd02273309e1
+:01c9f06b3cf50cc94d2bd4ff79936fa5d8496f
+:01ca00a73104a57b5144a3b200da4db11fd244
+:01ca102fdd27cd0d61b2090cbb65cabba885fd
+:01ca20cd9843ff087819ffdc3091ca38fce759
+:01ca309ad1cfc2811822b7bd9ed3dd0c24e986
+:01ca409cac473d7a4d1505ad1846fa1e38d4fc
+:01ca5094f9cf6aa6703f2b609cee26577592bf
+:01ca6042c1e948a9ac07f929a3c58925bc7c47
+:01ca702bfca3da4733837f2375058a076afac0
+:01ca808695effe1e311524069d75e573453860
+:01ca90e6b1d4e27fb11a83898e909596a76bc4
+:01caa09a8a4de0afac1bfb0fb2653d0f8f065f
+:01cab0c08cf7a46c5ad1c057dd808b500acd1c
+:01cac08564777ded35a58d5d78a1bc760b4127
+:01cad0f5dda0d44e7cd8613ea842ec8b4aad67
+:01cae0051f96c4755efcb290978e24a3339c79
+:01caf00fa4f05d43d5d8fcd467084f1d799d09
+:01cb0043e3070280f5b2d7282d3e4c391d905f
+:01cb1016bff4b3bfad99cb26cf0c1936000eff
+:01cb20dc04bf99a2c8e83a72e66bf9faad4c0f
+:01cb30d86d005ea76ae21ab29adb5f96c83e14
+:01cb40c5bf9a0940eb4a3b4ee52ebcc199a9de
+:01cb508d227d005301f3c1ad94ab8107d69864
+:01cb60b123b6e7ed3492ebb47d8d96e77f7e65
+:01cb709789bf43125717a4026c7c408299f76c
+:01cb80482e637934b7f11ccd6c100d185035f9
+:01cb9073b96d90b299d7c9d80ac5d413d9e869
+:01cba0757c31904e7712b1ae89d6743fab3586
+:01cbb08332b710f55dca525a73cc4a0981c47f
+:01cbc083f5386f72fb97c883c4a4dddb632a44
+:01cbd0bce09b5b593305a3e7116ef624c4eadb
+:01cbe0984764815ca243a8a6b2694c560634e3
+:01cbf04393fd34154cc06eec51dde926f57bbd
+:01cc000e92e719104a198988203a62fd5985f2
+:01cc10b7ec83e05a03ebd6a9f5518b12aa835b
+:01cc20509c6cb4c3a0ede1f9430c957ce89191
+:01cc30798c237843aeaf59ba6336983a9ff620
+:01cc40d0fd5c6d9053bc8cb90dd9c00ff3bb7b
+:01cc50aa6d04854681ebd565fe7ac44ed2d745
+:01cc60ee74f243b4b818ed6f33c6cb3b850a4d
+:01cc70ef7b9ea6793b8f32c98a356707b55961
+:01cc80ed051afba1a910b218be6880fc36e411
+:01cc900141f89427ab60892a2784764a833215
+:01cca0b6fdffc70ec050d1806ae86e7848230a
+:01ccb011c4954160ab7456a4b307a62fa3e945
+:01ccc0bbfef7603e6194be6422ba72ac446aa7
+:01ccd0ae4e97cb82e2b0254811c1ac54db2d1d
+:01cce0340ee5a45f54473814b804e34e94ee92
+:01ccf0e7b30c700d11ecf60bfc00755e5d4936
+:01cd003f9aa4c20a5ac555427eedfe4ba821ec
+:01cd100f56f5b189970bf246d2c468aac8bd52
+:01cd2011824e6af4eee39f65b3f2c2d15c6c4f
+:01cd3049470dea43802286bea937a68b4aca54
+:01cd4091b3ab70b932535fe6f024a8b0ce3486
+:01cd50e8e0f96fafe360292feedfdbc94c1fb4
+:01cd607e4c3e55546987986287138a5e5111b7
+:01cd706f7c19ec83a171b22140877c27f042db
+:01cd80230b8f6d2f5ca55b531162a6244af7d8
+:01cd90f4bdcf3e1a7ff7f05de21bb9b7a6c053
+:01cda0ebf77679a0edfcf9edc9dd4c2348f971
+:01cdb03ff4387801b225c884d0eff1d2ba9848
+:01cdc0d4c077f9d89f505cae3c86551b3712ad
+:01cdd03555b4a2d6f842c7f1a2b720cdb48ad7
+:01cde09c951a8cd9b3610fd64e0b8198343304
+:01cdf0116129e1f5acebe65480737d23f754b3
+:01ce000ff296b37ec14fe420421af1dcd26c09
+:01ce107213bfc00f65dbf4338e980364da8377
+:01ce20c1ecb5f0520ff9e4af5c71e22f83f955
+:01ce30531befc0a2dc9d85a60dd807a9fae3ef
+:01ce404e6cf086366914e7edf2a0d3c279abcc
+:01ce505eb6a2456ce6d949ad8670bac17f21f5
+:01ce609dfaeb0b7f2b99b6ea69bfffd2b1bdaf
+:01ce7012ff3550a386bd79b063d005526d561f
+:01ce805a367d9f4464daafa2fde22590d14ccc
+:01ce90c8fcc406ae35680ce62dfca2c77c02f2
+:01cea0b713182f9f52d45790f38b4439f7a8d9
+:01ceb0c19bdde303a1fd8a7aa4076dfbf3cb9f
+:01cec064b1c9557e96241eeae29c395743ff6f
+:01ced0d645240bbd532b4ca0513f716b53514f
+:01cee07398aaf0ce9de741a5222305c60f3ee1
+:01cef0eddc2bdf00aafba7aeb845efb810f28f
+:01cf00f568c9d8a44f704811118c603dba8cf1
+:01cf106e90af354fa5ed564ffca2c55ebe95d0
+:01cf2018db331306a86938efb33a36b9d075dc
+:01cf30996f2c153e56660a818d62ecad9f54aa
+:01cf40c24dfd9861b22a62c9af5357e918b0cd
+:01cf5074eab9a7ffed7fede741ff56110371f8
+:01cf60f919b1a96bb1292e5cecf7b82311089b
+:01cf70f864743ff3af4ffbff1d390d1a2571d9
+:01cf80b73e8ca8f99f1bb5a6621948ed6b0d84
+:01cf90f993d5c11bcdf8c9c6b283353477cecf
+:01cfa04618f21562dc2a2612cc7fb782de64b4
+:01cfb071d88672b5a5775d09cefea4dd45beef
+:01cfc022484c8a602073945ffb5fa24536043a
+:01cfd0d90c71f566b957f19998d87a09e719cd
+:01cfe03537e4ea2a5dd274c19d823809841245
+:01cff0f8fd2599cd1179fbcdedf13f00789eab
+:01d000018f92671ee6fe43bd1fd34629ee1f21
+:01d010e3608fe4b22be12a019c083cb270a112
+:01d020f029a4803ce487758ccd2aad5ea247b3
+:01d030b68b270cdb126ca394a52078f7ec2c41
+:01d04095db99f60c859b945b168e7f2c5ab4ad
+:01d05004e61192b2b342de0cc02a5733dfe1d2
+:01d060f76381c85e8d38e9fb0665ab48293004
+:01d07019111d66128afa027741cbda3d0516e7
+:01d0800a648f8b64a633a9bb799bede1d5cc53
+:01d090725a37cfe74aefa0f4dceb2731b91340
+:01d0a0a9433f982a96a449113eaca8b2e44553
+:01d0b0fea67145277fb9826d6e2e8b299185c5
+:01d0c0ad73ca2897c3d47a3c026fc81454bda1
+:01d0d01f45af52a604f4463ac625a3c4bd9415
+:01d0e0bd8cbaeb5cef84cf17958615ae774ec8
+:01d0f0ee63c7b49af12e5735f6cfb7c52b1965
+:01d100e3641af7611b250f17192c2829f57ce8
+:01d1104a5a72c8e3a3ec446b817c514cbd10de
+:01d1206ceb0fbd25996d01718e513c156e0ed5
+:01d1301b323b5742267ef425a3287d958186bf
+:01d14069fc4c4fa175d2a6fabfc42219373de2
+:01d1500419ca1b2e9af67bde404dbfd1ebfede
+:01d160d9dcef23dba3281d0508e703e0a9fc55
+:01d1702974208f5c3a3fed2fcffba48fb550d6
+:01d180206a6ed8c1c80fba1f0d7cf6bfd7aa40
+:01d1903b1e44a3f1475fde591bc3397f0bdd44
+:01d1a0fba4dc61f088206ceb987f0e8226bdec
+:01d1b0f59ee0a4f0db386c0d3107efdd170364
+:01d1c032ef3a6a1d6d6b0acf084d3c3bdbfcf4
+:01d1d0b7554073faa0b9cc2364d30e6ccd8214
+:01d1e044a2832ad958de5672d40ce70ddb6ce8
+:01d1f0b275d0a5b5a4492f7137eecf370b2e9a
+:01d2008c0b6472db379398c8add635b1b6622b
+:01d210a70bca5b56a348c6e7192509d5149f76
+:01d220c55a1fcf4f8f92e66c95f71f405bfad1
+:01d230e49b198e184f74555d54272892f0e86e
+:01d240a416630a3fd973fd87f81cb9d647a63e
+:01d25098f5c5bd936b26624a60845d3782b86e
+:01d260adda4d8def1a4af78f1683c58cab0728
+:01d270202d07061e6abca339127afbc5ea6cf6
+:01d280329073d6419bcb7ea246ef07b7f11d0c
+:01d29022f4c556798568be50104bfc15ab4fb4
+:01d2a047558ca818dfdbd5caf6fca9ebe8b1cd
+:01d2b09987bb7ca12be5b41399acf6779f0983
+:01d2c0a460122e30e896151f52448966f62d28
+:01d2d0acccfb4c783868edbba65d5db40fa1c8
+:01d2e0f70aee88aa787e496c25f39cd5e37d8b
+:01d2f0df50125159182600d027fd72cede2269
+:01d300ed560954b03006f39b30cc71620e2be0
+:01d3101c9e857baf8eb2be02ee4739b99d87aa
+:01d3207208fea87041fd585a07ec01b62c9730
+:01d330203aac5e4c3afe36cd41083d2e5d27ac
+:01d34076d87bf022b1827c1d0e918f7184f37b
+:01d3502b4915470fd0c346f08960cade2d61e6
+:01d3607feaa951405ac4345b7a1680d04274a7
+:01d370135331f22d61943cc075c27f15459547
+:01d38063a2b2434312768d37a15c09066f5638
+:01d3907fbae6517efd7a6dd48c0bd4495efbb5
+:01d3a0c1124bd3765c02037a2beb357d25ac23
+:01d3b0d2bf6bf1d94ed9894db33a4aef0a6da6
+:01d3c06ffc38afb73db40a54ce4db0dffdbccb
+:01d3d0ae751ac5518fb1fcc2c2ea9719e9075e
+:01d3e09c4c9e27ecc29e1cccfb61f80b72e43a
+:01d3f02d1a2e68f15a4c10d9faa53ce7b092ae
+:01d4005abfb7d54dacbeabf0e2a19cf89cc921
+:01d4102034420d3db2496d20f6a48ef791b744
+:01d420a9e05e630940484162b668cd21920aa5
+:01d4303e651df3455deb12b2bfd5d63917495a
+:01d440a42e48acc0dcd9787024e9aafe871c28
+:01d4503ba38623aa26042c514cd7e029661890
+:01d4600eb184f249a108e859d8dbdeb27182b0
+:01d4708e1e7b16f49e497925a366fc5c5ebd99
+:01d4803f675a6d0c00354ef761278e7e5e448e
+:01d490bc04b4003c4667c46f99c0ba3f33e168
+:01d4a03aa5f8b3f9521099d923e558cb9c7bde
+:01d4b08cdb5fe8e8659b04e7fad8a29cb84326
+:01d4c046651b35ece2acc3b6b4baf4b38af747
+:01d4d0ed4ac6a2c6e8e02b40b43689437faf19
+:01d4e0eba607c69a809fcc8f69e492dda62902
+:01d4f014f6a8bf75daafcae95788a8a4b6bf68
+:01d50090d7f28cde8f1feaecb232ecdc0ebe3d
+:01d510b5675ad7a915934d2bedb589a609d475
+:01d5204d6c5a020dc893d96789112935138947
+:01d530c46a73afa1154f1de4a3f583ccf278df
+:01d540049a405039e5cd944faba4ad78903e59
+:01d550e9df3cf15542d13535d64a1c0076a62a
+:01d56083982bf56fb85dc9300122b1482ca9a2
+:01d570c033f905805aa6f36bc324b761c6bcda
+:01d5801304a01ca2702483c673da3a04fa843f
+:01d5903ff0434abc4b70d2dacd4b17cfa452e0
+:01d5a0b8d36894aca5f603a85d8ada5ab25b17
+:01d5b03dfc84524ec3e250e16b5016ee2a7a81
+:01d5c06b5cf6eee69f352dc8d864f585841440
+:01d5d0b658fd0fc5d0e4f1f65f29151f595a0d
+:01d5e01e51c1d0bdac06fef2a872ffe1475f79
+:01d5f07d709a219679476d2beb2044f081e447
+:01d600629e52c5acb957c3cd1b7d9d1679ad38
+:01d6100c803474ea723737bfe80b8e8a30d934
+:01d620219df93d33959dfc7bceecdf49e3e014
+:01d63084f5d63241726032f1011473e7de7ce4
+:01d640dd36b655195a0af0f87df64fe62448c9
+:01d650fb2c6866dfa57eeaad1615493f421650
+:01d66029579264c4b7937a65e33f3fa2b3f288
+:01d670f115a8889555556b6c0b2cc84b573981
+:01d680a2cf06a9a4f740bfc807f71ad567d37b
+:01d6909936e0e1cf40a1ae9ebe74377b97c12e
+:01d6a0241bc2ed4a1bc2a48759109dbab9d003
+:01d6b0383326392ca9ec59669fa88a333b3c91
+:01d6c09c7bfe6f0896eb6a9ca60b0451bb67ca
+:01d6d0364956dbbd327f4efb1bcf39fbeed389
+:01d6e08df2881d6609f2aefed804ea6201227d
+:01d6f06e80a9096f894a2ff3cf9cc6f200d23d
+:01d700809460ce8a9e3f97174684eac32af0b4
+:01d71097ca0ed321309b3d3858dc9ad62292a2
+:01d7204764279ee6ddc5480fd2a85e67c9593c
+:01d7303381684a40d35ca7d39ce2e3ff7058f8
+:01d740581747c1752aeed343de874525f004c2
+:01d7506058b385744f94b6df54c18b4f5d72f0
+:01d760aa0a7ac9d31d33b48b2df129fc203082
+:01d77008338310c27de314d5f0884af4b140e5
+:01d780e8e6a8d26362a185f9343ff767174ce0
+:01d7902ef891fd110d30caeb423abfbfe91cdd
+:01d7a0272a9224967e5ba0041086cc106e4eab
+:01d7b072ff57fd5f78be194a3c71da26d0a881
+:01d7c04e45cd48ef6d3a50299157f6b86b80e1
+:01d7d0c13a3c0cf42993a00bdd882c0e63dccc
+:01d7e0d063750d6ddc8161469ab024d5077190
+:01d7f0a759f50a94177451af2b208b06462227
+:01d80022aa5a7434f41f325c04861b4597bbaa
+:01d8108e93cb410bead80427ef17c1e08a517c
+:01d8201cdd859650106b2f53aff2b2251927d3
+:01d8304beea7f359c1ac7b165e70aa45ad6ee1
+:01d840b6a3d5f4b8485585546aaeb2fcf039bb
+:01d850e7f9484ec6fc245e13d65c83065e090a
+:01d8605b8509ec90040ed7e714144b17717b9f
+:01d870ab3d6cbdb9e9bde5bb18fd5244c6ae11
+:01d880e4898eced57c709e18154f08e0ab70d2
+:01d890986fc20ff10c7feefbb462db96b196a4
+:01d8a07661dcf6549e5715d8475ddf778ed978
+:01d8b0ce23a661ddb6d8a0044ab5bbb84cab11
+:01d8c0be38361dc8fc47c1678a7ecf4d76f58e
+:01d8d0f1758c11ecbdc8961acf92bed0f566a7
+:01d8e05745e1fa4307bec5fd4c30965fec6e31
+:01d8f0f4bf20f7e98807dabb64c0cd8a0cf3c4
+:01d90040bffa1f077c01e3f597eaec954a87af
+:01d9105d64c1b1d161b3a76410bd755f276473
+:01d9201f22b770366b41f7550fa45c710d4f51
+:01d93034b98e4ab7bccbde76537ff31a1be44c
+:01d94095b4507cc2dcc313f7aa38e6a003d98d
+:01d950232232b62cc05163256415d9094ac4a1
+:01d9602a09ec113f33535fb475b62cb5298a1f
+:01d97086e0a6390484fed42a36f195fc2a0549
+:01d9807ef5f13eaccf24241cb9fd61210dd2fc
+:01d99049fd313454c66db38d9a1fed57b97697
+:01d9a07f173589be1ff5616676f0c69e3e547e
+:01d9b0d7636290a7f880f69fac22f769a2145f
+:01d9c0218db4df21c75b929467fa0e5e6d6dbc
+:01d9d0348a575fc63bf3eb1cd1b9299c44a601
+:01d9e09dea932c80d5f3a443dddaaa79929a6e
+:01d9f0b09eb8f82678e0bd2f5806699a731156
+:01da004ff5f4c9b1d5065e93b25c128be90faf
+:01da104dfa2e05b945099efc251808f0f97574
+:01da20e4dfe655e60743fe84153fe5d1a1ccde
+:01da3084e97df85c1585116cf0c813ac8bfdb0
+:01da408e20dbd2e6f4bae6c845b9897604878c
+:01da50070305561850f7a1f7693773fa1b4061
+:01da60491c2195b527e81f048990ed7d16ee9d
+:01da70408960c4cde901eaa643267804ed3761
+:01da8047c82ff9513a5514efce6705e3f80957
+:01da907b45707becb3b2c41b7bf9b2291c8dd2
+:01daa03dd4624b9162ce9ddfad3e8736133240
+:01dab0b27ca2ba0082a54df7646efd35d502ba
+:01dac0d6feae6556feed43fc18baa61e988dc1
+:01dad0e5f3eb534d37c4aa945d453d3646ada3
+:01dae01e2920d4d8e01d288401a2f9dbe2d0c0
+:01daf092b9d6f8939f6cb04e9914cd29da7374
+:01db00fe1aa5d122ec3faf4caae4b7510812d5
+:01db1006a80cb80d2529f7fdeb541015710e02
+:01db204027951ef5b4a21cf153df9f71740109
+:01db3079bffaf48f648faf2d0f8e6a47e1e58e
+:01db401a610ddd769640e51d28bc3c748d50dd
+:01db50af144263eb267f0457bdeb5bad1326e6
+:01db6086d6065403d9c1332f6acd3cc59e16ab
+:01db70e161139e0b34b6b41f0a59f0211d52b9
+:01db805b9ea1e3457c159bb6d8e965bf61d3cd
+:01db9072f79b69332fbcc095b2341f4a8dfecf
+:01dba0c0fa3149c0a3243a0d3e78c50ba6b3c7
+:01dbb0a06b73ffa9bce298150748b77e598f58
+:01dbc0d5ac7997b1e8f9d8b45f0fa92e232ecd
+:01dbd0f111c2fe153d1f338dc0332a9ee3f419
+:01dbe02f188aced43518833b9b9532ada9cc6c
+:01dbf04809e2c73546f418d03c483663df8403
+:01dc00d1c72724b4d01832b37de40bf42b289f
+:01dc107372e86c5b597bd36e2ad6403de859b1
+:01dc2014b3fc759df34dc515530605d15a0335
+:01dc3082453dd21d17ff5f7e710d888e1b99c6
+:01dc40405558f81de41933ebb7b285054e031d
+:01dc5046bb4ca88ee9c541538fe61649b920bc
+:01dc605c7fffbe1c84a9754e4b5516e6e80018
+:01dc70d758016acc3f0fa8b9fa397d187d4a65
+:01dc800d6f099dd30d8ae36d8fb678f09cbd6a
+:01dc90ede7a2a93e6b326de07d6bffdc6902bd
+:01dca028cf6e72f82977e11238e3adf6aac33c
+:01dcb034af4a85cd381f5da7802d5290f02d6e
+:01dcc0ee1103d206ed91fdafd4f1a2548ea4fe
+:01dcd018868179b0c89d161d92e90356a41ead
+:01dce06950193b24261e6310cdeced932f1ef9
+:01dcf0570b4328a6530b8b9857cb70f166c60e
+:01dd00c843d9407cdfd4432755c5f72cddb19e
+:01dd1002b250211f555f5b93eae179b96dc6e5
+:01dd20d0573ec97c144d44933bcafb9e69bdda
+:01dd3066ad327d52cfe99e3338e1537a444df0
+:01dd40bc13f53019573abbb35f0ba6ad4d3c35
+:01dd5036d0cdb4312b353961bbf7b91ecf9392
+:01dd605d6bcfec81f1fff89c65482c85d3c50b
+:01dd704e6c3c238c864ca12c6239f7e9098d99
+:01dd80b617fe154e0b2814fc92c6422cbc02e4
+:01dd906db7da8405df013ee737fc7557497967
+:01dda0a67ea1548d75198b7d5353c4c8142028
+:01ddb0fd82688dced293d2f0d5f69a11490ac3
+:01ddc033f55fdfdb4553b8e417d5bfcf4e01fc
+:01ddd02ea539ad3893570db3925797645c7fc0
+:01dde051495724fc1284f1cc35f77eb3251aa6
+:01ddf096a12e1df401480cc0a4fe1c6571274f
+:01de00c64507d94c186be63c5de0b06c253275
+:01de10f5f8bf08bf32b37afe2579617fc39cb3
+:01de20c91723e22ad1da081d6267e1fa5c8182
+:01de30567b2214aa043d87ffbac930b97b2e3d
+:01de405a6b7b58bae272e83e79ce4331c91e51
+:01de50df851af85e3651bb3f1c1a2c097c3e3b
+:01de608f6fdfd94f3c2ded30a9a047c486b285
+:01de70f95e4f64911902e79221b1008cc21206
+:01de80ca36c0fb112f7d5429f052b2d0fb9119
+:01de90b7162c7625190d91039d917562c0e832
+:01dea0685b294e2211ebb8b531081367be9a6a
+:01deb0eb259069fae4ad80a38d239b26510315
+:01dec02789f8d447a350e01863165c18bfd3da
+:01ded09db60d54796ae7508ba43d31786a7869
+:01dee01ca62895d52cf975581820011feeca8f
+:01def0bb888a5133dd2b136c7a854b5c2dd34f
+:01df00863f380abd11370e2d74be994a02c4eb
+:01df104c264e0235913bc209b99174839cc897
+:01df20a46bd848a46269917a551245ac0695d3
+:01df3096755e155f202de5d2db38fbc3d80451
+:01df40e130dcfa7ba56341389ed22c1afeb4cb
+:01df50deca626ea1c379a94b4931222863cf25
+:01df601527e2da9155af222dd97eb84e801891
+:01df70b7970255914e89b86be05cfd1a0dde91
+:01df803a533802027df983255d8cea25f27d84
+:01df909ec2240a667ec51f7518083c44d1267a
+:01dfa07f22accf878b57c1aa5fd9c8ae7bfac2
+:01dfb0d2985debbd88b3aa0636974c2efe09ec
+:01dfc07693888db6840b67dc8f9b8089d2c1eb
+:01dfd03bc1da8ca908cbbc30013b30f70014f3
+:01dfe0ab4e73c179019c8dbcbc61ee6577199c
+:01dff045663146a81222473703773b3156b306
+:01e000e67c2e4b6f8ac6581a20a7be91e9ad69
+:01e010b7553d17