coriolis/crlcore/etc/common/patterns.py

785 lines
29 KiB
Python

# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Universit 2019-2021, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./etc/common/patterns.py" |
# +-----------------------------------------------------------------+
import sys
import math
import helpers
from helpers import irange
from helpers.io import ErrorMessage
from helpers.io import WarningMessage
class Pattern ( object ):
hexaToPatternLUT = { '0':' '
, '1':' X'
, '2':' X '
, '3':' XX'
, '4':' X '
, '5':' X X'
, '6':' XX '
, '7':' XXX'
, '8':'X '
, '9':'X X'
, 'a':'X X '
, 'b':'X XX'
, 'c':'XX '
, 'd':'XX X'
, 'e':'XXX '
, 'f':'XXXX'}
def __init__ ( self, name='noname', bits=[], hexa='' ):
self._name = name
self._bits = []
self._hexa = ''
self._side = 0
if bits: self._setFromBits(bits)
if hexa: self._setFromHexa(hexa)
return
def empty ( self ):
if not self._bits and not self._hexa: return True
return False
def _setName ( self, name ): self._name = name
def _getName ( self ): return self._name
def _toHexa ( self ):
hexasLSB = []
for line in self._bits:
byte = 0
for i in range(len(line)):
if i != 0 and i%4 == 0:
hexasLSB += [ hex(byte)[2:] ]
byte = 0
byte = byte << 1
if line[i] != ' ': byte += 1
hexasLSB += [ hex(byte)[2:] ]
# Convert in MSB mode. Invert the bytes by pairs.
self._hexa = ''
for i in irange(len(hexasLSB)/2):
self._hexa += hexasLSB[i*2+1] + hexasLSB[i*2]
return self._hexa
def _fromHexa ( self ):
self._bits = []
side = math.sqrt(4*len(self._hexa))
if pow(side,2) != 4*len(self._hexa):
print( '[ERROR] The pattern is not square ({} self._bits).'.format(4*len(self._hexa)))
return None
side /= 4
# Convert from MSB mode. Invert the bytes by pairs.
hexasLSB = ''
for i in range(len(self._hexa)/2):
hexasLSB += self._hexa[i*2+1] + self._hexa[i*2]
line = ''
for i in range(len(hexasLSB)):
if i != 0 and i%side == 0:
self._bits += [ line ]
line = ''
line += Pattern.hexaToPatternLUT[hexasLSB[i].lower()]
self._bits += [ line ]
#self._bits.reverse()
return self._bits
def _setFromHexa ( self, hexa ):
self._hexa = hexa
self._side = math.sqrt(4*len(self._hexa))
if pow(self._side,2) != 4*len(self._hexa):
raise ErrorMessage( 1, 'The pattern is not square (%d bits).'
% (4*len(self._hexa)) )
return
self._fromHexa()
return
def _setFromBits ( self, bits ):
self._bits = bits
self._side = len(bits)
for line in bits:
if self._side != len(line):
raise ErrorMessage( 1, 'The pattern is not square (%dx%d bits).'
% (len(line),len(self._bits)) )
self._toHexa()
return
def _getHexa ( self ): return self._hexa
def _getBits ( self ): return self._bits
def printBits ( self ):
s = ''
side = len(self._bits[0])
s += '+%s+\n' % ('-'*side)
for line in self._bits:
s += '|%s|\n' % line
s += '+%s+' % ('-'*side)
return s
def printHexa ( self ):
return self._hexa
def __str__ ( self ):
return self._hexa
hexa = property(_getName,_setName)
hexa = property(_getHexa,_setFromHexa)
bits = property(_getBits,_setFromBits)
LUT = {}
def add ( **keywords ):
global LUT
try:
if not 'name' in keywords:
raise ErrorMessage(1,['patterns.add(): Malformed pattern, missing "name" argument.', str(keywords) ])
if ('bits' in keywords) and ('hexa' in keywords):
w = WarningMessage( 'patterns.add(): Pattern "%s" has both bits & hexa, ignoring hexa.' % keywords['name'] )
print( w )
del keywords['hexa']
LUT[ keywords['name'] ] = Pattern( **keywords )
except Exception as e:
helpers.io.catch( e )
return
def toHexa ( key ):
global LUT
if isinstance(key,int) or not (key in LUT): return key
return LUT[key].hexa
add( name='crux.8'
, bits=[ ' '
, ' X '
, ' X '
, ' XXXXX '
, ' X '
, ' X '
, ' '
, ' ' ] )
add( name='slash.8'
, bits=[ ' X X'
, ' X X '
, ' X X '
, 'X X '
, ' X X'
, ' X X '
, ' X X '
, 'X X ' ] )
add( name='hash.8'
, bits=[ 'XXX XXX '
, 'XX XXX X'
, 'X XXX XX'
, ' XXX XXX'
, 'XXX XXX '
, 'XX XXX X'
, 'X XXX XX'
, ' XXX XXX' ] )
add( name='urgo.8'
, bits=[ 'XXX XXXX' # feffffffefffffff
, 'XXXXXXXX'
, 'XXXXXXXX'
, 'XXXXXXXX'
, 'XXXXXXX '
, 'XXXXXXXX'
, 'XXXXXXXX'
, 'XXXXXXXX' ] )
add( name='antihash0.8'
, bits=[ ' XXX XXX' # 77bbddee77bbddee
, 'X XXX XX'
, 'XX XXX X'
, 'XXX XXX '
, ' XXX XXX'
, 'X XXX XX'
, 'XX XXX X'
, 'XXX XXX ' ] )
add( name='antihash1.8'
, bits=[ 'X XXX XX' # bbddee77bbddee77
, 'XX XXX X'
, 'XXX XXX '
, ' XXX XXX'
, 'X XXX XX'
, 'XX XXX X'
, 'XXX XXX '
, ' XXX XXX' ] )
add( name='poids2.8'
, bits=[ 'X X X X ' # aa55aa55aa55aa55
, ' X X X X'
, 'X X X X '
, ' X X X X'
, 'X X X X '
, ' X X X X'
, 'X X X X '
, ' X X X X' ] )
add( name='poids4.8'
, bits=[ 'X X ' # 8800220088002200
, ' '
, ' X X '
, ' '
, 'X X '
, ' '
, ' X X '
, ' ' ] )
add( name='antipoids2.8'
, bits=[ ' # # # #' # 55aa55aa55aa55aa
, '# # # # '
, ' # # # #'
, '# # # # '
, ' # # # #'
, '# # # # '
, ' # # # #'
, '# # # # ' ] )
add( name='light_antihash0.8'
, bits=[ 'X X ' # 8822882288228822
, ' X X '
, 'X X '
, ' X X '
, 'X X '
, ' X X '
, 'X X '
, ' X X ' ] )
add( name='light_antihash1.8'
, bits=[ ' X X ' # 4411441144114411
, ' X X'
, ' X X '
, ' X X'
, ' X X '
, ' X X'
, ' X X '
, ' X X' ] )
add( name='light_antihash2.8'
, bits=[ ' X X ' # 2288228822882288
, 'X X '
, ' X X '
, 'X X '
, ' X X '
, 'X X '
, ' X X '
, 'X X ' ] )
add( name='light_antislash0.8'
, bits=[ 'X X ' # 8844221188442211
, ' X X '
, ' X X '
, ' X X'
, 'X X '
, ' X X '
, ' X X '
, ' X X' ] )
add( name='urgo.32'
, bits=[ 'XXXXXXXXXXXX XXXXXXXXXXXXXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX '
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX '
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX '
, ' XXXXXXXXXXXXXXXXXXXXXX '
, ' XXXXXXXXXXXXXXXXXXXXXX '
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX '
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX '
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX '
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXXX' ] )
add( name='slash.32'
, bits=[ ' XXXX XXX'
, ' XXXX XXXX'
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, 'XXXX XXXX '
, 'XXX XXXX X'
, 'XX XXXX XX'
, 'X XXXX XXX'
, ' XXXX XXXX'
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, ' XXXX XXXX '
, 'XXXX XXXX '
, 'XXX XXXX '
, 'XX XXXX ' ] )
add( name='antihash0.32'
, bits=[ ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX'
, 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX'
, 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX'
, 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX'
, 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX'
, 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX'
, 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX'
, 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX'
, 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX'
, 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX'
, 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX'
, 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX'
, 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X'
, 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX '
, ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX'
, 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX'
, 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX'
, 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX'
, 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX'
, 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX'
, 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX'
, 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX'
, 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX'
, 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX'
, 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX'
, 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX'
, 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X'
, 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ' ] )
add( name='antihash1.32'
, bits=[ 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX'
, 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX'
, 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX'
, 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX'
, 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX'
, 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX'
, 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX'
, 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX'
, 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X'
, 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX '
, ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX'
, 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX'
, 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX'
, 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX'
, 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX'
, 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX'
, 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX'
, 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX'
, 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX'
, 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX'
, 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX'
, 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX'
, 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X'
, 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX '
, ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX'
, 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX'
, 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX'
, 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX' ] )
add( name='poids2.32'
, bits=[ ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' ' ] )
add( name='poids4.32'
, bits=[ ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' '
, ' '
, ' XX XX '
, ' XX XX '
, ' ' ] )
add( name='antipoids2.32'
, bits=[ ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' '
, ' '
, ' XX XX XX XX '
, ' XX XX XX XX '
, ' ' ] )
add( name='antislash.32'
, bits=[ 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X'
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X' ] )
add( name='antislash2.32'
, bits=[ 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X ' ] )
add( name='antislash3.32'
, bits=[ ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X ' ] )
add( name='antislash4.32'
, bits=[ ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X ' ] )
add( name='antislash5.32'
, bits=[ ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, ' X X '
, 'X X ' ] )
add( name='diffusion.32'
, bits=[ 'XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX'
, 'X XXXXXXXXXX XXXXXXXXX'
, 'XX XXXXXXXXXX XXXXXXXX'
, 'XXX XXXXXXXXXX XXXXXXX'
, 'XXXX XXXXXXXXXX XXXXXX'
, 'XXXXX XXXXXXXXXX XXXXX'
, 'XXXXXX XXXXXXXXXX XXXX'
, 'XXXXXXX XXXXXXXXXX XXX'
, 'XXXXXXXX XXXXXXXXXX XX'
, 'XXXXXXXXX XXXXXXXXXX X'
, 'XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX '
, ' XXXXXXXXXX XXXXXXXXXX'
, 'X XXXXXXXXXX XXXXXXXXX'
, 'XX XXXXXXXXXX XXXXXXXX'
, 'XXX XXXXXXXXXX XXXXXXX'
, 'XXXX XXXXXXXXXX XXXXXX'
, 'XXXXX XXXXXXXXXX XXXXX'
, 'XXXXXX XXXXXXXXXX XXXX'
, 'XXXXXXX XXXXXXXXXX XXX'
, 'XXXXXXXX XXXXXXXXXX XX'
, 'XXXXXXXXX XXXXXXXXXX X' ] )
add( name='active.32'
, bits=[ ' XXXXXXXXXXXXX XXXXXXXXXXXXX'
, 'X XXXXXXXXXXXXX XXXXXXXXXXXX'
, 'XX XXXXXXXXXXXXX XXXXXXXXXXX'
, 'XXX XXXXXXXXXXXXX XXXXXXXXXX'
, 'XXXX XXXXXXXXXXXXX XXXXXXXXX'
, 'XXXXX XXXXXXXXXXXXX XXXXXXXX'
, 'XXXXXX XXXXXXXXXXXXX XXXXXXX'
, 'XXXXXXX XXXXXXXXXXXXX XXXXXX'
, 'XXXXXXXX XXXXXXXXXXXXX XXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXX XXXX'
, 'XXXXXXXXXX XXXXXXXXXXXXX XXX'
, 'XXXXXXXXXXX XXXXXXXXXXXXX XX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXX X'
, 'XXXXXXXXXXXXX XXXXXXXXXXXXX '
, ' XXXXXXXXXXXXX XXXXXXXXXXXXX '
, ' XXXXXXXXXXXXX XXXXXXXXXXXXX '
, ' XXXXXXXXXXXXX XXXXXXXXXXXXX'
, 'X XXXXXXXXXXXXX XXXXXXXXXXXX'
, 'XX XXXXXXXXXXXXX XXXXXXXXXXX'
, 'XXX XXXXXXXXXXXXX XXXXXXXXXX'
, 'XXXX XXXXXXXXXXXXX XXXXXXXXX'
, 'XXXXX XXXXXXXXXXXXX XXXXXXXX'
, 'XXXXXX XXXXXXXXXXXXX XXXXXXX'
, 'XXXXXXX XXXXXXXXXXXXX XXXXXX'
, 'XXXXXXXX XXXXXXXXXXXXX XXXXX'
, 'XXXXXXXXX XXXXXXXXXXXXX XXXX'
, 'XXXXXXXXXX XXXXXXXXXXXXX XXX'
, 'XXXXXXXXXXX XXXXXXXXXXXXX XX'
, 'XXXXXXXXXXXX XXXXXXXXXXXXX X'
, 'XXXXXXXXXXXXX XXXXXXXXXXXXX '
, ' XXXXXXXXXXXXX XXXXXXXXXXXXX '
, ' XXXXXXXXXXXXX XXXXXXXXXXXXX ' ] )