commit 925b4a1f80fbe028d6a5bf711d798c0b5ba8e636
Author: iwakeh <iwakeh(a)torproject.org>
Date: Fri Jul 14 09:19:46 2017 +0000
Add tests for Descriptor methods. Implements task-22912.
The different tests have separate methods for clarity when tests fail.
This is more important than the additional overhead of repeated
iteration over the test-descriptors, which are kept small.
---
.../org/torproject/descriptor/DescriptorTest.java | 164 ++++++++++++++++
.../bridge/2017-07-17-17-09-00-extra-infos | 130 +++++++++++++
.../bridge/2017-07-17-17-09-00-server-descriptors | 206 ++++++++++++++++++++
...170645-1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1 | 216 +++++++++++++++++++++
src/test/resources/other/2017-07-17-17-02-00 | 178 +++++++++++++++++
.../resources/other/op-nl-5242880-2017-07-17.tpf | 8 +
.../resources/relay/2017-07-17-17-00-00-consensus | 148 ++++++++++++++
.../relay/2017-07-17-17-00-00-consensus-microdesc | 136 +++++++++++++
...4C5B2E-6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601 | 117 +++++++++++
.../relay/2017-07-17-17-20-00-extra-infos | 136 +++++++++++++
src/test/resources/relay/2017-07-17-17-20-00-micro | 129 ++++++++++++
.../relay/2017-07-17-17-20-00-server-descriptors | 164 ++++++++++++++++
12 files changed, 1732 insertions(+)
diff --git a/src/test/java/org/torproject/descriptor/DescriptorTest.java b/src/test/java/org/torproject/descriptor/DescriptorTest.java
new file mode 100644
index 0000000..9a07cdf
--- /dev/null
+++ b/src/test/java/org/torproject/descriptor/DescriptorTest.java
@@ -0,0 +1,164 @@
+/* Copyright 2017 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.descriptor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
+(a)RunWith(Parameterized.class)
+public class DescriptorTest {
+
+ /** Different descriptor files. */
+ @Parameters
+ public static Collection<Object[]> pathFilename() {
+ return Arrays.asList(
+ new Object[][] {
+ {"other/2017-07-17-17-02-00", // test-filename in src/test/resources
+ ExitList.class, // descriptor type, i.e., the most specific interface
+ new String[] {"@type tordnsel 1.0"}, // all annotations
+ Integer.valueOf(1)}, // expected descriptor count in descriptor file
+
+ {"other/op-nl-5242880-2017-07-17.tpf",
+ TorperfResult.class,
+ new String[] {"@type torperf 1.1"},
+ Integer.valueOf(4)},
+
+ {"relay/2017-07-17-17-00-00-consensus",
+ RelayNetworkStatusConsensus.class,
+ new String[] {"@type network-status-consensus-3 1.0"},
+ Integer.valueOf(1)},
+
+ {"relay/2017-07-17-17-00-00-consensus-microdesc",
+ RelayNetworkStatusConsensus.class,
+ new String[] {"@type network-status-microdesc-consensus-3 1.0"},
+ Integer.valueOf(1)},
+
+ {"relay/2017-07-17-17-00-00-vote-0232AF901C31A04EE9848595AF9BB"
+ + "7620D4C5B2E-6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601",
+ RelayNetworkStatusVote.class,
+ new String[] {"@type network-status-vote-3 1.0"},
+ Integer.valueOf(1)},
+
+ {"relay/2017-07-17-17-20-00-extra-infos",
+ RelayExtraInfoDescriptor.class,
+ new String[] {"@type extra-info 1.0"},
+ Integer.valueOf(6)},
+
+ {"relay/2017-07-17-17-20-00-micro",
+ Microdescriptor.class,
+ new String[] {"@type microdescriptor 1.0"},
+ Integer.valueOf(14)},
+
+ {"relay/2017-07-17-17-20-00-server-descriptors",
+ RelayServerDescriptor.class,
+ new String[] {"@type server-descriptor 1.0"},
+ Integer.valueOf(4)},
+
+ {"bridge/20170717-170645-1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1",
+ BridgeNetworkStatus.class,
+ new String[] {"@type bridge-network-status 1.2"},
+ Integer.valueOf(1)},
+
+ {"bridge/2017-07-17-17-09-00-extra-infos",
+ BridgeExtraInfoDescriptor.class,
+ new String[] {"@type bridge-extra-info 1.3"},
+ Integer.valueOf(6)},
+
+ {"bridge/2017-07-17-17-09-00-server-descriptors",
+ BridgeServerDescriptor.class,
+ new String[] {"@type bridge-server-descriptor 1.2"},
+ Integer.valueOf(13)}
+ });
+ }
+
+ private int expDescCount;
+ private int annoCount;
+ private String[] annos;
+ private String filename;
+ private File fileForName;
+ private Class descClass;
+ private Iterator<Descriptor> descs;
+
+ /** This constructor receives the above defined data for each run. */
+ public DescriptorTest(String fn, Class clazz, String[] annos,
+ int expDescCount) throws Exception {
+ this.filename = fn;
+ this.fileForName = new File(fn);
+ this.expDescCount = expDescCount;
+ this.annos = annos;
+ this.annoCount = annos.length;
+ this.descClass = clazz;
+ this.descs = DescriptorSourceFactory.createDescriptorParser()
+ .parseDescriptors(bytesFromResource(), fileForName, filename)
+ .iterator();
+ }
+
+ @Test
+ public void testCounts() throws Exception {
+ int descCount = 0;
+ while (descs.hasNext()) {
+ Descriptor desc = descs.next();
+ descCount++;
+ assertEquals(filename + ": Invalid annotation count.",
+ annoCount, desc.getAnnotations().size());
+ }
+ assertEquals("Content of " + filename + ".", expDescCount, descCount);
+ }
+
+ @Test
+ public void testNewline() throws Exception {
+ while (descs.hasNext()) {
+ Descriptor desc = descs.next();
+ byte[] raw = desc.getRawDescriptorBytes();
+ assertEquals(filename + ": Newline missing.", '\n', raw[raw.length - 1]);
+ }
+ }
+
+ @Test
+ public void testTypes() throws Exception {
+ while (descs.hasNext()) {
+ Descriptor desc = descs.next();
+ assertTrue(filename + ": Expected " + descClass.getName()
+ + ", but received: "
+ + Arrays.toString(desc.getClass().getInterfaces()),
+ Arrays.asList(desc.getClass().getInterfaces()).contains(descClass));
+ }
+ }
+
+ @Test
+ public void testAnnotations() throws Exception {
+ while (descs.hasNext()) {
+ Descriptor desc = descs.next();
+ for (String anno : annos) {
+ assertTrue(filename + ": Annotation '" + anno + "' missing in "
+ + Arrays.toString(annos), desc.getAnnotations().contains(anno));
+ }
+ }
+ }
+
+ private byte[] bytesFromResource() throws Exception {
+ StringBuilder sb = new StringBuilder();
+ BufferedReader br = new BufferedReader(new InputStreamReader(getClass()
+ .getClassLoader().getResourceAsStream(filename)));
+ String line = br.readLine();
+ while (null != line) {
+ sb.append(line).append('\n');
+ line = br.readLine();
+ }
+ return sb.toString().getBytes();
+ }
+
+}
diff --git a/src/test/resources/bridge/2017-07-17-17-09-00-extra-infos b/src/test/resources/bridge/2017-07-17-17-09-00-extra-infos
new file mode 100644
index 0000000..97bbea7
--- /dev/null
+++ b/src/test/resources/bridge/2017-07-17-17-09-00-extra-infos
@@ -0,0 +1,130 @@
+@type bridge-extra-info 1.3
+extra-info GreenBelt 2D79397FBBF3B020132F8C14CAB167A4D0D020F8
+master-key-ed25519 JVSrRlvB8UUP1XWS1K7QgI2wAFNm/i3tWuAMucoyK0M
+published 2017-07-17 14:16:22
+write-history 2017-07-17 13:48:29 (14400 s) 105549514752,108332138496,109085942784,87797943296,114002153472,114446906368
+read-history 2017-07-17 13:48:29 (14400 s) 103141830656,106632499200,107311380480,86068060160,111722652672,111907606528
+dirreq-write-history 2017-07-17 13:48:29 (14400 s) 2419212288,1711367168,1792053248,1741422592,2294780928,2548772864
+dirreq-read-history 2017-07-17 13:48:29 (14400 s) 111327232,101064704,67574784,67384320,103692288,114972672
+geoip-db-digest 1317BB3525E85E01FB34A89E04CE549AC23D07BD
+geoip6-db-digest 865048C69BEC02B37268BFBAD66D9729B21CFCF5
+dirreq-stats-end 2017-07-16 18:08:47 (86400 s)
+dirreq-v3-ips ru=1128,us=1128,ua=936,tr=632,de=280,gb=280,ir=192,eg=184,by=176,in=168,jp=128,br=112,fr=112,au=104,ca=104,sa=88,nl=80,es=72,id=64,it=64,mx=64,bd=56,ae=48,cn=48,ph=48,ar=40,at=32,ch=32,dz=32,fi=32,hk=32,my=32,pl=32,se=32,sg=32,za=32,??=24,co=24,hu=24,ie=24,il=24,kr=24,ma=24,pk=24,ro=24,ve=24,be=16,bg=16,cl=16,cz=16,jo=16,kz=16,ng=16,no=16,nz=16,om=16,pe=16,pt=16,qa=16,th=16,tw=16,uz=16,vn=16,af=8,al=8,ao=8,az=8,ba=8,bh=8,bj=8,bo=8,bs=8,cd=8,ci=8,ck=8,cm=8,cr=8,cu=8,cy=8,dk=8,ec=8,ee=8,et=8,fj=8,ga=8,gh=8,gp=8,gr=8,gt=8,hn=8,hr=8,ht=8,iq=8,is=8,ke=8,kg=8,kh=8,kn=8,kw=8,ky=8,lb=8,lk=8,lt=8,lu=8,lv=8,ly=8,md=8,mg=8,mk=8,ml=8,mn=8,mt=8,mv=8,na=8,np=8,pg=8,pr=8,ps=8,py=8,re=8,rs=8,rw=8,sc=8,sd=8,si=8,sk=8,sv=8,sy=8,td=8,tj=8,tm=8,tn=8,tt=8,ug=8,uy=8,ye=8,zw=8
+dirreq-v3-reqs us=2008,ru=1744,ua=1480,tr=896,gb=480,de=448,eg=256,in=256,by=240,ir=240,jp=232,au=176,br=176,ca=168,fr=168,sa=144,mx=128,es=120,nl=120,id=88,ph=88,bd=80,it=80,ae=72,cn=72,ar=64,sg=64,za=64,ch=56,dz=56,my=56,ve=56,fi=48,kr=48,pl=48,se=48,??=40,hk=40,il=40,ma=40,at=32,be=32,bg=32,co=32,hu=32,nz=32,ro=32,th=32,cl=24,cz=24,ie=24,ke=24,kz=24,lu=24,ng=24,om=24,pk=24,rs=24,tw=24,vn=24,al=16,bo=16,ci=16,cr=16,gh=16,hn=16,is=16,jo=16,no=16,np=16,pe=16,pt=16,qa=16,sk=16,tm=16,uy=16,uz=16,ye=16,af=8,ao=8,az=8,ba=8,bh=8,bj=8,bs=8,cd=8,ck=8,cm=8,cu=8,cy=8,dk=8,ec=8,ee=8,et=8,fj=8,ga=8,gp=8,gr=8,gt=8,hr=8,ht=8,iq=8,kg=8,kh=8,kn=8,kw=8,ky=8,lb=8,lk=8,lt=8,lv=8,ly=8,md=8,mg=8,mk=8,ml=8,mn=8,mt=8,mv=8,na=8,pg=8,pr=8,ps=8,py=8,re=8,rw=8,sc=8,sd=8,si=8,sv=8,sy=8,td=8,tj=8,tn=8,tt=8,ug=8,zw=8
+dirreq-v3-resp ok=11456,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=11568,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=8848,timeout=2584,running=20,min=2138,d1=57861,d2=114568,q1=139291,d3=165778,d4=213175,md=253672,d6=294514,d7=343736,q3=373096,d8=409437,d9=559533,max=4798984
+transport obfs4
+bridge-stats-end 2017-07-16 18:08:59 (86400 s)
+bridge-ips ru=6544,ua=5080,us=4792,tr=3632,gb=1488,de=1480,ir=1232,in=1104,by=1024,eg=992,fr=656,jp=560,br=472,ca=464,nl=424,au=416,sa=416,it=400,id=304,es=288,mx=280,ae=272,dz=224,bd=216,cn=200,pl=192,ph=160,se=160,my=152,ro=144,at=136,fi=136,kr=136,ar=128,ch=128,cz=128,sg=128,??=120,za=120,hk=112,pk=112,be=96,co=96,pt=96,kz=88,ve=88,hu=80,ie=80,il=80,ma=80,ye=80,cl=72,ng=72,no=72,th=72,bg=64,dk=64,jo=64,uz=64,gr=56,nz=56,om=56,qa=56,vn=56,tw=48,et=40,ke=40,lu=40,ly=40,pe=40,rs=40,tn=40,az=32,ec=32,gh=32,kw=32,sk=32,al=24,ba=24,bo=24,cr=24,ee=24,is=24,lb=24,lk=24,lt=24,lv=24,md=24,mn=24,np=24,ps=24,sd=24,si=24,tm=24,uy=24,af=16,bh=16,ci=16,do=16,ge=16,iq=16,kg=16,pr=16,re=16,sy=16,tj=16,tz=16,am=8,ao=8,as=8,aw=8,bb=8,bj=8,bm=8,bn=8,bs=8,bw=8,cd=8,cg=8,ck=8,cm=8,cu=8,cy=8,dj=8,er=8,fj=8,ga=8,gf=8,gn=8,gp=8,gt=8,gu=8,gy=8,hn=8,hr=8,ht=8,jm=8,kh=8,kn=8,ky=8,la=8,lr=8,ls=8,me=8,mg=8,mh=8,mk=8,ml=8,mm=8,mo=8,mq=8,mr=8,mt=8,mu=8,mv=8,mz=8,na=8,ne=8,ni=8,pa=8,pf=8,pg=8,py=8,rw=8,sc=8,sn=8
,so=8,sr=8,ss=8,sv=8,td=8,tg=8,tt=8,ug=8,vc=8,vi=8,vu=8,zm=8,zw=8
+bridge-ip-versions v4=37808,v6=0
+bridge-ip-transports <OR>=8,obfs4=37808
+router-digest-sha256 NB4cM2alvoNeaOX4cYheUln/8XIDacLKjDGIlhNGZSg
+router-digest 628E6990DC129C3AC99CF592EAF2A028F244AD1F
+@type bridge-extra-info 1.3
+extra-info vvput 2AA50DFC2446BDFB26204C23EDB1ED21736C6450
+published 2017-07-17 14:18:20
+write-history 2017-07-17 13:12:38 (14400 s) 478208,567296,497664,568320,449536,525312
+read-history 2017-07-17 13:12:38 (14400 s) 5647360,6864896,4580352,5794816,5284864,5654528
+dirreq-write-history 2017-07-17 04:46:41 (14400 s) 0,0,0,0,8192,7168
+dirreq-read-history 2017-07-17 04:46:41 (14400 s) 0,0,0,0,0,0
+geoip-db-digest C1EB5237F2FBAF63381D8551157F13D12EFCCA25
+geoip6-db-digest 1F99B6B0EC78E9DB34D61AE7E0FC261D558E8E5D
+dirreq-stats-end 2017-07-17 00:46:45 (86400 s)
+dirreq-v3-ips
+dirreq-v3-reqs
+dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=0,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=0,timeout=0,running=0
+transport obfs3
+bridge-stats-end 2017-07-17 00:48:31 (86400 s)
+bridge-ips us=8
+bridge-ip-versions v4=8,v6=0
+bridge-ip-transports <OR>=8
+router-digest 99EE538101C1FAD637283271044C619E69F33927
+@type bridge-extra-info 1.3
+extra-info Unnamed 68442E1B246A3DE363E5EFA52FE2EFCD12188E91
+master-key-ed25519 ORrTGU5HLUWpuxsNWqZYgmoUHOMdc34by/CxB/pgZYs
+published 2017-07-17 14:18:38
+write-history 2017-07-17 10:28:11 (14400 s) 316416,3081216,561152,1152000,1223680,431104
+read-history 2017-07-17 10:28:11 (14400 s) 3095552,9388032,5097472,7372800,8696832,4204544
+dirreq-write-history 2017-07-16 14:48:52 (14400 s) 489472,1843200,0,691200,978944,0
+dirreq-read-history 2017-07-16 14:48:52 (14400 s) 0,86016,0,0,100352,0
+geoip-db-digest AFD609025B66305AD9FA8E0B15AF4F2BC82271F1
+geoip6-db-digest A69FD14ACE46EE695F589ACE0EB7B915285B51B4
+router-digest-sha256 T/w7NQSKelIGeBMxHvaqN1yciV014UPlxiqIzh6xW4Q
+router-digest 6C297C0FED6A298BFF7955E6B7AE4062F315A264
+@type bridge-extra-info 1.3
+extra-info surgednonmilitan 67FE03ECF1A963643B4B5545829B02B5D80E4F06
+master-key-ed25519 v60t0gbplH0EH7x6B/LADtPaVsMySHjfMum6KM5f66M
+published 2017-07-17 14:19:31
+write-history 2017-07-17 14:18:10 (14400 s) 5555200,1520640,1858560,2085888,3042304,2745344
+read-history 2017-07-17 14:18:10 (14400 s) 10706944,6148096,6189056,6151168,6643712,6276096
+dirreq-write-history 2017-07-17 12:01:04 (14400 s) 3991552,864256,656384,765952,43008,2001920
+dirreq-read-history 2017-07-17 12:01:04 (14400 s) 381952,104448,6144,27648,4096,136192
+geoip-db-digest B2E5105287668771E34A66F90B34982D419727EF
+geoip6-db-digest 8DA8AC3C8158CBFDF7DB53BBF73338246872371A
+dirreq-stats-end 2017-07-17 00:01:05 (86400 s)
+dirreq-v3-ips de=8,gr=8,kz=8,ru=8,ua=8
+dirreq-v3-reqs de=8,gr=8,kz=8,ru=8,ua=8
+dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=32,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=4,timeout=4,running=0
+transport obfs4
+bridge-stats-end 2017-07-17 00:01:13 (86400 s)
+bridge-ips by=8,de=8,gr=8,hk=8,ir=8,kr=8,kz=8,ru=8,ua=8,us=8
+bridge-ip-versions v4=24,v6=0
+bridge-ip-transports <OR>=16,obfs4=8
+router-digest-sha256 FhnLcLbuaWoxgTfWYHAYS30TivXLDXS8KzQS9GgQDF4
+router-digest 361209255A0CC41D4A3D5C8E57CE9B9DC8719E76
+@type bridge-extra-info 1.3
+extra-info Unnamed 2E4E258AA85A98ACFA9B138FCF07BB24F0D614A2
+master-key-ed25519 ExFcpgeUE1pYkJucC+8W5U6vudH385v4etFfBnfS7Ss
+published 2017-07-17 14:19:34
+write-history 2017-07-17 11:35:03 (14400 s) 151798784,115852288,661504,11895808,100169728,210285568
+read-history 2017-07-17 11:35:03 (14400 s) 153724928,117967872,4093952,15422464,102296576,212571136
+dirreq-write-history 2017-07-17 11:35:03 (14400 s) 2617344,3309568,13312,1969152,2119680,3956736
+dirreq-read-history 2017-07-17 11:35:03 (14400 s) 19456,37888,0,17408,50176,58368
+geoip-db-digest B2E5105287668771E34A66F90B34982D419727EF
+geoip6-db-digest 8DA8AC3C8158CBFDF7DB53BBF73338246872371A
+dirreq-stats-end 2017-07-17 07:29:07 (86400 s)
+dirreq-v3-ips ca=8,ir=8,kz=8
+dirreq-v3-reqs ca=8,ir=8,kz=8
+dirreq-v3-resp ok=24,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=0,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=8,timeout=12,running=0
+hidserv-stats-end 2017-07-17 07:29:07 (86400 s)
+hidserv-rend-relayed-cells -419 delta_f=2048 epsilon=0.30 bin_size=1024
+hidserv-dir-onions-seen -21 delta_f=8 epsilon=0.30 bin_size=8
+transport scramblesuit
+transport obfs3
+transport obfs4
+bridge-stats-end 2017-07-17 07:29:17 (86400 s)
+bridge-ips ca=8,cl=8,ir=8,kz=8,ru=8,tr=8
+bridge-ip-versions v4=16,v6=0
+bridge-ip-transports <OR>=8,obfs3=8,obfs4=8,scramblesuit=8
+router-digest-sha256 Uqm0Ajxniq2cEpnpyFtcIXUNsXndstJEcrwgk/UzEms
+router-digest 1AB27BBC91C9C23553E03189C3828FD627551F8D
+@type bridge-extra-info 1.3
+extra-info Dallaslitai 3D4782C05C60D7D0189FDD57B3A37DB4DCD14834
+master-key-ed25519 f7SX8VP4n+oys+1P1HldxOvIVbwxp7z4FYlK+kVFvRw
+published 2017-07-17 15:19:17
+write-history 2017-07-17 14:04:30 (14400 s) 9009152,6066176,15356928,1211392,5023744,12357632
+read-history 2017-07-17 14:04:30 (14400 s) 13033472,10901504,19917824,6920192,8665088,18658304
+dirreq-write-history 2017-07-17 12:00:50 (14400 s) 1353728,624640,648192,5120,0,2026496
+dirreq-read-history 2017-07-17 12:00:50 (14400 s) 18432,0,4096,4096,0,30720
+geoip-db-digest B2E5105287668771E34A66F90B34982D419727EF
+geoip6-db-digest 8DA8AC3C8158CBFDF7DB53BBF73338246872371A
+dirreq-stats-end 2017-07-17 00:00:50 (86400 s)
+dirreq-v3-ips bo=8,gb=8,se=8,us=8
+dirreq-v3-reqs bo=8,gb=8,se=8,us=8
+dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=0,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=8,timeout=4,running=0
+transport obfs4
+bridge-stats-end 2017-07-17 00:01:00 (86400 s)
+bridge-ips bo=8,gb=8,se=8,us=8
+bridge-ip-versions v4=8,v6=0
+bridge-ip-transports <OR>=8,obfs4=8
+router-digest-sha256 TWliWLwkFCviVpBZrkmM8Xzs3eKgXgjp6GfLvl+khSs
+router-digest 7E7474F0350F5490ABD5A8189FFFE2D3698ED78A
diff --git a/src/test/resources/bridge/2017-07-17-17-09-00-server-descriptors b/src/test/resources/bridge/2017-07-17-17-09-00-server-descriptors
new file mode 100644
index 0000000..6845283
--- /dev/null
+++ b/src/test/resources/bridge/2017-07-17-17-09-00-server-descriptors
@@ -0,0 +1,206 @@
+@type bridge-server-descriptor 1.2
+router Unnamed 10.214.7.84 63922 0 0
+master-key-ed25519 wLWm/QNsQc5NDaziWGkCwJjUZHxAbxgsflQQdjNaeU8
+platform Tor 0.2.9.5-alpha on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 14:19:17
+fingerprint 5435 E6A9 7AB7 EEBB FC2D 58EF 6278 3134 D8C1 CE0D
+uptime 6165120
+bandwidth 1073741824 1073741824 56431
+extra-info-digest C93171F04F54A325DF42C11CED66CCB964EF37D5 MZqGs84v/c2lu6ZNZ9sQB8ttghioxGe36EBmHH3XR3A
+hidden-service-dir
+contact somebody
+ntor-onion-key 2ybekAaXbyYC0gXQRwctg9PZ8zkwl2d2TmpWrHcnVyI=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 IhUHXgdVRmyq0KcoXK2zIrs007Lsno8YX6NBuzNS/yk
+router-digest 394DABEED04CC22A3641FF21EDC2B6D4530AC48A
+@type bridge-server-descriptor 1.2
+router Unnamed 10.173.7.222 50855 0 0
+master-key-ed25519 dHZH8B+jD0HKmYvtJtY1SxnRrFYkUGYXr31buY/77/M
+platform Tor 0.2.9.9 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 14:23:19
+fingerprint 27BA CCF4 A1DA B47A 65DE E83B DCBB 802F 3F1E CC56
+uptime 13819693
+bandwidth 102400 204800 125181
+extra-info-digest E04C24EBD00E7F5CADD235D0380FF9BDA11E09C6 IYdlq9+XSGBmY9vsXphd5BkYG+a9dJ6BzfdNttkO8r0
+hidden-service-dir
+ntor-onion-key zKwAUCseMtCJSTcqKLDxF4AXjO9cQXrtb8SxQmU+6V0=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 tUYJ0nqU5O/9joRdAsxEF0WjLYXNA5gbJqST47dQR+k
+router-digest 567854B649467FAD6D242FAAE1FE1B55F8BABFD5
+@type bridge-server-descriptor 1.2
+router vvput 10.2.225.7 61718 0 0
+platform Tor 0.2.5.12 on Linux
+protocols Link 1 2 Circuit 1
+published 2017-07-17 14:18:20
+fingerprint 2AA5 0DFC 2446 BDFB 2620 4C23 EDB1 ED21 736C 6450
+uptime 1690189
+bandwidth 102400 204800 10604
+extra-info-digest 99EE538101C1FAD637283271044C619E69F33927
+hidden-service-dir
+contact somebody
+ntor-onion-key MM8eovY4NIYPnj/+yQ/4H7A4SCDTFXOZ8+uhVFG7LV8=
+reject *:*
+router-digest 7582169F4C4094D788248A520C38C3197ACB5AFD
+@type bridge-server-descriptor 1.2
+router Unnamed 10.141.200.206 59729 0 0
+master-key-ed25519 FEAa0+N+l/0cfxuyP099ZS/1w3KJ46VaWLKyscU275I
+platform Tor 0.3.0.9 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1-2 HSIntro=3-4 HSRend=1-2 Link=1-4 LinkAuth=1,3 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:18:44
+fingerprint E0DE 3BB7 195A 5756 9DF1 8D05 E90E A8F6 5268 A1A5
+uptime 1218611
+bandwidth 1073741824 1073741824 433403
+extra-info-digest 9345483248DB56263B0CB1937FD46BFB8CEAD0AB UY6Ecjk6zy91OZ5zfRUtP+DoG+DeJYcI7y+tNBtWkGQ
+hidden-service-dir
+ntor-onion-key CjwW4c7Kiae+xhm3yeqeCnp3oM6kZexvK1tENh9cdXk=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 +Jtn5rZxh376uOD9HD+ROlGi4wGIJYBmZ94KH3ux4R0
+router-digest B9E1393AD468A80B66219FDE3820B0843CFB7896
+@type bridge-server-descriptor 1.2
+router labionasalquotat 10.223.117.137 60614 0 0
+master-key-ed25519 O3sakRYUUIpEZA0r+Tuh6uXnloJuu2kGrU0c3U3Vi2o
+platform Tor 0.2.8.11 on Linux
+protocols Link 1 2 Circuit 1
+published 2017-07-17 15:18:47
+fingerprint 66E2 C927 A387 6D1A 9E5E 0409 2E6C 4268 82BD 45CA
+uptime 1523656
+bandwidth 1073741824 1073741824 489107
+extra-info-digest C9817F6E48872AED46FFFF7201DF0654A1405B9E SaARUXVrZRjhEBeyr2VwwwXd+f77wkRzappN1z3NJpc
+hidden-service-dir
+ntor-onion-key /rnFCLsexH+1PBcUqnGTOb8gHUl9deA5UwNhRKaOCVU=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 hf+K0N5hfKZBhcdl+RyA3l/7zb+ON4TncULJ3QMW0VE
+router-digest 1450A5A9AB8EAD5D69887CFA799EA2EDDC44F719
+@type bridge-server-descriptor 1.2
+router embrazureStreete 10.19.147.51 52583 0 0
+master-key-ed25519 FuZxqdnD/jgBfDMwiVIbY1SXJyhtynwwrrY1izXUT0I
+platform Tor 0.2.9.11 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:18:52
+fingerprint C26A EB76 7A1F C754 22C4 10B1 3D65 8102 2611 08A3
+uptime 1523858
+bandwidth 1073741824 1073741824 56969
+extra-info-digest 7D006BE517852D43B3C23AB5816D817A829A8556 76UauAfB3rhhYjSS69zXq/W25Qql/V7hCY3y79dvLDE
+hidden-service-dir
+ntor-onion-key 5cxoIw4KATglAaO7bq4uquzBoNsuwmpeg4SsWZ6hEHQ=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 UZPJNJ7rb4fmi5TTaV66lFOIcI7mm3xWWjF1196hN4A
+router-digest BC910B1EE87B3EA158C552FCFF341F0353BBE6DF
+@type bridge-server-descriptor 1.2
+router StabTheBeast 10.141.90.219 61086 0 0
+platform Tor 0.2.5.12 on Linux
+protocols Link 1 2 Circuit 1
+published 2017-07-17 15:19:03
+fingerprint 819F 5E1E BDC5 5D55 43FC 47CC E5A5 EE1C 3445 328E
+uptime 11207286
+bandwidth 51200 102400 55546
+extra-info-digest 318739B651B7877FDDED17320E71423729094A56
+hidden-service-dir
+ntor-onion-key cKxSw4lynCyBs4ebs8sYFhpBJ1NI8/u+726ALcF7G2k=
+reject *:*
+router-digest 9D5F856A1559887AA06A1E75431D4A97FE5AF740
+@type bridge-server-descriptor 1.2
+router zumbooruckhonori 10.151.105.23 56942 0 0
+master-key-ed25519 04T6yloWrsZzkflSITR/LVT1sS/wgcl67dcDAodABfs
+platform Tor 0.2.9.11 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:19:06
+fingerprint 47FC 0EC8 E954 CE57 22EB 8C98 C160 164C 49B9 C44C
+uptime 1437494
+bandwidth 1073741824 1073741824 428587
+extra-info-digest AA617995E8936056368306558BA2B7A0D45CBE50 4X3cjdjsW3iiYC9O9aY01QqVYNmHWvi+wdeB3fzGcpE
+hidden-service-dir
+ntor-onion-key m0a+ANZLdekEQ8achmxjG3BeNZo5hqJ8pjH/K9PiyBA=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 cfIvFcbdbtR87HgbRmWfmRnn3xMoP4N+4p2gC+yokGI
+router-digest 73B6117AC4CF56CA39D0B1725E41F357224C6386
+@type bridge-server-descriptor 1.2
+router Dallaslitai 10.90.13.82 60498 0 0
+master-key-ed25519 f7SX8VP4n+oys+1P1HldxOvIVbwxp7z4FYlK+kVFvRw
+platform Tor 0.2.9.11 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:19:17
+fingerprint 3D47 82C0 5C60 D7D0 189F DD57 B3A3 7DB4 DCD1 4834
+uptime 1522275
+bandwidth 1073741824 1073741824 161213
+extra-info-digest 7E7474F0350F5490ABD5A8189FFFE2D3698ED78A TWliWLwkFCviVpBZrkmM8Xzs3eKgXgjp6GfLvl+khSs
+hidden-service-dir
+ntor-onion-key g3lMaB77v+OOPRaMZ5U7n6quaMAV/DJ4aq4isW9Ufxk=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 YR+is/xTBxt74b6ipMEx8DpW5D0VPiH7UwIapVz2v7w
+router-digest F66E4306BBAAFC6207D40F147EFFA18CC9DCC941
+@type bridge-server-descriptor 1.2
+router default 10.28.101.103 56333 0 0
+or-address [fd9f:2e19:3bcf::e2:ad7c]:56333
+master-key-ed25519 0jsj6BCIYe7RH442qcGy6rW4cd3DG0mwHJRwDHWfQOA
+platform Tor 0.3.0.9 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1-2 HSIntro=3-4 HSRend=1-2 Link=1-4 LinkAuth=1,3 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:19:13
+fingerprint 04AF 15D4 9715 7A68 1D07 861A 384B 84F1 2CD4 710E
+uptime 1278252
+bandwidth 512000 716800 573733
+extra-info-digest EF4EF5CF77507AE66B2592E78D2C105824B3B906 5/FiB4hadVIO+TInyJGJc+pZMFnx6bCxOJWLoNXL7QM
+hidden-service-dir
+ntor-onion-key 62OZlr5l1SPXPmqWAS45T3bKuU4uxyKaYYSPiQPPMis=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 fh4ECi75FWmq9k21LM/SzC9g3ScxXJtyxI2CdW3oNMA
+router-digest 249286501104CBDDE4A78E469ED16CDBA1A1F5FF
+@type bridge-server-descriptor 1.2
+router retroactivitiesu 10.236.253.124 59990 0 0
+master-key-ed25519 wltPG3NCAAtHuNKbP3p1oDhoWZbSAEu/XUP3E1hONiM
+platform Tor 0.2.9.11 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:19:13
+fingerprint 87EB B1FA 5FC4 0BED 35D0 0020 E250 5EBE 4648 033E
+uptime 1412261
+bandwidth 1073741824 1073741824 7823
+extra-info-digest DC13C130880A5A78B70185B84DE82081A19B79ED sWiuxK6qJahAm/WEV+/Ibs7mllufi+hk0kOJEyQyxCI
+hidden-service-dir
+ntor-onion-key o1plYeCh/ShOaq24g7bCny407FP6G9kuTiDx9lb1qgA=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 rYfYI/wNg2ht2N/xGBr7+EtE6u196vheQLXP0DvSfPc
+router-digest EECC37EAA79AD11C8C1889BC71789D7ABB37E592
+@type bridge-server-descriptor 1.2
+router Unnamed 10.58.102.162 65136 0 0
+master-key-ed25519 f8Ey4lWrG2vHj57T2oVXtBZ6sHaZWJFa6w3RUrAoDRE
+platform Tor 0.3.0.7 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1-2 HSIntro=3-4 HSRend=1-2 Link=1-4 LinkAuth=1,3 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:19:14
+fingerprint D5F0 8EC9 E12E EADA DAC4 E0DE 6C57 B96E 11B2 65B7
+uptime 4774907
+bandwidth 1073741824 1073741824 867280
+extra-info-digest A0652B61E20A1AF92E8CB9622EE78DC5592028AD jos5KloKLVWXBzZHefJ4ZdbkSgTDJonnw2usFs267Ic
+hidden-service-dir
+contact somebody
+ntor-onion-key YrRlhf0ZAk6BzxJU1PY0V05Vt5+3qhsAH2ez/yfyj24=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 asrYJlmBn2x5JkiiKGUjY4+KMxA8IuLhzrMwt1F3iM0
+router-digest E2DDBD65EB9BBE14E461D13C9D5C1192245A735B
+@type bridge-server-descriptor 1.2
+router adjuvantvarious 10.235.98.118 54385 0 0
+master-key-ed25519 5bxet6FKxUXTfkcCl4YCFFrGKojAHc8aG3dg7Qje8S8
+platform Tor 0.2.9.11 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 15:19:15
+fingerprint 76B0 98AF 4E22 3CFC F393 35E4 4602 08FB 17EF 92C5
+uptime 1523715
+bandwidth 1073741824 1073741824 319897
+extra-info-digest BAC5BC5E0E4B167D093FEA65D42E3395715AF2C3 QJAB1qx3bhI/oGMquE3U1zaUuuzz7bBTneM7qhkgjdM
+hidden-service-dir
+ntor-onion-key 95UBL5WZoFY3bo2kH7aWan+hOX41FWZxECOjzBUyrT0=
+reject *:*
+tunnelled-dir-server
+router-digest-sha256 +cebf7eM5MDGyRfSnupGZvWoRiGU542Uu+ZUKYNlvKI
+router-digest 05E3691247D581FDAFF73FF36A34A364AA2FFE7B
diff --git a/src/test/resources/bridge/20170717-170645-1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1 b/src/test/resources/bridge/20170717-170645-1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1
new file mode 100644
index 0000000..94b7f57
--- /dev/null
+++ b/src/test/resources/bridge/20170717-170645-1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1
@@ -0,0 +1,216 @@
+@type bridge-network-status 1.2
+published 2017-07-17 17:06:45
+flag-thresholds stable-uptime=1530324 stable-mtbf=6168885 fast-speed=55000 guard-wfu=46.159% guard-tk=691200 guard-bw-inc-exits=387000 guard-bw-exc-exits=387000 enough-mtbf=1 ignoring-advertised-bws=0
+fingerprint 1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1
+r Unnamed ABsbA6yZEBiZ81impcs0zNxRyXo CyMVlader0Uyv5Pg4BHbAT74Upw 2017-07-17 15:36:07 10.158.32.104 58520 0
+s Running Stable V2Dir Valid
+w Bandwidth=11
+p reject 1-65535
+r Unnamed ACzV/+Qobny0/Tk7Jodk8cP+ME4 ddllk5vvUxzimbTAiPnN2FgcKes 2017-07-17 16:57:43 10.151.15.156 55425 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=57
+p reject 1-65535
+r Unnamed ADXqKmHijTlfCArKIkRTlJDnCVA T5j0VrDmrH4KSQxY+6pPjyyinJY 2017-07-17 16:29:03 10.228.254.115 60472 0
+s Fast Running Stable V2Dir Valid
+w Bandwidth=67
+p reject 1-65535
+r superpowerMcClel ADcEo9p09hjP3jnnRwWj8U3yj08 WMENhkbcZ+lUSEduo+9YESQQG9g 2017-07-17 14:21:40 10.86.246.29 60854 0
+s Running Stable V2Dir Valid
+w Bandwidth=8
+p reject 1-65535
+r Franciscanmalevo AEYSWTY51Ye6m5b/bNJS5YL/h8A akxy4oFolIcneluh0BsSHP8x5BA 2017-07-17 16:29:33 10.176.122.233 56193 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=60
+p reject 1-65535
+r boomierknuckleba AF9gYMFlwb/2CMtkmv5R8rxAtTU nca6APmy1Cx174sTwifWhctXszM 2017-07-17 15:06:14 10.70.103.61 57318 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=1037
+p reject 1-65535
+r Unnamed AHHm39VxDbRtU/hYO23qmxfpyzI JvQtMwtmMKNacsTD+C7YnJkHOSI 2017-07-17 03:19:26 10.225.194.70 53101 0
+s V2Dir Valid
+w Bandwidth=54
+p reject 1-65535
+r Unnamed +kAojf9FYTuLBnLf0ZkzcXuM40w z7wiPDBrkgnPcA5/OMlCTiT+MOw 2017-07-17 17:03:48 10.251.177.99 59597 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=662
+p reject 1-65535
+r arthropathiesadr +k91NisjMTI0OoVLNNEZeaIdT5c K5qQ7eM7neXT1uUq4h3eUkeYWNI 2017-07-16 22:28:04 10.127.11.187 57316 0
+s Fast Stable V2Dir Valid
+w Bandwidth=137
+p reject 1-65535
+r Unnamed +lcbndJRkwY29dxR5+oE3CyQI60 JDZXpRZ30/31pavh1c4gdDQG/ys 2017-07-17 16:16:06 10.138.151.31 53706 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=183
+p reject 1-65535
+r amphetaminecinep +nuwYTiyHx8+PVQydHxT2Akwcu0 HjQQ27Spm2L3OI8D9LxPbp3G774 2017-07-17 15:06:28 10.182.103.174 52233 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=57
+p reject 1-65535
+r shovelingkopjes +xYy/IiRAE+vnsKxpBWYjbcvmgI S8qeZw2VjTijqejdq6QXvI3gQeQ 2017-07-17 16:33:03 10.115.134.144 52579 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=360
+p reject 1-65535
+r hawkeybushwhacke +yXJIp/C7J9WPgrpPx+SFqBdFq8 9IfYejp114+zagOAagQ0zsaR6uY 2017-07-17 14:48:27 10.101.94.186 64039 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=316
+p reject 1-65535
+r Unnamed +0k7evdgC2LM8zwVL7+tvRdbmDQ 9wQmt6jyLzncRB/2vrbfoRSPN+4 2017-07-17 15:00:08 10.74.190.95 62552 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=56
+p reject 1-65535
+r Air7jyl +2oWb9ZaKSmcrAfX4xhxm/LollQ nezGZw3QbeYIdMwLbz8dp2xO+Ag 2017-07-17 14:55:17 10.31.40.208 51052 0
+s Running Stable V2Dir Valid
+w Bandwidth=9
+p reject 1-65535
+r unrazedcommanded +4waD3LXF0onldT6V1uqvIWFQac ADnBJ/hircq5prcAJBrdyk/4oqQ 2017-07-17 15:42:27 10.63.109.63 52668 0
+s Running Stable V2Dir Valid
+w Bandwidth=8
+p reject 1-65535
+r Unnamed /MmbQ8ixObuLBPiBiyeXvvYlYQ0 53utvuuwHOM2wOR1/Egovplc7Pk 2017-07-17 16:48:45 10.121.209.188 50199 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=416
+p reject 1-65535
+r shriningunproduc /WjeOPRKPyoXpRzd/EDeDrABqvE beA5q600a4aJ01PCWeQAG5ggdjc 2017-07-17 15:27:43 10.210.27.178 58560 0
+s Running Stable V2Dir Valid
+w Bandwidth=9
+p reject 1-65535
+r greegreesfourche /W8yOLAqhwY488MQExY5u+xmEPU DLTHkCAIPo1kzDHNquGZFMUim+U 2017-07-17 15:43:30 10.74.195.222 55523 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=71
+p reject 1-65535
+r submanagersaceta /W+Iy0hxx0Mr9N7W2aFRoo8aDvc 8gwnmbCiqxqL7u7b2eViU05V8lc 2017-07-17 14:20:43 10.17.232.137 59561 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=134
+p reject 1-65535
+r nonintimidatingP /XP/zHfCVO2b2X/vLAefRXXR7lE iyM4qwvyHBT7vBZnr4lO/d+u5Mg 2017-07-17 16:03:16 10.151.207.67 58673 0
+s Running Stable V2Dir Valid
+w Bandwidth=7
+p reject 1-65535
+r Unnamed /XoBUnOwSS8ZLGpRyXQun4OTJ9Q 2vL6z2UpX/LK+vKrNYN9i0rEeIY 2017-07-17 15:59:24 10.56.117.44 58641 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=1663
+p reject 1-65535
+r Unnamed /ZvY1pg+h3dQ2HQuyHUgIDE2TIg +TiYLQtCqwoJlOH8Cs1bvoT1aXE 2017-07-17 14:04:57 10.127.8.248 51042 0
+s Fast Stable V2Dir Valid
+w Bandwidth=58
+p reject 1-65535
+r adobesYamoussouk /a9cTZcWYDQabdsjiFyzpAmG/J8 ccKrVEf6LDZy7f/qNz4tchWmfj4 2017-07-17 15:14:24 10.194.212.136 65257 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=111
+p reject 1-65535
+r Unnamed /biv9385WVxTAEKIbZCOP0djXJU OEJj1J2SjHJO0LQTu/AIhgzVmCE 2017-07-17 16:58:50 10.48.201.112 51351 0
+s Fast Running Stable Valid
+w Bandwidth=222
+p reject 1-65535
+r pinkMolluscoidea /bpyb9z3BMXfphOOudetf1cR4h4 hACt4yPZCUfBSVnBI2uUI1DXv/Y 2017-07-17 16:28:21 10.56.241.237 59735 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=64
+p reject 1-65535
+r nudzhesnurses /cTnObI/aLPJ5Hz7tMlda36shyQ aOUbb2aRzcqy1zKknPj3Hpy0VF8 2017-07-17 14:20:17 10.197.112.218 55802 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=910
+p reject 1-65535
+r ectomeresantinom /eB2bLdExloO9w8d7PhyOKKj5UA UXMLmjmnDiz2WCJRb/GDafv99b4 2017-07-17 14:33:21 10.3.44.12 51292 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=530
+p reject 1-65535
+r cinerarybluejean /eKBhUZipJ8vtsWbcfEcY8Ae3og wtsp18H3KODuI0zm4XfhzxWzQgs 2017-07-17 15:44:26 10.36.19.199 56546 0
+s Running Stable V2Dir Valid
+w Bandwidth=54
+p reject 1-65535
+r jacksnipescompel /ezau9TjX4HpqWxHQ2kUihSRf4I Qitzn/DbpKDvkNy3p094R41Qnqk 2017-07-17 15:44:16 10.125.226.79 50059 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=176
+p reject 1-65535
+r Unnamed /fg2tRqzK++I3UkMioMuhr3naEk I4E5JA3qeapmYZkAeSTQLfs8J1s 2017-07-17 15:02:59 10.239.90.75 53745 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=697
+p reject 1-65535
+r olderMagus /hlOx5caWWCbQEcqX8MqqvsQSGg 2Hjq0iNl0chTzCRYH8EpcHmLy+o 2017-07-17 16:23:07 10.126.229.95 65145 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=67
+p reject 1-65535
+r reemployedsmithe /jflp0xlhdpIMx4QpAmbEcPqg+Q iyc0QdcN9DBReZ9RWFb34YVqszQ 2017-07-17 16:21:58 10.143.233.101 51516 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=1077
+p reject 1-65535
+r outliersFloris /kRzVTV4QZvPKS2HenyVRgXwm6Y 8waSR1DiAy5MBzU/ud1rZiejah4 2017-07-17 16:48:32 10.109.220.71 64531 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=107
+p reject 1-65535
+r obfuscated /kUNmycjdgjmfOsRy5+5SkJILv8 xwf3o4+fqLXS0s47d0pP1KOU5pU 2017-07-17 14:37:19 10.76.104.77 64592 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=59
+p reject 1-65535
+r rasedsupernatant /oOXVDiS7hudD6Y8RzMylO5OMWc h8y4RIgFmW+/dsvNyHC/MMNLS7Q 2017-07-17 16:22:22 10.179.100.48 53248 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=734
+p reject 1-65535
+r suspicionspresci /peWJlz21gipWJe9lSyZpH1/sm8 HV/GG45cU9m+MwuxLKdI83+qaSM 2017-07-17 14:27:52 10.1.39.32 62702 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=60
+p reject 1-65535
+r soggiestgoldbric /psUJ+LLpyUzDUIaaFgIFDVSLA0 XDD9v2ldQjm5dkZw3DCI7ae2xE4 2017-07-17 17:03:37 10.246.254.96 60296 0
+s Running Stable V2Dir Valid
+w Bandwidth=9
+p reject 1-65535
+r orak1 /qbW9Iso8FWoP/1IKaW7bjDrVgE Mb9lzHQPPVsHKImYxdqDSAJri+I 2017-07-17 14:41:53 10.249.185.227 54358 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=469
+p reject 1-65535
+r Unnamed /rrmefX+kZsKmbGVysWH2zn5fxo 9S3pjUOCoKvYzk5oHgyom+T9PNE 2017-07-17 17:02:48 10.103.250.150 61659 0
+s Running Stable V2Dir Valid
+w Bandwidth=7
+p reject 1-65535
+r hatak2 /sOIskZPioSvAst2OxB/cSdQs6k 0HpDHhVviDHJxaBbhUgbyI+KSrA 2017-07-17 15:32:33 10.95.193.128 51290 0
+s Running Stable V2Dir Valid
+w Bandwidth=8
+p reject 1-65535
+r ndnop3 /sj7OA2rqdPIB5C2NORUC/XQnMo IbGg6+HzLnIA50Ixgk/XedHa8IQ 2017-07-17 15:21:46 10.3.187.208 57011 0
+s Fast V2Dir Valid
+w Bandwidth=10000
+p reject 1-65535
+r womanismssmirked /ttQciYFaUjO7GCA+P47qbHeB6g on74OFaEd6/vAG1pMPdacU9T14c 2017-07-17 15:17:40 10.104.184.233 65473 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=117
+p reject 1-65535
+r 0x000806 /ueuYKHQL7S17tZbk4Mf8tZ5kNs 4nUnoLBOx+6fktj5jFes6VF1vDY 2017-07-17 14:25:26 10.212.47.179 57986 0
+s Fast Running Stable Valid
+w Bandwidth=55
+p reject 1-65535
+r gadg3ts01 /uqtdtPuTJyXcG9a3YIxNtrF5R8 OlMKhaTZ5xFbg9wIy7mb/yypg84 2017-07-17 15:06:13 10.130.186.8 52390 0
+s Fast Running Stable V2Dir Valid
+w Bandwidth=153
+p reject 1-65535
+r wwa /vaERk55vVeE4Oo+lsy06fKG1bk PoBspURmH5ykMi/ilKW8odeZPqw 2017-07-16 21:17:55 10.247.250.35 58542 0
+s Stable Valid
+w Bandwidth=0
+p reject 1-65535
+r upheappostbus /xjBUGXhaGwB95VZcfjQAbGJ6T0 Xg7U7Aj9ndp68xbLVht7k3bYoYk 2017-07-17 15:33:52 10.224.164.30 52215 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=486
+p reject 1-65535
+r Unnamed /zBQzMzusm8cXl5WHyANFPFm5EQ BuMdGQ8nhvkuhnhCRVPEqgbZKvs 2017-07-17 16:26:04 10.19.59.68 60568 0
+s Fast Running Stable V2Dir Valid
+w Bandwidth=372
+p reject 1-65535
+r Unnamed /zx8J4i9BJD53FmX0lTa6lnToDY 1B1zuDhpSYQMC70iJGjL1gu/wNI 2017-07-17 15:09:51 10.110.58.246 52647 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=119
+p reject 1-65535
+r scroddledmetagen /2i5q0a3ndcWe305Wfyg6BMIv58 LaVtMm8A/76H16thbegUpnG5mtg 2017-07-17 16:41:38 10.15.158.240 57887 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=983
+p reject 1-65535
+r latinizedwhitefl /76DxKdbp2qR4LI96R9X3KTJxXI uR9E4Q/RvgCjAIOmlNkiwHQcgfk 2017-07-17 14:30:24 10.159.24.142 50975 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=525
+p reject 1-65535
+r theresamay /9YGA70SlPBf0lyficl9TFrJ4ZE +oLsaNaYcQbG5CmZa/3iLqoGwII 2017-07-17 15:26:58 10.104.227.148 53612 0
+s Fast HSDir Running Stable V2Dir Valid
+w Bandwidth=327
+p reject 1-65535
+r LetFreedomRing /9gX+qo28YX0NHT3TERuqNlew48 gvrGkWbaNZnakH1JOg0aF3GxriA 2017-07-17 16:37:23 10.52.212.130 60622 0
+s Fast Running V2Dir Valid
+w Bandwidth=468
+p reject 1-65535
diff --git a/src/test/resources/other/2017-07-17-17-02-00 b/src/test/resources/other/2017-07-17-17-02-00
new file mode 100644
index 0000000..cecbdec
--- /dev/null
+++ b/src/test/resources/other/2017-07-17-17-02-00
@@ -0,0 +1,178 @@
+@type tordnsel 1.0
+Downloaded 2017-07-17 17:02:00
+ExitNode 0011BD2485AD45D984EC4159C88FC066E5E3300E
+Published 2017-07-17 13:20:49
+LastStatus 2017-07-17 14:03:15
+ExitAddress 162.247.72.201 2017-07-17 14:11:38
+ExitNode F115B8EFF7BAF0A70B75248519DDDE4A926BF9CE
+Published 2017-07-17 01:46:52
+LastStatus 2017-07-17 06:03:16
+ExitAddress 103.56.207.84 2017-07-17 02:15:19
+ExitNode F13B97699EF7328A6289E5C2540560903CBC79A8
+Published 2017-07-17 10:49:41
+LastStatus 2017-07-17 11:03:14
+ExitAddress 104.218.63.73 2017-07-17 11:08:07
+ExitNode F149D45F474CBCF00DF8E4EBAE55474BD0FED2E6
+Published 2017-07-17 12:01:43
+LastStatus 2017-07-17 13:03:27
+ExitAddress 194.218.3.79 2017-07-17 13:12:12
+ExitNode F1B0F054CCA4F20A270C3BF744DCEC8A0C870C73
+Published 2017-07-17 12:19:12
+LastStatus 2017-07-17 13:03:27
+ExitAddress 65.181.123.254 2017-07-17 13:12:22
+ExitNode F1C1E92D674995B06871909C7B42E80E7A0FC7FC
+Published 2017-07-16 21:30:13
+LastStatus 2017-07-17 16:02:16
+ExitAddress 176.38.163.77 2017-07-16 22:12:44
+ExitNode F1F52A976AD14E9F8712B55050D171E9C8064202
+Published 2017-07-17 08:15:40
+LastStatus 2017-07-17 10:03:15
+ExitAddress 78.156.250.2 2017-07-17 10:10:06
+ExitNode F2560A6B20BAD283FF9CEB3109052324AA12C459
+Published 2017-07-16 21:41:57
+LastStatus 2017-07-17 16:02:16
+ExitAddress 5.77.47.142 2017-07-16 22:06:00
+ExitNode F2A1E001CCB966537AABEA2DFDF6ADAEA2C0A648
+Published 2017-07-17 06:59:04
+LastStatus 2017-07-17 08:03:14
+ExitAddress 139.59.250.10 2017-07-17 08:14:21
+ExitNode F392C1DF9E6BC6CCB15D151BFDF45CED28BE7109
+Published 2017-07-17 01:58:15
+LastStatus 2017-07-17 03:02:14
+ExitAddress 91.250.241.241 2017-07-17 03:05:14
+ExitNode F397982800B33A52B36A84AC8A777FD371E4FF84
+Published 2017-07-17 11:09:11
+LastStatus 2017-07-17 12:02:45
+ExitAddress 82.221.112.122 2017-07-17 12:11:59
+ExitNode F4E0DD37E79F3BD982180FFDC6A2CC1A3C8FF1D4
+Published 2017-07-17 14:24:59
+LastStatus 2017-07-17 15:02:15
+ExitAddress 193.150.121.66 2017-07-17 15:08:51
+ExitNode F5510F0FDBE2DBFDDEF7A9C7B1D8B2631650E97F
+Published 2017-07-17 01:41:03
+LastStatus 2017-07-17 02:03:15
+ExitAddress 147.135.210.101 2017-07-17 02:15:27
+ExitNode F62F67415625E6B53F135EEED209837A5A730FDB
+Published 2017-07-17 09:16:20
+LastStatus 2017-07-17 16:02:16
+ExitAddress 84.3.0.53 2017-07-17 10:10:14
+ExitNode F657ACB301CBAB4283F9CEC6D82ABE2FA62A398A
+Published 2017-07-17 08:12:29
+LastStatus 2017-07-17 09:03:35
+ExitAddress 77.247.181.165 2017-07-17 09:13:46
+ExitNode F65E0196C94DFFF48AFBF2F5F9E3E19AAE583FD0
+Published 2017-07-17 10:56:09
+LastStatus 2017-07-17 12:02:45
+ExitAddress 94.242.246.23 2017-07-17 12:12:08
+ExitNode F68269132718B9AA33B7C0792389C1A66F3D946B
+Published 2017-07-17 00:47:36
+LastStatus 2017-07-17 01:03:24
+ExitAddress 163.172.156.159 2017-07-17 01:09:26
+ExitNode F69D584B6F1A728E4243513616FE7E9545EE5B31
+Published 2017-07-17 14:17:41
+LastStatus 2017-07-17 15:02:15
+ExitAddress 139.162.144.133 2017-07-17 15:09:00
+ExitNode F6A358DD367B3282D6EF5824C9D45E1A19C7E815
+Published 2017-07-17 01:06:18
+LastStatus 2017-07-17 02:03:15
+ExitAddress 192.160.102.168 2017-07-17 02:15:37
+ExitNode F6E158BEBEA5D990F0470B4D6076B6372E66F2C9
+Published 2017-07-17 06:56:33
+LastStatus 2017-07-17 08:03:14
+ExitAddress 146.0.74.13 2017-07-17 08:14:30
+ExitNode F6EC98C05DD7573F89B8E7C8946AD97A3DD41516
+Published 2017-07-17 09:05:38
+LastStatus 2017-07-17 10:03:15
+ExitAddress 37.218.240.110 2017-07-17 10:11:27
+ExitNode F7447E99EB5CBD4D5EB913EE0E35AC642B5C1EF3
+Published 2017-07-17 09:55:42
+LastStatus 2017-07-17 11:03:14
+ExitAddress 199.249.223.81 2017-07-17 11:11:05
+ExitNode F929BA46C7A23B1D668B1F99A2846A21D1377AE5
+Published 2017-07-16 22:30:09
+LastStatus 2017-07-16 23:03:21
+ExitAddress 89.248.166.157 2017-07-16 23:09:49
+ExitNode F92B3CB9BBE0CB22409843FB1AE4DBCD5EFAC835
+Published 2017-07-17 09:17:23
+LastStatus 2017-07-17 10:03:15
+ExitAddress 185.104.120.4 2017-07-17 10:07:25
+ExitNode F9440BAF2941F593404D244A43D8136F0CA6777A
+Published 2017-07-17 06:14:09
+LastStatus 2017-07-17 07:03:16
+ExitAddress 130.226.169.137 2017-07-17 07:09:50
+ExitNode FA7CF34BCB4D51C7B914022EBBC2EA3A890A3D4F
+Published 2017-07-17 01:17:58
+LastStatus 2017-07-17 02:03:15
+ExitAddress 173.230.140.242 2017-07-17 02:15:47
+ExitNode FAD823A2AA7400D4A8107D7CD83050EEBB7A51FE
+Published 2017-07-17 09:54:16
+LastStatus 2017-07-17 11:03:14
+ExitAddress 195.228.45.176 2017-07-17 11:11:12
+ExitNode FB9F7BC9C9313A6E6816B922031EB77C707328D0
+Published 2017-07-17 09:27:33
+LastStatus 2017-07-17 10:03:15
+ExitAddress 73.65.60.217 2017-07-17 10:14:10
+ExitNode FBBB88FE31B18EA932B787F8BACC7DFBEDDD09D8
+Published 2017-07-17 00:01:42
+LastStatus 2017-07-17 01:03:24
+ExitAddress 163.172.136.101 2017-07-17 01:12:19
+ExitNode FC64CD763F8C1A319BFBBF62551684F4E1E42332
+Published 2017-07-17 04:01:30
+LastStatus 2017-07-17 05:03:16
+ExitAddress 149.202.98.161 2017-07-17 05:12:40
+ExitNode FCB454EAB56713C641C7A8F2E45B85E7921B9760
+Published 2017-07-16 22:23:42
+LastStatus 2017-07-16 23:03:21
+ExitAddress 89.236.34.117 2017-07-16 23:09:58
+ExitNode FCBAF979D8515E90344DC177A7B47746E8AA64A6
+Published 2017-07-17 07:50:34
+LastStatus 2017-07-17 09:03:35
+ExitAddress 104.206.237.22 2017-07-17 09:13:49
+ExitNode FCD58A1BDE2093630E454D3A1E221084D5EBCFEE
+Published 2017-07-17 12:18:39
+LastStatus 2017-07-17 15:02:15
+ExitAddress 103.27.124.82 2017-07-17 13:06:13
+ExitNode FD87D6EBBE5383B5EB339D1CB4500302CF0C1BEE
+Published 2017-07-17 09:09:44
+LastStatus 2017-07-17 10:03:15
+ExitAddress 185.10.68.119 2017-07-17 10:07:33
+ExitNode FD9EBD912154ED33DAF870FE0F3F343E59EF5BF5
+Published 2017-07-17 05:29:36
+LastStatus 2017-07-17 06:03:16
+ExitAddress 91.235.129.28 2017-07-17 06:06:45
+ExitNode FDA70EC93DB01E3CB418CB6943B0C68464B18B4C
+Published 2017-07-17 10:22:31
+LastStatus 2017-07-17 11:03:14
+ExitAddress 51.15.56.11 2017-07-17 11:14:58
+ExitNode FDB4FC238F13E7FEC99D025DB8B89A636EFC1EBC
+Published 2017-07-16 23:28:01
+LastStatus 2017-07-17 00:02:24
+ExitAddress 144.217.161.119 2017-07-17 00:09:47
+ExitNode FE29C99CF1415BB9B50A9CBBA81E53C81DF34421
+Published 2017-07-17 14:45:16
+LastStatus 2017-07-17 15:02:15
+ExitAddress 176.9.140.145 2017-07-17 15:09:09
+ExitNode FE3587D12AACD55486E7024A5EC8CE0994643BA0
+Published 2017-07-17 11:29:43
+LastStatus 2017-07-17 12:02:45
+ExitAddress 193.70.56.25 2017-07-17 12:08:47
+ExitNode FE3CB742E73674F1BC2382723209ECEE44AD4AEC
+Published 2017-07-17 07:16:59
+LastStatus 2017-07-17 08:03:14
+ExitAddress 77.250.227.12 2017-07-17 08:06:44
+ExitNode FE67A1BA4EF1D13A617AEFB416CB9E44331B223A
+Published 2017-07-17 11:29:04
+LastStatus 2017-07-17 12:02:45
+ExitAddress 178.32.53.94 2017-07-17 12:08:55
+ExitNode FF3A6898F1348224E6ABA8B8E98F15770E5DD362
+Published 2017-07-17 12:10:21
+LastStatus 2017-07-17 13:03:27
+ExitAddress 96.43.142.139 2017-07-17 13:08:19
+ExitNode FFB94702D023B6F824D8B3BC68F33EA02AFA70D8
+Published 2017-07-17 09:08:19
+LastStatus 2017-07-17 10:03:15
+ExitAddress 51.15.39.2 2017-07-17 10:07:42
+ExitNode FFCF1FD04F46C429712AC7A04BB442CAD46B255B
+Published 2017-07-17 04:57:12
+LastStatus 2017-07-17 06:03:16
+ExitAddress 209.249.180.198 2017-07-17 06:06:56
diff --git a/src/test/resources/other/op-nl-5242880-2017-07-17.tpf b/src/test/resources/other/op-nl-5242880-2017-07-17.tpf
new file mode 100644
index 0000000..2fd3637
--- /dev/null
+++ b/src/test/resources/other/op-nl-5242880-2017-07-17.tpf
@@ -0,0 +1,8 @@
+@type torperf 1.1
+BUILDTIMES=0.0700001716614,0.130000114441,0.22000002861 CIRC_ID=24288 CONNECT=1500330235.24 DATACOMPLETE=1500330249.38 DATAPERC0=1500330236.87 DATAPERC10=1500330238.21 DATAPERC100=1500330249.38 DATAPERC20=1500330239.39 DATAPERC30=1500330240.61 DATAPERC40=1500330241.91 DATAPERC50=1500330243.03 DATAPERC60=1500330244.30 DATAPERC70=1500330245.55 DATAPERC80=1500330246.78 DATAPERC90=1500330248.02 DATAREQUEST=1500330236.48 DATARESPONSE=1500330236.87 DIDTIMEOUT=0 ENDPOINTLOCAL=localhost:127.0.0.1:44134 ENDPOINTPROXY=localhost:127.0.0.1:48833 ENDPOINTREMOTE=v735flgeypua6lrf.onion:0.0.0.0:80 FILESIZE=5242880 HOSTNAMELOCAL=op-nl HOSTNAMEREMOTE=op-nl LAUNCH=1500329937.85 NEGOTIATE=1500330235.24 PATH=$C8C65A613A771CAD3600B52B3552318B0946AD5D,$AD3B9A4A2E76708C3077047D9C3559A1BCC63528,$A2DB293FFC5A76A718863BF1AEDBC8DFB1CB1097 QUANTILE=0.8 READBYTES=5242950 REQUEST=1500330235.24 RESPONSE=1500330236.48 SOCKET=1500330235.23 SOURCE=op-nl SOURCEADDRESS=37.218.247.40 START=1500330235.23 TIMEOUT=1500 USE
D_AT=1500330249.5 USED_BY=48052 WRITEBYTES=55
+@type torperf 1.1
+BUILDTIMES=0.170000076294,0.22000002861,0.740000009537 CIRC_ID=24267 CONNECT=1500328135.23 DATACOMPLETE=1500328192.65 DATAPERC0=1500328136.98 DATAPERC10=1500328140.98 DATAPERC100=1500328192.65 DATAPERC20=1500328144.04 DATAPERC30=1500328150.88 DATAPERC40=1500328157.71 DATAPERC50=1500328161.13 DATAPERC60=1500328165.29 DATAPERC70=1500328170.55 DATAPERC80=1500328178.30 DATAPERC90=1500328188.01 DATAREQUEST=1500328135.90 DATARESPONSE=1500328136.98 DIDTIMEOUT=0 ENDPOINTLOCAL=localhost:127.0.0.1:44016 ENDPOINTPROXY=localhost:127.0.0.1:48833 ENDPOINTREMOTE=37.218.247.40:37.218.247.40:80 FILESIZE=5242880 HOSTNAMELOCAL=op-nl HOSTNAMEREMOTE=op-nl LAUNCH=1500327894.85 NEGOTIATE=1500328135.23 PATH=$1D3F937E2053E58C18E18D43FA5153E2A9F4DC77,$51E1CF613FD6F9F11FE24743C91D6F9981807D82,$9D6AE1BD4FDF39721CE908966E79E16F9BFCCF2F QUANTILE=0.8 READBYTES=5242950 REQUEST=1500328135.24 RESPONSE=1500328135.90 SOCKET=1500328135.23 SOURCE=op-nl SOURCEADDRESS=37.218.247.40 START=1500328135.23 TIMEOUT=1500 USED_AT
=1500328192.66 USED_BY=48008 WRITEBYTES=55
+@type torperf 1.1
+BUILDTIMES=0.0600001811981,0.0800001621246,0.200000047684 CIRC_ID=23770 CONNECT=1500270535.13 DATACOMPLETE=1500270545.04 DATAPERC0=1500270535.69 DATAPERC10=1500270536.93 DATAPERC100=1500270545.04 DATAPERC20=1500270537.49 DATAPERC30=1500270538.15 DATAPERC40=1500270538.87 DATAPERC50=1500270540.55 DATAPERC60=1500270541.43 DATAPERC70=1500270542.22 DATAPERC80=1500270542.85 DATAPERC90=1500270543.78 DATAREQUEST=1500270535.44 DATARESPONSE=1500270535.65 DIDTIMEOUT=0 ENDPOINTLOCAL=localhost:127.0.0.1:41842 ENDPOINTPROXY=localhost:127.0.0.1:48833 ENDPOINTREMOTE=37.218.247.40:37.218.247.40:80 FILESIZE=5242880 HOSTNAMELOCAL=op-nl HOSTNAMEREMOTE=op-nl LAUNCH=1500268494.85 NEGOTIATE=1500270535.14 PATH=$46F9D4794916F9DD33D8FD89B1670787589BF3B8,$B05BB43B0096AA7B9ABCA529FD6BAD08AD8E420F,$B6718125C43ECA2E5011B3C681BB6638617A9686 QUANTILE=0.8 READBYTES=5242950 REQUEST=1500270535.14 RESPONSE=1500270535.44 SOCKET=1500270535.13 SOURCE=op-nl SOURCEADDRESS=37.218.247.40 START=1500270535.13 TIMEOUT=1500 USED
_AT=1500270545.04 USED_BY=47079 WRITEBYTES=55
+@type torperf 1.1
+BUILDTIMES=0.69000005722,0.980000019073,1.32000017166 CIRC_ID=24137 CONNECT=1500313135.20 DATACOMPLETE=1500313187.02 DATAPERC0=1500313138.93 DATAPERC10=1500313145.04 DATAPERC100=1500313187.02 DATAPERC20=1500313149.70 DATAPERC30=1500313152.08 DATAPERC40=1500313154.88 DATAPERC50=1500313159.13 DATAPERC60=1500313164.07 DATAPERC70=1500313168.69 DATAPERC80=1500313173.73 DATAPERC90=1500313179.65 DATAREQUEST=1500313138.52 DATARESPONSE=1500313138.93 DIDTIMEOUT=0 ENDPOINTLOCAL=localhost:127.0.0.1:43432 ENDPOINTPROXY=localhost:127.0.0.1:48833 ENDPOINTREMOTE=v735flgeypua6lrf.onion:0.0.0.0:80 FILESIZE=5242880 HOSTNAMELOCAL=op-nl HOSTNAMEREMOTE=op-nl LAUNCH=1500312130.85 NEGOTIATE=1500313135.20 PATH=$98D10461F6EDF13780D20D7E402E67F40C5ADBD9,$3E50CBCA98A20F637BC4551FD4F132D062DB9A51,$FDAC8BA3ABFCC107D1B1EAC953F195BEEBA7FF54 QUANTILE=0.8 READBYTES=5242950 REQUEST=1500313135.21 RESPONSE=1500313138.52 SOCKET=1500313135.20 SOURCE=op-nl SOURCEADDRESS=37.218.247.40 START=1500313135.20 TIMEOUT=1500 USED_
AT=1500313187.13 USED_BY=47762 WRITEBYTES=55
diff --git a/src/test/resources/relay/2017-07-17-17-00-00-consensus b/src/test/resources/relay/2017-07-17-17-00-00-consensus
new file mode 100644
index 0000000..985a4a7
--- /dev/null
+++ b/src/test/resources/relay/2017-07-17-17-00-00-consensus
@@ -0,0 +1,148 @@
+@type network-status-consensus-3 1.0
+network-status-version 3
+vote-status consensus
+consensus-method 26
+valid-after 2017-07-17 17:00:00
+fresh-until 2017-07-17 18:00:00
+valid-until 2017-07-17 20:00:00
+voting-delay 300 300
+client-versions 0.2.4.27,0.2.4.28,0.2.4.29,0.2.5.12,0.2.5.13,0.2.5.14,0.2.6.11,0.2.6.12,0.2.7.6,0.2.7.7,0.2.7.8,0.2.8.9,0.2.8.10,0.2.8.11,0.2.8.12,0.2.8.13,0.2.8.14,0.2.9.9,0.2.9.10,0.2.9.11,0.3.0.2-alpha,0.3.0.3-alpha,0.3.0.4-rc,0.3.0.5-rc,0.3.0.6,0.3.0.7,0.3.0.8,0.3.0.9,0.3.1.1-alpha,0.3.1.2-alpha,0.3.1.3-alpha,0.3.1.4-alpha
+server-versions 0.2.4.27,0.2.4.28,0.2.4.29,0.2.5.12,0.2.5.13,0.2.5.14,0.2.6.11,0.2.6.12,0.2.7.6,0.2.7.7,0.2.7.8,0.2.8.9,0.2.8.10,0.2.8.11,0.2.8.12,0.2.8.13,0.2.8.14,0.2.9.9,0.2.9.10,0.2.9.11,0.3.0.7,0.3.0.8,0.3.0.9,0.3.1.2-alpha,0.3.1.3-alpha,0.3.1.4-alpha
+known-flags Authority BadExit Exit Fast Guard HSDir NoEdConsensus Running Stable V2Dir Valid
+recommended-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+recommended-relay-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+required-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+required-relay-protocols Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=3-4 LinkAuth=1 Microdesc=1 Relay=1-2
+params CircuitPriorityHalflifeMsec=30000 NumDirectoryGuards=3 NumEntryGuards=1 NumNTorsPerTAP=100 Support022HiddenServices=0 UseNTorHandshake=1 UseOptimisticData=1 bwauthpid=1 cbttestfreq=10 pb_disablepct=0 usecreatefast=0
+shared-rand-previous-value 7 3mrGAK8IVzYs6VgBx1U2wZ0oIF5nYkvqQgoW53ej7Qc=
+shared-rand-current-value 8 dtkrG/tHYPJ0MkSajToD5++nX0nyfnPUTF2dBydL1j0=
+dir-source dannenberg 0232AF901C31A04EE9848595AF9BB7620D4C5B2E dannenberg.torauth.de 193.23.244.244 80 443
+contact Andreas Lehner
+vote-digest 6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601
+dir-source tor26 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 86.59.21.38 86.59.21.38 80 443
+contact Peter Palfrader
+vote-digest 6C4446DF8A01AE204551FE1544188DA2F0A540CC
+dir-source longclaw 23D15D965BC35114467363C165C4F724B64B4F66 199.254.238.53 199.254.238.53 80 443
+contact Riseup Networks <collective at riseup dot net> - 1nNzekuHGGzBYRzyjfjFEfeisNvxkn4RT
+vote-digest 8C4B18B91AEEE74C9688C1F3300D61D1DD2E1636
+dir-source maatuska 49015F787433103580E3B66A1707A00E60F2D15B 171.25.193.9 171.25.193.9 443 80
+contact 4096R/1E8BF34923291265 Linus Nordberg <linus(a)nordberg.se>
+vote-digest 7E6F19A044C67AEA317847B196E4631705D7F9FD
+dir-source moria1 D586D18309DED4CD6D57C18FDB97EFA96D330566 128.31.0.34 128.31.0.34 9131 9101
+contact 1024D/28988BF5 arma mit edu
+vote-digest 886FFD31F967E311A86F4DBE62E53FF83DB72823
+dir-source dizum E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 194.109.206.212 194.109.206.212 80 443
+contact 1024R/8D56913D Alex de Joode <adejoode(a)sabotage.org>
+vote-digest 9A8AC7E30D574A0C86F3C92DDD556634B291E33F
+dir-source gabelmoo ED03BB616EB2F60BEC80151114BB25CEF515B226 131.188.40.189 131.188.40.189 80 443
+contact 4096R/261C5FBE77285F88FB0C343266C8C2D7C5AA446D Sebastian Hahn <tor(a)sebastianhahn.net> - 12NbRAjAG5U3LLWETSF7fSTcdaz32Mu5CN
+vote-digest 726F46827A08509F5776DD607A494E625CDC2A9D
+dir-source Faravahar EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 154.35.175.225 154.35.175.225 80 443
+contact 0x0B47D56D Sina Rabbani (inf0) <sina redteam net>
+vote-digest 8D7FD8D17E57A14CD654C28C65C1B2ECA4F3D66D
+r Sepiidae /4IeeAQ+whWfyCMWt1SWFTxf9Hs B57tNvqnFFUSEBMKTbsgm1vFZ3g 2017-07-17 09:37:18 71.238.214.21 9001 0
+s Fast Running Valid
+v Tor 0.2.5.14
+pr Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=1-4 LinkAuth=1 Microdesc=1 Relay=1-2
+w Bandwidth=655
+p reject 1-65535
+r MehlTor1 /4fknvMweLBKXeJqrhcN34uuE58 RhnuSGNdWK5ivlsD7G8v7GDfOqE 2017-07-17 14:29:15 188.68.36.209 59001 59030
+s Fast HSDir Running Stable V2Dir Valid
+v Tor 0.2.5.14
+pr Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=1-4 LinkAuth=1 Microdesc=1 Relay=1-2
+w Bandwidth=2280
+p reject 1-65535
+r weiner //DRJmufk5GRKETm0fz2ctgvuOA Jw2aiu8SvtV5v3nY4c1YEQxNeUM 2017-07-17 14:17:32 50.7.178.98 443 80
+s Fast Running Stable V2Dir Valid
+v Tor 0.2.9.11
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+w Bandwidth=19400
+p reject 1-65535
+r enam1ak //ShIPvHp4qbk7U1/RzFvsrum+U ANY9f5unsgGFiZWM7XbikDWfAYw 2017-07-17 04:53:18 37.120.169.95 9001 9030
+s Fast HSDir Running Stable V2Dir Valid
+v Tor 0.2.9.10
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+w Bandwidth=1570
+p reject 1-65535
+r ddetor2 //eMRLpua291JQlbvhTvfL64l0Q 384z05/v404kBt6Aeqph6fbCHFw 2017-07-17 11:54:02 85.10.196.9 9001 9030
+s Fast Guard HSDir Running Stable V2Dir Valid
+v Tor 0.2.9.11
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+w Bandwidth=2960
+p reject 1-65535
+directory-footer
+bandwidth-weights Wbd=0 Wbe=0 Wbg=4085 Wbm=10000 Wdb=10000 Web=10000 Wed=10000 Wee=10000 Weg=10000 Wem=10000 Wgb=10000 Wgd=0 Wgg=5915 Wgm=5915 Wmb=10000 Wmd=0 Wme=0 Wmg=4085 Wmm=10000
+directory-signature 0232AF901C31A04EE9848595AF9BB7620D4C5B2E 70A6DDEB6B42FD0714B8F91F3F6B366CECF4E8B9
+-----BEGIN SIGNATURE-----
+ZWGlQRmto7j8mEdSXm4vjSHW+u+TceKFxdDZC8HG/p6yosDLEqMj+9Cq968VeE+x
+06LIuvUCtUpijIZoDX4HhHcx+Y7buBxvczkf4GNZxIGsYVQofEiWh5H1wbdc5Jpj
+w281Jn9k6uFv5BSGwydyLpokZyEHnsUXpKaaOFXSz9frQctzzSnyJvo+NRaxDVRH
+MkobSer8g5hTrY+jAqiMDt9HnCI7uB3Mc21DLcB/dGIngOZx+fkQPdEg0TZWfmoQ
+vTtf0U4hSfHkGmi90gH8q99Cw5oU6ia+kRTOtpQe7Qk9bAtJbG+3XGIayl5sDtBD
+ms5UdJTokgLqg2Fqy2fcow==
+-----END SIGNATURE-----
+directory-signature 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 8738EBDF44CD72B25FE20F8901290E0573950A56
+-----BEGIN SIGNATURE-----
+ab1jVkNRVopFhUiBESZQi0nUban17Z3VLL9AvFtIuSMWkRweIgD5XQv4r6RwcO+b
+zh1a0e6Kt8LxYQhGlaDLsANSWDVrQolA07PYxJ7jrsoSY4lR2YtYj5CuU99Htp7R
+/ggiKRdM8gtEgZgJEluD0u0Y9levnCrxYOP2tiQ5PDuQnCRrW/wbmCgHFyed/G96
+YScMIusiF6+PIFFJC6T2m6HvEDBQKeP4eypPJG289XCxWMQYp2C0v4JJkjnEK0B2
+E9E2Cyw33kVNuvMq68ss+tXdXKyzsIhhZBJYruSZEOHQCfZ5OVLijp3BQIDCYOdB
+wWBCEc4Y2LVlKvjzyo9ekS+PBGAHP8HVbPUNtt986ru/x8V3j0VHcKfH90DAit6s
+me6emNDWg1id/mvV8Oo56hi0ikdgJnIfFpK1HFsKf35cTSMpia9oaoZf+qi2Usn+
++zE7gc4orWmxlpl0IPKKEcEeHzBcAS7WYkpi0kJAELAvELK7doAJAWZfXYOfZtwZ
+-----END SIGNATURE-----
+directory-signature 23D15D965BC35114467363C165C4F724B64B4F66 9439CFDCFD0FCF41E6501BCD2C0151E68C30B77F
+-----BEGIN SIGNATURE-----
+VFOkG6qGvJSV1NBXof86wH00LRyqi7UxpgDJ7btzsOjBroBTOI67M/4uCKRaF/zc
++iPpou+MBle63u9hyHpiTNYihRXC9v4kbNvYdey8VIukOprg4x1m8jkTXXnw+qBI
+CMYB+n6pdHTiMf/kfB6zQGXsW60Fe3oZCFLIPT7JwEHUVqh53hMZlFRrzs97kzn7
+U5haOaJut6hlESJV+G1WIxoUjRv272Mimo9UshfL8d4/ui3+HS/X67cfJ+WOnsIT
+03bCA/WeoLrRXVROnmF87HgYJWKiXFat48DliRaCo8oovBM1w0NU3U98jQcUDiT5
+XtcrMzxhyCPKiGrDKkPaYQ==
+-----END SIGNATURE-----
+directory-signature 49015F787433103580E3B66A1707A00E60F2D15B EFB790BA79E84FE5ED90B4C1E6022904B0E9C478
+-----BEGIN SIGNATURE-----
+oxZ45ALQsJhHIjD4OVkLlG/DAUM1DaMT802eskToC6ZZC6E+pZnJbDHHQ5tpjNWG
++14iPp8giBXvIArX4hvCEn3dmT4KSad0gX7NW6kK1MzVjhbAvhVutRD6JRZMjzf1
+ol/TC9hRa6qskj6XP5Bb4bwELOT6P22iEkX+JlKcS7/sa9oBWsWiQ0lCgo35L2Jy
+K58u5yQh5akx+oytc8hCJL+xqD6VT/7O36b+g7DgfL0v4FimgbLMitGeLEPW049b
+PZQV6uoxpwWq4nplcl+d/a8l5e9bc1DEazI4zhJUeYk5xaP7pbr6hi09BR/p4HM4
+nqfo5CI6whl1TBwAozZv1w==
+-----END SIGNATURE-----
+directory-signature D586D18309DED4CD6D57C18FDB97EFA96D330566 45735762F32794C2286FEA914EE0322F04E0F36B
+-----BEGIN SIGNATURE-----
+ecolOdKH/tDDnHWhHJ680vlp8QGg98dPNqTGk+lSF1FZbjEPV9uPSRlVyKio1I0c
+QVqRBU8cZRRz0e7z5RthsCVOgvWw9uDELJUea6oqWLWZZZCHU3B05uAVlYr1tonn
+BndFD3em5mf+NF83zkfzbWMpfE06VG4tcWTepvxUALugvpQur1+ct+V2LbTi2c+8
+rQ4gCVIbi64fEn7vc9mda1AL3mjs/yTfXjLIUGWaurPJpgBEy8bBdq6to09Qe1jE
+tnNBT8c5VaQpKvZsL4p2E+oMhPX/bC3Ywk5iewaw9Ua0X/QbU2yj8cfSWQqCNz//
+79b2ui2LwMe4SF2GUQUcXw==
+-----END SIGNATURE-----
+directory-signature E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 109A865D7DBE58367C120353CBE9947EE263695A
+-----BEGIN SIGNATURE-----
+Z7XcB9BSgZJucItUgcWzvPUz5xETXS/t5p3jqvIynWC83+PnoXzomfmbNTqmu0wI
+x5DaA0owYepeIcD1MXkMZjkLt7RHk3mviPfufQjEWJ5QH8y+5OPGjPO74IITDKwl
+SUmMgPlJfrqNAna5KURp905asROT7/HuEPkF7Cg9K6mcbKcqv2ZA87t/3SnC2zBX
++YApjfpmlzsEBIhca5tFxfbWxRGfG/I2lQaYRjx0/843X6vmcJxFqvOpwCBz5UPz
+29wK+nWQymNhEZTJ+vbt3+wGptwDbGjQT9WpINsXtNS2B3/QtubXqKXHl1HF1loQ
+dYL+hXa7qtXEUKQGE7gPLA==
+-----END SIGNATURE-----
+directory-signature ED03BB616EB2F60BEC80151114BB25CEF515B226 28EB6C6635F1DB90BB60AF8B43F1676E892BB30B
+-----BEGIN SIGNATURE-----
+Yfby/Oyz6x9v7eFHp7vVgpXgw6cgYr3Q1eDwes/eXPN4F5cEj6NsmVRN7suf9ocu
+/BT8S2oEI8OHhCkDKbbMrHXM6Cd5LaGHNbWS3uKz+aW1CS3BIxTq7vs/M4V5pVJj
+mHwVYmZyTb1q3qcMzW8bGNF4z/gVsURMnWXbp97lawBrBaaP7UTVojsDV1vnyK3f
+QeXH4nIXyUIOoZBZZoids131kf0gKajKZl7YlVV+eLnZodmziCnGvfGbl0Q7I/jX
+qgaLhqkEOL3MFAtgA+2Ika6UtcKls1hghFZ4+EUJQDd76eGYdVlT0z5uTYsfcEAx
+HuHqFOf/TlRSHu5YrlMNmw==
+-----END SIGNATURE-----
+directory-signature EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 E861D5367EE5A469892D3FE6B2A25218FBA133FC
+-----BEGIN SIGNATURE-----
+Zq0gDVMMzDhkLBiPKjbVenJauLZJpSSO0KlKfsTuLveQ5OAZG32vz/QoaeJG95m5
+ACYymVeQJo5GCaL2WhNuaMMl60Gafq3Igt4kgmVKYPI8UY1+mAfQ8ztZpaL/eCGl
+L4QbGBbQ6Y66UEvKEmLM3WYUlIXze/fWqEFIynfdIVRkFoG8co9cWx7MI6Zw52DP
++jqwFf99HZV00cclpQAleWILUsgk6aNe7xLgeQGc2/YZVzo936BdmWycRhdI7N5p
+DN1hst/9yHpmPXl8+KEqkBAGvDQFFSXo5WI7DdHjNgBQkHJWcKwEY0gojqjbszd2
+lwcNoxZB9L4iPzKIDPgDbw==
+-----END SIGNATURE-----
diff --git a/src/test/resources/relay/2017-07-17-17-00-00-consensus-microdesc b/src/test/resources/relay/2017-07-17-17-00-00-consensus-microdesc
new file mode 100644
index 0000000..bcad173
--- /dev/null
+++ b/src/test/resources/relay/2017-07-17-17-00-00-consensus-microdesc
@@ -0,0 +1,136 @@
+@type network-status-microdesc-consensus-3 1.0
+network-status-version 3 microdesc
+vote-status consensus
+consensus-method 26
+valid-after 2017-07-17 17:00:00
+fresh-until 2017-07-17 18:00:00
+valid-until 2017-07-17 20:00:00
+voting-delay 300 300
+client-versions 0.2.4.27,0.2.4.28,0.2.4.29,0.2.5.12,0.2.5.13,0.2.5.14,0.2.6.11,0.2.6.12,0.2.7.6,0.2.7.7,0.2.7.8,0.2.8.9,0.2.8.10,0.2.8.11,0.2.8.12,0.2.8.13,0.2.8.14,0.2.9.9,0.2.9.10,0.2.9.11,0.3.0.2-alpha,0.3.0.3-alpha,0.3.0.4-rc,0.3.0.5-rc,0.3.0.6,0.3.0.7,0.3.0.8,0.3.0.9,0.3.1.1-alpha,0.3.1.2-alpha,0.3.1.3-alpha,0.3.1.4-alpha
+server-versions 0.2.4.27,0.2.4.28,0.2.4.29,0.2.5.12,0.2.5.13,0.2.5.14,0.2.6.11,0.2.6.12,0.2.7.6,0.2.7.7,0.2.7.8,0.2.8.9,0.2.8.10,0.2.8.11,0.2.8.12,0.2.8.13,0.2.8.14,0.2.9.9,0.2.9.10,0.2.9.11,0.3.0.7,0.3.0.8,0.3.0.9,0.3.1.2-alpha,0.3.1.3-alpha,0.3.1.4-alpha
+known-flags Authority BadExit Exit Fast Guard HSDir NoEdConsensus Running Stable V2Dir Valid
+recommended-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+recommended-relay-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+required-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+required-relay-protocols Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=3-4 LinkAuth=1 Microdesc=1 Relay=1-2
+params CircuitPriorityHalflifeMsec=30000 NumDirectoryGuards=3 NumEntryGuards=1 NumNTorsPerTAP=100 Support022HiddenServices=0 UseNTorHandshake=1 UseOptimisticData=1 bwauthpid=1 cbttestfreq=10 pb_disablepct=0 usecreatefast=0
+shared-rand-previous-value 7 3mrGAK8IVzYs6VgBx1U2wZ0oIF5nYkvqQgoW53ej7Qc=
+shared-rand-current-value 8 dtkrG/tHYPJ0MkSajToD5++nX0nyfnPUTF2dBydL1j0=
+dir-source dannenberg 0232AF901C31A04EE9848595AF9BB7620D4C5B2E dannenberg.torauth.de 193.23.244.244 80 443
+contact Andreas Lehner
+vote-digest 6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601
+dir-source tor26 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 86.59.21.38 86.59.21.38 80 443
+contact Peter Palfrader
+vote-digest 6C4446DF8A01AE204551FE1544188DA2F0A540CC
+dir-source longclaw 23D15D965BC35114467363C165C4F724B64B4F66 199.254.238.53 199.254.238.53 80 443
+contact Riseup Networks <collective at riseup dot net> - 1nNzekuHGGzBYRzyjfjFEfeisNvxkn4RT
+vote-digest 8C4B18B91AEEE74C9688C1F3300D61D1DD2E1636
+dir-source maatuska 49015F787433103580E3B66A1707A00E60F2D15B 171.25.193.9 171.25.193.9 443 80
+contact 4096R/1E8BF34923291265 Linus Nordberg <linus(a)nordberg.se>
+vote-digest 7E6F19A044C67AEA317847B196E4631705D7F9FD
+dir-source moria1 D586D18309DED4CD6D57C18FDB97EFA96D330566 128.31.0.34 128.31.0.34 9131 9101
+contact 1024D/28988BF5 arma mit edu
+vote-digest 886FFD31F967E311A86F4DBE62E53FF83DB72823
+dir-source dizum E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 194.109.206.212 194.109.206.212 80 443
+contact 1024R/8D56913D Alex de Joode <adejoode(a)sabotage.org>
+vote-digest 9A8AC7E30D574A0C86F3C92DDD556634B291E33F
+dir-source gabelmoo ED03BB616EB2F60BEC80151114BB25CEF515B226 131.188.40.189 131.188.40.189 80 443
+contact 4096R/261C5FBE77285F88FB0C343266C8C2D7C5AA446D Sebastian Hahn <tor(a)sebastianhahn.net> - 12NbRAjAG5U3LLWETSF7fSTcdaz32Mu5CN
+vote-digest 726F46827A08509F5776DD607A494E625CDC2A9D
+dir-source Faravahar EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 154.35.175.225 154.35.175.225 80 443
+contact 0x0B47D56D Sina Rabbani (inf0) <sina redteam net>
+vote-digest 8D7FD8D17E57A14CD654C28C65C1B2ECA4F3D66D
+r Lule /6cr1oO8L8+Yg1bmvsHkkPMT+wc 2017-07-17 04:46:03 193.11.164.243 9001 9030
+m WIxgGRG09pIU9ZJQc6mFkXy9TDBfvfhno7bkQllYSRc
+s Fast Guard HSDir Running Stable V2Dir Valid
+v Tor 0.2.9.10
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+w Bandwidth=19000
+r proximus /88f0E9GxClxKsegS7RCytRrJVs 2017-07-17 04:57:12 209.249.180.198 9001 80
+m nthTTDbf6CKOuwq8zcYmOvr5SMvXxXizr/x60XMsVSk
+s Exit Fast Guard HSDir Running Stable V2Dir Valid
+v Tor 0.2.5.12
+pr Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=1-4 LinkAuth=1 Microdesc=1 Relay=1-2
+w Bandwidth=20400
+r ddetor2 //eMRLpua291JQlbvhTvfL64l0Q 2017-07-17 11:54:02 85.10.196.9 9001 9030
+m qyBO43PwQA2abtOfZwMJc7l/bYKyY06fBa/Ht1tXk3k
+s Fast Guard HSDir Running Stable V2Dir Valid
+v Tor 0.2.9.11
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+w Bandwidth=2960
+directory-footer
+bandwidth-weights Wbd=0 Wbe=0 Wbg=4085 Wbm=10000 Wdb=10000 Web=10000 Wed=10000 Wee=10000 Weg=10000 Wem=10000 Wgb=10000 Wgd=0 Wgg=5915 Wgm=5915 Wmb=10000 Wmd=0 Wme=0 Wmg=4085 Wmm=10000
+directory-signature sha256 0232AF901C31A04EE9848595AF9BB7620D4C5B2E 70A6DDEB6B42FD0714B8F91F3F6B366CECF4E8B9
+-----BEGIN SIGNATURE-----
+E+42VVN3aXf8AkTuTwjsAsF9eKVWxWxcP6v/q8malxl12zuCpqlPbKAIhmdhP6NT
+ce17a4s4AjvNZVhzuQ+brLnp+JBkVbpSWkTDt87pqz6anAKdoZYHhHQhWr9KXI6X
+SnOjOlgdd4jPJyjLTtYyBPB6hntrJwVqTis617a1cA9OvcrmbL6T9q8AYkcUr7Z6
+2HTLaX5PVOQfmuaNclc+A6M8vexApbM0cnHGumF/SOPA4HS5soTUVoSnLLzw+8sD
+WJSJHmOiHy2eRME1LT5rHM6+rHW+r8qYaMSpsllRP9gkNXW9jkLqMWx4PaaZNT8g
+GjCB1BvZ/2ehihCis9dR5w==
+-----END SIGNATURE-----
+directory-signature sha256 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 8738EBDF44CD72B25FE20F8901290E0573950A56
+-----BEGIN SIGNATURE-----
+dlMZ/ATcepb6KlnZ1DSWbzp1K2itnu3LW721Nfop+Rg0GTFjyYEaqfWJEe9+iCej
+YQifus3QPuKKVjgowwReYT4H+wdSpT2lPVeK3W1/586IYuF5VrRt/snvGaV6xlOR
+uOjNi9fkCvqcsjrOyciFTnKglMZRBhYko1n7s5NglPsv3B/+ebtRc/kBXAV/37bQ
+nghGrzK0JtCGcE6b+mzRqaGfZa2sMzUiSkQAijNYzFWh5zm94gKJ6qg8zMypAdpc
+4/ub/bML4+BeWcuOnmPIBgWY5Oag7N7r03afRhihxTY3HUF3DA7nZiJNExq6Ewa5
+2U0jPKAlJynEmRU4FCciL9cpDDplq7ajys3tKalkrAU9BHtf7PeNOC9zQ7VSd0F5
+CiRjsoSyYSssjtkAq7SL/bcsNEeyIcoCY1tAOH9X32Cc3hGVL3XDcgUFwiEEpK84
+yHJ/rtj9H3oAZCKJp3M4U0DgGdVi7MO3+0Hxuq6YMVMqB3iDxWpKSSugW3bh9eDo
+-----END SIGNATURE-----
+directory-signature sha256 23D15D965BC35114467363C165C4F724B64B4F66 9439CFDCFD0FCF41E6501BCD2C0151E68C30B77F
+-----BEGIN SIGNATURE-----
+V7V3531ZIszedtrYCVg7K6pMcwHMweepIdrKNr+r69EUKECjqWSB2d/v/VM8L3RJ
+O1em7FNFHJTSKJ0BKWeqYO98vlFutgHsJLQaD/O5vOjZCG+u6iz6xm9h0FYmQvM8
+cIFWScfB7Y6nzYKt+MTVf0ZRSNvOrajZauCbzZLjP9auqHgyh47QNKIHmGLMuRtE
+UWssAuhzds3AA0KfwMXWwGRjrvHmNny8WmpZ2gWIaWEAICeHvbvi30i93LS1gW2P
+XRztg0cewPEBZkfS4Nts1lz0FbQ41KVtRzH+tYksdIZjo/cVA041AJ0iR5pbvPgF
+dUpEAISUP80p+HpHowlCMw==
+-----END SIGNATURE-----
+directory-signature sha256 49015F787433103580E3B66A1707A00E60F2D15B EFB790BA79E84FE5ED90B4C1E6022904B0E9C478
+-----BEGIN SIGNATURE-----
+Vgbl4DKgcG5acJCkQo675VrCSv4B145NXloX6NomVeXZkXFUpj10zwGdFgGSKZxI
+VAMT1Ar1mvl39hPHi5IyqEmP6O6XbqMxtaYZPaxOzs7PkWxyQqtz2yvazAp3IV1F
+OqKZome8xSe8lb0GLGMsYt+DYpvTE0fKbtE8suXAhJOBYglwZz0ha2Iv8al15Nbi
+IeL8XIg9ow3gcDD/fXjZu9aWURFwJU+Ifqa5NDJngr4fcAS6aheYL+Eh1u5Sk6Uj
+sF6UPfJa3TspHcG9mZE95/fPBuae8oDms2W+3Vc/0Mga4m8gaB6/otTKlz7icIPo
+brX8a1UikptrytfQo84xYg==
+-----END SIGNATURE-----
+directory-signature sha256 D586D18309DED4CD6D57C18FDB97EFA96D330566 45735762F32794C2286FEA914EE0322F04E0F36B
+-----BEGIN SIGNATURE-----
+BXY+0N59OdwUXQuccVU4uBrt1BPOq6xR2AhMOocw7c8ap3Fc2ra+C2WZDSvgZkcU
+sl3DOGICY97DwThhqiWNIRx49xhVrZ0JPddUtY4mfGQ71wulOLTafYQoZs5YJMd+
+deVvLUClYUMZ4fEVBDRGthPrn2/nk9qD6pXdv76ScJ159D0KA/OnBRYp/nxsjy34
+0V2qysTxvMDqblYY3M5R8wvY6FJDJVqnFC5U8zk5U4voi/+4D/dQscJxc8Gws+AN
+GYlSybALMAm4U1ADjF6Od+wjmwJHfyZzG+Lz9qsuw89GPNTq/OyU7adTYk02v2Tc
+llJ+naUHtQTQVBlAhAgz3A==
+-----END SIGNATURE-----
+directory-signature sha256 E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 109A865D7DBE58367C120353CBE9947EE263695A
+-----BEGIN SIGNATURE-----
+Jo8NP5vWnHWh0JnepK/qbFmqMo37EKbtLrecGHcaD0k042WNNek+z32c3JC5aXhJ
+b30pwRs2o7oMNtKOGeIDH3A83LMZVwQOb4VgxtHcY0UKt9w5emMLFJrmeQq9x36E
++3QEdx1kdW90IIJKIUWTjd9Deemp1quFUa/WkcJqBssXk1B1jzaSC6ztexc/G7SQ
+++s3CJmnb4rVr84Zvr4obldkgdCfOgUVT7hnQIWpJ9puCA1PzYMqlK/I/05LqoZg
+Vv2C8GJtsmAvv8H5kDhguCAYpUSWPIBwtAcCSbBOROs+0BhhJGBFNd3tHadQd1yX
+7MsYsEEBdL3Nvmm8QnU0XA==
+-----END SIGNATURE-----
+directory-signature sha256 ED03BB616EB2F60BEC80151114BB25CEF515B226 28EB6C6635F1DB90BB60AF8B43F1676E892BB30B
+-----BEGIN SIGNATURE-----
+ZESvQ3gpMO5uIPQKZm1Cm9QX+sLQebguI2ILs+iBYUWanKbPGOpGLrFNxwakIpT7
+2h3l6RDLvD/e1YGDf96QsP5nROs61TNtOiHcePRiNuFzAajNOmE9Vlpnhx/jpSdo
+4VID0Yht2G1dWS4WyRnS08BNrbLE1NA1+yUOe53eAUHoa5Qicn/37VB0KuYU8N3s
+BRv/MGC+s9cdbe4aAtA9CS84S/qmRjEbx2p+FTuK+zXfHsQ1vzQYErjmOVFThU3W
+ug+TPDfFOMX7d591VAnxkG7KAMbf/BrUMDO5Jn/K6DxHqavSO9cBMVh/q0mg/FnF
+U15V/bixpJumPxanGxYzOw==
+-----END SIGNATURE-----
+directory-signature sha256 EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 E861D5367EE5A469892D3FE6B2A25218FBA133FC
+-----BEGIN SIGNATURE-----
+WWmWdy+umgx2WpQ3FJm+rJ+y/lPicWiUFB7NOKEQATKxxShb5KzEk89cj0pL564P
+F7I7D+UjovKKFqz1j7UGnU3cziiRK4aa78aoRLxfwz7cH3UbL1mBeKsUjdnzjSBV
+v3d3Ypis8r2YVhFggWJVlFrVCXA4h5IrKN+GzF1Ur4zEzfTvqxT5A6hpX3bUhsjT
+85uDOQ4hKEdxpc3opJ1+ktjwkKtCvIFwywdARwn5F/dUbV9YcH2/GKC+n96Fsjt2
+gA1tBcXI4XfknlX/paywdgpIWn+MmgJiLHJyURluVQKnyso79pYs74PSREM9tNVt
+nVQls773btvv5MbZ3rJPIw==
+-----END SIGNATURE-----
diff --git a/src/test/resources/relay/2017-07-17-17-00-00-vote-0232AF901C31A04EE9848595AF9BB7620D4C5B2E-6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601 b/src/test/resources/relay/2017-07-17-17-00-00-vote-0232AF901C31A04EE9848595AF9BB7620D4C5B2E-6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601
new file mode 100644
index 0000000..b6487a4
--- /dev/null
+++ b/src/test/resources/relay/2017-07-17-17-00-00-vote-0232AF901C31A04EE9848595AF9BB7620D4C5B2E-6C2F5B0D52DFB3E4CA3DDEEAD690CC563CAF0601
@@ -0,0 +1,117 @@
+@type network-status-vote-3 1.0
+network-status-version 3
+vote-status vote
+consensus-methods 13 14 15 16 17 18 19 20 22 23 24 25 26
+published 2017-07-17 16:50:01
+valid-after 2017-07-17 17:00:00
+fresh-until 2017-07-17 18:00:00
+valid-until 2017-07-17 20:00:00
+voting-delay 300 300
+recommended-relay-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+recommended-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+required-relay-protocols Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=3-4 LinkAuth=1 Microdesc=1 Relay=1-2
+required-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2
+known-flags Authority Exit Fast Guard HSDir Running Stable V2Dir Valid
+flag-thresholds stable-uptime=1313834 stable-mtbf=3072635 fast-speed=102000 guard-wfu=98.000% guard-tk=691200 guard-bw-inc-exits=5242000 guard-bw-exc-exits=4920000 enough-mtbf=1 ignoring-advertised-bws=0
+params CircuitPriorityHalflifeMsec=30000 NumDirectoryGuards=3 NumEntryGuards=1 NumNTorsPerTAP=100 Support022HiddenServices=0 UseNTorHandshake=1 bwauthpid=1 cbttestfreq=10 pb_disablepct=0 usecreatefast=0
+dir-source dannenberg 0232AF901C31A04EE9848595AF9BB7620D4C5B2E dannenberg.torauth.de 193.23.244.244 80 443
+contact Andreas Lehner
+shared-rand-participate
+shared-rand-commit 1 sha3-256 0232AF901C31A04EE9848595AF9BB7620D4C5B2E AAAAAFlr/gChGbYkZ1h7b27S3uvY0Q6zh7uLuSfNTePEQctWmCOhLg== AAAAAFlr/gAtxVkRrRwDU6FquobpTqjQoo9/SCNrxAOe1g7fI5IVGA==
+shared-rand-commit 1 sha3-256 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 AAAAAFlr/gDbLjbt4yccuXLZ6gTnazcuwHNWUKnO8ZFgACwxX1/mAA== AAAAAFlr/gD3UFtNslC8Ij/kdTx7eDH22S4OlB8ijAqBDJa+HptFAw==
+shared-rand-commit 1 sha3-256 23D15D965BC35114467363C165C4F724B64B4F66 AAAAAFlr/gDeqaWwjwyxI+KtUfJZetN0yasczzexEbGhfVzsIr4P7w== AAAAAFlr/gAZ97dJs96HrFRKUyg95oNu+AVdr+07U1O3G6k0lpSofQ==
+shared-rand-commit 1 sha3-256 49015F787433103580E3B66A1707A00E60F2D15B AAAAAFlr/gC1nMCRVdHQ6hOmtPLWePzc+HreH+hwEXo/pVdy0K9a3Q== AAAAAFlr/gAITlFyXr7rLzgXqaJH26XJH3jjQQybq0GjVprvBzHnsA==
+shared-rand-commit 1 sha3-256 D586D18309DED4CD6D57C18FDB97EFA96D330566 AAAAAFlr/gAom343Uyk2qfTHibRHpMcudvqGPe+z/sNj/+zF7UTWgQ== AAAAAFlr/gBHlVzfTrYByI1PYReVeOQKQETnKmuvFkibxbbpBJYLfA==
+shared-rand-commit 1 sha3-256 E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 AAAAAFlr/gCRVXLJA11rPc5HjkgFwpjewOkmVn9PDi0XAN4q3QFj0Q== AAAAAFlr/gA61cfsdAAerlH3smAbtpqfYzw505tAR75LygbMJUfWuw==
+shared-rand-commit 1 sha3-256 ED03BB616EB2F60BEC80151114BB25CEF515B226 AAAAAFlr/gCyaAt+124KmwM8ZHteBkUcL5ucka0rA4S42QghCA4Nqw== AAAAAFlr/gAISYtExUBrGEhyFOtcSrTsk4nvR2JY/EJFOt3d0n2lVg==
+shared-rand-commit 1 sha3-256 EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 AAAAAFlr/gBNub0/fcAeM4rj7AiSYDIbpZL6JTLMoHl/lXv/il0g1g== AAAAAFlr/gDJXAppSCex4OhhQwu6iUHn379aaA4BXD3RhKc5u+1lcw==
+shared-rand-previous-value 7 3mrGAK8IVzYs6VgBx1U2wZ0oIF5nYkvqQgoW53ej7Qc=
+shared-rand-current-value 8 dtkrG/tHYPJ0MkSajToD5++nX0nyfnPUTF2dBydL1j0=
+dir-key-certificate-version 3
+fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
+dir-key-published 2017-04-23 12:40:27
+dir-key-expires 2017-10-23 12:40:27
+dir-identity-key
+-----BEGIN RSA PUBLIC KEY-----
+MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
+hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
+zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
+xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
++nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
+2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
+PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
+1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
+qTCMStn1jfDDAgMBAAE=
+-----END RSA PUBLIC KEY-----
+dir-signing-key
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1uydBiwWAR3mIx6OJlmsMBlKzcEwh31LZCRnZTgNeqNKE6wMRRBV
+8Y2cB6DlOD5+F+A+lAx4WKNp4i0QKB6aLtT8p+2WAeUonRmW+1ge6pGEaLGGNKV/
+zdfBdRJD81mi49FwBIIGDhjq/W3fLr+WWzbGtlEV4IYJ9m/LI/aK+QSIK/fVU+3z
+lXW4vxGsUnvABQR8MfSTQx4gIkSozJZp32aZdkztO/zXP2MgNjQHDUAD389LdOBT
+8wYxS3OYHZLFCug4lRFuuup79QriICXFoGdTZYqhHQxSNE2qeRo5WdPycUUume7S
+wMHjRqEqGLHio041JSHtyx5hwcJCPkb4fwIDAQAB
+-----END RSA PUBLIC KEY-----
+dir-key-crosscert
+-----BEGIN ID SIGNATURE-----
+jopp5B1j5OkYcrhCAPghmjFO347H/ehpDyrunBDKEP1q3XrDjgxPfUobnx9oGqXd
+YqJswj4YZCsCXQP3ctiyZxAEk6LpSoxg5y8KfUiWsKrJ+g4FFxivKZMgpS5HHta0
+eqApJNL+KWb5MAAcY25uBawPnVNUOmO+uJW6gsRlqA9x7YI5mbyP8Tzc3falOopU
+HlFJEM+L3qU3VGvEzp8tCA1FJL7V41JDFK37BTTp5FpIiDTGcuYr4qQ2qQyidtyV
++HC2Q6ZK52YAz1wEhxVpT+AHh1Cfk+JAjm7pfi5K0oXiBtZju/rgZV64CWkGPSDh
+rP6jr5i1mXqeaIYHdsX6+w==
+-----END ID SIGNATURE-----
+dir-key-certification
+-----BEGIN SIGNATURE-----
+EERHuxDPlAHgmbHSVRXv2lC4IGyZPAmhVuOU7eP53j8q9h1slZze+wFtdL8faVl4
+uJ2kzs6PkGa3yoNR+V9+RdxlW8gu5a6cP52QL5Zc5qpNZjugJD6Lm0ZwAaUaRx79
+WCsSyn2og/BfZpZc3nwyOeGIhcZyseKiwBKWNhm9lYIVrx0vdptq4iYmK9hAjR/P
+jg7KAllFQkVMJJBSX3Gt+DxmVYUZoCo8Cgwh39GdWMmKpGy5Js8zYJmio7o9i+a4
+eM0R0cRd156UfOliIPl+HHbZY8NA1BMxXoMubwVuUlx2BLovA3vJGVdLcnkQmE/W
+3g+tDGmjXV0mmSqVkPPsBiw+q1K6OEgrYLh4dCrRMgCoPHJSm+ZJTdWS+XdXXPjC
+4kePVs+e3BpHneZ7pIzrVFa3QTJ3o3jIlOhtVLqbW+QtPl2Cl666OMq1r0Dblcfq
+bhFrIbHVUnuFGK8rfhr2dm4JWEGV+/RDyO9vodPpGZIwAeWcw+SgtevcbnJwlpZZ
+-----END SIGNATURE-----
+r seele AAoQ1DAR6kkoo19hBAX5K0QztNw 89/EhDENc3W5LMElWhcwooFmeTE 2017-07-17 09:12:29 67.161.31.147 9001 0
+s Fast HSDir Running Stable V2Dir Valid
+v Tor 0.3.0.9
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1-2 HSIntro=3-4 HSRend=1-2 Link=1-4 LinkAuth=1,3 Microdesc=1-2 Relay=1-2
+w Bandwidth=102
+p reject 1-65535
+id ed25519 ZtzhbIWHJpGQG+5N7hbRTtenyzq2RNJrx0QegtoY+bY
+m 13,14,15 sha256=w7JSR0fjghM7HwiVPECY3pDpiQVxPnfmbl451iEjQYQ
+m 16,17 sha256=ta1NiKe5KqFSZcJ79Nr0g6losY97LjmuHE516NCje0Q
+m 18,19,20 sha256=V7fWdMpw9Dl1sw0Dwyxa7aUFU3NgucvQzBeQq41clzk
+m 22,23,24,25,26 sha256=W897f0RpvqciCp5X0XnKw1ZC0fmQyy7GVSHd9Yu/hwg
+r CalyxInstitute14 ABG9JIWtRdmE7EFZyI/AZuXjMA4 EyrUikEaOcH2Rz2yuy6HcbgrwCI 2017-07-17 13:20:49 162.247.72.201 443 80
+s Exit Fast Guard HSDir Running Stable V2Dir Valid
+v Tor 0.3.0.7
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1-2 HSIntro=3-4 HSRend=1-2 Link=1-4 LinkAuth=1,3 Microdesc=1-2 Relay=1-2
+w Bandwidth=8569
+p accept 20-23,43,53,79-81,88,110,143,194,220,389,443,464,531,543-544,554,563,636,706,749,873,902-904,981,989-995,1194,1220,1293,1500,1533,1677,1723,1755,1863,2082-2083,2086-2087,2095-2096,2102-2104,3128,3389,3690,4321,4643,5050,5190,5222-5223,5228,5900,6660-6669,6679,6697,8000,8008,8074,8080,8087-8088,8332-8333,8443,8888,9418,9999-10000,11371,12350,19294,19638,23456,33033,64738
+id ed25519 /AcSvVFxaIBxaB5I/7mwdVbMdP6JjDsEPVLU6Hj22a0
+m 13,14,15 sha256=MwWr2NclwojM4OEs1U+GBMxaOoGMYmiJcd+foqzseik
+m 16,17 sha256=aliFzpFQtjPGnQrdnKqr2bDkvNhvaL5+VqP0ywkByT0
+m 18,19,20 sha256=wvT8rxEfzsWKWBWBmjmEB6ZlzYuQSKwd9/nS6NmDEWM
+m 22,23,24,25,26 sha256=Z8y1ONiEP5hNifdpWe4+0AuIdGity3foKGivWT3ZpHc
+r ddetor2 //eMRLpua291JQlbvhTvfL64l0Q 384z05/v404kBt6Aeqph6fbCHFw 2017-07-17 11:54:02 85.10.196.9 9001 9030
+s Fast Guard HSDir Running Stable V2Dir Valid
+v Tor 0.2.9.11
+pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+w Bandwidth=2097
+p reject 1-65535
+id ed25519 XohaNIuMxAqZBnXhbmN902YCJmizkMJHW8V1Diea22M
+m 13,14,15 sha256=OAvv2+7WtcHSdrWZovkazwtpillhqyxgIxEyvLsMP0E
+m 16,17 sha256=vD82Fl293dSk5LbmqKN37WVsxmpdfCOarjXAxRMMkVM
+m 18,19,20 sha256=6ppiPoyMXvzA919ntHFX2DA6egl9R3noX4XQyO0HlvI
+m 22,23,24,25,26 sha256=qyBO43PwQA2abtOfZwMJc7l/bYKyY06fBa/Ht1tXk3k
+directory-footer
+directory-signature 0232AF901C31A04EE9848595AF9BB7620D4C5B2E 70A6DDEB6B42FD0714B8F91F3F6B366CECF4E8B9
+-----BEGIN SIGNATURE-----
+uEOYsZCASHC58vnTSqs1P5gcPHZELASeiTJpZsfQoqQR4Crpc3f23PEGUtmf4yKK
+B+hRjYtargMoCl/idk2GvP1KZhW3TbWMUskmpoiCVCL4zPjlZ9/Oz40Eaqg2oCHw
+aIY4eEovAXouUpN+B8QsIMBI8fduF+dKPrPmE/NAC+PIReaWoGaDF4fASy3Ql5s0
+u0P1wUBMwnd4UGiq0oZ0soezr0JFuSvw61UaWFUmF10bJdJ3LziiaTqTzKEbWmBH
+hUf9t5xWhB5lYcJu/eDky33Pkaw+XP7tj8Qn59xgqqEUzA1kqembDv+gR2k3gB52
+BzdikWT9LKvBGkFwWGhmiQ==
+-----END SIGNATURE-----
diff --git a/src/test/resources/relay/2017-07-17-17-20-00-extra-infos b/src/test/resources/relay/2017-07-17-17-20-00-extra-infos
new file mode 100644
index 0000000..13505b9
--- /dev/null
+++ b/src/test/resources/relay/2017-07-17-17-20-00-extra-infos
@@ -0,0 +1,136 @@
+@type extra-info 1.0
+extra-info Laika A9EB7F7DAB0EB59BE2AF0C1677BAD40C4BCA1936
+identity-ed25519
+-----BEGIN ED25519 CERT-----
+AQQABl17AS1Z6F5JxyZHugRB9Quk91/b2GrbjFLxkH9p+nQ5bNRXAQAgBABhsDhE
+ogXvtmAmmPPVx92oXZxrIKHI+rixmZ0nRwwq1PAAoRpvp+WM10B/cAbDFLMvu7M8
+y0rqqBCksRQqFJ1vH7HFDpGuA2k/8+wrueZkFndK+HpcgGnshDsiVAI6pAc=
+-----END ED25519 CERT-----
+published 2017-07-17 16:13:19
+write-history 2017-07-17 16:13:02 (14400 s) 56013945856,48180008960,34854537216,44604565504,54208654336,54400697344
+read-history 2017-07-17 16:13:02 (14400 s) 54903072768,47198806016,33978647552,43582711808,53135066112,53240268800
+dirreq-write-history 2017-07-17 16:13:02 (14400 s) 1172504576,1006363648,891491328,1083877376,1147446272,1253465088
+dirreq-read-history 2017-07-17 16:13:02 (14400 s) 67716096,51940352,50447360,63797248,67868672,74561536
+hidserv-stats-end 2017-07-17 13:50:38 (86400 s)
+hidserv-rend-relayed-cells 8320428 delta_f=2048 epsilon=0.30 bin_size=1024
+hidserv-dir-onions-seen 318 delta_f=8 epsilon=0.30 bin_size=8
+router-sig-ed25519 TKVC5EhGw3D9rk7ZuHPjX0pWolsQ0O5EB1oYknx+ot4EkWb6yVJzKN1aBMkKZGho9XUfWCavui2Q4L+TTnTABw
+router-signature
+-----BEGIN SIGNATURE-----
+CP4KeWysQ/msdjPHE7n9ds3cB8/WPwuK6hkT+WkAgX7mBb+JiDPjjg8Sp2UcVDUD
+jEZKo07L/yEKf9Rz34tsfXeODdarr/zhebhTpd6ihNb3gWZoG+F3J8Ti2U6KqgVi
+naZ4hzuy+lfaBHZU/yBKDvzB4vQ1LSM2KZG2jkSQukk=
+-----END SIGNATURE-----
+@type extra-info 1.0
+extra-info Noonesland 6D7C6F497419BBF024820AEF6791D20B49A4A0B9
+published 2017-07-17 16:05:51
+write-history 2017-07-17 15:56:41 (14400 s) 3002789888,2579445760,1814833152,2429364224,2660307968,2653971456
+read-history 2017-07-17 15:56:41 (14400 s) 2976329728,2549826560,1800614912,2405142528,2634059776,2627343360
+dirreq-write-history 2017-07-17 15:56:41 (14400 s) 26686464,31054848,18189312,24768512,25589760,27505664
+dirreq-read-history 2017-07-17 15:56:41 (14400 s) 2804736,3631104,3555328,3543040,3760128,4137984
+geoip-db-digest B2E5105287668771E34A66F90B34982D419727EF
+geoip6-db-digest 8DA8AC3C8158CBFDF7DB53BBF73338246872371A
+dirreq-stats-end 2017-07-17 06:37:12 (86400 s)
+dirreq-v3-ips de=16,es=16,fr=16,us=16,??=8,ae=8,ar=8,at=8,au=8,be=8,bg=8,br=8,ch=8,co=8,gb=8,gp=8,hk=8,hu=8,ie=8,it=8,jp=8,ke=8,md=8,mx=8,nl=8,nz=8,pl=8,pt=8,ru=8,se=8,sg=8,th=8,ua=8,za=8
+dirreq-v3-reqs de=16,es=16,fr=16,ua=16,us=16,??=8,ae=8,ar=8,at=8,au=8,be=8,bg=8,br=8,ch=8,co=8,gb=8,gp=8,hk=8,hu=8,ie=8,it=8,jp=8,ke=8,md=8,mx=8,nl=8,nz=8,pl=8,pt=8,ru=8,se=8,sg=8,th=8,za=8
+dirreq-v3-resp ok=128,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=40,busy=0
+dirreq-v3-direct-dl complete=4,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=120,timeout=4,running=0,min=1908,d1=211976,d2=299596,q1=358827,d3=399662,d4=587886,md=628103,d6=702643,d7=821638,q3=861864,d8=889466,d9=1006029,max=1121540
+router-signature
+-----BEGIN SIGNATURE-----
+riGVSQkTetR29LmfuH81UcQPwE555T+3aCbu0m+g8t2CkkJGM0m18oARq4SLZSQh
+fJUX6q2uLXDJNCkmuhmIKPWxj34dCAkmN33zupxB3FiFepJwMZ31hKv6Y74YKhXL
+lKUSOo4OJ5Dmd9/vN73ozN2tSjCnmXwqMbFLRSklQr4=
+-----END SIGNATURE-----
+@type extra-info 1.0
+extra-info Unnamed 22625930D86B38661C522356BAC6AAA37A16E4CA
+published 2017-07-17 16:37:21
+write-history 2017-07-17 14:19:17 (14400 s) 5563392,9600000,8963072,4339712,7075840,9171968
+read-history 2017-07-17 14:19:17 (14400 s) 7273472,11308032,11141120,6022144,8183808,10304512
+router-signature
+-----BEGIN SIGNATURE-----
+id07WFKUts2/mWRUEVdb35gwXNqyJXiOV8Tf/yyGnnPyYrysNjPTpdsH6eklp5+b
+Uzvsjod3qrPJFSLs8i9CSmpJkYLIe5TOMNpv8aeDzi0EcsoBvGe9pVcx6b7bvze6
+OltWRZPtypGAa6iw+zJ36rD8tQRR7ktODKlvfJBXp9I=
+-----END SIGNATURE-----
+@type extra-info 1.0
+extra-info bubbleoseven B2F7655C0CEC7099D693AE9C86FBFD58E98CD63F
+identity-ed25519
+-----BEGIN ED25519 CERT-----
+AQQABl4FAb2TA8ulVDyppPs1wfIYUoBeD3oSQ8nWVStsSlOIJoHjAQAgBADsvMTU
+trHjF/5XZLn92ceLCU9k8RZRLg4Q53Lx3PYqycRu0ap30pNH38n8Pxw8RJL3ICUW
+e8Lik6Ni6QpBUCVYUhlKMDkQndh+Z+w9pxolYREHwgfZGmzi4oI87IyRSwg=
+-----END ED25519 CERT-----
+published 2017-07-17 15:53:19
+write-history 2017-07-17 15:50:14 (14400 s) 6873174016,5213486080,5725477888,5168033792,6365374464,5071943680
+read-history 2017-07-17 15:50:14 (14400 s) 6864226304,5210245120,5721249792,5167883264,6358496256,5075549184
+dirreq-write-history 2017-07-17 15:50:14 (14400 s) 5188608,2868224,2313216,1309696,2476032,1790976
+dirreq-read-history 2017-07-17 15:50:14 (14400 s) 6853632,5117952,2380800,1858560,1713152,1687552
+geoip-db-digest B2E5105287668771E34A66F90B34982D419727EF
+geoip6-db-digest 8DA8AC3C8158CBFDF7DB53BBF73338246872371A
+dirreq-stats-end 2017-07-16 16:31:45 (86400 s)
+dirreq-v3-ips us=16,ca=8,de=8,ie=8,nl=8,sg=8
+dirreq-v3-reqs us=16,ca=8,de=8,ie=8,nl=8,sg=8
+dirreq-v3-resp ok=16,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=8,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=16,timeout=0,running=0,min=288853,d1=288853,d2=422559,q1=611492,d3=611492,d4=881509,md=886601,d6=891548,d7=1005240,q3=1012168,d8=1012168,d9=1191181,max=8400671
+hidserv-stats-end 2017-07-16 16:31:45 (86400 s)
+hidserv-rend-relayed-cells 1592734 delta_f=2048 epsilon=0.30 bin_size=1024
+hidserv-dir-onions-seen 215 delta_f=8 epsilon=0.30 bin_size=8
+router-sig-ed25519 neyLHAhXF6+wO8z1IdVqzmI2SawP/JviODYuKzo/dT2IYz6VfgsfZFRpNxClRg7EYZpT0GtpNMuFcSHC5F0wDQ
+router-signature
+-----BEGIN SIGNATURE-----
+DhvWqu6mWlTEnRUoC+UjnOrxFJhcpmdBEjeBREu2N9kxfYX+Tji5ZOfnxy7kfh9J
+gp/YENrhBdeRsh4v/lRkh5SEa3Z7mCjgZg9gigNIC0SbmQBwiu3dshwYUkkRtmAn
+wbuGe23P13nPttXcTzSx1+NYQsXybpi5W1Y8A76JSIA=
+-----END SIGNATURE-----
+@type extra-info 1.0
+extra-info Unnamed 5F852FEAD9A61711C5DBA94679380EAF9E58F194
+published 2017-07-17 16:38:59
+write-history 2017-07-17 13:25:26 (14400 s) 142027055104,143395660800,122423040000,88385615872,113916124160,59078951936
+read-history 2017-07-17 13:25:26 (14400 s) 140099932160,141490467840,120992486400,87137323008,112422714368,58193235968
+geoip-db-digest B2E5105287668771E34A66F90B34982D419727EF
+geoip6-db-digest 8DA8AC3C8158CBFDF7DB53BBF73338246872371A
+dirreq-stats-end 2017-07-16 21:25:27 (86400 s)
+dirreq-v3-ips
+dirreq-v3-reqs
+dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=0,busy=0
+dirreq-v3-direct-dl complete=0,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=0,timeout=0,running=0
+router-signature
+-----BEGIN SIGNATURE-----
+OamJqLTTcywjD2JCx0tNmGR86MZ3TTSirXNMdmBXcUwSKsdYPEPO1YCnmY85x2Ee
+nDU8m+NhfHvBJscmTsEtHK7XwFLkfWNhq1sCdiIvwq7rRIbW8kkjVKrY9CJJjrj4
+/ic3OaM2MBISn1TKoxVwoAXSGHE1Dajs6THcgSlvHRE=
+-----END SIGNATURE-----
+@type extra-info 1.0
+extra-info Unnamed 954B221CFDC3F56A15FE3C29F85D5FE34BB144B2
+identity-ed25519
+-----BEGIN ED25519 CERT-----
+AQQABl22ATuq1t6M+oqrb5yEYmkmYz72Tcjq+vsYUQG4cYScASZJAQAgBAC3P9dc
+dHKbFhvf3YqG3z789GcbnOaP+hE6pVrpebT1J2uF8bAVDn3TKxYamIAqwwY2e5o1
+3znUrf7uDJTYnPuZK1wF67Z4w6K6V04dLBUoeMvke52qYie6XZajFct5nAM=
+-----END ED25519 CERT-----
+published 2017-07-17 16:25:39
+write-history 2017-07-17 14:23:27 (14400 s) 9820580864,10414418944,6695391232,7226501120,5122193408,5213615104
+read-history 2017-07-17 14:23:27 (14400 s) 9720658944,10322909184,6638159872,7151337472,5075135488,5172275200
+dirreq-write-history 2017-07-17 14:23:27 (14400 s) 83148800,77387776,55478272,73586688,45719552,41606144
+dirreq-read-history 2017-07-17 14:23:27 (14400 s) 4964352,4588544,5505024,7198720,4013056,3792896
+geoip-db-digest C1EB5237F2FBAF63381D8551157F13D12EFCCA25
+geoip6-db-digest 1F99B6B0EC78E9DB34D61AE7E0FC261D558E8E5D
+dirreq-stats-end 2017-07-17 12:50:46 (86400 s)
+dirreq-v3-ips us=64,de=48,fr=40,br=24,es=24,jp=24,ar=16,gb=16,it=16,nl=16,pl=16,ru=16,??=8,ae=8,at=8,au=8,be=8,bg=8,by=8,ca=8,ch=8,cl=8,co=8,cz=8,ec=8,fi=8,gr=8,hr=8,hu=8,id=8,ie=8,il=8,in=8,ir=8,jm=8,kh=8,lv=8,md=8,mx=8,my=8,no=8,pr=8,pt=8,ro=8,se=8,sk=8,sn=8,sv=8,th=8,tw=8,ua=8,ve=8,vn=8,za=8
+dirreq-v3-reqs us=80,de=48,fr=40,br=24,es=24,jp=24,ru=24,ar=16,gb=16,it=16,nl=16,pl=16,ua=16,??=8,ae=8,at=8,au=8,be=8,bg=8,by=8,ca=8,ch=8,cl=8,co=8,cz=8,ec=8,fi=8,gr=8,hr=8,hu=8,id=8,ie=8,il=8,in=8,ir=8,jm=8,kh=8,lv=8,md=8,mx=8,my=8,no=8,pr=8,pt=8,ro=8,se=8,sk=8,sn=8,sv=8,th=8,tw=8,ve=8,vn=8,za=8
+dirreq-v3-resp ok=408,not-enough-sigs=0,unavailable=0,not-found=0,not-modified=120,busy=8
+dirreq-v3-direct-dl complete=8,timeout=0,running=0
+dirreq-v3-tunneled-dl complete=400,timeout=4,running=0,min=5783,d1=116441,d2=198720,q1=238237,d3=291953,d4=429610,md=525516,d6=623696,d7=703178,q3=749916,d8=798955,d9=1068573,max=6581957
+hidserv-stats-end 2017-07-17 12:50:46 (86400 s)
+hidserv-rend-relayed-cells 2627757 delta_f=2048 epsilon=0.30 bin_size=1024
+hidserv-dir-onions-seen 185 delta_f=8 epsilon=0.30 bin_size=8
+router-sig-ed25519 zlLifbD2VF/NXf14aNfOOOt/+0HeL1NFJi9TH7UNoJs6bQO6jatfPPYR3BrtK8M/l9jprb9FXV1vd+mDrXrABQ
+router-signature
+-----BEGIN SIGNATURE-----
+bi4HS09ksMFj8E0+rIiujIHRfVAWiyNS/M7XDJLgoBI5tb1Z0QemVpJJpGgW3cwu
+T4PKsST1xQkU5OvqE+CMQhsJmb69dnDrLXwgwE4/MVn6ZhKUCDiVFLQp4CpqHlT2
+GdZ12FF8npbPElhDKqkULmiqfnND5WRmamTf+jGTJKc=
+-----END SIGNATURE-----
diff --git a/src/test/resources/relay/2017-07-17-17-20-00-micro b/src/test/resources/relay/2017-07-17-17-20-00-micro
new file mode 100644
index 0000000..be72d38
--- /dev/null
+++ b/src/test/resources/relay/2017-07-17-17-20-00-micro
@@ -0,0 +1,129 @@
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAMoc6oKsgN7/2tW4qU5xiGhN7anQ8RpKuwndBTiPsXUFWTYiar30b0DL
+jiKz+WqusZUKT/fIz6ETnqr4N2Y5NUc3GsAMOyYgKc1urAiwp8y6tDDjkb3PuGN+
+0xOfAzux4hXkpN31OiLco2SShkpNG2yRotG1Bc0voVn7Ze+DuUDhAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key TNQpEp4ZLF3UitmQk8lHKVF0LBIiqxRXovZF2dIxg2s=
+id rsa1024 QqIYKeAXfHdaKZhrhE4SKiXuPJU
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBALq1jLuS3wCwJ2Ou68X8I34E+/fB5Y7BKj3OpowjA8wzQWsB6BV6v6m3
+J/iQcwU0Yw6NJDjtZbGVcWtFCs2gZ1uCmOHWUsUVBy+PVvbfmz5kdS2e/0j6cq3c
+zyaKUBSsIC3SoyYM8/Kg9gi3sJTIbZdhkoiWNiCEuDYKTIqwv4c5AgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key Ho7mMeY7DbRkV4CCsoOt0l/33y68T5ak00W+x4KWFH8=
+id ed25519 6FEPaO0qQ+XC/VWJOg17RGHUZxwjYZ7FEApvyezZzVg
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANZhlVNLrDFBWVeLkFsICD+cKUoPIGkX/OUNPOOuYas9t4VSQIRwX19N
+fCzyFzqmZjO4HkAxoRQBoWDTGpqlv70lQMZ4p0Ba0zSwUDY+jIJPLFZ+xC0SDUK1
+H2QKEhTHAk0xpfV3fZT2zVq+FXIOj1Fl7uKSHYiLfBdvaV8M/dYZAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key UEdcg7JNWwbZoJ6F96lujhbffylrw3J4KhXQEgmCwkg=
+id ed25519 xcCdNV8zly2rCTRAWXSMFBKuH5JyE+VFX9C3k1vBsNk
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANcttcnXyjylqj+FkH8hGIa2djz5WH8hZe4HzaBKtUrJ5FZ/WtTohlw7
+cqcXGfvmskluI7nw4atxEE3NrvMBM6pMILnNcPNS5/IKh/EBl1G6kFxkhc6dZdjo
+Vucw15WIApyE8Llrr/rEbxCDD/Dk2Z5hK8eVx7il4CNqO7afe7FxAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key UI+ypmQg2AvHOLs72asnX05GWbYBvwlpqv6J/zIMFQk=
+id ed25519 psTnPTMsgXEvQZUD4mRvXu6AyHjAS/VGQ5WrrFmtcdk
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAL7qMhjP8xtt0S3bLe3c1yaaDJSObbt6fhii64tot5HwB4H7kcNAwea2
+pVo2pIcx8IoYTVTlZMtcpfHHrclnc0fOQHxZ3T3Xx/qF3gELxthtdyOPxQlDFMWN
+vYTpJkH3VfwJmdB+Oidz5NRitIAQvtHTYa5oZ4iuRmH2l9kXwHKtAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key Y/UpIQo6HjiUJubLOgjXeMW4Sydq7XWaRlMErsMd8Vs=
+family $BAD5FCA2B070CA2F20BFD7C69570B192126D7390
+id ed25519 fDlUMulqfTdY9Ju7lAiWT8nUy/LJmXRpGjMEbjzN0WQ
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAOaJRUkrr6nzk8cOLPUdNabltmcJT6b3Zq3oomGPQnL0hiFd+7+VNqc3
+dipIjufsXGHSlt7LAmitXC/AoINC7F5TYSNvCuwg5j7byirh2XGuQsBQbraQDSSK
+YrMwTUdzIRnWv/eBKii6N/65WvIKu16AiW0Vc691rlopd/r6ZtdDAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key 5P/aqDP5zuCnQElxCOTu6Y66Lg/wF4nke/TiMLjM7Xo=
+id rsa1024 oGOUlhA+TwxyHkzTG9Isye+UxM4
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAMSUoNhC7NPGfQkVbDwX32k54Ff6dAZNxJF+IVrknRSmqb17XQMKFUHn
+FVuCr1U0d17u0JB5oCNQ5eg0g4uFh+tDVvmv6aAzIQphLBuVid9uJ07wOZbSDG5o
+dYfVPhljujBTV5gYC/DuKC0dkOFQBcycK+gsy3RtvSOTlkZi5IBZAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key N6T2M4O/A7ct60BpfnN+gcRKUQm7O2D2yMRNgQC6wDs=
+id ed25519 1wqUKVWv3kpLMcTKMxUWR8kzlZ/YkDTaZwaM/lCZVc4
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAP567tZXA8lMnrheTb9XPnQgT6M4fK3qa1n46Ydscr/1AaWG/q1Jz/qb
++qM/bTH43iuySpa9zuSaMP5yKCBwh9sqhugVFYQsYg5/OnUCp8m2TEkh4X2LdS9V
+6mORJht50m1YAIkQvfILAUZGlSrdrAw7UA/yJ2XrJ5XVmxtxm8zzAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key BkfplMYTQyEAVHr/4cQvgEOgf0eAAu8BLroA2E5z72o=
+id rsa1024 YbJHqAFbv8XkdAUWyBm2BB3Mnzs
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAKyZeWy5XcNGWg8hKBfEXVnfrLy01vpW++4J3/qgjCCdjnkKfyENwCDK
+81V4RCyhVjb6BbtX9FeOQJSE21Z8bqVN2cIuQ+EZzouEaVvQx+03Z2ZKxcoa7ytr
+cjiPshQzj3tcQVIbT90IGZyILz5mHouSYZVsglDoRv+L9HvkLIqhAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key yZPjAwRb4bAbeE1sBgIJejBPF9OFZ2Jme7Yh+yoKjjY=
+id rsa1024 dRIUVigDIP1+/qC14aWvKHuzXek
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAOqh6vSUhg0fAsWEZEdEYyXgmJ/0NPXn/93PS03bfy8e9+j9uggM/nkC
+KKYU0SN+o95rYrJsiyn7rU7UK+U8TlTKkYcIdgKwKDmLKlsyy0SQhmbr61/ljo2r
+9s/AHNVBjIW6xDgqgMq+EmmRkeSlC+cVZ7aZoFj1d2x4XXd/RiXjAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key jFEQCTH0LZ5J83/Nt21YrZAFrYf0SnxlzLDQOCQ2vDs=
+id ed25519 WXOC0MIWLWMyp1cM1nvv8DkA+t9UlVyxwQ0xBPSO3uI
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANxOIlT0OOz1pRkm6FyGlLZObm6AUbJl4sE8dQmM/Vk/Qa/0ffpSHZ1c
+5InTj4GgpDndUxX5v1v5wHas3LMdd/1rrWQ4l2IjRKKTbjdOD/xdF7OpJQY0ii5x
+sVkPjf0rC0U3nWqskMe4dK6NIR8pnPXHai48thlNUqSYL4435jUlAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key eXELaCB+m2Udx7ukbb1Mk7qtUcpboSvTsstIsf1s1Rw=
+id ed25519 xACMXWM/7ceiiIcyh/Lej3La5hBISbS6kunFT+RSrsY
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAOAgBper+YA8P1lhq6DBpGlDNXdHU5sY9yCnGWRtA+Ze83FXCd9bs+xs
+cnsKLOWl5fZVwTnWzdBdUzg9nppZOwTUXNiaxY8e3yVJJKpWD2ysPz1NHyHUmE3C
+5ipHnSLct6ArUZTvs5VsFEwjSSxSiJFYjNBQCp+sSPQPC0ppy7ejAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key 3vXkL4iXF2ERandBO0zoCWAbpG7jWwUyHiKaxijpCgM=
+a [2001:470:1f09:11bc::2]:9001
+p accept 1080,1194,1723,3128,5190,5222,6667,8080,8888
+id rsa1024 XpnKX0WodX+sp2KCeKCPjWwYkeI
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAOOCw4peHoggV5IP3qjI59HXgf4rjaGrEzl5Gh9owBCfOmPdBwy48div
+NamtTRCNiZP68ZSZAu6IKrhRcqqXKp+dGJhnR3nUsDR1vbRnv+HVZ0g/7XsbMjxn
+qsGX7dmmsHxYGIKUOLrNCT48sc9Nfq+QSJ8BIdERWdWkgj64GAN5AgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key RPigYmyfbZyjC0q3hlu5PY1V+rkG45BKbBhyQPEMems=
+id ed25519 mvpSsJ7wZNjv/0CLW7y/zmwK60ocN+1lPrs8+mG8lGo
+@type microdescriptor 1.0
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANwQESBFu1DKhCofzhjGFOw6qqoDzA3FZC4CQd68y4sMlqCXA0cCo3Ee
+NGRzxnul2pLh1VzSEpf9FUqYCwjhVQJUsJTt5uSWTtE3Wb2HxaVmdnmSB9DZe1nu
++T1Tw0HHWfVmXD77x2aGv+SUazD+psoTj7RSZSKE8Rz0ikAH/gRDAgMBAAE=
+-----END RSA PUBLIC KEY-----
+ntor-onion-key y6+XCSfGd70wjvuM469q7v4XaqMpJWqDLYL//iludyM=
+id ed25519 6fjgqQlNAZV9UN66txciYXAN8s23cFCfAli35raz738
diff --git a/src/test/resources/relay/2017-07-17-17-20-00-server-descriptors b/src/test/resources/relay/2017-07-17-17-20-00-server-descriptors
new file mode 100644
index 0000000..cec2c7a
--- /dev/null
+++ b/src/test/resources/relay/2017-07-17-17-20-00-server-descriptors
@@ -0,0 +1,164 @@
+@type server-descriptor 1.0
+router WinterNight0 5.196.20.85 9001 0 9030
+platform Tor 0.2.5.12 on Linux
+protocols Link 1 2 Circuit 1
+published 2017-07-17 16:48:00
+fingerprint 08AC EB59 484A EC8F 77A9 4EF8 F733 8830 9531 B7DB
+uptime 4233607
+bandwidth 1073741824 1073741824 6156209
+extra-info-digest 2285BE7F0F03B9924B8BA464EA2E42803E1DA3C7
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANB1HLLYd4gOzQKr7Zmoj+91Ym7hlxAesPIXf1MQleNLJGxkK9gOgsxv
+eapGaQARzQB1U1xwEOg7Vb6an/rHnoLeemnMuKq4bw0M0z3l5svGQ0oPA1/Z76Y6
+c12dzuiS66F8M8IQhEyLSVrYSeoYHXQ4FDqYEJXMr/PoRZ2hL8VJAgMBAAE=
+-----END RSA PUBLIC KEY-----
+signing-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANhjXPP64jq1zsl+Tw4CjDZKKrHN4tLFtfq5j5aFIry/YVo1fUQoUyfO
+p+wwudefa0kDAuaMG3thsCUchOMqYsFTpUylk5vci/5sWR42/IYPkTePTPIhSHrc
+UiX7PW7m/uACSA5c0urdh7F8z5sMC9nrvbj82tFLUC5OtNAGYw9DAgMBAAE=
+-----END RSA PUBLIC KEY-----
+hidden-service-dir
+contact office(a)wn.systems
+ntor-onion-key qLDGvY9hSGaMPzd4bN3XIyj3UHbE8hnBfr54qXiKuC0=
+reject *:*
+router-signature
+-----BEGIN SIGNATURE-----
+bIygE3rToTYHYEdDxzK2pK+lthr9PG2Xt4FVquUJBIfIlyJdrtUAHu9LB7V2shqS
+K1wHKXAMRv8b/9QFRspR+a7u7SRMhXJCbzkoheK/FhbeTWys9qKZ+bk+cvHHsV3N
+l//7bOGU+bNIiNYk+QmKYklvdqySwmDBxEGcx79MsFY=
+-----END SIGNATURE-----
+@type server-descriptor 1.0
+router tortomofterelay 78.94.92.170 9001 0 9030
+identity-ed25519
+-----BEGIN ED25519 CERT-----
+AQQABlxWAdNEwfMdWYkX7liDtfaS2pKgx3KFfgJFG37xBDk35ZnlAQAgBAANdPxb
+qzakrpqdpiMOf07H8+kCxINaPGgab4KY+YlZ8+VNPc0qCvw/rLBjXOJHnJt0x2K8
+zY+82oAvRRTLb9lwImHnUr0KkZhzFH0tYkgJhXhgaPl0z35vzHVlSiz2Egw=
+-----END ED25519 CERT-----
+master-key-ed25519 DXT8W6s2pK6anaYjDn9Ox/PpAsSDWjxoGm+CmPmJWfM
+platform Tor 0.2.9.9 on Linux
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2
+published 2017-07-17 16:47:16
+fingerprint 5E68 AAB7 880A EC84 DC00 CA45 BDCD 0704 F6B7 D02D
+uptime 9624998
+bandwidth 687104 936960 814769
+extra-info-digest 8EFF2CEF4195DE38F84B0F6AAF036C58320DDE8A a7r3zB9NgV4hFSm4T7N0OvzClFGgibyvAW6R7R32fYs
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAO+Igi11dIu8L+BJxzHPUsfj6b1AtzEOtCnuzysfqHB6USBuRXA9DtLQ
+P/Kj2iy9xw2inhJJVMdkJnO4WeByf09vsRrH3AclIp0+fMK28HOHbg3m7Sl5hOAd
+5pfLS8OtM/u723XfhH+flRfNFGM0Xd+quq1Tj4UbrPNtNNZiSDYLAgMBAAE=
+-----END RSA PUBLIC KEY-----
+signing-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBANQXy0wHLSfBYU0OBOidoZDHByiy9Atn0BFBdisTWKXcsLcTuqNgjQVs
+N2ztEoeSYpfHz1ASrxgbJeOB8cGNV6PyYKwOya1oB1O/TxepgThC6kKhWNEU/Ern
+bz3XJCf9AK1xe8FsFLE7lvOyWm9Nblv1Oe9Xta+X3OFNcjZgFdkbAgMBAAE=
+-----END RSA PUBLIC KEY-----
+onion-key-crosscert
+-----BEGIN CROSSCERT-----
+RjdJteoXEP2+xU8gm51l0InCcj8h0AxfQn+4bFI5Xl+3/8sWur1O+V33XXZvGEKK
+YHosdV1tr4aAzBbgZzh71IapNdZQlMlFCdX3upD5VtRzCHp722TSEB4F2/kviqNx
+t5LYM2+ohQfCU3YH++1KoJxvB9OzRnK71sFtiDQs6as=
+-----END CROSSCERT-----
+ntor-onion-key-crosscert 1
+-----BEGIN ED25519 CERT-----
+AQoABlyZAQ10/FurNqSump2mIw5/Tsfz6QLEg1o8aBpvgpj5iVnzAMfqLVN3YgrY
+F45w3bjYTMtXHeCU2piVJGO7ejwfQOq07PwopGTFVtEZ4Ith2oHfSWkD7egMXszN
+yXdAXSIbEwo=
+-----END ED25519 CERT-----
+hidden-service-dir
+contact Mr Dred dred007(a)gmx.de - 1A24s3evSHPPmLe8CELQeCM5YAZewWdoK7
+ntor-onion-key ENteD2rL1WreWsPNAf2aTj24JHjpBOY+kBgca+JDz14=
+reject *:*
+tunnelled-dir-server
+router-sig-ed25519 Y4u8ppUCvVICuy6lBB2R2RjO6dRk4x7RwIeQ3DQnY4wPP/trTYTzUaJokjZuXjr3u/QSZLOxE7F0ihoWUdsJDA
+router-signature
+-----BEGIN SIGNATURE-----
+fPT7T0rmgMCvlGvjgJrYY872m74/5wb1PXF3AOT17X4ULX+vL2R6uyxP3PmXb//r
+VjcAyOogKAZ078Z0O1/V+pU7lPrYOAF3Q8HQHl9oUQjefTTdrpH3f5oTD4OW7UjY
+DG43AvVHz+mqIWwN5pag2iI7ebGOJoLONclocmcwBYo=
+-----END SIGNATURE-----
+@type server-descriptor 1.0
+router Ajorcel 82.64.7.146 9001 0 0
+platform Tor 0.2.5.14 on Linux
+protocols Link 1 2 Circuit 1
+published 2017-07-17 16:15:53
+fingerprint 4F95 B731 3679 ECC0 00F3 8F87 0CF0 CF39 C738 6C50
+uptime 194673
+bandwidth 102400 153600 114450
+extra-info-digest 5CA81CB315354340C3279238781A2D1F20AD3BFA
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAKhMroWpwpECvTQLVbVlQ+PD8DRat3MjiXFRoj8LjKuYB5oETdsgIIyL
+ZWt5X9pSLSpRrgciBpycekVvTaJX25iqMfDXhWpqxiVTvkm5miAexm36mHWkIhnV
+KjLy3AyR+ub9amqBCEd+ONW2tXCyNHDXM/OEWA+PdIoF2CvwPCUzAgMBAAE=
+-----END RSA PUBLIC KEY-----
+signing-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAMtEDZS+YXd2zfqySDSztsEYgLGP0bwYVDSLPJ/iBxJhv3v7aujQUIXb
+PXiF2yS5pynzEyl1zT3nft0dNqVRPnqllu/D1KuZK1XCFHyqvoJydv/z97/F2PW3
+IR0i7/mb8XFl+5+UQuWzzX5YxPR5OK+kYFTL1ic17ebOQGnwjWAFAgMBAAE=
+-----END RSA PUBLIC KEY-----
+hidden-service-dir
+contact Ajorcel <ajorcel @T gm@il dot com>
+ntor-onion-key 44zTULInZpY5jsKunHa1/JCFhEelSbXR/dWOCG4bSCI=
+reject *:*
+router-signature
+-----BEGIN SIGNATURE-----
+CELh+nplCkUem/IKI5zrn8IFH70P/l+4T2cBeQcZ/CIQjMIMEVFrgcSS0FS0oEnb
+0W+GiauWKjXDejMwgk2RirKPkJx0V8YIMZP4RhT5EBsWBA4ewlobxu/FeJVf1MM9
+W0p1kAh28GHzXgiSXskMRCpU1hRUlrFVx079VdoYcbs=
+-----END SIGNATURE-----
+@type server-descriptor 1.0
+router CookieNode 88.130.65.242 9001 0 0
+identity-ed25519
+-----BEGIN ED25519 CERT-----
+AQQABl3+Ac3rPCm2ofgYBTt+6OzGsZr6TLJ5ZwkfDbMr4S9BvoBfAQAgBACN2fCJ
+6vMDdt+RxD9E9/dDVGkFtfoorwfjvY4oJ8QP2f7we3rhK++bLMlm4Tw9eoMBOsGA
+0GidhsSVTxvm8i6A/esbevEEpe6gO9MrUZ8Bbly08SDi51w9WhUXV/aqaQc=
+-----END ED25519 CERT-----
+master-key-ed25519 jdnwierzA3bfkcQ/RPf3Q1RpBbX6KK8H472OKCfED9k
+platform Tor 0.3.0.7 on FreeBSD
+proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1-2 HSIntro=3-4 HSRend=1-2 Link=1-4 LinkAuth=1,3 Microdesc=1-2 Relay=1-2
+published 2017-07-17 16:23:04
+fingerprint 2309 3500 5C74 9BBD 303B 01F0 EB83 A549 1A0C 886E
+uptime 3
+bandwidth 512000 819200 182272
+extra-info-digest E770D10CD99665944492085018918606AD396DDE C9GNRY10+sX/cw53DMFfF20YTPE9r4PVsEsHMd1T804
+onion-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAPBtE3aMl9qrxevIfs2XHA4TsnSAlThdUXPPjpwjfBR5PRlgvezlFDxI
+RkvukxLCRHWiFj6a7u1mHXA8yhOfiiur95wEG19si+9sDc1VXozuhPizHIsvOjen
+9vBkxP+Ot4gMh3/v6tyCmvGr/6krD7fSC/CDG1orp+V+mSh4mxTVAgMBAAE=
+-----END RSA PUBLIC KEY-----
+signing-key
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAMqMgoxUmr2sXDiQ9c69f+iGg25XusuuAefQL1Xn98xYCbH0oVTOHOTH
+G1qtLM+79RSx/Y/85FnW0mZx1jf8VAaXycEZrtkenMqzW7bwEKUnJRD4OncXYEso
+5jZioqR7o4YLWYA2AHUSfsnFCC/Lai0Kg8y6x33pjLAyyIEGhUb1AgMBAAE=
+-----END RSA PUBLIC KEY-----
+onion-key-crosscert
+-----BEGIN CROSSCERT-----
+OzhZ2AnsXKIGruMLYFuo1NiKN8dtbOXFC0VlS8B2MfSAVHcRgFWApD4eEOKZPcHj
+NnEB2doSGumsQNz9ZpEccSmke5fVATje64O/REBk5rD6hOKUYF32gugoWkssS1l4
+7gzQPb9EOn++yip7ESvk3ai1pE00xPGAvZOrY7LlQOU=
+-----END CROSSCERT-----
+ntor-onion-key-crosscert 1
+-----BEGIN ED25519 CERT-----
+AQoABlyZAY3Z8Inq8wN235HEP0T390NUaQW1+iivB+O9jignxA/ZAIRIokh+zaFo
+ya8BkB7DM6Rulr5wZvOngOjmps6dxdmhqXgpVP/1F27o3T9DOiNIEa8qmUxvmZkJ
+elMU0MBhIww=
+-----END ED25519 CERT-----
+hidden-service-dir
+ntor-onion-key X612yJmMR2BUPGy2Y1BV2dOOVxSvvlR+uZMmsWzQbn0=
+reject *:*
+router-sig-ed25519 h9P8ZE7IMYyghKf2r56qSKywnA2QUqn/LzD3HXI8oBDh/QVwq/sngXbi4rQoIE3tMuPNe6yho2t9vTZQw04FCA
+router-signature
+-----BEGIN SIGNATURE-----
+Q843+DZd/R9nf7O64HdSkNJBitrA38JGDIw3hVi/YK5TgE1lmokvkl3kq6xCY8zq
+wsy7dRY8/cEkpq63uVxikVbmYYQZlVKrEXViq46ejBbktGQj0IWKRpRH5GTlPhhS
+hhOfx95EfIDcQSH81qGi9h1AgItV4trMeB152r0o+Dw=
+-----END SIGNATURE-----