#LyX 2.0 created this file. For more info see http://www.lyx.org/
\lyxformat 413
\begin_document
\begin_header
\textclass beamer
\begin_preamble
%\usetheme{Warsaw}
% or ...
\usetheme{lankton-keynote}

\setbeamercovered{transparent}
% or whatever (possibly just delete it)
\end_preamble
\use_default_options false
\maintain_unincluded_children false
\language ngerman
\language_package default
\inputencoding auto
\fontencoding global
\font_roman times
\font_sans default
\font_typewriter default
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100

\graphics default
\default_output_format pdf5
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry true
\use_amsmath 2
\use_esint 0
\use_mhchem 1
\use_mathdots 1
\cite_engine basic
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\use_refstyle 0
\index Stichwortverzeichnis
\shortcut idx
\color #008000
\end_index
\secnumdepth 2
\tocdepth 2
\paragraph_separation indent
\paragraph_indentation default
\quotes_language german
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header

\begin_body

\begin_layout Title
net
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
kern-.8ex
\backslash
lower1.5ex
\backslash
hbox{
\end_layout

\end_inset


\begin_inset Graphics
	filename net2o-logo.pdf
	lyxscale 10
	scale 10

\end_inset


\begin_inset ERT
status open

\begin_layout Plain Layout

}
\backslash
kern-.5ex
\end_layout

\end_inset

: Transportschicht --- Implementiert
\begin_inset Argument
status open

\begin_layout Plain Layout
net2o layer 2
\end_layout

\end_inset


\end_layout

\begin_layout Subtitle
Zähme das Netz
\end_layout

\begin_layout Author
Bernd Paysan
\end_layout

\begin_layout Date
Forth--Tagung 2012, Biezenmortel
\end_layout

\begin_layout Standard
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
addtobeamertemplate{headline}{}{
\backslash
vbox{
\backslash
vspace{3ex}
\backslash
hbox to
\backslash
paperwidth{
\backslash
hfill
\end_layout

\end_inset


\begin_inset Graphics
	filename net2o-logo.pdf
	lyxscale 5
	scale 5

\end_inset


\begin_inset ERT
status open

\begin_layout Plain Layout

~~~}}}
\end_layout

\end_inset


\end_layout

\begin_layout BeginFrame
Übersicht
\end_layout

\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section
Motivation
\end_layout

\begin_layout BeginFrame
Was ist am Internet kaputt
\end_layout

\begin_layout Itemize
TCP--Flow Control: Stichwort 
\begin_inset Quotes gld
\end_inset

Buffer Bloat
\begin_inset Quotes grd
\end_inset


\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
TCP als 
\begin_inset Quotes gld
\end_inset

rundum--Sorglos
\begin_inset Quotes grd
\end_inset

--Protokoll leider nicht mal halbwegs echtzeitfähig, also doch nicht 
\begin_inset Quotes gld
\end_inset

rundum sorglos
\begin_inset Quotes grd
\end_inset


\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
UDP ist nur ein 
\begin_inset Quotes gld
\end_inset

einfacher Zugang
\begin_inset Quotes grd
\end_inset

 zu IP, und ansonsten 
\begin_inset Quotes gld
\end_inset

do it yourself
\begin_inset Quotes grd
\end_inset


\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Die SSL--PKI, mit den 
\begin_inset Quotes gld
\end_inset

ehrlichen Achmeds
\begin_inset Quotes grd
\end_inset

 als Certification Authorities
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Verschlüsselung insgesamt 
\begin_inset Quotes gld
\end_inset

zu komplex, zu schwierig,
\begin_inset Quotes grd
\end_inset

 weshalb das meiste überhaupt nicht verschlüsselt wird
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Änderungen gegenüber dem Entwurf
\end_layout

\begin_layout Itemize
Paketgröße jetzt 
\begin_inset Formula $64*2^{n},\quad n\in\{0,\ldots,15\}$
\end_inset

, also bis zu 2MB in Zweierpotenzen
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Kein embedded--Protokoll implementiert, nur die 64--Bit--Variante
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Verschlüsselung ist immer aktiv, nicht optional
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Kein 
\begin_inset Quotes gld
\end_inset

