Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamMini.activity
diff options
context:
space:
mode:
authorNat <natcl@hotmail.com>2007-09-13 15:55:52 (GMT)
committer Nat <natcl@hotmail.com>2007-09-13 15:55:52 (GMT)
commite12dbff4dda5aafbaac98f75f0467ef00dc06c32 (patch)
tree52f74f5a699ca1a2827b333e76a7225b7d768256 /TamTamMini.activity
parentb94ccdfd2329ed2d1128a4392e2f67b1e6b704da (diff)
Activity split
Diffstat (limited to 'TamTamMini.activity')
-rw-r--r--TamTamMini.activity/Mini/Fillin.py105
-rw-r--r--TamTamMini.activity/Mini/GenRythm.py80
-rw-r--r--TamTamMini.activity/Mini/KeyboardStandAlone.py142
-rwxr-xr-xTamTamMini.activity/Mini/Loop.py210
-rw-r--r--TamTamMini.activity/Mini/MiniSequencer.py139
-rw-r--r--TamTamMini.activity/Mini/NoteStdAlone.py103
-rw-r--r--TamTamMini.activity/Mini/RythmGenerator.py77
-rw-r--r--TamTamMini.activity/Mini/__init__.py0
-rwxr-xr-xTamTamMini.activity/Mini/lps.py242
-rw-r--r--TamTamMini.activity/Mini/miniTamTamMain.py823
-rw-r--r--TamTamMini.activity/Mini/miniToolbars.py152
-rw-r--r--TamTamMini.activity/NEWS71
-rw-r--r--TamTamMini.activity/TamTamMini.py175
-rw-r--r--TamTamMini.activity/activity/activity-tamtam.svg24
-rw-r--r--TamTamMini.activity/activity/activity.info6
l---------TamTamMini.activity/common1
-rw-r--r--TamTamMini.activity/icons/keyrec.svg13
-rw-r--r--TamTamMini.activity/icons/loop.svg13
-rw-r--r--TamTamMini.activity/icons/micrec1.svg11
-rw-r--r--TamTamMini.activity/icons/micrec2.svg13
-rw-r--r--TamTamMini.activity/icons/micrec3.svg15
-rw-r--r--TamTamMini.activity/icons/micrec4.svg13
-rw-r--r--TamTamMini.activity/icons/micrec5.svg14
-rw-r--r--TamTamMini.activity/icons/micrec6.svg15
-rw-r--r--TamTamMini.activity/icons/minusrec.svg15
-rw-r--r--TamTamMini.activity/icons/overrec.svg15
-rw-r--r--TamTamMini.activity/icons/rec1.svg11
-rw-r--r--TamTamMini.activity/icons/rec2.svg13
-rw-r--r--TamTamMini.activity/icons/rec3.svg15
-rw-r--r--TamTamMini.activity/icons/rec4.svg13
-rw-r--r--TamTamMini.activity/icons/rec5.svg14
-rw-r--r--TamTamMini.activity/icons/rec6.svg15
-rw-r--r--TamTamMini.activity/setup.py21
33 files changed, 2589 insertions, 0 deletions
diff --git a/TamTamMini.activity/Mini/Fillin.py b/TamTamMini.activity/Mini/Fillin.py
new file mode 100644
index 0000000..162f8ef
--- /dev/null
+++ b/TamTamMini.activity/Mini/Fillin.py
@@ -0,0 +1,105 @@
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+import gobject
+
+from RythmGenerator import *
+from common.Util.CSoundClient import new_csound_client
+from common.Util.NoteDB import Note
+import common.Config as Config
+
+class Fillin:
+ def __init__( self, nbeats, tempo, instrument, reverb, volume ):
+ self.notesList = []
+ self.barCount = 0
+ self.gate = 0
+ self.nbeats = nbeats
+ self.tempo = tempo
+ self.instrument = instrument
+ self.reverb = reverb
+ self.volume = volume
+ self.onsets = []
+ self.pitchs = []
+ self.playBackTimeout = None
+ self.csnd = new_csound_client()
+
+ def reset( self ):
+ self.barCount = 0
+ self.gate = 0
+
+ def setInstrument( self, instrument ):
+ self.instrument = instrument
+
+ def setBeats( self, nbeats ):
+ if self.playBackTimeout != None:
+ gobject.source_remove( self.playBackTimeout )
+
+ self.nbeats = nbeats
+ self.clear()
+ self.reset()
+
+ def setTempo( self, tempo ):
+ self.tempo = tempo
+ if self.playBackTimeout != None:
+ gobject.source_remove( self.playBackTimeout )
+ self.play()
+
+ def setReverb( self, reverb ):
+ self.reverb = reverb
+
+ def setVolume( self, volume ):
+ self.volume = volume
+
+ def play( self ):
+ if self.playBackTimeout == None:
+ self.playbackTimeout = gobject.timeout_add( int(60000/self.tempo/8), self.handleClock )
+ self.handleClock()
+
+ def stop( self ):
+ if self.playBackTimeout != None:
+ gobject.source_remove( self.playBackTimeout )
+ self.clear()
+
+ def clear( self ):
+ if self.notesList:
+ for n in self.notesList:
+ self.csnd.loopDelete(n)
+ self.notesList = []
+
+ def handleClock( self ):
+ tick = self.csnd.loopGetTick()
+ if tick < ( Config.TICKS_PER_BEAT / 2 + 1 ):
+ if self.gate == 0:
+ self.gate = 1
+ self.barCount += 1
+ self.barCount %= 4
+ if self.barCount == 1:
+ self.clear()
+
+ if tick > ( ( Config.TICKS_PER_BEAT * self.nbeats ) - ( Config.TICKS_PER_BEAT / 2 ) - 1 ):
+ if self.gate == 1:
+ self.gate = 0
+ if self.barCount == 3:
+ self.regenerate()
+ return True
+
+ def unavailable( self, onsets, pitchs ):
+ self.onsets = onsets
+ self.pitchs = pitchs
+
+ def regenerate(self):
+ def flatten(ll):
+ rval = []
+ for l in ll:
+ rval += l
+ return rval
+ i = 500
+ self.notesList= []
+ for x in flatten( generator(self.instrument, self.nbeats, 0.4, 0.1, self.reverb) ):
+ if x.onset not in self.onsets or x.pitch not in self.pitchs:
+ x.amplitude = x.amplitude*self.volume
+ n = Note(0, x.trackId, i, x)
+ self.notesList.append(n)
+ i += 1
+ self.csnd.loopPlay(n,1) #add as active
+
diff --git a/TamTamMini.activity/Mini/GenRythm.py b/TamTamMini.activity/Mini/GenRythm.py
new file mode 100644
index 0000000..330e174
--- /dev/null
+++ b/TamTamMini.activity/Mini/GenRythm.py
@@ -0,0 +1,80 @@
+import random
+import common.Config as Config
+
+from common.Generation.GenerationConstants import GenerationConstants
+from common.Generation.Utils import *
+
+class GenRythm:
+ def drumRythmSequence(self, instrumentName, nbeats, density, regularity ):
+ rythmSequence = []
+ binSelection = []
+ downBeats = []
+ upBeats = []
+ beats = []
+ countDown = 0
+ onsetTime = None
+
+ if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.PUNCH:
+ registerDensity = 0.5
+ downBeatRecurence = 4
+ downBeats = [x for x in GenerationConstants.DRUM_PUNCH_ACCENTS[ nbeats ]]
+ for downBeat in downBeats:
+ upBeats.append( downBeat + Config.TICKS_PER_BEAT / 2 )
+
+ if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.LOW:
+ registerDensity =1
+ downBeatRecurence = 4
+ downBeats = [x for x in GenerationConstants.DRUM_LOW_ACCENTS[ nbeats ]]
+ for downBeat in downBeats:
+ upBeats.append( downBeat + Config.TICKS_PER_BEAT / 2 )
+
+ if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.MID:
+ registerDensity = .75
+ downBeatRecurence = 1
+ downBeats = [x for x in GenerationConstants.DRUM_MID_ACCENTS[ nbeats ]]
+ for downBeat in downBeats:
+ upBeats.append( downBeat + Config.TICKS_PER_BEAT / 4 )
+
+ if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.HIGH:
+ registerDensity = 1.5
+ downBeatRecurence = 1
+ downBeats = [x for x in GenerationConstants.DRUM_HIGH_ACCENTS[ nbeats ]]
+ for downBeat in downBeats:
+ upBeats.append( downBeat + Config.TICKS_PER_BEAT / 4 )
+
+ realDensity = density * registerDensity
+ if realDensity > 1.:
+ realDensity = 1.
+
+ list = range( int( realDensity * len( downBeats ) ) )
+ for i in list:
+ if random.random() < ( regularity * downBeatRecurence ) and binSelection.count( 1 ) < len( downBeats ):
+ binSelection.append( 1 )
+ else:
+ if binSelection.count( 0 ) < len( downBeats ):
+ binSelection.append( 0 )
+ else:
+ binSelection.append( 1 )
+
+ countDown = binSelection.count( 1 )
+
+ length = len(downBeats) - 1
+ for i in range( countDown ):
+ ran1 = random.randint(0, length)
+ ran2 = random.randint(0, length)
+ randMin = min(ran1, ran2)
+ onsetTime = downBeats.pop(randMin)
+ rythmSequence.append( onsetTime )
+ length -= 1
+
+ length = len(upBeats) - 1
+ for i in range( len( binSelection ) - countDown ):
+ ran1 = random.randint(0, length)
+ ran2 = random.randint(0, length)
+ randMin = min(ran1, ran2)
+ onsetTime = upBeats.pop(randMin)
+ rythmSequence.append( onsetTime )
+ length -= 1
+
+ rythmSequence.sort()
+ return rythmSequence
diff --git a/TamTamMini.activity/Mini/KeyboardStandAlone.py b/TamTamMini.activity/Mini/KeyboardStandAlone.py
new file mode 100644
index 0000000..e3c3424
--- /dev/null
+++ b/TamTamMini.activity/Mini/KeyboardStandAlone.py
@@ -0,0 +1,142 @@
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+
+import common.Config as Config
+from common.Generation.GenerationConstants import GenerationConstants
+from common.Util.NoteDB import Note
+from common.Util.CSoundNote import CSoundNote
+from common.Util.CSoundClient import new_csound_client
+
+KEY_MAP_PIANO = Config.KEY_MAP_PIANO
+
+#log = file('/home/olpc/log.tamtam','w')
+
+class KeyboardStandAlone:
+ def __init__( self, recordingFunction, adjustDurationFunction, getCurrentTick, getPlayState, loop ):
+ self.csnd = new_csound_client()
+ self.recording = recordingFunction
+ self.adjustDuration = adjustDurationFunction
+ self.getPlayState = getPlayState
+ self.key_dict = dict()
+ self.onset_dict = dict()
+ self.trackCount = 0
+ self.instrument = 'flute'
+ self.reverb = 0
+ self.loop = loop
+ self.loopSustain = False
+ self.sustainedLoop = []
+
+ def setInstrument( self , instrument ):
+ self.instrument = instrument
+
+ def setReverb(self , reverb):
+ self.reverb = reverb
+
+ def onKeyPress(self,widget,event, volume):
+ key = event.hardware_keycode
+ if key == 50 or key == 62: #Left Shift
+ self.loopSustain = True
+
+ # If the key is already in the dictionnary, exit function (to avoir key repeats)
+ if self.key_dict.has_key(key):
+ return
+
+ if key in Config.LOOP_KEYS:
+ if key in self.sustainedLoop:
+ self.loop.stop(key)
+ self.sustainedLoop.remove(key)
+ elif self.loopSustain:
+ self.loop.start(key, self.instrument, self.reverb)
+ self.sustainedLoop.append(key)
+ else:
+ self.loop.start(key, self.instrument, self.reverb)
+ return
+
+ # Assign on which track the note will be created according to the number of keys pressed
+ if self.trackCount >= 9:
+ self.trackCount = 1
+ track = self.trackCount
+ self.trackCount += 1
+ # If the pressed key is in the keymap
+ if KEY_MAP_PIANO.has_key(key):
+ def playkey(pitch,duration,instrument):
+ # Create and play the note
+ self.key_dict[key] = CSoundNote(onset = 0,
+ pitch = pitch,
+ amplitude = volume,
+ pan = 0.5,
+ duration = duration,
+ trackId = track,
+ instrumentId = instrument.instrumentId,
+ reverbSend = self.reverb,
+ tied = True,
+ mode = 'mini')
+ self.csnd.play(self.key_dict[key], 0.3)
+ if self.getPlayState():
+ recOnset = int(self.csnd.loopGetTick())
+ self.onset_dict[key] = recOnset
+ self.recording( CSoundNote(
+ onset = recOnset,
+ pitch = pitch,
+ amplitude = volume,
+ pan = 0.5,
+ duration = 100,
+ trackId = 0,
+ decay = .1,
+ instrumentId = instrument.instrumentId,
+ reverbSend = self.reverb,
+ tied = False,
+ mode = 'mini'))
+
+ instrumentName = self.instrument
+ #print >>log, 'instrumentName:', instrumentName
+ pitch = KEY_MAP_PIANO[key]
+
+ if None != Config.INSTRUMENTS[instrumentName].kit:
+ if pitch in GenerationConstants.DRUMPITCH:
+ pitch = GenerationConstants.DRUMPITCH[pitch]
+ #print >>log, 'kit_element: ', Config.KIT_ELEMENT[pitch]
+ playkey(36,100, Config.INSTRUMENTS[instrumentName].kit[pitch])
+
+ else:
+ if event.state == gtk.gdk.MOD1_MASK:
+ pitch += 5
+
+ instrument = Config.INSTRUMENTS[ instrumentName ]
+ if instrument.csoundInstrumentId == Config.INST_PERC: #Percussions resonance
+ playkey( pitch, 60, instrument)
+ else:
+ playkey( pitch, -1, instrument)
+
+
+ def onKeyRelease(self,widget,event):
+ key = event.hardware_keycode
+ if key == 50 or key == 62:
+ self.loopSustain = False
+
+ if key in Config.LOOP_KEYS:
+ if key in self.sustainedLoop:
+ return
+ else:
+ self.loop.stop(key)
+ return
+
+ if KEY_MAP_PIANO.has_key(key):
+ csnote = self.key_dict[key]
+ if Config.INSTRUMENTSID[ csnote.instrumentId ].csoundInstrumentId == Config.INST_TIED:
+ csnote.duration = .5
+ csnote.decay = 0.7
+ #csnote.amplitude = 1
+ csnote.tied = False
+ csnote.mode = 'mini'
+ self.csnd.play(csnote, 0.3)
+ if self.getPlayState():
+ self.adjustDuration(csnote.pitch, self.onset_dict[key])
+ del self.key_dict[key]
+ if self.getPlayState():
+ if self.onset_dict.has_key(key):
+ del self.onset_dict[key]
+
+ def onButtonPress( self, widget, event ):
+ pass
diff --git a/TamTamMini.activity/Mini/Loop.py b/TamTamMini.activity/Mini/Loop.py
new file mode 100755
index 0000000..b36281e
--- /dev/null
+++ b/TamTamMini.activity/Mini/Loop.py
@@ -0,0 +1,210 @@
+import common.Config as Config
+import random
+import lps
+from common.Generation.Drunk import *
+from common.Util.CSoundNote import CSoundNote
+from common.Util.CSoundClient import new_csound_client
+from common.Util.NoteDB import Note
+from common.Util.NoteDB import PARAMETER
+from common.Generation.GenerationConstants import GenerationConstants
+
+class Loop:
+ def __init__( self, beat, volume ):
+ self.notesDict = {}
+ self.notesList = []
+ self.beat = beat
+ self.volume = volume
+ self.id = 4000
+ self.csnd = new_csound_client()
+
+ def stop( self, key ):
+ if (Config.DEBUG > 3): print 'stop loop at key: ' + str(key)
+ for n in self.notesDict[key]:
+ self.csnd.loopDelete(n)
+ del self.notesDict[key]
+ if (Config.DEBUG > 3): print self.notesDict
+
+ def start(self, key, instrument, reverb):
+ if self.notesDict.has_key(key):
+ return
+ self.notesList = []
+ for i in lps.LOOPS[key][self.beat-2]:
+ note = self.createCsNote(i, instrument, reverb)
+ n = Note(0, note.trackId, self.id, note)
+ self.notesList.append(n)
+ self.id = self.id + 1
+ self.csnd.loopPlay(n,1) #add as active
+ if (Config.DEBUG > 3): print 'play loop at key: ' + str(key)
+ self.notesDict[key] = self.notesList
+ if (Config.DEBUG > 3): print self.notesDict
+
+ def adjustLoopVolume(self, volume):
+ self.volume = volume
+ for k in self.notesDict.keys():
+ for n in self.notesDict[k]:
+ self.csnd.loopUpdate(n, PARAMETER.AMPLITUDE, n.cs.amplitude*self.volume, 1)
+
+ def createCsNote(self, i, instrument, reverb):
+ onset = i[0]
+ pitch = i[1]
+ gain = i[2]*self.volume
+ duration = i[3]
+ if Config.INSTRUMENTS[instrument].kit != None:
+ if GenerationConstants.DRUMPITCH.has_key(pitch):
+ pitch = GenerationConstants.DRUMPITCH[pitch]
+ instrument = Config.INSTRUMENTS[ instrument ].kit[pitch].name
+ pitch = 36
+ return CSoundNote( onset = onset,
+ pitch = pitch,
+ amplitude = gain,
+ pan = 0.5,
+ duration = duration,
+ trackId = 0,
+ instrumentId = Config.INSTRUMENTS[instrument].instrumentId,
+ reverbSend = reverb,
+ tied = False,
+ mode = 'mini')
+
+
+################ precompose all loops and write a dictionary #################
+
+ def precompose(self, maxbeat):
+ def makeGainSequence(onsetList):
+ gainSequence = []
+ append = gainSequence.append
+ for onset in onsetList:
+ if onset == 0:
+ gain = random.uniform(GenerationConstants.GAIN_MID_MAX_BOUNDARY, GenerationConstants.GAIN_MAX_BOUNDARY)
+ elif ( onset % Config.TICKS_PER_BEAT) == 0:
+ gain = random.uniform(GenerationConstants.GAIN_MID_MIN_BOUNDARY, GenerationConstants.GAIN_MID_MAX_BOUNDARY)
+ else:
+ gain = random.uniform(GenerationConstants.GAIN_MIN_BOUNDARY, GenerationConstants.GAIN_MID_MIN_BOUNDARY)
+ append(gain)
+ return gainSequence
+
+ def makeDurationSequence(onsetList, barLength):
+ durationSequence = []
+ append = durationSequence.append
+ if len( onsetList ) > 1:
+ for i in range(len(onsetList) - 1):
+ append((onsetList[i+1] - onsetList[i]))
+ append(( barLength - onsetList[-1]))
+ elif len( onsetList ) == 1:
+ append( ( barLength - onsetList[0] ))
+ return durationSequence
+
+ def makePitchSequence(length, pitchRegularity, step, table_pitch, pitchMethod):
+ pitchSequence = []
+ append = pitchSequence.append
+ numberOfPitch = int( ( 1 - (regularity*.8) ) * 10 + 1 )
+ step = -(8 - (int(step * 8)))
+ max = len(table_pitch)-1
+ nextValue = pitchMethod.getNextValue
+ tonique = GenerationConstants.DEFAULT_TONIQUE
+ for i in range(numberOfPitch):
+ append((table_pitch[nextValue(step, max)]) + tonique)
+ restOfNotes = range( length - numberOfPitch )
+ for i in restOfNotes:
+ position = i % numberOfPitch
+ append( pitchSequence[ position ] )
+ return pitchSequence
+
+
+ def makeRythmSequence(barLength, density, regularity ):
+ rythmSequence = [0, ]
+ self.count = 0
+ lastOnsetTime = 0
+ onsetLen = len(GenerationConstants.LOOP_TABLE_ONSET_VALUES)
+
+ onsetValue = int( ( 1 - density ) * onsetLen )
+ onsetDeviation = int( ( 1 - regularity ) * 20 )
+ currentOnsetValue = onsetValue + ( random.randint( 0, onsetDeviation ) - ( onsetDeviation / 2 ) )
+ if currentOnsetValue < 0:
+ currentOnsetValue = 0
+ elif currentOnsetValue > onsetLen:
+ currentOnsetValue = onsetLen
+ else:
+ currentOnsetValue = currentOnsetValue
+
+ onsetDelta = GenerationConstants.LOOP_TABLE_ONSET_VALUES[ currentOnsetValue ]
+ listLen = range( int( barLength / Config.TICKS_PER_BEAT * 8 ) )
+ randInt = random.randint
+ for i in listLen:
+ if self.count == 0:
+ currentOnsetValue = onsetValue + ( randInt( 0, onsetDeviation ) - ( onsetDeviation / 2 ) )
+ if currentOnsetValue < 0:
+ currentOnsetValue = 0
+ elif currentOnsetValue > onsetLen:
+ currentOnsetValue = onsetLen
+ else:
+ currentOnsetValue = currentOnsetValue
+ onsetDelta = GenerationConstants.LOOP_TABLE_ONSET_VALUES[ currentOnsetValue ]
+
+ if onsetDelta == GenerationConstants.DOUBLE_TICK_DUR:
+ if self.count < (GenerationConstants.DOUBLE_HOW_MANY - 1):
+ self.count += 1
+ else:
+ self.count = 0
+ onsetTime = onsetDelta + lastOnsetTime
+ lastOnsetTime = onsetTime
+ if onsetTime < barLength:
+ rythmSequence.append(onsetTime)
+ continue
+ else:
+ break
+
+ onsetTime = onsetDelta + lastOnsetTime
+ lastOnsetTime = onsetTime
+ if onsetTime < barLength:
+ rythmSequence.append(onsetTime)
+ else:
+ break
+ return rythmSequence
+
+############ begin generate #####################
+ file = open(Config.TAM_TAM_ROOT + '/miniTamTam/lps.py', 'w')
+ file.write('LOOPS = {\n')
+
+ table_pitch = [-12, -10, -12, -7, -5, -4, -2, 0, 2, 0, 5, 7, 8, 10, 12]
+ table_density = [1., .92, .84, .76, .68, .6, .52, .46, .4, .46, .52, .6, .68, .76, .84, .95]
+ table_regularity = [1., .96, .9, .84, .78, .72, .66, .6, .54, .48, .42, .36, .3, .24, .18, .1]
+ table_pitchRegularity = [1., .96, .9, .84, .78, .72, .66, .6, .54, .48, .42, .36, .3, .24, .18, .1]
+ table_step = [2, 4, 3, 2, 4, 6, 5, 4, 6, 8, 7, 6, 8, 9, 8, 10]
+ table_pitchMethod = [0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3]
+
+ numKeys = len(Config.LOOP_KEYS)
+ for key in range(numKeys):
+ file.write(str(Config.LOOP_KEYS[key]) + ': [')
+ for beat in range(2, maxbeat+1):
+ density = table_density[key]
+ regularity = table_regularity[key]
+ pitchRegularity = table_pitchRegularity[key]
+ step = table_step[key]
+ pattern = table_pitchMethod[key]
+ if pattern == 0:
+ pitchMethod = Drunk( 5, 10 )
+ elif pattern == 1:
+ pitchMethod = DroneAndJump( 5, 10 )
+ elif pattern == 2:
+ pitchMethod = Repeter( 5, 10 )
+ elif pattern == 3:
+ pitchMethod = Loopseg( 5, 10 )
+
+ barLength = Config.TICKS_PER_BEAT * beat
+ loopList = []
+
+ rythmSequence = makeRythmSequence(barLength, density, regularity)
+ pitchSequence = makePitchSequence(len(rythmSequence), pitchRegularity, step, table_pitch, pitchMethod )
+ gainSequence = makeGainSequence(rythmSequence)
+ durationSequence = makeDurationSequence(rythmSequence, barLength)
+
+ for k in range(len(rythmSequence)):
+ loopList.append([rythmSequence[k], pitchSequence[k], gainSequence[k], durationSequence[k]])
+ if beat == maxbeat and key == (numKeys-1):
+ file.write(str(loopList) + ']\n')
+ elif beat != maxbeat:
+ file.write(str(loopList) + ',\n')
+ else:
+ file.write(str(loopList) + '],\n')
+ file.write('}')
+ file.close()
diff --git a/TamTamMini.activity/Mini/MiniSequencer.py b/TamTamMini.activity/Mini/MiniSequencer.py
new file mode 100644
index 0000000..991ee13
--- /dev/null
+++ b/TamTamMini.activity/Mini/MiniSequencer.py
@@ -0,0 +1,139 @@
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+import gobject
+import time
+import common.Config as Config
+from common.Util.CSoundNote import CSoundNote
+from common.Util.CSoundClient import new_csound_client
+from common.Util.NoteDB import Note
+from common.Util.NoteDB import PARAMETER
+
+class MiniSequencer:
+ def __init__( self, recordButtonState, recordOverSensitivity ):
+ self.notesList = []
+ self.sequencer = []
+ self.pitchs = []
+ self.beat = 4
+ self.volume = 0.5
+ self.tempo = Config.PLAYER_TEMPO
+ self.checkOk = 0
+ self.tick = 0
+ self.id = 1000
+ self.csnd = new_csound_client()
+ self.startLooking = 0
+ self.recordState = 0
+ self.startPoint = 0
+ self.recordButtonState = recordButtonState
+ self.recordOverSensitivity = recordOverSensitivity
+ self.playbackTimeout = None
+ self.playState = 0
+
+ def setTempo( self, tempo ):
+ self.tempo = tempo
+ gobject.source_remove( self.playBackTimeout )
+ self.playState = 0
+
+ def handleRecordButton( self, widget, data=None ):
+ if not self.startLooking:
+ if widget.get_active() == True and not self.recordState:
+ self.button = 1
+ self.recordOverSensitivity( True )
+ self.beats = [i*4 for i in range(self.beat)]
+ self.upBeats = [i+2 for i in self.beats]
+ self.realTick = [i for i in range(self.beat*4)]
+ self.clearSequencer()
+ self.startLooking = 1
+ self.startPlayback()
+
+ def handleOverButton( self, widget, data=None ):
+ if not self.startLooking:
+ if widget.get_active() == True and not self.recordState:
+ self.button = 2
+ self.startLooking = 1
+ self.startPlayback()
+
+ def clearSequencer( self, widget=None ):
+ for n in self.notesList:
+ self.csnd.loopDelete(n)
+ self.notesList = []
+
+ def getPlayState( self ):
+ return self.playState
+
+ def startPlayback( self ):
+ if not self.playState:
+ self.playbackTimeout = gobject.timeout_add( int(60000/self.tempo/12), self.handleClock )
+ self.handleClock()
+ self.playState = 1
+
+ def stopPlayback( self ):
+ if self.playbackTimeout != None:
+ gobject.source_remove( self.playbackTimeout )
+ self.playbackTimeout = None
+ self.playState = 0
+
+ def recording( self, note ):
+ if self.startLooking:
+ self.sequencer = []
+ self.pitchs = []
+ self.recordState = 1
+ self.startLooking = 0
+ self.recordButtonState(self.button, True)
+ self.startPoint = int(self.csnd.loopGetTick())
+ if self.startPoint == 0:
+ self.startPoint = self.beat * Config.TICKS_PER_BEAT - 1
+ if self.recordState:
+ self.pitchs.append( note.pitch )
+ self.sequencer.append( note )
+
+ def quantize( self, onset ):
+ if ( onset % 3 ) == 0:
+ return onset
+ elif ( onset % 3 ) == 1:
+ return ( onset // 3 ) * 3
+ elif ( onset % 3 ) == 2:
+ return ( ( onset // 3 ) + 1 ) * 3
+
+ def adjustDuration( self, pitch, onset ):
+ if pitch in self.pitchs:
+ offset = int(self.csnd.loopGetTick())
+ for note in self.sequencer:
+ if note.pitch == pitch and note.onset == onset:
+ if offset > note.onset:
+ note.duration = ( offset - note.onset ) + 4
+ else:
+ note.duration = ( (offset+(self.beat*Config.TICKS_PER_BEAT)) - note.onset ) + 4
+ note.onset = self.quantize( note.onset )
+ n = Note(0, note.trackId, self.id, note)
+ self.notesList.append(n)
+ self.id = self.id + 1
+ self.csnd.loopPlay(n,1) #add as active
+
+ self.pitchs.remove( pitch )
+
+ def adjustSequencerVolume(self, volume):
+ self.volume = volume
+ for n in self.notesList:
+ self.csnd.loopUpdate(n, PARAMETER.AMPLITUDE, n.cs.amplitude*self.volume, 1)
+
+ def handleClock( self ):
+ currentTick = int(self.csnd.loopGetTick())
+ t = currentTick / 3
+ if self.tick != t:
+ self.tick = t
+ if self.startLooking:
+ if self.tick in self.beats:
+ self.recordButtonState(self.button, True)
+ if self.tick in self.upBeats:
+ self.recordButtonState(self.button, False)
+
+ if self.recordState:
+ if currentTick < self.startPoint:
+ self.checkOk = 1
+ if currentTick >= self.startPoint and self.checkOk:
+ self.checkOk = 0
+ self.recordState = 0
+ self.recordButtonState(self.button, False)
+
+ return True
diff --git a/TamTamMini.activity/Mini/NoteStdAlone.py b/TamTamMini.activity/Mini/NoteStdAlone.py
new file mode 100644
index 0000000..0dd4638
--- /dev/null
+++ b/TamTamMini.activity/Mini/NoteStdAlone.py
@@ -0,0 +1,103 @@
+import common.Config as Config
+from common.Util.CSoundClient import CSoundClient
+from common.Generation.GenerationConstants import GenerationConstants
+
+class NoteStdAlone:
+ def __init__( self, client,
+ onset,
+ pitch,
+ amplitude,
+ pan,
+ duration,
+ trackId,
+ fullDuration = False,
+ instrument = Config.FLUTE,
+ attack = 0.005,
+ decay = 0.095,
+ reverbSend = 0.1,
+ filterType = 0,
+ filterCutoff = 1000,
+ tied = False,
+ overlap = False,
+ instrumentFlag = Config.FLUTE ):
+ self.csnd = client
+ self.onset = onset
+ self.pitch = pitch
+ self.amplitude = amplitude
+ self.pan = pan
+ self.duration = duration
+ self.trackId = trackId
+ self.instrument = instrument
+ self.fullDuration = fullDuration
+ self.attack = attack
+ self.decay = decay
+ self.reverbSend = reverbSend
+ self.filterType = filterType
+ self.filterCutoff = filterCutoff
+ self.tied = tied
+ self.overlap = overlap
+ if self.instrument == 'drum1kit':
+ self.instrumentFlag = Config.DRUM1INSTRUMENTS[ self.pitch ]
+ else:
+ self.instrumentFlag = self.instrument
+
+ def play( self ):
+ self.csnd.sendText( self.getText(120) )
+
+ def getText( self, tempo ):
+ if self.instrument[ 0: 4 ] == 'drum':
+ if GenerationConstants.DRUMPITCH.has_key( self.pitch ):
+ self.pitch = GenerationConstants.DRUMPITCH[ self.pitch ]
+
+ if self.instrument == 'drum1kit':
+ self.instrumentFlag = Config.DRUM1INSTRUMENTS[ self.pitch ]
+ if self.instrument == 'drum2kit':
+ self.instrumentFlag = Config.DRUM2INSTRUMENTS[ self.pitch ]
+ if self.instrument == 'drum3kit':
+ self.instrumentFlag = Config.DRUM3INSTRUMENTS[ self.pitch ]
+ newPitch = 1
+ else:
+ self.instrumentFlag = self.instrument
+ newPitch = pow( GenerationConstants.TWO_ROOT_TWELVE, self.pitch - 36 )
+
+ oneTickDuration = (Config.MS_PER_MINUTE / 1000) / tempo / Config.TICKS_PER_BEAT
+
+ newDuration = oneTickDuration * self.duration
+
+ # condition for tied notes
+ if Config.INSTRUMENTS[ self.instrumentFlag ].csoundInstrumentId == 101 and self.tied and self.fullDuration:
+ newDuration = -1
+ # condition for overlaped notes
+ if Config.INSTRUMENTS[ self.instrumentFlag ].csoundInstrumentId == 102 and self.overlap:
+ newDuration = oneTickDuration * self.duration + 1.
+
+ if True: newAmplitude = self.amplitude * 0.8
+ else : newAmplitude = self.amplitude * music_volume_get( self.trackId )
+
+ newAttack = newDuration * self.attack
+ if newAttack <= 0.002:
+ newAttack = 0.002
+
+ newDecay = newDuration * self.decay
+ if newDecay <= 0.002:
+ newDecay = 0.002
+
+ loopStart = Config.INSTRUMENTS[ self.instrumentFlag ].loopStart
+ loopEnd = Config.INSTRUMENTS[ self.instrumentFlag ].loopEnd
+ crossDur = Config.INSTRUMENTS[ self.instrumentFlag ].crossDur
+ return Config.PLAY_NOTE_COMMAND % ( Config.INSTRUMENTS[ self.instrumentFlag ].csoundInstrumentId,
+ self.trackId,
+ 0,
+ newDuration,
+ newPitch,
+ self.reverbSend,
+ newAmplitude,
+ self.pan,
+ Config.INSTRUMENT_TABLE_OFFSET + Config.INSTRUMENTS[ self.instrumentFlag ].instrumentId,
+ newAttack,
+ newDecay,
+ self.filterType,
+ self.filterCutoff,
+ loopStart,
+ loopEnd,
+ crossDur )
diff --git a/TamTamMini.activity/Mini/RythmGenerator.py b/TamTamMini.activity/Mini/RythmGenerator.py
new file mode 100644
index 0000000..537f598
--- /dev/null
+++ b/TamTamMini.activity/Mini/RythmGenerator.py
@@ -0,0 +1,77 @@
+import random
+
+import common.Config as Config
+from common.Util.CSoundNote import CSoundNote
+from common.Generation.GenerationConstants import GenerationConstants
+from GenRythm import GenRythm
+
+def generator( instrument, nbeats, density, regularity, reverbSend ):
+
+ makeRythm = GenRythm()
+
+ noteDuration = GenerationConstants.DOUBLE_TICK_DUR / 2
+ trackId = 5
+ pan = 0.5
+ attack = 0.005
+ decay = 0.095
+ filterType = 0
+ filterCutoff = 1000
+ tied = False
+ mode = 'mini'
+
+ def makePitchSequence(length, drumPitch):
+ pitchSequence = []
+ append = pitchSequence.append
+ list = range(length)
+ max = len(drumPitch) - 1
+ for i in list:
+ append(drumPitch[ random.randint( 0, max ) ] )
+ return pitchSequence
+
+ def makeGainSequence( onsetList ):
+ gainSequence = []
+ append = gainSequence.append
+ for onset in onsetList:
+ if onset == 0:
+ gain = random.uniform(GenerationConstants.GAIN_MID_MAX_BOUNDARY, GenerationConstants.GAIN_MAX_BOUNDARY)
+ elif ( onset % Config.TICKS_PER_BEAT) == 0:
+ gain = random.uniform(GenerationConstants.GAIN_MID_MIN_BOUNDARY, GenerationConstants.GAIN_MID_MAX_BOUNDARY)
+ else:
+ gain = random.uniform(GenerationConstants.GAIN_MIN_BOUNDARY, GenerationConstants.GAIN_MID_MIN_BOUNDARY)
+ append(gain)
+ return gainSequence
+
+ def pageGenerate( regularity, drumPitch ):
+ barLength = Config.TICKS_PER_BEAT * nbeats
+
+ #print 'pageGenerate drumPitch[0] ', drumPitch[0]
+ currentInstrument = Config.INSTRUMENTS[ instrument ].kit[ drumPitch[0] ].name
+
+ rythmSequence = makeRythm.drumRythmSequence(currentInstrument, nbeats, density, regularity)
+ pitchSequence = makePitchSequence(len(rythmSequence), drumPitch )
+ gainSequence = makeGainSequence(rythmSequence)
+
+ trackNotes = []
+ list = range(len(rythmSequence))
+ for i in list:
+ trackNotes.append( CSoundNote( rythmSequence[i], pitchSequence[i], gainSequence[i],
+ pan, noteDuration, trackId,
+ Config.INSTRUMENTS[instrument].instrumentId, attack,
+ decay, reverbSend, filterType, filterCutoff, tied, mode))
+ return trackNotes
+
+##################################################################################
+ # begin generate()
+ if regularity > 0.75:
+ streamOfPitch = GenerationConstants.DRUM_COMPLEXITY1
+ elif regularity > 0.5:
+ streamOfPitch = GenerationConstants.DRUM_COMPLEXITY2
+ elif regularity > 0.25:
+ streamOfPitch = GenerationConstants.DRUM_COMPLEXITY3
+ else:
+ streamOfPitch = GenerationConstants.DRUM_COMPLEXITY4
+
+ trackNotes = []
+ for drumPitch in streamOfPitch:
+ trackNotes.append(pageGenerate( regularity, drumPitch ))
+ return trackNotes
diff --git a/TamTamMini.activity/Mini/__init__.py b/TamTamMini.activity/Mini/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TamTamMini.activity/Mini/__init__.py
diff --git a/TamTamMini.activity/Mini/lps.py b/TamTamMini.activity/Mini/lps.py
new file mode 100755
index 0000000..b3c3aa8
--- /dev/null
+++ b/TamTamMini.activity/Mini/lps.py
@@ -0,0 +1,242 @@
+LOOPS = {
+17: [[[0, 34, 0.91843119391102157, 3], [3, 29, 0.66557397398580609, 3], [6, 34, 0.74069380274636654, 3], [9, 29, 0.73011336026847073, 3], [12, 34, 0.76424227490889152, 3], [15, 29, 0.73027362492984604, 3], [18, 34, 0.65773569328528614, 3], [21, 29, 0.68716281941809831, 3]],
+[[0, 32, 0.90350161334941659, 3], [3, 24, 0.74404055378568157, 3], [6, 32, 0.74323579104314119, 3], [9, 24, 0.73026101785761377, 3], [12, 32, 0.82564066817787785, 3], [15, 24, 0.71019876471482146, 3], [18, 32, 0.73703720538539641, 3], [21, 24, 0.72586200244648191, 3], [24, 32, 0.89346838667834039, 3], [27, 24, 0.6688220031077825, 3], [30, 32, 0.72447517622037272, 3], [33, 24, 0.71313223323927322, 3]],
+[[0, 41, 0.98493978103164381, 3], [3, 29, 0.72792048541450227, 3], [6, 41, 0.72930017355910615, 3], [9, 29, 0.7222293906157744, 3], [12, 41, 0.77214158570437674, 3], [15, 29, 0.74656945166968436, 3], [18, 41, 0.71994918422592669, 3], [21, 29, 0.65296466730336167, 3], [24, 41, 0.86548932085629293, 3], [27, 29, 0.72190994455740853, 3], [30, 41, 0.66445817032603671, 3], [33, 29, 0.65582254041511467, 3], [36, 41, 0.86288823205884557, 3], [39, 29, 0.70485424504749017, 3], [42, 41, 0.74949991272057725, 3], [45, 29, 0.74366606359847276, 3]],
+[[0, 26, 0.9209538754403952, 3], [3, 32, 0.7191358757020283, 3], [6, 26, 0.68816606744610742, 3], [9, 32, 0.70085543192049982, 3], [12, 26, 0.78074279603247598, 3], [15, 32, 0.71046570102178241, 3], [18, 26, 0.68220609744266758, 3], [21, 32, 0.68961180556278423, 3], [24, 26, 0.89235495450144287, 3], [27, 32, 0.73108765393595787, 3], [30, 26, 0.66145010684275285, 3], [33, 32, 0.71956089863127026, 3], [36, 26, 0.77770286704571423, 3], [39, 32, 0.67268162577259594, 3], [42, 26, 0.71422085398818524, 3], [45, 32, 0.73661198907206937, 3], [48, 26, 0.85268386577089572, 3], [51, 32, 0.68631312645239539, 3], [54, 26, 0.72994393067062868, 3], [57, 32, 0.70711912537539956, 3]],
+[[0, 38, 0.97737790621922072, 3], [3, 34, 0.71664569925045352, 3], [6, 38, 0.72532871185907688, 3], [9, 34, 0.68518148281936164, 3], [12, 38, 0.78925884580419003, 3], [15, 34, 0.69974203576026073, 3], [18, 38, 0.73715398854789072, 3], [21, 34, 0.68750831437785886, 3], [24, 38, 0.88144840071678221, 3], [27, 34, 0.69581579089244272, 3], [30, 38, 0.70333582484945179, 3], [33, 34, 0.70741457306014111, 3], [36, 38, 0.86425219747410853, 3], [39, 34, 0.73805060304671832, 3], [42, 38, 0.72754087855196004, 3], [45, 34, 0.65228065482349229, 3], [48, 38, 0.86104449070395883, 3], [51, 34, 0.74287398118701164, 3], [54, 38, 0.73738648278176078, 3], [57, 34, 0.65382138825928426, 3], [60, 38, 0.7633454002433121, 3], [63, 34, 0.70399019680859132, 3], [66, 38, 0.69274066551029645, 3], [69, 34, 0.70712790864283115, 3]],
+[[0, 29, 0.9553559145099455, 3], [3, 34, 0.65224509529059749, 3], [6, 29, 0.71157865209628857, 3], [9, 34, 0.70240500812668449, 3], [12, 29, 0.88616214885784961, 3], [15, 34, 0.73895635876951649, 3], [18, 29, 0.69755099539587506, 3], [21, 34, 0.65486918855381016, 3], [24, 29, 0.78336533925511442, 3], [27, 34, 0.70451467711099092, 3], [30, 29, 0.70812061038005636, 3], [33, 34, 0.66020821023721221, 3], [36, 29, 0.81117409691756392, 3], [39, 34, 0.70629416690338653, 3], [42, 29, 0.73610428492953328, 3], [45, 34, 0.67224868592999165, 3], [48, 29, 0.86358506491378484, 3], [51, 34, 0.70207585661769767, 3], [54, 29, 0.72165965378924424, 3], [57, 34, 0.73464600760895349, 3], [60, 29, 0.76646135730852416, 3], [63, 34, 0.7002474528709377, 3], [66, 29, 0.71362336661016657, 3], [69, 34, 0.6757466245495779, 3], [72, 29, 0.76143897535892247, 3], [75, 34, 0.68217145739800344, 3], [78, 29, 0.74893405173379535, 3], [81, 34, 0.68170173360898101, 3]],
+[[0, 46, 0.97552266177916414, 3], [3, 46, 0.69986456113843698, 3], [6, 46, 0.69920435077044829, 3], [9, 46, 0.68740449998560882, 3], [12, 46, 0.88277391580708886, 3], [15, 46, 0.66925646894688273, 3], [18, 46, 0.74770620434689916, 3], [21, 46, 0.67135592880972694, 3], [24, 46, 0.89774664547381655, 3], [27, 46, 0.69928909955820906, 3], [30, 46, 0.68586466042006333, 3], [33, 46, 0.70895768943399751, 3], [36, 46, 0.84986669051226882, 3], [39, 46, 0.69793940684844358, 3], [42, 46, 0.6857910200277757, 3], [45, 46, 0.7027226374974711, 3], [48, 46, 0.83941134712876864, 3], [51, 46, 0.68083838722102341, 3], [54, 46, 0.65984033342204407, 3], [57, 46, 0.672590746789269, 3], [60, 46, 0.78609392331073746, 3], [63, 46, 0.6701865146944902, 3], [66, 46, 0.65883357444463531, 3], [69, 46, 0.66052134903071158, 3], [72, 46, 0.79184461812687923, 3], [75, 46, 0.70456329331096756, 3], [78, 46, 0.74654736852481196, 3], [81, 46, 0.66733452245976943, 3], [84, 46, 0.77157082412778433, 3], [87, 46, 0.70080352704958349, 3], [90, 46, 0.74979144436734291, 3], [93, 46, 0.70122642685542769, 3]],
+[[0, 46, 0.91932873393188252, 3], [3, 46, 0.71321659243671531, 3], [6, 46, 0.69059282145586165, 3], [9, 46, 0.65981195427017847, 3], [12, 46, 0.76030046411551888, 3], [15, 46, 0.74796721544405365, 3], [18, 46, 0.74057924055206414, 3], [21, 46, 0.66775250665453612, 3], [24, 46, 0.78281128191107929, 3], [27, 46, 0.69803584249894335, 3], [30, 46, 0.69895782528552974, 3], [33, 46, 0.723529751804181, 3], [36, 46, 0.80851570969064313, 3], [39, 46, 0.67139974267760627, 3], [42, 46, 0.72305899861262568, 3], [45, 46, 0.68945043870105571, 3], [48, 46, 0.75610316508036135, 3], [51, 46, 0.71823308483606174, 3], [54, 46, 0.66865797792771575, 3], [57, 46, 0.74657517001426033, 3], [60, 46, 0.87044953529572178, 3], [63, 46, 0.7130297562104132, 3], [66, 46, 0.71351325060250659, 3], [69, 46, 0.69019654834356781, 3], [72, 46, 0.83474178641883123, 3], [75, 46, 0.74929800588928508, 3], [78, 46, 0.68958541192891742, 3], [81, 46, 0.74928116715885551, 3], [84, 46, 0.88840328031723259, 3], [87, 46, 0.65862046873085311, 3], [90, 46, 0.70878836088886332, 3], [93, 46, 0.73885958288345677, 3], [96, 46, 0.85247737085377939, 3], [99, 46, 0.6783759890234814, 3], [102, 46, 0.6825784264775937, 3], [105, 46, 0.738542711969846, 3]],
+[[0, 31, 0.94776975142287834, 3], [3, 41, 0.65590177297158159, 3], [6, 31, 0.65337976704789735, 3], [9, 41, 0.73408902426583011, 3], [12, 31, 0.84968220502602998, 3], [15, 41, 0.70095191213245678, 3], [18, 31, 0.74876524478508144, 3], [21, 41, 0.69533166848117667, 3], [24, 31, 0.85332557823377264, 3], [27, 41, 0.73955678051059492, 3], [30, 31, 0.7252274828939308, 3], [33, 41, 0.7032040738565718, 3], [36, 31, 0.78158754870669478, 3], [39, 41, 0.72361628589076143, 3], [42, 31, 0.71439844284783904, 3], [45, 41, 0.69894336744910734, 3], [48, 31, 0.8106183090724538, 3], [51, 41, 0.70613671246994514, 3], [54, 31, 0.69530745092939739, 3], [57, 41, 0.73359899948360163, 3], [60, 31, 0.89516116030556148, 3], [63, 41, 0.7090745940640214, 3], [66, 31, 0.6884971156573102, 3], [69, 41, 0.74782082130824079, 3], [72, 31, 0.83716873320941154, 3], [75, 41, 0.72114893479035447, 3], [78, 31, 0.68677684180105225, 3], [81, 41, 0.66642756025084182, 3], [84, 31, 0.80013804508992159, 3], [87, 41, 0.68693476263098707, 3], [90, 31, 0.66028364009529072, 3], [93, 41, 0.66229596381452704, 3], [96, 31, 0.88127393320261094, 3], [99, 41, 0.73074370583503645, 3], [102, 31, 0.66781201866137407, 3], [105, 41, 0.66545630618869744, 3], [108, 31, 0.75361150079657258, 3], [111, 41, 0.71854024397575067, 3], [114, 31, 0.72973386512808813, 3], [117, 41, 0.66432200189141311, 3]],
+[[0, 36, 0.98068641760396869, 3], [3, 36, 0.7087581726036245, 3], [6, 36, 0.73999909050052226, 3], [9, 36, 0.66058393549418448, 3], [12, 36, 0.77292030332125072, 3], [15, 36, 0.74928587658650037, 3], [18, 36, 0.73332890611996115, 3], [21, 36, 0.67888400552814432, 3], [24, 36, 0.82060696293857305, 3], [27, 36, 0.66036967490951815, 3], [30, 36, 0.73419017150661336, 3], [33, 36, 0.6664381430435613, 3], [36, 36, 0.85067121782355692, 3], [39, 36, 0.73011586871926704, 3], [42, 36, 0.65481380650717536, 3], [45, 36, 0.66578703136289474, 3], [48, 36, 0.76056215071595079, 3], [51, 36, 0.72235630871144041, 3], [54, 36, 0.72422860004193734, 3], [57, 36, 0.71143393824413537, 3], [60, 36, 0.85734534202384116, 3], [63, 36, 0.66017915357256374, 3], [66, 36, 0.67171228226548818, 3], [69, 36, 0.71272669092748564, 3], [72, 36, 0.8315199331948937, 3], [75, 36, 0.69174347595086216, 3], [78, 36, 0.72788282047363517, 3], [81, 36, 0.69392643322409353, 3], [84, 36, 0.79770454659537937, 3], [87, 36, 0.72739460247920895, 3], [90, 36, 0.67048753950153672, 3], [93, 36, 0.72736539131030409, 3], [96, 36, 0.80285116841828175, 3], [99, 36, 0.713718809999492, 3], [102, 36, 0.73880912377713248, 3], [105, 36, 0.68062980566222953, 3], [108, 36, 0.75214765954225038, 3], [111, 36, 0.6981475157815108, 3], [114, 36, 0.68829052906441512, 3], [117, 36, 0.71685831080048168, 3], [120, 36, 0.75248202994273161, 3], [123, 36, 0.72214570567114489, 3], [126, 36, 0.71084553127838324, 3], [129, 36, 0.65197071023926312, 3]],
+[[0, 46, 0.90280678713865126, 3], [3, 32, 0.67395093764164715, 3], [6, 46, 0.73109179842106886, 3], [9, 32, 0.67170914331957565, 3], [12, 46, 0.80307077663550952, 3], [15, 32, 0.73129358320657789, 3], [18, 46, 0.71903360938852634, 3], [21, 32, 0.7248234653347696, 3], [24, 46, 0.81714859690272912, 3], [27, 32, 0.66348355767076483, 3], [30, 46, 0.67016212651490314, 3], [33, 32, 0.66154132833276358, 3], [36, 46, 0.88048058164239262, 3], [39, 32, 0.6890403995494504, 3], [42, 46, 0.73418414850798452, 3], [45, 32, 0.749772789108889, 3], [48, 46, 0.84890407655338507, 3], [51, 32, 0.65268531302671839, 3], [54, 46, 0.73129437939088149, 3], [57, 32, 0.72989177801115146, 3], [60, 46, 0.85554234610943947, 3], [63, 32, 0.69025635663809293, 3], [66, 46, 0.65272676456968093, 3], [69, 32, 0.70601800003449144, 3], [72, 46, 0.75941955733003041, 3], [75, 32, 0.70531362992122248, 3], [78, 46, 0.70793039214726661, 3], [81, 32, 0.7365052564921184, 3], [84, 46, 0.75567849777664398, 3], [87, 32, 0.70811048770262452, 3], [90, 46, 0.73216776268556005, 3], [93, 32, 0.68187859580205246, 3], [96, 46, 0.82545401413391595, 3], [99, 32, 0.66695370191476799, 3], [102, 46, 0.73641117798869293, 3], [105, 32, 0.74101257223922112, 3], [108, 46, 0.87195002931605747, 3], [111, 32, 0.74482451358298352, 3], [114, 46, 0.66132022723666595, 3], [117, 32, 0.65565430253830792, 3], [120, 46, 0.79306575515647193, 3], [123, 32, 0.72800781978306695, 3], [126, 46, 0.72030742526565961, 3], [129, 32, 0.71176978526356594, 3], [132, 46, 0.79068051095915104, 3], [135, 32, 0.72962608505954019, 3], [138, 46, 0.66901942227248201, 3], [141, 32, 0.68098356883561206, 3]],
+[[0, 24, 0.94996784213780716, 3], [3, 24, 0.71282116076692614, 3], [6, 24, 0.71871672529819786, 3], [9, 24, 0.66273047469727364, 3], [12, 24, 0.766507966649846, 3], [15, 24, 0.69353990056816539, 3], [18, 24, 0.69938860941518211, 3], [21, 24, 0.74598532159248276, 3], [24, 24, 0.81294051419026536, 3], [27, 24, 0.73917500448603701, 3], [30, 24, 0.73681950265708818, 3], [33, 24, 0.69273172587524134, 3], [36, 24, 0.86922807695844395, 3], [39, 24, 0.72763792224268364, 3], [42, 24, 0.73950073663749138, 3], [45, 24, 0.69387556505269421, 3], [48, 24, 0.89848698451539277, 3], [51, 24, 0.6642855396985583, 3], [54, 24, 0.6953886068113142, 3], [57, 24, 0.73159770052310524, 3], [60, 24, 0.83500844769724591, 3], [63, 24, 0.71347376140571228, 3], [66, 24, 0.69196630602724796, 3], [69, 24, 0.65183324905576068, 3], [72, 24, 0.82198645068199483, 3], [75, 24, 0.69589915382384626, 3], [78, 24, 0.70111834688348473, 3], [81, 24, 0.67827302553147273, 3], [84, 24, 0.88450178396412449, 3], [87, 24, 0.7343604369087634, 3], [90, 24, 0.6827419001291879, 3], [93, 24, 0.73930446848684306, 3], [96, 24, 0.79120977614291588, 3], [99, 24, 0.70891952101331734, 3], [102, 24, 0.65553023868092064, 3], [105, 24, 0.68977243408292255, 3], [108, 24, 0.77703598487780079, 3], [111, 24, 0.69538143527301099, 3], [114, 24, 0.68306239968458615, 3], [117, 24, 0.74317390320358623, 3], [120, 24, 0.80334349366584712, 3], [123, 24, 0.68405445266280651, 3], [126, 24, 0.66659853120983548, 3], [129, 24, 0.71501227960244906, 3], [132, 24, 0.82324897961345989, 3], [135, 24, 0.70431450253673944, 3], [138, 24, 0.667598228369227, 3], [141, 24, 0.7230375182466019, 3], [144, 24, 0.79965565220353951, 3], [147, 24, 0.73817545621760028, 3], [150, 24, 0.7440681955330154, 3], [153, 24, 0.7228687635049964, 3]],
+[[0, 24, 0.99966154454043432, 3], [3, 36, 0.72418981430429774, 3], [6, 24, 0.70518891566238151, 3], [9, 36, 0.69807416917517928, 3], [12, 24, 0.79855094267840476, 3], [15, 36, 0.73561616111895778, 3], [18, 24, 0.70810061059214147, 3], [21, 36, 0.68153876715530248, 3], [24, 24, 0.76427434335396438, 3], [27, 36, 0.70006637530314653, 3], [30, 24, 0.73615450050080466, 3], [33, 36, 0.68792120830514814, 3], [36, 24, 0.76588204089615519, 3], [39, 36, 0.67574733551391175, 3], [42, 24, 0.65061915087821531, 3], [45, 36, 0.69092660922113514, 3], [48, 24, 0.85249527480752418, 3], [51, 36, 0.72230801799116062, 3], [54, 24, 0.73274518894797158, 3], [57, 36, 0.66329666666212961, 3], [60, 24, 0.75175967538048838, 3], [63, 36, 0.67622270427738218, 3], [66, 24, 0.72583832150850824, 3], [69, 36, 0.6917055364091359, 3], [72, 24, 0.78348574978638708, 3], [75, 36, 0.73000322507677406, 3], [78, 24, 0.73063779629050585, 3], [81, 36, 0.65402740075456278, 3], [84, 24, 0.80011577068599138, 3], [87, 36, 0.71303511836768496, 3], [90, 24, 0.6934017049718888, 3], [93, 36, 0.70343131927951874, 3], [96, 24, 0.78259572323155779, 3], [99, 36, 0.72858981621488073, 3], [102, 24, 0.7481560231694101, 3], [105, 36, 0.68755827931530411, 3], [108, 24, 0.88206819747354581, 3], [111, 36, 0.72616984943512353, 3], [114, 24, 0.74256950141685751, 3], [117, 36, 0.66158134924215217, 3], [120, 24, 0.76246240828234202, 3], [123, 36, 0.74856742595044767, 3], [126, 24, 0.68420976932639477, 3], [129, 36, 0.66434498040744627, 3], [132, 24, 0.81473844231294035, 3], [135, 36, 0.7131631978481362, 3], [138, 24, 0.73930693395247316, 3], [141, 36, 0.65070235342238492, 3], [144, 24, 0.84393407785915298, 3], [147, 36, 0.7394095318691658, 3], [150, 24, 0.70080455363741645, 3], [153, 36, 0.70464392031853151, 3], [156, 24, 0.8525907875365486, 3], [159, 36, 0.726693437214738, 3], [162, 24, 0.74428130134819526, 3], [165, 36, 0.65639627649148768, 3]],
+[[0, 43, 0.96932979317400125, 3], [3, 48, 0.72174357367422148, 3], [6, 43, 0.67568473222070091, 3], [9, 48, 0.67902133423992483, 3], [12, 43, 0.77530901011594411, 3], [15, 48, 0.65763043577326386, 3], [18, 43, 0.72235842039905918, 3], [21, 48, 0.73049883177095876, 3], [24, 43, 0.84674159070444155, 3], [27, 48, 0.68140428605264913, 3], [30, 43, 0.70876217651075257, 3], [33, 48, 0.71138176998035574, 3], [36, 43, 0.81157816581707343, 3], [39, 48, 0.72597690885886701, 3], [42, 43, 0.65859686769784942, 3], [45, 48, 0.67944998870694162, 3], [48, 43, 0.78805682820876111, 3], [51, 48, 0.72573389983179815, 3], [54, 43, 0.72752262764470577, 3], [57, 48, 0.71254422734755252, 3], [60, 43, 0.81410989190505889, 3], [63, 48, 0.74347871298751889, 3], [66, 43, 0.65280748129230837, 3], [69, 48, 0.734768604573383, 3], [72, 43, 0.8660114662893712, 3], [75, 48, 0.67310548891235633, 3], [78, 43, 0.65811503908707281, 3], [81, 48, 0.73069394322859826, 3], [84, 43, 0.81497037169863573, 3], [87, 48, 0.66833091293351143, 3], [90, 43, 0.66290555752105784, 3], [93, 48, 0.73975604912512694, 3], [96, 43, 0.85298710843815095, 3], [99, 48, 0.72481474740676421, 3], [102, 43, 0.71748055944001021, 3], [105, 48, 0.66779334973360249, 3], [108, 43, 0.88148481633884068, 3], [111, 48, 0.70970250344499031, 3], [114, 43, 0.66045623145991794, 3], [117, 48, 0.70323316891770704, 3], [120, 43, 0.75633466439463315, 3], [123, 48, 0.7445744239461779, 3], [126, 43, 0.71390527840946916, 3], [129, 48, 0.65618291702082587, 3], [132, 43, 0.84268279604292473, 3], [135, 48, 0.68148552249145045, 3], [138, 43, 0.7058720811582202, 3], [141, 48, 0.7050479148335731, 3], [144, 43, 0.8114068029400161, 3], [147, 48, 0.68990423286144009, 3], [150, 43, 0.67216246535605217, 3], [153, 48, 0.65316101456349407, 3], [156, 43, 0.81678837823150263, 3], [159, 48, 0.69329211099146271, 3], [162, 43, 0.72741608592838003, 3], [165, 48, 0.68352397512556962, 3], [168, 43, 0.85539312382434651, 3], [171, 48, 0.67189211679880723, 3], [174, 43, 0.68223496609823819, 3], [177, 48, 0.73544014586003525, 3]],
+[[0, 43, 0.90070611794486921, 3], [3, 34, 0.74282268176871691, 3], [6, 43, 0.68756710950549593, 3], [9, 34, 0.71555053212403752, 3], [12, 43, 0.76034242153260345, 3], [15, 34, 0.67730951568915243, 3], [18, 43, 0.69867346554167542, 3], [21, 34, 0.72558397880899772, 3], [24, 43, 0.85196281806864038, 3], [27, 34, 0.71570624740986799, 3], [30, 43, 0.73508694738983504, 3], [33, 34, 0.69032090145731495, 3], [36, 43, 0.87437358820505495, 3], [39, 34, 0.67342402729972539, 3], [42, 43, 0.69178382616826939, 3], [45, 34, 0.65336233070370653, 3], [48, 43, 0.85800776964317116, 3], [51, 34, 0.69188256970622852, 3], [54, 43, 0.73181839013005545, 3], [57, 34, 0.70770196933922702, 3], [60, 43, 0.83915983734872024, 3], [63, 34, 0.65217804226086096, 3], [66, 43, 0.73448277533520967, 3], [69, 34, 0.73179836697977318, 3], [72, 43, 0.87487891765990311, 3], [75, 34, 0.67044362226809739, 3], [78, 43, 0.70264371065192099, 3], [81, 34, 0.71179057931519618, 3], [84, 43, 0.8740242335524433, 3], [87, 34, 0.69210335033522996, 3], [90, 43, 0.73057490552554627, 3], [93, 34, 0.65742593937409655, 3], [96, 43, 0.897216068824921, 3], [99, 34, 0.67552534074440329, 3], [102, 43, 0.74842407010643885, 3], [105, 34, 0.72578731701562393, 3], [108, 43, 0.84346855188787839, 3], [111, 34, 0.74231512292010116, 3], [114, 43, 0.67456721807401698, 3], [117, 34, 0.70819009938384825, 3], [120, 43, 0.81123700980151492, 3], [123, 34, 0.72871523616383049, 3], [126, 43, 0.74519955954895623, 3], [129, 34, 0.70862154181656833, 3], [132, 43, 0.77956677877797065, 3], [135, 34, 0.7194435062283101, 3], [138, 43, 0.74730077767578429, 3], [141, 34, 0.73315911209236784, 3], [144, 43, 0.75119069282266837, 3], [147, 34, 0.72228001165625955, 3], [150, 43, 0.69583937906463833, 3], [153, 34, 0.72087765015931737, 3], [156, 43, 0.80052711545829425, 3], [159, 34, 0.67415900077645352, 3], [162, 43, 0.71667846452839012, 3], [165, 34, 0.73559050106293478, 3], [168, 43, 0.88190771301091475, 3], [171, 34, 0.70108873146445061, 3], [174, 43, 0.74833356473128465, 3], [177, 34, 0.74947652198211712, 3], [180, 43, 0.81158745527123677, 3], [183, 34, 0.71436322179635559, 3], [186, 43, 0.69504136381694614, 3], [189, 34, 0.69881967450638305, 3]]],
+18: [[[0, 31, 0.91414618042602414, 6], [6, 24, 0.71298982497012386, 6], [12, 32, 0.81303870130608091, 6], [18, 31, 0.70146204478484941, 6]],
+[[0, 24, 0.97420972018144714, 6], [6, 31, 0.65348467360822149, 6], [12, 26, 0.77999759911164923, 6], [18, 24, 0.71499756985534457, 6], [24, 31, 0.76545679617275186, 6], [30, 26, 0.72464043627105301, 6]],
+[[0, 32, 0.96839746371031044, 6], [6, 24, 0.7383135519270827, 6], [12, 26, 0.83678727084047755, 6], [18, 32, 0.68084753804273135, 6], [24, 24, 0.89662063033423611, 6], [30, 26, 0.72027994167313425, 6], [36, 32, 0.88742383921005208, 6], [42, 24, 0.73401091932155238, 6]],
+[[0, 26, 0.96443993724085353, 6], [6, 26, 0.70614731515727813, 6], [12, 26, 0.86340896185180149, 6], [18, 26, 0.74664344369869817, 6], [24, 26, 0.86543903819381884, 6], [30, 26, 0.70031407028854142, 6], [36, 26, 0.80326482970805313, 6], [42, 26, 0.70401718046397721, 6], [48, 26, 0.81717235550659439, 6], [54, 26, 0.73439827435161797, 6]],
+[[0, 26, 0.93948955420019553, 6], [6, 48, 0.65732513243916579, 6], [12, 46, 0.88186182846858496, 6], [18, 26, 0.70620376639714333, 6], [24, 48, 0.89829471318820886, 6], [30, 46, 0.70047567652877019, 6], [36, 26, 0.81028053931891619, 6], [42, 48, 0.6945929689786895, 6], [48, 46, 0.82544710578597713, 6], [54, 26, 0.68096995635386004, 6], [60, 48, 0.7948285180804705, 6], [66, 46, 0.72425718868680433, 6]],
+[[0, 41, 0.92057821058714318, 6], [6, 44, 0.65222437973498593, 6], [12, 24, 0.78839760337611409, 6], [18, 41, 0.66331590721149958, 6], [24, 44, 0.79211585725194678, 6], [30, 24, 0.67054673328728542, 6], [36, 41, 0.86212326778691173, 6], [42, 44, 0.69940801572645628, 6], [48, 24, 0.83188758283454201, 6], [54, 41, 0.74770707328981179, 6], [60, 44, 0.85141841724608025, 6], [66, 24, 0.74140482326703583, 6], [72, 41, 0.87846458088135293, 6], [78, 44, 0.73968773189193271, 6]],
+[[0, 41, 0.94009838336255835, 6], [6, 24, 0.74321383382950013, 6], [12, 24, 0.86544259358995879, 6], [18, 41, 0.67390648995027747, 6], [24, 24, 0.81848211684852012, 6], [30, 24, 0.72188229872365828, 6], [36, 41, 0.81199373434272537, 6], [42, 24, 0.73862007747014657, 6], [48, 24, 0.78500136053179559, 6], [54, 41, 0.74262644148484658, 6], [60, 24, 0.87569372608219065, 6], [66, 24, 0.72781277908185293, 6], [72, 41, 0.88136371399873692, 6], [78, 24, 0.68464806384325505, 6], [84, 24, 0.81710953214328508, 6], [90, 41, 0.73295279908643851, 6]],
+[[0, 38, 0.95847151264927133, 6], [6, 38, 0.72675011545177171, 6], [12, 46, 0.88872965225929113, 6], [18, 38, 0.67495323003089802, 6], [24, 38, 0.77612948128315384, 6], [30, 46, 0.66215329978950488, 6], [36, 38, 0.82684692918756486, 6], [42, 38, 0.73556518773644564, 6], [48, 46, 0.83193093370565208, 6], [54, 38, 0.72003903534059566, 6], [60, 38, 0.77075151079904158, 6], [66, 46, 0.66929193857581626, 6], [72, 38, 0.82784830145602162, 6], [78, 38, 0.67455784048709766, 6], [84, 46, 0.86308083323833107, 6], [90, 38, 0.7482013005918986, 6], [96, 38, 0.75696777108937152, 6], [102, 46, 0.74637868553636455, 6]],
+[[0, 36, 0.92447775497671825, 6], [6, 48, 0.74898108333582325, 6], [12, 29, 0.78663337787438081, 6], [18, 36, 0.65611981652688578, 6], [24, 48, 0.8105687254909405, 6], [30, 29, 0.74161952353006511, 6], [36, 36, 0.86338804652305545, 6], [42, 48, 0.69244908097989222, 6], [48, 29, 0.78251088805851521, 6], [54, 36, 0.65973106118254299, 6], [60, 48, 0.87082007465301114, 6], [66, 29, 0.72185529587579123, 6], [72, 36, 0.76260547137057366, 6], [78, 48, 0.71322132319309894, 6], [84, 29, 0.8698480505616164, 6], [90, 36, 0.74330892636732815, 6], [96, 48, 0.75737903656665917, 6], [102, 29, 0.70274783895554316, 6], [108, 36, 0.88525634845631163, 6], [114, 48, 0.67840890071368631, 6]],
+[[0, 36, 0.99295245890118389, 6], [6, 38, 0.65655867395509682, 6], [12, 41, 0.81092730969330673, 6], [18, 36, 0.74755276683545802, 6], [24, 38, 0.80157940166642683, 6], [30, 41, 0.7064467513123267, 6], [36, 36, 0.85549444601390323, 6], [42, 38, 0.65451918363439476, 6], [48, 41, 0.81854341475983905, 6], [54, 36, 0.69039973128191101, 6], [60, 38, 0.88866133699943328, 6], [66, 41, 0.73502888347862672, 6], [72, 36, 0.8062119553326883, 6], [78, 38, 0.72921143414383771, 6], [84, 41, 0.86630353159134776, 6], [90, 36, 0.68782836978771866, 6], [96, 38, 0.80356547921222932, 6], [102, 41, 0.69164971959839694, 6], [108, 36, 0.88119058150873397, 6], [114, 38, 0.67792047941432731, 6], [120, 41, 0.8623603156626285, 6], [126, 36, 0.7304323057199329, 6]],
+[[0, 46, 0.94455882891483811, 6], [6, 32, 0.6810109373883827, 6], [12, 26, 0.87276983732939439, 6], [18, 46, 0.73947851796835629, 6], [24, 32, 0.78333238100616298, 6], [30, 26, 0.69772457494512086, 6], [36, 46, 0.78120313282331566, 6], [42, 32, 0.74411907655668541, 6], [48, 26, 0.83798882293933119, 6], [54, 46, 0.68423534706676037, 6], [60, 32, 0.81270950196556724, 6], [66, 26, 0.68382277221523335, 6], [72, 46, 0.79647688385855819, 6], [78, 32, 0.74788918762374357, 6], [84, 26, 0.8793117655163567, 6], [90, 46, 0.72417061948939387, 6], [96, 32, 0.86054454376731371, 6], [102, 26, 0.7053740118504882, 6], [108, 46, 0.87171422383591191, 6], [114, 32, 0.67032848719549132, 6], [120, 26, 0.83949593519135435, 6], [126, 46, 0.71247187183526028, 6], [132, 32, 0.78113447005843439, 6], [138, 26, 0.66411769371662599, 6]],
+[[0, 26, 0.90565978750069465, 6], [6, 24, 0.67681864236441625, 6], [12, 36, 0.78586352121137937, 6], [18, 26, 0.71662389509200997, 6], [24, 24, 0.81836354230284503, 6], [30, 36, 0.66640355255582384, 6], [36, 26, 0.80442025759528168, 6], [42, 24, 0.67140460828688076, 6], [48, 36, 0.89157511528241817, 6], [54, 26, 0.71753496307853903, 6], [60, 24, 0.78986310628124778, 6], [66, 36, 0.7001842582953044, 6], [72, 26, 0.80250928733914095, 6], [78, 24, 0.67802578112400336, 6], [84, 36, 0.88866503232395422, 6], [90, 26, 0.68689690864617647, 6], [96, 24, 0.75556326417677289, 6], [102, 36, 0.65608272171718496, 6], [108, 26, 0.8426217626322362, 6], [114, 24, 0.67980098180445103, 6], [120, 36, 0.87918556644956747, 6], [126, 26, 0.71480632484083184, 6], [132, 24, 0.76449998432112509, 6], [138, 36, 0.72310965206758104, 6], [144, 26, 0.8147357033027981, 6], [150, 24, 0.72242852551843351, 6]],
+[[0, 32, 0.9891347085579848, 6], [6, 36, 0.73948461475056693, 6], [12, 36, 0.84663465433464979, 6], [18, 32, 0.71105824965696485, 6], [24, 36, 0.85158941097494467, 6], [30, 36, 0.69583467680036515, 6], [36, 32, 0.75897954529379597, 6], [42, 36, 0.70952493107413617, 6], [48, 36, 0.81384898433683095, 6], [54, 32, 0.71840608920653048, 6], [60, 36, 0.75884114227416599, 6], [66, 36, 0.6568825801183944, 6], [72, 32, 0.80931947506039315, 6], [78, 36, 0.66498770263468931, 6], [84, 36, 0.88957526419840982, 6], [90, 32, 0.67516181964593269, 6], [96, 36, 0.87455783664068143, 6], [102, 36, 0.70414890031389965, 6], [108, 32, 0.81041903265786275, 6], [114, 36, 0.74647617019814616, 6], [120, 36, 0.80494267638514438, 6], [126, 32, 0.68439575086321569, 6], [132, 36, 0.83772021370581284, 6], [138, 36, 0.7207547932256424, 6], [144, 32, 0.84417151210749997, 6], [150, 36, 0.67110055897756804, 6], [156, 36, 0.85180644696505547, 6], [162, 32, 0.70408297062537373, 6]],
+[[0, 36, 0.94589750324498256, 6], [6, 31, 0.70650683889275501, 6], [12, 34, 0.89678386444311187, 6], [18, 36, 0.7116444156767342, 6], [24, 31, 0.89796917050081404, 6], [30, 34, 0.65024508188908459, 6], [36, 36, 0.8008470032993964, 6], [42, 31, 0.68252737723740464, 6], [48, 34, 0.85843801756684446, 6], [54, 36, 0.68629079690778361, 6], [60, 31, 0.80946932600696209, 6], [66, 34, 0.73490689580634017, 6], [72, 36, 0.89175551635831085, 6], [78, 31, 0.69913107125809237, 6], [84, 34, 0.81483156589591899, 6], [90, 36, 0.73517468116067142, 6], [96, 31, 0.82596648659422511, 6], [102, 34, 0.74675078788427196, 6], [108, 36, 0.77790562228419935, 6], [114, 31, 0.67204065617652731, 6], [120, 34, 0.76399141844249108, 6], [126, 36, 0.65249573238827652, 6], [132, 31, 0.86095508523032638, 6], [138, 34, 0.65472001970391147, 6], [144, 36, 0.77812733868646256, 6], [150, 31, 0.68510817247022471, 6], [156, 34, 0.88989614259769378, 6], [162, 36, 0.73552798134010744, 6], [168, 31, 0.76926192377091696, 6], [174, 34, 0.74873584937582416, 6]],
+[[0, 36, 0.94710018697646181, 6], [6, 36, 0.72684070002106593, 6], [12, 24, 0.85379997602992486, 6], [18, 36, 0.70912352509215126, 6], [24, 36, 0.82986901252819634, 6], [30, 24, 0.70840303930267656, 6], [36, 36, 0.80164657570930964, 6], [42, 36, 0.73841986592218956, 6], [48, 24, 0.80721952126894747, 6], [54, 36, 0.68374162078322098, 6], [60, 36, 0.77333538062365392, 6], [66, 24, 0.69864655313561985, 6], [72, 36, 0.86252711987885078, 6], [78, 36, 0.7448207834776871, 6], [84, 24, 0.85545685230388446, 6], [90, 36, 0.66720136156626852, 6], [96, 36, 0.76588239857602491, 6], [102, 24, 0.66745273686057272, 6], [108, 36, 0.78249428968569967, 6], [114, 36, 0.67057374235540768, 6], [120, 24, 0.85316687911401845, 6], [126, 36, 0.67726681032408231, 6], [132, 36, 0.88903529313140184, 6], [138, 24, 0.6519536663260781, 6], [144, 36, 0.76972252753882509, 6], [150, 36, 0.68471346262760124, 6], [156, 24, 0.88373813895967146, 6], [162, 36, 0.69987876485566869, 6], [168, 36, 0.85836647298749191, 6], [174, 24, 0.71623382999520202, 6], [180, 36, 0.85712602985806086, 6], [186, 36, 0.7496672794348419, 6]]],
+19: [[[0, 34, 0.94343743899849775, 12], [12, 48, 0.87445529179868864, 12]],
+[[0, 26, 0.99207816588077435, 6], [6, 24, 0.74385675189819744, 6], [12, 38, 0.79547069010091043, 12], [24, 26, 0.88615671714874711, 6], [30, 24, 0.74777031301955554, 6]],
+[[0, 24, 0.99927423561350259, 12], [12, 24, 0.78692866392335359, 6], [18, 24, 0.69262010288662523, 12], [30, 24, 0.72390730316997276, 12], [42, 24, 0.666115258605529, 6]],
+[[0, 41, 0.99357613169079517, 6], [6, 43, 0.7073630308078257, 12], [18, 46, 0.67165574765193869, 6], [24, 41, 0.86565397555446555, 6], [30, 43, 0.70515213162208334, 6], [36, 46, 0.83971310744003536, 6], [42, 41, 0.74076808030659258, 6], [48, 43, 0.87503158586961882, 12]],
+[[0, 31, 0.9123356313814982, 12], [12, 24, 0.83145940848174249, 12], [24, 31, 0.76565291891357168, 6], [30, 31, 0.72491054618626705, 12], [42, 24, 0.68248618794605331, 12], [54, 31, 0.67093741643924965, 12], [66, 31, 0.70817819944886784, 6]],
+[[0, 46, 0.92394070210858636, 12], [12, 29, 0.78872650461199467, 6], [18, 26, 0.72562351702164596, 12], [30, 46, 0.74624235514010628, 12], [42, 29, 0.74032753000068696, 12], [54, 26, 0.70470937639439069, 12], [66, 46, 0.66702062408473006, 6], [72, 29, 0.76288048605548153, 6], [78, 26, 0.7329026924423967, 6]],
+[[0, 46, 0.9218207823690846, 6], [6, 46, 0.72440415689507387, 6], [12, 46, 0.88291257333910766, 6], [18, 46, 0.65488744402675281, 6], [24, 46, 0.80297114145541504, 12], [36, 46, 0.78810916398459085, 6], [42, 46, 0.66855234661045393, 12], [54, 46, 0.69394552129400777, 12], [66, 46, 0.70684436588875521, 6], [72, 46, 0.8222465872758461, 6], [78, 46, 0.68257743752959854, 6], [84, 46, 0.87804691525871004, 12]],
+[[0, 34, 0.91712879391530266, 12], [12, 24, 0.79097271454287843, 6], [18, 31, 0.66997267166612795, 12], [30, 34, 0.65215984388685366, 6], [36, 24, 0.84259825042217762, 6], [42, 31, 0.66169689160942169, 12], [54, 34, 0.73587904207459476, 6], [60, 24, 0.78907779607308481, 12], [72, 31, 0.80588822352186296, 6], [78, 34, 0.67792808610894528, 12], [90, 24, 0.67743285776228535, 6], [96, 31, 0.80550702000857322, 12]],
+[[0, 32, 0.96581436599992743, 6], [6, 38, 0.73648904141743765, 6], [12, 29, 0.82737735764129694, 6], [18, 32, 0.68251833638103676, 12], [30, 38, 0.68786770972571565, 6], [36, 29, 0.86036448686333278, 6], [42, 32, 0.6633101084571017, 6], [48, 38, 0.77602792136189669, 12], [60, 29, 0.86839390590114118, 12], [72, 32, 0.75505394707711893, 12], [84, 38, 0.87067826104324997, 12], [96, 29, 0.89912005558077346, 12], [108, 32, 0.80977388681856033, 12]],
+[[0, 36, 0.95237975305506806, 12], [12, 43, 0.79782767577304281, 6], [18, 44, 0.65882741671892353, 12], [30, 36, 0.70293047178636514, 12], [42, 43, 0.72147256122516235, 6], [48, 44, 0.84008159104437585, 6], [54, 36, 0.74811384646756707, 6], [60, 43, 0.82222632655187256, 12], [72, 44, 0.87448240113171305, 6], [78, 36, 0.70588912234932855, 6], [84, 43, 0.75276075255447406, 12], [96, 44, 0.87242390448924156, 6], [102, 36, 0.66594745974422076, 12], [114, 43, 0.67948801775363488, 6], [120, 44, 0.86992628936869776, 12]],
+[[0, 41, 0.99112777222264126, 12], [12, 43, 0.89087589773039566, 6], [18, 24, 0.66665736656470376, 6], [24, 41, 0.81555866935308441, 12], [36, 43, 0.78481740812663858, 6], [42, 24, 0.7385447068904949, 12], [54, 41, 0.73780369565835724, 12], [66, 43, 0.65535713405674512, 6], [72, 24, 0.83339358103909855, 6], [78, 41, 0.68674436638729652, 12], [90, 43, 0.70567375337769089, 6], [96, 24, 0.8875537063905713, 6], [102, 41, 0.65666804404080437, 12], [114, 43, 0.74554552396077245, 12], [126, 24, 0.66715146929363489, 6], [132, 41, 0.80316538377684377, 12]],
+[[0, 44, 0.93954441258885535, 12], [12, 31, 0.81913320000678491, 6], [18, 36, 0.680695532249593, 6], [24, 44, 0.8366894534153847, 12], [36, 31, 0.8026552596243991, 6], [42, 36, 0.71772009999836484, 12], [54, 44, 0.69858297237761746, 12], [66, 31, 0.67484326856240484, 12], [78, 36, 0.74191565608174237, 6], [84, 44, 0.80184860855811824, 12], [96, 31, 0.80682965406632745, 12], [108, 36, 0.8142615979036294, 12], [120, 44, 0.8607866310901513, 12], [132, 31, 0.75411793727840359, 6], [138, 36, 0.71103864722197963, 6], [144, 44, 0.76985401780218166, 12]],
+[[0, 24, 0.94644716188105837, 12], [12, 36, 0.85503731016428808, 6], [18, 36, 0.71352189483536232, 6], [24, 24, 0.79053536431115368, 6], [30, 36, 0.70695166452783642, 12], [42, 36, 0.65455966526918685, 6], [48, 24, 0.76423504228572459, 12], [60, 36, 0.76915281186912199, 6], [66, 36, 0.70310761676294375, 12], [78, 24, 0.74492489152756003, 12], [90, 36, 0.71460228182527263, 12], [102, 36, 0.69235583999833594, 12], [114, 24, 0.67593345603784627, 6], [120, 36, 0.84891889178439683, 6], [126, 36, 0.73322349229537309, 12], [138, 24, 0.74127056481376319, 6], [144, 36, 0.8489318392539299, 6], [150, 36, 0.6893822808642277, 6], [156, 24, 0.77615268994022746, 12]],
+[[0, 48, 0.95351308655706091, 12], [12, 44, 0.81395010801511614, 6], [18, 24, 0.7248530757656475, 12], [30, 48, 0.69041849421854029, 6], [36, 44, 0.89326880051449176, 12], [48, 24, 0.8853413229192042, 6], [54, 48, 0.68633025566929762, 12], [66, 44, 0.73566893023118451, 12], [78, 24, 0.73204681176690944, 6], [84, 48, 0.79444090992707872, 12], [96, 44, 0.75303513980062253, 12], [108, 24, 0.77053612037738262, 6], [114, 48, 0.67989534752713043, 12], [126, 44, 0.7452635327884618, 12], [138, 24, 0.67974627183837089, 6], [144, 48, 0.78328325060007897, 6], [150, 44, 0.66883488052235407, 12], [162, 24, 0.74997648748842005, 6], [168, 48, 0.8046815877859248, 6], [174, 44, 0.71021969318216871, 6]],
+[[0, 24, 0.98048614423414093, 12], [12, 34, 0.84487667849534698, 12], [24, 48, 0.85057712677086039, 12], [36, 24, 0.79237595462017762, 6], [42, 34, 0.70513567014739098, 12], [54, 48, 0.66377688614216723, 6], [60, 24, 0.86199370333672676, 12], [72, 34, 0.85788789570493051, 12], [84, 48, 0.7733016197546515, 12], [96, 24, 0.80343083891505451, 12], [108, 34, 0.7717252576335728, 12], [120, 48, 0.86587977527054349, 6], [126, 24, 0.74810256626940796, 6], [132, 34, 0.89391321275001612, 12], [144, 48, 0.8976384557926822, 6], [150, 24, 0.68760464437545943, 12], [162, 34, 0.65471135483412579, 6], [168, 48, 0.8582503974666652, 12], [180, 24, 0.76598962106467339, 12]]],
+20: [[[0, 48, 0.9334435604891832, 6], [6, 46, 0.69477422563241897, 12], [18, 41, 0.70190370619627462, 6]],
+[[0, 36, 0.90972975437806025, 3], [3, 48, 0.74725094097541223, 3], [6, 36, 0.72093733166115115, 3], [9, 36, 0.66874994735892934, 3], [12, 36, 0.84758350745979916, 12], [24, 48, 0.80646774351209127, 3], [27, 36, 0.66735985598565328, 3], [30, 36, 0.67882520133750379, 3], [33, 36, 0.72995464755515871, 3]],
+[[0, 46, 0.92401495794243227, 12], [12, 38, 0.79436811442026689, 6], [18, 44, 0.70702203670973607, 3], [21, 31, 0.66643818643142994, 3], [24, 46, 0.89023538543833058, 3], [27, 38, 0.68124489389695009, 3], [30, 44, 0.71791153703604638, 12], [42, 31, 0.72678065576732043, 6]],
+[[0, 26, 0.91019761440664004, 6], [6, 24, 0.71857198104916264, 6], [12, 24, 0.8884177320837201, 6], [18, 29, 0.71211690742264988, 6], [24, 26, 0.87935334114351438, 3], [27, 24, 0.72910623612054448, 3], [30, 24, 0.68790546879092551, 12], [42, 29, 0.71739190786382701, 3], [45, 26, 0.65665369348985159, 3], [48, 24, 0.85744299702705085, 6], [54, 24, 0.68461209224652642, 3], [57, 29, 0.67824637944893018, 3]],
+[[0, 41, 0.99899372523353847, 12], [12, 36, 0.84218460950513219, 6], [18, 36, 0.74898885127447534, 6], [24, 36, 0.81088761007257193, 12], [36, 41, 0.78946786680115755, 12], [48, 36, 0.81011272034370285, 12], [60, 36, 0.83186695924059617, 12]],
+[[0, 44, 0.97868861386704975, 6], [6, 44, 0.68683717205219552, 6], [12, 48, 0.80771601074539445, 6], [18, 36, 0.68804077468553426, 12], [30, 44, 0.65786274396703259, 6], [36, 44, 0.81618762166174463, 12], [48, 48, 0.88701701353628892, 12], [60, 36, 0.75810899725813652, 6], [66, 44, 0.7329045414874108, 6], [72, 44, 0.88478804162024283, 3], [75, 48, 0.74337903142851336, 3], [78, 36, 0.67724551654537934, 6]],
+[[0, 36, 0.95868246835640758, 3], [3, 48, 0.73066875515745011, 3], [6, 46, 0.66270872253412183, 6], [12, 46, 0.89910792845453491, 6], [18, 36, 0.72317824890282434, 12], [30, 48, 0.73048517956742676, 6], [36, 46, 0.7982647556744471, 3], [39, 46, 0.68022576192612072, 3], [42, 36, 0.68340009259599355, 3], [45, 48, 0.65921691345868128, 3], [48, 46, 0.80038709216342097, 12], [60, 46, 0.75640770007973923, 3], [63, 36, 0.734152853561995, 3], [66, 48, 0.65494433470006885, 3], [69, 46, 0.70082679622548893, 3], [72, 46, 0.89967598786710212, 3], [75, 36, 0.65368600341825578, 3], [78, 48, 0.69003835128878754, 6], [84, 46, 0.88314914621514129, 6], [90, 46, 0.74299900629704951, 6]],
+[[0, 32, 0.9128820526720155, 3], [3, 36, 0.66939154925302169, 3], [6, 32, 0.71892189630359815, 3], [9, 44, 0.73776960671360925, 3], [12, 32, 0.87992118948817066, 6], [18, 36, 0.6532638774187598, 6], [24, 32, 0.84038267243042464, 3], [27, 44, 0.67993318544563763, 3], [30, 32, 0.66063243929586235, 6], [36, 36, 0.89547687299016476, 12], [48, 32, 0.8566375212526679, 6], [54, 44, 0.65374183750140691, 12], [66, 32, 0.65578565423934754, 6], [72, 36, 0.77966695794833951, 12], [84, 32, 0.76116014488654549, 3], [87, 44, 0.68642087704565524, 3], [90, 32, 0.67258545803086844, 12], [102, 36, 0.74135957122562013, 6]],
+[[0, 46, 0.93241514684413163, 6], [6, 48, 0.72390894107288539, 6], [12, 43, 0.84918631031979552, 12], [24, 43, 0.86675833056105944, 6], [30, 46, 0.74766829625436082, 3], [33, 48, 0.72245673457783011, 3], [36, 43, 0.83116877166077729, 3], [39, 43, 0.74994990262731076, 3], [42, 46, 0.69740095676188352, 3], [45, 48, 0.70781119984062235, 3], [48, 43, 0.78451617188720446, 6], [54, 43, 0.72602968929805578, 6], [60, 46, 0.79285483468459161, 3], [63, 48, 0.65526666295273917, 3], [66, 43, 0.66222310585679933, 3], [69, 43, 0.73326341502039272, 3], [72, 46, 0.83037398398650941, 6], [78, 48, 0.74584542038957791, 6], [84, 43, 0.76763285194453934, 6], [90, 43, 0.74372467679243548, 12], [102, 46, 0.67017104194121524, 3], [105, 48, 0.65983771301136807, 3], [108, 43, 0.8935980295278767, 3], [111, 43, 0.66518575285368309, 3], [114, 46, 0.66851356385176597, 6]],
+[[0, 44, 0.90800408710065272, 12], [12, 36, 0.75922412283743212, 12], [24, 32, 0.82618518247614992, 6], [30, 44, 0.70760528022178593, 3], [33, 44, 0.68258142422859824, 3], [36, 36, 0.7526716142145069, 3], [39, 32, 0.66547279516442404, 3], [42, 44, 0.71145146728421693, 12], [54, 44, 0.74225097191342349, 6], [60, 36, 0.76065395376109946, 3], [63, 32, 0.69434021707406701, 3], [66, 44, 0.68676987209868101, 6], [72, 44, 0.82924138864888386, 3], [75, 36, 0.7469230235286054, 3], [78, 32, 0.73692941019440417, 6], [84, 44, 0.78300250630480983, 3], [87, 44, 0.66405194935135425, 3], [90, 36, 0.71114255147077565, 12], [102, 32, 0.69561757437121152, 12], [114, 44, 0.66813139730411575, 3], [117, 44, 0.67463714728473911, 3], [120, 36, 0.89801347038888779, 6], [126, 32, 0.72780647419415945, 6]],
+[[0, 44, 0.99872898073921912, 6], [6, 36, 0.70955468279971834, 12], [18, 43, 0.70932770849134574, 12], [30, 44, 0.73489478138267916, 6], [36, 44, 0.79760261318745918, 12], [48, 36, 0.86135984589033876, 6], [54, 43, 0.67531785903613173, 6], [60, 44, 0.81223531046546027, 6], [66, 44, 0.74165335140927502, 6], [72, 36, 0.82208391373802214, 3], [75, 43, 0.72525515017970787, 3], [78, 44, 0.68603982928640017, 3], [81, 44, 0.67223493241481824, 3], [84, 36, 0.8693389723389312, 6], [90, 43, 0.72966353541581941, 6], [96, 44, 0.78405707320280715, 6], [102, 44, 0.67447814382927906, 12], [114, 36, 0.73771620599151466, 3], [117, 43, 0.68127796658528716, 3], [120, 44, 0.77050769204376157, 12], [132, 44, 0.77374471300709546, 3], [135, 36, 0.65310727178379824, 3], [138, 43, 0.73359712342091599, 6]],
+[[0, 48, 0.93667948675805324, 6], [6, 34, 0.69312388725983676, 6], [12, 26, 0.78427156945627485, 6], [18, 26, 0.69036600091538913, 12], [30, 48, 0.74346725730369312, 12], [42, 34, 0.65929381550375088, 12], [54, 26, 0.6542618006534362, 6], [60, 26, 0.77749657990634169, 12], [72, 48, 0.79215393064381501, 3], [75, 34, 0.65822459760487217, 3], [78, 26, 0.65111471584878733, 6], [84, 26, 0.83141917813722577, 3], [87, 48, 0.74501699336927341, 3], [90, 34, 0.70268959720463475, 12], [102, 26, 0.65195141495820497, 6], [108, 26, 0.83478360275588759, 6], [114, 48, 0.69216039135373952, 6], [120, 34, 0.75841712114634285, 3], [123, 26, 0.72448402452824279, 3], [126, 26, 0.72572126461724962, 6], [132, 48, 0.78941128326311072, 12], [144, 34, 0.77729691359549768, 3], [147, 26, 0.65271817371827645, 3], [150, 26, 0.71717795142674723, 6]],
+[[0, 41, 0.95792220847117671, 6], [6, 34, 0.65060515538861774, 6], [12, 48, 0.856167849374875, 12], [24, 36, 0.8507136899197002, 3], [27, 41, 0.66500849950509489, 3], [30, 34, 0.71247914502532406, 12], [42, 48, 0.73029700331220404, 12], [54, 36, 0.69607536606354969, 3], [57, 41, 0.69509468288190224, 3], [60, 34, 0.86888906072954131, 6], [66, 48, 0.72330841851795957, 12], [78, 36, 0.70406036089772139, 6], [84, 41, 0.7931257083499702, 6], [90, 34, 0.70401106287672977, 6], [96, 48, 0.77706690806155021, 3], [99, 36, 0.69558695745096766, 3], [102, 41, 0.66451997787113992, 3], [105, 34, 0.70111650277106563, 3], [108, 48, 0.8537898273397877, 6], [114, 36, 0.73944078463360496, 12], [126, 41, 0.65097358998155297, 6], [132, 34, 0.78625934669041686, 6], [138, 48, 0.68223077689473244, 6], [144, 36, 0.89064429237481102, 12], [156, 41, 0.82542761331590542, 6], [162, 34, 0.71792391354555563, 6]],
+[[0, 46, 0.90160199895320414, 12], [12, 46, 0.76839671026587919, 6], [18, 36, 0.67519842523621687, 6], [24, 36, 0.84133624952164332, 6], [30, 46, 0.73761239869475126, 12], [42, 46, 0.69767763116584758, 3], [45, 36, 0.65054670433808726, 3], [48, 36, 0.87848912920575306, 6], [54, 46, 0.70285472864346232, 6], [60, 46, 0.89628938390650859, 6], [66, 36, 0.72908990541401342, 6], [72, 36, 0.8880858802021695, 6], [78, 46, 0.71143815888680828, 12], [90, 46, 0.69414053110890017, 3], [93, 36, 0.7462887119942101, 3], [96, 36, 0.77011947516745349, 6], [102, 46, 0.71742720266138427, 3], [105, 46, 0.67708344196095205, 3], [108, 36, 0.78678536062299687, 12], [120, 36, 0.80333681526399303, 6], [126, 46, 0.74929259489173483, 12], [138, 46, 0.73169811668099072, 6], [144, 36, 0.895090857648148, 3], [147, 36, 0.73560880156045239, 3], [150, 46, 0.69944139448706943, 6], [156, 46, 0.87090669792688369, 3], [159, 36, 0.74916521862954222, 3], [162, 36, 0.70580957573629632, 6], [168, 46, 0.77447355863470491, 3], [171, 46, 0.71144556247757762, 3], [174, 36, 0.6737045979441485, 6]],
+[[0, 31, 0.94371327095067403, 6], [6, 24, 0.70407542874921913, 12], [18, 34, 0.73723518174297242, 12], [30, 29, 0.66098725469706188, 6], [36, 31, 0.88552823474198938, 6], [42, 24, 0.71915875647628613, 6], [48, 34, 0.81830848409040913, 3], [51, 29, 0.73260877360112298, 3], [54, 31, 0.65064975196536445, 3], [57, 24, 0.66306467354831533, 3], [60, 34, 0.76488045052910258, 6], [66, 29, 0.73716809316733045, 6], [72, 31, 0.86364744629431522, 6], [78, 24, 0.69451934651503988, 3], [81, 34, 0.67332022058418695, 3], [84, 29, 0.86156668627281807, 6], [90, 31, 0.65577512425246465, 6], [96, 24, 0.79739577988839316, 6], [102, 34, 0.70830764733420892, 6], [108, 29, 0.88987764908936273, 6], [114, 31, 0.68114712911936615, 12], [126, 24, 0.70715692786087259, 12], [138, 34, 0.71264444525678372, 6], [144, 29, 0.78891479284971511, 6], [150, 31, 0.6706549519175693, 6], [156, 24, 0.79964612725018513, 3], [159, 34, 0.73146776455900819, 3], [162, 29, 0.68017694142777652, 3], [165, 31, 0.71592794379192481, 3], [168, 24, 0.81340138643553883, 3], [171, 34, 0.6752449896019499, 3], [174, 29, 0.68712656173959719, 3], [177, 31, 0.73043134757110739, 3], [180, 24, 0.88709579038609165, 3], [183, 34, 0.69105241834098718, 3], [186, 29, 0.74633551326908698, 6]]],
+21: [[[0, 26, 0.9125333251105181, 6], [6, 41, 0.65390739347630444, 6], [12, 26, 0.87789896669984402, 6], [18, 26, 0.72917564298744697, 6]],
+[[0, 29, 0.96463220526363103, 6], [6, 29, 0.73680666252467264, 12], [18, 24, 0.72344819685359796, 6], [24, 44, 0.87167406927642266, 6], [30, 29, 0.66854163123467458, 6]],
+[[0, 29, 0.98099423123262985, 6], [6, 24, 0.65317195756749014, 6], [12, 31, 0.79324809118199024, 6], [18, 31, 0.74134636376433527, 6], [24, 29, 0.87318074292244541, 6], [30, 24, 0.72302948514227638, 6], [36, 31, 0.80099402720643587, 12]],
+[[0, 41, 0.92830895620274334, 6], [6, 24, 0.72324098999488751, 3], [9, 34, 0.68176541315799222, 3], [12, 24, 0.78583872386143738, 12], [24, 41, 0.79792975632675611, 6], [30, 24, 0.72549126817246945, 3], [33, 34, 0.72065313458326608, 3], [36, 24, 0.84591862721329725, 3], [39, 41, 0.72006471348861556, 3], [42, 24, 0.65587137933942408, 6], [48, 34, 0.86356923416280229, 6], [54, 24, 0.67625377500133321, 6]],
+[[0, 24, 0.92061194946642078, 6], [6, 43, 0.68083332705219779, 6], [12, 44, 0.79582491328879779, 6], [18, 44, 0.72537461713192897, 6], [24, 24, 0.78921877620341463, 12], [36, 43, 0.78397151943101973, 6], [42, 44, 0.73910890569872156, 6], [48, 44, 0.89360745588944446, 12], [60, 24, 0.8557109107677392, 3], [63, 43, 0.65781218158082055, 3], [66, 44, 0.6621865248781329, 6]],
+[[0, 24, 0.9803616031708039, 12], [12, 43, 0.76784426787299442, 6], [18, 43, 0.69235241050748086, 12], [30, 41, 0.65633192865831058, 3], [33, 24, 0.72507834211493205, 3], [36, 43, 0.89204268438245304, 6], [42, 43, 0.65221013624644353, 6], [48, 41, 0.76647636536571762, 6], [54, 24, 0.65372340633143966, 6], [60, 43, 0.79255740844304012, 6], [66, 43, 0.72134804888889881, 3], [69, 41, 0.68877657997752617, 3], [72, 24, 0.89361066954413348, 6], [78, 43, 0.66146779733803518, 6]],
+[[0, 43, 0.96310501695118578, 3], [3, 43, 0.74401776465870573, 3], [6, 43, 0.67572988245924881, 3], [9, 43, 0.67441662191264673, 3], [12, 43, 0.76155916634423249, 3], [15, 43, 0.73668593521968107, 3], [18, 43, 0.6667820297470648, 6], [24, 43, 0.88455296595619448, 12], [36, 43, 0.80514080856792469, 6], [42, 43, 0.68494468990114954, 6], [48, 43, 0.85470663768525623, 3], [51, 43, 0.7475529120791915, 3], [54, 43, 0.72731362099881669, 3], [57, 43, 0.7443990109256039, 3], [60, 43, 0.77135268406552537, 3], [63, 43, 0.68355460984733163, 3], [66, 43, 0.71832636249885784, 6], [72, 43, 0.80698122054901122, 12], [84, 43, 0.85596485591898541, 3], [87, 43, 0.66601996297831667, 3], [90, 43, 0.74896104782355866, 6]],
+[[0, 43, 0.95964818681503283, 3], [3, 32, 0.71233592522894917, 3], [6, 24, 0.74644250123211042, 6], [12, 36, 0.75444162692193928, 3], [15, 43, 0.7302344681438474, 3], [18, 32, 0.70488125661182566, 3], [21, 24, 0.74821270394913619, 3], [24, 36, 0.85339489750798669, 12], [36, 43, 0.82986978466140504, 12], [48, 32, 0.7933058643305152, 3], [51, 24, 0.65986540561176732, 3], [54, 36, 0.71147410854717497, 6], [60, 43, 0.7620853512051613, 6], [66, 32, 0.74785527580280453, 6], [72, 24, 0.75187053344505383, 6], [78, 36, 0.69544835378863423, 6], [84, 43, 0.88477468525308289, 6], [90, 32, 0.71601667604962027, 3], [93, 24, 0.67088994622161624, 3], [96, 36, 0.86485163358127692, 6], [102, 43, 0.73923028088142773, 6]],
+[[0, 34, 0.95080629382409165, 6], [6, 29, 0.74951403335844224, 12], [18, 48, 0.69968642644664147, 6], [24, 36, 0.81934067181511971, 12], [36, 34, 0.77652920408421255, 6], [42, 29, 0.73514135622601651, 6], [48, 48, 0.89717507528474216, 12], [60, 36, 0.86864471046516933, 6], [66, 34, 0.7095986437083861, 12], [78, 29, 0.74738843122547804, 6], [84, 48, 0.75324300358623852, 12], [96, 36, 0.76835561747696812, 3], [99, 34, 0.7079612393326099, 3], [102, 29, 0.67615155995723375, 3], [105, 48, 0.69108999600717258, 3], [108, 36, 0.7571644306762384, 3], [111, 34, 0.71773960928004632, 3], [114, 29, 0.71426068845301327, 6]],
+[[0, 48, 0.91262844393203968, 6], [6, 29, 0.66446450011004721, 3], [9, 34, 0.67829162705675461, 3], [12, 24, 0.84295038923855725, 12], [24, 48, 0.75690726441120715, 6], [30, 29, 0.65301891441298465, 12], [42, 34, 0.67972238856594569, 3], [45, 24, 0.72106169705418244, 3], [48, 48, 0.86551467711552843, 6], [54, 29, 0.71516789206244591, 3], [57, 34, 0.69911686504443449, 3], [60, 24, 0.76770254660193948, 6], [66, 48, 0.70499854394928885, 6], [72, 29, 0.81429859396518811, 6], [78, 34, 0.73691244850731552, 12], [90, 24, 0.71240193645182837, 12], [102, 48, 0.70137001652661435, 3], [105, 29, 0.65402276160281236, 3], [108, 34, 0.82573159305557631, 12], [120, 24, 0.82238484359645925, 6], [126, 48, 0.7274672992435125, 6]],
+[[0, 43, 0.99943542026186449, 6], [6, 26, 0.67922017177522043, 12], [18, 24, 0.67203199056640195, 3], [21, 32, 0.74933413563505902, 3], [24, 43, 0.80309331374929693, 3], [27, 26, 0.71937952242351733, 3], [30, 24, 0.70597829422659353, 12], [42, 32, 0.6796295302866574, 3], [45, 43, 0.69451787775714546, 3], [48, 26, 0.88897887349817628, 3], [51, 24, 0.74413634859510802, 3], [54, 32, 0.6504734723624328, 12], [66, 43, 0.66016614206283719, 12], [78, 26, 0.71408641772054526, 3], [81, 24, 0.69679647027408764, 3], [84, 32, 0.89413217261081335, 6], [90, 43, 0.72023816587502598, 6], [96, 26, 0.84639835352908976, 6], [102, 24, 0.69333054269537819, 12], [114, 32, 0.70959550189549558, 6], [120, 43, 0.77953747438278875, 6], [126, 26, 0.65712807098546167, 6], [132, 24, 0.75511591234053854, 12]],
+[[0, 44, 0.90468777996244998, 6], [6, 46, 0.68165535389960097, 3], [9, 41, 0.67551866606254507, 3], [12, 41, 0.78649491997425591, 3], [15, 44, 0.70060452044060084, 3], [18, 46, 0.68048994697794518, 6], [24, 41, 0.89291397019725782, 6], [30, 41, 0.71697796712758199, 12], [42, 44, 0.6573481387442992, 12], [54, 46, 0.7493425871193643, 6], [60, 41, 0.87772075365730129, 6], [66, 41, 0.69858095950932797, 6], [72, 44, 0.79633729826194799, 12], [84, 46, 0.84409930644142683, 6], [90, 41, 0.66175709661673709, 6], [96, 41, 0.76359136862022425, 6], [102, 44, 0.72148896110094041, 6], [108, 46, 0.76836241447044595, 6], [114, 41, 0.73619585308366986, 12], [126, 41, 0.65827540267483131, 12], [138, 44, 0.72482275391711826, 12], [150, 46, 0.69354897082855449, 6]],
+[[0, 48, 0.94739675683296254, 6], [6, 36, 0.69179984093839375, 6], [12, 46, 0.82581156204204054, 3], [15, 46, 0.70465367079506647, 3], [18, 48, 0.6679348135485772, 6], [24, 36, 0.82487168897492669, 6], [30, 46, 0.66738659878104745, 6], [36, 46, 0.86460880662837225, 6], [42, 48, 0.68695347282762209, 3], [45, 36, 0.66583665120910618, 3], [48, 46, 0.87279600693734793, 6], [54, 46, 0.74308966065811677, 6], [60, 48, 0.87519936376406715, 6], [66, 36, 0.66755570592766522, 6], [72, 46, 0.89559431276770551, 6], [78, 46, 0.69084590582489835, 3], [81, 48, 0.73736697550549846, 3], [84, 36, 0.85277350192646184, 6], [90, 46, 0.73182047909075476, 6], [96, 46, 0.80972314380301569, 6], [102, 48, 0.69973426159444996, 6], [108, 36, 0.86622829021896919, 3], [111, 46, 0.65412863683661326, 3], [114, 46, 0.67288040513315839, 6], [120, 48, 0.81723733329998771, 6], [126, 36, 0.6681911257670784, 3], [129, 46, 0.71033043528681683, 3], [132, 46, 0.76088222014492779, 6], [138, 48, 0.68899762102838114, 6], [144, 36, 0.80235366609554237, 3], [147, 46, 0.67668924216456261, 3], [150, 46, 0.67870910013387387, 3], [153, 48, 0.6644788829526852, 3], [156, 36, 0.79754637365476777, 3], [159, 46, 0.70860084582226757, 3], [162, 46, 0.69832568403745543, 6]],
+[[0, 44, 0.98858433253383238, 12], [12, 36, 0.75648899130256975, 3], [15, 46, 0.70053249288479991, 3], [18, 48, 0.68809356161706248, 3], [21, 44, 0.72146323065653939, 3], [24, 36, 0.89140975909633835, 3], [27, 46, 0.72617325446490155, 3], [30, 48, 0.72053509056859399, 12], [42, 44, 0.73524270370739297, 6], [48, 36, 0.80144260938431489, 6], [54, 46, 0.72000012762446675, 3], [57, 48, 0.69026843353344036, 3], [60, 44, 0.82816321896956469, 3], [63, 36, 0.71843677842978004, 3], [66, 46, 0.69246872664179582, 6], [72, 48, 0.84570755281938981, 3], [75, 44, 0.66887838165670088, 3], [78, 36, 0.67873076987891823, 6], [84, 46, 0.83382261284059012, 12], [96, 48, 0.88280430106387908, 6], [102, 44, 0.68946575920592501, 6], [108, 36, 0.7948468342077194, 6], [114, 46, 0.69592025376919142, 6], [120, 48, 0.88039375735006209, 12], [132, 44, 0.82437516958088208, 3], [135, 36, 0.70757279440864074, 3], [138, 46, 0.72668828994318169, 6], [144, 48, 0.82918321114344429, 3], [147, 44, 0.7138062068301585, 3], [150, 36, 0.74199239983869469, 12], [162, 46, 0.65819398964404408, 3], [165, 48, 0.66605946224537071, 3], [168, 44, 0.88431474311298841, 6], [174, 36, 0.70378567260134839, 6]],
+[[0, 46, 0.92142031054221019, 6], [6, 46, 0.70478779789370327, 6], [12, 32, 0.83729834725514596, 6], [18, 44, 0.66973820327677902, 3], [21, 46, 0.68607804791459459, 3], [24, 46, 0.81910449963619036, 3], [27, 32, 0.70425140180150558, 3], [30, 44, 0.74594272452133681, 12], [42, 46, 0.71248862657028, 6], [48, 46, 0.85726377375904439, 6], [54, 32, 0.66665727392386198, 6], [60, 44, 0.805559895383261, 6], [66, 46, 0.67057262820180596, 6], [72, 46, 0.78104212251186578, 6], [78, 32, 0.71768378078700046, 6], [84, 44, 0.87509712501104642, 3], [87, 46, 0.65389449297722768, 3], [90, 46, 0.69765475708775448, 6], [96, 32, 0.85905086580082046, 6], [102, 44, 0.69339482211970682, 6], [108, 46, 0.75167016995860414, 12], [120, 46, 0.7808256804128213, 3], [123, 32, 0.71305419749945753, 3], [126, 44, 0.6753485608766987, 6], [132, 46, 0.81117728365299169, 6], [138, 46, 0.66364938100201376, 3], [141, 32, 0.70478860468321247, 3], [144, 44, 0.79543457012257668, 3], [147, 46, 0.74956585104346096, 3], [150, 46, 0.70096179457305352, 6], [156, 32, 0.796987037796002, 3], [159, 44, 0.72903407136030673, 3], [162, 46, 0.66888673579790092, 6], [168, 46, 0.85153988588164597, 12], [180, 32, 0.83947905532115141, 6], [186, 44, 0.68609484698949164, 6]]],
+32: [[[0, 38, 0.95624260623319235, 6], [6, 48, 0.71743954734270088, 18]],
+[[0, 29, 0.97627467325369621, 6], [6, 29, 0.74326314626179124, 6], [12, 29, 0.77296963553708675, 6], [18, 24, 0.70343920954653494, 6], [24, 36, 0.75090854753173042, 12]],
+[[0, 43, 0.92980250637131268, 12], [12, 46, 0.85461335380708781, 6], [18, 36, 0.69341910507204674, 12], [30, 24, 0.66564724409758724, 6], [36, 31, 0.85911463641628516, 6], [42, 43, 0.6503667584931806, 6]],
+[[0, 36, 0.97213806120505686, 6], [6, 43, 0.66557059825812215, 6], [12, 24, 0.81345008340552538, 6], [18, 24, 0.65919123215914799, 6], [24, 43, 0.79361138276848964, 18], [42, 36, 0.72344022935435981, 6], [48, 43, 0.87631797100207354, 6], [54, 24, 0.662286526651789, 6]],
+[[0, 31, 0.94429667670621553, 12], [12, 32, 0.82702239832716118, 12], [24, 31, 0.88122964884193533, 12], [36, 29, 0.88932296431988034, 18], [54, 38, 0.70410300008531435, 6], [60, 31, 0.85063340218051198, 12]],
+[[0, 29, 0.91120602487385305, 6], [6, 36, 0.73428056560128407, 6], [12, 32, 0.89674271846730269, 18], [30, 24, 0.73375397793953367, 12], [42, 26, 0.74518678290128149, 18], [60, 29, 0.83533701461135179, 6], [66, 36, 0.74910636573297051, 12], [78, 32, 0.73123245653062197, 6]],
+[[0, 44, 0.91726800902118988, 6], [6, 26, 0.7381462328738585, 12], [18, 26, 0.6743043057263457, 6], [24, 24, 0.8393998691765554, 6], [30, 36, 0.71089197464248788, 6], [36, 44, 0.86614340112608068, 6], [42, 26, 0.69103452091113071, 6], [48, 26, 0.82078818512819218, 12], [60, 24, 0.89007673892983097, 18], [78, 36, 0.65971829816405192, 6], [84, 44, 0.88823757539494541, 12]],
+[[0, 24, 0.94873497427266429, 12], [12, 26, 0.79313446421011058, 12], [24, 26, 0.79121707668391061, 12], [36, 36, 0.79276201802418444, 6], [42, 36, 0.71750887024724053, 6], [48, 24, 0.7638473063538529, 6], [54, 26, 0.70303959102950608, 6], [60, 26, 0.88234760806168688, 18], [78, 36, 0.7491413725293089, 18], [96, 36, 0.86606783371537999, 6], [102, 24, 0.73758496511387328, 6]],
+[[0, 32, 0.9344846156732356, 6], [6, 29, 0.69943546095481568, 12], [18, 24, 0.65268600378567576, 12], [30, 43, 0.67494490384745098, 12], [42, 48, 0.72773520955505666, 6], [48, 32, 0.78085557478109435, 18], [66, 29, 0.72590392551517158, 18], [84, 24, 0.79868184909070972, 6], [90, 43, 0.67417368271206213, 6], [96, 48, 0.77806249270300687, 6], [102, 32, 0.72484075785765434, 12], [114, 29, 0.68258525019378991, 6]],
+[[0, 26, 0.93237429231469426, 6], [6, 26, 0.69966393895721501, 18], [24, 24, 0.79197110233541024, 12], [36, 41, 0.87488333190835987, 18], [54, 36, 0.67531245787409588, 6], [60, 26, 0.77106035096433123, 6], [66, 26, 0.68339896120180643, 18], [84, 24, 0.86875437233489561, 18], [102, 41, 0.72457216505662292, 6], [108, 36, 0.88247068190445432, 6], [114, 26, 0.71976246138768851, 6], [120, 26, 0.76566629738256708, 6], [126, 24, 0.74262802711698861, 6]],
+[[0, 36, 0.93194503327303058, 6], [6, 41, 0.65255206722257098, 12], [18, 26, 0.66454916752309301, 6], [24, 26, 0.88537916270412753, 18], [42, 26, 0.65113078620581588, 12], [54, 36, 0.67991386398651765, 6], [60, 41, 0.86334292465548801, 12], [72, 26, 0.85751482074959007, 12], [84, 26, 0.75698400898633278, 18], [102, 26, 0.7486689475829722, 6], [108, 36, 0.82173764104089231, 12], [120, 41, 0.87707242452173706, 18], [138, 26, 0.68013210739196639, 6]],
+[[0, 26, 0.95583592657749417, 12], [12, 46, 0.78979855277055211, 12], [24, 48, 0.84463511986996065, 6], [30, 32, 0.73264893278430621, 6], [36, 41, 0.78779936381990778, 6], [42, 26, 0.74025923505033175, 6], [48, 46, 0.82902699810028735, 12], [60, 48, 0.81722411075977219, 18], [78, 32, 0.68957311041375502, 6], [84, 41, 0.82931474568967289, 6], [90, 26, 0.66851510436396311, 6], [96, 46, 0.77701393011124897, 12], [108, 48, 0.87021552357223397, 12], [120, 32, 0.77386490773473182, 6], [126, 41, 0.73985018415391401, 12], [138, 26, 0.74651508179226689, 6], [144, 46, 0.79548654019890741, 12]],
+[[0, 38, 0.99899825400885844, 12], [12, 29, 0.82562503107812291, 6], [18, 32, 0.74133550940954474, 6], [24, 31, 0.80213981008863322, 12], [36, 26, 0.85278989289166662, 18], [54, 38, 0.68254832503680363, 6], [60, 29, 0.84272040750438215, 6], [66, 32, 0.6745059648634274, 6], [72, 31, 0.81164616099789144, 18], [90, 26, 0.67695508679775851, 12], [102, 38, 0.7183648708319661, 6], [108, 29, 0.7808744904456989, 12], [120, 32, 0.85032315655769752, 6], [126, 31, 0.74840054219675722, 12], [138, 26, 0.69807642198956787, 12], [150, 38, 0.74062397777901801, 6], [156, 29, 0.89025755050286093, 12]],
+[[0, 24, 0.92867306635200841, 18], [18, 24, 0.70719187935365124, 6], [24, 26, 0.88654361290954808, 12], [36, 26, 0.75201106416785302, 6], [42, 26, 0.69347997718156495, 6], [48, 24, 0.84941010310830922, 6], [54, 24, 0.66195554344133456, 6], [60, 26, 0.85913332153051469, 12], [72, 26, 0.79174142342961462, 18], [90, 26, 0.74345549372486719, 12], [102, 24, 0.70549365480295534, 12], [114, 24, 0.74758965766703334, 6], [120, 26, 0.80732721913152938, 18], [138, 26, 0.65768998301773873, 6], [144, 26, 0.82407232597436231, 6], [150, 24, 0.73335116772080178, 6], [156, 24, 0.8745369616137515, 6], [162, 26, 0.68975803519214385, 12], [174, 26, 0.72364331234335533, 6]],
+[[0, 32, 0.94451711389049109, 6], [6, 46, 0.65390420276306094, 12], [18, 31, 0.68331552046098065, 6], [24, 26, 0.87012505266641826, 12], [36, 43, 0.89737377809948871, 6], [42, 32, 0.66043290890699291, 12], [54, 46, 0.67692630714767565, 12], [66, 31, 0.73991603766231917, 18], [84, 26, 0.87560992991972797, 18], [102, 43, 0.71263250813917589, 18], [120, 32, 0.78567554018619656, 6], [126, 46, 0.72072646666358686, 6], [132, 31, 0.89095681839176011, 18], [150, 26, 0.6688085460115254, 6], [156, 43, 0.77379310698571879, 18], [174, 32, 0.66495647086856069, 6], [180, 46, 0.81026746299408992, 6], [186, 31, 0.65070036765006956, 6]]],
+33: [[[0, 46, 0.9771698449965569, 6], [6, 24, 0.70657893816302419, 6], [12, 24, 0.87146738729949413, 12]],
+[[0, 31, 0.94473968743845893, 12], [12, 38, 0.83763796711808558, 6], [18, 24, 0.74789297440145275, 12], [30, 31, 0.68137270565958707, 6]],
+[[0, 26, 0.91941210550478025, 6], [6, 43, 0.71909920951626083, 6], [12, 31, 0.84670362396737309, 12], [24, 38, 0.8610785017549778, 6], [30, 24, 0.7007573728056411, 12], [42, 26, 0.68601231986481348, 6]],
+[[0, 32, 0.91817561554188576, 12], [12, 29, 0.88974524769201868, 12], [24, 38, 0.84146532126019391, 6], [30, 46, 0.65842776130703307, 6], [36, 46, 0.80626525511475133, 12], [48, 32, 0.7791265135371569, 12]],
+[[0, 46, 0.9311023460533876, 6], [6, 29, 0.74572933762350124, 6], [12, 26, 0.7803091993516349, 6], [18, 32, 0.65974607888161019, 6], [24, 24, 0.83331274268307531, 6], [30, 46, 0.71402128505435036, 12], [42, 29, 0.73092642474924818, 18], [60, 26, 0.88040897453813505, 12]],
+[[0, 43, 0.93699558967693097, 18], [18, 24, 0.73583894530849747, 6], [24, 46, 0.83332386902205646, 6], [30, 46, 0.71565162984625841, 18], [48, 24, 0.79584956534961337, 6], [54, 43, 0.72111883792834375, 18], [72, 24, 0.76371127867485666, 12]],
+[[0, 31, 0.90544047407107531, 12], [12, 36, 0.83017321747576034, 12], [24, 36, 0.77802192670995429, 18], [42, 32, 0.69723306155680065, 6], [48, 32, 0.83925138037880953, 12], [60, 31, 0.87036749709309802, 6], [66, 36, 0.68635587538426612, 6], [72, 36, 0.83800349569179744, 12], [84, 32, 0.82917425431820935, 12]],
+[[0, 36, 0.97568253648414727, 6], [6, 24, 0.67411201407390975, 12], [18, 26, 0.73175511353294065, 6], [24, 24, 0.86963559481135877, 12], [36, 24, 0.75647286403450342, 12], [48, 36, 0.81880316766049099, 18], [66, 24, 0.71684525273879829, 6], [72, 26, 0.89954820953376602, 6], [78, 24, 0.68356713701056038, 12], [90, 24, 0.70516107023358887, 12], [102, 36, 0.65035181363787664, 6]],
+[[0, 24, 0.98219154396083319, 18], [18, 36, 0.73982024058097773, 12], [30, 32, 0.6888540688749345, 6], [36, 29, 0.85616582414241327, 12], [48, 24, 0.81924566409378086, 12], [60, 24, 0.83321468991051695, 6], [66, 36, 0.74160315709890368, 12], [78, 32, 0.71483136541781933, 12], [90, 29, 0.74809876058587288, 12], [102, 24, 0.7328752871149451, 12], [114, 24, 0.71033148888213515, 6]],
+[[0, 24, 0.93454293393077581, 12], [12, 34, 0.81323745913534573, 6], [18, 29, 0.65408202919440661, 12], [30, 29, 0.72775833012592162, 12], [42, 36, 0.67480972654910665, 12], [54, 24, 0.705548195013737, 12], [66, 34, 0.74587853156499284, 6], [72, 29, 0.78680714134685903, 6], [78, 29, 0.74203544140035682, 12], [90, 36, 0.73100302125322825, 6], [96, 24, 0.77649851335305253, 6], [102, 34, 0.65984816608814534, 6], [108, 29, 0.86968835589937399, 12], [120, 29, 0.84938666815562269, 12]],
+[[0, 29, 0.98589611881660222, 12], [12, 26, 0.77877720211796375, 12], [24, 26, 0.86374207596813268, 6], [30, 24, 0.74616503791526911, 12], [42, 29, 0.72607158807187011, 6], [48, 29, 0.86083511767480303, 12], [60, 26, 0.82679032236096806, 6], [66, 26, 0.66653580680310076, 12], [78, 24, 0.7246400669286327, 18], [96, 29, 0.84153068073805426, 6], [102, 29, 0.68990149044044313, 6], [108, 26, 0.81842571490364202, 6], [114, 26, 0.72938540271269148, 18], [132, 24, 0.87651860560723427, 12]],
+[[0, 26, 0.9871764005254906, 12], [12, 46, 0.78184433122579788, 12], [24, 46, 0.87052123094156109, 6], [30, 46, 0.65730994193934689, 6], [36, 41, 0.82875808185392386, 6], [42, 26, 0.69808677597371582, 6], [48, 46, 0.83442350050600511, 12], [60, 46, 0.79645571362463874, 12], [72, 46, 0.8846691543712486, 6], [78, 41, 0.74640743177031776, 6], [84, 26, 0.79295625013115512, 6], [90, 46, 0.67488031191907893, 12], [102, 46, 0.65427375529906795, 12], [114, 46, 0.74852067214139129, 12], [126, 41, 0.72364188735303681, 12], [138, 26, 0.71527034251704225, 18]],
+[[0, 48, 0.91560328131582536, 12], [12, 31, 0.79503922677596339, 6], [18, 38, 0.67968227382264801, 6], [24, 36, 0.78352013925710984, 6], [30, 48, 0.73291685178616062, 12], [42, 48, 0.72999088214229402, 6], [48, 31, 0.83222583236052006, 12], [60, 38, 0.81865153638982946, 6], [66, 36, 0.74249917745727245, 12], [78, 48, 0.65059289248322494, 6], [84, 48, 0.77961096342442804, 6], [90, 31, 0.73148020629236132, 6], [96, 38, 0.8371408769977795, 12], [108, 36, 0.75446466794143729, 6], [114, 48, 0.72409972164819147, 18], [132, 48, 0.8375624702261516, 12], [144, 31, 0.80927614386188773, 18], [162, 38, 0.73863289714088554, 6]],
+[[0, 36, 0.92653016861953719, 6], [6, 38, 0.74211995273385689, 6], [12, 38, 0.76608687383270546, 18], [30, 41, 0.65710823906022098, 12], [42, 26, 0.67435326215976454, 6], [48, 36, 0.75331722249649169, 12], [60, 38, 0.79849596058701866, 6], [66, 38, 0.72959502920772312, 12], [78, 41, 0.69181450599309324, 6], [84, 26, 0.82037972811115767, 12], [96, 36, 0.80281827793985738, 12], [108, 38, 0.87586583272239538, 6], [114, 38, 0.72383741289067549, 12], [126, 41, 0.68978690800325992, 6], [132, 26, 0.89719999773018611, 12], [144, 36, 0.78924309576976215, 18], [162, 38, 0.66717951913220452, 6], [168, 38, 0.89027497298371305, 6], [174, 41, 0.66190932146625581, 6]],
+[[0, 48, 0.948894180694422, 12], [12, 34, 0.78235836718021023, 6], [18, 34, 0.66803197878059783, 12], [30, 32, 0.67789538109178971, 6], [36, 32, 0.87783023561170526, 6], [42, 48, 0.66891325737677443, 12], [54, 34, 0.67097769367841298, 12], [66, 34, 0.73988179413004429, 6], [72, 32, 0.84103407105835126, 6], [78, 32, 0.70623663666631131, 12], [90, 48, 0.65996904098901188, 6], [96, 34, 0.76130246771325183, 12], [108, 34, 0.88806606911117714, 12], [120, 32, 0.80076137304196304, 6], [126, 32, 0.69413574748412821, 18], [144, 48, 0.8966623242255316, 6], [150, 34, 0.6887535223053538, 12], [162, 34, 0.66522384724169947, 12], [174, 32, 0.7078060862975516, 12], [186, 32, 0.72248784927601761, 6]]],
+34: [[[0, 48, 0.9113695906873277, 18], [18, 43, 0.65056339439169009, 6]],
+[[0, 34, 0.97038562664649408, 18], [18, 31, 0.65273681696677921, 18]],
+[[0, 36, 0.94631108191589619, 12], [12, 34, 0.85721367837519968, 12], [24, 24, 0.8146544090298089, 6], [30, 24, 0.69893183741397513, 6], [36, 26, 0.86723185065980213, 12]],
+[[0, 41, 0.92741804428879315, 12], [12, 36, 0.82675779236788538, 18], [30, 29, 0.65946767992160271, 18], [48, 26, 0.89298608418281866, 12]],
+[[0, 48, 0.94434078297502799, 6], [6, 36, 0.72639867581164885, 18], [24, 36, 0.8048119938671503, 12], [36, 48, 0.83941670701803595, 12], [48, 36, 0.80215038363904256, 6], [54, 26, 0.74583241608000783, 6], [60, 48, 0.81406543411323384, 12]],
+[[0, 34, 0.90515196402378939, 6], [6, 31, 0.71573571447430462, 6], [12, 24, 0.7560558762350772, 12], [24, 48, 0.86228912254139811, 6], [30, 29, 0.74419336783499113, 6], [36, 29, 0.77798470909992812, 6], [42, 34, 0.70935619803802741, 12], [54, 31, 0.73743248384438731, 18], [72, 24, 0.8202254367092936, 12]],
+[[0, 41, 0.95087510442490109, 12], [12, 24, 0.83510901090963718, 12], [24, 29, 0.88615365680799352, 18], [42, 24, 0.72418747272685624, 12], [54, 32, 0.69081292599869848, 6], [60, 38, 0.75265873091250113, 12], [72, 41, 0.83611959659456381, 6], [78, 24, 0.67359456667708018, 6], [84, 29, 0.83356937919971263, 6], [90, 24, 0.67087597221917683, 6]],
+[[0, 32, 0.96162344795845744, 6], [6, 32, 0.65257234500245997, 12], [18, 26, 0.67607946320281176, 12], [30, 26, 0.70241547120601355, 12], [42, 26, 0.72366501154650231, 18], [60, 26, 0.82864094951580569, 12], [72, 32, 0.81873166574754686, 12], [84, 32, 0.79208964409290594, 12], [96, 26, 0.81380287105594917, 12]],
+[[0, 36, 0.96080317491357348, 12], [12, 24, 0.79131904133096531, 6], [18, 43, 0.74902665426777448, 18], [36, 44, 0.77130598738245848, 12], [48, 29, 0.84928461104462072, 12], [60, 36, 0.76388269271792242, 12], [72, 36, 0.77630483596737065, 6], [78, 24, 0.73306229876229201, 12], [90, 43, 0.71079060067913591, 6], [96, 44, 0.82935724973236524, 6], [102, 29, 0.71641808498480919, 12], [114, 36, 0.7143170395525118, 6]],
+[[0, 44, 0.98597434722388799, 18], [18, 46, 0.65858027213153247, 12], [30, 29, 0.70879168403946047, 18], [48, 26, 0.8128671142176791, 12], [60, 46, 0.76638330497369478, 18], [78, 29, 0.74668719647953607, 12], [90, 44, 0.70550877945470281, 18], [108, 46, 0.88778443162767751, 12], [120, 29, 0.75487181923819668, 6], [126, 26, 0.69055559565625957, 6]],
+[[0, 34, 0.92965924591700067, 12], [12, 43, 0.84952965566839778, 18], [30, 44, 0.66745432238674163, 18], [48, 38, 0.75416395673794234, 18], [66, 24, 0.7142074589016616, 18], [84, 31, 0.81339596197418873, 6], [90, 34, 0.74299381449734214, 12], [102, 43, 0.65396558960724738, 12], [114, 44, 0.708766335849633, 12], [126, 38, 0.70934736516108055, 12], [138, 24, 0.74864341696564551, 6]],
+[[0, 36, 0.93971056894407701, 6], [6, 43, 0.74883428225178128, 12], [18, 46, 0.73040263901533886, 12], [30, 36, 0.71976575780587848, 12], [42, 43, 0.68445590620645869, 12], [54, 46, 0.74934139906152919, 12], [66, 36, 0.67176184644540882, 6], [72, 43, 0.77777474259604462, 18], [90, 46, 0.69040270203889131, 6], [96, 36, 0.79049247968979286, 18], [114, 43, 0.67594874526704796, 12], [126, 46, 0.66362654648442243, 18], [144, 36, 0.89034954844173475, 12]],
+[[0, 34, 0.95705850658737235, 12], [12, 24, 0.832891349012715, 12], [24, 44, 0.80976062091503065, 12], [36, 44, 0.78196280681301666, 12], [48, 43, 0.78821020836531452, 18], [66, 29, 0.70650292335109111, 6], [72, 34, 0.85485951987335396, 12], [84, 24, 0.78160052360577459, 6], [90, 44, 0.71171185856026831, 18], [108, 44, 0.75611145215160558, 6], [114, 43, 0.70135385012290541, 12], [126, 29, 0.69877973879561528, 18], [144, 34, 0.87879810281445681, 12], [156, 24, 0.84937061727450613, 12]],
+[[0, 26, 0.93638675322742571, 6], [6, 26, 0.69775136776081148, 6], [12, 44, 0.83251900087139064, 6], [18, 41, 0.74388233891708699, 18], [36, 41, 0.87651184056698828, 12], [48, 36, 0.84526846528532518, 12], [60, 26, 0.77795763366080639, 18], [78, 26, 0.72567013565137994, 12], [90, 44, 0.66458829667504271, 18], [108, 41, 0.78651003135056941, 12], [120, 41, 0.76735897727600788, 18], [138, 36, 0.66340508942444509, 18], [156, 26, 0.77365383460046777, 6], [162, 26, 0.73774143029374195, 6], [168, 44, 0.83036171075783316, 12]],
+[[0, 44, 0.90241624029280987, 6], [6, 46, 0.70539776336238957, 12], [18, 36, 0.71794011451898965, 12], [30, 32, 0.65887633517919486, 6], [36, 38, 0.8583171159443066, 12], [48, 46, 0.78476913563433937, 12], [60, 44, 0.89368548452197527, 18], [78, 46, 0.68260105851743169, 12], [90, 36, 0.67100689089334287, 12], [102, 32, 0.69727368573224002, 12], [114, 38, 0.69710674566326358, 12], [126, 46, 0.67988731478945952, 12], [138, 44, 0.70645997739451372, 12], [150, 46, 0.70122329731082145, 18], [168, 36, 0.88481047370382759, 12], [180, 32, 0.85264811264663254, 12]]],
+35: [[[0, 43, 0.95630806720929595, 12], [12, 44, 0.87141587274047261, 12]],
+[[0, 34, 0.91928951281434534, 18], [18, 29, 0.70364678420830162, 6], [24, 34, 0.89560430230836086, 6], [30, 36, 0.71140704310858582, 6]],
+[[0, 31, 0.94465780727662807, 12], [12, 38, 0.89476715812674901, 24], [36, 36, 0.83812807524373656, 12]],
+[[0, 46, 0.9539187155473392, 12], [12, 48, 0.77639979512237267, 12], [24, 32, 0.78715386837831047, 24], [48, 32, 0.75257677751217655, 12]],
+[[0, 44, 0.93064759498871386, 24], [24, 44, 0.89407302737123495, 6], [30, 34, 0.6586249998238799, 24], [54, 24, 0.74634517957655477, 18]],
+[[0, 36, 0.98264071117189944, 6], [6, 44, 0.70817379974601835, 12], [18, 44, 0.73066339308815587, 12], [30, 26, 0.66346326195091831, 12], [42, 26, 0.71351358180503899, 18], [60, 24, 0.85237420447917733, 18], [78, 36, 0.74679096442239001, 6]],
+[[0, 26, 0.98084180754706796, 24], [24, 41, 0.79548895958025212, 18], [42, 26, 0.70234016317353254, 18], [60, 24, 0.8874807259612576, 12], [72, 24, 0.89558709497581412, 12], [84, 29, 0.85846397396344276, 12]],
+[[0, 48, 0.95808061392193078, 12], [12, 29, 0.79567837673678099, 12], [24, 36, 0.76769444698533185, 18], [42, 38, 0.71798159119533089, 12], [54, 36, 0.66821340001224472, 18], [72, 34, 0.7987074318109969, 18], [90, 48, 0.74004286555115739, 18]],
+[[0, 36, 0.93176834964088218, 18], [18, 43, 0.65315555152150295, 12], [30, 46, 0.72483039806713412, 12], [42, 48, 0.71303040048106636, 18], [60, 31, 0.79018843024327889, 18], [78, 29, 0.67202398603153346, 18], [96, 36, 0.82098968479411705, 18], [114, 43, 0.65266556381270191, 6]],
+[[0, 24, 0.95137912779447953, 6], [6, 24, 0.66742122604210974, 12], [18, 34, 0.73079414031582246, 24], [42, 24, 0.73737110552447904, 18], [60, 41, 0.79324508811315542, 12], [72, 36, 0.76051142371529434, 24], [96, 24, 0.89431146052142174, 18], [114, 24, 0.74712120245718527, 12], [126, 34, 0.71047155674477969, 6]],
+[[0, 38, 0.94140723033413853, 12], [12, 36, 0.84185786959241837, 12], [24, 36, 0.87801818228263784, 12], [36, 48, 0.89070626849920198, 12], [48, 46, 0.87944064369033725, 6], [54, 24, 0.71960004496644803, 12], [66, 38, 0.6790838654535053, 24], [90, 36, 0.71104636760625317, 12], [102, 36, 0.70180636076818792, 6], [108, 48, 0.85785775029702283, 24], [132, 46, 0.77785447319961853, 12]],
+[[0, 31, 0.99189411569703057, 12], [12, 38, 0.83001504115504399, 18], [30, 36, 0.74404157477514354, 12], [42, 24, 0.67283423256633601, 18], [60, 36, 0.89861065991754807, 12], [72, 38, 0.88314586497155656, 12], [84, 31, 0.85086709279339956, 18], [102, 38, 0.73920864301071754, 18], [120, 36, 0.87262426224370149, 12], [132, 24, 0.79322737058623005, 12], [144, 36, 0.87787191342437565, 12]],
+[[0, 31, 0.99396717868234918, 24], [24, 36, 0.82649144686186116, 12], [36, 36, 0.84636520526586911, 18], [54, 36, 0.73374468087494071, 18], [72, 26, 0.89294833927686368, 24], [96, 43, 0.81330904866414855, 12], [108, 31, 0.8528385967850004, 6], [114, 36, 0.67353234426652864, 24], [138, 36, 0.70915350881533679, 18], [156, 36, 0.81403971022032373, 6], [162, 26, 0.68023556218675918, 6]],
+[[0, 48, 0.93167602994982657, 18], [18, 43, 0.74561739030167007, 12], [30, 46, 0.67665470319990728, 12], [42, 48, 0.73851786387154794, 18], [60, 44, 0.75352126014453424, 12], [72, 46, 0.75590937199845964, 12], [84, 48, 0.8726524645273871, 24], [108, 43, 0.79414220458528362, 24], [132, 46, 0.8598346073676274, 18], [150, 48, 0.66261025791260963, 18], [168, 44, 0.88062785962456802, 12]],
+[[0, 43, 0.93901206412714844, 24], [24, 46, 0.79461956207575446, 12], [36, 48, 0.8536148773884813, 12], [48, 26, 0.77699901346010314, 12], [60, 38, 0.80201927443745236, 12], [72, 46, 0.8824256777989099, 18], [90, 43, 0.66315154329541037, 18], [108, 46, 0.75016329321047814, 24], [132, 48, 0.75189134738586749, 12], [144, 26, 0.78681239233281164, 24], [168, 38, 0.88189368494428921, 12], [180, 46, 0.89247235190963536, 12]]],
+45: [[[0, 44, 0.94518011772794652, 12], [12, 44, 0.7830987484625983, 12]],
+[[0, 46, 0.90290157319075504, 12], [12, 48, 0.86467319246923313, 12], [24, 48, 0.78680262296835513, 12]],
+[[0, 24, 0.96798263466509227, 6], [6, 24, 0.65818567220197688, 12], [18, 24, 0.73908977882088944, 6], [24, 24, 0.82487302557597897, 12], [36, 26, 0.86430561725912269, 12]],
+[[0, 38, 0.90647083194752109, 6], [6, 36, 0.70560977074726849, 12], [18, 41, 0.69958018755318219, 18], [36, 48, 0.82169575818820051, 24]],
+[[0, 31, 0.99860424539456261, 12], [12, 31, 0.82183433042147824, 6], [18, 32, 0.65070866181947695, 12], [30, 32, 0.69905866942133588, 12], [42, 29, 0.72838506173658346, 12], [54, 24, 0.71850797197710214, 18]],
+[[0, 29, 0.91596825589630426, 24], [24, 29, 0.82985385666137657, 18], [42, 26, 0.72742602236538489, 12], [54, 29, 0.66912018256160621, 6], [60, 29, 0.78500748670903264, 18], [78, 26, 0.6881865381976181, 6]],
+[[0, 48, 0.91109124045338852, 12], [12, 43, 0.83779434486013782, 12], [24, 29, 0.89932742780191233, 12], [36, 48, 0.87285699721950749, 18], [54, 48, 0.66667755083210567, 6], [60, 31, 0.77364510838250133, 6], [66, 34, 0.68121017665797934, 18], [84, 48, 0.75458189142889587, 12]],
+[[0, 24, 0.91610988067583499, 6], [6, 24, 0.69283383931976206, 18], [24, 31, 0.86954960388291525, 6], [30, 41, 0.70964172763759636, 24], [54, 41, 0.66869042186439875, 18], [72, 26, 0.85554679935647227, 6], [78, 44, 0.7452593301417868, 12], [90, 24, 0.70230156355309659, 18]],
+[[0, 38, 0.91572604900421906, 12], [12, 24, 0.85669267742049171, 24], [36, 32, 0.75305512563237198, 12], [48, 36, 0.82850275998701117, 12], [60, 43, 0.83752493216328128, 6], [66, 48, 0.69291496385445939, 6], [72, 29, 0.77399872521900726, 18], [90, 38, 0.74717264226707192, 12], [102, 24, 0.70543413934708088, 12], [114, 32, 0.69392877841708356, 6]],
+[[0, 46, 0.97472005688917795, 12], [12, 46, 0.84194119398767975, 18], [30, 43, 0.66555036381555965, 24], [54, 43, 0.74324307756224406, 12], [66, 46, 0.73380256622282092, 6], [72, 46, 0.84708920511565566, 12], [84, 43, 0.84284461264370403, 18], [102, 46, 0.66939371879901843, 18], [120, 46, 0.85476657834858305, 6], [126, 43, 0.7178341263302449, 6]],
+[[0, 26, 0.98477962058813506, 24], [24, 34, 0.80939568735824552, 12], [36, 38, 0.81361073583542709, 18], [54, 32, 0.70869496523362796, 18], [72, 24, 0.84849881576388253, 12], [84, 26, 0.8448979295194714, 24], [108, 34, 0.86787145957287393, 6], [114, 26, 0.69594654735848593, 6], [120, 34, 0.89064174225004222, 6], [126, 38, 0.6513207010090184, 12], [138, 32, 0.71588406162575979, 6]],
+[[0, 36, 0.99299083189814874, 12], [12, 26, 0.7793757352389723, 12], [24, 26, 0.87891262851006913, 12], [36, 26, 0.79508658025197543, 24], [60, 24, 0.78774932578170209, 12], [72, 29, 0.84436565395358665, 6], [78, 29, 0.67047539788121191, 6], [84, 36, 0.85070865648335614, 12], [96, 26, 0.81291157668203173, 12], [108, 26, 0.81137644053328883, 6], [114, 26, 0.7070908405665155, 6], [120, 24, 0.88732118605781773, 18], [138, 29, 0.71363255423629335, 12], [150, 29, 0.6562551224096419, 6]],
+[[0, 48, 0.9145300914728598, 18], [18, 26, 0.65478737597866565, 12], [30, 26, 0.74336143186174841, 18], [48, 24, 0.84832197704222434, 18], [66, 38, 0.66659050215889804, 18], [84, 38, 0.78577271653952674, 18], [102, 36, 0.71240931788152573, 12], [114, 48, 0.72252957409017815, 6], [120, 26, 0.85151588910719545, 12], [132, 26, 0.80101498704787144, 12], [144, 24, 0.75795094023862775, 18], [162, 38, 0.69834423836178239, 6]],
+[[0, 24, 0.93926641458085136, 12], [12, 36, 0.77948389082140968, 24], [36, 36, 0.81289668893186617, 12], [48, 41, 0.75005418101981447, 6], [54, 43, 0.7402004647180116, 12], [66, 36, 0.72028460159357122, 6], [72, 36, 0.82194999205376285, 12], [84, 24, 0.84117002163248311, 12], [96, 36, 0.84614119281567446, 12], [108, 36, 0.79298520925066185, 18], [126, 41, 0.68017066195947329, 6], [132, 43, 0.88204412169984758, 12], [144, 36, 0.85107812256406445, 6], [150, 36, 0.69048958195214882, 18], [168, 24, 0.85921334939658633, 6], [174, 36, 0.68223510218825367, 6]],
+[[0, 31, 0.93020373177928939, 12], [12, 44, 0.7774141704623323, 12], [24, 44, 0.77668890968678994, 6], [30, 34, 0.7008398648588019, 6], [36, 31, 0.75180785152119389, 12], [48, 44, 0.88814818559213593, 6], [54, 44, 0.71784084812885407, 24], [78, 31, 0.7454287952418448, 12], [90, 44, 0.67673745972669574, 24], [114, 44, 0.69200031002048668, 12], [126, 34, 0.7269866015235491, 24], [150, 31, 0.65458208183563982, 12], [162, 44, 0.66738698532035112, 6], [168, 44, 0.76108243126768671, 12], [180, 31, 0.78696367769738274, 6], [186, 44, 0.65426009077752789, 6]]],
+46: [[[0, 24, 0.98936795500214048, 12], [12, 26, 0.8725857199028878, 6], [18, 26, 0.74945130936475657, 6]],
+[[0, 26, 0.91342714955476889, 18], [18, 24, 0.73600634216578031, 18]],
+[[0, 41, 0.92197061830769611, 12], [12, 44, 0.76813597123404553, 6], [18, 48, 0.71965709161257196, 12], [30, 44, 0.74736208209228783, 12], [42, 48, 0.72138004467284511, 6]],
+[[0, 48, 0.96150228874234056, 12], [12, 43, 0.80538313467204981, 6], [18, 34, 0.74763178647986428, 18], [36, 29, 0.86138907624828687, 12], [48, 31, 0.7713336458116129, 6], [54, 32, 0.74059310746856022, 3], [57, 32, 0.74168012043862785, 3]],
+[[0, 43, 0.90267126167564915, 6], [6, 48, 0.68550762338300752, 6], [12, 38, 0.76126051705800368, 6], [18, 24, 0.72658312669571978, 6], [24, 32, 0.82272268436261542, 12], [36, 31, 0.80055989612808154, 6], [42, 34, 0.71512219794000553, 12], [54, 43, 0.67618490654574792, 12], [66, 48, 0.73331563951514755, 6]],
+[[0, 32, 0.90084162354046626, 18], [18, 36, 0.6962202313571485, 6], [24, 44, 0.75228358268274065, 12], [36, 36, 0.89150873779349349, 18], [54, 46, 0.70105755626552368, 6], [60, 46, 0.78080578981485371, 12], [72, 48, 0.77446004801761426, 12]],
+[[0, 29, 0.97922264872346088, 6], [6, 29, 0.72624134929249529, 6], [12, 29, 0.89532351953993428, 6], [18, 44, 0.70807811513951047, 6], [24, 24, 0.8174486196182863, 6], [30, 31, 0.69482363461232732, 12], [42, 24, 0.68288720675014736, 12], [54, 29, 0.74007681157863026, 18], [72, 29, 0.75914951581065127, 12], [84, 29, 0.86976201584168966, 12]],
+[[0, 36, 0.90459510602016191, 12], [12, 46, 0.83499262044908307, 12], [24, 48, 0.79834116807130384, 6], [30, 26, 0.72441664918901216, 6], [36, 44, 0.86919260703192891, 3], [39, 36, 0.70674521984748007, 3], [42, 24, 0.66086469769999889, 12], [54, 36, 0.69522290805382292, 6], [60, 46, 0.84446781753633171, 18], [78, 48, 0.66086658227759887, 18], [96, 26, 0.80897513163593149, 6], [102, 44, 0.73459407489365303, 6]],
+[[0, 43, 0.93924794632572528, 6], [6, 32, 0.6945591611020695, 6], [12, 34, 0.80949229767959985, 18], [30, 46, 0.72919046836919421, 18], [48, 48, 0.8134717788585355, 12], [60, 46, 0.82838615030891716, 18], [78, 46, 0.71028310964592689, 12], [90, 43, 0.68937364956843228, 12], [102, 32, 0.73027000218772553, 6], [108, 34, 0.86475237617393352, 12]],
+[[0, 48, 0.96566111301749458, 6], [6, 32, 0.72917047570486515, 12], [18, 32, 0.71148252742944496, 12], [30, 29, 0.70679605502998832, 18], [48, 26, 0.75584518483053598, 6], [54, 34, 0.6811621127306261, 12], [66, 32, 0.68833408725878464, 6], [72, 48, 0.82235365824929163, 6], [78, 32, 0.66591095525241761, 3], [81, 32, 0.66021028495125067, 3], [84, 29, 0.79173440490329239, 3], [87, 26, 0.67368047069234582, 3], [90, 34, 0.73272042962618922, 6], [96, 32, 0.79542685466292851, 12], [108, 48, 0.82806466407964363, 6], [114, 32, 0.68414571547298542, 18]],
+[[0, 34, 0.97982131352186275, 12], [12, 46, 0.76663601549914517, 12], [24, 46, 0.79522963632211419, 12], [36, 44, 0.87563518029394205, 12], [48, 43, 0.87004933235590276, 12], [60, 38, 0.75515434305697648, 18], [78, 44, 0.73502834003347151, 18], [96, 34, 0.81050043794001714, 6], [102, 46, 0.68458323374698293, 6], [108, 46, 0.75798345906799847, 18], [126, 44, 0.71039049275098332, 12], [138, 43, 0.67242007737444498, 6]],
+[[0, 46, 0.99576252550471833, 6], [6, 46, 0.65428187477849453, 6], [12, 48, 0.79191439619625525, 6], [18, 38, 0.72196581686389361, 3], [21, 38, 0.73848265695895554, 3], [24, 48, 0.78839507949966714, 18], [42, 43, 0.69283161812632166, 6], [48, 46, 0.77057075699121091, 6], [54, 46, 0.67268040267709106, 6], [60, 48, 0.75715342455569856, 12], [72, 38, 0.76865345125453155, 6], [78, 38, 0.71621452637210103, 12], [90, 48, 0.67575520105082076, 12], [102, 43, 0.65545693460725085, 12], [114, 46, 0.68594615809584081, 18], [132, 46, 0.85089178854885861, 12], [144, 48, 0.7775819136615717, 12]],
+[[0, 26, 0.91204589862776331, 6], [6, 24, 0.65725226436622575, 12], [18, 38, 0.70589520354606983, 6], [24, 24, 0.85428233582616908, 12], [36, 36, 0.8210926817074965, 6], [42, 34, 0.72735330726704661, 6], [48, 24, 0.82236616446931021, 6], [54, 26, 0.69523663005024861, 18], [72, 24, 0.77037034472791677, 18], [90, 38, 0.66650664743846366, 6], [96, 24, 0.86557375572850714, 6], [102, 36, 0.71464924511763483, 12], [114, 34, 0.66045460501773134, 18], [132, 24, 0.83215740371008551, 6], [138, 26, 0.65675244007484346, 3], [141, 24, 0.65217040181631092, 3], [144, 38, 0.79095619602758349, 6], [150, 24, 0.72792690053110287, 18]],
+[[0, 48, 0.91353414447482584, 12], [12, 38, 0.80723220783918959, 6], [18, 46, 0.69970937995729621, 18], [36, 48, 0.80601266074097278, 12], [48, 41, 0.78903273705012478, 18], [66, 46, 0.71641414111740565, 6], [72, 46, 0.75028740499683833, 6], [78, 48, 0.65994887433315086, 12], [90, 38, 0.65924310117492835, 12], [102, 46, 0.73345768424869884, 12], [114, 48, 0.71252845506308693, 12], [126, 41, 0.73208435584190035, 18], [144, 46, 0.89875653999865279, 3], [147, 46, 0.73230694567723975, 3], [150, 48, 0.67213046457170633, 18], [168, 38, 0.84145146755179412, 12]],
+[[0, 44, 0.92056142034809041, 12], [12, 36, 0.78341582320301939, 12], [24, 41, 0.86742257622018359, 18], [42, 34, 0.66524939146368733, 6], [48, 36, 0.87145223538443806, 3], [51, 36, 0.69934000929309625, 3], [54, 36, 0.65357590086799888, 6], [60, 44, 0.75669508915750949, 6], [66, 36, 0.67509691447151443, 18], [84, 41, 0.7702148463400027, 12], [96, 34, 0.76626806236210954, 6], [102, 36, 0.71883392128680645, 18], [120, 36, 0.8607349482392016, 18], [138, 36, 0.66983240788185805, 12], [150, 44, 0.69310617366290528, 6], [156, 36, 0.76328775296649676, 18], [174, 41, 0.66317185089445119, 6], [180, 34, 0.82202580930023839, 6], [186, 36, 0.72000925128923243, 6]]],
+47: [[[0, 24, 0.96436166550371705, 12], [12, 36, 0.89596858005994284, 12]],
+[[0, 31, 0.97984081066535356, 6], [6, 24, 0.65050021275323744, 12], [18, 24, 0.66074812271835204, 6], [24, 31, 0.81595555542728559, 3], [27, 38, 0.6814378442138096, 3], [30, 44, 0.65465035832766061, 3], [33, 46, 0.71934609827667628, 3]],
+[[0, 31, 0.92654893791600468, 6], [6, 36, 0.67944996686385473, 3], [9, 34, 0.70392356962536462, 3], [12, 41, 0.78222076421122189, 3], [15, 41, 0.73844016515663435, 3], [18, 34, 0.74932329005321885, 6], [24, 41, 0.85868574917435181, 18], [42, 41, 0.65567752839536675, 6]],
+[[0, 29, 0.95631996032378352, 6], [6, 32, 0.71616432108529993, 12], [18, 31, 0.69983787556030508, 12], [30, 24, 0.6741017619665518, 12], [42, 31, 0.71593320085734369, 12], [54, 29, 0.72130870749001708, 6]],
+[[0, 48, 0.98078574674845964, 12], [12, 48, 0.76321202443526037, 3], [15, 26, 0.67215518427261489, 3], [18, 26, 0.65394749242537942, 12], [30, 26, 0.6535350502919629, 6], [36, 48, 0.87193943203092017, 3], [39, 48, 0.71808674210353562, 3], [42, 26, 0.67600051341633594, 12], [54, 48, 0.72123495667941184, 6], [60, 48, 0.89321034135597643, 6], [66, 26, 0.74578526232041265, 6]],
+[[0, 48, 0.93712811177439304, 6], [6, 43, 0.66564870435097201, 12], [18, 48, 0.74028380083875733, 3], [21, 36, 0.68860784075824222, 3], [24, 24, 0.7802966297096281, 12], [36, 26, 0.86421789340290067, 6], [42, 24, 0.73832915461163307, 18], [60, 43, 0.75718696867154889, 12], [72, 48, 0.77679523252284222, 6], [78, 43, 0.7089038041814234, 6]],
+[[0, 44, 0.96011118545875962, 12], [12, 48, 0.80958581796983653, 6], [18, 29, 0.66166116341307057, 6], [24, 26, 0.81291843015095178, 12], [36, 26, 0.83623976512626863, 12], [48, 48, 0.76597244988267643, 18], [66, 29, 0.69817447895364459, 6], [72, 26, 0.77894655905344223, 6], [78, 44, 0.66191683505768184, 12], [90, 48, 0.68688489955518506, 6]],
+[[0, 26, 0.91403835744678918, 12], [12, 31, 0.82432824074420863, 6], [18, 48, 0.7426177213348174, 3], [21, 41, 0.7104698141081166, 3], [24, 44, 0.81381540617798098, 6], [30, 48, 0.66155237631957042, 6], [36, 41, 0.85785233344621081, 6], [42, 44, 0.68916768861534361, 6], [48, 26, 0.77360390681604285, 12], [60, 31, 0.77104632253770133, 12], [72, 48, 0.79003221372953225, 6], [78, 41, 0.72844679892540587, 3], [81, 44, 0.69195903746608267, 3], [84, 48, 0.84361875554256582, 3], [87, 41, 0.71422509136568124, 3], [90, 44, 0.68104538609955145, 6], [96, 26, 0.8623827696214057, 6], [102, 31, 0.74453671117172249, 6]],
+[[0, 41, 0.99800919268824373, 12], [12, 38, 0.86581234932815587, 12], [24, 48, 0.87579888319654553, 6], [30, 46, 0.66792267472180389, 12], [42, 46, 0.6993955554171144, 6], [48, 38, 0.84723370646891383, 12], [60, 31, 0.7505539215069259, 6], [66, 31, 0.74656554325840685, 6], [72, 41, 0.87223688150903989, 12], [84, 38, 0.7856888122902681, 12], [96, 48, 0.86124015585108871, 6], [102, 46, 0.65428663621264305, 6], [108, 46, 0.76907935042708864, 6], [114, 38, 0.69636050598628829, 6]],
+[[0, 29, 0.99697833355308418, 6], [6, 26, 0.67460788226697121, 6], [12, 24, 0.78045698236785921, 6], [18, 24, 0.69621873294570424, 18], [36, 36, 0.84455295772741079, 3], [39, 36, 0.65587409691953691, 3], [42, 48, 0.74122068767493676, 6], [48, 38, 0.83433637629965007, 6], [54, 29, 0.68138331955117426, 6], [60, 26, 0.83099295045240273, 12], [72, 24, 0.84712521357478177, 6], [78, 24, 0.67390547683173652, 12], [90, 36, 0.66822044867779107, 12], [102, 36, 0.68252019570944111, 6], [108, 48, 0.77988724409287391, 6], [114, 38, 0.70423632263040159, 6], [120, 29, 0.88149376688498593, 6], [126, 26, 0.65490319484847337, 6]],
+[[0, 24, 0.93017094330195482, 6], [6, 41, 0.74807489402756966, 12], [18, 24, 0.66753009486824688, 6], [24, 32, 0.79809166086615801, 12], [36, 41, 0.77314292075660851, 12], [48, 41, 0.88070763408231278, 6], [54, 24, 0.70095422289303155, 6], [60, 32, 0.86435696971092979, 6], [66, 24, 0.66646358407027384, 12], [78, 41, 0.68036199190656155, 6], [84, 24, 0.87954038764659437, 6], [90, 32, 0.73951623472144168, 18], [108, 41, 0.82835069143262463, 6], [114, 41, 0.70549966732057079, 12], [126, 24, 0.74223773650726577, 6], [132, 32, 0.84946088209079007, 12]],
+[[0, 46, 0.90297908855009956, 12], [12, 26, 0.79866419118484133, 6], [18, 26, 0.66913338202691175, 6], [24, 24, 0.77347882923146871, 12], [36, 26, 0.81203140007423813, 6], [42, 24, 0.73539798684034385, 12], [54, 46, 0.71194781810941854, 6], [60, 26, 0.85433963692556647, 12], [72, 46, 0.87689445657447951, 12], [84, 26, 0.84196260448168403, 12], [96, 26, 0.87644670007251124, 12], [108, 24, 0.7549210210990851, 12], [120, 26, 0.76643046199902609, 18], [138, 24, 0.71634106230086525, 6], [144, 46, 0.85359482772541573, 6], [150, 26, 0.67240668470239728, 3], [153, 46, 0.69567792876667001, 3]],
+[[0, 36, 0.96768870078758251, 6], [6, 38, 0.68656724560009963, 3], [9, 43, 0.65546829443655541, 3], [12, 36, 0.80274060698965111, 6], [18, 38, 0.69585012436327243, 12], [30, 43, 0.74718930906061842, 12], [42, 48, 0.69197537366554862, 6], [48, 43, 0.86636613482671421, 3], [51, 36, 0.744467246104074, 3], [54, 38, 0.73609346610103676, 6], [60, 43, 0.83199451794032453, 6], [66, 36, 0.6658128355304358, 12], [78, 38, 0.73439343116763378, 3], [81, 43, 0.65666429101882384, 3], [84, 48, 0.78075183708432538, 12], [96, 43, 0.86322716544829858, 6], [102, 36, 0.72889155937294903, 6], [108, 38, 0.84441202926089609, 12], [120, 43, 0.7792597750446173, 6], [126, 36, 0.66183471258142346, 3], [129, 38, 0.68690149986916704, 3], [132, 43, 0.77484017024605367, 12], [144, 48, 0.86382172928033463, 12], [156, 43, 0.82845496352022174, 12]],
+[[0, 24, 0.95877589814905928, 12], [12, 24, 0.86402668645625536, 6], [18, 38, 0.67654671626649709, 6], [24, 31, 0.75469335642480484, 12], [36, 44, 0.75338304394865629, 6], [42, 36, 0.68532548312939268, 12], [54, 24, 0.65460204182087589, 12], [66, 24, 0.69055422573613345, 6], [72, 24, 0.76571365104017142, 12], [84, 24, 0.87876484135603161, 6], [90, 38, 0.66006265123033936, 12], [102, 31, 0.66784321990659001, 12], [114, 44, 0.66460955797330634, 6], [120, 36, 0.79361056032448984, 6], [126, 24, 0.65863282519248267, 6], [132, 24, 0.7779794960700277, 12], [144, 24, 0.86039971962788286, 6], [150, 24, 0.69794868928649756, 6], [156, 38, 0.75701145978860662, 12], [168, 31, 0.81903747049107334, 12]],
+[[0, 26, 0.92731505235156875, 6], [6, 26, 0.70830731594634944, 6], [12, 38, 0.79439268104124594, 6], [18, 36, 0.66580040303799148, 18], [36, 26, 0.83225693639708787, 12], [48, 38, 0.82408337171411206, 12], [60, 36, 0.76165812649061437, 12], [72, 26, 0.89726190068072686, 6], [78, 26, 0.66681232448147632, 6], [84, 26, 0.84865751983676052, 6], [90, 38, 0.72314954409401377, 12], [102, 36, 0.65118800561733181, 12], [114, 26, 0.65187584402129273, 6], [120, 38, 0.89343952953417505, 12], [132, 36, 0.77214997613009773, 12], [144, 26, 0.87759314660843568, 6], [150, 26, 0.68770781842881901, 12], [162, 26, 0.69421605418181964, 12], [174, 38, 0.73609851193703324, 6], [180, 36, 0.79062766692084263, 6], [186, 26, 0.66180998753627396, 6]]],
+48: [[[0, 31, 0.9519845782009323, 6], [6, 31, 0.66148664109175825, 18]],
+[[0, 43, 0.91532500492313373, 6], [6, 34, 0.7403339511644994, 12], [18, 32, 0.6779900839320373, 6], [24, 38, 0.82051823313134731, 3], [27, 38, 0.65974821012589824, 3], [30, 29, 0.67086094101346394, 6]],
+[[0, 24, 0.94247397519817111, 12], [12, 29, 0.84199947027876887, 3], [15, 36, 0.72689179924952474, 3], [18, 46, 0.7411628066580358, 12], [30, 44, 0.74555256350167287, 6], [36, 46, 0.89146323822368334, 6], [42, 48, 0.65549927868472324, 6]],
+[[0, 24, 0.9808503761982903, 12], [12, 48, 0.77450328215074549, 3], [15, 46, 0.70615547638190712, 3], [18, 46, 0.7454969641584982, 12], [30, 46, 0.74678547682851204, 6], [36, 38, 0.78077895797871344, 3], [39, 48, 0.72198828244836766, 3], [42, 44, 0.72417041099996959, 6], [48, 24, 0.87403047743884932, 3], [51, 48, 0.69486989229810248, 3], [54, 46, 0.7042507192325661, 6]],
+[[0, 44, 0.91188180781469952, 6], [6, 26, 0.7366927499671333, 6], [12, 26, 0.86348436022561226, 6], [18, 24, 0.6756743242488169, 6], [24, 31, 0.78033470861633958, 12], [36, 26, 0.77496034322686391, 18], [54, 26, 0.72419806101814177, 12], [66, 41, 0.68294371531280296, 6]],
+[[0, 46, 0.92798151101057813, 6], [6, 24, 0.72061416945619705, 12], [18, 29, 0.72949356728269543, 6], [24, 34, 0.79280389990678279, 3], [27, 36, 0.69421662656233474, 3], [30, 48, 0.67682744149388785, 6], [36, 36, 0.85250439618108365, 6], [42, 24, 0.71510916671607383, 3], [45, 46, 0.73873132201074709, 3], [48, 24, 0.81948744555493125, 12], [60, 29, 0.79548553736625749, 6], [66, 34, 0.72452034163708356, 12], [78, 36, 0.68536000884940451, 6]],
+[[0, 46, 0.90342579335593731, 6], [6, 46, 0.66490476575762192, 6], [12, 48, 0.80292287003408092, 12], [24, 24, 0.86221231313468571, 6], [30, 38, 0.69099375209944935, 6], [36, 26, 0.80589866931009446, 12], [48, 43, 0.87526374789588757, 12], [60, 48, 0.78721411230441674, 18], [78, 46, 0.66001437891244952, 6], [84, 46, 0.84718022231797663, 6], [90, 48, 0.74438818227729919, 6]],
+[[0, 34, 0.93770175168675274, 12], [12, 29, 0.77090498921403972, 6], [18, 44, 0.68849327491827483, 6], [24, 29, 0.86242519755135338, 6], [30, 41, 0.73533731287626813, 3], [33, 31, 0.71575422366178032, 3], [36, 48, 0.85276040811569664, 6], [42, 32, 0.7397355390011191, 3], [45, 34, 0.67409129361889775, 3], [48, 29, 0.88016497508424241, 6], [54, 44, 0.7497812048863457, 3], [57, 29, 0.68301316873471796, 3], [60, 41, 0.77186513410567581, 6], [66, 31, 0.69429290594744519, 3], [69, 48, 0.74667857629133527, 3], [72, 32, 0.86112461242461691, 6], [78, 34, 0.66333971667947988, 6], [84, 29, 0.75624000582403739, 3], [87, 44, 0.74821289732267859, 3], [90, 29, 0.70020528791581549, 12], [102, 41, 0.73932247740689339, 6]],
+[[0, 48, 0.99724344651642349, 6], [6, 31, 0.69475186417773549, 12], [18, 26, 0.66804122941437505, 3], [21, 36, 0.67715293702264201, 3], [24, 24, 0.82444607529031788, 12], [36, 24, 0.86737774266482226, 12], [48, 34, 0.80470232571193012, 12], [60, 44, 0.76852323168203951, 3], [63, 48, 0.65248258870905151, 3], [66, 31, 0.67080283101652238, 6], [72, 26, 0.82800046156540985, 6], [78, 36, 0.66089124432250068, 6], [84, 24, 0.78068807481894831, 6], [90, 24, 0.71241677172969764, 6], [96, 34, 0.82314485719462338, 12], [108, 44, 0.88205060634196275, 6], [114, 48, 0.66121512628784396, 3], [117, 31, 0.6869402406581181, 3]],
+[[0, 29, 0.98114302925233732, 12], [12, 24, 0.86032943343795687, 12], [24, 26, 0.75186332506936671, 6], [30, 24, 0.70905655529709044, 6], [36, 29, 0.77032812359988923, 6], [42, 29, 0.74640723995290414, 6], [48, 29, 0.88666734900794419, 12], [60, 41, 0.85101348459529869, 6], [66, 29, 0.74511174373503108, 12], [78, 24, 0.66051747217393508, 12], [90, 26, 0.72687112102642848, 6], [96, 24, 0.88250841970159766, 3], [99, 29, 0.74143059236535069, 3], [102, 29, 0.67239561775642986, 6], [108, 29, 0.88191725154236456, 6], [114, 41, 0.73560140482856129, 12], [126, 29, 0.7081332126576193, 3], [129, 24, 0.68983794788026498, 3]],
+[[0, 36, 0.96595818273256528, 12], [12, 31, 0.84436398777525179, 3], [15, 36, 0.72450729579584827, 3], [18, 29, 0.74438957992389043, 6], [24, 34, 0.8768189634671848, 12], [36, 26, 0.85743207173718183, 3], [39, 44, 0.69008383418869457, 3], [42, 24, 0.70944847757565099, 6], [48, 36, 0.81499371421277444, 6], [54, 31, 0.72947094220567699, 6], [60, 36, 0.89655275133783419, 6], [66, 29, 0.7187511681399904, 12], [78, 34, 0.6933835554429989, 3], [81, 26, 0.74111496686863243, 3], [84, 44, 0.83978279767798858, 6], [90, 24, 0.66137695908950145, 12], [102, 36, 0.732209492112884, 6], [108, 31, 0.75056348828755237, 6], [114, 36, 0.74022393982853973, 6], [120, 29, 0.8087512982510201, 6], [126, 34, 0.65364047126839175, 3], [129, 26, 0.73727881786794847, 3], [132, 44, 0.78855945462701182, 12]],
+[[0, 44, 0.91464355200880987, 12], [12, 26, 0.89190697112402662, 12], [24, 26, 0.77056561125832623, 12], [36, 24, 0.88359184969486471, 3], [39, 24, 0.7249299538781746, 3], [42, 34, 0.68282535051255366, 12], [54, 36, 0.66975070693284722, 3], [57, 36, 0.72285153108276079, 3], [60, 44, 0.86685826038148983, 6], [66, 26, 0.67323082698532211, 6], [72, 26, 0.87931775084878305, 6], [78, 24, 0.73870864878076481, 12], [90, 24, 0.73244848057180389, 12], [102, 34, 0.71103604967480161, 12], [114, 36, 0.6707548109158028, 6], [120, 36, 0.87436863593253322, 3], [123, 44, 0.74708637155716939, 3], [126, 26, 0.68600327879947898, 6], [132, 26, 0.8961768994620104, 3], [135, 24, 0.71746522902882126, 3], [138, 24, 0.73932198976408259, 6], [144, 34, 0.79988535620524992, 6], [150, 36, 0.66619714499791627, 6]],
+[[0, 41, 0.95463348434194217, 6], [6, 26, 0.70851865153930138, 3], [9, 43, 0.70222886795777006, 3], [12, 36, 0.75132011300729218, 6], [18, 36, 0.74375444208246821, 6], [24, 43, 0.85718822108503701, 3], [27, 29, 0.73563350547849959, 3], [30, 26, 0.71017541202023149, 12], [42, 41, 0.74962435400571248, 18], [60, 26, 0.82997355917312854, 3], [63, 43, 0.67078704439485903, 3], [66, 36, 0.70237730017512046, 3], [69, 36, 0.65362282475543176, 3], [72, 43, 0.88755913713788015, 3], [75, 29, 0.67546352280279975, 3], [78, 26, 0.68103639567219509, 3], [81, 41, 0.71968625907625206, 3], [84, 26, 0.7899489720240308, 6], [90, 43, 0.72544169148392346, 12], [102, 36, 0.72720827241034625, 12], [114, 36, 0.72693697364201459, 3], [117, 43, 0.66684702262945905, 3], [120, 29, 0.88998305373736775, 3], [123, 26, 0.66204492866375064, 3], [126, 41, 0.71500172487711045, 6], [132, 26, 0.81860063306260966, 12], [144, 43, 0.85908584938115973, 6], [150, 36, 0.69749876493385643, 12], [162, 36, 0.74902807931348048, 6]],
+[[0, 36, 0.90307095049117447, 3], [3, 48, 0.72610164917878661, 3], [6, 44, 0.72977750551822052, 3], [9, 36, 0.68591572662251998, 3], [12, 36, 0.78068176970337999, 6], [18, 44, 0.74405365765520026, 18], [36, 48, 0.79850326213735845, 12], [48, 29, 0.87713229787566283, 6], [54, 36, 0.74418860979845081, 6], [60, 48, 0.81422308476884964, 12], [72, 44, 0.85065876317830047, 12], [84, 36, 0.75690865842308042, 3], [87, 36, 0.6990783435665251, 3], [90, 44, 0.67301633338681688, 6], [96, 48, 0.8276138327257383, 6], [102, 29, 0.68049226775505456, 6], [108, 36, 0.7966531044521572, 6], [114, 48, 0.74435834505880594, 6], [120, 44, 0.8565903479322643, 6], [126, 36, 0.67188137483548993, 18], [144, 36, 0.8647502488189025, 3], [147, 44, 0.67659905220269156, 3], [150, 48, 0.6620787364639551, 12], [162, 29, 0.68878643582028176, 12], [174, 36, 0.7028283501011624, 3], [177, 48, 0.74951708626591462, 3]],
+[[0, 24, 0.93436078191478544, 6], [6, 43, 0.67580812458692985, 6], [12, 44, 0.82866586482264748, 18], [30, 48, 0.67143260653238224, 6], [36, 24, 0.77169242534726412, 12], [48, 24, 0.88151519667429012, 12], [60, 43, 0.86159247507435643, 6], [66, 43, 0.65446589153881629, 3], [69, 24, 0.65834482751684675, 3], [72, 43, 0.86991463923783929, 3], [75, 44, 0.7028434141085188, 3], [78, 48, 0.73463539580328008, 12], [90, 24, 0.74275872107052898, 18], [108, 24, 0.86860947895014051, 6], [114, 43, 0.74634760633904884, 6], [120, 43, 0.75575254291387484, 3], [123, 24, 0.72417709780114592, 3], [126, 43, 0.72629007614077001, 18], [144, 44, 0.884582212278059, 6], [150, 48, 0.67857423305759201, 6], [156, 24, 0.80769295784005646, 6], [162, 24, 0.72307184943733394, 6], [168, 43, 0.83998167334502072, 18], [186, 43, 0.68771023215321669, 3], [189, 24, 0.74879753520920977, 3]]],
+51: [[[0, 36, 0.99541106009076363, 6], [6, 46, 0.73260915769346213, 18]],
+[[0, 36, 0.95686326372439812, 6], [6, 29, 0.66803852617132675, 12], [18, 43, 0.69620494584044779, 3], [21, 48, 0.71732205090126322, 3], [24, 43, 0.87837728290941208, 6], [30, 34, 0.66855319815863457, 3], [33, 48, 0.7204477918766885, 3]],
+[[0, 41, 0.98441254489755303, 12], [12, 24, 0.83875070200413304, 3], [15, 34, 0.67858661840639345, 3], [18, 36, 0.72718943244090883, 6], [24, 41, 0.77340447855700356, 3], [27, 24, 0.66548175645723961, 3], [30, 34, 0.66650306595873321, 6], [36, 36, 0.76605460892682264, 3], [39, 36, 0.74891609241534274, 3], [42, 41, 0.72996864216851987, 6]],
+[[0, 36, 0.93173094953488189, 3], [3, 43, 0.74073950691436141, 3], [6, 48, 0.70072348146699315, 6], [12, 41, 0.76569067925602818, 6], [18, 31, 0.69922249726037244, 3], [21, 26, 0.68786064845143091, 3], [24, 24, 0.76026064513566438, 12], [36, 31, 0.85690315396728145, 18], [54, 48, 0.66886452291774134, 6]],
+[[0, 24, 0.93884332604277865, 6], [6, 44, 0.69197509491892684, 12], [18, 26, 0.7483747098573984, 12], [30, 36, 0.6558579311285917, 12], [42, 36, 0.73335616918422786, 12], [54, 24, 0.65320763147080885, 6], [60, 41, 0.84820638534294346, 12]],
+[[0, 31, 0.96383778280217647, 3], [3, 32, 0.6827880150714456, 3], [6, 29, 0.70447053132698045, 6], [12, 31, 0.87367112434651306, 6], [18, 32, 0.74348275851346324, 6], [24, 29, 0.77360797269140757, 12], [36, 31, 0.79043953832063374, 6], [42, 32, 0.72627113577016511, 6], [48, 29, 0.84376500788700848, 12], [60, 31, 0.81462177207714259, 18], [78, 32, 0.68169125425191512, 6]],
+[[0, 31, 0.96068171090739762, 6], [6, 26, 0.65861447380552907, 12], [18, 26, 0.74101651247292311, 6], [24, 26, 0.78726048069792942, 12], [36, 46, 0.83565851088859266, 6], [42, 38, 0.73391584839476232, 6], [48, 44, 0.82934710206140072, 3], [51, 26, 0.72444014962606285, 3], [54, 46, 0.67278460617157154, 6], [60, 31, 0.77345755765203228, 3], [63, 26, 0.67551175192672341, 3], [66, 26, 0.68034946847861044, 6], [72, 26, 0.82150284683550578, 12], [84, 46, 0.7948886836198481, 6], [90, 38, 0.7037327477333748, 6]],
+[[0, 46, 0.91853925086365051, 6], [6, 48, 0.71034375361418967, 6], [12, 26, 0.80642025296922737, 6], [18, 44, 0.66175212491105695, 6], [24, 48, 0.76165156043098392, 18], [42, 32, 0.70579875836028549, 12], [54, 34, 0.70550361289299857, 6], [60, 44, 0.83584841426872336, 12], [72, 48, 0.78773502919200367, 3], [75, 46, 0.71030351931987157, 3], [78, 48, 0.73706171261138342, 6], [84, 26, 0.76436734995810229, 3], [87, 44, 0.65720279263841008, 3], [90, 48, 0.67912438999196589, 18]],
+[[0, 43, 0.97231796897286327, 3], [3, 26, 0.72658244613224088, 3], [6, 48, 0.73681970189006962, 12], [18, 36, 0.68032126142051519, 3], [21, 24, 0.67535741140257477, 3], [24, 26, 0.78389505191830122, 3], [27, 48, 0.70788715139682046, 3], [30, 36, 0.70687613347167932, 3], [33, 24, 0.70361798003115472, 3], [36, 43, 0.80560120866659679, 3], [39, 26, 0.72308872983396277, 3], [42, 48, 0.68206261793670431, 12], [54, 36, 0.7323321047104826, 3], [57, 24, 0.74968366579280366, 3], [60, 26, 0.75527865850601394, 6], [66, 48, 0.7342044083489675, 3], [69, 36, 0.6672363054315491, 3], [72, 24, 0.89189183056065324, 6], [78, 43, 0.67292403795720823, 6], [84, 26, 0.75614257965761245, 12], [96, 48, 0.84013511294014387, 12], [108, 36, 0.82043615367446099, 12]],
+[[0, 44, 0.94162462678270076, 6], [6, 48, 0.70758802315634106, 6], [12, 43, 0.7712703029104484, 12], [24, 26, 0.80228725499455, 12], [36, 24, 0.79627887815800358, 6], [42, 46, 0.73384835033396267, 3], [45, 48, 0.66943773616310254, 3], [48, 43, 0.81503270622407853, 6], [54, 26, 0.7026295837129779, 3], [57, 44, 0.72849293289411399, 3], [60, 48, 0.84241732215133736, 6], [66, 43, 0.72272501393930599, 6], [72, 26, 0.77484508677855668, 6], [78, 24, 0.70336201048446545, 3], [81, 46, 0.66362489844933381, 3], [84, 48, 0.79850379562086116, 6], [90, 43, 0.70560593407415961, 6], [96, 26, 0.87901638630403822, 6], [102, 44, 0.74054388969005958, 12], [114, 48, 0.73235687793300708, 3], [117, 43, 0.68422042763291202, 3], [120, 26, 0.86692578940904619, 6], [126, 24, 0.72068804918849294, 6]],
+[[0, 29, 0.96256192704686339, 12], [12, 43, 0.83644191013924363, 12], [24, 48, 0.87365209097936702, 3], [27, 29, 0.67152519733045435, 3], [30, 43, 0.68707777109903168, 12], [42, 48, 0.67147736168069372, 12], [54, 29, 0.73243234399052037, 3], [57, 43, 0.65776330067453748, 3], [60, 48, 0.7725591356173247, 6], [66, 29, 0.69106262611054892, 6], [72, 43, 0.79738795870023782, 12], [84, 48, 0.81298152427672787, 3], [87, 29, 0.6892770578442734, 3], [90, 43, 0.67301082230280085, 3], [93, 48, 0.74249401425620687, 3], [96, 29, 0.81091557267987957, 3], [99, 43, 0.66546631289543168, 3], [102, 48, 0.67623614844894886, 6], [108, 29, 0.8676349042942858, 6], [114, 43, 0.74316735913931642, 3], [117, 48, 0.71928697423910515, 3], [120, 29, 0.76838043481181306, 3], [123, 43, 0.67806300432936784, 3], [126, 48, 0.66559009320239737, 3], [129, 29, 0.70113644402896613, 3], [132, 43, 0.82894103239279027, 12]],
+[[0, 46, 0.92776096885657522, 6], [6, 24, 0.73134122605612739, 3], [9, 31, 0.68345375915203654, 3], [12, 44, 0.87420851960683199, 12], [24, 48, 0.8678492318367711, 6], [30, 32, 0.71144667301571618, 6], [36, 24, 0.75153428220284213, 6], [42, 46, 0.71993570546108121, 6], [48, 48, 0.77902857360954858, 18], [66, 46, 0.73711284553879119, 12], [78, 24, 0.71195028564497043, 3], [81, 31, 0.67424411174773646, 3], [84, 44, 0.78512044332988085, 3], [87, 48, 0.70818997136283768, 3], [90, 32, 0.7466392526898834, 6], [96, 24, 0.81655116865225519, 12], [108, 46, 0.80546194638380708, 3], [111, 48, 0.68944727354868562, 3], [114, 46, 0.72776658462333998, 12], [126, 24, 0.66664584210135303, 6], [132, 31, 0.76820075138106436, 6], [138, 44, 0.73942218197476839, 3], [141, 48, 0.68662434669989458, 3], [144, 32, 0.75600496647433579, 12]],
+[[0, 24, 0.94447346683772171, 12], [12, 24, 0.82748642311994747, 3], [15, 26, 0.68771656411080606, 3], [18, 31, 0.72752749656233118, 6], [24, 36, 0.79974025112004887, 3], [27, 34, 0.66923137260807042, 3], [30, 36, 0.67953027812430822, 6], [36, 24, 0.76028612519095962, 3], [39, 24, 0.6906262033787155, 3], [42, 24, 0.65053940906441554, 12], [54, 24, 0.6863614318272907, 12], [66, 26, 0.71947974017820226, 18], [84, 31, 0.76856508797784928, 12], [96, 36, 0.87348145059144677, 6], [102, 34, 0.73171436916605759, 3], [105, 36, 0.74978579055393968, 3], [108, 24, 0.86589898897346063, 6], [114, 24, 0.65715155321904162, 6], [120, 24, 0.82559794401373443, 12], [132, 24, 0.75907585472953332, 6], [138, 26, 0.67966513594643874, 12], [150, 31, 0.72189614576130379, 12], [162, 36, 0.66348043156904546, 3], [165, 34, 0.71246288969432103, 3]],
+[[0, 24, 0.96476677851370174, 18], [18, 24, 0.73153489970804675, 12], [30, 46, 0.65526862093698579, 6], [36, 38, 0.75770643465602272, 3], [39, 38, 0.70502630976199332, 3], [42, 26, 0.65905345820305283, 3], [45, 24, 0.71426954141581767, 3], [48, 24, 0.86442336284178423, 12], [60, 46, 0.86693010636499335, 3], [63, 24, 0.68033137658618004, 3], [66, 24, 0.72012878410836212, 6], [72, 46, 0.85651709516576457, 12], [84, 38, 0.76191899481707759, 3], [87, 38, 0.68513576862496905, 3], [90, 26, 0.65480239055086376, 3], [93, 24, 0.73468527194735422, 3], [96, 24, 0.82671042584779708, 6], [102, 46, 0.74888888911233664, 12], [114, 24, 0.70018194130598388, 6], [120, 24, 0.78554771433546955, 3], [123, 46, 0.70367003907937842, 3], [126, 38, 0.69971125676923995, 12], [138, 38, 0.66326329961671582, 6], [144, 26, 0.84248706140873242, 3], [147, 24, 0.7061422673494, 3], [150, 24, 0.72738625432801973, 3], [153, 46, 0.73857255301164837, 3], [156, 24, 0.82155527238585901, 12], [168, 24, 0.7689170266375428, 3], [171, 46, 0.70917658857947652, 3], [174, 38, 0.71683146061854774, 3], [177, 38, 0.73060733591262572, 3]],
+[[0, 44, 0.90594953197942985, 12], [12, 48, 0.84427460948140198, 12], [24, 24, 0.89938337425993853, 3], [27, 46, 0.73462690905700456, 3], [30, 48, 0.72714428931624742, 12], [42, 41, 0.69231330443415939, 6], [48, 41, 0.89895809465945908, 12], [60, 48, 0.84483983739107837, 12], [72, 41, 0.85755605437050186, 12], [84, 44, 0.78539378658510373, 6], [90, 48, 0.69481376986701071, 18], [108, 24, 0.83558669338406344, 18], [126, 46, 0.70632773695847928, 6], [132, 48, 0.86059238425530005, 3], [135, 41, 0.71512272400183474, 3], [138, 41, 0.74878235700842599, 3], [141, 48, 0.68347688078001578, 3], [144, 41, 0.86236412036937615, 6], [150, 44, 0.68695711055368791, 3], [153, 48, 0.69574560451383161, 3], [156, 24, 0.89574453585474556, 3], [159, 46, 0.68917137441437382, 3], [162, 48, 0.67197177122195872, 3], [165, 41, 0.74566437758167992, 3], [168, 41, 0.76346738520215651, 3], [171, 48, 0.71775023190012277, 3], [174, 41, 0.65393495050357608, 6], [180, 44, 0.82028773327358029, 6], [186, 48, 0.74754757317857623, 3], [189, 24, 0.73598852398275449, 3]]],
+60: [[[0, 46, 0.95495846582732946, 6], [6, 46, 0.7056084509580911, 6], [12, 46, 0.7979565175650446, 6], [18, 48, 0.67692159599480106, 3], [21, 24, 0.70041613490042598, 3]],
+[[0, 24, 0.93457689485656936, 12], [12, 36, 0.82833675359799286, 12], [24, 36, 0.81253761435252581, 3], [27, 24, 0.69315158189008297, 3], [30, 46, 0.66162730059443342, 3], [33, 46, 0.74582388744615435, 3]],
+[[0, 36, 0.95938443142216379, 6], [6, 44, 0.6794744896786209, 3], [9, 31, 0.71929919286346189, 3], [12, 29, 0.88909861618976249, 3], [15, 46, 0.74280227615973171, 3], [18, 34, 0.74877365184948597, 3], [21, 38, 0.70274444701105809, 3], [24, 48, 0.83617335414506033, 6], [30, 43, 0.65304856153150093, 3], [33, 36, 0.66501869909462263, 3], [36, 44, 0.81838608169605209, 3], [39, 31, 0.70396149897103577, 3], [42, 29, 0.69719769574389612, 3], [45, 46, 0.69533207200944447, 3]],
+[[0, 31, 0.94162850716559854, 3], [3, 36, 0.73927224108025391, 3], [6, 44, 0.69802016311305115, 6], [12, 48, 0.77540430982500119, 12], [24, 43, 0.76997809185589494, 3], [27, 48, 0.66223273985824416, 3], [30, 46, 0.66197369510057735, 12], [42, 24, 0.70163447237983689, 6], [48, 24, 0.86834836307232066, 6], [54, 31, 0.71872191656751983, 6]],
+[[0, 43, 0.91990245843783669, 3], [3, 43, 0.74146083463324775, 3], [6, 43, 0.65616352270449152, 6], [12, 41, 0.80722069117291395, 3], [15, 43, 0.72546810029235431, 3], [18, 41, 0.68495197506119287, 6], [24, 29, 0.84031825774509628, 6], [30, 31, 0.74035791924198469, 6], [36, 41, 0.80060477487501536, 3], [39, 43, 0.72329467184807805, 3], [42, 43, 0.67913373726121318, 3], [45, 43, 0.67708116605044721, 3], [48, 41, 0.8351548502246976, 3], [51, 43, 0.71618704381116172, 3], [54, 41, 0.68355808636980042, 3], [57, 29, 0.74261228242457278, 3], [60, 31, 0.89713367585101245, 3], [63, 41, 0.74176998820545847, 3], [66, 43, 0.73811445627502681, 6]],
+[[0, 43, 0.95390602181960815, 6], [6, 38, 0.65981083294909981, 12], [18, 26, 0.66962965674500186, 12], [30, 36, 0.74887415781650646, 3], [33, 31, 0.68610290352329928, 3], [36, 31, 0.75122687499895768, 12], [48, 32, 0.81004220690444317, 3], [51, 26, 0.67828388012894858, 3], [54, 29, 0.69979429218023792, 3], [57, 43, 0.70649727014136543, 3], [60, 38, 0.82259012639831453, 6], [66, 26, 0.68720690881875934, 6], [72, 36, 0.86601093478524205, 3], [75, 31, 0.67226652037962376, 3], [78, 31, 0.69981199664909566, 6]],
+[[0, 34, 0.9152305719509124, 12], [12, 34, 0.86726762262772328, 6], [18, 26, 0.71782087186082666, 3], [21, 26, 0.66074340576680357, 3], [24, 41, 0.79588140214535097, 3], [27, 24, 0.7058420861964666, 3], [30, 41, 0.70968146774175189, 3], [33, 48, 0.74532080425996106, 3], [36, 46, 0.82594126990237027, 3], [39, 34, 0.71394838806424943, 3], [42, 34, 0.74851180681998386, 3], [45, 26, 0.70189165563611711, 3], [48, 26, 0.77142501248406936, 3], [51, 41, 0.72184112190763905, 3], [54, 24, 0.66749799254881259, 12], [66, 41, 0.66916612150586097, 6], [72, 48, 0.8520252879536846, 6], [78, 46, 0.692495161394167, 12], [90, 34, 0.74019235425106189, 3], [93, 34, 0.66649610390608838, 3]],
+[[0, 31, 0.93013831013676551, 3], [3, 26, 0.68116299845483019, 3], [6, 34, 0.65158585617521825, 3], [9, 26, 0.6698563308488612, 3], [12, 24, 0.81930097247203637, 12], [24, 38, 0.86605999717021098, 6], [30, 32, 0.66174295107555625, 6], [36, 24, 0.81048002858834756, 6], [42, 32, 0.67007908310433661, 3], [45, 31, 0.72158537488757135, 3], [48, 26, 0.78043252256917062, 12], [60, 34, 0.80017904216987834, 3], [63, 26, 0.72360203760035968, 3], [66, 24, 0.66759031118370293, 6], [72, 38, 0.88342637365234766, 6], [78, 32, 0.66727459791970334, 3], [81, 24, 0.70976903255313506, 3], [84, 32, 0.75092232713714069, 3], [87, 31, 0.70151180971639759, 3], [90, 26, 0.67298176401612708, 6], [96, 34, 0.76939155851770946, 3], [99, 26, 0.71697205067147529, 3], [102, 24, 0.7110923629003465, 6]],
+[[0, 41, 0.96961028998622656, 6], [6, 36, 0.66521162314572002, 6], [12, 24, 0.86853060093968859, 3], [15, 44, 0.69604624007517679, 3], [18, 44, 0.6620327489008192, 6], [24, 44, 0.78056141734105799, 3], [27, 41, 0.67223179924124066, 3], [30, 24, 0.70314020879854366, 6], [36, 38, 0.88745994431864916, 3], [39, 41, 0.65484492053875998, 3], [42, 36, 0.73957029421457365, 6], [48, 24, 0.83389558812188336, 3], [51, 44, 0.71089476921474981, 3], [54, 44, 0.65064178632498171, 6], [60, 44, 0.85876550861078704, 6], [66, 41, 0.72596804151246874, 3], [69, 24, 0.7348130106333417, 3], [72, 38, 0.81155225760882133, 6], [78, 41, 0.72514282950241093, 6], [84, 36, 0.78841569616598339, 3], [87, 24, 0.67692208275158749, 3], [90, 44, 0.69307008892762434, 3], [93, 44, 0.72701779393814836, 3], [96, 44, 0.75717832604320257, 3], [99, 41, 0.71783239221773709, 3], [102, 24, 0.66216193230899889, 6], [108, 38, 0.82669208944527039, 3], [111, 41, 0.71662804546238112, 3], [114, 36, 0.67816773923692297, 6]],
+[[0, 32, 0.92306828295908494, 6], [6, 41, 0.70180864471674009, 3], [9, 24, 0.65010217166548412, 3], [12, 41, 0.85181440091428151, 6], [18, 44, 0.70524582017888293, 6], [24, 44, 0.77929225760542442, 6], [30, 26, 0.67143643144438148, 6], [36, 38, 0.82427933308272361, 3], [39, 24, 0.7434286582112567, 3], [42, 32, 0.69330549294846378, 3], [45, 41, 0.71464720778213031, 3], [48, 24, 0.89090103695402501, 6], [54, 41, 0.68623041480483804, 6], [60, 44, 0.8976401178784752, 6], [66, 44, 0.74788282309998955, 6], [72, 26, 0.85767968349603674, 12], [84, 38, 0.85374073797558558, 3], [87, 24, 0.65883587139052746, 3], [90, 32, 0.74128669214965215, 6], [96, 41, 0.82957970630471323, 3], [99, 24, 0.73344116891227751, 3], [102, 41, 0.71815419433696415, 3], [105, 44, 0.71174961453864294, 3], [108, 44, 0.89954876784322713, 12], [120, 26, 0.84016982724441513, 12]],
+[[0, 36, 0.94553305377293628, 12], [12, 26, 0.76094322603233466, 6], [18, 43, 0.73120142043478076, 3], [21, 46, 0.71310758397384699, 3], [24, 36, 0.84893761258814182, 6], [30, 24, 0.68033879675520248, 12], [42, 24, 0.68867160184771459, 3], [45, 36, 0.65482839070614995, 3], [48, 44, 0.88911705967638366, 3], [51, 36, 0.68187241405626497, 3], [54, 26, 0.73113811028371611, 3], [57, 43, 0.67340922287161242, 3], [60, 46, 0.82334871836145185, 6], [66, 36, 0.6580581781631849, 12], [78, 24, 0.6812455968723965, 3], [81, 24, 0.72390505378029368, 3], [84, 36, 0.81086632722879981, 6], [90, 44, 0.66906801328995646, 6], [96, 36, 0.76699447419334077, 3], [99, 26, 0.7330186837123307, 3], [102, 43, 0.74563268994297127, 3], [105, 46, 0.74176504016888722, 3], [108, 36, 0.8616703462140598, 6], [114, 24, 0.74786137093126803, 3], [117, 24, 0.66911309312650058, 3], [120, 36, 0.75034948834169379, 6], [126, 44, 0.71018078210400226, 3], [129, 36, 0.70183798240815087, 3], [132, 26, 0.83415853230865933, 6], [138, 43, 0.72578962060430929, 3], [141, 46, 0.71060221653616396, 3]],
+[[0, 31, 0.96542784331595743, 12], [12, 26, 0.87067247938038994, 3], [15, 24, 0.66401779230099056, 3], [18, 48, 0.69880020289757461, 12], [30, 32, 0.69171595681094333, 3], [33, 48, 0.70094088985511316, 3], [36, 31, 0.79738776716302062, 6], [42, 24, 0.71796274483245393, 12], [54, 26, 0.66158243839699749, 3], [57, 31, 0.7420639622600308, 3], [60, 26, 0.85314918570101739, 3], [63, 24, 0.70101750216660674, 3], [66, 48, 0.71645193469440749, 3], [69, 32, 0.67305259558254715, 3], [72, 48, 0.85240116079438266, 12], [84, 31, 0.81830149576320776, 3], [87, 24, 0.65388685799195689, 3], [90, 26, 0.67762848970134737, 12], [102, 31, 0.66384956572364828, 6], [108, 26, 0.87104818532365069, 12], [120, 24, 0.82592190154122591, 6], [126, 48, 0.73725416254133935, 3], [129, 32, 0.67854654499105327, 3], [132, 48, 0.84738866045578709, 3], [135, 31, 0.65367380991184354, 3], [138, 24, 0.66500541177793715, 3], [141, 26, 0.65591637322564367, 3], [144, 31, 0.8671078105575255, 3], [147, 26, 0.71415405591114578, 3], [150, 24, 0.74129039174474842, 3], [153, 48, 0.73043213963564924, 3]],
+[[0, 34, 0.93306849774480394, 3], [3, 26, 0.74389924397748142, 3], [6, 36, 0.70259617708168565, 3], [9, 44, 0.71099554222713968, 3], [12, 48, 0.75584192009825835, 6], [18, 41, 0.73819455213333318, 12], [30, 32, 0.68874352794321869, 3], [33, 43, 0.65349790081353976, 3], [36, 46, 0.78478386648358622, 3], [39, 34, 0.68563555575897661, 3], [42, 26, 0.68749379578998582, 3], [45, 36, 0.66621428925087545, 3], [48, 44, 0.80631038315076486, 3], [51, 48, 0.73839869262249669, 3], [54, 41, 0.7218621947806072, 12], [66, 32, 0.69549067158883193, 3], [69, 43, 0.72586812535028433, 3], [72, 46, 0.82843523835132071, 3], [75, 34, 0.66385996607503861, 3], [78, 26, 0.71924390782459147, 6], [84, 36, 0.8643122705720937, 6], [90, 44, 0.69596098323899502, 12], [102, 48, 0.67881701760834368, 3], [105, 41, 0.6740656203370391, 3], [108, 32, 0.77713400688746803, 3], [111, 43, 0.72042567506467659, 3], [114, 46, 0.66299263547593001, 6], [120, 34, 0.7711400180025928, 6], [126, 26, 0.66882604503784993, 6], [132, 36, 0.87706876804263567, 6], [138, 44, 0.70186304531239674, 6], [144, 48, 0.77648688963809276, 3], [147, 41, 0.65911195466649197, 3], [150, 32, 0.66226834432954984, 6], [156, 43, 0.85964773585449561, 3], [159, 46, 0.67038742151708652, 3], [162, 34, 0.66331990073290137, 6]],
+[[0, 43, 0.90664147192760403, 12], [12, 36, 0.79952726712850075, 3], [15, 36, 0.68558192316178446, 3], [18, 34, 0.69917146760668492, 6], [24, 46, 0.85255805955198571, 3], [27, 46, 0.74168743150396743, 3], [30, 46, 0.73443970527639713, 12], [42, 46, 0.68932574761938403, 6], [48, 46, 0.79373049646638427, 3], [51, 43, 0.67808816973563502, 3], [54, 36, 0.68525199331956321, 3], [57, 36, 0.69825902422093222, 3], [60, 34, 0.75954693700330367, 6], [66, 46, 0.67969727738305208, 6], [72, 46, 0.77443033649191118, 6], [78, 46, 0.74659144431576474, 12], [90, 46, 0.73134829201031859, 3], [93, 46, 0.74753221771174927, 3], [96, 43, 0.80586664077438475, 6], [102, 36, 0.65780858904927475, 3], [105, 36, 0.67552631139181885, 3], [108, 34, 0.84180279745963471, 3], [111, 46, 0.65713417743274738, 3], [114, 46, 0.736732334062141, 3], [117, 46, 0.65399027824636113, 3], [120, 46, 0.84772590011502735, 6], [126, 46, 0.73411222701899936, 6], [132, 43, 0.80006047667252211, 3], [135, 36, 0.70924971280541593, 3], [138, 36, 0.65900034511939087, 12], [150, 34, 0.69552556837490409, 3], [153, 46, 0.6729546286068333, 3], [156, 46, 0.82100778633617288, 6], [162, 46, 0.65360579958931941, 3], [165, 46, 0.72931502646591573, 3], [168, 46, 0.88153252924071035, 6], [174, 43, 0.68411262478542367, 6]],
+[[0, 36, 0.97845489568362931, 3], [3, 43, 0.73125567882132003, 3], [6, 43, 0.69999784120559672, 3], [9, 44, 0.70267003971250386, 3], [12, 24, 0.87973063928893946, 6], [18, 24, 0.72931337377297778, 3], [21, 43, 0.65566042287435122, 3], [24, 36, 0.87877625963396944, 3], [27, 36, 0.66966598508489872, 3], [30, 36, 0.65270846644541758, 3], [33, 43, 0.72884159680076344, 3], [36, 43, 0.87008875879423453, 3], [39, 44, 0.65764793319182624, 3], [42, 24, 0.66886538177213617, 6], [48, 24, 0.80756635302101754, 3], [51, 43, 0.70291327235943823, 3], [54, 36, 0.67814305974099431, 12], [66, 36, 0.7025410516766678, 3], [69, 36, 0.68687658945427787, 3], [72, 43, 0.83653698182410285, 6], [78, 43, 0.74880607623200934, 3], [81, 44, 0.66854817206348593, 3], [84, 24, 0.76598588922790611, 3], [87, 24, 0.74916771510856139, 3], [90, 43, 0.73254023054626449, 3], [93, 36, 0.67381498556189423, 3], [96, 36, 0.85858802556502289, 3], [99, 36, 0.7221239443500872, 3], [102, 43, 0.74599245462773256, 6], [108, 43, 0.81637567767558572, 6], [114, 44, 0.67073548261616578, 3], [117, 24, 0.71787559007408008, 3], [120, 24, 0.79353098610740702, 3], [123, 43, 0.69701026336316774, 3], [126, 36, 0.71973861435642295, 6], [132, 36, 0.86003150790852267, 6], [138, 36, 0.68419751384706384, 3], [141, 43, 0.6819861183006255, 3], [144, 43, 0.89650848323404442, 3], [147, 44, 0.67204674116811658, 3], [150, 24, 0.69689869465092735, 6], [156, 24, 0.78400166906312219, 6], [162, 43, 0.65969217648667067, 6], [168, 36, 0.86497713443635826, 3], [171, 36, 0.66933076119842261, 3], [174, 36, 0.72399491256618242, 3], [177, 43, 0.71407410668327287, 3], [180, 43, 0.83699679422133544, 6], [186, 44, 0.7118423810891551, 3], [189, 24, 0.66908571367439851, 3]]],
+61: [[[0, 31, 0.99851735977950673, 3], [3, 24, 0.70580912393691986, 3], [6, 26, 0.70457302615082384, 3], [9, 43, 0.73418437681674265, 3], [12, 48, 0.7625353123880696, 3], [15, 41, 0.7018653790798165, 3], [18, 43, 0.68938367311179305, 3], [21, 46, 0.74320442835965839, 3]],
+[[0, 26, 0.90876456195162358, 3], [3, 24, 0.66955702224632752, 3], [6, 44, 0.70304114313472243, 3], [9, 34, 0.7339580399675063, 3], [12, 46, 0.76477904444732592, 3], [15, 26, 0.71292504609563523, 3], [18, 24, 0.65378312465455024, 6], [24, 44, 0.84818887438316415, 3], [27, 34, 0.71423054314776091, 3], [30, 46, 0.67614034659764732, 6]],
+[[0, 36, 0.97954345067512949, 3], [3, 26, 0.66342001686621055, 3], [6, 24, 0.73990421863775024, 3], [9, 38, 0.71166826307081654, 3], [12, 24, 0.83723030510408714, 3], [15, 24, 0.6610436069686022, 3], [18, 26, 0.72261671710082853, 3], [21, 26, 0.68972541216839778, 3], [24, 29, 0.81527322800809243, 3], [27, 26, 0.69789256190350346, 3], [30, 36, 0.71872667736365747, 3], [33, 26, 0.69948555095823817, 3], [36, 24, 0.83087205648070228, 3], [39, 38, 0.7004492990969553, 3], [42, 24, 0.7249891819419273, 3], [45, 24, 0.71655955774579072, 3]],
+[[0, 36, 0.97332015779837888, 6], [6, 44, 0.66694284388058256, 3], [9, 44, 0.65685000351051492, 3], [12, 36, 0.76004002272580096, 3], [15, 46, 0.70433763221665269, 3], [18, 38, 0.70542166552203733, 3], [21, 26, 0.73644039204896183, 3], [24, 26, 0.85432915664547082, 3], [27, 24, 0.67773385468490743, 3], [30, 43, 0.68634994250555481, 3], [33, 36, 0.74101734297756472, 3], [36, 44, 0.81746109421506641, 12], [48, 44, 0.77473165951111944, 3], [51, 36, 0.74899338631982104, 3], [54, 46, 0.67778542449124746, 6]],
+[[0, 36, 0.95903451755152014, 3], [3, 24, 0.73278030003642736, 3], [6, 24, 0.70346694462365589, 12], [18, 46, 0.67743514393069615, 6], [24, 48, 0.84989613793009655, 3], [27, 38, 0.73871788959566587, 3], [30, 38, 0.68594231659974014, 3], [33, 46, 0.72271629674329063, 3], [36, 48, 0.76124379159498368, 3], [39, 38, 0.70644193351098827, 3], [42, 36, 0.72699553270336137, 12], [54, 24, 0.72084926809366157, 3], [57, 24, 0.73670002539055013, 3], [60, 46, 0.78257116177731312, 6], [66, 48, 0.70451959296038658, 3], [69, 38, 0.69155692621731846, 3]],
+[[0, 48, 0.92297868437535335, 3], [3, 46, 0.67707908194119804, 3], [6, 41, 0.68215150986870798, 6], [12, 46, 0.84015199321188905, 3], [15, 29, 0.69718414748368163, 3], [18, 41, 0.67116538451906882, 12], [30, 46, 0.6774648244958924, 3], [33, 29, 0.72472129379632799, 3], [36, 29, 0.78492969092219012, 6], [42, 36, 0.66584518187199038, 6], [48, 48, 0.79721329209022906, 3], [51, 46, 0.65738895690561783, 3], [54, 41, 0.70813436377123706, 12], [66, 46, 0.70870329814084987, 3], [69, 29, 0.66202104153935593, 3], [72, 41, 0.84775262232508553, 12]],
+[[0, 36, 0.95028741369132574, 3], [3, 26, 0.71145868170842264, 3], [6, 43, 0.72247169482483442, 6], [12, 44, 0.79129356773228099, 3], [15, 44, 0.67762983643470154, 3], [18, 48, 0.65845426976343691, 6], [24, 29, 0.80265164863551108, 3], [27, 43, 0.74745741160720924, 3], [30, 44, 0.65009520875997606, 3], [33, 44, 0.68466887908141971, 3], [36, 36, 0.89246293037921354, 6], [42, 26, 0.69218682249654817, 3], [45, 43, 0.66259788349916704, 3], [48, 44, 0.799623608978416, 6], [54, 44, 0.68030596051844372, 3], [57, 48, 0.72632804688972519, 3], [60, 29, 0.81671320508980227, 3], [63, 43, 0.74373476583153131, 3], [66, 44, 0.72451758280030465, 6], [72, 44, 0.86677679761023263, 3], [75, 36, 0.66144155023913631, 3], [78, 26, 0.67744069516362793, 6], [84, 43, 0.83125209822496393, 3], [87, 44, 0.68376740119069979, 3], [90, 44, 0.66455523911753445, 3], [93, 48, 0.74245906620961766, 3]],
+[[0, 34, 0.94675607912541471, 3], [3, 29, 0.66751617156867249, 3], [6, 29, 0.65891888509924501, 3], [9, 29, 0.71827214584442556, 3], [12, 43, 0.83365538538333017, 3], [15, 29, 0.65436404866591691, 3], [18, 29, 0.73395829703103799, 3], [21, 29, 0.70760862113339118, 3], [24, 43, 0.85881700726860788, 3], [27, 29, 0.65019703963970588, 3], [30, 34, 0.73555409466820953, 3], [33, 29, 0.72074844868676924, 3], [36, 29, 0.8713815530330058, 3], [39, 29, 0.67048921036741471, 3], [42, 43, 0.71463176375996351, 3], [45, 29, 0.6571743109201349, 3], [48, 29, 0.78145409363862273, 3], [51, 29, 0.71162120329963774, 3], [54, 43, 0.70672989237350026, 6], [60, 29, 0.76744838809926219, 3], [63, 34, 0.68035408064017755, 3], [66, 29, 0.71942915603442603, 3], [69, 29, 0.65321699917015119, 3], [72, 29, 0.88601570009198927, 3], [75, 43, 0.66210892236010499, 3], [78, 29, 0.68756807776516882, 3], [81, 29, 0.74381548166520617, 3], [84, 29, 0.83348877831409496, 3], [87, 43, 0.67425009832344374, 3], [90, 29, 0.72224993291237871, 3], [93, 34, 0.66423324834655439, 3], [96, 29, 0.82328223412815671, 3], [99, 29, 0.65404132947773996, 3], [102, 29, 0.69831822752766914, 3], [105, 43, 0.69884420524403956, 3]],
+[[0, 34, 0.94497862634720597, 3], [3, 26, 0.69728412414033958, 3], [6, 26, 0.66551491173706478, 6], [12, 26, 0.84264970149538554, 3], [15, 32, 0.74855872475349239, 3], [18, 26, 0.66520829339567178, 3], [21, 26, 0.66023784135984798, 3], [24, 26, 0.76108852065160726, 3], [27, 32, 0.71757222790144026, 3], [30, 26, 0.6749591121156886, 3], [33, 34, 0.68093274339028975, 3], [36, 26, 0.80043619542073507, 3], [39, 26, 0.74496110134219018, 3], [42, 26, 0.73823532771978806, 3], [45, 32, 0.69488274792241178, 3], [48, 26, 0.87698938512574953, 3], [51, 26, 0.73138903323754312, 3], [54, 26, 0.74880940106260907, 3], [57, 32, 0.66620317738028845, 3], [60, 26, 0.89817547068969916, 6], [66, 34, 0.74295461985462119, 3], [69, 26, 0.65282412239749787, 3], [72, 26, 0.8819208921790882, 6], [78, 26, 0.748830914219063, 3], [81, 32, 0.68375098806273193, 3], [84, 26, 0.89565988628562898, 3], [87, 26, 0.68434263823676844, 3], [90, 26, 0.72323843021760081, 6], [96, 32, 0.84234459588138499, 3], [99, 26, 0.74918595530226884, 3], [102, 34, 0.70504342210222903, 6], [108, 26, 0.8880359542830325, 6], [114, 26, 0.67601620002740648, 3], [117, 26, 0.723692012436292, 3]],
+[[0, 26, 0.91276084995405327, 3], [3, 26, 0.73288366382170933, 3], [6, 26, 0.67318573513755808, 3], [9, 24, 0.70538062715357674, 3], [12, 46, 0.88753356968650432, 12], [24, 26, 0.88676849535443736, 3], [27, 24, 0.74553024587223282, 3], [30, 46, 0.69951767525037079, 3], [33, 26, 0.72723963802205394, 3], [36, 24, 0.80775248427104784, 3], [39, 26, 0.73677537150693317, 3], [42, 26, 0.65345021049676899, 3], [45, 26, 0.65788466617126895, 3], [48, 24, 0.86095014722436169, 3], [51, 46, 0.65237740074469253, 3], [54, 26, 0.72335625113738067, 3], [57, 24, 0.74022901542739583, 3], [60, 46, 0.87843294486316159, 3], [63, 26, 0.70110453260349337, 3], [66, 24, 0.66511696138670251, 3], [69, 26, 0.722917288022904, 3], [72, 26, 0.83588577593956526, 3], [75, 26, 0.71751680262439166, 3], [78, 24, 0.73473257323300811, 3], [81, 46, 0.7070444398354635, 3], [84, 26, 0.76894281524276131, 6], [90, 24, 0.74031487711854171, 3], [93, 46, 0.71703390201221806, 3], [96, 26, 0.81067747545656721, 3], [99, 24, 0.66296539554780676, 3], [102, 26, 0.72173657717310624, 3], [105, 26, 0.7052136807060625, 3], [108, 26, 0.87006763169196333, 3], [111, 24, 0.70696534405786593, 3], [114, 46, 0.71810825503337239, 3], [117, 26, 0.71084694326717301, 3], [120, 24, 0.79430930779491138, 6], [126, 46, 0.65408944103482469, 3], [129, 26, 0.70305241596065005, 3]],
+[[0, 38, 0.90393022747088414, 3], [3, 32, 0.65012287486116482, 3], [6, 41, 0.69837871855735834, 3], [9, 46, 0.67856291761000065, 3], [12, 26, 0.89138510612608779, 6], [18, 24, 0.74701371784138793, 6], [24, 48, 0.81589995930052994, 6], [30, 36, 0.69511968638863098, 3], [33, 36, 0.67941212539748019, 3], [36, 31, 0.77031603079832955, 6], [42, 38, 0.67328271769132664, 3], [45, 32, 0.67449045449873768, 3], [48, 41, 0.86878396893065524, 3], [51, 46, 0.67916089721541462, 3], [54, 26, 0.66751511796930452, 3], [57, 24, 0.65516251534457715, 3], [60, 48, 0.80799900281736492, 3], [63, 36, 0.67586891926871728, 3], [66, 36, 0.69387935381350918, 3], [69, 31, 0.72005264453935192, 3], [72, 38, 0.75494459446625761, 6], [78, 32, 0.65396727981937852, 3], [81, 41, 0.65505355552087885, 3], [84, 46, 0.79988123573794123, 6], [90, 26, 0.68895490395896275, 6], [96, 24, 0.82954336650295812, 3], [99, 48, 0.70716338804962164, 3], [102, 36, 0.74719099793247101, 12], [114, 36, 0.67247109147314954, 6], [120, 31, 0.81181740134643388, 6], [126, 38, 0.70616879978879188, 3], [129, 32, 0.72128937501382628, 3], [132, 41, 0.76985427936339934, 3], [135, 46, 0.74377270909820825, 3], [138, 26, 0.72763857811911714, 3], [141, 24, 0.6877042483129201, 3]],
+[[0, 32, 0.97931472909186512, 6], [6, 29, 0.71306706667874808, 3], [9, 32, 0.68576955125031225, 3], [12, 44, 0.79991851645360168, 3], [15, 44, 0.67979283411989144, 3], [18, 26, 0.65689458724006278, 3], [21, 29, 0.74514479691793456, 3], [24, 32, 0.87119398627483313, 3], [27, 44, 0.6997230074758507, 3], [30, 44, 0.74386314075148552, 6], [36, 32, 0.87527894188020228, 12], [48, 29, 0.78579710802013869, 3], [51, 32, 0.65174615031964578, 3], [54, 44, 0.72021863635270078, 6], [60, 44, 0.82964499416641191, 6], [66, 26, 0.69777113330744511, 6], [72, 29, 0.87821223628551048, 6], [78, 32, 0.698655314708297, 3], [81, 44, 0.68718899379500498, 3], [84, 44, 0.78128338135643327, 3], [87, 32, 0.73441649689807054, 3], [90, 29, 0.67499829576152692, 12], [102, 32, 0.67201175275973835, 6], [108, 44, 0.76675260280518542, 6], [114, 44, 0.6788059080268013, 12], [126, 26, 0.74297523689208533, 6], [132, 29, 0.84549320745669665, 3], [135, 32, 0.74949160166202566, 3], [138, 44, 0.73810676830932975, 3], [141, 44, 0.65093217422489325, 3], [144, 32, 0.75420763512385958, 3], [147, 29, 0.7280870273118869, 3], [150, 32, 0.7239806295491632, 3], [153, 44, 0.66917272089810886, 3]],
+[[0, 38, 0.92372170367072759, 3], [3, 48, 0.68091440993037144, 3], [6, 34, 0.65166173668696892, 3], [9, 24, 0.65194426139935646, 3], [12, 44, 0.88633020644748917, 3], [15, 38, 0.71851448158011644, 3], [18, 48, 0.66079161065780401, 12], [30, 34, 0.67184123405936513, 3], [33, 24, 0.71797445655929815, 3], [36, 44, 0.84754861543977911, 3], [39, 38, 0.73878057098566385, 3], [42, 48, 0.72683986886609708, 3], [45, 34, 0.72217548926200048, 3], [48, 24, 0.77813773171867251, 3], [51, 44, 0.6539043713143009, 3], [54, 38, 0.73298694676843101, 3], [57, 48, 0.69175767143116207, 3], [60, 34, 0.81249273879036488, 3], [63, 24, 0.67075158710132476, 3], [66, 44, 0.69156020875726032, 3], [69, 38, 0.69279141016036583, 3], [72, 48, 0.76490259166864338, 3], [75, 34, 0.710057745193169, 3], [78, 24, 0.65395531917625305, 3], [81, 44, 0.69138680883694326, 3], [84, 38, 0.76205189797225004, 3], [87, 48, 0.69873302778624202, 3], [90, 34, 0.65594443528532631, 3], [93, 24, 0.69770247736595237, 3], [96, 44, 0.88204728252114739, 3], [99, 38, 0.68575644734700769, 3], [102, 48, 0.67497182129293298, 3], [105, 34, 0.6710743209755119, 3], [108, 24, 0.77846804361313682, 3], [111, 44, 0.74392404656699407, 3], [114, 38, 0.70932648930503639, 6], [120, 48, 0.7700303967283274, 3], [123, 34, 0.7454007213450482, 3], [126, 24, 0.67327017963678193, 3], [129, 44, 0.70589713283721045, 3], [132, 38, 0.880507910838077, 3], [135, 48, 0.68278958704276815, 3], [138, 34, 0.65619110687812288, 6], [144, 24, 0.76529663840128137, 3], [147, 44, 0.67855374283687064, 3], [150, 38, 0.65977189438115746, 6], [156, 48, 0.7517908529996038, 3], [159, 34, 0.7294196310392127, 3], [162, 24, 0.67662259882044884, 3], [165, 44, 0.74889355923330325, 3]],
+[[0, 46, 0.91762193749006549, 3], [3, 48, 0.70032015387768587, 3], [6, 32, 0.68636543809498951, 12], [18, 43, 0.72088760916536021, 6], [24, 46, 0.80513456623341983, 3], [27, 46, 0.70899637727095732, 3], [30, 46, 0.71093028496443378, 3], [33, 48, 0.73256620571156206, 3], [36, 32, 0.79645955879654295, 3], [39, 43, 0.65574477735219727, 3], [42, 46, 0.74945373945022598, 3], [45, 48, 0.7119573508758168, 3], [48, 32, 0.82376374737810765, 3], [51, 43, 0.72070078138378435, 3], [54, 46, 0.7173428852348378, 12], [66, 46, 0.66761392950937204, 6], [72, 46, 0.78154035076545969, 3], [75, 48, 0.70500474422730053, 3], [78, 32, 0.73591180417760116, 3], [81, 43, 0.73406955699554954, 3], [84, 46, 0.75179068985633235, 3], [87, 48, 0.67554147042505241, 3], [90, 32, 0.65253874611771767, 6], [96, 43, 0.78542675770944625, 6], [102, 46, 0.71533231834397415, 6], [108, 46, 0.8986158322314679, 3], [111, 46, 0.72751454153192063, 3], [114, 48, 0.67222036506267435, 3], [117, 32, 0.74842679613867014, 3], [120, 43, 0.84461456887311903, 3], [123, 46, 0.6938815301347836, 3], [126, 48, 0.68213616514221309, 12], [138, 32, 0.72417460293224345, 3], [141, 43, 0.73266095795444464, 3], [144, 46, 0.83810905578395123, 6], [150, 46, 0.73683858008856917, 6], [156, 46, 0.82167226614044386, 3], [159, 48, 0.7233680536045215, 3], [162, 32, 0.69441552632194525, 6], [168, 43, 0.8403550125625342, 3], [171, 46, 0.70790325265868592, 3], [174, 48, 0.74700495514609444, 3], [177, 32, 0.67822040124378946, 3]],
+[[0, 41, 0.90749112369152007, 6], [6, 44, 0.68508196767065499, 3], [9, 24, 0.66717388707033054, 3], [12, 24, 0.78750122741427653, 3], [15, 44, 0.68175269597842658, 3], [18, 24, 0.66704450201538978, 3], [21, 24, 0.66197590004638796, 3], [24, 44, 0.79387083714507367, 3], [27, 24, 0.7265095259828267, 3], [30, 24, 0.69664176362830887, 3], [33, 41, 0.66632996950197809, 3], [36, 44, 0.88865815727771846, 3], [39, 24, 0.73068655333518051, 3], [42, 24, 0.69988978292309578, 12], [54, 44, 0.72005706841248895, 3], [57, 24, 0.68224891301849977, 3], [60, 24, 0.85200725622729323, 3], [63, 44, 0.74944706921332382, 3], [66, 24, 0.66611908995459601, 3], [69, 24, 0.73708796669115784, 3], [72, 41, 0.83566638754822753, 3], [75, 44, 0.67968293794852408, 3], [78, 24, 0.66468795662074787, 3], [81, 24, 0.65696765683891378, 3], [84, 44, 0.79419235576389646, 3], [87, 24, 0.68099109416724579, 3], [90, 24, 0.69043795663447072, 3], [93, 44, 0.71400815090169212, 3], [96, 24, 0.7852518919608229, 3], [99, 24, 0.72155047953854523, 3], [102, 41, 0.71895551265217406, 3], [105, 44, 0.67267812617384704, 3], [108, 24, 0.88878494409916087, 12], [120, 24, 0.85630096458349636, 3], [123, 44, 0.70120192832100581, 3], [126, 24, 0.65664531103638279, 3], [129, 24, 0.72531067110367498, 3], [132, 44, 0.83619454871007504, 6], [138, 24, 0.74363823449954958, 12], [150, 24, 0.73659705693463506, 6], [156, 41, 0.80936672110417818, 3], [159, 44, 0.6527125079174031, 3], [162, 24, 0.73930231736876195, 12], [174, 24, 0.72892089801938209, 3], [177, 44, 0.68072925711402577, 3], [180, 24, 0.76243271274091484, 3], [183, 24, 0.71699422396049095, 3], [186, 44, 0.74550675874850303, 6]]]
+} \ No newline at end of file
diff --git a/TamTamMini.activity/Mini/miniTamTamMain.py b/TamTamMini.activity/Mini/miniTamTamMain.py
new file mode 100644
index 0000000..16836b8
--- /dev/null
+++ b/TamTamMini.activity/Mini/miniTamTamMain.py
@@ -0,0 +1,823 @@
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+import gobject
+import os
+import random
+import time
+import xdrlib
+import commands
+
+from types import *
+from math import sqrt
+from common.Util.NoteDB import PARAMETER
+
+import common.Util.Network as Net
+
+import common.Config as Config
+
+from Mini.miniToolbars import playToolbar
+from Mini.miniToolbars import recordToolbar
+from common.Util.ThemeWidgets import *
+from common.Util.CSoundNote import CSoundNote
+from common.Util import NoteDB
+from common.Util.NoteDB import Note
+from common.Util.CSoundClient import new_csound_client
+from common.Util.LoopSettings import LoopSettings
+
+from Fillin import Fillin
+from KeyboardStandAlone import KeyboardStandAlone
+from MiniSequencer import MiniSequencer
+from Loop import Loop
+from RythmGenerator import *
+from common.Util.Trackpad import Trackpad
+from common.Util.InstrumentPanel import InstrumentPanel
+
+from gettext import gettext as _
+
+Tooltips = Config.Tooltips
+
+class miniTamTamMain(gtk.EventBox):
+
+ def __init__(self, activity):
+ gtk.EventBox.__init__(self)
+
+ self.activity = activity
+
+ self.set_border_width(Config.MAIN_WINDOW_PADDING)
+
+ self.firstTime = False
+ self.csnd = new_csound_client()
+ self.timeout_ms = 50
+ self.instVolume = 50
+ self.drumVolume = 0.5
+ self.instrument = 'ocarina'
+ self.regularity = 0.75
+ self.beat = 4
+ self.reverb = 0.
+ self.tempo = Config.PLAYER_TEMPO
+ self.beatDuration = 60.0/self.tempo
+ self.ticksPerSecond = Config.TICKS_PER_BEAT*self.tempo/60.0
+ self.rythmInstrument = 'drum1kit'
+ self.muteInst = False
+ self.drumFillin = Fillin( self.beat, self.tempo, self.rythmInstrument, self.reverb, self.drumVolume )
+ self.sequencer= MiniSequencer(self.recordStateButton, self.recordOverSensitivity)
+ self.loop = Loop(self.beat, sqrt( self.instVolume*0.01 ))
+ self.csnd.setTempo(self.tempo)
+ self.noteList = []
+ time.sleep(0.001) # why?
+ self.trackpad = Trackpad( self )
+ for i in range(21):
+ self.csnd.setTrackVolume( 100, i )
+
+ self.volume = 150
+ self.csnd.setMasterVolume(self.volume)
+ self.sequencer.beat = self.beat
+ self.loop.beat = self.beat
+ self.tooltips = gtk.Tooltips()
+
+ self.masterVBox = gtk.VBox()
+ self.mainWindowBox = gtk.HBox()
+ self.leftBox = gtk.VBox()
+ self.leftBox.set_size_request(950,-1)
+ self.rightBox = gtk.VBox()
+ self.mainWindowBox.pack_start(self.rightBox,True,True)
+ self.mainWindowBox.pack_start(self.leftBox,False,False)
+ self.masterVBox.pack_start(self.mainWindowBox)
+ self.add(self.masterVBox)
+
+ self.enableKeyboard()
+ self.setInstrument(self.instrument)
+
+ self.loopSettingsPopup = gtk.Window(gtk.WINDOW_POPUP)
+ self.loopSettingsPopup.set_modal(True)
+ self.loopSettingsPopup.add_events( gtk.gdk.BUTTON_PRESS_MASK )
+ self.loopSettingsPopup.connect("button-release-event", lambda w,e:self.doneLoopSettingsPopup() )
+ self.loopSettings = LoopSettings( self.loopSettingsPopup, self.loopSettingsPlayStop, self.loopSettingsChannel, self.doneLoopSettingsPopup )
+ self.loopSettingsPopup.add( self.loopSettings )
+ self.loopSettingsPlaying = False
+
+
+ self.drawInstrumentButtons()
+ self.drawGeneration()
+ self.show_all()
+ if 'a good idea' == True:
+ self.playStartupSound()
+
+ self.synthLabWindow = None
+
+
+ self.beatPickup = True
+ #self.regenerate()
+
+ self.heartbeatStart = time.time()
+ self.syncQueryStart = {}
+ self.syncTimeout = None
+
+ self.network = Net.Network()
+ self.network.addWatcher( self.networkStatusWatcher )
+ self.network.connectMessage( Net.HT_SYNC_REPLY, self.processHT_SYNC_REPLY )
+ self.network.connectMessage( Net.HT_TEMPO_UPDATE, self.processHT_TEMPO_UPDATE )
+ self.network.connectMessage( Net.PR_SYNC_QUERY, self.processPR_SYNC_QUERY )
+ self.network.connectMessage( Net.PR_TEMPO_QUERY, self.processPR_TEMPO_QUERY )
+ self.network.connectMessage( Net.PR_REQUEST_TEMPO_CHANGE, self.processPR_REQUEST_TEMPO_CHANGE )
+
+ # data packing classes
+ self.packer = xdrlib.Packer()
+ self.unpacker = xdrlib.Unpacker("")
+
+ #-- handle forced networking ---------------------------------------
+ if self.network.isHost():
+ self.updateSync()
+ self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
+ elif self.network.isPeer():
+ self.sendTempoQuery()
+ self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
+ #-------------------------------------------------------------------
+
+ #Play button Image
+ self.playButtonImg = gtk.Image()
+ self.playButtonImg.set_from_icon_name('media-playback-start', gtk.ICON_SIZE_LARGE_TOOLBAR)
+ self.playButtonImg.show()
+
+ #Stop button Image
+ self.stopButtonImg = gtk.Image()
+ self.stopButtonImg.set_from_icon_name('media-playback-stop', gtk.ICON_SIZE_LARGE_TOOLBAR)
+ self.stopButtonImg.show()
+ # Toolbar
+ self.activity.activity_toolbar.share.show()
+ self._playToolbar = playToolbar(self.activity.toolbox, self)
+ self._recordToolbar = recordToolbar(self.activity.toolbox, self)
+ self.activity.toolbox.add_toolbar(_('Play'), self._playToolbar)
+ self.activity.toolbox.add_toolbar(_('Record'), self._recordToolbar)
+ self.activity.toolbox.set_current_toolbar(1)
+ self._playToolbar.show()
+ self._recordToolbar.show()
+
+ self.activity.connect( "shared", self.shared )
+
+ if os.path.isfile("FORCE_SHARE"): # HOST
+ r = random.random()
+ #print "::::: Sharing as TTDBG%f :::::" % r
+ #self.activity.set_title(_("TTDBG%f" % r))
+ print "::::: Sharing as TamTam :::::"
+ self.activity.set_title(_("TamTam"))
+ self.activity.share()
+ elif self.activity._shared_activity: # PEER
+ self.activity._shared_activity.connect( "buddy-joined", self.buddy_joined )
+ self.activity._shared_activity.connect( "buddy-left", self.buddy_left )
+ self.activity.connect( "joined", self.joined )
+ self.network.setMode( Net.MD_WAIT )
+ #self.activity.activity_toolbar.share.hide()
+
+ def drawGeneration( self ):
+
+ slidersBox = RoundVBox(fillcolor = Config.PANEL_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS)
+ slidersBox.set_border_width(Config.PANEL_SPACING)
+ geneButtonBox = RoundHBox(fillcolor = Config.PANEL_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS)
+ geneButtonBox.set_border_width(Config.PANEL_SPACING)
+
+ geneSliderBox = gtk.VBox()
+ self.geneSliderBoxImgTop = gtk.Image()
+ self.geneSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'complex6.png')
+ geneAdjustment = gtk.Adjustment(value=self.regularity, lower=0, upper=1, step_incr=0.01, page_incr=0, page_size=0)
+ geneSlider = ImageVScale( Config.IMAGE_ROOT + "sliderbutbleu.png", geneAdjustment, 5 )
+ geneSlider.set_inverted(False)
+ geneSlider.set_size_request(15,305)
+ geneAdjustment.connect("value_changed" , self.handleGenerationSlider)
+ geneSlider.connect("button-release-event", self.handleGenerationSliderRelease)
+ geneSliderBox.pack_start(self.geneSliderBoxImgTop, False, padding=10)
+ geneSliderBox.pack_start(geneSlider, True, 20)
+ self.tooltips.set_tip(geneSlider,Tooltips.COMPL)
+
+ beatSliderBox = gtk.VBox()
+ self.beatSliderBoxImgTop = gtk.Image()
+ self.beatSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'beat3.png')
+ self.beatAdjustment = gtk.Adjustment(value=self.beat, lower=2, upper=12, step_incr=1, page_incr=0, page_size=0)
+ self.beatSlider = ImageVScale( Config.IMAGE_ROOT + "sliderbutjaune.png", self.beatAdjustment, 5, snap = 1 )
+ self.beatSlider.set_inverted(True)
+ self.beatSlider.set_size_request(15,305)
+ self.beatAdjustment.connect("value_changed" , self.handleBeatSlider)
+ self.beatSlider.connect("button-release-event", self.handleBeatSliderRelease)
+ beatSliderBox.pack_start(self.beatSliderBoxImgTop, False, padding=10)
+ beatSliderBox.pack_start(self.beatSlider, True, 20)
+ self.tooltips.set_tip(self.beatSlider,Tooltips.BEAT)
+
+ self.delayedTempo = 0 # used to store tempo updates while the slider is active
+ self.tempoSliderActive = False
+
+ tempoSliderBox = gtk.VBox()
+ self.tempoSliderBoxImgTop = gtk.Image()
+ self.tempoSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'tempo5.png')
+ self.tempoAdjustment = gtk.Adjustment(value=self.tempo, lower=Config.PLAYER_TEMPO_LOWER, upper=Config.PLAYER_TEMPO_UPPER, step_incr=1, page_incr=1, page_size=1)
+ tempoSlider = ImageVScale( Config.IMAGE_ROOT + "sliderbutvert.png", self.tempoAdjustment, 5)
+ tempoSlider.set_inverted(True)
+ tempoSlider.set_size_request(15,305)
+ self.tempoAdjustmentHandler = self.tempoAdjustment.connect("value_changed" , self.handleTempoSliderChange)
+ tempoSlider.connect("button-press-event", self.handleTempoSliderPress)
+ tempoSlider.connect("button-release-event", self.handleTempoSliderRelease)
+ tempoSliderBox.pack_start(self.tempoSliderBoxImgTop, False, padding=10)
+ tempoSliderBox.pack_start(tempoSlider, True)
+ self.tooltips.set_tip(tempoSlider,Tooltips.TEMPO)
+
+ volumeSliderBox = gtk.VBox()
+ self.volumeSliderBoxImgTop = gtk.Image()
+ self.volumeSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'volume2.png')
+ self.volumeAdjustment = gtk.Adjustment(value=self.volume, lower=0, upper=200, step_incr=1, page_incr=1, page_size=1)
+ volumeSlider = ImageVScale( Config.IMAGE_ROOT + "sliderbutbleu.png", self.volumeAdjustment, 5)
+ volumeSlider.set_inverted(True)
+ volumeSlider.set_size_request(15,305)
+ self.volumeAdjustment.connect("value_changed" , self.handleVolumeSlider)
+ #volumeSlider.connect("button-release-event", self.handleVolumeSliderRelease)
+ volumeSliderBox.pack_start(self.volumeSliderBoxImgTop, False, padding=10)
+ volumeSliderBox.pack_start(volumeSlider, True)
+ self.tooltips.set_tip(volumeSlider,Tooltips.VOL)
+
+
+ slidersBoxSub = gtk.HBox()
+ slidersBoxSub.pack_start(beatSliderBox)
+ slidersBoxSub.pack_start(geneSliderBox)
+ slidersBoxSub.pack_start(tempoSliderBox)
+ slidersBoxSub.pack_start(volumeSliderBox)
+ slidersBox.pack_start(slidersBoxSub)
+
+ generateBtnSub = gtk.HBox()
+ generateBtn = ImageButton(Config.IMAGE_ROOT + 'dice.png', clickImg_path = Config.IMAGE_ROOT + 'diceblur.png')
+ generateBtn.connect('button-press-event', self.handleGenerateBtn)
+ generateBtnSub.pack_start(generateBtn)
+ slidersBox.pack_start(generateBtnSub)
+ self.tooltips.set_tip(generateBtn,Tooltips.GEN)
+
+ #Generation Button Box
+ geneVBox = gtk.VBox()
+ geneTopBox = gtk.HBox()
+ geneMidBox = gtk.HBox()
+ geneLowBox = gtk.HBox()
+
+ generationDrumBtn1 = ImageRadioButton(group = None , mainImg_path = Config.IMAGE_ROOT + 'drum1kit.png' , altImg_path = Config.IMAGE_ROOT + 'drum1kitselgen.png')
+ generationDrumBtn1.connect('clicked' , self.handleGenerationDrumBtn , 'drum1kit')
+ geneTopBox.pack_start(generationDrumBtn1)
+ generationDrumBtn2 = ImageRadioButton(group = generationDrumBtn1 , mainImg_path = Config.IMAGE_ROOT + 'drum2kit.png' , altImg_path = Config.IMAGE_ROOT + 'drum2kitselgen.png')
+ generationDrumBtn2.connect('clicked' , self.handleGenerationDrumBtn , 'drum2kit')
+ geneTopBox.pack_start(generationDrumBtn2)
+ generationDrumBtn3 = ImageRadioButton(group = generationDrumBtn1 , mainImg_path = Config.IMAGE_ROOT + 'drum3kit.png' , altImg_path = Config.IMAGE_ROOT + 'drum3kitselgen.png')
+ generationDrumBtn3.connect('clicked' , self.handleGenerationDrumBtn , 'drum3kit')
+ generationDrumBtn4 = ImageRadioButton(group = generationDrumBtn1 , mainImg_path = Config.IMAGE_ROOT + 'drum4kit.png' , altImg_path = Config.IMAGE_ROOT + 'drum4kitselgen.png')
+ generationDrumBtn4.connect('clicked' , self.handleGenerationDrumBtn , 'drum4kit')
+ geneLowBox.pack_start(generationDrumBtn3, True)
+ geneLowBox.pack_start(generationDrumBtn4, True)
+ generationDrumBtn5 = ImageRadioButton(group = generationDrumBtn1 , mainImg_path = Config.IMAGE_ROOT + 'drum5kit.png' , altImg_path = Config.IMAGE_ROOT + 'drum5kitselgen.png')
+ generationDrumBtn5.connect('clicked' , self.handleGenerationDrumBtn , 'drum5kit')
+ geneMidBox.pack_start(generationDrumBtn5, True)
+ geneVBox.pack_start(geneTopBox, True)
+ geneVBox.pack_start(geneMidBox, True)
+ geneVBox.pack_start(geneLowBox, True)
+ geneButtonBox.pack_start(geneVBox,True)
+ self.tooltips.set_tip(generationDrumBtn1,Tooltips.JAZZ)
+ self.tooltips.set_tip(generationDrumBtn2,Tooltips.ARAB)
+ self.tooltips.set_tip(generationDrumBtn3,Tooltips.AFRI)
+ self.tooltips.set_tip(generationDrumBtn4,Tooltips.ELEC)
+ self.tooltips.set_tip(generationDrumBtn5,Tooltips.BRES)
+
+ self.rightBox.pack_start(slidersBox, True)
+ self.rightBox.pack_start(geneButtonBox, True)
+
+ def loopSettingsChannel(self, channel, value):
+ self.csnd.setChannel(channel, value)
+
+ def loopSettingsPlayStop(self, state, loop):
+ if not state:
+ if loop:
+ self.loopSettingsPlaying = True
+ self.csnd.inputMessage(Config.CSOUND_PLAY_LS_NOTE % 5022)
+ else:
+ self.csnd.inputMessage(Config.CSOUND_PLAY_LS_NOTE % 5023)
+ else:
+ if loop:
+ self.loopSettingsPlaying = False
+ self.csnd.inputMessage(Config.CSOUND_STOP_LS_NOTE)
+
+ def doneLoopSettingsPopup(self):
+ if self._recordToolbar.loopSetButton.get_active():
+ if self.loopSettingsPlaying:
+ self.csnd.inputMessage(Config.CSOUND_STOP_LS_NOTE)
+ self.loopSettingsPlaying = False
+ self._recordToolbar.loopSetButton.set_active(False)
+
+ def handleLoopSettingsBtn(self, widget, data=None):
+ if widget.get_active():
+
+ chooser = gtk.FileChooserDialog(title='Edit SoundFile Preference',action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
+
+ #filter = gtk.FileFilter()
+ #filter.add_pattern('*.wav')
+ #chooser.set_filter(filter)
+ chooser.set_current_folder(Config.SNDS_DIR)
+
+ for f in chooser.list_shortcut_folder_uris():
+ chooser.remove_shortcut_folder_uri(f)
+
+ if chooser.run() == gtk.RESPONSE_OK:
+ try:
+ tempName = chooser.get_filename()
+ soundName = os.path.split(tempName)[1]
+ except IOError:
+ print 'ERROR: failed to load Sound from file %s' % chooser.get_filename()
+ chooser.destroy()
+ results = commands.getstatusoutput("csound -U sndinfo %s" % tempName)
+ if results[0] == 0:
+ list = results[1].split()
+ pos = list.index('seconds')
+ soundLength = float(list[pos-1])
+ self.loopSettings.set_name(soundName)
+ self.loopSettings.setButtonState()
+ self.loopSettingsPopup.show()
+ self.loopSettingsPopup.move( 600, 200 )
+ self.timeoutLoad = gobject.timeout_add(1000, self.load_ls_instrument, soundName, soundLength)
+ else:
+ self.loopSettingsPopup.hide()
+
+ def load_ls_instrument(self, soundName, soundLength):
+ self.csnd.load_ls_instrument(soundName)
+ self.loopSettings.set_values(soundLength)
+ gobject.source_remove( self.timeoutLoad )
+
+ def drawInstrumentButtons(self):
+ self.instrumentPanelBox = gtk.HBox()
+ # InstrumentPanel(elf.setInstrument,self.playInstrumentNote, False, self.micRec, self.synthRec)
+ self.leftBox.pack_start(self.instrumentPanelBox,True,True)
+
+ def setInstrumentPanel( self, instrumentPanel ):
+ instrumentPanel.configure( self.setInstrument,self.playInstrumentNote, False, self.micRec )
+ self.instrumentPanel = instrumentPanel
+ self.instrumentPanelBox.pack_start( instrumentPanel )
+
+ def releaseInstrumentPanel( self ):
+ self.instrumentPanelBox.remove( self.instrumentPanel )
+
+ def micRec(self, widget, mic):
+ os.system('rm ' + Config.SNDS_DIR + '/' + mic)
+ self.csnd.inputMessage("i5600 0 4")
+ (s1,o1) = commands.getstatusoutput("arecord -f S16_LE -t wav -r 16000 -d 4 " + Config.SNDS_DIR + "/tempMic.wav")
+ (s2, o2) = commands.getstatusoutput("csound " + Config.FILES_DIR + "/crop.csd")
+ (s3, o3) = commands.getstatusoutput("mv " + Config.SNDS_DIR + "/micTemp " + Config.SNDS_DIR + "/" + mic)
+ (s4, o4) = commands.getstatusoutput("rm " + Config.SNDS_DIR + "/tempMic.wav")
+ self.micTimeout = gobject.timeout_add(200, self.loadMicInstrument, mic)
+ self.instrumentPanel.set_activeInstrument(mic,True)
+ self.setInstrument(mic)
+
+ def recordStateButton( self, button, state ):
+ if button == 1:
+ self._recordToolbar.keyboardRecButton.set_active( state )
+ else:
+ self._recordToolbar.keyboardRecOverButton.set_active( state )
+
+ def recordOverSensitivity( self, state ):
+ self._recordToolbar.keyboardRecOverButton.set_sensitive( state )
+
+ def synthLabWindowOpen(self):
+ return self.synthLabWindow != None and self.synthLabWindow.get_property('visible')
+
+ def loadMicInstrument( self, data ):
+ self.csnd.load_mic_instrument( data )
+
+ def closeSynthLab(self):
+ if self.synthLabWindow != None:
+ self.synthLabWindow.destroy()
+ self.synthLabWindow = None
+
+ def regenerate(self):
+ def flatten(ll):
+ rval = []
+ for l in ll:
+ rval += l
+ return rval
+ if self.beatPickup:
+ self.pickupNewBeat()
+ noteOnsets = []
+ notePitchs = []
+ i = 0
+ self.noteList= []
+ self.csnd.loopClear()
+ for x in flatten( generator(self.rythmInstrument, self.beat, 0.8, self.regularity, self.reverb) ):
+ x.amplitude = x.amplitude * self.drumVolume
+ noteOnsets.append(x.onset)
+ notePitchs.append(x.pitch)
+ n = Note(0, x.trackId, i, x)
+ self.noteList.append( (x.onset, n) )
+ i = i + 1
+ self.csnd.loopPlay(n,1) #add as active
+ self.csnd.loopSetNumTicks( self.beat * Config.TICKS_PER_BEAT)
+ self.drumFillin.unavailable( noteOnsets, notePitchs )
+ self.recordOverSensitivity( False )
+
+ def adjustDrumVolume(self):
+ for n in self.noteList:
+ self.csnd.loopUpdate(n[1], PARAMETER.AMPLITUDE, n[1].cs.amplitude*self.drumVolume, 1)
+
+ def handleClose(self,widget):
+ if self.playStopButton.get_active() == True:
+ self.playStopButton.set_active(False)
+ self.sequencer.clearSequencer()
+ self.csnd.loopClear()
+ self.activity.close()
+
+ def handleGenerationSlider(self, adj):
+ img = int(adj.value * 7)+1
+ self.geneSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'complex' + str(img) + '.png')
+
+ def handleGenerationSliderRelease(self, widget, event):
+ self.regularity = widget.get_adjustment().value
+ self.beatPickup = False
+ self.regenerate()
+ self.beatPickup = True
+
+ def pickupNewBeat(self):
+ self.beat = random.randint(2, 12)
+ img = self.scale(self.beat,2,12,1,11)
+ self.beatSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'beat' + str(img) + '.png')
+ self.beatAdjustment.set_value(self.beat)
+ self.sequencer.beat = self.beat
+ self.loop.beat = self.beat
+ self.drumFillin.setBeats( self.beat )
+
+ def handleBeatSlider(self, adj):
+ img = self.scale(int(adj.value),2,12,1,11)
+ self.beatSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'beat' + str(img) + '.png')
+ self.sequencer.beat = self.beat
+ self.loop.beat = self.beat
+ self.drumFillin.setBeats( self.beat )
+
+ def handleBeatSliderRelease(self, widget, event):
+ self.beat = int(widget.get_adjustment().value)
+ self.sequencer.beat = self.beat
+ self.loop.beat = self.beat
+ self.drumFillin.setBeats( self.beat )
+ self.beatPickup = False
+ self.regenerate()
+ self.beatPickup = True
+
+ def handleTempoSliderPress(self, widget, event):
+ self.tempoSliderActive = True
+
+ def handleTempoSliderRelease(self, widget, event):
+ self.tempoSliderActive = False
+ if self.network.isPeer() and self.delayedTempo != 0:
+ if self.tempo != self.delayedTempo:
+ self.tempoAdjustment.handler_block( self.tempoAdjustmentHandler )
+ self.tempoAdjustment.set_value( self.delayedTempo )
+ self._updateTempo( self.delayedTempo )
+ self.tempoAdjustment.handler_unblock( self.tempoAdjustmentHandler )
+ self.delayedTempo = 0
+ self.sendSyncQuery()
+
+ def handleTempoSliderChange(self,adj):
+ if self.network.isPeer():
+ self.requestTempoChange(int(adj.value))
+ else:
+ self._updateTempo( int(adj.value) )
+
+ def _updateTempo( self, val ):
+
+ if self.network.isHost():
+ t = time.time()
+ percent = self.heartbeatElapsed() / self.beatDuration
+
+ self.tempo = val
+ self.beatDuration = 60.0/self.tempo
+ self.ticksPerSecond = Config.TICKS_PER_BEAT*self.tempo/60.0
+ self.csnd.setTempo(self.tempo)
+ self.sequencer.tempo = self.tempo
+ self.drumFillin.setTempo(self.tempo)
+
+ if self.network.isHost():
+ self.heatbeatStart = t - percent*self.beatDuration
+ self.updateSync()
+ self.sendTempoUpdate()
+
+ img = int(self.scale( self.tempo,
+ Config.PLAYER_TEMPO_LOWER,Config.PLAYER_TEMPO_UPPER,
+ 1,9))
+ self.tempoSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'tempo' + str(img) + '.png')
+
+ def handleBalanceSlider(self, adj):
+ self.instVolume = int(adj.value)
+ self.drumVolume = sqrt( (100-self.instVolume)*0.01 )
+ self.adjustDrumVolume()
+ self.drumFillin.setVolume(self.drumVolume)
+ instrumentVolume = sqrt( self.instVolume*0.01 )
+ self.loop.adjustLoopVolume(instrumentVolume)
+ self.sequencer.adjustSequencerVolume(instrumentVolume)
+ img = int(self.scale(self.instVolume,100,0,0,4.9))
+ self._playToolbar.balanceSliderImgLeft.set_from_file(Config.IMAGE_ROOT + 'dru' + str(img) + '.png')
+ img2 = int(self.scale(self.instVolume,0,100,0,4.9))
+ self._playToolbar.balanceSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'instr' + str(img2) + '.png')
+
+ def handleReverbSlider(self, adj):
+ self.reverb = adj.value
+ self.drumFillin.setReverb( self.reverb )
+ img = int(self.scale(self.reverb,0,1,0,4))
+ self._playToolbar.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'reverb' + str(img) + '.png')
+ self.keyboardStandAlone.setReverb(self.reverb)
+
+ def handleVolumeSlider(self, adj):
+ self.volume = adj.value
+ self.csnd.setMasterVolume(self.volume)
+ img = int(self.scale(self.volume,0,200,0,3.9))
+ self.volumeSliderBoxImgTop.set_from_file(Config.IMAGE_ROOT + 'volume' + str(img) + '.png')
+
+ def handlePlayButton(self, widget, data = None):
+ # use widget.get_active() == False when calling this on 'clicked'
+ # use widget.get_active() == True when calling this on button-press-event
+ if widget.get_active() == False:
+ self.drumFillin.stop()
+ self.sequencer.stopPlayback()
+ self.csnd.loopPause()
+ widget.set_icon_widget(self.playButtonImg)
+ else:
+ if not self.firstTime:
+ self.regenerate()
+ self.firstTime = True
+ self.drumFillin.play()
+ #self.csnd.loopSetTick(0)
+ nextInTicks = self.nextHeartbeatInTicks()
+ #print "play:: next beat in %f ticks. bpb == %d. setting ticks to %d" % (nextInTicks, self.beat, Config.TICKS_PER_BEAT*self.beat - int(round(nextInTicks)))
+ self.csnd.loopSetTick( Config.TICKS_PER_BEAT*self.beat - int(round(nextInTicks)) )
+ self.csnd.loopStart()
+ widget.set_icon_widget(self.stopButtonImg)
+
+
+ def handleGenerationDrumBtn(self , widget , data):
+ #data is drum1kit, drum2kit, or drum3kit
+ #print 'HANDLE: Generate Button'
+ self.rythmInstrument = data
+ instrumentId = Config.INSTRUMENTS[data].instrumentId
+ for (o,n) in self.noteList :
+ self.csnd.loopUpdate(n, NoteDB.PARAMETER.INSTRUMENT, instrumentId, -1)
+ self.drumFillin.setInstrument( self.rythmInstrument )
+
+ def handleGenerateBtn(self , widget , data=None):
+ self.regenerate()
+ if not self._playToolbar.playButton.get_active():
+ self._playToolbar.playButton.set_active(True)
+
+ #this calls sends a 'clicked' event,
+ #which might be connected to handlePlayButton
+ self.playStartupSound()
+
+ def enableKeyboard( self ):
+ self.keyboardStandAlone = KeyboardStandAlone( self.sequencer.recording, self.sequencer.adjustDuration, self.csnd.loopGetTick, self.sequencer.getPlayState, self.loop )
+ self.add_events(gtk.gdk.BUTTON_PRESS_MASK)
+
+ def setInstrument( self , instrument ):
+ self.instrument = instrument
+ self.keyboardStandAlone.setInstrument(instrument)
+
+ def playInstrumentNote(self , instrument, secs_per_tick = 0.025):
+ if not self.muteInst:
+ self.csnd.play(
+ CSoundNote( onset = 0,
+ pitch = 36,
+ amplitude = 1,
+ pan = 0.5,
+ duration = 20,
+ trackId = 1,
+ instrumentId = Config.INSTRUMENTS[instrument].instrumentId,
+ reverbSend = 0,
+ tied = False,
+ mode = 'mini'),
+ secs_per_tick)
+
+ def onKeyPress(self, widget, event):
+ if event.hardware_keycode == 219: #'/*' button to reset drum loop
+ if self.playStopButton.get_active() == True:
+ self.handlePlayButton(self.playStopButton)
+ self.playStopButton.set_active(False)
+ self.handlePlayButton(self.playStopButton)
+ self.playStopButton.set_active(True)
+
+ if event.hardware_keycode == 37:
+ if self.muteInst:
+ self.muteInst = False
+ else:
+ self.muteInst = True
+
+ if event.hardware_keycode == 65: #what key is this? what feature is this?
+ pass
+ #if self.playStopButton.get_active():
+ #self.playStopButton.set_active(False)
+ #else:
+ #self.playStopButton.set_active(True)
+
+ self.keyboardStandAlone.onKeyPress(widget, event, sqrt( self.instVolume*0.01 ))
+
+ def onKeyRelease(self, widget, event):
+ self.keyboardStandAlone.onKeyRelease(widget, event)
+
+ def playStartupSound(self):
+ r = str(random.randrange(1,11))
+ self.playInstrumentNote('guidice' + r)
+
+ def onActivate( self, arg ):
+ self.csnd.loopPause()
+ self.csnd.loopClear()
+
+ def onDeactivate( self ):
+ SubActivity.onDeactivate( self )
+ self.releaseInstrumentPanel()
+ self.csnd.loopPause()
+ self.csnd.loopClear()
+
+ def onDestroy( self ):
+ self.network.shutdown()
+
+ def scale(self, input,input_min,input_max,output_min,output_max):
+ range_input = input_max - input_min
+ range_output = output_max - output_min
+ result = (input - input_min) * range_output / range_input + output_min
+
+ if (input_min > input_max and output_min > output_max) or (output_min > output_max and input_min < input_max):
+ if result > output_min:
+ return output_min
+ elif result < output_max:
+ return output_max
+ else:
+ return result
+
+ if (input_min < input_max and output_min < output_max) or (output_min < output_max and input_min > input_max):
+ if result > output_max:
+ return output_max
+ elif result < output_min:
+ return output_min
+ else:
+ return result
+
+
+ #-----------------------------------------------------------------------
+ # Network
+
+ #-- Activity -----------------------------------------------------------
+
+ def shared( self, activity ):
+ if Config.DEBUG: print "miniTamTam:: successfully shared, start host mode"
+ self.activity._shared_activity.connect( "buddy-joined", self.buddy_joined )
+ self.activity._shared_activity.connect( "buddy-left", self.buddy_left )
+ self.network.setMode( Net.MD_HOST )
+ self.updateSync()
+ self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
+
+ def joined( self, activity ):
+ print "miniTamTam:: joined activity!!"
+ for buddy in self.activity._shared_activity.get_joined_buddies():
+ print buddy.props.ip4_address
+
+ def buddy_joined( self, activity, buddy ):
+ print "buddy joined " + str(buddy)
+ try:
+ print buddy.props.ip4_address
+ except:
+ print "bad ip4_address"
+ if self.network.isHost():
+ # TODO how do I figure out if this buddy is me?
+ if buddy.props.ip4_address:
+ self.network.introducePeer( buddy.props.ip4_address )
+ else:
+ print "miniTamTam:: new buddy does not have an ip4_address!!"
+
+ def buddy_left( self, activity, buddy):
+ print "buddy left"
+
+ #def joined( self, activity ):
+ # if Config.DEBUG: print "miniTamTam:: successfully joined, wait for host"
+ # self.net.waitForHost()
+
+ #-- Senders ------------------------------------------------------------
+
+ def sendSyncQuery( self ):
+ self.packer.pack_float(random.random())
+ hash = self.packer.get_buffer()
+ self.packer.reset()
+ self.syncQueryStart[hash] = time.time()
+ self.network.send( Net.PR_SYNC_QUERY, hash)
+
+ def sendTempoUpdate( self ):
+ self.packer.pack_int(self.tempo)
+ self.network.sendAll( Net.HT_TEMPO_UPDATE, self.packer.get_buffer() )
+ self.packer.reset()
+
+ def sendTempoQuery( self ):
+ self.network.send( Net.PR_TEMPO_QUERY )
+
+ def requestTempoChange( self, val ):
+ self.packer.pack_int(val)
+ self.network.send( Net.PR_REQUEST_TEMPO_CHANGE, self.packer.get_buffer() )
+ self.packer.reset()
+
+ #-- Handlers -----------------------------------------------------------
+
+ def networkStatusWatcher( self, mode ):
+ if mode == Net.MD_OFFLINE:
+ if self.syncTimeout:
+ gobject.source_remove( self.syncTimeout )
+ self.syncTimeout = None
+ if mode == Net.MD_PEER:
+ self.updateSync()
+ if not self.syncTimeout:
+ self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
+ self.sendTempoQuery()
+
+ def processHT_SYNC_REPLY( self, sock, message, data ):
+ t = time.time()
+ hash = data[0:4]
+ latency = t - self.syncQueryStart[hash]
+ self.unpacker.reset(data[4:8])
+ nextBeat = self.unpacker.unpack_float()
+ #print "mini:: got sync: next beat in %f, latency %d" % (nextBeat, latency*1000)
+ self.heartbeatStart = t + nextBeat - self.beatDuration - latency/2
+ self.correctSync()
+ self.syncQueryStart.pop(hash)
+
+ def processHT_TEMPO_UPDATE( self, sock, message, data ):
+ self.unpacker.reset(data)
+ val = self.unpacker.unpack_int()
+ if self.tempoSliderActive:
+ self.delayedTempo = val
+ return
+ self.tempoAdjustment.handler_block( self.tempoAdjustmentHandler )
+ self.tempoAdjustment.set_value( val )
+ self._updateTempo( val )
+ self.tempoAdjustment.handler_unblock( self.tempoAdjustmentHandler )
+ self.sendSyncQuery()
+
+ def processPR_SYNC_QUERY( self, sock, message, data ):
+ self.packer.pack_float(self.nextHeartbeat())
+ self.network.send( Net.HT_SYNC_REPLY, data + self.packer.get_buffer(), sock )
+ self.packer.reset()
+
+ def processPR_TEMPO_QUERY( self, sock, message, data ):
+ self.packer.pack_int(self.tempo)
+ self.network.send( Net.HT_TEMPO_UPDATE, self.packer.get_buffer(), to = sock )
+ self.packer.reset()
+
+ def processPR_REQUEST_TEMPO_CHANGE( self, sock, message, data ):
+ if self.tempoSliderActive:
+ return
+ self.unpacker.reset(data)
+ val = self.unpacker.unpack_int()
+ self.tempoAdjustment.set_value( val )
+
+ #-----------------------------------------------------------------------
+ # Sync
+
+ def nextHeartbeat( self ):
+ delta = time.time() - self.heartbeatStart
+ return self.beatDuration - (delta % self.beatDuration)
+
+ def nextHeartbeatInTicks( self ):
+ delta = time.time() - self.heartbeatStart
+ next = self.beatDuration - (delta % self.beatDuration)
+ return self.ticksPerSecond*next
+
+ def heartbeatElapsed( self ):
+ delta = time.time() - self.heartbeatStart
+ return delta % self.beatDuration
+
+ def heartbeatElapsedTicks( self ):
+ delta = time.time() - self.heartbeatStart
+ return self.ticksPerSecond*(delta % self.beatDuration)
+
+ def updateSync( self ):
+ if self.network.isOffline():
+ return False
+ elif self.network.isWaiting():
+ return True
+ elif self.network.isHost():
+ self.correctSync()
+ else:
+ self.sendSyncQuery()
+ return True
+
+ def correctSync( self ):
+ curTick = self.csnd.loopGetTick()
+ curTicksIn = curTick % Config.TICKS_PER_BEAT
+ ticksIn = self.heartbeatElapsedTicks()
+ err = curTicksIn - ticksIn
+ if err > Config.TICKS_PER_BEAT_DIV2:
+ err -= Config.TICKS_PER_BEAT
+ elif err < -Config.TICKS_PER_BEAT_DIV2:
+ err += Config.TICKS_PER_BEAT
+ correct = curTick - err
+ ticksPerLoop = Config.TICKS_PER_BEAT*self.beat
+ if correct > ticksPerLoop:
+ correct -= ticksPerLoop
+ elif correct < 0:
+ correct += ticksPerLoop
+ #print "correct:: %f ticks, %f ticks in, %f expected, %f err, correct %f" % (curTick, curTicksIn, ticksIn, err, correct)
+ if abs(err) > 0.25:
+ self.csnd.adjustTick(-err)
+
+
+if __name__ == "__main__":
+ MiniTamTam = miniTamTam()
+ #start the gtk event loop
+ gtk.main()
diff --git a/TamTamMini.activity/Mini/miniToolbars.py b/TamTamMini.activity/Mini/miniToolbars.py
new file mode 100644
index 0000000..7fc518e
--- /dev/null
+++ b/TamTamMini.activity/Mini/miniToolbars.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python
+
+import gtk
+import common.Config as Config
+
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toggletoolbutton import ToggleToolButton
+from sugar.graphics.palette import Palette
+from gettext import gettext as _
+
+class playToolbar(gtk.Toolbar):
+ def __init__(self,toolbox, miniTamTam):
+ gtk.Toolbar.__init__(self)
+
+ def _insertSeparator(x = 1):
+ for i in range(x):
+ self.separator = gtk.SeparatorToolItem()
+ self.separator.set_draw(True)
+ self.insert(self.separator,-1)
+ self.separator.show()
+
+ self.toolbox = toolbox
+ self.miniTamTam = miniTamTam
+
+ self.tooltips = gtk.Tooltips()
+
+ self.playButton = ToggleToolButton('media-playback-start')
+ self.playButton.connect('clicked',self.miniTamTam.handlePlayButton)
+ self.insert(self.playButton, -1)
+ self.playButton.show()
+ self.playButton.set_tooltip(_('Play / Stop'))
+
+ _insertSeparator(1)
+
+ self.balanceSliderImgLeft = gtk.Image()
+ self.balanceSliderImgRight = gtk.Image()
+ self.balanceSliderImgLeft.set_from_file(Config.IMAGE_ROOT + 'dru2.png')
+ self.balanceSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'instr2.png')
+ self.balanceSliderImgLeftTool = gtk.ToolItem()
+ self.balanceSliderImgLeftTool.add(self.balanceSliderImgLeft)
+ self.balanceSliderImgRightTool = gtk.ToolItem()
+ self.balanceSliderImgRightTool.add(self.balanceSliderImgRight)
+ self.balanceSliderAdj = gtk.Adjustment(value=50, lower=0, upper=100, step_incr=1, page_incr=0, page_size=0)
+ self.balanceSliderAdj.connect("value_changed" , self.miniTamTam.handleBalanceSlider)
+ self.balanceSlider = gtk.HScale(adjustment = self.balanceSliderAdj)
+ self.balanceSlider.set_size_request(250,15)
+ self.balanceSlider.set_inverted(False)
+ self.balanceSlider.set_draw_value(False)
+ self.balanceSliderTool = gtk.ToolItem()
+ self.balanceSliderTool.add(self.balanceSlider)
+ self.insert(self.balanceSliderImgLeftTool, -1)
+ self.insert(self.balanceSliderTool, -1)
+ self.insert(self.balanceSliderImgRightTool, -1)
+ self.balanceSliderImgLeft.show()
+ self.balanceSliderImgLeftTool.show()
+ self.balanceSliderImgRight.show()
+ self.balanceSliderImgRightTool.show()
+ self.balanceSlider.show()
+ self.balanceSliderTool.show()
+ self.balanceSliderTool.set_tooltip(self.tooltips, _('Balance'))
+
+ _insertSeparator(1)
+
+ self.reverbSliderImgRight = gtk.Image()
+ self.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'reverb0.png')
+ self.reverbSliderImgRightTool = gtk.ToolItem()
+ self.reverbSliderImgRightTool.add(self.reverbSliderImgRight)
+
+ self.reverbSliderAdj = gtk.Adjustment(value=0, lower=0, upper=1, step_incr=0.1, page_incr=0, page_size=0)
+ self.reverbSliderAdj.connect("value_changed" , self.miniTamTam.handleReverbSlider)
+ self.reverbSlider = gtk.HScale(adjustment = self.reverbSliderAdj)
+ self.reverbSlider.set_size_request(250,15)
+ self.reverbSlider.set_inverted(False)
+ self.reverbSlider.set_draw_value(False)
+ self.reverbSliderTool = gtk.ToolItem()
+ self.reverbSliderTool.add(self.reverbSlider)
+ self.insert(self.reverbSliderTool, -1)
+ self.insert(self.reverbSliderImgRightTool, -1)
+ self.reverbSliderImgRight.show()
+ self.reverbSliderImgRightTool.show()
+ self.reverbSlider.show()
+ self.reverbSliderTool.show()
+ self.reverbSliderTool.set_tooltip(self.tooltips, _('Reverb'))
+
+
+class recordToolbar(gtk.Toolbar):
+ def __init__(self,toolbox, miniTamTam):
+ gtk.Toolbar.__init__(self)
+
+ def _insertSeparator(x = 1):
+ for i in range(x):
+ self.separator = gtk.SeparatorToolItem()
+ self.separator.set_draw(True)
+ self.insert(self.separator,-1)
+ self.separator.show()
+
+ self.toolbox = toolbox
+ self.miniTamTam = miniTamTam
+
+ self.micRec1Button = ToolButton('rec1')
+ self.micRec1Button.connect('clicked',self.miniTamTam.micRec,'mic1')
+ self.insert(self.micRec1Button, -1)
+ self.micRec1Button.show()
+ self.micRec1Button.set_tooltip(_('Record microphone into slot 1'))
+
+ self.micRec2Button = ToolButton('rec2')
+ self.micRec2Button.connect('clicked',self.miniTamTam.micRec,'mic2')
+ self.insert(self.micRec2Button, -1)
+ self.micRec2Button.show()
+ self.micRec2Button.set_tooltip(_('Record microphone into slot 2'))
+
+ self.micRec3Button = ToolButton('rec3')
+ self.micRec3Button.connect('clicked',self.miniTamTam.micRec,'mic3')
+ self.insert(self.micRec3Button, -1)
+ self.micRec3Button.show()
+ self.micRec3Button.set_tooltip(_('Record microphone into slot 3'))
+
+ self.micRec4Button = ToolButton('rec4')
+ self.micRec4Button.connect('clicked',self.miniTamTam.micRec,'mic4')
+ self.insert(self.micRec4Button, -1)
+ self.micRec4Button.show()
+ self.micRec4Button.set_tooltip(('Record microphone into slot 4'))
+
+ _insertSeparator()
+
+ self.keyboardRecButton = ToggleToolButton('keyrec')
+ self.keyboardRecButton.connect('clicked', self.miniTamTam.sequencer.handleRecordButton )
+ self.insert(self.keyboardRecButton, -1)
+ self.keyboardRecButton.show()
+ self.keyboardRecButton.set_tooltip(_('Click to record a loop'))
+
+ self.keyboardRecOverButton = ToggleToolButton('overrec')
+ self.keyboardRecOverButton.connect('clicked', self.miniTamTam.sequencer.handleOverButton )
+ self.insert(self.keyboardRecOverButton, -1)
+ self.keyboardRecOverButton.show()
+ self.keyboardRecOverButton.set_tooltip(_('Click to add a loop'))
+ self.keyboardRecOverButton.set_sensitive(False)
+
+ self.keyboardRecMinusButton = ToolButton('minusrec')
+ self.keyboardRecMinusButton.connect('clicked', self.miniTamTam.sequencer.clearSequencer )
+ self.insert(self.keyboardRecMinusButton, -1)
+ self.keyboardRecMinusButton.show()
+ self.keyboardRecMinusButton.set_tooltip(_('Click to clear all loops'))
+
+ _insertSeparator()
+
+ self.loopSetButton = ToggleToolButton('loop')
+ self.loopSetButton.connect('clicked', self.miniTamTam.handleLoopSettingsBtn)
+ self.insert(self.loopSetButton, -1)
+ self.loopSetButton.show()
+ self.loopSetButton.set_tooltip(_('Add new sound'))
+ \ No newline at end of file
diff --git a/TamTamMini.activity/NEWS b/TamTamMini.activity/NEWS
new file mode 100644
index 0000000..8120a07
--- /dev/null
+++ b/TamTamMini.activity/NEWS
@@ -0,0 +1,71 @@
+39
+
+* New activity : TamTamJam (lync)
+* Activities are now separate (TamTamJam, TamTamEdit, TamTamSynthLab)
+* No sound when set to language other than english fixed (#3165) (J5, marcopg, tomeu, Flipo)
+
+38
+
+* Adapt to new Palette API (Flipo)
+
+37
+
+* Small layout change in edit (Flipo)
+* Temporary fix for Palettes causing the audio to stop (Flipo)
+
+36
+
+* Major image cleanup, 700k saved (Flipo)
+* Tune generation back (see leftmost icon on generate tab) (Olipet)
+
+35
+
+* TamTam Edit Toolbars enhancements (Flipo, Olipet)
+* TamTam Edit layout changes (lync)
+* Dual instruments for tracks in Edit (Olipet, lync)
+
+34
+
+* Synthlab sugar integration (olipet, Flipo)
+* Toolbars in edit draft, hit alt-t to show the toolbar, alt-y to hide (Flipo)
+* Bug that prevented sound from working fixed (LeJames)
+
+33
+
+* Added Sugar Toolbar to miniTamTam and Synthlab (Flipo)
+* Network now working in miniTamTam, use the share button on the activity toolbar (lync)
+* Added help subsystem (ethrop, LeJames)
+
+32
+
+* Important microphone fix (Olipet)
+
+31
+
+* Working network (create a FORCE_SHARE file in the / dir) (lync)
+* New tune generator in Edit, click the dice in the tune view (Olipet)
+* Fine tuning of the algorythmic generator and orchestras (Olipet)
+* TamTamJam (miniTamTam) integration with the journal (Flipo)
+* Title according to subactivity displayed in the journal (Flipo)
+
+30
+
+* Clicking the close button in Edit and Synthlab goes back to Sugar. (Flipo)
+* Fix to the Journal load and save. (Flipo, lync)
+* Ogg player on the welcome page. (lync)
+* Demo tune instruments and tempo are randomly generated (Olipet)
+* lab placeholder files were reduced in size by 95% (Olipet)
+
+29
+
+* WelcomeScreen: Removed Typing Game icon. (Flipo)
+* General: Added sounds. (ethrop, Olipet)
+* General: Journal integration. (Flipo, lync)
+* TamTamJam: Microphone semi-working. (James)
+* TamTamEdit: Beats per page setting. (lync, Olipet)
+* TamTamEdit: Mute/Solo controls on tracks. (Flipo)
+* TamTamEdit: Paint tool. (Olipet)
+* TamTamEdit: Properties automation. (Olipet)
+* TamTamEdit: Pages can have different colors. (lync)
+* TamTamEdit: Realtime keyboard recording. (Olipet)
+* TamTamEdit: Export song to ogg file. (Olipet) \ No newline at end of file
diff --git a/TamTamMini.activity/TamTamMini.py b/TamTamMini.activity/TamTamMini.py
new file mode 100644
index 0000000..70ed410
--- /dev/null
+++ b/TamTamMini.activity/TamTamMini.py
@@ -0,0 +1,175 @@
+import locale
+locale.setlocale(locale.LC_NUMERIC, 'C')
+import signal , time , sys , os, shutil
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+
+import gobject
+import time
+
+import common.Config as Config
+from common.Util.CSoundClient import new_csound_client
+from common.Util.Profiler import TP
+
+from common.Util.InstrumentPanel import InstrumentPanel
+from Mini.miniTamTamMain import miniTamTamMain
+from common.Util.Trackpad import Trackpad
+from gettext import gettext as _
+import commands
+from sugar.activity import activity
+
+class TamTamMini(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle)
+ self.ensure_dirs()
+
+ color = gtk.gdk.color_parse(Config.WS_BCK_COLOR)
+ self.modify_bg(gtk.STATE_NORMAL, color)
+
+ self.set_title('TamTam Mini')
+ self.set_resizable(False)
+
+ self.trackpad = Trackpad( self )
+
+ self.preloadTimeout = None
+
+ self.focusInHandler = self.connect('focus_in_event',self.onFocusIn)
+ self.focusOutHandler = self.connect('focus_out_event',self.onFocusOut)
+ self.connect('notify::active', self.onActive)
+ self.connect('destroy', self.onDestroy)
+ self.connect( "key-press-event", self.onKeyPress )
+ self.connect( "key-release-event", self.onKeyRelease )
+
+
+ self.instrumentPanel = InstrumentPanel( force_load = False )
+ self.preloadList = [ self.instrumentPanel ]
+
+ #load the sugar toolbar
+ self.toolbox = activity.ActivityToolbox(self)
+ self.set_toolbox(self.toolbox)
+
+ self.activity_toolbar = self.toolbox.get_activity_toolbar()
+ self.activity_toolbar.share.hide()
+ self.activity_toolbar.keep.hide()
+
+ self.toolbox.show()
+
+ self.trackpad.setContext('mini')
+ self.mini = miniTamTamMain(self)
+ #self.modeList[mode].regenerate()
+ if self.instrumentPanel in self.preloadList:
+ self.instrumentPanel.load() # finish loading
+ self.mini.setInstrumentPanel( self.instrumentPanel )
+
+ self.set_canvas( self.mini )
+
+ self.mini.onActivate(arg = None)
+ self.show()
+
+ def onPreloadTimeout( self ):
+ if Config.DEBUG > 4: print "TamTam::onPreloadTimeout", self.preloadList
+
+ t = time.time()
+ if self.preloadList[0].load( t + 0.100 ): # finished preloading this object
+ self.preloadList.pop(0)
+ if not len(self.preloadList):
+ if Config.DEBUG > 1: print "TamTam::finished preloading", time.time() - t
+ self.preloadTimeout = False
+ return False # finished preloading everything
+
+ if Config.DEBUG > 4: print "TamTam::preload returned after", time.time() - t
+
+ return True
+
+ def onFocusIn(self, event, data=None):
+ if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
+ csnd = new_csound_client()
+ csnd.connect(True)
+ if self.mode == 'synth':
+ self.modeList[ self.mode ].updateSound()
+ self.modeList[ self.mode ].updateTables()
+ #csnd.load_instruments()
+
+ def onFocusOut(self, event, data=None):
+ if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
+ csnd = new_csound_client()
+ csnd.connect(False)
+
+ def onActive(self, widget = None, event = None):
+ pass
+
+ def onKeyPress(self, widget, event):
+ if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyPress in TamTam.py'
+ if event.state == gtk.gdk.MOD1_MASK:
+ key = event.keyval
+ if key == gtk.keysyms.j:
+ self.set_mode("jam")
+ return
+ elif key == gtk.keysyms.m:
+ self.set_mode('mini')
+ return
+ elif key == gtk.keysyms.s:
+ self.set_mode('synth')
+ return
+ elif key == gtk.keysyms.w:
+ self.set_mode('welcome')
+ return
+ elif key == gtk.keysyms.e:
+ self.set_mode('edit')
+ return
+ elif key == gtk.keysyms.t:
+ self.toolbox.show()
+ return
+ elif key == gtk.keysyms.y:
+ self.toolbox.hide()
+ if self.mode:
+ self.modeList[ self.mode ].onKeyPress(widget, event)
+
+ def onKeyRelease(self, widget, event):
+ if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyRelease in TamTam.py'
+ self.modeList[ self.mode ].onKeyRelease(widget, event)
+ pass
+
+ def onDestroy(self, arg2):
+ if Config.DEBUG: print 'DEBUG: TamTam::onDestroy()'
+ os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*')
+
+ for m in self.modeList:
+ if self.modeList[m] != None:
+ self.modeList[m].onDestroy()
+
+ csnd = new_csound_client()
+ csnd.connect(False)
+ csnd.destroy()
+
+ gtk.main_quit()
+
+ def ensure_dir(self, dir, perms=0777, rw=os.R_OK|os.W_OK):
+ if not os.path.isdir( dir ):
+ try:
+ os.makedirs(dir, perms)
+ except OSError, e:
+ print 'ERROR: failed to make dir %s: %i (%s)\n' % (dir, e.errno, e.strerror)
+ if not os.access(dir, rw):
+ print 'ERROR: directory %s is missing required r/w access\n' % dir
+
+ def ensure_dirs(self):
+ self.ensure_dir(Config.TUNE_DIR)
+ self.ensure_dir(Config.SYNTH_DIR)
+ self.ensure_dir(Config.SNDS_DIR)
+ self.ensure_dir(Config.SCRATCH_DIR)
+
+ if not os.path.isdir(Config.PREF_DIR):
+ os.mkdir(Config.PREF_DIR)
+ os.system('chmod 0777 ' + Config.PREF_DIR + ' &')
+ for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
+ shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.SNDS_DIR + '/' + snd)
+ os.system('chmod 0777 ' + Config.SNDS_DIR + '/' + snd + ' &')
+
+ def read_file(self,file_path):
+ self.metadata['tamtam_subactivity'] = 'mini'
+
+ def write_file(self,file_path):
+ f = open(file_path,'w')
+ f.close()
diff --git a/TamTamMini.activity/activity/activity-tamtam.svg b/TamTamMini.activity/activity/activity-tamtam.svg
new file mode 100644
index 0000000..563df7b
--- /dev/null
+++ b/TamTamMini.activity/activity/activity-tamtam.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#010101">
+ <!ENTITY fill_color "#FFFFFF">
+]><svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="activity-tamtam">
+
+ <path d=" M9.653,18.199h35.54c0.772,0,1.4,0.628,1.4,1.403v2.362c0,0.771-0.628,1.401-1.4,1.401H9.653c-0.775,0-1.403-0.628-1.403-1.401 v-2.361C8.25,18.826,8.877,18.199,9.653,18.199z" display="inline" fill="&stroke_color;" id="path8" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5"/>
+
+ <rect display="inline" fill="&fill_color;" height="22.128" id="rect10" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5" width="33.139" x="10.852" y="23.365"/>
+
+ <path d=" M9.653,45.493h35.54c0.772,0,1.4,0.627,1.4,1.401v2.362c0,0.775-0.628,1.405-1.4,1.405H9.653c-0.775,0-1.403-0.629-1.403-1.405 v-2.362C8.25,46.124,8.877,45.493,9.653,45.493z" display="inline" fill="&stroke_color;" id="path17" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5"/>
+
+ <path d=" M10.851,45.491l8.544-22.126l7.896,22.125l7.926-22.126" display="inline" fill="none" id="path19" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5"/>
+
+ <path d=" M43.987,45.491l-8.77-22.126" display="inline" fill="none" id="path21" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5"/>
+
+ <line display="inline" fill="none" id="line27" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5" x1="33.69" x2="48.336" y1="13.149" y2="5.948"/>
+
+ <line display="inline" fill="none" id="line29" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5" x1="6.042" x2="20.658" y1="2.213" y2="9.48"/>
+
+ <path d=" M25.721,9.802c0.55,1.451-0.171,3.066-1.608,3.612c-1.437,0.545-3.049-0.188-3.599-1.639c-0.547-1.45,0.174-3.067,1.609-3.613 C23.561,7.62,25.172,8.352,25.721,9.802z" display="inline" fill="&fill_color;" id="path23" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/>
+
+ <path d=" M33.338,16.442c-1.04,1.125-2.798,1.189-3.928,0.144c-1.128-1.044-1.197-2.801-0.155-3.927c1.041-1.125,2.8-1.19,3.926-0.146 C34.31,13.558,34.381,15.316,33.338,16.442z" display="inline" fill="&fill_color;" id="path25" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/>
+</g></svg>
+
diff --git a/TamTamMini.activity/activity/activity.info b/TamTamMini.activity/activity/activity.info
new file mode 100644
index 0000000..14e41d2
--- /dev/null
+++ b/TamTamMini.activity/activity/activity.info
@@ -0,0 +1,6 @@
+[Activity]
+name = TamTamMini
+service_name = org.laptop.TamTamMini
+icon = activity-tamtam
+class = TamTamMini.TamTamMini
+activity_version = 40 \ No newline at end of file
diff --git a/TamTamMini.activity/common b/TamTamMini.activity/common
new file mode 120000
index 0000000..60d3b0a
--- /dev/null
+++ b/TamTamMini.activity/common
@@ -0,0 +1 @@
+../common \ No newline at end of file
diff --git a/TamTamMini.activity/icons/keyrec.svg b/TamTamMini.activity/icons/keyrec.svg
new file mode 100644
index 0000000..90d9fe8
--- /dev/null
+++ b/TamTamMini.activity/icons/keyrec.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="28.1" cy="27.84" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="28.098" cy="27.932" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M24.121,21.796h2.719v5.365h0.055c0.27-0.468,0.558-0.899,0.828-1.333l2.755-4.032h3.367l-4.017,5.167
+ l4.23,6.968h-3.205l-2.971-5.239l-1.045,1.278v3.961H24.12L24.121,21.796L24.121,21.796z"/>
+</g>
+<circle fill="none" stroke="#4C4D4F" cx="28.431" cy="27.692" r="17.085"/>
+</svg>
diff --git a/TamTamMini.activity/icons/loop.svg b/TamTamMini.activity/icons/loop.svg
new file mode 100644
index 0000000..c085ee6
--- /dev/null
+++ b/TamTamMini.activity/icons/loop.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="28.1" cy="27.84" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="28.098" cy="27.932" r="21.572"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="0.75" cx="28.431" cy="27.692" r="18.793"/>
+<line fill="none" stroke="#FFFFFF" stroke-width="2" x1="25.001" y1="22.501" x2="30.501" y2="19.001"/>
+<path fill="none" stroke="#FFFFFF" stroke-width="2" d="M28.626,22.001c8.491,0,15.325-0.156,15.375,6.25
+ c0.043,5.498-6.884,6.25-15.375,6.25c-8.492,0-15.179-0.318-15.375-6.25C13.221,22.015,20.134,22.001,28.626,22.001z"/>
+<line fill="none" stroke="#FFFFFF" stroke-width="2" x1="25.751" y1="22.751" x2="30.501" y2="25.001"/>
+</svg>
diff --git a/TamTamMini.activity/icons/micrec1.svg b/TamTamMini.activity/icons/micrec1.svg
new file mode 100644
index 0000000..38f1b2b
--- /dev/null
+++ b/TamTamMini.activity/icons/micrec1.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M26.582,24.229h-0.035l-2.233,1.062l-0.45-2.052l3.098-1.439h2.269v11.704h-2.647V24.229z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/micrec2.svg b/TamTamMini.activity/icons/micrec2.svg
new file mode 100644
index 0000000..505347e
--- /dev/null
+++ b/TamTamMini.activity/icons/micrec2.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M23.09,33.501v-1.656l1.512-1.369c2.557-2.286,3.8-3.602,3.835-4.969c0-0.954-0.576-1.711-1.926-1.711
+ c-1.008,0-1.892,0.504-2.503,0.973l-0.774-1.963c0.882-0.666,2.25-1.206,3.835-1.206c2.647,0,4.105,1.548,4.105,3.673
+ c0,1.963-1.423,3.529-3.115,5.042l-1.08,0.899v0.035h4.411v2.252H23.09z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/micrec3.svg b/TamTamMini.activity/icons/micrec3.svg
new file mode 100644
index 0000000..d203fdf
--- /dev/null
+++ b/TamTamMini.activity/icons/micrec3.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M23.575,30.818c0.486,0.252,1.604,0.72,2.72,0.72c1.423,0,2.143-0.684,2.143-1.565
+ c0-1.152-1.152-1.674-2.358-1.674h-1.116v-1.963h1.062c0.918-0.02,2.088-0.36,2.088-1.352c0-0.702-0.576-1.224-1.728-1.224
+ c-0.955,0-1.962,0.414-2.449,0.702l-0.558-1.981c0.701-0.45,2.105-0.882,3.618-0.882c2.502,0,3.89,1.313,3.89,2.917
+ c0,1.242-0.702,2.215-2.144,2.719v0.036c1.404,0.252,2.539,1.314,2.539,2.845c0,2.07-1.818,3.583-4.79,3.583
+ c-1.512,0-2.791-0.396-3.475-0.828L23.575,30.818z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/micrec4.svg b/TamTamMini.activity/icons/micrec4.svg
new file mode 100644
index 0000000..1e63c67
--- /dev/null
+++ b/TamTamMini.activity/icons/micrec4.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M27.934,33.501V30.71h-5.187v-1.782l4.43-7.13h3.349v6.859h1.404v2.054h-1.404v2.791L27.934,33.501
+ L27.934,33.501z M27.934,28.657v-2.593c0-0.702,0.036-1.422,0.09-2.178h-0.072c-0.378,0.756-0.684,1.439-1.081,2.178l-1.565,2.557
+ v0.036H27.934z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/micrec5.svg b/TamTamMini.activity/icons/micrec5.svg
new file mode 100644
index 0000000..b5c7b21
--- /dev/null
+++ b/TamTamMini.activity/icons/micrec5.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M31.522,23.832H26.48l-0.279,2c0.279-0.039,0.521-0.039,0.841-0.039c1.239,0,2.501,0.279,3.421,0.939
+ c0.979,0.66,1.58,1.74,1.58,3.261c0,2.42-2.08,4.562-5.581,4.562c-1.58,0-2.9-0.359-3.621-0.74l0.54-2.281
+ c0.58,0.281,1.761,0.642,2.94,0.642c1.26,0,2.602-0.601,2.602-1.98c0-1.34-1.062-2.16-3.661-2.16c-0.72,0-1.222,0.04-1.761,0.12
+ l0.859-6.822h7.162V23.832z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/micrec6.svg b/TamTamMini.activity/icons/micrec6.svg
new file mode 100644
index 0000000..6b0ccc0
--- /dev/null
+++ b/TamTamMini.activity/icons/micrec6.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M30.809,23.825c-0.34,0-0.7,0-1.18,0.04c-2.701,0.221-3.901,1.601-4.241,3.121h0.061
+ c0.641-0.66,1.54-1.04,2.761-1.04c2.181,0,4.021,1.54,4.021,4.241c0,2.58-1.98,4.7-4.801,4.7c-3.461,0-5.161-2.58-5.161-5.682
+ c0-2.44,0.899-4.48,2.3-5.78c1.301-1.182,2.98-1.821,5.021-1.92c0.56-0.04,0.92-0.04,1.22-0.021V23.825z M27.408,32.647
+ c1.062,0,1.74-0.979,1.74-2.3c0-1.201-0.64-2.241-1.939-2.241c-0.82,0-1.5,0.5-1.801,1.16c-0.08,0.16-0.12,0.4-0.12,0.761
+ c0.061,1.38,0.721,2.62,2.102,2.62H27.408z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/minusrec.svg b/TamTamMini.activity/icons/minusrec.svg
new file mode 100644
index 0000000..fb6463c
--- /dev/null
+++ b/TamTamMini.activity/icons/minusrec.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="28.1" cy="27.84" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="28.098" cy="27.932" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M19.121,21.796h2.721v5.363h0.055c0.271-0.468,0.558-0.897,0.828-1.333l2.755-4.03h3.367l-4.019,5.167
+ l4.23,6.968h-3.205l-2.971-5.239l-1.045,1.278v3.961h-2.72L19.121,21.796L19.121,21.796z"/>
+</g>
+<circle fill="none" cx="28.431" cy="27.692" r="17.085"/>
+<text transform="matrix(1 0 0 1 30.917 28.667)" fill="#FFFFFF" font-family="'MyriadPro-Bold'" font-size="16">-</text>
+<circle fill="none" stroke="#4C4D4F" cx="28.431" cy="27.692" r="17.085"/>
+</svg>
diff --git a/TamTamMini.activity/icons/overrec.svg b/TamTamMini.activity/icons/overrec.svg
new file mode 100644
index 0000000..bf11488
--- /dev/null
+++ b/TamTamMini.activity/icons/overrec.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="28.1" cy="27.84" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="28.098" cy="27.932" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M19.121,21.796h2.72v5.364h0.055c0.27-0.468,0.558-0.898,0.828-1.333l2.755-4.031h3.367l-4.018,5.167
+ l4.23,6.968h-3.205l-2.971-5.239l-1.045,1.278v3.961h-2.719L19.121,21.796L19.121,21.796z"/>
+</g>
+<circle fill="none" cx="28.431" cy="27.692" r="17.085"/>
+<text transform="matrix(1 0 0 1 29.667 28.667)" fill="#FFFFFF" font-family="'MyriadPro-Bold'" font-size="16">+</text>
+<circle fill="none" stroke="#4C4D4F" cx="28.431" cy="27.692" r="17.085"/>
+</svg>
diff --git a/TamTamMini.activity/icons/rec1.svg b/TamTamMini.activity/icons/rec1.svg
new file mode 100644
index 0000000..4a88eec
--- /dev/null
+++ b/TamTamMini.activity/icons/rec1.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M26.582,24.229h-0.034l-2.233,1.062l-0.45-2.052l3.099-1.438h2.269v11.703h-2.649V24.229z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/rec2.svg b/TamTamMini.activity/icons/rec2.svg
new file mode 100644
index 0000000..108ea7e
--- /dev/null
+++ b/TamTamMini.activity/icons/rec2.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M23.09,33.501v-1.656l1.512-1.369c2.557-2.286,3.8-3.603,3.835-4.969c0-0.954-0.576-1.711-1.926-1.711
+ c-1.008,0-1.893,0.504-2.503,0.973l-0.774-1.963c0.882-0.666,2.25-1.206,3.835-1.206c2.647,0,4.105,1.548,4.105,3.673
+ c0,1.963-1.423,3.529-3.115,5.042l-1.08,0.899v0.034h4.411v2.253H23.09z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/rec3.svg b/TamTamMini.activity/icons/rec3.svg
new file mode 100644
index 0000000..2c64c70
--- /dev/null
+++ b/TamTamMini.activity/icons/rec3.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M23.575,30.818c0.486,0.252,1.604,0.72,2.721,0.72c1.423,0,2.143-0.684,2.143-1.564
+ c0-1.152-1.152-1.674-2.358-1.674h-1.117v-1.963h1.062c0.918-0.021,2.088-0.36,2.088-1.353c0-0.702-0.576-1.224-1.728-1.224
+ c-0.955,0-1.962,0.414-2.449,0.702l-0.558-1.981c0.7-0.45,2.104-0.882,3.617-0.882c2.502,0,3.891,1.312,3.891,2.917
+ c0,1.242-0.702,2.215-2.145,2.719v0.036c1.404,0.252,2.539,1.314,2.539,2.845c0,2.07-1.817,3.583-4.79,3.583
+ c-1.512,0-2.791-0.396-3.475-0.828L23.575,30.818z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/rec4.svg b/TamTamMini.activity/icons/rec4.svg
new file mode 100644
index 0000000..14b2d0a
--- /dev/null
+++ b/TamTamMini.activity/icons/rec4.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g enable-background="new ">
+ <path fill="#FFFFFF" d="M27.934,33.501V30.71h-5.188v-1.782l4.431-7.13h3.349v6.858h1.404v2.055h-1.404v2.791L27.934,33.501
+ L27.934,33.501z M27.934,28.657v-2.593c0-0.702,0.036-1.422,0.09-2.178h-0.072c-0.378,0.756-0.684,1.438-1.081,2.178l-1.564,2.557
+ v0.036H27.934z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/rec5.svg b/TamTamMini.activity/icons/rec5.svg
new file mode 100644
index 0000000..b5c7b21
--- /dev/null
+++ b/TamTamMini.activity/icons/rec5.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M31.522,23.832H26.48l-0.279,2c0.279-0.039,0.521-0.039,0.841-0.039c1.239,0,2.501,0.279,3.421,0.939
+ c0.979,0.66,1.58,1.74,1.58,3.261c0,2.42-2.08,4.562-5.581,4.562c-1.58,0-2.9-0.359-3.621-0.74l0.54-2.281
+ c0.58,0.281,1.761,0.642,2.94,0.642c1.26,0,2.602-0.601,2.602-1.98c0-1.34-1.062-2.16-3.661-2.16c-0.72,0-1.222,0.04-1.761,0.12
+ l0.859-6.822h7.162V23.832z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/icons/rec6.svg b/TamTamMini.activity/icons/rec6.svg
new file mode 100644
index 0000000..6b0ccc0
--- /dev/null
+++ b/TamTamMini.activity/icons/rec6.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<circle fill="#808284" cx="27.501" cy="27.408" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.499" cy="27.5" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M30.809,23.825c-0.34,0-0.7,0-1.18,0.04c-2.701,0.221-3.901,1.601-4.241,3.121h0.061
+ c0.641-0.66,1.54-1.04,2.761-1.04c2.181,0,4.021,1.54,4.021,4.241c0,2.58-1.98,4.7-4.801,4.7c-3.461,0-5.161-2.58-5.161-5.682
+ c0-2.44,0.899-4.48,2.3-5.78c1.301-1.182,2.98-1.821,5.021-1.92c0.56-0.04,0.92-0.04,1.22-0.021V23.825z M27.408,32.647
+ c1.062,0,1.74-0.979,1.74-2.3c0-1.201-0.64-2.241-1.939-2.241c-0.82,0-1.5,0.5-1.801,1.16c-0.08,0.16-0.12,0.4-0.12,0.761
+ c0.061,1.38,0.721,2.62,2.102,2.62H27.408z"/>
+</g>
+</svg>
diff --git a/TamTamMini.activity/setup.py b/TamTamMini.activity/setup.py
new file mode 100644
index 0000000..5b21f11
--- /dev/null
+++ b/TamTamMini.activity/setup.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+
+# Copyright (C) 2006, Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+from sugar.activity import bundlebuilder
+
+bundlebuilder.start('TamTam')