1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +01:00

zipnum: fix bug with urls in last block not being accessible. when iter_range() fails, if check to see if last_line == end_line,

and if so, check if start_line should also be end_line #112
support non-linenumbered idx files w/o pagination queries
add new zipnum-sample to test cdx lines in last block (previous sample had only one line in last block except the first)
This commit is contained in:
Ilya Kreymer 2015-05-29 11:42:30 -07:00
parent d104c03135
commit a51b2936f3
4 changed files with 102 additions and 60 deletions

View File

@ -6,9 +6,10 @@ org,iana)/ 20140127171238 http://www.iana.org/ warc/revisit - OSSAPWJ23L56IYVRW3
# test idx index (tabs replacad with 4 spaces) # test idx index (tabs replacad with 4 spaces)
>>> zip_ops_test(url='http://iana.org/domains/', matchType='prefix', showPagedIndex=True) >>> zip_ops_test(url='http://iana.org/domains/', matchType='prefix', showPagedIndex=True)
org,iana)/dnssec 20140126201307 zipnum 8511 373 35 org,iana)/dnssec 20140126201307 zipnum 8517 373 35
org,iana)/domains/int 20140126201239 zipnum 8884 353 36 org,iana)/domains/int 20140126201239 zipnum 8890 355 36
org,iana)/domains/root/servers 20140126201227 zipnum 9237 386 37 org,iana)/domains/root/servers 20140126201227 zipnum 9245 386 37
>>> zip_ops_test(url='http://iana.org/domains/*') >>> zip_ops_test(url='http://iana.org/domains/*')
org,iana)/domains/arpa 20140126201248 http://www.iana.org/domains/arpa text/html 200 QOFZZRN6JIKAL2JRL6ZC2VVG42SPKGHT - - 2939 759039 iana.warc.gz org,iana)/domains/arpa 20140126201248 http://www.iana.org/domains/arpa text/html 200 QOFZZRN6JIKAL2JRL6ZC2VVG42SPKGHT - - 2939 759039 iana.warc.gz
@ -46,29 +47,30 @@ org,iana)/domains/root/servers 20140126201227 http://www.iana.org/domains/root/s
# first page # first page
>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', showPagedIndex=True, pageSize=4, page=0) >>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', showPagedIndex=True, pageSize=4, page=0)
com,example)/ 20140127171200 zipnum 0 276 1 com,example)/ 20140127171200 zipnum 0 275 1
org,iana)/ 20140127171238 zipnum 276 328 2 org,iana)/ 20140127171238 zipnum 275 328 2
org,iana)/_css/2013.1/fonts/inconsolata.otf 20140126201055 zipnum 604 312 3 org,iana)/_css/2013.1/fonts/inconsolata.otf 20140126201055 zipnum 603 312 3
org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200718 zipnum 916 235 4 org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200718 zipnum 915 235 4
# first page -- simplified query # first page -- simplified query
>>> zip_ops_test(url='*.iana.org/path_part_ignored/', showPagedIndex=True, pageSize=4) >>> zip_ops_test(url='*.iana.org/path_part_ignored/', showPagedIndex=True, pageSize=4)
com,example)/ 20140127171200 zipnum 0 276 1 com,example)/ 20140127171200 zipnum 0 275 1
org,iana)/ 20140127171238 zipnum 276 328 2 org,iana)/ 20140127171238 zipnum 275 328 2
org,iana)/_css/2013.1/fonts/inconsolata.otf 20140126201055 zipnum 604 312 3 org,iana)/_css/2013.1/fonts/inconsolata.otf 20140126201055 zipnum 603 312 3
org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200718 zipnum 916 235 4 org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200718 zipnum 915 235 4
# next page + json # next page + json
>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', output='json', showPagedIndex=True, pageSize=4, page=1) >>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', output='json', showPagedIndex=True, pageSize=4, page=1)
{"urlkey": "org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200912", "part": "zipnum", "offset": 1151, "length": 235, "lineno": 5} {"urlkey": "org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200912", "part": "zipnum", "offset": 1150, "length": 235, "lineno": 5}
{"urlkey": "org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126201240", "part": "zipnum", "offset": 1386, "length": 306, "lineno": 6} {"urlkey": "org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126201240", "part": "zipnum", "offset": 1385, "length": 307, "lineno": 6}
{"urlkey": "org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200654", "part": "zipnum", "offset": 1692, "length": 235, "lineno": 7} {"urlkey": "org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200654", "part": "zipnum", "offset": 1692, "length": 235, "lineno": 7}
{"urlkey": "org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200816", "part": "zipnum", "offset": 1927, "length": 231, "lineno": 8} {"urlkey": "org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200816", "part": "zipnum", "offset": 1927, "length": 231, "lineno": 8}
# last page # last page
>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', showPagedIndex=True, pageSize=4, page=9) >>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', showPagedIndex=True, pageSize=4, page=9)
org,iana)/domains/root/servers 20140126201227 zipnum 9237 386 37 org,iana)/domains/root/servers 20140126201227 zipnum 9245 386 37
org,iana)/time-zones 20140126200737 zipnum 9623 145 38 org,iana)/time-zones 20140126200737 zipnum 9631 166 38
# last page cdx # last page cdx
>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', pageSize=4, page=9) >>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', pageSize=4, page=9)
@ -78,7 +80,8 @@ org,iana)/performance/ietf-draft-status 20140126200815 http://www.iana.org/perfo
org,iana)/performance/ietf-statistics 20140126200804 http://www.iana.org/performance/ietf-statistics text/html 200 XOFML5WNBQMTSULLIIPLSP6U5MX33HN6 - - 3712 582987 iana.warc.gz org,iana)/performance/ietf-statistics 20140126200804 http://www.iana.org/performance/ietf-statistics text/html 200 XOFML5WNBQMTSULLIIPLSP6U5MX33HN6 - - 3712 582987 iana.warc.gz
org,iana)/protocols 20140126200715 http://www.iana.org/protocols text/html 200 IRUJZEUAXOUUG224ZMI4VWTUPJX6XJTT - - 63663 496277 iana.warc.gz org,iana)/protocols 20140126200715 http://www.iana.org/protocols text/html 200 IRUJZEUAXOUUG224ZMI4VWTUPJX6XJTT - - 63663 496277 iana.warc.gz
org,iana)/time-zones 20140126200737 http://www.iana.org/time-zones text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz org,iana)/time-zones 20140126200737 http://www.iana.org/time-zones text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones/x 20140126200737 http://www.iana.org/time-zones/X text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones/y 20140126200737 http://www.iana.org/time-zones/Y text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
# last page reverse -- not yet supported # last page reverse -- not yet supported
#>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', reverse=True, showPagedIndex=True, pageSize=4, page=9) #>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', reverse=True, showPagedIndex=True, pageSize=4, page=9)
@ -88,6 +91,8 @@ org,iana)/time-zones 20140126200737 http://www.iana.org/time-zones text/html 200
# last page reverse CDX # last page reverse CDX
>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', reverse=True, pageSize=4, page=9) >>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', reverse=True, pageSize=4, page=9)
org,iana)/time-zones/y 20140126200737 http://www.iana.org/time-zones/Y text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones/x 20140126200737 http://www.iana.org/time-zones/X text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones 20140126200737 http://www.iana.org/time-zones text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz org,iana)/time-zones 20140126200737 http://www.iana.org/time-zones text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/protocols 20140126200715 http://www.iana.org/protocols text/html 200 IRUJZEUAXOUUG224ZMI4VWTUPJX6XJTT - - 63663 496277 iana.warc.gz org,iana)/protocols 20140126200715 http://www.iana.org/protocols text/html 200 IRUJZEUAXOUUG224ZMI4VWTUPJX6XJTT - - 63663 496277 iana.warc.gz
org,iana)/performance/ietf-statistics 20140126200804 http://www.iana.org/performance/ietf-statistics text/html 200 XOFML5WNBQMTSULLIIPLSP6U5MX33HN6 - - 3712 582987 iana.warc.gz org,iana)/performance/ietf-statistics 20140126200804 http://www.iana.org/performance/ietf-statistics text/html 200 XOFML5WNBQMTSULLIIPLSP6U5MX33HN6 - - 3712 582987 iana.warc.gz
@ -95,6 +100,20 @@ org,iana)/performance/ietf-draft-status 20140126200815 http://www.iana.org/perfo
org,iana)/numbers 20140126200651 http://www.iana.org/numbers text/html 200 HWT5UZKURYLW5QNWVZCWFCANGEMU7XWK - - 3498 321385 iana.warc.gz org,iana)/numbers 20140126200651 http://www.iana.org/numbers text/html 200 HWT5UZKURYLW5QNWVZCWFCANGEMU7XWK - - 3498 321385 iana.warc.gz
org,iana)/domains/root/servers 20140126201227 http://www.iana.org/domains/root/servers text/html 200 AFW34N3S4NK2RJ6QWMVPB5E2AIUETAHU - - 3137 733840 iana.warc.gz org,iana)/domains/root/servers 20140126201227 http://www.iana.org/domains/root/servers text/html 200 AFW34N3S4NK2RJ6QWMVPB5E2AIUETAHU - - 3137 733840 iana.warc.gz
# last url prefix
>>> zip_ops_test(url='http://iana.org/time-zones*')
org,iana)/time-zones 20140126200737 http://www.iana.org/time-zones text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones/x 20140126200737 http://www.iana.org/time-zones/X text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones/y 20140126200737 http://www.iana.org/time-zones/Y text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
# last url prefix w/ slash
>>> zip_ops_test(url='http://iana.org/time-zones/*')
org,iana)/time-zones/x 20140126200737 http://www.iana.org/time-zones/X text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
org,iana)/time-zones/y 20140126200737 http://www.iana.org/time-zones/Y text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
# last url exact
>>> zip_ops_test(url='http://iana.org/time-zones/Y')
org,iana)/time-zones/y 20140126200737 http://www.iana.org/time-zones/Y text/html 200 4Z27MYWOSXY2XDRAJRW7WRMT56LXDD4R - - 2449 569675 iana.warc.gz
# invalid page # invalid page
>>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', showPagedIndex=True, pageSize=4, page=10) >>> zip_ops_test(url='http://iana.org/domains/', matchType='domain', showPagedIndex=True, pageSize=4, page=10)
@ -110,7 +129,16 @@ NotFoundException: No Captures found for: http://aaa.aaa/
Traceback (most recent call last): Traceback (most recent call last):
NotFoundException: No Captures found for: http://aaa.aaa/ (domain query) NotFoundException: No Captures found for: http://aaa.aaa/ (domain query)
# list last index line, as we don't know if there are any captures at end
>>> zip_ops_test(url='http://aaa.zz/', matchType='domain', showPagedIndex=True) >>> zip_ops_test(url='http://aaa.zz/', matchType='domain', showPagedIndex=True)
org,iana)/time-zones 20140126200737 zipnum 9631 166 38
# read cdx to find 0 pages
>>> zip_ops_test(url='http://aaa.zz/', matchType='domain', showNumPages=True)
{"blocks": 0, "pages": 0, "pageSize": 10}
# read cdx to find no captures
>>> zip_ops_test(url='http://aaa.zz/', matchType='domain')
Traceback (most recent call last): Traceback (most recent call last):
NotFoundException: No Captures found for: http://aaa.zz/ (domain query) NotFoundException: No Captures found for: http://aaa.zz/ (domain query)

