├── dcbo-features.pl ├── dcbo-vol1-ids.txt ├── README ├── trial-id-list.py ├── dcbo-vol1-features.txt ├── google_earth.pde ├── count-offences.py ├── get-date-range.py ├── h-rev-catalogue.pl ├── dcbo-ids.pl ├── MIT-LICENSE.txt ├── exploratory-bibliography-02.py ├── count-offence-instances.py ├── dcbo-people.pl ├── dcbo-minmax-dists.pl ├── exploratory-bibliography-03.py ├── ncd-dcb.py ├── split-into-trials.py ├── tenfold-crossvalidation-sample.py ├── google-earth.py ├── ncd-probe.py ├── ids-chg.csv ├── offence-index.py ├── exploratory-bibliography-01.py ├── dcbo-entry-txt.pl ├── dcbo-distances.pl ├── ncd-dcb-graph.py ├── offence-category.py ├── sip-map.pl ├── exploratory-bibliography-06.py ├── clean-copy-trials.py ├── test-false-positives.py ├── phidgets-quad-servo-demo.py ├── ngd-calculator.pl ├── dcbo-ids-cloud.pl ├── h-reviews.pl ├── ncd-dcb-graph.txt ├── cross-validate-tfidf-learner.py ├── cross-validate-learner.py ├── dcbo-ids-chg.pl ├── kiosk.py ├── compute-doc-freqs.py ├── phidgets-interface-kit-demo.py ├── compute-tfidf.py ├── bayesiandb.py └── dcbo-vol1-featurespace.csv /dcbo-features.pl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamjturkel/Digital-History-Hacks--2005-08-/HEAD/dcbo-features.pl -------------------------------------------------------------------------------- /dcbo-vol1-ids.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/williamjturkel/Digital-History-Hacks--2005-08-/HEAD/dcbo-vol1-ids.txt -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This repository contains the source code for my blog Digital History Hacks (2005-08) 2 | 3 | http://digitalhistoryhacks.blogspot.com 4 | -------------------------------------------------------------------------------- /trial-id-list.py: -------------------------------------------------------------------------------- 1 | # trial-id-list.py 2 | # old bailey 3 | # 4 | # create a list of trial ids 5 | 6 | import os 7 | 8 | # given a directory string, return a list of file names 9 | def getFileNames(dirstr): 10 | dircommand = 'dir ' + dirstr + ' /B' 11 | filelist = os.popen(dircommand).readlines() 12 | filelist = [x.rstrip() for x in filelist] 13 | return filelist 14 | 15 | # get a list of trial files 16 | indirname = 'Mined_1830s' 17 | triallist = getFileNames(indirname) 18 | 19 | # write it out 20 | resultsfile = open('trial-ids-1830s.txt', 'w') 21 | for tr in triallist: 22 | resultstr = tr + '\n' 23 | resultsfile.write(resultstr) 24 | 25 | resultsfile.close() 26 | 27 | -------------------------------------------------------------------------------- /dcbo-vol1-features.txt: -------------------------------------------------------------------------------- 1 | FRANCE 2 | QUEBEC 3 | FATHER 4 | FRENCH 5 | CANADA 6 | GOVERNOR 7 | IROQUOI 8 | CHAMPLAIN 9 | INDIAN 10 | ENGLISH 11 | COLONY 12 | MONTREAL 13 | COUNTRY 14 | TRADE 15 | VOYAGE 16 | FORT 17 | PARI 18 | BAY 19 | EXPEDITION 20 | RIVER 21 | KING 22 | ACADIA 23 | ENGLAND 24 | LAND 25 | COMPANY 26 | FRONTENAC 27 | ISLAND 28 | NEWFOUNDLAND 29 | SHIP 30 | LONDON 31 | JESUIT 32 | SAILED 33 | TROIS-RIVIERE 34 | HURON 35 | MISSION 36 | TALON 37 | COURT 38 | BISHOP 39 | PORT-ROYAL 40 | COUNCIL 41 | COMPAGNIE 42 | ROYAL 43 | AMERICA 44 | SETTLER 45 | HUDSON 46 | INTENDANT 47 | SETTLEMENT 48 | PEACE 49 | POST 50 | CHIEF 51 | WEST 52 | COAST 53 | CAPTAIN 54 | LAWRENCE 55 | SUPERIOR 56 | MISSIONARY 57 | CHURCH 58 | SALLE 59 | PRIEST 60 | LIVRE 61 | CONSEIL 62 | LAKE 63 | CABOT 64 | CARTIER 65 | HBC 66 | -------------------------------------------------------------------------------- /google_earth.pde: -------------------------------------------------------------------------------- 1 | /* google_earth 2 | * tangible interface 3 | * 4 | * 2 NO switches connected to microcontroller digital inputs 2, 3 5 | * with 10K pull-down resistors 6 | */ 7 | 8 | int switchPin2 = 2; 9 | int switchPin3 = 3; 10 | int val2a; 11 | int val2b; 12 | int val3a; 13 | int val3b; 14 | int state; 15 | 16 | void setup() 17 | { 18 | Serial.begin(9600); 19 | pinMode(switchPin2, INPUT); 20 | pinMode(switchPin3, INPUT); 21 | } 22 | 23 | void loop() 24 | { 25 | val2a = digitalRead(switchPin2); 26 | val3a = digitalRead(switchPin3); 27 | delay(10); 28 | val2b = digitalRead(switchPin2); 29 | val3b = digitalRead(switchPin3); 30 | if (val2a == val2b && val2a == 1) { 31 | state = 2; 32 | delay(10); 33 | } 34 | if (val3a == val3b && val3a == 1) { 35 | state = 3; 36 | delay(10); 37 | } 38 | Serial.println(state); 39 | } 40 | -------------------------------------------------------------------------------- /count-offences.py: -------------------------------------------------------------------------------- 1 | # count-offences.py 2 | # old bailey 3 | # 4 | # using the offence files, quickly count how many 5 | # offences of each type 6 | 7 | import os 8 | 9 | # given a directory string, return a list of file names 10 | def getFileNames(dirstr): 11 | dircommand = 'dir ' + dirstr + ' /B' 12 | filelist = os.popen(dircommand).readlines() 13 | filelist = [x.rstrip() for x in filelist] 14 | return filelist 15 | 16 | # open an output file 17 | resultsfile = open('offence-counts-1830s.txt', 'w') 18 | 19 | # get a list of offence files to process 20 | indirname = 'Offences_1830s' 21 | ofilelist = getFileNames(indirname) 22 | 23 | # process each file 24 | for ofile in ofilelist: 25 | 26 | # get a list of trials for each offence 27 | f = open(indirname+'\\'+ofile, 'r') 28 | triallist = f.readlines() 29 | f.close() 30 | 31 | # write results 32 | resultstr = ofile + '|' + str(len(triallist)) + '\n' 33 | resultsfile.write(resultstr) 34 | 35 | resultsfile.close() 36 | 37 | -------------------------------------------------------------------------------- /get-date-range.py: -------------------------------------------------------------------------------- 1 | # get-date-range.py 2 | # old bailey 3 | # 4 | # given a directory of trial files, return 5 | # an ordered list of trial dates 6 | 7 | import os 8 | import re 9 | 10 | # given a directory string, return a list of file names 11 | def getFileNames(dirstr): 12 | dircommand = 'dir ' + dirstr + ' /B' 13 | filelist = os.popen(dircommand).readlines() 14 | filelist = [x.rstrip() for x in filelist] 15 | return filelist 16 | 17 | # get a list of trial files to process 18 | indirname = 'Mined_1830s' 19 | triallist = getFileNames(indirname) 20 | 21 | # strip date out of pre- and post-fixed material 22 | datedict = {} 23 | datepattern = re.compile(r'\d{8}', re.UNICODE) 24 | for tr in triallist: 25 | matchdate = datepattern.search(tr) 26 | datedict[matchdate.group()] = '1' 27 | 28 | # output file consisting of list of dates 29 | keys = datedict.keys() 30 | keys.sort() 31 | outfilename = 'dates-1830s.txt' 32 | f = open(outfilename, 'w') 33 | for k in keys: f.write(str(k)+'\n') 34 | f.close() 35 | 36 | -------------------------------------------------------------------------------- /h-rev-catalogue.pl: -------------------------------------------------------------------------------- 1 | # h-rev-catalogue.pl 2 | # 13 mar 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Submit each ISBN in a list to library catalogue 8 | # and scrape results page to figure out if the book 9 | # is in library. 10 | 11 | use WWW::Mechanize; 12 | my $mech = WWW::Mechanize->new( autocheck => 1 ); 13 | 14 | my $hnet = 'Jhistory'; 15 | my $in_file = "$hnet-isbn.txt"; 16 | my $count = 0; my $have = 0; my $not = 0; 17 | 18 | open(INPUT, "<$in_file"); 19 | while($isbn = ) { 20 | # sleep 1; 21 | $count += 1; 22 | $mech->get( "http://alpha.lib.uwo.ca/" ); 23 | $mech->success or die "Can't get the search page for $isbn"; 24 | $mech->form_number( '1' ); 25 | $mech->field( 'searchtype', 'i' ); 26 | $mech->field( 'searcharg', $isbn ); 27 | $mech->click_button( name => 'search' ); 28 | if ( $mech->content =~ m|class=\"bibInfoLabel\"\>Author| ){ 29 | $have += 1; 30 | } else { 31 | $not += 1; 32 | } 33 | } 34 | print "$hnet, $count, $have, $not\n"; 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /dcbo-ids.pl: -------------------------------------------------------------------------------- 1 | # dcbo-ids.pl 2 | # 28 jan 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Given a list of people with DCB entries and their ID numbers, 8 | # creates text file with one ID number and name on each line 9 | # written to IDs directory. 10 | # 11 | # To prepare the starting page, go to the DCB and get a list of 12 | # all of the people of interest on one page; save it in Queries 13 | # directory. 14 | 15 | # Load necessary modules 16 | use WWW::Mechanize; 17 | 18 | my $infile = 'Queries\dcbo-vol1.html'; 19 | my $outfile ='IDs\dcbo-vol1-ids.txt'; 20 | 21 | # Open output file 22 | open(OUTPUT, ">$outfile"); 23 | 24 | # Starting page 25 | my $mech = WWW::Mechanize->new( autocheck => 1 ); 26 | $mech->get( "file:$infile" ); 27 | 28 | # Get all of the links on the page 29 | my @links = $mech->find_all_links( ); 30 | 31 | # Strip out IDs and Names 32 | for my $link ( @links ) { 33 | my $url = $link->url_abs; 34 | my $text = $link->text; 35 | 36 | if($url =~ m/ShowBio\.asp\?BioId=(.*)\&query\=/) { 37 | print OUTPUT "$1\t$text\n"; 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2005-2008 William J Turkel, http://williamjturkel.net 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /exploratory-bibliography-02.py: -------------------------------------------------------------------------------- 1 | # exploratory-bibliography-02.py 2 | # 3 | # wjt 4 | # 23-25 jan 2007 5 | # 6 | # http://digitalhistoryhacks.blogspot.com 7 | 8 | import pickle 9 | 10 | from_to = pickle.load(open("tempstorage")) 11 | 12 | # get the list of original books 13 | original_books = list(set([ row[0] for row in from_to ])) 14 | 15 | # get the list of recommended books 16 | recommended_books = [ row[1] for row in from_to ] 17 | 18 | # remove any recommended books that are already in our biblio 19 | new_recommended_books = [r for r in recommended_books if r not in original_books] 20 | 21 | # count number of times each book is recommended and sort by inverse frequency 22 | recommendation_freq = [new_recommended_books.count(n) for n in new_recommended_books] 23 | recommendation_dictionary = dict(zip(new_recommended_books,recommendation_freq)) 24 | recommendations = [(recommendation_dictionary[key], key) for key in recommendation_dictionary] 25 | 26 | # sort so most frequently recommended first 27 | recommendations.sort() 28 | recommendations.reverse() 29 | 30 | # output suggestions 31 | for r in recommendations: 32 | print r 33 | 34 | -------------------------------------------------------------------------------- /count-offence-instances.py: -------------------------------------------------------------------------------- 1 | # count-offence-instances.py 2 | # old bailey 3 | # 4 | # given a crossvalidation sample, count the 5 | # number of offence instances in each partition 6 | 7 | import os 8 | 9 | # given a directory string, return a list of file names 10 | def getFileNames(dirstr): 11 | dircommand = 'dir ' + dirstr + ' /B' 12 | filelist = os.popen(dircommand).readlines() 13 | filelist = [x.rstrip() for x in filelist] 14 | return filelist 15 | 16 | # get list of matching trials 17 | offencedir = 'Offences_1830s' 18 | offencefile = 'theft-simplelarceny.txt' 19 | f = open(offencedir + '\\' + offencefile, 'r') 20 | triallist = f.readlines() 21 | f.close() 22 | 23 | # get a list of sample files to process 24 | indirname = 'Samples_1830s' 25 | samplelist = getFileNames(indirname) 26 | 27 | # count instances 28 | instancetotal = 0 29 | for s in samplelist: 30 | instances = 0 31 | f = open(indirname + '\\' + s, 'r') 32 | samptriallist = f.readlines() 33 | f.close() 34 | for tr in samptriallist: 35 | if tr in triallist: instances += 1 36 | print "%s: %d" % (s, instances) 37 | instancetotal += instances 38 | 39 | # sanity check 40 | print "Number of offences: %d" % len(triallist) 41 | print "Sum of offences: %d" % instancetotal 42 | 43 | -------------------------------------------------------------------------------- /dcbo-people.pl: -------------------------------------------------------------------------------- 1 | # dcbo-people.pl 2 | # 28 jan 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Given a range of ID numbers, checks each to see if it 8 | # has been downloaded yet, and if not, goes to DCB and 9 | # gets printable version of biography, which is written 10 | # to "ID.html" in Biographies subdirectory. 11 | 12 | # Load necessary modules 13 | use WWW::Mechanize; 14 | 15 | my $mech = WWW::Mechanize->new( autocheck => 1 ); 16 | 17 | # Input file 18 | my $infile = 'IDs\dcbo-vol1-ids.txt'; 19 | open(INPUT, "<$infile"); 20 | 21 | # Loop through each ID in the input file 22 | while() { 23 | chomp; 24 | @fields = split /\t/; 25 | $id = $fields[0]; 26 | 27 | # Make sure biography hasn't already been downloaded 28 | if (-e "Biographies\\$id.html") { 29 | print "$id already downloaded\n"; 30 | } else { 31 | # Open output file 32 | open(OUTPUT, ">Biographies\\$id.html"); 33 | # Get biography 34 | $mech->get( "http://www.biographi.ca/EN/ShowBioPrintable.asp?BioId=$id" ); 35 | # Write biography to output file 36 | print OUTPUT $mech->content; 37 | # Be considerate of their server 38 | sleep 2; 39 | } 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /dcbo-minmax-dists.pl: -------------------------------------------------------------------------------- 1 | # dcbo-minmax-dists.pl 2 | # 8 feb 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Given a file of distances between every 8 | # biography in a multidimensional feature 9 | # space, output files of pairs that are 10 | # unusually close or unusually distant. 11 | 12 | my ($id, $dist, @fields, %distances); 13 | 14 | # Open the distance file 15 | my $distances = 'dcbo-vol1-distances.txt'; 16 | open(INPUT, "<$distances") || die "Couldn't open distance file."; 17 | 18 | # Read contents into hash table 19 | while() { 20 | chomp; 21 | @fields = split /,/; 22 | $id = shift @fields; 23 | # $id =~ s/\"//g; 24 | $dist = shift @fields; 25 | $distances{$id} = $dist; 26 | } 27 | 28 | my $outminfile = 'dcbo-vol1-min-dists.txt'; 29 | my $outmaxfile = 'dcbo-vol1-max-dists.txt'; 30 | open(OUTMIN, ">$outminfile"); 31 | open(OUTMAX, ">$outmaxfile"); 32 | my @sortidpairs = sort keys (%distances); 33 | foreach $k (@sortidpairs) { 34 | if ($distances{$k} >= 0.8) { 35 | print OUTMAX "$k," . $distances{"$k"} . "\n"; 36 | } elsif (($distances{$k} <= 0.05) && ($distances{$k} > 0)) { 37 | print OUTMIN "$k," . $distances{"$k"} . "\n"; 38 | } 39 | } 40 | 41 | close(INPUT); 42 | close(OUTMIN); 43 | close(OUTMAX); 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /exploratory-bibliography-03.py: -------------------------------------------------------------------------------- 1 | # exploratory-bibliography-03.py 2 | # 3 | # wjt 4 | # 27 jan 2007 5 | # 6 | # http://digitalhistoryhacks.blogspot.com 7 | 8 | import pickle 9 | 10 | from_to = pickle.load(open("tempstorage")) 11 | 12 | # get the list of original books 13 | original_books = list(set([ row[0] for row in from_to ])) 14 | 15 | graph_file = open('expbib-03.txt', 'w') 16 | 17 | graph_file.write('digraph G {\n') 18 | graph_file.write('\tgraph [overlap=scale];\n') 19 | graph_file.write('\tnode [color=steelblue3];\n') 20 | for o in original_books: 21 | graph_file.write('\tA' + o + ' [color=lightblue2, style=filled];\n') 22 | for o in range(0, len(original_books)): 23 | for p in range((o+1), len(original_books)): 24 | if ((original_books[o], original_books[p]) in from_to) & ((original_books[p], original_books[o]) in from_to): 25 | graph_file.write('\tA' + original_books[o] + ' -> A' + original_books[p] + ' [arrowhead=both];\n') 26 | elif (original_books[o], original_books[p]) in from_to: 27 | graph_file.write('\tA' + original_books[o] + ' -> A' + original_books[p] + ';\n') 28 | elif (original_books[p], original_books[o]) in from_to: 29 | graph_file.write('\tA' + original_books[p] + ' -> A' + original_books[o] + ';\n') 30 | 31 | graph_file.write('}') 32 | 33 | graph_file.close() -------------------------------------------------------------------------------- /ncd-dcb.py: -------------------------------------------------------------------------------- 1 | # ncd-dcb.py 2 | # 3 | # Use Cilibrasi and Vitanyi's Normalized Compression Distance 4 | # to cluster a randomly chosen sample of entries from the 5 | # Dictionary of Canadian Biography volume 1 6 | # 7 | # wjt 8 | # http://digitalhistoryhacks.blogspot.com 9 | # 10 | # 26 jun 2007 11 | 12 | import bz2 13 | import random 14 | 15 | pathstring = 'C:\Documents and Settings\HP_Administrator\My Documents\digital-history-datasets\DCB-txt\DCB-v01-txt' 16 | 17 | # Function to calculate the NCD of two files 18 | 19 | def ncd(filex, filey): 20 | xbytes = open(filex, 'r').read() 21 | ybytes = open(filey, 'r').read() 22 | xybytes = xbytes + ybytes 23 | cx = bz2.compress(xbytes) 24 | cy = bz2.compress(ybytes) 25 | cxy = bz2.compress(xybytes) 26 | if len(cy) > len(cx): 27 | n = (len(cxy) - len(cx)) / float(len(cy)) 28 | else: 29 | n = (len(cxy) - len(cy)) / float(len(cx)) 30 | return n 31 | 32 | # Randomly select 100 biographies from DCB vol 1 (nos. 34123-34714) 33 | 34 | volume1 = range(34123, 34714) 35 | selection = random.sample(volume1, 100) 36 | 37 | # For each unique pair, calculate NCD 38 | 39 | outfile = open('ncd-dcb.txt', 'w') 40 | for i in range(0, len(selection)-1): 41 | print i 42 | for j in selection[i+1:]: 43 | fx = pathstring + '\\' + str(selection[i]) + '.txt' 44 | fy = pathstring + '\\' + str(j) + '.txt' 45 | outfile.write(str(selection[i]) + ", " + str(j) + ", " + str(ncd(fx, fy)) + "\n") 46 | 47 | outfile.close() 48 | -------------------------------------------------------------------------------- /split-into-trials.py: -------------------------------------------------------------------------------- 1 | # split-into-trials.py 2 | # old bailey 3 | # 4 | # split each of the tagged XML files into separate trial files 5 | 6 | import os, sys, re 7 | from BeautifulSoup import BeautifulStoneSoup 8 | 9 | # given a directory string, return a list of file names 10 | def getFileNames(dirstr): 11 | dircommand = 'dir ' + dirstr + ' /B' 12 | filelist = os.popen(dircommand).readlines() 13 | filelist = [x.rstrip() for x in filelist] 14 | return filelist 15 | 16 | # get a list of XML files to process 17 | indirname = 'Tagged_final\Tagged_1830s_Files' 18 | filelist = getFileNames(indirname) 19 | 20 | # if output directory doesn't exist, create it 21 | outdirname = 'Mined_1830s' 22 | if os.path.exists(outdirname) == 0: os.mkdir(outdirname) 23 | 24 | # extract each trial from each XML file and save it separately 25 | for fn in filelist: 26 | 27 | # provide feedback for user 28 | print 'Processing ' + fn 29 | sys.stdout.flush() 30 | 31 | # read XML file into string and parse it 32 | f = open(indirname+'\\'+fn, 'r') 33 | fnxml = f.read() 34 | f.close() 35 | fnsoup = BeautifulStoneSoup(fnxml) 36 | triallist = fnsoup.findAll('trial') 37 | 38 | # extract trial id and use as filename for each trial 39 | trialpattern = re.compile(r'id=\"(t-\d+-\d+)', re.UNICODE) 40 | for tr in triallist: 41 | matchid = trialpattern.search(str(tr)) 42 | outfilename = outdirname + '\\' + matchid.group(1) + '.txt' 43 | f = open(outfilename, 'w') 44 | f.write(str(tr)) 45 | f.close() 46 | 47 | -------------------------------------------------------------------------------- /tenfold-crossvalidation-sample.py: -------------------------------------------------------------------------------- 1 | # tenfold-crossvalidation-sample.py 2 | # old bailey 3 | # 4 | # given a list of trials, shuffle and divide 5 | # into ten samples of approximately equal size 6 | 7 | import os, random 8 | 9 | # if output directory doesn't exist, create it 10 | outdirname = 'Samples_1830s' 11 | if os.path.exists(outdirname) == 0: os.mkdir(outdirname) 12 | 13 | # get a list of trials 14 | f = open('trial-ids-1830s.txt', 'r') 15 | triallist = f.readlines() 16 | f.close() 17 | 18 | # shuffle it, changing list in place 19 | random.shuffle(triallist) 20 | 21 | # do floor division to get basic sample size and remainder 22 | numtrials = len(triallist) 23 | samplesize = numtrials // 10 24 | base = samplesize * 10 25 | remainder = numtrials - base 26 | print "Trials: %d; Base sample: %d; Remainder: %d" % (numtrials, samplesize, remainder) 27 | 28 | # get basic samples 29 | sample = {} 30 | for i in range(0,10): 31 | index = i * samplesize 32 | offset = index + samplesize 33 | sample[i] = triallist[index:offset] 34 | 35 | # distribute remainder as equally as possible 36 | tailend = range(base, base+remainder) 37 | i = 0 38 | for t in tailend: 39 | sample[i].append(triallist[t]) 40 | i += 1 41 | 42 | # do sanity check 43 | sanity = 0 44 | for k in sample.keys(): sanity += len(sample[k]) 45 | if sanity != numtrials: 46 | print "Sanity check failed" 47 | quit() 48 | 49 | # write samples to files 50 | for k in sample.keys(): 51 | outfilename = outdirname + '\\sample' + str(k) + '.txt' 52 | f = open(outfilename, 'w') 53 | for tr in sample[k]: f.write(str(tr)) 54 | f.close() 55 | 56 | -------------------------------------------------------------------------------- /google-earth.py: -------------------------------------------------------------------------------- 1 | # google-earth.py 2 | # tangible interface 3 | 4 | import sys 5 | import serial 6 | import time 7 | import win32com.client 8 | 9 | # Set location 1: UWO main gate 10 | def goToUWO(): 11 | lat = 43.009114 12 | lon = -81.261300 13 | alt = 100000 14 | tilt = 30 15 | azi = 0 16 | speed = 0.2 17 | range = 0 18 | altMode = 1 19 | ge.SetCameraParams(lat,lon,alt,altMode,range,tilt,azi,speed) 20 | print "Moving viewpoint to UWO main gate" 21 | 22 | # Set location 2: Uluru (Ayers Rock) 23 | def goToUluru(): 24 | lat = -25.345 25 | lon = 131.036111 26 | alt = 100000 27 | tilt = 30 28 | azi = 180 29 | speed = 0.2 30 | range = 0 31 | altMode = 1 32 | ge.SetCameraParams(lat,lon,alt,altMode,range,tilt,azi,speed) 33 | print "Moving viewpoint to Uluru" 34 | 35 | # initialize serial port 36 | ser = serial.Serial('COM6', 9600, timeout=1) 37 | 38 | # initialize Google Earth 39 | ge = win32com.client.Dispatch("GoogleEarth.ApplicationGE") 40 | while not ge.IsInitialized(): 41 | time.sleep(0.5) 42 | print "Waiting for Google Earth to initialize..." 43 | 44 | # main loop 45 | line = '0' 46 | currentState = '0' 47 | arduinoState = '0' 48 | while 1: 49 | line = ser.readline() 50 | if len(line) > 0: arduinoState = line[0] 51 | if arduinoState != currentState: 52 | if arduinoState == '2': 53 | goToUWO() 54 | currentState = '2' 55 | if arduinoState == '3': 56 | goToUluru() 57 | currentState = '3' 58 | time.sleep(3) 59 | sys.stdout.flush() -------------------------------------------------------------------------------- /ncd-probe.py: -------------------------------------------------------------------------------- 1 | # ncd-probe.py 2 | # 3 | # Test with Radisson (DCB '35174') 4 | # 5 | # wjt 6 | # http://digitalhistoryhacks.blogspot.com 7 | # 8 | # 1 jul 2007 9 | 10 | from yahoo.search.web import WebSearch 11 | import bz2 12 | import random 13 | 14 | # Frobisher 15 | # pathstring = 'C:\Documents and Settings\HP_Administrator\My Documents\digital-history-datasets\DCB-txt\DCB-v01-txt' 16 | # filex = pathstring + '\\' + '34352' + '.txt' 17 | 18 | filex = '35174.txt' 19 | xbytes = open(filex, 'r').read() 20 | cx = bz2.compress(xbytes) 21 | 22 | def ncd_probe(xbytes, cx, ybytes): 23 | # ybytes = open(filey, 'r').read() 24 | xybytes = xbytes + ybytes 25 | cy = bz2.compress(ybytes) 26 | cxy = bz2.compress(xybytes) 27 | n = (len(cxy) - len(cy)) / float(len(cx)) 28 | return n 29 | 30 | def printSortedDict(adict): 31 | keys = adict.keys() 32 | keys.sort() 33 | for k in keys: 34 | print k 35 | print adict[k]['Title'] 36 | print adict[k]['Url'] 37 | print adict[k]['Summary'] 38 | print " " 39 | 40 | app_id = "NCD-Probe-Demo" 41 | srch = WebSearch(app_id, language='en') 42 | srch.query = "Radisson" 43 | srch.results = 50 44 | 45 | dom = srch.get_results() 46 | results = srch.parse_results(dom) 47 | 48 | ranked = {} 49 | for res in results: 50 | # strip out search word from summary 51 | summary = str(res['Summary']) 52 | stripped_summary = summary.replace('Radisson', '') 53 | distance = ncd_probe(xbytes, cx, stripped_summary) 54 | dstr = 'NCD: ' + str(distance) 55 | ranked[dstr] = res 56 | 57 | printSortedDict(ranked) 58 | -------------------------------------------------------------------------------- /ids-chg.csv: -------------------------------------------------------------------------------- 1 | Category,Name,Vol2,Vol4,Vol5,Vol6,Vol7,Vol8,Vol11,Vol12 2 | 35708,Aboriginal people,34,32,17,15,22,18,22,22 3 | 35719,Accountants,0,0,0,0,1,1,0,1 4 | 35674,Agriculture,84,45,78,76,73,82,55,69 5 | 35675,Architects,0,0,7,4,3,13,10,11 6 | 35720,Archivists,0,0,0,0,0,0,0,0 7 | 35676,Armed Forces,195,189,195,205,196,155,55,81 8 | 35677,Artisans,21,22,26,24,41,40,31,34 9 | 35721,Arts and Entertainment,16,15,31,19,32,22,27,40 10 | 35679,Authors,12,29,66,44,79,85,85,146 11 | 35680,Blacks,1,3,3,1,2,3,3,3 12 | 35681,Business,82,120,152,183,214,211,235,290 13 | 35722,Communications,0,6,8,20,33,41,64,75 14 | 35707,Criminals,0,0,0,12,1,0,0,3 15 | 35723,Curators,0,0,0,0,0,0,0,0 16 | 35682,Education,9,5,13,37,58,79,108,116 17 | 35683,Engineers,10,0,6,7,13,6,15,22 18 | 35684,Explorers,15,13,9,6,7,10,10,10 19 | 35713,Fur Trade,58,44,44,38,33,46,21,17 20 | 35709,Interpreters and Transl...,0,0,0,9,5,0,0,7 21 | 35710,Inventors,0,0,0,1,3,6,0,9 22 | 35711,Labourers and Labour Or...,0,0,0,6,1,3,6,5 23 | 35712,Legal Professions,79,74,156,187,181,160,90,126 24 | 35726,Librarians,0,0,0,0,1,0,0,0 25 | 35689,Mariners,28,20,19,17,7,12,6,9 26 | 35690,Medicine,16,13,19,23,26,29,37,37 27 | 35691,Miscellaneous,3,0,2,3,6,0,0,16 28 | 35694,Office Holders,123,154,190,195,193,178,162,170 29 | 35716,Philanthropists and Soc...,0,0,0,0,6,12,0,30 30 | 35728,Police,0,0,0,0,0,0,0,0 31 | 35695,Politicians,0,29,135,154,160,171,193,210 32 | 35696,Religion,129,82,76,68,87,102,100,90 33 | 35697,Scientists,2,0,7,3,6,7,20,21 34 | 35704,Slaves,2,1,0,0,0,0,0,0 35 | 35730,Social Scientists,0,0,0,0,0,0,0,0 36 | 35718,Sports and recreation,0,0,0,0,0,3,0,11 37 | 35698,Surveyors,10,9,20,21,20,15,9,19 38 | -------------------------------------------------------------------------------- /offence-index.py: -------------------------------------------------------------------------------- 1 | # offence-index.py 2 | # old bailey 3 | # 4 | # given a list mapping trial id to offence, create 5 | # lists of trials that fall into each offence category 6 | 7 | import os 8 | 9 | infile = open('offence-categories-1830s.txt', 'r') 10 | triallist = infile.readlines(); 11 | infile.close() 12 | 13 | # get a list of unique offences 14 | alloffences = [] 15 | for tr in triallist: 16 | rowlist = tr.split(',') 17 | offencelist = rowlist[1:] 18 | alloffences += map(lambda x: x.strip(), offencelist) 19 | 20 | print "Total number of offences: " + str(len(alloffences)) 21 | uniqoffences = list(set(alloffences)) 22 | print "Number of unique offences: " + str(len(uniqoffences)) 23 | # print uniqoffences 24 | 25 | # if output directory doesn't exist, create it 26 | outdirname = 'Offences_1830s' 27 | if os.path.exists(outdirname) == 0: os.mkdir(outdirname) 28 | 29 | # create empty dictionary structure 30 | offencedict = {} 31 | for u in uniqoffences: offencedict[u] = [] 32 | 33 | # go through file again, this time adding each trial to 34 | # dictionary of offences 35 | 36 | for tr in triallist: 37 | rowlist = tr.split(',') 38 | trialid = rowlist[0] 39 | # need to get rid of trailing newlines 40 | fulloffencelist = map(lambda x: x.strip(), rowlist[1:]) 41 | # can be charged with multiple counts of same offence 42 | offencelist = list(set(fulloffencelist)) 43 | # update dictionary 44 | map(lambda x: offencedict[x].append(trialid), offencelist) 45 | 46 | # write out each dictionary entry as a separate file 47 | 48 | for k in offencedict.keys(): 49 | outfilename = outdirname + '\\' + k + '.txt' 50 | outfile = open(outfilename, 'w') 51 | for tr in offencedict[k]: outfile.write(tr+'\n') 52 | outfile.close() -------------------------------------------------------------------------------- /exploratory-bibliography-01.py: -------------------------------------------------------------------------------- 1 | # exploratory-bibliography-01.py 2 | # 3 | # wjt 4 | # 23-25 jan 2007 5 | # 6 | # http://digitalhistoryhacks.blogspot.com 7 | 8 | import re, urllib, time 9 | import xml.dom.minidom 10 | from xml.dom.minidom import Node 11 | import pickle 12 | 13 | def scraper(url, filter=r'.*'): 14 | page = urllib.urlopen(url) 15 | pattern = re.compile(filter, re.IGNORECASE) 16 | returnlist = [] 17 | for line in page.readlines(): 18 | returnlist += pattern.findall(line) 19 | return returnlist 20 | 21 | def get_similar(asin): 22 | baseurl = r'http://webservices.amazon.com/onca/xml?' 23 | service = r'Service=AWSECommerceService' 24 | amazonid = '1THTW69EYJTSND8GNA02' 25 | access = r'&AWSAccessKeyId=' + amazonid 26 | operation = r'&Operation=SimilarityLookup&ItemId=' + asin 27 | r = urllib.urlopen(baseurl + service + access + operation) 28 | return r 29 | 30 | def get_text(nodelist): 31 | t = "" 32 | for node in nodelist: 33 | if node.nodeType == node.TEXT_NODE: 34 | t = t + node.data 35 | return t 36 | 37 | # scrape the bibliography to get a list of Amazon ASINs 38 | biblio_url = r'http://digitalhistoryhacks.blogspot.com/2007/01/readings-for-field-in-digital-history.html' 39 | book_pattern = '.*?' 40 | biblio_books = scraper(biblio_url, book_pattern) 41 | 42 | # for each book in bibliography, get similar items 43 | from_to = [] 44 | for b in biblio_books: 45 | results = "" 46 | doc = "" 47 | time.sleep(2) 48 | results = get_similar(b) 49 | doc = xml.dom.minidom.parse(results) 50 | print 'Processing ' + b + '\n' 51 | for sim in doc.getElementsByTagName("ASIN"): 52 | from_to.append((b, get_text(sim.childNodes))) 53 | 54 | pickle.dump(from_to, open("tempstorage", "w")) 55 | -------------------------------------------------------------------------------- /dcbo-entry-txt.pl: -------------------------------------------------------------------------------- 1 | # dcbo-entry-txt.pl 2 | # 29 jan 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Given a collection of HTML files for a DCB biography entry 8 | # strip out all of the formatting and return each as a 9 | # plain text file. 10 | 11 | # Load necessary modules 12 | use HTML::TokeParser; 13 | use TEXT::Wrap; 14 | 15 | # Output formatting 16 | $Text::Wrap::columns = 72; 17 | 18 | # Input list of IDs to process 19 | my $infile = 'IDs\dcbo-vol1-ids.txt'; 20 | open(INPUT, "<$infile"); 21 | 22 | # Loop through each ID in the input file 23 | while() { 24 | chomp; 25 | @fields = split /\t/; 26 | $id = $fields[0]; 27 | 28 | # We don't want to process any files we've already 29 | # done. 30 | if (-e "Text\\$id.txt") { 31 | print "Text file for $id already exists\n"; 32 | } else { 33 | 34 | # If the HTML file has been downloaded, process it. 35 | # Otherwise, print error message and move on to next. 36 | if (-e "Biographies\\$id.html") { 37 | my $stream = HTML::TokeParser->new("Biographies\\$id.html"); 38 | # Since we don't expect FOOBAR in the entry, this should 39 | # get all of the text. 40 | my $text = $stream->get_trimmed_text('FOOBAR'); 41 | # We know that it is a DCB entry. 42 | $text =~ s/^Dictionary of Canadian Biography //; 43 | # We want to get rid of the inconsistently-used apostrophe 44 | # which signals another DCB entry. 45 | $text =~ tr/*//d; 46 | # Open output file 47 | open(OUTPUT, ">Text\\$id.txt"); 48 | # Reformat paragraphs 49 | print OUTPUT Text::Wrap::wrap('', '', $text); 50 | # print OUTPUT $text; 51 | close OUTPUT; 52 | } else { 53 | print "Can't find HTML file for $id\n" 54 | } 55 | 56 | } 57 | } 58 | close INPUT; -------------------------------------------------------------------------------- /dcbo-distances.pl: -------------------------------------------------------------------------------- 1 | # dcbo-distances.pl 2 | # 8 feb 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Given a spreadsheet of biographies located in 8 | # a multidimensional feature space, return a file 9 | # of distances between each. Simply counts 10 | # features that both bios have in common, 11 | # or both lack. 12 | 13 | my ($id, @fields, %vectors, %distances); 14 | 15 | # Open the feature spreadsheet 16 | my $featurespace = 'dcbo-vol1-featurespace.csv'; 17 | open(INPUT, "<$featurespace") || die "Couldn't open feature space file."; 18 | 19 | # Throw away header record 20 | $id = ; 21 | 22 | # Hash the vector for each biography as a long bit string 23 | while() { 24 | chomp; 25 | @fields = split /,/; 26 | $id = shift @fields; 27 | $id =~ s/\"//g; 28 | $vectors{$id} = join "", @fields; 29 | } 30 | close(INPUT); 31 | 32 | # For each ID, measure distance from all remaining IDs. 33 | # We need to process the IDs to create upper triangular 34 | # portion of matrix. The distances are stored in a 35 | # hash table of lowID:highID => distance 36 | my $outfile = 'dcbo-vol1-distances.txt'; 37 | open(OUTPUT, ">$outfile"); 38 | my @sortids = sort keys (%vectors); 39 | my $lastid = $sortids[-1]; 40 | foreach $k (@sortids) { 41 | for ($j = $k; $j <= $lastid; $j++) { 42 | $distances{"$k:$j"} = vectdist($k, $j); 43 | print OUTPUT "$k:$j," . $distances{"$k:$j"} . "\n"; 44 | } 45 | } 46 | close(OUTPUT); 47 | 48 | # Subroutine to calculate the distance between 49 | # two feature vectors, normalized to 0..1 50 | 51 | sub vectdist { 52 | my ($id1, $id2) = @_; 53 | my @id1vect = split "", $vectors{$id1}; 54 | my @id2vect = split "", $vectors{$id2}; 55 | my ($tmp, $max) = (0, scalar(@id1vect)); 56 | for ($i=0; $i < $max; $i++) { 57 | if ($id1vect[$i] == $id2vect[$i]) { 58 | $tmp++; 59 | } 60 | } 61 | 1 - ($tmp / $max); 62 | } 63 | -------------------------------------------------------------------------------- /ncd-dcb-graph.py: -------------------------------------------------------------------------------- 1 | # ncd-dcb-graph.py 2 | # 3 | # Use GraphViz to plot a network diagram of 4 | # NCDs below some threshold 5 | # using randomly chosen sample of entries from the 6 | # Dictionary of Canadian Biography volume 1 7 | # 8 | # wjt 9 | # http://digitalhistoryhacks.blogspot.com 10 | # 11 | # 26 jun 2007 12 | 13 | threshold = 0.77 14 | 15 | infile = open('ncd-dcb.txt', 'r') 16 | rows = infile.readlines() 17 | infile.close() 18 | 19 | bios = [] 20 | links = [] 21 | 22 | for r in rows: 23 | row = r.split() 24 | if float(row[2]) < threshold: 25 | bios.append(row[0]) 26 | bios.append(row[1]) 27 | links.append(row) 28 | # print r, 29 | 30 | print list(set(bios)) 31 | print links 32 | 33 | graph_file = open('ncd-dcb-graph.txt', 'w') 34 | graph_file.write('digraph G {\n') 35 | graph_file.write('\tgraph [overlap=scale];\n') 36 | graph_file.write('\tnode [color=steelblue3];\n') 37 | 38 | bios = list(set(bios)) 39 | for b in bios: 40 | graph_file.write('\t' + b + ' [color=lightblue2, style=filled];\n') 41 | 42 | for l in links: 43 | graph_file.write('\t' + l[0] + ' -> ' + l[1] + ' [arrowhead=both];\n') 44 | 45 | graph_file.write('}') 46 | graph_file.close() 47 | 48 | #for o in original_books: 49 | # graph_file.write('\tA' + o + ' [color=lightblue2, style=filled];\n') 50 | #for o in range(0, len(original_books)): 51 | # for p in range((o+1), len(original_books)): 52 | # if ((original_books[o], original_books[p]) in from_to) & ((original_books[p], original_books[o]) in from_to): 53 | # graph_file.write('\tA' + original_books[o] + ' -> A' + original_books[p] + ' [arrowhead=both];\n') 54 | # elif (original_books[o], original_books[p]) in from_to: 55 | # graph_file.write('\tA' + original_books[o] + ' -> A' + original_books[p] + ';\n') 56 | # elif (original_books[p], original_books[o]) in from_to: 57 | # graph_file.write('\tA' + original_books[p] + ' -> A' + original_books[o] + ';\n') 58 | 59 | -------------------------------------------------------------------------------- /offence-category.py: -------------------------------------------------------------------------------- 1 | # offence-category.py 2 | # old bailey 3 | # 4 | # given a directory of trial files each marked with XML 5 | # extract a list mapping trial id to offence 6 | 7 | import os, sys, re 8 | from BeautifulSoup import BeautifulStoneSoup 9 | 10 | # given a directory string, return a list of file names 11 | def getFileNames(dirstr): 12 | import os 13 | dircommand = 'dir ' + dirstr + ' /B' 14 | filelist = os.popen(dircommand).readlines() 15 | filelist = [x.rstrip() for x in filelist] 16 | return filelist 17 | 18 | # given an XML tag describing an offence, return as a 19 | # standardized string 20 | def standardizeOffenceTags(offstring): 21 | stdstr = offstring.replace('<', '') 22 | stdstr = stdstr.replace('>', '') 23 | stdstr = stdstr.replace('\"', '') 24 | stdstr = stdstr.replace('category=', '') 25 | stdstr = stdstr.replace(' ', '-') 26 | return stdstr.lower() 27 | 28 | # get a list of trial files to process 29 | indirname = 'Mined_1830s' 30 | filelist = getFileNames(indirname) 31 | 32 | # scrape out the first child node of each offence 33 | offencepattern = re.compile(r'<.*?>', re.UNICODE) 34 | 35 | resultsfile = open('offence-categories-1830s.txt', 'w') 36 | 37 | for fn in filelist: 38 | 39 | outstr = fn 40 | 41 | # read XML file into string and parse it 42 | f = open(indirname+'\\'+fn, 'r') 43 | fnxml = f.read() 44 | f.close() 45 | fnsoup = BeautifulStoneSoup(fnxml) 46 | offencelist = fnsoup.findAll('offence') 47 | 48 | # extract offences 49 | for o in offencelist: 50 | offence = o.contents[0] 51 | # one trial had a blank space in front of first node 52 | if offence == ' ': offence = o.contents[1] 53 | omatch = offencepattern.match(str(offence)) 54 | offstr = omatch.group() 55 | outstr += ',' + standardizeOffenceTags(offstr) 56 | 57 | # write offence data to file 58 | resultsfile.write(outstr+'\n') 59 | resultsfile.flush() 60 | 61 | # provide feedback for user 62 | print outstr 63 | sys.stdout.flush() 64 | 65 | resultsfile.close() 66 | 67 | -------------------------------------------------------------------------------- /sip-map.pl: -------------------------------------------------------------------------------- 1 | # sip-map.pl 2 | # 26 apr 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Given the ISBN of a book, scrapes its SIPs 8 | # (statistically improbable phrases) from Amazon.com 9 | # and plots them with the GraphViz package. 10 | # Outputs a PNG file. 11 | 12 | # Load necessary modules 13 | use WWW::Mechanize; 14 | use GraphViz; 15 | 16 | # Given an ISBN, get the starting page from Amazon.com 17 | my $startbook = 'Diamond, Guns, Germs and Steel'; 18 | my $startisbn = "0393317552"; 19 | 20 | # Initialize output graph 21 | my $g = GraphViz->new(layout => 'fdp'); 22 | $g->add_node($startbook, shape => 'box'); 23 | 24 | my $start = "http://www.amazon.com/gp/product/" . $startisbn . "/"; 25 | 26 | my $mech = WWW::Mechanize->new( autocheck => 1 ); 27 | $mech->get( $start ); 28 | 29 | # Extract the SIPs for the starting book 30 | 31 | my %sipurls = (); 32 | my @links = $mech->find_all_links( ); 33 | 34 | for my $link ( @links ) { 35 | 36 | my $url = $link->url_abs; 37 | my $siptext = $link->text; 38 | 39 | if($url =~ m/sip_bod/) { 40 | 41 | # print "SIP", "\t", $siptext, "\n\n"; 42 | $g->add_node($siptext); 43 | $g->add_edge($startbook => $siptext); 44 | 45 | # Hash the SIP URL and associated SIP to process later 46 | 47 | # print "URL", "\t", $url, "\n"; 48 | $sipurl{ $url } = $siptext; 49 | } 50 | 51 | } 52 | 53 | # Extract the books for each SIP 54 | 55 | for my $url ( keys %sipurl ) { 56 | 57 | my $siptext = $sipurl{ $url }; 58 | print "URL", "\t", $url, "\n"; 59 | print "SIP", "\t", $siptext, "\n\n"; 60 | 61 | $mech->get( $url ); 62 | my @furtherlinks = $mech->find_all_links( ); 63 | 64 | for my $link ( @furtherlinks ) { 65 | my $newurl = $link->url_abs; 66 | my $booktext = $link->text; 67 | 68 | if($newurl =~ m/sip_pdp_dp/) { 69 | 70 | # print "SIP", "\t", $siptext, "\n\n"; 71 | $g->add_node($booktext, shape => 'box'); 72 | $g->add_edge($siptext => $booktext); 73 | } 74 | } 75 | 76 | } 77 | 78 | # Create the graph 79 | 80 | open(OUTPUT, ">$startisbn.png"); 81 | binmode OUTPUT; 82 | print OUTPUT $g->as_png; 83 | close OUTPUT; 84 | -------------------------------------------------------------------------------- /exploratory-bibliography-06.py: -------------------------------------------------------------------------------- 1 | # exploratory-bibliography-06.py 2 | # 3 | # wjt 4 | # 2 feb 2007 5 | # 6 | # http://digitalhistoryhacks.blogspot.com 7 | 8 | # chronological strata in recommendations 9 | # (I know this is really ugly and inefficient) 10 | 11 | import urllib, time 12 | import xml.dom.minidom 13 | from xml.dom.minidom import Node 14 | import pickle 15 | import anydbm 16 | 17 | def get_text(nodelist): 18 | t = "" 19 | for node in nodelist: 20 | if node.nodeType == node.TEXT_NODE: 21 | t = t + node.data 22 | return t 23 | 24 | def get_pubyear(asin): 25 | pubdate = '0000-00-00' 26 | baseurl = r'http://webservices.amazon.com/onca/xml?' 27 | service = r'Service=AWSECommerceService' 28 | amazonid = '1THTW69EYJTSND8GNA02' 29 | access = r'&AWSAccessKeyId=' + amazonid 30 | operation = r'&Operation=ItemLookup&ItemId=' + asin 31 | response = r'&ResponseGroup=ItemAttributes' 32 | r = urllib.urlopen(baseurl + service + access + operation + response) 33 | doc = xml.dom.minidom.parse(r) 34 | for pd in doc.getElementsByTagName("PublicationDate"): 35 | pubdate = get_text(pd.childNodes) 36 | return pubdate[0:4] 37 | 38 | def incrpair(ftdict, ftkey): 39 | if ftdict.has_key(ftkey): 40 | ftdict[ftkey] = str(int(ftdict[ftkey]) + 1) 41 | else: 42 | ftdict[ftkey] = "1" 43 | 44 | from_to = pickle.load(open('tempstorage')) 45 | 46 | to_go = len(from_to) 47 | 48 | for ftpair in from_to: 49 | from_to_years = anydbm.open('from-to-years', 'c') 50 | checklist = anydbm.open('checklist', 'c') 51 | if str(ftpair) in checklist.keys(): 52 | print str(to_go) + " Already did " + str(ftpair) 53 | else: 54 | print str(to_go) + " Processing " + str(ftpair) 55 | time.sleep(1.2) 56 | fyear = get_pubyear(ftpair[0]) 57 | time.sleep(1.2) 58 | tyear = get_pubyear(ftpair[1]) 59 | yearpair = str(fyear + " - " + tyear) 60 | print yearpair 61 | incrpair(from_to_years, yearpair) 62 | checklist[str(ftpair)] = "1" 63 | to_go = to_go - 1 64 | from_to_years.close() 65 | checklist.close() 66 | 67 | from_to_years = anydbm.open('from-to-years', 'c') 68 | outfile = open('from-to-years.csv', 'w') 69 | 70 | for k in from_to_years.keys(): 71 | outstr = k[0:4] + ',' + k[7:11] + ',' + from_to_years[k] + "\n" 72 | outfile.write(outstr) 73 | 74 | from_to_years.close() 75 | outfile.close() -------------------------------------------------------------------------------- /clean-copy-trials.py: -------------------------------------------------------------------------------- 1 | # clean-copy-trials.py 2 | # old bailey 3 | # 4 | # given a directory of trial files each marked with XML 5 | # create a parallel directory of files with all tagging stripped 6 | 7 | import os, sys, re 8 | 9 | # given a directory string, return a list of file names 10 | def getFileNames(dirstr): 11 | dircommand = 'dir ' + dirstr + ' /B' 12 | filelist = os.popen(dircommand).readlines() 13 | filelist = [x.rstrip() for x in filelist] 14 | return filelist 15 | 16 | # given a string containing XML, remove all characters 17 | # between matching pairs of angled brackets, inclusive 18 | def stripTags(xml): 19 | inside = 0 20 | text = '' 21 | for char in xml: 22 | if char == '<': 23 | inside = 1 24 | continue 25 | elif (inside == 1 and char == '>'): 26 | inside = 0 27 | continue 28 | elif inside == 1: 29 | continue 30 | else: 31 | text += char 32 | return text 33 | 34 | # given a local copy of an XML file, return string 35 | # of lowercase text from page 36 | def localXMLFileToText(xmlfile): 37 | f = open(xmlfile, 'r') 38 | xml = f.read() 39 | f.close() 40 | text = stripTags(xml).replace(' ', ' ') 41 | text = text.replace('—', ' ') 42 | text = text.replace('"', '') 43 | return text.lower() 44 | 45 | # given a text string, remove all non-alphanumeric 46 | # characters (using Unicode definition of alphanumeric) 47 | def stripNonAlphaNum(text): 48 | import re 49 | return re.compile(r'\W+', re.UNICODE).split(text) 50 | 51 | # get a list of trial files to process 52 | indirname = 'Mined_1830s' 53 | filelist = getFileNames(indirname) 54 | 55 | # if output directory doesn't exist, create it 56 | outdirname = 'Mined_1830s_clean' 57 | if os.path.exists(outdirname) == 0: os.mkdir(outdirname) 58 | 59 | # page images have 12-digit number 60 | imgpattern = re.compile(r'\d{12}', re.UNICODE) 61 | 62 | for fn in filelist: 63 | 64 | # provide feedback for user 65 | print 'Processing ' + fn 66 | sys.stdout.flush() 67 | 68 | # read XML file into string and remove formatting 69 | infile = indirname + '\\' + fn 70 | instr = localXMLFileToText(infile) 71 | instr = imgpattern.sub(' ', instr) 72 | wordlist = stripNonAlphaNum(instr) 73 | 74 | # output clean lowercase alphanumeric text 75 | outfile = outdirname + '\\' + 'clean_' + fn 76 | f = open(outfile, 'w') 77 | for w in wordlist: f.write(w+' ') 78 | f.close() 79 | 80 | -------------------------------------------------------------------------------- /test-false-positives.py: -------------------------------------------------------------------------------- 1 | # test-false-positives.py 2 | # old bailey 3 | # 4 | # given results from online run, returns 5 | # categories of all false positives 6 | 7 | import os, string, re, sys 8 | 9 | # given a directory string, return a list of file names 10 | def getFileNames(dirstr): 11 | dircommand = 'dir ' + dirstr + ' /B' 12 | filelist = os.popen(dircommand).readlines() 13 | filelist = [x.rstrip() for x in filelist] 14 | return filelist 15 | 16 | # given a trial file name, return long integer 17 | # that can be used for sorting 18 | def trialtoint(trialname): 19 | pattern = re.compile(r'(\d{8})-(\d+)', re.UNICODE) 20 | match = pattern.search(trialname) 21 | date = match.group(1) 22 | id = match.group(2) 23 | return long("%8d%06d" % (long(date), long(id))) 24 | 25 | # list of result files to test 26 | resultdir = 'Online_Runs_1830s' 27 | resultfilelist = getFileNames(resultdir) 28 | 29 | # file of offence categories 30 | categoriesfile = 'offence-categories-1830s.txt' 31 | 32 | # output directory 33 | outdir = 'Online_FPs_1830s' 34 | if os.path.exists(outdir) == 0: os.mkdir(outdir) 35 | 36 | for resultfile in resultfilelist: 37 | 38 | outfile = outdir + '\\fps-tfidf50-' + resultfile 39 | g = open(outfile, 'w') 40 | g.write('OLD BAILEY False Positives\n\n') 41 | g.write('Offence: ' + resultfile + '\n\n') 42 | 43 | # create a dictionary mapping trial to offence(s) 44 | f = open(categoriesfile, 'r') 45 | triallist = f.readlines() 46 | f.close() 47 | offencecats = {} 48 | for t in triallist: 49 | linein = t.split(',') 50 | trstr = str(trialtoint(linein[0])) 51 | offencecats[trstr] = [] 52 | for l in linein[1:]: 53 | offencecats[trstr].append(l.rstrip()) 54 | 55 | # find the false positives and compile a dictionary of offence counts 56 | f = open(resultdir + '\\' + resultfile, 'r') 57 | resultlist = f.readlines() 58 | f.close() 59 | pattern = re.compile(r'(\d{14})(,\s+\d{6},\s+)(y,\s+n,)', re.UNICODE) 60 | offencecounts = {} 61 | for r in resultlist: 62 | match = pattern.search(r) 63 | if match: 64 | trialint = match.group(1) 65 | for o in offencecats[trialint]: 66 | if offencecounts.has_key(o): 67 | offencecounts[o] += 1 68 | else: 69 | offencecounts[o] = 1 70 | 71 | # output offence counts 72 | for key in offencecounts: 73 | g.write(key + ", " + str(offencecounts[key]) + '\n') 74 | 75 | g.close() 76 | -------------------------------------------------------------------------------- /phidgets-quad-servo-demo.py: -------------------------------------------------------------------------------- 1 | # phidgets-quad-servo-demo.py 2 | # 3 | # wjt 4 | # 18 mar 2007 5 | # 6 | # http://digitalhistoryhacks.blogspot.com 7 | # 8 | # Use Python to control Phidgets with 9 | # ctypes interface 10 | 11 | from ctypes import * 12 | import sys 13 | import time 14 | 15 | class pyPhidget: 16 | def __init__(self): 17 | if sys.platform == 'win32': 18 | self.dll = windll.LoadLibrary("C:\WINDOWS\system32\phidget21.dll") 19 | else: 20 | print "Platform not supported" 21 | 22 | class pyPhidgetQuadServo(pyPhidget): 23 | 24 | def __init__(self,serial): 25 | pyPhidget.__init__(self) 26 | self.handle = c_long() 27 | 28 | self.dll.CPhidgetServo_create(byref(self.handle)) 29 | result = self.dll.CPhidget_open(self.handle,c_int(serial)) 30 | if result: 31 | print "No such phidget found, serial: %d" %(serial) 32 | return result 33 | self.dll.CPhidget_waitForAttachment(self.handle, c_int(0)) 34 | 35 | devname = c_char_p() 36 | devserial = c_int() 37 | self.dll.CPhidget_getDeviceName(self.handle, byref(devname)) 38 | self.dll.CPhidget_getSerialNumber(self.handle, byref(devserial)) 39 | print "Device attached: %s, serial number: %d" % (devname.value, devserial.value) 40 | 41 | def close(self): 42 | self.dll.CPhidget_close(self.handle) 43 | self.dll.CPhidget_delete(self.handle) 44 | print "Device closed" 45 | 46 | def getMotorPosition(self, devindex): 47 | devpos = c_double() 48 | self.dll.CPhidgetServo_getMotorPosition(self.handle, c_int(devindex), byref(devpos)) 49 | return devpos.value 50 | 51 | def setMotorPosition(self, devindex, devpos): 52 | self.dll.CPhidgetServo_setMotorPosition(self.handle, c_int(devindex), c_double(devpos)) 53 | 54 | def convertValueToPulse(self, devvalue): 55 | return ((devvalue * 10.6) + 243.8) 56 | 57 | def convertPulseToValue(self, devpulse): 58 | return ((devpulse - 243.8) / 10.6) 59 | 60 | # intialize 61 | testphidget = pyPhidgetQuadServo(11454) 62 | 63 | testphidget.setMotorPosition(0, 20) 64 | time.sleep(2) 65 | 66 | # test servo 67 | for angle in range(20, 220, 10): 68 | testphidget.setMotorPosition(0, angle) 69 | time.sleep(0.2) 70 | print "Servo position 0. Angle: %d, Measured: %f" % (angle, testphidget.getMotorPosition(0)) 71 | for angle in range(220, 20, -10): 72 | testphidget.setMotorPosition(0, angle) 73 | time.sleep(0.2) 74 | print "Servo position 0. Angle: %d, Measured: %f" % (angle, testphidget.getMotorPosition(0)) 75 | 76 | # clean up 77 | testphidget.close() -------------------------------------------------------------------------------- /ngd-calculator.pl: -------------------------------------------------------------------------------- 1 | #!"C:\Program Files\xampp\perl\bin\perl.exe" 2 | # ngd-calculator.cgi 3 | # 4 | # wjt 5 | # http://history.uwo.ca/faculty/turkel/ 6 | # 7 | # 5 aug 2006 8 | 9 | use SOAP::Lite; 10 | use CGI; 11 | use POSIX qw(log10); 12 | use List::Util qw(max min); 13 | 14 | # Google API developer's key 15 | my $google_key = ''; 16 | 17 | # Google WSDL 18 | my $google_wsdl = "http://api.google.com/GoogleSearch.wsdl"; 19 | # my $google_wsdl = "./GoogleSearch.wsdl"; 20 | 21 | # start, maxResults, filter, restrict, safeSearch, lr, ie, oe 22 | my @params = (0, 10, 0, '', 0, '', 'utf-8', 'utf-8'); 23 | 24 | # Do Google search and return count 25 | sub do_search { 26 | unshift (@params, ($google_key, $_[0])); 27 | my $result = 28 | SOAP::Lite 29 | -> service($google_wsdl) 30 | -> doGoogleSearch(@params); 31 | shift @params; 32 | shift @params; 33 | return $result->{estimatedTotalResultsCount}; 34 | } 35 | 36 | # Create the search page 37 | $query = new CGI; 38 | print $query->header; 39 | print $query->start_html('NGD Calculator'); 40 | print "

