Max to octoWS8211

Status
Not open for further replies.

virtualdave

Well-known member
Hi all,

While cleaning up some code to help with an artnet to octoWS2811 connection, I cleaned up a simple Max patch and sketch for control of the WS2811 RGB LED's in max via Paul's lovely library.

Here's the sketch:
Code:
/*  OctoWS2811 Library - Basic RGB LED Test
 
 Required Connections
 --------------------
 pin 2:  LED Strip #1    OctoWS2811 drives 8 LED Strips.
 pin 14: LED strip #2    All 8 are the same length.
 pin 7:  LED strip #3
 pin 8:  LED strip #4    A 100 ohm resistor should used
 pin 6:  LED strip #5    between each Teensy pin and the
 pin 20: LED strip #6    wire to the LED strip, to minimize
 pin 21: LED strip #7    high frequency ringining & noise.
 pin 5:  LED strip #8
 pin 15 & 16 - Connect together, but do not use
 pin 4 - Do not use
 pin 3 - Do not use as PWM.  Normal use is ok.
 */


#include <OctoWS2811.h>
const int statusLED = 13;

const int ledsPerStrip = 8; 
int SerialIn;
int rgb[ledsPerStrip*8*3]; // holds values for all leds; total = 64 leds * RGB = 192 values
int rgbSerialIdx = 0; // index to keep track of serial inputs

int displayMemory[ledsPerStrip*6];
int drawingMemory[ledsPerStrip*6];

int bytecounter;

boolean debug_lights = 1; // set to 1 to echo serial data

const int config = WS2811_GRB | WS2811_800kHz;

OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config);

void setup() {

  leds.begin();

  Serial.begin(921600);

  pinMode(statusLED, OUTPUT);

  // blink LED so we know its alive
  for (int i=0; i <= 25; i++){ 
    digitalWrite(statusLED, HIGH);
    delay(20);
    digitalWrite(statusLED, LOW);
    delay(20);
  } 
  digitalWrite(statusLED, HIGH);

  // set up default colors
  initLEDs();
  leds.show();

}


void loop() {

  while (Serial.available() > 0) {
    // mail call
    SerialIn = Serial.parseInt(); 
    rgb[rgbSerialIdx] = SerialIn;
    rgbSerialIdx++;
    if (Serial.read() == '\n') { // end of message
      setLEDs();
      leds.show();
      rgbSerialIdx = 0;
    }
  }
  if (debug_lights == 1) {
    for (int i = 0; i < ledsPerStrip*8*3; i++) {
      Serial.write(rgb[i]);;
    }
    Serial.write(10);
  }  
}

void setLEDs() 
{
  // set LED colors
  for (int w = 0; w < ledsPerStrip*8; w++) {
    leds.setPixel(w, rgb[w*3], rgb[w*3+1], rgb[w*3+2]);
  }
}


void initLEDs() 
{
  // set LED colors
  for (int w = 0; w < ledsPerStrip*8; w++) {
    leds.setPixel(w, 0, 0, 0);
  }
}


And here's the Max patch:

