Durations issue
Posted: Fri Dec 22, 2017 3:45 pm
Hello,
I am working on a patch that does the following:
1) given a set of ratios and a fundamental calculates a scale - this part works fine
2) given an arbitrary duration of 1000ms for the fundamental, calculates the relative duration of each of the other notes in the scale - this part also works fine
3) adds a series of markers that align with each pitch by borrowing the info used to calculate the onsets - this parts works fine too (almost there!)
4) quantizes the result so that each note is enclosed in a measure with its own individual time signature (representing the duration) - this would create a reference for the composition. This is where I'm having issues, I cannot get the durations of the bach.roll to match the list of durations I'm inputting. I suspect this is either a list format issue (I'm using the format ((dur1)(dur2(dur3)(etc)) for both the durations and the onsets, which is consistent with how the midicents are displayed) or simply a timing/order-of-events problem.
I understand that once all this is solved I'll need to add a bach.quantize and bach.score. Just to clarify the use of markers, this is to allow me to tell bach.quantize where I want each measure to begin. If there is a simpler way to separate each duration into a measure with time signature then I'd love to hear more about it!
Any advice is much appreciated. Thank you for this truly wonderful tool!
Best,
Federico
<pre><code>
----------begin_max5_patcher----------
5638.3oc6cs0aiiqj94t+UXXrOLmE43gr388gE69xt+HFbPfhsRhlwVxvVom
tmCN+2WdQVVxQNlT2rRuJM5XGRIpupXwhEIqpz+7qeY4SYeO93xE+GK9sEe4
K+yu9kuXKxTvWJ96urbWz2WuM5n8xVtNa2t3z7kO3pKO964txODGkGuXWzg+
H9vwSUeL+Gais0epjz21kjtMN21Z3yEl8V9oRQEktOJe8qIou73g304NLpDq
POrfQolOTbyuAzJzh+Qwsjrw9vxd52+6XLaoov+0W+p4WO3I88za44YocB+3
qieNcESo+AWRDP4uKIBWSk+i8wtaZ4SQourrYZjzFZLM9O02865ByW7zhsKd
pSzN45zNQSjDIRAOrfvPq35ejhGVPQVF.bSFvCFf7gLCTaXF6hOdL5k32wMP
KvDA6WgEfz8AvPKHXfsfZ9EF4pECbv9IC69TTb4nhOotxAg65H3hOYt5oEsC
k49jUbeLt6SNwUtn35DR2mxh5UEsCFc5K3hZvfr3KTbwWXmtFwoRjxSvkehL
O8EpqpSLlsIowqydK0xcj9Ii.cY7gzIXPrenopOR.oYABDtGGcruWzs4GsKv
VsBb5sGZzHkK3Kq9bhOTPtEz6WV9bx13uookDsptyn5KKi1uuRweoxsXXR+d
lsgDOTVTRpqHRYQGh+VxkMqtcOno1bMo91AGK66xSPzzLYahOj9Vh8dbEp6t
95oF7DCRZYGXP43MV4Bprh5ecO6KayV+GwapLMhlmsONMIc+g3i5IthxK.WY
0aheN5ss4O9bVZ9wj+xhOrlm2T8OGsN9p2bZzNGw8eeHIZ6Ixa4KGR1jkZ.Q
MVso3SOteSOzzRarpDi8JRi12vMq6j0rkqT4QMQ91wmhNX5IdxIiBmpLOKaa
8pJuuswOmWT89jzzK3h4Y6udkGRd40O3deJSW4tOpss0b7w2Rc09ndzX9iGi
9Vctcdz1sECOq27eOJMYm19i7DWW.fJqLNMRSnudb8grsaqQutZ9VC0rQKDu
N9OS1j+p8AUUXPe4I6OIDsrrWdSxKwGyqWVdzKGqWx6zYnK5smJFj9Xd7t8a
0TQ8KnlIZUGQVUQVsxuPglSmQ4vsFgw0TeccyytlZLLwN9jnrRzNs2jpCRuP
WEnphgSlWZw1ohsJvKzJzRdPMk5WZ1yYid5N2AtA2woYWgOybppe+J53uzrm
2wCYiDu52yRRCjUAWkUg8SPhQrbI0JlW7pqxifQhGomnQqQdyhnMabVLzaxV
2fgIbhSRhyfIlmBWWiggkiDCaaVzFmE9iCeBTVAKL0xn3dNH7CG.hw8Iup9R
RpyrNFmu.OVCAAlvsDamVbQWknP8IWp1J0GdgFvYgl5JqZuEBMzQZ7kcUawG
VnWQ6BBIPFF6pLLpexNN6zkdJ6jX1ZI2Ldl+a9yqpPuOYeVBNPVCp0yr4LBf
g+.KjBXT0c19omhV+5pDi.1+kFzK7fKVakVjUnv0aQ7hAiA6NDhQNKHHWvhu
9Z1tpUX1+e0wyhl33mWOmYGTthg7VZvTeycEGyd6v5S3nvXlGVTmZzqLIOIs
b4s+1Yqqu3BeMYyl3zKEf2jbzrZH25x7RvIXLyzPA6Al0SS3Gl2krYu1fz7i
0z3femVlQh17o+PKiLU5Ov9JBwlLPtAt2UDgjSG1rzW9LLcFpFBjwetDMnSG
ICeGA5sBwQ.yHeEMlNJMFYDu3e70p6f8RytXt4Q2N19XTd9gD8JWbFBTcK4C
ZmEeYa1SQaK12vRaX9nsY77dQ90y3MvSFIO6kW1FOTm+AlXMSSxU9dtnUWcP
si+.c93ONnYNZaSezsYuk8Y8zgDd70r+r3XgV7ugWNPmJVAmQgj1OTs7Tg3x
977QWuMN5vfQwJ7Jh9GPZNleb4gE+9sfvSZmI6wiBzthm+7Pz9E3g6v.gU5t
cBxbZfB6VOH3sk16cmD35TcyKsyGlAbclASKMTxLPryqct5R5t9x49.+InQ1
EsuEUVmscqlXpu93Vx7HgJIUk4IOst3Nw8Zlqw5at162RgVxxfP8TkZC9Hxq
rGBAwxtbuCpw53etzMQQJK6gXXObQmzMQkex0MQXxRlAuv8zFNcSxepTMUk2
IQ7gR0j3mGMS0F5U3YTCnlIpnOsXbya61OXFLhvtS8T+g4GsciTba0IgmdNN
JF67XRfW2f3N49nD0DjPccjLUY+X2HQwmq4VELvtFOfzooUIzOWjc0YBTN8Z
sm1w8pa.OTZrHbzYCGv3l8wEOIYfz2c2a9N78aNEWOx.nEmTWa83U.0qt56w
0Qai+6+mad6fcWBONblRSWADssOl4qNwCZ696fgeF85WlphjwrW+N60uyd8a
2830mFOOdkHWARl.SzF0YMpgPCvg6tkmuRFK+tCqMFcrb6NB2XGfyko5rS2A
ioa.UyJwA2m7b7IryYpeu8hAxnnvnIKg+ULeA4WoKvDy2D+pbAdAVX9tR+cl
oFr9KDSHZQzeQnKwD1V5upze0EmW5uPLUS0UCKnlpo5pgELSkvBtoRXgXgzT
ErPomEcAtVuSsf5BFIwaA6r3MCKcN4c661Pio.9+tdZgwUM.1oujI6n3MQ9o
0eIqLEBVDhOS9gScvFk.OYbC9FmHCTD4D2L1a3nPXAChmLR80gRHxIiuFAg.
4ogSvP70KznSGG2g7oyUiHd5gqzoiCcwT9JLOcbnKeG+wQytzUG1Cv3+ZWxl
D8ZS+gma+EIzCOEiHZa2oBNRX8aalwoe.F7PQh93FaB1CW2EvT85IWE.OH7S
tRup3Fc0IRK2FPUqbmfqkWWx9V7gnstMDcnxpKDkiEHnOXYGFVfPKDHjeTBd
QMEOlN94ioCnkDRmNBKon+2Z6wf9qbDdz1tk1Rz7VZOuk1yao87VZ+94npqX
642R2DYpsdT7MnY5BDX2WBD2DL4tCs9cyXc21v5JdayvuSUm2fFWNK589dyT
dWqeF1sdrXUrhPo29Auy6YM+m2c22wonno3t6+gGt1yi2gq43QfvsqndNn64
sYQ427j0n3+e9wgPFq7bSkoQ.oaBD2o9YLa9ywohLxZOcoNSJaRcjH2bVlsQ
4iqtS.a0Zx5ptSBYL4S6VCO6cpjnOEq.pK+Af5rbUuNWikoXsr+BV15rstEs
9aVC6q7K7EPeehwt7MI4GzZ7OA+z2LKV3BJz0C494xT1wkqYzT92xzquvrdw
BC6W9KlIV9aKeWh1ngEjZue2hz08VO4VbuPgtZ9.gWSbH54mqbNTrZOw05k.
dBQ+O0AScAC4kzxw8QqSLSKVxVMG43ksf6RuTxZaV1958G06E93S1zkjkboi
JErBy4bFuWRXIM7+O1oZpMo3e9Z113GMBfOtIJO5QT4OEOGmrYQW+wsY4IoO
mcp.7oJr.W+YjdogI4usIdQb52h2pWzuSh4z0YIfGrKnasc0o0p8Oh+gYO8q
UlSnV+kG+dw+LCYdzZlCmVVn69PddcXjDgvbohW6Yc7Df88YUAlw014lZ08C
yNfT9W+s5UtIaWTRZ+SfBfqH.U1vCqCjoayFLcjw61mcHZach40XyNrXEDdK
O68TKbo7hQfZQyBCSFQkF4jyhJCrnBoQQkjz7sIGyaVRowJ+IUmRwN5tz+NY
oRREHZy8Qd1FJlfx.YPcjzlGyadDWuq7JU+S5n9.6LQideH6ZCFu5.w4AgSp
Ag7qOH7CF.NO3aJL3SbYe21ebHY8wl62rq19lcaiArkWBayo49AZ7ar1d.7R
DfIrKFycKvqd23k8Wajx6qYLGnvwHLFPiw.kNZPGF0nNHaNGqA1ZZVZ7zPPF
iaF33IOvad4VlHIbhC7lM9GSl7.uYicwzIOva1BOLaxC7lsrAym7.WzLvESd
fKaF3xIOvUMCb0TG3PyybBS9YNglm4Dl7ybBMOyIL4m4DZdlSXxOyIz7Lmvj
elSn4YNgI+LmPyybBS9YNglm4Dl7ybBMOyIL4m4DZdlSXxOyIo4YNIS5YNOe
UFWhMJcyw2ebqY4wU+rxs7Z1gM09R0E261dkSedUxrgyqajdfjw9ARG6GHaL
efmq8kCYus+h8Lr7UdZsBS1jr90nzz3sGKD4NW4u3kXOmwHTmnuPhnJk22oa
C6nJrRZhrDeGgI.LCHf0MKNyBp+YM2g3Rudnzs.+MSDdNGI8+rGI8EdeLi8o
IR58NRdmPuZF3e9hJ8wO5i6ALi66.S+hW8RBrIuSPbotNEdEmpUyPZpjBeU2
jnVEmb5YgXzegMQwe9xgCeFSUF9m2I3Smr3fuIdBxDJyS3qVoFD7uaX1.EvG
9L4S2aFKBdN0SzxjsvufLQ85ea3d0xHVAlXTmT9J.t8gmdulpg+kgjrAFYES
oTBdIYSZMYC87Ksgmp7JXuc4j.pe4jfSYWbzsSzx0R+jM40703HsJALeYjc3
eTc3QDcXe2TcLOdWsruQyg3g8ZiVuNYiM.pOt+P7ywGhSKhwARkWq.WDDH2L
.PtRve7QA9wxu8WYY6LkYyrie8pABx0CBj5A.x+6YzzXze3SjezXTe7AQ7wM
kDU7xz9BSAtWH4HaQTZYijmkp6jOmHJnc3E7vshBDqPv4Ldck93pB5zSOn4v
BY1W+mCKj4vBYNrPl8H84vBY1yzmCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrP
lCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrP9fcUx
uKlw.mK8HoLofKg.1XONPvH5UhFjfhDkxlx2HegR3TGp4bZHwvRehZLWf4R+
40.PQLGpEDlfcePsog3Ld.RHXyT9FTKQXJkeePs.PP.nFX.BWIJmD2ETSvfR
F.pI.mVHWqzhHT18A0DlxFlW9hZgR430LDPAj59fZFmhB.0bjB.GpwXAGgtO
nVqyUF.pOquVKfCn6j9ZhV5jGhDBfkE7ZPnoX5cA0TrPRC.0lS1o.0DLAytO
x0TBhQQx.jqIjhQiDpVrlbePMEIjAfZJivUNTqmjDKuSnlgMCp7WBQOHfTfZ
BfX2mQiTNF3gfZoRUnCgxDj60nQAlgBQtl.PgDBCoGPbezWSkXQHiFAAGWHg
vnZR.eePcYjdGr9ZlljuSRHZqIffFMdVeMGPj6j9Zs4xTdf5qKtSNSqD49n4
SaVg.0N80BLPtS5qYDDHjz1nuVPTvcReMivHpPP8Y80BtdY52oQi14kosQes
TOx7NouVOCGmD.pqnu1zOcmzWqmgSvB.0UzWKUZUl2IID8jEAMZDa01YtSEH
X2K805EBFxnwJ5qUbsgH2IMebNNjQiF80R6cxQXE6dou1NWQazWq4zZUe2I8
0BNgEn9ZVApEXw8ZznDSEsResUx5douVxYpVouli0b69Sec8rYjGYxn9IPdu
7kbWu+xEmhnqziAQb6aTbWnTZ1gx2+9sy23XlM8hZ2VEftv8J.ccuq79IJBc
YjxnxEivLyagM8Zarur1swLOVQsuY1DPM92cIVbMd72br3NGKtywh6br3NGK
tygA3br3NGNfywh6br3NGKtywh6br3NGKtywh6br3NGKtywh6br3NGKtywh6
br3NGKtywh6br3NGKtywh6br3NGKtywh6br39SVr3FRP1habjhugzHU5BNPn
KsBgi.aPMQ5RqPIDr08uocpUDF2aQ55YacqnUP3b2NdmZEyOlVQzoVQyYrsh
rKsBGW3.gpN0JT.g4nhsOr8MCGCtloSRub4IzzIwWAhRcMSmjeEDTAZ5j.rf
J.AgWrIPsuYzc3tloShvBgnnY5jLrdV2BhpSBwRLk5ZlNIEqGa6PCzIoXIUo
HFQOnSRwRtFL1loSRw5dbhqY5jTrTgJPSmjhUHdQyzIoXEPKHpNIEqzZPcMS
mjhULFWJkEKcn8MC2zJxBC4aeyHTNzP5jTrVFFbMSWjh0y4JJPCzolAHEMCo
SMCE6Hp2QSeJSyIkloM9oChNjlS.NVzSnNzvluCo4DPu7v9B0AFdwcHMm.Zy
O5ITGZXX1gzbRov38Hb0ZcZNwDoazq9JndPCqmNjlSzZ4gdB0tv2JjvUq0o4
DB03v98CpMw2W.ntCo4Ds0F8kDh40sqcUECeZNgv0Z36ITqsTJDT2gzbhdHA
suPslcEBp6PZNgnGQzWnVVrX5gOMmTNMbOfZEEEjDR6SyITf6lPq6nVf3AMZ
rCo4jxsCqGPMVEznwNjlSnTlpuPMABZzXGRyIFCx6KTqW4gcuEF9zbRo4k8A
pK1lmgOMmPMYSpdB0ZEXgf5NjlSzFI1aiF4HZHntCo4jRS46CTykAIgz9zbh
1D.mgZ8.p0JQBB0sOMmvzFhzanVEznwNjlSJW1TOfZSpFH.T2gzbBSupo9B0
Jf1R80gllSJWrWefZoLT80sLMmnISbOgZIhAsTecno4jxkn1CnFi4gputko4
jxkn1GnVhZm95fSyIbBu37y5NpAJMT80sLMmTtv5d.0Djrc5qCNMmTtv59.0
Bnc5qCNMmTtv56RZNYW7wiQlv84h7bx5swQGJ85BuR0IPno5DfHJyCEJNXS0
IRwCKDxVlpSD0R0I1qXYkzxwINhEJlxqyWNl81g0mZeapmvFEGmAwl3i4Iot
vMpxUgv0tpWS1rINsZ1rXSxwnm1FawIpw9HeQDg5CfLdWH4CvytjM6yRRyKX
KZQ2ULSOfIKmrPHDq.SuhnnnyOsdiLXLOHiKn0aRFbDZEWiay9sqsAvPRETl
8uF.xff8s2.OJRGBe3pimvJ1FubdweBnalXyCRLN07g6OTBzfHl5H.rOD.D.
APoqHRjRaDgVuukXb41ox+xlCeTR5.RTvsHJX7DS.OjRjrQCORpO7mKjsGzg
07AXXjvMcqPKEJKlFVXbFOk8qFKeTRUQwCgTHxGcmWP4CISFPdOUONDkUJ6b
RlSBg6Lqg.Ztsg0qZrHl9NLF+H0y7pTJAunnAnOvKRVNdi67wn..MZylBDew
yHoFfM.pA.Jek7jI3JTod.r1b72W9.HDJ7QHjOdRgW7n5GtLlBVKrkVqRqwa
kCioorgfL.sE1UEJXuWNYHnEuTLvnilHh8QcKqBYi2TWLerOfQFO73ihS6R.
wiG+A7AOAXEufvJWsoPYmyVff5EMDiqo9xaGoIs8wJtQCMTgG8zAtbMVQuJw
1qhsKTqhUc1hFfNZpubV73wYuEbnxQUt6VpfoinfmOqlQF3FZoWioaJ1SIiW
Sflfre256c72kjd6ws1xq96QbiOUCgYYvYt4cw3W+VxCILphhIqDEIPbFGaQ
u4rIptVzykO.TkpW1uhdjK6irrb7VHmjzGJK5Y7.9fm.l1DqmWrTSkDUpAin
MLxrWGDY0xGhwVjZmBxUnJHzU.gsaalkp.1JSxG2DJh.mTtcMmKennpaMwmD
GndPI5LUQHmoJDekvTAoZ4CAUA9NhHfi0pVeRgjl8EofV+nR+cSjndt7gfp7
1n.bHRfU5SpPUfjZK25.xCJU40tFNdq1zNQB+F3Q01Yabmgbz98EunHrfw.k
k6h9c26BCwC1+LI08mD6edH9aImtd6IfuL5v5WSxiWm+1A2Yn+cIeo6Vy1De
H8sD609UyS9e80+O.aQB6Q.
-----------end_max5_patcher-----------
</code></pre>
I am working on a patch that does the following:
1) given a set of ratios and a fundamental calculates a scale - this part works fine
2) given an arbitrary duration of 1000ms for the fundamental, calculates the relative duration of each of the other notes in the scale - this part also works fine
3) adds a series of markers that align with each pitch by borrowing the info used to calculate the onsets - this parts works fine too (almost there!)
4) quantizes the result so that each note is enclosed in a measure with its own individual time signature (representing the duration) - this would create a reference for the composition. This is where I'm having issues, I cannot get the durations of the bach.roll to match the list of durations I'm inputting. I suspect this is either a list format issue (I'm using the format ((dur1)(dur2(dur3)(etc)) for both the durations and the onsets, which is consistent with how the midicents are displayed) or simply a timing/order-of-events problem.
I understand that once all this is solved I'll need to add a bach.quantize and bach.score. Just to clarify the use of markers, this is to allow me to tell bach.quantize where I want each measure to begin. If there is a simpler way to separate each duration into a measure with time signature then I'd love to hear more about it!
Any advice is much appreciated. Thank you for this truly wonderful tool!
Best,
Federico
<pre><code>
----------begin_max5_patcher----------
5638.3oc6cs0aiiqj94t+UXXrOLmE43gr388gE69xt+HFbPfhsRhlwVxvVom
tmCN+2WdQVVxQNlT2rRuJM5XGRIpupXwhEIqpz+7qeY4SYeO93xE+GK9sEe4
K+yu9kuXKxTvWJ96urbWz2WuM5n8xVtNa2t3z7kO3pKO964txODGkGuXWzg+
H9vwSUeL+Gais0epjz21kjtMN21Z3yEl8V9oRQEktOJe8qIou73g304NLpDq
POrfQolOTbyuAzJzh+Qwsjrw9vxd52+6XLaoov+0W+p4WO3I88za44YocB+3
qieNcESo+AWRDP4uKIBWSk+i8wtaZ4SQourrYZjzFZLM9O02865ByW7zhsKd
pSzN45zNQSjDIRAOrfvPq35ejhGVPQVF.bSFvCFf7gLCTaXF6hOdL5k32wMP
KvDA6WgEfz8AvPKHXfsfZ9EF4pECbv9IC69TTb4nhOotxAg65H3hOYt5oEsC
k49jUbeLt6SNwUtn35DR2mxh5UEsCFc5K3hZvfr3KTbwWXmtFwoRjxSvkehL
O8EpqpSLlsIowqydK0xcj9Ii.cY7gzIXPrenopOR.oYABDtGGcruWzs4GsKv
VsBb5sGZzHkK3Kq9bhOTPtEz6WV9bx13uookDsptyn5KKi1uuRweoxsXXR+d
lsgDOTVTRpqHRYQGh+VxkMqtcOno1bMo91AGK66xSPzzLYahOj9Vh8dbEp6t
95oF7DCRZYGXP43MV4Bprh5ecO6KayV+GwapLMhlmsONMIc+g3i5IthxK.WY
0aheN5ss4O9bVZ9wj+xhOrlm2T8OGsN9p2bZzNGw8eeHIZ6Ixa4KGR1jkZ.Q
MVso3SOteSOzzRarpDi8JRi12vMq6j0rkqT4QMQ91wmhNX5IdxIiBmpLOKaa
8pJuuswOmWT89jzzK3h4Y6udkGRd40O3deJSW4tOpss0b7w2Rc09ndzX9iGi
9Vctcdz1sECOq27eOJMYm19i7DWW.fJqLNMRSnudb8grsaqQutZ9VC0rQKDu
N9OS1j+p8AUUXPe4I6OIDsrrWdSxKwGyqWVdzKGqWx6zYnK5smJFj9Xd7t8a
0TQ8KnlIZUGQVUQVsxuPglSmQ4vsFgw0TeccyytlZLLwN9jnrRzNs2jpCRuP
WEnphgSlWZw1ohsJvKzJzRdPMk5WZ1yYid5N2AtA2woYWgOybppe+J53uzrm
2wCYiDu52yRRCjUAWkUg8SPhQrbI0JlW7pqxifQhGomnQqQdyhnMabVLzaxV
2fgIbhSRhyfIlmBWWiggkiDCaaVzFmE9iCeBTVAKL0xn3dNH7CG.hw8Iup9R
RpyrNFmu.OVCAAlvsDamVbQWknP8IWp1J0GdgFvYgl5JqZuEBMzQZ7kcUawG
VnWQ6BBIPFF6pLLpexNN6zkdJ6jX1ZI2Ldl+a9yqpPuOYeVBNPVCp0yr4LBf
g+.KjBXT0c19omhV+5pDi.1+kFzK7fKVakVjUnv0aQ7hAiA6NDhQNKHHWvhu
9Z1tpUX1+e0wyhl33mWOmYGTthg7VZvTeycEGyd6v5S3nvXlGVTmZzqLIOIs
b4s+1Yqqu3BeMYyl3zKEf2jbzrZH25x7RvIXLyzPA6Al0SS3Gl2krYu1fz7i
0z3femVlQh17o+PKiLU5Ov9JBwlLPtAt2UDgjSG1rzW9LLcFpFBjwetDMnSG
ICeGA5sBwQ.yHeEMlNJMFYDu3e70p6f8RytXt4Q2N19XTd9gD8JWbFBTcK4C
ZmEeYa1SQaK12vRaX9nsY77dQ90y3MvSFIO6kW1FOTm+AlXMSSxU9dtnUWcP
si+.c93ONnYNZaSezsYuk8Y8zgDd70r+r3XgV7ugWNPmJVAmQgj1OTs7Tg3x
977QWuMN5vfQwJ7Jh9GPZNleb4gE+9sfvSZmI6wiBzthm+7Pz9E3g6v.gU5t
cBxbZfB6VOH3sk16cmD35TcyKsyGlAbclASKMTxLPryqct5R5t9x49.+InQ1
EsuEUVmscqlXpu93Vx7HgJIUk4IOst3Nw8Zlqw5at162RgVxxfP8TkZC9Hxq
rGBAwxtbuCpw53etzMQQJK6gXXObQmzMQkex0MQXxRlAuv8zFNcSxepTMUk2
IQ7gR0j3mGMS0F5U3YTCnlIpnOsXbya61OXFLhvtS8T+g4GsciTba0IgmdNN
JF67XRfW2f3N49nD0DjPccjLUY+X2HQwmq4VELvtFOfzooUIzOWjc0YBTN8Z
sm1w8pa.OTZrHbzYCGv3l8wEOIYfz2c2a9N78aNEWOx.nEmTWa83U.0qt56w
0Qai+6+mad6fcWBONblRSWADssOl4qNwCZ696fgeF85WlphjwrW+N60uyd8a
2830mFOOdkHWARl.SzF0YMpgPCvg6tkmuRFK+tCqMFcrb6NB2XGfyko5rS2A
ioa.UyJwA2m7b7IryYpeu8hAxnnvnIKg+ULeA4WoKvDy2D+pbAdAVX9tR+cl
oFr9KDSHZQzeQnKwD1V5upze0EmW5uPLUS0UCKnlpo5pgELSkvBtoRXgXgzT
ErPomEcAtVuSsf5BFIwaA6r3MCKcN4c661Pio.9+tdZgwUM.1oujI6n3MQ9o
0eIqLEBVDhOS9gScvFk.OYbC9FmHCTD4D2L1a3nPXAChmLR80gRHxIiuFAg.
4ogSvP70KznSGG2g7oyUiHd5gqzoiCcwT9JLOcbnKeG+wQytzUG1Cv3+ZWxl
D8ZS+gma+EIzCOEiHZa2oBNRX8aalwoe.F7PQh93FaB1CW2EvT85IWE.OH7S
tRup3Fc0IRK2FPUqbmfqkWWx9V7gnstMDcnxpKDkiEHnOXYGFVfPKDHjeTBd
QMEOlN94ioCnkDRmNBKon+2Z6wf9qbDdz1tk1Rz7VZOuk1yao87VZ+94npqX
642R2DYpsdT7MnY5BDX2WBD2DL4tCs9cyXc21v5JdayvuSUm2fFWNK589dyT
dWqeF1sdrXUrhPo29Auy6YM+m2c22wonno3t6+gGt1yi2gq43QfvsqndNn64
sYQ427j0n3+e9wgPFq7bSkoQ.oaBD2o9YLa9ywohLxZOcoNSJaRcjH2bVlsQ
4iqtS.a0Zx5ptSBYL4S6VCO6cpjnOEq.pK+Af5rbUuNWikoXsr+BV15rstEs
9aVC6q7K7EPeehwt7MI4GzZ7OA+z2LKV3BJz0C494xT1wkqYzT92xzquvrdw
BC6W9KlIV9aKeWh1ngEjZue2hz08VO4VbuPgtZ9.gWSbH54mqbNTrZOw05k.
dBQ+O0AScAC4kzxw8QqSLSKVxVMG43ksf6RuTxZaV1958G06E93S1zkjkboi
JErBy4bFuWRXIM7+O1oZpMo3e9Z113GMBfOtIJO5QT4OEOGmrYQW+wsY4IoO
mcp.7oJr.W+YjdogI4usIdQb52h2pWzuSh4z0YIfGrKnasc0o0p8Oh+gYO8q
UlSnV+kG+dw+LCYdzZlCmVVn69PddcXjDgvbohW6Yc7Df88YUAlw014lZ08C
yNfT9W+s5UtIaWTRZ+SfBfqH.U1vCqCjoayFLcjw61mcHZach40XyNrXEDdK
O68TKbo7hQfZQyBCSFQkF4jyhJCrnBoQQkjz7sIGyaVRowJ+IUmRwN5tz+NY
oRREHZy8Qd1FJlfx.YPcjzlGyadDWuq7JU+S5n9.6LQideH6ZCFu5.w4AgSp
Ag7qOH7CF.NO3aJL3SbYe21ebHY8wl62rq19lcaiArkWBayo49AZ7ar1d.7R
DfIrKFycKvqd23k8Wajx6qYLGnvwHLFPiw.kNZPGF0nNHaNGqA1ZZVZ7zPPF
iaF33IOvad4VlHIbhC7lM9GSl7.uYicwzIOva1BOLaxC7lsrAym7.WzLvESd
fKaF3xIOvUMCb0TG3PyybBS9YNglm4Dl7ybBMOyIL4m4DZdlSXxOyIz7Lmvj
elSn4YNgI+LmPyybBS9YNglm4Dl7ybBMOyIL4m4DZdlSXxOyIo4YNIS5YNOe
UFWhMJcyw2ebqY4wU+rxs7Z1gM09R0E261dkSedUxrgyqajdfjw9ARG6GHaL
efmq8kCYus+h8Lr7UdZsBS1jr90nzz3sGKD4NW4u3kXOmwHTmnuPhnJk22oa
C6nJrRZhrDeGgI.LCHf0MKNyBp+YM2g3Rudnzs.+MSDdNGI8+rGI8EdeLi8o
IR58NRdmPuZF3e9hJ8wO5i6ALi66.S+hW8RBrIuSPbotNEdEmpUyPZpjBeU2
jnVEmb5YgXzegMQwe9xgCeFSUF9m2I3Smr3fuIdBxDJyS3qVoFD7uaX1.EvG
9L4S2aFKBdN0SzxjsvufLQ85ea3d0xHVAlXTmT9J.t8gmdulpg+kgjrAFYES
oTBdIYSZMYC87Ksgmp7JXuc4j.pe4jfSYWbzsSzx0R+jM40703HsJALeYjc3
eTc3QDcXe2TcLOdWsruQyg3g8ZiVuNYiM.pOt+P7ywGhSKhwARkWq.WDDH2L
.PtRve7QA9wxu8WYY6LkYyrie8pABx0CBj5A.x+6YzzXze3SjezXTe7AQ7wM
kDU7xz9BSAtWH4HaQTZYijmkp6jOmHJnc3E7vshBDqPv4Ldck93pB5zSOn4v
BY1W+mCKj4vBYNrPl8H84vBY1yzmCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrP
lCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrPlCKj4vBYNrP9fcUx
uKlw.mK8HoLofKg.1XONPvH5UhFjfhDkxlx2HegR3TGp4bZHwvRehZLWf4R+
40.PQLGpEDlfcePsog3Ld.RHXyT9FTKQXJkeePs.PP.nFX.BWIJmD2ETSvfR
F.pI.mVHWqzhHT18A0DlxFlW9hZgR430LDPAj59fZFmhB.0bjB.GpwXAGgtO
nVqyUF.pOquVKfCn6j9ZhV5jGhDBfkE7ZPnoX5cA0TrPRC.0lS1o.0DLAytO
x0TBhQQx.jqIjhQiDpVrlbePMEIjAfZJivUNTqmjDKuSnlgMCp7WBQOHfTfZ
BfX2mQiTNF3gfZoRUnCgxDj60nQAlgBQtl.PgDBCoGPbezWSkXQHiFAAGWHg
vnZR.eePcYjdGr9ZlljuSRHZqIffFMdVeMGPj6j9Zs4xTdf5qKtSNSqD49n4
SaVg.0N80BLPtS5qYDDHjz1nuVPTvcReMivHpPP8Y80BtdY52oQi14kosQes
TOx7NouVOCGmD.pqnu1zOcmzWqmgSvB.0UzWKUZUl2IID8jEAMZDa01YtSEH
X2K805EBFxnwJ5qUbsgH2IMebNNjQiF80R6cxQXE6dou1NWQazWq4zZUe2I8
0BNgEn9ZVApEXw8ZznDSEsResUx5douVxYpVouli0b69Sec8rYjGYxn9IPdu
7kbWu+xEmhnqziAQb6aTbWnTZ1gx2+9sy23XlM8hZ2VEftv8J.ccuq79IJBc
YjxnxEivLyagM8Zarur1swLOVQsuY1DPM92cIVbMd72br3NGKtywh6br3NGK
tygA3br3NGNfywh6br3NGKtywh6br3NGKtywh6br3NGKtywh6br3NGKtywh6
br3NGKtywh6br3NGKtywh6br3NGKtywh6br39SVr3FRP1habjhugzHU5BNPn
KsBgi.aPMQ5RqPIDr08uocpUDF2aQ55YacqnUP3b2NdmZEyOlVQzoVQyYrsh
rKsBGW3.gpN0JT.g4nhsOr8MCGCtloSRub4IzzIwWAhRcMSmjeEDTAZ5j.rf
J.AgWrIPsuYzc3tloShvBgnnY5jLrdV2BhpSBwRLk5ZlNIEqGa6PCzIoXIUo
HFQOnSRwRtFL1loSRw5dbhqY5jTrTgJPSmjhUHdQyzIoXEPKHpNIEqzZPcMS
mjhULFWJkEKcn8MC2zJxBC4aeyHTNzP5jTrVFFbMSWjh0y4JJPCzolAHEMCo
SMCE6Hp2QSeJSyIkloM9oChNjlS.NVzSnNzvluCo4DPu7v9B0AFdwcHMm.Zy
O5ITGZXX1gzbRov38Hb0ZcZNwDoazq9JndPCqmNjlSzZ4gdB0tv2JjvUq0o4
DB03v98CpMw2W.ntCo4Ds0F8kDh40sqcUECeZNgv0Z36ITqsTJDT2gzbhdHA
suPslcEBp6PZNgnGQzWnVVrX5gOMmTNMbOfZEEEjDR6SyITf6lPq6nVf3AMZ
rCo4jxsCqGPMVEznwNjlSnTlpuPMABZzXGRyIFCx6KTqW4gcuEF9zbRo4k8A
pK1lmgOMmPMYSpdB0ZEXgf5NjlSzFI1aiF4HZHntCo4jRS46CTykAIgz9zbh
1D.mgZ8.p0JQBB0sOMmvzFhzanVEznwNjlSJW1TOfZSpFH.T2gzbBSupo9B0
Jf1R80gllSJWrWefZoLT80sLMmnISbOgZIhAsTecno4jxkn1CnFi4gputko4
jxkn1GnVhZm95fSyIbBu37y5NpAJMT80sLMmTtv5d.0Djrc5qCNMmTtv59.0
Bnc5qCNMmTtv56RZNYW7wiQlv84h7bx5swQGJ85BuR0IPno5DfHJyCEJNXS0
IRwCKDxVlpSD0R0I1qXYkzxwINhEJlxqyWNl81g0mZeapmvFEGmAwl3i4Iot
vMpxUgv0tpWS1rINsZ1rXSxwnm1FawIpw9HeQDg5CfLdWH4CvytjM6yRRyKX
KZQ2ULSOfIKmrPHDq.SuhnnnyOsdiLXLOHiKn0aRFbDZEWiay9sqsAvPRETl
8uF.xff8s2.OJRGBe3pimvJ1FubdweBnalXyCRLN07g6OTBzfHl5H.rOD.D.
APoqHRjRaDgVuukXb41ox+xlCeTR5.RTvsHJX7DS.OjRjrQCORpO7mKjsGzg
07AXXjvMcqPKEJKlFVXbFOk8qFKeTRUQwCgTHxGcmWP4CISFPdOUONDkUJ6b
RlSBg6Lqg.Ztsg0qZrHl9NLF+H0y7pTJAunnAnOvKRVNdi67wn..MZylBDew
yHoFfM.pA.Jek7jI3JTod.r1b72W9.HDJ7QHjOdRgW7n5GtLlBVKrkVqRqwa
kCioorgfL.sE1UEJXuWNYHnEuTLvnilHh8QcKqBYi2TWLerOfQFO73ihS6R.
wiG+A7AOAXEufvJWsoPYmyVff5EMDiqo9xaGoIs8wJtQCMTgG8zAtbMVQuJw
1qhsKTqhUc1hFfNZpubV73wYuEbnxQUt6VpfoinfmOqlQF3FZoWioaJ1SIiW
Sflfre256c72kjd6ws1xq96QbiOUCgYYvYt4cw3W+VxCILphhIqDEIPbFGaQ
u4rIptVzykO.TkpW1uhdjK6irrb7VHmjzGJK5Y7.9fm.l1DqmWrTSkDUpAin
MLxrWGDY0xGhwVjZmBxUnJHzU.gsaalkp.1JSxG2DJh.mTtcMmKennpaMwmD
GndPI5LUQHmoJDekvTAoZ4CAUA9NhHfi0pVeRgjl8EofV+nR+cSjndt7gfp7
1n.bHRfU5SpPUfjZK25.xCJU40tFNdq1zNQB+F3Q01Yabmgbz98EunHrfw.k
k6h9c26BCwC1+LI08mD6edH9aImtd6IfuL5v5WSxiWm+1A2Yn+cIeo6Vy1De
H8sD609UyS9e80+O.aQB6Q.
-----------end_max5_patcher-----------
</code></pre>