Normalized Google Distance (NGD) Calculator

"; 41 | 42 | print '

'; 43 | print 'For information about NGD see Rudi Cilibrasi and Paul Vitanyi, "'; 44 | print ''; 45 | print 'Automatic Meaning Discovery Using Google."'; 46 | print '

'; 47 | 48 | # Print the search box form 49 | print $query->startform; 50 | print 'Enter term 1 ',$query->textfield('term1'); 51 | print '
'; 52 | print 'Enter term 2 ',$query->textfield('term2'); 53 | print '
'; 54 | print $query->submit('form_1','Calculate'); 55 | print $query->endform; 56 | print '
'; 57 | 58 | $x = ''; $y = ''; $xy = ''; 59 | $x = '+"' . $query->param('term1') . '"'; 60 | $y = '+"' . $query->param('term2') . '"'; 61 | $xy = $x . " " . $y; 62 | 63 | $fx = 1; $fy = 1; $fxy = 1; 64 | $logfx = 0; $logfy = 0; $logfxy = 0; $logm = 0; 65 | $maxlogfxy = 0; $minlogfxy = 0; 66 | $ngd = 0; 67 | 68 | # Best guess as of Jan 2006 69 | $m = 11828505634; 70 | 71 | if ($x && $y) { 72 | 73 | # Determine frequencies 74 | $fx = do_search( $x ); 75 | $fy = do_search( $y ); 76 | $fxy = do_search( $xy ); 77 | 78 | # Determine logarithms 79 | $logm = log10( $m ); 80 | $logfx = log10( $fx ); 81 | $logfy = log10( $fy ); 82 | $logfxy = log10( $fxy ); 83 | 84 | # Determine max and min 85 | @fxy = ($logfx, $logfy); 86 | $maxlogfxy = max @fxy; 87 | $minlogfxy = min @fxy; 88 | 89 | # Calculate NGD 90 | $ngd = ($maxlogfxy - $logfxy) / ($logm - $minlogfxy); 91 | 92 | print 'NGD(x,y) = ' . $ngd . '

