summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Runge <dave@sleepmap.de>2016-12-29 15:07:39 +0100
committerDavid Runge <dave@sleepmap.de>2016-12-29 15:07:39 +0100
commit2fed13faea42a7ff6db918d6d5203da55a69bf92 (patch)
treee3ef3f08fb13cd46067511a35e935c7a862c9152
downloadmaster-thesis-2fed13faea42a7ff6db918d6d5203da55a69bf92.tar.gz
master-thesis-2fed13faea42a7ff6db918d6d5203da55a69bf92.tar.bz2
master-thesis-2fed13faea42a7ff6db918d6d5203da55a69bf92.tar.xz
master-thesis-2fed13faea42a7ff6db918d6d5203da55a69bf92.zip
Adding first version of expose and thesis, including help.
-rw-r--r--expose/bib/ssr-networking.bib98
-rw-r--r--expose/expose.pdfbin0 -> 161854 bytes
-rw-r--r--expose/expose.tex265
-rw-r--r--expose/images/ssr-networking.pdfbin0 -> 7212 bytes
-rw-r--r--expose/images/ssr-networking.svg530
-rw-r--r--expose/input/abstract.tex3
-rw-r--r--expose/input/introduction.tex2
-rw-r--r--help/Anforderungen_an_Abschlussarbeiten.pdfbin0 -> 15933 bytes
-rw-r--r--help/Anwendungsbeispiele_Literaturverweisungssysteme.pdfbin0 -> 169614 bytes
-rw-r--r--help/Bewertungsraster.pdfbin0 -> 84368 bytes
-rwxr-xr-xhelp/Bibliography.bib181
-rw-r--r--help/Expose_Anleitung.pdfbin0 -> 94828 bytes
-rwxr-xr-xhelp/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdfbin0 -> 169614 bytes
-rwxr-xr-xhelp/FG AK Zitieren und Verweisen Systeme.pdfbin0 -> 193445 bytes
-rw-r--r--help/FG_AK_Deutsch_AutorJahr.bst1638
-rw-r--r--help/FG_AK_Deutsch_AutorJahr.pdfbin0 -> 90992 bytes
-rw-r--r--help/FG_AK_Deutsch_Nummer.bst1637
-rw-r--r--help/FG_AK_Deutsch_Nummer.pdfbin0 -> 90980 bytes
-rw-r--r--help/FG_AK_English_AuthorYear.bst1658
-rw-r--r--help/FG_AK_English_AuthorYear.pdfbin0 -> 92181 bytes
-rw-r--r--help/FG_AK_English_Number.bst1657
-rw-r--r--help/FG_AK_English_Number.pdfbin0 -> 92156 bytes
-rwxr-xr-xhelp/Literatur.tex127
-rw-r--r--help/LiteraturreferenzenAKStyle.pdfbin0 -> 216044 bytes
-rw-r--r--help/Rg_8A6825GW9TG.pdfbin0 -> 117235 bytes
-rw-r--r--thesis/thesis.pdfbin0 -> 150608 bytes
-rw-r--r--thesis/thesis.tex265
27 files changed, 8061 insertions, 0 deletions
diff --git a/expose/bib/ssr-networking.bib b/expose/bib/ssr-networking.bib
new file mode 100644
index 0000000..0ebf2b4
--- /dev/null
+++ b/expose/bib/ssr-networking.bib
@@ -0,0 +1,98 @@
+@phdthesis{ baalman2007,
+ title = "On wave field synthesis and electro-acoustic music",
+ author = "Marije A.J. Baalman",
+ year = "2007",
+ month = "Dec",
+ publisher = "Technische Universität Berlin",
+ volume = "1"}
+
+@inproceedings{ baalmanetal2007,
+ title = "Renewed architecture of the sWONDER software for Wave Field Synthesis on large scale systems",
+ author = "Marije A.J. Baalman and Torben Hohn and Simon Schampijer and Thilo Koch",
+ year = "2007",
+ month = "May",
+ school = "Technische Universität Berlin",
+ publisher = "Linux Audio Conference",
+ volume = "1"}
+
+@mastersthesis{ goltz2010,
+ title = "Planung und Konfiguration eines Labors zur Wellenfeldsynthese",
+ author = "Florian Goltz",
+ year = "2010",
+ month = "Aug",
+ publisher = "Technische Universität Berlin",
+ volume = "1"}
+
+@conference{ ahrensetal2008,
+ title = "Analysis and Improvement of Pre-equalization in 2.5-Dimensional Wave Field Synthesis",
+ author = "Sascha Spors, Jens Ahrens",
+ year = "2010",
+ month = "May",
+ publisher = "Audio Engineering Society Inc.",
+ volume = "1"}
+
+@conference{ ahrensetal2008,
+ title = "The Theory of Wave Field Synthesis Revisited",
+ author = "Sascha Spors, Rudolf Rabenstein, Jens Ahrens",
+ year = "2008",
+ month = "May",
+ publisher = "Audio Engineering Society Inc.",
+ volume = "1"}
+
+@phdthesis{ melchior2011,
+ title = "Investigations on spatial sound design based on measured room impulse responses",
+ author = "Frank Melchior",
+ note = "Spatial Sound Design",
+ year = "2011",
+ month = "Jun",
+ publisher = "Technische Universiteit Delft",
+ volume = "1"}
+
+@misc{ website:jackaudio2016,
+ title = "JACK Audio Connection Kit",
+ author = "Paul Davis",
+ year = "2016",
+ month = "May",
+ url = "http://jackaudio.org/"}
+
+@misc{ website:swonder2016,
+ title = "sWONDER",
+ author = "Marije Baalman",
+ year = "2016",
+ month = "May",
+ url = "https://sourceforge.net/projects/swonder/"}
+
+@misc{ website:wfscollider2016,
+ title = "WFSCollider on Github",
+ author = "Game Of Life Foundation",
+ year = "2016",
+ month = "May",
+ url = "https://github.com/GameOfLife/WFSCollider"}
+
+@misc{ website:gameoflife2016,
+ title = "Game Of Life Foundation",
+ author = "Game Of Life Foundation",
+ year = "2016",
+ month = "May",
+ url = "http://gameoflife.nl/en"}
+
+@misc{ website:ssr2016,
+ title = "SoundScape Renderer",
+ author = "Quality and Usability Lab/TU Berlin and Institut für Nachrichtentechnik/Universität Rostock",
+ year = "2016",
+ month = "May",
+ url = "http://spatialaudio.net/ssr/"}
+
+@misc{ website:supercollider2016,
+ title = "SuperCollider",
+ author = "James McCartney",
+ year = "2016",
+ month = "May",
+ url = "http://supercollider.github.io/"}
+
+@misc{ website:puredata2016,
+ title = "PureData",
+ author = "Miller Puckette",
+ year = "2016",
+ month = "May",
+ url = "http://puredata.info"}
diff --git a/expose/expose.pdf b/expose/expose.pdf
new file mode 100644
index 0000000..f014812
--- /dev/null
+++ b/expose/expose.pdf
Binary files differ
diff --git a/expose/expose.tex b/expose/expose.tex
new file mode 100644
index 0000000..b785684
--- /dev/null
+++ b/expose/expose.tex
@@ -0,0 +1,265 @@
+\documentclass[12pt,a4paper,oneside,titlepage]{article}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp} % Sonderzeichen, z.B. €
+%\usepackage{citep}
+\usepackage{listings}
+\lstdefinelanguage{Ini}{basicstyle=\ttfamily\tiny,
+ columns=fullflexible,
+ tag=[s]{[]},
+ tagstyle=\color{blue}\bfseries,
+ usekeywordsintag=true
+}[html]
+\lstdefinelanguage{bash}{basicstyle=\ttfamily\tiny}
+\usepackage{ulem}
+\usepackage{lmodern}
+\usepackage{multirow}
+\usepackage{url}
+\usepackage{graphicx} % for PDF scaling
+\usepackage{pdfpages}
+\usepackage{float}
+\floatstyle{boxed}
+\restylefloat{figure}
+\usepackage{color}
+\usepackage{bbding}
+\usepackage{hyperref}
+\usepackage[font=scriptsize]{caption}
+\usepackage[numbers]{natbib}
+\graphicspath{{images//}}
+
+\begin{document}
+ \title{Exposé: SoundScape Renderer Networking}
+ \author{David Runge\\
+ Audiokommunikation und -technologie\\
+ Fachgebiet Audiokommunikation\\
+ Technische Universität Berlin\\
+ \href{dave@sleepmap.de}{dave@sleepmap.de}
+ }
+ \date{\today}
+ \maketitle
+ \begin{abstract}
+ Wave Field Synthesis (WFS) as a technological concept has been around for
+ many years now and all over the world several institutions run small and
+ some even large scale setups ranging from single speaker lines to those
+ facilitating a couple of hundred loudspeakers respectively.\\
+ The still evolving implementations are driven by several rendering
+ engines, of which two free and open-source ones, namely sWONDER and
+ SoundScape Renderer, have (partially) been developed at TU Berlin.\\
+ The latter due to its current design is not yet able to render for large
+ scale setups, ie.\ those using several computers to render audio on a
+ loudspeaker setup, due to the high amount of channels.\\
+ Its solid codebase however, which additionally offers a framework for many
+ more renderers, and the ongoing development, deems further work on this
+ application a good future investment.\\
+ The proposed work seeks to extend the SoundScape Renderer functionality to
+ turn it into a networking application for large scale WFS setups.
+\end{abstract}
+ \section{Introduction}
+ Wave Field Synthesis (WFS) describes a spatial technique for rendering audio. As
+ such it aims at synthesizing a sound field of desired acoustic preference
+ in a given listening area, assuming a planar reproduction to be most
+ suitable for most applications.\\
+ WFS is typically implemented using a curved or linear loudspeaker array
+ surrounding the listening area.\\
+ Several free and open-source renderer applications exist for WFS
+ environments, with varying stages of feature richness.\\
+ The proposed work will focus on one of them and its extension towards WFS
+ on large scale systems.
+
+ \section{Free and open-source wave field synthesis renderers}
+ To date there exist three (known of) free and open-source Wave Field
+ Synthesis renderers, which are all \href{http://jackaudio.org/}{JACK Audio
+ Connection Kit (JACK)} \citep{website:jackaudio2016} clients:
+ \begin{itemize}
+ \item \href{https://sourceforge.net/projects/swonder/}{sWONDER} \citep{website:swonder2016},
+ developed by Technische Universität Berlin, Germany
+ \item \href{https://github.com/GameOfLife/WFSCollider}{WFSCollider} \citep{website:wfscollider2016},
+ developed by \href{http://gameoflife.nl/en}{Game Of Life Foundation} \citep{website:gameoflife2016},
+ The Hague, Netherlands
+ \item \href{http://spatialaudio.net/ssr/}{SoundScape Renderer (SSR)} \citep{website:ssr2016},
+ developed by Quality \& Usability Lab, Deutsche Telekom Laboratories
+ and TU Berlin and Institut für Nachrichtentechnik, Universität Rostock
+ \end{itemize}
+ Currently only WFSCollider and the SSR are actively maintained and
+ developed, thussWONDER, although used in some setups, loses significance.
+ Generally it can be said, that different concepts apply to the three
+ renderers, which are about to be explained briefly in the following
+ sections.
+
+ \subsection{WONDER}
+ sWONDER \citep{baalman2007} consists of a set of C++ applications that provide binaural and
+ WFS rendering. In 2007 it was specifically redesigned
+ \citep{baalmanetal2007} to cope with large scale WFS setups in which
+ several (computer) nodes, providing several speakers each, drive a system
+ together.\\
+ In these setups each node receives all available audio streams (which
+ represent one virtual audio source respectively) redundantly and a master
+ application signals which node is responsible for rendering what source
+ on which speaker.\\
+ It uses Open Sound Control (OSC) for messaging between its parts and for
+ setting its controls. Apart from that, it can be controlled through a
+ Graphical User Interface (GUI), that was specifically designed for it.
+ Unfortunately sWONDER has not been actively maintained for several years,
+ has a complex setup chain and many bugs, that are not likely to get fixed
+ any time soon.
+
+ \subsection{WFSCollider}
+ WFSCollider was built on top of
+ \href{https://supercollider.github.io}{SuperCollider} 3.5
+ \citep{website:supercollider2016} and is also capable of driving large
+ scale systems. It uses a different approach in
+ doing so, though: Whereas withsWONDER all audio streams are distributed
+ to each node, WFSCollider usually uses the audio files to be played on
+ all machines simultaneously and synchronizes between them.\\
+ It has a feature-rich GUI in the ``many window'' style, making available
+ time lines and movement of sources through facilitating what the sclang
+ (SuperCollider programming language) has to offer.\\
+ As WFSCollider basically is SuperCollider plus extra features, it is also
+ an OSC enabled application and can thus also be used for mere
+ multi-channel playback of audio.\\
+ Although it has many useful features, it requires MacOSX (Linux version
+ still untested) to run, is built upon a quite old version of
+ \href{https://supercollider.github.io}{SuperCollider} and is likely never
+ to be merged into it, due to many core changes to it.
+
+ \subsection{SoundScape Renderer}
+ SoundScape Renderer (SSR), also a C++ application, running on Linux and
+ MacOSX, is a multi-purpose spatial audio renderer, as it is not only
+ capable of Binaural Synthesis and WFS, but also Higher-Order Ambisonics
+ and Vector Base Amplitude Panning.\\
+ It can be used with a GUI or headless (without one), depicting the
+ virtual sources, their volumes and positions, alongside which speakers
+ are currently used for rendering a selected source.
+ SSR uses TCP/IP sockets for communication and thus is not directly OSC
+ enabled. This functionality can be achieved using the capapilities of
+ other applications such as \href{http://puredata.info}{PureData}
+ \citep{website:puredata2016} in combination with it though.\\
+ Unlike the two renderers above, the SSR is not able to run large-scale
+ WFS setups, as it lacks the features to communicate between instances of
+ itself on several computers, while these instances serve a subset of the
+ available loudspeakers.
+
+ \section{Extending Sound Scape Renderer functionality}
+ The SSR, due to its diverse set of rendering engines, which are made
+ available through an extensible framework, and its clean codebase, is a
+ good candidate for future large scale WFS setups. These type of features
+ are not yet implemented though and will need testing.\\
+ Therefore I propose the implementation and testing of said feature, making
+ the SSR capable of rendering on large scale WFS setups with many nodes,
+ controlled by a master instance.\\
+ The sought implementation is inspired by the architecture of sWONDER, but
+ instead of creating many single purpose applications, the master/node
+ feature will be made available through flags to the ssr executable, when
+ starting it. This behavior is already actively harnessed eg.\ for selecting
+ one of the several rendering engines.
+ \begin{figure}[!htb]
+ \centering
+ \includegraphics[scale=0.9, trim = 31mm 190mm 24mm 8mm, clip]{ssr-networking.pdf}
+ \caption{A diagram displaying the SSR master/node setup with TCP/IP
+ socket connections over network (green lines), audio channels (red dashed
+ lines) and OSC connection (blue dashed line). Machines are indicated as red
+ dashed rectangles and connections to audio hardware as outputs of SSR
+ nodes as black lines below them.}
+ \label{fig:ssr-networking}
+ \end{figure}
+ While the SSR already has an internal logic to know which loudspeaker will
+ be used for what virtual audio source, this will have to be extended to be
+ able to know which renderer node has to render what source on which
+ loudspeaker (see Figure~\ref{fig:ssr-networking}).
+ To achieve the above features, the SSR's messaging (and thus also settings)
+ capabilities have to be extended alongside its internal logic concerning
+ the selection of output channels (and the master to node notification
+ thereof). To introduce as little redundant code as possible, most likely a
+ ``the client knows all'' setup is desirable, in which each node knows about
+ the whole setup, but is also set to only serve its own subset of
+ loudspeakers in it. This will make sure that the rendering engine remains
+ functional also in a small scale WFS setup.\\
+ The lack of a direct OSC functionality, as provided by the two other
+ renderers, will not be problematic, as master and nodes can communicate
+ through their builtin TCP/IP sockets directly and the master can, if
+ needed, be controlled via OSC.
+
+ \section{Prelimenaries}
+ In preparation to the exposé I tried to implement a side-by-side
+ installation, using Arch Linux on a medium scale setup, facilitating the
+ WFS system of the Electronic Studio at TU Berlin. Unfortunately the
+ proprietary Dante driver, that is used in that system is very complex to be
+ built, as well as underdeveloped and thus keeps the system from being
+ easily updated, which is needed for testing purposes (finding a suitable
+ real-time, low-latency Linux kernel), trying out new software features,
+ building new software and keeping a system safe. The driver will most
+ likely require changes to the hardware due to implemention of hardware
+ branding by the vendor and dire testing before usage.\\
+ Although eventually using a proper WFS setup for testing will be necessary,
+ it is luckily not needed for implementing the features, as they can already be
+ worked out using two machines running Linux, JACK and the development version
+ of SSR.\\
+ The hardware of the large scale setup at TU Berlin in H0104 is currently
+ about to be updated and therefore a valuable candidate for testing of the
+ sought SSR features.
+
+ \section{Schedule}
+ I propose a six month schedule for the implementation and testing of the
+ changes to the source code and writing of an accompanying thesis. The
+ following rough schedule should serve as a guideline for the realization of
+ the work:\\
+ \begin{tabular}{|l|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{Schedule}}\\
+ \hline
+ \textbf{Week} & \textbf{Implementation} & \textbf{Tests} & \textbf{Thesis} \\
+ \hline
+ 1 & Reading into codebase & & \\
+ \hline
+ 2 & Reading into codebase & & \\
+ \hline
+ 3 & Reading into codebase & & \\
+ \hline
+ 4 & Reading into codebase & & \\
+ \hline
+ 5 & Assessing changes & & Documentation \\
+ \hline
+ 6 & Assessing changes & & Documentation \\
+ \hline
+ 7 & Implementing changes & & \\
+ \hline
+ 8 & Implementing changes & & \\
+ \hline
+ 9 & Implementing changes & & \\
+ \hline
+ 10 & Implementing changes & & \\
+ \hline
+ 11 & Implementing changes & & \\
+ \hline
+ 12 & Implementing changes & & \\
+ \hline
+ 13 & Implementing changes & & Preparation\\
+ \hline
+ 14 & Implementing changes & & Preparation\\
+ \hline
+ 15 & & Small scale setup & Writing\\
+ \hline
+ 16 & & Large scale setup & Writing\\
+ \hline
+ 17 & & Large scale setup & Writing\\
+ \hline
+ 18 & & Large scale setup & Writing\\
+ \hline
+ 19 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 20 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 21 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 22 & & & Writing\\
+ \hline
+ 23 & & & Writing\\
+ \hline
+ 24 & & & Writing\\
+ \hline
+ \end{tabular}
+ \pagebreak
+ \bibliographystyle{plainnat}
+ \bibliography{bib/ssr-networking}
+\end{document}
diff --git a/expose/images/ssr-networking.pdf b/expose/images/ssr-networking.pdf
new file mode 100644
index 0000000..0efe0b4
--- /dev/null
+++ b/expose/images/ssr-networking.pdf
Binary files differ
diff --git a/expose/images/ssr-networking.svg b/expose/images/ssr-networking.svg
new file mode 100644
index 0000000..5ad38b3
--- /dev/null
+++ b/expose/images/ssr-networking.svg
@@ -0,0 +1,530 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 744.09448819 1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="ssr-networking.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2"
+ inkscape:cx="549.99356"
+ inkscape:cy="538.40824"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer4"
+ showgrid="true"
+ inkscape:snap-text-baseline="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ objecttolerance="20"
+ guidetolerance="8"
+ inkscape:snap-tangential="true"
+ inkscape:snap-perpendicular="true"
+ inkscape:window-width="3838"
+ inkscape:window-height="2138"
+ inkscape:window-x="1"
+ inkscape:window-y="21"
+ inkscape:window-maximized="1">
+ <sodipodi:guide
+ position="339.41126,667.50882"
+ orientation="0,1"
+ id="guide11497" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid11499" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Audio lines">
+ <g
+ style=""
+ id="g11736">
+ <path
+ inkscape:connector-curvature="0"
+ id="path11715"
+ d="m 347.24178,212.60097 c -85.52772,64.27369 -85.52772,64.27369 -85.52772,64.27369 l 0,0 85.52772,-64.27369 0,0 -85.52772,64.27369"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.00674486px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11718"
+ d="m 354.3171,212.60157 c -10.9777,64.27324 -10.9777,64.27324 -10.9777,64.27324 z"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.02015305px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11728"
+ d="m 357.87641,212.60082 c 63.77474,64.64974 63.77474,64.64974 63.77474,64.64974"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.00676119px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11730"
+ d="m 364.96219,212.35144 c 134.76755,64.3985 134.76755,64.3985 134.76755,64.3985"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.0052954px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Audio boxes">
+ <rect
+ y="152.77347"
+ x="313.63739"
+ height="59.610664"
+ width="80.546021"
+ id="rect11713"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.66879374;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.3375874, 2.67517478999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.88834"
+ x="202.04231"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.88834"
+ x="281.74911"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6-4"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.77045"
+ x="361.6153"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6-4-7"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.87439"
+ x="440.45193"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6-4-7-0"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <g
+ id="g11853"
+ transform="translate(-1.6464466,0.44194174)">
+ <g
+ id="g11842">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g11853-2"
+ transform="translate(78.133078,0.8986376)">
+ <g
+ id="g11842-7">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825-0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851-5"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g11853-4"
+ transform="translate(157.80237,0.8986376)">
+ <g
+ id="g11842-6">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823-62"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825-04"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851-4"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g11853-42"
+ transform="translate(237.29843,0.8986376)">
+ <g
+ id="g11842-0">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851-6"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ id="g11667">
+ <path
+ inkscape:connector-curvature="0"
+ id="path11636"
+ d="M 208.70157,276.7315 C 350.43385,177.5189 350.43385,177.5189 350.43385,177.5189 Z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11639"
+ d="m 354.08071,177.41535 c -63.77953,99.2126 0,0 0,0 l -63.77953,99.2126 z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11663"
+ d="m 357.87402,177.54035 c 10.62992,99.2126 10.62992,99.2126 10.62992,99.2126 l -10.62992,-99.2126 10.62992,99.2126 z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11665"
+ d="m 361.79232,177.54035 c 85.03937,99.2126 85.03937,99.2126 85.03937,99.2126 z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <g
+ id="g11616">
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,90.167774,-93.814154)"
+ id="g11468">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,169.91194,-93.814154)"
+ id="g11468-7">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-5"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141-1"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-2"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,249.52819,-93.837483)"
+ id="g11468-7-0">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-5-2"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141-1-0"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-2-6"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,328.58513,-93.814154)"
+ id="g11468-7-0-8">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-5-2-6"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141-1-0-8"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-2-6-0"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g11468-9"
+ transform="matrix(0.97104866,0,0,1.0034172,202.46698,-217.8299)">
+ <g
+ id="g11611">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1.07921612;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-8"
+ width="71.007797"
+ height="24.83367"
+ x="120.09704"
+ y="369.46201" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="122.05521"
+ y="385.58472"
+ id="text4141-4"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-7"
+ x="122.05521"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Master</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40.52273178px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="213.77092"
+ y="407.3364"
+ id="text11607"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0165302,0.98373864)"><tspan
+ sodipodi:role="line"
+ id="tspan11609"
+ x="213.77092"
+ y="407.3364"></tspan></text>
+ </g>
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1.0652945;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-8-1"
+ width="68.952026"
+ height="24.918531"
+ x="212.78783"
+ y="78.485184" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:39.48400879px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="228.40347"
+ y="87.221191"
+ id="text4141-4-0"
+ sodipodi:linespacing="100%"
+ transform="scale(0.98373863,1.0165302)"><tspan
+ sodipodi:role="line"
+ id="tspan4143-7-6"
+ x="228.40347"
+ y="87.221191"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">Control</tspan><tspan
+ id="tspan11709"
+ sodipodi:role="line"
+ x="228.40347"
+ y="99.884544"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">Machine</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text11607-4"
+ y="109.84251"
+ x="307.18109"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="109.84251"
+ x="307.18109"
+ id="tspan11609-4"
+ sodipodi:role="line" /></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11711"
+ d="m 248.0315,102.75591 c 74.40944,49.60629 74.40944,49.60629 74.40944,49.60629 l -74.40944,-49.60629 74.40944,49.60629 -74.40944,-49.60629 0,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000064;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:1.01306832;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/expose/input/abstract.tex b/expose/input/abstract.tex
new file mode 100644
index 0000000..46bfd8f
--- /dev/null
+++ b/expose/input/abstract.tex
@@ -0,0 +1,3 @@
+\begin{abstract}
+Lorem ipsum blah
+\end{abstract}
diff --git a/expose/input/introduction.tex b/expose/input/introduction.tex
new file mode 100644
index 0000000..f96114a
--- /dev/null
+++ b/expose/input/introduction.tex
@@ -0,0 +1,2 @@
+\section{Introduction}
+
diff --git a/help/Anforderungen_an_Abschlussarbeiten.pdf b/help/Anforderungen_an_Abschlussarbeiten.pdf
new file mode 100644
index 0000000..1d8a8b7
--- /dev/null
+++ b/help/Anforderungen_an_Abschlussarbeiten.pdf
Binary files differ
diff --git a/help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf b/help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf
new file mode 100644
index 0000000..c132891
--- /dev/null
+++ b/help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf
Binary files differ
diff --git a/help/Bewertungsraster.pdf b/help/Bewertungsraster.pdf
new file mode 100644
index 0000000..5eed478
--- /dev/null
+++ b/help/Bewertungsraster.pdf
Binary files differ
diff --git a/help/Bibliography.bib b/help/Bibliography.bib
new file mode 100755
index 0000000..6f024db
--- /dev/null
+++ b/help/Bibliography.bib
@@ -0,0 +1,181 @@
+%% This BibTeX bibliography file was created using BibDesk.
+%% http://bibdesk.sourceforge.net/
+
+
+%% Created for panik at 2011-10-28 11:46:25 +0200
+
+
+%% Saved with string encoding Unicode (UTF-8)
+
+
+@comment{jabref-meta: selector_publisher:}
+@comment{jabref-meta: selector_author:}
+@comment{jabref-meta: selector_journal:}
+@comment{jabref-meta: selector_keywords:}
+
+
+
+@article{Blauert1978,
+ Author = {Blauert, Jens and Mellert, V. and Platte, H. J. and Laws, P. and Hudde, H. and Scherer, P. and Poulsen, T. and Gottlob, D. and Plenge, G.},
+ Date-Added = {2011-10-28 11:45:58 +0200},
+ Date-Modified = {2011-10-28 11:45:58 +0200},
+ Journal = {Rundfunktech. Mitteilungen},
+ Keywords = {Ma, _read, Binauraltechnik},
+ Number = {4},
+ Pages = {195-218},
+ Title = {Wissenschaftliche Grundlagen der kopfbezogenen Stereofonie. Bericht {\"u}ber das Vorkolloquium zur DAGA '78 in Bochum, 13. M{\"a}rz 1978},
+ Volume = {22},
+ Year = {1978}}
+
+@article{Berg2006,
+ Author = {Berg, Jan and Rumsey, Francis},
+ Date-Added = {2011-10-25 14:47:12 +0200},
+ Date-Modified = {2011-10-25 14:47:32 +0200},
+ Journal = {J. Audio Eng. Soc.},
+ Month = {May},
+ Number = {5},
+ Pages = {365-379},
+ Title = {Identification of Quality Attributes of Spatial Audio by Repertory Grid Technique},
+ Volume = {54},
+ Year = {2006}}
+
+@book{DIN33402-2E,
+ Address = {Berlin},
+ Author = {DIN},
+ Date-Added = {2011-10-24 20:43:58 +0200},
+ Date-Modified = {2011-10-24 20:48:32 +0200},
+ Month = {Dezember},
+ Publisher = {Beuth},
+ Read = {0},
+ Title = {DIN 33402-2: K{\"o}rperma{\ss}e des Menschen - Teil 2: Werte},
+ Year = {2005}}
+
+@book{ITU_R1116-1,
+ Address = {Geneva},
+ Annote = {Annotations made in pdf document},
+ Author = {ITU},
+ Date-Added = {2011-10-24 13:38:37 +0200},
+ Date-Modified = {2011-10-25 10:02:25 +0200},
+ Publisher = {International Telecommunication Union},
+ Read = {0},
+ Title = {Rec. ITU-R BS.1116-1: Methods for the subjective assement of small impairments in audio systems including multichannel sound systems},
+ Year = {1997}}
+
+@article{Brodsky2011,
+ Author = {Brodsky, Warren},
+ Date-Added = {2011-10-24 13:25:43 +0200},
+ Date-Modified = {2011-10-24 13:35:43 +0200},
+ Journal = {Psychology of Music\emph{, prepublished in January 2011. DOI: 10.1177/0305735610387778}},
+ Title = {Developing a functional method to apply music in branding: Design language-generated music},
+ Year = {2011}}
+
+@book{Bortz2005,
+ Address = {Heidelberg},
+ Author = {Bortz, J{\"u}rgen},
+ Date-Added = {2011-10-24 13:18:34 +0200},
+ Date-Modified = {2011-10-24 13:23:03 +0200},
+ Edition = {{6. vollst{\"a}ndig {\"u}berarbeitete und aktualisierte Auflage}},
+ Publisher = {Springer},
+ Title = {Statistik f{\"u}r Human- und Sozialwissenschaftler},
+ Year = {2005}}
+
+@article{Moller1996,
+ Abstract = {
+},
+ Author = {M{\o}ller, Henrik and S{\o}rensen, Michael Friis and Jensen, Clemens Boje and Hammersh{\o}i, Dorte},
+ Date-Added = {2011-10-24 13:07:57 +0200},
+ Date-Modified = {2011-10-24 13:22:56 +0200},
+ Journal = {J. Audio Eng. Soc.},
+ Month = {June},
+ Number = {6},
+ Pages = {451-469},
+ Read = {0},
+ Title = {Binaural technique: Do we need individual recordings?},
+ Volume = {44},
+ Year = {1996}}
+
+@electronic{Ledergerber2002,
+ Author = {Stefan Ledergerber},
+ Date-Added = {2011-10-14 12:37:10 +0200},
+ Date-Modified = {2011-10-17 15:52:22 +0200},
+ Howpublished = {Online},
+ Title = {Application: How to surround},
+ Url = {http://www.vista7.com/e/surround/index.aspx},
+ Urldate = {01.01.1991},
+ Year = {2002}}
+
+@incollection{Ahnert2008,
+ Address = {Berlin, Heidelberg, New York},
+ Author = {Wolfgang Ahnert AND Hanns-Peter Tennhardt},
+ Booktitle = {Handbuch der Audiotechnik},
+ Chapter = {5},
+ Date-Modified = {2011-10-24 13:15:55 +0200},
+ Editor = {Stefan Weinzierl},
+ Pages = {178-233},
+ Publisher = {Springer},
+ Title = {Raumakustik},
+ Year = {2008}}
+
+@article{Barron1971,
+ Author = {Michael Barron},
+ Date-Modified = {2011-10-25 10:03:38 +0200},
+ Journal = {J. Sound Vibrat.},
+ Number = {4},
+ Owner = {SCF},
+ Pages = {475-494},
+ Timestamp = {2008.08.22},
+ Title = {The subjective effects of first reflections in concert halls - the need for lateral reflections},
+ Volume = {15},
+ Year = {1971}}
+
+@inproceedings{Berg2000,
+ Address = {Paris, France},
+ Author = {Jan Berg AND Francis Rumsey},
+ Booktitle = {Proceedings of Audio Eng. Soc. 108th Convention},
+ Date-Modified = {2011-10-14 15:58:10 +0200},
+ Number = {5139 (L-8)},
+ Owner = {SCF},
+ Timestamp = {2008.08.21},
+ Title = {In search of the spatial dimensions of reproduced sound: Verbal Protocol Analysis and Cluster Analysis of scaled verbal descriptors},
+ Year = {2000}}
+
+@book{Blauert2008,
+ Address = {Berlin, Heidelberg, New York},
+ Author = {Jens Blauert AND Ning Xiang},
+ Date-Modified = {2011-10-24 13:16:13 +0200},
+ Owner = {SCF},
+ Publisher = {Springer},
+ Timestamp = {2008.08.21},
+ Title = {Acoustics for Engineers: Troy Lectures},
+ Year = {2008}}
+
+@mastersthesis{Lindau2006,
+ Address = {Berlin},
+ Author = {Alexander Lindau},
+ Date-Modified = {2011-10-14 16:18:25 +0200},
+ Owner = {Alex},
+ School = {Technische Universit{\"a}t, Fakult{\"a}t 1, Fachgebiet Kommunikationswissenschaft},
+ Timestamp = {2011.07.22},
+ Title = {Ein Instrument zur softwaregest{\"u}tzten Messung binauraler Raumimpulsantworten in mehreren Freiheitsgraden},
+ Year = {2006}}
+
+@article{Reichhardt1955,
+ Author = {Wolfgang Reichhardt AND E. Kohlsdorf AND H. Mutscher},
+ Date-Modified = {2011-10-14 15:53:44 +0200},
+ Journal = {Hochfrequenztechnik und Elektroakustik},
+ Month = {July},
+ Number = {1},
+ Owner = {SCF},
+ Pages = {18-25},
+ Timestamp = {2008.08.21},
+ Title = {Die optimale Nachhallzeit f{\"u}r Studior{\"a}ume},
+ Volume = {64},
+ Year = {1955}}
+
+@techreport{Somerville1963,
+ Author = {T. Somerville AND C. L. S. Gilford},
+ Date-Modified = {2011-10-14 16:18:09 +0200},
+ Institution = {BBC},
+ Number = {52},
+ Title = {Tonal Quality in Concert Halls},
+ Year = {1963}}
diff --git a/help/Expose_Anleitung.pdf b/help/Expose_Anleitung.pdf
new file mode 100644
index 0000000..eb41aab
--- /dev/null
+++ b/help/Expose_Anleitung.pdf
Binary files differ
diff --git a/help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf b/help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf
new file mode 100755
index 0000000..c132891
--- /dev/null
+++ b/help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf
Binary files differ
diff --git a/help/FG AK Zitieren und Verweisen Systeme.pdf b/help/FG AK Zitieren und Verweisen Systeme.pdf
new file mode 100755
index 0000000..8b26955
--- /dev/null
+++ b/help/FG AK Zitieren und Verweisen Systeme.pdf
Binary files differ
diff --git a/help/FG_AK_Deutsch_AutorJahr.bst b/help/FG_AK_Deutsch_AutorJahr.bst
new file mode 100644
index 0000000..e073e4b
--- /dev/null
+++ b/help/FG_AK_Deutsch_AutorJahr.bst
@@ -0,0 +1,1638 @@
+%%
+%%
+%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann}
+%%
+%%
+%% This is file `FG_AK_template.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `ay,nat,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,volp-blk,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,and-xcom,url,url-blk,nfss,')
+%% ----------------------------------------
+%% *** FG_AK template, can be modified to change between harvard, chicago and number style ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ doi
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ urldate %editedByHand
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ ":" *
+ add.blank
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+ % editedByHand
+FUNCTION {bbl.and}
+{ "und"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "Hrgs." }
+
+FUNCTION {bbl.editor}
+{ "Hrg." }
+
+FUNCTION {bbl.edby}
+{ "Hrg. von" }
+
+FUNCTION {bbl.edition}
+{ "Auflage" }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {bbl.of}
+{ "von" }
+
+FUNCTION {bbl.number}
+{ "Nr." }
+
+FUNCTION {bbl.nr}
+{ "Nr." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "S." }
+
+FUNCTION {bbl.page}
+{ "S." }
+
+FUNCTION {bbl.chapter}
+{ "Kap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Masterarbeit" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Okt."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dez."}
+% end of editedByHand
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+
+% editedByHand
+FUNCTION {format.urldate}
+{ urldate empty$
+ { "" }
+ { "\urldateprefix\urldate{" urldate * "}" * }
+ if$
+}
+% end of edited part
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ duplicate$ #1 >
+ { "{ff~}{vv~}{ll}{, jj}" }
+ { "{vv~}{ll}{, ff}{, jj}" }
+ if$
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.doi}
+{ doi "doi" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ new.block
+ "\doi{" swap$ * "}" *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "\enquote{" swap$ *
+ add.period$ "}" *
+ }
+ if$
+}
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+% " " * bbl.edition * % editedByHand
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ " " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'bbl.pages
+ 'bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ " " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ address "address" bibinfo.check *
+ t empty$
+ 'skip$
+ { address empty$
+ 'skip$
+ { ": " * }
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ emphasize
+ word.in swap$ *
+ "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ }
+ if$
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ add.blank
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.edition output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title output
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+% editedByHand
+FUNCTION {electronic}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check % title is italic and without quotes
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.urldate output
+ new.block
+ format.note output
+ fin.entry
+}
+% end of editedByHand
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #2 =
+ numnames #2 > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\newcommand{\enquote}[1]{\glqq#1''}" % editedByHand
+ write$ newline$
+ "\providecommand{\natexlab}[1]{#1}"
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+ %editedByHand
+ "\providecommand{\urldate}[1]{#1}"
+ write$ newline$
+ "\providecommand{\urldateprefix}{Zugriff }"
+ write$ newline$
+ %end of editedByHand
+ "\expandafter\ifx\csname urlstyle\endcsname\relax"
+ write$ newline$
+ " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"
+ write$ newline$
+ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `FG_AK_template.bst'.
diff --git a/help/FG_AK_Deutsch_AutorJahr.pdf b/help/FG_AK_Deutsch_AutorJahr.pdf
new file mode 100644
index 0000000..7dc29ad
--- /dev/null
+++ b/help/FG_AK_Deutsch_AutorJahr.pdf
Binary files differ
diff --git a/help/FG_AK_Deutsch_Nummer.bst b/help/FG_AK_Deutsch_Nummer.bst
new file mode 100644
index 0000000..bcc6af0
--- /dev/null
+++ b/help/FG_AK_Deutsch_Nummer.bst
@@ -0,0 +1,1637 @@
+%%
+%%
+%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann}
+%%
+%%
+%% This is file `FG_AK_template.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `ay,nat,seq-no,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,volp-blk,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,and-xcom,url,url-blk,nfss,')
+%% ----------------------------------------
+%% *** FG_AK template, can be modified to change between harvard, chicago and number style ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ doi
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ urldate %editedByHand
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ ":" *
+ add.blank
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+ % editedByHand
+FUNCTION {bbl.and}
+{ "und"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "Hrgs." }
+
+FUNCTION {bbl.editor}
+{ "Hrg." }
+
+FUNCTION {bbl.edby}
+{ "Hrg. von" }
+
+FUNCTION {bbl.edition}
+{ "Auflage" }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {bbl.of}
+{ "von" }
+
+FUNCTION {bbl.number}
+{ "Nr." }
+
+FUNCTION {bbl.nr}
+{ "Nr." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "S." }
+
+FUNCTION {bbl.page}
+{ "S." }
+
+FUNCTION {bbl.chapter}
+{ "Kap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Masterarbeit" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Okt."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dez."}
+% end of editedByHand
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+
+% editedByHand
+FUNCTION {format.urldate}
+{ urldate empty$
+ { "" }
+ { "\urldateprefix\urldate{" urldate * "}" * }
+ if$
+}
+% end of edited part
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ duplicate$ #1 >
+ { "{ff~}{vv~}{ll}{, jj}" }
+ { "{vv~}{ll}{, ff}{, jj}" }
+ if$
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.doi}
+{ doi "doi" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ new.block
+ "\doi{" swap$ * "}" *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "\enquote{" swap$ *
+ add.period$ "}" *
+ }
+ if$
+}
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+% " " * bbl.edition * % editedByHand
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ " " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'bbl.pages
+ 'bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ " " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ address "address" bibinfo.check *
+ t empty$
+ 'skip$
+ { address empty$
+ 'skip$
+ { ": " * }
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ emphasize
+ word.in swap$ *
+ "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ }
+ if$
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ add.blank
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.edition output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title output
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+% editedByHand
+FUNCTION {electronic}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check % title is italic and without quotes
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.urldate output
+ new.block
+ format.note output
+ fin.entry
+}
+% end of editedByHand
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #2 =
+ numnames #2 > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+INTEGERS { seq.num }
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+EXECUTE {init.seq}
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\newcommand{\enquote}[1]{\glqq#1''}" % editedByHand
+ write$ newline$
+ "\providecommand{\natexlab}[1]{#1}"
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+ %editedByHand
+ "\providecommand{\urldate}[1]{#1}"
+ write$ newline$
+ "\providecommand{\urldateprefix}{Zugriff }"
+ write$ newline$
+ %end of editedByHand
+ "\expandafter\ifx\csname urlstyle\endcsname\relax"
+ write$ newline$
+ " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"
+ write$ newline$
+ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `FG_AK_template.bst'.
diff --git a/help/FG_AK_Deutsch_Nummer.pdf b/help/FG_AK_Deutsch_Nummer.pdf
new file mode 100644
index 0000000..b02aacb
--- /dev/null
+++ b/help/FG_AK_Deutsch_Nummer.pdf
Binary files differ
diff --git a/help/FG_AK_English_AuthorYear.bst b/help/FG_AK_English_AuthorYear.bst
new file mode 100644
index 0000000..3a273d8
--- /dev/null
+++ b/help/FG_AK_English_AuthorYear.bst
@@ -0,0 +1,1658 @@
+%%
+%%
+%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann}
+%%
+%%
+%% This is file `FG_AK_template.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `ay,nat,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,vol-bf,volp-com,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,url,url-blk,nfss,')
+%% ----------------------------------------
+%% *** FG_AK template, can be modified to change between harvard, chicago and number style ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ doi
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ urldate %editedByHand
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ ":" *
+ add.blank
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf{" swap$ * "}" * }
+ if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+% editedByHand
+FUNCTION {format.urldate}
+{ urldate empty$
+ { "" }
+ { "\urldateprefix\urldate{" urldate * "}" * }
+ if$
+}
+% end of edited part
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ duplicate$ #1 >
+ { "{ff~}{vv~}{ll}{, jj}" }
+ { "{vv~}{ll}{, ff}{, jj}" }
+ if$
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ { ";" * }
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ { ";" * }
+ 'skip$
+ if$
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.doi}
+{ doi "doi" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ new.block
+ "\doi{" swap$ * "}" *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "\enquote{" swap$ *
+ add.period$ "}" *
+ }
+ if$
+}
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+% " " * bbl.edition * % editedByHand
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'bbl.pages
+ 'bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ address "address" bibinfo.check *
+ t empty$
+ 'skip$
+ { address empty$
+ 'skip$
+ { ": " * }
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ emphasize
+ word.in swap$ *
+ "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ }
+ if$
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ add.blank
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.edition output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title output
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+% editedByHand
+FUNCTION {electronic}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check % title is italic and without quotes
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.urldate output
+ new.block
+ format.note output
+ fin.entry
+}
+% end of editedByHand
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #2 =
+ numnames #2 > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\newcommand{\enquote}[1]{``#1''}"
+ write$ newline$
+ "\providecommand{\natexlab}[1]{#1}"
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+ %editedByHand
+ "\providecommand{\urldate}[1]{#1}"
+ write$ newline$
+ "\providecommand{\urldateprefix}{Access }"
+ write$ newline$
+ %end of editedByHand
+ "\expandafter\ifx\csname urlstyle\endcsname\relax"
+ write$ newline$
+ " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"
+ write$ newline$
+ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `FG_AK_template.bst'.
diff --git a/help/FG_AK_English_AuthorYear.pdf b/help/FG_AK_English_AuthorYear.pdf
new file mode 100644
index 0000000..72cda51
--- /dev/null
+++ b/help/FG_AK_English_AuthorYear.pdf
Binary files differ
diff --git a/help/FG_AK_English_Number.bst b/help/FG_AK_English_Number.bst
new file mode 100644
index 0000000..b813c01
--- /dev/null
+++ b/help/FG_AK_English_Number.bst
@@ -0,0 +1,1657 @@
+%%
+%%
+%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann}
+%%
+%%
+%% This is file `FG_AK_template.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `ay,nat,seq-no,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,vol-bf,volp-com,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,url,url-blk,nfss,')
+%% ----------------------------------------
+%% *** FG_AK template, can be modified to change between harvard, chicago and number style ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ doi
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ urldate %editedByHand
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ ":" *
+ add.blank
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf{" swap$ * "}" * }
+ if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+% editedByHand
+FUNCTION {format.urldate}
+{ urldate empty$
+ { "" }
+ { "\urldateprefix\urldate{" urldate * "}" * }
+ if$
+}
+% end of edited part
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ duplicate$ #1 >
+ { "{ff~}{vv~}{ll}{, jj}" }
+ { "{vv~}{ll}{, ff}{, jj}" }
+ if$
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ { ";" * }
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { "; " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ { ";" * }
+ 'skip$
+ if$
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.doi}
+{ doi "doi" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ new.block
+ "\doi{" swap$ * "}" *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "\enquote{" swap$ *
+ add.period$ "}" *
+ }
+ if$
+}
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+% " " * bbl.edition * % editedByHand
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'bbl.pages
+ 'bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+ capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ address "address" bibinfo.check *
+ t empty$
+ 'skip$
+ { address empty$
+ 'skip$
+ { ": " * }
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ emphasize
+ word.in swap$ *
+ "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ }
+ if$
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ add.blank
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.edition output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.pages "pages" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title output
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+% editedByHand
+FUNCTION {electronic}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check % title is italic and without quotes
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.urldate output
+ new.block
+ format.note output
+ fin.entry
+}
+% end of editedByHand
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ format.doi output
+ new.block
+ format.url output
+ new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #2 =
+ numnames #2 > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ nameptr #1
+ #1 + =
+ numnames #5
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+INTEGERS { seq.num }
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+EXECUTE {init.seq}
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\newcommand{\enquote}[1]{``#1''}"
+ write$ newline$
+ "\providecommand{\natexlab}[1]{#1}"
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+ %editedByHand
+ "\providecommand{\urldate}[1]{#1}"
+ write$ newline$
+ "\providecommand{\urldateprefix}{Access }"
+ write$ newline$
+ %end of editedByHand
+ "\expandafter\ifx\csname urlstyle\endcsname\relax"
+ write$ newline$
+ " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"
+ write$ newline$
+ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `FG_AK_template.bst'.
diff --git a/help/FG_AK_English_Number.pdf b/help/FG_AK_English_Number.pdf
new file mode 100644
index 0000000..9aefca8
--- /dev/null
+++ b/help/FG_AK_English_Number.pdf
Binary files differ
diff --git a/help/Literatur.tex b/help/Literatur.tex
new file mode 100755
index 0000000..ffc330e
--- /dev/null
+++ b/help/Literatur.tex
@@ -0,0 +1,127 @@
+% ------------------------------------------------------------------------------------------------------ %
+% Beispieldokument zur Veranschaulichung der Erzeugung von latex-Zitationen in uebereinstimmung mit
+% Richtlinien des Fachgebiets Audiokommunikation.
+%
+% Bisher sind zwei Sprachen (Deutsch, Englisch) sowie zwei Zitationsstile (Autor/Jahr, Nummern) waehlbar.
+%
+%
+% Lieferumfang, bzw. zur korrekten Funktion benoetigte Dateien:
+%
+% Literatur.tex - dieses tex-Dokument
+% Bibliography.bib - eine Besipielbibliographie
+% FG_AK_Deutsch_AutorJahr.bst - style-file
+% FG_AK_Deutsch_Nummern.bst - " -
+% FG_AK_English_AuthorYear.bst - " -
+% FG_AK_English_Number.bst - " -
+% FG_AK_Deutsch_AutorJahr.pdf - pdf zur Dokumentation einer korrekten Kompilation
+% FG_AK_Deutsch_Nummern.pdf - " -
+% FG_AK_English_AuthorYear.pdf - " -
+% FG_AK_English_Number.pdf - " -
+%
+% sowie, zur naeheren Erlaeuterung:
+%
+% FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf
+% FG AK Zitieren und Verweisen Systeme.pdf
+%
+%-----------------------------------------%
+% Fachgebiet Audiokommunikation, TU Berlin
+% F. Brinkmann, A. Lindau, H.-J. Maempel
+% (C) 2011
+%
+% vs. 0.1 18.10.2011 FB
+% vs 0.2 18.10.2011 AL, todo Nummerierung-Deutsch(!) noch in Zitationsreihenfolge, nicht alphabetisch!
+% ------------------------------------------------------------------------------------------------------ %
+\documentclass[12pt,oneside,a4paper]{scrartcl} % Schriftgroesse, Layout, Papierformat, Art des Dokumentes
+\usepackage[utf8]{inputenc} % Umlaute ermoeglichen
+
+
+% Sprache durch auskommentieren waehlen
+%\usepackage[english]{babel} % Englisch
+\usepackage{ngerman} % ... Deutsch, neue Rechtschreibung
+
+
+% Korrekte Einbindung des natbib Packages, je nach gewaehltem Zitationsstil auskommentieren
+\usepackage{natbib} % ... fuer Autor/Jahr-Stil
+%\usepackage[numbers]{natbib} % ... fuer Nummerierungsstil
+
+
+% Zur Wahl des Zitations- und Bibliography-Stils die folgenden Zeilen entprechend ein bzw.
+% auskommentieren. Bisher sind zwei Sprachen (Deutsch, Englisch) sowie zwei Zitationsstile
+% (Autor/Jahr, Nummern) waehlbar:
+%
+%\bibliographystyle{FG_AK_English_AuthorYear}
+%\bibliographystyle{FG_AK_English_Number}
+%\bibliographystyle{FG_AK_Deutsch_AutorJahr}
+%\bibliographystyle{FG_AK_Deutsch_Nummer}
+
+
+% ------------------ %
+\begin{document}
+
+\section{Publikationstypen}
+
+\hspace{.4cm}\textbf{Monografie:}\\
+\cite{Bortz2005},\\
+
+\textbf{Sammelband:}\\
+\cite{Ahnert2008},\\
+
+\textbf{Zeitschriftenartikel:}\\
+% J.Sound Vib - 1 Autor
+\cite{Barron1971},\\
+% J. Audio Eng. Soc. - 2 Autoren
+\cite{Berg2006},\\
+% J. Hochfreq. - 3 Autoren, im Fliesstext ab jetzt per 'et al.' zitiert, wenn nicht mit '*' zitiert (\cite*{Moller1992})
+\cite{Reichhardt1955},\\
+% J. Audio Eng. Sog. - Titel endet mit einem ?
+\cite{Moller1996},\\
+% Rundfunktech. Mitteilungen - Bei mehr als 5 Autoren in Bibliographie mit Erstautor et al.
+\cite{Blauert1978},\\
+
+\textbf{Online first Zeitschriftenartikel (wie Zeitschriftenartikel):}\\
+\cite{Brodsky2011},\\
+
+\textbf{Technical Report (wie Zeitschriftenartikel):}\\
+%j. Report - 2 Autoren
+\cite{Somerville1963},\\
+
+\textbf{Kongressbeitrag:}\\
+% AES Convention
+\cite{Berg2000},\\
+
+\textbf{Internetressource:}\\
+\cite{Ledergerber2002},\\
+
+\textbf{Abschlussarbeit:}\\
+\cite{Lindau2006},\\
+
+\textbf{Normen und Empfehlungen (wie Monografie):}\\
+% Zitation einer Norm mit Angabe des Jahrs oder Nummer. Das ~ Zeichen setzt ein Leerzeichen und verhindert gleichzeitig einen Zeilenumbruch.
+DIN~33402-2E\nocite{DIN33402-2E},\\ % bei Autor/Jahr ~(\citeyear{DIN33402-2E}), bei Nummern ~\cite{DIN33402-2E}
+% Zitation einer Norm ohne Angabe des Jahrs. Sie erscheint trotzdem im Literaturverzeichnis.
+Rec.~ITU-R~BS.1116-1\nocite{ITU_R1116-1}.\\
+
+\clearpage
+
+\section{Zitation im Text}
+\citet{Ahnert2008}\\
+\citet[Fig.~5.1]{Ahnert2008}\\
+\citep{Ahnert2008}\\
+\citep[p.~200]{Ahnert2008}\\
+\citep[c.f.][]{Ahnert2008}\\
+\citep[c.f.][Fig.~5.1]{Ahnert2008}\\
+\citep{Ahnert2008, Barron1971}
+
+
+\section{Anmerkung}
+Um das Literaturverzeichnis zu erzeugen, muss zunaechst Latex ausgefuehrt werden, wodurch die zitierten BibItems in eine aux-Datei geschrieben werden. Danach BibTex ausfuehren, um die BibItems zu uebernehmen und zum Schluss noch dreimal (!) Tex ausfuehren. Beim ersten Mal, wird das Literaturverzeichnis erstellt, beim zweiten und dritten Mal werden die Verlinkungen im Text geschaffen.
+
+Um die gewuenschte Formatierung zu schaffen muessen auch die BibTex Eintraege entsprechend formatiert sein. Freie Programme zur Literaturverwaltung sind z.B. JabRef fuer Windows, Mac und Linux oder BibDesk fuer Mac. Beispiele fuer die korrekte Formatierung sind in der beiliegenden Bibliographie enthalten.
+
+Bei Abschlussarbeiten kann der Typ (Masterarbeit, Bachelorarbeit etc.) ueber das Bibtex-Feld 'Type' definiert werden. Die Standardeinstellungen sind 'Masterarbeit' bei deutschen und 'Master's Thesis' bei englischen Dokumenten.
+
+Wenn das Packet 'csquotes' benutzt wird, muss in der bbl-Datei die zweite Zeile mit '\%' auskommentiert werden: \%\textbackslash newcommand\{\textbackslash enquote\}[1]\{``\#1''\}. Die bbl-Datei entsteht, nachdem BibTex ausgefuehrt worden ist.
+
+\bibliography{Bibliography}
+
+\end{document} \ No newline at end of file
diff --git a/help/LiteraturreferenzenAKStyle.pdf b/help/LiteraturreferenzenAKStyle.pdf
new file mode 100644
index 0000000..48a1419
--- /dev/null
+++ b/help/LiteraturreferenzenAKStyle.pdf
Binary files differ
diff --git a/help/Rg_8A6825GW9TG.pdf b/help/Rg_8A6825GW9TG.pdf
new file mode 100644
index 0000000..de82370
--- /dev/null
+++ b/help/Rg_8A6825GW9TG.pdf
Binary files differ
diff --git a/thesis/thesis.pdf b/thesis/thesis.pdf
new file mode 100644
index 0000000..fdc2aeb
--- /dev/null
+++ b/thesis/thesis.pdf
Binary files differ
diff --git a/thesis/thesis.tex b/thesis/thesis.tex
new file mode 100644
index 0000000..b1d78b8
--- /dev/null
+++ b/thesis/thesis.tex
@@ -0,0 +1,265 @@
+\documentclass[12pt,a4paper,oneside,titlepage]{report}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp} % Sonderzeichen, z.B. €
+%\usepackage{citep}
+\usepackage{listings}
+\lstdefinelanguage{Ini}{basicstyle=\ttfamily\tiny,
+ columns=fullflexible,
+ tag=[s]{[]},
+ tagstyle=\color{blue}\bfseries,
+ usekeywordsintag=true
+}[html]
+\lstdefinelanguage{bash}{basicstyle=\ttfamily\tiny}
+\usepackage{ulem}
+\usepackage{lmodern}
+\usepackage{multirow}
+\usepackage{url}
+\usepackage{graphicx} % for PDF scaling
+\usepackage{pdfpages}
+\usepackage{float}
+\floatstyle{boxed}
+\restylefloat{figure}
+\usepackage{color}
+\usepackage{bbding}
+\usepackage{hyperref}
+\usepackage[font=scriptsize]{caption}
+\usepackage[numbers]{natbib}
+\graphicspath{{images//}}
+
+\begin{document}
+ \title{Master Thesis: SoundScape Renderer Networking}
+ \author{David Runge\\
+ Audiokommunikation und -technologie\\
+ Fachgebiet Audiokommunikation\\
+ Technische Universität Berlin\\
+ \href{dave@sleepmap.de}{dave@sleepmap.de}
+ }
+ \date{\today}
+ \maketitle
+ \begin{abstract}
+ Wave Field Synthesis (WFS) as a technological concept has been around for
+ many years now and all over the world several institutions run small and
+ some even large scale setups ranging from single speaker lines to those
+ facilitating a couple of hundred loudspeakers respectively.\\
+ The still evolving implementations are driven by several rendering
+ engines, of which two free and open-source ones, namely sWONDER and
+ SoundScape Renderer, have (partially) been developed at TU Berlin.\\
+ The latter due to its current design is not yet able to render for large
+ scale setups, ie.\ those using several computers to render audio on a
+ loudspeaker setup, due to the high amount of channels.\\
+ Its solid codebase however, which additionally offers a framework for many
+ more renderering types, and the ongoing development, deems further work on
+ this application a good future investment.\\
+ This work is about the extension of the SoundScape Renderer's functionality
+ to turn it into a networking application for large scale WFS setups.
+\end{abstract}
+ \section{Introduction}
+ Wave Field Synthesis (WFS) describes a spatial technique for rendering audio. As
+ such it aims at synthesizing a sound field of desired acoustic preference
+ in a given listening area, assuming a planar reproduction to be most
+ suitable for most applications.\\
+ WFS is typically implemented using a curved or linear loudspeaker array
+ surrounding the listening area.\\
+ Several free and open-source renderer applications exist for WFS
+ environments, with varying stages of feature richness.\\
+ The proposed work will focus on one of them and its extension towards WFS
+ on large scale systems.
+
+ \section{Free and open-source wave field synthesis renderers}
+ To date there exist three (known of) free and open-source Wave Field
+ Synthesis renderers, which are all \href{http://jackaudio.org/}{JACK Audio
+ Connection Kit (JACK)} \citep{website:jackaudio2016} clients:
+ \begin{itemize}
+ \item \href{https://sourceforge.net/projects/swonder/}{sWONDER} \citep{website:swonder2016},
+ developed by Technische Universität Berlin, Germany
+ \item \href{https://github.com/GameOfLife/WFSCollider}{WFSCollider} \citep{website:wfscollider2016},
+ developed by \href{http://gameoflife.nl/en}{Game Of Life Foundation} \citep{website:gameoflife2016},
+ The Hague, Netherlands
+ \item \href{http://spatialaudio.net/ssr/}{SoundScape Renderer (SSR)} \citep{website:ssr2016},
+ developed by Quality \& Usability Lab, Deutsche Telekom Laboratories
+ and TU Berlin and Institut für Nachrichtentechnik, Universität Rostock
+ \end{itemize}
+ Currently only WFSCollider and the SSR are actively maintained and
+ developed, thussWONDER, although used in some setups, loses significance.
+ Generally it can be said, that different concepts apply to the three
+ renderers, which are about to be explained briefly in the following
+ sections.
+
+ \subsection{WONDER}
+ sWONDER \citep{baalman2007} consists of a set of C++ applications that provide binaural and
+ WFS rendering. In 2007 it was specifically redesigned
+ \citep{baalmanetal2007} to cope with large scale WFS setups in which
+ several (computer) nodes, providing several speakers each, drive a system
+ together.\\
+ In these setups each node receives all available audio streams (which
+ represent one virtual audio source respectively) redundantly and a master
+ application signals which node is responsible for rendering what source
+ on which speaker.\\
+ It uses Open Sound Control (OSC) for messaging between its parts and for
+ setting its controls. Apart from that, it can be controlled through a
+ Graphical User Interface (GUI), that was specifically designed for it.
+ Unfortunately sWONDER has not been actively maintained for several years,
+ has a complex setup chain and many bugs, that are not likely to get fixed
+ any time soon.
+
+ \subsection{WFSCollider}
+ WFSCollider was built on top of
+ \href{https://supercollider.github.io}{SuperCollider} 3.5
+ \citep{website:supercollider2016} and is also capable of driving large
+ scale systems. It uses a different approach in
+ doing so, though: Whereas withsWONDER all audio streams are distributed
+ to each node, WFSCollider usually uses the audio files to be played on
+ all machines simultaneously and synchronizes between them.\\
+ It has a feature-rich GUI in the ``many window'' style, making available
+ time lines and movement of sources through facilitating what the sclang
+ (SuperCollider programming language) has to offer.\\
+ As WFSCollider basically is SuperCollider plus extra features, it is also
+ an OSC enabled application and can thus also be used for mere
+ multi-channel playback of audio.\\
+ Although it has many useful features, it requires MacOSX (Linux version
+ still untested) to run, is built upon a quite old version of
+ \href{https://supercollider.github.io}{SuperCollider} and is likely never
+ to be merged into it, due to many core changes to it.
+
+ \subsection{SoundScape Renderer}
+ SoundScape Renderer (SSR), also a C++ application, running on Linux and
+ MacOSX, is a multi-purpose spatial audio renderer, as it is not only
+ capable of Binaural Synthesis and WFS, but also Higher-Order Ambisonics
+ and Vector Base Amplitude Panning.\\
+ It can be used with a GUI or headless (without one), depicting the
+ virtual sources, their volumes and positions, alongside which speakers
+ are currently used for rendering a selected source.
+ SSR uses TCP/IP sockets for communication and thus is not directly OSC
+ enabled. This functionality can be achieved using the capapilities of
+ other applications such as \href{http://puredata.info}{PureData}
+ \citep{website:puredata2016} in combination with it though.\\
+ Unlike the two renderers above, the SSR is not able to run large-scale
+ WFS setups, as it lacks the features to communicate between instances of
+ itself on several computers, while these instances serve a subset of the
+ available loudspeakers.
+
+ \section{Extending Sound Scape Renderer functionality}
+ The SSR, due to its diverse set of rendering engines, which are made
+ available through an extensible framework, and its clean codebase, is a
+ good candidate for future large scale WFS setups. These type of features
+ are not yet implemented though and will need testing.\\
+ Therefore I propose the implementation and testing of said feature, making
+ the SSR capable of rendering on large scale WFS setups with many nodes,
+ controlled by a master instance.\\
+ The sought implementation is inspired by the architecture of sWONDER, but
+ instead of creating many single purpose applications, the master/node
+ feature will be made available through flags to the ssr executable, when
+ starting it. This behavior is already actively harnessed eg.\ for selecting
+ one of the several rendering engines.
+ \begin{figure}[!htb]
+ \centering
+ \includegraphics[scale=0.9, trim = 31mm 190mm 24mm 8mm, clip]{ssr-networking.pdf}
+ \caption{A diagram displaying the SSR master/node setup with TCP/IP
+ socket connections over network (green lines), audio channels (red dashed
+ lines) and OSC connection (blue dashed line). Machines are indicated as red
+ dashed rectangles and connections to audio hardware as outputs of SSR
+ nodes as black lines below them.}
+ \label{fig:ssr-networking}
+ \end{figure}
+ While the SSR already has an internal logic to know which loudspeaker will
+ be used for what virtual audio source, this will have to be extended to be
+ able to know which renderer node has to render what source on which
+ loudspeaker (see Figure~\ref{fig:ssr-networking}).
+ To achieve the above features, the SSR's messaging (and thus also settings)
+ capabilities have to be extended alongside its internal logic concerning
+ the selection of output channels (and the master to node notification
+ thereof). To introduce as little redundant code as possible, most likely a
+ ``the client knows all'' setup is desirable, in which each node knows about
+ the whole setup, but is also set to only serve its own subset of
+ loudspeakers in it. This will make sure that the rendering engine remains
+ functional also in a small scale WFS setup.\\
+ The lack of a direct OSC functionality, as provided by the two other
+ renderers, will not be problematic, as master and nodes can communicate
+ through their builtin TCP/IP sockets directly and the master can, if
+ needed, be controlled via OSC.
+
+ \section{Prelimenaries}
+ In preparation to the exposé I tried to implement a side-by-side
+ installation, using Arch Linux on a medium scale setup, facilitating the
+ WFS system of the Electronic Studio at TU Berlin. Unfortunately the
+ proprietary Dante driver, that is used in that system is very complex to be
+ built, as well as underdeveloped and thus keeps the system from being
+ easily updated, which is needed for testing purposes (finding a suitable
+ real-time, low-latency Linux kernel), trying out new software features,
+ building new software and keeping a system safe. The driver will most
+ likely require changes to the hardware due to implemention of hardware
+ branding by the vendor and dire testing before usage.\\
+ Although eventually using a proper WFS setup for testing will be necessary,
+ it is luckily not needed for implementing the features, as they can already be
+ worked out using two machines running Linux, JACK and the development version
+ of SSR.\\
+ The hardware of the large scale setup at TU Berlin in H0104 is currently
+ about to be updated and therefore a valuable candidate for testing of the
+ sought SSR features.
+
+ \section{Schedule}
+ I propose a six month schedule for the implementation and testing of the
+ changes to the source code and writing of an accompanying thesis. The
+ following rough schedule should serve as a guideline for the realization of
+ the work:\\
+ \begin{tabular}{|l|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{Schedule}}\\
+ \hline
+ \textbf{Week} & \textbf{Implementation} & \textbf{Tests} & \textbf{Thesis} \\
+ \hline
+ 1 & Reading into codebase & & \\
+ \hline
+ 2 & Reading into codebase & & \\
+ \hline
+ 3 & Reading into codebase & & \\
+ \hline
+ 4 & Reading into codebase & & \\
+ \hline
+ 5 & Assessing changes & & Documentation \\
+ \hline
+ 6 & Assessing changes & & Documentation \\
+ \hline
+ 7 & Implementing changes & & \\
+ \hline
+ 8 & Implementing changes & & \\
+ \hline
+ 9 & Implementing changes & & \\
+ \hline
+ 10 & Implementing changes & & \\
+ \hline
+ 11 & Implementing changes & & \\
+ \hline
+ 12 & Implementing changes & & \\
+ \hline
+ 13 & Implementing changes & & Preparation\\
+ \hline
+ 14 & Implementing changes & & Preparation\\
+ \hline
+ 15 & & Small scale setup & Writing\\
+ \hline
+ 16 & & Large scale setup & Writing\\
+ \hline
+ 17 & & Large scale setup & Writing\\
+ \hline
+ 18 & & Large scale setup & Writing\\
+ \hline
+ 19 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 20 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 21 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 22 & & & Writing\\
+ \hline
+ 23 & & & Writing\\
+ \hline
+ 24 & & & Writing\\
+ \hline
+ \end{tabular}
+ \pagebreak
+ \bibliographystyle{plainnat}
+ \bibliography{bib/ssr-networking}
+\end{document}