Salt
\begin_inset Quotes grd
\end_inset

 am Anfang des verschlüsselten Pakets, dafür ein Hash (128 Bits) am Ende
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section
Datenflusssteuerung
\end_layout

\begin_layout BeginFrame
Status: TCP Flow Control
\end_layout

\begin_layout Itemize
TCP füllt erst mal den Puffer voll, bis ein Paket verloren geht, statt vorher
 schon einzugreifen.
 Beschreibung der Lage: 
\begin_inset Quotes gld
\end_inset

Buffer bloat
\begin_inset Quotes grd
\end_inset


\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout

\end_layout

\begin_layout Plain Layout
\begin_inset Graphics
	filename bufferbloat.fig
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
Buffer Bloat
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout

\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Alternativen?
\end_layout

\begin_layout Itemize
LEDBAT versucht, einen konstanten Delay hinzuzufügen: Funktioniert nur sehr
 beschränkt --- keine faire Konkurrenz
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
CurveCP hat auch einen Ansatz, der aber nicht dokumentiert ist\SpecialChar \ldots{}

\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Also muss etwas neues her
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\begin_inset Graphics
	filename bufferused.fig
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
So sollte das aussehen
\end_layout

\end_inset


\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
\begin_inset Quotes gld
\end_inset

Buffer Bloat
\begin_inset Quotes grd
\end_inset


\end_layout

\begin_layout Itemize
Retransmits kosten Netzwerkresourcen, sollen vermieden werden
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Wie groß muss der Buffer sein, unter der Annahme, dass die Bandbreite optimal
 genutzt wird, der Flaschenhals am anderen Ende der Verbindung ist und ein
 zweiter Datenstrom dazugeschaltet wird?
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Antwort: Ca.
 die Hälfte des Round--Trip--Delays, denn die werden unausweichlich gefüllt
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Buffer sind gut, man muss sie ja nicht bis zum Rand füllen!
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
net2o Flow Control
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout
\begin_inset Graphics
	filename flowcontrol.fig
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
Ausmessen des Flaschenhalses mit einem Burst
\end_layout

\end_inset


\end_layout

\begin_layout Plain Layout

\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Client misst, Server setzt Rate
\end_layout

\begin_layout Description
Client erfasst die 
\emph on
Zeit
\emph default
 des ersten und letzten Pakets im Burst, und zählt die Anzahl der Pakete
 nach dem ersten.
 Daraus ergibt sich die gewünschte Rate:
\end_layout

\begin_deeper
\begin_layout LyX-Code
: calc-rate ( -- )
\end_layout

\begin_layout LyX-Code
  delta-ticks @ tick-init 1+ acks @ */
\end_layout

\begin_layout LyX-Code
  lit, set-rate ;
\end_layout

\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Description
Server berücksichtigt noch den Slack (also den Füllstand des Buffers), um
 weiter abzubremsen:
\end_layout

\begin_deeper
\begin_layout LyX-Code
: set-rate ( rate -- )
\end_layout

\begin_layout LyX-Code
  lastdiff @ min-slack @ -
\end_layout

\begin_layout LyX-Code
  0 max slack# 4 * min  slack# / lshift
\end_layout

\begin_layout LyX-Code
  ns/burst ! ;
\end_layout

\end_deeper
\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Test über VDSL
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout

\end_layout

\begin_layout Plain Layout
\begin_inset Graphics
	filename vdsl.png
	lyxscale 50
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
Beispiel--Transport über VDSL
\end_layout

\end_inset


\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Unzuverlässiges Luftkabel
\end_layout

\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open

\begin_layout Plain Layout

\end_layout

\begin_layout Plain Layout
\begin_inset Graphics
	filename wlan.png
	lyxscale 50
	width 100text%

\end_inset


\end_layout

\begin_layout Plain Layout
\begin_inset Caption

\begin_layout Plain Layout
Beispiel--Transport über VDSL+WLAN
\end_layout

\end_inset


\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Mehrere parallele Verbindungen
\end_layout