'; 93 | 94 | print 'Term 1: ' . $x . '
'; 95 | print 'f(x) = ' . $fx . '
'; 96 | print 'log f(x) = ' . $logfx . '

'; 97 | 98 | print 'Term 2: ' . $y . '
'; 99 | print 'f(y) = ' . $fy . '
'; 100 | print 'log f(y) = ' . $logfy . '

'; 101 | 102 | # print 'max(log f(x),log f(y)) = ' . $maxlogfxy . '
'; 103 | # print 'min(log f(x),log f(y)) = ' . $minlogfxy . '

'; 104 | 105 | print 'Intersection: ' . $xy . '
'; 106 | print 'f(x,y) = ' . $fxy . '
'; 107 | print 'log f(x,y) = ' . $logfxy . '

'; 108 | 109 | print 'M: ' . $m . '
'; 110 | print 'log M: ' . $logm . '
'; 111 | } 112 | 113 | print qq{

Digital History at Western}; 114 | print $query->end_html; 115 | -------------------------------------------------------------------------------- /dcbo-ids-cloud.pl: -------------------------------------------------------------------------------- 1 | # dcbo-ids-cloud.pl 2 | # 15 jan 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Goes to the online Dictionary of Canadian Biography to get the 8 | # number of people in each category ('Aboriginal', 'Accountant', etc.) 9 | # Outputs a tag cloud as HTML. 10 | # 11 | # LWP code adapted from 12 | # Burke, Perl & LWP (O'Reilly 2002), pp. 27-28, 96-97. 13 | # Tag cloud adapted from 14 | # Bausch, Yahoo! Hacks (O'Reilly 2006), pp. 203-04. 15 | # Max subroutine from 16 | # Schwartz & Phoenix, Learning Perl, 3rd ed (O'Reilly 2001), pp. 65. 17 | 18 | use LWP; 19 | use LWP::Simple; 20 | use POSIX "floor"; 21 | 22 | sub max { 23 | my($max_so_far) = shift @_; 24 | foreach(@_) { 25 | if ($_ > $max_so_far) { 26 | $max_so_far = $_; 27 | } 28 | } 29 | $max_so_far; 30 | } 31 | 32 | my $browser; 33 | sub do_POST { 34 | $browser = LWP::UserAgent->new() unless $browser; 35 | my $resp = $browser->post(@_); 36 | return ($resp->content, $resp->status_line, $resp->is_success, $resp) 37 | if wantarray; 38 | return unless $resp->is_success; 39 | return $resp->content; 40 | } 41 | 42 | my $doc_url = 'http://www.biographi.ca/EN/Search.asp'; 43 | 44 | # Create a hash of category IDs and names by scraping base page. 45 | my %categories = (); 46 | my $document = get($doc_url); 47 | while ($document =~ m/(.*?)<\/A>/g) { 48 | my ($id, $tmp) = ($1, $2); 49 | $tmp =~ s///; 50 | $categories{$id} = $tmp; 51 | } 52 | 53 | # We need to keep the category keys in the right order. 54 | my @catarray = sort {$categories{$a} cmp $categories{$b}} (keys %categories); 55 | 56 | # For each different category, return count of matching biographies. 57 | my %categorycount = (); 58 | foreach my $id (@catarray) { 59 | my ($content, $message, $is_success) = do_POST( 60 | $doc_url, 61 | [ 'Data3' => $id, 62 | 'Data4' => '1' ], 63 | ); 64 | die "Error $message\n" 65 | unless $is_success; 66 | $content =~ m{([0-9,]+) biography\(ies\) are available using your current search criteria}is; 67 | my $tmp = $1; 68 | $tmp =~ s/\,//; 69 | $categorycount{$id} = $tmp; 70 | # Be considerate to their server. 71 | sleep 2; 72 | } 73 | 74 | # Debugging scaffolding: check this output against tag cloud. 75 | print "\n----------------------------\n"; 76 | foreach my $key (@catarray) { 77 | print "key: " . $key . "\tcat: " . $categories{$key} . "\tcnt: " . $categorycount{$key} . "\n"; 78 | } 79 | print "\n----------------------------\n"; 80 | 81 | # Now we send the tag cloud to an HTML file. 82 | open(OUTPUT, ">ID-cloud.html"); 83 | 84 | # Range of font sizes to use. 85 | my $minfontsize = 12; 86 | my $maxfontsize = 36; 87 | 88 | # Get the maximum number of biographies in any category. 89 | my $maxbio = &max(values %categorycount); 90 | 91 | # Output the opening HTML tags. 92 | print OUTPUT "\n\n\n\n\n"; 96 | print OUTPUT "\n\n
\n"; 97 | 98 | # Print the name of each category in the appropriate sized font. 99 | foreach my $catid (@catarray) { 100 | my $fontsize = $minfontsize + floor(($maxfontsize-$minfontsize) * ($categorycount{$catid}/$maxbio)); 101 | print OUTPUT "" . $categories{$catid} . "\n"; 102 | } 103 | 104 | # Output the closing HTML tags. 105 | print OUTPUT "
\n\n\n"; 106 | 107 | print "Finished processing.\n"; -------------------------------------------------------------------------------- /h-reviews.pl: -------------------------------------------------------------------------------- 1 | # h-reviews.pl 2 | # 12 mar 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # 8 | # Gets set of all H-Net lists, retrieves the ISBNs 9 | # of reviewed books so they can be submitted to a library 10 | # catalogue to check whether they are in the library 11 | # or not. (Relatively brittle). 12 | 13 | use WWW::Mechanize; 14 | my $mech = WWW::Mechanize->new( autocheck => 1 ); 15 | 16 | # Get list of H-Net lists to process (from file, if 17 | # it exists, otherwise need to create file). 18 | 19 | my @hnetlists = (); 20 | print '-' x 60 . "\n"; 21 | print "Getting list of H-Net lists...\n"; 22 | print '-' x 60 . "\n"; 23 | if (-e 'h-net-lists.txt') { 24 | print "File of lists exists...\n"; 25 | open(INPUT, ") { 27 | chomp; 28 | @fields = split /\t/; 29 | push @hnetlists, ( $fields[0] ); 30 | } 31 | } else { 32 | print "Need to create file of lists...\n"; 33 | open(OUTPUT, ">h-net-lists.txt"); 34 | $mech->get( "http://www.h-net.org/lists/" ); 35 | my @links = $mech->find_all_links( ); 36 | for my $link ( @links ) { 37 | my $url = $link->url_abs; 38 | my $text = $link->text; 39 | if($url =~ m|www.h-net.org/~|) { 40 | push @hnetlists, ( $text ); 41 | print OUTPUT "$text\n"; 42 | } 43 | } 44 | print "File of lists created...\n"; 45 | } 46 | 47 | # Need list of books reviewed for each H-Net list. 48 | # Make sure that file exists, otherwise create it 49 | # from the H-Net reviews search page. 50 | 51 | print '-' x 60 . "\n"; 52 | print "Getting list of books reviewed on each H-Net list...\n"; 53 | print '-' x 60 . "\n"; 54 | foreach $k ( @hnetlists ) { 55 | print "Processing $k\n"; 56 | if (-e "$k.txt") { 57 | print "File $k.txt exists...\n"; 58 | } else { 59 | print "File $k.txt needs to be created...\n"; 60 | my $out_file = "$k.txt"; 61 | sleep 2; 62 | $mech->get( "http://www.h-net.org/reviews/search.html" ); 63 | $mech->success or die "Can't get the search page for $k"; 64 | $mech->form_number( '2' ); 65 | $mech->field( 'publist', $k ); 66 | $mech->click_button( name => 'search' ); 67 | my @links = $mech->find_all_links; 68 | open(OUT, ">$out_file") || die "Can't write-open $out_file: $!"; 69 | binmode(OUT); 70 | for my $link ( @links ) { 71 | my $url = $link->url_abs; 72 | if($url =~ m|www.h-net.org/reviews/show|) { 73 | print OUT "$url\n"; 74 | } 75 | } 76 | close(OUT); 77 | print "Bytes saved: ", -s $out_file, " in $out_file\n"; 78 | } 79 | } 80 | 81 | # Need a list of ISBNs for each book reviewed in a 82 | # given list. Make sure that the file exists, or 83 | # create it if necessary by scraping individual 84 | # review pages. 85 | 86 | print '-' x 60 . "\n"; 87 | print "Getting ISBNs for books reviewed on each H-Net list...\n"; 88 | print '-' x 60 . "\n"; 89 | foreach $k ( @hnetlists ) { 90 | print "Processing $k for ISBNs\n"; 91 | if (-e "$k-isbn.txt") { 92 | print "File $k-isbn.txt exists...\n"; 93 | } else { 94 | print "File $k-isbn.txt needs to be created...\n"; 95 | my $out_file = "$k-isbn.txt"; 96 | open(OUT, ">$out_file") || die "Can't write-open $out_file: $!"; 97 | binmode(OUT); 98 | if (-z "$k.txt") { 99 | print "File $k.txt is empty...\n"; 100 | close(OUT); 101 | print "Bytes saved: ", -s $out_file, " in $out_file\n"; 102 | } else { 103 | print "Processing $k.txt to get ISBNs...\n"; 104 | my $in_file = "$k.txt"; 105 | open (IN, "<$in_file"); 106 | while($review = ) { 107 | sleep 3; 108 | $mech->get( $review ); 109 | next unless $mech->success; 110 | my $response = $mech->content; 111 | if( $response =~ m|http://www.amazon.com/exec/obidos/ASIN/(.*)/| ) { 112 | print OUT "$1\n"; 113 | } 114 | } 115 | close(IN); 116 | close(OUT); 117 | print "Bytes saved: ", -s $out_file, " in $out_file\n"; 118 | } 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /ncd-dcb-graph.txt: -------------------------------------------------------------------------------- 1 | digraph G { 2 | graph [overlap=scale]; 3 | node [color=steelblue3]; 4 | 34438 [color=lightblue2, style=filled]; 5 | 34652 [color=lightblue2, style=filled]; 6 | 34693 [color=lightblue2, style=filled]; 7 | 34167 [color=lightblue2, style=filled]; 8 | 34635 [color=lightblue2, style=filled]; 9 | 34678 [color=lightblue2, style=filled]; 10 | 34611 [color=lightblue2, style=filled]; 11 | 34631 [color=lightblue2, style=filled]; 12 | 34675 [color=lightblue2, style=filled]; 13 | 34397 [color=lightblue2, style=filled]; 14 | 34195 [color=lightblue2, style=filled]; 15 | 34638 [color=lightblue2, style=filled]; 16 | 34208 [color=lightblue2, style=filled]; 17 | 34443 [color=lightblue2, style=filled]; 18 | 34155 [color=lightblue2, style=filled]; 19 | 34445 [color=lightblue2, style=filled]; 20 | 34461 [color=lightblue2, style=filled]; 21 | 34170 [color=lightblue2, style=filled]; 22 | 34281 [color=lightblue2, style=filled]; 23 | 34268 [color=lightblue2, style=filled]; 24 | 34404 [color=lightblue2, style=filled]; 25 | 34265 [color=lightblue2, style=filled]; 26 | 34340 [color=lightblue2, style=filled]; 27 | 34174 [color=lightblue2, style=filled]; 28 | 34403 [color=lightblue2, style=filled]; 29 | 34626 [color=lightblue2, style=filled]; 30 | 34588 [color=lightblue2, style=filled]; 31 | 34541 [color=lightblue2, style=filled]; 32 | 34540 [color=lightblue2, style=filled]; 33 | 34604 [color=lightblue2, style=filled]; 34 | 34520 [color=lightblue2, style=filled]; 35 | 34708 [color=lightblue2, style=filled]; 36 | 34576 [color=lightblue2, style=filled]; 37 | 34538 [color=lightblue2, style=filled]; 38 | 34599 [color=lightblue2, style=filled]; 39 | 34457 [color=lightblue2, style=filled]; 40 | 34140 [color=lightblue2, style=filled]; 41 | 34475 [color=lightblue2, style=filled]; 42 | 34594 [color=lightblue2, style=filled]; 43 | 34595 [color=lightblue2, style=filled]; 44 | 34471 [color=lightblue2, style=filled]; 45 | 34470 [color=lightblue2, style=filled]; 46 | 34155 -> 34174 [arrowhead=both]; 47 | 34155 -> 34170 [arrowhead=both]; 48 | 34631 -> 34268 [arrowhead=both]; 49 | 34470 -> 34155 [arrowhead=both]; 50 | 34445 -> 34155 [arrowhead=both]; 51 | 34708 -> 34268 [arrowhead=both]; 52 | 34652 -> 34693 [arrowhead=both]; 53 | 34445 -> 34170 [arrowhead=both]; 54 | 34631 -> 34708 [arrowhead=both]; 55 | 34520 -> 34538 [arrowhead=both]; 56 | 34281 -> 34635 [arrowhead=both]; 57 | 34576 -> 34397 [arrowhead=both]; 58 | 34155 -> 34140 [arrowhead=both]; 59 | 34170 -> 34174 [arrowhead=both]; 60 | 34445 -> 34470 [arrowhead=both]; 61 | 34595 -> 34611 [arrowhead=both]; 62 | 34626 -> 34678 [arrowhead=both]; 63 | 34445 -> 34140 [arrowhead=both]; 64 | 34445 -> 34404 [arrowhead=both]; 65 | 34265 -> 34404 [arrowhead=both]; 66 | 34170 -> 34167 [arrowhead=both]; 67 | 34404 -> 34140 [arrowhead=both]; 68 | 34445 -> 34174 [arrowhead=both]; 69 | 34470 -> 34170 [arrowhead=both]; 70 | 34540 -> 34155 [arrowhead=both]; 71 | 34576 -> 34438 [arrowhead=both]; 72 | 34611 -> 34155 [arrowhead=both]; 73 | 34604 -> 34208 [arrowhead=both]; 74 | 34540 -> 34167 [arrowhead=both]; 75 | 34470 -> 34174 [arrowhead=both]; 76 | 34443 -> 34208 [arrowhead=both]; 77 | 34594 -> 34195 [arrowhead=both]; 78 | 34461 -> 34541 [arrowhead=both]; 79 | 34443 -> 34604 [arrowhead=both]; 80 | 34265 -> 34155 [arrowhead=both]; 81 | 34265 -> 34457 [arrowhead=both]; 82 | 34471 -> 34208 [arrowhead=both]; 83 | 34443 -> 34595 [arrowhead=both]; 84 | 34693 -> 34340 [arrowhead=both]; 85 | 34626 -> 34541 [arrowhead=both]; 86 | 34604 -> 34588 [arrowhead=both]; 87 | 34265 -> 34638 [arrowhead=both]; 88 | 34170 -> 34140 [arrowhead=both]; 89 | 34445 -> 34541 [arrowhead=both]; 90 | 34470 -> 34541 [arrowhead=both]; 91 | 34155 -> 34167 [arrowhead=both]; 92 | 34443 -> 34599 [arrowhead=both]; 93 | 34457 -> 34635 [arrowhead=both]; 94 | 34675 -> 34340 [arrowhead=both]; 95 | 34541 -> 34140 [arrowhead=both]; 96 | 34576 -> 34631 [arrowhead=both]; 97 | 34167 -> 34195 [arrowhead=both]; 98 | 34638 -> 34445 [arrowhead=both]; 99 | 34540 -> 34470 [arrowhead=both]; 100 | 34470 -> 34140 [arrowhead=both]; 101 | 34631 -> 34403 [arrowhead=both]; 102 | 34626 -> 34404 [arrowhead=both]; 103 | 34404 -> 34174 [arrowhead=both]; 104 | 34588 -> 34195 [arrowhead=both]; 105 | 34595 -> 34599 [arrowhead=both]; 106 | 34445 -> 34167 [arrowhead=both]; 107 | 34638 -> 34170 [arrowhead=both]; 108 | 34520 -> 34678 [arrowhead=both]; 109 | 34471 -> 34475 [arrowhead=both]; 110 | 34611 -> 34174 [arrowhead=both]; 111 | } -------------------------------------------------------------------------------- /cross-validate-tfidf-learner.py: -------------------------------------------------------------------------------- 1 | # cross-validate-tfidf-learner.py 2 | # old bailey 3 | # 4 | # test performance of TF/IDF based learner on a 5 | # cross-validation sample 6 | 7 | import os, string, re, sys 8 | from bayesian import * 9 | 10 | # the routine to extract features has to be bypassed 11 | # this expects a string made by concatenating terms 12 | # with highest TF/IDF 13 | def passtfidf(doc): 14 | wordlist = doc.split(' ') 15 | return dict([(w,1) for w in wordlist]) 16 | 17 | # set learner type and number of features 18 | learner = 'tfidf' 19 | numfeatures = 50 20 | 21 | # read the 10 sample files into an array of lists of the form 22 | # samplelist[sample_number][item_number] 23 | sampledir = 'Samples_1840s' 24 | samplelist = [] 25 | for i in range(0, 10): 26 | f = open(sampledir + '\\' + 'sample' + str(i) + '.txt', 'r') 27 | sample = [] 28 | sample = f.readlines() 29 | sample = [x.rstrip() for x in sample] 30 | samplelist.append(sample) 31 | f.close 32 | 33 | # offence being tested 34 | offencedir = 'Offences_1840s' 35 | offencefile = 'theft-simplelarceny.txt' 36 | f = open(offencedir + '\\' + offencefile, 'r') 37 | offencelist = f.readlines() 38 | offencelist = [x.rstrip() for x in offencelist] 39 | f.close() 40 | offencecount = len(offencelist) 41 | 42 | # trials 43 | trialdir = 'TFIDF_1840s' 44 | 45 | # open output file and write the file header 46 | outfile = 'cross-val-tfidf-lrn.txt' 47 | f = open(outfile, 'w') 48 | f.write('OLD BAILEY Tenfold Cross-Validation Learning Run\n\n') 49 | f.write('Offence: ' + offencedir + '\\' + offencefile + '\n') 50 | f.write('Learning run: tfidf, ' + str(numfeatures) + ' features\n') 51 | f.write("\nRun, %7s, %7s, %7s, %7s\n" % ('Hit', 'Miss', 'FalseP', 'CorrN')) 52 | 53 | # run tests 54 | cl = [] 55 | for i in range(0,3): 56 | 57 | # train a new learner for each run 58 | cl.append(naivebayes(passtfidf)) 59 | 60 | # response categories 61 | hits = 0 62 | misses = 0 63 | falseps = 0 64 | corrns = 0 65 | 66 | # set testing sample to i 67 | print str(i) + ' Loading samples...' 68 | testingsample = [] 69 | testingsample = samplelist[i] 70 | 71 | # set training sample to the concatenation of the others 72 | trainingsample = [] 73 | for j in range(0, i): trainingsample.extend(samplelist[j]) 74 | for j in range((i+1), 10): trainingsample.extend(samplelist[j]) 75 | 76 | # train the learner on training sample 77 | print str(i) + ' Training' 78 | sys.stdout.flush() 79 | 80 | for r in trainingsample: 81 | trialstr = '' 82 | ff = open(trialdir + '\\tfidf_' + r, 'r') 83 | whole = ff.readlines() 84 | feat = min(len(whole)-1, numfeatures) 85 | for k in range(0, feat): 86 | linein = whole[k].split(',') 87 | trialstr += str(linein[0]) 88 | trialstr += ' ' 89 | ff.close() 90 | 91 | if r in offencelist: 92 | # print trialstr.rstrip() 93 | cl[i].train(trialstr.rstrip(),'y') 94 | else: 95 | # print trialstr.rstrip() 96 | cl[i].train(trialstr.rstrip(),'n') 97 | 98 | # test the learner on testing sample 99 | print str(i) + ' Testing' 100 | sys.stdout.flush() 101 | 102 | for t in testingsample: 103 | 104 | # read trial into string 105 | trialstr = '' 106 | ff = open(trialdir + '\\tfidf_' + t, 'r') 107 | whole = ff.readlines() 108 | feat = min(len(whole)-1, numfeatures) 109 | for k in range(0, feat): 110 | linein = whole[k].split(',') 111 | trialstr += str(linein[0]) 112 | trialstr += ' ' 113 | ff.close() 114 | 115 | # use learner to categorize trial 116 | g = cl[i].classify(trialstr.rstrip(),default='n') 117 | 118 | # compare categorization with actual category 119 | if t in offencelist: 120 | # hit or miss 121 | if g == 'y': hits+=1 122 | else: misses+=1 123 | else: 124 | # false positive or correct negative 125 | if g == 'y': falseps+=1 126 | else: corrns+=1 127 | 128 | # write out learner performance 129 | f.write("%03d, %07d, %07d, %07d, %07d\n" % (i, hits, misses, falseps, corrns)) 130 | f.flush() 131 | 132 | print 'Done' 133 | sys.stdout.flush() 134 | 135 | # close output file 136 | f.close() -------------------------------------------------------------------------------- /cross-validate-learner.py: -------------------------------------------------------------------------------- 1 | # cross-validate-learner.py 2 | # old bailey 3 | # 4 | # test performance of learner on a 5 | # cross-validation sample 6 | 7 | import os, string, re, sys 8 | from bayesian import * 9 | 10 | # set learner type to 'coinflip', 'getwords', 'gettwograms', 'tfidfngrams' 11 | learner = 'tfidfngrams' 12 | 13 | # read the 10 sample files into an array of lists of the form 14 | # samplelist[sample_number][item_number] 15 | sampledir = 'Samples_1830s' 16 | samplelist = [] 17 | for i in range(0, 10): 18 | f = open(sampledir + '\\' + 'sample' + str(i) + '.txt', 'r') 19 | sample = [] 20 | sample = f.readlines() 21 | sample = [x.rstrip() for x in sample] 22 | samplelist.append(sample) 23 | f.close 24 | 25 | # offence being tested 26 | offencedir = 'Offences_1830s' 27 | offencefile = 'theft-simplelarceny.txt' 28 | f = open(offencedir + '\\' + offencefile, 'r') 29 | offencelist = f.readlines() 30 | offencelist = [x.rstrip() for x in offencelist] 31 | f.close() 32 | offencecount = len(offencelist) 33 | 34 | # trials 35 | trialdir = 'Mined_1830s_clean' 36 | 37 | # open output file and write the file header 38 | outfile = 'cross-val-learn.txt' 39 | f = open(outfile, 'w') 40 | f.write('OLD BAILEY Tenfold Cross-Validation Learning Run\n\n') 41 | f.write('Offence: ' + offencedir + '\\' + offencefile + '\n') 42 | if learner == 'coinflip': 43 | f.write('Learning run: coinflip\n') 44 | elif learner == 'getwords': 45 | f.write('Learning run: getwords\n') 46 | elif learner == 'gettwograms': 47 | f.write('Learning run: gettwograms\n') 48 | else: 49 | f.write('Learning run: tfidfngrams\n') 50 | f.write("\nRun, %7s, %7s, %7s, %7s\n" % ('Hit', 'Miss', 'FalseP', 'CorrN')) 51 | 52 | # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 53 | cl = [] 54 | for i in range(0, 1): 55 | 56 | # train a new learner of the appropriate kind for each run 57 | if learner == 'getwords': 58 | cl.append(naivebayes(getwords)) 59 | elif learner == 'gettwograms': 60 | cl.append(naivebayes(gettwograms)) 61 | elif learner == 'tfidfngrams': 62 | cl.append(naivebayes(gettfidfngrams)) 63 | else: 64 | cl.append('coinflip') 65 | 66 | # response categories 67 | hits = 0 68 | misses = 0 69 | falseps = 0 70 | corrns = 0 71 | 72 | # set testing sample to i 73 | print str(i) + ' Loading samples...' 74 | testingsample = [] 75 | testingsample = samplelist[i] 76 | 77 | # set training sample to the concatenation of the others 78 | trainingsample = [] 79 | for j in range(0, i): trainingsample.extend(samplelist[j]) 80 | for j in range((i+1), 10): trainingsample.extend(samplelist[j]) 81 | 82 | # train the learner on training sample 83 | if learner != 'coinflip': 84 | 85 | print str(i) + ' Training' 86 | sys.stdout.flush() 87 | 88 | for r in trainingsample: 89 | trialstr = '' 90 | if learner != 'tfidfngrams': 91 | trialstr = open(trialdir + '\\clean_' + r, 'r').read() 92 | else: 93 | trialstr = open('TFIDF15_2gram_1830s\\tfidf15_2gram_' + r, 'r').read() 94 | print "training" 95 | print trialstr[0:40] 96 | if r in offencelist: cl[i].train(trialstr,'y') 97 | else: cl[i].train(trialstr,'n') 98 | 99 | # test the learner on testing sample 100 | print str(i) + ' Testing' 101 | sys.stdout.flush() 102 | 103 | for t in testingsample: 104 | 105 | # read trial into string 106 | trialstr = '' 107 | if learner != 'tfidfngrams': 108 | trialstr = open(trialdir + '\\clean_' + t, 'r').read() 109 | else: 110 | trialstr = open ('TFIDF15_2gram_1830s\\tfidf15_2gram_' + t, 'r').read() 111 | print "testing" 112 | print trialstr[0:40] 113 | 114 | # use learner to categorize trial 115 | if learner == 'coinflip': 116 | g = coinflip() 117 | else: 118 | g = cl[i].classify(trialstr,default='n') 119 | 120 | # compare categorization with actual category 121 | if t in offencelist: 122 | # hit or miss 123 | if g == 'y': hits+=1 124 | else: misses+=1 125 | else: 126 | # false positive or correct negative 127 | if g == 'y': falseps+=1 128 | else: corrns+=1 129 | 130 | # write out learner performance 131 | f.write("%03d, %07d, %07d, %07d, %07d\n" % (i, hits, misses, falseps, corrns)) 132 | f.flush() 133 | 134 | print 'Done' 135 | sys.stdout.flush() 136 | 137 | # close output file 138 | f.close() -------------------------------------------------------------------------------- /dcbo-ids-chg.pl: -------------------------------------------------------------------------------- 1 | # dcbo-ids-chg.pl 2 | # 21 jan 2006 3 | # 4 | # wj turkel 5 | # http://digitalhistoryhacks.blogspot.com 6 | # 7 | # Uses entries in the online Dictionary of Canadian Biography 8 | # to determine how biography categories ('Aboriginal', 'Accountant', etc.) 9 | # have changed over time. Output into CSV file for analysis with 10 | # spreadsheet: volume numbers are columns, category ids are rows. 11 | # 12 | # LWP code adapted from 13 | # Burke, Perl & LWP (O'Reilly 2002), pp. 27-28, 96-97. 14 | # Max subroutine from 15 | # Schwartz & Phoenix, Learning Perl, 3rd ed (O'Reilly 2001), pp. 65. 16 | 17 | use LWP; 18 | 19 | my $browser; 20 | sub do_POST { 21 | $browser = LWP::UserAgent->new() unless $browser; 22 | my $resp = $browser->post(@_); 23 | return ($resp->content, $resp->status_line, $resp->is_success, $resp) 24 | if wantarray; 25 | return unless $resp->is_success; 26 | return $resp->content; 27 | } 28 | 29 | my $doc_url = 'http://www.biographi.ca/EN/Search.asp'; 30 | 31 | # To speed up processing, the codes expected by the DCB search FORM 32 | # have already been scraped. 33 | 34 | # This goes into Data6 of the search FORM 35 | my %volumes = ( 36 | '01' => '1000-1700', 37 | '02' => '1701-1740', 38 | '03' => '1741-1770', 39 | '04' => '1771-1800', 40 | '05' => '1801-1820', 41 | '06' => '1821-1835', 42 | '07' => '1836-1850', 43 | '08' => '1851-1860', 44 | '09' => '1861-1870', 45 | '10' => '1871-1880', 46 | '11' => '1881-1890', 47 | '12' => '1891-1900', 48 | ); 49 | 50 | # This goes into Data3 of the search FORM 51 | my %categories = ( 52 | '35716' => 'Philanthropists and Soc...', 53 | '35681' => 'Business', 54 | '35712' => 'Legal Professions', 55 | '35719' => 'Accountants', 56 | '35720' => 'Archivists', 57 | '35723' => 'Curators', 58 | '35713' => 'Fur Trade', 59 | '35704' => 'Slaves', 60 | '35726' => 'Librarians', 61 | '35698' => 'Surveyors', 62 | '35718' => 'Sports and recreation', 63 | '35674' => 'Agriculture', 64 | '35697' => 'Scientists', 65 | '35696' => 'Religion', 66 | '35691' => 'Miscellaneous', 67 | '35676' => 'Armed Forces', 68 | '35683' => 'Engineers', 69 | '35709' => 'Interpreters and Transl...', 70 | '35728' => 'Police', 71 | '35689' => 'Mariners', 72 | '35694' => 'Office Holders', 73 | '35711' => 'Labourers and Labour Or...', 74 | '35680' => 'Blacks', 75 | '35695' => 'Politicians', 76 | '35679' => 'Authors', 77 | '35677' => 'Artisans', 78 | '35721' => 'Arts and Entertainment', 79 | '35722' => 'Communications', 80 | '35710' => 'Inventors', 81 | '35730' => 'Social Scientists', 82 | '35707' => 'Criminals', 83 | '35708' => 'Aboriginal people', 84 | '35682' => 'Education', 85 | '35684' => 'Explorers', 86 | '35690' => 'Medicine', 87 | '35675' => 'Architects', 88 | ); 89 | 90 | # We need to keep the category keys in the right order. 91 | my @catarray = sort {$categories{$a} cmp $categories{$b}} (keys %categories); 92 | 93 | # This will be a hash of arrays. 94 | my %categorycount; 95 | 96 | # For each volume (Volumes 1, 3, 9, 10 aren't coded for categories) 97 | foreach my $vol ('02', '04', '05', '06', '07', '08', '11', '12') { 98 | 99 | # For each different category, return count of matching biographies. 100 | foreach my $id (@catarray) { 101 | # Give the user some feedback about progress. 102 | print "Vol: " . $vol . "\tCat: " . $id . "\n"; 103 | # Get the page. 104 | my ($content, $message, $is_success) = do_POST( 105 | $doc_url, 106 | [ 'Data3' => $id, 107 | 'Data4' => '1', 108 | 'Data6' => $vol ], 109 | ); 110 | die "Error $message\n" 111 | unless $is_success; 112 | my $tmpcontent = $content; 113 | # Sometimes there are no matching biographies. 114 | if ($tmpcontent =~ m{Your search criteria has no matching biographies}) { 115 | # $categorycount{$id} = 0; 116 | push @{ $categorycount{$id} }, "0"; 117 | } 118 | else { 119 | $content =~ m{([0-9,]+) biography\(ies\) are available using your current search criteria}is; 120 | my $tmp = $1; 121 | # Remove commas from numbers in the thousands. 122 | $tmp =~ s/\,//; 123 | # $categorycount{$id} = $tmp; 124 | push @{ $categorycount{$id} }, $tmp; 125 | } 126 | # Be considerate to their server. 127 | sleep 2; 128 | } 129 | } 130 | 131 | # Now output the .CSV file 132 | open(OUTPUT, ">ids-chg.csv"); 133 | 134 | # Output count. 135 | foreach my $key (@catarray) { 136 | # print OUTPUT $key . "," . $categories{$key} . "," . $categorycount{$key} . "\n"; 137 | print OUTPUT $key . "," . $categories{$key} . "," . join(",", @{ $categorycount{$key} }) . "\n"; 138 | } 139 | 140 | # Close the file. 141 | close(OUTPUT); 142 | -------------------------------------------------------------------------------- /kiosk.py: -------------------------------------------------------------------------------- 1 | # kiosk.py 2 | # 3 | # wjt 4 | # 3-5 mar 2007 5 | # 6 | # http://digitalhistoryhacks.blogspot.com 7 | # 8 | # based on ideas and code in 9 | # 10 | # http://technobabbler.com/?p=22 11 | # http://gumuz.looze.net/wordpress/index.php/archives/2005/06/06/python-webcam-fun-motion-detection/ 12 | 13 | from VideoCapture import Device 14 | from PIL import Image 15 | import sys, time, pygame 16 | import ImageGrab 17 | from pygame.locals import * 18 | 19 | # camera resolution 20 | camera_width = 640 21 | camera_height = 480 22 | camera_resolution = (camera_width,camera_height) 23 | 24 | # screen resolution 25 | screen_width = 1120 26 | screen_height = 480 27 | screen_resolution = (screen_width,screen_height) 28 | 29 | # offset camera image within screen image 30 | camera_offset = (480,0) 31 | 32 | # frames in interface 33 | frame_color = (141,112,52) 34 | 35 | # preview window 36 | preview_width = 478 37 | preview_height = 478 38 | preview_dimensions = (preview_width,preview_height) 39 | 40 | # for demo purposes, set motion capture region to second photo from left 41 | # (relative to camera image) 42 | detector_left = 132 43 | detector_upper = 2 44 | detector_right = 252 45 | detector_lower = 122 46 | 47 | # detect change of at least pix_threshold in img_threshold percent of pixels 48 | def diff_image(img1, img2, pix_threshold=5, img_threshold=30): 49 | if not img1 or not img2: 50 | return False 51 | img1 = img1.getdata() 52 | img2 = img2.getdata() 53 | pixel_count = len(img1) 54 | pixdiff = 0 55 | for i in range(pixel_count): 56 | if abs(sum(img1[i]) - sum(img2[i])) >= pix_threshold: 57 | pixdiff += 1 58 | diffperc = pixdiff / (pixel_count/100.0) 59 | if diffperc > img_threshold: 60 | # motion detected 61 | return True 62 | 63 | # capture a screen shot 64 | def screen_shot(): 65 | shot = ImageGrab.grab() 66 | filename = str(time.time()) + ".jpg" 67 | shot.save(filename) 68 | 69 | # resize a photo so longest dimension equals max 70 | def resize_photo(p, photo_maxdim=120): 71 | (w, h) = p.size 72 | if w > h: p = p.resize((photo_maxdim,int(round((h * photo_maxdim) / w)))) 73 | else: p = p.resize((int(round((w * photo_maxdim) / h)),photo_maxdim)) 74 | return p 75 | 76 | # photo windows (demo) 77 | photo_width = 120 78 | photo_height = 120 79 | photo_locations = [486, 612, 738, 864, 990] 80 | photo0 = resize_photo(Image.open('mccord/1895-025-199.jpg')) 81 | photo1 = resize_photo(Image.open('mccord/1910-025-1030.jpg')) 82 | photo2 = resize_photo(Image.open('mccord/1915-025-1087.jpg')) 83 | photo3 = resize_photo(Image.open('mccord/1920-025-1041.jpg')) 84 | photo4 = resize_photo(Image.open('mccord/1931-025-203.jpg')) 85 | 86 | # preview has two states: JPEG image and solid rectangle (demo) 87 | preview_images = (resize_photo(Image.open('mccord/1910-025-1030.jpg'), 478), 88 | Image.new("RGB", (478,478), (0,0,0))) 89 | 90 | # switch between preview ON and OFF 91 | toggle = 1 92 | 93 | # 0 = transparent, 255 = opaque 94 | photo_transparency = 200 95 | 96 | # initialization 97 | pygame.init() 98 | cam = Device() 99 | cam.setResolution(camera_width,camera_height) 100 | screen = pygame.display.set_mode(screen_resolution) 101 | pygame.display.set_caption('Kiosk in a Cabinet') 102 | pygame.mouse.set_visible(0) 103 | 104 | while 1: 105 | 106 | # grab two images and clip button region to do motion detection 107 | img1 = cam.getImage() 108 | detect1 = img1.crop((detector_left,detector_upper,detector_right,detector_lower)) 109 | img2 = cam.getImage() 110 | detect2 = img2.crop((detector_left,detector_upper,detector_right,detector_lower)) 111 | 112 | # event handler 113 | for event in pygame.event.get(): 114 | if event.type == pygame.QUIT: sys.exit() 115 | keyinput = pygame.key.get_pressed() 116 | if keyinput[K_s]: screen_shot() 117 | 118 | # compose images on a temporary surface s 119 | s = pygame.Surface(screen.get_size()) 120 | s = s.convert() 121 | 122 | # render webcam image 123 | img = cam.getImage() 124 | camera_surface = pygame.image.frombuffer(img.tostring(), camera_resolution, "RGB") 125 | s.blit(camera_surface, camera_offset) 126 | 127 | # render interface frames 128 | pygame.draw.rect(s, frame_color, [2,2,preview_width,preview_height], 1) 129 | for i in photo_locations: 130 | pygame.draw.rect(s, frame_color, [i,2,photo_width,photo_height], 1) 131 | 132 | # render demo photos (for actual application, replace this with image flow) 133 | photo_surface0 = pygame.image.frombuffer(photo0.tostring(), photo0.size, "RGB") 134 | photo_surface0.set_alpha(photo_transparency) 135 | s.blit(photo_surface0, [photo_locations[0],2]) 136 | photo_surface1 = pygame.image.frombuffer(photo1.tostring(), photo1.size, "RGB") 137 | photo_surface1.set_alpha(photo_transparency) 138 | s.blit(photo_surface1, [photo_locations[1],2]) 139 | photo_surface2 = pygame.image.frombuffer(photo2.tostring(), photo2.size, "RGB") 140 | photo_surface2.set_alpha(photo_transparency) 141 | s.blit(photo_surface2, [photo_locations[2],2]) 142 | photo_surface3 = pygame.image.frombuffer(photo3.tostring(), photo3.size, "RGB") 143 | photo_surface3.set_alpha(photo_transparency) 144 | s.blit(photo_surface3, [photo_locations[3],2]) 145 | photo_surface4 = pygame.image.frombuffer(photo4.tostring(), photo4.size, "RGB") 146 | photo_surface4.set_alpha(photo_transparency) 147 | s.blit(photo_surface4, [photo_locations[4],2]) 148 | 149 | # has photo been chosen? 150 | if diff_image(detect1, detect2): 151 | toggle = 1 - toggle 152 | 153 | # render preview 154 | preview_surface = pygame.image.frombuffer(preview_images[toggle].tostring(), preview_images[toggle].size, "RGB") 155 | s.blit(preview_surface, [2,2]) 156 | 157 | # render temporary surface on the screen 158 | screen.blit(s, (0, 0)) 159 | 160 | # finally make the buffer visible 161 | pygame.display.flip() 162 | 163 | 164 | -------------------------------------------------------------------------------- /compute-doc-freqs.py: -------------------------------------------------------------------------------- 1 | # compute-doc-freqs.py 2 | # old bailey 3 | # 4 | # remove stop words then compute document frequencies 5 | # for all remaining words 6 | 7 | # stores document frequencies in a SQLite DB 8 | 9 | import os, sys, re 10 | from bayesian import * 11 | from pysqlite2 import dbapi2 as sqlite 12 | 13 | stopwords = ['a', 'about', 'above', 'across', 'after', 'afterwards'] 14 | stopwords += ['again', 'against', 'all', 'almost', 'alone', 'along'] 15 | stopwords += ['already', 'also', 'although', 'always', 'am', 'among'] 16 | stopwords += ['amongst', 'amoungst', 'amount', 'an', 'and', 'another'] 17 | stopwords += ['any', 'anyhow', 'anyone', 'anything', 'anyway', 'anywhere'] 18 | stopwords += ['are', 'around', 'as', 'at', 'back', 'be', 'became'] 19 | stopwords += ['because', 'become', 'becomes', 'becoming', 'been'] 20 | stopwords += ['before', 'beforehand', 'behind', 'being', 'below'] 21 | stopwords += ['beside', 'besides', 'between', 'beyond', 'bill', 'both'] 22 | stopwords += ['bottom', 'but', 'by', 'call', 'can', 'cannot', 'cant'] 23 | stopwords += ['co', 'computer', 'con', 'could', 'couldnt', 'cry', 'de'] 24 | stopwords += ['describe', 'detail', 'did', 'do', 'done', 'down', 'due'] 25 | stopwords += ['during', 'each', 'eg', 'eight', 'either', 'eleven', 'else'] 26 | stopwords += ['elsewhere', 'empty', 'enough', 'etc', 'even', 'ever'] 27 | stopwords += ['every', 'everyone', 'everything', 'everywhere', 'except'] 28 | stopwords += ['few', 'fifteen', 'fifty', 'fill', 'find', 'fire', 'first'] 29 | stopwords += ['five', 'for', 'former', 'formerly', 'forty', 'found'] 30 | stopwords += ['four', 'from', 'front', 'full', 'further', 'get', 'give'] 31 | stopwords += ['go', 'had', 'has', 'hasnt', 'have', 'he', 'hence', 'her'] 32 | stopwords += ['here', 'hereafter', 'hereby', 'herein', 'hereupon', 'hers'] 33 | stopwords += ['herself', 'him', 'himself', 'his', 'how', 'however'] 34 | stopwords += ['hundred', 'i', 'ie', 'if', 'in', 'inc', 'indeed'] 35 | stopwords += ['interest', 'into', 'is', 'it', 'its', 'itself', 'keep'] 36 | stopwords += ['last', 'latter', 'latterly', 'least', 'less', 'ltd', 'made'] 37 | stopwords += ['many', 'may', 'me', 'meanwhile', 'might', 'mill', 'mine'] 38 | stopwords += ['more', 'moreover', 'most', 'mostly', 'move', 'much'] 39 | stopwords += ['must', 'my', 'myself', 'name', 'namely', 'neither', 'never'] 40 | stopwords += ['nevertheless', 'next', 'nine', 'no', 'nobody', 'none'] 41 | stopwords += ['noone', 'nor', 'not', 'nothing', 'now', 'nowhere', 'of'] 42 | stopwords += ['off', 'often', 'on','once', 'one', 'only', 'onto', 'or'] 43 | stopwords += ['other', 'others', 'otherwise', 'our', 'ours', 'ourselves'] 44 | stopwords += ['out', 'over', 'own', 'part', 'per', 'perhaps', 'please'] 45 | stopwords += ['put', 'rather', 're', 's', 'same', 'see', 'seem', 'seemed'] 46 | stopwords += ['seeming', 'seems', 'serious', 'several', 'she', 'should'] 47 | stopwords += ['show', 'side', 'since', 'sincere', 'six', 'sixty', 'so'] 48 | stopwords += ['some', 'somehow', 'someone', 'something', 'sometime'] 49 | stopwords += ['sometimes', 'somewhere', 'still', 'such', 'system', 'take'] 50 | stopwords += ['ten', 'than', 'that', 'the', 'their', 'them', 'themselves'] 51 | stopwords += ['then', 'thence', 'there', 'thereafter', 'thereby'] 52 | stopwords += ['therefore', 'therein', 'thereupon', 'these', 'they'] 53 | stopwords += ['thick', 'thin', 'third', 'this', 'those', 'though', 'three'] 54 | stopwords += ['three', 'through', 'throughout', 'thru', 'thus', 'to'] 55 | stopwords += ['together', 'too', 'top', 'toward', 'towards', 'twelve'] 56 | stopwords += ['twenty', 'two', 'un', 'under', 'until', 'up', 'upon'] 57 | stopwords += ['us', 'very', 'via', 'was', 'we', 'well', 'were', 'what'] 58 | stopwords += ['whatever', 'when', 'whence', 'whenever', 'where'] 59 | stopwords += ['whereafter', 'whereas', 'whereby', 'wherein', 'whereupon'] 60 | stopwords += ['wherever', 'whether', 'which', 'while', 'whither', 'who'] 61 | stopwords += ['whoever', 'whole', 'whom', 'whose', 'why', 'will', 'with'] 62 | stopwords += ['within', 'without', 'would', 'yet', 'you', 'your'] 63 | stopwords += ['yours', 'yourself', 'yourselves'] 64 | 65 | # given a list of words, remove any that are 66 | # in a list of stop words 67 | def removeStopwords(wordlist, stopwords): 68 | return [w for w in wordlist if w not in stopwords] 69 | 70 | # given a list of words, remove any that include numerals 71 | def removeNumeralwords(wordlist): 72 | numerals = re.compile('\d+') 73 | l = wordlist[:] 74 | for m in l: 75 | if numerals.match(m): 76 | wordlist.remove(m) 77 | return wordlist 78 | 79 | # return the unique items of a list 80 | def uniqItems(wordlist): 81 | return list(set(wordlist)) 82 | 83 | # given a directory string, return a list of file names 84 | def getFileNames(dirstr): 85 | dircommand = 'dir ' + dirstr + ' /B' 86 | filelist = os.popen(dircommand).readlines() 87 | filelist = [x.rstrip() for x in filelist] 88 | return filelist 89 | 90 | # trials 91 | trialdir = 'Mined_1840s_clean' 92 | triallist = getFileNames(trialdir) 93 | 94 | # document frequencies will be stored in SQLite DB 95 | connection = sqlite.connect('docfreqs1840s.db') 96 | cursor = connection.cursor() 97 | cursor.execute('CREATE TABLE IF NOT EXISTS docfreqs1840s (docterm VARCHAR(50), freq INTEGER)') 98 | cursor.execute('DELETE FROM docfreqs1840s WHERE 1') 99 | 100 | i = 0 101 | for t in triallist: 102 | i+=1 103 | print "%06d %s" % (i, t) 104 | sys.stdout.flush() 105 | trialstr = '' 106 | trialstr = open(trialdir + '\\' + t, 'r').read() 107 | allwords = [] 108 | allwords = trialstr.split(' ') 109 | wordlist = [] 110 | wordlist = removeStopwords(allwords, stopwords) 111 | wordlist = removeNumeralwords(wordlist) 112 | 113 | for w in uniqItems(wordlist): 114 | existingrecord = cursor.execute("SELECT freq FROM docfreqs1840s WHERE docterm='%s'" % (w)).fetchone() 115 | if existingrecord == None: 116 | cursor.execute("INSERT INTO docfreqs1840s VALUES ('%s', 1)" % (w)) 117 | else: 118 | count = long(existingrecord[0]) 119 | cursor.execute("UPDATE docfreqs1840s SET freq=%d WHERE docterm='%s'" % (count+1,w)) 120 | connection.commit() 121 | -------------------------------------------------------------------------------- /phidgets-interface-kit-demo.py: -------------------------------------------------------------------------------- 1 | # phidgets-interface-kit-demo.py 2 | # 3 | # wjt 4 | # 16, 25 mar 2007 5 | # 23 apr 2007 6 | # 7 | # http://digitalhistoryhacks.blogspot.com 8 | # 9 | # Use Python to control Phidgets with 10 | # ctypes interface 11 | # 12 | # This version has support for callbacks 13 | 14 | # from ctypes import * 15 | # import sys 16 | 17 | # class pyPhidget: 18 | # def __init__(self): 19 | # if sys.platform == 'win32': 20 | # self.dll = windll.LoadLibrary("C:\WINDOWS\system32\phidget21.dll") 21 | # else: 22 | # print "Platform not supported" 23 | 24 | # class pyPhidgetInterfaceKit(pyPhidget): 25 | 26 | # def __init__(self,serial): 27 | # pyPhidget.__init__(self) 28 | # self.handle = c_long() 29 | 30 | # self.dll.CPhidgetInterfaceKit_create(byref(self.handle)) 31 | # CPhidgetHandle, Int 32 | # result = self.dll.CPhidget_open(self.handle,c_int(serial)) 33 | # if result: 34 | # print "No such phidget found, serial: %d" %(serial) 35 | # return result 36 | # CPhidgetHandle, long (0 is infinite) 37 | # self.dll.CPhidget_waitForAttachment(self.handle, c_int(0)) 38 | 39 | # CPhidgetHandle, char ** 40 | # devname = c_char_p() 41 | # self.dll.CPhidget_getDeviceName(self.handle, byref(devname)) 42 | # CPhidgetHandle, int * 43 | # devserial = c_int() 44 | # self.dll.CPhidget_getSerialNumber(self.handle, byref(devserial)) 45 | # print "Device attached: %s, serial number: %d" % (devname.value, devserial.value) 46 | 47 | # def close(self): 48 | # CPhidgetHandle 49 | # self.dll.CPhidget_close(self.handle) 50 | # CPhidgetHandle 51 | # self.dll.CPhidget_delete(self.handle) 52 | # print "Device closed" 53 | 54 | def getNumInputs(self): 55 | devnuminputs = c_int() 56 | self.dll.CPhidgetInterfaceKit_getNumInputs(self.handle, byref(devnuminputs)) 57 | return devnuminputs.value 58 | 59 | def getInputState(self, devindex): 60 | devinstate = c_int() 61 | self.dll.CPhidgetInterfaceKit_getInputState(self.handle, c_int(devindex), byref(devinstate)) 62 | return bool(devinstate.value) 63 | 64 | def getNumOutputs(self): 65 | devnumoutputs = c_int() 66 | self.dll.CPhidgetInterfaceKit_getNumOutputs(self.handle, byref(devnumoutputs)) 67 | return devnumoutputs.value 68 | 69 | def getOutputState(self, devindex): 70 | devoutstate = c_int() 71 | self.dll.CPhidgetInterfaceKit_getOutputState(self.handle, c_int(devindex), byref(devoutstate)) 72 | return bool(devoutstate.value) 73 | 74 | def setOutputState(self, devindex, devnewstate): 75 | self.dll.CPhidgetInterfaceKit_setOutputState(self.handle, c_int(devindex), c_int(devnewstate)) 76 | 77 | def getNumSensors(self): 78 | devnumsensors = c_int() 79 | self.dll.CPhidgetInterfaceKit_getNumSensors(self.handle, byref(devnumsensors)) 80 | return devnumsensors.value 81 | 82 | def getRatiometric(self): 83 | devratiometric = c_int() 84 | self.dll.CPhidgetInterfaceKit_getRatiometric(self.handle, byref(devratiometric)) 85 | return devratiometric.value 86 | 87 | def setRatiometric(self, devnewval): 88 | self.dll.CPhidgetInterfaceKit_setRatiometric(self.handle, c_int(devnewval)) 89 | 90 | def getSensorValue(self, devindex): 91 | devsensorval = c_int() 92 | self.dll.CPhidgetInterfaceKit_getSensorValue(self.handle, c_int(devindex), byref(devsensorval)) 93 | return devsensorval.value 94 | 95 | def getSensorRawValue(self, devindex): 96 | devsensorrawval = c_int() 97 | self.dll.CPhidgetInterfaceKit_getSensorRawValue(self.handle, c_int(devindex), byref(devsensorrawval)) 98 | return devsensorrawval.value 99 | 100 | def getSensorChangeTrigger(self, devindex): 101 | devsensorchgtrig = c_int() 102 | self.dll.CPhidgetInterfaceKit_getSensorChangeTrigger(self.handle, c_int(devindex), byref(devsensorchgtrig)) 103 | return devsensorchgtrig.value 104 | 105 | def setSensorChangeTrigger(self, devindex, devnewval): 106 | self.dll.CPhidgetInterfaceKit_setSensorChangeTrigger(self.handle, c_int(devindex), c_int(devnewval)) 107 | 108 | # def setOnSensorChangeHandler(self, devindex): 109 | 110 | # def py_handler(self, a, index, value): 111 | # print "In handler" 112 | # print "self ", str(self) 113 | # print "a ", str(a) 114 | # print "index ", str(index) 115 | # print "value ", str(value) 116 | 117 | # self.dll.CPhidgetInterfaceKit_set_OnSensorChange_Handler 118 | # (self.handle, int (*fptr)(self.handle, void *, int, int), void *) 119 | 120 | # SensorChangeTrigger_Handler = CFUNCTYPE(c_int, c_long, c_void_p, c_int, c_int) 121 | 122 | # callback = SensorChangeTrigger_Handler(py_handler) 123 | 124 | # self.dll.CPhidgetInterfaceKit_set_OnSensorChange_Handler(self.handle, callback, None) 125 | 126 | # intialize 127 | # testphidget = pyPhidgetInterfaceKit(31183) 128 | 129 | # test the various functions that return info about phidget 130 | # print "Number of inputs: %d" % (testphidget.getNumInputs()) 131 | # print "Number of outputs: %d" % (testphidget.getNumOutputs()) 132 | # print "Number of sensors: %d" % (testphidget.getNumSensors()) 133 | 134 | # Turn on LED on Output 0 135 | # testphidget.setOutputState(0,1) 136 | 137 | # Testing nonratiometric Temperature sensor on Sensor 6 138 | # testphidget.setRatiometric(0) 139 | 140 | # Testing ratiometric Light sensor on Sensor 0 141 | # testphidget.setRatiometric(2) 142 | 143 | # Break out of loop by closing NO switch on Input 0 144 | # while not(testphidget.getInputState(0)): 145 | # pass 146 | # print "Sensor 0: %s\t" % (testphidget.getSensorRawValue(0)) 147 | # print "Sensor 6: %s\t" % (testphidget.getSensorRawValue(6)) 148 | 149 | # Test callbacks 150 | 151 | # print "Sensor change trigger 0: %d" % (testphidget.getSensorChangeTrigger(0)) 152 | # print "Setting sensor change trigger 0 to 15" 153 | # testphidget.setSensorChangeTrigger(0, 15) 154 | # print "Sensor change trigger 0: %d" % (testphidget.getSensorChangeTrigger(0)) 155 | 156 | # testphidget.setOnSensorChangeHandler(0) 157 | 158 | # Break out of loop by closing NO switch on Input 0 159 | # while not(testphidget.getInputState(0)): 160 | # pass 161 | 162 | # Turn off LED on Output 0 163 | # testphidget.setOutputState(0,0) 164 | 165 | # clean up 166 | # testphidget.close() -------------------------------------------------------------------------------- /compute-tfidf.py: -------------------------------------------------------------------------------- 1 | # compute-tfidf.py 2 | # old bailey 3 | # 4 | # compute TF/IDF for each term used in a trial and 5 | # sort in descending order 6 | 7 | import os, sys, re 8 | from math import log 9 | from pysqlite2 import dbapi2 as sqlite 10 | 11 | stopwords = ['a', 'about', 'above', 'across', 'after', 'afterwards'] 12 | stopwords += ['again', 'against', 'all', 'almost', 'alone', 'along'] 13 | stopwords += ['already', 'also', 'although', 'always', 'am', 'among'] 14 | stopwords += ['amongst', 'amoungst', 'amount', 'an', 'and', 'another'] 15 | stopwords += ['any', 'anyhow', 'anyone', 'anything', 'anyway', 'anywhere'] 16 | stopwords += ['are', 'around', 'as', 'at', 'back', 'be', 'became'] 17 | stopwords += ['because', 'become', 'becomes', 'becoming', 'been'] 18 | stopwords += ['before', 'beforehand', 'behind', 'being', 'below'] 19 | stopwords += ['beside', 'besides', 'between', 'beyond', 'bill', 'both'] 20 | stopwords += ['bottom', 'but', 'by', 'call', 'can', 'cannot', 'cant'] 21 | stopwords += ['co', 'computer', 'con', 'could', 'couldnt', 'cry', 'de'] 22 | stopwords += ['describe', 'detail', 'did', 'do', 'done', 'down', 'due'] 23 | stopwords += ['during', 'each', 'eg', 'eight', 'either', 'eleven', 'else'] 24 | stopwords += ['elsewhere', 'empty', 'enough', 'etc', 'even', 'ever'] 25 | stopwords += ['every', 'everyone', 'everything', 'everywhere', 'except'] 26 | stopwords += ['few', 'fifteen', 'fifty', 'fill', 'find', 'fire', 'first'] 27 | stopwords += ['five', 'for', 'former', 'formerly', 'forty', 'found'] 28 | stopwords += ['four', 'from', 'front', 'full', 'further', 'get', 'give'] 29 | stopwords += ['go', 'had', 'has', 'hasnt', 'have', 'he', 'hence', 'her'] 30 | stopwords += ['here', 'hereafter', 'hereby', 'herein', 'hereupon', 'hers'] 31 | stopwords += ['herself', 'him', 'himself', 'his', 'how', 'however'] 32 | stopwords += ['hundred', 'i', 'ie', 'if', 'in', 'inc', 'indeed'] 33 | stopwords += ['interest', 'into', 'is', 'it', 'its', 'itself', 'keep'] 34 | stopwords += ['last', 'latter', 'latterly', 'least', 'less', 'ltd', 'made'] 35 | stopwords += ['many', 'may', 'me', 'meanwhile', 'might', 'mill', 'mine'] 36 | stopwords += ['more', 'moreover', 'most', 'mostly', 'move', 'much'] 37 | stopwords += ['must', 'my', 'myself', 'name', 'namely', 'neither', 'never'] 38 | stopwords += ['nevertheless', 'next', 'nine', 'no', 'nobody', 'none'] 39 | stopwords += ['noone', 'nor', 'not', 'nothing', 'now', 'nowhere', 'of'] 40 | stopwords += ['off', 'often', 'on','once', 'one', 'only', 'onto', 'or'] 41 | stopwords += ['other', 'others', 'otherwise', 'our', 'ours', 'ourselves'] 42 | stopwords += ['out', 'over', 'own', 'part', 'per', 'perhaps', 'please'] 43 | stopwords += ['put', 'rather', 're', 's', 'same', 'see', 'seem', 'seemed'] 44 | stopwords += ['seeming', 'seems', 'serious', 'several', 'she', 'should'] 45 | stopwords += ['show', 'side', 'since', 'sincere', 'six', 'sixty', 'so'] 46 | stopwords += ['some', 'somehow', 'someone', 'something', 'sometime'] 47 | stopwords += ['sometimes', 'somewhere', 'still', 'such', 'system', 'take'] 48 | stopwords += ['ten', 'than', 'that', 'the', 'their', 'them', 'themselves'] 49 | stopwords += ['then', 'thence', 'there', 'thereafter', 'thereby'] 50 | stopwords += ['therefore', 'therein', 'thereupon', 'these', 'they'] 51 | stopwords += ['thick', 'thin', 'third', 'this', 'those', 'though', 'three'] 52 | stopwords += ['three', 'through', 'throughout', 'thru', 'thus', 'to'] 53 | stopwords += ['together', 'too', 'top', 'toward', 'towards', 'twelve'] 54 | stopwords += ['twenty', 'two', 'un', 'under', 'until', 'up', 'upon'] 55 | stopwords += ['us', 'very', 'via', 'was', 'we', 'well', 'were', 'what'] 56 | stopwords += ['whatever', 'when', 'whence', 'whenever', 'where'] 57 | stopwords += ['whereafter', 'whereas', 'whereby', 'wherein', 'whereupon'] 58 | stopwords += ['wherever', 'whether', 'which', 'while', 'whither', 'who'] 59 | stopwords += ['whoever', 'whole', 'whom', 'whose', 'why', 'will', 'with'] 60 | stopwords += ['within', 'without', 'would', 'yet', 'you', 'your'] 61 | stopwords += ['yours', 'yourself', 'yourselves'] 62 | 63 | # given a list of words, remove any that are 64 | # in a list of stop words 65 | def removeStopwords(wordlist, stopwords): 66 | return [w for w in wordlist if w not in stopwords] 67 | 68 | # given a list of words, remove any that include numerals 69 | def removeNumeralwords(wordlist): 70 | numerals = re.compile('\d+') 71 | l = wordlist[:] 72 | for m in l: 73 | if numerals.match(m): 74 | wordlist.remove(m) 75 | return wordlist 76 | 77 | # given a directory string, return a list of file names 78 | def getFileNames(dirstr): 79 | dircommand = 'dir ' + dirstr + ' /B' 80 | filelist = os.popen(dircommand).readlines() 81 | filelist = [x.rstrip() for x in filelist] 82 | return filelist 83 | 84 | # trials 85 | trialdir = 'Mined_1840s_clean' 86 | triallist = getFileNames(trialdir) 87 | numdocs = len(triallist) 88 | 89 | # create tfidf directory if it doesn't exist 90 | tfidfdir = 'TFIDF_1840s' 91 | if os.path.exists(tfidfdir) == 0: os.mkdir(tfidfdir) 92 | 93 | # look up document frequencies in SQLite DB 94 | connection = sqlite.connect('docfreqs1840s.db') 95 | cursor = connection.cursor() 96 | 97 | # process each trial 98 | i = 0 99 | for t in triallist: 100 | 101 | # provide feedback for user 102 | i += 1 103 | print 'Processing %06d %s' % (i, t) 104 | sys.stdout.flush() 105 | 106 | # create a dictionary of unique words and word counts from trial 107 | trialstr = '' 108 | trialstr = open(trialdir + '\\' + t, 'r').read() 109 | allwords = trialstr.split(' ') 110 | wordlist = removeStopwords(allwords, stopwords) 111 | wordlist = removeNumeralwords(wordlist) 112 | wordfreq = [wordlist.count(p) for p in wordlist] 113 | dictionary = dict(zip(wordlist,wordfreq)) 114 | 115 | # compute TF/IDF for each term and add to a new dictionary 116 | newdict = {} 117 | for key in dictionary: 118 | getdf = cursor.execute("SELECT freq FROM docfreqs1840s WHERE docterm = '%s'" % (key)).fetchone() 119 | if getdf == None: 120 | print "ERROR: No doc freq for %s" % key 121 | quit() 122 | df = float(getdf[0]) 123 | tf = float(dictionary[key]) 124 | tfidf = log(tf+1.0) * log(numdocs/df) 125 | newdict[key] = tfidf 126 | 127 | # sort TF/IDFs in descending order 128 | aux = [ (newdict[key], key) for key in newdict] 129 | aux.sort() 130 | aux.reverse() 131 | 132 | # write out to text file 133 | trialpattern = re.compile(r'clean_(t-\d+-\d+)', re.UNICODE) 134 | matchid = trialpattern.search(str(t)) 135 | outfile = tfidfdir + '\\' + 'tfidf_' + matchid.group(1) + '.txt' 136 | f = open(outfile, 'w') 137 | for a in aux: 138 | f.write(str(a[1]) + ',' + str(a[0]) + '\n') 139 | f.close() 140 | -------------------------------------------------------------------------------- /bayesiandb.py: -------------------------------------------------------------------------------- 1 | # bayesiandb.py 2 | # old bailey 3 | # 4 | # naive bayesian learner 5 | # adapted from Segaran, Programming Collective Intelligence, Ch. 6 6 | # persists training info in SQLite DB 7 | 8 | from pysqlite2 import dbapi2 as sqlite 9 | 10 | stopwords = ['a', 'about', 'above', 'across', 'after', 'afterwards'] 11 | stopwords += ['again', 'against', 'all', 'almost', 'alone', 'along'] 12 | stopwords += ['already', 'also', 'although', 'always', 'am', 'among'] 13 | stopwords += ['amongst', 'amoungst', 'amount', 'an', 'and', 'another'] 14 | stopwords += ['any', 'anyhow', 'anyone', 'anything', 'anyway', 'anywhere'] 15 | stopwords += ['are', 'around', 'as', 'at', 'back', 'be', 'became'] 16 | stopwords += ['because', 'become', 'becomes', 'becoming', 'been'] 17 | stopwords += ['before', 'beforehand', 'behind', 'being', 'below'] 18 | stopwords += ['beside', 'besides', 'between', 'beyond', 'bill', 'both'] 19 | stopwords += ['bottom', 'but', 'by', 'call', 'can', 'cannot', 'cant'] 20 | stopwords += ['co', 'computer', 'con', 'could', 'couldnt', 'cry', 'de'] 21 | stopwords += ['describe', 'detail', 'did', 'do', 'done', 'down', 'due'] 22 | stopwords += ['during', 'each', 'eg', 'eight', 'either', 'eleven', 'else'] 23 | stopwords += ['elsewhere', 'empty', 'enough', 'etc', 'even', 'ever'] 24 | stopwords += ['every', 'everyone', 'everything', 'everywhere', 'except'] 25 | stopwords += ['few', 'fifteen', 'fifty', 'fill', 'find', 'fire', 'first'] 26 | stopwords += ['five', 'for', 'former', 'formerly', 'forty', 'found'] 27 | stopwords += ['four', 'from', 'front', 'full', 'further', 'get', 'give'] 28 | stopwords += ['go', 'had', 'has', 'hasnt', 'have', 'he', 'hence', 'her'] 29 | stopwords += ['here', 'hereafter', 'hereby', 'herein', 'hereupon', 'hers'] 30 | stopwords += ['herself', 'him', 'himself', 'his', 'how', 'however'] 31 | stopwords += ['hundred', 'i', 'ie', 'if', 'in', 'inc', 'indeed'] 32 | stopwords += ['interest', 'into', 'is', 'it', 'its', 'itself', 'keep'] 33 | stopwords += ['last', 'latter', 'latterly', 'least', 'less', 'ltd', 'made'] 34 | stopwords += ['many', 'may', 'me', 'meanwhile', 'might', 'mill', 'mine'] 35 | stopwords += ['more', 'moreover', 'most', 'mostly', 'move', 'much'] 36 | stopwords += ['must', 'my', 'myself', 'name', 'namely', 'neither', 'never'] 37 | stopwords += ['nevertheless', 'next', 'nine', 'no', 'nobody', 'none'] 38 | stopwords += ['noone', 'nor', 'not', 'nothing', 'now', 'nowhere', 'of'] 39 | stopwords += ['off', 'often', 'on','once', 'one', 'only', 'onto', 'or'] 40 | stopwords += ['other', 'others', 'otherwise', 'our', 'ours', 'ourselves'] 41 | stopwords += ['out', 'over', 'own', 'part', 'per', 'perhaps', 'please'] 42 | stopwords += ['put', 'rather', 're', 's', 'same', 'see', 'seem', 'seemed'] 43 | stopwords += ['seeming', 'seems', 'serious', 'several', 'she', 'should'] 44 | stopwords += ['show', 'side', 'since', 'sincere', 'six', 'sixty', 'so'] 45 | stopwords += ['some', 'somehow', 'someone', 'something', 'sometime'] 46 | stopwords += ['sometimes', 'somewhere', 'still', 'such', 'system', 'take'] 47 | stopwords += ['ten', 'than', 'that', 'the', 'their', 'them', 'themselves'] 48 | stopwords += ['then', 'thence', 'there', 'thereafter', 'thereby'] 49 | stopwords += ['therefore', 'therein', 'thereupon', 'these', 'they'] 50 | stopwords += ['thick', 'thin', 'third', 'this', 'those', 'though', 'three'] 51 | stopwords += ['three', 'through', 'throughout', 'thru', 'thus', 'to'] 52 | stopwords += ['together', 'too', 'top', 'toward', 'towards', 'twelve'] 53 | stopwords += ['twenty', 'two', 'un', 'under', 'until', 'up', 'upon'] 54 | stopwords += ['us', 'very', 'via', 'was', 'we', 'well', 'were', 'what'] 55 | stopwords += ['whatever', 'when', 'whence', 'whenever', 'where'] 56 | stopwords += ['whereafter', 'whereas', 'whereby', 'wherein', 'whereupon'] 57 | stopwords += ['wherever', 'whether', 'which', 'while', 'whither', 'who'] 58 | stopwords += ['whoever', 'whole', 'whom', 'whose', 'why', 'will', 'with'] 59 | stopwords += ['within', 'without', 'would', 'yet', 'you', 'your'] 60 | stopwords += ['yours', 'yourself', 'yourselves', '1', '2', '3', '4', '5'] 61 | stopwords += ['6', '7', '8', '9', '10'] 62 | 63 | # given a list of words, remove any that are 64 | # in a list of stop words 65 | 66 | def removeStopwords(wordlist, stopwords): 67 | return [w for w in wordlist if w not in stopwords] 68 | 69 | # my version of this function removes stop words 70 | # input is a string, output is a dictionary 71 | 72 | def getwords(doc): 73 | allwords = doc.split(' ') 74 | wordlist = removeStopwords(allwords, stopwords) 75 | return dict([(w,1) for w in wordlist]) 76 | 77 | # alternative to getwords returns unique 78 | # ngrams instead 79 | 80 | def gettwograms(doc): 81 | allwords = doc.split(' ') 82 | wordlist = removeStopwords(allwords, stopwords) 83 | ngrams = [' '.join(wordlist[i:i+2]) for i in range(len(wordlist)-1)] 84 | return dict([(w,1) for w in ngrams]) 85 | 86 | def getthreegrams(doc): 87 | allwords = doc.split(' ') 88 | wordlist = removeStopwords(allwords, stopwords) 89 | ngrams = [' '.join(wordlist[i:i+3]) for i in range(len(wordlist)-2)] 90 | return dict([(w,1) for w in ngrams]) 91 | 92 | def getfourgrams(doc): 93 | allwords = doc.split(' ') 94 | wordlist = removeStopwords(allwords, stopwords) 95 | ngrams = [' '.join(wordlist[i:i+4]) for i in range(len(wordlist)-3)] 96 | return dict([(w,1) for w in ngrams]) 97 | 98 | # high tf/idf terms in n-gram context 99 | def gettfidfngrams(doc): 100 | wordlist = doc.split('\n') 101 | return dict([(w,1) for w in wordlist]) 102 | 103 | # coinflip guessing function 104 | def coinflip(): 105 | import random 106 | r = random.randint(0, 1) 107 | if r: return 'y' 108 | else: return 'n' 109 | 110 | class classifier: 111 | def __init__(self,getfeatures,filename=None): 112 | # count feature/category combinations 113 | self.fc={} 114 | # count documents in each category 115 | self.cc={} 116 | self.getfeatures=getfeatures 117 | # N.B. this isn't quite what Segaran has in the book 118 | self.thresholds={} 119 | 120 | def setthreshold(self,cat,t): 121 | self.thresholds[cat]=t 122 | 123 | def getthreshold(self,cat): 124 | if cat not in self.thresholds: return 1.0 125 | return self.thresholds[cat] 126 | 127 | def setdb(self,dbfile): 128 | self.con=sqlite.connect(dbfile) 129 | self.con.execute('create table if not exists fc(feature,category,count)') 130 | self.con.execute('create table if not exists cc(category,count)') 131 | 132 | # increase count of feature/category pair 133 | def incf(self,f,cat): 134 | count=self.fcount(f,cat) 135 | if count==0: 136 | self.con.execute("insert into fc values ('%s','%s',1)" % (f,cat)) 137 | else: 138 | self.con.execute("update fc set count=%d where feature='%s' and category='%s'" % (count+1,f,cat)) 139 | 140 | # increase the count of a category 141 | def incc(self,cat): 142 | count=self.catcount(cat) 143 | if count==0: 144 | self.con.execute("insert into cc values ('%s',1)" % (cat)) 145 | else: 146 | self.con.execute("update cc set count=%d where category='%s'" % (count+1,cat)) 147 | 148 | # number of times a feature has appeared in a category 149 | def fcount(self,f,cat): 150 | res=self.con.execute('select count from fc where feature="%s" and category="%s"' % (f,cat)).fetchone() 151 | if res==None: return 0 152 | else: return float(res[0]) 153 | 154 | # number of items in a category 155 | def catcount(self,cat): 156 | res=self.con.execute('select count from cc where category="%s"' % (cat)).fetchone() 157 | if res==None: return 0 158 | else: return float(res[0]) 159 | 160 | # total number of items 161 | def totalcount(self): 162 | res=self.con.execute('select sum(count) from cc').fetchone(); 163 | if res==None: return 0 164 | else: return res[0] 165 | 166 | # list of all categories 167 | def categories(self): 168 | cur=self.con.execute('select category from cc'); 169 | return [d[0] for d in cur] 170 | 171 | # take item (i.e., document) and classification 172 | def train(self,item,cat): 173 | features=self.getfeatures(item) 174 | # increment count for every feature with this category 175 | for f in features: 176 | self.incf(f,cat) 177 | # increment count for this category 178 | self.incc(cat) 179 | self.con.commit() 180 | 181 | # calculate probabilities 182 | def fprob(self,f,cat): 183 | if self.catcount(cat)==0: return 0 184 | # total number of times this feature appeared in this category 185 | # divided by total number of items in this category 186 | return self.fcount(f,cat)/self.catcount(cat) 187 | 188 | # calculate weighted probabilities 189 | def weightedprob(self,f,cat,prf,weight=1.0,ap=0.5): 190 | # current probability 191 | basicprob=prf(f,cat) 192 | # number of times feature appeared in all categories 193 | totals=sum([self.fcount(f,c) for c in self.categories()]) 194 | # weighted average 195 | bp=((weight*ap)+(totals*basicprob))/(weight+totals) 196 | return bp 197 | 198 | def classify(self,item,default=None): 199 | probs={} 200 | # N.B. I added this 201 | best='n' 202 | # find category with highest probability 203 | max=0.0 204 | for cat in self.categories(): 205 | probs[cat]=self.prob(item,cat) 206 | if probs[cat]>max: 207 | max=probs[cat] 208 | best=cat 209 | # make sure probability exceeds threshold times next best 210 | for cat in probs: 211 | if cat==best: continue 212 | # N.B. I modified this next line - complete kluge! 213 | if probs[cat]*self.getthreshold(best)>probs.get(best, 0.0): return default 214 | # if probs[cat]*self.getthreshold(best)>probs[best]: return default 215 | return best 216 | 217 | class naivebayes(classifier): 218 | def docprob(self,item,cat): 219 | features=self.getfeatures(item) 220 | # multiply probabilities of all features together 221 | p=1 222 | for f in features: 223 | p*=self.weightedprob(f,cat,self.fprob) 224 | return p 225 | 226 | def prob(self,item,cat): 227 | catprob=self.catcount(cat)/self.totalcount() 228 | docprob=self.docprob(item,cat) 229 | return docprob*catprob 230 | 231 | ########## test scaffolding begins 232 | 233 | # def sampletrain(cl): 234 | # cl.train('the quick brown fox jumps','good') 235 | # cl.train('nobody owns the water','good') 236 | # cl.train('buy pharmaceuticals now','bad') 237 | # cl.train('make quick money at the online casino','bad') 238 | # cl.train('the quick rabbit jumps fences','good') 239 | 240 | # cl=classifier(pcigetwords) 241 | # sampletrain(cl) 242 | # print "quick good" 243 | # print cl.fcount('quick', 'good') 244 | # print cl.fprob('quick', 'good') 245 | # print "quick bad" 246 | # print cl.fcount('quick', 'bad') 247 | # print cl.fprob('quick', 'bad') 248 | # print "casino good" 249 | # print cl.fcount('casino', 'good') 250 | # print cl.fprob('casino', 'good') 251 | # print "casino bad" 252 | # print cl.fcount('casino', 'bad') 253 | # print cl.fprob('casino', 'bad') 254 | 255 | # print "weightedprob first pass money good" 256 | # print cl.weightedprob('money','good',cl.fprob) 257 | # sampletrain(cl) 258 | # print "weightedprob 2nd pass money good" 259 | # print cl.weightedprob('money','good',cl.fprob) 260 | 261 | # clnb=naivebayes(pcigetwords) 262 | # sampletrain(clnb) 263 | # print "quick rabbit good" 264 | # print clnb.prob('quick rabbit','good') 265 | # print "quick rabbit bad" 266 | # print clnb.prob('quick rabbit','bad') 267 | # print "quick rabbit classify" 268 | # print clnb.classify('quick rabbit',default='unknown') 269 | # print "quick money classify" 270 | # print clnb.classify('quick money',default='unknown') 271 | 272 | ########## test scaffolding ends 273 | -------------------------------------------------------------------------------- /dcbo-vol1-featurespace.csv: -------------------------------------------------------------------------------- 1 | "ID","ACADIA","AMERICA","BAY","BISHOP","CABOT","CANADA","CAPTAIN","CARTIER","CHAMPLAIN","CHIEF","CHURCH","COAST","COLONY","COMPAGNIE","COMPANY","CONSEIL","COUNCIL","COUNTRY","COURT","ENGLAND","ENGLISH","EXPEDITION","FATHER","FORT","FRANCE","FRENCH","FRONTENAC","GOVERNOR","HBC","HUDSON","HURON","INDIAN","INTENDANT","IROQUOI","ISLAND","JESUIT","KING","LAKE","LAND","LAWRENCE","LIVRE","LONDON","MISSION","MISSIONARY","MONTREAL","NEWFOUNDLAND","PARI","PEACE","PORT-ROYAL","POST","PRIEST","QUEBEC","RIVER","ROYAL","SAILED","SALLE","SETTLEMENT","SETTLER","SHIP","SUPERIOR","TALON","TRADE","TROIS-RIVIERE","VOYAGE","WEST" 2 | "34123",0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0 3 | "34124",1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1 4 | "34125",0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 5 | "34126",0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0 6 | "34127",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0 7 | "34128",0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 8 | "34130",0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,1,1,1,1 9 | "34129",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0 10 | "34131",0,0,1,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,0 11 | "34132",0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0 12 | "34133",1,0,1,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,1,1,0,0,1,0,0,1 13 | "34134",0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0 14 | "34135",1,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0 15 | "34136",0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 16 | "34137",0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1 17 | "34138",0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 18 | "34139",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0 19 | "34140",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 20 | "34141",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0 21 | "34142",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 22 | "34143",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 23 | "34144",1,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0 24 | "34145",1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1 25 | "34146",0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 26 | "34147",0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 27 | "34148",1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0 28 | "34149",1,1,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1 29 | "34150",1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 30 | "34151",0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0 31 | "34152",0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0 32 | "34153",0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0 33 | "34155",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0 34 | "34154",0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 35 | "34156",1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0 36 | "34157",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 37 | "34158",0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 38 | "34159",0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0 39 | "34160",0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1 40 | "34161",0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 41 | "34162",1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0 42 | "34163",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0 43 | "34164",0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 44 | "34165",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1 45 | "34166",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1 46 | "34167",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 47 | "34168",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0 48 | "34169",1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 49 | "34170",0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 50 | "34171",0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0 51 | "34172",0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0 52 | "34173",0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 53 | "34174",0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0 54 | "34175",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0 55 | "34176",0,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1 56 | "34177",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 57 | "34178",1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0 58 | "34179",0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0 59 | "34180",1,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,0 60 | "34181",0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1 61 | "34182",0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0 62 | "34183",1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0 63 | "34184",1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,0 64 | "34185",1,1,1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,1,0,1,0 65 | "34186",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0 66 | "34187",0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0 67 | "34188",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0 68 | "34189",0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 69 | "34190",0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 70 | "34191",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0 71 | "34192",0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0 72 | "34193",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 73 | "34194",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 74 | "34195",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0 75 | "34196",0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0 76 | "34198",1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0 77 | "34199",0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 78 | "34197",0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0 79 | "34200",0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1 80 | "34201",1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0 81 | "34202",1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 82 | "34203",0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1 83 | "34204",0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0 84 | "34205",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0 85 | "34206",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0 86 | "34207",0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 87 | "34208",0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0 88 | "34214",0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,1 89 | "34215",0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0 90 | "34216",0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 91 | "34209",0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 92 | "34210",0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0 93 | "34211",1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 94 | "34212",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1 95 | "34213",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 96 | "34217",0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0 97 | "34218",0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1 98 | "34219",0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0 99 | "34220",0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1 100 | "34221",0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 101 | "34222",0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0 102 | "34223",0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,1 103 | "34224",0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1 104 | "34233",0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 105 | "34232",0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0 106 | "34225",0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0 107 | "34226",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,0 108 | "34227",0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0 109 | "34228",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0 110 | "34229",0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,1,0,1,1 111 | "34230",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 112 | "34231",0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1 113 | "34234",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 114 | "34235",1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1 115 | "34236",0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 116 | "34237",1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 117 | "34238",0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0 118 | "34239",0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0 119 | "34240",0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0 120 | "34241",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0 121 | "34242",0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 122 | "34243",0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0 123 | "34244",0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0 124 | "34245",0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0 125 | "34246",0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0 126 | "34247",0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0 127 | "34248",0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 128 | "34249",0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0 129 | "34250",0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0 130 | "34251",1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,1 131 | "34252",0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0 132 | "34253",1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1 133 | "34254",0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0 134 | "34255",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0 135 | "34256",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0 136 | "34257",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 137 | "34258",0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0 138 | "34259",0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 139 | "34272",1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0 140 | "34260",0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1 141 | "34261",0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0 142 | "34262",0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0 143 | "34263",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0 144 | "34264",0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 145 | "34265",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 146 | "34266",0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 147 | "34267",0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0 148 | "34268",0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0 149 | "34269",1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 150 | "34270",0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1 151 | "34271",0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0 152 | "34273",0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0 153 | "34274",0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 154 | "34275",1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0 155 | "34276",1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0 156 | "34277",0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 157 | "34278",0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 158 | "34279",1,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0 159 | "34280",1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1 160 | "34281",1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0 161 | "34282",0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,1,0 162 | "34283",0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1 163 | "34284",0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 164 | "34285",0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1 165 | "34286",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 166 | "34287",1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0 167 | "34288",1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0 168 | "34289",0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 169 | "34290",1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0 170 | "34291",0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0 171 | "34292",0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 172 | "34293",0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0 173 | "34294",1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0 174 | "34295",0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0,0 175 | "34296",0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,1 176 | "34297",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0 177 | "34298",0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,1,0 178 | "34299",0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0 179 | "34300",1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0 180 | "34301",0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 181 | "34302",0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1 182 | "34303",0,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1 183 | "34304",0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 184 | "34305",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 185 | "34306",0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1 186 | "34318",0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 187 | "34319",0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 188 | "34320",1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1 189 | "34321",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0 190 | "34322",0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0 191 | "34323",0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0 192 | "34324",0,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0 193 | "34307",0,1,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,1,1,0,0 194 | "34308",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 195 | "34309",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 196 | "34310",1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0 197 | "34311",0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0 198 | "34312",0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0 199 | "34313",0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 200 | "34314",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0 201 | "34315",0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 202 | "34316",1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0 203 | "34317",0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0 204 | "34325",0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0 205 | "34326",0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 206 | "34327",0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0 207 | "34328",0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0 208 | "34329",0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1 209 | "34330",0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 210 | "34331",0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0 211 | "34332",0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0 212 | "34333",0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 213 | "34334",0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1 214 | "34335",0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 215 | "34336",0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0 216 | "34337",0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0 217 | "34338",0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 218 | "34342",1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0 219 | "34339",0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 220 | "34340",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1 221 | "34341",1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0 222 | "34343",0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0 223 | "34345",0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0 224 | "34344",0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 225 | "34346",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 226 | "34347",1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0 227 | "34348",0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0 228 | "34349",0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1 229 | "34350",0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0 230 | "34353",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0 231 | "34351",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0 232 | "34352",0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,1 233 | "34354",0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 234 | "34355",0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 235 | "34356",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0 236 | "34357",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 237 | "34358",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0 238 | "34359",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0 239 | "34360",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 240 | "34361",0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0 241 | "34362",1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0 242 | "34363",0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 243 | "34364",0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 244 | "34365",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 245 | "34366",0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0 246 | "34367",0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0 247 | "34368",0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0 248 | "34369",0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 249 | "34370",0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0 250 | "34371",0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 251 | "34372",0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0 252 | "34373",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 253 | "34374",0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1 254 | "34375",0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1 255 | "34376",0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0 256 | "34377",0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,0,0 257 | "34378",0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0 258 | "34379",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 259 | "34380",0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1 260 | "34381",0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0 261 | "34382",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 262 | "34383",0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 263 | "34384",0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 264 | "34385",0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0 265 | "34386",0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 266 | "34387",0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0 267 | "34388",1,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,1,1,1,0 268 | "34389",1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,0 269 | "34390",0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0 270 | "34391",0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 271 | "34396",0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0 272 | "34397",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 273 | "34392",0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,0 274 | "34394",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0 275 | "34393",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 276 | "34395",0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0 277 | "34398",0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1 278 | "34399",1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0 279 | "34400",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 280 | "34401",0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1 281 | "34402",0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,1,0,1,1 282 | "34403",0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0 283 | "34413",0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 284 | "34414",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0 285 | "34415",1,0,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0 286 | "34404",0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 287 | "34405",0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0 288 | "34406",0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1 289 | "34407",0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 290 | "34408",0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0 291 | "34409",0,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,1 292 | "34410",0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1 293 | "34411",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0 294 | "34412",0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0 295 | "34416",1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0 296 | "34417",1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,1 297 | "34418",0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0 298 | "34419",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 299 | "34420",1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0 300 | "34421",0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 301 | "34422",0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1 302 | "34423",0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0 303 | "34424",0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0 304 | "34433",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0 305 | "34425",0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,1 306 | "34426",0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1 307 | "34427",0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1 308 | "34428",1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0 309 | "34430",0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0 310 | "34431",0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 311 | "34432",0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0 312 | "34429",0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0 313 | "34434",0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0 314 | "34435",1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0 315 | "34436",0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0 316 | "34437",0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0 317 | "34438",0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0 318 | "34453",0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0 319 | "34454",0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1 320 | "34455",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 321 | "34456",0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1 322 | "34457",1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 323 | "34458",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0 324 | "34459",0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 325 | "34460",0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0 326 | "34461",0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0 327 | "34462",0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0 328 | "34463",0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0 329 | "34464",0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 330 | "34465",1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0 331 | "34439",0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0 332 | "34440",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0 333 | "34441",0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1 334 | "34442",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0 335 | "34443",0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0 336 | "34444",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 337 | "34445",0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0 338 | "34446",0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 339 | "34447",0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,1,1,0,0 340 | "34448",0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,0 341 | "34449",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 342 | "34450",0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 343 | "34451",0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0 344 | "34452",0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0 345 | "34478",0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 346 | "34479",1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1 347 | "34480",1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,0,0 348 | "34481",0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,0 349 | "34482",0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0 350 | "34483",1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0 351 | "34484",0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 352 | "34485",1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0 353 | "34486",0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1 354 | "34487",1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0 355 | "34488",1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0 356 | "34489",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1 357 | "34490",0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1 358 | "34491",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 359 | "34492",0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 360 | "34493",0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0 361 | "34494",0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0 362 | "34495",0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0 363 | "34496",0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0 364 | "34497",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0 365 | "34466",0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,0 366 | "34467",0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0 367 | "34468",0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,0 368 | "34469",0,1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0 369 | "34470",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 370 | "34471",1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0 371 | "34472",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0 372 | "34503",1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0 373 | "34473",1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,0 374 | "34474",0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 375 | "34476",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 376 | "34475",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0 377 | "34477",1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 378 | "34498",0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0 379 | "34499",0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 380 | "34500",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0 381 | "34501",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0 382 | "34502",0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0 383 | "34504",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 384 | "34505",0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 385 | "34506",0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0 386 | "34507",0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 387 | "34508",0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0 388 | "34509",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 389 | "34510",0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1 390 | "34511",0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 391 | "34512",1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1 392 | "34513",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 393 | "34514",0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,0,0 394 | "34515",0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0 395 | "34516",0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0 396 | "34517",0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0 397 | "34518",1,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0 398 | "34519",0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,1,1,0 399 | "34520",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0 400 | "34521",0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0 401 | "34522",1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0 402 | "34523",0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0 403 | "34524",0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1 404 | "34525",1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0 405 | "34526",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 406 | "34527",0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0 407 | "34528",0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1 408 | "34529",1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0 409 | "34530",1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0 410 | "34531",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0 411 | "34549",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0 412 | "34532",1,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,0 413 | "34533",0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0 414 | "34534",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 415 | "34535",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 416 | "34536",0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 417 | "34537",0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0 418 | "34538",0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 419 | "34539",1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0 420 | "34540",0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 421 | "34541",0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0 422 | "34542",0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0 423 | "34543",0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 424 | "34544",0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0 425 | "34545",1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1 426 | "34546",1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 427 | "34547",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0 428 | "34548",0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,1,1 429 | "34550",0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 430 | "34551",0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0 431 | "34552",0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1 432 | "34553",0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0 433 | "34556",0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,0 434 | "34554",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 435 | "34555",1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0 436 | "34557",0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0 437 | "34558",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 438 | "34559",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0 439 | "34560",0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0 440 | "34561",0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 441 | "34562",0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0 442 | "34563",1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 443 | "34564",0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0 444 | "34565",0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,0,1,0 445 | "34566",1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0 446 | "34567",1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1 447 | "34568",0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 448 | "34569",0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,1 449 | "34570",0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 450 | "34571",0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 451 | "34572",1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 452 | "34573",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0 453 | "34574",1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1 454 | "34575",0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0 455 | "34576",0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 456 | "34605",0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0 457 | "34577",0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 458 | "34583",0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0 459 | "34578",0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 460 | "34579",0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 461 | "34606",0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0 462 | "34580",0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0 463 | "34581",0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0 464 | "34582",1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,0 465 | "34584",0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 466 | "34607",0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0 467 | "34585",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0 468 | "34586",1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1 469 | "34587",0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0 470 | "34588",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 471 | "34589",1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0 472 | "34590",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0 473 | "34591",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0 474 | "34592",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 475 | "34593",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0 476 | "34594",0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0 477 | "34595",0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0 478 | "34596",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0 479 | "34597",0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,0,1 480 | "34598",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0 481 | "34599",0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0 482 | "34600",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 483 | "34603",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 484 | "34601",0,1,0,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,0,1 485 | "34602",0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 486 | "34604",0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0 487 | "34610",0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0 488 | "34608",1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0 489 | "34609",1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0 490 | "34611",0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0 491 | "34612",0,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0 492 | "34613",0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 493 | "34614",1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0 494 | "34615",1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0 495 | "34616",0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,0 496 | "34617",0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1 497 | "34618",0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 498 | "34619",1,0,1,0,0,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0 499 | "34634",0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1 500 | "34620",0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0 501 | "34621",1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1 502 | "34622",0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0 503 | "34623",0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0 504 | "34624",1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0 505 | "34625",1,0,1,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,0 506 | "34626",0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0 507 | "34627",0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0 508 | "34628",1,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0 509 | "34629",0,0,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1 510 | "34630",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 511 | "34631",0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0 512 | "34632",0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0 513 | "34633",0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1 514 | "34635",1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0 515 | "34636",0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0 516 | "34637",0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0 517 | "34638",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1 518 | "34640",1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,0,1 519 | "34641",1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0 520 | "34639",0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 521 | "34642",0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0 522 | "34643",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 523 | "34644",0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0 524 | "34645",0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0 525 | "34646",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 526 | "34647",0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0 527 | "34648",0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 528 | "34649",0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1 529 | "34650",1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1 530 | "34651",0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0 531 | "34652",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0 532 | "34653",0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 533 | "34654",0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0 534 | "34655",0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0 535 | "34656",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 536 | "34657",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0 537 | "34658",0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0 538 | "34659",0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,1,0 539 | "34660",0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0,0,0,0,0 540 | "34661",1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0 541 | "34662",0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0 542 | "34663",1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 543 | "34664",0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 544 | "34665",0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 545 | "34666",0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0 546 | "34667",0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 547 | "34668",0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 548 | "34669",0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,1 549 | "34670",1,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 550 | "34671",0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0 551 | "34673",0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0 552 | "34674",0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0 553 | "34672",0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0 554 | "34675",0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0 555 | "34676",0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 556 | "34677",0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0 557 | "34678",1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 558 | "34679",0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 559 | "34680",0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,1 560 | "34681",0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 561 | "34682",0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0 562 | "34683",0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0 563 | "34684",1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,0,0,0,0,0 564 | "34685",0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 565 | "34686",0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 566 | "34687",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 567 | "34688",0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0 568 | "34689",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 569 | "34690",0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 570 | "34691",1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0 571 | "34692",0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0 572 | "34693",0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 573 | "34694",0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1 574 | "34695",0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0 575 | "34696",0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0 576 | "34697",0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0 577 | "34698",0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0 578 | "34699",0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0 579 | "34700",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0 580 | "34701",0,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0 581 | "34702",0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 582 | "34703",0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0 583 | "34704",1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0 584 | "34705",0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1 585 | "34706",0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1 586 | "34707",0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 587 | "34708",0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 588 | "34709",0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1 589 | "34710",0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0 590 | "34711",0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0 591 | "34712",1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0 592 | "34713",0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 593 | "34714",0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 --------------------------------------------------------------------------------