Code:
----------begin_max5_patcher----------
22981.3oc6ct0biirbm+4Y9TfPSuQbtLMCT2K38EuarN1W106E62NgiInjvz
MmlhjKHkl11g+tu3FoHtmfUIohC+2Nrli.unrxLqrpJ+gD4+9O9C2c+1umt+
tn+tn+VzO7C+6+3O7CkWp3B+P8u+C28zxu+v5k6Kea28v1mdJcyg694pW6P5
2OTd8+o+4+g+2Qh+tn8oGh9+9e++ZzKKW+b59necaVT5xG9Zz9CYq1E80zrz
EQ+i+u9m+GhN70kGx+wp8Q6VdH+Mj+G34mx+D1xO9+i+g+a4uPZV0m63es0q
1j9v1m2T9mTVewxO9pMe4WxRe3P0PQojKT+bDSvVDm+erph+iVtHN5eo9Cs4
4mVsYc5gxAEq9hqdrbnr89e6yb6w+l+51MG1r7ozxW5+R1pkqu60uisOe33W
R7w2e1Wtu72Wb7J2+782uN87+PEem+5xG5bs8q92ptFeQbwU+O9wer3G+ri1
lU+Zz+51mi95xWRiN7b1lzGi1tI5wz6e9KE+ON70zn8eKMWK9ykuu8ec6yqe
L2RlV7qYmaNSe3qay+zElw4ZSLpjRqflew1DyUnMI2kd+xuj1wlXiiRLQIIQ
rXS9+OKhwzQBd9+Qk+q4++bd4kyujt7mp3HYRj7jeYOpXlTclJVGKJmDXGRE
y6QEqmqJ9npp5RG9W2kVIK2c2o+ndPKtI82yEuNJw+s0QeIa6y6FUmTFJPkH
JzIpxeximiJQNWUBePUxO+9nV1mtN22gfRoX52OGIu.khvaJk6Wt4KuWJlb+
kUGxWTgQP2HJmKISlutgGtNLit5MuX0604Jhpv9+yhFw46QUYq7bjryCoymU
Hc1efBoud6xGq7lG14JVVHvQFFqJDckhaFdWpqp.zE6uqTMjlQQqTu90Dy45
wOh8NMkq9x6y2IU86+m9GK9DMFmQ28et3G+z+mhelt4wpqD8u3O05xc6x+dG
OFOWXJTiBckN0LacphcU4pUL6qXl4DA2K0FhpoeF97czttTJKOrcEAeDYo5P
pGWcH5pNDdSard09CuKQjh1lO2IZ8HZEshWrC.ox75N.XIyYUMuEMpPVGIhD
agJw26Bf82E8v5UO7sxE+iNrM54cOt7PZTgAJZ6uluEghwQ9oGeY0Co6GQMJ
Mk6NPHJUfhXyr2cv0348FZK46xVk+2KZ21rCQ+m1Sv6qZ+m14G2955Hb6xRK
WKqZIswzKIIk6K2TpWRryOzs3Z6rsSdVki5Do8BOqhfEtmU447XTOOxfWwjm
c5Cdhd1dDBBI4a2xr7qmaH9kzMKqCgD2ql43xiKyx196+ZV82V7P5qUEAfIt
eybGgmpyR6c+WW+b5gsaO70O+OUFItXuuQ28yE+nyKw64k9et8wzmNc86yu9
mW8kMq1e12yy6u+oh2kgKYW19Vu+4CG1tYrEGp1rQ8NO3wye2opYNms7jY9b
S3GhtOekxzkYDFl5KMXtx58DsTIyuCQvxxEgzxU7HDBiWNYVymcHLUR3FBan
LETtY.BtMVa0NnJ2ApYFJEc7a8ZcrE537+o8nVoZytCeXkpU9kRd0Tp4qTTW
gJkGVuc+X4fSvJSWYsVo5mySqnCXsxgse4KqSIbf9WSr+b2srY9qzyFaMcet
Dy+ub4IaKkLZHUkKjpzieX09r+VuY+qWh0y9.CB4n7bn+82u74GiR3r7u+n+
9kOmuImhy2m++N+TqKue0gBhx+8O70m27sHVzeetQd0g+0hW96a278s+5uV7
+b+gs6JemT3BDWonMxYmV.s+Vo53lGeuT16p3v+4eZL7ixJBubooPQoYiOWL
tmSnEewG3u+8MeLkrUi25Ab96d05zWRy1uJeKpuZp9ghzpd1k+gy9HEZoeaa
4Wj9mOcoUaptD6zkxReY0wO+quwkY4ppC45omypFQe2puq5EysL+3wO5oE5T
UAwK2sXRRU.tjyTj4Fwurd6CeK8wyzA+P45mq1jef58oaNr7PsXb5keL8WW9
75C+R+5plu9wDiz6K1qg4Gt6KYqdb6lxEwO+SVb4i+4xmEUM1TmOXJeGaVtq
mO797wQ9oQVlUnVqiIyO9h4S0W27kNYIycxWtY0SKOjdXUkvxiO8kt5op8ec
9enpP9ec+CYaWutwWU0q7ROuRUJv98UOd3qMR1Twqj+1Ws6nI3tS5nGW8kz8
GZdsCK+x9lWowMky4dgmO6sw0GaV7nPpFZtbRU5mRdkR04yjGLb2fatX7Y0C
uHCgEZFby5+vwve0SztPkYycl0TapiiRXQm1Cwf26K4gDSRRrFagdTTkGq1n
+Fb05AOSneUpuaJzQ7NedytkO7s70jy++liNs9F8RXVn0ZizdgtqmNK4r0rh
wzr0qVe1+4Jx2UkuuG+46piguaKcpm7c0L3614vwRlO8c4v2skN0W9tB3614
7lBqO8ckv2skN0W9tJ361YuY49nBgfq3EYlz0s6pgqaSUZ08sj6610.O2tPk
UdzyEAcaoR8kmKh41CHHtG8bwVcaoR8kmK1oaO292I9yyUfcKzRk5KO2+nke
gQzz6JJi0Om8k6+bUcONg1VasE5VMW+yQBd4wJRLWbNykW71xhGQw0dD7JUr
l5nAoiMDgrVe79HkM.srgIlME0rFjyZQOqDVQbUwkV9ej1VVg9wmQ.gFELZS
hRiHNsQPpQCq1Dn0lDu1DH1lDy1Pn1FG213H2FG61nn2FB+V+H35GCWaW81Q
Z575SEwo0czvwnNseG8so5JlbVc0MiPeAaFMfSmfNr1+QG20bzfOiF4tQz6l
Qvei0uoeeWVze5SqXel8m+Khn+ZDmjhluvTjyHawFRppEjXoy5agvU8c6u7w
2xx0hIgQvjvM5Ex33XtzulDILIE684zdL6rSyIBFwJMEp5x.dRSgdDSgBlhN
yNHaHpmSXEtOkPC6PqCdMiIDr33p6MUq6FBiqFB4TFhtGDqmyi8QYf5lkg12
LnGdHc85nOwJdR0D8o7i8d5RhpKIO6RppKkebsV2JTSDgSUhgSvz8kdhQSQw
fkdzevmYUpLHqfk0p4i+bb0a7Hamk6ck2whls7XBin4Zd.rhmNRSbFhRsQw6
ab059sOm8vo5BtdLF0UEke.nCq1b5rq+sWCfzya9qqd7wtmKr5nR6KNDV0Qj
uHGkKcbUL0f73p3bKWKiKybrW5qqwEi53R06ad3w0Sqdb217kgpmDwLkUGMq
5YDRwuoyObVho9RckhOV0BeNpEwkqV34a59U0hHIYAqrB.BT0hXNpE0kqVDI
1pmCf5phKTc52BMMB43BxYFWnkFQUVskrpGMCEdMIGOHcwktZ0JBunUjkdKp
7sFwOlwmhKERZE8bzJpqm0PTyYbYudFWx4Zu3WGiKwbGWx2fwUUoV1gFT4im
qG+k7+z4Gu3WVd3P1p6e9P01v6C3kun0PiLzEfmXPAaBAZLA4Kq2d+x00n.O
8cL.UjerqAHn.vJyWHyi.Xs..K.vB.r..K.vB.r..K.vB.rX1A.vB.r..K.v
B.r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..6MK.Vtk6S.rI..K.vB.r..K
.vB.r..K.vB.rX1A.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vB.
r..6MK.VShG4uphA+UveE7WA+UveE7WA+UveE7WwrCveE7WA+UveE7WA+Uve
E7WA+UveE7WA+UveE7WA+UveE7WA+0aV9qZU01A0BWq8UMXuB1qf8JXuB1qf
8JXuB1qf8Jlc.1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXu
d618WUZOwdUA1qf8JXuB1qf8JXuB1qf8JXuhYGf8JXuB1qf8JXuB1qf8JXuB
1qf8JXuB1qf8JXuB1qf8JXuB1q2tM9UkvSrWkf8JXuB1qf8JXuB1qf8JXuB1
qX1AXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf85MK6057s3
N5UAPu5.5UVcJGkZfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3
WA9UfeE3WA9UfeE3WA9UfeE3WA902Y7qO+z8oYmizL+vcqd54mZyyrmyKZ05
E57+wy2hCWWdrw5yneIXWYy.6Z9P3nLxUpFRYV9G5PZ1uTwup8nn4IPOK2.C
lKlxjSzXvLzI3+nsFwlEh7+YjdwZHg0vEqgQZVTr+Ei0KVCErFicihr7aQZY
mLC2aio1ZeMlUREwdJ2qHxALLWb6olMl98pvEWqE9L7uAt3NYMhk9L7uEVCW
rFJozmg+Sf0Xpv+BRg+kVkOC+yiucC+Kycq8W3eNCt3NYMhYdL7OmCqgKVCg
j4wv+bbx3IC+yIE9ma4dM7u71M7OWY7Y3eb.WmrFrDqOC+i8a5l0PX8X3eQL
rFSE9mQJ7uIwmQ+E7a2n+Vg4r6tRGbtQjF2RyrobUXiz5CiACQZbyZvJWElq
3dwZfiDOYb+XZI8WUcmpIbOe+2vw70Boeh4i856VtkMROFyWCigSFClxig7A
Croh3qRnkm+5dfs6Q7s2vY3Wv7S.erQF2xlrg4w.9H09tYLxkE+EvGY1ex.9
VZY1utwa3d.+a4b5ys9IfOG6pzsDHqs9LhO1VoaVi3DOFxmiaspIi4aHEyut
B+cOjufEFw7O896Vxxupg6qbQNSO2oLQRZWkHCTgHEo1pYQA1e0gzekgLpSw
bEYKQQV1ohk9vDYCQQ11tza+vjXslnHqkD0xsJnuDornT934QL40U1m7HTzx
q07uc.Mf4dY.KTrqkAbrWFvJk7JY.qrdY.aTlqkAr1oArPuvTLd4lE15MBUd
ofc3J8wvUwkWICWtOFtBN65X3J7hyLiY+XGtJpC23fYWN5NO4PFPl4IgkLyo
HygytI6YKWCrxc.IyBhxLWDVxLI+YdXIyj7mYgiLyo5OGP9FLpGbNIrjYJ9y
LaXIyT7mYlvQlio5OGPyAmQFJ3AgDqHm5pvYUvRYlzLPYXIyjlAFNQmUTyQn
JbhNqLD0yAlHSZJHKrjYRSACmCVoHeT+vYQPE0CvFXhLEWCcXIxTBZDPqAR8
zqp.Rlod5UQXIxjN7ZXIxj1oQ3HxTO5pJf7LndzUtMrjYRdylvRlIkJl.Z8j
YbLvv3tAf5pIxv4DUBxamKbBzIHGnKb11rfZfNY3DbVPM2QkFjv3dEg5lijA
iDySliVNLx2EmZNMDrvQOaliLGH5Y8bj4vXQPtZN9yAhLSdk6vIgWbxTLCnX
c74HyAxbP1bj4.wel5J2xv4XU7YrxcX3Yvntxco4HLlAxryQlCD8rYNxbXLC
jQckaY3jj.F0UtKGbAh+rbNxbf3OKliLGH9yjCOGNIPhwlSAkDH9ywyQlCD+
4YrxsO7lqajKGahKS0.WpE8QabKDZZKS0vVFrYszWiZo2lzxH0y0PMmkIZLK
saJKUJwxeVY3K0MmUJbU5pQJAtyJ+sn84Z5ce9mNVyl8+zsn74YDmGWb+LqY
sK7sdaQm89XLZXkS+cV9AzX2UqpZ6b7qqVm9RZ19Zi2wpk6tk61c1kaLUHWK
8aayZzapKJUypKcpb6tKK8kUG+7u9FWlkqpNjqmdNqZD8cqttw4bp4Dc24EM
dUCLrrxASpdh.JRNuBBu69bWgG9V8rliWb6tzMq1rKKce5lCmlOFS2k1soLe
Ia0ia2THDM9jEW93et+VDqZrcdCbs5crY4td9v6yGGOu+9kYEp05BJkexee6
10MeoSVxbm7kaV8zxCoGVUIr73SeoqdZW1pp105oqUUupeMeR810qa7UU8Ju
zyq7Xtw9gzee0iG9Z420EFc30osmI8CUlkNWHqq2t7wVc139lKmTU9pkSn0N
7Xb5soQj7tVUvcavzupM0wQIrHs4tYz1chK6TzJSeMJ5AaRzMdPkcs+v+YXu
yyam5yQmV+HAR75icxK6Q.WxkpYEDpk8AZb5AtuaidFhy9t5X361Rm5IeWMC
9ti1vCb22kCe2V5Te46Jfu6nOs1c22UBe2V5Te46pfu6XOwoqptYW1tqFttM
UoFte1sqAdti8fy0cOWDzskJ0WdtHl6nOAPc2yEa0skJ0WdtXmti9fLzYOWA
1sPKUpu7b+iV9EF6o8Xz9zCeN6K2+4WVt94z8yn6cW73JpHw4lKNm4xKdaYw
in3ZOBdkJVSczfzwFhPVqOdejxFfV1vDylhZVCxYsnmUBqn7GZY4+QZaYE5G
eFADZTvnMIJMh3zFAoFMrZSfVaR7ZSfXaRLaCgZabbaiibabraihdaH7a8if
qeLbsc0aGooyqOUDmlQc1eLpS62wfOjY41x9Igp2fMiFvoSPGV6+ni6ZNZvm
Qib2H5cyH3uw52zuuKK5O8oUrOy9y+EQzeMhSRQyWXJxYTwy7ZaUCaJV5r9V
HbUe29Ke7srbsXRXDLIbidgLNNlK8qIQBSR4S55i6wryNMmHXDqzTnrJZlB8
HlBELEclcP1PTOmvJbeJgF1gVG7ZFSHpen7KTV2MDFWMDxoLDcOHVOmG6ix.
0MKCs15T5gGRWuN5Srn7SrE8o7i8d5RhpKIO6RppKkebsV2JTSDgSUhgSvz8
kdhQSQQGCp81XlUoxfrBVVqlO9ywUuwircVt2UdOr8omR2b3rav190bMO.Vm
NlPWEZe2A18nV69.Hnyco+X0eoo22bu2S1CeeYOKGkKcbIryXbIYWOiKybrW
5qqwEi53R06ad3wUqGV1LCuHDLSWss+7eSme3rDS8k5JEerpE9bTKhKWsvy2
z8qpEQRxh7MeDGqCT0hXNpE0kqVDI1R0hnbAaMWc52BMMB43BxYFWnkFQkTp
BLUmMH2qI43AoKtzUqVQ3EshrzaQku0H9wL9TboPRqnmiVQc8rFhZNiK60y3
RNW6E+5XbIl63R9FLtpqMv1zflpFAaC7xWzZnQF5BvSLnfMg.MlfLdsD1W8D
1z.DT.Xk4Kj4Q.rV.fE.XA.V.fE.XA.V.fE.XA.VL6..XA.V.fE.XA.V.fE.
XA.V.fE.XA.V.fE.XA.V.fE.XA.V.f8lE.K2x8I.1D.fE.XA.V.fE.XA.V.f
E.XA.VL6..XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.f8lE.
qIwi7WUwf+J3uB9qf+J3uB9qf+J3uB9qX1A3uB9qf+J3uB9qf+J3uB9qf+J3
uB9qf+J3uB9qf+J3uB9qf+5MK+UspZ6fZgq09pFrWA6UvdErWA6UvdErWA6U
vdEyN.6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWuc69qJs
mXup.6UvdErWA6UvdErWA6UvdErWwrCvdErWA6UvdErWA6UvdErWA6UvdErW
A6UvdErWA6UvdErWA60a2F+pR3I1qRvdErWA6UvdErWA6UvdErWA6UL6.rWA
6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6Uvd8lk8Zc9VbG8p.nWc
.8JqNkiRMvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB
7q.+JvuB7q.+JvuB7q.+56L90me59zryQZle3tUO87Ss4Y1y4EsZ8Bc9+34a
wgqKO1X8YzuDrqrYfcMeHbTF4JUCoLK+CcHM6Wp3W0dTz7DnmkafAyESYxIZ
LXF5D7ezViXyBQ9+LRuXMjvZ3h0vHMKJ1+hw5EqgBViwtQQV9sHktSlg6swT
asuFyJohXOk6UD4.FlKt8TyFS+dU3hq0BeF92.WbmrFwReF92BqgKVCkT5yv
+IvZLU3eEov+Rqxmg+4w2tg+k4t09K7OmAWbmrFwLOF9myg0vEqgPx7X3eNN
Y7jg+kjB+ysbuF9Wd6F9mqL9L7ONfqSVCVh0mg+w9McyZHrdL7uHFVioB+KH
E92j3yn+B9sazeqvb1cWoCN2HRiaoY1TtJrQZ8gwfgHMtYMXkqByUbuXMvQh
mLtOmVR+UU2oZB2y2+MbLesP5mX9Xu9tkaYiziw70vX3jwfo7XHev.axH9LZ
44utGX6dDe6MbF9EL+DvGajwsrIaXdLfORsuaFibYweA7Ql8mLfeLsL6W23M
bOf+sbN84V+DvmicU5VBj0VeFwGaqzMqQbhGC4ywsV0Tw7kIjh4WWg+tGxWv
BiX9md+cKY4W0v8UtHmom6TlHIsqRjApPjhTa0rn.6u5P5uxPF0oXthrknHK
6TwReXhrgnHaaW5seXRrVSTj0RhZ4VEzWhTVTJe77Hl75J6SdDJZ40Z92NfF
vbuLfEJ10x.N1KCXkRdkLfUVuLfMJy0x.V6z.VnWXJFubyBa8FgJuTvNbk9X
3p3xqjgK2GCWAmccLbEdwYlwrerCWE0gabvrKGcmmbHCHy7jvRl4Tj4vY2j8
rkqAV4NfjYAQYlKBKYlj+LOrjYR9yrvQl4T8mCHeCF0CNmDVxLE+YlMrjYJ9
yLS3HywT8mCn4fyHCE7fPhUjScU3rJXoLSZFnLrjYRy.CmnyJp4HTENQmUFh
54.SjIMEjEVxLoofgyAqTjOpe3rHnh5AXCLQlhqgNrDYJAMBn0.od5UU.IyT
O8pHrDYRGdMrDYR6zHbDYpGcUEPdFTO5J2FVxLIuYSXIyjRES.sdxLNFXXb2
.Pc0DY3bhJA4syENA5DjCzENaaVPMPmLbBNKnl6nRCRXbuhPcyQxfQh4IyQK
GF46hSMmFBV3nmMyQlCD8rdNxbXrHHWMG+4.QlIuxc3jvKNYJlATrN9bj4.Y
NHaNxbf3OSckaY3brJ9LV4NL7LXTW4tzbDFy.Y14HyAhd1LGYNLlAxntxsLb
RR.i5J2kCt.weVNGYNP7mEyQlCD+YxgmCmDHwXyofRBD+434HyAh+7LV41Gd
y0MxkiMwkoZfK0h9nMtEBMskoZXKC1rV5qQszaSZYj54ZnlyxDMlk1MkkJkX
4OqL7k5lyJEtJc0Hk.2Yk+Vz9bM8tO+SGqf19e5VT87LJorWpoYsK7sdaQm8
1cOFV4zemke.M1c0pp1NG+5p0oujlsu13crZ4ta4tcmc4FSEx0R+11rF8l5h
R0r5RmJ2t6xReY0wO+quwkY4ppC45omypFQe2pqabNmZNQ2cdQiW0.CKqbvj
pmHfhjyqfv6tO2U3guUOq43E2tKcypM6xR2mt4vo4iwzcocaJyWxV831MEBQ
iOYwkO9m6uEwpFam2.WqdGaVtqmO797wwy6ueYVgZstfR4m722tccyW5jkL2
Ie4lUOs7P5gUUBKO9zW5pm1ksppcsd5ZU0q5WymTuc85FeUUuxK87JOlareH
82W83guV9ccgQGdcZ6YR+PkYoyEx55sKerUmMtu4xIUkuZ4DZsCOFmdaZDIu
qUEb2FL8qZScbTBKRataFscm3xNEsxzWihdvlDciGTYW6O7eF16771o9bzo0
ORfDu9Xm7xdDvkboZVAgZYefFmdf661nmg3ruqNF9tszodx2Uyfu6nM7.28c
4v2skN0W9tB36N5Sqc28ckv2skN0W9tJ36N1Sb5ppa1ks6pgqaSUpg6mc6Zf
m6XO3bc2yEAcaoR8kmKh4N5S.T28bwVcaoR8kmK1o6nOHCc1yUfcKzRk5KO2
+nkegwdZOFsO8vmy9x8e9kkqeNc+L5d2EOthJRbt4hyYt7h2VV7HJt1ifWoh
0TGMHcrgHj05i2GorAnkMLwronl0fbVK5YkvJJ+gVV9ej1VVg9wmQ.gFELZS
hRiHNsQPpQCq1Dn0lDu1DH1lDy1Pn1FG213H2FG61nn2FB+V+H35GCWaW81Q
Z575SEwoYTm8Gi5z9cL3CYVtsreRn5MXynAb5Dzg09O53tliF7YzH2Mhd2LB
9ar9M866xh9SeZE6yr+7eQD8Wi3jTz7ElhbFU7Lu1VcCNDKcVeKDtpua+kO9
VVtVLILBlDtQuPFGGyk90jHgIo7Ic8w8X1YmlSDLhUZJTVEMSgdDSgBlhNyN
HaHpmSXEtOkPC6PqCdMiID0OT9EJq6FBiqFB4TFhtGDqmyi8QYf5lkgVacJ8
vCoqWG8IVT9I1h9T9wdOcIQ0kjmcIU0kxOtVqaEpIhvoJwvIX59ROwnonniA
0daLypTYPVAKqUyG+43p23Q1NK26JuG19zSoaNb1MXa+ZtlG.qSGSnqBsu6.
6dTqce.Dz4tzer5uzz6at26I6guurmkixkNtD1YLtjrqmwkYN1K8003hQcbo
58MO73p0CKalgWDBloq11e9uoyObVho9RckhOV0BeNpEwkqV3V0YpEQRxh7M
eDGqCT0hXNpE0kqVDI1R0hnbAaMWc52BMMB43BxYFWnkFQkTpBLUmMH2qI43
AoKtzUqVQ3EshrzaQku0H9wL9TboPRqnmiVQc8rFhZNiK60y3RNW6E+5XbIl
63R9FLtpqMv1zflpFAaC7xWzZnQF5BvSLnfMg.MlfLdsD1W8D1z.DT.Xk4Kj
4Q.rV.fE.XA.V.fE.XA.V.fE.XA.VL6..XA.V.fE.XA.V.fE.XA.V.fE.XA.
V.fE.XA.V.fE.XA.V.f8lE.K2x8I.1D.fE.XA.V.fE.XA.V.fE.XA.VL6..X
A.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.f8lE.qIwi7WUwf+J
3uB9qf+J3uB9qf+J3uB9qX1A3uB9qf+J3uB9qf+J3uB9qf+J3uB9qf+J3uB9
qf+J3uB9qf+5MK+UspZ6fZgq09pFrWA6UvdErWA6UvdErWA6UvdEyN.6UvdE
rWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWuc69qJsmXup.6UvdEr
WA6UvdErWA6UvdErWwrCvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6U
vdErWA60a2F+pR3I1qRvdErWA6UvdErWA6UvdErWA6UL6.rWA6UvdErWA6Uv
dErWA6UvdErWA6UvdErWA6UvdErWA6Uvd8lk8Zc9VbG8p.nWc.8JqNkiRMvu
B7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.
+JvuB7q.+56L90me59zryQZle3tUO87Ss4Y1y4EsZ8Bc9+34awgqKO1X8Yzu
DrqrYfcMeHbTF4JUCoLK+CcHM6Wp3W0dTz7DnmkafAyESYxIZLXF5D7ezViX
yBQ9+LRuXMjvZ3h0vHMKJ1+hw5EqgBViwtQQV9sHosSlg6swTasuFyJohXOk
6UD4.FlKt8TyFS+dU3hq0BeF92.WbmrFwReF92BqgKVCkT5yv+IvZLU3eCov
+Rqxmg+4w2tg+k4t09K7OmAWbmrFwLOF9myg0vEqgPx7X3eNNY7jg+0jB+ys
buF9Wd6F9mqL9L7ONfqSVCVh0mg+w9McyZHrdL7uHFVioB+qHE92j3yn+B9s
azeqvb1cWoCN2HRiaoY1TtJrQZ8gwfgHMtYMXkqByUbuXMvQhmLtujVR+UU2
oZB2y2+MbLesP5mX9Xu9tkaYiziw70vX3jwfo7XHev.axH9BZ44utGX6dDe6
MbF9EL+DvGajwsrIaXdLfORsuaFibYweA7Ql8mLfOmVl8qa7FtGv+VNm9bqe
B3ywtJcKAxZqOi3isU5l0HNwig743VqZxX9LRw7qqve2C4KXgQL+Su+tkr7q
Z39JWjyzycJSjj1UIx.UHRQpsZVTf8WcH8WYHi5TLWQ1RTjkcpXoOLQ1PTjs
sK81OLIVqIJxZIQsbqB5KQJKJkOddDSdck8IOBEs7ZM+aGPCXtWFvBE6ZY.G
6kArRIuRFvJqWFvFk4ZY.qcZ.KzKLEiWtYgsdiPkWJXGtReLbUb4Uxvk6igq
fytNFtBu3LyX1O1gqh5vMNX1kitySNjAjYdRXIybJxb3raxd1x0.qbGPxrfn
LyEgkLSxelGVxLI+YV3Hybp9yAjuAi5AmSBKYlh+LyFVxLE+YlIbj4Xp9yAz
bvYjgBdPHwJxotJbVErTlIMCTFVxLoYfgSzYE0bDpBmnyJCQ8bfIxjlBxBKY
lzTvv4fUJxG0ObVDTQ8.rAlHSw0PGVhLkfFAzZfTO8pJfjYpmdUDVhLoCuFV
hLocZDNhL0itpBHOCpGckaCKYlj2rIrjYRohIfVOYFGCLLta.ntZhLbNQkf7
14Bm.cBxA5BmsMKnFnSFNAmETycToAILtWQnt4HYvHw7j4nkCi7cwolSCAKb
zyl4HyAhdVOGYNLVDjqli+bfHyjW4NbR3EmLEy.JVGeNxbfLGjMGYNP7motx
sLbNVEeFqbGFdFLpqbWZNBiYfL6bj4.QOaliLGFy.YTW4VFNIIfQck6xAWf3
OKmiLGH9yh4HyAh+L4vygSBjXr4TPIAh+b7bj4.wedFqb6Cu45F4xwl3xTMv
kZQezF2Bgl1xTMrkAaVK80nV5sIsLR8bMTyYYhFyR6lxRkRr7mUF9RcyYkBW
ktZjRf6rxeKZetld2m+oiOjb5+oawoNuWQKUi0tv25sEc1WMNOrto+FK+.Jr
6p0Ts8M90UqSeIMaess6Xwxc2xc6N6xMlIjqj9ssYMZM0EUpY0kNUsc2kk9x
pie9WeiKyx0TGxUSOmUMh9tUW22bN0aht67ZFuRKVV3fIUOP.EImW.g2cetm
vCeqdRywKtcW5lUa1kktOcygSSGio6Q61Llujs5wsaJDhFexhKe7O2eKhUM1
Nu+sV8N1rbWOe384iim2e+xrB0Zc8jxO4tuc65luzIKYtO9xMqdZ4gzCqpDV
d7ouzUOsKaUU2Z8z0pJW0ulOmd650M9ppdkW54UdL2X+P5uu5wCes765BCN7
5r1yj9gpxRmqi00aW9XqFabeSkSppd0x4yZGdJN81zGRdWKJ3t8W5W0l53nD
Vj1b2L55NwkMJZkou9D8f8H5FOmxt1e1+Lr244cS84nSqeh.Id8oN4k8DfK4
R0rBBkx9.8M8.22sQKCwYeWcL7caoS8juqlAe2Q62At66xguaKcpu7cEv2cz
GV6t66JguaKcpu7cUv2crG3zUE2rKa2UCW2lpzp7q39tcMvycrmatt64hfts
To9xyEwbG8A.p6dtXqtsTo9xyE6zczmigN64JvtEZoR8km6ezxuvXOrGi1md
3yYe49O+xx0OmteFMu6hmVQEIN2bw4LWdwaKKdDEW6QvqTwZpiFjN1PDxZ8w
6iT1.zxFlX1TTyZPNqE8rRXEk+PKK+ORaKqP+3yHfPiBFsIQoQDm1HH0ngUa
BzZShWaBDaShYaHTaiiaabjaiicaTzaCgeqeDb8igqsqd6HMcd8oh3zLpy9i
QcZ+NF7YLK2V1NIT8FrYz.NcB5vZ+GcbWyQC9LZj6FQuaFA+MV+l98cYQ+oO
sh8Y1e9uHh9qQbRJZ9BSQNiJdjWaqt+FhkNquEBW02s+xGeKKWKlDFASB2nW
Hiii4R+ZRjvjT9ft93dL6rSyIBFwJMEJqhloPOhoPASQmYGjMD0yIrB2mRng
cn0AulwDh5mI+Bk0cCgwUCgbJCQ2Ch0y4w9nLPcyxPqsNkd3gz0qi9DKJ+Da
QeJ+Xumtjn5Rxytjp5R4GWq0sB0DQ3TkX3DLceomXzTTzwfZuMlYUpLHqfk0
p4i+bb0a7Hamk6ck2Cae5ozMGN69qseMWyCf0ogIzUg12MfcOp0tO+A5bS5O
V4WZ58M26sj8v2V1yxQ4RGWB6LFWR10y3xLG6k95ZbwnNtT89lGdb05Ykcw8
VdwCIa8o6zbc9gyRL0WpqT7wpV3yQsHtb0BOeS2upVDIIKx27QbrNPUKh4nV
TWtZQjXKUKhxEr0b0oeKzzHjiKHmYbgVZDURoJvTc1fbuljiGjt3RWsZEgWz
JxRuEU9Vi3Gy3SwkBIshdNZE00yZHp4LtrWOiK4bsW7qiwkXtiK4av3ptz.a
SCZpRDrMvKeQqgFYnK.OwfB1DBzXBx3kRXekSXSCPPAfUluPlGAvZA.V.fE.
XA.V.fE.XA.V.fE.XwrC.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V
.fE.XA.1aV.rbK2m.XS..V.fE.XA.V.fE.XA.V.fE.XwrC.fE.XA.V.fE.XA
.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.1aV.rlDOxeUEC9qf+J3uB9qf+J3
uB9qf+J3uhYGf+J3uB9qf+J3uB9qf+J3uB9qf+J3uB9qf+J3uB9qf+J3uB9q
2r7W0ppsCpEtV6qZvdErWA6UvdErWA6UvdErWA6UL6.rWA6UvdErWA6UvdEr
WA6UvdErWA6UvdErWA6UvdErWA6Uvd81s6upzdh8pBrWA6UvdErWA6UvdErW
A6UvdEyN.6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWuca7
qJgmXuJA6UvdErWA6UvdErWA6UvdErWwrCvdErWA6UvdErWA6UvdErWA6Uvd
ErWA6UvdErWA6UvdErWA60aV1q04awczqBfd0Azqr5TNJ0.+JvuB7q.+JvuB
7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7q.+JvuB7quy
3We9o6SyNGoY9g6V8zyO0lmYOmWzp0Kz4+imuEGtt7Xi0mQ+RvtxlA107gvQ
YjqTMjxr7OzgzreoheU6QQySfdVtAFLWLkImnwfYnSv+QaMhMKD4+yH8h0PB
qgKVCizrnX+KFqWrFJXMF6FEY42hjcyLbuMlZq80XVIUD6obuhHGvvbwsmZ1
X52qBWbsV3yv+F3h6j0HV5yv+VXMbwZnjReF9OAViIB+KRHE9WZU9L7OO91M
7uL2s1eg+4L3h6j0Hl4wv+bNrFtXMDRlGC+ywIimL7ukT3etk60v+xa2v+bk
wmg+wAbcxZvRr9L7O1uoaVCg0ig+EwvZLU3eCov+lDeF8Wvuci9aElyt6Jcv
4FQZbKMylxUgMRqOLFLDowMqAqbUXth6EqANR7jw80zR5up5NUS3d99ugi4q
ER+DyG602sbKajdLluFFCmLFLkGC4CFXSFwWQKO+08.a2i3augyvuf4m.9Xi
LtkMYCyiA7Qp8cyXjKK9KfOxr+jA7kzxreci2v8.92x4zma8S.eN1UoaIPVa
8YDersR2rFwIdLjOG2ZUSFyWPJlecE96dHeAKLh4e582sjkeUC2W4hbldtSY
hjztJQFnBQJRsUyhBr+pCo+JCYTmh4JxVhhrrSEK8gIxFhhrsco29gIwZMQQ
VKIpkaUPeIRYQo7wyiXxqqrO4QnnkWq4e6.Z.y8x.VnXWKC3XuLfUJ4Ux.VY
8x.1nLWKCXsSCXgdgoX7xMKr0aDp7RA6vU5igqhKuRFtbeLbEb10wvU3EmYF
y9wNbUTGtwAytbzcdxgLfLySBKYlSQlCmcS1yVtFXk6.RlEDkYtHrjYR9y7v
RlI4OyBGYlS0eNf7MXTO3bRXIyT7mY1vRlo3OyLgiLGS0eNflCNiLTvCBIVQ
N0UgypfkxLoYfxvRlIMCLbhNqnliPU3DcVYHpmCLQlzTPVXIyjlBFNGrRQ9n
9gyhfJpGfMvDYJtF5vRjoDzHfVCj5oWUAjLS8zqhvRjIc30vRjIsSivQjodz
UU.4YP8nqbaXIyj7lMgkLSJULAz5Iy3XfgwcC.0USjgyIpDj2NW3DnSPNPW3
rsYA0.cxvI3rfZtiJMHgw8JB0MGICFIlmLGsbXjuKN0bZHXgid1LGYNPzy54
Hygwhfb0b7mCDYl7J2gSBu3joXFPw53yQlCj4fr4HyAh+L0Utkgywp3yXk6v
vyfQck6RyQXLCjYmiLGH5Yybj4vXFHi5J2xvIIALpqbWN3BD+Y4bj4.weVLG
YNP7mIGdNbRfDiMmBJIP7mimiLGH9yyXkae3MW2HWN1DWlpAtTK5i13VHzzV
lpgsLXyZouF0RuMokQpmqgZNKSzXVZ2TVpThk+rxvWpaNqT3pzUiTBbmU9aQ
6y0z697OcrLj6+oaQ0yyHYYkuoYsK7sdaQm81OIFV4zemke.M1c0pp1NG+5p
0oujlsu13crZ4ta4tcmc4FSEx0R+11rF8l5hR0r5RmJ2t6xReY0wO+quwkY4
ppC45omypFQe2pqabNmZNQ2cdQiW0.CKqbvjpmHfhjyqfv6tO2U3guUOq43E
2tKcypM6xR2mt4vo4iwzcocaJyWxV831MEBQiOYwkO9m6uEwpFam2.WqdGaV
tqmO797wwy6ueYVgZstfR4m722tccyW5jkL2Ie4lUOs7P5gUUBKO9zW5pm1k
sppcsd5ZU0q5WymTuc85FeUUuxK87JOlareH82W83guV9ccgQGdcZ6YR+PkY
oyEx55sKerUmMtu4xIUkuZ4DZsCOFmdaZDIuqUEb2FL8qZScbTBKRataFscm
3xNEsxzWihdvlDciGTYW6O7eF16771o9bzo0ORfDu9Xm7xdDvkboZVAgZYef
Fmdf661nmg3ruqNF9tszodx2Uyfu6nM7.28c4v2skN0W9tB36N5Sqc28ckv2
skN0W9tJ36N1Sb5ppa1ks6pgqaSUpg6mc6Zfm6XO3bc2yEAcaoR8kmKh4N5S
.T28bwVcaoR8kmK1o6nOHCc1yUfcKzRk5KO2+nkegwdZOFsO8vmy9x8e9kkq
eNc+L5d2EOthJRbt4hyYt7h2VV7HJt1ifWoh0TGMHcrgHj05i2GorAnkMLwr
onl0fbVK5YkvJJ+gVV9ej1VVg9wmQ.gFELZShRiHNsQPpQCq1Dn0lDu1DH1l
Dy1Pn1FG213H2FG61nn2FB+V+H35GCWaW81QZ575SEwoYTm8Gi5z9cL3CYVt
sreRn5MXynAb5Dzg09O53tliF7YzH2Mhd2LB9ar9M866xh9SeZE6yr+7eQD8
Wi3jTz7ElhbFU7Lu1VcCNDKcVeKDtpua+kO9VVtVLILBlDtQuPFGGyk90jHg
Io7Ic8w8X1YmlSDLhUZJTVEMSgdDSgBlhNyNHaHpmSXEtOkPC6PqCdMiID0O
T9EJq6FBiqFB4TFhtGDqmyi8QYf5lkgVacJ8vCoqWG8IVT9I1h9T9wdOcIQ0
kjmcIU0kxOtVqaEpIhvoJwvIX59ROwnonniA0daLypTYPVAKqUyG+43p23Q1
NK26JuG19zSoaNb1MXa+ZtlG.qSGSnqBsu6.6dTqce.Dz4tzer5uzz6at26I
6guurmkixkNtD1YLtjrqmwkYN1K8003hQcbo58MO73p0CKalgWDBloq11e9u
oyObVho9RckhOV0BeNpEwkqV34a59U0hHIYQ9lOhi0ApZQLG0h5xUKhDaoZQ
TtfslqN8aglFgbbA4LiKzRinRJUAlpyFj60jb7fzEW5pUqH7hVQV5snx2ZD+
XFeJtTHoUzyQqntdVCQMmwk85YbImq8hecLtDycbIeCFW00FXaZPSUifsAd4
KZMzHCcA3IFTvlPfFSPFuVB6qdBaZ.BJ.rx7Ex7H.VK.vB.r..K.vB.r..K.
vB.r..Klc..r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vdyB
fka49D.aB.vB.r..K.vB.r..K.vB.r..Klc..r..K.vB.r..K.vB.r..K.vB
.r..K.vB.r..K.vB.r..K.vdyBf0j3Q9qpXveE7WA+UveE7WA+UveE7WA+UL
6.7WA+UveE7WA+UveE7WA+UveE7WA+UveE7WA+UveE7WA+Uve8lk+pVUscPs
v0ZeUC1qf8JXuB1qf8JXuB1qf8JXuhYGf8JXuB1qf8JXuB1qf8JXuB1qf8JX
uB1qf8JXuB1qf8JXuB1q2tc+Uk1SrWUf8JXuB1qf8JXuB1qf8JXuB1qX1AXu
B1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf85saieUI7D6UIXuB
1qf8JXuB1qf8JXuB1qf8Jlc.1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8
JXuB1qf8JXudyxdsNeKtidU.zqNfdkUmxQoF3WA9UfeE3WA9UfeE3WA9UfeE
3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9Ufe8cF+5yOceZ14H
MyOb2pmd9o17L647hVsdgN+e77s3v0kGar9L5WB1U1LvtlODNJibkpgTlk+g
Njl8KU7qZOJZdBzyxMvf4hoL4DMFLCcB9OZqQrYgH+eFoWrFRXMbwZXjlEE6
ewX8h0PAqwX2nHK+Vjf2Iyv81Xps1WiYkTQrmx8Jhb.CyE2dpYioeuJbw0Zg
OC+afKtSViXoOC+ag0vEqgRJ8Y3+DXMlJ7OiT3eoU4yv+73a2v+xb2Z+E9my
fKtSViXlGC+y4vZ3h0PHYdL7OGmLdxv+wjB+ysbuF9Wd6F9mqL9L7ONfqSVC
Vh0mg+w9McyZHrdL7uHFViIB+ySHE92j3yn+B9sazeqvb1cWoCN2HRiaoY1T
tJrQZ8gwfgHMtYMXkqByUbuXMvQhmLtukVR+UU2oZB2y2+MbLesP5mX9Xu9t
kaYiziw70vX3jwfo7XHev.axH9FZ44utGX6dDe6MbF9EL+DvGajwsrIaXdLf
ORsuaFibYweA7Ql8mLfulVl8qa7FtGv+VNm9bqeB3ywtJcKAxZqOi3isU5l0
HNwig743VqZxX9JRw7qqve2C4KXgQL+Su+tkr7qZ39JWjyzycJSjj1UIx.UH
RQpsZVTf8WcH8WYHi5TLWQ1RTjkcpXoOLQ1PTjssK81OLIVqIJxZIQsbqB5K
QJKJkOddDSdck8IOBEs7ZM+aGPCXtWFvBE6ZY.G6kArRIuRFvJqWFvFk4ZY.
qcZ.KzKLEiWtYgsdiPkWJXGtReLbUb4Uxvk6igqfytNFtBu3LyX1O1gqh5vM
NX1kitySNjAjYdRXIybJxb3raxd1x0.qbGPxrfnLyEgkLSxelGVxLI+YV3Hy
bp9yAjuAi5AmSBKYlh+LyFVxLE+YlIbj4Xp9yAzbvYjgBdPHwJxotJbVErTl
IMCTFVxLoYfgSzYE0bDpBmnyJCQ8bfIxjlBxBKYlzTvv4fUJxG0ObVDTQ8.r
AlHSw0PGVhLkfFAzZfTO8pJfjYpmdUDVhLoCuFVhLocZDNhL0itpBHOCpGck
aCKYlj2rIrjYRohIfVOYFGCLLta.ntZhLbNQkf714Bm.cBxA5BmsMKnFnSFN
AmETycToAILtWQnt4HYvHw7j4nkCi7cwolSCAKbzyl4HyAhdVOGYNLVDjqli
+bfHyjW4NbR3EmLEy.JVGeNxbfLGjMGYNP7motxsLbNVEeFqbGFdFLpqbWZN
BiYfL6bj4.QOaliLGFy.YTW4VFNIIfQck6xAWf3OKmiLGH9yh4HyAh+L4vyg
SBjXr4TPIAh+b7bj4.wedFqb6Cu45F4xwl3xTMvkZQezF2Bgl1xTMrkAaVK8
0nV5sIsLR8bMTyYYhFyR6lxRkRr7mUF9RcyYkBWktZjRf6rxeKZetld2m+oi
UFd+OcKpddFwKK.NMqcgu0aK5r21VvvJm96r7CnwtqVU0143WWsN8kzr80Fu
iUK2cK2s6rK2XpPtV521l0n2TWTplUW5T41cWV5KqN94e8MtLKWUcHWO8bV0
H56Vcciy4TyI5tyKZ7pFXXYkClT8DATjbdEDd284tBO7s5YMGu31coaVsYWV
59zMGNMeLltKsaSY9R1pG2toPHZ7IKt7w+b+sHV0X67F3Z06Xyxc87g2mONd
d+8KyJTq0ETJ+j+91sqa9Rmrj4N4K2r5okGROrpRX4wm9RW8ztrUUsq0SWqp
dU+Z9j5sqW23qp5UdomW4wbi8Co+9pGO70xuqKL5vqSaOS5GpLKctPVWuc4i
s5rw8MWNop7UKmPqc3w3zaSiH4cspf61foeUapiiRXQZycyns6DW1onUl9ZT
zC1jna7fJ6Z+g+yvdmm2N0miNs9QBj30G6jW1i.tjKUyJHTK6Cz3zCbe2F8L
Dm8c0wv2skN0S9tZF7cGsgG3tuKG9tszo9x2U.e2QeZs6tuqD9tszo9x2UAe
2wdhSWUcytrcWMbcapRMb+raWC7bG6Amq6dtHnaKUpu7bQL2QeBf5tmK1paK
Upu7bwNcG8AYnydtBragVpTe449Gs7KL1S6wn8oG9b1Wt+yurb8yo6mQ26t3
wUTQhyMWbNykW71xhGQw0dD7JUrl5nAoiMDgrVe79HkM.srgIlME0rFjyZQO
qDVQEARY4+QZaYE5GeFADZTvnMIJMh3zFAoFMrZSfVaR7ZSfXaRLaCgZabba
iibabraihdaH7a8ifqeLbsc0aGooyqOUDmlQc1eLpS62wfOjY41x9Igp2fMi
FvoSPGV6+ni6ZNZvmQib2H5cyH3uw52zuuKK5O8oUrOy9y+EQzeMhSRQyWXJ
xYTwy7Za0M3PrzY8sP3p9t8W93aY4ZwjvHXR3F8BYbbLW5WShDljxmz0G2iY
mcZNQvHVooPYUzLE5QLEJXJ5L6frgndNgU39TBMrCsN30LlPT+P4WnrtaHLt
ZHjSYH5dPrdNO1GkApaVFZs0ozCOjtdczmXQ4mXK5S4G68zkDUWRd1kTUWJ+
3ZstUnlHBmpDCmfo6K8DilhhNFT6swLqRkAYErrVMe7miqdiGY6rbuq7dX6S
Okt4vY2fs8q4Zd.rNcLgtJz9tCr6Qs18APPm6R+wp+RSuu4dumrG99xdVNJW
53RXmw3RxtdFWl4XuzWWiKF0wkp227viqVOrrYFdQHXltZa+4+lN+vYIl5K0
UJ9XUK74nVDWtZgmuo6WUKhjjE4a9HNVGnpEwbTKpKWsHRrkpEQ4B1Zt5zuE
ZZDxwEjyLtPKMhJoTEXpNaPtWSxwCRWboqVshvKZEYo2hJeqQ7iY7o3RgjVQ
OGsh55YMD0bFW1qmwkbt1K90w3RL2wk7MXbUWafsoAMUMB1F3kun0PiLzEfm
XPAaBAZLAY7ZIru5IroAHn.vJyWHyi.Xs..K.vB.r..K.vB.r..K.vB.rX1A
.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..6MK.Vtk6S.rI.
.K.vB.r..K.vB.r..K.vB.rX1A.vB.r..K.vB.r..K.vB.r..K.vB.r..K.v
B.r..K.vB.r..6MK.VShG4uphA+UveE7WA+UveE7WA+UveE7WwrCveE7WA+U
veE7WA+UveE7WA+UveE7WA+UveE7WA+UveE7WA+0aV9qZU01A0BWq8UMXuB1
qf8JXuB1qf8JXuB1qf8Jlc.1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8J
XuB1qf8JXud618WUZOwdUA1qf8JXuB1qf8JXuB1qf8JXuhYGf8JXuB1qf8JX
uB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1q2tM9UkvSrWkf8JXuB1qf8JXu
B1qf8JXuB1qX1AXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf
85MK6057s3N5UAPu5.5UVcJGkZfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9Ufe
E3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA902Y7qO+z8oYmizL+vcqd54m
ZyyrmyKZ05E57+wy2hCWWdrw5yneIXWYy.6Z9P3nLxUpFRYV9G5PZ1uTwup8
nn4IPOK2.ClKlxjSzXvLzI3+nsFwlEh7+YjdwZHg0vEqgQZVTr+Ei0KVCErF
icihr7aQbYmLC2aio1ZeMlUREwdJ2qHxALLWb6olMl98pvEWqE9L7uAt3NYM
hk9L7uEVCWrFJozmg+Sf0Xpv+BRg+kVkOC+yiucC+Kycq8W3eNCt3NYMhYdL
7OmCqgKVCgj4wv+bbx3IC+yIE9ma4dM7u71M7OWY7Y3eb.WmrFrDqOC+i8a5
l0PX8X3eQLrFSE9mQJ7uIwmQ+E7a2n+Vg4r6tRGbtQjF2RyrobUXiz5CiACQ
ZbyZvJWElq3dwZfiDOYb+XZI8WUcmpIbOe+2vw70Boeh4i856VtkMROFyWCi
gSFClxig7ACroh3yRnkm+5dfs6Q7s2vY3Wv7S.erQF2xlrg4w.9H09tYLxkE
+EvGY1ex.9VZY1utwa3d.+a4b5ys9IfOG6pzsDHqs9LhO1VoaVi3DOFxmias
pIi4aHEyutB+cOjufEFw7O896Vxxupg6qbQNSO2oLQRZWkHCTgHEo1pYQA1e
0gzekgLpSwbEYKQQV1ohk9vDYCQQ11tza+vjXslnHqkD0xsJnuDornT934QL
40U1m7HTzxq07uc.Mf4dY.KTrqkAbrWFvJk7JY.qrdY.aTlqkAr1oArPuvTL
d4lE15MBUdofc3J8wvUwkWICWtOFtBN65X3J7hyLiY+XGtJpC23fYWN5NO4P
FPl4IgkLyoHygytI6YKWCrxc.IyBhxLWDVxLI+YdXIyj7mYgiLyo5OGP9FLp
GbNIrjYJ9yLaXIyT7mYlvQlio5OGPyAmQFJ3AgDqHm5pvYUvRYlzLPYXIyjl
AFNQmUTyQnJbhNqLD0yAlHSZJHKrjYRSACmCVoHeT+vYQPE0CvFXhLEWCcXI
xTBZDPqAR8zqp.Rlod5UQXIxjN7ZXIxj1oQ3HxTO5pJf7LndzUtMrjYRdylv
RlIkJl.Z8jYbLvv3tAf5pIxv4DUBxamKbBzIHGnKb11rfZfNY3DbVPM2QkFj
v3dEg5lijAiDySliVNLx2EmZNMDrvQOaliLGH5Y8bj4vXQPtZN9yAhLSdk6v
IgWbxTLCnXc74HyAxbP1bj4.wel5J2xv4XU7YrxcX3Yvntxco4HLlAxryQlC
D8rYNxbXLCjQckaY3jj.F0UtKGbAh+rbNxbf3OKliLGH9yjCOGNIPhwlSAkD
H9ywyQlCD+4YrxsO7lqajKGahKS0.WpE8QabKDZZKS0vVFrYszWiZo2lzxH0
y0PMmkIZLKsaJKUJwxeVY3K0MmUJbU5pQJAtyJ+sn84Z5ce9mNVl98+zsn74
YT0ivNMqccu0aG5r2NY6v5l9ar7CnvtqVS0123WWsN8kzr801tiEK2cK2s6r
K2XlPtR521l0n0TWTolUW5T01cWV5KqN94e8MtLKWScHWM8bV0H56Vccey4T
uI5tyqY7p9WXYgClToMEImW.g2cetmvCeqdRywKtcW5lUa1kktOcygSSGio6
Q61Llujs5wsaJDhFexhKe7O2eKhUM1Nu+sV8N1rbWOe384iim2e+xrB0Zc8j
xO4tuc65luzIKYtO9xMqdZ4gzCqpDVd7ouzUOsKaUU2Z8z0pJW0ulOmd650M
9ppdkW54UdL2X+P5uu5wCes765BCN75r1yj9gpxRmqi00aW9XqFabeSkSppd
0x4yZGdJN81zGRdWKJ3t8W5W0l53nDVj1b2L55NwkMJZkou9D8f8H5FOmxt1
e1+Lr244cS84nSqeh.Id8oN4k8DfK4R0rBBkx9.8M8.22sQKCwYeWcL7caoS
8juqlAe2Q62At66xguaKcpu7cEv2czGV6t66JguaKcpu7cUv2crG3zUE2rKa
2UCW2lpTC2O610.O2wdt45tmKB51Rk5KOWDyczG.nt64hs51Rk5KOWrS2QeN
F5rmq.6VnkJ0Wdt+QK+Bi8vdLZe5gOm8k6+7KKW+b59Yz7tKdZEUj3byEmyb
4Eusr3QTbsGAuREqoNZP5XCQHq0GuORYCPKaXhYSQMqA4rVzyJgUT9Csr7+H
ssrB8iOi.BMJXzlDkFQbZifTiFVsIPqMIdsIPrMIlsgPsMNtswQtMN1sQQuM
D9s9Qv0OFt1t5sizz40mJhSynN6OF0o86XvmwrbaY6jP0avlQC3zInCq8ezw
cMGM3ynQtaD8tYD72X8a522kE8m9zJ1mY+4+hH5uFwIon4KLE4Lp3QdsspeM
EKcVeKDtpua+kO9VVtVLILBlDtQuPFGGyk90jHgIo7Ac8w8X1YmlSDLhUZJT
VEMSgdDSgBlhNyNHaHpmSXEtOkPC6PqCdMiID0OS9EJq6FBiqFB4TFhtGDqm
yi8QYf5lkgVacJ8vCoqWG8IVT9I1h9T9wdOcIQ0kjmcIU0kxOtVqaEpIhvoJ
wvIX59ROwnonniA0daLypTYPVAKqUyG+43p23Q1NK26JuG19zSoaNb18Wa+Z
tlG.qSCSnqBsua.6dTqce9Cz4lzerxuzz6at2aI6gusrmkixkNtD1YLtjrqm
wkYN1K8003hQcbo58MO73p0yJalgWDBloq11e9uoyObVho9RckhOV0BeNpEw
kqV34a59U0hHIYQ9lOhi0ApZQLG0h5xUKhDaoZQTtfslqN8aglFgbbA4LiKz
RinRJUAlpyFj60jb7fzEW5pUqH7hVQV5snx2ZD+XFeJtTHoUzyQqntdVCQMm
wk85YbImq8hecLtDycbIeCFW0kFXaZPSUhfsAd4KZMzHCcA3IFTvlPfFSPFu
TB6qbBaZ.BJ.rx7Ex7H.VK.vB.r..K.vB.r..K.vB.r..Klc..r..K.vB.r.
.K.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vdyBfka49D.aB.vB.r..K.vB.
r..K.vB.r..Klc..r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..K.vB.r..K
.vdyBf0j3Q9qpXveE7WA+UveE7WA+UveE7WA+UL6.7WA+UveE7WA+UveE7WA
+UveE7WA+UveE7WA+UveE7WA+Uve8lk+pVUscPsv0ZeUC1qf8JXuB1qf8JXu
B1qf8JXuhYGf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1q2
tc+Uk1SrWUf8JXuB1qf8JXuB1qf8JXuB1qX1AXuB1qf8JXuB1qf8JXuB1qf8
JXuB1qf8JXuB1qf8JXuB1qf85saieUI7D6UIXuB1qf8JXuB1qf8JXuB1qf8J
lc.1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXuB1qf8JXudyxdsNeKti
dU.zqNfdkUmxQoF3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9UfeE3WA9U
feE3WA9UfeE3WA9UfeE3WA9Ufe8cF+5yOceZ14HMyOb2pmd9o17L647hVsdg
N+e77s3v0kGar9L5WB1U1LvtlODNJibkpgTlk+gNjl8KU7qZOJZdBzyxMvf4
hoL4DMFLCcB9OZqQrYgH+eFoWrFRXMbwZXjlEE6ewX8h0PAqwX2nHK+V9Yr5
jY3daL0V6qwrRpH1S4dEQNfg4haO0rwzuWEt3Zsvmg+MvE2IqQrzmg+svZ3h
0PIk9L7eBrFSE9WQJ7uzp7Y3ed7sa3eYtas+B+yYvE2IqQLyig+4bXMbwZHj
LOF9miSFOY3eIov+bK2qg+k2tg+4JiOC+iC35j0fkX8Y3ereS2rFBqGC+Khg
0Xpv+BRg+MI9L5ufe6F82JLmc2U5fyMhz3VZlMkqBajVeXLXHRiaVCV4pvbE
2KVCbj3Ii6yokzeU0cplv878eCGyWKj9IlO1qua4V1H8XLeMLFNYLXJOFxGL
vlLhOiVd9q6A1tGw2dCmgeAyOA7wFYbKaxFlGC3iT66lwHWV7W.ejY+IC3GS
Ky90MdC2C3eKmSet0OA74XWktk.Ys0mQ7w1JcyZDm3wP9bbqUMUL+DRg7qKv
e2i3KXgQH+Su+tUr7qJ39pVjyTycpRjj1EIx.EHRQlsZVSf8WbH8WXHi5SLW
Q1RTjkcJXoOLQ1PTjssq71OLIVqIJxZIQsbq54KQJKpjOdd.Sdcg8IOxDs7Z
M+aGPCXtWFvBE6ZY.G6kArRIuRFvJqWFvFk4ZY.qcZ.KzKLEiWtYgsdePkWJ
XGtReLbUb4Uxvk6igqfytNFtBu3LyX1O1gqh5vMNX1kityCNjAjYdRXIybJx
b3raxd1x0.qbGPxrfnLyEgkLSxelGVxLI+YV3Hybp9yAjuAi5AmSBKYlh+Ly
FVxLE+YlIbj4Xp9yAzbvYjgBdPHwJxotJbVErTlIMCTFVxLoYfgSzYE0bDpB
mnyJCQ8bfIxjlBxBKYlzTvv4fUJxG0ObVDTQ8.rAlHSw0PGVhLkfFAzZfTO8
pJfjYpmdUDVhLoCuFVhLocZDNhL0itpBHOCpGckaCKYlj2rIrjYRohIfVOYF
GCLLta.ntZhLbNQkf714Bm.cBxA5BmsMKnFnSFNAmETycToAILtWQnt4HYvH
w7j4nkCi7cwolSCAKbzyl4HyAhdVOGYNLVDjqli+bfHyjW4NbR3EmLEy.JVG
eNxbfLGjMGYNP7motxsLbNVEeFqbGFdFLpqbWZNBiYfL6bj4.QOaliLGFy.Y
TW4VFNIIfQck6xAWf3OKmiLGH9yh4HyAh+L4vygSBjXr4TPIAh+b7bj4.wed
Fqb6Cu4593xwd3xT8ukZQez91Bgd1xT8qkA6UK80mV5sGsLR8bMTuYYh9xR6
dxRkRr7mUF9RcyYUBWktZjJf60peKqU6mu2pzs5YuVRYAOq5znm6s+b1aale
XUS+k41Hk3Vuk2leTI6h1m67s6y+DaDchr5I7jo7AVglMacxo9NNYcR7.C7y
kwzr1SW90UqSeIMaes67w5G7tk61c1kaDbHWI8aayZzrtKpc0pKcp.DuKK8k
UG+7u9FWlkqoNjqldNqZD8cqttSBcpaMc2YU5pr5AkEupzJY7xeUJ3mUUk2c
e9ziG9VcjjiWb6tzMq1rKKce5lCmhQESeZtagQ9R1pG2toPHZ7IKt7w+b4it
pJE87dZa06Xyxc87g2mONdd+8KyJTr00XK+TLfsaW27kNYKy8xWtY0SKOjdX
UkvxiO8kt5ocYqp5fsmtVUI7907.caWutwWU0q7ROuxi4l6GR+8UOd3qkeWW
XDyWCkclzOTom5bs8td6xGa0rm6axbRUI8V56oc3Ia0aSuY4csPo61yseUaF
mGna5G4om2GhhKac1Ir95b1C10ra7ja6Z+ogzv9lm2e4miNs9Yjj30mCmW1y
DujKUyJHTb+CzI4+37b4J0z02+48PkJWW0k65pigqaKcpmbc0raHWWdrIxZl
TO2nAP3bXWMG9tszo9x2U.e2Qe506tuqD9tszo9x2UAe2wdBbWUt2traWMbc
apRMb+rYWC7bG6AIr6dtHnaKUpu7buoh4pTT1V1YOPTqbbc3TZJrS2VpTe43
Jfi6HOVGc1wUf8JzRk5KG2+nkcgwd1Wdj92meY45mS2OidYdwSuohblat3zk
Ku3MkEOhhq8H3UjXM0QChFaH7Xs938gIa.TYCiKaJjYMvl0BcFujYgtBZgrj
Zgz1xNzO6LB7ynvPaRNZDYoMBOMZL0lfq1jr0lfu1jL1Fhy13r1Fm213L2Fk
61Pr25m+V+L3Z6r2NVSmWepXNMi6ru0ccvnaptBHmsr+Zn5MbyngbF7tQfVn
mwC+LZr6FwuaFC+MV+l98cYQ+oOsh8Y1e9uHh9qQbRJZ9BSQNiJdFfaq3xGK
cVeKDtpua+kO9lVtVLILBlDtQuPFGGyk90jHgIo7I+8wcY1YulSDLhUZJTVE
MSgdDSgBlhNyNHaHpmSXEtOkPC6PqidMiID0Mo.gx5tgv3pgPNkgn6Qw54DY
eTFntoYn0VmRO7P550QehEkelsnOkev2SWRTcI4YWRUco7Cr059fZhHbpRLb
BltuDTLZRJ5XPs2FyrJUFjUvxZ07weNt5Mdjsyx8tx6gsO8T5lCmcGG2ulq4
Av5zBI5pP66VRuG0Z2mHCcJagwJHUSuu4duI0G9FUeVNJW53RXmw3RxtdFWl
4XuzWWiKF0wkp227viqVO8vYFdQHXVUFdJ9Mc9gyRL0WpqT7wpV3yQsHtb0B
OeS2upVDIIKx27QbrNPUKh4nVTWtZQjXKUKhxEr0b0oeKzzHjiKHmYbgVZDU
RoJvTc1fbuljiGjt3RWsZEgWzJRaE9I9B9wL9TboPRqnmiVQc8rFhZNiK60y
3RNW6E+5XbIl63R9FLtpKVx17flpnIai7xWzZnQF5BvSLnfMg.MlfLdwU1WA
V1z.DTHXk4Kj4QDrVff0ADrkmgOF.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE
.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.f8ZE.K2x8I.1D.fE.XA.V.
fE.XA.V.fE.XA.VL6..XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.XA.V.fE.X
A.V.f8lE.qIwi7WUwf+J3uB9qf+J3uB9qf+J3uB9qX1A3uB9qf+J3uB9qf+J
3uB9qf+J3uB9qf+J3uB9qf+J3uB9qf+5MK+UspZ6fZgq09pFrWA6UvdErWA6
UvdErWA6UvdEyN.6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdE
rWuc69qJsmXup.6UvdErWA6UvdErWA6UvdErWwrCvdErWA6UvdErWA6UvdEr
WA6UvdErWA6UvdErWA6UvdErWA60a2F+pR3I1qRvdErWA6UvdErWA6UvdErW
A6UL6.rWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6UvdErWA6Uvd8lk8Zc9
VbG8p.nWc.8Z0A2q1CJfuB3q.9JfuB3q.9JfuB3q.9JfuB3q.9JfuB3q.9Jf
uB3q.9JfuB3q.9JfuB3q.9JfuB3q.956H70me59zryAZle3tUO87SsoY1y4E
sZ8Bc9+34awgqKO1X8YzuDnqrY.cMeHbTF4JUCoLK+CcHM6Wp3W0dTz7Dnmk
afAyESYxIZLXF5D7ezViXyBQ9+LRuXMjvZ3h0vHMKJ1+hw5EqgBViwtMQV9s
HamDC2aWo1ZeMjUREvdJ2nHxArKWbuolMl58pvCWqE9L5uAd3NYMhk9L5uEV
CWrFJozmQ+Sf0Xhn+FRQ+kVkOi9yiuci9Ky8p8WzeNCd3NYMhYdL5OmCqgKV
Cgj4wn+bbt3oh9qIE8ma4dM5u71M5OWY7Yzeb5VmrFrDqOi9ica5l0PX8Xze
QLrFSD8WQJ5uIwmA+E7a2f+Vg4r6rRG7sQfF2RwrobQXiz5CiACAZbyZvJWD
lq3dwZfCDOUXeIsD9qptI0Dtmq+a3P9ZgzOg7wN8cKuxFoGC4qgwvIiAS4wH
9f+0TA7Ezxwecuu18.91a3r6KX9IdO1FiaYR1v7X7djVe2LF4xh+h2ir5OU7
dNsr5W2uMbOd+sb974V+Dumi8T5Vxi0VeFvGapzMqQbhGi3ywMU0Tg7YjB4W
WY+tGwWvBiP9md+cKU4WUv8UlHmol6TdHIsqNjApLjh7Z0rX.6upP5uhPF0m
XthrknHK6ToReXhrgnHaaWxseXRrVSTj0RhZ4VExWhTVTBe77.l75J5SdjGZ
40Z92NfFvbuLfEJ10x.N1KCXkRdkLfUVuLfMJy0x.V6z.VnWXJFubyBa89fJ
uTvNbk9X3p3xqjgK2GCWAmccLbEdwYlwrerCWE0gabvrKGcmmXHCHy7jvRl4
Tj4vY2j8rkqAV4NfjYAQYlKBKYlj+LOrjYR9yrvQl4T8mCHeCF0CNmDVxLE+
YlMrjYJ9yLS3HywT8mCn4fyHCE7fPhUjScU3rJXoLSZFnLrjYRy.CmnyJp4H
TENQmUFh54.SjIMEjEVxLoofgyAqTjOpe3rHnh5AXCLQlhqgNrDYJAMBn0.o
d5UU.IyTO8pHrDYRGdMrDYR6zHbDYpGcUEPdFTO5J2FVxLIuYSXIyjRES.sd
xLNFXXb2.Pc0DY3bhJA4syENA5DjCzENaaVPMPmLbBNKnl6nRCRXbuhPcyQx
fQh4IyQKGF46hSMmFBV3nmMyQlCD8rdNxbXrHHWMG+4.QlIuxc3jvKNYJlAT
rN9bj4.YNHaNxbf3OSckaY3brJ9LV4NL7LXTW4tzbDFy.Y14HyAhd1LGYNLl
AxntxsLbRR.i5J2kCt.weVNGYNP7mEyQlCD+YxgmCmDHwXyofRBD+434HyAh
+7LV41Gdy0MvkiMukoZbK0h9nMrEBMqkoZTKC1jV5qAszayYYj54ZnlxxDMj
k1MikJkX4OqL7k5lypDtJc0HU.2qU+1us5vhUGRyhNVW38Vlt0O40pdpBp6z
ag6sLD68or+vJmVE5ln9pcKxset9++ze79JzM+obdZYtm32i1kUHEOrc81r8
4AYd3qKyhXIbBJs5GoEV1r0ZJ8b0Z7gzZ4ijeoZj7do6Vuc4iEct2nSOf25U
IkT4LwK6riljYqiRlsNhMnmkW0JmW9uiMxUrx9NW77G4poG4iT0tT8b5qZce
Cca92VG8krsOui3jqjR8lwLt1i2SDIq2la8dMiZ+tzzGWu5oIlQUoY313xYT
p4qYRdemQU9dZV.xUJo1afoVU0sfiarW0gtE2ZbpntaYo61U5XzHKOJBxCqw
8s4ap7na9mhxss3au7Lk9oYNFeakGKA4Q+NpeLTjG66m7n8g9oc24kW9jcTV
ssHl50e60+P9aDndCFAbaY088NMBheCFARk5cbDPYR+6lOshRLnlz9eakGRw
fheekmoVyPXmm+lhKJqG1jxG5Sm+auA9aJJNbMyI8aqFkRLH06WT8l2IP9Jl
nTWFQwHOOhRwu8VXgoXfe2zmRJ5yVNkukxifxL32Qwgh5oYJ0eakGJVq2Oum
l25BicWcxnOard9mlWdHPiH4zu8FLajSQi1ZX9lpQED7+mTdZqQMUKcYsmEe
q72dKznbJZz2uoL72fELzZd0lNKW23zVPy+s2BEJkHhyc.jTM.RXmO.J9s2f
A.iztVe2bHXVpI53cRdnbvY162VrXTBIN2MQahqBiGW5oYE7xmLTs9UYL+rs
XW9auEtij1B4ktE6p7Btb2tWRy1W+cVJJ28zxeaaVwup+4er54pY0uVlGx6x
ReY0w2e0aXY1Cec0gzGN7bVUtL+tUe2OV724+3G++CB8BgP.
-----------end_max5_patcher-----------