\begin_layout Itemize
Der Burst erkennt nur die Geschwindigkeit für eine Verbindung --- das liegt
 daran, dass die existierenden Buffers als FIFO für den gesamten Verkehr
 implementiert sind.
 Besser wäre: Parallele FIFOs, in der jede Verbindung getrennt behandelt
 wird, und dann round robin zwischen diesen FIFOs.
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Exponentielle Verlangsamung durch Beobachtung des aufgebauten Slacks hilft
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Lösung zwar fair, aber noch nicht stabil --- es werden reihum Bandbreiten
 vergeben
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Manchmal ist der Slack so groß, dass es zu Paketverlusten kommt (unerwünscht)
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Noch etwas mehr Finetuning nötig!
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section
Zuverlässigkeit
\end_layout

\begin_layout BeginFrame
Zuverlässigkeit des Transports
\end_layout

\begin_layout Itemize
Paket--Reihenfolge spielt keine Rolle, da die Pakete gemäß ihrer Adresse
 im Puffer abgelegt werden
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Angeforderte Pakete werden in zwei Bitmaps 
\begin_inset Quotes gld
\end_inset

nicht vorhanden
\begin_inset Quotes grd
\end_inset

 markiert
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Empfangene Pakete werden in jeweils einer der beiden Bitmaps als empfangen
 markiert
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Die andere Bitmap wird aufgefüllt, wenn sie nicht für die Retransmits zuständig
 ist
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Es wird einen Round--Trip--Delay gewartet, bis ein Retransmit angefordert
 wird.
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Retransmits werden bevorzugt behandelt
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Zuverlässiges Ausführen von Kommandos
\end_layout

\begin_layout Standard
Dieser Bereich ist noch eine Baustelle
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Itemize
Das Kommando ist noch nicht ausgeführt worden 
\begin_inset Formula $\longrightarrow$
\end_inset

 ausführen, zugehörige Antwort merken
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Das Kommando ist schon ausgeführt worden 
\begin_inset Formula $\longrightarrow$
\end_inset

 zugehörige Antwort nochmal verschicken
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Nicht alle Kommandos werden beantwortet 
\begin_inset Formula $\longrightarrow$
\end_inset

 Was tun mit diesen?
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Acknowledges noch nicht fälschungssicher: Bedarf einer Kenntnis der empfangenen
 Pakete (Checksumme über die Checksummen plus Bitmap, auf welche Pakete
 sich das Acknowledge bezieht)
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section
Kryptographie
\end_layout

\begin_layout BeginFrame
Kryptographie
\end_layout

\begin_layout Standard
Die ersten drei Ziele sollen bei der Kommunikation erfüllt werden, das vierte
 nicht:
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Description
Vertraulichkeit Dritte sollen nicht in der Lage sein, die Nachrichten abzuhören
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Description
Integrität Die Daten müssen nachweislich vollständig und unverändert sein.
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Description
Authentizität Der Absender der Nachrichten soll eindeutig identifizierbar
 sein
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Description
Verbindlichkeit ist nicht für die Kommunikation selbst wichtig --- gegenüber
 dritten nachweisbare Urheberschaft ist für eine 2--Wege--Kommunikation
 nicht nötig
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Eingesetzte Technik: Curve25519
\end_layout

\begin_layout Itemize
Elliptic Curve Cryptography basiert nicht auf Faktorisierung, sondern auf
 natürlichen Logarithmen in elliptischen Kurven
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Die Sicherheit von Curve25519 entspricht 128 Bits eines symmetrischen Schlüssels
 --- im Moment reicht das noch dicke.
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Curve25519 ist effizient implementiert
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Es ist für eine 1:1--Verbindung optimiert
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Jeder Teilnehmer 
\begin_inset Quotes gld
\end_inset

multipliziert
\begin_inset Quotes grd
\end_inset

 seinen geheimen Schlüssel mit dem öffentlichen des Partners, die beiden
 Produkte sind identisch.
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Wurstkessel
\end_layout