View File

@ -22,6 +22,7 @@ class ZipBlocks:
self.length = length self.length = length
self.count = count self.count = count
#================================================================= #=================================================================
#TODO: see if these could be combined with warc path resolvers #TODO: see if these could be combined with warc path resolvers
@ -134,8 +135,10 @@ class ZipNumCluster(CDXSource):
def load_cdx(self, query): def load_cdx(self, query):
self.loc_resolver.load_loc() self.loc_resolver.load_loc()
return self._do_load_cdx(self.summary, query)
reader = open(self.summary, 'rb') def _do_load_cdx(self, filename, query):
reader = open(filename, 'rb')
idx_iter = self.compute_page_range(reader, query) idx_iter = self.compute_page_range(reader, query)
@ -165,13 +168,16 @@ class ZipNumCluster(CDXSource):
else: else:
pagesize = int(pagesize) pagesize = int(pagesize)
last_line = None
# Get End # Get End
end_iter = search(reader, query.end_key, prev_size=1) end_iter = search(reader, query.end_key, prev_size=1)
try: try:
end_line = end_iter.next() end_line = end_iter.next()
except StopIteration: except StopIteration:
end_line = read_last_line(reader) last_line = read_last_line(reader)
end_line = last_line
# Get Start # Get Start
first_iter = iter_range(reader, first_iter = iter_range(reader,
@ -182,34 +188,40 @@ class ZipNumCluster(CDXSource):
try: try:
first_line = first_iter.next() first_line = first_iter.next()
except StopIteration: except StopIteration:
reader.close() if end_line == last_line and query.key >= last_line:
if query.page_count: first_line = last_line
yield self._page_info(0, pagesize, 0)
return
else: else:
raise reader.close()
if query.page_count:
yield self._page_info(0, pagesize, 0)
return
else:
raise
first = IDXObject(first_line) first = IDXObject(first_line)
end = IDXObject(end_line) end = IDXObject(end_line)
diff = end['lineno'] - first['lineno']
total_pages = diff / pagesize + 1 try:
blocks = end['lineno'] - first['lineno']
total_pages = blocks / pagesize + 1
except:
blocks = -1
total_pages = 1
if query.page_count: if query.page_count:
blocks = diff + 1
# same line, so actually need to look at cdx # same line, so actually need to look at cdx
# to determine if it exists # to determine if it exists
if total_pages == 1: if blocks == 0:
try: try:
block_cdx_iter = self.idx_to_cdx([first_line], query) block_cdx_iter = self.idx_to_cdx([first_line], query)
block = block_cdx_iter.next() block = block_cdx_iter.next()
cdx = block.next() cdx = block.next()
except StopIteration: except StopIteration:
total_pages = 0 total_pages = 0
blocks = 0 blocks = -1
yield self._page_info(total_pages, pagesize, blocks) yield self._page_info(total_pages, pagesize, blocks + 1)
reader.close() reader.close()
return return
@ -220,7 +232,9 @@ class ZipNumCluster(CDXSource):
raise CDXException(msg.format(curr_page, total_pages - 1)) raise CDXException(msg.format(curr_page, total_pages - 1))
startline = curr_page * pagesize startline = curr_page * pagesize
endline = min(startline + pagesize - 1, diff) endline = startline + pagesize - 1
if blocks >= 0:
endline = min(endline, blocks)
if curr_page == 0: if curr_page == 0:
yield first_line yield first_line

View File

@ -1,9 +1,9 @@
com,example)/ 20140127171200 zipnum 0 276 1 com,example)/ 20140127171200 zipnum 0 275 1
org,iana)/ 20140127171238 zipnum 276 328 2 org,iana)/ 20140127171238 zipnum 275 328 2
org,iana)/_css/2013.1/fonts/inconsolata.otf 20140126201055 zipnum 604 312 3 org,iana)/_css/2013.1/fonts/inconsolata.otf 20140126201055 zipnum 603 312 3
org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200718 zipnum 916 235 4 org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200718 zipnum 915 235 4
org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200912 zipnum 1151 235 5 org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126200912 zipnum 1150 235 5
org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126201240 zipnum 1386 306 6 org,iana)/_css/2013.1/fonts/opensans-bold.ttf 20140126201240 zipnum 1385 307 6
org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200654 zipnum 1692 235 7 org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200654 zipnum 1692 235 7
org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200816 zipnum 1927 231 8 org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126200816 zipnum 1927 231 8
org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126201128 zipnum 2158 236 9 org,iana)/_css/2013.1/fonts/opensans-regular.ttf 20140126201128 zipnum 2158 236 9
@ -12,27 +12,27 @@ org,iana)/_css/2013.1/fonts/opensans-semibold.ttf 20140126200805 zipnum 2706 234
org,iana)/_css/2013.1/fonts/opensans-semibold.ttf 20140126201055 zipnum 2940 235 12 org,iana)/_css/2013.1/fonts/opensans-semibold.ttf 20140126201055 zipnum 2940 235 12
org,iana)/_css/2013.1/fonts/opensans-semibold.ttf 20140126201308 zipnum 3175 289 13 org,iana)/_css/2013.1/fonts/opensans-semibold.ttf 20140126201308 zipnum 3175 289 13
org,iana)/_css/2013.1/print.css 20140126200737 zipnum 3464 208 14 org,iana)/_css/2013.1/print.css 20140126200737 zipnum 3464 208 14
org,iana)/_css/2013.1/print.css 20140126200929 zipnum 3672 207 15 org,iana)/_css/2013.1/print.css 20140126200929 zipnum 3672 209 15
org,iana)/_css/2013.1/print.css 20140126201248 zipnum 3879 276 16 org,iana)/_css/2013.1/print.css 20140126201248 zipnum 3881 276 16
org,iana)/_css/2013.1/screen.css 20140126200706 zipnum 4155 210 17 org,iana)/_css/2013.1/screen.css 20140126200706 zipnum 4157 210 17
org,iana)/_css/2013.1/screen.css 20140126200825 zipnum 4365 211 18 org,iana)/_css/2013.1/screen.css 20140126200825 zipnum 4367 211 18
org,iana)/_css/2013.1/screen.css 20140126201227 zipnum 4576 216 19 org,iana)/_css/2013.1/screen.css 20140126201227 zipnum 4578 216 19
org,iana)/_img/2013.1/iana-logo-header.svg 20140126200654 zipnum 4792 236 20 org,iana)/_img/2013.1/iana-logo-header.svg 20140126200654 zipnum 4794 236 20
org,iana)/_img/2013.1/iana-logo-header.svg 20140126200816 zipnum 5028 219 21 org,iana)/_img/2013.1/iana-logo-header.svg 20140126200816 zipnum 5030 219 21
org,iana)/_img/2013.1/iana-logo-header.svg 20140126201128 zipnum 5247 221 22 org,iana)/_img/2013.1/iana-logo-header.svg 20140126201128 zipnum 5249 221 22
org,iana)/_img/2013.1/iana-logo-homepage.png 20140126200625 zipnum 5468 299 23 org,iana)/_img/2013.1/iana-logo-homepage.png 20140126200625 zipnum 5470 299 23
org,iana)/_img/2013.1/icann-logo.svg 20140126200719 zipnum 5767 210 24 org,iana)/_img/2013.1/icann-logo.svg 20140126200719 zipnum 5769 210 24
org,iana)/_img/2013.1/icann-logo.svg 20140126200912 zipnum 5977 212 25 org,iana)/_img/2013.1/icann-logo.svg 20140126200912 zipnum 5979 212 25
org,iana)/_img/2013.1/icann-logo.svg 20140126201240 zipnum 6189 281 26 org,iana)/_img/2013.1/icann-logo.svg 20140126201240 zipnum 6191 281 26
org,iana)/_img/bookmark_icon.ico 20140126200631 zipnum 6470 298 27 org,iana)/_img/bookmark_icon.ico 20140126200631 zipnum 6472 300 27
org,iana)/_js/2013.1/iana.js 20140126200716 zipnum 6768 213 28 org,iana)/_js/2013.1/iana.js 20140126200716 zipnum 6772 213 28
org,iana)/_js/2013.1/iana.js 20140126200912 zipnum 6981 216 29 org,iana)/_js/2013.1/iana.js 20140126200912 zipnum 6985 216 29
org,iana)/_js/2013.1/iana.js 20140126201239 zipnum 7197 270 30 org,iana)/_js/2013.1/iana.js 20140126201239 zipnum 7201 270 30
org,iana)/_js/2013.1/jquery.js 20140126200653 zipnum 7467 215 31 org,iana)/_js/2013.1/jquery.js 20140126200653 zipnum 7471 215 31
org,iana)/_js/2013.1/jquery.js 20140126200816 zipnum 7682 209 32 org,iana)/_js/2013.1/jquery.js 20140126200816 zipnum 7686 210 32
org,iana)/_js/2013.1/jquery.js 20140126201127 zipnum 7891 210 33 org,iana)/_js/2013.1/jquery.js 20140126201127 zipnum 7896 211 33
org,iana)/_js/2013.1/jquery.js 20140127171239 zipnum 8101 410 34 org,iana)/_js/2013.1/jquery.js 20140127171239 zipnum 8107 410 34
org,iana)/dnssec 20140126201307 zipnum 8511 373 35 org,iana)/dnssec 20140126201307 zipnum 8517 373 35
org,iana)/domains/int 20140126201239 zipnum 8884 353 36 org,iana)/domains/int 20140126201239 zipnum 8890 355 36
org,iana)/domains/root/servers 20140126201227 zipnum 9237 386 37 org,iana)/domains/root/servers 20140126201227 zipnum 9245 386 37
org,iana)/time-zones 20140126200737 zipnum 9623 145 38 org,iana)/time-zones 20140126200737 zipnum 9631 166 38