... just in case anyone out there besides me uses Max ;) It controls 8 strips of 8 LEDs (since that was my set-up, but can easily be adjusted).

Cheers,
David
 
Nice to see other maxers around !
Here's another alternative where I feed a Jitter matrix into the Teensy:

Code:
/*  OctoWS2811 BasicTest.ino - Basic RGB LED Test
  Required Connections
  --------------------
    pin 2:  LED Strip #1    OctoWS2811 drives 8 LED Strips.
    pin 14: LED strip #2    All 8 are the same length.
    pin 7:  LED strip #3
    pin 8:  LED strip #4    A 100 ohm resistor should used
    pin 6:  LED strip #5    between each Teensy pin and the
    pin 20: LED strip #6    wire to the LED strip, to minimize
    pin 21: LED strip #7    high frequency ringining & noise.
    pin 5:  LED strip #8
    pin 15 & 16 - Connect together, but do not use
    pin 4 - Do not use
    pin 3 - Do not use as PWM.  Normal use is ok.

  This test is useful for checking if your LED strips work, and which
  color config (WS2811_RGB, WS2811_GRB, etc) they require.
*/

#include <OctoWS2811.h>

const int ledsPerStrip = 60;

DMAMEM int displayMemory[ledsPerStrip*6];
int drawingMemory[ledsPerStrip*6];

