summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-04-11 21:02:30 +0200
committerHarald Welte <laforge@gnumonks.org>2018-04-11 21:04:10 +0200
commitff8614e6a9b153767c78773c453e5ba3aceff210 (patch)
treef23c0093c49c63b7edf1de867cc3616636961595
parent4166a5589d0eb30cb64e922b4ab59bfa20f4a16c (diff)
final phone_protocol-eh2018 slides
-rw-r--r--2018/phone_protocol-eh2018/gprs_attach.pngbin0 -> 82945 bytes
-rw-r--r--2018/phone_protocol-eh2018/gprs_attach.svg315
-rw-r--r--2018/phone_protocol-eh2018/gprs_control_stack.svg1341
-rw-r--r--2018/phone_protocol-eh2018/gprs_pdp_ctx_act.pngbin0 -> 80879 bytes
-rw-r--r--2018/phone_protocol-eh2018/gprs_pdp_ctx_act.svg338
-rw-r--r--2018/phone_protocol-eh2018/gsm_cell_selection.pngbin0 -> 76980 bytes
-rw-r--r--2018/phone_protocol-eh2018/gsm_control_stack.gnumericbin0 -> 2646 bytes
-rw-r--r--2018/phone_protocol-eh2018/gsm_control_stack.svg2556
-rw-r--r--2018/phone_protocol-eh2018/location_update.pngbin0 -> 101559 bytes
-rw-r--r--2018/phone_protocol-eh2018/location_update.svg505
-rw-r--r--2018/phone_protocol-eh2018/location_update_l3only.pngbin0 -> 48864 bytes
-rw-r--r--2018/phone_protocol-eh2018/location_update_l3only.svg215
-rw-r--r--2018/phone_protocol-eh2018/phone_powerup.adoc256
-rw-r--r--2018/phone_protocol-eh2018/phone_powerup.html4459
-rw-r--r--2018/phone_protocol-eh2018/phone_powerup__1.pngbin0 -> 43358 bytes
-rw-r--r--2018/phone_protocol-eh2018/phone_powerup__2.pngbin0 -> 56582 bytes
-rw-r--r--2018/phone_protocol-eh2018/phone_powerup__3.pngbin0 -> 62940 bytes
-rw-r--r--2018/phone_protocol-eh2018/umts_cell_selection.pngbin0 -> 86691 bytes
18 files changed, 9985 insertions, 0 deletions
diff --git a/2018/phone_protocol-eh2018/gprs_attach.png b/2018/phone_protocol-eh2018/gprs_attach.png
new file mode 100644
index 0000000..1e7759d
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gprs_attach.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/gprs_attach.svg b/2018/phone_protocol-eh2018/gprs_attach.svg
new file mode 100644
index 0000000..26a5ee8
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gprs_attach.svg
@@ -0,0 +1,315 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1"
+ width="1800px" height="745px"
+ viewBox="0 0 1800 745"
+ xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges"
+ stroke-width="1" text-rendering="geometricPrecision">
+<polygon fill="white" points="214,7 234,7 234,16 214,16"/>
+<text x="225" y="16" textLength="18" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+MS
+</text>
+<polygon fill="white" points="616,7 732,7 732,16 616,16"/>
+<text x="675" y="16" textLength="115" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+BSS (BTS,BSC,PCU)
+</text>
+<polygon fill="white" points="1106,7 1142,7 1142,16 1106,16"/>
+<text x="1125" y="16" textLength="34" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+SGSN
+</text>
+<polygon fill="white" points="1561,7 1587,7 1587,16 1561,16"/>
+<text x="1575" y="16" textLength="24" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+HLR
+</text>
+<line x1="225" y1="22" x2="225" y2="39" stroke="black"/>
+<line x1="675" y1="22" x2="675" y2="39" stroke="black"/>
+<line x1="1125" y1="22" x2="1125" y2="39" stroke="black"/>
+<line x1="1575" y1="22" x2="1575" y2="39" stroke="black"/>
+<line x1="225" y1="39" x2="225" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="675" y1="39" x2="675" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1125" y1="39" x2="1125" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1575" y1="39" x2="1575" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<polygon fill="white" points="833,40 965,40 965,49 833,49"/>
+<text x="834" y="49" textLength="130" font-family="Helvetica" font-size="12" fill="black">
+GPRS Attach Procedure
+</text>
+<line x1="225" y1="56" x2="225" y2="73" stroke="black"/>
+<line x1="675" y1="56" x2="675" y2="73" stroke="black"/>
+<line x1="1125" y1="56" x2="1125" y2="73" stroke="black"/>
+<line x1="1575" y1="56" x2="1575" y2="73" stroke="black"/>
+<line x1="225" y1="73" x2="225" y2="101" stroke="black"/>
+<line x1="675" y1="73" x2="675" y2="101" stroke="black"/>
+<line x1="1125" y1="73" x2="1125" y2="101" stroke="black"/>
+<line x1="1575" y1="73" x2="1575" y2="101" stroke="black"/>
+<polygon fill="white" points="8,73 442,73 442,95 8,95"/>
+<line x1="8" y1="73" x2="442" y2="73" stroke="black"/>
+<line x1="8" y1="95" x2="442" y2="95" stroke="black"/>
+<line x1="8" y1="73" x2="8" y2="95" stroke="black"/>
+<line x1="442" y1="73" x2="442" y2="95" stroke="black"/>
+<polygon fill="white" points="187,80 262,80 262,89 187,89"/>
+<text x="188" y="89" textLength="73" font-family="Helvetica" font-size="12" fill="black">
+Cell Selection
+</text>
+<line x1="225" y1="101" x2="225" y2="129" stroke="black"/>
+<line x1="675" y1="101" x2="675" y2="129" stroke="black"/>
+<line x1="1125" y1="101" x2="1125" y2="129" stroke="black"/>
+<line x1="1575" y1="101" x2="1575" y2="129" stroke="black"/>
+<line x1="225" y1="112" x2="675" y2="112" stroke="black"/>
+<polygon fill="black" points="675,112 665,118 665,106"/>
+<polygon fill="white" points="371,102 527,102 527,111 371,111"/>
+<text x="372" y="111" textLength="154" font-family="Helvetica" font-size="12" fill="black">
+L1 RACH burst (cause=TBF)
+</text>
+<line x1="225" y1="129" x2="225" y2="157" stroke="black"/>
+<line x1="675" y1="129" x2="675" y2="157" stroke="black"/>
+<line x1="1125" y1="129" x2="1125" y2="157" stroke="black"/>
+<line x1="1575" y1="129" x2="1575" y2="157" stroke="black"/>
+<line x1="675" y1="140" x2="225" y2="140" stroke="black"/>
+<polygon fill="black" points="225,140 235,146 235,134"/>
+<polygon fill="white" points="359,130 540,130 540,139 359,139"/>
+<text x="360" y="139" textLength="179" font-family="Helvetica" font-size="12" fill="black">
+AGCH: RR IMMEDIAGE ASSIGN
+</text>
+<line x1="225" y1="157" x2="225" y2="185" stroke="black"/>
+<line x1="675" y1="157" x2="675" y2="185" stroke="black"/>
+<line x1="1125" y1="157" x2="1125" y2="185" stroke="black"/>
+<line x1="1575" y1="157" x2="1575" y2="185" stroke="black"/>
+<polygon fill="white" points="8,157 442,157 442,179 8,179"/>
+<line x1="8" y1="157" x2="442" y2="157" stroke="black"/>
+<line x1="8" y1="179" x2="442" y2="179" stroke="black"/>
+<line x1="8" y1="157" x2="8" y2="179" stroke="black"/>
+<line x1="442" y1="157" x2="442" y2="179" stroke="black"/>
+<polygon fill="white" points="103,164 345,164 345,173 103,173"/>
+<text x="104" y="173" textLength="240" font-family="Helvetica" font-size="12" fill="black">
+Switch from BCCH/CCCH to dedicated mode
+</text>
+<line x1="225" y1="185" x2="225" y2="213" stroke="black"/>
+<line x1="675" y1="185" x2="675" y2="213" stroke="black"/>
+<line x1="1125" y1="185" x2="1125" y2="213" stroke="black"/>
+<line x1="1575" y1="185" x2="1575" y2="213" stroke="black"/>
+<line x1="225" y1="196" x2="675" y2="196" stroke="black"/>
+<polygon fill="black" points="675,196 665,202 665,190"/>
+<polygon fill="black" points="225,196 235,202 235,190"/>
+<polygon fill="white" points="389,186 510,186 510,195 389,195"/>
+<text x="390" y="195" textLength="119" font-family="Helvetica" font-size="12" fill="black">
+UL TBF establishment
+</text>
+<polygon fill="white" points="405,197 494,197 494,206 405,206"/>
+<text x="406" y="206" textLength="87" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC Layer
+</text>
+<line x1="225" y1="213" x2="225" y2="241" stroke="black"/>
+<line x1="675" y1="213" x2="675" y2="241" stroke="black"/>
+<line x1="1125" y1="213" x2="1125" y2="241" stroke="black"/>
+<line x1="1575" y1="213" x2="1575" y2="241" stroke="black"/>
+<line x1="225" y1="224" x2="675" y2="224" stroke="black"/>
+<polygon fill="black" points="675,224 665,230 665,218"/>
+<polygon fill="white" points="328,214 571,214 571,223 328,223"/>
+<text x="329" y="223" textLength="241" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (GMM ATTACH REQUEST))
+</text>
+<line x1="225" y1="241" x2="225" y2="269" stroke="black"/>
+<line x1="675" y1="241" x2="675" y2="269" stroke="black"/>
+<line x1="1125" y1="241" x2="1125" y2="269" stroke="black"/>
+<line x1="1575" y1="241" x2="1575" y2="269" stroke="black"/>
+<line x1="675" y1="252" x2="1125" y2="252" stroke="black"/>
+<polygon fill="black" points="1125,252 1115,258 1115,246"/>
+<polygon fill="white" points="764,242 1034,242 1034,251 764,251"/>
+<text x="765" y="251" textLength="268" font-family="Helvetica" font-size="12" fill="black">
+BSSGP UL-UD (LLC (GMM ATTACH REQUEST))
+</text>
+<line x1="225" y1="269" x2="225" y2="297" stroke="black"/>
+<line x1="675" y1="269" x2="675" y2="297" stroke="black"/>
+<line x1="1125" y1="269" x2="1125" y2="297" stroke="black"/>
+<line x1="1575" y1="269" x2="1575" y2="297" stroke="black"/>
+<polygon fill="white" points="14,269 1336,269 1336,291 14,291"/>
+<polygon fill="white" points="8,275 1342,275 1342,285 8,285"/>
+<circle fill="white" cx="14" cy="275" r="6"/>
+<circle fill="white" cx="1336" cy="275" r="6"/>
+<circle fill="white" cx="14" cy="285" r="6"/>
+<circle fill="white" cx="1336" cy="285" r="6"/>
+<line x1="14" y1="269" x2="1336" y2="269" stroke="black"/>
+<line x1="14" y1="291" x2="1336" y2="291" stroke="black"/>
+<line x1="8" y1="275" x2="8" y2="285" stroke="black"/>
+<line x1="1342" y1="275" x2="1342" y2="285" stroke="black"/>
+<path d="M 8 275 A6,6 0 0,1 14,269" stroke="black" fill="none"/><path d="M 1336 269 A6,6 0 0,1 1342,275" stroke="black" fill="none"/><path d="M 1342 285 A6,6 0 0,1 1336,291" stroke="black" fill="none"/><path d="M 14 291 A6,6 0 0,1 8,285" stroke="black" fill="none"/><polygon fill="white" points="473,276 875,276 875,285 473,285"/>
+<text x="474" y="285" textLength="400" font-family="Helvetica" font-size="12" fill="black">
+optional: GMM IDENTITY REQ + RESP (IMSI) if SGSN doesn't know TMSI
+</text>
+<line x1="225" y1="297" x2="225" y2="325" stroke="black"/>
+<line x1="675" y1="297" x2="675" y2="325" stroke="black"/>
+<line x1="1125" y1="297" x2="1125" y2="325" stroke="black"/>
+<line x1="1575" y1="297" x2="1575" y2="325" stroke="black"/>
+<line x1="1125" y1="308" x2="1575" y2="308" stroke="black"/>
+<polygon fill="black" points="1575,308 1565,314 1565,302"/>
+<polygon fill="white" points="1273,298 1426,298 1426,307 1273,307"/>
+<text x="1274" y="307" textLength="151" font-family="Helvetica" font-size="12" fill="black">
+MAP SEND AUTH INFO req
+</text>
+<line x1="225" y1="325" x2="225" y2="353" stroke="black"/>
+<line x1="675" y1="325" x2="675" y2="353" stroke="black"/>
+<line x1="1125" y1="325" x2="1125" y2="353" stroke="black"/>
+<line x1="1575" y1="325" x2="1575" y2="353" stroke="black"/>
+<line x1="1575" y1="336" x2="1125" y2="336" stroke="black"/>
+<polygon fill="black" points="1125,336 1135,342 1135,330"/>
+<polygon fill="white" points="1270,326 1429,326 1429,335 1270,335"/>
+<text x="1271" y="335" textLength="157" font-family="Helvetica" font-size="12" fill="black">
+MAP SEND AUTH INFO resp
+</text>
+<line x1="225" y1="353" x2="225" y2="381" stroke="black"/>
+<line x1="675" y1="353" x2="675" y2="381" stroke="black"/>
+<line x1="1125" y1="353" x2="1125" y2="381" stroke="black"/>
+<line x1="1575" y1="353" x2="1575" y2="381" stroke="black"/>
+<line x1="1125" y1="364" x2="675" y2="364" stroke="black"/>
+<polygon fill="black" points="675,364 685,370 685,358"/>
+<polygon fill="white" points="788,354 1011,354 1011,363 788,363"/>
+<text x="789" y="363" textLength="221" font-family="Helvetica" font-size="12" fill="black">
+BSSGP DL-UD (LLC (GMM AUTH REQ))
+</text>
+<line x1="225" y1="381" x2="225" y2="409" stroke="black"/>
+<line x1="675" y1="381" x2="675" y2="409" stroke="black"/>
+<line x1="1125" y1="381" x2="1125" y2="409" stroke="black"/>
+<line x1="1575" y1="381" x2="1575" y2="409" stroke="black"/>
+<line x1="225" y1="392" x2="675" y2="392" stroke="black"/>
+<polygon fill="black" points="675,392 665,398 665,386"/>
+<polygon fill="black" points="225,392 235,398 235,386"/>
+<polygon fill="white" points="389,382 510,382 510,391 389,391"/>
+<text x="390" y="391" textLength="119" font-family="Helvetica" font-size="12" fill="black">
+DL TBF establishment
+</text>
+<polygon fill="white" points="405,393 494,393 494,402 405,402"/>
+<text x="406" y="402" textLength="87" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC Layer
+</text>
+<line x1="225" y1="409" x2="225" y2="437" stroke="black"/>
+<line x1="675" y1="409" x2="675" y2="437" stroke="black"/>
+<line x1="1125" y1="409" x2="1125" y2="437" stroke="black"/>
+<line x1="1575" y1="409" x2="1575" y2="437" stroke="black"/>
+<line x1="675" y1="420" x2="225" y2="420" stroke="black"/>
+<polygon fill="black" points="225,420 235,426 235,414"/>
+<polygon fill="white" points="352,410 547,410 547,419 352,419"/>
+<text x="353" y="419" textLength="193" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (GMM AUTH REQ))
+</text>
+<line x1="225" y1="437" x2="225" y2="465" stroke="black"/>
+<line x1="675" y1="437" x2="675" y2="465" stroke="black"/>
+<line x1="1125" y1="437" x2="1125" y2="465" stroke="black"/>
+<line x1="1575" y1="437" x2="1575" y2="465" stroke="black"/>
+<line x1="225" y1="448" x2="675" y2="448" stroke="black"/>
+<polygon fill="black" points="675,448 665,454 665,442"/>
+<polygon fill="white" points="348,438 550,438 550,447 348,447"/>
+<text x="349" y="447" textLength="200" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (GMM AUTH RESP))
+</text>
+<line x1="225" y1="465" x2="225" y2="493" stroke="black"/>
+<line x1="675" y1="465" x2="675" y2="493" stroke="black"/>
+<line x1="1125" y1="465" x2="1125" y2="493" stroke="black"/>
+<line x1="1575" y1="465" x2="1575" y2="493" stroke="black"/>
+<line x1="675" y1="476" x2="1125" y2="476" stroke="black"/>
+<polygon fill="black" points="1125,476 1115,482 1115,470"/>
+<polygon fill="white" points="785,466 1014,466 1014,475 785,475"/>
+<text x="786" y="475" textLength="227" font-family="Helvetica" font-size="12" fill="black">
+BSSGP UL-UD (LLC (GMM AUTH RESP))
+</text>
+<line x1="225" y1="493" x2="225" y2="521" stroke="black"/>
+<line x1="675" y1="493" x2="675" y2="521" stroke="black"/>
+<line x1="1125" y1="493" x2="1125" y2="521" stroke="black"/>
+<line x1="1575" y1="493" x2="1575" y2="521" stroke="black"/>
+<polygon fill="white" points="908,493 1342,493 1342,515 908,515"/>
+<line x1="908" y1="493" x2="1342" y2="493" stroke="black"/>
+<line x1="908" y1="515" x2="1342" y2="515" stroke="black"/>
+<line x1="908" y1="493" x2="908" y2="515" stroke="black"/>
+<line x1="1342" y1="493" x2="1342" y2="515" stroke="black"/>
+<polygon fill="white" points="1046,500 1202,500 1202,509 1046,509"/>
+<text x="1047" y="509" textLength="154" font-family="Helvetica" font-size="12" fill="black">
+SRES(MS) == SRES(HLR) ?
+</text>
+<line x1="225" y1="521" x2="225" y2="549" stroke="black"/>
+<line x1="675" y1="521" x2="675" y2="549" stroke="black"/>
+<line x1="1125" y1="521" x2="1125" y2="549" stroke="black"/>
+<line x1="1575" y1="521" x2="1575" y2="549" stroke="black"/>
+<line x1="1125" y1="532" x2="1575" y2="532" stroke="black"/>
+<polygon fill="black" points="1575,532 1565,538 1565,526"/>
+<polygon fill="white" points="1260,522 1439,522 1439,531 1260,531"/>
+<text x="1261" y="531" textLength="177" font-family="Helvetica" font-size="12" fill="black">
+MAP UPD GPRS LOC AREA req
+</text>
+<line x1="225" y1="549" x2="225" y2="577" stroke="black"/>
+<line x1="675" y1="549" x2="675" y2="577" stroke="black"/>
+<line x1="1125" y1="549" x2="1125" y2="577" stroke="black"/>
+<line x1="1575" y1="549" x2="1575" y2="577" stroke="black"/>
+<line x1="1575" y1="560" x2="1125" y2="560" stroke="black"/>
+<polygon fill="black" points="1125,560 1135,566 1135,554"/>
+<polygon fill="white" points="1257,550 1442,550 1442,559 1257,559"/>
+<text x="1258" y="559" textLength="183" font-family="Helvetica" font-size="12" fill="black">
+MAP INSERT SUBSCR DATA req
+</text>
+<line x1="225" y1="577" x2="225" y2="605" stroke="black"/>
+<line x1="675" y1="577" x2="675" y2="605" stroke="black"/>
+<line x1="1125" y1="577" x2="1125" y2="605" stroke="black"/>
+<line x1="1575" y1="577" x2="1575" y2="605" stroke="black"/>
+<line x1="1125" y1="588" x2="1575" y2="588" stroke="black"/>
+<polygon fill="black" points="1575,588 1565,594 1565,582"/>
+<polygon fill="white" points="1254,578 1445,578 1445,587 1254,587"/>
+<text x="1255" y="587" textLength="189" font-family="Helvetica" font-size="12" fill="black">
+MAP INSERT SUBSCR DATA resp
+</text>
+<line x1="225" y1="605" x2="225" y2="633" stroke="black"/>
+<line x1="675" y1="605" x2="675" y2="633" stroke="black"/>
+<line x1="1125" y1="605" x2="1125" y2="633" stroke="black"/>
+<line x1="1575" y1="605" x2="1575" y2="633" stroke="black"/>
+<line x1="1575" y1="616" x2="1125" y2="616" stroke="black"/>
+<polygon fill="black" points="1125,616 1135,622 1135,610"/>
+<polygon fill="white" points="1257,606 1442,606 1442,615 1257,615"/>
+<text x="1258" y="615" textLength="183" font-family="Helvetica" font-size="12" fill="black">
+MAP UPD GPRS LOC AREA resp
+</text>
+<line x1="225" y1="633" x2="225" y2="661" stroke="black"/>
+<line x1="675" y1="633" x2="675" y2="661" stroke="black"/>
+<line x1="1125" y1="633" x2="1125" y2="661" stroke="black"/>
+<line x1="1575" y1="633" x2="1575" y2="661" stroke="black"/>
+<line x1="1125" y1="644" x2="675" y2="644" stroke="black"/>
+<polygon fill="black" points="675,644 685,650 685,638"/>
+<polygon fill="white" points="769,634 1030,634 1030,643 769,643"/>
+<text x="770" y="643" textLength="259" font-family="Helvetica" font-size="12" fill="black">
+BSSGP DL-UD (LLC (GMM ATTACH ACCEPT))
+</text>
+<line x1="225" y1="661" x2="225" y2="689" stroke="black"/>
+<line x1="675" y1="661" x2="675" y2="689" stroke="black"/>
+<line x1="1125" y1="661" x2="1125" y2="689" stroke="black"/>
+<line x1="1575" y1="661" x2="1575" y2="689" stroke="black"/>
+<line x1="675" y1="672" x2="225" y2="672" stroke="black"/>
+<polygon fill="black" points="225,672 235,678 235,666"/>
+<polygon fill="white" points="333,662 566,662 566,671 333,671"/>
+<text x="334" y="671" textLength="231" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (GMM ATTACH ACCEPT))
+</text>
+<line x1="225" y1="689" x2="225" y2="717" stroke="black"/>
+<line x1="675" y1="689" x2="675" y2="717" stroke="black"/>
+<line x1="1125" y1="689" x2="1125" y2="717" stroke="black"/>
+<line x1="1575" y1="689" x2="1575" y2="717" stroke="black"/>
+<line x1="225" y1="700" x2="675" y2="700" stroke="black"/>
+<polygon fill="black" points="675,700 665,706 665,694"/>
+<polygon fill="white" points="312,690 587,690 587,699 312,699"/>
+<text x="313" y="699" textLength="273" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (GMM P-TMSI REALLOC COMPL)
+</text>
+<line x1="225" y1="717" x2="225" y2="745" stroke="black"/>
+<line x1="675" y1="717" x2="675" y2="745" stroke="black"/>
+<line x1="1125" y1="717" x2="1125" y2="745" stroke="black"/>
+<line x1="1575" y1="717" x2="1575" y2="745" stroke="black"/>
+<line x1="675" y1="728" x2="1125" y2="728" stroke="black"/>
+<polygon fill="black" points="1125,728 1115,734 1115,722"/>
+<polygon fill="white" points="768,718 1031,718 1031,727 768,727"/>
+<text x="769" y="727" textLength="261" font-family="Helvetica" font-size="12" fill="black">
+BSSGP (LLC (GMM P-TMSI REALLOC COMPL)
+</text>
+<line x1="225" y1="739" x2="225" y2="745" stroke="black"/>
+<line x1="675" y1="739" x2="675" y2="745" stroke="black"/>
+<line x1="1125" y1="739" x2="1125" y2="745" stroke="black"/>
+<line x1="1575" y1="739" x2="1575" y2="745" stroke="black"/>
+</svg>
diff --git a/2018/phone_protocol-eh2018/gprs_control_stack.svg b/2018/phone_protocol-eh2018/gprs_control_stack.svg
new file mode 100644
index 0000000..8622512
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gprs_control_stack.svg
@@ -0,0 +1,1341 @@
+<?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="1052.3622"
+ height="744.09448"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="gprs_control_stack.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path4387"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path4384"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-8"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-9"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-6"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-7"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-3"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-7"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-1"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-1"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-0"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-3"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-2"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-1"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-7"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-5"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-2"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-77"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-9"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-10"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-60"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-10"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-5"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7432"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7434"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7436"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7438"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7440"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7442"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7444"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7446"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-57"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-3"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-3"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-9"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-55"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-38"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-60"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-36"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4384-18"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-70"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4387-51"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.1"
+ inkscape:cx="516.55156"
+ inkscape:cy="298.19641"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1598"
+ inkscape:window-height="1177"
+ inkscape:window-x="1600"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ units="mm"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ type="xygrid"
+ id="grid2985" />
+ </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"
+ transform="translate(0,-308.2677)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="287.28647"
+ y="552.07013"
+ id="text3003"
+ sodipodi:linespacing="125%"
+ transform="translate(0,308.2677)"><tspan
+ sodipodi:role="line"
+ id="tspan3005"></tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="276.78516"
+ y="423.8038"
+ id="text3023"
+ sodipodi:linespacing="125%"
+ transform="translate(0,308.2677)"><tspan
+ sodipodi:role="line"
+ id="tspan3025"
+ x="276.78516"
+ y="423.8038" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="279.03543"
+ y="412.55237"
+ id="text3027"
+ sodipodi:linespacing="125%"
+ transform="translate(0,308.2677)"><tspan
+ sodipodi:role="line"
+ id="tspan3029"
+ x="279.03543"
+ y="412.55237" /></text>
+ <rect
+ style="fill:#afe9af;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3110"
+ width="88.58268"
+ height="35.433071"
+ x="35.433041"
+ y="768.89764" />
+ <rect
+ style="fill:#afe9af;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3112"
+ width="88.58268"
+ height="35.433071"
+ x="35.433041"
+ y="733.46454" />
+ <rect
+ style="fill:#afe9af;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3114"
+ width="88.58268"
+ height="35.433071"
+ x="35.433041"
+ y="698.03149" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="61.552505"
+ y="792.43835"
+ id="text3120"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="61.552505"
+ y="792.43835"
+ id="tspan3124">MAC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="63.771255"
+ y="757.00531"
+ id="text3128"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3130"
+ x="63.771255"
+ y="757.00531">RLC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="63.052505"
+ y="721.57227"
+ id="text3132"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3134"
+ x="63.052505"
+ y="721.57227">LLC</tspan></text>
+ <rect
+ style="fill:#afe9af;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3114-4"
+ width="88.58268"
+ height="35.433071"
+ x="690.94482"
+ y="698.03149" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="718.56427"
+ y="721.57227"
+ id="text3132-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3134-0"
+ x="718.56427"
+ y="721.57227">LLC</tspan></text>
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-3-2-3"
+ width="88.58268"
+ height="35.433071"
+ x="690.94482"
+ y="839.76367" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="722.48712"
+ y="864.77032"
+ id="text3007-0-2-5"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3009-6-4-1"
+ x="722.48712"
+ y="864.77032">E1</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.92873204;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 124.01572,715.74801 566.92913,0"
+ id="path3611-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.44654906;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 124.01572,751.1811 318.89764,0"
+ id="path3611-7-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.44654906;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 124.01572,786.61415 318.89764,0"
+ id="path3611-7-9"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-0"
+ width="88.58268"
+ height="35.433071"
+ x="35.433044"
+ y="839.76373" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot5326"
+ style="fill:black;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;font-family:helvetica;font-style:normal;font-weight:normal;font-size:16px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+ id="flowRegion5328"><rect
+ id="rect5330"
+ width="190.52419"
+ height="596.32574"
+ x="67.508575"
+ y="90.011429" /></flowRegion><flowPara
+ id="flowPara5332"></flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:14.64712048px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="79.688622"
+ y="852.36664"
+ id="text5334"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5336"
+ x="79.688622"
+ y="852.36664">Physical</tspan><tspan
+ sodipodi:role="line"
+ x="79.688622"
+ y="870.67554"
+ id="tspan5338">Layer</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="307.05768"
+ y="829.32758"
+ id="text3011"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3013"
+ x="307.05768"
+ y="829.32758" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="301.38385"
+ y="793.89447"
+ id="text3015"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3017"
+ x="301.38385"
+ y="793.89447" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.52494001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9.14963955, 3.04987984;stroke-dashoffset:0"
+ d="m 159.44882,644.88187 0,265.74803"
+ id="path5460"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.52493989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9.14963951, 3.04987984;stroke-dashoffset:0"
+ d="m 407.48031,644.88187 0,265.74803"
+ id="path5460-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.52493989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9.14963951, 3.04987984;stroke-dashoffset:0"
+ d="m 655.51181,644.88187 0,265.74803"
+ id="path5460-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.52493989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9.14963951, 3.04987984;stroke-dashoffset:0"
+ d="m 903.54331,644.88187 0,265.74803"
+ id="path5460-2"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="145.78085"
+ y="928.34644"
+ id="text5494"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5496"
+ x="145.78085"
+ y="928.34644">Um</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="388.1561"
+ y="928.34644"
+ id="text5498"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5500"
+ x="388.1561"
+ y="928.34644">A-bis</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="644.21887"
+ y="928.34644"
+ id="text5502"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5504"
+ x="644.21887"
+ y="928.34644">Gb</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="892.50037"
+ y="928.34644"
+ id="text5506"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="892.50037"
+ y="928.34644"
+ id="tspan8176">Gc</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="60.822041"
+ y="928.34644"
+ id="text5510"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5512"
+ x="60.822041"
+ y="928.34644">MS</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="224.53098"
+ y="928.34644"
+ id="text5510-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5512-1"
+ x="224.53098"
+ y="928.34644">BTS+CCU</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="472.86713"
+ y="928.34644"
+ id="text5510-4-6-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5512-1-5-8"
+ x="472.86713"
+ y="928.34644">BSC+PCU</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="746.47583"
+ y="928.34644"
+ id="text5510-4-6-7-5"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5512-1-5-8-9"
+ x="746.47583"
+ y="928.34644">SGSN</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="53.149605"
+ y="627.16534"
+ id="text5725"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5727"
+ x="53.149605"
+ y="627.16534">GPRS Control Plane</tspan></text>
+ <rect
+ style="fill:#e9afaf;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2995-7-7-2"
+ width="88.58268"
+ height="35.433071"
+ x="690.94489"
+ y="804.33075" />
+ <rect
+ style="fill:#e9afaf;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2997-6-4-1"
+ width="88.58268"
+ height="35.433071"
+ x="690.94489"
+ y="768.89764" />
+ <text
+ xml:space="preserve"
+ style="font-size:14.59619617px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="734.90839"
+ y="818.10785"
+ id="text3011-5-4-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3013-0-3-2"
+ x="734.90839"
+ y="818.10785">Frame</tspan><tspan
+ id="tspan7094-0"
+ sodipodi:role="line"
+ x="734.90839"
+ y="836.35309">Relay</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="720.98328"
+ y="793.89447"
+ id="text3015-8-8-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3017-1-6-2"
+ x="720.98328"
+ y="793.89447">NS</tspan></text>
+ <rect
+ style="fill:#80e5ff;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-9"
+ width="88.58268"
+ height="35.433071"
+ x="690.94489"
+ y="733.4646" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="701.43738"
+ y="758.46143"
+ id="text3015-8-8-4-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3017-1-6-12-4"
+ x="701.43738"
+ y="758.46143">BSSGP</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot7277"
+ style="fill:black;fill-opacity:1;stroke:none;stroke-opacity:1;stroke-width:1pt;stroke-linejoin:miter;stroke-linecap:butt;font-family:helvetica;font-style:normal;font-weight:normal;font-size:16px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+ id="flowRegion7279"><rect
+ id="rect7281"
+ width="184.54546"
+ height="200"
+ x="17.272728"
+ y="98.639938" /></flowRegion><flowPara
+ id="flowPara7283"></flowPara></flowRoot> <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993"
+ width="88.58268"
+ height="35.433071"
+ x="283.46457"
+ y="839.76379" />
+ <rect
+ style="fill:#e9afaf;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2995"
+ width="88.58268"
+ height="35.433071"
+ x="283.46457"
+ y="804.33075" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="315.0069"
+ y="864.77039"
+ id="text3007"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3009"
+ x="315.0069"
+ y="864.77039">E1</tspan></text>
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-0-1"
+ width="88.58268"
+ height="35.433071"
+ x="194.88188"
+ y="839.76379" />
+ <text
+ xml:space="preserve"
+ style="font-size:14.64712048px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="239.13747"
+ y="852.3667"
+ id="text5334-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5336-7"
+ x="239.13747"
+ y="852.3667">Physical</tspan><tspan
+ sodipodi:role="line"
+ x="239.13747"
+ y="870.6756"
+ id="tspan5338-4">Layer</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:14.75296879px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="327.70187"
+ y="816.6698"
+ id="text7300"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7302"
+ x="327.70187"
+ y="816.6698">TRAU</tspan><tspan
+ sodipodi:role="line"
+ x="327.70187"
+ y="835.11102"
+ id="tspan7304">Framing</tspan></text>
+ <rect
+ style="fill:#afe9af;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3110-2"
+ width="88.58268"
+ height="35.433071"
+ x="442.91336"
+ y="768.89764" />
+ <rect
+ style="fill:#afe9af;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3112-7"
+ width="88.58268"
+ height="35.433071"
+ x="442.91336"
+ y="733.46454" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="469.03284"
+ y="792.43835"
+ id="text3120-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="469.03284"
+ y="792.43835"
+ id="tspan3124-8">MAC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="471.25159"
+ y="757.00531"
+ id="text3128-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3130-3"
+ x="471.25159"
+ y="757.00531">RLC</tspan></text>
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-3"
+ width="88.58268"
+ height="35.433071"
+ x="442.91339"
+ y="839.76367" />
+ <rect
+ style="fill:#e9afaf;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2995-7"
+ width="88.58268"
+ height="35.433071"
+ x="442.91336"
+ y="804.33069" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="474.45572"
+ y="864.77032"
+ id="text3007-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3009-6"
+ x="474.45572"
+ y="864.77032">E1</tspan></text>
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-3-2"
+ width="88.58268"
+ height="35.433071"
+ x="531.49603"
+ y="839.76373" />
+ <rect
+ style="fill:#e9afaf;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2995-7-7"
+ width="88.58268"
+ height="35.433071"
+ x="531.49603"
+ y="804.33069" />
+ <rect
+ style="fill:#e9afaf;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2997-6-4"
+ width="88.58268"
+ height="35.433071"
+ x="531.49603"
+ y="768.89764" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="563.03833"
+ y="864.77039"
+ id="text3007-0-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3009-6-4"
+ x="563.03833"
+ y="864.77039">E1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:14.59619617px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="575.45953"
+ y="818.10785"
+ id="text3011-5-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3013-0-3"
+ x="575.45953"
+ y="818.10785">Frame</tspan><tspan
+ id="tspan7094"
+ sodipodi:role="line"
+ x="575.45953"
+ y="836.35309">Relay</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="561.53442"
+ y="793.89447"
+ id="text3015-8-8"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3017-1-6"
+ x="561.53442"
+ y="793.89447">NS</tspan></text>
+ <rect
+ style="fill:#80e5ff;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303"
+ width="88.58268"
+ height="35.433071"
+ x="531.49603"
+ y="733.4646" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="541.98853"
+ y="758.46143"
+ id="text3015-8-8-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3017-1-6-12"
+ x="541.98853"
+ y="758.46143">BSSGP</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:14.75296879px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="487.15067"
+ y="816.66974"
+ id="text7300-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7302-5"
+ x="487.15067"
+ y="816.66974">TRAU</tspan><tspan
+ sodipodi:role="line"
+ x="487.15067"
+ y="835.11096"
+ id="tspan7304-6">Framing</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.92873204;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 124.01575,680.31494 566.92913,0"
+ id="path3611-7-7"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#80e5ff;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3116"
+ width="35.433071"
+ height="35.433071"
+ x="35.433079"
+ y="662.59845" />
+ <rect
+ style="fill:#80e5ff;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3118"
+ width="35.433071"
+ height="35.433071"
+ x="88.582672"
+ y="662.59845" />
+ <text
+ xml:space="preserve"
+ style="font-size:11.84639454px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="38.57954"
+ y="683.05646"
+ id="text3136"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3138"
+ x="38.57954"
+ y="683.05646">GMM</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="94.572655"
+ y="686.13916"
+ id="text3140"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3142"
+ x="94.572655"
+ y="686.13916">SM</tspan></text>
+ <rect
+ style="fill:#80e5ff;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3116-1"
+ width="35.433071"
+ height="35.433071"
+ x="690.94489"
+ y="662.59845" />
+ <rect
+ style="fill:#80e5ff;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3118-9"
+ width="35.433071"
+ height="35.433071"
+ x="744.09448"
+ y="662.59845" />
+ <text
+ xml:space="preserve"
+ style="font-size:11.84639454px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="694.09137"
+ y="683.05646"
+ id="text3136-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3138-1"
+ x="694.09137"
+ y="683.05646">GMM</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="750.08441"
+ y="686.13916"
+ id="text3140-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3142-1"
+ x="750.08441"
+ y="686.13916">SM</tspan></text>
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-3-2-3-2"
+ width="88.58268"
+ height="35.433071"
+ x="779.52753"
+ y="839.76379" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="811.06982"
+ y="864.77045"
+ id="text3007-0-2-5-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3009-6-4-1-6"
+ x="811.06982"
+ y="864.77045">E1</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480318999999995;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2"
+ width="88.58268"
+ height="35.433071"
+ x="779.52759"
+ y="733.46454" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="802.4751"
+ y="757.00531"
+ id="text3358"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360"
+ x="802.4751"
+ y="757.00531">SCCP</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-4"
+ width="88.58268"
+ height="35.433071"
+ x="779.52753"
+ y="698.03149" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="802.47504"
+ y="721.57227"
+ id="text3358-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-5"
+ x="802.47504"
+ y="721.57227">TCAP</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-9"
+ width="88.58268"
+ height="35.433071"
+ x="779.52753"
+ y="662.59839" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="802.47504"
+ y="686.13916"
+ id="text3358-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-2"
+ x="802.47504"
+ y="686.13916">MAP</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-8"
+ width="88.58268"
+ height="35.433071"
+ x="779.52753"
+ y="768.89764" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="802.47504"
+ y="792.43842"
+ id="text3358-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-6"
+ x="802.47504"
+ y="792.43842">MTP3</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-0"
+ width="88.58268"
+ height="35.433071"
+ x="779.52753"
+ y="804.33069" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="802.47504"
+ y="827.87146"
+ id="text3358-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-4"
+ x="802.47504"
+ y="827.87146">MTP2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="958.39465"
+ y="928.34644"
+ id="text5510-4-6-7-5-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5512-1-5-8-9-9"
+ x="958.39465"
+ y="928.34644">HLR</tspan></text>
+ <rect
+ style="fill:#c8b7b7;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2993-3-2-3-2-4"
+ width="88.58268"
+ height="35.433071"
+ x="938.97638"
+ y="839.76379" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="970.51868"
+ y="864.77045"
+ id="text3007-0-2-5-0-5"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3009-6-4-1-6-4"
+ x="970.51868"
+ y="864.77045">E1</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-6"
+ width="88.58268"
+ height="35.433071"
+ x="938.97644"
+ y="733.46454" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="961.92395"
+ y="757.00531"
+ id="text3358-63"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-9"
+ x="961.92395"
+ y="757.00531">SCCP</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-4-9"
+ width="88.58268"
+ height="35.433071"
+ x="938.97638"
+ y="698.03149" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="961.92389"
+ y="721.57227"
+ id="text3358-4-5"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-5-2"
+ x="961.92389"
+ y="721.57227">TCAP</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-9-1"
+ width="88.58268"
+ height="35.433071"
+ x="938.97638"
+ y="662.59839" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="961.92389"
+ y="686.13916"
+ id="text3358-1-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-2-0"
+ x="961.92389"
+ y="686.13916">MAP</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-8-9"
+ width="88.58268"
+ height="35.433071"
+ x="938.97638"
+ y="768.89764" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="961.92389"
+ y="792.43842"
+ id="text3358-9-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-6-1"
+ x="961.92389"
+ y="792.43842">MTP3</tspan></text>
+ <rect
+ style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:1.37480319;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3303-2-0-3"
+ width="88.58268"
+ height="35.433071"
+ x="938.97638"
+ y="804.33069" />
+ <text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:helvetica"
+ x="961.92389"
+ y="827.87146"
+ id="text3358-6-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360-4-5"
+ x="961.92389"
+ y="827.87146">MTP2</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.68190974;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 868.11024,680.31494 70.86614,0"
+ id="path3611-7-9-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.68190974;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 868.11024,715.74801 70.86614,0"
+ id="path3611-7-9-8-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.68190974;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="m 868.11024,751.18108 70.86614,0"
+ id="path3611-7-9-8-3-1"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/2018/phone_protocol-eh2018/gprs_pdp_ctx_act.png b/2018/phone_protocol-eh2018/gprs_pdp_ctx_act.png
new file mode 100644
index 0000000..0bde375
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gprs_pdp_ctx_act.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/gprs_pdp_ctx_act.svg b/2018/phone_protocol-eh2018/gprs_pdp_ctx_act.svg
new file mode 100644
index 0000000..fff4e90
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gprs_pdp_ctx_act.svg
@@ -0,0 +1,338 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1"
+ width="1800px" height="644px"
+ viewBox="0 0 1800 644"
+ xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges"
+ stroke-width="1" text-rendering="geometricPrecision">
+<polygon fill="white" points="139,7 159,7 159,16 139,16"/>
+<text x="150" y="16" textLength="18" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+MS
+</text>
+<polygon fill="white" points="408,7 490,7 490,16 408,16"/>
+<text x="450" y="16" textLength="80" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+BTS/BSC/PCU
+</text>
+<polygon fill="white" points="731,7 767,7 767,16 731,16"/>
+<text x="750" y="16" textLength="34" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+SGSN
+</text>
+<polygon fill="white" points="1021,7 1077,7 1077,16 1021,16"/>
+<text x="1050" y="16" textLength="55" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+GRX DNS
+</text>
+<polygon fill="white" points="1331,7 1367,7 1367,16 1331,16"/>
+<text x="1350" y="16" textLength="35" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+GGSN
+</text>
+<polygon fill="white" points="1628,7 1670,7 1670,16 1628,16"/>
+<text x="1650" y="16" textLength="41" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+Internet
+</text>
+<line x1="150" y1="22" x2="150" y2="50" stroke="black"/>
+<line x1="450" y1="22" x2="450" y2="50" stroke="black"/>
+<line x1="750" y1="22" x2="750" y2="50" stroke="black"/>
+<line x1="1050" y1="22" x2="1050" y2="50" stroke="black"/>
+<line x1="1350" y1="22" x2="1350" y2="50" stroke="black"/>
+<line x1="1650" y1="22" x2="1650" y2="50" stroke="black"/>
+<line x1="150" y1="33" x2="450" y2="33" stroke="black"/>
+<polygon fill="black" points="450,33 440,39 440,27"/>
+<polygon fill="white" points="258,23 341,23 341,32 258,32"/>
+<text x="259" y="32" textLength="81" font-family="Helvetica" font-size="12" fill="black">
+L1 RACH burst
+</text>
+<line x1="150" y1="50" x2="150" y2="78" stroke="black"/>
+<line x1="450" y1="50" x2="450" y2="78" stroke="black"/>
+<line x1="750" y1="50" x2="750" y2="78" stroke="black"/>
+<line x1="1050" y1="50" x2="1050" y2="78" stroke="black"/>
+<line x1="1350" y1="50" x2="1350" y2="78" stroke="black"/>
+<line x1="1650" y1="50" x2="1650" y2="78" stroke="black"/>
+<line x1="150" y1="61" x2="450" y2="61" stroke="black"/>
+<polygon fill="black" points="450,61 440,67 440,55"/>
+<polygon fill="black" points="150,61 160,67 160,55"/>
+<polygon fill="white" points="220,51 379,51 379,60 220,60"/>
+<text x="221" y="60" textLength="157" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC TBF establishment
+</text>
+<line x1="150" y1="78" x2="150" y2="106" stroke="black"/>
+<line x1="450" y1="78" x2="450" y2="106" stroke="black"/>
+<line x1="750" y1="78" x2="750" y2="106" stroke="black"/>
+<line x1="1050" y1="78" x2="1050" y2="106" stroke="black"/>
+<line x1="1350" y1="78" x2="1350" y2="106" stroke="black"/>
+<line x1="1650" y1="78" x2="1650" y2="106" stroke="black"/>
+<line x1="150" y1="89" x2="450" y2="89" stroke="black"/>
+<polygon fill="black" points="450,89 440,95 440,83"/>
+<polygon fill="white" points="167,79 431,79 431,88 167,88"/>
+<text x="168" y="88" textLength="262" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (SM PDP CONTEXT ACT REQ))
+</text>
+<polygon fill="white" points="242,90 356,90 356,99 242,99"/>
+<text x="243" y="99" textLength="112" font-family="Helvetica" font-size="12" fill="black">
+APN=internet.foo.bar
+</text>
+<line x1="150" y1="106" x2="150" y2="134" stroke="black"/>
+<line x1="450" y1="106" x2="450" y2="134" stroke="black"/>
+<line x1="750" y1="106" x2="750" y2="134" stroke="black"/>
+<line x1="1050" y1="106" x2="1050" y2="134" stroke="black"/>
+<line x1="1350" y1="106" x2="1350" y2="134" stroke="black"/>
+<line x1="1650" y1="106" x2="1650" y2="134" stroke="black"/>
+<line x1="450" y1="117" x2="750" y2="117" stroke="black"/>
+<polygon fill="black" points="750,117 740,123 740,111"/>
+<polygon fill="white" points="454,107 745,107 745,116 454,116"/>
+<text x="455" y="116" textLength="289" font-family="Helvetica" font-size="12" fill="black">
+BSSGP UL-UD (LLC (SM PDP CONTEXT ACT REQ))
+</text>
+<polygon fill="white" points="542,118 656,118 656,127 542,127"/>
+<text x="543" y="127" textLength="112" font-family="Helvetica" font-size="12" fill="black">
+APN=internet.foo.bar
+</text>
+<line x1="150" y1="134" x2="150" y2="162" stroke="black"/>
+<line x1="450" y1="134" x2="450" y2="162" stroke="black"/>
+<line x1="750" y1="134" x2="750" y2="162" stroke="black"/>
+<line x1="1050" y1="134" x2="1050" y2="162" stroke="black"/>
+<line x1="1350" y1="134" x2="1350" y2="162" stroke="black"/>
+<line x1="1650" y1="134" x2="1650" y2="162" stroke="black"/>
+<line x1="750" y1="145" x2="1050" y2="145" stroke="black"/>
+<polygon fill="black" points="1050,145 1040,151 1040,139"/>
+<polygon fill="white" points="817,135 981,135 981,144 817,144"/>
+<text x="818" y="144" textLength="162" font-family="Helvetica" font-size="12" fill="black">
+DNS Lookup A record for APN
+</text>
+<polygon fill="white" points="795,146 1004,146 1004,155 795,155"/>
+<text x="796" y="155" textLength="207" font-family="Helvetica" font-size="12" fill="black">
+internet.foo.bar.mncXXX.mccYYY.gprs
+</text>
+<line x1="150" y1="162" x2="150" y2="190" stroke="black"/>
+<line x1="450" y1="162" x2="450" y2="190" stroke="black"/>
+<line x1="750" y1="162" x2="750" y2="190" stroke="black"/>
+<line x1="1050" y1="162" x2="1050" y2="190" stroke="black"/>
+<line x1="1350" y1="162" x2="1350" y2="190" stroke="black"/>
+<line x1="1650" y1="162" x2="1650" y2="190" stroke="black"/>
+<line x1="1050" y1="173" x2="750" y2="173" stroke="black"/>
+<polygon fill="black" points="750,173 760,179 760,167"/>
+<polygon fill="white" points="810,163 989,163 989,172 810,172"/>
+<text x="811" y="172" textLength="177" font-family="Helvetica" font-size="12" fill="black">
+DNS Response A record for APN
+</text>
+<polygon fill="white" points="795,174 1004,174 1004,183 795,183"/>
+<text x="796" y="183" textLength="207" font-family="Helvetica" font-size="12" fill="black">
+internet.foo.bar.mncXXX.mccYYY.gprs
+</text>
+<line x1="150" y1="190" x2="150" y2="218" stroke="black"/>
+<line x1="450" y1="190" x2="450" y2="218" stroke="black"/>
+<line x1="750" y1="190" x2="750" y2="218" stroke="black"/>
+<line x1="1050" y1="190" x2="1050" y2="218" stroke="black"/>
+<line x1="1350" y1="190" x2="1350" y2="218" stroke="black"/>
+<line x1="1650" y1="190" x2="1650" y2="218" stroke="black"/>
+<polygon fill="white" points="608,190 892,190 892,212 608,212"/>
+<line x1="608" y1="190" x2="892" y2="190" stroke="black"/>
+<line x1="608" y1="212" x2="892" y2="212" stroke="black"/>
+<line x1="608" y1="190" x2="608" y2="212" stroke="black"/>
+<line x1="892" y1="190" x2="892" y2="212" stroke="black"/>
+<polygon fill="white" points="621,197 878,197 878,206 621,206"/>
+<text x="622" y="206" textLength="255" font-family="Helvetica" font-size="12" fill="black">
+SGSN now knows IP address of GGSN for APN
+</text>
+<line x1="150" y1="218" x2="150" y2="246" stroke="black"/>
+<line x1="450" y1="218" x2="450" y2="246" stroke="black"/>
+<line x1="750" y1="218" x2="750" y2="246" stroke="black"/>
+<line x1="1050" y1="218" x2="1050" y2="246" stroke="black"/>
+<line x1="1350" y1="218" x2="1350" y2="246" stroke="black"/>
+<line x1="1650" y1="218" x2="1650" y2="246" stroke="black"/>
+<line x1="750" y1="229" x2="1350" y2="229" stroke="black"/>
+<polygon fill="black" points="1350,229 1340,235 1340,223"/>
+<polygon fill="white" points="953,219 1146,219 1146,228 953,228"/>
+<text x="954" y="228" textLength="191" font-family="Helvetica" font-size="12" fill="black">
+GTP-C (PDP CONTEXT ACT REQ)
+</text>
+<line x1="150" y1="246" x2="150" y2="274" stroke="black"/>
+<line x1="450" y1="246" x2="450" y2="274" stroke="black"/>
+<line x1="750" y1="246" x2="750" y2="274" stroke="black"/>
+<line x1="1050" y1="246" x2="1050" y2="274" stroke="black"/>
+<line x1="1350" y1="246" x2="1350" y2="274" stroke="black"/>
+<line x1="1650" y1="246" x2="1650" y2="274" stroke="black"/>
+<polygon fill="white" points="1208,246 1492,246 1492,268 1208,268"/>
+<line x1="1208" y1="246" x2="1492" y2="246" stroke="black"/>
+<line x1="1208" y1="268" x2="1492" y2="268" stroke="black"/>
+<line x1="1208" y1="246" x2="1208" y2="268" stroke="black"/>
+<line x1="1492" y1="246" x2="1492" y2="268" stroke="black"/>
+<polygon fill="white" points="1290,253 1408,253 1408,262 1290,262"/>
+<text x="1291" y="262" textLength="116" font-family="Helvetica" font-size="12" fill="black">
+Allocate IPv4 address
+</text>
+<line x1="150" y1="274" x2="150" y2="302" stroke="black"/>
+<line x1="450" y1="274" x2="450" y2="302" stroke="black"/>
+<line x1="750" y1="274" x2="750" y2="302" stroke="black"/>
+<line x1="1050" y1="274" x2="1050" y2="302" stroke="black"/>
+<line x1="1350" y1="274" x2="1350" y2="302" stroke="black"/>
+<line x1="1650" y1="274" x2="1650" y2="302" stroke="black"/>
+<line x1="1350" y1="285" x2="750" y2="285" stroke="black"/>
+<polygon fill="black" points="750,285 760,291 760,279"/>
+<polygon fill="white" points="950,275 1149,275 1149,284 950,284"/>
+<text x="951" y="284" textLength="197" font-family="Helvetica" font-size="12" fill="black">
+GTP-C (PDP CONTEXT ACT RESP)
+</text>
+<polygon fill="white" points="1009,286 1089,286 1089,295 1009,295"/>
+<text x="1010" y="295" textLength="78" font-family="Helvetica" font-size="12" fill="black">
+IP addr + DNS
+</text>
+<line x1="150" y1="302" x2="150" y2="330" stroke="black"/>
+<line x1="450" y1="302" x2="450" y2="330" stroke="black"/>
+<line x1="750" y1="302" x2="750" y2="330" stroke="black"/>
+<line x1="1050" y1="302" x2="1050" y2="330" stroke="black"/>
+<line x1="1350" y1="302" x2="1350" y2="330" stroke="black"/>
+<line x1="1650" y1="302" x2="1650" y2="330" stroke="black"/>
+<line x1="750" y1="313" x2="450" y2="313" stroke="black"/>
+<polygon fill="black" points="450,313 460,319 460,307"/>
+<polygon fill="white" points="454,303 744,303 744,312 454,312"/>
+<text x="455" y="312" textLength="288" font-family="Helvetica" font-size="12" fill="black">
+BSSGP UL-UD (LLC (SM PDP CONTEXT ACT ACK))
+</text>
+<line x1="150" y1="330" x2="150" y2="358" stroke="black"/>
+<line x1="450" y1="330" x2="450" y2="358" stroke="black"/>
+<line x1="750" y1="330" x2="750" y2="358" stroke="black"/>
+<line x1="1050" y1="330" x2="1050" y2="358" stroke="black"/>
+<line x1="1350" y1="330" x2="1350" y2="358" stroke="black"/>
+<line x1="1650" y1="330" x2="1650" y2="358" stroke="black"/>
+<line x1="450" y1="341" x2="150" y2="341" stroke="black"/>
+<polygon fill="black" points="150,341 160,347 160,335"/>
+<polygon fill="white" points="168,331 431,331 431,340 168,340"/>
+<text x="169" y="340" textLength="261" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (SM PDP CONTEXT ACT ACK))
+</text>
+<line x1="150" y1="358" x2="150" y2="386" stroke="black"/>
+<line x1="450" y1="358" x2="450" y2="386" stroke="black"/>
+<line x1="750" y1="358" x2="750" y2="386" stroke="black"/>
+<line x1="1050" y1="358" x2="1050" y2="386" stroke="black"/>
+<line x1="1350" y1="358" x2="1350" y2="386" stroke="black"/>
+<line x1="1650" y1="358" x2="1650" y2="386" stroke="black"/>
+<polygon fill="white" points="8,358 292,358 292,380 8,380"/>
+<line x1="8" y1="358" x2="292" y2="358" stroke="black"/>
+<line x1="8" y1="380" x2="292" y2="380" stroke="black"/>
+<line x1="8" y1="358" x2="8" y2="380" stroke="black"/>
+<line x1="292" y1="358" x2="292" y2="380" stroke="black"/>
+<polygon fill="white" points="49,365 249,365 249,374 49,374"/>
+<text x="50" y="374" textLength="198" font-family="Helvetica" font-size="12" fill="black">
+MS now has IP addr + DNS server IP
+</text>
+<line x1="150" y1="386" x2="150" y2="403" stroke="black" stroke-dasharray="2,2"/>
+<line x1="450" y1="386" x2="450" y2="403" stroke="black" stroke-dasharray="2,2"/>
+<line x1="750" y1="386" x2="750" y2="403" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1050" y1="386" x2="1050" y2="403" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1350" y1="386" x2="1350" y2="403" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1650" y1="386" x2="1650" y2="403" stroke="black" stroke-dasharray="2,2"/>
+<line x1="150" y1="403" x2="150" y2="431" stroke="black"/>
+<line x1="450" y1="403" x2="450" y2="431" stroke="black"/>
+<line x1="750" y1="403" x2="750" y2="431" stroke="black"/>
+<line x1="1050" y1="403" x2="1050" y2="431" stroke="black"/>
+<line x1="1350" y1="403" x2="1350" y2="431" stroke="black"/>
+<line x1="1650" y1="403" x2="1650" y2="431" stroke="black"/>
+<line x1="150" y1="414" x2="450" y2="414" stroke="black"/>
+<polygon fill="black" points="450,414 440,420 440,408"/>
+<polygon fill="white" points="197,404 401,404 401,413 197,413"/>
+<text x="198" y="413" textLength="202" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (SNDCP (IP packet)))
+</text>
+<line x1="150" y1="431" x2="150" y2="459" stroke="black"/>
+<line x1="450" y1="431" x2="450" y2="459" stroke="black"/>
+<line x1="750" y1="431" x2="750" y2="459" stroke="black"/>
+<line x1="1050" y1="431" x2="1050" y2="459" stroke="black"/>
+<line x1="1350" y1="431" x2="1350" y2="459" stroke="black"/>
+<line x1="1650" y1="431" x2="1650" y2="459" stroke="black"/>
+<line x1="450" y1="442" x2="750" y2="442" stroke="black"/>
+<polygon fill="black" points="750,442 740,448 740,436"/>
+<polygon fill="white" points="484,432 715,432 715,441 484,441"/>
+<text x="485" y="441" textLength="229" font-family="Helvetica" font-size="12" fill="black">
+BSSGP UL-UD (LLC (SNDCP (IP packet)))
+</text>
+<line x1="150" y1="459" x2="150" y2="487" stroke="black"/>
+<line x1="450" y1="459" x2="450" y2="487" stroke="black"/>
+<line x1="750" y1="459" x2="750" y2="487" stroke="black"/>
+<line x1="1050" y1="459" x2="1050" y2="487" stroke="black"/>
+<line x1="1350" y1="459" x2="1350" y2="487" stroke="black"/>
+<line x1="1650" y1="459" x2="1650" y2="487" stroke="black"/>
+<line x1="750" y1="470" x2="1350" y2="470" stroke="black"/>
+<polygon fill="black" points="1350,470 1340,476 1340,464"/>
+<polygon fill="white" points="999,460 1100,460 1100,469 999,469"/>
+<text x="1000" y="469" textLength="99" font-family="Helvetica" font-size="12" fill="black">
+GTP-U (IP packet)
+</text>
+<line x1="150" y1="487" x2="150" y2="515" stroke="black"/>
+<line x1="450" y1="487" x2="450" y2="515" stroke="black"/>
+<line x1="750" y1="487" x2="750" y2="515" stroke="black"/>
+<line x1="1050" y1="487" x2="1050" y2="515" stroke="black"/>
+<line x1="1350" y1="487" x2="1350" y2="515" stroke="black"/>
+<line x1="1650" y1="487" x2="1650" y2="515" stroke="black"/>
+<line x1="1350" y1="498" x2="1650" y2="498" stroke="black"/>
+<polygon fill="black" points="1650,498 1640,504 1640,492"/>
+<polygon fill="white" points="1409,488 1589,488 1589,497 1409,497"/>
+<text x="1410" y="497" textLength="178" font-family="Helvetica" font-size="12" fill="black">
+IP packet (e.g. ICMP ECHO REQ
+</text>
+<line x1="150" y1="515" x2="150" y2="532" stroke="black" stroke-dasharray="2,2"/>
+<line x1="450" y1="515" x2="450" y2="532" stroke="black" stroke-dasharray="2,2"/>
+<line x1="750" y1="515" x2="750" y2="532" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1050" y1="515" x2="1050" y2="532" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1350" y1="515" x2="1350" y2="532" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1650" y1="515" x2="1650" y2="532" stroke="black" stroke-dasharray="2,2"/>
+<line x1="150" y1="532" x2="150" y2="560" stroke="black"/>
+<line x1="450" y1="532" x2="450" y2="560" stroke="black"/>
+<line x1="750" y1="532" x2="750" y2="560" stroke="black"/>
+<line x1="1050" y1="532" x2="1050" y2="560" stroke="black"/>
+<line x1="1350" y1="532" x2="1350" y2="560" stroke="black"/>
+<line x1="1650" y1="532" x2="1650" y2="560" stroke="black"/>
+<line x1="1650" y1="543" x2="1350" y2="543" stroke="black"/>
+<polygon fill="black" points="1350,543 1360,549 1360,537"/>
+<polygon fill="white" points="1406,533 1593,533 1593,542 1406,542"/>
+<text x="1407" y="542" textLength="185" font-family="Helvetica" font-size="12" fill="black">
+IP packet (e.g. ICMP ECHO RESP
+</text>
+<line x1="150" y1="560" x2="150" y2="588" stroke="black"/>
+<line x1="450" y1="560" x2="450" y2="588" stroke="black"/>
+<line x1="750" y1="560" x2="750" y2="588" stroke="black"/>
+<line x1="1050" y1="560" x2="1050" y2="588" stroke="black"/>
+<line x1="1350" y1="560" x2="1350" y2="588" stroke="black"/>
+<line x1="1650" y1="560" x2="1650" y2="588" stroke="black"/>
+<line x1="1350" y1="571" x2="750" y2="571" stroke="black"/>
+<polygon fill="black" points="750,571 760,577 760,565"/>
+<polygon fill="white" points="999,561 1100,561 1100,570 999,570"/>
+<text x="1000" y="570" textLength="99" font-family="Helvetica" font-size="12" fill="black">
+GTP-U (IP packet)
+</text>
+<line x1="150" y1="588" x2="150" y2="616" stroke="black"/>
+<line x1="450" y1="588" x2="450" y2="616" stroke="black"/>
+<line x1="750" y1="588" x2="750" y2="616" stroke="black"/>
+<line x1="1050" y1="588" x2="1050" y2="616" stroke="black"/>
+<line x1="1350" y1="588" x2="1350" y2="616" stroke="black"/>
+<line x1="1650" y1="588" x2="1650" y2="616" stroke="black"/>
+<line x1="750" y1="599" x2="450" y2="599" stroke="black"/>
+<polygon fill="black" points="450,599 460,605 460,593"/>
+<polygon fill="white" points="484,589 715,589 715,598 484,598"/>
+<text x="485" y="598" textLength="229" font-family="Helvetica" font-size="12" fill="black">
+BSSGP DL-UD (LLC (SNDCP (IP packet)))
+</text>
+<line x1="150" y1="616" x2="150" y2="644" stroke="black"/>
+<line x1="450" y1="616" x2="450" y2="644" stroke="black"/>
+<line x1="750" y1="616" x2="750" y2="644" stroke="black"/>
+<line x1="1050" y1="616" x2="1050" y2="644" stroke="black"/>
+<line x1="1350" y1="616" x2="1350" y2="644" stroke="black"/>
+<line x1="1650" y1="616" x2="1650" y2="644" stroke="black"/>
+<line x1="450" y1="627" x2="150" y2="627" stroke="black"/>
+<polygon fill="black" points="150,627 160,633 160,621"/>
+<polygon fill="white" points="197,617 401,617 401,626 197,626"/>
+<text x="198" y="626" textLength="202" font-family="Helvetica" font-size="12" fill="black">
+RLC/MAC (LLC (SNDCP (IP packet)))
+</text>
+<line x1="150" y1="638" x2="150" y2="644" stroke="black"/>
+<line x1="450" y1="638" x2="450" y2="644" stroke="black"/>
+<line x1="750" y1="638" x2="750" y2="644" stroke="black"/>
+<line x1="1050" y1="638" x2="1050" y2="644" stroke="black"/>
+<line x1="1350" y1="638" x2="1350" y2="644" stroke="black"/>
+<line x1="1650" y1="638" x2="1650" y2="644" stroke="black"/>
+</svg>
diff --git a/2018/phone_protocol-eh2018/gsm_cell_selection.png b/2018/phone_protocol-eh2018/gsm_cell_selection.png
new file mode 100644
index 0000000..011be53
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gsm_cell_selection.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/gsm_control_stack.gnumeric b/2018/phone_protocol-eh2018/gsm_control_stack.gnumeric
new file mode 100644
index 0000000..4a4cf60
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gsm_control_stack.gnumeric
Binary files differ
diff --git a/2018/phone_protocol-eh2018/gsm_control_stack.svg b/2018/phone_protocol-eh2018/gsm_control_stack.svg
new file mode 100644
index 0000000..85ffc8a
--- /dev/null
+++ b/2018/phone_protocol-eh2018/gsm_control_stack.svg
@@ -0,0 +1,2556 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="595.275591pt"
+ height="841.889764pt"
+ viewBox="0 0 595.275591 841.889764"
+ version="1.2"
+ id="svg738"
+ sodipodi:docname="gsm_control_stack.svg"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)">
+ <metadata
+ id="metadata742">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1080"
+ id="namedview740"
+ showgrid="false"
+ inkscape:snap-bbox="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-nodes="false"
+ inkscape:zoom="2.3407721"
+ inkscape:cx="398.41159"
+ inkscape:cy="880.66753"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg738">
+ <inkscape:grid
+ type="xygrid"
+ id="grid744" />
+ </sodipodi:namedview>
+ <defs
+ id="defs91">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker7194"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path7192"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ transform="scale(0.8) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path7110" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6864"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:collect="always">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6862" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker6794"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path6792"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6742"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ transform="scale(0.8) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6740" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleInL"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5390"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path5260"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path5257"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <g
+ id="g89">
+ <symbol
+ overflow="visible"
+ id="glyph0-0">
+ <path
+ style="stroke:none;"
+ d="M 0.546875 2 L 0.546875 -8 L 6.046875 -8 L 6.046875 2 Z M 1.171875 1 L 5.4375 1 L 5.4375 -7 L 1.171875 -7 Z M 1.171875 1 "
+ id="path2" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-1">
+ <path
+ style="stroke:none;"
+ d="M 1.078125 -8 L 2.703125 -8 L 4.75 -2.9375 L 6.796875 -8 L 8.421875 -8 L 8.421875 0 L 7.359375 0 L 7.359375 -7.09375 L 5.296875 -2 L 4.203125 -2 L 2.125 -7.09375 L 2.125 0 L 1.078125 0 Z M 1.078125 -8 "
+ id="path5" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-2">
+ <path
+ style="stroke:none;"
+ d="M 5.890625 -7 L 5.890625 -6 C 5.472656 -6.332031 5.082031 -6.582031 4.71875 -6.75 C 4.351562 -6.914062 4 -7 3.65625 -7 C 3.070312 -7 2.617188 -6.882812 2.296875 -6.65625 C 1.972656 -6.4375 1.8125 -6.117188 1.8125 -5.703125 C 1.8125 -5.359375 1.914062 -5.09375 2.125 -4.90625 C 2.34375 -4.726562 2.75 -4.585938 3.34375 -4.484375 L 4 -4.390625 C 4.8125 -4.242188 5.410156 -3.988281 5.796875 -3.625 C 6.179688 -3.269531 6.375 -2.789062 6.375 -2.1875 C 6.375 -1.46875 6.113281 -0.921875 5.59375 -0.546875 C 5.070312 -0.179688 4.304688 0 3.296875 0 C 2.910156 0 2.503906 -0.0820312 2.078125 -0.25 C 1.648438 -0.414062 1.207031 -0.664062 0.75 -1 L 0.75 -2 C 1.1875 -1.664062 1.617188 -1.414062 2.046875 -1.25 C 2.472656 -1.082031 2.890625 -1 3.296875 -1 C 3.910156 -1 4.382812 -1.109375 4.71875 -1.328125 C 5.0625 -1.554688 5.234375 -1.878906 5.234375 -2.296875 C 5.234375 -2.648438 5.113281 -2.925781 4.875 -3.125 C 4.632812 -3.332031 4.238281 -3.488281 3.6875 -3.59375 L 3.03125 -3.6875 C 2.21875 -3.84375 1.628906 -4.082031 1.265625 -4.40625 C 0.898438 -4.738281 0.71875 -5.203125 0.71875 -5.796875 C 0.71875 -6.484375 0.96875 -7.019531 1.46875 -7.40625 C 1.96875 -7.800781 2.65625 -8 3.53125 -8 C 3.914062 -8 4.300781 -7.914062 4.6875 -7.75 C 5.082031 -7.582031 5.484375 -7.332031 5.890625 -7 Z M 5.890625 -7 "
+ id="path8" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-3">
+ <path
+ style="stroke:none;"
+ d="M 7.078125 -7 L 7.078125 -6 C 6.710938 -6.332031 6.320312 -6.582031 5.90625 -6.75 C 5.5 -6.914062 5.0625 -7 4.59375 -7 C 3.675781 -7 2.972656 -6.738281 2.484375 -6.21875 C 2.003906 -5.707031 1.765625 -4.96875 1.765625 -4 C 1.765625 -3.03125 2.003906 -2.285156 2.484375 -1.765625 C 2.972656 -1.253906 3.675781 -1 4.59375 -1 C 5.0625 -1 5.5 -1.082031 5.90625 -1.25 C 6.320312 -1.414062 6.710938 -1.664062 7.078125 -2 L 7.078125 -1 C 6.703125 -0.664062 6.300781 -0.414062 5.875 -0.25 C 5.445312 -0.0820312 5 0 4.53125 0 C 3.320312 0 2.367188 -0.351562 1.671875 -1.0625 C 0.972656 -1.78125 0.625 -2.757812 0.625 -4 C 0.625 -5.238281 0.972656 -6.210938 1.671875 -6.921875 C 2.367188 -7.640625 3.320312 -8 4.53125 -8 C 5.007812 -8 5.457031 -7.914062 5.875 -7.75 C 6.300781 -7.582031 6.703125 -7.332031 7.078125 -7 Z M 7.078125 -7 "
+ id="path11" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-4">
+ <path
+ style="stroke:none;"
+ d="M 2.796875 -8 L 3.703125 -8 L 0.90625 1 L 0 1 Z M 2.796875 -8 "
+ id="path14" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-5">
+ <path
+ style="stroke:none;"
+ d="M 3.140625 0 L 0.09375 -8 L 1.21875 -8 L 3.765625 -1.265625 L 6.3125 -8 L 7.4375 -8 L 4.375 0 Z M 3.140625 0 "
+ id="path17" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-6">
+ <path
+ style="stroke:none;"
+ d="M 1.078125 -8 L 2.171875 -8 L 2.171875 -1 L 6.0625 -1 L 6.0625 0 L 1.078125 0 Z M 1.078125 -8 "
+ id="path20" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-7">
+ <path
+ style="stroke:none;"
+ d="M 4.875 -3.421875 C 5.101562 -3.347656 5.328125 -3.1875 5.546875 -2.9375 C 5.773438 -2.695312 6 -2.363281 6.21875 -1.9375 L 7.328125 0 L 6.15625 0 L 5.140625 -1.828125 C 4.867188 -2.296875 4.609375 -2.609375 4.359375 -2.765625 C 4.109375 -2.921875 3.769531 -3 3.34375 -3 L 2.171875 -3 L 2.171875 0 L 1.078125 0 L 1.078125 -8 L 3.53125 -8 C 4.445312 -8 5.128906 -7.789062 5.578125 -7.375 C 6.023438 -6.96875 6.25 -6.347656 6.25 -5.515625 C 6.25 -4.972656 6.128906 -4.519531 5.890625 -4.15625 C 5.660156 -3.800781 5.320312 -3.554688 4.875 -3.421875 Z M 2.171875 -7 L 2.171875 -4 L 3.53125 -4 C 4.050781 -4 4.441406 -4.125 4.703125 -4.375 C 4.972656 -4.632812 5.109375 -5.007812 5.109375 -5.5 C 5.109375 -6 4.972656 -6.375 4.703125 -6.625 C 4.441406 -6.875 4.050781 -7 3.53125 -7 Z M 2.171875 -7 "
+ id="path23" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-8">
+ <path
+ style="stroke:none;"
+ d="M 2.171875 -4 L 2.171875 -1 L 3.90625 -1 C 4.488281 -1 4.921875 -1.117188 5.203125 -1.359375 C 5.484375 -1.609375 5.625 -1.988281 5.625 -2.5 C 5.625 -3.007812 5.484375 -3.382812 5.203125 -3.625 C 4.921875 -3.875 4.488281 -4 3.90625 -4 Z M 2.171875 -7 L 2.171875 -5 L 3.765625 -5 C 4.296875 -5 4.691406 -5.082031 4.953125 -5.25 C 5.210938 -5.414062 5.34375 -5.664062 5.34375 -6 C 5.34375 -6.332031 5.210938 -6.582031 4.953125 -6.75 C 4.691406 -6.914062 4.296875 -7 3.765625 -7 Z M 1.078125 -8 L 3.84375 -8 C 4.675781 -8 5.316406 -7.835938 5.765625 -7.515625 C 6.210938 -7.203125 6.4375 -6.75 6.4375 -6.15625 C 6.4375 -5.695312 6.320312 -5.332031 6.09375 -5.0625 C 5.863281 -4.789062 5.523438 -4.625 5.078125 -4.5625 C 5.609375 -4.4375 6.019531 -4.179688 6.3125 -3.796875 C 6.613281 -3.421875 6.765625 -2.945312 6.765625 -2.375 C 6.765625 -1.613281 6.519531 -1.023438 6.03125 -0.609375 C 5.539062 -0.203125 4.847656 0 3.953125 0 L 1.078125 0 Z M 1.078125 -8 "
+ id="path26" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-9">
+ <path
+ style="stroke:none;"
+ d="M -0.03125 -8 L 6.75 -8 L 6.75 -7 L 3.90625 -7 L 3.90625 0 L 2.8125 0 L 2.8125 -7 L -0.03125 -7 Z M -0.03125 -8 "
+ id="path29" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph0-10">
+ <path
+ style="stroke:none;"
+ d="M 1.078125 -8 L 2.171875 -8 L 2.171875 -5 L 6.109375 -5 L 6.109375 -8 L 7.1875 -8 L 7.1875 0 L 6.109375 0 L 6.109375 -4 L 2.171875 -4 L 2.171875 0 L 1.078125 0 Z M 1.078125 -8 "
+ id="path32" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-0">
+ <path
+ style="stroke:none;"
+ d="M 0.40625 1 L 0.40625 -6 L 4.40625 -6 L 4.40625 1 Z M 0.84375 0 L 3.953125 0 L 3.953125 -5 L 0.84375 -5 Z M 0.84375 0 "
+ id="path35" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-1">
+ <path
+ style="stroke:none;"
+ d="M 0.78125 -6 L 1.96875 -6 L 3.453125 -1.78125 L 4.953125 -6 L 6.125 -6 L 6.125 0 L 5.359375 0 L 5.359375 -5.25 L 3.84375 -1 L 3.0625 -1 L 1.546875 -5.25 L 1.546875 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path38" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-2">
+ <path
+ style="stroke:none;"
+ d="M 2.734375 -5.15625 L 1.671875 -2 L 3.8125 -2 Z M 2.296875 -6 L 3.1875 -6 L 5.40625 0 L 4.59375 0 L 4.0625 -1 L 1.421875 -1 L 0.890625 0 L 0.0625 0 Z M 2.296875 -6 "
+ id="path41" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-3">
+ <path
+ style="stroke:none;"
+ d="M 1.578125 -5 L 1.578125 -4 L 2.5625 -4 C 2.925781 -4 3.207031 -4.039062 3.40625 -4.125 C 3.613281 -4.21875 3.71875 -4.34375 3.71875 -4.5 C 3.71875 -4.65625 3.613281 -4.773438 3.40625 -4.859375 C 3.207031 -4.953125 2.925781 -5 2.5625 -5 Z M 0.78125 -6 L 2.5625 -6 C 3.21875 -6 3.710938 -5.867188 4.046875 -5.609375 C 4.378906 -5.359375 4.546875 -4.988281 4.546875 -4.5 C 4.546875 -4.007812 4.378906 -3.632812 4.046875 -3.375 C 3.710938 -3.125 3.21875 -3 2.5625 -3 L 1.578125 -3 L 1.578125 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path44" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-4">
+ <path
+ style="stroke:none;"
+ d="M 5.15625 -5 L 5.15625 -4 C 4.882812 -4.332031 4.597656 -4.582031 4.296875 -4.75 C 4.003906 -4.914062 3.6875 -5 3.34375 -5 C 2.675781 -5 2.164062 -4.828125 1.8125 -4.484375 C 1.457031 -4.140625 1.28125 -3.644531 1.28125 -3 C 1.28125 -2.351562 1.457031 -1.859375 1.8125 -1.515625 C 2.164062 -1.171875 2.675781 -1 3.34375 -1 C 3.6875 -1 4.003906 -1.082031 4.296875 -1.25 C 4.597656 -1.414062 4.882812 -1.664062 5.15625 -2 L 5.15625 -1 C 4.882812 -0.664062 4.59375 -0.414062 4.28125 -0.25 C 3.96875 -0.0820312 3.640625 0 3.296875 0 C 2.421875 0 1.726562 -0.265625 1.21875 -0.796875 C 0.707031 -1.335938 0.453125 -2.070312 0.453125 -3 C 0.453125 -3.925781 0.707031 -4.65625 1.21875 -5.1875 C 1.726562 -5.726562 2.421875 -6 3.296875 -6 C 3.648438 -6 3.976562 -5.914062 4.28125 -5.75 C 4.59375 -5.582031 4.882812 -5.332031 5.15625 -5 Z M 5.15625 -5 "
+ id="path47" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-5">
+ <path
+ style="stroke:none;"
+ d="M -0.03125 -6 L 4.90625 -6 L 4.90625 -5 L 2.84375 -5 L 2.84375 0 L 2.046875 0 L 2.046875 -5 L -0.03125 -5 Z M -0.03125 -6 "
+ id="path50" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-6">
+ <path
+ style="stroke:none;"
+ d="M 3.546875 -3.421875 C 3.710938 -3.347656 3.875 -3.1875 4.03125 -2.9375 C 4.195312 -2.695312 4.363281 -2.363281 4.53125 -1.9375 L 5.328125 0 L 4.484375 0 L 3.734375 -1.828125 C 3.546875 -2.296875 3.359375 -2.609375 3.171875 -2.765625 C 2.992188 -2.921875 2.75 -3 2.4375 -3 L 1.578125 -3 L 1.578125 0 L 0.78125 0 L 0.78125 -6 L 2.5625 -6 C 3.226562 -6 3.722656 -5.878906 4.046875 -5.640625 C 4.378906 -5.410156 4.546875 -5.066406 4.546875 -4.609375 C 4.546875 -4.296875 4.457031 -4.035156 4.28125 -3.828125 C 4.113281 -3.628906 3.867188 -3.492188 3.546875 -3.421875 Z M 1.578125 -5 L 1.578125 -4 L 2.5625 -4 C 2.945312 -4 3.234375 -4.039062 3.421875 -4.125 C 3.617188 -4.207031 3.71875 -4.332031 3.71875 -4.5 C 3.71875 -4.664062 3.617188 -4.789062 3.421875 -4.875 C 3.234375 -4.957031 2.945312 -5 2.5625 -5 Z M 1.578125 -5 "
+ id="path53" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-7">
+ <path
+ style="stroke:none;"
+ d="M 1.578125 -5 L 1.578125 -1 L 2.53125 -1 C 3.332031 -1 3.921875 -1.160156 4.296875 -1.484375 C 4.671875 -1.804688 4.859375 -2.3125 4.859375 -3 C 4.859375 -3.6875 4.671875 -4.191406 4.296875 -4.515625 C 3.921875 -4.835938 3.332031 -5 2.53125 -5 Z M 0.78125 -6 L 2.40625 -6 C 3.539062 -6 4.367188 -5.753906 4.890625 -5.265625 C 5.421875 -4.785156 5.6875 -4.03125 5.6875 -3 C 5.6875 -1.96875 5.421875 -1.207031 4.890625 -0.71875 C 4.359375 -0.238281 3.53125 0 2.40625 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path56" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-8">
+ <path
+ style="stroke:none;"
+ d="M 4.28125 -6 L 4.28125 -5 C 3.976562 -5 3.691406 -5 3.421875 -5 C 3.160156 -5 2.910156 -5 2.671875 -5 C 2.242188 -5 1.910156 -4.929688 1.671875 -4.796875 C 1.441406 -4.660156 1.328125 -4.46875 1.328125 -4.21875 C 1.328125 -4.007812 1.40625 -3.847656 1.5625 -3.734375 C 1.71875 -3.628906 2.007812 -3.546875 2.4375 -3.484375 L 2.90625 -3.390625 C 3.5 -3.273438 3.9375 -3.078125 4.21875 -2.796875 C 4.5 -2.523438 4.640625 -2.15625 4.640625 -1.6875 C 4.640625 -1.132812 4.445312 -0.710938 4.0625 -0.421875 C 3.6875 -0.140625 3.132812 0 2.40625 0 C 2.125 0 1.828125 0 1.515625 0 C 1.203125 0 0.878906 0 0.546875 0 L 0.546875 -1 C 0.867188 -1 1.179688 -1 1.484375 -1 C 1.796875 -1 2.101562 -1 2.40625 -1 C 2.851562 -1 3.195312 -1.066406 3.4375 -1.203125 C 3.6875 -1.335938 3.8125 -1.535156 3.8125 -1.796875 C 3.8125 -2.015625 3.722656 -2.1875 3.546875 -2.3125 C 3.367188 -2.4375 3.082031 -2.53125 2.6875 -2.59375 L 2.203125 -2.6875 C 1.617188 -2.800781 1.191406 -2.984375 0.921875 -3.234375 C 0.660156 -3.492188 0.53125 -3.851562 0.53125 -4.3125 C 0.53125 -4.832031 0.710938 -5.242188 1.078125 -5.546875 C 1.441406 -5.847656 1.941406 -6 2.578125 -6 C 2.847656 -6 3.125 -6 3.40625 -6 C 3.695312 -6 3.988281 -6 4.28125 -6 Z M 4.28125 -6 "
+ id="path59" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-9">
+ <path
+ style="stroke:none;"
+ d="M 0.78125 -6 L 1.578125 -6 L 1.578125 -1 L 4.421875 -1 L 4.421875 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path62" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-10">
+ <path
+ style="stroke:none;"
+ d="M 4.15625 -2.875 C 4.332031 -3.257812 4.546875 -3.539062 4.796875 -3.71875 C 5.046875 -3.90625 5.34375 -4 5.6875 -4 C 6.144531 -4 6.492188 -3.835938 6.734375 -3.515625 C 6.984375 -3.191406 7.109375 -2.734375 7.109375 -2.140625 L 7.109375 0 L 6.390625 0 L 6.390625 -2.125 C 6.390625 -2.414062 6.316406 -2.632812 6.171875 -2.78125 C 6.023438 -2.925781 5.796875 -3 5.484375 -3 C 5.117188 -3 4.828125 -2.910156 4.609375 -2.734375 C 4.390625 -2.554688 4.28125 -2.3125 4.28125 -2 L 4.28125 0 L 3.5625 0 L 3.5625 -2.125 C 3.5625 -2.425781 3.488281 -2.644531 3.34375 -2.78125 C 3.195312 -2.925781 2.96875 -3 2.65625 -3 C 2.289062 -3 2 -2.90625 1.78125 -2.71875 C 1.5625 -2.539062 1.453125 -2.300781 1.453125 -2 L 1.453125 0 L 0.734375 0 L 0.734375 -4 L 1.453125 -4 L 1.453125 -3 C 1.617188 -3.34375 1.816406 -3.59375 2.046875 -3.75 C 2.273438 -3.914062 2.546875 -4 2.859375 -4 C 3.171875 -4 3.4375 -3.898438 3.65625 -3.703125 C 3.882812 -3.515625 4.050781 -3.238281 4.15625 -2.875 Z M 4.15625 -2.875 "
+ id="path65" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-11">
+ <path
+ style="stroke:none;"
+ d="M 1.578125 -2 L 1.578125 -1 L 2.84375 -1 C 3.269531 -1 3.582031 -1.039062 3.78125 -1.125 C 3.988281 -1.207031 4.09375 -1.332031 4.09375 -1.5 C 4.09375 -1.664062 3.988281 -1.789062 3.78125 -1.875 C 3.582031 -1.957031 3.269531 -2 2.84375 -2 Z M 1.578125 -5 L 1.578125 -3 L 2.75 -3 C 3.132812 -3 3.421875 -3.082031 3.609375 -3.25 C 3.796875 -3.414062 3.890625 -3.664062 3.890625 -4 C 3.890625 -4.332031 3.796875 -4.582031 3.609375 -4.75 C 3.421875 -4.914062 3.132812 -5 2.75 -5 Z M 0.78125 -6 L 2.796875 -6 C 3.398438 -6 3.863281 -5.835938 4.1875 -5.515625 C 4.519531 -5.203125 4.6875 -4.75 4.6875 -4.15625 C 4.6875 -3.695312 4.601562 -3.332031 4.4375 -3.0625 C 4.269531 -2.789062 4.023438 -2.625 3.703125 -2.5625 C 4.085938 -2.488281 4.382812 -2.34375 4.59375 -2.125 C 4.8125 -1.914062 4.921875 -1.648438 4.921875 -1.328125 C 4.921875 -0.898438 4.742188 -0.570312 4.390625 -0.34375 C 4.035156 -0.113281 3.53125 0 2.875 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path68" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-12">
+ <path
+ style="stroke:none;"
+ d="M 3.25 -2.546875 C 3.625 -2.484375 3.914062 -2.351562 4.125 -2.15625 C 4.34375 -1.957031 4.453125 -1.707031 4.453125 -1.40625 C 4.453125 -0.957031 4.253906 -0.609375 3.859375 -0.359375 C 3.460938 -0.117188 2.898438 0 2.171875 0 C 1.921875 0 1.664062 0 1.40625 0 C 1.15625 0 0.890625 0 0.609375 0 L 0.609375 -1 C 0.828125 -1 1.066406 -1 1.328125 -1 C 1.585938 -1 1.863281 -1 2.15625 -1 C 2.644531 -1 3.019531 -1.039062 3.28125 -1.125 C 3.539062 -1.21875 3.671875 -1.347656 3.671875 -1.515625 C 3.671875 -1.660156 3.546875 -1.773438 3.296875 -1.859375 C 3.054688 -1.953125 2.722656 -2 2.296875 -2 L 1.625 -2 L 1.625 -3 L 2.328125 -3 C 2.710938 -3 3.007812 -3.082031 3.21875 -3.25 C 3.425781 -3.414062 3.53125 -3.660156 3.53125 -3.984375 C 3.53125 -4.304688 3.421875 -4.554688 3.203125 -4.734375 C 2.992188 -4.910156 2.691406 -5 2.296875 -5 C 2.078125 -5 1.84375 -5 1.59375 -5 C 1.351562 -5 1.082031 -5 0.78125 -5 L 0.78125 -6 C 1.082031 -6 1.363281 -6 1.625 -6 C 1.882812 -6 2.128906 -6 2.359375 -6 C 2.960938 -6 3.4375 -5.828125 3.78125 -5.484375 C 4.132812 -5.148438 4.3125 -4.695312 4.3125 -4.125 C 4.3125 -3.726562 4.21875 -3.390625 4.03125 -3.109375 C 3.851562 -2.835938 3.59375 -2.648438 3.25 -2.546875 Z M 3.25 -2.546875 "
+ id="path71" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-13">
+ <path
+ style="stroke:none;"
+ d="M 1.53125 -1 L 4.296875 -1 L 4.296875 0 L 0.59375 0 L 0.59375 -1 C 0.894531 -1.269531 1.300781 -1.628906 1.8125 -2.078125 C 2.332031 -2.535156 2.660156 -2.828125 2.796875 -2.953125 C 3.046875 -3.203125 3.21875 -3.410156 3.3125 -3.578125 C 3.414062 -3.753906 3.46875 -3.925781 3.46875 -4.09375 C 3.46875 -4.351562 3.359375 -4.566406 3.140625 -4.734375 C 2.921875 -4.910156 2.640625 -5 2.296875 -5 C 2.046875 -5 1.78125 -5 1.5 -5 C 1.226562 -5 0.9375 -5 0.625 -5 L 0.625 -6 C 0.945312 -6 1.242188 -6 1.515625 -6 C 1.796875 -6 2.050781 -6 2.28125 -6 C 2.882812 -6 3.363281 -5.851562 3.71875 -5.5625 C 4.082031 -5.28125 4.265625 -4.898438 4.265625 -4.421875 C 4.265625 -4.191406 4.21875 -3.972656 4.125 -3.765625 C 4.039062 -3.566406 3.878906 -3.332031 3.640625 -3.0625 C 3.578125 -2.988281 3.367188 -2.78125 3.015625 -2.4375 C 2.660156 -2.09375 2.164062 -1.613281 1.53125 -1 Z M 1.53125 -1 "
+ id="path74" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-14">
+ <path
+ style="stroke:none;"
+ d="M 0.78125 -6 L 1.578125 -6 L 1.578125 -3 L 4.4375 -3 L 4.4375 -6 L 5.234375 -6 L 5.234375 0 L 4.4375 0 L 4.4375 -2 L 1.578125 -2 L 1.578125 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path77" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-15">
+ <path
+ style="stroke:none;"
+ d="M -0.015625 -6 L 0.828125 -6 L 2.453125 -3.53125 L 4.0625 -6 L 4.90625 -6 L 2.84375 -2.859375 L 2.84375 0 L 2.046875 0 L 2.046875 -2.859375 Z M -0.015625 -6 "
+ id="path80" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-16">
+ <path
+ style="stroke:none;"
+ d="M 0.78125 -6 L 4.46875 -6 L 4.46875 -5 L 1.578125 -5 L 1.578125 -3 L 4.359375 -3 L 4.359375 -2 L 1.578125 -2 L 1.578125 -1 L 4.546875 -1 L 4.546875 0 L 0.78125 0 Z M 0.78125 -6 "
+ id="path83" />
+ </symbol>
+ <symbol
+ overflow="visible"
+ id="glyph1-17">
+ <path
+ style="stroke:none;"
+ d="M 1 -1 L 2.28125 -1 L 2.28125 -5 L 0.875 -5 L 0.875 -6 L 3.0625 -6 L 3.0625 -1 L 4.359375 -1 L 4.359375 0 L 1 0 Z M 1 -1 "
+ id="path86" />
+ </symbol>
+ </g>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5257-6"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5260-5"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-0"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-2" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-7"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-9"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-22" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-8"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-9"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-3"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-6" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-2"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-31"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-9" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-78"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-5"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-36"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-3" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-0"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-6-1"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-3-5" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-2-5"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-0-4"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-6-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-3-56" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-2-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-0-3"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-6-5"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-3-2" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-2-54"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-0-7"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-6-4"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-3-3" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-2-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-0-78"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7112-5-2-6-1-6-8"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7110-6-7-0-8-3-8" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7194-2-0-6-7-2-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7192-9-9-2-9-0-31"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ </defs>
+ <g
+ id="surface8958">
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g107">
+ <use
+ xlink:href="#glyph0-1"
+ x="386.449219"
+ y="131.126111"
+ id="use93" />
+ <use
+ xlink:href="#glyph0-2"
+ x="395.818262"
+ y="131.126111"
+ id="use95" />
+ <use
+ xlink:href="#glyph0-3"
+ x="402.845045"
+ y="131.126111"
+ id="use97" />
+ <use
+ xlink:href="#glyph0-4"
+ x="410.457392"
+ y="131.126111"
+ id="use99" />
+ <use
+ xlink:href="#glyph0-5"
+ x="413.970784"
+ y="131.126111"
+ id="use101" />
+ <use
+ xlink:href="#glyph0-6"
+ x="421.583132"
+ y="131.126111"
+ id="use103" />
+ <use
+ xlink:href="#glyph0-7"
+ x="428.024349"
+ y="131.126111"
+ id="use105" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g115">
+ <use
+ xlink:href="#glyph0-8"
+ x="287.488281"
+ y="131.126111"
+ id="use109" />
+ <use
+ xlink:href="#glyph0-2"
+ x="295.100629"
+ y="131.126111"
+ id="use111" />
+ <use
+ xlink:href="#glyph0-3"
+ x="302.127412"
+ y="131.126111"
+ id="use113" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g123">
+ <use
+ xlink:href="#glyph0-8"
+ x="175.351562"
+ y="131.126111"
+ id="use117" />
+ <use
+ xlink:href="#glyph0-9"
+ x="182.96391"
+ y="131.126111"
+ id="use119" />
+ <use
+ xlink:href="#glyph0-2"
+ x="189.990693"
+ y="131.126111"
+ id="use121" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g129">
+ <use
+ xlink:href="#glyph0-1"
+ x="84.296875"
+ y="131.126111"
+ id="use125" />
+ <use
+ xlink:href="#glyph0-2"
+ x="93.665918"
+ y="131.126111"
+ id="use127" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g137">
+ <use
+ xlink:href="#glyph0-10"
+ x="493.605469"
+ y="131.126111"
+ id="use131" />
+ <use
+ xlink:href="#glyph0-6"
+ x="501.803382"
+ y="131.126111"
+ id="use133" />
+ <use
+ xlink:href="#glyph0-7"
+ x="508.244599"
+ y="131.126111"
+ id="use135" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g145">
+ <use
+ xlink:href="#glyph1-1"
+ x="496.535156"
+ y="168.502973"
+ id="use139" />
+ <use
+ xlink:href="#glyph1-2"
+ x="502.976374"
+ y="168.502973"
+ id="use141" />
+ <use
+ xlink:href="#glyph1-3"
+ x="508.246461"
+ y="168.502973"
+ id="use143" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g153">
+ <use
+ xlink:href="#glyph1-1"
+ x="421.582031"
+ y="168.502973"
+ id="use147" />
+ <use
+ xlink:href="#glyph1-2"
+ x="428.023249"
+ y="168.502973"
+ id="use149" />
+ <use
+ xlink:href="#glyph1-3"
+ x="433.293336"
+ y="168.502973"
+ id="use151" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g159">
+ <use
+ xlink:href="#glyph1-4"
+ x="87.222656"
+ y="163.331098"
+ id="use155" />
+ <use
+ xlink:href="#glyph1-4"
+ x="92.492743"
+ y="163.331098"
+ id="use157" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g165">
+ <use
+ xlink:href="#glyph1-4"
+ x="387.035156"
+ y="163.331098"
+ id="use161" />
+ <use
+ xlink:href="#glyph1-4"
+ x="392.305243"
+ y="163.331098"
+ id="use163" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.001272 45.498909 L 51.002405 45.498909 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path167" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 45.999227 L 2.501589 58.502171 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path169" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 45.999227 L 50.502088 58.502171 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path171" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 45.498909 L 435.001387 45.498909 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path173" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 45.999227 L 386.500571 58.502171 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path175" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 45.498909 L 483.001885 45.498909 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path177" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 45.999227 L 434.501069 58.502171 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path179" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 45.999227 L 482.501567 59.497803 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path181" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 45.498909 L 578.997878 45.498909 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path183" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 45.999227 L 530.502065 59.497803 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path185" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 45.999227 L 578.49756 59.497803 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path187" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g193">
+ <use
+ xlink:href="#glyph1-1"
+ x="86.054688"
+ y="173.87016"
+ id="use189" />
+ <use
+ xlink:href="#glyph1-1"
+ x="92.495905"
+ y="173.87016"
+ id="use191" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g199">
+ <use
+ xlink:href="#glyph1-1"
+ x="385.863281"
+ y="173.87016"
+ id="use195" />
+ <use
+ xlink:href="#glyph1-1"
+ x="392.304499"
+ y="173.87016"
+ id="use197" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.001272 59.002488 L 51.002405 59.002488 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path201" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 59.497803 L 2.501589 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path203" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 59.497803 L 50.502088 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path205" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 59.002488 L 435.001387 59.002488 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path207" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 59.497803 L 386.500571 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path209" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 59.497803 L 434.501069 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path211" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 58.502171 L 482.501567 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path213" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 58.502171 L 530.502065 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path215" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 58.502171 L 578.49756 72.000747 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path217" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g227">
+ <use
+ xlink:href="#glyph1-5"
+ x="495.070313"
+ y="189.585004"
+ id="use219" />
+ <use
+ xlink:href="#glyph1-4"
+ x="499.169269"
+ y="189.585004"
+ id="use221" />
+ <use
+ xlink:href="#glyph1-2"
+ x="504.439356"
+ y="189.585004"
+ id="use223" />
+ <use
+ xlink:href="#glyph1-3"
+ x="509.709443"
+ y="189.585004"
+ id="use225" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g237">
+ <use
+ xlink:href="#glyph1-5"
+ x="420.117188"
+ y="189.585004"
+ id="use229" />
+ <use
+ xlink:href="#glyph1-4"
+ x="424.216144"
+ y="189.585004"
+ id="use231" />
+ <use
+ xlink:href="#glyph1-2"
+ x="429.486231"
+ y="189.585004"
+ id="use233" />
+ <use
+ xlink:href="#glyph1-3"
+ x="434.756318"
+ y="189.585004"
+ id="use235" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g243">
+ <use
+ xlink:href="#glyph1-6"
+ x="87.222656"
+ y="184.413129"
+ id="use239" />
+ <use
+ xlink:href="#glyph1-6"
+ x="92.492743"
+ y="184.413129"
+ id="use241" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g249">
+ <use
+ xlink:href="#glyph1-6"
+ x="274.605469"
+ y="184.413129"
+ id="use245" />
+ <use
+ xlink:href="#glyph1-6"
+ x="279.875556"
+ y="184.413129"
+ id="use247" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g259">
+ <use
+ xlink:href="#glyph1-7"
+ x="307.398438"
+ y="184.413129"
+ id="use251" />
+ <use
+ xlink:href="#glyph1-5"
+ x="313.25409"
+ y="184.413129"
+ id="use253" />
+ <use
+ xlink:href="#glyph1-2"
+ x="317.353046"
+ y="184.413129"
+ id="use255" />
+ <use
+ xlink:href="#glyph1-3"
+ x="322.623133"
+ y="184.413129"
+ id="use257" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g269">
+ <use
+ xlink:href="#glyph1-7"
+ x="382.347656"
+ y="184.413129"
+ id="use261" />
+ <use
+ xlink:href="#glyph1-5"
+ x="388.203308"
+ y="184.413129"
+ id="use263" />
+ <use
+ xlink:href="#glyph1-2"
+ x="392.302265"
+ y="184.413129"
+ id="use265" />
+ <use
+ xlink:href="#glyph1-3"
+ x="397.572352"
+ y="184.413129"
+ id="use267" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.001272 72.501065 L 51.002405 72.501065 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path271" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 73.001383 L 2.501589 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path273" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 73.001383 L 50.502088 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path275" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 241.998759 72.501065 L 290.999893 72.501065 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path277" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 242.499077 73.001383 L 242.499077 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path279" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 72.501065 L 339.000391 72.501065 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path281" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 290.499575 73.001383 L 290.499575 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path283" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 338.500073 73.001383 L 338.500073 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path285" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 72.501065 L 435.001387 72.501065 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path287" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 73.001383 L 386.500571 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path289" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 72.501065 L 483.001885 72.501065 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path291" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 73.001383 L 434.501069 85.499324 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path293" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 73.001383 L 482.501567 86.49996 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path295" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 72.501065 L 578.997878 72.501065 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path297" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 73.001383 L 530.502065 86.49996 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path299" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 73.001383 L 578.49756 86.49996 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path301" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g309">
+ <use
+ xlink:href="#glyph1-6"
+ x="272.847656"
+ y="210.663129"
+ id="use303" />
+ <use
+ xlink:href="#glyph1-8"
+ x="278.117743"
+ y="210.663129"
+ id="use305" />
+ <use
+ xlink:href="#glyph1-9"
+ x="282.802265"
+ y="210.663129"
+ id="use307" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g317">
+ <use
+ xlink:href="#glyph1-6"
+ x="197.894531"
+ y="210.663129"
+ id="use311" />
+ <use
+ xlink:href="#glyph1-8"
+ x="203.164618"
+ y="210.663129"
+ id="use313" />
+ <use
+ xlink:href="#glyph1-9"
+ x="207.84914"
+ y="210.663129"
+ id="use315" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g329">
+ <use
+ xlink:href="#glyph1-9"
+ x="153.6875"
+ y="210.663129"
+ id="use319" />
+ <use
+ xlink:href="#glyph1-2"
+ x="157.786456"
+ y="210.663129"
+ id="use321" />
+ <use
+ xlink:href="#glyph1-3"
+ x="163.056543"
+ y="210.663129"
+ id="use323" />
+ <use
+ xlink:href="#glyph1-7"
+ x="167.741065"
+ y="210.663129"
+ id="use325" />
+ <use
+ xlink:href="#glyph1-10"
+ x="173.596717"
+ y="210.663129"
+ id="use327" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g341">
+ <use
+ xlink:href="#glyph1-9"
+ x="78.734375"
+ y="210.663129"
+ id="use331" />
+ <use
+ xlink:href="#glyph1-2"
+ x="82.833331"
+ y="210.663129"
+ id="use333" />
+ <use
+ xlink:href="#glyph1-3"
+ x="88.103418"
+ y="210.663129"
+ id="use335" />
+ <use
+ xlink:href="#glyph1-7"
+ x="92.78794"
+ y="210.663129"
+ id="use337" />
+ <use
+ xlink:href="#glyph1-10"
+ x="98.643592"
+ y="210.663129"
+ id="use339" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g353">
+ <use
+ xlink:href="#glyph1-11"
+ x="305.054688"
+ y="194.952192"
+ id="use343" />
+ <use
+ xlink:href="#glyph1-8"
+ x="310.324774"
+ y="194.952192"
+ id="use345" />
+ <use
+ xlink:href="#glyph1-8"
+ x="315.009296"
+ y="194.952192"
+ id="use347" />
+ <use
+ xlink:href="#glyph1-2"
+ x="319.693818"
+ y="194.952192"
+ id="use349" />
+ <use
+ xlink:href="#glyph1-3"
+ x="324.963905"
+ y="194.952192"
+ id="use351" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g365">
+ <use
+ xlink:href="#glyph1-11"
+ x="380.007812"
+ y="194.952192"
+ id="use355" />
+ <use
+ xlink:href="#glyph1-8"
+ x="385.277899"
+ y="194.952192"
+ id="use357" />
+ <use
+ xlink:href="#glyph1-8"
+ x="389.962421"
+ y="194.952192"
+ id="use359" />
+ <use
+ xlink:href="#glyph1-2"
+ x="394.646943"
+ y="194.952192"
+ id="use361" />
+ <use
+ xlink:href="#glyph1-3"
+ x="399.91703"
+ y="194.952192"
+ id="use363" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.001272 85.999642 L 51.002405 85.999642 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path367" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 86.49996 L 2.501589 99.998536 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path369" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 86.49996 L 50.502088 99.998536 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path371" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.002268 85.999642 L 146.998398 85.999642 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path373" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.497582 86.49996 L 98.497582 99.998536 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path375" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 145.997763 85.999642 L 194.998897 85.999642 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path377" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 146.498081 86.49996 L 146.498081 99.998536 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path379" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 194.498579 86.49996 L 194.498579 99.998536 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path381" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 241.998759 85.999642 L 290.999893 85.999642 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path383" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 242.499077 86.49996 L 242.499077 99.998536 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path385" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 85.999642 L 339.000391 85.999642 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path387" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 290.499575 86.49996 L 290.499575 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path389" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 338.500073 86.49996 L 338.500073 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path391" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 85.999642 L 435.001387 85.999642 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path393" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 86.49996 L 386.500571 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path395" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 86.49996 L 434.501069 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path397" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 85.499324 L 482.501567 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path399" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 85.499324 L 530.502065 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path401" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 85.499324 L 578.49756 98.9979 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path403" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g413">
+ <use
+ xlink:href="#glyph1-8"
+ x="307.398438"
+ y="205.491254"
+ id="use405" />
+ <use
+ xlink:href="#glyph1-4"
+ x="312.082959"
+ y="205.491254"
+ id="use407" />
+ <use
+ xlink:href="#glyph1-4"
+ x="317.353046"
+ y="205.491254"
+ id="use409" />
+ <use
+ xlink:href="#glyph1-3"
+ x="322.623133"
+ y="205.491254"
+ id="use411" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g423">
+ <use
+ xlink:href="#glyph1-8"
+ x="382.347656"
+ y="205.491254"
+ id="use415" />
+ <use
+ xlink:href="#glyph1-4"
+ x="387.032178"
+ y="205.491254"
+ id="use417" />
+ <use
+ xlink:href="#glyph1-4"
+ x="392.302265"
+ y="205.491254"
+ id="use419" />
+ <use
+ xlink:href="#glyph1-3"
+ x="397.572352"
+ y="205.491254"
+ id="use421" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g433">
+ <use
+ xlink:href="#glyph1-8"
+ x="419.824219"
+ y="205.491254"
+ id="use425" />
+ <use
+ xlink:href="#glyph1-4"
+ x="424.50874"
+ y="205.491254"
+ id="use427" />
+ <use
+ xlink:href="#glyph1-4"
+ x="429.778827"
+ y="205.491254"
+ id="use429" />
+ <use
+ xlink:href="#glyph1-3"
+ x="435.048914"
+ y="205.491254"
+ id="use431" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g443">
+ <use
+ xlink:href="#glyph1-8"
+ x="494.777344"
+ y="205.491254"
+ id="use435" />
+ <use
+ xlink:href="#glyph1-4"
+ x="499.461865"
+ y="205.491254"
+ id="use437" />
+ <use
+ xlink:href="#glyph1-4"
+ x="504.731952"
+ y="205.491254"
+ id="use439" />
+ <use
+ xlink:href="#glyph1-3"
+ x="510.002039"
+ y="205.491254"
+ id="use441" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 98.9979 L 2.501589 113.502116 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path445" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 98.9979 L 50.502088 113.502116 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path447" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.497582 98.9979 L 98.497582 113.502116 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path449" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 146.498081 98.9979 L 146.498081 113.502116 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path451" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 194.498579 98.9979 L 194.498579 113.502116 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path453" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 242.499077 98.9979 L 242.499077 113.502116 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path455" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 99.498218 L 339.000391 99.498218 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path457" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 290.499575 99.998536 L 290.499575 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path459" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 338.500073 99.998536 L 338.500073 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path461" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 99.498218 L 435.001387 99.498218 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path463" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 99.998536 L 386.500571 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path465" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 99.498218 L 483.001885 99.498218 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path467" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 99.998536 L 434.501069 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path469" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 99.998536 L 482.501567 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path471" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 99.498218 L 578.997878 99.498218 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path473" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 99.998536 L 530.502065 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path475" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 99.998536 L 578.49756 112.50148 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path477" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g487">
+ <use
+ xlink:href="#glyph1-1"
+ x="307.105469"
+ y="216.034223"
+ id="use479" />
+ <use
+ xlink:href="#glyph1-5"
+ x="313.546686"
+ y="216.034223"
+ id="use481" />
+ <use
+ xlink:href="#glyph1-3"
+ x="318.231208"
+ y="216.034223"
+ id="use483" />
+ <use
+ xlink:href="#glyph1-12"
+ x="322.915729"
+ y="216.034223"
+ id="use485" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g497">
+ <use
+ xlink:href="#glyph1-1"
+ x="382.054688"
+ y="216.034223"
+ id="use489" />
+ <use
+ xlink:href="#glyph1-5"
+ x="388.495905"
+ y="216.034223"
+ id="use491" />
+ <use
+ xlink:href="#glyph1-3"
+ x="393.180427"
+ y="216.034223"
+ id="use493" />
+ <use
+ xlink:href="#glyph1-12"
+ x="397.864948"
+ y="216.034223"
+ id="use495" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g507">
+ <use
+ xlink:href="#glyph1-1"
+ x="419.53125"
+ y="216.034223"
+ id="use499" />
+ <use
+ xlink:href="#glyph1-5"
+ x="425.972467"
+ y="216.034223"
+ id="use501" />
+ <use
+ xlink:href="#glyph1-3"
+ x="430.656989"
+ y="216.034223"
+ id="use503" />
+ <use
+ xlink:href="#glyph1-12"
+ x="435.341511"
+ y="216.034223"
+ id="use505" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g517">
+ <use
+ xlink:href="#glyph1-1"
+ x="494.484375"
+ y="216.034223"
+ id="use509" />
+ <use
+ xlink:href="#glyph1-5"
+ x="500.925592"
+ y="216.034223"
+ id="use511" />
+ <use
+ xlink:href="#glyph1-3"
+ x="505.610114"
+ y="216.034223"
+ id="use513" />
+ <use
+ xlink:href="#glyph1-12"
+ x="510.294636"
+ y="216.034223"
+ id="use515" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 112.50148 L 2.501589 127.000692 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path519" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 112.50148 L 50.502088 127.000692 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path521" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.497582 112.50148 L 98.497582 127.000692 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path523" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 146.498081 112.50148 L 146.498081 127.000692 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path525" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 194.498579 112.50148 L 194.498579 127.000692 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path527" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 242.499077 112.50148 L 242.499077 127.000692 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path529" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 113.001798 L 339.000391 113.001798 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path531" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 290.499575 113.502116 L 290.499575 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path533" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 338.500073 113.502116 L 338.500073 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path535" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 113.001798 L 435.001387 113.001798 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path537" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 113.502116 L 386.500571 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path539" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 113.001798 L 483.001885 113.001798 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path541" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 113.502116 L 434.501069 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path543" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 113.502116 L 482.501567 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path545" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 113.001798 L 578.997878 113.001798 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path547" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 113.502116 L 530.502065 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path549" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 113.502116 L 578.49756 126.000057 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path551" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g561">
+ <use
+ xlink:href="#glyph1-1"
+ x="307.105469"
+ y="226.573285"
+ id="use553" />
+ <use
+ xlink:href="#glyph1-5"
+ x="313.546686"
+ y="226.573285"
+ id="use555" />
+ <use
+ xlink:href="#glyph1-3"
+ x="318.231208"
+ y="226.573285"
+ id="use557" />
+ <use
+ xlink:href="#glyph1-13"
+ x="322.915729"
+ y="226.573285"
+ id="use559" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g571">
+ <use
+ xlink:href="#glyph1-1"
+ x="382.054688"
+ y="226.573285"
+ id="use563" />
+ <use
+ xlink:href="#glyph1-5"
+ x="388.495905"
+ y="226.573285"
+ id="use565" />
+ <use
+ xlink:href="#glyph1-3"
+ x="393.180427"
+ y="226.573285"
+ id="use567" />
+ <use
+ xlink:href="#glyph1-13"
+ x="397.864948"
+ y="226.573285"
+ id="use569" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g581">
+ <use
+ xlink:href="#glyph1-1"
+ x="419.53125"
+ y="226.573285"
+ id="use573" />
+ <use
+ xlink:href="#glyph1-5"
+ x="425.972467"
+ y="226.573285"
+ id="use575" />
+ <use
+ xlink:href="#glyph1-3"
+ x="430.656989"
+ y="226.573285"
+ id="use577" />
+ <use
+ xlink:href="#glyph1-13"
+ x="435.341511"
+ y="226.573285"
+ id="use579" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g591">
+ <use
+ xlink:href="#glyph1-1"
+ x="494.484375"
+ y="226.573285"
+ id="use583" />
+ <use
+ xlink:href="#glyph1-5"
+ x="500.925592"
+ y="226.573285"
+ id="use585" />
+ <use
+ xlink:href="#glyph1-3"
+ x="505.610114"
+ y="226.573285"
+ id="use587" />
+ <use
+ xlink:href="#glyph1-13"
+ x="510.294636"
+ y="226.573285"
+ id="use589" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 126.000057 L 2.501589 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path593" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 126.000057 L 50.502088 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path595" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.497582 126.000057 L 98.497582 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path597" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 146.498081 126.000057 L 146.498081 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path599" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 194.498579 126.000057 L 194.498579 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path601" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 242.499077 126.000057 L 242.499077 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path603" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 126.500375 L 339.000391 126.500375 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path605" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 290.499575 127.000692 L 290.499575 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path607" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 338.500073 127.000692 L 338.500073 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path609" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 126.500375 L 435.001387 126.500375 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path611" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 127.000692 L 386.500571 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path613" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 126.500375 L 483.001885 126.500375 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path615" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 127.000692 L 434.501069 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path617" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 127.000692 L 482.501567 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path619" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 126.500375 L 578.997878 126.500375 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path621" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 127.000692 L 530.502065 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path623" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 127.000692 L 578.49756 139.498633 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path625" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g633">
+ <use
+ xlink:href="#glyph1-3"
+ x="84.882812"
+ y="237.112348"
+ id="use627" />
+ <use
+ xlink:href="#glyph1-14"
+ x="89.567334"
+ y="237.112348"
+ id="use629" />
+ <use
+ xlink:href="#glyph1-15"
+ x="95.422986"
+ y="237.112348"
+ id="use631" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g641">
+ <use
+ xlink:href="#glyph1-3"
+ x="159.835937"
+ y="237.112348"
+ id="use635" />
+ <use
+ xlink:href="#glyph1-14"
+ x="164.520459"
+ y="237.112348"
+ id="use637" />
+ <use
+ xlink:href="#glyph1-15"
+ x="170.376111"
+ y="237.112348"
+ id="use639" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g647">
+ <use
+ xlink:href="#glyph1-16"
+ x="200.238281"
+ y="237.112348"
+ id="use643" />
+ <use
+ xlink:href="#glyph1-17"
+ x="204.922803"
+ y="237.112348"
+ id="use645" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g653">
+ <use
+ xlink:href="#glyph1-16"
+ x="275.191406"
+ y="237.112348"
+ id="use649" />
+ <use
+ xlink:href="#glyph1-17"
+ x="279.875928"
+ y="237.112348"
+ id="use651" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g659">
+ <use
+ xlink:href="#glyph1-16"
+ x="312.667969"
+ y="237.112348"
+ id="use655" />
+ <use
+ xlink:href="#glyph1-17"
+ x="317.35249"
+ y="237.112348"
+ id="use657" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g665">
+ <use
+ xlink:href="#glyph1-16"
+ x="387.621094"
+ y="237.112348"
+ id="use661" />
+ <use
+ xlink:href="#glyph1-17"
+ x="392.305615"
+ y="237.112348"
+ id="use663" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g671">
+ <use
+ xlink:href="#glyph1-16"
+ x="425.09375"
+ y="237.112348"
+ id="use667" />
+ <use
+ xlink:href="#glyph1-17"
+ x="429.778272"
+ y="237.112348"
+ id="use669" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g677">
+ <use
+ xlink:href="#glyph1-16"
+ x="500.046875"
+ y="237.112348"
+ id="use673" />
+ <use
+ xlink:href="#glyph1-17"
+ x="504.731397"
+ y="237.112348"
+ id="use675" />
+ </g>
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.001272 139.998951 L 51.002405 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path679" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.501589 140.499269 L 2.501589 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path681" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 50.502088 140.499269 L 50.502088 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path683" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.002268 139.998951 L 146.998398 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path685" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.497582 140.499269 L 98.497582 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path687" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 145.997763 139.998951 L 194.998897 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path689" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 146.498081 140.499269 L 146.498081 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path691" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 194.498579 140.499269 L 194.498579 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path693" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 241.998759 139.998951 L 290.999893 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path695" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 242.499077 140.499269 L 242.499077 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path697" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 139.998951 L 339.000391 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path699" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 290.499575 140.499269 L 290.499575 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path701" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 338.500073 140.499269 L 338.500073 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path703" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 139.998951 L 435.001387 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path705" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.500571 140.499269 L 386.500571 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path707" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 139.998951 L 483.001885 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path709" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.501069 140.499269 L 434.501069 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path711" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 482.501567 140.499269 L 482.501567 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path713" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 139.998951 L 578.997878 139.998951 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path715" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.502065 140.499269 L 530.502065 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path717" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 578.49756 140.499269 L 578.49756 152.251736 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path719" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 2.001272 152.752054 L 51.002405 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path721" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 98.002268 152.752054 L 146.998398 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path723" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 145.997763 152.752054 L 194.998897 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path725" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 241.998759 152.752054 L 290.999893 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path727" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 289.999257 152.752054 L 339.000391 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path729" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 386.000253 152.752054 L 435.001387 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path731" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 434.000751 152.752054 L 483.001885 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path733" />
+ <path
+ style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 530.001747 152.752054 L 578.997878 152.752054 "
+ transform="matrix(0.780754,0,0,0.780754,72,120)"
+ id="path735" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
+ d="M 112.44873,160.63045 H 371.95982"
+ id="path746"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-3);marker-end:url(#Arrow1Lend-7)"
+ d="M 112.10705,172.14269 H 371.07213"
+ id="path746-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6794);marker-end:url(#marker6864)"
+ d="m 113.14357,181.05719 h 146.9149"
+ id="path6688"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112);marker-end:url(#marker7194)"
+ d="m 113.02035,208.76534 h 34.45028"
+ id="path7102"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5);marker-end:url(#marker7194-2)"
+ d="m 112.49535,234.28326 h 34.45028"
+ id="path7102-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2);marker-end:url(#marker7194-2-0)"
+ d="m 225.8162,208.61723 h 34.45028"
+ id="path7102-1-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6);marker-end:url(#marker7194-2-0-6)"
+ d="m 224.92119,233.56247 h 34.45028"
+ id="path7102-1-3-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1);marker-end:url(#marker7194-2-0-6-7)"
+ d="m 338.24594,181.87503 h 34.45028"
+ id="path7102-1-3-6-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-0);marker-end:url(#marker7194-2-0-6-7-3)"
+ d="m 337.3492,193.31236 h 34.45028"
+ id="path7102-1-3-6-2-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-9);marker-end:url(#marker7194-2-0-6-7-8)"
+ d="m 338.19409,202.53074 h 34.45028"
+ id="path7102-1-3-6-2-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-3);marker-end:url(#marker7194-2-0-6-7-1)"
+ d="m 338.19409,213.03074 h 34.45028"
+ id="path7102-1-3-6-2-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-31);marker-end:url(#marker7194-2-0-6-7-4)"
+ d="m 338.19409,223.53074 h 34.45028"
+ id="path7102-1-3-6-2-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-5);marker-end:url(#marker7194-2-0-6-7-36)"
+ d="m 338.19409,234.03074 h 34.45028"
+ id="path7102-1-3-6-2-0"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-6);marker-end:url(#marker7194-2-0-6-7-2)"
+ d="m 449.89493,166.45315 h 34.45028"
+ id="path7102-1-3-6-2-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-6-1);marker-end:url(#marker7194-2-0-6-7-2-5)"
+ d="m 450.68559,187.3572 h 34.45028"
+ id="path7102-1-3-6-2-6-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-6-6);marker-end:url(#marker7194-2-0-6-7-2-9)"
+ d="m 450.68559,202.3572 h 34.45028"
+ id="path7102-1-3-6-2-6-74"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-6-5);marker-end:url(#marker7194-2-0-6-7-2-54)"
+ d="m 450.68559,214.3572 h 34.45028"
+ id="path7102-1-3-6-2-6-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-6-4);marker-end:url(#marker7194-2-0-6-7-2-0)"
+ d="m 450.68559,224.8572 h 34.45028"
+ id="path7102-1-3-6-2-6-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7112-5-2-6-1-6-8);marker-end:url(#marker7194-2-0-6-7-2-4)"
+ d="m 450.68559,233.8572 h 34.45028"
+ id="path7102-1-3-6-2-6-49"
+ inkscape:connector-curvature="0" />
+</svg>
diff --git a/2018/phone_protocol-eh2018/location_update.png b/2018/phone_protocol-eh2018/location_update.png
new file mode 100644
index 0000000..a1baa77
--- /dev/null
+++ b/2018/phone_protocol-eh2018/location_update.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/location_update.svg b/2018/phone_protocol-eh2018/location_update.svg
new file mode 100644
index 0000000..84de0ee
--- /dev/null
+++ b/2018/phone_protocol-eh2018/location_update.svg
@@ -0,0 +1,505 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1"
+ width="1800px" height="1137px"
+ viewBox="0 0 1800 1137"
+ xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges"
+ stroke-width="1" text-rendering="geometricPrecision">
+<polygon fill="white" points="165,7 193,7 193,16 165,16"/>
+<text x="180" y="16" textLength="27" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+MSC
+</text>
+<polygon fill="white" points="527,7 551,7 551,16 527,16"/>
+<text x="540" y="16" textLength="23" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+BTS
+</text>
+<polygon fill="white" points="886,7 912,7 912,16 886,16"/>
+<text x="900" y="16" textLength="25" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+BSC
+</text>
+<polygon fill="white" points="1232,7 1286,7 1286,16 1232,16"/>
+<text x="1260" y="16" textLength="53" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+MSC/VLR
+</text>
+<polygon fill="white" points="1606,7 1632,7 1632,16 1606,16"/>
+<text x="1620" y="16" textLength="24" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+HLR
+</text>
+<line x1="180" y1="22" x2="180" y2="39" stroke="black"/>
+<line x1="540" y1="22" x2="540" y2="39" stroke="black"/>
+<line x1="900" y1="22" x2="900" y2="39" stroke="black"/>
+<line x1="1260" y1="22" x2="1260" y2="39" stroke="black"/>
+<line x1="1620" y1="22" x2="1620" y2="39" stroke="black"/>
+<line x1="180" y1="39" x2="180" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="540" y1="39" x2="540" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="900" y1="39" x2="900" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1260" y1="39" x2="1260" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1620" y1="39" x2="1620" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<polygon fill="white" points="839,40 959,40 959,49 839,49"/>
+<text x="840" y="49" textLength="118" font-family="Helvetica" font-size="12" fill="black">
+GSM Location Update
+</text>
+<line x1="180" y1="56" x2="180" y2="73" stroke="black"/>
+<line x1="540" y1="56" x2="540" y2="73" stroke="black"/>
+<line x1="900" y1="56" x2="900" y2="73" stroke="black"/>
+<line x1="1260" y1="56" x2="1260" y2="73" stroke="black"/>
+<line x1="1620" y1="56" x2="1620" y2="73" stroke="black"/>
+<line x1="180" y1="73" x2="180" y2="101" stroke="black"/>
+<line x1="540" y1="73" x2="540" y2="101" stroke="black"/>
+<line x1="900" y1="73" x2="900" y2="101" stroke="black"/>
+<line x1="1260" y1="73" x2="1260" y2="101" stroke="black"/>
+<line x1="1620" y1="73" x2="1620" y2="101" stroke="black"/>
+<line x1="180" y1="84" x2="540" y2="84" stroke="black"/>
+<polygon fill="black" points="540,84 530,90 530,78"/>
+<polygon fill="white" points="318,74 401,74 401,83 318,83"/>
+<text x="319" y="83" textLength="81" font-family="Helvetica" font-size="12" fill="black">
+L1 RACH burst
+</text>
+<line x1="180" y1="101" x2="180" y2="129" stroke="black"/>
+<line x1="540" y1="101" x2="540" y2="129" stroke="black"/>
+<line x1="900" y1="101" x2="900" y2="129" stroke="black"/>
+<line x1="1260" y1="101" x2="1260" y2="129" stroke="black"/>
+<line x1="1620" y1="101" x2="1620" y2="129" stroke="black"/>
+<line x1="540" y1="112" x2="900" y2="112" stroke="black"/>
+<polygon fill="black" points="900,112 890,118 890,106"/>
+<polygon fill="white" points="673,102 766,102 766,111 673,111"/>
+<text x="674" y="111" textLength="91" font-family="Helvetica" font-size="12" fill="black">
+RSL CHAN RQD
+</text>
+<line x1="180" y1="129" x2="180" y2="157" stroke="black"/>
+<line x1="540" y1="129" x2="540" y2="157" stroke="black"/>
+<line x1="900" y1="129" x2="900" y2="157" stroke="black"/>
+<line x1="1260" y1="129" x2="1260" y2="157" stroke="black"/>
+<line x1="1620" y1="129" x2="1620" y2="157" stroke="black"/>
+<polygon fill="white" points="728,129 1072,129 1072,151 728,151"/>
+<line x1="728" y1="129" x2="1072" y2="129" stroke="black"/>
+<line x1="728" y1="151" x2="1072" y2="151" stroke="black"/>
+<line x1="728" y1="129" x2="728" y2="151" stroke="black"/>
+<line x1="1072" y1="129" x2="1072" y2="151" stroke="black"/>
+<polygon fill="white" points="815,136 983,136 983,145 815,145"/>
+<text x="816" y="145" textLength="166" font-family="Helvetica" font-size="12" fill="black">
+Allocation of dedicated channel
+</text>
+<line x1="180" y1="157" x2="180" y2="185" stroke="black"/>
+<line x1="540" y1="157" x2="540" y2="185" stroke="black"/>
+<line x1="900" y1="157" x2="900" y2="185" stroke="black"/>
+<line x1="1260" y1="157" x2="1260" y2="185" stroke="black"/>
+<line x1="1620" y1="157" x2="1620" y2="185" stroke="black"/>
+<line x1="900" y1="168" x2="540" y2="168" stroke="black"/>
+<polygon fill="black" points="540,168 550,174 550,162"/>
+<polygon fill="white" points="674,158 764,158 764,167 674,167"/>
+<text x="675" y="167" textLength="88" font-family="Helvetica" font-size="12" fill="black">
+RSL CHAN ACT
+</text>
+<line x1="180" y1="185" x2="180" y2="213" stroke="black"/>
+<line x1="540" y1="185" x2="540" y2="213" stroke="black"/>
+<line x1="900" y1="185" x2="900" y2="213" stroke="black"/>
+<line x1="1260" y1="185" x2="1260" y2="213" stroke="black"/>
+<line x1="1620" y1="185" x2="1620" y2="213" stroke="black"/>
+<line x1="540" y1="196" x2="900" y2="196" stroke="black"/>
+<polygon fill="black" points="900,196 890,202 890,190"/>
+<polygon fill="white" points="660,186 778,186 778,195 660,195"/>
+<text x="661" y="195" textLength="116" font-family="Helvetica" font-size="12" fill="black">
+RSL CHAN ACT ACK
+</text>
+<line x1="180" y1="213" x2="180" y2="241" stroke="black"/>
+<line x1="540" y1="213" x2="540" y2="241" stroke="black"/>
+<line x1="900" y1="213" x2="900" y2="241" stroke="black"/>
+<line x1="1260" y1="213" x2="1260" y2="241" stroke="black"/>
+<line x1="1620" y1="213" x2="1620" y2="241" stroke="black"/>
+<line x1="900" y1="224" x2="540" y2="224" stroke="black"/>
+<polygon fill="black" points="540,224 550,230 550,218"/>
+<polygon fill="white" points="623,214 816,214 816,223 623,223"/>
+<text x="624" y="223" textLength="191" font-family="Helvetica" font-size="12" fill="black">
+RSL IMM ASS CMD (RR IMM ASS)
+</text>
+<line x1="180" y1="241" x2="180" y2="269" stroke="black"/>
+<line x1="540" y1="241" x2="540" y2="269" stroke="black"/>
+<line x1="900" y1="241" x2="900" y2="269" stroke="black"/>
+<line x1="1260" y1="241" x2="1260" y2="269" stroke="black"/>
+<line x1="1620" y1="241" x2="1620" y2="269" stroke="black"/>
+<line x1="540" y1="252" x2="180" y2="252" stroke="black"/>
+<polygon fill="black" points="180,252 190,258 190,246"/>
+<polygon fill="white" points="270,242 449,242 449,251 270,251"/>
+<text x="271" y="251" textLength="177" font-family="Helvetica" font-size="12" fill="black">
+AGCH: RR IMMEDIATE ASSIGN
+</text>
+<line x1="180" y1="269" x2="180" y2="297" stroke="black"/>
+<line x1="540" y1="269" x2="540" y2="297" stroke="black"/>
+<line x1="900" y1="269" x2="900" y2="297" stroke="black"/>
+<line x1="1260" y1="269" x2="1260" y2="297" stroke="black"/>
+<line x1="1620" y1="269" x2="1620" y2="297" stroke="black"/>
+<polygon fill="white" points="8,269 352,269 352,291 8,291"/>
+<line x1="8" y1="269" x2="352" y2="269" stroke="black"/>
+<line x1="8" y1="291" x2="352" y2="291" stroke="black"/>
+<line x1="8" y1="269" x2="8" y2="291" stroke="black"/>
+<line x1="352" y1="269" x2="352" y2="291" stroke="black"/>
+<polygon fill="white" points="109,270 249,270 249,279 109,279"/>
+<text x="110" y="279" textLength="138" font-family="Helvetica" font-size="12" fill="black">
+Switch form BCCH/CCCH
+</text>
+<polygon fill="white" points="123,281 236,281 236,290 123,290"/>
+<text x="124" y="290" textLength="111" font-family="Helvetica" font-size="12" fill="black">
+to dedicated channel
+</text>
+<line x1="180" y1="297" x2="180" y2="325" stroke="black"/>
+<line x1="540" y1="297" x2="540" y2="325" stroke="black"/>
+<line x1="900" y1="297" x2="900" y2="325" stroke="black"/>
+<line x1="1260" y1="297" x2="1260" y2="325" stroke="black"/>
+<line x1="1620" y1="297" x2="1620" y2="325" stroke="black"/>
+<line x1="180" y1="308" x2="540" y2="308" stroke="black"/>
+<polygon fill="black" points="540,308 530,314 530,302"/>
+<polygon fill="white" points="260,298 458,298 458,307 260,307"/>
+<text x="261" y="307" textLength="196" font-family="Helvetica" font-size="12" fill="black">
+LAPDm SABM (MM LOC UPD REQ)
+</text>
+<line x1="180" y1="325" x2="180" y2="353" stroke="black"/>
+<line x1="540" y1="325" x2="540" y2="353" stroke="black"/>
+<line x1="900" y1="325" x2="900" y2="353" stroke="black"/>
+<line x1="1260" y1="325" x2="1260" y2="353" stroke="black"/>
+<line x1="1620" y1="325" x2="1620" y2="353" stroke="black"/>
+<line x1="540" y1="336" x2="900" y2="336" stroke="black"/>
+<polygon fill="black" points="900,336 890,342 890,330"/>
+<polygon fill="white" points="620,326 818,326 818,335 620,335"/>
+<text x="621" y="335" textLength="196" font-family="Helvetica" font-size="12" fill="black">
+RSL DATA IND (MM LOC UPD REQ
+</text>
+<line x1="180" y1="353" x2="180" y2="381" stroke="black"/>
+<line x1="540" y1="353" x2="540" y2="381" stroke="black"/>
+<line x1="900" y1="353" x2="900" y2="381" stroke="black"/>
+<line x1="1260" y1="353" x2="1260" y2="381" stroke="black"/>
+<line x1="1620" y1="353" x2="1620" y2="381" stroke="black"/>
+<line x1="900" y1="364" x2="1260" y2="364" stroke="black"/>
+<polygon fill="black" points="1260,364 1250,370 1250,358"/>
+<polygon fill="white" points="970,354 1188,354 1188,363 970,363"/>
+<text x="971" y="363" textLength="216" font-family="Helvetica" font-size="12" fill="black">
+BSSAP COMPL L3 (MM LOC UPD REQ
+</text>
+<line x1="180" y1="381" x2="180" y2="409" stroke="black"/>
+<line x1="540" y1="381" x2="540" y2="409" stroke="black"/>
+<line x1="900" y1="381" x2="900" y2="409" stroke="black"/>
+<line x1="1260" y1="381" x2="1260" y2="409" stroke="black"/>
+<line x1="1620" y1="381" x2="1620" y2="409" stroke="black"/>
+<polygon fill="white" points="14,381 1426,381 1426,403 14,403"/>
+<polygon fill="white" points="8,387 1432,387 1432,397 8,397"/>
+<circle fill="white" cx="14" cy="387" r="6"/>
+<circle fill="white" cx="1426" cy="387" r="6"/>
+<circle fill="white" cx="14" cy="397" r="6"/>
+<circle fill="white" cx="1426" cy="397" r="6"/>
+<line x1="14" y1="381" x2="1426" y2="381" stroke="black"/>
+<line x1="14" y1="403" x2="1426" y2="403" stroke="black"/>
+<line x1="8" y1="387" x2="8" y2="397" stroke="black"/>
+<line x1="1432" y1="387" x2="1432" y2="397" stroke="black"/>
+<path d="M 8 387 A6,6 0 0,1 14,381" stroke="black" fill="none"/><path d="M 1426 381 A6,6 0 0,1 1432,387" stroke="black" fill="none"/><path d="M 1432 397 A6,6 0 0,1 1426,403" stroke="black" fill="none"/><path d="M 14 403 A6,6 0 0,1 8,397" stroke="black" fill="none"/><polygon fill="white" points="527,388 912,388 912,397 527,397"/>
+<text x="528" y="397" textLength="383" font-family="Helvetica" font-size="12" fill="black">
+optional: MM IDENTITY REQ + RESP (IMSI) if MSC doesn't know TMSI
+</text>
+<line x1="180" y1="409" x2="180" y2="437" stroke="black"/>
+<line x1="540" y1="409" x2="540" y2="437" stroke="black"/>
+<line x1="900" y1="409" x2="900" y2="437" stroke="black"/>
+<line x1="1260" y1="409" x2="1260" y2="437" stroke="black"/>
+<line x1="1620" y1="409" x2="1620" y2="437" stroke="black"/>
+<line x1="1260" y1="420" x2="1620" y2="420" stroke="black"/>
+<polygon fill="black" points="1620,420 1610,426 1610,414"/>
+<polygon fill="white" points="1363,410 1516,410 1516,419 1363,419"/>
+<text x="1364" y="419" textLength="151" font-family="Helvetica" font-size="12" fill="black">
+MAP SEND AUTH INFO req
+</text>
+<line x1="180" y1="437" x2="180" y2="465" stroke="black"/>
+<line x1="540" y1="437" x2="540" y2="465" stroke="black"/>
+<line x1="900" y1="437" x2="900" y2="465" stroke="black"/>
+<line x1="1260" y1="437" x2="1260" y2="465" stroke="black"/>
+<line x1="1620" y1="437" x2="1620" y2="465" stroke="black"/>
+<polygon fill="white" points="1448,437 1792,437 1792,459 1448,459"/>
+<line x1="1448" y1="437" x2="1792" y2="437" stroke="black"/>
+<line x1="1448" y1="459" x2="1792" y2="459" stroke="black"/>
+<line x1="1448" y1="437" x2="1448" y2="459" stroke="black"/>
+<line x1="1792" y1="437" x2="1792" y2="459" stroke="black"/>
+<polygon fill="white" points="1560,444 1679,444 1679,453 1560,453"/>
+<text x="1561" y="453" textLength="117" font-family="Helvetica" font-size="12" fill="black">
+Generate Auth Tuples
+</text>
+<line x1="180" y1="465" x2="180" y2="493" stroke="black"/>
+<line x1="540" y1="465" x2="540" y2="493" stroke="black"/>
+<line x1="900" y1="465" x2="900" y2="493" stroke="black"/>
+<line x1="1260" y1="465" x2="1260" y2="493" stroke="black"/>
+<line x1="1620" y1="465" x2="1620" y2="493" stroke="black"/>
+<line x1="1620" y1="476" x2="1260" y2="476" stroke="black"/>
+<polygon fill="black" points="1260,476 1270,482 1270,470"/>
+<polygon fill="white" points="1360,466 1519,466 1519,475 1360,475"/>
+<text x="1361" y="475" textLength="157" font-family="Helvetica" font-size="12" fill="black">
+MAP SEND AUTH INFO resp
+</text>
+<line x1="180" y1="493" x2="180" y2="521" stroke="black"/>
+<line x1="540" y1="493" x2="540" y2="521" stroke="black"/>
+<line x1="900" y1="493" x2="900" y2="521" stroke="black"/>
+<line x1="1260" y1="493" x2="1260" y2="521" stroke="black"/>
+<line x1="1620" y1="493" x2="1620" y2="521" stroke="black"/>
+<line x1="1260" y1="504" x2="180" y2="504" stroke="black"/>
+<polygon fill="black" points="180,504 190,510 190,498"/>
+<polygon fill="white" points="676,494 763,494 763,503 676,503"/>
+<text x="677" y="503" textLength="85" font-family="Helvetica" font-size="12" fill="black">
+MM AUTH REQ
+</text>
+<line x1="180" y1="521" x2="180" y2="549" stroke="black"/>
+<line x1="540" y1="521" x2="540" y2="549" stroke="black"/>
+<line x1="900" y1="521" x2="900" y2="549" stroke="black"/>
+<line x1="1260" y1="521" x2="1260" y2="549" stroke="black"/>
+<line x1="1620" y1="521" x2="1620" y2="549" stroke="black"/>
+<line x1="180" y1="532" x2="1260" y2="532" stroke="black"/>
+<polygon fill="black" points="1260,532 1250,538 1250,526"/>
+<polygon fill="white" points="672,522 766,522 766,531 672,531"/>
+<text x="673" y="531" textLength="92" font-family="Helvetica" font-size="12" fill="black">
+MM AUTH RESP
+</text>
+<line x1="180" y1="549" x2="180" y2="577" stroke="black"/>
+<line x1="540" y1="549" x2="540" y2="577" stroke="black"/>
+<line x1="900" y1="549" x2="900" y2="577" stroke="black"/>
+<line x1="1260" y1="549" x2="1260" y2="577" stroke="black"/>
+<line x1="1620" y1="549" x2="1620" y2="577" stroke="black"/>
+<polygon fill="white" points="1088,549 1432,549 1432,571 1088,571"/>
+<line x1="1088" y1="549" x2="1432" y2="549" stroke="black"/>
+<line x1="1088" y1="571" x2="1432" y2="571" stroke="black"/>
+<line x1="1088" y1="549" x2="1088" y2="571" stroke="black"/>
+<line x1="1432" y1="549" x2="1432" y2="571" stroke="black"/>
+<polygon fill="white" points="1181,556 1337,556 1337,565 1181,565"/>
+<text x="1182" y="565" textLength="154" font-family="Helvetica" font-size="12" fill="black">
+SRES (MS) == SRES(HLR)?
+</text>
+<line x1="180" y1="577" x2="180" y2="605" stroke="black"/>
+<line x1="540" y1="577" x2="540" y2="605" stroke="black"/>
+<line x1="900" y1="577" x2="900" y2="605" stroke="black"/>
+<line x1="1260" y1="577" x2="1260" y2="605" stroke="black"/>
+<line x1="1620" y1="577" x2="1620" y2="605" stroke="black"/>
+<line x1="1260" y1="588" x2="1620" y2="588" stroke="black"/>
+<polygon fill="black" points="1620,588 1610,594 1610,582"/>
+<polygon fill="white" points="1369,578 1510,578 1510,587 1369,587"/>
+<text x="1370" y="587" textLength="139" font-family="Helvetica" font-size="12" fill="black">
+MAP UPD LOC AREA req
+</text>
+<line x1="180" y1="605" x2="180" y2="633" stroke="black"/>
+<line x1="540" y1="605" x2="540" y2="633" stroke="black"/>
+<line x1="900" y1="605" x2="900" y2="633" stroke="black"/>
+<line x1="1260" y1="605" x2="1260" y2="633" stroke="black"/>
+<line x1="1620" y1="605" x2="1620" y2="633" stroke="black"/>
+<line x1="1620" y1="616" x2="1260" y2="616" stroke="black"/>
+<polygon fill="black" points="1260,616 1270,622 1270,610"/>
+<polygon fill="white" points="1347,606 1532,606 1532,615 1347,615"/>
+<text x="1348" y="615" textLength="183" font-family="Helvetica" font-size="12" fill="black">
+MAP INSERT SUBSCR DATA req
+</text>
+<line x1="180" y1="633" x2="180" y2="661" stroke="black"/>
+<line x1="540" y1="633" x2="540" y2="661" stroke="black"/>
+<line x1="900" y1="633" x2="900" y2="661" stroke="black"/>
+<line x1="1260" y1="633" x2="1260" y2="661" stroke="black"/>
+<line x1="1620" y1="633" x2="1620" y2="661" stroke="black"/>
+<line x1="1260" y1="644" x2="1620" y2="644" stroke="black"/>
+<polygon fill="black" points="1620,644 1610,650 1610,638"/>
+<polygon fill="white" points="1344,634 1535,634 1535,643 1344,643"/>
+<text x="1345" y="643" textLength="189" font-family="Helvetica" font-size="12" fill="black">
+MAP INSERT SUBSCR DATA resp
+</text>
+<line x1="180" y1="661" x2="180" y2="689" stroke="black"/>
+<line x1="540" y1="661" x2="540" y2="689" stroke="black"/>
+<line x1="900" y1="661" x2="900" y2="689" stroke="black"/>
+<line x1="1260" y1="661" x2="1260" y2="689" stroke="black"/>
+<line x1="1620" y1="661" x2="1620" y2="689" stroke="black"/>
+<line x1="1620" y1="672" x2="1260" y2="672" stroke="black"/>
+<polygon fill="black" points="1260,672 1270,678 1270,666"/>
+<polygon fill="white" points="1366,662 1513,662 1513,671 1366,671"/>
+<text x="1367" y="671" textLength="145" font-family="Helvetica" font-size="12" fill="black">
+MAP UPD LOC AREA resp
+</text>
+<line x1="180" y1="689" x2="180" y2="717" stroke="black"/>
+<line x1="540" y1="689" x2="540" y2="717" stroke="black"/>
+<line x1="900" y1="689" x2="900" y2="717" stroke="black"/>
+<line x1="1260" y1="689" x2="1260" y2="717" stroke="black"/>
+<line x1="1620" y1="689" x2="1620" y2="717" stroke="black"/>
+<line x1="1260" y1="700" x2="900" y2="700" stroke="black"/>
+<polygon fill="black" points="900,700 910,706 910,694"/>
+<polygon fill="white" points="1002,690 1156,690 1156,699 1002,699"/>
+<text x="1003" y="699" textLength="152" font-family="Helvetica" font-size="12" fill="black">
+BSSMAP CIPH MODE CMD
+</text>
+<line x1="180" y1="717" x2="180" y2="745" stroke="black"/>
+<line x1="540" y1="717" x2="540" y2="745" stroke="black"/>
+<line x1="900" y1="717" x2="900" y2="745" stroke="black"/>
+<line x1="1260" y1="717" x2="1260" y2="745" stroke="black"/>
+<line x1="1620" y1="717" x2="1620" y2="745" stroke="black"/>
+<line x1="900" y1="728" x2="540" y2="728" stroke="black"/>
+<polygon fill="black" points="540,728 550,734 550,722"/>
+<polygon fill="white" points="611,718 827,718 827,727 611,727"/>
+<text x="612" y="727" textLength="214" font-family="Helvetica" font-size="12" fill="black">
+RSL ENCR CMD (RR CIPH MOD CMD)
+</text>
+<line x1="180" y1="745" x2="180" y2="773" stroke="black"/>
+<line x1="540" y1="745" x2="540" y2="773" stroke="black"/>
+<line x1="900" y1="745" x2="900" y2="773" stroke="black"/>
+<line x1="1260" y1="745" x2="1260" y2="773" stroke="black"/>
+<line x1="1620" y1="745" x2="1620" y2="773" stroke="black"/>
+<line x1="540" y1="756" x2="180" y2="756" stroke="black"/>
+<polygon fill="black" points="180,756 190,762 190,750"/>
+<polygon fill="white" points="303,746 416,746 416,755 303,755"/>
+<text x="304" y="755" textLength="111" font-family="Helvetica" font-size="12" fill="black">
+RR CIPH MOD CMD
+</text>
+<line x1="180" y1="773" x2="180" y2="801" stroke="black"/>
+<line x1="540" y1="773" x2="540" y2="801" stroke="black"/>
+<line x1="900" y1="773" x2="900" y2="801" stroke="black"/>
+<line x1="1260" y1="773" x2="1260" y2="801" stroke="black"/>
+<line x1="1620" y1="773" x2="1620" y2="801" stroke="black"/>
+<line x1="180" y1="784" x2="540" y2="784" stroke="black"/>
+<polygon fill="black" points="540,784 530,790 530,778"/>
+<polygon fill="white" points="295,774 424,774 424,783 295,783"/>
+<text x="296" y="783" textLength="127" font-family="Helvetica" font-size="12" fill="black">
+RR CIPH MOD COMPL
+</text>
+<line x1="180" y1="801" x2="180" y2="829" stroke="black"/>
+<line x1="540" y1="801" x2="540" y2="829" stroke="black"/>
+<line x1="900" y1="801" x2="900" y2="829" stroke="black"/>
+<line x1="1260" y1="801" x2="1260" y2="829" stroke="black"/>
+<line x1="1620" y1="801" x2="1620" y2="829" stroke="black"/>
+<line x1="540" y1="812" x2="900" y2="812" stroke="black"/>
+<polygon fill="black" points="900,812 890,818 890,806"/>
+<polygon fill="white" points="608,802 831,802 831,811 608,811"/>
+<text x="609" y="811" textLength="221" font-family="Helvetica" font-size="12" fill="black">
+RSL DATA IND (RR CIPH MOD COMPL)
+</text>
+<line x1="180" y1="829" x2="180" y2="857" stroke="black"/>
+<line x1="540" y1="829" x2="540" y2="857" stroke="black"/>
+<line x1="900" y1="829" x2="900" y2="857" stroke="black"/>
+<line x1="1260" y1="829" x2="1260" y2="857" stroke="black"/>
+<line x1="1620" y1="829" x2="1620" y2="857" stroke="black"/>
+<line x1="900" y1="840" x2="1260" y2="840" stroke="black"/>
+<polygon fill="black" points="1260,840 1250,846 1250,834"/>
+<polygon fill="white" points="995,830 1164,830 1164,839 995,839"/>
+<text x="996" y="839" textLength="167" font-family="Helvetica" font-size="12" fill="black">
+BSSMAP CIPH MODE COMPL
+</text>
+<line x1="180" y1="857" x2="180" y2="885" stroke="black"/>
+<line x1="540" y1="857" x2="540" y2="885" stroke="black"/>
+<line x1="900" y1="857" x2="900" y2="885" stroke="black"/>
+<line x1="1260" y1="857" x2="1260" y2="885" stroke="black"/>
+<line x1="1620" y1="857" x2="1620" y2="885" stroke="black"/>
+<line x1="1260" y1="868" x2="180" y2="868" stroke="black"/>
+<polygon fill="black" points="180,868 190,874 190,862"/>
+<polygon fill="white" points="662,858 777,858 777,867 662,867"/>
+<text x="663" y="867" textLength="113" font-family="Helvetica" font-size="12" fill="black">
+MM LOC UPD RESP
+</text>
+<line x1="180" y1="885" x2="180" y2="913" stroke="black"/>
+<line x1="540" y1="885" x2="540" y2="913" stroke="black"/>
+<line x1="900" y1="885" x2="900" y2="913" stroke="black"/>
+<line x1="1260" y1="885" x2="1260" y2="913" stroke="black"/>
+<line x1="1620" y1="885" x2="1620" y2="913" stroke="black"/>
+<line x1="180" y1="896" x2="1260" y2="896" stroke="black"/>
+<polygon fill="black" points="1260,896 1250,902 1250,890"/>
+<polygon fill="white" points="640,886 799,886 799,895 640,895"/>
+<text x="641" y="895" textLength="157" font-family="Helvetica" font-size="12" fill="black">
+MM TMSI REALLOC COMPL
+</text>
+<line x1="180" y1="913" x2="180" y2="941" stroke="black"/>
+<line x1="540" y1="913" x2="540" y2="941" stroke="black"/>
+<line x1="900" y1="913" x2="900" y2="941" stroke="black"/>
+<line x1="1260" y1="913" x2="1260" y2="941" stroke="black"/>
+<line x1="1620" y1="913" x2="1620" y2="941" stroke="black"/>
+<line x1="1260" y1="924" x2="900" y2="924" stroke="black"/>
+<polygon fill="black" points="900,924 910,930 910,918"/>
+<polygon fill="white" points="1016,914 1142,914 1142,923 1016,923"/>
+<text x="1017" y="923" textLength="124" font-family="Helvetica" font-size="12" fill="black">
+BSSMAP CLEAR CMD
+</text>
+<line x1="180" y1="941" x2="180" y2="969" stroke="black"/>
+<line x1="540" y1="941" x2="540" y2="969" stroke="black"/>
+<line x1="900" y1="941" x2="900" y2="969" stroke="black"/>
+<line x1="1260" y1="941" x2="1260" y2="969" stroke="black"/>
+<line x1="1620" y1="941" x2="1620" y2="969" stroke="black"/>
+<line x1="900" y1="952" x2="540" y2="952" stroke="black"/>
+<polygon fill="black" points="540,952 550,958 550,946"/>
+<polygon fill="white" points="662,942 777,942 777,951 662,951"/>
+<text x="663" y="951" textLength="113" font-family="Helvetica" font-size="12" fill="black">
+RSL SACCH DEACT
+</text>
+<line x1="180" y1="969" x2="180" y2="997" stroke="black"/>
+<line x1="540" y1="969" x2="540" y2="997" stroke="black"/>
+<line x1="900" y1="969" x2="900" y2="997" stroke="black"/>
+<line x1="1260" y1="969" x2="1260" y2="997" stroke="black"/>
+<line x1="1620" y1="969" x2="1620" y2="997" stroke="black"/>
+<line x1="900" y1="980" x2="540" y2="980" stroke="black"/>
+<polygon fill="black" points="540,980 550,986 550,974"/>
+<polygon fill="white" points="675,970 764,970 764,979 675,979"/>
+<text x="676" y="979" textLength="87" font-family="Helvetica" font-size="12" fill="black">
+RSL CHAN REL
+</text>
+<line x1="180" y1="997" x2="180" y2="1025" stroke="black"/>
+<line x1="540" y1="997" x2="540" y2="1025" stroke="black"/>
+<line x1="900" y1="997" x2="900" y2="1025" stroke="black"/>
+<line x1="1260" y1="997" x2="1260" y2="1025" stroke="black"/>
+<line x1="1620" y1="997" x2="1620" y2="1025" stroke="black"/>
+<line x1="540" y1="1008" x2="180" y2="1008" stroke="black"/>
+<polygon fill="black" points="180,1008 190,1014 190,1002"/>
+<polygon fill="white" points="322,998 397,998 397,1007 322,1007"/>
+<text x="323" y="1007" textLength="73" font-family="Helvetica" font-size="12" fill="black">
+LAPDm DISC
+</text>
+<line x1="180" y1="1025" x2="180" y2="1053" stroke="black"/>
+<line x1="540" y1="1025" x2="540" y2="1053" stroke="black"/>
+<line x1="900" y1="1025" x2="900" y2="1053" stroke="black"/>
+<line x1="1260" y1="1025" x2="1260" y2="1053" stroke="black"/>
+<line x1="1620" y1="1025" x2="1620" y2="1053" stroke="black"/>
+<polygon fill="white" points="8,1025 352,1025 352,1047 8,1047"/>
+<line x1="8" y1="1025" x2="352" y2="1025" stroke="black"/>
+<line x1="8" y1="1047" x2="352" y2="1047" stroke="black"/>
+<line x1="8" y1="1025" x2="8" y2="1047" stroke="black"/>
+<line x1="352" y1="1025" x2="352" y2="1047" stroke="black"/>
+<polygon fill="white" points="108,1032 251,1032 251,1041 108,1041"/>
+<text x="109" y="1041" textLength="141" font-family="Helvetica" font-size="12" fill="black">
+Deactivate dedicated chan
+</text>
+<line x1="180" y1="1053" x2="180" y2="1081" stroke="black"/>
+<line x1="540" y1="1053" x2="540" y2="1081" stroke="black"/>
+<line x1="900" y1="1053" x2="900" y2="1081" stroke="black"/>
+<line x1="1260" y1="1053" x2="1260" y2="1081" stroke="black"/>
+<line x1="1620" y1="1053" x2="1620" y2="1081" stroke="black"/>
+<line x1="540" y1="1064" x2="900" y2="1064" stroke="black"/>
+<polygon fill="black" points="900,1064 890,1070 890,1058"/>
+<polygon fill="white" points="661,1054 778,1054 778,1063 661,1063"/>
+<text x="662" y="1063" textLength="115" font-family="Helvetica" font-size="12" fill="black">
+RSL CHAN REL ACK
+</text>
+<line x1="180" y1="1081" x2="180" y2="1109" stroke="black"/>
+<line x1="540" y1="1081" x2="540" y2="1109" stroke="black"/>
+<line x1="900" y1="1081" x2="900" y2="1109" stroke="black"/>
+<line x1="1260" y1="1081" x2="1260" y2="1109" stroke="black"/>
+<line x1="1620" y1="1081" x2="1620" y2="1109" stroke="black"/>
+<polygon fill="white" points="728,1081 1072,1081 1072,1103 728,1103"/>
+<line x1="728" y1="1081" x2="1072" y2="1081" stroke="black"/>
+<line x1="728" y1="1103" x2="1072" y2="1103" stroke="black"/>
+<line x1="728" y1="1081" x2="728" y2="1103" stroke="black"/>
+<line x1="1072" y1="1081" x2="1072" y2="1103" stroke="black"/>
+<polygon fill="white" points="810,1088 989,1088 989,1097 810,1097"/>
+<text x="811" y="1097" textLength="177" font-family="Helvetica" font-size="12" fill="black">
+Mark dedicated channel released
+</text>
+<line x1="180" y1="1109" x2="180" y2="1137" stroke="black"/>
+<line x1="540" y1="1109" x2="540" y2="1137" stroke="black"/>
+<line x1="900" y1="1109" x2="900" y2="1137" stroke="black"/>
+<line x1="1260" y1="1109" x2="1260" y2="1137" stroke="black"/>
+<line x1="1620" y1="1109" x2="1620" y2="1137" stroke="black"/>
+<line x1="900" y1="1120" x2="1260" y2="1120" stroke="black"/>
+<polygon fill="black" points="1260,1120 1250,1126 1250,1114"/>
+<polygon fill="white" points="1009,1110 1150,1110 1150,1119 1009,1119"/>
+<text x="1010" y="1119" textLength="139" font-family="Helvetica" font-size="12" fill="black">
+BSSMAP CLEAR COMPL
+</text>
+<line x1="180" y1="1131" x2="180" y2="1137" stroke="black"/>
+<line x1="540" y1="1131" x2="540" y2="1137" stroke="black"/>
+<line x1="900" y1="1131" x2="900" y2="1137" stroke="black"/>
+<line x1="1260" y1="1131" x2="1260" y2="1137" stroke="black"/>
+<line x1="1620" y1="1131" x2="1620" y2="1137" stroke="black"/>
+</svg>
diff --git a/2018/phone_protocol-eh2018/location_update_l3only.png b/2018/phone_protocol-eh2018/location_update_l3only.png
new file mode 100644
index 0000000..ac621d1
--- /dev/null
+++ b/2018/phone_protocol-eh2018/location_update_l3only.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/location_update_l3only.svg b/2018/phone_protocol-eh2018/location_update_l3only.svg
new file mode 100644
index 0000000..da26e9f
--- /dev/null
+++ b/2018/phone_protocol-eh2018/location_update_l3only.svg
@@ -0,0 +1,215 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1"
+ width="1200px" height="577px"
+ viewBox="0 0 1200 577"
+ xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges"
+ stroke-width="1" text-rendering="geometricPrecision">
+<polygon fill="white" points="185,7 213,7 213,16 185,16"/>
+<text x="200" y="16" textLength="27" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+MSC
+</text>
+<polygon fill="white" points="572,7 626,7 626,16 572,16"/>
+<text x="600" y="16" textLength="53" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+MSC/VLR
+</text>
+<polygon fill="white" points="986,7 1012,7 1012,16 986,16"/>
+<text x="1000" y="16" textLength="24" font-family="Helvetica" font-size="12" fill="black" text-anchor="middle">
+
+HLR
+</text>
+<line x1="200" y1="22" x2="200" y2="39" stroke="black"/>
+<line x1="600" y1="22" x2="600" y2="39" stroke="black"/>
+<line x1="1000" y1="22" x2="1000" y2="39" stroke="black"/>
+<line x1="200" y1="39" x2="200" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="600" y1="39" x2="600" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<line x1="1000" y1="39" x2="1000" y2="56" stroke="black" stroke-dasharray="2,2"/>
+<polygon fill="white" points="514,40 684,40 684,49 514,49"/>
+<text x="515" y="49" textLength="168" font-family="Helvetica" font-size="12" fill="black">
+GSM Location Update (L3 only)
+</text>
+<line x1="200" y1="56" x2="200" y2="73" stroke="black"/>
+<line x1="600" y1="56" x2="600" y2="73" stroke="black"/>
+<line x1="1000" y1="56" x2="1000" y2="73" stroke="black"/>
+<line x1="200" y1="73" x2="200" y2="101" stroke="black"/>
+<line x1="600" y1="73" x2="600" y2="101" stroke="black"/>
+<line x1="1000" y1="73" x2="1000" y2="101" stroke="black"/>
+<line x1="200" y1="84" x2="600" y2="84" stroke="black"/>
+<polygon fill="black" points="600,84 590,90 590,78"/>
+<polygon fill="white" points="345,74 453,74 453,83 345,83"/>
+<text x="346" y="83" textLength="106" font-family="Helvetica" font-size="12" fill="black">
+MM LOC UPD REQ
+</text>
+<line x1="200" y1="101" x2="200" y2="129" stroke="black"/>
+<line x1="600" y1="101" x2="600" y2="129" stroke="black"/>
+<line x1="1000" y1="101" x2="1000" y2="129" stroke="black"/>
+<polygon fill="white" points="14,101 786,101 786,123 14,123"/>
+<polygon fill="white" points="8,107 792,107 792,117 8,117"/>
+<circle fill="white" cx="14" cy="107" r="6"/>
+<circle fill="white" cx="786" cy="107" r="6"/>
+<circle fill="white" cx="14" cy="117" r="6"/>
+<circle fill="white" cx="786" cy="117" r="6"/>
+<line x1="14" y1="101" x2="786" y2="101" stroke="black"/>
+<line x1="14" y1="123" x2="786" y2="123" stroke="black"/>
+<line x1="8" y1="107" x2="8" y2="117" stroke="black"/>
+<line x1="792" y1="107" x2="792" y2="117" stroke="black"/>
+<path d="M 8 107 A6,6 0 0,1 14,101" stroke="black" fill="none"/><path d="M 786 101 A6,6 0 0,1 792,107" stroke="black" fill="none"/><path d="M 792 117 A6,6 0 0,1 786,123" stroke="black" fill="none"/><path d="M 14 123 A6,6 0 0,1 8,117" stroke="black" fill="none"/><polygon fill="white" points="207,108 592,108 592,117 207,117"/>
+<text x="208" y="117" textLength="383" font-family="Helvetica" font-size="12" fill="black">
+optional: MM IDENTITY REQ + RESP (IMSI) if MSC doesn't know TMSI
+</text>
+<line x1="200" y1="129" x2="200" y2="157" stroke="black"/>
+<line x1="600" y1="129" x2="600" y2="157" stroke="black"/>
+<line x1="1000" y1="129" x2="1000" y2="157" stroke="black"/>
+<line x1="600" y1="140" x2="1000" y2="140" stroke="black"/>
+<polygon fill="black" points="1000,140 990,146 990,134"/>
+<polygon fill="white" points="723,130 876,130 876,139 723,139"/>
+<text x="724" y="139" textLength="151" font-family="Helvetica" font-size="12" fill="black">
+MAP SEND AUTH INFO req
+</text>
+<line x1="200" y1="157" x2="200" y2="185" stroke="black"/>
+<line x1="600" y1="157" x2="600" y2="185" stroke="black"/>
+<line x1="1000" y1="157" x2="1000" y2="185" stroke="black"/>
+<polygon fill="white" points="808,157 1192,157 1192,179 808,179"/>
+<line x1="808" y1="157" x2="1192" y2="157" stroke="black"/>
+<line x1="808" y1="179" x2="1192" y2="179" stroke="black"/>
+<line x1="808" y1="157" x2="808" y2="179" stroke="black"/>
+<line x1="1192" y1="157" x2="1192" y2="179" stroke="black"/>
+<polygon fill="white" points="940,164 1059,164 1059,173 940,173"/>
+<text x="941" y="173" textLength="117" font-family="Helvetica" font-size="12" fill="black">
+Generate Auth Tuples
+</text>
+<line x1="200" y1="185" x2="200" y2="213" stroke="black"/>
+<line x1="600" y1="185" x2="600" y2="213" stroke="black"/>
+<line x1="1000" y1="185" x2="1000" y2="213" stroke="black"/>
+<line x1="1000" y1="196" x2="600" y2="196" stroke="black"/>
+<polygon fill="black" points="600,196 610,202 610,190"/>
+<polygon fill="white" points="720,186 879,186 879,195 720,195"/>
+<text x="721" y="195" textLength="157" font-family="Helvetica" font-size="12" fill="black">
+MAP SEND AUTH INFO resp
+</text>
+<line x1="200" y1="213" x2="200" y2="241" stroke="black"/>
+<line x1="600" y1="213" x2="600" y2="241" stroke="black"/>
+<line x1="1000" y1="213" x2="1000" y2="241" stroke="black"/>
+<line x1="600" y1="224" x2="200" y2="224" stroke="black"/>
+<polygon fill="black" points="200,224 210,230 210,218"/>
+<polygon fill="white" points="333,214 466,214 466,223 333,223"/>
+<text x="334" y="223" textLength="131" font-family="Helvetica" font-size="12" fill="black">
+MM AUTH REQ (RAND)
+</text>
+<line x1="200" y1="241" x2="200" y2="269" stroke="black"/>
+<line x1="600" y1="241" x2="600" y2="269" stroke="black"/>
+<line x1="1000" y1="241" x2="1000" y2="269" stroke="black"/>
+<line x1="200" y1="252" x2="600" y2="252" stroke="black"/>
+<polygon fill="black" points="600,252 590,258 590,246"/>
+<polygon fill="white" points="330,242 468,242 468,251 330,251"/>
+<text x="331" y="251" textLength="136" font-family="Helvetica" font-size="12" fill="black">
+MM AUTH RESP (SRES)
+</text>
+<line x1="200" y1="269" x2="200" y2="297" stroke="black"/>
+<line x1="600" y1="269" x2="600" y2="297" stroke="black"/>
+<line x1="1000" y1="269" x2="1000" y2="297" stroke="black"/>
+<polygon fill="white" points="408,269 792,269 792,291 408,291"/>
+<line x1="408" y1="269" x2="792" y2="269" stroke="black"/>
+<line x1="408" y1="291" x2="792" y2="291" stroke="black"/>
+<line x1="408" y1="269" x2="408" y2="291" stroke="black"/>
+<line x1="792" y1="269" x2="792" y2="291" stroke="black"/>
+<polygon fill="white" points="521,276 677,276 677,285 521,285"/>
+<text x="522" y="285" textLength="154" font-family="Helvetica" font-size="12" fill="black">
+SRES(MS) == SRES(HLR) ?
+</text>
+<line x1="200" y1="297" x2="200" y2="325" stroke="black"/>
+<line x1="600" y1="297" x2="600" y2="325" stroke="black"/>
+<line x1="1000" y1="297" x2="1000" y2="325" stroke="black"/>
+<line x1="600" y1="308" x2="1000" y2="308" stroke="black"/>
+<polygon fill="black" points="1000,308 990,314 990,302"/>
+<polygon fill="white" points="729,298 870,298 870,307 729,307"/>
+<text x="730" y="307" textLength="139" font-family="Helvetica" font-size="12" fill="black">
+MAP UPD LOC AREA req
+</text>
+<line x1="200" y1="325" x2="200" y2="353" stroke="black"/>
+<line x1="600" y1="325" x2="600" y2="353" stroke="black"/>
+<line x1="1000" y1="325" x2="1000" y2="353" stroke="black"/>
+<line x1="1000" y1="336" x2="600" y2="336" stroke="black"/>
+<polygon fill="black" points="600,336 610,342 610,330"/>
+<polygon fill="white" points="707,326 892,326 892,335 707,335"/>
+<text x="708" y="335" textLength="183" font-family="Helvetica" font-size="12" fill="black">
+MAP INSERT SUBSCR DATA req
+</text>
+<line x1="200" y1="353" x2="200" y2="381" stroke="black"/>
+<line x1="600" y1="353" x2="600" y2="381" stroke="black"/>
+<line x1="1000" y1="353" x2="1000" y2="381" stroke="black"/>
+<line x1="600" y1="364" x2="1000" y2="364" stroke="black"/>
+<polygon fill="black" points="1000,364 990,370 990,358"/>
+<polygon fill="white" points="704,354 895,354 895,363 704,363"/>
+<text x="705" y="363" textLength="189" font-family="Helvetica" font-size="12" fill="black">
+MAP INSERT SUBSCR DATA resp
+</text>
+<line x1="200" y1="381" x2="200" y2="409" stroke="black"/>
+<line x1="600" y1="381" x2="600" y2="409" stroke="black"/>
+<line x1="1000" y1="381" x2="1000" y2="409" stroke="black"/>
+<line x1="1000" y1="392" x2="600" y2="392" stroke="black"/>
+<polygon fill="black" points="600,392 610,398 610,386"/>
+<polygon fill="white" points="726,382 873,382 873,391 726,391"/>
+<text x="727" y="391" textLength="145" font-family="Helvetica" font-size="12" fill="black">
+MAP UPD LOC AREA resp
+</text>
+<line x1="200" y1="409" x2="200" y2="437" stroke="black"/>
+<line x1="600" y1="409" x2="600" y2="437" stroke="black"/>
+<line x1="1000" y1="409" x2="1000" y2="437" stroke="black"/>
+<line x1="600" y1="420" x2="200" y2="420" stroke="black"/>
+<polygon fill="black" points="200,420 210,426 210,414"/>
+<polygon fill="white" points="353,410 446,410 446,419 353,419"/>
+<text x="354" y="419" textLength="91" font-family="Helvetica" font-size="12" fill="black">
+CIPH MOD CMD
+</text>
+<line x1="200" y1="437" x2="200" y2="465" stroke="black"/>
+<line x1="600" y1="437" x2="600" y2="465" stroke="black"/>
+<line x1="1000" y1="437" x2="1000" y2="465" stroke="black"/>
+<line x1="200" y1="448" x2="600" y2="448" stroke="black"/>
+<polygon fill="black" points="600,448 590,454 590,442"/>
+<polygon fill="white" points="345,438 453,438 453,447 345,447"/>
+<text x="346" y="447" textLength="106" font-family="Helvetica" font-size="12" fill="black">
+CIPH MOD COMPL
+</text>
+<line x1="200" y1="465" x2="200" y2="493" stroke="black"/>
+<line x1="600" y1="465" x2="600" y2="493" stroke="black"/>
+<line x1="1000" y1="465" x2="1000" y2="493" stroke="black"/>
+<line x1="600" y1="476" x2="200" y2="476" stroke="black"/>
+<polygon fill="black" points="200,476 210,482 210,470"/>
+<polygon fill="white" points="342,466 457,466 457,475 342,475"/>
+<text x="343" y="475" textLength="113" font-family="Helvetica" font-size="12" fill="black">
+MM LOC UPD RESP
+</text>
+<line x1="200" y1="493" x2="200" y2="521" stroke="black"/>
+<line x1="600" y1="493" x2="600" y2="521" stroke="black"/>
+<line x1="1000" y1="493" x2="1000" y2="521" stroke="black"/>
+<line x1="200" y1="504" x2="600" y2="504" stroke="black"/>
+<polygon fill="black" points="600,504 590,510 590,498"/>
+<polygon fill="white" points="320,494 479,494 479,503 320,503"/>
+<text x="321" y="503" textLength="157" font-family="Helvetica" font-size="12" fill="black">
+MM TMSI REALLOC COMPL
+</text>
+<line x1="200" y1="521" x2="200" y2="549" stroke="black"/>
+<line x1="600" y1="521" x2="600" y2="549" stroke="black"/>
+<line x1="1000" y1="521" x2="1000" y2="549" stroke="black"/>
+<line x1="600" y1="532" x2="200" y2="532" stroke="black"/>
+<polygon fill="black" points="200,532 210,538 210,526"/>
+<polygon fill="white" points="363,522 436,522 436,531 363,531"/>
+<text x="364" y="531" textLength="71" font-family="Helvetica" font-size="12" fill="black">
+CLEAR CMD
+</text>
+<line x1="200" y1="549" x2="200" y2="577" stroke="black"/>
+<line x1="600" y1="549" x2="600" y2="577" stroke="black"/>
+<line x1="1000" y1="549" x2="1000" y2="577" stroke="black"/>
+<line x1="200" y1="560" x2="600" y2="560" stroke="black"/>
+<polygon fill="black" points="600,560 590,566 590,554"/>
+<polygon fill="white" points="355,550 443,550 443,559 355,559"/>
+<text x="356" y="559" textLength="86" font-family="Helvetica" font-size="12" fill="black">
+CLEAR COMPL
+</text>
+<line x1="200" y1="571" x2="200" y2="577" stroke="black"/>
+<line x1="600" y1="571" x2="600" y2="577" stroke="black"/>
+<line x1="1000" y1="571" x2="1000" y2="577" stroke="black"/>
+</svg>
diff --git a/2018/phone_protocol-eh2018/phone_powerup.adoc b/2018/phone_protocol-eh2018/phone_powerup.adoc
new file mode 100644
index 0000000..2f592ec
--- /dev/null
+++ b/2018/phone_protocol-eh2018/phone_powerup.adoc
@@ -0,0 +1,256 @@
+What happens on a protocol level when switching on a phone
+==========================================================
+:author: Harald Welte <laforge@gnumonks.org>
+:copyright: 2018 by Harald Welte (License: CC-BY-SA)
+:backend: slidy
+:max-width: 45em
+
+== Introduction
+
+* Everybody uses cellphones and mobile internet these days
+* Still very few people know what's going on, even those with deep TCP/IP understanding
+* Let's try to shed some light on the inner workings on a protocol level
+
+NOTE:: this talk is about 2G (GSM/GPRS/EDGE) and 3G (UMTS/HS*PA) only
+
+== Classic GSM (2G) network as digraph
+
+[graphviz]
+----
+digraph G {
+ rankdir=LR;
+ MS0 [label="MS\n(Phone)"]
+ MS1 [label="MS\n(Phone)"]
+ MS2 [label="MS\n(Phone)"]
+ MS3 [label="MS\n(Phone)"]
+ BTS0 [label="BTS\n(Cell)"]
+ BTS1 [label="BTS\n(Cell)"]
+ MSC [label="MSC/VLR"]
+ HLR [label="HLR/AUC"]
+ MS0->BTS0 [label="Um"]
+ MS1->BTS0 [label="Um"]
+ MS2->BTS1 [label="Um"]
+ MS3->BTS1 [label="Um"]
+ BTS0->BSC [label="Abis"]
+ BTS1->BSC [label="Abis"]
+ BSC->MSC [label="A"]
+ MSC->HLR [label="C"]
+}
+----
+
+== Powering up the phone
+
+* Your various processors / cores boot up
+* Hardware gets initialized
+* We will look at the cellular related activity only here
+* Registering to a Cellular network can take *ages* at times. Why is that?
+
+== Network Selection (2G): RF Power Scan
+
+* GSM has many narrow-band channels/frequencies (ARFCN = Absolute Radio Frequency Channel Number):
+** 123 ARFCN in 850 MHz
+** 173 ARFCN in 900 MHz
+** 373 ARFCN in 1800 MHz
+** 298 ARFCN in 1900 MHz
+** total of 967 ARFCN in a quad-band phone
+
+* The phone performs a (quick) RF power scan over all ARFCN to determine which channels contain how much energy (RxLev, RSSI)
+
+== Network Selection (2G): Freq + Sync burst detection
+
+* the phone picks the channels with highest amount of energy
+* it tries to decode the FCCH (Frequency Correction Channel) to slave its own internal clock (VCTCXO) to the frequency information contained in the FCCH
+* it then moves to the SCH (Synchronization Channel) to determine the current GSM frame number + training sequence code
+* finally, it is aligned with both the *carrier frequency*, and knows where in the *time division multiplex* frame/multiframe the BTS (Cell) currently transmits
+
+== Network Selection (2G): BCCH decode
+
+* After Frequency and Sync burst detection, the phone moves to BCCH (Broadcast Common Control Channel)
+* The BCCH contains a loop of repeated broadcasts of so-called *SYSTEM INFORMATION* messages
+* There are many different *SYSTEM INFORMATION TYPEs* which are repeatedly iterated over
+* SYSTEM INFORMATION (SI) 3 and 4 contain, among other things MCC + MNC information
+** MCC: Mobile Country Code (262 for Germany)
+** MNC: Mobile Network Code (01 for T-Mobile, 02 for Vodafone, 03 for E-Plus, ...)
+* Now the phone knows to which operator the cell broadcasting on this ARFCN
+* The process of FCCH + SCH alignment with successive BCCH decoding is repeated for a number of strong signal ARFCNs to create a list of "available networks"
+** this is the output of what you see when you do a *manual network search* on your phone
+*** the numeric MCC/MNC is typically translated in a string name based on a mapping table in the phone firmware, possibly extended by information on the SIM (EF.PNN, EF.OPL)
+
+== Network Selection: Which Network to register
+
+* Assuming we have a list of ARFCN <-> MCC+MNC, which network do we choose?
+** if manual network selection: use whatever the user has chosen
+** we assume automatic network selection below
+* If the cell-advertised MCC+MNC matches the IMSI prefix, it is the home network
+** home network trumps everything else
+* SIM / USIM contains various lists which operators use to control selection policy in roaming
+** EF.PLMNsel (PLMN Selector)
+** EF.PLMNwAcT (User-controlled PLMN Selector with Access Technology)
+** EF.HPPLMN (Higher Priority PLMN)
+** EF.FPLMN (Forbidden PLMNs)
+** EF.OPLMNwACT (Operator-controlled LMN Selector with Access Technology)
+** EF.HPLMNwAcT (Home PLMN Selector with Access Technology)
+** EF.EHPLMN (Equivalent HPLMN)
+* finally, MS will select a (first) cell to attempt registration.
+
+== Cell Selection State Machine
+
+image::gsm_cell_selection.png[]
+
+== Registering to a network: LOCATION UPDATE
+
+* *LOCATION UPDATE* is a key transaction on the MM-sublayer of the Layer3 of the 2G/3G protocol stack
+* it is used to update the location/presence information of the network
+* there are variants:
+** IMSI ATTACH is used for initial registration at power-up (our case here)
+** NORMAL is an update triggered by a change of location (arae code) as the user moves around the coverage
+** PERIODIC is used when a timer expires, similar to a 'keep alive' in many protocols
+* the *MM LOCATION UPDATE* on the Um/Abis/A interface up to the MSC is translated into a *MAP UpdateLocation* towards the HLR (central subscriber database)
+* authentication procedure may (should!) follow to cryptographically verify identity of subscriber
+* finally, the network either sends a *MM LOCATION UPDATE ACCEPT* or *MM LOCATION UPDATE REJECT*
+
+== GSM Control Plane Protocol Stack
+
+image::gsm_control_stack.svg[width="100%"]
+
+== LOCATION UPDATE: Layer 3 Only
+
+image::location_update_l3only.png[]
+
+== LOCATION UPDATE: Ladder Diagram
+
+image::location_update.png[]
+
+== GPRS for packet switched servics
+
+[graphviz]
+----
+digraph G {
+ rankdir=LR;
+ MS0 [label="MS\n(Phone)"]
+ MS1 [label="MS\n(Phone)"]
+ MS2 [label="MS\n(Phone)"]
+ MS3 [label="MS\n(Phone)"]
+ BTS0 [label="BTS\n(Cell)"]
+ BTS1 [label="BTS\n(Cell)"]
+ MSC [label="MSC/VLR"]
+ HLR [label="HLR/AUC"]
+ MS0->BTS0 [label="Um"]
+ MS1->BTS0 [label="Um"]
+ MS2->BTS1 [label="Um"]
+ MS3->BTS1 [label="Um"]
+ BTS0->BSC [label="Abis"]
+ BTS1->BSC [label="Abis"]
+ BSC->MSC [label="A"]
+ MSC->HLR [label="C"]
+ BTS0->PCU [color="red"]
+ BTS1->PCU [color="red"]
+ //subgraph cluster_PS {
+ PCU [color="red"];
+ SGSN [color="red"];
+ GGSN [color="red"];
+ Internet [color="red"];
+ PCU->SGSN [label="Gb",color="red"]
+ SGSN->GGSN [label="Gp",color="red"]
+ GGSN->Internet [label="Gi",color="red"]
+ // }
+}
+----
+
+
+== Registering for packet switched services: GPRS ATTACH
+
+* packet-switched services were added about a decade after circuit-switched
+** hence, packet-switched attach is traditionally independent of circuit-switched attach
+* GPRS ATTACH is performed from MS to SGSN
+** it's called GPRS ATTACH even for EDGE or even UMTS
+
+== GPRS Control Plane Protocol Stack
+
+image::gprs_control_stack.svg[width="100%"]
+
+== GPRS ATTACH: Ladder Diagram
+
+image::gprs_attach.png[width="100%"]
+
+== Establishing a PDP Context
+
+* in order to exchange user-IP data with the public Internet, a tunnel must be established over the entire GSM/GPRS/UMTS infrastructure
+** one Tunnel end is inside the phone
+** other end is in the GGSN (Gateway GPRS Support Node)
+** it's a true point-to-point link, no netmask/broadcast/arp/link-layer
+** if PPP is involved, this is only between the phone/modem baseband processor and the external computer
+* IP address allocation + DNS server addresses exchanged via *protocol control options (PCO)* inside PDP
+ context activation
+* phone sends *PDP CONTEXT ACTIVATE* to network (SGSN)
+* network (SGSN) responds with *PDP CONTEXT ACTIVATE ACK* in succesful case
+* user IP data may now be exchanged
+
+== PDP CONTEXT ACT: Ladder Diagram
+
+image::gprs_pdp_ctx_act.png[width="100%"]
+
+== Classic UMTS (3G) network as digraph
+
+[graphviz]
+----
+digraph G {
+ rankdir=LR;
+ MS0 [label="UE\n(Phone)"]
+ MS1 [label="UE\n(Phone)"]
+ MS2 [label="UE\n(Phone)"]
+ MS3 [label="UE\n(Phone)"]
+ BTS0 [label="NodeB\n(Cell)"]
+ BTS1 [label="NodeB\n(Cell)"]
+ BSC [label="RNC"];
+ MSC [label="MSC/VLR"]
+ HLR [label="HLR/AUC"]
+ MS0->BTS0 [label="Uu"]
+ MS1->BTS0 [label="Uu"]
+ MS2->BTS1 [label="Uu"]
+ MS3->BTS1 [label="Uu"]
+ BTS0->BSC [label="Iub"]
+ BTS1->BSC [label="Iub"]
+ BSC->MSC [label="Iu-CS"]
+ SGSN [color="red"]
+ GGSN [color="red"]
+ Internet [color="red"]
+ BSC->SGSN [label="Iu-PS",color="red"]
+ SGSN->GGSN [label="Gp",color="red"]
+ SGSN->HLR [color="red"]
+ GGSN->Internet [label="Gi",color="red"]
+ MSC->HLR [label="C"]
+}
+----
+
+== UMTS (3G) Cell Selection
+
+* differences primarily at physical layer
+** WCDMA instead of TDMA (GSM)
+** RF Channels are 5MHz wide, so many less RF channels to scan
+** however, MS (now called UE) has to search in code-space, as many cells on same frequency channel
+
+== UMTS (3G) Cell Selection
+
+image::umts_cell_selection.png[]
+
+== UMTS (3G) Cell Selection
+
+* Layer 3 is almost identical to GSM
+* *MM LOCATION UPDATE (Type: IMSI ATTACH)* between MS(UE) and MSC
+* *PS ATTACH* between MS(UE) and SGSN
+* *PDP CONTEXT ACTIVATION* between MS(UE) and SGSN
+
+== Further Reading
+
+* Die GSM Dm-Kanaele im Dialog, Prf. Dr. Joachim Goeller, http://www.informatik.hu-berlin.de/~goeller/isdn/DieGSMDmKanaele.pdf
+* The GSM Dm-Channels (english version), http://www.informatik.hu-berlin.de/~goeller/isdn/GSMDmChannels.pdf
+* 3GPP TS 43.022: "Functions related to Mobile Station in idle mode and
+ group receive mode" http://www.3gpp.org/DynaReport/43022.htm (GSM/GPRS)
+* 3GPP TS 25.304 "User Equipment (UE) procedures in idle mode and
+ procedures for cell reselection in connected mode"
+ http://www.3gpp.org/DynaReport/25304.htm (UMTS_
+
+== EOF
+
+End of File
diff --git a/2018/phone_protocol-eh2018/phone_powerup.html b/2018/phone_protocol-eh2018/phone_powerup.html
new file mode 100644
index 0000000..9992a60
--- /dev/null
+++ b/2018/phone_protocol-eh2018/phone_powerup.html
@@ -0,0 +1,4459 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<title>What happens on a protocol level when switching on a phone</title>
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
+<meta name="copyright" content="Copyright &#169; 2018 by Harald Welte (License: CC-BY-SA)" />
+<meta name="generator" content="AsciiDoc 8.6.10" />
+<style type="text/css">
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
+
+/* Default font. */
+body {
+ font-family: Georgia,serif;
+}
+
+/* Title font. */
+h1, h2, h3, h4, h5, h6,
+div.title, caption.title,
+thead, p.table.header,
+#toctitle,
+#author, #revnumber, #revdate, #revremark,
+#footer {
+ font-family: Arial,Helvetica,sans-serif;
+}
+
+body {
+ margin: 1em 5% 1em 5%;
+}
+
+a {
+ color: blue;
+ text-decoration: underline;
+}
+a:visited {
+ color: fuchsia;
+}
+
+em {
+ font-style: italic;
+ color: navy;
+}
+
+strong {
+ font-weight: bold;
+ color: #083194;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #527bbd;
+ margin-top: 1.2em;
+ margin-bottom: 0.5em;
+ line-height: 1.3;
+}
+
+h1, h2, h3 {
+ border-bottom: 2px solid silver;
+}
+h2 {
+ padding-top: 0.5em;
+}
+h3 {
+ float: left;
+}
+h3 + * {
+ clear: left;
+}
+h5 {
+ font-size: 1.0em;
+}
+
+div.sectionbody {
+ margin-left: 0;
+}
+
+hr {
+ border: 1px solid silver;
+}
+
+p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+ul, ol, li > p {
+ margin-top: 0;
+}
+ul > li { color: #aaa; }
+ul > li > * { color: black; }
+
+.monospaced, code, pre {
+ font-family: "Courier New", Courier, monospace;
+ font-size: inherit;
+ color: navy;
+ padding: 0;
+ margin: 0;
+}
+pre {
+ white-space: pre-wrap;
+}
+
+#author {
+ color: #527bbd;
+ font-weight: bold;
+ font-size: 1.1em;
+}
+#email {
+}
+#revnumber, #revdate, #revremark {
+}
+
+#footer {
+ font-size: small;
+ border-top: 2px solid silver;
+ padding-top: 0.5em;
+ margin-top: 4.0em;
+}
+#footer-text {
+ float: left;
+ padding-bottom: 0.5em;
+}
+#footer-badges {
+ float: right;
+ padding-bottom: 0.5em;
+}
+
+#preamble {
+ margin-top: 1.5em;
+ margin-bottom: 1.5em;
+}
+div.imageblock, div.exampleblock, div.verseblock,
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
+div.admonitionblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
+}
+div.admonitionblock {
+ margin-top: 2.0em;
+ margin-bottom: 2.0em;
+ margin-right: 10%;
+ color: #606060;
+}
+
+div.content { /* Block element content. */
+ padding: 0;
+}
+
+/* Block element titles. */
+div.title, caption.title {
+ color: #527bbd;
+ font-weight: bold;
+ text-align: left;
+ margin-top: 1.0em;
+ margin-bottom: 0.5em;
+}
+div.title + * {
+ margin-top: 0;
+}
+
+td div.title:first-child {
+ margin-top: 0.0em;
+}
+div.content div.title:first-child {
+ margin-top: 0.0em;
+}
+div.content + div.title {
+ margin-top: 0.0em;
+}
+
+div.sidebarblock > div.content {
+ background: #ffffee;
+ border: 1px solid #dddddd;
+ border-left: 4px solid #f0f0f0;
+ padding: 0.5em;
+}
+
+div.listingblock > div.content {
+ border: 1px solid #dddddd;
+ border-left: 5px solid #f0f0f0;
+ background: #f8f8f8;
+ padding: 0.5em;
+}
+
+div.quoteblock, div.verseblock {
+ padding-left: 1.0em;
+ margin-left: 1.0em;
+ margin-right: 10%;
+ border-left: 5px solid #f0f0f0;
+ color: #888;
+}
+
+div.quoteblock > div.attribution {
+ padding-top: 0.5em;
+ text-align: right;
+}
+
+div.verseblock > pre.content {
+ font-family: inherit;
+ font-size: inherit;
+}
+div.verseblock > div.attribution {
+ padding-top: 0.75em;
+ text-align: left;
+}
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
+div.verseblock + div.attribution {
+ text-align: left;
+}
+
+div.admonitionblock .icon {
+ vertical-align: top;
+ font-size: 1.1em;
+ font-weight: bold;
+ text-decoration: underline;
+ color: #527bbd;
+ padding-right: 0.5em;
+}
+div.admonitionblock td.content {
+ padding-left: 0.5em;
+ border-left: 3px solid #dddddd;
+}
+
+div.exampleblock > div.content {
+ border-left: 3px solid #dddddd;
+ padding-left: 0.5em;
+}
+
+div.imageblock div.content { padding-left: 0; }
+span.image img { border-style: none; vertical-align: text-bottom; }
+a.image:visited { color: white; }
+
+dl {
+ margin-top: 0.8em;
+ margin-bottom: 0.8em;
+}
+dt {
+ margin-top: 0.5em;
+ margin-bottom: 0;
+ font-style: normal;
+ color: navy;
+}
+dd > *:first-child {
+ margin-top: 0.1em;
+}
+
+ul, ol {
+ list-style-position: outside;
+}
+ol.arabic {
+ list-style-type: decimal;
+}
+ol.loweralpha {
+ list-style-type: lower-alpha;
+}
+ol.upperalpha {
+ list-style-type: upper-alpha;
+}
+ol.lowerroman {
+ list-style-type: lower-roman;
+}
+ol.upperroman {
+ list-style-type: upper-roman;
+}
+
+div.compact ul, div.compact ol,
+div.compact p, div.compact p,
+div.compact div, div.compact div {
+ margin-top: 0.1em;
+ margin-bottom: 0.1em;
+}
+
+tfoot {
+ font-weight: bold;
+}
+td > div.verse {
+ white-space: pre;
+}
+
+div.hdlist {
+ margin-top: 0.8em;
+ margin-bottom: 0.8em;
+}
+div.hdlist tr {
+ padding-bottom: 15px;
+}
+dt.hdlist1.strong, td.hdlist1.strong {
+ font-weight: bold;
+}
+td.hdlist1 {
+ vertical-align: top;
+ font-style: normal;
+ padding-right: 0.8em;
+ color: navy;
+}
+td.hdlist2 {
+ vertical-align: top;
+}
+div.hdlist.compact tr {
+ margin: 0;
+ padding-bottom: 0;
+}
+
+.comment {
+ background: yellow;
+}
+
+.footnote, .footnoteref {
+ font-size: 0.8em;
+}
+
+span.footnote, span.footnoteref {
+ vertical-align: super;
+}
+
+#footnotes {
+ margin: 20px 0 20px 0;
+ padding: 7px 0 0 0;
+}
+
+#footnotes div.footnote {
+ margin: 0 0 5px 0;
+}
+
+#footnotes hr {
+ border: none;
+ border-top: 1px solid silver;
+ height: 1px;
+ text-align: left;
+ margin-left: 0;
+ width: 20%;
+ min-width: 100px;
+}
+
+div.colist td {
+ padding-right: 0.5em;
+ padding-bottom: 0.3em;
+ vertical-align: top;
+}
+div.colist td img {
+ margin-top: 0.3em;
+}
+
+@media print {
+ #footer-badges { display: none; }
+}
+
+#toc {
+ margin-bottom: 2.5em;
+}
+
+#toctitle {
+ color: #527bbd;
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 1.0em;
+ margin-bottom: 0.1em;
+}
+
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+div.toclevel2 {
+ margin-left: 2em;
+ font-size: 0.9em;
+}
+div.toclevel3 {
+ margin-left: 4em;
+ font-size: 0.9em;
+}
+div.toclevel4 {
+ margin-left: 6em;
+ font-size: 0.9em;
+}
+
+span.aqua { color: aqua; }
+span.black { color: black; }
+span.blue { color: blue; }
+span.fuchsia { color: fuchsia; }
+span.gray { color: gray; }
+span.green { color: green; }
+span.lime { color: lime; }
+span.maroon { color: maroon; }
+span.navy { color: navy; }
+span.olive { color: olive; }
+span.purple { color: purple; }
+span.red { color: red; }
+span.silver { color: silver; }
+span.teal { color: teal; }
+span.white { color: white; }
+span.yellow { color: yellow; }
+
+span.aqua-background { background: aqua; }
+span.black-background { background: black; }
+span.blue-background { background: blue; }
+span.fuchsia-background { background: fuchsia; }
+span.gray-background { background: gray; }
+span.green-background { background: green; }
+span.lime-background { background: lime; }
+span.maroon-background { background: maroon; }
+span.navy-background { background: navy; }
+span.olive-background { background: olive; }
+span.purple-background { background: purple; }
+span.red-background { background: red; }
+span.silver-background { background: silver; }
+span.teal-background { background: teal; }
+span.white-background { background: white; }
+span.yellow-background { background: yellow; }
+
+span.big { font-size: 2em; }
+span.small { font-size: 0.6em; }
+
+span.underline { text-decoration: underline; }
+span.overline { text-decoration: overline; }
+span.line-through { text-decoration: line-through; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+
+/*
+ * xhtml11 specific
+ *
+ * */
+
+div.tableblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
+}
+div.tableblock > table {
+ border: 3px solid #527bbd;
+}
+thead, p.table.header {
+ font-weight: bold;
+ color: #527bbd;
+}
+p.table {
+ margin-top: 0;
+}
+/* Because the table frame attribute is overriden by CSS in most browsers. */
+div.tableblock > table[frame="void"] {
+ border-style: none;
+}
+div.tableblock > table[frame="hsides"] {
+ border-left-style: none;
+ border-right-style: none;
+}
+div.tableblock > table[frame="vsides"] {
+ border-top-style: none;
+ border-bottom-style: none;
+}
+
+
+/*
+ * html5 specific
+ *
+ * */
+
+table.tableblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
+}
+thead, p.tableblock.header {
+ font-weight: bold;
+ color: #527bbd;
+}
+p.tableblock {
+ margin-top: 0;
+}
+table.tableblock {
+ border-width: 3px;
+ border-spacing: 0px;
+ border-style: solid;
+ border-color: #527bbd;
+ border-collapse: collapse;
+}
+th.tableblock, td.tableblock {
+ border-width: 1px;
+ padding: 4px;
+ border-style: solid;
+ border-color: #527bbd;
+}
+
+table.tableblock.frame-topbot {
+ border-left-style: hidden;
+ border-right-style: hidden;
+}
+table.tableblock.frame-sides {
+ border-top-style: hidden;
+ border-bottom-style: hidden;
+}
+table.tableblock.frame-none {
+ border-style: hidden;
+}
+
+th.tableblock.halign-left, td.tableblock.halign-left {
+ text-align: left;
+}
+th.tableblock.halign-center, td.tableblock.halign-center {
+ text-align: center;
+}
+th.tableblock.halign-right, td.tableblock.halign-right {
+ text-align: right;
+}
+
+th.tableblock.valign-top, td.tableblock.valign-top {
+ vertical-align: top;
+}
+th.tableblock.valign-middle, td.tableblock.valign-middle {
+ vertical-align: middle;
+}
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {
+ vertical-align: bottom;
+}
+
+
+/*
+ * manpage specific
+ *
+ * */
+
+body.manpage h1 {
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+ border-top: 2px solid silver;
+ border-bottom: 2px solid silver;
+}
+body.manpage h2 {
+ border-style: none;
+}
+body.manpage div.sectionbody {
+ margin-left: 3em;
+}
+
+@media print {
+ body.manpage div#toc { display: none; }
+}
+/* slidy.css
+
+ Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
+ W3C liability, trademark, document use and software licensing
+ rules apply, see:
+
+ http://www.w3.org/Consortium/Legal/copyright-documents
+ http://www.w3.org/Consortium/Legal/copyright-software
+*/
+
+/*
+ SJR: 2010-09-29: Modified for AsciiDoc slidy backend.
+ Mostly just commented out stuff that is handled by AsciiDoc's CSS files.
+*/
+
+body
+{
+ margin: 0 0 0 0;
+ padding: 0 0 0 0;
+ width: 100%;
+ height: 100%;
+ color: black;
+ background-color: white;
+/*
+ font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif;
+*/
+ font-size: 14pt;
+}
+
+div.toolbar {
+ position: fixed; z-index: 200;
+ top: auto; bottom: 0; left: 0; right: 0;
+ height: 1.2em; text-align: right;
+ padding-left: 1em;
+ padding-right: 1em;
+ font-size: 60%;
+ color: red;
+ background-color: rgb(240,240,240);
+ border-top: solid 1px rgb(180,180,180);
+}
+
+div.toolbar span.copyright {
+ color: black;
+ margin-left: 0.5em;
+}
+
+div.initial_prompt {
+ position: absolute;
+ z-index: 1000;
+ bottom: 1.2em;
+ width: 90%;
+ background-color: rgb(200,200,200);
+ opacity: 0.35;
+ background-color: rgb(200,200,200, 0.35);
+ cursor: pointer;
+}
+
+div.initial_prompt p.help {
+ text-align: center;
+}
+
+div.initial_prompt p.close {
+ text-align: right;
+ font-style: italic;
+}
+
+div.slidy_toc {
+ position: absolute;
+ z-index: 300;
+ width: 60%;
+ max-width: 30em;
+ height: 30em;
+ overflow: auto;
+ top: auto;
+ right: auto;
+ left: 4em;
+ bottom: 4em;
+ padding: 1em;
+ background: rgb(240,240,240);
+ border-style: solid;
+ border-width: 2px;
+ font-size: 60%;
+}
+
+div.slidy_toc .toc_heading {
+ text-align: center;
+ width: 100%;
+ margin: 0;
+ margin-bottom: 1em;
+ border-bottom-style: solid;
+ border-bottom-color: rgb(180,180,180);
+ border-bottom-width: 1px;
+}
+
+div.slide {
+ z-index: 20;
+ margin: 0 0 0 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: 20px;
+ padding-right: 20px;
+ border-width: 0;
+ clear: both;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ line-height: 120%;
+ background-color: transparent;
+}
+
+div.background {
+ display: none;
+}
+
+div.handout {
+ margin-left: 20px;
+ margin-right: 20px;
+}
+
+div.slide.titlepage {
+ text-align: center;
+}
+
+div.slide.titlepage.h1 {
+ padding-top: 10%;
+}
+
+div.slide h1 {
+ padding-left: 0;
+ padding-right: 20pt;
+ padding-top: 4pt;
+ padding-bottom: 4pt;
+ margin-top: 0;
+ margin-left: 0;
+ margin-right: 60pt;
+ margin-bottom: 0.5em;
+ display: block;
+ font-size: 160%;
+ line-height: 1.2em;
+ background: transparent;
+}
+
+div.toc {
+ position: absolute;
+ top: auto;
+ bottom: 4em;
+ left: 4em;
+ right: auto;
+ width: 60%;
+ max-width: 30em;
+ height: 30em;
+ border: solid thin black;
+ padding: 1em;
+ background: rgb(240,240,240);
+ color: black;
+ z-index: 300;
+ overflow: auto;
+ display: block;
+ visibility: visible;
+}
+
+div.toc-heading {
+ width: 100%;
+ border-bottom: solid 1px rgb(180,180,180);
+ margin-bottom: 1em;
+ text-align: center;
+}
+
+/*
+pre {
+ font-size: 80%;
+ font-weight: bold;
+ line-height: 120%;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ padding-left: 1em;
+ padding-right: 1em;
+ border-style: solid;
+ border-left-width: 1em;
+ border-top-width: thin;
+ border-right-width: thin;
+ border-bottom-width: thin;
+ border-color: #95ABD0;
+ color: #00428C;
+ background-color: #E4E5E7;
+}
+*/
+
+/*
+li pre { margin-left: 0; }
+
+blockquote { font-style: italic }
+
+img { background-color: transparent }
+
+p.copyright { font-size: smaller }
+*/
+
+.center { text-align: center }
+.footnote { font-size: smaller; margin-left: 2em; }
+
+/*
+a img { border-width: 0; border-style: none }
+*/
+
+a:visited { color: navy }
+a:link { color: navy }
+a:hover { color: red; text-decoration: underline }
+a:active { color: red; text-decoration: underline }
+
+a {text-decoration: none}
+.navbar a:link {color: white}
+.navbar a:visited {color: yellow}
+.navbar a:active {color: red}
+.navbar a:hover {color: red}
+
+/*
+ul { list-style-type: square; }
+ul ul { list-style-type: disc; }
+ul ul ul { list-style-type: circle; }
+ul ul ul ul { list-style-type: disc; }
+li { margin-left: 0.5em; margin-top: 0.5em; }
+li li { font-size: 85%; font-style: italic }
+li li li { font-size: 85%; font-style: normal }
+*/
+
+div dt
+{
+ margin-left: 0;
+ margin-top: 1em;
+ margin-bottom: 0.5em;
+ font-weight: bold;
+}
+div dd
+{
+ margin-left: 2em;
+ margin-bottom: 0.5em;
+}
+
+
+/*
+p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
+ margin-left: 1em;
+ margin-right: 1em;
+}
+*/
+
+p.subhead { font-weight: bold; margin-top: 2em; }
+
+.smaller { font-size: smaller }
+.bigger { font-size: 130% }
+
+/*
+td,th { padding: 0.2em }
+*/
+
+ul {
+ margin: 0.5em 1.5em 0.5em 1.5em;
+ padding: 0;
+}
+
+ol {
+ margin: 0.5em 1.5em 0.5em 1.5em;
+ padding: 0;
+}
+
+ul { list-style-type: square; }
+ul ul { list-style-type: disc; }
+ul ul ul { list-style-type: circle; }
+ul ul ul ul { list-style-type: disc; }
+
+/*
+ul li {
+ list-style: square;
+ margin: 0.1em 0em 0.6em 0;
+ padding: 0 0 0 0;
+ line-height: 140%;
+}
+
+ol li {
+ margin: 0.1em 0em 0.6em 1.5em;
+ padding: 0 0 0 0px;
+ line-height: 140%;
+ list-style-type: decimal;
+}
+
+li ul li {
+ font-size: 85%;
+ font-style: italic;
+ list-style-type: disc;
+ background: transparent;
+ padding: 0 0 0 0;
+}
+li li ul li {
+ font-size: 85%;
+ font-style: normal;
+ list-style-type: circle;
+ background: transparent;
+ padding: 0 0 0 0;
+}
+li li li ul li {
+ list-style-type: disc;
+ background: transparent;
+ padding: 0 0 0 0;
+}
+
+li ol li {
+ list-style-type: decimal;
+}
+
+
+li li ol li {
+ list-style-type: decimal;
+}
+*/
+
+/*
+ setting class="outline" on ol or ul makes it behave as an
+ ouline list where blocklevel content in li elements is
+ hidden by default and can be expanded or collapsed with
+ mouse click. Set class="expand" on li to override default
+*/
+
+ol.outline li:hover { cursor: pointer }
+ol.outline li.nofold:hover { cursor: default }
+
+ul.outline li:hover { cursor: pointer }
+ul.outline li.nofold:hover { cursor: default }
+
+ol.outline { list-style:decimal; }
+ol.outline ol { list-style-type:lower-alpha }
+
+ol.outline li.nofold {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;
+}
+ol.outline li.unfolded {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;
+}
+ol.outline li.folded {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;
+}
+ol.outline li.unfolded:hover {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;
+}
+ol.outline li.folded:hover {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;
+}
+
+ul.outline li.nofold {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;
+}
+ul.outline li.unfolded {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;
+}
+ul.outline li.folded {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;
+}
+ul.outline li.unfolded:hover {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;
+}
+ul.outline li.folded:hover {
+ padding: 0 0 0 20px;
+ background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;
+}
+
+/* for slides with class "title" in table of contents */
+a.titleslide { font-weight: bold; font-style: italic }
+
+/*
+ hide images for work around for save as bug
+ where browsers fail to save images used by CSS
+*/
+img.hidden { display: none; visibility: hidden }
+div.initial_prompt { display: none; visibility: hidden }
+
+ div.slide {
+ visibility: visible;
+ position: inherit;
+ }
+ div.handout {
+ border-top-style: solid;
+ border-top-width: thin;
+ border-top-color: black;
+ }
+
+@media screen {
+ .hidden { display: none; visibility: visible }
+
+ div.slide.hidden { display: block; visibility: visible }
+ div.handout.hidden { display: block; visibility: visible }
+ div.background { display: none; visibility: hidden }
+ body.single_slide div.initial_prompt { display: block; visibility: visible }
+ body.single_slide div.background { display: block; visibility: visible }
+ body.single_slide div.background.hidden { display: none; visibility: hidden }
+ body.single_slide .invisible { visibility: hidden }
+ body.single_slide .hidden { display: none; visibility: hidden }
+ body.single_slide div.slide { position: absolute }
+ body.single_slide div.handout { display: none; visibility: hidden }
+}
+
+@media print {
+ .hidden { display: block; visibility: visible }
+
+/*
+ div.slide pre { font-size: 60%; padding-left: 0.5em; }
+*/
+ div.toolbar { display: none; visibility: hidden; }
+ div.slidy_toc { display: none; visibility: hidden; }
+ div.background { display: none; visibility: hidden; }
+ div.slide { page-break-before: always }
+ /* :first-child isn't reliable for print media */
+ div.slide.first-slide { page-break-before: avoid }
+}
+
+
+/* SJR: AsciiDoc slidy backend tweaks */
+
+ol, ul {
+ margin: 0.8em 1.5em 0.8em 1.8em;
+}
+li > ul, li > ol {
+ margin-top: 0.5em;
+}
+
+.outline > li.folded,
+.outline > li.unfolded {
+ color: #527bbd;
+}
+ul > li{ color: #aaa; }
+ul > li > *, ol > li > * { color: black; }
+
+li {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+
+</style>
+<script type="text/javascript">
+/*<![CDATA[*/
+/* slidy.js
+
+ Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
+ W3C liability, trademark, document use and software licensing
+ rules apply, see:
+
+ http://www.w3.org/Consortium/Legal/copyright-documents
+ http://www.w3.org/Consortium/Legal/copyright-software
+*/
+
+// the slidy object implementation
+var w3c_slidy = {
+ // classify which kind of browser we're running under
+ ns_pos: (typeof window.pageYOffset!='undefined'),
+ khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false),
+ opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false),
+ ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false),
+ iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false),
+ ie: (typeof document.all != "undefined" && !this.opera),
+ ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1),
+ ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1),
+ ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1),
+ ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1),
+ keyboardless: (this.ipad || this.iphone),
+
+ // are we running as XHTML? (doesn't work on Opera)
+ is_xhtml: /xml/.test(document.contentType),
+
+ slide_number: 0, // integer slide count: 0, 1, 2, ...
+ slide_number_element: null, // element containing slide number
+ slides: [], // set to array of slide div's
+ notes: [], // set to array of handout div's
+ backgrounds: [], // set to array of background div's
+ toolbar: null, // element containing toolbar
+ title: null, // document title
+ last_shown: null, // last incrementally shown item
+ eos: null, // span element for end of slide indicator
+ toc: null, // table of contents
+ outline: null, // outline element with the focus
+ selected_text_len: 0, // length of drag selection on document
+ view_all: 0, // 1 to view all slides + handouts
+ want_toolbar: true, // user preference to show/hide toolbar
+ mouse_click_enabled: true, // enables left click for next slide
+ scroll_hack: 0, // IE work around for position: fixed
+ disable_slide_click: false, // used by clicked anchors
+
+ lang: "en", // updated to language specified by html file
+
+ help_anchor: null, // used for keyboard focus hack in showToolbar()
+ help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html",
+ help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " +
+ "or Pg Up and Pg Dn. Use S and B to change font size.",
+
+ size_index: 0,
+ size_adjustment: 0,
+ sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",
+ "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"),
+
+ // needed for efficient resizing
+ last_width: 0,
+ last_height: 0,
+
+
+ // Needed for cross browser support for relative width/height on
+ // object elements. The work around is to save width/height attributes
+ // and then to recompute absolute width/height dimensions on resizing
+ objects: [],
+
+ // attach initialiation event handlers
+ set_up: function () {
+ var init = function() { w3c_slidy.init(); };
+ if (typeof window.addEventListener != "undefined")
+ window.addEventListener("load", init, false);
+ else
+ window.attachEvent("onload", init);
+ },
+
+ hide_slides: function () {
+ if (document.body && !w3c_slidy.initialized)
+ document.body.style.visibility = "hidden";
+ else
+ setTimeout(w3c_slidy.hide_slides, 50);
+ },
+
+ // hack to persuade IE to compute correct document height
+ // as needed for simulating fixed positioning of toolbar
+ ie_hack: function () {
+ window.resizeBy(0,-1);
+ window.resizeBy(0, 1);
+ },
+
+ init: function () {
+ //alert("slidy starting test 10");
+ document.body.style.visibility = "visible";
+ w3c_slidy_i18n.init();
+ this.add_toolbar();
+ this.wrap_implicit_slides();
+ this.collect_slides();
+ this.collect_notes();
+ this.collect_backgrounds();
+ this.objects = document.body.getElementsByTagName("object");
+ this.patch_anchors();
+ this.slide_number = this.find_slide_number(location.href);
+ window.offscreenbuffering = true;
+ this.size_adjustment = this.find_size_adjust();
+ this.time_left = this.find_duration();
+ this.hide_image_toolbar(); // suppress IE image toolbar popup
+ this.init_outliner(); // activate fold/unfold support
+ this.title = document.title;
+
+ // work around for opera bug
+ this.is_xhtml = (document.body.tagName == "BODY" ? false : true);
+
+ if (this.slides.length > 0)
+ {
+ var slide = this.slides[this.slide_number];
+
+ if (this.slide_number > 0)
+ {
+ this.set_visibility_all_incremental("visible");
+ this.last_shown = this.previous_incremental_item(null);
+ this.set_eos_status(true);
+ }
+ else
+ {
+ this.last_shown = null;
+ this.set_visibility_all_incremental("hidden");
+ this.set_eos_status(!this.next_incremental_item(this.last_shown));
+ }
+
+ this.set_location();
+ this.add_class(this.slides[0], "first-slide");
+ w3c_slidy.show_slide(slide);
+ }
+
+ this.toc = this.table_of_contents();
+
+ this.add_initial_prompt();
+
+ // bind event handlers without interfering with custom page scripts
+ // Tap events behave too weirdly to support clicks reliably on
+ // iPhone and iPad, so exclude these from click handler
+
+ if (!this.keyboardless)
+ this.add_listener(document.body, "click", this.mouse_button_click);
+
+ this.add_listener(document, "keydown", this.key_down);
+ this.add_listener(document, "keypress", this.key_press);
+ this.add_listener(window, "resize", this.resized);
+ this.add_listener(window, "scroll", this.scrolled);
+ this.add_listener(window, "unload", this.unloaded);
+
+ if (!document.body.onclick)
+ document.body.onclick = function () { };
+
+ this.single_slide_view();
+
+ //this.set_location();
+
+ this.resized();
+
+ if (this.ie7)
+ setTimeout(w3c_slidy.ie_hack, 100);
+
+ this.show_toolbar();
+
+ // for back button detection
+ setInterval(function () { w3c_slidy.check_location(); }, 200);
+ w3c_slidy.initialized = true;
+ },
+
+ // create div element with links to each slide
+ table_of_contents: function () {
+ var toc = this.create_element("div");
+ this.add_class(toc, "slidy_toc hidden");
+ //toc.setAttribute("tabindex", "0");
+
+ var heading = this.create_element("div");
+ this.add_class(heading, "toc-heading");
+ heading.innerHTML = "Table of Contents".localize();
+
+ toc.appendChild(heading);
+ var previous = null;
+
+ for (var i = 0; i < this.slides.length; ++i)
+ {
+ var title = this.has_class(this.slides[i], "title");
+ var num = document.createTextNode((i + 1) + ". ");
+
+ toc.appendChild(num);
+
+ var a = this.create_element("a");
+ a.setAttribute("href", "#(" + (i+1) + ")");
+
+ if (title)
+ this.add_class(a, "titleslide");
+
+ var name = document.createTextNode(this.slide_name(i));
+ a.appendChild(name);
+ a.onclick = w3c_slidy.toc_click;
+ a.onkeydown = w3c_slidy.toc_keydown;
+ a.previous = previous;
+
+ if (previous)
+ previous.next = a;
+
+ toc.appendChild(a);
+
+ if (i == 0)
+ toc.first = a;
+
+ if (i < this.slides.length - 1)
+ {
+ var br = this.create_element("br");
+ toc.appendChild(br);
+ }
+
+ previous = a;
+ }
+
+ toc.focus = function () {
+ if (this.first)
+ this.first.focus();
+ }
+
+ toc.onmouseup = w3c_slidy.mouse_button_up;
+
+ toc.onclick = function (e) {
+ e||(e=window.event);
+
+ if (w3c_slidy.selected_text_len <= 0)
+ w3c_slidy.hide_table_of_contents();
+
+ w3c_slidy.stop_propagation(e);
+
+ if (e.cancel != undefined)
+ e.cancel = true;
+
+ if (e.returnValue != undefined)
+ e.returnValue = false;
+
+ return false;
+ };
+
+ document.body.insertBefore(toc, document.body.firstChild);
+ return toc;
+ },
+
+ is_shown_toc: function () {
+ return !w3c_slidy.has_class(w3c_slidy.toc, "hidden");
+ },
+
+ show_table_of_contents: function () {
+ w3c_slidy.remove_class(w3c_slidy.toc, "hidden");
+ var toc = w3c_slidy.toc;
+ toc.focus();
+
+ if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0)
+ setTimeout(w3c_slidy.ie_hack, 100);
+ },
+
+ hide_table_of_contents: function () {
+ w3c_slidy.add_class(w3c_slidy.toc, "hidden");
+
+ if (!w3c_slidy.opera)
+ w3c_slidy.help_anchor.focus();
+ },
+
+ toggle_table_of_contents: function () {
+ if (w3c_slidy.is_shown_toc())
+ w3c_slidy.hide_table_of_contents();
+ else
+ w3c_slidy.show_table_of_contents();
+ },
+
+ // called on clicking toc entry
+ toc_click: function (e) {
+ if (!e)
+ e = window.event;
+
+ var target = w3c_slidy.get_target(e);
+
+ if (target && target.nodeType == 1)
+ {
+ var uri = target.getAttribute("href");
+
+ if (uri)
+ {
+ //alert("going to " + uri);
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.last_shown = null;
+ w3c_slidy.set_location();
+ w3c_slidy.set_visibility_all_incremental("hidden");
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
+ w3c_slidy.show_slide(slide);
+ //target.focus();
+
+ try
+ {
+ if (!w3c_slidy.opera)
+ w3c_slidy.help_anchor.focus();
+ }
+ catch (e)
+ {
+ }
+ }
+ }
+
+ w3c_slidy.hide_table_of_contents(e);
+ if (w3c_slidy.ie7) w3c_slidy.ie_hack();
+ w3c_slidy.stop_propagation(e);
+ return w3c_slidy.cancel(e);
+ },
+
+ // called onkeydown for toc entry
+ toc_keydown: function (event) {
+ var key;
+
+ if (!event)
+ var event = window.event;
+
+ // kludge around NS/IE differences
+ if (window.event)
+ key = window.event.keyCode;
+ else if (event.which)
+ key = event.which;
+ else
+ return true; // Yikes! unknown browser
+
+ // ignore event if key value is zero
+ // as for alt on Opera and Konqueror
+ if (!key)
+ return true;
+
+ // check for concurrent control/command/alt key
+ // but are these only present on mouse events?
+
+ if (event.ctrlKey || event.altKey)
+ return true;
+
+ if (key == 13)
+ {
+ var uri = this.getAttribute("href");
+
+ if (uri)
+ {
+ //alert("going to " + uri);
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.last_shown = null;
+ w3c_slidy.set_location();
+ w3c_slidy.set_visibility_all_incremental("hidden");
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
+ w3c_slidy.show_slide(slide);
+ //target.focus();
+
+ try
+ {
+ if (!w3c_slidy.opera)
+ w3c_slidy.help_anchor.focus();
+ }
+ catch (e)
+ {
+ }
+ }
+
+ w3c_slidy.hide_table_of_contents();
+
+ if (self.ie7)
+ w3c_slidy.ie_hack();
+
+ return w3c_slidy.cancel(event);
+ }
+
+ if (key == 40 && this.next)
+ {
+ this.next.focus();
+ return w3c_slidy.cancel(event);
+ }
+
+ if (key == 38 && this.previous)
+ {
+ this.previous.focus();
+ return w3c_slidy.cancel(event);
+ }
+
+ return true;
+ },
+
+
+ // ### OBSOLETE ###
+ before_print: function () {
+ this.show_all_slides();
+ this.hide_toolbar();
+ alert("before print");
+ },
+
+ // ### OBSOLETE ###
+ after_print: function () {
+ if (!this.view_all)
+ {
+ this.single_slide_view();
+ this.show_toolbar();
+ }
+ alert("after print");
+ },
+
+ // ### OBSOLETE ###
+ print_slides: function () {
+ this.before_print();
+ window.print();
+ this.after_print();
+ },
+
+ // ### OBSOLETE ?? ###
+ toggle_view: function () {
+ if (this.view_all)
+ {
+ this.single_slide_view();
+ this.show_toolbar();
+ this.view_all = 0;
+ }
+ else
+ {
+ this.show_all_slides();
+ this.hide_toolbar();
+ this.view_all = 1;
+ }
+ },
+
+ // prepare for printing ### OBSOLETE ###
+ show_all_slides: function () {
+ this.remove_class(document.body, "single_slide");
+ this.set_visibility_all_incremental("visible");
+ },
+
+ // restore after printing ### OBSOLETE ###
+ single_slide_view: function () {
+ this.add_class(document.body, "single_slide");
+ this.set_visibility_all_incremental("visible");
+ this.last_shown = this.previous_incremental_item(null);
+ },
+
+ // suppress IE's image toolbar pop up
+ hide_image_toolbar: function () {
+ if (!this.ns_pos)
+ {
+ var images = document.getElementsByTagName("IMG");
+
+ for (var i = 0; i < images.length; ++i)
+ images[i].setAttribute("galleryimg", "no");
+ }
+ },
+
+ unloaded: function (e) {
+ //alert("unloaded");
+ },
+
+ // Safari and Konqueror don't yet support getComputedStyle()
+ // and they always reload page when location.href is updated
+ is_KHTML: function () {
+ var agent = navigator.userAgent;
+ return (agent.indexOf("KHTML") >= 0 ? true : false);
+ },
+
+ // find slide name from first h1 element
+ // default to document title + slide number
+ slide_name: function (index) {
+ var name = null;
+ var slide = this.slides[index];
+
+ var heading = this.find_heading(slide);
+
+ if (heading)
+ name = this.extract_text(heading);
+
+ if (!name)
+ name = this.title + "(" + (index + 1) + ")";
+
+ name.replace(/\&/g, "&amp;");
+ name.replace(/\</g, "&lt;");
+ name.replace(/\>/g, "&gt;");
+
+ return name;
+ },
+
+ // find first h1 element in DOM tree
+ find_heading: function (node) {
+ if (!node || node.nodeType != 1)
+ return null;
+
+ if (node.nodeName == "H1" || node.nodeName == "h1")
+ return node;
+
+ var child = node.firstChild;
+
+ while (child)
+ {
+ node = this.find_heading(child);
+
+ if (node)
+ return node;
+
+ child = child.nextSibling;
+ }
+
+ return null;
+ },
+
+ // recursively extract text from DOM tree
+ extract_text: function (node) {
+ if (!node)
+ return "";
+
+ // text nodes
+ if (node.nodeType == 3)
+ return node.nodeValue;
+
+ // elements
+ if (node.nodeType == 1)
+ {
+ node = node.firstChild;
+ var text = "";
+
+ while (node)
+ {
+ text = text + this.extract_text(node);
+ node = node.nextSibling;
+ }
+
+ return text;
+ }
+
+ return "";
+ },
+
+ // find copyright text from meta element
+ find_copyright: function () {
+ var name, content;
+ var meta = document.getElementsByTagName("meta");
+
+ for (var i = 0; i < meta.length; ++i)
+ {
+ name = meta[i].getAttribute("name");
+ content = meta[i].getAttribute("content");
+
+ if (name == "copyright")
+ return content;
+ }
+
+ return null;
+ },
+
+ find_size_adjust: function () {
+ var name, content, offset;
+ var meta = document.getElementsByTagName("meta");
+
+ for (var i = 0; i < meta.length; ++i)
+ {
+ name = meta[i].getAttribute("name");
+ content = meta[i].getAttribute("content");
+
+ if (name == "font-size-adjustment")
+ return 1 * content;
+ }
+
+ return 1;
+ },
+
+ // <meta name="duration" content="20" /> for 20 minutes
+ find_duration: function () {
+ var name, content, offset;
+ var meta = document.getElementsByTagName("meta");
+
+ for (var i = 0; i < meta.length; ++i)
+ {
+ name = meta[i].getAttribute("name");
+ content = meta[i].getAttribute("content");
+
+ if (name == "duration")
+ return 60000 * content;
+ }
+
+ return null;
+ },
+
+ replace_by_non_breaking_space: function (str) {
+ for (var i = 0; i < str.length; ++i)
+ str[i] = 160;
+ },
+
+ // ### CHECK ME ### is use of "li" okay for text/html?
+ // for XHTML do we also need to specify namespace?
+ init_outliner: function () {
+ var items = document.getElementsByTagName("li");
+
+ for (var i = 0; i < items.length; ++i)
+ {
+ var target = items[i];
+
+ if (!this.has_class(target.parentNode, "outline"))
+ continue;
+
+ target.onclick = this.outline_click;
+/* ### more work needed for IE6
+ if (!this.ns_pos)
+ {
+ target.onmouseover = this.hover_outline;
+ target.onmouseout = this.unhover_outline;
+ }
+*/
+ if (this.foldable(target))
+ {
+ target.foldable = true;
+ target.onfocus = function () {w3c_slidy.outline = this;};
+ target.onblur = function () {w3c_slidy.outline = null;};
+
+ if (!target.getAttribute("tabindex"))
+ target.setAttribute("tabindex", "0");
+
+ if (this.has_class(target, "expand"))
+ this.unfold(target);
+ else
+ this.fold(target);
+ }
+ else
+ {
+ this.add_class(target, "nofold");
+ target.visible = true;
+ target.foldable = false;
+ }
+ }
+ },
+
+ foldable: function (item) {
+ if (!item || item.nodeType != 1)
+ return false;
+
+ var node = item.firstChild;
+
+ while (node)
+ {
+ if (node.nodeType == 1 && this.is_block(node))
+ return true;
+
+ node = node.nextSibling;
+ }
+
+ return false;
+ },
+
+ // ### CHECK ME ### switch to add/remove "hidden" class
+ fold: function (item) {
+ if (item)
+ {
+ this.remove_class(item, "unfolded");
+ this.add_class(item, "folded");
+ }
+
+ var node = item ? item.firstChild : null;
+
+ while (node)
+ {
+ if (node.nodeType == 1 && this.is_block(node)) // element
+ {
+ w3c_slidy.add_class(node, "hidden");
+ }
+
+ node = node.nextSibling;
+ }
+
+ item.visible = false;
+ },
+
+ // ### CHECK ME ### switch to add/remove "hidden" class
+ unfold: function (item) {
+ if (item)
+ {
+ this.add_class(item, "unfolded");
+ this.remove_class(item, "folded");
+ }
+
+ var node = item ? item.firstChild : null;
+
+ while (node)
+ {
+ if (node.nodeType == 1 && this.is_block(node)) // element
+ {
+ w3c_slidy.remove_class(node, "hidden");
+ }
+
+ node = node.nextSibling;
+ }
+
+ item.visible = true;
+ },
+
+ outline_click: function (e) {
+ if (!e)
+ e = window.event;
+
+ var rightclick = false;
+ var target = w3c_slidy.get_target(e);
+
+ while (target && target.visible == undefined)
+ target = target.parentNode;
+
+ if (!target)
+ return true;
+
+ if (e.which)
+ rightclick = (e.which == 3);
+ else if (e.button)
+ rightclick = (e.button == 2);
+
+ if (!rightclick && target.visible != undefined)
+ {
+ if (target.foldable)
+ {
+ if (target.visible)
+ w3c_slidy.fold(target);
+ else
+ w3c_slidy.unfold(target);
+ }
+
+ w3c_slidy.stop_propagation(e);
+ e.cancel = true;
+ e.returnValue = false;
+ }
+
+ return false;
+ },
+
+ add_initial_prompt: function () {
+ var prompt = this.create_element("div");
+ prompt.setAttribute("class", "initial_prompt");
+
+ var p1 = this.create_element("p");
+ prompt.appendChild(p1);
+ p1.setAttribute("class", "help");
+
+ if (this.keyboardless)
+ p1.innerHTML = "Tap footer to move to next slide";
+ else
+ p1.innerHTML = "Space or Right Arrow to move to next " +
+ "slide, click help below for more details";
+
+ this.add_listener(prompt, "click", function (e) {
+ document.body.removeChild(prompt);
+ w3c_slidy.stop_propagation(e);
+
+ if (e.cancel != undefined)
+ e.cancel = true;
+
+ if (e.returnValue != undefined)
+ e.returnValue = false;
+
+ return false;
+ });
+
+ document.body.appendChild(prompt);
+ this.initial_prompt = prompt;
+ setTimeout(function() {document.body.removeChild(prompt);}, 5000);
+ },
+
+ add_toolbar: function () {
+ var counter, page;
+
+ this.toolbar = this.create_element("div");
+ this.toolbar.setAttribute("class", "toolbar");
+
+ // a reasonably behaved browser
+ if (this.ns_pos || !this.ie6)
+ {
+ var right = this.create_element("div");
+ right.setAttribute("style", "float: right; text-align: right");
+
+ counter = this.create_element("span")
+ counter.innerHTML = "slide".localize() + " n/m";
+ right.appendChild(counter);
+ this.toolbar.appendChild(right);
+
+ var left = this.create_element("div");
+ left.setAttribute("style", "text-align: left");
+
+ // global end of slide indicator
+ this.eos = this.create_element("span");
+ this.eos.innerHTML = "* ";
+ left.appendChild(this.eos);
+
+ var help = this.create_element("a");
+ help.setAttribute("href", this.help_page);
+ help.setAttribute("title", this.help_text.localize());
+ help.innerHTML = "help?".localize();
+ left.appendChild(help);
+ this.help_anchor = help; // save for focus hack
+
+ var gap1 = document.createTextNode(" ");
+ left.appendChild(gap1);
+
+ var contents = this.create_element("a");
+ contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()");
+ contents.setAttribute("title", "table of contents".localize());
+ contents.innerHTML = "contents?".localize();
+ left.appendChild(contents);
+
+ var gap2 = document.createTextNode(" ");
+ left.appendChild(gap2);
+
+ var copyright = this.find_copyright();
+
+ if (copyright)
+ {
+ var span = this.create_element("span");
+ span.className = "copyright";
+ span.innerHTML = copyright;
+ left.appendChild(span);
+ }
+
+ this.toolbar.setAttribute("tabindex", "0");
+ this.toolbar.appendChild(left);
+ }
+ else // IE6 so need to work around its poor CSS support
+ {
+ this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute");
+ this.toolbar.style.zIndex = "200";
+ this.toolbar.style.width = "99.9%";
+ this.toolbar.style.height = "1.2em";
+ this.toolbar.style.top = "auto";
+ this.toolbar.style.bottom = "0";
+ this.toolbar.style.left = "0";
+ this.toolbar.style.right = "0";
+ this.toolbar.style.textAlign = "left";
+ this.toolbar.style.fontSize = "60%";
+ this.toolbar.style.color = "red";
+ this.toolbar.borderWidth = 0;
+ this.toolbar.className = "toolbar";
+ this.toolbar.style.background = "rgb(240,240,240)";
+
+ // would like to have help text left aligned
+ // and page counter right aligned, floating
+ // div's don't work, so instead use nested
+ // absolutely positioned div's.
+
+ var sp = this.create_element("span");
+ sp.innerHTML = "&nbsp;&nbsp;*&nbsp;";
+ this.toolbar.appendChild(sp);
+ this.eos = sp; // end of slide indicator
+
+ var help = this.create_element("a");
+ help.setAttribute("href", this.help_page);
+ help.setAttribute("title", this.help_text.localize());
+ help.innerHTML = "help?".localize();
+ this.toolbar.appendChild(help);
+ this.help_anchor = help; // save for focus hack
+
+ var gap1 = document.createTextNode(" ");
+ this.toolbar.appendChild(gap1);
+
+ var contents = this.create_element("a");
+ contents.setAttribute("href", "javascript:toggleTableOfContents()");
+ contents.setAttribute("title", "table of contents".localize());
+ contents.innerHTML = "contents?".localize();
+ this.toolbar.appendChild(contents);
+
+ var gap2 = document.createTextNode(" ");
+ this.toolbar.appendChild(gap2);
+
+ var copyright = this.find_copyright();
+
+ if (copyright)
+ {
+ var span = this.create_element("span");
+ span.innerHTML = copyright;
+ span.style.color = "black";
+ span.style.marginLeft = "0.5em";
+ this.toolbar.appendChild(span);
+ }
+
+ counter = this.create_element("div")
+ counter.style.position = "absolute";
+ counter.style.width = "auto"; //"20%";
+ counter.style.height = "1.2em";
+ counter.style.top = "auto";
+ counter.style.bottom = 0;
+ counter.style.right = "0";
+ counter.style.textAlign = "right";
+ counter.style.color = "red";
+ counter.style.background = "rgb(240,240,240)";
+
+ counter.innerHTML = "slide".localize() + " n/m";
+ this.toolbar.appendChild(counter);
+ }
+
+ // ensure that click isn't passed through to the page
+ this.toolbar.onclick =
+ function (e) {
+ if (!e)
+ e = window.event;
+
+ var target = e.target;
+
+ if (!target && e.srcElement)
+ target = e.srcElement;
+
+ // work around Safari bug
+ if (target && target.nodeType == 3)
+ target = target.parentNode;
+
+ w3c_slidy.stop_propagation(e);
+
+ if (target && target.nodeName.toLowerCase() != "a")
+ w3c_slidy.mouse_button_click(e);
+ };
+
+ this.slide_number_element = counter;
+ this.set_eos_status(false);
+ document.body.appendChild(this.toolbar);
+ },
+
+ // wysiwyg editors make it hard to use div elements
+ // e.g. amaya loses the div when you copy and paste
+ // this function wraps div elements around implicit
+ // slides which start with an h1 element and continue
+ // up to the next heading or div element
+ wrap_implicit_slides: function () {
+ var i, heading, node, next, div;
+ var headings = document.getElementsByTagName("h1");
+
+ if (!headings)
+ return;
+
+ for (i = 0; i < headings.length; ++i)
+ {
+ heading = headings[i];
+
+ if (heading.parentNode != document.body)
+ continue;
+
+ node = heading.nextSibling;
+
+ div = document.createElement("div");
+ this.add_class(div, "slide");
+ document.body.replaceChild(div, heading);
+ div.appendChild(heading);
+
+ while (node)
+ {
+ if (node.nodeType == 1 && // an element
+ (node.nodeName == "H1" ||
+ node.nodeName == "h1" ||
+ node.nodeName == "DIV" ||
+ node.nodeName == "div"))
+ break;
+
+ next = node.nextSibling;
+ node = document.body.removeChild(node);
+ div.appendChild(node);
+ node = next;
+ }
+ }
+ },
+
+// return new array of all slides
+ collect_slides: function () {
+ var slides = new Array();
+ var divs = document.body.getElementsByTagName("div");
+
+ for (var i = 0; i < divs.length; ++i)
+ {
+ div = divs.item(i);
+
+ if (this.has_class(div, "slide"))
+ {
+ // add slide to collection
+ slides[slides.length] = div;
+
+ // hide each slide as it is found
+ this.add_class(div, "hidden");
+
+ // add dummy <br/> at end for scrolling hack
+ var node1 = document.createElement("br");
+ div.appendChild(node1);
+ var node2 = document.createElement("br");
+ div.appendChild(node2);
+ }
+ else if (this.has_class(div, "background"))
+ { // work around for Firefox SVG reload bug
+ // which otherwise replaces 1st SVG graphic with 2nd
+ div.style.display = "block";
+ }
+ }
+
+ this.slides = slides;
+ },
+
+ // return new array of all <div class="handout">
+ collect_notes: function () {
+ var notes = new Array();
+ var divs = document.body.getElementsByTagName("div");
+
+ for (var i = 0; i < divs.length; ++i)
+ {
+ div = divs.item(i);
+
+ if (this.has_class(div, "handout"))
+ {
+ // add note to collection
+ notes[notes.length] = div;
+
+ // and hide it
+ this.add_class(div, "hidden");
+ }
+ }
+
+ this.notes = notes;
+ },
+
+ // return new array of all <div class="background">
+ // including named backgrounds e.g. class="background titlepage"
+ collect_backgrounds: function () {
+ var backgrounds = new Array();
+ var divs = document.body.getElementsByTagName("div");
+
+ for (var i = 0; i < divs.length; ++i)
+ {
+ div = divs.item(i);
+
+ if (this.has_class(div, "background"))
+ {
+ // add background to collection
+ backgrounds[backgrounds.length] = div;
+
+ // and hide it
+ this.add_class(div, "hidden");
+ }
+ }
+
+ this.backgrounds = backgrounds;
+ },
+
+ // set click handlers on all anchors
+ patch_anchors: function () {
+ var self = w3c_slidy;
+ var handler = function (event) {
+ // compare this.href with location.href
+ // for link to another slide in this doc
+
+ if (self.page_address(this.href) == self.page_address(location.href))
+ {
+ // yes, so find new slide number
+ var newslidenum = self.find_slide_number(this.href);
+
+ if (newslidenum != self.slide_number)
+ {
+ var slide = self.slides[self.slide_number];
+ self.hide_slide(slide);
+ self.slide_number = newslidenum;
+ slide = self.slides[self.slide_number];
+ self.show_slide(slide);
+ self.set_location();
+ }
+ }
+ else if (this.target == null)
+ location.href = this.href;
+
+ this.blur();
+ self.disable_slide_click = true;
+ };
+
+ var anchors = document.body.getElementsByTagName("a");
+
+ for (var i = 0; i < anchors.length; ++i)
+ {
+ if (window.addEventListener)
+ anchors[i].addEventListener("click", handler, false);
+ else
+ anchors[i].attachEvent("onclick", handler);
+ }
+ },
+
+ // ### CHECK ME ### see which functions are invoked via setTimeout
+ // either directly or indirectly for use of w3c_slidy vs this
+ show_slide_number: function () {
+ var timer = w3c_slidy.get_timer();
+ w3c_slidy.slide_number_element.innerHTML = timer + "slide".localize() + " " +
+ (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length;
+ },
+
+ // every 200mS check if the location has been changed as a
+ // result of the user activating the Back button/menu item
+ // doesn't work for Opera < 9.5
+ check_location: function () {
+ var hash = location.hash;
+
+ if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#"))
+ w3c_slidy.goto_slide(0);
+ else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")")
+ {
+ var num = parseInt(location.hash.substr(2));
+
+ if (!isNaN(num))
+ w3c_slidy.goto_slide(num-1);
+ }
+
+ if (w3c_slidy.time_left && w3c_slidy.slide_number > 0)
+ {
+ w3c_slidy.show_slide_number();
+
+ if (w3c_slidy.time_left > 0)
+ w3c_slidy.time_left -= 200;
+ }
+ },
+
+ get_timer: function () {
+ var timer = "";
+ if (w3c_slidy.time_left)
+ {
+ var mins, secs;
+ secs = Math.floor(w3c_slidy.time_left/1000);
+ mins = Math.floor(secs / 60);
+ secs = secs % 60;
+ timer = (mins ? mins+"m" : "") + secs + "s ";
+ }
+
+ return timer;
+ },
+
+ // this doesn't push location onto history stack for IE
+ // for which a hidden iframe hack is needed: load page into
+ // the iframe with script that set's parent's location.hash
+ // but that won't work for standalone use unless we can
+ // create the page dynamically via a javascript: URL
+ set_location: function () {
+ var uri = w3c_slidy.page_address(location.href);
+ var hash = "#(" + (w3c_slidy.slide_number+1) + ")";
+
+ if (w3c_slidy.slide_number >= 0)
+ uri = uri + hash;
+
+ if (w3c_slidy.ie && !w3c_slidy.ie8)
+ w3c_slidy.push_hash(hash);
+
+ if (uri != location.href) // && !khtml
+ location.href = uri;
+
+ if (this.khtml)
+ hash = "(" + (w3c_slidy.slide_number+1) + ")";
+
+ if (!this.ie && location.hash != hash && location.hash != "")
+ location.hash = hash;
+
+ document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";
+ w3c_slidy.show_slide_number();
+ },
+
+ page_address: function (uri) {
+ var i = uri.indexOf("#");
+
+ if (i < 0)
+ i = uri.indexOf("%23");
+
+ // check if anchor is entire page
+
+ if (i < 0)
+ return uri; // yes
+
+ return uri.substr(0, i);
+ },
+
+ // only used for IE6 and IE7
+ on_frame_loaded: function (hash) {
+ location.hash = hash;
+ var uri = w3c_slidy.page_address(location.href);
+ location.href = uri + hash;
+ },
+
+ // history hack with thanks to Bertrand Le Roy
+ push_hash: function (hash) {
+ if (hash == "") hash = "#(1)";
+ window.location.hash = hash;
+
+ var doc = document.getElementById("historyFrame").contentWindow.document;
+ doc.open("javascript:'<html></html>'");
+ // PWL modified this string literal to break the close script tag
+ // which otherwise gets parsed when incorporated
+ doc.write("<html><head><script type=\"text/javascript\">window.parent.w3c_slidy.on_frame_loaded('"+
+ (hash) + "');</" + "script></head><body>hello mum</body></html>");
+ doc.close();
+ },
+
+ // find current slide based upon location
+ // first find target anchor and then look
+ // for associated div element enclosing it
+ // finally map that to slide number
+ find_slide_number: function (uri) {
+ // first get anchor from page location
+
+ var i = uri.indexOf("#");
+
+ // check if anchor is entire page
+ if (i < 0)
+ return 0; // yes
+
+ var anchor = unescape(uri.substr(i+1));
+
+ // now use anchor as XML ID to find target
+ var target = document.getElementById(anchor);
+
+ if (!target)
+ {
+ // does anchor look like "(2)" for slide 2 ??
+ // where first slide is (1)
+ var re = /\((\d)+\)/;
+
+ if (anchor.match(re))
+ {
+ var num = parseInt(anchor.substring(1, anchor.length-1));
+
+ if (num > this.slides.length)
+ num = 1;
+
+ if (--num < 0)
+ num = 0;
+
+ return num;
+ }
+
+ // accept [2] for backwards compatibility
+ re = /\[(\d)+\]/;
+
+ if (anchor.match(re))
+ {
+ var num = parseInt(anchor.substring(1, anchor.length-1));
+
+ if (num > this.slides.length)
+ num = 1;
+
+ if (--num < 0)
+ num = 0;
+
+ return num;
+ }
+
+ // oh dear unknown anchor
+ return 0;
+ }
+
+ // search for enclosing slide
+
+ while (true)
+ {
+ // browser coerces html elements to uppercase!
+ if (target.nodeName.toLowerCase() == "div" &&
+ this.has_class(target, "slide"))
+ {
+ // found the slide element
+ break;
+ }
+
+ // otherwise try parent element if any
+
+ target = target.parentNode;
+
+ if (!target)
+ {
+ return 0; // no luck!
+ }
+ };
+
+ for (i = 0; i < slides.length; ++i)
+ {
+ if (slides[i] == target)
+ return i; // success
+ }
+
+ // oh dear still no luck
+ return 0;
+ },
+
+ previous_slide: function (incremental) {
+ if (!w3c_slidy.view_all)
+ {
+ var slide;
+
+ if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null)
+ {
+ w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown);
+ w3c_slidy.set_eos_status(false);
+ }
+ else if (w3c_slidy.slide_number > 0)
+ {
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+
+ w3c_slidy.slide_number = w3c_slidy.slide_number - 1;
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.set_visibility_all_incremental("visible");
+ w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);
+ w3c_slidy.set_eos_status(true);
+ w3c_slidy.show_slide(slide);
+ }
+
+ w3c_slidy.set_location();
+
+ if (!w3c_slidy.ns_pos)
+ w3c_slidy.refresh_toolbar(200);
+ }
+ },
+
+ next_slide: function (incremental) {
+ if (!w3c_slidy.view_all)
+ {
+ var slide, last = w3c_slidy.last_shown;
+
+ if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1)
+ w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown);
+
+ if ((!incremental || w3c_slidy.last_shown == null) &&
+ w3c_slidy.slide_number < w3c_slidy.slides.length - 1)
+ {
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+
+ w3c_slidy.slide_number = w3c_slidy.slide_number + 1;
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.last_shown = null;
+ w3c_slidy.set_visibility_all_incremental("hidden");
+ w3c_slidy.show_slide(slide);
+ }
+ else if (!w3c_slidy.last_shown)
+ {
+ if (last && incremental)
+ w3c_slidy.last_shown = last;
+ }
+
+ w3c_slidy.set_location();
+
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
+
+ if (!w3c_slidy.ns_pos)
+ w3c_slidy.refresh_toolbar(200);
+ }
+ },
+
+ // to first slide with nothing revealed
+ // i.e. state at start of presentation
+ first_slide: function () {
+ if (!w3c_slidy.view_all)
+ {
+ var slide;
+
+ if (w3c_slidy.slide_number != 0)
+ {
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+
+ w3c_slidy.slide_number = 0;
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.last_shown = null;
+ w3c_slidy.set_visibility_all_incremental("hidden");
+ w3c_slidy.show_slide(slide);
+ }
+
+ w3c_slidy.set_eos_status(
+ !w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
+ w3c_slidy.set_location();
+ }
+ },
+
+ // goto last slide with everything revealed
+ // i.e. state at end of presentation
+ last_slide: function () {
+ if (!w3c_slidy.view_all)
+ {
+ var slide;
+
+ w3c_slidy.last_shown = null; //revealNextItem(lastShown);
+
+ if (w3c_slidy.last_shown == null &&
+ w3c_slidy.slide_number < w3c_slidy.slides.length - 1)
+ {
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.slide_number = w3c_slidy.slides.length - 1;
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.set_visibility_all_incremental("visible");
+ w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);
+
+ w3c_slidy.show_slide(slide);
+ }
+ else
+ {
+ w3c_slidy.set_visibility_all_incremental("visible");
+ w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);
+ }
+
+ w3c_slidy.set_eos_status(true);
+ w3c_slidy.set_location();
+ }
+ },
+
+
+ // ### check this and consider add/remove class
+ set_eos_status: function (state) {
+ if (this.eos)
+ this.eos.style.color = (state ? "rgb(240,240,240)" : "red");
+ },
+
+ // first slide is 0
+ goto_slide: function (num) {
+ //alert("going to slide " + (num+1));
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.slide_number = num;
+ slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.last_shown = null;
+ w3c_slidy.set_visibility_all_incremental("hidden");
+ w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));
+ document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";
+ w3c_slidy.show_slide(slide);
+ w3c_slidy.show_slide_number();
+ },
+
+
+ show_slide: function (slide) {
+ this.sync_background(slide);
+ window.scrollTo(0,0);
+ this.remove_class(slide, "hidden");
+ },
+
+ hide_slide: function (slide) {
+ this.add_class(slide, "hidden");
+ },
+
+ // show just the backgrounds pertinent to this slide
+ // when slide background-color is transparent
+ // this should now work with rgba color values
+ sync_background: function (slide) {
+ var background;
+ var bgColor;
+
+ if (slide.currentStyle)
+ bgColor = slide.currentStyle["backgroundColor"];
+ else if (document.defaultView)
+ {
+ var styles = document.defaultView.getComputedStyle(slide,null);
+
+ if (styles)
+ bgColor = styles.getPropertyValue("background-color");
+ else // broken implementation probably due Safari or Konqueror
+ {
+ //alert("defective implementation of getComputedStyle()");
+ bgColor = "transparent";
+ }
+ }
+ else
+ bgColor == "transparent";
+
+ if (bgColor == "transparent" ||
+ bgColor.indexOf("rgba") >= 0 ||
+ bgColor.indexOf("opacity") >= 0)
+ {
+ var slideClass = this.get_class_list(slide);
+
+ for (var i = 0; i < this.backgrounds.length; i++)
+ {
+ background = this.backgrounds[i];
+
+ var bgClass = this.get_class_list(background);
+
+ if (this.matching_background(slideClass, bgClass))
+ this.remove_class(background, "hidden");
+ else
+ this.add_class(background, "hidden");
+ }
+ }
+ else // forcibly hide all backgrounds
+ this.hide_backgrounds();
+ },
+
+ hide_backgrounds: function () {
+ for (var i = 0; i < this.backgrounds.length; i++)
+ {
+ background = this.backgrounds[i];
+ this.add_class(background, "hidden");
+ }
+ },
+
+ // compare classes for slide and background
+ matching_background: function (slideClass, bgClass) {
+ var i, count, pattern, result;
+
+ // define pattern as regular expression
+ pattern = /\w+/g;
+
+ // check background class names
+ result = bgClass.match(pattern);
+
+ for (i = count = 0; i < result.length; i++)
+ {
+ if (result[i] == "hidden")
+ continue;
+
+ if (result[i] == "background")
+ continue;
+
+ ++count;
+ }
+
+ if (count == 0) // default match
+ return true;
+
+ // check for matches and place result in array
+ result = slideClass.match(pattern);
+
+ // now check if desired name is present for background
+ for (i = count = 0; i < result.length; i++)
+ {
+ if (result[i] == "hidden")
+ continue;
+
+ if (this.has_token(bgClass, result[i]))
+ return true;
+ }
+
+ return false;
+ },
+
+ resized: function () {
+ var width = 0;
+
+ if ( typeof( window.innerWidth ) == 'number' )
+ width = window.innerWidth; // Non IE browser
+ else if (document.documentElement && document.documentElement.clientWidth)
+ width = document.documentElement.clientWidth; // IE6
+ else if (document.body && document.body.clientWidth)
+ width = document.body.clientWidth; // IE4
+
+ var height = 0;
+
+ if ( typeof( window.innerHeight ) == 'number' )
+ height = window.innerHeight; // Non IE browser
+ else if (document.documentElement && document.documentElement.clientHeight)
+ height = document.documentElement.clientHeight; // IE6
+ else if (document.body && document.body.clientHeight)
+ height = document.body.clientHeight; // IE4
+
+ if (height && (width/height > 1.05*1024/768))
+ {
+ width = height * 1024.0/768;
+ }
+
+ // IE fires onresize even when only font size is changed!
+ // so we do a check to avoid blocking < and > actions
+ if (width != w3c_slidy.last_width || height != w3c_slidy.last_height)
+ {
+ if (width >= 1100)
+ w3c_slidy.size_index = 5; // 4
+ else if (width >= 1000)
+ w3c_slidy.size_index = 4; // 3
+ else if (width >= 800)
+ w3c_slidy.size_index = 3; // 2
+ else if (width >= 600)
+ w3c_slidy.size_index = 2; // 1
+ else if (width)
+ w3c_slidy.size_index = 0;
+
+ // add in font size adjustment from meta element e.g.
+ // <meta name="font-size-adjustment" content="-2" />
+ // useful when slides have too much content ;-)
+
+ if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment &&
+ w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length)
+ w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment;
+
+ // enables cross browser use of relative width/height
+ // on object elements for use with SVG and Flash media
+ w3c_slidy.adjust_object_dimensions(width, height);
+
+ if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index])
+ {
+ document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];
+ }
+
+ w3c_slidy.last_width = width;
+ w3c_slidy.last_height = height;
+
+ // force reflow to work around Mozilla bug
+ if (w3c_slidy.ns_pos)
+ {
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.show_slide(slide);
+ }
+
+ // force correct positioning of toolbar
+ w3c_slidy.refresh_toolbar(200);
+ }
+ },
+
+ scrolled: function () {
+ if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7)
+ {
+ w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset();
+ // hide toolbar
+ w3c_slidy.toolbar.style.display = "none";
+
+ // make it reappear later
+ if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all)
+ {
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000);
+ w3c_slidy.scrollhack = 1;
+ }
+ }
+ },
+
+ hide_toolbar: function () {
+ w3c_slidy.add_class(w3c_slidy.toolbar, "hidden");
+ window.focus();
+ },
+
+ // used to ensure IE refreshes toolbar in correct position
+ refresh_toolbar: function (interval) {
+ if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)
+ {
+ w3c_slidy.hide_toolbar();
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, interval);
+ }
+ },
+
+ // restores toolbar after short delay
+ show_toolbar: function () {
+ if (w3c_slidy.want_toolbar)
+ {
+ w3c_slidy.toolbar.style.display = "block";
+
+ if (!w3c_slidy.ns_pos)
+ {
+ // adjust position to allow for scrolling
+ var xoffset = w3c_slidy.scroll_x_offset();
+ w3c_slidy.toolbar.style.left = xoffset;
+ w3c_slidy.toolbar.style.right = xoffset;
+
+ // determine vertical scroll offset
+ //var yoffset = scrollYOffset();
+
+ // bottom is doc height - window height - scroll offset
+ //var bottom = documentHeight() - lastHeight - yoffset
+
+ //if (yoffset > 0 || documentHeight() > lastHeight)
+ // bottom += 16; // allow for height of scrollbar
+
+ w3c_slidy.toolbar.style.bottom = 0; //bottom;
+ }
+
+ w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden");
+ }
+
+ w3c_slidy.scrollhack = 0;
+
+
+ // set the keyboard focus to the help link on the
+ // toolbar to ensure that document has the focus
+ // IE doesn't always work with window.focus()
+ // and this hack has benefit of Enter for help
+
+ try
+ {
+ if (!w3c_slidy.opera)
+ w3c_slidy.help_anchor.focus();
+ }
+ catch (e)
+ {
+ }
+ },
+
+// invoked via F key
+ toggle_toolbar: function () {
+ if (!w3c_slidy.view_all)
+ {
+ if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden"))
+ {
+ w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden")
+ w3c_slidy.want_toolbar = 1;
+ }
+ else
+ {
+ w3c_slidy.add_class(w3c_slidy.toolbar, "hidden")
+ w3c_slidy.want_toolbar = 0;
+ }
+ }
+ },
+
+ scroll_x_offset: function () {
+ if (window.pageXOffset)
+ return self.pageXOffset;
+
+ if (document.documentElement &&
+ document.documentElement.scrollLeft)
+ return document.documentElement.scrollLeft;
+
+ if (document.body)
+ return document.body.scrollLeft;
+
+ return 0;
+ },
+
+ scroll_y_offset: function () {
+ if (window.pageYOffset)
+ return self.pageYOffset;
+
+ if (document.documentElement &&
+ document.documentElement.scrollTop)
+ return document.documentElement.scrollTop;
+
+ if (document.body)
+ return document.body.scrollTop;
+
+ return 0;
+ },
+
+ // looking for a way to determine height of slide content
+ // the slide itself is set to the height of the window
+ optimize_font_size: function () {
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+
+ //var dh = documentHeight(); //getDocHeight(document);
+ var dh = slide.scrollHeight;
+ var wh = getWindowHeight();
+ var u = 100 * dh / wh;
+
+ alert("window utilization = " + u + "% (doc "
+ + dh + " win " + wh + ")");
+ },
+
+ // from document object
+ get_doc_height: function (doc) {
+ if (!doc)
+ doc = document;
+
+ if (doc && doc.body && doc.body.offsetHeight)
+ return doc.body.offsetHeight; // ns/gecko syntax
+
+ if (doc && doc.body && doc.body.scrollHeight)
+ return doc.body.scrollHeight;
+
+ alert("couldn't determine document height");
+ },
+
+ get_window_height: function () {
+ if ( typeof( window.innerHeight ) == 'number' )
+ return window.innerHeight; // Non IE browser
+
+ if (document.documentElement && document.documentElement.clientHeight)
+ return document.documentElement.clientHeight; // IE6
+
+ if (document.body && document.body.clientHeight)
+ return document.body.clientHeight; // IE4
+ },
+
+ document_height: function () {
+ var sh, oh;
+
+ sh = document.body.scrollHeight;
+ oh = document.body.offsetHeight;
+
+ if (sh && oh)
+ {
+ return (sh > oh ? sh : oh);
+ }
+
+ // no idea!
+ return 0;
+ },
+
+ smaller: function () {
+ if (w3c_slidy.size_index > 0)
+ {
+ --w3c_slidy.size_index;
+ }
+
+ w3c_slidy.toolbar.style.display = "none";
+ document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.show_slide(slide);
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);
+ },
+
+ bigger: function () {
+ if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1)
+ {
+ ++w3c_slidy.size_index;
+ }
+
+ w3c_slidy.toolbar.style.display = "none";
+ document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+ w3c_slidy.hide_slide(slide);
+ w3c_slidy.show_slide(slide);
+ setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);
+ },
+
+ // enables cross browser use of relative width/height
+ // on object elements for use with SVG and Flash media
+ // with thanks to Ivan Herman for the suggestion
+ adjust_object_dimensions: function (width, height) {
+ for( var i = 0; i < w3c_slidy.objects.length; i++ )
+ {
+ var obj = this.objects[i];
+ var mimeType = obj.getAttribute("type");
+
+ if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")
+ {
+ if ( !obj.initialWidth )
+ obj.initialWidth = obj.getAttribute("width");
+
+ if ( !obj.initialHeight )
+ obj.initialHeight = obj.getAttribute("height");
+
+ if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )
+ {
+ var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));
+ var newW = width * (w/100.0);
+ obj.setAttribute("width",newW);
+ }
+
+ if ( obj.initialHeight &&
+ obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )
+ {
+ var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));
+ var newH = height * (h/100.0);
+ obj.setAttribute("height", newH);
+ }
+ }
+ }
+ },
+
+ // needed for Opera to inhibit default behavior
+ // since Opera delivers keyPress even if keyDown
+ // was cancelled
+ key_press: function (event) {
+ if (!event)
+ event = window.event;
+
+ if (!w3c_slidy.key_wanted)
+ return w3c_slidy.cancel(event);
+
+ return true;
+ },
+
+ // See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes
+ key_down: function (event) {
+ var key;
+
+ w3c_slidy.key_wanted = true;
+
+ if (!event)
+ event = window.event;
+
+ // kludge around NS/IE differences
+ if (window.event)
+ key = window.event.keyCode;
+ else if (event.which)
+ key = event.which;
+ else
+ return true; // Yikes! unknown browser
+
+ // ignore event if key value is zero
+ // as for alt on Opera and Konqueror
+ if (!key)
+ return true;
+
+ // check for concurrent control/command/alt key
+ // but are these only present on mouse events?
+
+ if (event.ctrlKey || event.altKey || event.metaKey)
+ return true;
+
+ // dismiss table of contents if visible
+ if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40)
+ {
+ w3c_slidy.hide_table_of_contents();
+
+ if (key == 27 || key == 84 || key == 67)
+ return w3c_slidy.cancel(event);
+ }
+
+ if (key == 34) // Page Down
+ {
+ if (w3c_slidy.view_all)
+ return true;
+
+ w3c_slidy.next_slide(false);
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 33) // Page Up
+ {
+ if (w3c_slidy.view_all)
+ return true;
+
+ w3c_slidy.previous_slide(false);
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 32) // space bar
+ {
+ w3c_slidy.next_slide(true);
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 37) // Left arrow
+ {
+ w3c_slidy.previous_slide(!event.shiftKey);
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 36) // Home
+ {
+ w3c_slidy.first_slide();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 35) // End
+ {
+ w3c_slidy.last_slide();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 39) // Right arrow
+ {
+ w3c_slidy.next_slide(!event.shiftKey);
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 13) // Enter
+ {
+ if (w3c_slidy.outline)
+ {
+ if (w3c_slidy.outline.visible)
+ w3c_slidy.fold(w3c_slidy.outline);
+ else
+ w3c_slidy.unfold(w3c_slidy.outline);
+
+ return w3c_slidy.cancel(event);
+ }
+ }
+ else if (key == 188) // < for smaller fonts
+ {
+ w3c_slidy.smaller();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 190) // > for larger fonts
+ {
+ w3c_slidy.bigger();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 189 || key == 109) // - for smaller fonts
+ {
+ w3c_slidy.smaller();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 187 || key == 191 || key == 107) // = + for larger fonts
+ {
+ w3c_slidy.bigger();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 83) // S for smaller fonts
+ {
+ w3c_slidy.smaller();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 66) // B for larger fonts
+ {
+ w3c_slidy.bigger();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 90) // Z for last slide
+ {
+ w3c_slidy.last_slide();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 70) // F for toggle toolbar
+ {
+ w3c_slidy.toggle_toolbar();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 65) // A for toggle view single/all slides
+ {
+ w3c_slidy.toggle_view();
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 75) // toggle action of left click for next page
+ {
+ w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled;
+ var alert_msg = (w3c_slidy.mouse_click_enabled ?
+ "enabled" : "disabled") + " mouse click advance";
+
+ alert(alert_msg.localize());
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 84 || key == 67) // T or C for table of contents
+ {
+ if (w3c_slidy.toc)
+ w3c_slidy.toggle_table_of_contents();
+
+ return w3c_slidy.cancel(event);
+ }
+ else if (key == 72) // H for help
+ {
+ window.location = w3c_slidy.help_page;
+ return w3c_slidy.cancel(event);
+ }
+ //else alert("key code is "+ key);
+
+ return true;
+ },
+
+ // safe for both text/html and application/xhtml+xml
+ create_element: function (name) {
+ if (this.xhtml && (typeof document.createElementNS != 'undefined'))
+ return document.createElementNS("http://www.w3.org/1999/xhtml", name)
+
+ return document.createElement(name);
+ },
+
+ get_element_style: function (elem, IEStyleProp, CSSStyleProp) {
+ if (elem.currentStyle)
+ {
+ return elem.currentStyle[IEStyleProp];
+ }
+ else if (window.getComputedStyle)
+ {
+ var compStyle = window.getComputedStyle(elem, "");
+ return compStyle.getPropertyValue(CSSStyleProp);
+ }
+ return "";
+ },
+
+ // the string str is a whitespace separated list of tokens
+ // test if str contains a particular token, e.g. "slide"
+ has_token: function (str, token) {
+ if (str)
+ {
+ // define pattern as regular expression
+ var pattern = /\w+/g;
+
+ // check for matches
+ // place result in array
+ var result = str.match(pattern);
+
+ // now check if desired token is present
+ for (var i = 0; i < result.length; i++)
+ {
+ if (result[i] == token)
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ get_class_list: function (element) {
+ if (typeof element.className != 'undefined')
+ return element.className;
+
+ return element.getAttribute("class");
+ },
+
+ has_class: function (element, name) {
+ if (element.nodeType != 1)
+ return false;
+
+ var regexp = new RegExp("(^| )" + name + "\W*");
+
+ if (typeof element.className != 'undefined')
+ return regexp.test(element.className);
+
+ return regexp.test(element.getAttribute("class"));
+ },
+
+ remove_class: function (element, name) {
+ var regexp = new RegExp("(^| )" + name + "\W*");
+ var clsval = "";
+
+ if (typeof element.className != 'undefined')
+ {
+ clsval = element.className;
+
+ if (clsval)
+ {
+ clsval = clsval.replace(regexp, "");
+ element.className = clsval;
+ }
+ }
+ else
+ {
+ clsval = element.getAttribute("class");
+
+ if (clsval)
+ {
+ clsval = clsval.replace(regexp, "");
+ element.setAttribute("class", clsval);
+ }
+ }
+ },
+
+ add_class: function (element, name) {
+ if (!this.has_class(element, name))
+ {
+ if (typeof element.className != 'undefined')
+ element.className += " " + name;
+ else
+ {
+ var clsval = element.getAttribute("class");
+ clsval = clsval ? clsval + " " + name : name;
+ element.setAttribute("class", clsval);
+ }
+ }
+ },
+
+ // HTML elements that can be used with class="incremental"
+ // note that you can also put the class on containers like
+ // up, ol, dl, and div to make their contents appear
+ // incrementally. Upper case is used since this is what
+ // browsers report for HTML node names (text/html).
+ incremental_elements: null,
+ okay_for_incremental: function (name) {
+ if (!this.incremental_elements)
+ {
+ var inclist = new Array();
+ inclist["p"] = true;
+ inclist["pre"] = true;
+ inclist["li"] = true;
+ inclist["blockquote"] = true;
+ inclist["dt"] = true;
+ inclist["dd"] = true;
+ inclist["h2"] = true;
+ inclist["h3"] = true;
+ inclist["h4"] = true;
+ inclist["h5"] = true;
+ inclist["h6"] = true;
+ inclist["span"] = true;
+ inclist["address"] = true;
+ inclist["table"] = true;
+ inclist["tr"] = true;
+ inclist["th"] = true;
+ inclist["td"] = true;
+ inclist["img"] = true;
+ inclist["object"] = true;
+ this.incremental_elements = inclist;
+ }
+ return this.incremental_elements[name.toLowerCase()];
+ },
+
+ next_incremental_item: function (node) {
+ var br = this.is_xhtml ? "br" : "BR";
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+
+ for (;;)
+ {
+ node = w3c_slidy.next_node(slide, node);
+
+ if (node == null || node.parentNode == null)
+ break;
+
+ if (node.nodeType == 1) // ELEMENT
+ {
+ if (node.nodeName == br)
+ continue;
+
+ if (w3c_slidy.has_class(node, "incremental")
+ && w3c_slidy.okay_for_incremental(node.nodeName))
+ return node;
+
+ if (w3c_slidy.has_class(node.parentNode, "incremental")
+ && !w3c_slidy.has_class(node, "non-incremental"))
+ return node;
+ }
+ }
+
+ return node;
+ },
+
+ previous_incremental_item: function (node) {
+ var br = this.is_xhtml ? "br" : "BR";
+ var slide = w3c_slidy.slides[w3c_slidy.slide_number];
+
+ for (;;)
+ {
+ node = w3c_slidy.previous_node(slide, node);
+
+ if (node == null || node.parentNode == null)
+ break;
+
+ if (node.nodeType == 1)
+ {
+ if (node.nodeName == br)
+ continue;
+
+ if (w3c_slidy.has_class(node, "incremental")
+ && w3c_slidy.okay_for_incremental(node.nodeName))
+ return node;
+
+ if (w3c_slidy.has_class(node.parentNode, "incremental")
+ && !w3c_slidy.has_class(node, "non-incremental"))
+ return node;
+ }
+ }
+
+ return node;
+ },
+
+ // set visibility for all elements on current slide with
+ // a parent element with attribute class="incremental"
+ set_visibility_all_incremental: function (value) {
+ var node = this.next_incremental_item(null);
+
+ if (value == "hidden")
+ {
+ while (node)
+ {
+ w3c_slidy.add_class(node, "invisible");
+ node = w3c_slidy.next_incremental_item(node);
+ }
+ }
+ else // value == "visible"
+ {
+ while (node)
+ {
+ w3c_slidy.remove_class(node, "invisible");
+ node = w3c_slidy.next_incremental_item(node);
+ }
+ }
+ },
+
+ // reveal the next hidden item on the slide
+ // node is null or the node that was last revealed
+ reveal_next_item: function (node) {
+ node = w3c_slidy.next_incremental_item(node);
+
+ if (node && node.nodeType == 1) // an element
+ w3c_slidy.remove_class(node, "invisible");
+
+ return node;
+ },
+
+ // exact inverse of revealNextItem(node)
+ hide_previous_item: function (node) {
+ if (node && node.nodeType == 1) // an element
+ w3c_slidy.add_class(node, "invisible");
+
+ return this.previous_incremental_item(node);
+ },
+
+ // left to right traversal of root's content
+ next_node: function (root, node) {
+ if (node == null)
+ return root.firstChild;
+
+ if (node.firstChild)
+ return node.firstChild;
+
+ if (node.nextSibling)
+ return node.nextSibling;
+
+ for (;;)
+ {
+ node = node.parentNode;
+
+ if (!node || node == root)
+ break;
+
+ if (node && node.nextSibling)
+ return node.nextSibling;
+ }
+
+ return null;
+ },
+
+ // right to left traversal of root's content
+ previous_node: function (root, node) {
+ if (node == null)
+ {
+ node = root.lastChild;
+
+ if (node)
+ {
+ while (node.lastChild)
+ node = node.lastChild;
+ }
+
+ return node;
+ }
+
+ if (node.previousSibling)
+ {
+ node = node.previousSibling;
+
+ while (node.lastChild)
+ node = node.lastChild;
+
+ return node;
+ }
+
+ if (node.parentNode != root)
+ return node.parentNode;
+
+ return null;
+ },
+
+ previous_sibling_element: function (el) {
+ el = el.previousSibling;
+
+ while (el && el.nodeType != 1)
+ el = el.previousSibling;
+
+ return el;
+ },
+
+ next_sibling_element: function (el) {
+ el = el.nextSibling;
+
+ while (el && el.nodeType != 1)
+ el = el.nextSibling;
+
+ return el;
+ },
+
+ first_child_element: function (el) {
+ var node;
+
+ for (node = el.firstChild; node; node = node.nextSibling)
+ {
+ if (node.nodeType == 1)
+ break;
+ }
+
+ return node;
+ },
+
+ first_tag: function (element, tag) {
+ var node;
+
+ if (!this.is_xhtml)
+ tag = tag.toUpperCase();
+
+ for (node = element.firstChild; node; node = node.nextSibling)
+ {
+ if (node.nodeType == 1 && node.nodeName == tag)
+ break;
+ }
+
+ return node;
+ },
+
+ hide_selection: function () {
+ if (window.getSelection) // Firefox, Chromium, Safari, Opera
+ {
+ var selection = window.getSelection();
+
+ if (selection.rangeCount > 0)
+ {
+ var range = selection.getRangeAt(0);
+ range.collapse (false);
+ }
+ }
+ else // Internet Explorer
+ {
+ var textRange = document.selection.createRange ();
+ textRange.collapse (false);
+ }
+ },
+
+ get_selected_text: function () {
+ try
+ {
+ if (window.getSelection)
+ return window.getSelection().toString();
+
+ if (document.getSelection)
+ return document.getSelection().toString();
+
+ if (document.selection)
+ return document.selection.createRange().text;
+ }
+ catch (e)
+ {
+ }
+
+ return "";
+ },
+
+ // make note of length of selected text
+ // as this evaluates to zero in click event
+ mouse_button_up: function (e) {
+ w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;
+ },
+
+ // right mouse button click is reserved for context menus
+ // it is more reliable to detect rightclick than leftclick
+ mouse_button_click: function (e) {
+ var rightclick = false;
+ var leftclick = false;
+ var middleclick = false;
+ var target;
+
+ if (!e)
+ var e = window.event;
+
+ if (e.target)
+ target = e.target;
+ else if (e.srcElement)
+ target = e.srcElement;
+
+ // work around Safari bug
+ if (target.nodeType == 3)
+ target = target.parentNode;
+
+ if (e.which) // all browsers except IE
+ {
+ leftclick = (e.which == 1);
+ middleclick = (e.which == 2);
+ rightclick = (e.which == 3);
+ }
+ else if (e.button)
+ {
+ // Konqueror gives 1 for left, 4 for middle
+ // IE6 gives 0 for left and not 1 as I expected
+
+ if (e.button == 4)
+ middleclick = true;
+
+ // all browsers agree on 2 for right button
+ rightclick = (e.button == 2);
+ }
+ else leftclick = true;
+/*
+ alert("you clicked over a " + target.nodeName + " element\n" +
+ "w3c_slidy.mouse_click_enabled = " + w3c_slidy.mouse_click_enabled + "\n" +
+ "leftclick = " + leftclick + "\n" +
+ "selected text length = " + w3c_slidy.selected_text_len);
+ //alert("selected text length = " + w3c_slidy.selected_text_len);
+*/
+ if (w3c_slidy.selected_text_len > 0)
+ {
+ w3c_slidy.stop_propagation(e);
+ e.cancel = true;
+ e.returnValue = false;
+ return false;
+ }
+
+ // dismiss table of contents
+ w3c_slidy.hide_table_of_contents();
+
+ // check if target is something that probably want's clicks
+ // e.g. a, embed, object, input, textarea, select, option
+ var tag = target.nodeName.toLowerCase();
+
+ if (w3c_slidy.mouse_click_enabled && leftclick &&
+ tag != "a" &&
+ tag != "embed" &&
+ tag != "object" &&
+ tag != "video" &&
+ tag != "input" &&
+ tag != "textarea" &&
+ tag != "select" &&
+ tag != "option" &&
+ !target.onclick)
+ {
+ w3c_slidy.next_slide(true);
+ w3c_slidy.stop_propagation(e);
+ e.cancel = true;
+ e.returnValue = false;
+ return false;
+ }
+ },
+
+ get_key: function (e)
+ {
+ var key;
+
+ // kludge around NS/IE differences
+ if (typeof window.event != "undefined")
+ key = window.event.keyCode;
+ else if (e.which)
+ key = e.which;
+
+ return key;
+ },
+
+ get_target: function (e) {
+ var target;
+
+ if (!e)
+ e = window.event;
+
+ if (e.target)
+ target = e.target;
+ else if (e.srcElement)
+ target = e.srcElement;
+
+ if (target.nodeType != 1)
+ target = target.parentNode;
+
+ return target;
+ },
+
+ // does display property provide correct defaults?
+ is_block: function (elem) {
+ var tag = elem.nodeName.toLowerCase();
+
+ return tag == "ol" || tag == "ul" || tag == "p" ||
+ tag == "li" || tag == "table" || tag == "pre" ||
+ tag == "h1" || tag == "h2" || tag == "h3" ||
+ tag == "h4" || tag == "h5" || tag == "h6" ||
+ tag == "blockquote" || tag == "address";
+ },
+
+ add_listener: function (element, event, handler) {
+ if (window.addEventListener)
+ element.addEventListener(event, handler, false);
+ else
+ element.attachEvent("on"+event, handler);
+ },
+
+ // used to prevent event propagation from field controls
+ stop_propagation: function (event) {
+ event = event ? event : window.event;
+ event.cancelBubble = true; // for IE
+
+ if (event.stopPropagation)
+ event.stopPropagation();
+
+ return true;
+ },
+
+ cancel: function (event) {
+ if (event)
+ {
+ event.cancel = true;
+ event.returnValue = false;
+
+ if (event.preventDefault)
+ event.preventDefault();
+ }
+
+ w3c_slidy.key_wanted = false;
+ return false;
+ }
+};
+
+// for each language define an associative array
+// and also the help text which is longer
+
+var w3c_slidy_i18n = {
+ strings_es: {
+ "slide":"pág.",
+ "help?":"Ayuda",
+ "contents?":"Índice",
+ "table of contents":"tabla de contenidos",
+ "Table of Contents":"Tabla de Contenidos",
+ "restart presentation":"Reiniciar presentación",
+ "restart?":"Inicio"
+ },
+ help_es:
+ "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +
+ "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",
+
+ strings_ca: {
+ "slide":"pàg..",
+ "help?":"Ajuda",
+ "contents?":"Índex",
+ "table of contents":"taula de continguts",
+ "Table of Contents":"Taula de Continguts",
+ "restart presentation":"Reiniciar presentació",
+ "restart?":"Inici"
+ },
+ help_ca:
+ "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " +
+ "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.",
+
+ strings_cs: {
+ "slide":"snímek",
+ "help?":"nápověda",
+ "contents?":"obsah",
+ "table of contents":"obsah prezentace",
+ "Table of Contents":"Obsah prezentace",
+ "restart presentation":"znovu spustit prezentaci",
+ "restart?":"restart"
+ },
+ help_cs:
+ "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " +
+ "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " +
+ "dá zvětšit a zmenšit pomocí kláves B a S.",
+
+ strings_nl: {
+ "slide":"pagina",
+ "help?":"Help?",
+ "contents?":"Inhoud?",
+ "table of contents":"inhoudsopgave",
+ "Table of Contents":"Inhoudsopgave",
+ "restart presentation":"herstart presentatie",
+ "restart?":"Herstart?"
+ },
+ help_nl:
+ "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " +
+ "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.",
+
+ strings_de: {
+ "slide":"Seite",
+ "help?":"Hilfe",
+ "contents?":"Übersicht",
+ "table of contents":"Inhaltsverzeichnis",
+ "Table of Contents":"Inhaltsverzeichnis",
+ "restart presentation":"Präsentation neu starten",
+ "restart?":"Neustart"
+ },
+ help_de:
+ "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " +
+ "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.",
+
+ strings_pl: {
+ "slide":"slajd",
+ "help?":"pomoc?",
+ "contents?":"spis treści?",
+ "table of contents":"spis treści",
+ "Table of Contents":"Spis Treści",
+ "restart presentation":"Restartuj prezentację",
+ "restart?":"restart?"
+ },
+ help_pl:
+ "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" +
+ "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.",
+
+ strings_fr: {
+ "slide":"page",
+ "help?":"Aide",
+ "contents?":"Index",
+ "table of contents":"table des matières",
+ "Table of Contents":"Table des matières",
+ "restart presentation":"Recommencer l'exposé",
+ "restart?":"Début"
+ },
+ help_fr:
+ "Naviguez avec la souris, la barre d'espace, les flèches " +
+ "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " +
+ "les touches S et B pour modifier la taille de la police.",
+
+ strings_hu: {
+ "slide":"oldal",
+ "help?":"segítség",
+ "contents?":"tartalom",
+ "table of contents":"tartalomjegyzék",
+ "Table of Contents":"Tartalomjegyzék",
+ "restart presentation":"bemutató újraindítása",
+ "restart?":"újraindítás"
+ },
+ help_hu:
+ "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " +
+ "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " +
+ "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " +
+ "a szöveg méretét.",
+
+ strings_it: {
+ "slide":"pag.",
+ "help?":"Aiuto",
+ "contents?":"Indice",
+ "table of contents":"indice",
+ "Table of Contents":"Indice",
+ "restart presentation":"Ricominciare la presentazione",
+ "restart?":"Inizio"
+ },
+ help_it:
+ "Navigare con mouse, barra spazio, frecce sinistra/destra o " +
+ "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.",
+
+ strings_el: {
+ "slide":"σελίδα",
+ "help?":"βοήθεια;",
+ "contents?":"περιεχόμενα;",
+ "table of contents":"πίνακας περιεχομένων",
+ "Table of Contents":"Πίνακας Περιεχομένων",
+ "restart presentation":"επανεκκίνηση παρουσίασης",
+ "restart?":"επανεκκίνηση;"
+ },
+ help_el:
+ "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " +
+ "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " +
+ "το μέγεθος της γραμματοσειράς.",
+
+ strings_ja: {
+ "slide":"スライド",
+ "help?":"ヘルプ",
+ "contents?":"目次",
+ "table of contents":"目次を表示",
+ "Table of Contents":"目次",
+ "restart presentation":"最初から再生",
+ "restart?":"最初から"
+ },
+ help_ja:
+ "マウス左クリック ・ スペース ・ 左右キー " +
+ "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更",
+
+ strings_zh: {
+ "slide":"幻灯片",
+ "help?":"帮助?",
+ "contents?":"内容?",
+ "table of contents":"目录",
+ "Table of Contents":"目录",
+ "restart presentation":"重新启动展示",
+ "restart?":"重新启动?"
+ },
+ help_zh:
+ "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " +
+ "用 S, B 改变字体大小.",
+
+ strings_ru: {
+ "slide":"слайд",
+ "help?":"помощь?",
+ "contents?":"содержание?",
+ "table of contents":"оглавление",
+ "Table of Contents":"Оглавление",
+ "restart presentation":"перезапустить презентацию",
+ "restart?":"перезапуск?"
+ },
+ help_ru:
+ "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" +
+ "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.",
+
+ strings_sv: {
+ "slide":"sida",
+ "help?":"hjälp",
+ "contents?":"innehåll",
+ "table of contents":"innehållsförteckning",
+ "Table of Contents":"Innehållsförteckning",
+ "restart presentation":"visa presentationen från början",
+ "restart?":"börja om"
+ },
+ help_sv:
+ "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " +
+ "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " +
+ "Använd tangenterna S och B för att ändra textens storlek.",
+
+// each such language array is declared in the localize array
+// which is set on string prototype and used as in "foo".localize();
+ localize: {
+ "es":this.strings_es,
+ "ca":this.strings_ca,
+ "cs":this.strings_cs,
+ "nl":this.strings_nl,
+ "de":this.strings_de,
+ "pl":this.strings_pl,
+ "fr":this.strings_fr,
+ "hu":this.strings_hu,
+ "it":this.strings_it,
+ "el":this.strings_el,
+ "jp":this.strings_ja,
+ "zh":this.strings_zh,
+ "ru":this.strings_ru,
+ "sv":this.strings_sv
+ },
+
+ init: function () {
+ var i18n = w3c_slidy_i18n;
+ var help_text = w3c_slidy.help_text;
+ i18n.strings_es[help_text] = i18n.help_es;
+ i18n.strings_ca[help_text] = i18n.help_ca;
+ i18n.strings_cs[help_text] = i18n.help_cs;
+ i18n.strings_nl[help_text] = i18n.help_nl;
+ i18n.strings_de[help_text] = i18n.help_de;
+ i18n.strings_pl[help_text] = i18n.help_pl;
+ i18n.strings_fr[help_text] = i18n.help_fr;
+ i18n.strings_hu[help_text] = i18n.help_hu;
+ i18n.strings_it[help_text] = i18n.help_it;
+ i18n.strings_el[help_text] = i18n.help_el;
+ i18n.strings_ja[help_text] = i18n.help_ja;
+ i18n.strings_zh[help_text] = i18n.help_zh;
+ i18n.strings_ru[help_text] = i18n.help_ru;
+ i18n.strings_sv[help_text] = i18n.help_sv;
+
+ w3c_slidy.lang = document.body.parentNode.getAttribute("lang");
+
+ if (!w3c_slidy.lang)
+ w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang");
+
+ if (!w3c_slidy.lang)
+ w3c_slidy.lang = "en";
+
+ // add localize method to all strings
+ // for use as in "contents".localize()
+ String.prototype.localize = function() {
+ if (this == "")
+ return this;
+
+ // try full language code, e.g. en-US
+ var s, lookup = w3c_slidy_i18n.localize[w3c_slidy.lang];
+
+ if (lookup)
+ {
+ s = lookup[this];
+
+ if (s)
+ return s;
+ }
+
+ // strip country code suffix, e.g.
+ // try en if undefined for en-US
+ var lg = w3c_slidy.lang.split("-");
+
+ if (lg.length > 1)
+ {
+ lookup = w3c_slidy_i18n.localize[lg[0]];
+
+ if (lookup)
+ {
+ s = lookup[this];
+
+ if (s)
+ return s;
+ }
+ }
+
+ // otherwise string as is
+ return this;
+ };
+ }
+};
+
+// hack for back button behavior
+if (w3c_slidy.ie6 || w3c_slidy.ie7)
+{
+ document.write("<iframe id='historyFrame' " +
+ "src='javascript:\"<html"+"></"+"html>\"' " +
+ "height='1' width='1' " +
+ "style='position:absolute;left:-800px'></iframe>");
+}
+
+// attach event listeners for initialization
+w3c_slidy.set_up();
+
+// hide the slides as soon as body element is available
+// to reduce annoying screen mess before the onload event
+setTimeout(w3c_slidy.hide_slides, 50);
+
+/*]]>*/
+</script>
+</head>
+<body class="article" style="max-width:45em">
+<div id="header" class="slide">
+<h1>What happens on a protocol level when switching on a phone</h1>
+<span id="author">Harald Welte &lt;laforge@gnumonks.org&gt;</span><br />
+</div>
+<div class="sect1 slide">
+<h1 id="_introduction">Introduction</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+Everybody uses cellphones and mobile internet these days
+</span>
+</li>
+<li>
+<span>
+Still very few people know what&#8217;s going on, even those with deep TCP/IP understanding
+</span>
+</li>
+<li>
+<span>
+Let&#8217;s try to shed some light on the inner workings on a protocol level
+</span>
+<div class="dlist"><dl class="">
+<dt class="hdlist1">
+NOTE
+</dt>
+<dd>
+<p>
+this talk is about 2G (GSM/GPRS/EDGE) and 3G (UMTS/HS*PA) only
+</p>
+</dd>
+</dl></div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_classic_gsm_2g_network_as_digraph">Classic GSM (2G) network as digraph</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock graphviz">
+<div class="content">
+<img src="phone_powerup__1.png" alt="phone_powerup__1.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_powering_up_the_phone">Powering up the phone</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+Your various processors / cores boot up
+</span>
+</li>
+<li>
+<span>
+Hardware gets initialized
+</span>
+</li>
+<li>
+<span>
+We will look at the cellular related activity only here
+</span>
+</li>
+<li>
+<span>
+Registering to a Cellular network can take <strong>ages</strong> at times. Why is that?
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_network_selection_2g_rf_power_scan">Network Selection (2G): RF Power Scan</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+GSM has many narrow-band channels/frequencies (ARFCN = Absolute Radio Frequency Channel Number):
+</span>
+<ul class="">
+<li>
+<span>
+123 ARFCN in 850 MHz
+</span>
+</li>
+<li>
+<span>
+173 ARFCN in 900 MHz
+</span>
+</li>
+<li>
+<span>
+373 ARFCN in 1800 MHz
+</span>
+</li>
+<li>
+<span>
+298 ARFCN in 1900 MHz
+</span>
+</li>
+<li>
+<span>
+total of 967 ARFCN in a quad-band phone
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+The phone performs a (quick) RF power scan over all ARFCN to determine which channels contain how much energy (RxLev, RSSI)
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_network_selection_2g_freq_sync_burst_detection">Network Selection (2G): Freq + Sync burst detection</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+the phone picks the channels with highest amount of energy
+</span>
+</li>
+<li>
+<span>
+it tries to decode the FCCH (Frequency Correction Channel) to slave its own internal clock (VCTCXO) to the frequency information contained in the FCCH
+</span>
+</li>
+<li>
+<span>
+it then moves to the SCH (Synchronization Channel) to determine the current GSM frame number + training sequence code
+</span>
+</li>
+<li>
+<span>
+finally, it is aligned with both the <strong>carrier frequency</strong>, and knows where in the <strong>time division multiplex</strong> frame/multiframe the BTS (Cell) currently transmits
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_network_selection_2g_bcch_decode">Network Selection (2G): BCCH decode</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+After Frequency and Sync burst detection, the phone moves to BCCH (Broadcast Common Control Channel)
+</span>
+</li>
+<li>
+<span>
+The BCCH contains a loop of repeated broadcasts of so-called <strong>SYSTEM INFORMATION</strong> messages
+</span>
+</li>
+<li>
+<span>
+There are many different <strong>SYSTEM INFORMATION TYPEs</strong> which are repeatedly iterated over
+</span>
+</li>
+<li>
+<span>
+SYSTEM INFORMATION (SI) 3 and 4 contain, among other things MCC + MNC information
+</span>
+<ul class="">
+<li>
+<span>
+MCC: Mobile Country Code (262 for Germany)
+</span>
+</li>
+<li>
+<span>
+MNC: Mobile Network Code (01 for T-Mobile, 02 for Vodafone, 03 for E-Plus, &#8230;)
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+Now the phone knows to which operator the cell broadcasting on this ARFCN
+</span>
+</li>
+<li>
+<span>
+The process of FCCH + SCH alignment with successive BCCH decoding is repeated for a number of strong signal ARFCNs to create a list of "available networks"
+</span>
+<ul class="">
+<li>
+<span>
+this is the output of what you see when you do a <strong>manual network search</strong> on your phone
+</span>
+<ul class="">
+<li>
+<span>
+the numeric MCC/MNC is typically translated in a string name based on a mapping table in the phone firmware, possibly extended by information on the SIM (EF.PNN, EF.OPL)
+</span>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_network_selection_which_network_to_register">Network Selection: Which Network to register</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+Assuming we have a list of ARFCN &lt;&#8594; MCC+MNC, which network do we choose?
+</span>
+<ul class="">
+<li>
+<span>
+if manual network selection: use whatever the user has chosen
+</span>
+</li>
+<li>
+<span>
+we assume automatic network selection below
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+If the cell-advertised MCC+MNC matches the IMSI prefix, it is the home network
+</span>
+<ul class="">
+<li>
+<span>
+home network trumps everything else
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+SIM / USIM contains various lists which operators use to control selection policy in roaming
+</span>
+<ul class="">
+<li>
+<span>
+EF.PLMNsel (PLMN Selector)
+</span>
+</li>
+<li>
+<span>
+EF.PLMNwAcT (User-controlled PLMN Selector with Access Technology)
+</span>
+</li>
+<li>
+<span>
+EF.HPPLMN (Higher Priority PLMN)
+</span>
+</li>
+<li>
+<span>
+EF.FPLMN (Forbidden PLMNs)
+</span>
+</li>
+<li>
+<span>
+EF.OPLMNwACT (Operator-controlled LMN Selector with Access Technology)
+</span>
+</li>
+<li>
+<span>
+EF.HPLMNwAcT (Home PLMN Selector with Access Technology)
+</span>
+</li>
+<li>
+<span>
+EF.EHPLMN (Equivalent HPLMN)
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+finally, MS will select a (first) cell to attempt registration.
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_cell_selection_state_machine">Cell Selection State Machine</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="gsm_cell_selection.png" alt="gsm_cell_selection.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_registering_to_a_network_location_update">Registering to a network: LOCATION UPDATE</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+<strong>LOCATION UPDATE</strong> is a key transaction on the MM-sublayer of the Layer3 of the 2G/3G protocol stack
+</span>
+</li>
+<li>
+<span>
+it is used to update the location/presence information of the network
+</span>
+</li>
+<li>
+<span>
+there are variants:
+</span>
+<ul class="">
+<li>
+<span>
+IMSI ATTACH is used for initial registration at power-up (our case here)
+</span>
+</li>
+<li>
+<span>
+NORMAL is an update triggered by a change of location (arae code) as the user moves around the coverage
+</span>
+</li>
+<li>
+<span>
+PERIODIC is used when a timer expires, similar to a <em>keep alive</em> in many protocols
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+the <strong>MM LOCATION UPDATE</strong> on the Um/Abis/A interface up to the MSC is translated into a <strong>MAP UpdateLocation</strong> towards the HLR (central subscriber database)
+</span>
+</li>
+<li>
+<span>
+authentication procedure may (should!) follow to cryptographically verify identity of subscriber
+</span>
+</li>
+<li>
+<span>
+finally, the network either sends a <strong>MM LOCATION UPDATE ACCEPT</strong> or <strong>MM LOCATION UPDATE REJECT</strong>
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_gsm_control_plane_protocol_stack">GSM Control Plane Protocol Stack</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="gsm_control_stack.svg" alt="gsm_control_stack.svg" width="100%" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_location_update_layer_3_only">LOCATION UPDATE: Layer 3 Only</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="location_update_l3only.png" alt="location_update_l3only.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_location_update_ladder_diagram">LOCATION UPDATE: Ladder Diagram</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="location_update.png" alt="location_update.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_gprs_for_packet_switched_servics">GPRS for packet switched servics</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock graphviz">
+<div class="content">
+<img src="phone_powerup__2.png" alt="phone_powerup__2.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_registering_for_packet_switched_services_gprs_attach">Registering for packet switched services: GPRS ATTACH</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+packet-switched services were added about a decade after circuit-switched
+</span>
+<ul class="">
+<li>
+<span>
+hence, packet-switched attach is traditionally independent of circuit-switched attach
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+GPRS ATTACH is performed from MS to SGSN
+</span>
+<ul class="">
+<li>
+<span>
+it&#8217;s called GPRS ATTACH even for EDGE or even UMTS
+</span>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_gprs_control_plane_protocol_stack">GPRS Control Plane Protocol Stack</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="gprs_control_stack.svg" alt="gprs_control_stack.svg" width="100%" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_gprs_attach_ladder_diagram">GPRS ATTACH: Ladder Diagram</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="gprs_attach.png" alt="gprs_attach.png" width="100%" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_establishing_a_pdp_context">Establishing a PDP Context</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+in order to exchange user-IP data with the public Internet, a tunnel must be established over the entire GSM/GPRS/UMTS infrastructure
+</span>
+<ul class="">
+<li>
+<span>
+one Tunnel end is inside the phone
+</span>
+</li>
+<li>
+<span>
+other end is in the GGSN (Gateway GPRS Support Node)
+</span>
+</li>
+<li>
+<span>
+it&#8217;s a true point-to-point link, no netmask/broadcast/arp/link-layer
+</span>
+</li>
+<li>
+<span>
+if PPP is involved, this is only between the phone/modem baseband processor and the external computer
+</span>
+</li>
+</ul>
+</li>
+<li>
+<span>
+IP address allocation + DNS server addresses exchanged via <strong>protocol control options (PCO)</strong> inside PDP
+ context activation
+</span>
+</li>
+<li>
+<span>
+phone sends <strong>PDP CONTEXT ACTIVATE</strong> to network (SGSN)
+</span>
+</li>
+<li>
+<span>
+network (SGSN) responds with <strong>PDP CONTEXT ACTIVATE ACK</strong> in succesful case
+</span>
+</li>
+<li>
+<span>
+user IP data may now be exchanged
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_pdp_context_act_ladder_diagram">PDP CONTEXT ACT: Ladder Diagram</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="gprs_pdp_ctx_act.png" alt="gprs_pdp_ctx_act.png" width="100%" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_classic_umts_3g_network_as_digraph">Classic UMTS (3G) network as digraph</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock graphviz">
+<div class="content">
+<img src="phone_powerup__3.png" alt="phone_powerup__3.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_umts_3g_cell_selection">UMTS (3G) Cell Selection</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+differences primarily at physical layer
+</span>
+<ul class="">
+<li>
+<span>
+WCDMA instead of TDMA (GSM)
+</span>
+</li>
+<li>
+<span>
+RF Channels are 5MHz wide, so many less RF channels to scan
+</span>
+</li>
+<li>
+<span>
+however, MS (now called UE) has to search in code-space, as many cells on same frequency channel
+</span>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_umts_3g_cell_selection_2">UMTS (3G) Cell Selection</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="imageblock">
+<div class="content">
+<img src="umts_cell_selection.png" alt="umts_cell_selection.png" />
+</div>
+</div>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_umts_3g_cell_selection_3">UMTS (3G) Cell Selection</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+Layer 3 is almost identical to GSM
+</span>
+</li>
+<li>
+<span>
+<strong>MM LOCATION UPDATE (Type: IMSI ATTACH)</strong> between MS(UE) and MSC
+</span>
+</li>
+<li>
+<span>
+<strong>PS ATTACH</strong> between MS(UE) and SGSN
+</span>
+</li>
+<li>
+<span>
+<strong>PDP CONTEXT ACTIVATION</strong> between MS(UE) and SGSN
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_further_reading">Further Reading</h1>
+<div class="sectionbody" style="max-width:45em">
+<ul class="">
+<li>
+<span>
+Die GSM Dm-Kanaele im Dialog, Prf. Dr. Joachim Goeller, <a href="http://www.informatik.hu-berlin.de/~goeller/isdn/DieGSMDmKanaele.pdf">http://www.informatik.hu-berlin.de/~goeller/isdn/DieGSMDmKanaele.pdf</a>
+</span>
+</li>
+<li>
+<span>
+The GSM Dm-Channels (english version), <a href="http://www.informatik.hu-berlin.de/~goeller/isdn/GSMDmChannels.pdf">http://www.informatik.hu-berlin.de/~goeller/isdn/GSMDmChannels.pdf</a>
+</span>
+</li>
+<li>
+<span>
+3GPP TS 43.022: "Functions related to Mobile Station in idle mode and
+ group receive mode" <a href="http://www.3gpp.org/DynaReport/43022.htm">http://www.3gpp.org/DynaReport/43022.htm</a> (GSM/GPRS)
+</span>
+</li>
+<li>
+<span>
+3GPP TS 25.304 "User Equipment (UE) procedures in idle mode and
+ procedures for cell reselection in connected mode"
+ <a href="http://www.3gpp.org/DynaReport/25304.htm">http://www.3gpp.org/DynaReport/25304.htm</a> (UMTS_
+</span>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect1 slide">
+<h1 id="_eof">EOF</h1>
+<div class="sectionbody" style="max-width:45em">
+<div class="paragraph"><p>End of File</p></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/2018/phone_protocol-eh2018/phone_powerup__1.png b/2018/phone_protocol-eh2018/phone_powerup__1.png
new file mode 100644
index 0000000..ddd76c1
--- /dev/null
+++ b/2018/phone_protocol-eh2018/phone_powerup__1.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/phone_powerup__2.png b/2018/phone_protocol-eh2018/phone_powerup__2.png
new file mode 100644
index 0000000..c9cbe7c
--- /dev/null
+++ b/2018/phone_protocol-eh2018/phone_powerup__2.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/phone_powerup__3.png b/2018/phone_protocol-eh2018/phone_powerup__3.png
new file mode 100644
index 0000000..fe9b211
--- /dev/null
+++ b/2018/phone_protocol-eh2018/phone_powerup__3.png
Binary files differ
diff --git a/2018/phone_protocol-eh2018/umts_cell_selection.png b/2018/phone_protocol-eh2018/umts_cell_selection.png
new file mode 100644
index 0000000..3579fb4
--- /dev/null
+++ b/2018/phone_protocol-eh2018/umts_cell_selection.png
Binary files differ
personal git repositories of Harald Welte. Your mileage may vary