\begin_layout Standard
Im Moment setze ich ausschließlich Wurstkessel ein, obwohl das Verfahren
 noch nicht sorgfältig genug geprüft ist:
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Itemize
Wurstkessel kann Ver/Entschlüsselung und Authentifizierung in einem Durchgang
 machen, weil am Ende der Verschlüsselung auch ein valider Hash herauskommt,
 der am Ende der Entschlüsselung ebenfalls verifiziert wird
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Damit löst ein einziger Wurstkesseldurchgang die drei Probleme Vertraulichkeit,
 Integrität und Authentizität
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\begin_layout Enumerate
die Daten sind verschlüsselt
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Enumerate
der korrekte Hash belegt ihre Integrität
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Enumerate
und die Berechnung des Hashes bedarf, ebenso wie die Verschlüsselung, die
 Kenntnis des Schlüssels, wodurch die Authentizität des Senders belegt ist
\end_layout

\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Man kann das auch mit AES machen, im CBC--Mode mit CBC--MAC als Absicherung
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Verdeckte Initialisierungsvektoren
\end_layout

\begin_layout Itemize
Der Schlüssels soll nicht wiederverwendet werden (nur für eine 1:1 Retransmissio
n), weil sonst ein Klartextangriff möglich ist
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Übliches Vorgehen: Initialisierungsvektor mit jedem Paket mit übertragen
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Nachteil: Damit wird 
\begin_inset Quotes gld
\end_inset

der andere Teil
\begin_inset Quotes grd
\end_inset

 des Schlüssels bekannt.
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Lösung: Generierung der Initialisierungsvektoren mit einem PRNG (wieder:
 Wurstkessel) auf beiden Seiten --- diese IVs sind 
\begin_inset Quotes gld
\end_inset

shared secrets
\begin_inset Quotes grd
\end_inset

, und nicht bekannt.
 Nur der Startwert wird übertragen --- der geht zusammen mit dem gemeinsamen
 Schlüssel in die Generierung der IVs ein (Idee von Helmar Wodke).
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
PKI
\end_layout

\begin_layout Standard
Zur Zeit werden drei verschiedene Verfahren benutzt:
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Enumerate
Hierarchisch mit Certification Authorities (z.B.
 SSL): Das Vertrauen wird auf 
\begin_inset Quotes gld
\end_inset

Notare
\begin_inset Quotes grd
\end_inset

, also die CAs übertragen, die dann eben vertrauenswürdig sein müssen (alle,
 da jede CA jedem ein Zertifikat ausstellen kann).
 Zertifiziert wird der Server, d.h.
 der Besucher weiß dann, dass er dieser Seite so viel vertrauen kann wie
 dem übelsten der 600 CAs.
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Enumerate
Peer to Peer (z.B.
 PGP): Das Vertrauen wird durch ein 
\begin_inset Quotes gld
\end_inset

Network of Trust
\begin_inset Quotes grd
\end_inset

 erworben, hier muss man entweder selbst nachprüfen, oder man vertraut nur,
 wenn sich mehrere einig sind
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Enumerate
Änderungen beobachten (z.B.
 SSH): Das Vertrauen wird durch wiederholte Kontakte bestärkt, und solange
 sich nichts ändert, fühlt man sich sicher
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Was will man eigentlich überhaupt?
\end_layout

\begin_layout Standard
Die typische Anwendung ist, ein sicheres Login zu bekommen.
 Das wirft eine Frage auf:
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Itemize
Ist es nicht eigentlich der Client, der vertrauenswürdig sein sollte?
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Standard
Die Verbindung ist für beide hinreichend abgesichert, wenn einer erfolgreich
 eine Vertrauensprüfung durchgeführt hat.
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Standard
Dreht man die Vertrauensrelation um, kann man schon mit dem SSH--Ansatz
 gute Ergebnisse erzielen.
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section*
\start_of_appendix
Appendix
\end_layout

\begin_layout Subsection*
For Further Reading
\end_layout

\begin_layout BeginFrame
For Further Reading
\end_layout

\begin_layout Bibliography
\labelwidthstring Literaturverzeichnis
\begin_inset CommandInset bibitem
LatexCommand bibitem
key "In20"

\end_inset


\noun on
Bernd Paysan
\noun default
 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
newblock
\end_layout

\end_inset


\emph on
Fossil Repository und Wiki
\emph default

\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
newblock
\end_layout

\end_inset

 
\begin_inset Flex URL
status open

\begin_layout Plain Layout

http://fossil.net2o.de/
\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\end_body
\end_document