const int config = WS2811_GRB | WS2811_800kHz;

OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config);

char serial_array[ledsPerStrip*3];

void setup() {
  Serial.begin(115200);
  leds.begin();
  test();
}

void loop() {
  if (Serial.available() == ledsPerStrip*3) {
    Serial.readBytes(serial_array, ledsPerStrip*3);
    for (int i = 0; i < ledsPerStrip*3 ; i++) {
      leds.setPixel(i, serial_array[i*3], serial_array[i*3+1], serial_array[i*3+2] );
    }
    leds.show();
  }
}

void test() {
  for (byte i = 0; i < ledsPerStrip * 2 ; i++){
    leds.setPixel(i, random(0,255), random(0,255), random(0,255));
    leds.show();
    delay(20);
    leds.setPixel(i, 0, 0, 0);
    leds.show();
  }
}

Code:
<pre><code>
----------begin_max5_patcher----------
1574.3oc2ZssbaaCD8YouBL70p5R.BvK8o1oO2oe.YxjgRBVBt7VIgrURl3u
8hKj1zWDIDDErTdHRlTHf6dvtGb1E76ym4srbOswC76fOAlM66ymMScK4Ml0
d8Lu7z8qxRaTCyaUYdNsf6sP+ab5dt59+01zhMTPd4ZJXKsl1MfpT9psrhMe
olthqePAw2PV.PQ923u..gAxuPhK.et8+yskE7F12nxgCQheVea1Z0Spb4c+
JhzM+E6xK2wynbk442aFJRyUyf2eVyRy5F+s0aVpF4SSqXFXEcS.TdueLet7
iEFBI2w32T8.qXc4CC30JGAPfXoyiiRTNeROutm6EF89tGp8t5aw+ZEUO2dd
KD+6oY5j8nchk3ciuBlDobBeeKVACCeeWLXzUvpzZw84z5uPKRWlQ6ut+Ffg
ICUeM9v3z71fdu+41ak+3B4GEkrF5SWce5lcOeUUVJqXBg3B5CBX3MoQM.8C
Zr3HHFK+BSrA5sN44b400i50nPTuPNrMbFgn22sgi51uMc68iC7sAQ1kujVO
TtFBJ8bnZ8lXSp1HjISal1Rw1.SXZxxcbd4fAFnHI7DD1ALuBd5G.jLb.vab
oI1W3ka1jQGLHO44k5g8EBbXe4nW5N6La+mvbpKk6VLNBnyuifVDriilrr7A
V9QSGtHUOn13AD.VsMsFD5CfiCQcpmrYC.bfsLBuAiDV+WxS40r8SrDjCfVb
vRPy.niFVhUrAAVsKAbxvFU7iSPkpZZEsXMngxSyxFEdHIOCRGI7PBO2ahZC
rz7fzUG0ugZ8pnXUzA5.LqijbbTLqxk+ayJS6wuJJfRXfrkrLF+q8gtWfBAS
o3pVkrGlRwWoorUbEwJZ2KSwUGRj8XHBwWK2BpxTH1Pjf8uzTY27.S3nffgJ
tHPqlBG1xSPN9RyO6LDXKfD52RWu5wg7bkuRzjh5xpje9dLDvjir57F1lBoa
9zeMcLeBxEwbLTjrVMILIz55GfgNo.BMO4zWBwnPTnexICQ3qZH5.DF+1i.z
MiCbnX09FAXaZjm+jwVLXt0DJXuoHspYaIW.N9iCNAZQGwV0kS3jANuRDx4B
a9kGAPShXHZIXw1.JnqtHlUecUF8Qf+MHCfl.k7qPapqCgu5fFQ8biKCCiBU
BQrgfAF6h9A3PR21MzOERWH4mUR2Vv4THcgWtjtzusNcPQrwwFKhMY3pS9n1
fnK59D1fH95c+AhAHyIr+P3UGxTCZOStCW2Fgzq2E3Ha5o0UUqKFCP5NDAcO
cvI1ni3RqyExdjq6xrgMIuq63I895X2G3xuG4urxVwOwxEWJmrmbnAJLgnZ0
iUk6FF7QVtq.05bzI7s3vNvrSvwI.ljje9.yCcNEo+KftupV7nD7X04ex+yh
+b7B.BZeSSPVQuGcI1PxAX5jHjAEEk3qNpTaNEGjiO.vorP.pzb.qjG8IZvy
RNIPgOwpbxDaNTCXzjAScuGRm8xGy2eGHi0vu4u2kwYUYz8C1v+VPBqEZirQ
UIb5BlF.hBl1brlJVVF3OpxRKnfgZKCJQ+FI.UAPI1TPBz2E.D7LBPvAO3jv
SEfvW63iAzPm.7DbEBOGkZ8tczHp2MV6jqiweb50UivKiU75WkZkuJu+KAwl
xc0q5dZssr.7rytl1vYEobVYQuwHaZWuAsksdMsnuhu0rFoHv0GthSSMmHCL
G46YE.5DyQ9d6Mt8D3L3Q9pKOp8fBcm8DXf8HUAKRGch8fLEebj8.MI8xcKW
vWj47gaNF.NwNyZHIlFK6FtGhIbgnw3dxYqqJEk.zz0z.sl.jtUtXe8gb8hq
hi0u.RsEwD2ayPG6cPGt5aRvXn6xMHFwr5NldBzzclcj8XJQuaRVwQWVBEjZ
ROcxiIzdLIbF4NywXcBH2XOlPFF3rn4.SMG2rZgLhaN5xxdvWVlyE1pkrwTt
xdLhJzcbOHSxtvNDeLhKzg1iIJMBcX7ruI3i6TFBMokMX2Q+.Mhc1cliIJCg
Nb4xH5GGtbYzl6tayTnIo6up17yp83ap3G2HMzH1PaaPqt8woUU2SqaZmSkk
3kmdWYs7xvEy0mUu9R0QW6USum0Md8.RqWskwoq36p0M5deH1at747i4+OLh
EOtD
-----------end_max5_patcher-----------
</code></pre>
 
Status
Not open for further replies.
Back
Top