diff --git a/.gitignore b/.gitignore index 378eac2..dee53c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build +*~ diff --git a/English.lproj/InfoPlist.strings b/English.lproj/InfoPlist.strings index 414b716..dc02ef1 100644 Binary files a/English.lproj/InfoPlist.strings and b/English.lproj/InfoPlist.strings differ diff --git a/English.lproj/VLDocument.xib b/English.lproj/VLDocument.xib index 9d66833..70ef153 100644 --- a/English.lproj/VLDocument.xib +++ b/English.lproj/VLDocument.xib @@ -1,18 +1,19 @@ - + 1040 9C7010 - 629 + 652 949.26 352.00 YES + YES - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin YES @@ -27,8 +28,8 @@ 2 {{25, 304}, {971, 397}} 1886912512 - Window - NSWindow + Window + NSWindow View {3.40282e+38, 3.40282e+38} {890, 350} @@ -52,13 +53,12 @@ 265 {{656, 42}, {82, 26}} - YES -2076049856 16779264 - LucidaGrande + LucidaGrande 1.300000e+01 1044 @@ -66,33 +66,34 @@ 109199615 1 - + LucidaGrande 1.300000e+01 16 - + 400 75 - + - C#m - + YES + YES + + 1048576 2147483647 1 - - NSImage + + NSImage NSMenuCheckmark - - + + NSImage NSMenuMixedState _popUpItemAction: - 1279 YES @@ -105,11 +106,11 @@ C - + 1048576 2147483647 - - + + _popUpItemAction: 1 @@ -118,23 +119,23 @@ YES YES - - + + 1048576 2147483647 - - + + _popUpItemAction: F - + 1048576 2147483647 - - + + _popUpItemAction: -255 @@ -142,11 +143,11 @@ QuKZrQ - + 1048576 2147483647 - - + + _popUpItemAction: -511 @@ -154,11 +155,11 @@ ReKZrQ - + 1048576 2147483647 - - + + _popUpItemAction: -767 @@ -166,11 +167,11 @@ QeKZrQ - + 1048576 2147483647 - - + + _popUpItemAction: -1023 @@ -178,11 +179,11 @@ ROKZrQ - + 1048576 2147483647 - - + + _popUpItemAction: -1279 @@ -190,37 +191,24 @@ R+KZrQ - + 1048576 2147483647 - - + + _popUpItemAction: -1535 - - - YES - YES - - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - + G - + 1048576 2147483647 - - + + _popUpItemAction: 257 @@ -228,11 +216,11 @@ D - + 1048576 2147483647 - - + + _popUpItemAction: 513 @@ -240,11 +228,11 @@ A - + 1048576 2147483647 - - + + _popUpItemAction: 769 @@ -252,11 +240,11 @@ E - + 1048576 2147483647 - - + + _popUpItemAction: 1025 @@ -264,11 +252,11 @@ B - + 1048576 2147483647 - - + + _popUpItemAction: 1281 @@ -276,11 +264,11 @@ F# - + 1048576 2147483647 - - + + _popUpItemAction: 1537 @@ -289,23 +277,23 @@ YES YES - - + + 1048576 2147483647 - - + + _popUpItemAction: Am - + 1048576 2147483647 - - + + _popUpItemAction: 255 @@ -314,23 +302,23 @@ YES YES - - + + 1048576 2147483647 - - + + _popUpItemAction: Dm - + 1048576 2147483647 - - + + _popUpItemAction: -1 @@ -338,11 +326,11 @@ Gm - + 1048576 2147483647 - - + + _popUpItemAction: -257 @@ -350,11 +338,11 @@ Cm - + 1048576 2147483647 - - + + _popUpItemAction: -513 @@ -362,11 +350,11 @@ Fm - + 1048576 2147483647 - - + + _popUpItemAction: -769 @@ -374,11 +362,11 @@ QuKZrW0 - + 1048576 2147483647 - - + + _popUpItemAction: -1025 @@ -386,11 +374,11 @@ ReKZrW0 - + 1048576 2147483647 - - + + _popUpItemAction: -1281 @@ -399,23 +387,23 @@ YES YES - - + + 1048576 2147483647 - - + + _popUpItemAction: Em - + 1048576 2147483647 - - + + _popUpItemAction: 511 @@ -423,11 +411,11 @@ Bm - + 1048576 2147483647 - - + + _popUpItemAction: 767 @@ -435,24 +423,36 @@ F#m - + 1048576 2147483647 - - + + _popUpItemAction: 1023 - + + + C#m + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 1279 + + G#m - + 1048576 2147483647 - - + + _popUpItemAction: 1535 @@ -460,11 +460,11 @@ D#m - + 1048576 2147483647 - - + + _popUpItemAction: 1791 @@ -483,7 +483,6 @@ 265 {{740, 42}, {91, 26}} - YES -2076049856 @@ -493,7 +492,7 @@ 109199615 1 - + @@ -502,12 +501,12 @@ 4/4 - + 1048576 2147483647 1 - - + + _popUpItemAction: 1028 @@ -523,11 +522,11 @@ 6/8 - + 1048576 2147483647 - - + + _popUpItemAction: 1544 @@ -535,11 +534,11 @@ 3/4 - + 1048576 2147483647 - - + + _popUpItemAction: 772 @@ -547,11 +546,11 @@ 12/8 - + 1048576 2147483647 - - + + _popUpItemAction: 3080 @@ -559,11 +558,11 @@ 5/4 - + 1048576 2147483647 - - + + _popUpItemAction: 1284 @@ -581,7 +580,6 @@ 265 {{833, 42}, {130, 26}} - YES -2076049856 @@ -591,7 +589,7 @@ 109199615 1 - + @@ -600,12 +598,12 @@ 12 - + 1048576 2147483647 1 - - + + _popUpItemAction: 12 @@ -620,11 +618,11 @@ 2 (Straight) - + 1048576 2147483647 - - + + _popUpItemAction: 2 @@ -632,11 +630,11 @@ 3 (Swing) - + 1048576 2147483647 - - + + _popUpItemAction: 3 @@ -644,35 +642,35 @@ 4 (Sixteenths) - + 1048576 2147483647 - - + + _popUpItemAction: 4 - 6 - + 6 + 1048576 2147483647 - - + + _popUpItemAction: 6 - 8 - + 8 + 1048576 2147483647 - - + + _popUpItemAction: 8 @@ -692,7 +690,6 @@ 256 {{92, 45}, {350, 22}} - YES -1804468671 @@ -703,7 +700,7 @@ YES 6 - System + System textBackgroundColor 3 @@ -712,7 +709,7 @@ 6 - + System textColor 3 @@ -726,7 +723,6 @@ 256 {{13, 47}, {54, 17}} - YES 67239424 @@ -736,7 +732,7 @@ 6 - + System controlColor 3 @@ -745,7 +741,7 @@ 6 - + System controlTextColor @@ -756,7 +752,6 @@ 256 {{13, 22}, {114, 17}} - YES 67239424 @@ -773,12 +768,11 @@ 256 {{92, 20}, {142, 22}} - YES -1804468671 272630784 - Dizzy Gillespie + Dizzy Gillespie YES @@ -791,7 +785,6 @@ 256 {{246, 22}, {57, 17}} - YES 67239424 @@ -808,12 +801,11 @@ 256 {{300, 20}, {142, 22}} - YES -1804468671 272630784 - + Dizzy Gillespie YES @@ -826,7 +818,6 @@ 256 {{447, 47}, {57, 17}} - YES 67239424 @@ -843,7 +834,6 @@ 256 {{501, 45}, {33, 22}} - YES -1804468671 @@ -861,7 +851,6 @@ 256 {{539, 42}, {19, 27}} - YES 917024 @@ -880,7 +869,6 @@ 256 {{447, 22}, {57, 17}} - YES 67239424 @@ -897,7 +885,6 @@ 256 {{498, 18}, {130, 26}} - YES -2076049856 @@ -907,7 +894,7 @@ 109199615 1 - + @@ -916,12 +903,12 @@ Select... - + 1048576 2147483647 1 - - + + _popUpItemAction: 1 @@ -938,34 +925,34 @@ YES YES - - + + 1048576 2147483647 - - + + _popUpItemAction: Swing - + 1048576 2147483647 - - + + _popUpItemAction: BossaNova - + 1048576 2147483647 - - + + _popUpItemAction: @@ -980,19 +967,17 @@ {989, 80} - {{-3, 319}, {989, 80}} - - {0, 0} + {0, 0} 67239424 0 Title - + LucidaGrande 1.100000e+01 3100 @@ -1023,14 +1008,12 @@ 274 {988, 328} - VLSheetView - NSView + NSView {{1, 1}, {954, 328}} - @@ -1041,9 +1024,8 @@ 256 {{955, 1}, {15, 312}} - - _doScroller: + _doScroller: 1.000000e+00 2.560976e-01 @@ -1052,17 +1034,15 @@ 256 {{1, 329}, {954, 15}} - YES 1 - + _doScroller: 9.655870e-01 {{0, -17}, {971, 345}} - 178 @@ -1084,12 +1064,11 @@ 258 {{10, 6}, {271, 22}} - YES -1804468671 138413056 - + YES @@ -1102,7 +1081,6 @@ 257 {{289, 4}, {19, 23}} - YES 67239424 @@ -1117,8 +1095,8 @@ -2038021889 32 - - + + 400 75 @@ -1128,7 +1106,6 @@ 257 {{311, 4}, {19, 23}} - YES 67239424 @@ -1139,8 +1116,8 @@ -2038021889 32 - - + + 400 75 @@ -1148,13 +1125,11 @@ {336, 37} - {{627, 330}, {336, 37}} - - + {0, 0} 67239424 0 @@ -1175,7 +1150,6 @@ {971, 397} - {{0, 0}, {1280, 778}} {890, 372} @@ -1198,7 +1172,7 @@ {3.40282e+38, 3.40282e+38} {213, 107} - + 256 YES @@ -1211,9 +1185,9 @@ 67239424 134217728 - Preview + Preview - + LucidaGrande 1.000000e+01 16 @@ -1221,11 +1195,11 @@ -2037628673 2 - + NSImage music - - + Preview + 400 75 @@ -1239,17 +1213,17 @@ 67239424 134217728 - Show Log + Show Log -2037628673 2 - + NSImage console - - + Show Log + 400 75 @@ -1263,17 +1237,17 @@ 67239424 134217728 - Play + Play -2037628673 - 2 + 130 - - run + NSImage + play - - + Play + 400 75 @@ -1287,17 +1261,17 @@ 67239424 134217728 - Zoom In + Zoom In -2037628673 2 - + NSImage zoomin - - + Zoom In + 400 75 @@ -1311,17 +1285,17 @@ 67239424 134217728 - Zoom Out + Zoom Out -2037628673 2 - + NSImage zoomout - - + Zoom Out + 400 75 @@ -1335,17 +1309,17 @@ 67239424 134217728 - Stop + Stop -2037628673 - 2 + 130 - + NSImage stop - - + Stop + 400 75 @@ -1368,23 +1342,124 @@ 67239424 134217728 - Display + Display -2037628673 2 - + NSImage display - - + Display + + 400 + 75 + + + + + 256 + {{218, 94}, {58, 56}} + + 1 + YES + + 67239424 + 134217728 + Fwd + + + -2037628673 + 130 + + NSImage + fwd + + Fwd + + 400 + 75 + + + + + 256 + {{329, 94}, {58, 56}} + + -1 + YES + + 67239424 + 134217728 + Rew + + + -2037628673 + 130 + + NSImage + bck + + Rew + + 400 + 75 + + + + + 256 + {{218, 31}, {58, 56}} + + -2 + YES + + 67239424 + 134217728 + Start + + + -2037628673 + 130 + + NSImage + tobeg + + Start + + 400 + 75 + + + + + 256 + {{329, 31}, {58, 56}} + + 2 + YES + + 67239424 + 134217728 + End + + + -2037628673 + 130 + + NSImage + toend + + End + 400 75 {480, 360} + {{0, 0}, {1280, 778}} {213, 129} @@ -1395,7 +1470,7 @@ 2 {{515, 195}, {338, 127}} 1886912512 - + Window NSWindow @@ -1434,7 +1509,7 @@ -1804468671 -1874852864 - 2 + 2 @@ -1459,7 +1534,7 @@ YES - 0 + 0 YES @@ -1470,9 +1545,9 @@ - . + . - , + , 0 1 @@ -1489,16 +1564,16 @@ 1 AgAAAAAAAAAAAAAAAAAAAA - -0 + -0 LeKIng - - + + 0 K+KIng - - + 0 + -0 @@ -1512,8 +1587,8 @@ - - + . + , NO YES YES @@ -1574,8 +1649,8 @@ -2038284033 1 - - fw + + fw 200 25 @@ -1590,15 +1665,15 @@ 67239424 134217728 - Cancel + Cancel 1001 -2038284033 1 - - Gw + + Gw 200 25 @@ -1613,15 +1688,15 @@ -2080244224 134217728 - Repeat + Repeat 1000 -2038284033 1 - - DQ + + DQ 200 25 @@ -1638,8 +1713,8 @@ 2 {{503, 135}, {372, 142}} 1886912512 - - + Window + NSWindow View @@ -1683,8 +1758,8 @@ -2038284033 1 - - + + fw 200 25 @@ -1699,15 +1774,15 @@ 67239424 134217728 - + Cancel 1001 -2038284033 1 - - + + Gw 200 25 @@ -1729,8 +1804,8 @@ -2038284033 1 - - + + DQ 200 25 @@ -1767,14 +1842,14 @@ YES - 1 + 1 2.000000e+01 2.000000e+01 2.000000e+01 75628032 134217728 - + 1 3 @@ -1782,7 +1857,7 @@ 6 - + System headerTextColor @@ -1790,9 +1865,9 @@ 67239424 0 - + - + LucidaGrande 1.200000e+01 16 @@ -1920,14 +1995,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + 2 2.000000e+01 2.000000e+01 2.000000e+01 75628032 134217728 - + 2 @@ -1935,17 +2010,17 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - - + + NSImage NSSwitch - + 400 75 @@ -1953,18 +2028,18 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - 4 + 4 2.000000e+01 2.000000e+01 2.000000e+01 67239424 134217728 - 3 + 3 6 - + System headerColor @@ -1973,14 +2048,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - + - + 400 75 @@ -1988,14 +2063,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + 8 2.000000e+01 2.000000e+01 2.000000e+01 67239424 134217728 - + 4 @@ -2003,14 +2078,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - + - + 400 75 @@ -2018,14 +2093,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - 16 + 16 2.000000e+01 2.000000e+01 2.000000e+01 67239424 134217728 - 5 + 5 @@ -2033,14 +2108,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - + - + 400 75 @@ -2055,7 +2130,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 134217728 - + 6 @@ -2063,14 +2138,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - + - + 400 75 @@ -2085,7 +2160,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 134217728 - 7 + 7 @@ -2093,14 +2168,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - + - + 400 75 @@ -2115,7 +2190,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 134217728 - + 8 @@ -2123,14 +2198,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 0 - + 1211912703 2 - + - + 400 75 @@ -2143,7 +2218,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 6 - + System gridColor 3 @@ -2164,7 +2239,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 6 - + System controlBackgroundColor @@ -2176,7 +2251,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA{{-100, -100}, {15, 37}} - + _doScroller: 1.947368e-01 @@ -2186,7 +2261,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 1 - + _doScroller: 9.904762e-01 @@ -2228,8 +2303,8 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA2 {{417, 204}, {543, 189}} 1886912512 - - + Window + NSWindow View @@ -2250,15 +2325,15 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239424 134217728 - + Cancel 1001 -2038284033 1 - - + + Gw 200 25 @@ -2280,8 +2355,8 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA-2038284033 1 - - + + DQ 200 25 @@ -2326,7 +2401,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA109199615 1 - + @@ -2334,13 +2409,13 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA75 - - + 0 + 1048576 2147483647 1 - - + + _popUpItemAction: @@ -2354,45 +2429,45 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - - + 1 + 1048576 2147483647 - - + + _popUpItemAction: - - + 2 + 1048576 2147483647 - - + + _popUpItemAction: - - + 3 + 1048576 2147483647 - - + + _popUpItemAction: - - + 4 + 1048576 2147483647 - - + + _popUpItemAction: @@ -2434,7 +2509,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA109199615 1 - + @@ -2442,13 +2517,13 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA75 - - + 0 + 1048576 2147483647 1 - - + + _popUpItemAction: @@ -2462,45 +2537,45 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - - + 1 + 1048576 2147483647 - - + + _popUpItemAction: - - + 2 + 1048576 2147483647 - - + + _popUpItemAction: - - + 3 + 1048576 2147483647 - - + + _popUpItemAction: - - + 4 + 1048576 2147483647 - - + + _popUpItemAction: @@ -2558,7 +2633,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA109199615 1 - + @@ -2566,13 +2641,13 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA75 - - + 8 + 1048576 2147483647 1 - - + + _popUpItemAction: @@ -2585,89 +2660,89 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAAYES - - + 0 + 1048576 2147483647 - - + + _popUpItemAction: - - + 1 + 1048576 2147483647 - - + + _popUpItemAction: - - + 2 + 1048576 2147483647 - - + + _popUpItemAction: - - + 3 + 1048576 2147483647 - - + + _popUpItemAction: - - + 4 + 1048576 2147483647 - - + + _popUpItemAction: - - + 5 + 1048576 2147483647 - - + + _popUpItemAction: - - + 6 + 1048576 2147483647 - - + + _popUpItemAction: - - + 7 + 1048576 2147483647 - - + + _popUpItemAction: @@ -2688,7 +2763,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA {{17, 53}, {246, 116}} - + {0, 0} 67239424 0 @@ -2725,7 +2800,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 343014976 272630784 - + 6 YES @@ -2736,9 +2811,9 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA YES -1 - - - + 0 + 1 + 2 @@ -2758,7 +2833,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 75628032 0 - + 3 @@ -2769,7 +2844,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 338820672 1024 - + 1 YES @@ -2823,7 +2898,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 67239488 272630784 - + @@ -2871,7 +2946,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 343014976 272630784 - + 6 YES @@ -2881,10 +2956,10 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAAYES YES - - - - + 4 + 5 + 6 + 7 @@ -2904,7 +2979,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 75628032 0 - + 3 @@ -2962,7 +3037,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAAYES YES - + 16 18 20 22 @@ -2985,7 +3060,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 75628032 0 - + 3 @@ -3047,7 +3122,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA {{293, 56}, {233, 112}} - + {0, 0} 67239424 0 @@ -3084,7 +3159,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAAYES - delegate + delegate @@ -3116,7 +3191,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - hideFieldEditor: + hideFieldEditor: @@ -3124,7 +3199,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + hideFieldEditor: @@ -3148,14 +3223,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: editTarget.stringValue + value: editTarget.stringValue - - value + value: editTarget.stringValue + value editTarget.stringValue 2 @@ -3164,7 +3239,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + delegate @@ -3172,13 +3247,13 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - hidden: editTarget + hidden: editTarget - + hidden: editTarget hidden editTarget @@ -3232,14 +3307,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.songTitle + value: document.songTitle - - + value: document.songTitle + value document.songTitle 2 @@ -3248,14 +3323,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.songComposer + value: document.songComposer - - + value: document.songComposer + value document.songComposer 2 @@ -3264,28 +3339,20 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.songLyricist + value: document.songLyricist - - + value: document.songLyricist + value document.songLyricist 2 170 - - - play: - - - - 174 - playToolItem @@ -3296,15 +3363,15 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.songTempo + value: document.songTempo - - - document.songTempo + value: document.songTempo + value + document.songTempo 2 @@ -3312,15 +3379,15 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + value: document.songTempo - - - + value: document.songTempo + value + document.songTempo 2 @@ -3360,15 +3427,15 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.repeatVolta + value: document.repeatVolta - - - document.repeatVolta + value: document.repeatVolta + value + document.repeatVolta 2 @@ -3376,15 +3443,15 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + value: document.repeatVolta - - - + value: document.repeatVolta + value + document.repeatVolta 2 @@ -3432,7 +3499,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + delegate @@ -3456,7 +3523,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - selectGroove: + selectGroove: @@ -3480,7 +3547,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + selectGroove: @@ -3488,14 +3555,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - selectedIndex: editNumTopLedgers + selectedIndex: editNumTopLedgers - - selectedIndex + selectedIndex: editNumTopLedgers + selectedIndex editNumTopLedgers 2 @@ -3504,14 +3571,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - selectedIndex: editNumBotLedgers + selectedIndex: editNumBotLedgers - - + selectedIndex: editNumBotLedgers + selectedIndex editNumBotLedgers 2 @@ -3520,14 +3587,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - selectedIndex: editNumStanzas + selectedIndex: editNumStanzas - - + selectedIndex: editNumStanzas + selectedIndex editNumStanzas 2 @@ -3544,7 +3611,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - endSheetWithButton: + endSheetWithButton: @@ -3552,7 +3619,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3560,7 +3627,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3568,7 +3635,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3576,7 +3643,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3584,7 +3651,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3592,7 +3659,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3600,7 +3667,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + endSheetWithButton: @@ -3648,14 +3715,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.lyricSize + value: document.lyricSize - - + value: document.lyricSize + value document.lyricSize 2 @@ -3664,14 +3731,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.chordSize + value: document.chordSize - - + value: document.chordSize + value document.chordSize 2 @@ -3680,14 +3747,14 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - value: document.staffSize + value: document.staffSize - - + value: document.staffSize + value document.staffSize 2 @@ -3710,6 +3777,78 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA 100386 + + + fwdToolItem + + + + 100436 + + + + bckToolItem + + + + 100437 + + + + tobegToolItem + + + + 100438 + + + + toendToolItem + + + + 100439 + + + + playMusic: + + + + 100440 + + + + playMusic: + + + + 100441 + + + + playMusic: + + + + 100442 + + + + playMusic: + + + + 100443 + + + + playMusic: + + + + 100444 + @@ -3824,9 +3963,13 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + + + + + @@ -3906,7 +4049,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + Repeat 197 @@ -4188,7 +4331,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - + Display 267 @@ -5323,6 +5466,62 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA + + 100428 + + + YES + + + + + + 100429 + + + + + 100430 + + + YES + + + + + + 100431 + + + + + 100432 + + + YES + + + + + + 100433 + + + + + 100434 + + + YES + + + + + + 100435 + + + @@ -5360,6 +5559,18 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA100425.IBPluginDependency 100426.IBPluginDependency 100427.IBPluginDependency + 100428.IBAttributePlaceholdersKey + 100428.IBPluginDependency + 100428.ImportedFromIB2 + 100430.IBAttributePlaceholdersKey + 100430.IBPluginDependency + 100430.ImportedFromIB2 + 100432.IBAttributePlaceholdersKey + 100432.IBPluginDependency + 100432.ImportedFromIB2 + 100434.IBAttributePlaceholdersKey + 100434.IBPluginDependency + 100434.ImportedFromIB2 101.IBPluginDependency 101.ImportedFromIB2 102.IBPluginDependency @@ -5368,6 +5579,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA114.ImportedFromIB2 130.IBPluginDependency 130.ImportedFromIB2 + 144.IBEditorWindowLastContentRect 144.IBPluginDependency 144.IBWindowTemplateEditedContentRect 144.ImportedFromIB2 @@ -5491,6 +5703,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA238.ImportedFromIB2 239.IBPluginDependency 239.ImportedFromIB2 + 24.IBEditorWindowLastContentRect 24.IBPluginDependency 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect @@ -5628,6 +5841,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA47.ImportedFromIB2 48.IBPluginDependency 48.ImportedFromIB2 + 5.IBEditorWindowLastContentRect 5.IBPluginDependency 5.IBWindowTemplateEditedContentRect 5.ImportedFromIB2 @@ -5675,397 +5889,440 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA YES - - - - - - - - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - {{687, 67}, {480, 360}} - - - {3.40282e+38, 3.40282e+38} - {213, 107} - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Stop Playback + + + com.apple.InterfaceBuilder.CocoaPlugin - ToolTip + ToolTip - + ToolTip + + Stop Playback + + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + Stop Playback + + + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + Stop Playback + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{56, 92}, {480, 360}} + com.apple.InterfaceBuilder.CocoaPlugin + {{56, 92}, {480, 360}} + + {{687, 67}, {480, 360}} + + + {3.40282e+38, 3.40282e+38} + {213, 107} + com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip Typeset and Show Lead Sheet - + com.apple.InterfaceBuilder.CocoaPlugin - + ToolTip - + ToolTip Show Console Log - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + ToolTip - + ToolTip Play the Song - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + ToolTip - + ToolTip - + Zoom In - + com.apple.InterfaceBuilder.CocoaPlugin - + ToolTip - + ToolTip - + Zoom Out - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - - + {3.40282e+38, 3.40282e+38} + {213, 107} + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - - + {3.40282e+38, 3.40282e+38} + {213, 107} + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{642, 151}, {104, 573}} + com.apple.InterfaceBuilder.CocoaPlugin {{608, 171}, {117, 573}} - + ToolTip - + ToolTip Stop Playback - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - {{245, 314}, {543, 189}} + com.apple.InterfaceBuilder.CocoaPlugin + {{245, 314}, {543, 189}} - + {{245, 314}, {543, 189}} - - - + {3.40282e+38, 3.40282e+38} + {213, 107} + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + ToolTip - + ToolTip Set Display and Print Options - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - {{-34, 357}, {971, 397}} + {{0, 337}, {971, 397}} + com.apple.InterfaceBuilder.CocoaPlugin + {{0, 337}, {971, 397}} {{-34, 357}, {971, 397}} - + {3.40282e+38, 3.40282e+38} {890, 350} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{751, 588}, {103, 103}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{844, 568}, {163, 123}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin @@ -6089,58 +6346,25 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - 100427 + 100444 YES - VLSheetWindow - NSWindowController + FirstResponder - YES - - YES - - - YES - - - - YES - - YES - displayToolItem - logToolItem - outputToolItem - playToolItem - progressToolItem - sheetView - stopToolItem - zoomInToolItem - zoomOutToolItem - - - YES - id - - - - - - - - - + playMusic: + id - IBProjectSource - Sources/VLSheetWindow.h + IBUserSource + VLSheetView - + NSView YES @@ -6152,16 +6376,18 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAAsetDivisions: setKey: setTime: + transposeOctave: YES - - - - - - - + id + id + id + id + id + id + id + id @@ -6181,78 +6407,46 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA YES - - - - - - - - - - + id + id + id + id + id + id + id + id + id + id - + IBProjectSource Sources/VLSheetView.h VLSheetView - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - + IBProjectSource Sources/VLSheetViewChords.h VLSheetView - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - + IBProjectSource Sources/VLSheetViewLyrics.h VLSheetView - + + IBProjectSource + Sources/VLSheetViewNotes.h + + + + VLSheetView YES @@ -6269,1098 +6463,69 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA YES - - - - - - - - - - - - - YES - - YES - - - YES + id + id + id + id + id + id + id + id + id - + IBProjectSource Sources/VLSheetViewSelection.h - VLSheetView - - - YES - - YES - - - YES - - + VLSheetWindow + NSWindowController YES - + YES + bckToolItem + displayToolItem + fwdToolItem + logToolItem + outputToolItem + playToolItem + progressToolItem + sheetView + stopToolItem + tobegToolItem + toendToolItem + zoomInToolItem + zoomOutToolItem YES + id + id + id + id + id + id + id + id + id + id + id + id + id - - Sources/VLSheetViewNotes.h + IBProjectSource + Sources/VLSheetWindow.h 0 - ../../VocalEasel.xcodeproj + ../VocalEasel.xcodeproj 3 - - YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEFiQALAAwAMQA1ADYAPAA9 -AEEARQCOAJYApQC3AAsAuAC5ALoAvgDaANsAmgDcAOAA5ADlAOYA7AD0AP0A/gEOAQ8BFwEYARsBJQEm -AScBLAEuATMBNAE3ATsBPwFIAUkBXQFeAV8BYAFjAWYBbgFvAXcBeAF5AYEBggGLAYwBjQGhAakBswG3 -AdQB1QHcAeUB5gHpAe4B7wHyAf0CDAINAhQCGQIcAiECIgIlAjACNQI9Aj4CQgHEAkcCSwJMAlACUwJW -AlkCXAJgAmECZAJnAm4CbwJ1An0CWwJgAoIChQKMAo0CkwKUApkCmgKdAqUCrAKtArMCuwLCAsMCyQLK -AtIC2QLaAuAC4QLpAvAC8QL3AvgDAAMJAwoDEAMYAx0DHgMhAyMDJAMpAyoDLQM4AzkDOgM9A0UDRgNK -A0sDTANPA1ADUgNTAOQDVANXA1gDXANhA2gDbQNuA3YDdwN4A3sDgAOJA5ADkQOcA6EDogOnA6gDqQOt -A7QDuQO6A8MDxAPIA8wDzQPOA9MD2APfA+AD6APtA/QD+QP6BAIEBwQaBB8EIAQkBCUEKQQqBCsEPwRB -BEIERwRTBFQEVgDkAOUEWARiBGkEagRxBHIEeQR6BIUEpwTGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTS -BNME3gFUBOEE5gTnBOgE6QSmBOsE8AT0BPcE+gGABPsE/AT/AV4FAgUGBQcFCgURBRIFHgUhBSQFKwUs -BTMFNAU7BTwFRAVFA1IDUwDkBUYFRwVLBVIFUwVbBVwFYAVhBWIFZwVoBW0FbgVzBXgFfwWABYgFiQWN -BY4FjwWTBZoFmwWjBaQFqAWpBaoFrwW2BbcFvwXABcQFxQXGBcsF1AXbBdwF6QXsBe4F+AX8BCoF/QYA -BggGEgQqBhMGHQQqBh4GKAQqBikGMwQqBjQGNgY6Bj0GPgZDBksGTAZaBlwGZgZqBCoGawZtBnYGfwQq -BoAGiQQqBooGkwQqBpQEKgadBCoGpwaoBqwGswa0BrwGvQbBBsIGwwbIBtAG0QbeBuAG6gbuBCoG7wbx -BxMHHAQqBx0EKgcqBzQEKgc1Bz8EKgdAB0oEKgdLB1UEKgdWB2AEKgdhB2sEKgdsBCoHdweBBCoHggeM -BCoHjQeXBCoHmAeiBCoHowetBCoHrge4BCoHuQQqB8QHzgQqB88EKgfaB+MEKgfkB+4EKgfvB/kEKgf6 -CAQEKggFCA8EKggQCBoEKggbBCoIJggwBCoIMQg7BCoIPAhGBCoIRwhRBCoIUghcBCoIXQheCGMIZAhp -CGoIbwh2CHcIfwiACIQIhQiGCIsIjAiRCJkImgicCJ4IpQQqCLAIuQQqCLoIwwQqCMQIxQjKCMsI0AjR -CNYI2wjnCOgA5ADlCOoI8Qj4CPkJAQkCCRMJFwkdCScJLgkvCTYJNwk+CT8JSwlNCVYEKglaCVwJZAQq -CW0EKgl2BCoJfwQqCYgJjwmQCZcJmAmfCaAJrAmuCbcEKgm7Cb0JxQQqCc4EKgnXBCoJ4AQqCekJ8Anx -CfgJ+QoACgEKCAoJChAKEQodCh8KKAQqCiwKLgo6BCoKQwQqCkwEKgpVBCoKXgQqCmcEKgpwBCoKeQQq -CoIKgwqECoUKiwqMCo8KkgqcCqAKpgqxCrkKugrMCtMK1AALCucACwroCuwK9gr8Cv4LCAsJCwwLDwsS -CxkLGgsiCyMLKgsrCzILOQs6C0ELQgtJC0oLUQtSC1kLWgtmC20ACwrnAAsLfAuAC4cLjQuPCwgLlgud -C54LqgurC7ILswu0C7UACwrnAAsLxAvIC88L1QvXCwgL3gvlC+YL7QvuC+8L8Av2C/cL+QNSA1MA5Av6 -C/sMAAwBDAYMBwwMDBEMHQDfAOQMHgwfDCYMLAw4DDwMTQxVDFYMXgxfDGcMaAxvDHAMeAx5DIAMgQyJ -DIoMkgyTDJsMnAyjDKQMrAytDLUMvQy+DMUMxgzODM8M1wzYDOAM4QzoDPAM8Qz4DPkM+gz7DQENAg0E -DRANFg0aDRsNJQ0mDTANMQ0yDT4NQg1IDVANUQ1bDVwNYA1hDWkNag1yDXMNdA11DXsNfA1+AAsDUg1/ -AOQNgA2FDYYNiw2MDZENlQ2WDZsNnA2hDaYNpw2sDbENsg23DcINxA3HDcgNyw3MDdEN0g3XDdwN3Q3h -DeIN5w3oDfIN8w30DfUN+A3/DgAOAQ4IDgkOCg4LDhIOEw4UDhsOHA4dDiQOJQ4mDi0OLg4vDjYOPQ4+ -Dj8ORg5HDkgOTw5WDlcOWA5hDmIOYw5kDmoOaw5sDnMOdA51DnwOfQ5+DoUOhg6HDooOjw6QDpUOlg6b -DqAOpQ6mDqsOrA+KD5YPlw+ZD5sA5ADlD50PqANSA1MA5A+pD60PsQ+0D7UQkxFyElESUhJTElQSVRJW -ElcSWBJZEloSWxJcEl0SXhJfEmASYRJiEmMSZBJlEmYSZxJoEmkSahJrEmwSbRJuEm8ScBJxEnIScxJ0 -EnUSdhJ3EngSeRJ6EnsSfBJ9En4SfxKAEoESghKDEoQShRKGEocSiBKJEooSixKMEo0SjhKPEpASkRKS -EpMSlBKVEpYSlxKYEpkSmhKbEpwSnRKeEp8SoBKhEqISoxKkEqUSphKnEqgSqRKqEqsSrBKtEq4SrxKw -ErESshKzErQStRK2ErcSuBK5EroSuxK8Er0SvhK/EsASwRLCEsMSxBLFEsYSxxLIEskSyhLLEswSzRLO -Es8S0BLREtIS0xLUEtUS1hLXEtgS2RLaEtsS3BLdEt4S3xLgEuES4hLjEuQS5RLmEucS6BLpEuoS6xLs -Eu0S7hLvEvAS8RLyEvMS9BL1EvYS9xL4EvkS+hL7EvwS/RL+Ev8TABMBEwITAxMEEwUTBhMHEwgTCRMK -EwsTDBMNEw4TDxMQExETEhMTExQTFRMWExcTGBMZExoTGxMcEx0THhMfEyATIRMiEyMTJBMlEyYTJxMo -EykTKhMrEy4TMRRWFXsVfBV9FX4VfxWAFYEJDxWCFYMVhBWFFYYA6xWHFYgViRWKFYsVjBWNFY4VjxWQ -FZEVkhWTFZQVlRWWFZcVmBWZFZoVmxWcFZ0VnhWfFaAVoRWiFaMVpBWlFaYVpxWoFakVqhWrFawVrRWu -Fa8VsBWxASIVshWzFbQVtRW2FbcVuBW5FboVuxW8Fb0VvgOFFb8VwBXBFcIVwxXEFcUVxhXHFcgVyRXK -FcsVzBXNFc4VzxXQFdEV0hXTFdQV1RXWFdcV2BXZFdoV2xXcFd0V3hXfFeAV4RXiFeMV5BXlFeYV5xXo -FekV6hXrFewV7RXuAVoV7xXwFfEV8hXzDQkV9BX1FfYV9xX4FfkV+gfNFfsV/BX9Ff4V/xYAFgEWAhYD -FgQWBRYGFgcWCBYJFgoWCxYMFg0WDhYPFhAGWRYRFhIWEwq2FhQWFRYWDDMWFxYYAVMWGQXQFhoWGxYc -Fh0WHhYfFiAWIRYiFiMWJBYlFiYWJxYoFikWKhYrFiwWLRYuFi8WMBYxFjIWMxY0FjUWNhY3FjgWORY6 -FjsWPBY9Fj4WPxZAFkEWQhZDFkQWRRZGFkcWSAeAFkkWShZLFkwCKRZNFk4WTxZQFlEWUhZTFlQWVRZW -FlcWWBZZFloWWxZcFl0WXhZfFmAWYRZiFmMWZBZlFmYWZxZoFmkWahZrFmwWbRZuFm8WcBZxFnIWcxZ0 -FnUWdhZ3FngWeQ1UFnoWexZ8Fn0WfhZ/FoAWgRaCFoMWhBaFFoYWhxaIFokWihaLFowWjRaOFpEWlBaX -VSRudWxs3xASAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUA -JgAnACgAKQAqACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nl -c1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5 -c1tOU0ZyYW1ld29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNj -ZXNzaWJpbGl0eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09i -amVjdHNWYWx1ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVz -gAKBBYiBA3GBBGCBBYeACIEDg4AFgQRfgQRhgQOEgQWFgACABoEDgoEFhhIAAYhUgQRi0gAOADIAMwA0 -W05TQ2xhc3NOYW1lgASAA11WTFNoZWV0V2luZG930gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25hbWWi -ADoAO15OU0N1c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBaTlMu -b2JqZWN0c4AHoNIANwA4AEIAQ6MAQwBEADtcTlNNdXRhYmxlU2V0VU5TU2V00gAOAD4ARgBHgF+vEEYA -SABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUA -ZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgB/AIAAgQCCAIMA -hACFAIYAhwCIAIkAigCLAIwAjYAJgKeAr4C5gMOAxIDIgM2A2YEBH4EBJ4EBKYEBK4EBLIEBNIEBPIEB -RIEBYYEBeoEBgoEB44EB5YEB54EB74EB8YECAIECAoECBIECBYECuYECu4ECvYECvoEDFIEDFoEDGIED -GYEDG4EDHYEDHoEDIIEDIYEDI4EDKoEDLIEDLYEDL4EDMYEDM4EDOIEDO4EDP4EDQoEDRYEDSIEDS4ED -TIEDT4EDUoEDU4EDVoEDXYEDYIEDY4EDZ4EDaYEDa4EDbIEDbYEDb9QADgCPAJAAkQCSAJMAlACVXU5T -RGVzdGluYXRpb25YTlNTb3VyY2VXTlNMYWJlbICmgBGACoCl2ACXAA4AmACZAJoAMgCbAJwAnQCeAJ8A -oAChAKIAowCdXxAPTlNOZXh0UmVzcG9uZGVyWE5TdkZsYWdzW05TRnJhbWVTaXplWE5TV2luZG93W05T -RXh0ZW5zaW9uW05TU3VwZXJ2aWV3gAuAEBEBEoAMgA2ADoAPgAvbAJcADgCmAKcAqACYAKkAmgCqAJwA -qwCsAK0ArgCvALAAsQCUAKEAtACsAJRXTlNGcmFtZVlOU2N2RmxhZ3NaTlNTdWJ2aWV3c1lOU0RvY1Zp -ZXdZTlNCR0NvbG9yXU5TTmV4dEtleVZpZXeBAvSAlIEC9xAEgQL2EQgAgAqADYAigQL0gApaezk4OCwg -MzI4fVtWTFNoZWV0Vmlld1ZOU1ZpZXfSADcAOAC7ALykALwAuQC9ADtcTlNDdXN0b21WaWV3W05TUmVz -cG9uZGVy3gC/AA4AwADBAMIAwwDEAMUAxgDHAMgAyQDKAMsAzADNAM4AzwDQANEA0gDTANQA1QDWANcA -2ADZXE5TV2luZG93Vmlld18QFk5TV2luZG93Q29udGVudE1heFNpemVcTlNTY3JlZW5SZWN0XU5TV2lu -ZG93VGl0bGVZTlNXVEZsYWdzXU5TV2luZG93Q2xhc3NfEBZOU1dpbmRvd0NvbnRlbnRNaW5TaXplXE5T -V2luZG93UmVjdFlOU01heFNpemVfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dpbmRvd1N0eWxlTWFza1lO -U01pblNpemVbTlNWaWV3Q2xhc3OAGYCkgBeAoYATEnB4AACAFIAYgBKAoxACEAeAooAVXxAYe3s1MDMs -IDEzNX0sIHszNzIsIDE0Mn19VldpbmRvd9IADgDdAN4A31lOUy5zdHJpbmeAFlRWaWV30gA3ADgA4QDi -owDiAOMAO18QD05TTXV0YWJsZVN0cmluZ1hOU1N0cmluZ18QGnszLjQwMjgyZSszOCwgMy40MDI4MmUr -Mzh9WnsyMTMsIDEwN33VAJcADgCmAKgAmAArAOgA6QDqAOuAAICggJ+AGhEBANIADgA+AEYA7oBfpQDv -APAA8QDyAPOAG4AsgDSAOYA+1wCXAA4ApgD1AJgA9gCcAMwA+AD5APoA6wD7AMxWTlNDZWxsWU5TRW5h -YmxlZIAZgCuAHIAdCYAZXxAWe3sxNywgMTA1fSwgezM1NCwgMTd9fdgA/wAOAQABAQECAQMBBAEFAQYB -BwC0AQkBCgDvAQwBDVtOU0NlbGxGbGFnc18QEU5TQmFja2dyb3VuZENvbG9yWk5TQ29udGVudHNZTlNT -dXBwb3J0XU5TQ29udHJvbFZpZXdcTlNDZWxsRmxhZ3MyW05TVGV4dENvbG9yEgQB/gCAKoAigB6AH4Ab -EhBAAACAJ18QNEVuZGluZyBpbiBtZWFzdXJlcyAxIHRocm91Z2ggMTAgYXBwbGllcyB0byByZXBlYXRz -OgrUAA4BEAERARIBEwEUARUBFlZOU1NpemVWTlNOYW1lWE5TZkZsYWdzgCEjQCoAAAAAAACAIBEEFFxM -dWNpZGFHcmFuZGXSADcAOAEZARqiARoAO1ZOU0ZvbnTVAA4BHAEdAR4BHwEgASEBIgEjASRXTlNDb2xv -clxOU0NvbG9yU3BhY2VbTlNDb2xvck5hbWVdTlNDYXRhbG9nTmFtZYAmgCUQBoAkgCNWU3lzdGVtXGNv -bnRyb2xDb2xvctMADgEdASgBIAEqAStXTlNXaGl0ZYAmEANLMC42NjY2NjY2OQDSADcAOAEtARyiARwA -O9UADgEcAR0BHgEfASABMAEiATEBJIAmgCmAKIAjXxAQY29udHJvbFRleHRDb2xvctMADgEdASgBIAEq -ATaAJkIwANIANwA4ATgBOaQBOQE6APUAO18QD05TVGV4dEZpZWxkQ2VsbFxOU0FjdGlvbkNlbGzSADcA -OAE8AT2lAT0BPgC5AL0AO1tOU1RleHRGaWVsZFlOU0NvbnRyb2zYAJcADgCmAPUAmAD2AJwBQADMAUIB -QwFEAOsA+wDMAUdVTlNUYWeAGYAzgC2ALgmAGRED6l8QFXt7MTQsIDEyfSwgezEyOCwgMzJ9fd4A/wAO -AUoBSwFMAU0BTgEBAQIBAwFPAQQBUAFAAQYBUQFSAVMBVAEKAVYBVwEKAPABWgFbAVwBR18QE05TQWx0 -ZXJuYXRlQ29udGVudHNfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNCdXR0b25GbGFnczJfEBBOU0FsdGVy -bmF0ZUltYWdlXxAPTlNLZXlFcXVpdmFsZW50XxAPTlNQZXJpb2RpY0RlbGF5XU5TQnV0dG9uRmxhZ3OA -MoAwEBkQAYAfgDGAL4AfgCwQyBIIAAAAE/////+GgkD/XURlbGV0ZSBFbmRpbmdQUX/SADcAOAFhAWKk -AWIBOgD1ADtcTlNCdXR0b25DZWxs0gA3ADgBZAFlpQFlAT4AuQC9ADtYTlNCdXR0b27YAJcADgCmAPUA -mAD2AJwBQADMAUIBaQFqAOsA+wDMAW2AGYAzgDWANgmAGRED6V8QFXt7MTYzLCAxMn0sIHs4MiwgMzJ9 -fd4A/wAOAUoBSwFMAU0BTgEBAQIBAwFPAQQBUAFAAQYBUQFSAVMBVAEKAXMBdAEKAPEBWgFbAVwBbYAy -gDCAH4A4gDeAH4A0VkNhbmNlbFEb2ACXAA4ApgD1AJgA9gCcAUAAzAFCAXwBfQDrAPsAzAGAgBmAM4A6 -gDsJgBkRA+hfEBZ7ezI0NSwgMTJ9LCB7MTEzLCAzMn193gD/AA4BSgFLAUwBTQFOAQEBAgEDAU8BBAFQ -AUABgwFRAVIBUwFUAQoBhwGIAQoA8gFaAVsBXAGAE/////+EAf4AgDKAMIAfgD2APIAfgDlaQWRkIEVu -ZGluZ1EN3gCXAY4ADgCmAY8BkAGRAKgBkgCYAJwBkwCrAZQAzAGWAZcBmADWAZkBmgGbAZwA6wDMAZ4B -nwGfW05TSFNjcm9sbGVyWE5Tc0ZsYWdzXE5TQ29ybmVyVmlld18QEE5TSGVhZGVyQ2xpcFZpZXdcTlNT -Y3JvbGxBbXRzW05TVlNjcm9sbGVyXU5TQ29udGVudFZpZXeAGYCZgJ6AnYBIgEWAP08QEEEgAABBIAAA -QZgAAEGYAACAGYCVgECAQNIADgA+AEYBo4BfpQGfAZ4BlgGaAZmAQICVgJmARYBI2gCXAA4ApgCnAKgA -mACpAKoAnACrAPMArQGsAK8BrQGuAa8BsADzAa+APoCUgJGAQREJAIBCgJKAPoBC0gAOAD4ARgG1gF+h -Aa+AQt8QEwCXAbgADgG5AboBAAG7AZABvAG9Ab4AmACZAPYBvwHAAJwBwQHCAZ8BxAHFAcYBxwHIAPsB -mQHLAK8BzADrAc0A+wHPAdABnwHSAdNfEB9OU0RyYWdnaW5nU291cmNlTWFza0Zvck5vbkxvY2FsWU5T -VHZGbGFnc1xOU0hlYWRlclZpZXdfEBJOU0FsbG93c1R5cGVTZWxlY3RfEBdOU0ludGVyY2VsbFNwYWNp -bmdXaWR0aF8QGU5TQ29sdW1uQXV0b3Jlc2l6aW5nU3R5bGVfEBhOU0ludGVyY2VsbFNwYWNpbmdIZWln -aHRbTlNHcmlkQ29sb3JfEBxOU0RyYWdnaW5nU291cmNlTWFza0ZvckxvY2FsXk5TVGFibGVDb2x1bW5z -W05TUm93SGVpZ2h0gEAQAICQEhJAAACARIB0CYBII0AIAAAAAAAAI0AAAAAAAAAAgEMJgI0T//////// -//+AQIBLI0AxAAAAAAAAWXsxODQsIDE5fdYAlwAOAJgAmQCcAdYBmgHYAOsB2QGaAa9bTlNUYWJsZVZp -ZXeARYBHgEaARYBC2gCXAA4ApgCnAKgAmACpAKoAnACrAPMArQHfAK8B4AGuAccBsADzAceAPoCUgJyA -m4BEgJKAPoBEWXsxODQsIDE3fdIANwA4AecB6KQB6AC5AL0AO18QEU5TVGFibGVIZWFkZXJWaWV31QCX -AA4ApgCYAJwA8wHrAewA6wDzgD6ASoBJgD5fEBR7ey0yNiwgMH0sIHsxNiwgMTd9fdIANwA4AfAB8aQB -8QC5AL0AO11fTlNDb3JuZXJWaWV30gAOAD4ARgH0gF+oAfUB9gH3AfgB+QH6AfsB/IBMgGaAboB2gHqA -f4CEgInZAA4B/gH/AgACAQICAgMCBAHWAgUCBgIHAggCCQIIAggA+wGvXE5TSGVhZGVyQ2VsbFxOU0lk -ZW50aWZpZXJXTlNXaWR0aFpOU0RhdGFDZWxsWk5TTWluV2lkdGhaTlNNYXhXaWR0aFxOU0lzRWRpdGFi -bGWAZYBOgE0jQDQAAAAAAACAVAmAQlEx1wD/AA4BAAEBAQIBBAEFAg4CDwIQAgcCEgFbAhMSBIH+AIBT -gFCATYBPgFHUAA4BEAERARIBEwIWARUCGIAhI0AmAAAAAAAAgCARDBzTAA4BHQEoASABKgIbgCZLMC4z -MzMzMzI5OQDVAA4BHAEdAR4BHwEgATABIgIfASSAJoApgFKAI18QD2hlYWRlclRleHRDb2xvctIANwA4 -AiMCJKUCJAE5AToA9QA7XxARTlNUYWJsZUhlYWRlckNlbGzcAP8ADgImAUsBTAFNAQEBAgEDAU8BBAFQ -AQYBUQIoAikA1gIqAVICLAGvAi4BxAIvXU5TTm9ybWFsSW1hZ2WAMoBWEEuAYoAwgFWAQhEBkBJIPFH/ -1AAOARABEQESARMCMgEVAjSAISNAKAAAAAAAAIAgEBDVAA4BEAI2AjcBHAI4AjkCOgI7AjxcTlNJbWFn -ZUZsYWdzVk5TUmVwc4BhgFcSIMAAAIBYgGBYezE4LCAxOH3SAA4APgBGAkCAX6ECQYBZ0gAOAD4CQwJE -gF6iAkUCRoBagFvSAA4CSAJJAkpfEBROU1RJRkZSZXByZXNlbnRhdGlvboBdgFxPERWOTU0AKgAABRgA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMA -AAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABE1NTW4ZmZm/29vb/9zc3P/c3Nz/3Jycv9y -cnL/cnJy/3Jycv9vb2//ZWVl/yUlJZ8AAAAiAAAAAAAAAAAAAAAAAAAAAkNDQ5W3t7f/+fn5//z8/P/8 -/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/+fn5/8DAwP9UVFS7AAAAAgAAAAAAAAABAAAACJGRkf/c -3Nz/8/Pz//T09P/19fX/9fX1//T09P/09PT/9PT0//T09P/09PT/8/Pz/97e3v+JiYn/AAAACAAAAAEA -AAABAAAAEIGBgf/f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//u7u7/7u7u/9/f3/+S -kpL/AAAAEAAAAAEAAAABAAAAFZGRkf/d3d3/7Ozs/+zs7P/t7e3/7e3t/+3t7f/t7e3/7Ozs/+7u7v/t -7e3/7Ozs/9/f3/+QkJD/AAAAFAAAAAEAAAABAAAAGJ6env/b29v/6enp/+np6f/q6ur/6+vr/+rq6v/q -6ur/6urq/+rq6v/q6ur/6Ojo/9jY2P+bm5v/AAAAGAAAAAEAAAABAAAAG6CgoP/T09P/2tra/9ra2v/b -29v/29vb/9vb2//Z2dn/29vb/9nZ2f/a2tr/2tra/9HR0f+ioqL/AAAAGwAAAAEAAAABAAAAHKurq//a -2tr/39/f/9/f3//g4OD/4ODg/+Dg4P/h4eH/39/f/9/f3//f39//4ODg/9fX1/+mpqb/AAAAHAAAAAEA -AAACAAAAHrS0tP/j4+P/5ubm/+Xl5f/m5ub/5+fn/+fn5//n5+f/6enp/+fn5//n5+f/6Ojo/93d3f+t -ra3/AAAAHgAAAAIAAAACAAAAILi4uP/p6en/7e3t//Dw8P/w8PD/8PDw/+3t7f/t7e3/8fHx/+zs7P/v -7+//7e3t/+bm5v+0tLT/AAAAIAAAAAIAAAABAAAAILu7u//v7+//9/f3//b29v/4+Pj/9vb2//b29v/2 -9vb/9/f3//f39//39/f/9/f3//Dw8P+7u7v/AAAAIAAAAAEAAAABAAAAHY2Njej4+Pj///////////// -/////////////////////////////////////v7+//n5+f+Tk5PoAAAAHQAAAAEAAAABAAAAEjo6Oq28 -vLz3/////////////////////////////////////////////////////7u7u/c/Pz+rAAAAEgAAAAEA -AAAAAAAACAAAAEEAAACZAAAAxgAAANMAAADVAAAA1gAAANQAAADWAAAA2AAAANgAAADTAAAAxQAAAJkA -AABBAAAACAAAAAAAAAAAAAAAAgAAAA0AAAAlAAAANgAAAEEAAABDAAAAQwAAAEMAAABEAAAAQwAAAEQA -AABBAAAANgAAACUAAAANAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAYAAAAGAAAABgAAAAYA -AAAGAAAABgAAAAYAAAAGAAAAAwAAAAMAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEBAAMAAAABABIA -AAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAESAAMAAAABAAEA -AAEVAAMAAAABAAQAAAEWAAMAAAABBxwAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFSAAMAAAABAAEA -AAFTAAMAAAAEAAAFzodzAAcAAA+4AAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAPuGFwcGwCAAAAbW50 -clJHQiBYWVogB9YADAAHABEAFQAbYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEA -AAAA0y1hcHBsJNLJy134Mnx572GDPUg6gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOclhZ -WgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAAAXwAAAAsclRS -QwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVz -YwAADiwAAABkZHNjbQAADpAAAADQbW1vZAAAD2AAAAAoY3BydAAAD4gAAAAtWFlaIAAAAAAAAFt8AAA0 -xwAABrNYWVogAAAAAAAAc8UAALNEAAAe9FhZWiAAAAAAAAAnlAAAGBAAAK1+WFlaIAAAAAAAAPNSAAEA -AAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAA -AQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAYUD -GgSmBjEHuQlGCtEMXA3sD28Q+BKDFBMVmhckGKsaNBu3HTwewyBHIcYjSCTEJkYnvyk5KrAsKC2aLw0w -ejHlM080szYZN3c41DovO4U82j4sP3hAwUIKQ1BEkEXORwtIQ0l7Sq9L4k0RTj9Pa1CVUb5S5VQLVTBW -U1d1WJZZtlrWW/NdEV4vX0tgaGGDYp5juWTSZexnBWgeaTZqTWtlbHttkW6lb7lwzHHecu9z/3UNdht3 -J3gyeTt6Q3tKfE99UX5Tf1OAUYFNgkeDQIQ3hS2GIIcSiAOI8onfisuLtoyfjYeObo9TkDeRGpH8kt6T -vpSdlXuWWZc1mBGY7JnHmqGbepxTnSqeAp7Zn6+ghaFaoi6jAqPWpKmlfKZOpyCn8qjDqZSqY6szrAOs -0q2hrm+vPbALsNixprJzs0C0DLTYtaS2cLc7uAe40rmdume7Mrv8vMe9kb5avyO/7cC2wX7CR8MPw9fE -n8Vnxi7G9ce8yILJSMoOytPLmMxdzSHN5c6pz2zQL9Dy0bXSd9M40/rUu9V81jzW/de82HzZO9n72rrb -eNw33PbdtN5z3zLf8eCx4XHiMuLz47XkeOU95gLmyeeS6FzpJ+n16sXrl+xs7UPuHO7379bwt/Gb8oLz -a/RX9UX2Nfco+Bz5E/oM+wb8APz7/fr++v//AAABWwLzBGwF7QdpCOMKVwvVDUsOyBA+EbcTLRSpFhsX -kxkIGn8b8x1lHtUgSSG1IyQkjyX4J2AoxiorK4os6S5GL50w8zJGM5c04zYuN3Q4tzn1OzI8bD2hPtNA -BEEwQlpDf0SjRcVG40f/SRpKMktHTFtNbE58T4xQmVGmUrFTvVTGVc5W11ffWOZZ7lr0W/pdAV4GXwxg -EmEYYh1jImQnZSxmMmc2aDppP2pDa0ZsSW1Lbk5vT3BQcVByT3NOdEx1SHZEdz94OXkxeih7H3wUfQh9 -+37tf96AzoG9gquDl4SDhW2GVoc/iCaJDInyiteLuoyejYCOYY9CkCGRAJHekryTmZR1lVGWLJcGl+CY -uZmSmmqbQpwZnPCdx56dn3OgSaEeofSiyaOepHKlR6YcpvCnxaiZqW6qQqsWq+uswK2UrmivPbASsOax -u7KQs2W0OrUQteW2ureQuGa5PboTuuq7wLyXvW++R78fv/jA0sGswobDYcQ9xRnF9sbUx7LIkslyylPL -NcwYzPzN4c7Hz67QltF/0mnTVNRA1S7WHNcL1/vY7Nnf2tLbxty63bDept+c4JPhiuKB43jkb+Vm5lzn -UehG6TrqLOse7A7s/O3o7tLvuvCf8YPyZPNC9B/0+fXP9qT3dvhG+RT54Pqp+3D8N/z9/cH+g/9D//8A -AAEDAiwDPwRVBW0GigehCLkJzwrnDAINFw4tD0AQWBFtEoETkxSoFbsWzRfeGO8Z/xsNHBsdKB4yHzkg -QSFJIksjTiRQJU4mSidFKD0pNConKxgsCSz0Ld8uxy+tMJExczJTMzA0CjTjNbs2kDdkODg5BznWOqQ7 -cTw+PQc90D6ZP2FAKUDvQbVCe0NBRAVEykWPRlNHF0fcSKBJZEopSu5Lskx3TT1OAU7GT4xQU1EYUd5S -pVNsVDNU+lXBVolXUVgZWOFZqlpyWztcBFzNXZZeYF8qX/RgvmGJYlNjHmPqZLZlgmZOZxpn52i0aYFq -T2sca+psuG2GblRvIm/xcL9xjnJbcylz93TFdZN2YHctd/l4xXmRel17J3vxfLt9hX5NfxV/3YCkgWqC -MIL1g7qEfoVChgWGx4eKiEuJDYnOio+LT4wPjM6Njo5Ojw2PzZCMkUySC5LLk4qUSpUKlcuWjJdNmA6Y -0JmTmlabGZvdnKGdZ54tnvSfu6CDoUyiFqLho6ykeaVHpham5qe3qIqpXqo0qwur5Ky/rZyufK9fsEOx -K7IWswWz+LTvteu27LfzuQG6FbswvFO9fr6yv/HBOsKNw+zFWMbOyFXJ5suIzTnO99DE0qLUj9aL2Jfa -s9zb3xXhXeOx5hLoger47XvwB/Kf9TP30vp7/TL//wAAbmRpbgAAAAAAAAY2AACXkQAAWLgAAFVBAACM -FQAAKFcAABaoAABQDQAAVDkAAvCjAAK1wgABqPUAAwEAAAIAAAABAAUACgARABkAIwAvADsASQBZAGkA -ewCOAKIAuADPAOcBAAEaATUBUgFvAY4BrgHPAfECFQI5Al8ChQKtAtYDAAMsA1gDhgO1A+QEFgRIBHwE -sQTnBR4FVwWRBcwGCQZIBocGyAcLB08HlAfcCCQIbwi7CQkJWAmpCfwKUQqoCwELWwu3DBYMdgzZDT0N -pA4MDncO4w9SD8MQNhCrESIRmxIWEpMTEhOTFBYUmxUiFasWNRbCF1EX4RhzGQcZnBo0Gs0baBwFHKQd -RB3mHoofMB/YIIEhLSHaIoojOyPvJKUlXSYXJtQnkyhUKRkp3yqpK3UsRC0WLewuxC+fMH4xYDJGMy80 -HDUMNgA2+DfzOPI59Tr7PAY9FD4mPztAVUFyQpJDt0TfRgpHOUhsSaJK3EwZTVlOnU/lUS9SfVPPVSRW -fFfYWTdamVv/XWhe1WBEYbhjLmSnZiRnpWkoaq9sOG3Fb1Vw6XJ/dBh1tXdUePd6nXxGffF/oIFSgwiE -wIZ8iDuJ/YvCjYuPV5EnkvqU0ZasmIqaa5xRnjqgJ6IXpAymBKgAqgCsBK4LsBeyJrQ4tk64aLqEvKO+ -xMDnwwvFMMdWyXvLn83Bz+HR/dQX1i3YPtpK3FHeVOBS4krkPuYt6Bfp/uvg7b/vm/F180z1IPby+Mj6 -m/xr/jn//wAAAAIABQALABIAHAAmADIAQABPAGAAcgCFAJoAsADHAOAA+gEVATIBTwFuAY8BsAHTAfcC -HAJCAmoCkwK9AukDFQNDA3MDowPVBAgEPQRzBKoE4wUdBVkFlgXVBhUGVwabBuAHJwdvB7oIBghUCKQI -9glKCaEJ+QpTCrALDwtwC9MMOQyhDQwNeQ3oDloOzw9GD78QOxC6ETsRvxJFEs0TWBPlFHUVBhWaFjEW -yRdkGAAYnxk/GeIahxstG9YcgB0sHdoeih88H/AgpSFcIhYi0SOOJE0lDyXSJpgnXygpKPUpxCqVK2gs -Pi0XLfIu0C+xMJUxfDJlM1I0QjU1Nis3JDggOSA6IzspPDM9QD5QP2RAe0GVQrND1ET4RiBHS0h6SaxK -4UwaTVZOlU/YUR5SZ1O0VQRWV1etWQZaYlvBXSNeh1/vYVlixmQ1ZadnG2iSagtrh20EboRwB3GLcxJ0 -m3Ymd7N5QnrTfGZ9/H+TgSuCxoRihgCHoIlAiuKMho4qj8+RdZMclMOWa5gUmb2bZp0PnrigYaIKo7Ol -XKcFqK2qVqv+raWvTbD0spu0QrXpt4+5NrrdvIS+LL/UwX3DJ8TSxn/ILsney5HNR87/0LvSe9Q/1gfX -1dmo24LdYt9K4TnjMOUv5zfpSutl7YrvufHx9DP2fvjN+yX9iP//AAAAAwAJABMAIAAwAEIAVwBvAIkA -pgDFAOYBCgEwAVkBgwGwAd8CEQJFAnoCswLtAyoDaQOqA+4ENAR8BMcFFQVlBbcGDQZlBr8HHQd+B+II -SQizCSEJkgoGCn8K+wt7C/8Mhw0TDaQOOQ7SD3AQEhC4EWQSExLHE38UPBT9FcIWixdYGCkY/RnWGrEb -kRxzHVkeQh8tIBwhDiICIvoj9CTwJfAm8if2KP0qBysULCMtNC5IL18weDGUMrIz0zT1Nhs3QzhtOZk6 -xzv4PSs+YD+XQNBCDENKRIpFzUcSSFlJo0rvTD9NkU7mUD5RmVL4VFpVv1coWJVaBVt6XPJeb1/vYXRi -/WSKZhtnsWlLauhsim4wb9lxh3M4dOx2pHheehx73H2ff2WBLIL2hMGGjohciiyL/Y3Pj6KRdZNIlR2W -8ZjFmpqcbp5BoBSh5qO3pYenVakhquuss653sDex9LOttWG3D7i4ulu7972NvxvAosIhw5jFCMZwx9HJ -Ksp6y8LNBM5Az3TQoNHH0unUAtUX1ifXMNg12TXaMNso3BrdCt303tzfv+Ch4X7iWeMw5Abk1+Wo5nXn -QugJ6NLplupa6xzr3Oyc7VjuFe7P74jwQfD48a/yZPMY88z0fvUx9eD2kPdB9/P4pflU+gT6s/tg/A78 -uv1k/g7+tf9a//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAA -AAAAAAUAAAAMZW5VUwAAABIAAABMZnJGUgAAAEIAAABeZGVERQAAABAAAACgamFKUAAAAA4AAACwZXNF -UwAAABIAAAC+AEMAbwBsAG8AcgAgAEwAQwBEAMkAYwByAGEAbgAgAOAAIABjAHIAaQBzAHQAYQB1AHgA -IABsAGkAcQB1AGkAZABlAHMAIABjAG8AdQBsAGUAdQByAEYAYQByAGIALQBMAEMARDCrMOkw/AAgAEwA -QwBEAEwAQwBEACAAYwBvAGwAbwBybW1vZAAAAAAAAAYQAACcXwAAAADAHWWAAAAAAAAAAAAAAAAAAAAA -AHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAANIANwA4Ak0CTqMC -TgJPADtfEBBOU0JpdG1hcEltYWdlUmVwWk5TSW1hZ2VSZXDSADcAOAJRAlKiAlIAO1dOU0FycmF50gA3 -ADgCVAJVowJVAlIAO15OU011dGFibGVBcnJhedMADgEdASgBIAEqAliAJkQwIDAA0gA3ADgCWgJbogJb -ADtXTlNJbWFnZdIADgJdAl4CX1tOU0ltYWdlTmFtZYBkgGNYTlNTd2l0Y2jSADcAOAJiAmOiAmMAO18Q -E05TQnV0dG9uSW1hZ2VTb3VyY2XSADcAOAJlAmaiAmYAO11OU1RhYmxlQ29sdW1u2QAOAf4B/wIAAgEC -AgIDAgQB1gIFAmkCagIIAmsCCAIIAPsBr4BlgGiAZ4BpCYBCUTLXAP8ADgEAAQEBAgEEAQUCDgIPAhAC -agISAVsCE4BTgFCAZ4BPgFHdAP8ADgImAUsBTAFNAU4BAQECAQMBTwEEAVABBgFRAncCKQDWAioBUgFS -AiwBrwIuAcQCL4AygGqAYoAwgDCAVYBC0wAOADICfgJ/AoACgV5OU1Jlc291cmNlTmFtZYBtgGuAbNIA -NwA4AoMChKIChAA7XxAQTlNDdXN0b21SZXNvdXJjZdkADgH+Af8CAAIBAgICAwIEAdYCBQKHAogCCAKJ -AggCCAD7Aa+AZYBwgG+AdQmAQlE01wD/AA4BAAEBAQIBBAEFAQYCDwKPApACEgFbAhOAU4BygHGAT4BR -UTPVAA4BHAEdAR4BHwEgAcgBIgKXASSAJoB0gHOAI1toZWFkZXJDb2xvctMADgEdASgBIAEqApyAJkIx -AN0A/wAOAiYBSwFMAU0BTgEBAQIBAwFPAQQBUAEGAVECdwIpANYCKgFSAVICLAGvAi4BxAIvgDKAaoBi -gDCAMIBVgELZAA4B/gH/AgACAQICAgMCBAHWAgUCpwKoAggCqQIIAggA+wGvgGWAeIB3gHkJgEJRONcA -/wAOAQABAQECAQQBBQEGAg8CjwKIAhIBWwITgFOAcoBvgE+AUd0A/wAOAiYBSwFMAU0BTgEBAQIBAwFP -AQQBUAEGAVECdwIpANYCKgFSAVICLAGvAi4BxAIvgDKAaoBigDCAMIBVgELZAA4B/gH/AgACAQICAgMC -BAHWAgUCvQK+AggCvwIIAggA+wGvgGWAfIB7gH4JgEJSMTbXAP8ADgEAAQEBAgEEAQUBBgIPAo8CxgIS -AVsCE4BTgHKAfYBPgFFRNd0A/wAOAiYBSwFMAU0BTgEBAQIBAwFPAQQBUAEGAVECdwIpANYCKgFSAVIC -LAGvAi4BxAIvgDKAaoBigDCAMIBVgELZAA4B/gH/AgACAQICAgMCBAHWAgUC1ALVAggC1gIIAggA+wGv -gGWAgYCAgIMJgEJSMzLXAP8ADgEAAQEBAgEEAQUBBgIPAo8C3QISAVsCE4BTgHKAgoBPgFFRNt0A/wAO -AiYBSwFMAU0BTgEBAQIBAwFPAQQBUAEGAVECdwIpANYCKgFSAVICLAGvAi4BxAIvgDKAaoBigDCAMIBV -gELZAA4B/gH/AgACAQICAgMCBAHWAgUC6wLsAggC7QIIAggA+wGvgGWAhoCFgIgJgEJSNjTXAP8ADgEA -AQEBAgEEAQUBBgIPAo8C9AISAVsCE4BTgHKAh4BPgFFRN90A/wAOAiYBSwFMAU0BTgEBAQIBAwFPAQQB -UAEGAVECdwIpANYCKgFSAVICLAGvAi4BxAIvgDKAaoBigDCAMIBVgELZAA4B/gH/AgACAQICAgMCBAHW -AgUDAgMDAwQDBQMGAggA+wGvgGWAi4CKI0Az9KBAAAAAgIwjQC3pQIAAAAAJgEJTMTI41wD/AA4BAAEB -AQIBBAEFAQYCDwKPAqgCEgFbAhOAU4BygHeAT4BR3QD/AA4CJgFLAUwBTQFOAQEBAgEDAU8BBAFQAQYB -UQJ3AikA1gIqAVIBUgIsAa8CLgHEAi+AMoBqgGKAMIAwgFWAQtUADgEcAR0BHgEfASADGgEiAxsBJIAm -gI+AjoAjWWdyaWRDb2xvctMADgEdASgBIAEqAyCAJkQwLjUA0gA3ADgDIgHWpQHWAT4AuQC9ADtfEBR7 -ezEsIDE3fSwgezE4NCwgMTl9fdUADgEcAR0BHgEfASABIQEiAycBJIAmgCWAk4AjXxAWY29udHJvbEJh -Y2tncm91bmRDb2xvctIANwA4AysDLKQDLAC5AL0AO1pOU0NsaXBWaWV32ACXAy4ADgCmAJgDLwCcAzAA -8wDzAzMDNADrAzUA8wM3WE5TVGFyZ2V0WE5TQWN0aW9uWU5TUGVyY2VudIA+gD6AmICWgJeAPiM/yO0i -oAAAAF8QGHt7LTEwMCwgLTEwMH0sIHsxNSwgMzd9fVxfZG9TY3JvbGxlcjrSADcAOAM7AzylAzwBPgC5 -AL0AO1pOU1Njcm9sbGVy2QCXAy4ADgCmAY8AmAMvAJwDMADzAPMDMwNBAVQA6wM1APMDRIA+gD6AmICa -gJeAPiM/77H7IAAAAF8QGXt7LTEwMCwgLTEwMH0sIHsxNDMsIDE1fX3SAA4APgBGA0iAX6EBx4BEXxAT -e3sxLCAwfSwgezE4NCwgMTd9fV8QFXt7OTUsIDYwfSwgezE4NiwgMzd9fdIANwA4A00DTqQDTgC5AL0A -O1xOU1Njcm9sbFZpZXdfEBR7ezEsIDl9LCB7MzcyLCAxNDJ9fdIANwA4A1EAuaMAuQC9ADtfEBV7ezAs -IDB9LCB7MTI4MCwgNzc4fX1aezIxMywgMTI5fdIANwA4A1UDVqIDVgA7XxAQTlNXaW5kb3dUZW1wbGF0 -ZVxmRW5kaW5nU2hlZXTSADcAOANZA1qjA1oDWwA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJD -b25uZWN0b3LUAA4AjwCQAJEDXQCUA18DYICugAqAqICt2ACXAA4ApgD1AJgA9gCcAUADYgFCA2QDZQDr -APsDYgFHgKmAM4CqgKsJgKnVAJcADgCmAKgAmAArAOgDawNsAOuAAICggQEagOBfEBV7ezE0LCAxMn0s -IHsxMjEsIDMyfX3eAP8ADgFKAUsBTAFNAU4BAQECAQMBTwEEAVABQAEGAVEBUgFTAVQBCgFWA3MBCgNf -AVoBWwFcAUeAMoAwgB+AMYCsgB+AqFxEb24ndCBSZXBlYXRfEBNlbmRTaGVldFdpdGhCdXR0b2460gA3 -ADgDeQN6owN6A1sAO18QFU5TTmliQ29udHJvbENvbm5lY3RvctQADgCPAJAAkQCSA30AlAN/gKaAsIAK -gLjYAJcADgCmAPUAmAD2AJoAnAOBAPgDgwOEA4UA+wChA4GAsYArgLKAsxEBAgmADYCx1wCXAA4AqACY -AJkAmgCcA4oA6AOMAOsDjQChA4qBAv2AoIEC/4EDCoANgQL9XxAUe3sxMCwgNn0sIHsyNzEsIDIyfX3Z -AP8ADgEAAQEBAgEDAQQDkgEFA5MBBwOVAVIBCgN9A5kA+wObXxARTlNEcmF3c0JhY2tncm91bmQT//// -/5Rx/kGAKoC0gDCAH4CwEghABAAJgLbVAA4BHAEdAR4BHwEgAcgBIgOfASSAJoB0gLWAI18QE3RleHRC -YWNrZ3JvdW5kQ29sb3LVAA4BHAEdAR4BHwEgATABIgOlASSAJoApgLeAI1l0ZXh0Q29sb3JcZkZpZWxk -RWRpdG9y0wAOAJAAkQNdA6sDrICugLqAwtcAlwAOAKYA9QCYAPYAnAOuAUIDsAOxAOsA+wOugLuAM4C8 -gL0JgLvVAJcADgCoAJgAmQArAOgDtwDrA7iAAICggQN5gQN6XxAVe3syNSwgMjU0fSwgezc1LCA3OH19 -3QD/AA4BSgImAUsBTAFOAQEBAgEDAU8BBAFQAQYBUQO8A70CKQDWAVIDvAPAA6sCLgFbA8KAMoC+gMCA -MIC+gL+AuhP/////hoxA/1dQcmV2aWV31AAOARABEQESARMDxgEVAjSAISNAJAAAAAAAAIAg0wAOADIC -fgJ/AoADy4BtgGuAwVVtdXNpY1tzaG93T3V0cHV0OtQADgCPAJAAkQNdAJQA8gNggK6ACoA5gK3UAA4A -jwCQAJEDXQCUA9YDYICugAqAxYCt2ACXAA4ApgD1AJgA9gCcAUADYgFCA9sD3ADrAPsDYgFtgKmAM4DG -gMcJgKlfEBV7ezE1OSwgMTJ9LCB7ODIsIDMyfX3eAP8ADgFKAUsBTAFNAU4BAQECAQMBTwEEAVABQAEG -AVEBUgFTAVQBCgFzAXQBCgPWAVoBWwFcAW2AMoAwgB+AOIA3gB+AxdQADgCPAJAAkQNdAJQD6wNggK6A -CoDJgK3YAJcADgCmAPUAmAD2AJwBQAPuAUID8APxAOsA+wPuAW2AyoAzgMuAzAmAytUAlwAOAKgAmACZ -ACsA6AP3AOsD+IAAgKCBAguBArRfEBV7ezMzNCwgMTJ9LCB7ODIsIDMyfX3eAP8ADgFKAUsBTAFNAU4B -AQECAQMBTwEEAVABQAEGAVEBUgFTAVQBCgFzAXQBCgPrAVoBWwFcAW2AMoAwgB+AOIA3gB+AydQADgCP -AJAAkQNdAJQEBQQGgK6ACoDOgNjcAy4ADgQIBAkECgQLBAwEDQQOAy8BQAQPBBAEEQQSBBMBUgQVBBYE -FwQYBBkBVAFUV05TVGl0bGVfEBFOU0tleUVxdWl2TW9kTWFza1pOU0tleUVxdWl2XU5TTW5lbW9uaWNM -b2NZTlNPbkltYWdlXE5TTWl4ZWRJbWFnZVZOU01lbnVXTlNTdGF0ZYDWgNeA0BIAEAAAgDASf////4DR -gNOAz4DV0wAOBAgEGwQcBB0EHltOU01lbnVJdGVtc4EBXYEB9YEB9llTZWxlY3QuLi7TAA4AMgJ+An8C -gAQjgG2Aa4DSXxAPTlNNZW51Q2hlY2ttYXJr0wAOADICfgJ/AoAEKIBtgGuA1F8QEE5TTWVudU1peGVk -U3RhdGVfEBFfcG9wVXBJdGVtQWN0aW9uOt8QEwD/BCwELQFKAUsADgFMAU0BTgECBC4BAwQvBDAEMQFP -AQQEDgFQBDIA+wFUAVICKQQ1AVQENgQ3AQoEBQQ6ASoA+wD7Ai4AsQQYBD5fEBpOU01lbnVJdGVtUmVz -cGVjdEFsaWdubWVudF8QD05TQXJyb3dQb3NpdGlvblpOU01lbnVJdGVtXxAPTlNQcmVmZXJyZWRFZGdl -XxASTlNVc2VzSXRlbUZyb21NZW51XU5TQWx0ZXJzU3RhdGUT/////4RB/kAJgDCBAV6BAUmBAfSAH4DO -gQHyCQmAzxIGgkD/0gA3ADgEQAQuogQuADtdc2VsZWN0R3Jvb3ZlOtQADgCPAJAAkQCSBEQAlARGgKaA -2oAKgQEe3gC/AA4AwADBAMIAwwDEAMUAxgDHAMgAyQDKAMsDYgDNBEoESwDQANEETQROBE8EUADWANcE -UQRSgKmApIDegQEbgBOA3IDfgNuBAR2BARyA3V8QGHt7NTE1LCAxOTV9LCB7MzM4LCAxMjd9fdIADgDd -AN4AmoAW0gAOAN0A3gDfgBbSAA4APgBGBFqAX6cEWwRcBF0EXgNfA9YEYYDhgOWBAQ2BARKAqIDFgQEW -1wCXAA4ApgD1AJgA9gCcA2IA+ARlBGYA6wD7A2KAqYArgOKA4wmAqV8QFXt7MTcsIDkwfSwgezIwOCwg -MTd9fdgA/wAOAQABAQECAQMBBAEFAQYBBwC0BG0BCgRbAQwBDYAqgCKA5IAfgOGAJ18QHFJlcGVhdCBt -ZWFzdXJlcyAxIHRob3VnaCAxNArXAJcADgCmAPUAmAD2AJwDYgD4BHUEdgDrAPsDYoCpgCuA5oDnCYCp -XxAUe3syMCwgNjB9LCB7MjcsIDIyfX3aAP8ADgEAAQEBAgEDBHsBBAOSAQUDkwEHA5UCagEKBFwEgQSC -APsDm1tOU0Zvcm1hdHRlcoAqgLSAZ4AfgOWA6BP/////kEAEAAmAtt8QEQAOBIYEhwSIBIkEigSLBIwE -jQSOBI8EkASRBJIEkwSUBJUElgSXBJgEmQArBJsAKwSdBJ4EnwD7BKEAKwSjBKQA+wSmVk5TLm5pbFpO -Uy5kZWNpbWFsVk5TLm5hbltOUy5yb3VuZGluZ1dOUy56ZXJvXxAQTlMubmVnYXRpdmVhdHRyc1ZOUy5t -YXhdTlMuYXR0cmlidXRlc18QEU5TLnBvc2l0aXZlZm9ybWF0XxAPTlMuYWxsb3dzZmxvYXRzXxARTlMu -bmVnYXRpdmVmb3JtYXRfEBBOUy5wb3NpdGl2ZWF0dHJzW05TLnRob3VzYW5kVk5TLm1pblxOUy5sb2Nh -bGl6ZWRfEA9OUy5oYXN0aG91c2FuZHOBAQyBAQiBAQSBAQqAAIEBAIAAgPqA6YD+CYD7gACBAQaA9wkI -0wAOBKgAPgSpBKoEuFdOUy5rZXlzgQEHrQSrBKwErQSuBK8EsASxBLIEswS0BLUEtgS3gOqA64DsgO2A -7oDvgPCA8YDygPOA9ID1gPatBKQEugSdBKEEvQS+AVIEnwTBBJsEmATEBKOA94D5gPqA+4D8gP2AMID+ -gP+BAQCBAQSBAQWBAQZXbWluaW11bVxhbGxvd3NGbG9hdHNXbWF4aW11bV5uZWdhdGl2ZUZvcm1hdF8Q -FnBvc2l0aXZlSW5maW5pdHlTeW1ib2xfEBZuZWdhdGl2ZUluZmluaXR5U3ltYm9sWW5pbFN5bWJvbF5w -b3NpdGl2ZUZvcm1hdF8QFXVzZXNHcm91cGluZ1NlcGFyYXRvcl8QF2F0dHJpYnV0ZWRTdHJpbmdGb3Ja -ZXJvXxAQZGVjaW1hbFNlcGFyYXRvcl8QEWZvcm1hdHRlckJlaGF2aW9yXxARZ3JvdXBpbmdTZXBhcmF0 -b3LXAA4E1ATVBNYE1wTYBNkE2gD7AcQBVAFUBNwEplpOUy5jb21wYWN0W05TLmV4cG9uZW50Xk5TLm1h -bnRpc3NhLmJvWU5TLmxlbmd0aFtOUy5tYW50aXNzYVtOUy5uZWdhdGl2ZYD4CU8QEAIAAAAAAAAAAAAA -AAAAAAAI0gA3ADgE3wTgogTgADtfEBpOU0RlY2ltYWxOdW1iZXJQbGFjZWhvbGRlctcADgTUBNUE1gTX -BNgE2QTaAPsBxAFUAVQE5ASmgPgJTxAQEAAAAAAAAAAAAAAAAAAAAAhSLTBiACsiHmIALSIeUTAI0wAO -BOwA4wTtBO4En1xOU0F0dHJpYnV0ZXOBAQOBAQGA/tMADgSoAD4E8QTyBPOBAQKgoNIANwA4BPUE9qIE -9gA7XE5TRGljdGlvbmFyedIANwA4BPgE+aIE+QA7XxASTlNBdHRyaWJ1dGVkU3RyaW5nUS5RLNIANwA4 -BP0E/qME/gT2ADtfEBNOU011dGFibGVEaWN0aW9uYXJ50gAOAOME7QUBgQEDgQEJ0wAOBOwA4wTtBO4F -BYEBA4EBAYEBC1NOYU7SADcAOAUIBQmjBQkEewA7XxARTlNOdW1iZXJGb3JtYXR0ZXLXAJcADgCmAPUA -mAD2AJwDYgUMBQ0FDgDrAPsDYoCpgQERgQEOgQEPCYCpXxAUe3s1MiwgNTd9LCB7MTksIDI3fX3ZBRMA -/wAOBRQFFQUWAQMBBAUXAcwFGAUZBRoFGwHMBF0BxAD7V05TVmFsdWVbTlNJbmNyZW1lbnRaTlNNYXhW -YWx1ZVpOU01pblZhbHVlXE5TQXV0b3JlcGVhdBIADf4ggQEQIz/wAAAAAAAAI0AwAAAAAAAAgQENCdIA -NwA4BR8FIKQFIAE6APUAO11OU1N0ZXBwZXJDZWxs0gA3ADgFIgUjpQUjAT4AuQC9ADtZTlNTdGVwcGVy -1wCXAA4ApgD1AJgA9gCcA2IA+AUnBSgA6wD7A2KAqYArgQETgQEUCYCpXxAVe3s3MywgNjV9LCB7MTE0 -LCAxN3192AD/AA4BAAEBAQIBAwEEAQUBBgEHALQFLwEKBF4BDAENgCqAIoEBFYAfgQESgCdWdGltZXMu -2ACXAA4ApgD1AJgA9gCcAUADYgFCBTcFOADrAPsDYgGAgKmAM4EBF4EBGAmAqV8QFXt7MjQxLCAxMn0s -IHs4MywgMzJ9fd4A/wAOAUoBSwFMAU0BTgEBAQIBAwFPAQQBUAFAAYMBUQFSAVMBVAEKAYcFQQEKBGEB -WgFbAVwBgIAygDCAH4A9gQEZgB+BARZWUmVwZWF0XxAUe3sxLCA5fSwgezMzOCwgMTI3fX1cZlJlcGVh -dFNoZWV00wAOAJAAkQNdBUkFSoCugQEggQEm1wCXAA4ApgD1AJgA9gCcA64BQgVOBU8A6wD7A66Au4Az -gQEhgQEiCYC7XxAWe3szMTgsIDE5MX0sIHs1OCwgNTZ9fd0A/wAOAUoCJgFLAUwBTgEBAQIBAwFPAQQB -UAEGAVEFVQVWAikA1gFSBVUDwAVJAi4BWwPCgDKBASOBASSAMIEBI4C/gQEgVFN0b3DTAA4AMgJ+An8C -gAVfgG2Aa4EBJVRzdG9wVXN0b3A61AAOAI8AkACRAJIAlAGvBWaApoAKgEKBAShaZGF0YVNvdXJjZdQA -DgCPAJAAkQCSAJQBrwVsgKaACoBCgQEqWGRlbGVnYXRl1AAOAI8AkACRA10AlADxA2CAroAKgDSArdQA -DgCPAJAAkQCSBXUAHwV3gKaBAS2AAoEBM9cAlwAOAKYA9QCYAPYAnAOuAUIFewV8AOsA+wOugLuAM4EB -LoEBLwmAu18QFnt7MTQ5LCAxOTd9LCB7NTgsIDU2fX3dAP8ADgFKAiYBSwFMAU4BAQECAQMBTwEEAVAB -BgFRBYIFgwIpANYBUgWCA8AFdQIuAVsDwoAygQEwgQExgDCBATCAv4EBLVdab29tIElu0wAOADICfgJ/ -AoAFjIBtgGuBATJWem9vbWluXnpvb21JblRvb2xJdGVt0wAOAJAAkQNdBZEFkoCugQE1gQE71wCXAA4A -pgD1AJgA9gCcA64BQgWWBZcA6wD7A66Au4AzgQE2gQE3CYC7XxAWe3sxMTAsIDI3Nn0sIHs1OCwgNTZ9 -fd0A/wAOAUoCJgFLAUwBTgEBAQIBAwFPAQQBUAEGAVEFnQWeAikA1gFSBZ0DwAWRAi4BWwPCgDKBATiB -ATmAMIEBOIC/gQE1WFNob3cgTG9n0wAOADICfgJ/AoAFp4BtgGuBATpXY29uc29sZVhzaG93TG9nOtQA -DgCPAJAAkQCSBawAHwWugKaBAT2AAoEBQ9cAlwAOAKYA9QCYAPYAnAOuAUIFsgWzAOsA+wOugLuAM4EB -PoEBPwmAu18QFnt7MjE4LCAxOTd9LCB7NTgsIDU2fX3dAP8ADgFKAiYBSwFMAU4BAQECAQMBTwEEAVAB -BgFRBbkFugIpANYBUgW5A8AFrAIuAVsDwoAygQFAgQFBgDCBAUCAv4EBPVhab29tIE91dNMADgAyAn4C -fwKABcOAbYBrgQFCV3pvb21vdXRfEA96b29tT3V0VG9vbEl0ZW3UAA4AjwCQAJEDXQCUBckFyoCugAqB -AUWBAWDYAJcADgCmAPUAmAD2AJoAnAXMBc0FzgXPBdAA+wChBcyBAUaBAV+BAUeBAUgRAQkJgA2BAUbX -AJcADgCoAJgAmQCaAJwF1QDoBdcA6wXYAKEF1YECxoCggQLIgQLvgA2BAsZfEBV7ezc0MCwgNDJ9LCB7 -OTEsIDI2fX3fEBMA/wQsBC0BSgFLAA4BTAFNAU4BAgQuAQMELwQwBDEBTwEEBA4BUAQyAPsBVAFSAikE -NQFUBDYF4QEKBeMFyQEqAPsA+wIuBecF6AQ+CYAwgQFegQFJgQFKgB+BAUuBAUUJCRIBAAgAgQFM1AAO -ARABEQESARMBFAEVAjSAIYAg0gAOAN0A3gFegBbcAy4ADgQIBAkECgQLBAwEDQQOAy8BQAQPBc8EEQXx -BBMBUgQVBBYEFwXoBfYF9wFUgQFIgNeBAU2AMIDRgNOBAUyBAU4RBATTAA4ECAQbBBwF+gX7gQFdgQFP -gQFQUzQvNNIADgDdAN4F/4AWWk90aGVyVmlld3PSAA4APgBGBgKAX6UF4wYEBgUGBgYHgQFLgQFRgQFU -gQFXgQFa2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAFzwQRBgsEEwFSBBUEFgQXBegGEAYRgQFIgNeBAVKA -MIDRgNOBAUyBAVMRBghTNi842wMuAA4ECAQJBAoECwQMBA0EDgMvAUAFzwQRBhYEEwFSBBUEFgQXBegG -GwYcgQFIgNeBAVWAMIDRgNOBAUyBAVYRAwRTMy802wMuAA4ECAQJBAoECwQMBA0EDgMvAUAFzwQRBiEE -EwFSBBUEFgQXBegGJgYngQFIgNeBAViAMIDRgNOBAUyBAVkRDAhUMTIvONsDLgAOBAgECQQKBAsEDAQN -BA4DLwFABc8EEQYsBBMBUgQVBBYEFwXoBjEGMoEBSIDXgQFbgDCA0YDTgQFMgQFcEQUEUzUvNNIANwA4 -BjUEDqIEDgA70gA3ADgGNwY4pgY4BjkBYgE6APUAO18QEU5TUG9wVXBCdXR0b25DZWxsXk5TTWVudUl0 -ZW1DZWxs0gA3ADgGOwY8pgY8AWUBPgC5AL0AO11OU1BvcFVwQnV0dG9uWHNldFRpbWU61AAOAI8AkACR -AJIGQACUBkKApoEBYoAKgQF52ACXAA4ApgD1AJgA9gCaAJwFzAXNBkYGRwXQAPsAoQXMgQFGgQFfgQFj -gQFkCYANgQFGXxAWe3s4MzMsIDQyfSwgezEzMCwgMjZ9fd8QFAD/BCwELQFKAUsADgFMAU0BTgECBC4B -AwQvBDAEMQFPAQQEDgFQBk0EMgD7AVQBUgIpBDUBVAQ2BlIBCgZUBkABKgD7APsCLgXnBlgEPgZZXxAP -TlNTZWxlY3RlZEluZGV4CYAwgQFegQFJgQFlgB+BAWaBAWIJCYEBZxAF0gAOAN0A3gFegBbcAy4ADgQI -BAkECgQLBAwEDQQOAy8BQAQPBkcEEQZfBBMBUgQVBBYEFwZYBmQGZQFUgQFkgNeBAWiAMIDRgNOBAWeB -AWkQDNMADgQIBBsEHAZoBmmBAV2BAWqBAWtSMTLSAA4A3QDeBf+AFtIADgA+AEYGb4BfpgZwBnEGcgZz -BnQGVIEBbIEBb4EBcoEBdYEBd4EBZtsDLgAOBAgECQQKBAsEDAQNBA4DLwFABkcEEQZ5BBMBUgQVBBYE -FwZYBn4A1oEBZIDXgQFtgDCA0YDTgQFngQFuXDIgKFN0cmFpZ2h0KdsDLgAOBAgECQQKBAsEDAQNBA4D -LwFABkcEEQaDBBMBUgQVBBYEFwZYBogBKoEBZIDXgQFwgDCA0YDTgQFngQFxWTMgKFN3aW5nKdsDLgAO -BAgECQQKBAsEDAQNBA4DLwFABkcEEQaNBBMBUgQVBBYEFwZYBpIAr4EBZIDXgQFzgDCA0YDTgQFngQF0 -XjQgKFNpeHRlZW50aHMp2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAGRwQRAt0EEwFSBBUEFgQXBlgGnAEi -gQFkgNeAgoAwgNGA04EBZ4EBdtsDLgAOBAgECQQKBAsEDAQNBA4DLwFABkcEEQKoBBMBUgQVBBYEFwZY -BqUGpoEBZIDXgHeAMIDRgNOBAWeBAXgQCF1mRGl2aXNpb25NZW510wAOAJAAkQNdBqoGq4CugQF7gQGB -1wCXAA4ApgD1AJgA9gCcA64BQgavBrAA6wD7A66Au4AzgQF8gQF9CYC7XxAWe3syNjcsIDI3MX0sIHs1 -OCwgNTZ9fd0A/wAOAUoCJgFLAUwBTgEBAQIBAwFPAQQBUAEGAVEGtga3AikA1gFSBrYDwAaqAi4BWwPC -gDKBAX6BAX+AMIEBfoC/gQF7VFBsYXnTAA4AMgJ+An8CgAbAgG2Aa4EBgFNydW5VcGxheTrUAA4AjwCQ -AJEDXQCUBsYGx4CugAqBAYOBAeLYAJcADgCmAPUAmAD2AJoAnAXMBc0GywbMBdAA+wChBcyBAUaBAV+B -AYSBAYUJgA2BAUZfEBV7ezY1NiwgNDJ9LCB7ODIsIDI2fX3fEBQA/wQsBC0BSgFLAA4BTAFNAU4BAgQu -AQMELwQwBDEBTwEEBA4BUAZNBDIA+wFUAVICKQQ1AVQENgbWAQoG2AbGASoA+wD7Ai4F5wbcBD4G3QmA -MIEBXoEBSYEBhoAfgQGHgQGDCQmBAYgQHNIADgDdAN4BXoAW3AMuAA4ECAQJBAoECwQMBA0EDgMvAUAE -DwbMBBEG4wQTAVIEFQQWBBcG3AboBukBVIEBhYDXgQGJgDCA0YDTgQGIgQGKEQT/0wAOBAgEGwQcBuwG -7YEBXYEBi4EBjFNDI23SAA4A3QDeBf+AFtIADgA+AEYG84BfrxAfBvQG9Qb2BvcG+Ab5BvoG+wb8Bv0G -/gb/BwAHAQcCBwMHBAcFBwYHBwcIBwkHCgcLBwwHDQcOBw8G2AcRBxKBAY2BAZCBAZKBAZWBAZiBAZuB -AZ6BAaGBAaSBAaaBAamBAayBAa+BAbKBAbWBAbiBAbqBAb2BAb+BAcKBAcWBAciBAcuBAc6BAdGBAdOB -AdaBAdmBAYeBAdyBAd/bAy4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEHFgQTAVIEFQQWBBcG3AcbAVSB -AYWA14EBjoAwgNGA04EBiIEBj1FD3AMuAA4ECAQJBx4ECgcfBAsEDAQNBA4DLwbMBBEBUgQTAPsBUgD7 -BBUEFgQXBtwHKV1OU0lzU2VwYXJhdG9yXE5TSXNEaXNhYmxlZIEBhYDXgDAJgDAJgNGA04EBiIEBkdsD -LgAOBAgECQQKBAsEDAQNBA4DLwFABswEEQctBBMBUgQVBBYEFwbcBzIHM4EBhYDXgQGTgDCA0YDTgQGI -gQGUE/////////8BUUbbAy4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEHOAQTAVIEFQQWBBcG3Ac9Bz6B -AYWA14EBloAwgNGA04EBiIEBlxP////////+AWIAQiZt2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAGzAQR -B0MEEwFSBBUEFgQXBtwHSAdJgQGFgNeBAZmAMIDRgNOBAYiBAZoT/////////QFiAEUmbdsDLgAOBAgE -CQQKBAsEDAQNBA4DLwFABswEEQdOBBMBUgQVBBYEFwbcB1MHVIEBhYDXgQGcgDCA0YDTgQGIgQGdE/// -//////wBYgBBJm3bAy4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEHWQQTAVIEFQQWBBcG3AdeB1+BAYWA -14EBn4AwgNGA04EBiIEBoBP////////7AWIARCZt2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAGzAQRB2QE -EwFSBBUEFgQXBtwHaQdqgQGFgNeBAaKAMIDRgNOBAYiBAaMT////////+gFiAEcmbd0DLgAOBAgECQce -BAoHHwQLBAwEDQQOAy8EDwbMBBEBUgQTAPsBUgD7BBUEFgQXBtwHdgFUgQGFgNeAMAmAMAmA0YDTgQGI -gQGl2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAGzAQRB3oEEwFSBBUEFgQXBtwHfweAgQGFgNeBAaeAMIDR -gNOBAYiBAagRAQFRR9sDLgAOBAgECQQKBAsEDAQNBA4DLwFABswEEQeFBBMBUgQVBBYEFwbcB4oHi4EB -hYDXgQGqgDCA0YDTgQGIgQGrEQIBUUTbAy4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEHkAQTAVIEFQQW -BBcG3AeVB5aBAYWA14EBrYAwgNGA04EBiIEBrhEDAVFB2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAGzAQR -B5sEEwFSBBUEFgQXBtwHoAehgQGFgNeBAbCAMIDRgNOBAYiBAbERBAFRRdsDLgAOBAgECQQKBAsEDAQN -BA4DLwFABswEEQemBBMBUgQVBBYEFwbcB6sHrIEBhYDXgQGzgDCA0YDTgQGIgQG0EQUBUULbAy4ADgQI -BAkECgQLBAwEDQQOAy8BQAbMBBEHsQQTAVIEFQQWBBcG3Ae2B7eBAYWA14EBtoAwgNGA04EBiIEBtxEG -AVJGI9wDLgAOBAgECQceBAoHHwQLBAwEDQQOAy8GzAQRAVIEEwD7AVIA+wQVBBYEFwbcB8OBAYWA14Aw -CYAwCYDRgNOBAYiBAbnbAy4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEHxwQTAVIEFQQWBBcG3AfMB82B -AYWA14EBu4AwgNGA04EBiIEBvBD/UkFt3AMuAA4ECAQJBx4ECgcfBAsEDAQNBA4DLwbMBBEBUgQTAPsB -UgD7BBUEFgQXBtwH2YEBhYDXgDAJgDAJgNGA04EBiIEBvtsDLgAOBAgECQQKBAsEDAQNBA4DLwFABswE -EQfdBBMBUgQVBBYEFwbcB+IB0IEBhYDXgQHAgDCA0YDTgQGIgQHBUkRt2wMuAA4ECAQJBAoECwQMBA0E -DgMvAUAGzAQRB+cEEwFSBBUEFgQXBtwH7AftgQGFgNeBAcOAMIDRgNOBAYiBAcQT/////////v9SR23b -Ay4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEH8gQTAVIEFQQWBBcG3Af3B/iBAYWA14EBxoAwgNGA04EB -iIEBxxP////////9/1JDbdsDLgAOBAgECQQKBAsEDAQNBA4DLwFABswEEQf9BBMBUgQVBBYEFwbcCAII -A4EBhYDXgQHJgDCA0YDTgQGIgQHKE/////////z/UkZt2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAGzAQR -CAgEEwFSBBUEFgQXBtwIDQgOgQGFgNeBAcyAMIDRgNOBAYiBAc0T////////+/9jAEImbQBt2wMuAA4E -CAQJBAoECwQMBA0EDgMvAUAGzAQRCBMEEwFSBBUEFgQXBtwIGAgZgQGFgNeBAc+AMIDRgNOBAYiBAdAT -////////+v9jAEUmbQBt3AMuAA4ECAQJBx4ECgcfBAsEDAQNBA4DLwbMBBEBUgQTAPsBUgD7BBUEFgQX -BtwIJYEBhYDXgDAJgDAJgNGA04EBiIEB0tsDLgAOBAgECQQKBAsEDAQNBA4DLwFABswEEQgpBBMBUgQV -BBYEFwbcCC4IL4EBhYDXgQHUgDCA0YDTgQGIgQHVEQH/UkVt2wMuAA4ECAQJBAoECwQMBA0EDgMvAUAG -zAQRCDQEEwFSBBUEFgQXBtwIOQg6gQGFgNeBAdeAMIDRgNOBAYiBAdgRAv9SQm3bAy4ADgQIBAkECgQL -BAwEDQQOAy8BQAbMBBEIPwQTAVIEFQQWBBcG3AhECEWBAYWA14EB2oAwgNGA04EBiIEB2xED/1NGI23b -Ay4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEISgQTAVIEFQQWBBcG3AhPCFCBAYWA14EB3YAwgNGA04EB -iIEB3hEF/1NHI23bAy4ADgQIBAkECgQLBAwEDQQOAy8BQAbMBBEIVQQTAVIEFQQWBBcG3AhaCFuBAYWA -14EB4IAwgNGA04EBiIEB4REG/1NEI21Xc2V0S2V5OtQADgCPAJAAkQCSBZEAHwhigKaBATWAAoEB5Fts -b2dUb29sSXRlbdQADgCPAJAAkQNdAJQDfQhogK6ACoCwgQHmXxAQaGlkZUZpZWxkRWRpdG9yOtQADgCP -AJAAkQNdAJQIbQhugK6ACoEB6IEB7tcAlwAOAKYA9QCYAPYAnAOuAUIIcghzAOsA+wOugLuAM4EB6YEB -6gmAu18QFXt7MTgsIDEyMn0sIHs1OCwgNjV9fd0A/wAOAUoCJgFLAUwBTgEBAQIBAwFPAQQBUAEGAVEI -eQh6AikA1gFSCHkDwAhtAi4BWwPCgDKBAeuBAeyAMIEB64C/gQHoV0Rpc3BsYXnTAA4AMgJ+An8CgAiD -gG2Aa4EB7VdkaXNwbGF5XxATZWRpdERpc3BsYXlPcHRpb25zOtQADgCPAJAAkQCSBFsAlAiKgKaA4YAK -gQHwWmZSZXBlYXRNc2fUAA4AjwCQAJEAkgQ6AJQIkICmgQHygAqBAf/YAJcADgCmAPUAmAD2AJoAnAXM -Bc0IlAQQAOsA+wChBcyBAUaBAV+BAfOA1gmADYEBRl8QFnt7NDk4LCAxOH0sIHsxMzAsIDI2fX3SAA4A -3QDeAV6AFtIADgDdAN4F/4AW0gAOAD4ARgiggF+kBAUIogijCKSAzoEB94EB+YEB/NwDLgAOBAgECQce -BAoHHwQLBAwEDQQOAy8EEAQRAVIEEwD7AVIA+wQVBBYEFwQYCK+A1oDXgDAJgDAJgNGA04DPgQH42gMu -AA4ECAQJBAoECwQMBA0EDgMvBBAEEQizBBMBUgQVBBYEFwQYCLiA1oDXgQH6gDCA0YDTgM+BAftVU3dp -bmfaAy4ADgQIBAkECgQLBAwEDQQOAy8EEAQRCL0EEwFSBBUEFgQXBBgIwoDWgNeBAf2AMIDRgNOAz4EB -/llCb3NzYU5vdmFbZkdyb292ZU1lbnXUAA4AjwCQAJEAkgCUAB8IyYCmgAqAAoECAVlzaGVldFZpZXfU -AA4AjwCQAJEAkgaqAB8Iz4CmgQF7gAKBAgNccGxheVRvb2xJdGVt1AAOAI8AkACRA10AlARhA2CAroAK -gQEWgK3UAA4AjwCQAJEAkgjYAJQI2oCmgQIGgAqBArjeAL8ADgDAAMEAwgDDAMQAxQDGAMcAyADJAMoA -ywPuAM0I3gjfANAA0QDSCOII4wjkANYA1wjlCOaAyoCkgQIJgQK1gBOAFIECCoECB4ECt4ECtoECCF8Q -GHt7NDE3LCAyMDR9LCB7NTQzLCAxODl9fdIADgDdAN4A34AW0gAOAD4ARgjsgF+kA+sI7gjvCPCAyYEC -DIECEIECZtgAlwAOAKYA9QCYAPYAnAFAA+4BQgj0CPUA6wD7A+4BgIDKgDOBAg2BAg4JgMpfEBZ7ezQx -NiwgMTJ9LCB7MTEzLCAzMn193gD/AA4BSgFLAUwBTQFOAQEBAgEDAU8BBAFQAUABgwFRAVIBUwFUAQoB -hwj+AQoI7gFaAVsBXAGAgDKAMIAfgD2BAg+AH4ECDFJPS90AlwkDAA4JBACmCQUAqACYCQYJBwkIAJwB -lAPuAcQJCgkLCQwEpgkOCQ8BVAkQANYD7gkSWU5TQm94VHlwZVtOU1RpdGxlQ2VsbF1OU1RyYW5zcGFy -ZW50XE5TQm9yZGVyVHlwZVlOU09mZnNldHNfEA9OU1RpdGxlUG9zaXRpb26AyoECZYECYoECYAiBAhEQ -JIECYYDKgQIS0gAOAD4ARgkVgF+hCRKBAhLWAJcADgCmAKgAmACcCO8A6AkaCRsA6wjvgQIQgKCBAl+B -AhOBAhDSAA4APgBGCR+AX6cJIAkhCSIJIwkkCSUJJoECFIECGIECKYECLYECPoECQoECRtcAlwAOAKYA -9QCYAPYAnAkSAPgJKgkrAOsA+wkSgQISgCuBAhWBAhYJgQISXxAVe3sxMDksIDcyfSwgezY5LCAxN319 -2AD/AA4BAAEBAQIBAwEEAQUBBgEHALQJMgEKCSABDAENgCqAIoECF4AfgQIUgCdUVG9wOtcAlwAOAKYA -9QCYAPYAnAkSBc0JOgk7AOsA+wkSgQISgQFfgQIZgQIaCYECEl8QFXt7MTY0LCA2Nn0sIHs2NSwgMjZ9 -fd8QEwD/BCwELQFKAUsADgFMAU0BTgECBC4BAwQvBDAEMQFPAQQEDgFQBDIA+wFUAVICKQQ1AVQENglE -AQoJRgkhASoA+wD7Ai4AsQlKBD4JgDCBAV6BAUmBAhuAH4ECHIECGAkJgQId0gAOAN0A3gFegBbbAy4A -DgQIBAkECgQLBAwEDQQOAy8EDwk7BBEEnwQTAVIEFQQWBBcJSglVAVSBAhqA14D+gDCA0YDTgQIdgQIe -0wAOBAgEGwQcCVgJWYEBXYECH4ECINIADgDdAN4F/4AW0gAOAD4ARglegF+lCUYJYAlhCWIJY4ECHIEC -IYECI4ECJYECJ9oDLgAOBAgECQQKBAsEDAQNBA4DLwk7BBECBwQTAVIEFQQWBBcJSglsgQIagNeATYAw -gNGA04ECHYECItoDLgAOBAgECQQKBAsEDAQNBA4DLwk7BBECagQTAVIEFQQWBBcJSgl1gQIagNeAZ4Aw -gNGA04ECHYECJNoDLgAOBAgECQQKBAsEDAQNBA4DLwk7BBECkAQTAVIEFQQWBBcJSgl+gQIagNeAcYAw -gNGA04ECHYECJtoDLgAOBAgECQQKBAsEDAQNBA4DLwk7BBECiAQTAVIEFQQWBBcJSgmHgQIagNeAb4Aw -gNGA04ECHYECKNcAlwAOAKYA9QCYAPYAnAkSAPgJiwmMAOsA+wkSgQISgCuBAiqBAisJgQISXxAVe3sx -MDksIDQ2fSwgezYyLCAxN3192AD/AA4BAAEBAQIBAwEEAQUBBgEHALQJkwEKCSIBDAENgCqAIoECLIAf -gQIpgCdfEBZCb3R0b206CiAKTGVkZ2VyIExpbmVz1wCXAA4ApgD1AJgA9gCcCRIFzQmbCZwA6wD7CRKB -AhKBAV+BAi6BAi8JgQISXxAVe3sxNjQsIDQwfSwgezY1LCAyNn193xATAP8ELAQtAUoBSwAOAUwBTQFO -AQIELgEDBC8EMAQxAU8BBAQOAVAEMgD7AVQBUgIpBDUBVAQ2CaUBCgmnCSMBKgD7APsCLgCxCasEPgmA -MIEBXoEBSYECMIAfgQIxgQItCQmBAjLSAA4A3QDeAV6AFtsDLgAOBAgECQQKBAsEDAQNBA4DLwQPCZwE -EQSfBBMBUgQVBBYEFwmrCbYBVIECL4DXgP6AMIDRgNOBAjKBAjPTAA4ECAQbBBwJuQm6gQFdgQI0gQI1 -0gAOAN0A3gX/gBbSAA4APgBGCb+AX6UJpwnBCcIJwwnEgQIxgQI2gQI4gQI6gQI82gMuAA4ECAQJBAoE -CwQMBA0EDgMvCZwEEQIHBBMBUgQVBBYEFwmrCc2BAi+A14BNgDCA0YDTgQIygQI32gMuAA4ECAQJBAoE -CwQMBA0EDgMvCZwEEQJqBBMBUgQVBBYEFwmrCdaBAi+A14BngDCA0YDTgQIygQI52gMuAA4ECAQJBAoE -CwQMBA0EDgMvCZwEEQKQBBMBUgQVBBYEFwmrCd+BAi+A14BxgDCA0YDTgQIygQI72gMuAA4ECAQJBAoE -CwQMBA0EDgMvCZwEEQKIBBMBUgQVBBYEFwmrCeiBAi+A14BvgDCA0YDTgQIygQI91wCXAA4ApgD1AJgA -9gCcCRIA+AnsCe0A6wD7CRKBAhKAK4ECP4ECQAmBAhJfEBR7ezE1LCA3Mn0sIHs5MiwgMTd9fdgA/wAO -AQABAQECAQMBBAEFAQYBBwC0CfQBCgkkAQwBDYAqgCKBAkGAH4ECPoAnXExlZGdlciBMaW5lc9cAlwAO -AKYA9QCYAPYAnAkSAPgJ/An9AOsA+wkSgQISgCuBAkOBAkQJgQISXxAVe3sxNSwgMTR9LCB7MTE0LCAx -N3192AD/AA4BAAEBAQIBAwEEAQUBBgEHALQKBAEKCSUBDAENgCqAIoECRYAfgQJCgCdfEA9MeXJpY3Mg -U3RhbnphczrXAJcADgCmAPUAmAD2AJwJEgXNCgwKDQDrAPsJEoECEoEBX4ECR4ECSAmBAhJfEBR7ezE2 -NCwgOH0sIHs2NSwgMjZ9fd8QFAD/BCwELQFKAUsADgFMAU0BTgECBC4BAwQvBDAEMQFPAQQEDgFQBk0E -MgD7AVQBUgIpBDUBVAQ2ChYBCgoYCSYBKgD7APsCLgCxChwEPgamCYAwgQFegQFJgQJJgB+BAkqBAkYJ -CYECS9IADgDdAN4BXoAW2wMuAA4ECAQJBAoECwQMBA0EDgMvBA8KDQQRAqgEEwFSBBUEFgQXChwKJwFU -gQJIgNeAd4AwgNGA04ECS4ECTNMADgQIBBsEHAoqCiuBAV2BAk2BAk7SAA4A3QDeBf+AFtIADgA+AEYK -MIBfqQoxCjIKMwo0CjUKNgo3CjgKGIECT4ECUYECU4ECVYECV4ECWYECW4ECXYECStoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBEEnwQTAVIEFQQWBBcKHApCgQJIgNeA/oAwgNGA04ECS4ECUNoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBECBwQTAVIEFQQWBBcKHApLgQJIgNeATYAwgNGA04ECS4ECUtoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBECagQTAVIEFQQWBBcKHApUgQJIgNeAZ4AwgNGA04ECS4ECVNoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBECkAQTAVIEFQQWBBcKHApdgQJIgNeAcYAwgNGA04ECS4ECVtoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBECiAQTAVIEFQQWBBcKHApmgQJIgNeAb4AwgNGA04ECS4ECWNoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBECxgQTAVIEFQQWBBcKHApvgQJIgNeAfYAwgNGA04ECS4ECWtoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBEC3QQTAVIEFQQWBBcKHAp4gQJIgNeAgoAwgNGA04ECS4ECXNoDLgAOBAgECQQK -BAsEDAQNBA4DLwoNBBEC9AQTAVIEFQQWBBcKHAqBgQJIgNeAh4AwgNGA04ECS4ECXl8QFHt7MSwgMX0s -IHsyNDQsIDEwMH19XxAWe3sxNywgNTN9LCB7MjQ2LCAxMTZ9fVZ7MCwgMH3XAP8ADgEAAQEBAgEEAQUB -BgEHA5UKiAISAcQKioAqgLSBAmOAT4ECZF8QD0Rpc3BsYXkgT3B0aW9uc9MADgEdASgBIAEqCo6AJk0w -IDAuODAwMDAwMDEA0gA3ADgKkAqRpAqRALkAvQA7VU5TQm943QCXCQMADgkEAKYJBQCoAJgJBgkHCQgA -nAGUA+4BxAkKCpUKlgSmCpgJDwFUCRAA1gPuCpuAyoECZYECsYECsAiBAmeBAmGAyoECaNIADgA+AEYK -noBfoQqbgQJo1gCXAA4ApgCoAJgAnAjwAOgKowqkAOsI8IECZoCggQKvgQJpgQJm0gAOAD4ARgqogF+o -CqkKqgqrCqwKrQquCq8KsIECaoECfIECgIECg4ECh4ECi4ECmYECq9cAlwAOAKYA9QCYAPYAnAqbCrMK -tAq1CrYA+wqbgQJogQJ7gQJrgQJsEQEMCYECaF8QFXt7MTU2LCAxMH0sIHs2MCwgMjZ9fd4KuwD/AA4B -AAEBAQIBAwEECrwDkgq9AdYKvgEFCqkKwArBA5UC3QEKCqkKxgrHAPsGWQrJAPsBDVpOU0RlbGVnYXRl -XxAPTlNQb3BVcExpc3REYXRhXxASTlNWaXNpYmxlSXRlbUNvdW50XxAVTlNIYXNWZXJ0aWNhbFNjcm9s -bGVygQJqEhRx/kCBAnqAtICCgB+BAmoSEEAEAIECbQmBAm8JgCfSAA4APgBGCs6AX6QKzwSfAgcCaoEC -boD+gE2AZ1ItMd8QFgCXCrsDLgG5AbgADgEAAbsBvAG9Ab4K1QCYAJkA9gCaAy8BvwHAAJwBwQHCCtYK -tQq1CtkBxAraAbAA+wHLAVQBzAq1AJ8K3gD7CuAK4QHPCuMK1grlCuZcTlNEYXRhU291cmNlgQJwgQJs -gQJsE//////SYIAAgQJ5gJIJgQJsgQJxCYECcoECeICNEA+BAnCBAnMjQDMAAAAAAABYezEzLCA4NH3S -AA4APgBGCuqAX6EK64ECdNoK7QAOAf4B/wIAAgEK7gICAgMB1gD7AgUK8QJFA8YK8wEqA8YK9ArJXk5T -SXNSZXNpemVhYmxlXk5TUmVzaXppbmdNYXNrCYBlgQJ1gFqBAncjQI9AAAAAAACBAm/XAP8ADgEAAQEB -AgEEAQUCDgIPCvgBUgIsAcQByIBTgQJ2gDCAVYB00wAOAR0BKAEgASoCG4Am2QD/AA4BAAEBAQIBAwEE -A5IBBQr/AQcBsAIHAQoKyQsFAPsBDRIUMf5AgCqAkoBNgB+BAm8RBAAJgCdfEBB0YWJsZVZpZXdBY3Rp -b2460gA3ADgLCgsLpgsLAdYBPgC5AL0AO18QEE5TQ29tYm9UYWJsZVZpZXfSADcAOAsNCw6lCw4BOQE6 -APUAO15OU0NvbWJvQm94Q2VsbNIANwA4CxALEaYLEQE9AT4AuQC9ADtaTlNDb21ib0JveNcAlwAOAKYA -9QCYAPYAnAqbAPgLFQsWCrYA+wqbgQJogCuBAn2BAn4JgQJoXxAUe3s5NywgMTV9LCB7NTQsIDE3fX3Y -AP8ADgEAAQEBAgEDAQQBBQsbAQcAtAseAQoKqgrGAQ0SBAH+QIAqgCKBAn+AH4ECfIAnV0x5cmljczrX -AJcADgCmAPUAmAD2AJwKmwD4CyYLJwq2APsKm4ECaIArgQKBgQKCCYECaF8QFHt7OTcsIDY3fSwgezU0 -LCAxN3192AD/AA4BAAEBAQIBAwEEAQULGwEHALQBUgEKCqsKxgENgCqAIoAwgB+BAoCAJ9cAlwAOAKYA -9QCYAPYAnAqbAPgLNQs2CrYA+wqbgQJogCuBAoSBAoUJgQJoXxAUe3sxNSwgNDN9LCB7NjksIDE3fX3Y -AP8ADgEAAQEBAgEDAQQBBQsbAQcAtAs9AQoKrArGAQ2AKoAigQKGgB+BAoOAJ1pGb250IFNpemVz1wCX -AA4ApgD1AJgA9gCcCpsA+AtFC0YKtgD7CpuBAmiAK4ECiIECiQmBAmhfEBR7ezk3LCA0M30sIHs1NCwg -MTd9fdgA/wAOAQABAQECAQMBBAEFCxsBBwC0C00BCgqtCsYBDYAqgCKBAoqAH4ECh4AnV0Nob3JkczrX -AJcADgCmAPUAmAD2AJwKmwqzC1ULVgq2APsKm4ECaIECe4ECjIECjQmBAmhfEBV7ezE1NiwgMzh9LCB7 -NjAsIDI2fX3eCrsA/wAOAQABAQECAQMBBAq8A5IKvQHWCr4BBQquCsAKwQOVAt0BCgquCsYLYQD7BlkL -YwD7AQ2BAouBAnqAtICCgB+BAouBAo4JgQKPCYAn0gAOAD4ARgtogF+kAogCxgLdAvSAb4B9gIKAh98Q -FgCXCrsDLgG5AbgADgEAAbsBvAG9Ab4K1QCYAJkA9gCaAy8BvwHAAJwBwQHCC24LVgtWCtkBxAraAbAA -+wHLAVQBzAtWAJ8LdQD7C3cLeAHPCuMLbgt7CuaBApCBAo2BAo2BAnmAkgmBAo2BApEJgQKSgQKYgI2B -ApCBApPSAA4APgBGC36AX6ELf4EClNoK7QAOAf4B/wIAAgEK7gICAgMB1gD7AgULgwJFA8YLhQEqA8YK -9AtjCYBlgQKVgFqBApeBAo/XAP8ADgEAAQEBAgEEAQUCDgIPC4kBUgIsAcQByIBTgQKWgDCAVYB00wAO -AR0BKAEgASoCG4Am2AD/AA4BAAECAQMBBAOSAQUK/wEHAbABCgtjCwUA+wENgCqAkoAfgQKPCYAn1wCX -AA4ApgD1AJgA9gCcCpsKswuZC5oKtgD7CpuBAmiBAnuBApqBApsJgQJoXxAVe3sxNTYsIDYyfSwgezYw -LCAyNn193gq7AP8ADgEAAQEBAgEDAQQKvAOSCr0B1gq+AQUKrwrACsEDlQuiAQoKrwrGC6UA+wZZC6cA -+wENgQKZgQJ6gLSBApyAH4ECmYECnQmBAqEJgCdUMTkuNdIADgA+AEYLrYBfpAK+C68LsAuxgHuBAp6B -Ap+BAqBSMThSMjBSMjLfEBYAlwq7Ay4BuQG4AA4BAAG7AbwBvQG+CtUAmACZAPYAmgMvAb8BwACcAcEB -wgu2C5oLmgrZAcQK2gGwAPsBywFUAcwLmgCfC70A+wu/C8ABzwrjC7YLwwrmgQKigQKbgQKbgQJ5gJIJ -gQKbgQKjCYECpIECqoCNgQKigQKl0gAOAD4ARgvGgF+hC8eBAqbaCu0ADgH+Af8CAAIBCu4CAgIDAdYA -+wIFC8sCRQPGC80BKgPGCvQLpwmAZYECp4BagQKpgQKh1wD/AA4BAAEBAQIBBAEFAg4CDwvRAVICLAHE -AciAU4ECqIAwgFWAdNMADgEdASgBIAEqAhuAJtgA/wAOAQABAgEDAQQDkgEFCv8BBwGwAQoLpwsFAPsB -DYAqgJKAH4ECoQmAJ9cAlwAOAKYA9QCYAPYAnAqbAPgL4QviCrYA+wqbgQJogCuBAqyBAq0JgQJoXxAU -e3sxNSwgNjd9LCB7NjksIDE3fX3YAP8ADgEAAQEBAgEDAQQBBQsbAQcAtAvpAQoKsArGAQ2AKoAigQKu -gB+BAquAJ1pTdGFmZiBTaXplXxATe3sxLCAxfSwgezIzMSwgOTZ9fV8QF3t7MjkzLCA1Nn0sIHsyMzMs -IDExMn191wD/AA4BAAEBAQIBBAEFAQYBBwOVC/MCEgHEC/WAKoC0gQKygE+BArNdUHJpbnQgT3B0aW9u -c9MADgEdASgBIAEqCo6AJlp7NTQzLCAxODl9XWZEaXNwbGF5U2hlZXTUAA4AjwCQAJEDXQCUBkAL/4Cu -gAqBAWKBArpdc2V0RGl2aXNpb25zOtQADgCPAJAAkQCSA6sAHwwFgKaAuoACgQK8Xm91dHB1dFRvb2xJ -dGVt1AAOAI8AkACRAJIAlAN9BWyApoAKgLCBASrUAA4AjwCQAJEAkgAfDA8FbICmgAKBAr+BASreAL8A -DgDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywwSAM0MFAwVANAA0QDSDBgMGQwaANYK4wwbDByBAsSApIEC -woEDEYATgBSBAsOBAsCBAxOBAxKBAsFfEBd7ezI1LCAzMDR9LCB7OTcxLCAzOTd9fVp7ODkwLCAzNTB9 -1wCXAA4AqACYAJkAmgCcAKEA6AwiAOsMIwChDCWADYCggQLFgQMPgA2BAxDSAA4APgBGDCiAX6MF1QCs -A4qBAsaBAvSBAv3eAJcJAwAOCQQApgkFAKgAmAkGAJoJBwkIAJwBlAwSASoJCgwvDDAEpgwyDDMBxACh -CRABxAwSBcyBAsSBAmWBAvGBAvAIgQLHEQEKgA2BAmGBAsSBAUbSAA4APgBGDDqAX6EFzIEBRtIADgA+ -AEYMPoBfrgbGBckGQAxCDEMMRAxFDEYMRwxIDEkMSgxLBDqBAYOBAUWBAWKBAsmBAs2BAtGBAtWBAtmB -At2BAuCBAuSBAuiBAuuBAfLYAJcADgCmAPUAmAD2AJoAnAXMAPgMUAxRAOsA+wChBcyBAUaAK4ECyoEC -ywmADYEBRl8QFXt7OTIsIDQ1fSwgezM1MCwgMjJ9fdkA/wAOAQABAQECAQMBBAOSAQUDkwEHA5UMWQEK -DEIKxgD7A5uAKoC0gQLMgB+BAskJgLZfEB9Tb2Z0bHksIEFzIEluIEEgTW9ybmluZyBTdW5yaXNl2ACX -AA4ApgD1AJgA9gCaAJwFzAD4DGIMYwDrAPsAoQXMgQFGgCuBAs6BAs8JgA2BAUZfEBR7ezEzLCA0N30s -IHs1NCwgMTd9fdgA/wAOAQABAQECAQMBBAEFAQYBBwC0DGsBCgxDAQwBDYAqgCKBAtCAH4ECzYAnV1Rp -dGxlOgrYAJcADgCmAPUAmAD2AJoAnAXMAPgMcwx0AOsA+wChBcyBAUaAK4EC0oEC0wmADYEBRl8QFXt7 -MTMsIDIyfSwgezExNCwgMTd9fdgA/wAOAQABAQECAQMBBAEFAQYBBwC0DHwBCgxEAQwBDYAqgCKBAtSA -H4EC0YAnWkNvbXBvc2VyOgrYAJcADgCmAPUAmAD2AJoAnAXMAPgMhAyFAOsA+wChBcyBAUaAK4EC1oEC -1wmADYEBRl8QFXt7OTIsIDIwfSwgezE0MiwgMjJ9fdkA/wAOAQABAQECAQMBBAOSAQUDkwEHA5UMjQEK -DEUKxgD7A5uAKoC0gQLYgB+BAtUJgLZfEA9EaXp6eSBHaWxsZXNwaWXYAJcADgCmAPUAmAD2AJoAnAXM -APgMlgyXAOsA+wChBcyBAUaAK4EC2oEC2wmADYEBRl8QFXt7MjQ2LCAyMn0sIHs1NywgMTd9fdgA/wAO -AQABAQECAQMBBAEFAQYBBwC0DJ8BCgxGAQwBDYAqgCKBAtyAH4EC2YAnWUx5cmljaXN0OtgAlwAOAKYA -9QCYAPYAmgCcBcwA+AynDKgA6wD7AKEFzIEBRoArgQLegQLfCYANgQFGXxAWe3szMDAsIDIwfSwgezE0 -MiwgMjJ9fdkA/wAOAQABAQECAQMBBAOSAQUDkwEHA5UMjQEKDEcKxgD7A5uAKoC0gQLYgB+BAt0JgLbY -AJcADgCmAPUAmAD2AJoAnAXMAPgMuAy5AOsA+wChBcyBAUaAK4EC4YEC4gmADYEBRl8QFXt7NDQ3LCA0 -N30sIHs1NywgMTd9fdgA/wAOAQABAQECAQMBBAEFAQYBBwC0DMEBCgxIAQwBDYAqgCKBAuOAH4EC4IAn -VlRlbXBvOtgAlwAOAKYA9QCYAPYAmgCcBcwA+AzJDMoA6wD7AKEFzIEBRoArgQLlgQLmCYANgQFGXxAV -e3s1MDEsIDQ1fSwgezMzLCAyMn192QD/AA4BAAEBAQIBAwEEA5IBBQOTAQcDlQzSAQoMSQrGAPsDm4Aq -gLSBAueAH4EC5AmAtlMyNzbYAJcADgCmAPUAmAD2AJoAnAXMBQwM2wzcAOsA+wChBcyBAUaBARGBAumB -AuoJgA2BAUZfEBV7ezUzOSwgNDJ9LCB7MTksIDI3fX3aBRMA/wAOBRQM4gUVBRYBAwEEBRcCCAUYBRkF -GgD7DOUCCAxKAcQA+1xOU1ZhbHVlV3JhcHOBARAJI0BywAAAAAAAgQLoCdgAlwAOAKYA9QCYAPYAmgCc -BcwA+AzrDOwA6wD7AKEFzIEBRoArgQLsgQLtCYANgQFGXxAVe3s0NDcsIDIyfSwgezU3LCAxN3192AD/ -AA4BAAEBAQIBAwEEAQUBBgEHALQM9AEKDEsBDAENgCqAIoEC7oAfgQLrgCdYR3Jvb3ZlOgpZezk4OSwg -ODB9XxAWe3stMywgMzE5fSwgezk4OSwgODB9fdcA/wAOAQABAQECAQQBBQEGAQcDlQz+AhIBxA0AgCqA -tIEC8oBPgQLzVVRpdGxl0wAOAR0BKAEgASoKjoAm3ACXAY4ADgCmAY8AqACYAJoAnAGTAKsBlAwSDQYB -lw0IDQkNCgCfAKEMEg0NAJ0AnYECxIEC+oCegQL8ELKBAvWADYECxIEC+IALgAvSAA4APgBGDRKAX6MA -nQ0NDQaAC4EC+IEC+tIADgA+AEYNGIBfoQCUgApfEBR7ezEsIDF9LCB7OTU0LCAzMjh9fdoAlwMuAA4A -pgCYAJoDLwCcDRwDMACsAKwDMw0gAOsAoQM1AKwFGg0kWk5TQ3VyVmFsdWWBAvSBAvSAmIEC+YANgJeB -AvQjP9Bj5wAAAABfEBV7ezk1NSwgMX0sIHsxNSwgMzEyfX3bAJcDLgAOAKYBjwCYAPYAmgMvAJwDMACs -AKwDMw0qAVQA6wD7AKEDNQCsDS+BAvSBAvSAmIEC+wmADYCXgQL0Iz/u5hbAAAAAXxAVe3sxLCAzMjl9 -LCB7OTU0LCAxNX19XxAWe3swLCAtMTd9LCB7OTcxLCAzNDV9fd4AlwkDAA4JBACmCQUAqACYCQYAmgkH -CQgAnAGUDBIBKgkKDTUNNgSmDTgNOQHEAKEJEAHEDBIDgYECxIECZYEDDIEDCwiBAv4T/////4AAAQqA -DYECYYECxICx0gAOAD4ARg1AgF+hA4GAsdIADgA+AEYNRIBfowN9DUYNR4CwgQMAgQMG2ACXAA4ApgD1 -AJgA9gCaAJwDgQFCDUsNTAeAAPsAoQOBgLGAM4EDAYEDAgmADYCxXxAUe3syODksIDR9LCB7MTksIDIz -fX3dAP8ADgFKAUsBTAFNAU4BAQECAQMBTwEEAVABBgFRAVICKQ1UBDYBUg1XDVgNRgIuAVsNWoAygDAQ -IIEBSYAwgQMDgQMEgQMAE/////+GhkD/YSIa1AAOARABEQESARMBFA1eDV+AIYEDBREIGF8QEUx1Y2lk -YUdyYW5kZS1Cb2xk2ACXAA4ApgD1AJgA9gCaAJwDgQFCDWQNZQeAAPsAoQOBgLGAM4EDB4EDCAmADYCx -XxAUe3szMTEsIDR9LCB7MTksIDIzfX3dAP8ADgFKAUsBTAFNAU4BAQECAQMBTwEEAVABBgFRAVICKQ1U -BDYBUg1vDVgNRwIuAVsNWoAygDCBAUmAMIEDCYEDBIEDBlFYWXszMzYsIDM3fV8QF3t7NjI3LCAzMzB9 -LCB7MzM2LCAzN3191wD/AA4BAAEBAQIBBAEFAQYBBwOVDXgCEgHEDXqAKoC0gQMNgE+BAw5cRmllbGQg -RWRpdG9y0wAOAR0BKAEgASoKjoAmWns5NzEsIDM5N31aezg5MCwgMzcyfdQADgCPAJAAkQCSCG0AHw2E -gKaBAeiAAoEDFV8QD2Rpc3BsYXlUb29sSXRlbdQADgCPAJAAkQCSDA8AHw2KgKaBAr+AAoEDF1Z3aW5k -b3fUAA4AjwCQAJEDXQCUDUcIaICugAqBAwaBAebTAA4AkACRA10FdQ2UgK6BAS2BAxpXem9vbUluOtQA -DgCPAJAAkQCSBckAlA2agKaBAUWACoEDHFlmVGltZU1lbnXUAA4AjwCQAJEDXQCUCO4DYICugAqBAgyA -rdQADgCPAJAAkQCSAO8AlA2lgKaAG4AKgQMfWmZFbmRpbmdNc2fUAA4AjwCQAJEDXQCUBDoEBoCugAqB -AfKA2NQADgCPAJAAkQCSBUkAHw2wgKaBASCAAoEDIlxzdG9wVG9vbEl0ZW3UAA4AjwCQAJEAkg20AB8N -toCmgQMkgAKBAynYAJcADgCmBRUAmA24AJwNuQOuDbsNvA29Db4NvwOuDcFZTlNwaUZsYWdzXE5TRHJh -d01hdHJpeIC7gQMogQMnI0BZAAAAAAAAEQUAEXEKgLuBAyXRAA4Nw4EDJtIANwA4DcUNxqINxgA7Wk5T -UFNNYXRyaXhfEBZ7ezM2OSwgMjkyfSwgezE2LCAxNn190gA3ADgNyQ3KpA3KALkAvQA7XxATTlNQcm9n -cmVzc0luZGljYXRvcl8QEHByb2dyZXNzVG9vbEl0ZW3UAA4AjwCQAJEAkgbGAJQN0ICmgQGDgAqBAytY -ZktleU1lbnXUAA4AjwCQAJEDXQCUAPADYICugAqALICt1AAOAI8AkACRAJIAlAN9DduApoAKgLCBAy5b -bmV4dEtleVZpZXfTAA4AkACRA10FrA3ggK6BAT2BAzBYem9vbU91dDrUAA4AjwCQAJEDXQN9DUYN5oCu -gLCBAwCBAzJbc2VsZWN0VGV4dDrXAA4Ajw3pDeoAkACRDesN7AAfDe4N7wkhDfEA1llOU0tleVBhdGhZ -TlNCaW5kaW5nXxAcTlNOaWJCaW5kaW5nQ29ubmVjdG9yVmVyc2lvboEDN4ACgQM2gQM1gQIYgQM0XxAg -c2VsZWN0ZWRJbmRleDogZWRpdE51bVRvcExlZGdlcnNdc2VsZWN0ZWRJbmRleF8QEWVkaXROdW1Ub3BM -ZWRnZXJz0gA3ADgN9g33ow33A1sAO18QFU5TTmliQmluZGluZ0Nvbm5lY3RvctcADgCPDekN6gCQAJEN -6w3sAB8N+w3vCSYN/gDWgQM3gAKBAzqBAzWBAkaBAzlfEB1zZWxlY3RlZEluZGV4OiBlZGl0TnVtU3Rh -bnphc15lZGl0TnVtU3Rhbnphc9cADgCPDekN6gCQAJEN6w3sAB8OBA4FA30OBwDWgQM3gAKBAz6BAz2A -sIEDPF8QHXZhbHVlOiBlZGl0VGFyZ2V0LnN0cmluZ1ZhbHVlVXZhbHVlXxAWZWRpdFRhcmdldC5zdHJp -bmdWYWx1ZdcADgCPDekN6gCQAJEN6w3sAB8ODg4FBFwOEQDWgQM3gAKBA0GBAz2A5YEDQF8QG3ZhbHVl -OiBkb2N1bWVudC5yZXBlYXRWb2x0YV8QFGRvY3VtZW50LnJlcGVhdFZvbHRh1wAOAI8N6Q3qAJAAkQ3r -DewAHw4XDe8JIw4aANaBAzeAAoEDRIEDNYECLYEDQ18QIHNlbGVjdGVkSW5kZXg6IGVkaXROdW1Cb3RM -ZWRnZXJzXxARZWRpdE51bUJvdExlZGdlcnPXAA4Ajw3pDeoAkACRDesN7AAfDiAOBQxJDiMA1oEDN4AC -gQNHgQM9gQLkgQNGXxAZdmFsdWU6IGRvY3VtZW50LnNvbmdUZW1wb18QEmRvY3VtZW50LnNvbmdUZW1w -b9cADgCPDekN6gCQAJEN6w3sAB8OKQ4FCrUOLADWgQM3gAKBA0qBAz2BAmyBA0lfEBl2YWx1ZTogZG9j -dW1lbnQubHlyaWNTaXplXxASZG9jdW1lbnQubHlyaWNTaXpl1wAOAI8N6Q3qAJAAkQ3rDewAHw4ODgUE -XQ4RANaBAzeAAoEDQYEDPYEBDYEDQNcADgCPDekN6gCQAJEN6w3sAB8OOQ4FCq8OPADWgQM3gAKBA06B -Az2BApmBA01fEBl2YWx1ZTogZG9jdW1lbnQuc3RhZmZTaXplXxASZG9jdW1lbnQuc3RhZmZTaXpl1wAO -AI8N6Q3qAJAAkQ3rDewAHw5CDgUMRw5FANaBAzeAAoEDUYEDPYEC3YEDUF8QHHZhbHVlOiBkb2N1bWVu -dC5zb25nTHlyaWNpc3RfEBVkb2N1bWVudC5zb25nTHlyaWNpc3TXAA4Ajw3pDeoAkACRDesN7AAfDiAO -BQxKDiMA1oEDN4ACgQNHgQM9gQLogQNG1wAOAI8N6Q3qAJAAkQ3rDewAHw5SDgUMRQ5VANaBAzeAAoED -VYEDPYEC1YEDVF8QHHZhbHVlOiBkb2N1bWVudC5zb25nQ29tcG9zZXJfEBVkb2N1bWVudC5zb25nQ29t -cG9zZXLYAA4Ajw3pDeoAkACRDlkN6w3sAB8OXA5dA4oOXw5gANZZTlNPcHRpb25zgQM3gAKBA1mBA1iB -Av2BA1eBA1pfEBJoaWRkZW46IGVkaXRUYXJnZXRWaGlkZGVuWmVkaXRUYXJnZXTTAA4EqAA+BPEOZg5o -gQECoQ5ngQNboQ5pgQNcXxAWTlNWYWx1ZVRyYW5zZm9ybWVyTmFtZVdOU0lzTmls1wAOAI8N6Q3qAJAA -kQ3rDewAHw5vDgUMQg5yANaBAzeAAoEDX4EDPYECyYEDXl8QGXZhbHVlOiBkb2N1bWVudC5zb25nVGl0 -bGVfEBJkb2N1bWVudC5zb25nVGl0bGXXAA4Ajw3pDeoAkACRDesN7AAfDngOBQquDnsA1oEDN4ACgQNi -gQM9gQKLgQNhXxAZdmFsdWU6IGRvY3VtZW50LmNob3JkU2l6ZV8QEmRvY3VtZW50LmNob3JkU2l6ZdQA -DgCPDn8OgA6BA6sOgw6EWE5TTWFya2VyVk5TRmlsZYEDZoC6gQNlgQNkXxAQTlNUb29sVGlwSGVscEtl -eV8QG1R5cGVzZXQgYW5kIFNob3cgTGVhZCBTaGVldNIANwA4DogOiaIOiQA7XxARTlNJQkhlbHBDb25u -ZWN0b3LUAA4Ajw5/DoAOgQWRDo0OhIEDZoEBNYEDaIEDZF8QEFNob3cgQ29uc29sZSBMb2fUAA4Ajw5/ -DoAOgQaqDpMOhIEDZoEBe4EDaoEDZF1QbGF5IHRoZSBTb25n1AAOAI8Ofw6ADoEFdQWCDoSBA2aBAS2B -ATCBA2TUAA4Ajw5/DoAOgQWsBbkOhIEDZoEBPYEBQIEDZNQADgCPDn8OgA6BBUkOow6EgQNmgQEggQNu -gQNkXVN0b3AgUGxheWJhY2vUAA4Ajw5/DoAOgQhtDqkOhIEDZoEB6IEDcIEDZF8QHVNldCBEaXNwbGF5 -IGFuZCBQcmludCBPcHRpb25z0gAOAD4CQw6ugF6vENsLmgs2A9wB9wb/BSgD7gNfDUYGBQijBwEA7wvi -BwIC1gPxA2IKDQjwDQ0OxAD6CjUKGAo2BsYKrAyFA30G/gZ0CYwMRQn9AokGBw1HBBADBQREBTgKNAZY -DBIMSQH5CSAGQAH6DEQJYAqqBwoIpAxDBtwEXQWsAfgO6wnEAZYCqQxLBegEOgb8BwAI7wCUBZcKrgb4 -CrAMUQzKCjEKrw7+DOwNBgWzBU8JYQliAccJJQxIA9YFkQoyBIEMRgcEDHQBRAZHDEoKqQFqBnMEGAju -CcIFDgsWCPUJOwRbCacHCAnDAMwF4wb9BnIB9gwPAfUBrwPrCKIArAjYCycIcwb0CG0G9wOxAPEJ7QZU -AfsDqwReBrAHDAbMCSMJJAK/DKgFzw1lBFwKrQ20BqoFSQH8BnADhA1MBwYFyQtWAPMGBAq1BXwHBwOK -AmsMRwkmBGYHAwcFBAUJnAcOBnEG9QqrCjMM3AbYCUYMYwkhBdUHDwcJBgYKHAb5BXUCCQlKC0YJwQcL -A2UMlwljBHYKNwy5BxIBngkrDEIAkwb7Bw0Drgb6BxEG9gF9CjgA8AmrAu0JIgRhAPKBApuBAoWAx4Bu -gQGsgQEUgMqAqIEDAIEBVIEB+YEBsoAbgQKtgQG1gIOAzICpgQJIgQJmgQL4gQNygB2BAleBAkqBAlmB -AYOBAoOBAteAsIEBqYEBd4ECK4EC1YECRIB1gQFagQMGgNaAjIDagQEYgQJVgQFngQLEgQLkgHqBAhSB -AWKAf4EC0YECIYECfIEBy4EB/IECzYEBiIEBDYEBPYB2gQN+gQI8gJmAeYEC64EBTIEB8oEBpIEBr4EC -EIAKgQE3gQKLgQGYgQKrgQLLgQLmgQJPgQKZgQOAgQLtgQL6gQE/gQEigQIjgQIlgESBAkKBAuCAxYEB -NYECUYDogQLZgQG6gQLTgC6BAWSBAuiBAmqANoEBdYDPgQIMgQI4gQEPgQJ+gQIOgQIagOGBAjGBAcWB -AjqAGYEBS4EBpoEBcoBmgQK/gEyAQoDJgQH3gQL0gQIGgQKCgQHqgQGNgQHogQGVgL2ANIECQIEBZoCE -gLqBARKBAX2BAdGBAYWBAi2BAj6AfoEC34EBSIEDCIDlgQKHgQMkgQF7gQEggImBAWyAs4EDAoEBv4EB -RYECjYA+gQFRgQJsgQEvgQHCgQL9gGmBAt2BAkaA44EBuIEBvYDOgQIvgQHWgQFvgQGQgQKAgQJTgQLq -gQGHgQIcgQLPgQIYgQLGgQHZgQHIgQFXgQJLgQGbgQEtgFSBAh2BAomBAjaBAc6Aq4EC24ECJ4DngQJb -gQLigQHfgJWBAhaBAsmAEYEBoYEB04C7gQGegQHcgQGSgDuBAl2ALIECMoCIgQIpgQEWgDneAL8ADgDA -AMEAwgDDAMQAxQDGAMcAyADJAMoAywOuAM0PjQ+OD48A0Q+QD5EPkg+TANYK4w+UD5WAu4CkgQN3gQN7 -gQN0gQN1gQN4gQNzgQN9gQN8gQN2XxAYe3szMDgsIDE0OX0sIHs0ODAsIDM2MH190gAOAN0A3gDbgBbS -AA4A3QDeAJqAFtIADgDdAN4A34AW0gAOAD4ARg+fgF+oA6sFkQaqBXUFrAVJDbQIbYC6gQE1gQF7gQEt -gQE9gQEggQMkgQHoWns0ODAsIDM2MH3SAA4Pqg+rAPtfEBBOU1NoYXJlZEluc3RhbmNlgQN/CdIANwA4 -D64Pr6MPrw+wADtfEBhOU1VzZXJEZWZhdWx0c0NvbnRyb2xsZXJcTlNDb250cm9sbGVy0gAOADIAMw+z -gASBA4FdTlNBcHBsaWNhdGlvbtIADgA+AkMPt4BerxDbCq8KrAPWAa8G3AReCNgDYgOKBegEGAbcAMwK -sAbcAfoD6wRECSYD7gCsAB8A7wocChwKHAXVCPAMRQOKBtwGWAkiBdUJJQH3BegDigQ6AfwAHwRhChwG -RwwPBdUBrwjvBdUBrwXVCUoI8AbcBBgF1QbMA2IDrgGvAB8JqwDzAfgF1QXPBdUG3AbcA+4ArAWRCPAG -3AjwDEIMSQocCPAAHwxLAKwFrAVJCUoJSgDzCO8F1QNiA64KHAR2BdUG3AxEAPAGQAXVCPAA8QZYBBAD -7gmrBF0KqgjuCSEDYgmrBtwJqwCTBegG3AZYAa8AHwGvAPMD7gQYDBIAHwqrCG0G3AOuBtwDqwDMCSQG -WAGvA64DYgaqBtwGxgjvCO8B+QxHBckNRwNiCPADrgOuA64BrwZYA30NRgbcBdUKrgDMBegKqQV1BtwM -EgH2BdUI7wRbBtwG3AQYCSMG3AZYBtwI8AocDEoG3AlKDEMI7wwSBtwG3AXoCg0G3AOuAfUJOwqtCasG -3ANfDEYJSgRcChwMSAbcAPMJIAXVAB8G3AbcDsQG3AbcBtwA8gocAMwJnAH7CO8DYgDMgQKZgQKDgMWA -QoEBiIEBEoECBoCpgQL9gQFMgM+BAYiAGYECq4EBiIB/gMmA2oECRoDKgQL0gAKAG4ECS4ECS4ECS4EC -xoECZoEC1YEC/YEBiIEBZ4ECKYECxoECQoBugQFMgQL9gQHygImAAoEBFoECS4EBZIECv4ECxoBCgQIQ -gQLGgEKBAsaBAh2BAmaBAYiAz4ECxoEBhYCpgLuAQoACgQIygD6AdoECxoEBSIECxoEBiIEBiIDKgQL0 -gQE1gQJmgQGIgQJmgQLJgQLkgQJLgQJmgAKBAuuBAvSBAT2BASCBAh2BAh2APoECEIECxoCpgLuBAkuA -54ECxoEBiIEC0YAsgQFigQLGgQJmgDSBAWeA1oDKgQIygQENgQJ8gQIMgQIYgKmBAjKBAYiBAjKAEYEB -TIEBiIEBZ4BCgAKAQoA+gMqAz4ECxIACgQKAgQHogQGIgLuBAYiAuoAZgQI+gQFngEKAu4CpgQF7gQGI -gQGDgQIQgQIQgHqBAt2BAUWBAwaAqYECZoC7gLuAu4BCgQFngLCBAwCBAYiBAsaBAouAGYEBTIECaoEB -LYEBiIECxIBmgQLGgQIQgOGBAYiBAYiAz4ECLYEBiIEBZ4EBiIECZoECS4EC6IEBiIECHYECzYECEIEC -xIEBiIEBiIEBTIECSIEBiIC7gEyBAhqBAoeBAjKBAYiAqIEC2YECHYDlgQJLgQLggQGIgD6BAhSBAsaA -AoEBiIEBiIEDcoEBiIEBiIEBiIA5gQJLgBmBAi+AhIECEICpgBnSAA4APgJDEJWAXq8Q3AuaCzYD7gPc -BSgB9wb/A18NRgYFCKMHAQDvC+IC1gcCA/EDYgjwCg0NDQ7EAPoKNQoYCjYGxgqsDIUDfQb+CYwGdAxF -Cf0CiQYHDUcEEAMFBEQFOAo0BlgMEgxJCSAB+QZAAfoMRAlgCqoHCgikDEMEXQbcBawO6wH4CcQBlgKp -DEsF6AQ6BvwHAAjvAJQFlwquBvgKsAxRDMoKrwoxDv4M7A0GBbMFTwlhCWIBxwklDEgD1gWRCjIEgQxG -BwQBRAx0DEoKqQZHAWoGcwjuCxYEGAUOCcII9Qk7BFsJpwcICcMAzAXjBv0B9gZyDA8D6wGvAfUIogjY -AKwLJwhzBvQIbQOxBvcA8QntBlQB+wOrBF4GsAcMBswJIwkkAr8EXAqtDWUFzwyoDbQGqgVJAfwGcAOE -BckNTAtWBwYA8wq1BgQFfAcHA4oCawxHCSYEZgcDBwUJnAQFBw4GcQb1CqsKMwzcBtgJRgxjCSEAHwXV -Bw8HCQYGChwG+QV1AgkJSgtGCcEHCwNlDJcKNwR2CWMMuQGeCSsHEgCTDEIDrgb7Bw0G+gF9BxEG9go4 -APAJqwLtCSIEYQDygQKbgQKFgMqAx4EBFIBugQGsgKiBAwCBAVSBAfmBAbKAG4ECrYCDgQG1gMyAqYEC -ZoECSIEC+IEDcoAdgQJXgQJKgQJZgQGDgQKDgQLXgLCBAamBAiuBAXeBAtWBAkSAdYEBWoEDBoDWgIyA -2oEBGIECVYEBZ4ECxIEC5IECFIB6gQFigH+BAtGBAiGBAnyBAcuBAfyBAs2BAQ2BAYiBAT2BA36AdoEC -PICZgHmBAuuBAUyBAfKBAaSBAa+BAhCACoEBN4ECi4EBmIECq4ECy4EC5oECmYECT4EDgIEC7YEC+oEB -P4EBIoECI4ECJYBEgQJCgQLggMWBATWBAlGA6IEC2YEBuoAugQLTgQLogQJqgQFkgDaBAXWBAgyBAn6A -z4EBD4ECOIECDoECGoDhgQIxgQHFgQI6gBmBAUuBAaaAZoEBcoECv4DJgEKATIEB94ECBoEC9IECgoEB -6oEBjYEB6IC9gQGVgDSBAkCBAWaAhIC6gQESgQF9gQHRgQGFgQItgQI+gH6A5YECh4EDCIEBSIEC34ED -JIEBe4EBIICJgQFsgLOBAUWBAwKBAo2BAb+APoECbIEBUYEBL4EBwoEC/YBpgQLdgQJGgOOBAbiBAb2B -Ai+AzoEB1oEBb4EBkIECgIECU4EC6oEBh4ECHIECz4ECGIACgQLGgQHZgQHIgQFXgQJLgQGbgQEtgFSB -Ah2BAomBAjaBAc6Aq4EC24ECW4DngQIngQLigJWBAhaBAd+AEYECyYC7gQGhgQHTgQGegDuBAdyBAZKB -Al2ALIECMoCIgQIpgQEWgDnSAA4APgJDEXSAXq8Q3BF1EXYRdxF4EXkRehF7EXwRfRF+EX8RgBGBEYIR -gxGEEYURhhGHEYgRiRGKEYsRjBGNEY4RjxGQEZERkhGTEZQRlRGWEZcRmBGZEZoRmxGcBUERnhGfEaAR -oRGiEaMRpBGlEaYRpxGoEakRqhGrEawRrRGuEa8RsBGxEbIRsxG0EbURthG3EbgRuRG6EbsRvBG9Eb4R -vxHAEcERwhHDEcQRxRHGEccRyBHJEcoRyxHMEc0RzhHPEdAR0RHSEdMR1BHVEdYR1xHYEdkR2hHbEdwR -3RHeEd8R4BHhEeIR4xHkEeUR5hHnEegR6RHqEesR7BHtEe4R7wh5EfER8hHzEfQR9RH2EfcR+BH5EfoR -+xH8Ef0R/hH/EgASARICEgMSBBIFEgYSBxIIEgkSChILEgwSDRIOEg8SEBIREhISExIUEhUSFhIXEhgS -GRIaEhsSHBIdEh4SHxIgEiESIhIjEiQSJRImEicSKBIpEioSKxIsEi0SLhIvEjASMRIyEjMSNBI1EjYS -NxI4EjkSOhI7EjwSPRI+Ej8SQBJBEkISQxJEEkUSRhJHEkgSSRJKEksSTBJNEk4STxJQgQOFgQOGgQOH -gQOIgQOJgQOKgQOLgQOMgQONgQOOgQOPgQOQgQORgQOSgQOTgQOUgQOVgQOWgQOXgQOYgQOZgQOagQOb -gQOcgQOdgQOegQOfgQOggQOhgQOigQOjgQOkgQOlgQOmgQOngQOogQOpgQOqgQOrgQOsgQEZgQOtgQOu -gQOvgQOwgQOxgQOygQOzgQO0gQO1gQO2gQO3gQO4gQO5gQO6gQO7gQO8gQO9gQO+gQO/gQPAgQPBgQPC -gQPDgQPEgQPFgQPGgQPHgQPIgQPJgQPKgQPLgQPMgQPNgQPOgQPPgQPQgQPRgQPSgQPTgQPUgQPVgQPW -gQPXgQPYgQPZgQPagQPbgQPcgQPdgQPegQPfgQPggQPhgQPigQPjgQPkgQPlgQPmgQPngQPogQPpgQPq -gQPrgQPsgQPtgQPugQPvgQPwgQPxgQPygQPzgQP0gQP1gQP2gQP3gQP4gQP5gQP6gQP7gQP8gQP9gQP+ -gQHrgQP/gQQAgQQBgQQCgQQDgQQEgQQFgQQGgQQHgQQIgQQJgQQKgQQLgQQMgQQNgQQOgQQPgQQQgQQR -gQQSgQQTgQQUgQQVgQQWgQQXgQQYgQQZgQQagQQbgQQcgQQdgQQegQQfgQQggQQhgQQigQQjgQQkgQQl -gQQmgQQngQQogQQpgQQqgQQrgQQsgQQtgQQugQQvgQQwgQQxgQQygQQzgQQ0gQQ1gQQ2gQQ3gQQ4gQQ5 -gQQ6gQQ7gQQ8gQQ9gQQ+gQQ/gQRAgQRBgQRCgQRDgQREgQRFgQRGgQRHgQRIgQRJgQRKgQRLgQRMgQRN -gQROgQRPgQRQgQRRgQRSgQRTgQRUgQRVgQRWgQRXgQRYgQRZgQRagQRbgQRcgQRdgQReXxAVQ29tYm8g -Qm94IENlbGwgKDE5LjUpXxAcVGV4dCBGaWVsZCBDZWxsIChGb250IFNpemVzKV5Db250ZW50IFZpZXct -NF8QFEJ1dHRvbiBDZWxsIChDYW5jZWwpXxAYVGV4dCBGaWVsZCBDZWxsICh0aW1lcy4pXxAQVGFibGUg -Q29sdW1uICg0KV1NZW51IEl0ZW0gKEEpXxAaUHVzaCBCdXR0b24gKERvbid0IFJlcGVhdClvEBoAUwBx -AHUAYQByAGUAIABUAGUAeAB0AHUAcgBlAGQAIABCAHUAdAB0AG8AbgAgACgiGgApXxAPTWVudSBJdGVt -ICgzLzQpXxARTWVudSBJdGVtIChTd2luZyldTWVudSBJdGVtIChCKV8QQlN0YXRpYyBUZXh0IChFbmRp -bmcgaW4gbWVhc3VyZXMgMSB0aHJvdWdoIDEwIGFwcGxpZXMgdG8gcmVwZWF0czoKKV8QHFRleHQgRmll -bGQgQ2VsbCAoU3RhZmYgU2l6ZSldQnV0dG9uIENlbGwtMl5NZW51IEl0ZW0gKEYjKV8QFkJ1dHRvbiBD -ZWxsIChDYW5jZWwpLTJeQ29udGVudCBWaWV3LTJfEBNCb3ggKFByaW50IE9wdGlvbnMpXxAWUG9wIFVw -IEJ1dHRvbiBDZWxsICg4KV8QEVZlcnRpY2FsIFNjcm9sbGVyXVRvb2xiYXIgSXRlbXNfEEZUZXh0IEZp -ZWxkIENlbGwgKEVuZGluZyBpbiBtZWFzdXJlcyAxIHRocm91Z2ggMTAgYXBwbGllcyB0byByZXBlYXRz -OgopXxAPTWVudSBJdGVtICg0KS0xXxAPTWVudSBJdGVtICg4KS0xXU1lbnUgSXRlbSAoNSlfEBJQb3B1 -cCBCdXR0b24gKEMjbSlfEBhTdGF0aWMgVGV4dCAoRm9udCBTaXplcylfECFUZXh0IEZpZWxkIENlbGwg -KERpenp5IEdpbGxlc3BpZSlaVGV4dCBGaWVsZF1NZW51IEl0ZW0gKEQpXxAoVGV4dCBGaWVsZCBDZWxs -IChCb3R0b206CiAKTGVkZ2VyIExpbmVzKV1NZW51IEl0ZW0gKDgpXxAcVGV4dCBGaWVsZCAoRGl6enkg -R2lsbGVzcGllKV8QIVRleHQgRmllbGQgQ2VsbCAoTHlyaWNzIFN0YW56YXM6KVtCdXR0b24gQ2VsbF8Q -D01lbnUgSXRlbSAoNS80KV8QGlNxdWFyZSBUZXh0dXJlZCBCdXR0b24gKFgpXxAeUG9wIFVwIEJ1dHRv -biBDZWxsIChTZWxlY3QuLi4pXUJ1dHRvbiBDZWxsLTdfEBRCdXR0b24gQ2VsbCAoUmVwZWF0KV8QD01l -bnUgSXRlbSAoMyktMV8QE01lbnUgKE90aGVyVmlld3MpLTFcQ29udGVudCBWaWV3XxAQVGV4dCBGaWVs -ZCAoMjc2KV8QElN0YXRpYyBUZXh0IChUb3A6KV8QEVRhYmxlIENvbHVtbiAoMTYpXxARUG9wdXAgQnV0 -dG9uICgxMilfEBFUYWJsZSBDb2x1bW4gKDMyKV8QGFN0YXRpYyBUZXh0IChDb21wb3NlcjoKKV8QD01l -bnUgSXRlbSAoMSktMl8QFVN0YXRpYyBUZXh0IChMeXJpY3M6KW8QDwBNAGUAbgB1ACAASQB0AGUAbQAg -ACgAQiZtAG0AKV8QFU1lbnUgSXRlbSAoQm9zc2FOb3ZhKV8QFVN0YXRpYyBUZXh0IChUaXRsZToKKVdT -dGVwcGVyXxARTWVudSAoT3RoZXJWaWV3cylfEBdCZXZlbCBCdXR0b24gKFpvb20gT3V0KV8QH1NoYXJl -ZCBVc2VyIERlZmF1bHRzIENvbnRyb2xsZXJfEBBUYWJsZSBDb2x1bW4gKDgpXU1lbnUgSXRlbSAoNClf -EBVIb3Jpem9udGFsIFNjcm9sbGVyLTFdQnV0dG9uIENlbGwtM18QFlN0YXRpYyBUZXh0IChHcm9vdmU6 -CilfEBNNZW51IChPdGhlclZpZXdzKS0zXxAYUG9wdXAgQnV0dG9uIChTZWxlY3QuLi4pWVNlcGFyYXRv -cl1NZW51IEl0ZW0gKEUpXxAVQm94IChEaXNwbGF5IE9wdGlvbnMpWlNoZWV0IFZpZXdfEBZCdXR0b24g -Q2VsbCAoU2hvdyBMb2cpXUNvbWJvIEJveCAoNiluAE0AZQBuAHUAIABJAHQAZQBtACAAKABFJm0AKV8Q -GFN0YXRpYyBUZXh0IChTdGFmZiBTaXplKV8QMVRleHQgRmllbGQgQ2VsbCAoU29mdGx5LCBBcyBJbiBB -IE1vcm5pbmcgU3VucmlzZSlfEBVUZXh0IEZpZWxkIENlbGwgKDI3NilfEBBDb21ibyBCb3ggKDE5LjUp -XxAPTWVudSBJdGVtICgwKS0xW0FwcGxpY2F0aW9uXxAaVGV4dCBGaWVsZCBDZWxsIChHcm9vdmU6Cilf -EBNIb3Jpem9udGFsIFNjcm9sbGVyXxAWQnV0dG9uIENlbGwgKFpvb20gT3V0KV8QEkJ1dHRvbiBDZWxs -IChTdG9wKV8QD01lbnUgSXRlbSAoMiktMl8QD01lbnUgSXRlbSAoMyktMl8QEVRhYmxlIEhlYWRlciBW -aWV3XxAdU3RhdGljIFRleHQgKEx5cmljcyBTdGFuemFzOilfEBRTdGF0aWMgVGV4dCAoVGVtcG86KV8Q -FFB1c2ggQnV0dG9uIChDYW5jZWwpXxAXQmV2ZWwgQnV0dG9uIChTaG93IExvZylfEA9NZW51IEl0ZW0g -KDEpLTFfEBBOdW1iZXIgRm9ybWF0dGVyXxAXU3RhdGljIFRleHQgKEx5cmljaXN0OileTWVudSBJdGVt -IChBbSlfEBtCdXR0b24gQ2VsbCAoRGVsZXRlIEVuZGluZylfEBxUZXh0IEZpZWxkIENlbGwgKENvbXBv -c2VyOgopWVN0ZXBwZXItMV8QD0NvbWJvIEJveCAoNiktMV8QF1BvcCBVcCBCdXR0b24gQ2VsbCAoMTIp -XxAWQnV0dG9uIENlbGwgKENhbmNlbCktMV1NZW51IEl0ZW0gKDYpXxAQUHVzaCBCdXR0b24gKE9LKV8Q -GVRleHQgRmllbGQgQ2VsbCAoTHlyaWNzOilfEBNNZW51IChPdGhlclZpZXdzKS0yXFN0ZXBwZXIgQ2Vs -bF1NZW51IEl0ZW0gKDIpXxAQQnV0dG9uIENlbGwgKE9LKV8QGFBvcCBVcCBCdXR0b24gQ2VsbCAoMCkt -MV8QKlN0YXRpYyBUZXh0IChSZXBlYXQgbWVhc3VyZXMgMSB0aG91Z2ggMTQKKV1NZW51IEl0ZW0gKDAp -Xk1lbnUgSXRlbSAoQ20pXU1lbnUgSXRlbSAoMyleQ29udGVudCBWaWV3LTNfEA9NZW51IEl0ZW0gKDQv -NCldTWVudSBJdGVtIChHKV8QEFRhYmxlIENvbHVtbiAoMilfEBpNZW51IEl0ZW0gKDQgKFNpeHRlZW50 -aHMpKV8QElNoZWV0IE11c2ljIFdpbmRvd18QFlB1c2ggQnV0dG9uIChDYW5jZWwpLTJfECNUYWJsZSBW -aWV3ICgxLCAyLCAzLCA0LCA1LCA2LCA3LCA4KV8QEFRhYmxlIENvbHVtbiAoMSlbU2VwYXJhdG9yLTVb -U2Nyb2xsIFZpZXdfEBFUZXh0IEZpZWxkIENlbGwtMV8QFUJ1dHRvbiBDZWxsIChEaXNwbGF5KV1NZW51 -IEl0ZW0gKEMpXxAWQmV2ZWwgQnV0dG9uIChEaXNwbGF5KV8QFUJ1dHRvbiBDZWxsIChQcmV2aWV3KW4A -TQBlAG4AdQAgAEkAdABlAG0AIAAoAEImbQApXxAWUHVzaCBCdXR0b24gKENhbmNlbCktMV8QHlRleHQg -RmllbGQgQ2VsbCAoTGVkZ2VyIExpbmVzKV5NZW51IEl0ZW0gKDEyKV8QEVRhYmxlIENvbHVtbiAoNjQp -XxAWQmV2ZWwgQnV0dG9uIChQcmV2aWV3KV8QFFN0YXRpYyBUZXh0ICh0aW1lcy4pXxASQnV0dG9uIENl -bGwgKFBsYXkpW1NlcGFyYXRvci0xXxAYUG9wIFVwIEJ1dHRvbiBDZWxsIChDI20pXxAQUG9wdXAgQnV0 -dG9uICgwKV8QGlN0YXRpYyBUZXh0IChMZWRnZXIgTGluZXMpXUJ1dHRvbiBDZWxsLTFeVGV4dCBGaWVs -ZCAoMilfEBVTdGF0aWMgVGV4dCAoQ2hvcmRzOilfEA9CdXR0b24gQ2VsbCAoWClfEBhQb3AgVXAgQnV0 -dG9uIENlbGwgKDQvNClfECNUZXh0IEZpZWxkIENlbGwgKERpenp5IEdpbGxlc3BpZSktMVxBc3luYyBB -cnJvd3NfEBNCZXZlbCBCdXR0b24gKFBsYXkpXxATQmV2ZWwgQnV0dG9uIChTdG9wKV8QElRhYmxlIENv -bHVtbiAoMTI4KV8QGE1lbnUgSXRlbSAoMiAoU3RyYWlnaHQpKV8QD1RleHQgRmllbGQgQ2VsbF8QElBv -cHVwIEJ1dHRvbiAoNC80KW8QDwBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoIhoAKV8QEkNvbWJvIEJv -eCBDZWxsICg2KV5NZW51IEl0ZW0gKERtKV1TY3JvbGwgVmlldy0xXxAUQ29tYm8gQm94IENlbGwgKDYp -LTFfEA9NZW51IEl0ZW0gKDYvOClfEBVCdXR0b24gQ2VsbCAoWm9vbSBJbileTWVudSBJdGVtIChHbSlf -EBJCb3ggKEZpZWxkIEVkaXRvcildQnV0dG9uIENlbGwtNF8QHlRleHQgRmllbGQgKERpenp5IEdpbGxl -c3BpZSktMV8QEFBvcHVwIEJ1dHRvbiAoOClfEC5UZXh0IEZpZWxkIENlbGwgKFJlcGVhdCBtZWFzdXJl -cyAxIHRob3VnaCAxNAopW1NlcGFyYXRvci0yW1NlcGFyYXRvci0zXxAWUG9wIFVwIEJ1dHRvbiBDZWxs -ICgwKV8QFU1lbnUgSXRlbSAoU2VsZWN0Li4uKV5NZW51IEl0ZW0gKEJtKV8QFU1lbnUgSXRlbSAoMyAo -U3dpbmcpKVtTZXBhcmF0b3ItNFtTdGF0aWMgVGV4dF8QD01lbnUgSXRlbSAoMiktMV5TdGVwcGVyIENl -bGwtMV8QD01lbnUgSXRlbSAoQyNtKV8QD01lbnUgSXRlbSAoMCktMl8QGVRleHQgRmllbGQgQ2VsbCAo -VGl0bGU6CilfEBJQb3B1cCBCdXR0b24gKDApLTFcRmlsZSdzIE93bmVyW0JveCAoVGl0bGUpXxAPTWVu -dSBJdGVtIChGI20pXk1lbnUgSXRlbSAoRm0pXxAQTWVudSBJdGVtICgxMi84KV8QE01lbnUgKE90aGVy -Vmlld3MpLTVuAE0AZQBuAHUAIABJAHQAZQBtACAAKABBJm0AKV8QFkJldmVsIEJ1dHRvbiAoWm9vbSBJ -bildQnV0dG9uIENlbGwtNV8QE01lbnUgKE90aGVyVmlld3MpLTZfEBlUZXh0IEZpZWxkIENlbGwgKENo -b3JkczopXU1lbnUgSXRlbSAoMSlvEA8ATQBlAG4AdQAgAEkAdABlAG0AIAAoAEUmbQBtAClfEBpCdXR0 -b24gQ2VsbCAoRG9uJ3QgUmVwZWF0KV8QG1RleHQgRmllbGQgQ2VsbCAoTHlyaWNpc3Q6KV8QD01lbnUg -SXRlbSAoNiktMV8QE1RleHQgRmllbGQgQ2VsbCAoMilfEA9NZW51IEl0ZW0gKDQpLTJfEBhUZXh0IEZp -ZWxkIENlbGwgKFRlbXBvOilfEBNWZXJ0aWNhbCBTY3JvbGxlci0xXxAWVGV4dCBGaWVsZCBDZWxsIChU -b3A6KV8QD01lbnUgSXRlbSAoRCNtKVdFbmRpbmdzXxAsVGV4dCBGaWVsZCAoU29mdGx5LCBBcyBJbiBB -IE1vcm5pbmcgU3VucmlzZSleQ29udGVudCBWaWV3LTFuAE0AZQBuAHUAIABJAHQAZQBtACAAKABHJm0A -KV5NZW51IEl0ZW0gKEVtKW4ATQBlAG4AdQAgAEkAdABlAG0AIAAoAEQmbQApXxAYQnV0dG9uIENlbGwg -KEFkZCBFbmRpbmcpXxAPTWVudSBJdGVtIChHI20pXU1lbnUgSXRlbSAoRildTWVudSBJdGVtICg3KV8Q -G1B1c2ggQnV0dG9uIChEZWxldGUgRW5kaW5nKV8QE01lbnUgKE90aGVyVmlld3MpLTRdQnV0dG9uIENl -bGwtNl8QJFN0YXRpYyBUZXh0IChCb3R0b206CiAKTGVkZ2VyIExpbmVzKV8QFFB1c2ggQnV0dG9uIChS -ZXBlYXQpXxAYUHVzaCBCdXR0b24gKEFkZCBFbmRpbmcp0gAOAD4CQxMtgF6g0gAOAD4CQxMwgF6g0gAO -AD4CQxMzgF6vEQEiAHYLmgs2AIcAdQPcAfcG/wUoA+4DXw1GBgUIowcBAO8ASgviBwIC1gPxA2IKDQjw -DQ0OxAD6CjUKGAo2AIgGxgqsDIUAaQN9AG0G/gZ0CYwMRQn9AEwAfwKJBgcAig1HAHgEEAMFAIQERAU4 -AFoKNAZYDBIMSQH5CSAGQABOAfoAbAxEAGQJYAqqAG8HCgikDEMG3ARdBawAewH4DusJxAGWAIYAagKp -AGsMSwXoAIEEOgCMBvwHAAjvAFQAlAWXAHwKrgb4CrAMUQzKCjEKrwBVDv4AhQzsDQYFswVPCWEJYgHH -CSUAWAxIA9YFkQoyBIEMRgcEDHQBRAZHDEoKqQFqAIAAXgBIAFAGcwQYCO4JwgUOCxYAgwBoAFII9Qk7 -AG4AcQRbCacAjQcICcMAzAByBeMG/QZyAfYMDwBhAfUBrwPrAIkIogCsCNgLJwhzBvQIbQBPBvcDsQDx -Ce0GVAH7A6sEXgawAE0HDAbMCSMJJAK/DKgFzw1lBFwKrQBwDbQAXwaqAHMFSQH8BnAAWQOEDUwHBgXJ -C1YA8wYECrUFfAcHA4oCawxHCSYEZgBWBwMHBQQFCZwAZwB6Bw4GcQb1CqsAXQozDNwG2AlGDGMAggBj -CSEAHwB+BdUHDwBgBwkGBgocAFEG+QV1AgkJSgtGCcEHCwNlDJcJYwR2CjcAfQy5AEkHEgGeCSsMQgCT -BvsHDQOuAHkAVwb6BxEG9gF9CjgAUwBbAFwASwB0APAAZQmrAGIAZgB3Au0JIgCLBGEA8oEDL4ECm4EC -hYEDY4EDLYDHgG6BAayBARSAyoCogQMAgQFUgQH5gQGygBuAr4ECrYEBtYCDgMyAqYECSIECZoEC+IED -coAdgQJXgQJKgQJZgQNngQGDgQKDgQLXgQMUgLCBAxuBAamBAXeBAiuBAtWBAkSAw4EDS4B1gQFagQNr -gQMGgQMzgNaAjIEDVoDagQEYgQF6gQJVgQFngQLEgQLkgHqBAhSBAWKAyIB/gQMZgQLRgQIFgQIhgQJ8 -gQMegQHLgQH8gQLNgQGIgQENgQE9gQM/gHaBA36BAjyAmYEDYIEDFoB5gQMYgQLrgQFMgQNPgQHygQNt -gQGkgQGvgQIQgQErgAqBATeBA0KBAouBAZiBAquBAsuBAuaBAk+BApmBASyBA4CBA12BAu2BAvqBAT+B -ASKBAiOBAiWARIECQoEBRIEC4IDFgQE1gQJRgOiBAtmBAbqBAtOALoEBZIEC6IECaoA2gQNMgQHngAmA -2YEBdYDPgQIMgQI4gQEPgQJ+gQNTgQK+gQEngQIOgQIagQMdgQMhgOGBAjGBA2+BAcWBAjqAGYEDI4EB -S4EBpoEBcoBmgQK/gQIAgEyAQoDJgQNpgQH3gQL0gQIGgQKCgQHqgQGNgQHogM2BAZWAvYA0gQJAgQFm -gISAuoEBEoEBfYDEgQHRgQGFgQItgQI+gH6BAt+BAUiBAwiA5YECh4EDIIEDJIEB74EBe4EDKoEBIICJ -gQFsgQFhgLOBAwKBAb+BAUWBAo2APoEBUYECbIEBL4EBwoEC/YBpgQLdgQJGgOOBATSBAbiBAb2AzoEC -L4ECvYEDO4EB1oEBb4EBkIECgIEB5YECU4EC6oEBh4ECHIECz4EDUoECBIECGIACgQNIgQLGgQHZgQHx -gQHIgQFXgQJLgQEfgQGbgQEtgFSBAh2BAomBAjaBAc6Aq4EC24ECJ4DngQJbgQNFgQLigKeBAd+AlYEC -FoECyYARgQGhgQHTgLuBAziBATyBAZ6BAdyBAZKAO4ECXYEBKYEBgoEB44C5gQMsgCyBArmBAjKBAgKB -AruBAzGAiIECKYEDbIEBFoA50gAOAD4CQxRYgF6vEQEiFFkUWhRbFFwUXRReFF8UYBRhFGIUYxRkFGUU -ZhRnFGgUaRRqFGsUbBRtFG4UbxRwFHEUchRzFHQUdRR2FHcUeBR5FHoUexR8FH0UfhR/FIAUgRSCFIMU -hBSFFIYUhxSIFIkUihSLFIwUjRSOFI8UkBSRFJIUkxSUFJUUlhSXFJgUmRSaFJsUnBSdFJ4UnxSgFKEU -ohSjFKQUpRSmFKcUqBSpFKoUqxSsFK0UrhSvFLAUsRSyFLMUtBS1FLYUtxS4FLkUuhS7FLwUvRS+FL8U -wBTBFMIUwxTEFMUUxhTHFMgUyRTKFMsUzBTNFM4UzxTQFNEU0hTTFNQU1RTWFNcU2BTZFNoU2xTcFN0U -3hTfFOAU4RTiFOMU5BTlFOYU5xToFOkU6hTrFOwU7RTuFO8U8BTxFPIU8xT0FPUU9hT3FPgU+RT6FPsU -/BT9FP4U/xUAFQEVAhUDFQQVBRUGFQcVCBUJFQoVCxUMFQ0VDhUPFRAVERUSFRMVFBUVFRYVFxUYFRkV -GhUbFRwVHRUeFR8VIBUhFSIVIxUkFSUVJhUnFSgVKRUqFSsVLBUtFS4VLxUwFTEVMhUzFTQVNRU2FTcV -OBU5FToVOxU8FT0VPhU/FUAVQRVCFUMVRBVFFUYVRxVIFUkVShVLFUwVTRVOFU8VUBVRFVIVUxVUFVUV -VhVXFVgVWRVaFVsVXBVdFV4VXxVgFWEVYhVjFWQVZRVmFWcVaBVpFWoVaxVsFW0VbhVvFXAVcRVyFXMV -dBV1FXYVdxV4FXkVeoEEY4EEZIEEZYEEZoEEZ4EEaIEEaYEEaoEEa4EEbIEEbYEEboEEb4EEcIEEcYEE -coEEc4EEdIEEdYEEdoEEd4EEeIEEeYEEeoEEe4EEfIEEfYEEfoEEf4EEgIEEgYEEgoEEg4EEhIEEhYEE -hoEEh4EEiIEEiYEEioEEi4EEjIEEjYEEjoEEj4EEkIEEkYEEkoEEk4EElIEElYEEloEEl4EEmIEEmYEE -moEEm4EEnIEEnYEEnoEEn4EEoIEEoYEEooEEo4EEpIEEpYEEpoEEp4EEqIEEqYEEqoEEq4EErIEErYEE -roEEr4EEsIEEsYEEsoEEs4EEtIEEtYEEtoEEt4EEuIEEuYEEuoEEu4EEvIEEvYEEvoEEv4EEwIEEwYEE -woEEw4EExIEExYEExoEEx4EEyIEEyYEEyoEEy4EEzIEEzYEEzoEEz4EE0IEE0YEE0oEE04EE1IEE1YEE -1oEE14EE2IEE2YEE2oEE24EE3IEE3YEE3oEE34EE4IEE4YEE4oEE44EE5IEE5YEE5oEE54EE6IEE6YEE -6oEE64EE7IEE7YEE7oEE74EE8IEE8YEE8oEE84EE9IEE9YEE9oEE94EE+IEE+YEE+oEE+4EE/IEE/YEE -/oEE/4EFAIEFAYEFAoEFA4EFBIEFBYEFBoEFB4EFCIEFCYEFCoEFC4EFDIEFDYEFDoEFD4EFEIEFEYEF -EoEFE4EFFIEFFYEFFoEFF4EFGIEFGYEFGoEFG4EFHIEFHYEFHoEFH4EFIIEFIYEFIoEFI4EFJIEFJYEF -JoEFJ4EFKIEFKYEFKoEFK4EFLIEFLYEFLoEFL4EFMIEFMYEFMoEFM4EFNIEFNYEFNoEFN4EFOIEFOYEF -OoEFO4EFPIEFPYEFPoEFP4EFQIEFQYEFQoEFQ4EFRIEFRYEFRoEFR4EFSIEFSYEFSoEFS4EFTIEFTYEF -ToEFT4EFUIEFUYEFUoEFU4EFVIEFVYEFVoEFV4EFWIEFWYEFWoEFW4EFXIEFXYEFXoEFX4EFYIEFYYEF -YoEFY4EFZIEFZYEFZoEFZ4EFaIEFaYEFaoEFa4EFbIEFbYEFboEFb4EFcIEFcYEFcoEFc4EFdIEFdYEF -doEFd4EFeIEFeYEFeoEFe4EFfIEFfYEFfoEFf4EFgIEFgYEFgoEFg4EFhBDDEgABiA4SAAGIAxIAAYhN -EgABiCISAAGHbhDiEgABh2oRAQsQzRBkEEASAAGIQRDaEIYSAAGIDxIAAYhEEO0SAAGHrBDFEgABh9oS -AAGIEBIAAYf0EJASAAGHehEBPREBRBEBQRIAAYhOEBcSAAGIAhIAAYdFEgABh/oQYRIAAYf9ECMQTxIA -AYfIEKUSAAGH2REBUhDMEOoQQhIAAYhQEGURAUUSAAGHnhDvEI0QxBIAAYdvEK4RATwQShCxEOQRATEQ -SREBTBDlEMIQpBEBSBEBJBIAAYgHEPESAAGIRhCjEBgQyRC9EMsQ4xIAAYgTEQE0EgABh/cSAAGIHRCe -EOsQbxC1ED4QqhD+EgABiFIQIRIAAYhDEgABh/8RAVEQFhIAAYczEQFGEgABiAAQHhIAAYgKEgABh0IS -AAGHUREBPhIAAYgLEMAT//////////0QqBIAAYdVEgABh/USAAGHXRIAAYeZEQEmEQElEgABh/gRATkQ -RRCwEM4QkxEBQBCmECYSAAGHRBIAAYd7EgABhukSAAGIBhIAAYd8EgABiCASAAGH+xDwENAQTBEBDhEB -NxIAAYdpEgABiAgQqRAREPcSAAGHrhIAAYfCEQFLEP0QxhEBOBIAAYhTEC4RATYQ2REBCBA/ECIQTRDh -EgABiCEQ4BDfEgABiE8RAQMQghIAAYgNEgABh/MRAVMQGhIAAYcyENwSAAGHrRBQEOYQkhDKEgABh0sR -AU4QMBIAAYa3EQEyEQENEOwSAAGHRxIAAYbdEgABhwUQxxIAAYgEEQEEEQEHENQQqxIAAYf8EPkQ5xBO -EgABh/4SAAGHARIAAYcEECcQPRIAAYgBEN4QQRIAAYgJEgABh1wQLBBmEOkQpxEBOhIAAYdmEJcQJRAo -EgABh9IQiBCHEC0QHRIAAYgMEG4RAT8SAAGHUhIAAYhLEQEvEgABh0MQsxEBTxEBIhIAAYhMEgABiBsQ -chIAAYhKEQEGECsQQxEBOxD8EB8QvBIAAYeAEQEjEgABiAURATUSAAGIRRIAAYdtEgABh0YRAScSAAGH -ZxEBQhC0EgABh1ARAU0SAAGIRxIAAYf2EgABh9EQohDYEgABiEAQLxCREQFHEMESAAGISRAbEgABh30R -AUMQ+BBGEJwQmREBUBDbEFURATMQrxCbEHAQ7hEBKBIAAYhREM8Q3dIADgA+AEYWkIBfoNIADgA+AkMW -k4BeoNIADgA+AkMWloBeoNIANwA4FpgWmaIWmQA7Xk5TSUJPYmplY3REYXRhAAgAGQAiACcAMQA6AD8A -RABSAFQAZgt8C4ILzQvUC9sL6Qv7DBcMJQwxDD0MSwxWDGQMgAyODKEMswzNDNcM5AzmDOkM7AzvDPIM -9Az3DPkM/Az/DQINBQ0HDQkNDA0PDRQNFw0gDSwNLg0wDT4NRw1QDVsNYA1vDXgNiw2UDZ8NoQ2iDasN -sg2/DcUNzg3QDl8OYQ5jDmUOZw5pDmsObQ5vDnEOdA53DnoOfQ6ADoMOhg6JDowOjw6SDpUOmA6bDp4O -oQ6kDqcOqg6tDrAOsw62DrkOvA6/DsIOxQ7IDssOzg7RDtQO1w7aDt0O4A7jDuYO6Q7sDu8O8g71DvgO -+w7+DwEPBA8HDwoPDQ8QDxMPFg8ZDxwPHw8iDyUPKA85D0cPUA9YD1oPXA9eD2APgQ+TD5wPqA+xD70P -yQ/LD80P0A/SD9QP1g/YD9oQBxAPEBkQJBAuEDgQRhBJEEsQThBQEFMQVhBYEFoQXBBfEGEQbBB4EH8Q -iBCREJ4QqhDjEPARCREWESQRLhE8EVURYhFsEX4RkhGcEagRqhGsEa4RsBGyEbcRuRG7Eb0RvxHBEcMR -xRHHEeIR6RHyEfwR/hIDEgwSExIlEi4SSxJWEmsSbRJvEnEScxJ2En8SgRKMEo4SkBKSEpQSlhKzEroS -xBLGEsgSyhLMEs0SzxLoEwkTFRMpEzQTPhNME1kTZRNqE2wTbhNwE3ITdBN5E3sTshPDE8oT0RPaE9wT -5RPnE+oT9xQAFAUUDBQhFCkUNhRCFFAUUhRUFFYUWBRaFGEUbhR7FIMUhRSHFJMUnBShFLYUuBS6FLwU -vhTRFN4U4BTjFOwU9RUHFRQVHRUoFTQVPhVfFWUVZxVpFWsVbRVuFXAVcxWLFcQV2hXvFf4WERYjFjUW -QxZFFkcWSRZLFk0WTxZRFlMWVRZXFlwWZRZzFnQWdhZ/FogWlRaeFqkWshbTFtUW1xbZFtsW3BbeFuEW -+RcyFzQXNhc4FzoXPBc+F0AXRxdJF2oXbBduF3AXchdzF3UXeBeRF8oX0xfVF9cX2RfbF90X3xfhF+wX -7hgnGDMYPBhJGFwYaRh1GIMYhRiHGIkYixiNGI8YkRikGKYYqBiqGKwYtRi3GMIYxBjGGMgYyhjMGPUY -9xj5GPsY/RkAGQIZBBkGGQgZERkTGRYZGBlnGYkZkxmgGbUZzxnrGgYaEhoxGkAaTBpOGlAaUhpXGlka -WxpcGl4aZxpwGnIacxp1Gn4agBqCGosalRquGroavBq+GsAawhrEGu0a7xrxGvMa9Rr3Gvka+xr9Gwcb -EBsZGy0bQhtEG0YbSBtKG2EbahtzG4EbihuMG50bnxuhG6MbpRunG6kbqxutG9Ib3xvsG/Qb/xwKHBUc -IhwkHCYcKBwxHDMcNBw2HDgcVRxaHFwcXhxgHGIcZBx1HHccgByCHIUckhyUHKActRy3HLkcuxy9HM8c -2BzjHPcdKB02HTgdOh08HT4dQB1CHUQdRx1MHV0dXx1oHWodbB2BHY4dlR2XHZkdnh2gHaIdqx20HbYd -uR27HcQdxh3LHc0dzx3YHe8d8R3zM4UzjjOVM6gzszO8M8EzyTPSM9kz6DP1M/cz/DQFNAo0EjQbNCc0 -KTQrNDQ0PTRCNFg0YTRmNHQ0mTSbNJ00nzShNKI0pDSmNMM0xTTHNMk0yzTNNQI1BDUGNQg1CjUMNQ41 -EDUdNSw1LjUwNTI1OzVANVM1eDV6NXw1fjWANYE1gzWFNaI1pDWmNag1qjWsNa41wzXFNcc1yTXLNdc1 -5DXmNek2HjYgNiI2JDYmNig2KjYsNlE2UzZVNlc2WTZaNlw2XjZ7Nn02fzaBNoM2hTa6Nrw2vjbANsI2 -xDbGNsg27TbvNvE28zb1NvY2+Db7Nxg3GjccNx43IDciNyQ3WTdbN103XzdhN2M3ZTdnN4w3jjeQN5I3 -lDeVN5c3mje3N7k3uze9N783wTfDN/g3+jf8N/44ADgCOAQ4BjgrOC04LzgxODM4NDg2ODk4VjhYOFo4 -XDheOGA4YjiXOJk4mzidOJ84oTijOKU4yjjMOM440DjZONs45DjlOOc46zkIOQo5DDkOORA5EjlHOUk5 -SzlNOU85UTlTOVU5ajlsOW45cDlyOXw5iTmLOZA5mTmkObs50DnSOdQ51jnYOfE5+joDOg46Lzo4OkE6 -SzpNOk86UTpTOlU6VzpgOns6iDqROpw6pzrMOs460DrSOtQ61jrYOuE6/TsGOwg7CzsNOyM7OztEO007 -WjtxO3o7gTuZO6Q7rTuyO8U70jvbO+I7+TwIPBk8GzwdPB88ITxCPEQ8RjxIPEo8SzxNPGI8ZDxmPGk8 -azyDPLw8vjzAPMI8xDzGPMg8yjzXPO089jz9PRU9Jj0oPSo9LD0uPU89UT1TPVU9Vz1aPVs9XT1fPXw9 -fz2BPYQ9hz2JPYw9oz3IPdw95T3nPek96z3tPe899D31Pfc+DD4OPhA+Ej4UPio+Pz5BPkM+RT5HPlE+ -Xj5rPm0+bz5xPo4+kD6SPpQ+lj6XPpk+rj6wPrI+tT64PtA/BT8HPwk/Cz8NPw8/ET8TPxw/JD81Pzc/ -QD9CP08/UT9TP1U/Wz9nP3g/ej98P34/gD+RP5M/lT+XP5k/uj+8P74/wD/CP8M/xT/dQBZAGEAaQBxA -HkAgQCJAJEA1QDdAOUA7QD1AXkBgQGJAZEBmQGdAaUB+QIBAgkCFQIhAoEDZQNtA3UDfQOFA40DlQOdA -+ED6QPxA/kEAQTFBOUFNQVhBZkFwQX1BhEGMQY5BkEGSQZdBmUGeQaBBokGkQaZBs0G/QcJBxUHIQdJB -30HhQeNB5UH3QgRCBkIIQgpCHUIxQoBCnUKvQrpCzELhQu9C+EL5QvtC/kMBQwRDBkMIQwtDDEMNQw9D -FEMdQyJDMENBQ0NDRUNHQ0pDg0OFQ4dDiUOMQ45DkEOSQ5RDl0OaQ5xDt0PAQ8JDy0PNQ9ZD2EPnQ+lD -60PuQ/FD80P1Q/hEFUQXRBlEG0QdRB5EIEQ4RFlEW0RdRF9EYURjRGVEhEShRKNEpUSnRKlEqkSsRMNE -7ET4RPpE/ET+RQBFAkUERQ1FDkUQRVdFXkVpRXBFfEWERZdFnkWsRcBF0kXmRflGBUYMRhlGK0YuRjFG -NEY3RjlGPEY+RkBGQkZERkVGR0ZJRkxGTkZPRlBGXUZlRmhGg0aFRodGiUaLRo1Gj0aRRpNGlUaXRplG -m0adRrhGuka8Rr5GwEbCRsRGxkbIRspGzUbQRtNG1kbeRutG80cCRxtHNEc+R01HZUd/R5JHpke6R9dH -4kfuR/1IB0gTSB9IIUgiSDVINkg/SERIYUh+SIBIgUiUSJVImEidSKJIpEilSLJIv0jCSMVIx0jUSNdI -2EjZSOJI50j0SP1JAkkXSRlJG0kkSStJQUlKSU1JUEldSWBJY0lmSWpJc0l6SY5Jq0mtSbBJs0m2SbdJ -uUnQSfVJ/UoJShRKH0osSjFKNEo9SkZKSUpKSlNKXEpqSnNKfkqISqVKp0qpSqxKr0qwSrJKykrrSu1K -70rySvRK90r5SwBLIUsjSyVLKEsrSyxLLktGS39LgUuDS4VLh0uKS4xLj0uWS61LukvHS8lLzEvPS+xL -7kvwS/NL9kv3S/lMEkxHTElMTExPTFFMVExWTFlMXkxrTG1Mb0xyTHdMfUyOTJBMkkyUTJdMokyzTLVM -t0y5TLxMxUzWTNhM2kzcTN5M70zxTPRM9kz5TRZNGE0aTR1NIE0hTSNNPE1xTXNNdk15TXtNfk2ATYNN -i02YTZpNnE2fTaZNtU3CTcRNx03KTedN6U3rTe5N8U3yTfRODU5CTkROR05KTkxOT05RTlROXU5qTmxO -bk5xTnlOgk6TTpVOmE6aTp1Ouk68Tr5OwU7ETsVOx07gTxVPF08aTx1PH08iTyRPJ08wTz1PP09BT0RP -TE9eT29PcU9zT3ZPeU+aT51PoE+jT6ZPqU+qT6xPr0/MT89P0U/UT9dP2U/cT/RQQ1BEUEZQSVBMUE9Q -UVBUUFdQWFBZUF5QYVByUHRQdlB/UIFQslC1ULdQulC8UL5QwFDDUMZQyVDWUNlQ3FDfUONQ7FDuUPlR -AlEEUQ9RElEVURhRG1EeUUtRTlFQUVNRVVFXUVlRXFFfUWJRZlGTUZZRmFGbUZ1Rn1GhUaRRp1GqUa5R -21HeUeBR41HlUedR6VHsUe9R8lH3UiRSJ1IpUixSLlIwUjJSNVI4UjtSP1JIUk1SVlJjUndShlKPUpxS -qlKzUsRSxlLJUstSzlLvUvJS9VL4UvtS/FL+UwFTGlNtU39TgFOCU4VTiFOLU41TkFOTU5RTlVOYU5pT -o1OlU9ZT2VPbU95T4FPiU+RT51PqU+xT+VP8U/9UAlQFVA5UEFQZVBtUKFQrVC5UMVQ0VDdUOlRnVGpU -bFRvVHFUc1R1VHhUe1SIVLVUuFS6VL1Uv1TBVMNUxlTJVNNVAFUDVQVVCFUKVQxVDlURVRRVI1VQVVNV -VVVXVVlVW1VdVWBVY1WQVZNVlVWXVZlVm1WdVaBVo1WlVbNVwFXCVcVVyFXlVedV6VXsVe9V8FXyVgtW -QFZCVkVWSFZKVk1WT1ZSVldWZFZmVmhWa1ZvVnVWhlaIVopWjVaQVrFWtFa3VrpWvVa+VsBWw1bbVy5X -L1cxVzRXN1c6VzxXP1dCV0NXRFdHV0lXUldUV4VXiFeKV41Xj1eRV5NXlleZV5xXqVesV69Xsle2V79X -wVfKV8xYDVgQWBNYFlgZWBxYH1giWCVYKFgrWC5YMVg0WDdYOlg9WEBYQ1hGWElYTFhPWFJYVVhYWFtY -XlhhWGRYZ1hqWJdYmlicWJ9YoVijWKVYqFirWK1Y3ljsWPlY/Fj+WQBZAVkDWQRZBlkIWQtZDlk7WT5Z -QFlDWUVZR1lJWUxZT1lYWVpZh1mKWYxZj1mRWZNZlVmYWZtZpFmpWdZZ2VnbWd5Z4FniWeRZ51nqWfNZ -+FolWihaKlotWi9aMVozWjZaOVpCWkdadFp3WnlafFp+WoBaglqFWohakVqWWsNaxlrIWstazVrPWtFa -1FrXWuBa5VsaWx1bH1shWyJbJFslWydbKVssWy9bXFtfW2FbZFtmW2hbalttW3Bbc1t1W6JbpVunW6pb -rFuuW7Bbs1u2W7lbu1voW+tb7VvwW/Jb9Fv2W/lb/Fv/XAFcLlwxXDNcNlw4XDpcPFw/XEJcRVxHXHRc -d1x5XHxcflyAXIJchVyIXItcjVy6XL1cv1zCXMRcxlzIXMtczlzRXNRdBV0IXQpdDF0NXQ9dEF0SXRRd -F10aXUddSl1MXU9dUV1TXVVdWF1bXV1dYF2RXZRdll2YXZldm12cXZ5doF2jXaZd013WXdhd213dXd9d -4V3kXedd6l4XXhpeHF4fXiFeI14lXiheK140XjdeZF5nXmlebF5uXnBecl51XnhegV6EXrFetF62Xrle -u169Xr9ewl7FXs5e0V7+XwFfA18GXwhfCl8MXw9fEl8bXyJfT19SX1RfV19ZX1tfXV9gX2NfbF9zX6Rf -p1+pX6tfrF+uX69fsV+zX7ZfuV/mX+lf61/uX/Bf8l/0X/df+l/9YABgLWAwYDJgNWA3YDlgO2A+YEFg -RGBHYHRgd2B5YHxgfmCAYIJghWCIYItgj2C8YL9gwWDEYMZgyGDKYM1g0GDTYNdhBGEHYQlhDGEOYRBh -EmEVYRhhG2EfYSdhOGE6YT1hP2FCYU5hX2FhYWNhZWFoYXthjGGOYZBhk2GWYbNhtWG3YbphvWG+YcBh -2GINYg9iEmIVYhdiGmIcYh9iJ2I0YjZiOGI7YkNiWWJqYmxibmJwYnNifmKPYpFilGKWYpliumK9YsBi -w2LFYsZiyGLLYuRi7WLvYvhi+mMDYwVjDmMQYxNjFmMZY0pjTGNOY1BjUWNTY1RjVmNYY1pjXWOGY4hj -imONY49jkWOTY5VjmGOeY8djyWPLY85j0GPSY9Rj1mPZY+Nj72QAZAJkBGQGZAlkE2QkZCZkKWQrZC5k -O2RMZE5kUGRTZFVkZmRoZGtkbWRwZKlkq2StZLBks2S1ZLdkumS9ZMBkw2TGZOFk6mTsZPVk92UAZQJl -BWUIZQtlLGUuZTBlM2U2ZTdlOWVSZYtljWWPZZFlk2WWZZhlm2WeZdNl3WXpZfdmBGYOZiBmImYlZihm -K2YsZi9mMWY0ZjZmOWZCZkRmR2ZKZmNmZmZoZmtmbmZxZnpmfGaLZo5mkWaUZpdmmmadZqBmvWbAZsJm -xWbIZslmzGbkZwVnB2cJZwxnDmcRZxNnGGc1ZzhnO2c+Z0FnQmdFZ11nrGetZ69nsme1Z7hnume9Z8Bn -wWfCZ8VnzmfQZ/1oAGgCaARoBmgIaApoDWgQaB1oIGgjaCZoL2gxaDpoPGhHaEpoTWhQaFNoVmh/aIJo -hGiGaIhoimiMaI9okmi7aL5owGjCaMRoxmjIaMtozmj3aPpo/Gj+aQBpAmkEaQdpCmkzaTZpOGk6aTxp -PmlAaUNpRmljaWZpaGlraW5pb2lyaYppq2mtaa9psmm0abdpuWnSae9p8mn1afhp+2n8af9qF2pmamdq -aWpsam9qcmp0andqemp7anxqf2qIaopqt2q6arxqvmrAasJqxGrHaspq12raat1q4Grpautq9Gr2awFr -BGsHawprDWsQazlrPGs+a0BrQmtEa0ZrSWtMa3VreGt6a3xrfmuAa4JrhWuIa7FrtGu2a7hrumu8a75r -wWvEa+1r8Gvya/Rr9mv4a/pr/WwAbB1sIGwibCVsKGwpbCxsQ2xkbGZsaGxrbG1scGxybH9snGyfbKFs -pGynbKhsq2zDbORs5mzobOts7WzwbPJtBG0hbSRtJ20qbS1tLm0xbUhtm22cbZ5toW2kbadtqW2sba9t -sG2xbbRtvW2/bext723xbfNt9W33bflt/G3/bgxuD24SbhVuHm4gbiluK24+bkFuRG5HbkpuTW5QblNu -Vm5ZboJuhW6Hbolui26Nbo9ukm6Vbr5uwW7DbsVux27Jbstuzm7Rbvpu/W7/bwFvA28FbwdvCm8NbzZv -OW87bz1vP29Bb0NvRm9Jb3JvdW93b3lve299b39vgm+Fb65vsW+zb7Vvt2+5b7tvvm/Bb+pv7W/vb/Fv -82/1b/dv+m/9cCZwKXArcC1wL3AxcDNwNnA5cFBwaXBwcI1wj3CRcJRwlnCZcKtwuHC6cMhw0XDacOBx -FXEXcRpxHXEgcSFxJHEncSlxLHE1cTdxOnE9cVZxWXFbcV5xYXFkcW1xb3GAcYNxhnGJcYxxj3GScZVx -mHG1cbhxu3G+ccFxxHHFcchx4HIZciRyNnJLcmNyZnJrcm5ycHJycnRyd3J8cn9ygHKDcoRyhnKPcpFy -mnKdcp9yoXKjcqZzAXMOcxFzFHMXcyBzI3MlcyZzKXMscy1zMHMzczVzN3M6cz1zRnNPc1hzWnNdc2Bz -iXOYc6dzqHOqc61zr3Oyc7tzvnPbc91z4HPic+Rz5nPzc/V0GnQfdCF0I3QldCd0KnQtdC50MHRDdEx0 -WXRsdHV0gHSPdJh0pXSwdM100HTSdNV02HTZdNx083UUdRl1G3UddSB1InUldSd1L3VMdU91UXVUdVd1 -WHVbdXJ1k3WVdZd1mXWbdZ51oHW9dcB1wnXFdch1yXXMdeN2BHYGdgh2C3YNdhB2EnYddjp2PXY/dkJ2 -RXZGdkl2YHaBdoN2hXaIdop2jXaPdpd2tHa3drp2vXbAdsF2xHbcdxV3GHcbdx13H3chdyR3J3codyt3 -LHcudzd3OXdCd0R3RndId0p3pXeod6t3rnexd7N3tHe3d7p3u3e+d8F3w3fGd8l30nfUd9d32ngDeAR4 -BngJeAt4DngReC54MHgzeDV4N3g5eEZ4SHhpeGt4bXhveHJ4c3h1eJJ4lXiYeJt4nnifeKJ4unjzePZ4 -+Xj7eP55AHkDeQZ5B3kKeQt5DXkSeRt5HXkmeSh5K3kueTF5NHk3eTp5lXmYeZt5nnmheaN5pHmneap5 -q3muebF5s3m2ebl5wnnEecd5ynnzefR59nn5eft5/noBeh56IHojeiV6J3opejZ6OHpZelt6XXpfemJ6 -Y3pleoJ6hXqHeop6jXqOepF6qHrJest6zXrQetJ61XrXeuJ6+HsSey97MXszezZ7OHs7e0l7VntYe2N7 -cXuCe4R7hnuJe4x7mnure617r3uxe7R7w3vUe9Z72Hvae9177nvwe/J79Xv4fDF8NHw2fDl8PHw+fEB8 -Q3xGfEl8THxPfGl8dHyRfJN8lXyYfJt8nXygfKl8q3yyfLV8uHy7fPR893z6fP19AH0BfQR9B30JfQx9 -D30SfRt9HX0gfSN9LH0ufUt9Tn1RfVR9V31afV19YH1jfWZ9aX1sfW99cn11fZZ9mX2bfZ59oX2ifaR9 -p32/feR95n3ofet97X3wffF9834VfjZ+OX47fj5+QX5CfkR+R35efn9+gX6DfoZ+iH6Lfo1+lX62frl+ -u36+fsF+wn7Efsd+338AfwJ/BH8Hfwl/DH8Ofxl/On89fz9/Qn9Ff0Z/SH9Lf2N/iH+Kf4x/j3+Rf5R/ -lX+Xf6l/yn/Nf89/0n/Vf9Z/2H/bf/OAFIAWgBiAG4AdgCCAIoAsgE2AUIBSgFWAWIBZgFuAXoB3gJyA -noCggKOApYCogKmAq4DMgM+A0YDUgNeA2IDagN2A9YEWgRiBGoEdgR+BIoEkgSuBTIFPgVGBVIFXgViB -WoFdgXWBmoGcgZ6BoYGjgaaBp4Gpga2BzoHRgdSB14HagduB3YHggfiCIYIugjGCMoI7gj6CP4JggmOC -ZYJogmuCbIJugnGCiYKqgqyCroKxgrOCtoK4gsGCy4LkgwGDA4MFgwiDCoMNgxODIIMig1ODVoNZg1uD -XoNgg2ODZYNog2uDbYNvg3iDeoOBg4ODhoOJg5KDlIOXg5mDsIPZg+SD54Pqg+yD74Pxg/OD9oP/hBeE -RIRHhEqETIRPhFCEUoRUhFeEYIR4hJGEyoTNhNCE04TWhNeE2oTjhOWE6ITrhO2E9oT4hPuE/YUGhQiF -D4URhRSFF4U4hTqFPIU/hUKFQ4VFhUeFXoWThZWFl4WZhZyFnoWhhaSFp4WwhbOFxIXGhcmFzIXghgGG -A4YFhgiGC4YMhg6GEIYnhlyGXoZghmOGZYZohmuGboZwhnqGlIaxhrOGtYa4hrqGvYbKhteG2Ybkhu+H -AIcChwWHB4cKhxyHLYcvhzKHNIc3hz6HT4dRh1OHVodZh2aHaIdrh26HdoeHh4mHjIeOh5GHm4esh66H -sIezh7WHxofIh8qHzIfPh9qH64fth++H8of0iAWIB4gKiAyID4gciC2IL4gyiDSIN4hYiGKIb4hxiHSI -d4iAiIOIhoiIiIuIkIiTiJyIoYisiMWIzojXiO2JAIkRiROJFokYiRuJJIk1iTeJOYk7iT2JTolQiVKJ -VIlXiWOJcIlyiXWJeImBiZKJlImWiZmJnImoicWJz4nZifiJ+4n9igCKA4oGigmKLIo6ik6KV4peinaK -k4qWipiKm4qeiqGKpIrEitOK8IrzivWK+Ir7iv2LAIsgiyaLP4tci1+LYYtki2eLaYtsi4qLoYu+i8GL -w4vGi8mLzIvPi/KMBowjjCaMKIwrjC6MMYw0jFCMZYyCjIWMh4yKjI2MkIyTjK+MxIzhjOSM5ozpjOyM -74zyjQ+NEo0UjReNGo0djSCNPI1RjW6NcY1zjXaNeY18jX+Nno22jdON1o3YjduN3o3hjeSOAY4EjgaO -CY4Mjg+OEo4xjkmOao50jneOeY58jn+Ogo6FjoiOnY6kjq+OvI6/jsKOxY7IjsuO5I7sjwmPDI8OjxGP -FI8XjxqPNo9Lj2iPa49tj3CPc492j3mPlY+qj7uPxI/Lj86P0I/Tj9aP6ZAHkBCQFZApkDqQPZBAkEOQ -RpBZkGqQbZBwkHOQdpCEkJWQmJCbkJ6QoZCykLWQuJC7kL6Qz5DSkNWQ2JDbkOmQ+pD9kQCRA5EGkSaR -L5ExkuqS7ZLwkvKS9JL3kvqS/JL+kwGTBJMHkwqTDJMPkxKTFJMWkxiTG5MekyGTJJMmkymTLJMvkzKT -NZM4kzqTPZNAk0OTRpNJk0uTTpNRk1OTVZNXk1qTXZNgk2OTZpNok2uTbpNwk3OTdpN5k3yTf5OCk4WT -iJOLk42TkJOTk5WTl5Oak52ToJOjk6aTqZOrk66TsZO0k7eTupO9k8CTw5PGk8mTzJPPk9KT1ZPYk9qT -3ZPgk+KT5ZPok+qT7ZPwk/OT9ZP4k/uT/pQAlAOUBZQIlAuUDpQRlBSUF5QZlByUH5QilCSUJ5QqlC2U -L5QylDSUNpQ4lDuUPpRBlESUR5RKlE2UUJRSlFSUV5RalFyUXpRhlGSUZ5RqlG2UcJRylHWUeJR7lH2U -gJSDlIaUiZSLlI6UkJSTlJaUmZSclJ6UoZSklKeUqpStlK+UspS1lLeUupS9lL+UwpTFlMiUy5TOlNGU -1JTXlNqU3ZTglOOU5pTplOyU75TylPWU95T6lP2VAJUDlQWVCJULlQ2VEJUTlRaVGJUblR6VIJUjlSaV -KJUrlS6VMZUzlTaVOJU7lT2VQJVDlUWVfpWAlYKVhZWIlYuVjpWRlZSVl5WalZ2VuJXBlcOVzJXOldeV -2ZXileSV9ZX3lfqV/ZYAlgOWBpYJlgyWF5YgljOWNpY3lkCWR5Zilm+WeJZ6ln2Wi5aUlpaYT5hSmFWY -V5hZmFyYX5himGSYZ5hqmGyYb5hxmHSYd5h5mHuYfZiAmIKYhZiHmImYjJiPmJKYlZiYmJuYnpihmKSY -p5iqmK2Yr5iymLWYuJi6mLyYv5jCmMWYyJjLmM2Y0JjTmNWY2JjbmN6Y4ZjjmOaY6ZjrmO2Y75jxmPSY -9pj4mPuY/pkBmQSZB5kJmQyZD5kSmRWZGJkbmR6ZIZkkmSaZKZksmS+ZMpk1mTiZOpk9mUCZQplEmUeZ -SZlMmU+ZUplUmVeZWpldmV+ZYplkmWaZaZlsmW+Zcpl1mXeZepl9mYCZgpmFmYiZi5mNmY+ZkZmTmZWZ -l5mamZyZn5mimaWZp5mqmayZrpmxmbSZtpm4mbqZvZnAmcOZxpnJmcuZzpnRmdSZ1pnZmduZ3ZnfmeGZ -5JnmmemZ7JnvmfKZ9Jn3mfqZ/ZoAmgOaBZoImguaDZoQmhOaFZoYmhuaHpohmiSaJ5oqmi2aMJozmjaa -OZo8mj+aQppFmkiaSppMmk+aUppVmliaWppdmmCaYpplmmiaa5ptmnCac5p1mniae5p+moGahJqHmoma -jJqOmpGak5qWmpiampqjmqWcYJxjnGacaJxqnG2cb5xynHScd5x6nH2cgJyCnIWch5yKnIycjpyRnJSc -l5yanJycn5yinKWcqJyrnK6csJyznLacuZy8nL+cwZzEnMecyZzLnM2c0JzTnNac2ZzcnN+c4ZzknOac -6ZzsnO+c8pz1nPic+5z+nQGdBJ0GnQmdC50NnRCdE50WnRmdHJ0fnSGdJJ0nnSqdLZ0wnTOdNp05nTyd -P51CnUWdSJ1LnU6dUJ1TnVadWJ1bnV6dYJ1jnWadaJ1rnW6dcZ10nXadeZ18nX+dgZ2EnYedip2NnY+d -kp2VnZidmp2dnaCdop2lnaidqp2sna6dsZ20nbedup29ncCdw53Fncidyp3NndCd0p3Unded2p3dneCd -453mneid6p3tnfCd8532nfmd/J3/ngGeBJ4GngmeDJ4PnhKeFJ4XnhqeHZ4gniOeJZ4oniueLZ4wnjOe -Np44njuePp5BnkSeR55Knk2eUJ5TnlaeWJ5bnl6eYZ5knmeeap5tnm+ecp51nniee559noCeg56Fnoie -i56NnpCek56Vnpiemp6dnqCeo56lnqieq56unrCes561nrieu569nsaeyKCDoIagiaCMoI+gkqCVoJig -m6CeoKGgpKCnoKqgraCwoLOgtqC5oLygv6DCoMWgyKDLoM6g0aDUoNeg2qDdoOCg46DmoOmg7KDvoPKg -9aD4oPug/qEBoQShB6EKoQ2hEKEToRahGaEcoR+hIqEloSihK6EuoTGhNKE3oTqhPaFAoUOhRqFJoUyh -T6FSoVWhWKFboV6hYaFkoWehaqFtoXChc6F2oXmhfKF/oYKhhaGIoYuhjqGRoZShl6GaoZ2hoKGjoaah -qaGsoa+hsqG1obihu6G+ocGhxKHHocqhzaHQodOh1qHZodyh36HioeWh6KHroe6h8aH0ofeh+qH9ogCi -A6IGogmiDKIPohKiFaIYohuiHqIhoiSiJ6Iqoi2iMKIzojaiOaI8oj+iQqJFokiiS6JOolGiVKJXolqi -XaJgomOiZqJpomyib6JyonWieKJ7on6igaKEooeiiqKNopCik6KWopminKKfoqKipaKooquirqKxorSi -t6K6or2iwKLDosaiyaLMos+i0qLVotii26LeouGi5KLnouqi7aLwovOi9qL5ovyi/6MCowWjCKMLow6j -EaMUoxejL6NOo12jdKOPo6KjsKPNpASkFqQqpDikfaScpKqkuaTSpOGk96UQpSSlMqV7pY2ln6WtpcKl -3aYBpgymGqZFplOmcqaWpqKmtKbRpvKnAKcXpymnP6dMp1+ndKeIp5ynsKfLp92n9agWqC6oRqhOqGKo -fKieqLGov6jXqOWo/qkUqS+pOalHqV+paqmDqZGprqnJqf2qFaooqjqqRqpjqnmqkqqnqrmqy6rfqv+r -Fqstq0erWatsq4arlauzq9Kr3KvurAisIawvrEKsXqx0rIGsj6yirL2s6qz4rQetFa0krTatRK1XrXSt -ia2ircit263nrfOuB64fri2uRq5ernuulK61rsSu2K7xrwivHa8pr0SvV690r4Kvka+pr7uv1q/8sAmw -H7A1sEqwZbB3sIywrbDCsNGw37D2sQixILEvsUSxUrFzsYaxt7HDsc+x6LIAsg+yJ7Izsj+yUbJgsnKy -hLKgsrWywrLOsuCy77MCsxizNbNOs1yzcrOOs5yzvbPas/i0CrQgtDK0TbRjtHy0jrSWtMW01LTxtQC1 -HbU4tUq1WLVmtYS1mrWotc+15rYBtgq2DLYNtha2GLYZtiK2JLhsuG+4crh1uHi4e7h9uH+4griFuIe4 -ibiMuI+4kriVuJe4mbicuJ+4obijuKW4qLiruK64sbizuLa4ubi8uL+4wrjFuMi4y7jNuNC407jWuNm4 -3LjfuOG45LjmuOm47LjvuPK49Lj2uPm4+7j+uQG5BLkHuQq5DbkPuRK5FbkXuRm5HLkfuSK5JbkouSu5 -LrkxuTS5N7k6uT25QLlCuUW5SLlKuU25ULlSuVW5WLlbuV65YblkuWe5arltuXC5crl1uXi5e7l+uYG5 -hLmHuYq5jbmQuZO5lrmZuZy5n7miuaW5qLmqua25sLmzubW5uLm7ub25wLnDuca5yLnLuc650bnTuda5 -2bnbud254LniueW56Lnrue658bn0ufe5+rn9ugC6A7oFugi6C7oOuhG6E7oWuhm6HLofuiG6JLonuim6 -K7otujC6M7o2ujm6PLo/ukK6RbpHukq6TLpOulG6VLpWuli6W7peumC6Y7pmumm6bLpuunG6dLp3unm6 -fLp/uoK6hbqIuou6jrqQupO6lrqYupu6nrqhuqS6prqpuqy6r7qyurW6t7q6ur26v7rCusW6yLrKus26 -0LrTuta62brcut+64rrluui667ruuvG69Lr3uvq6/Lr/uwK7BbsIuwu7DrsRuxS7F7sauxy7H7siuyW7 -KLsquy27MLsyuzW7OLs7uz27QLtCu0W7SLtKu027ULtSu1W7WLtbu167Ybtju2a7abtsu2+7cbt0u3a7 -ebt8u3+7gruFu4e7iruNu5C7krubu5295b3oveu97r3xvfS99736vf2+AL4Dvga+Cb4Mvg++Er4Vvhi+ -G74eviG+JL4nviq+Lb4wvjO+Nr45vjy+P75CvkW+SL5Lvk6+Ub5Uvle+Wr5dvmC+Y75mvmm+bL5vvnK+ -db54vnu+fr6BvoS+h76Kvo2+kL6Tvpa+mb6cvp++or6lvqi+q76uvrG+tL63vrq+vb7AvsO+xr7Jvsy+ -z77SvtW+2L7bvt6+4b7kvue+6r7tvvC+8772vvm+/L7/vwK/Bb8Ivwu/Dr8RvxS/F78avx2/IL8jvya/ -Kb8svy+/Mr81vzi/O78+v0G/RL9Hv0q/Tb9Qv1O/Vr9Zv1y/X79iv2W/aL9rv26/cb90v3e/er99v4C/ -g7+Gv4m/jL+Pv5K/lb+Yv5u/nr+hv6S/p7+qv62/sL+zv7a/ub+8v7+/wr/Fv8i/y7/Ov9G/1L/Xv9q/ -3b/gv+O/5r/pv+y/77/yv/W/+L/7v/7AAcAEwAfACsANwBDAE8AWwBnAHMAfwCLAJcAowCvALsAxwDTA -N8A6wD3AQMBDwEbAScBMwE/AUsBVwFjAW8BewGHAZMBnwGrAbcBwwHPAdsB5wHzAf8CCwIXAiMCLwI7A -kcCUwJfAmsCdwKDAo8CmwKnArMCvwLLAtcC4wLvAvsDBwMTAx8DKwM3A0MDTwNbA2cDcwN/A4sDlwOjA -68DuwPHA9MD3wPrA/cEAwQPBBsEJwQzBD8ESwRXBGMEbwR7BIcEkwSfBKsEtwTDBM8E2wTnBPME/wULB -RcFIwUvBTcFSwVfBXMFhwWbBaMFtwXDBcsF0wXbBe8F9wX/BhMGJwYvBkMGSwZfBnMGhwaPBqMGrwa7B -scG2wbjBvcHCwcfBycHOwdDB0sHXwdnB3sHhwePB5cHnwezB7sHxwfbB+MH6wfzCAcIDwgbCCMIKwgzC -D8IRwhTCFsIYwhrCHcIgwiXCJ8Iswi7CMMIywjTCNsI4wj3CQMJFwkrCTMJOwlDCUsJUwlbCWMJdwl/C -ZMJpwmzCbsJzwnbCe8J9woLCh8KMwo/ClMKWwp/CocKmwqvCsMK1wrjCu8LAwsPCxcLHwsnCy8LOwtDC -0sLXwtzC4cLmwuvC8ML1wvfC+cL7wv7DAcMGwwvDDcMPwxHDFsMbwx7DIMMiwyXDKsMswy/DMcM0wzbD -OMM6wzzDQcNDw0XDSsNNw0/DVMNZw1zDXsNjw2XDasNsw27DcMNyw3fDesN8w4HDhMOHw4nDjsOTw5jD -msOfw6LDpcOnw6nDrsOww7LDtMO5w77Dw8PFw8fDzMPOw9DD1cPaw9zD3sPgw+LD5cPqw+zD7sPww/XD -98P5w/vD/cQCxATEB8QMxBHEFMQZxBvEHsQhxCbEK8QtxDLENcQ3xDnEPMQ+xEDEQsRHxErET8RSxFfE -XMRhxGTEacRsxG7Ec8R2xHvEgMSFxIfEicSOxJDEksSVxJfEnMSexKPEpsSoxKrErMSuxLHEs8S1xLjE -usS8xL7EwMTDxMjEysTMxNXE18TYxOHE48TkxO3E78TwxPnE/gAAAAAAAAICAAAAAAAAFpoAAAAAAAAA -AAAAAAAAAMUNA - diff --git a/Filters/VLMusicXMLType.reader b/Filters/VLMusicXMLType.reader index a49a54b..b693aa1 100755 --- a/Filters/VLMusicXMLType.reader +++ b/Filters/VLMusicXMLType.reader @@ -219,7 +219,7 @@ class MusicXMLListener @note['pitch'] = VL::NoPitch when 'mode', 'step', 'alter', 'octave', 'duration', 'syllabic', 'text', 'root-step', 'root-alter', 'bass-step', 'bass-alter', 'kind', - 'degree-value', 'degree-alter', 'degree-type' + 'degree-value', 'degree-alter', 'degree-type', 'accidental' @kind = tag when 'tie' @note['tied'] ||= 0 @@ -342,6 +342,13 @@ class MusicXMLListener else @duration = @text.to_i end + when 'accidental' + case @text + when 'sharp' + @note['visual'] = VL::WantSharp + when 'flat' + @note['visual'] = VL::WantFlat + end when 'root-step' @note['pitch'] = PITCH[@text] when 'bass-step' diff --git a/Filters/VLMusicXMLType.writer b/Filters/VLMusicXMLType.writer index 56914d4..defa850 100755 --- a/Filters/VLMusicXMLType.writer +++ b/Filters/VLMusicXMLType.writer @@ -59,7 +59,7 @@ def _part_list end def _attributes(prop) - $USE_FLATS = prop['key'] < 0 + $USE_FLATS = prop['key'] <= 0 $DIVISIONS = prop['divisions'] attr = REXML::Element.new('attributes') attr.add_element newTextElement('divisions', prop['divisions']) @@ -75,7 +75,6 @@ def _attributes(prop) clef.add_element newTextElement('sign', 'G') clef.add_element newTextElement('line', 2) attr.add_element(clef) - return attr end @@ -103,13 +102,13 @@ end STEPS = 'C DbD EbE F GbG AbA BbB ' -def _pitch(name, pitch, prefix="") +def _pitch(name, pitch, preferFlats, prefix="") oct = pitch/12 - 1 stp = 2*(pitch%12) step = STEPS[stp] alt = STEPS[stp+1] == ?b if alt - if $USE_FLATS + if preferFlats alt = -1 else step = step == ?A ? ?G : step-1 @@ -131,9 +130,20 @@ def _pitch(name, pitch, prefix="") return pitch end +def _addAccidental(note, pitch, preferFlats) + stp = 2*(pitch%12) + alt = STEPS[stp+1] == ?b + if alt + note.add_element newTextElement('accidental', + preferFlats ? 'flat' : 'sharp') + end +end + TYPE = %w[whole half quarter eighth 16th 32nd] def _note(pitch, dur, visual, tied) + preferFlats = (visual & VL::WantSharp) == 0 && + ((visual & VL::WantFlat) != 0 || $USE_FLATS) note = REXML::Element.new('note') if pitch == VL::NoPitch note.add_element(REXML::Element.new('rest')) @@ -141,7 +151,7 @@ def _note(pitch, dur, visual, tied) if (tied & VL::InChord) != 0 note.add_element 'chord' end - note.add_element(_pitch('pitch', pitch)) + note.add_element(_pitch('pitch', pitch, preferFlats)) end note.add_element newTextElement('duration', dur) if (tied & VL::TiedWithPrev) != 0 @@ -152,6 +162,9 @@ def _note(pitch, dur, visual, tied) end note.add_element newTextElement('voice', 1) note.add_element newTextElement('type', TYPE[visual & 7]) + if (visual & (VL::WantSharp | VL::WantFlat)) != 0 + _addAccidental(note, pitch, preferFlats) + end return note end @@ -229,7 +242,9 @@ DEGREE = [ [VL::Dim13th+VL::Min13th+VL::Maj13th, VL::Maj13th] ]; -def _chord(pitch, steps, root) +def _chord(pitch, visual, steps, root) + preferFlats = (visual & VL::WantSharp) == 0 && + ((visual & VL::WantFlat) != 0 || $USE_FLATS) # # Pick kind. sus takes precedence # @@ -264,10 +279,10 @@ def _chord(pitch, steps, root) end end harm = REXML::Element.new('harmony') - harm.add_element(_pitch('root', pitch, 'root')) + harm.add_element(_pitch('root', pitch, visual, 'root')) harm.add_element newTextElement('kind', kind) if root != VL::NoPitch - harm.add_element(_pitch('bass', root, 'bass')) + harm.add_element(_pitch('bass', root, visual, 'bass')) end needSteps = steps & ~CHORD[kind] extraSteps= CHORD[kind] & ~steps @@ -390,7 +405,7 @@ def _melody m.add_element(fw) tempAt = chordAt end - m.add_element(_chord(chord['pitch'], chord['steps'], chord['root'])) + m.add_element(_chord(chord['pitch'], chord['visual'], chord['steps'], chord['root'])) end chordAt += (chord['durNum'] * $DIVISIONS * 4) / chord['durDenom'] chordIx += 1 diff --git a/Filters/vl.rb b/Filters/vl.rb index 16224aa..5a13e92 100644 --- a/Filters/vl.rb +++ b/Filters/vl.rb @@ -7,6 +7,8 @@ class VL TiedWithNext = 1 TiedWithPrev = 2 + WantSharp = 0x20 + WantFlat = 0x40 InChord = 4 Unison = 1<<0 diff --git a/Resources/Info.plist b/Resources/Info.plist index fd39ccf..ab347f3 100644 --- a/Resources/Info.plist +++ b/Resources/Info.plist @@ -44,6 +44,10 @@ CFBundleTypeRole Editor + LSItemContentTypes + + org.aereperennius.vocaleasel-song + LSTypeIsPackage NSDocumentClass @@ -55,6 +59,8 @@ VLMusicXMLType VLLilypondType VLMMAType + VLAIFFType + VLMP3Type NSPersistentStoreTypeKey XML @@ -72,6 +78,10 @@ CFBundleTypeRole Viewer + LSItemContentTypes + + org.lilypond.lilypond-source + LSTypeIsPackage NSDocumentClass @@ -130,6 +140,10 @@ CFBundleTypeRole None + LSItemContentTypes + + public.midi + LSTypeIsPackage NSPersistentStoreTypeKey @@ -148,6 +162,62 @@ VLPDFType CFBundleTypeRole None + LSItemContentTypes + + com.adobe.pdf + + LSTypeIsPackage + + NSPersistentStoreTypeKey + Binary + + + CFBundleTypeExtensions + + aiff + + CFBundleTypeMIMETypes + + audio/x-aiff + + CFBundleTypeName + VLAIFFType + CFBundleTypeOSTypes + + AIFC + + CFBundleTypeRole + None + LSItemContentTypes + + public.aifc-audio + + LSTypeIsPackage + + NSPersistentStoreTypeKey + Binary + + + CFBundleTypeExtensions + + mp3 + + CFBundleTypeMIMETypes + + audio/mp3 + + CFBundleTypeName + VLMP3Type + CFBundleTypeOSTypes + + MPG3 + + CFBundleTypeRole + None + LSItemContentTypes + + public.mp3 + LSTypeIsPackage NSPersistentStoreTypeKey @@ -171,7 +241,7 @@ CFBundleSignature VçEz CFBundleVersion - 1.0b3 + 1.1b1 NSMainNibFile MainMenu NSPrincipalClass diff --git a/Resources/bck.icns b/Resources/bck.icns new file mode 100644 index 0000000..5068b7d Binary files /dev/null and b/Resources/bck.icns differ diff --git a/Resources/fwd.icns b/Resources/fwd.icns new file mode 100644 index 0000000..da2f3d1 Binary files /dev/null and b/Resources/fwd.icns differ diff --git a/Resources/installLame.scpt b/Resources/installLame.scpt new file mode 100644 index 0000000..e65ec13 Binary files /dev/null and b/Resources/installLame.scpt differ diff --git a/Resources/installLilypond.scpt b/Resources/installLilypond.scpt index abbc99c..74b9a90 100644 Binary files a/Resources/installLilypond.scpt and b/Resources/installLilypond.scpt differ diff --git a/Resources/play.icns b/Resources/play.icns new file mode 100644 index 0000000..c5cb79b Binary files /dev/null and b/Resources/play.icns differ diff --git a/Resources/run.icns b/Resources/run.icns deleted file mode 100644 index 931d4e4..0000000 Binary files a/Resources/run.icns and /dev/null differ diff --git a/Resources/stop.icns b/Resources/stop.icns new file mode 100644 index 0000000..41c308e Binary files /dev/null and b/Resources/stop.icns differ diff --git a/Resources/stop.tiff b/Resources/stop.tiff deleted file mode 100644 index 6b4626f..0000000 Binary files a/Resources/stop.tiff and /dev/null differ diff --git a/Resources/tobeg.icns b/Resources/tobeg.icns new file mode 100644 index 0000000..d78231c Binary files /dev/null and b/Resources/tobeg.icns differ diff --git a/Resources/toend.icns b/Resources/toend.icns new file mode 100644 index 0000000..227a8e5 Binary files /dev/null and b/Resources/toend.icns differ diff --git a/Sources/VLAIFFDocument.h b/Sources/VLAIFFDocument.h new file mode 100644 index 0000000..7ce0477 --- /dev/null +++ b/Sources/VLAIFFDocument.h @@ -0,0 +1,18 @@ +// +// File: VLAIFFDocument.h - Export document in AIFF format +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2008 Matthias Neeracher +// + +#import +#import "VLDocument.h" + +@interface VLDocument (AIFF) + +- (NSFileWrapper *)aiffFileWrapperWithError:(NSError **)outError; + +@end diff --git a/Sources/VLAIFFDocument.mm b/Sources/VLAIFFDocument.mm new file mode 100644 index 0000000..f53755c --- /dev/null +++ b/Sources/VLAIFFDocument.mm @@ -0,0 +1,34 @@ +// +// File: VLAIFFDocument.mm - Export document in AIFF format +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2008 Matthias Neeracher +// + +#import "VLAIFFDocument.h" +#import "VLSoundOut.h" + +#import + +@implementation VLDocument (AIFF) + +- (NSFileWrapper *)aiffFileWrapperWithError:(NSError **)outError +{ + [self createTmpFileWithExtension:@"mid" ofType:@"VLMIDIType"]; + + NSURL * midiURL = [self fileURLWithExtension:@"mid"]; + NSURL * aiffURL = [self fileURLWithExtension:@"aiff"]; + VLSoundOut *writer = + VLSoundOut::FileWriter((CFURLRef)aiffURL, kAudioFormatLinearPCM); + writer->PlayFile(CFDataRef([NSData dataWithContentsOfURL:midiURL])); + delete writer; + + return [[[NSFileWrapper alloc] + initWithPath:[[self fileURLWithExtension:@"aiff"] path]] + autorelease]; +} + +@end diff --git a/Sources/VLAppController.h b/Sources/VLAppController.h index f61f6a4..29a65b7 100644 --- a/Sources/VLAppController.h +++ b/Sources/VLAppController.h @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2007 Matthias Neeracher +// Copyright © 2005-2008 Matthias Neeracher // #import @@ -17,6 +17,7 @@ NSString * toolPath; NSString * appPath; + NSString * lamePath; } - (IBAction) playNewPitch:(id)sender; @@ -25,6 +26,8 @@ - (IBAction) goToHelpURL:(id)sender; - (IBAction) showMirror:(id)sender; +- (BOOL) lameIsInstalled; + @end // Local Variables: diff --git a/Sources/VLAppController.mm b/Sources/VLAppController.mm index 3c223c5..022455d 100644 --- a/Sources/VLAppController.mm +++ b/Sources/VLAppController.mm @@ -65,6 +65,7 @@ if (self = [super init]) { toolPath = nil; appPath = nil; + lamePath = nil; } return self; } @@ -269,6 +270,32 @@ } } +- (BOOL) lameIsInstalled +{ + if (!lamePath) { + lamePath = [self getLineFromCommand:@"bash -l which lame"]; + if (!lamePath) + if ([self promptForSoftwareInstallation:@"Download" + withTitle: @"LAME Not Found!" + explanation: + @"The LAME MP3 encoder is needed to save songs in" + " MP3 format.%@" + script:@"installLame" + url:[NSURL URLWithString:@"http://64.151.81.88/download/thalictrum/lame-3.97.dmg.gz"]] + ) { + [[NSAlert alertWithMessageText:@"Quit and Restart" + defaultButton: @"OK" alternateButton: @"" otherButton: @"" + informativeTextWithFormat: + @"The software you have chosen to install will be " + "available after you restart this application."] + runModal]; + [NSApp terminate:self]; + } + return NO; + } + return YES; +} + - (IBAction) playNewPitch:(id)sender { VLNote note(VLFraction(1,4), [sender intValue]); diff --git a/Sources/VLDocument.h b/Sources/VLDocument.h index a7ef0de..2f0e416 100644 --- a/Sources/VLDocument.h +++ b/Sources/VLDocument.h @@ -51,6 +51,7 @@ enum { VLKeyValueUndo* undo; PDFDocument * printDoc; NSRange previewRange; + float playRate; } - (VLSong *) song; @@ -74,8 +75,8 @@ enum { - (IBAction) play:(id)sender; - (IBAction) stop:(id)sender; - (IBAction) playStop:(id)sender; +- (IBAction) playMusic:(id)sender; - (IBAction) togglePlayElements:(id)sender; -- (IBAction) playStop:(id)sender; - (NSString *) tmpPath; - (NSString *) workPath; diff --git a/Sources/VLDocument.mm b/Sources/VLDocument.mm index 07cbdad..d3e8087 100644 --- a/Sources/VLDocument.mm +++ b/Sources/VLDocument.mm @@ -13,12 +13,15 @@ #import "VLLilypondDocument.h" #import "VLMMADocument.h" #import "VLMIDIDocument.h" +#import "VLAIFFDocument.h" +#import "VLMP3Document.h" #import "VLPDFDocument.h" #import "VLPListDocument.h" #import "VLPDFWindow.h" #import "VLLogWindow.h" #import "VLSheetWindow.h" #import "VLSoundOut.h" +#import "VLMIDIWriter.h" #import @@ -88,6 +91,7 @@ vcsWrapper = nil; repeatVolta = 2; brandNew = true; + playRate = 1.0; observers = [[NSMutableArray alloc] init]; validTmpFiles = [[NSMutableDictionary alloc] initWithCapacity:10]; [self setHasUndoManager:YES]; @@ -402,6 +406,10 @@ return [self mmaFileWrapperWithError:outError]; } else if ([typeName isEqual:@"VLMIDIType"]) { return [self midiFileWrapperWithError:outError]; + } else if ([typeName isEqual:@"VLAIFFType"]) { + return [self aiffFileWrapperWithError:outError]; + } else if ([typeName isEqual:@"VLMP3Type"]) { + return [self mp3FileWrapperWithError:outError]; } else if ([typeName isEqual:@"VLPDFType"]) { return [self pdfFileWrapperWithError:outError]; } else { @@ -488,9 +496,29 @@ - (IBAction) play:(id)sender { [self createTmpFileWithExtension:@"mid" ofType:@"VLMIDIType"]; - VLSoundOut::Instance()->PlayFile( - CFDataRef([NSData dataWithContentsOfURL: - [self fileURLWithExtension:@"mid"]])); + + MusicSequence music; + NewMusicSequence(&music); + + FSRef fsRef; + CFURLGetFSRef((CFURLRef)[self fileURLWithExtension:@"mid"], &fsRef); + + MusicSequenceLoadSMFWithFlags(music, &fsRef, + kMusicSequenceLoadSMF_ChannelsToTracks); + + size_t countIn = 0; + if (playElements & kVLPlayCountIn) + switch ([[self songTime] intValue]) { + case 0x404: + case 0x304: + case 0x608: + countIn = 2; + } + VLMIDIWriter annotate(music, countIn); + annotate.Visit(*song); + + [sheetWin willPlaySequence:music]; + VLSoundOut::Instance()->PlaySequence(music); } - (void) playWithGroove:(NSString *)groove inSections:(NSRange)sections @@ -524,6 +552,42 @@ } } +- (IBAction) playMusic:(id)sender +{ + const float kMaxRate = 8.0f; + const float kMinRate = 0.2f; + const float kUpScale = 1.2f; + const float kDownScale = 0.8f; + bool nowPlaying = VLSoundOut::Instance()->Playing(); + switch (int tag = [sender tag]) { + case 0: // Play + VLSoundOut::Instance()->SetPlayRate(playRate = 1.0f); + if (!nowPlaying) + [self play:sender]; + break; + case 1: // Fwd + case -1: // Rew + if (tag * playRate < 0) + playRate = tag; + else if (fabsf(playRate) >= kMaxRate) + playRate = tag*kDownScale; + else if (fabsf(playRate) <= kMinRate) + playRate = tag*kUpScale; + else if (fabsf(playRate) >= 1.0f) + playRate *= kUpScale; + else + playRate *= kDownScale; + VLSoundOut::Instance()->SetPlayRate(playRate); + break; + case -2: // To Start + VLSoundOut::Instance()->SetTime(0); + break; + case 2: // To End + VLSoundOut::Instance()->SetTime(0x7FFFFFFF); + break; + } +} + - (IBAction) showOutput:(id)sender { [self createTmpFileWithExtension:@"pdf" ofType:@"VLPDFType"]; diff --git a/Sources/VLLayout.cpp b/Sources/VLLayout.cpp index 963be43..b3859df 100644 --- a/Sources/VLLayout.cpp +++ b/Sources/VLLayout.cpp @@ -101,12 +101,13 @@ VLTextLayout::VLTextLayout(VLFontHandler * regular, VLFontHandler * narrow) { } -void VLTextLayout::AddSyllable(const VLSyllable & syll, float x) +void VLTextLayout::AddSyllable(const VLSyllable & syll, float x, bool highlight) { VLLayoutSyll ls; static_cast(ls) = syll; - ls.fX = x; + ls.fX = x; + ls.fHighlight = highlight; fSyllables.push_back(ls); } @@ -130,10 +131,12 @@ void VLTextLayout::DrawLine(float y) float nextX = syll->fX-0.5*nextW; if (syll->fKind & VLSyllable::kHasPrev) - fRegularFont->Draw(nextX-fRegularFont->Width(PRE_DASH), y, PRE_DASH); + fRegularFont->Draw(nextX-fRegularFont->Width(PRE_DASH), y, PRE_DASH, + false); while (syll != end) { std::string text = syll->fText; + bool hl = syll->fHighlight; VLSyllIter next = syll+1; float curW = nextW; float curX = nextX; @@ -147,8 +150,8 @@ void VLTextLayout::DrawLine(float y) // Plenty of space, draw dashes // float dashSpace = 0.5*(nextX-curX-curW-kDashW); - fRegularFont->Draw(curX, y, text.c_str()); - fRegularFont->Draw(curX+curW+dashSpace, y, "-"); + fRegularFont->Draw(curX, y, text.c_str(), hl); + fRegularFont->Draw(curX+curW+dashSpace, y, "-", hl); goto nextText; } else { @@ -167,12 +170,12 @@ void VLTextLayout::DrawLine(float y) // // Enough space, draw regular // - fRegularFont->Draw(curX, y, text.c_str()); + fRegularFont->Draw(curX, y, text.c_str(), hl); } else { // // Tight space, draw narrow & adjust // - fNarrowFont->Draw(curX, y, text.c_str()); + fNarrowFont->Draw(curX, y, text.c_str(), syll->fHighlight); text += NARROW_SPACE; nextX = std::max(nextX, curX+fNarrowFont->Width(text.c_str())); } @@ -184,7 +187,7 @@ void VLTextLayout::DrawLine(float y) // if ((end-1)->fKind & VLSyllable::kHasNext) text += POST_DASH; - fRegularFont->Draw(curX, y, text.c_str()); + fRegularFont->Draw(curX, y, text.c_str(), hl); nextText: syll = next; } diff --git a/Sources/VLLayout.h b/Sources/VLLayout.h index 4394463..0f851c9 100644 --- a/Sources/VLLayout.h +++ b/Sources/VLLayout.h @@ -45,20 +45,22 @@ public: class VLFontHandler { public: - virtual void Draw(float x, float y, const char * utf8Text) = 0; + virtual void Draw(float x, float y, + const char * utf8Text, bool highlight) = 0; virtual float Width(const char * utf8Text) = 0; virtual ~VLFontHandler(); }; struct VLLayoutSyll : public VLSyllable { float fX; + bool fHighlight; }; class VLTextLayout { public: VLTextLayout(VLFontHandler * regular, VLFontHandler * narrow); - void AddSyllable(const VLSyllable & syll, float x); + void AddSyllable(const VLSyllable & syll, float x, bool highlight); void DrawLine(float y); private: VLFontHandler * fRegularFont; diff --git a/Sources/VLLilypondWriter.cpp b/Sources/VLLilypondWriter.cpp index 465b764..2a3ac28 100644 --- a/Sources/VLLilypondWriter.cpp +++ b/Sources/VLLilypondWriter.cpp @@ -224,9 +224,17 @@ static std::string EscapeSyllable(std::string syll) return '"'+syll+'"'; } +static bool PreferSharps(bool globalSharps, int noteAccidentals) +{ + return (noteAccidentals & VLNote::kAccidentals) + ? (noteAccidentals & VLNote::kWantSharp) + : globalSharps; +} + void VLLilypondWriter::VisitNote(VLLyricsNote & n) { - std::string nm = LilypondPitchName(n.fPitch, fUseSharps); + std::string nm = + LilypondPitchName(n.fPitch, PreferSharps(fUseSharps, n.fVisual)); if (n.fPitch != VLNote::kNoPitch) { int ref = VLNote::kMiddleC-VLNote::kOctave; for (int ticks = (n.fPitch-ref)/VLNote::kOctave; ticks>0; --ticks) @@ -248,7 +256,8 @@ void VLLilypondWriter::VisitNote(VLLyricsNote & n) sprintf(duration, "%s\\times 2/3 { %s%d%s }", space, nm.c_str(), kValue[n.fVisual & VLNote::kNoteHead], tie); else - sprintf(duration, "%s%s%d%s", space, nm.c_str(), kValue[n.fVisual], tie); + sprintf(duration, "%s%s%d%s", + space, nm.c_str(), kValue[n.fVisual & VLNote::kNoteHead], tie); fAccum += duration; fPrevNote= n; @@ -271,7 +280,8 @@ static const char * kLilypondStepNames[] = { void VLLilypondWriter::VisitChord(VLChord & c) { - std::string name = LilypondPitchName(c.fPitch, fUseSharps); + std::string name = + LilypondPitchName(c.fPitch, PreferSharps(fUseSharps, c.fVisual)); char duration[16]; if (c.fDuration.fNum == 1 && !(c.fDuration.fDenom & (c.fDuration.fDenom-1))) // Power of two sprintf(duration, "%d", c.fDuration.fDenom); diff --git a/Sources/VLMIDIDocument.mm b/Sources/VLMIDIDocument.mm index b2baa24..e86f510 100644 --- a/Sources/VLMIDIDocument.mm +++ b/Sources/VLMIDIDocument.mm @@ -9,6 +9,7 @@ // #import "VLMIDIDocument.h" +#import "VLMIDIWriter.h" @implementation VLDocument (MIDI) diff --git a/Sources/VLMIDIWriter.cpp b/Sources/VLMIDIWriter.cpp new file mode 100644 index 0000000..70df48c --- /dev/null +++ b/Sources/VLMIDIWriter.cpp @@ -0,0 +1,69 @@ +// +// File: VLMIDIWriter.cpp +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2008 Matthias Neeracher +// + +#include "VLMIDIWriter.h" +#include + +struct VLMetaEvent : MIDIMetaEvent { + char fPadding[32]; + + VLMetaEvent(const char * label) + { + metaEventType = 3; + dataLength = strlen(label); + memcpy(data, label, dataLength); + } +}; + +void VLMIDIWriter::Visit(VLSong & song) +{ + MusicSequenceNewTrack(fMusic, &fTrack); + VLMetaEvent meta("VocalEasel"); + MusicTrackNewMetaEvent(fTrack, 0.0, &meta); + + VisitMeasures(song, true); +} + +void VLMIDIWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas) +{ + fTime = p.fTime; + fMeasure = m; + + if (!m) + fChordTime = fNoteTime = fCountIn*fTime.fNum; + + fAt = 0; + VisitChords(meas); + + fAt = 0; + VisitNotes(meas, p, false); +} + +void VLMIDIWriter::VisitNote(VLLyricsNote & n) +{ + if (n.fPitch != VLNote::kNoPitch && !(n.fTied & VLNote::kTiedWithPrev)) { + VLMIDIUserEvent event = {8, n.fPitch, fMeasure, fAt}; + MusicTrackNewUserEvent(fTrack, fNoteTime, + reinterpret_cast(&event)); + } + fAt += n.fDuration; + fNoteTime += n.fDuration * (float)fTime.fDenom; +} + +void VLMIDIWriter::VisitChord(VLChord & c) +{ + if (c.fPitch != VLNote::kNoPitch) { + VLMIDIUserEvent event = {8, 0, fMeasure, fAt}; + MusicTrackNewUserEvent(fTrack, fChordTime, + reinterpret_cast(&event)); + } + fAt += c.fDuration; + fChordTime += c.fDuration * (float)fTime.fDenom; +} diff --git a/Sources/VLMIDIWriter.h b/Sources/VLMIDIWriter.h new file mode 100644 index 0000000..f37a563 --- /dev/null +++ b/Sources/VLMIDIWriter.h @@ -0,0 +1,44 @@ +// +// File: VLMIDIWriter.h +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2008 Matthias Neeracher +// + +#include "VLModel.h" +#include +#include + +struct VLMIDIUserEvent { + uint32_t fLength; + int8_t fPitch; // 0 -> Chord + int16_t fMeasure; + VLFract fAt; +}; + +class VLMIDIWriter: public VLSongVisitor { +public: + VLMIDIWriter(MusicSequence music, size_t countIn) + : fMusic(music), fCountIn(countIn) {} + + virtual void Visit(VLSong & song); + virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas); + virtual void VisitNote(VLLyricsNote & n); + virtual void VisitChord(VLChord & c); +private: + MusicSequence fMusic; + size_t fCountIn; + MusicTrack fTrack; + size_t fMeasure; + MusicTimeStamp fChordTime; + MusicTimeStamp fNoteTime; + VLFraction fAt; + VLFraction fTime; +}; + +// Local Variables: +// mode:C++ +// End: diff --git a/Sources/VLMMAWriter.cpp b/Sources/VLMMAWriter.cpp index 16291f8..2b98bc4 100644 --- a/Sources/VLMMAWriter.cpp +++ b/Sources/VLMMAWriter.cpp @@ -1,5 +1,5 @@ // -// File: VLMMAWriter.h +// File: VLMMAWriter.cpp // // Author(s): // diff --git a/Sources/VLMP3Document.h b/Sources/VLMP3Document.h new file mode 100644 index 0000000..8e4f83f --- /dev/null +++ b/Sources/VLMP3Document.h @@ -0,0 +1,18 @@ +// +// File: VLMP3Document.h - Export document in MP3 format +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2008 Matthias Neeracher +// + +#import +#import "VLDocument.h" + +@interface VLDocument (MP3) + +- (NSFileWrapper *)mp3FileWrapperWithError:(NSError **)outError; + +@end diff --git a/Sources/VLMP3Document.mm b/Sources/VLMP3Document.mm new file mode 100644 index 0000000..3f3a383 --- /dev/null +++ b/Sources/VLMP3Document.mm @@ -0,0 +1,69 @@ +// +// File: VLMP3Document.mm - Export document in MP3 format +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2008 Matthias Neeracher +// + +#import "VLMP3Document.h" + +@implementation VLDocument (MP3) + +- (NSFileWrapper *)mp3FileWrapperWithError:(NSError **)outError +{ + if (![[NSApp delegate] lameIsInstalled]) { + if (outError) + *outError = [NSError errorWithDomain:NSPOSIXErrorDomain + code:ENOEXEC userInfo:nil]; + return nil; + } + NSBundle * mainBundle = [NSBundle mainBundle]; + + [self createTmpFileWithExtension:@"aiff" ofType:@"VLAIFFType"]; + + NSURL * aiffURL = [self fileURLWithExtension:@"aiff"]; + NSURL * mp3URL = [self fileURLWithExtension:@"mp3"]; + NSString * launch = + [mainBundle pathForResource:@"lameWrapper" ofType:@"" + inDirectory:@"bin"]; + NSArray * args = [NSArray arrayWithObjects: @"--quiet", @"-h", [aiffURL path], [mp3URL path], nil]; + NSTask * task = [self taskWithLaunchPath:launch arguments:args]; + + [[NSNotificationCenter defaultCenter] + addObserver:self selector:@selector(lameDone:) + name:NSTaskDidTerminateNotification object:task]; + + [sheetWin startAnimation]; + [task launch]; + [task waitUntilExit]; + [sheetWin stopAnimation]; + int status = [task terminationStatus]; + if (!status) { + return [[[NSFileWrapper alloc] + initWithPath:[[self fileURLWithExtension:@"mp3"] path]] + autorelease]; + } else { + if (outError) + *outError = [NSError errorWithDomain:NSCocoaErrorDomain + code:NSPersistentStoreSaveError + userInfo:nil]; + + return nil; + } +} + +- (void)lameDone:(NSNotification *)notification { + [[NSNotificationCenter defaultCenter] removeObserver: self + name:NSTaskDidTerminateNotification object:[notification object]]; + int status = [[notification object] terminationStatus]; + if (!status) { + ; + } else { + NSBeep(); + } +} + +@end diff --git a/Sources/VLModel.cpp b/Sources/VLModel.cpp index 94ed7c4..860e466 100644 --- a/Sources/VLModel.cpp +++ b/Sources/VLModel.cpp @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2007 Matthias Neeracher +// Copyright © 2005-2008 Matthias Neeracher // #include "VLModel.h" @@ -104,15 +104,19 @@ VLNote::VLNote(std::string name) name.erase(0, 1); // // Look for sharp / flat - // + // + fVisual = 0; if (name.size()) if (name[0] == '#') { ++fPitch; + fVisual |= kWantSharp; name.erase(0); } else if (name[0] == 'b') { --fPitch; + fVisual |= kWantFlat; name.erase(0, 1); } + AdjustAccidentals(); if (name == "") return; @@ -127,14 +131,14 @@ VLNote::VLNote(VLFraction dur, int pitch) void VLNote::Name(std::string & name, bool useSharps) const { - name = PitchName(fPitch, useSharps); + name = PitchName(fPitch, useSharps && !(fVisual & kWantFlat)); } void VLNote::MakeRepresentable() { if (fDuration > 1) fDuration = 1; - fVisual = kWhole; + fVisual = kWhole | (fVisual & kAccidentals); VLFraction part(1,1); VLFraction triplet(2,3); // @@ -159,6 +163,26 @@ void VLNote::MakeRepresentable() abort(); } +void VLNote::AdjustAccidentals() +{ + // + // Don't store accidental preferences for whole notes: + // There is no way to represent these in MusicXML, so saving and + // reloading would change behavior. + // + enum { + kC = 1<<0, + kD = 1<<2, + kE = 1<<4, + kF = 1<<5, + kG = 1<<7, + kA = 1<<9, + kB = 1<<11 + }; + if ((1 << (fPitch % 12)) & (kC | kD | kE | kF | kG | kA | kB)) + fVisual &= ~kAccidentals; +} + void VLNote::AlignToGrid(VLFraction at, VLFraction grid) { if (at+fDuration > grid) { @@ -232,11 +256,14 @@ VLChord::VLChord(std::string name) if (name.size()) if (name[0] == '#') { ++fPitch; + fVisual |= kWantSharp; name.erase(0, 1); } else if (name[0] == 'b') { --fPitch; + fVisual |= kWantFlat; name.erase(0, 1); } + AdjustAccidentals(); // // Root // @@ -300,7 +327,7 @@ static const char * kStepNames[] = { void VLChord::Name(std::string & base, std::string & ext, std::string & root, bool useSharps) const { - base = PitchName(fPitch, useSharps); + base = PitchName(fPitch, useSharps && !(fVisual & kWantFlat)); ext = ""; root = ""; @@ -372,7 +399,7 @@ void VLChord::Name(std::string & base, std::string & ext, std::string & root, bo // Root // if (fRootPitch != kNoPitch) - root = PitchName(fRootPitch, useSharps); + root = PitchName(fRootPitch, useSharps && !(fVisual & kWantFlat)); } VLMeasure::VLMeasure() @@ -490,7 +517,7 @@ void VLMeasure::DecomposeNotes(const VLProperties & prop, VLNoteList & decompose // // First swing note (4th triplet -> 8th) // - p.fVisual = (p.fVisual+1) & VLNote::kNoteHead; + p.fVisual = (p.fVisual+1) & ~VLNote::kTriplet; } } else if ((p.fDuration == sw12 && ((at+p.fDuration) % grid4 == 0)) || (swing16 && p.fDuration == sw24 && ((at+p.fDuration) % grid8 == 0)) @@ -498,7 +525,7 @@ void VLMeasure::DecomposeNotes(const VLProperties & prop, VLNoteList & decompose // // Second swing note (8th triplet -> 8th) // - p.fVisual &= VLNote::kNoteHead; + p.fVisual &= ~VLNote::kTriplet; } else if ((at % p.fDuration != 0) || (p.fDuration != c.fDuration && 2*p.fDuration != c.fDuration) @@ -507,7 +534,7 @@ void VLMeasure::DecomposeNotes(const VLProperties & prop, VLNoteList & decompose // Get rid of awkward triplets // p.fDuration *= VLFraction(3,4); - p.fVisual = (p.fVisual+1) & VLNote::kNoteHead; + p.fVisual = (p.fVisual+1) & ~VLNote::kTriplet; } } haveDuration: @@ -703,6 +730,8 @@ void VLSong::AddNote(VLLyricsNote note, size_t measure, VLFraction at) // while (measure+1 >= fMeasures.size()) AddMeasure(); + + note.AdjustAccidentals(); VLNoteList::iterator i = fMeasures[measure].fMelody.begin(); VLFraction t(0); @@ -863,6 +892,7 @@ void VLSong::ExtendNote(size_t measure, VLFraction at) // Extend previous note // k->fPitch = i->fPitch; + k->fVisual= i->fVisual; k->fTied = VLNote::kTiedWithPrev; i->fTied |= VLNote::kTiedWithNext; k->fLyrics.clear(); @@ -935,6 +965,7 @@ void VLSong::ChangeKey(int section, int newKey, int newMode, bool transpose) for (; i!=e; ++i) { TransposePinned(i->fPitch, semi); TransposePinned(i->fRootPitch, semi); + i->AdjustAccidentals(); } } for (int pass=0; pass<2 && semi;) { @@ -953,6 +984,7 @@ void VLSong::ChangeKey(int section, int newKey, int newMode, bool transpose) i->fPitch += semi; low = std::min(low, i->fPitch); high = std::max(high, i->fPitch); + i->AdjustAccidentals(); } } if (low < VLNote::kMiddleC-6 && high < VLNote::kMiddleC+7) diff --git a/Sources/VLModel.h b/Sources/VLModel.h index 2792f8e..c896278 100644 --- a/Sources/VLModel.h +++ b/Sources/VLModel.h @@ -145,12 +145,16 @@ struct VLNote { k32nd = 5, kNoteHead = 0x07, + kWantSharp = 0x20, + kWantFlat = 0x40, + kAccidentals= 0x60, kTriplet = 0x80 }; VLNote(VLFraction dur=0, int pitch=kNoPitch); VLNote(std::string name); void Name(std::string & name, bool useSharps = false) const; void MakeRepresentable(); + void AdjustAccidentals(); void AlignToGrid(VLFraction at, VLFraction grid); }; diff --git a/Sources/VLPListDocument.mm b/Sources/VLPListDocument.mm index 565d20a..72dc519 100644 --- a/Sources/VLPListDocument.mm +++ b/Sources/VLPListDocument.mm @@ -157,6 +157,7 @@ void VLPlistVisitor::VisitChord(VLChord & c) [NSNumber numberWithInt:c.fDuration.fNum], @"durNum", [NSNumber numberWithInt:c.fDuration.fDenom], @"durDenom", [NSNumber numberWithInt:c.fPitch], @"pitch", + [NSNumber numberWithInt:c.fVisual], @"visual", [NSNumber numberWithInt:c.fSteps], @"steps", [NSNumber numberWithInt:c.fRootPitch], @"root", nil]; @@ -230,8 +231,10 @@ void VLPlistVisitor::VisitChord(VLChord & c) VLFraction([[ndict objectForKey:@"durNum"] intValue], [[ndict objectForKey:@"durDenom"] intValue], true); - note.fPitch = [[ndict objectForKey:@"pitch"] intValue]; - note.fTied = 0; + note.fPitch = [[ndict objectForKey:@"pitch"] intValue]; + note.fVisual |= [[ndict objectForKey:@"visual"] intValue] + & VLNote::kAccidentals; + note.fTied = 0; if ([[ndict objectForKey:@"tied"] intValue] & VLNote::kTiedWithPrev) { if (at != 0) { diff --git a/Sources/VLSheetView.h b/Sources/VLSheetView.h index 29db3e0..41d9f40 100644 --- a/Sources/VLSheetView.h +++ b/Sources/VLSheetView.h @@ -9,6 +9,7 @@ // #import +#import #import "VLModel.h" #import "VLLayout.h" @@ -83,6 +84,11 @@ enum VLRecalc { size_t fVolta; size_t fVoltaOK; VLLayout * fLayout; + int fHighlightMeasure; + VLFract fHighlightAt; + size_t fHighlightStanza; + bool fHighlightNow; + bool fHighlightOne; IBOutlet id fFieldEditor; IBOutlet id fRepeatSheet; @@ -109,10 +115,10 @@ enum VLRecalc { - (VLSong *) song; - (NSImage *) musicElement:(VLMusicElement)elt; -- (int) stepInSection:(int)section withPitch:(int)pitch; +- (int) stepInSection:(int)section withPitch:(int)pitch visual:(int)visual; - (float) systemY:(int)system; -- (float) noteYInSection:(int)section withPitch:(int)pitch accidental:(VLMusicElement*)accidental; -- (float) noteYInMeasure:(int)measure withPitch:(int)pitch accidental:(VLMusicElement*)accidental; +- (float) noteYInSection:(int)section withPitch:(int)pitch visual:(int)visual accidental:(VLMusicElement*)accidental; +- (float) noteYInMeasure:(int)measure withPitch:(int)pitch visual:(int)visual accidental:(VLMusicElement*)accidental; - (float) noteXInMeasure:(int)measure at:(VLFraction)at; - (void) scrollMeasureToVisible:(int)measure; @@ -131,6 +137,8 @@ enum VLRecalc { - (void) setGroove:(NSString *)groove; - (void) playWithGroove:(NSString *)groove; +- (NSColor *)textBackgroundColorForSystem:(int)system; + @end // Local Variables: diff --git a/Sources/VLSheetView.mm b/Sources/VLSheetView.mm index 78acd6b..e640dbc 100644 --- a/Sources/VLSheetView.mm +++ b/Sources/VLSheetView.mm @@ -97,6 +97,7 @@ static float sFlatPos[] = { fNumBotLedgers = 2; fNumStanzas = 2; fLastMeasures = 0; + fHighlightOne = false; } return self; } @@ -138,7 +139,7 @@ static float sFlatPos[] = { return kSystemBaseline+b.origin.y+b.size.height-(system+1)*kSystemH; } -int8_t sSemi2Pitch[2][12] = {{ +int8_t sSemi2Pitch[4][12] = {{ // C Db D Eb E F Gb G Ab A Bb B 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, },{ @@ -151,7 +152,7 @@ int8_t sSemi2Pitch[2][12] = {{ #define N kMusicNatural, #define _ kMusicNothing, -VLMusicElement sSemi2Accidental[12][12] = { +VLMusicElement sSemi2Accidental[13][12] = { // C DbD EbE F GbG AbA BbB {N _ N _ N _ _ N _ N _ N}, // Gb major - 6 flats {_ _ N _ N _ _ N _ N _ N}, // Db major - 5 flats @@ -166,6 +167,7 @@ VLMusicElement sSemi2Accidental[12][12] = { {N _ _ S _ N _ N _ _ S _}, // A major - 3 sharps {N _ N _ _ N _ N _ _ S _}, // E major - 4 sharps {N _ N _ _ N _ N _ N _ _}, // B major - 5 sharps + {N _ N _ N N _ N _ N _ _}, // F# major - 6 sharps }; #undef S @@ -173,33 +175,46 @@ VLMusicElement sSemi2Accidental[12][12] = { #undef N #undef _ -- (int) stepInSection:(int)section withPitch:(int)pitch +- (int) stepInSection:(int)section withPitch:(int)pitch visual:(int)visual { int semi = pitch % 12; int key = [self song]->fProperties[section].fKey; - bool useSharps = key > 0; + bool useSharps = (visual & VLNote::kAccidentals) + ? (visual & VLNote::kWantSharp) : (key > 0); return sSemi2Pitch[useSharps][semi]; } -- (float) noteYInSection:(int)section - withPitch:(int)pitch accidental:(VLMusicElement*)accidental +- (float) noteYInSection:(int)section withPitch:(int)pitch + visual:(int)visual accidental:(VLMusicElement*)accidental { int semi = pitch % 12; int octave = (pitch / 12) - 5; int key = [self song]->fProperties[section].fKey; - *accidental = sSemi2Accidental[key+6][semi]; + switch (*accidental = sSemi2Accidental[key+6][semi]) { + case kMusicSharp: + if (visual & VLNote::kWantFlat) + *accidental = kMusicFlat; + break; + case kMusicFlat: + if (visual & VLNote::kWantSharp) + *accidental = kMusicSharp; + break; + } return (octave*3.5f - + [self stepInSection:section withPitch:pitch]*0.5f-1.0f)*kLineH; + + [self stepInSection:section withPitch:pitch visual:visual]*0.5f + - 1.0f + )* kLineH; } -- (float) noteYInMeasure:(int)measure withPitch:(int)pitch accidental:(VLMusicElement*)accidental +- (float) noteYInMeasure:(int)measure withPitch:(int)pitch + visual:(int)visual accidental:(VLMusicElement*)accidental { return [self systemY:fLayout->SystemForMeasure(measure)] + [self noteYInSection:[self song]->fMeasures[measure].fPropIdx - withPitch:pitch accidental:accidental]; + withPitch:pitch visual:visual accidental:accidental]; } - (float) noteXInMeasure:(int)measure at:(VLFraction)at @@ -492,20 +507,24 @@ const char * sBreak[3] = {"", "\xE2\xA4\xBE", "\xE2\x8E\x98"}; withAttributes: sBreakFont]; } -- (void)drawBackgroundForSystem:(int)system +- (NSColor *)notesBackgroundColorForSystem:(int)system +{ + NSArray * colors = [NSColor controlAlternatingRowBackgroundColors]; + + return [colors objectAtIndex:0]; +} + +- (NSColor *)textBackgroundColorForSystem:(int)system { const VLSong * song = [self song]; - const float kSystemY = [self systemY:system]; - const float kLineW = (*fLayout)[system].SystemWidth(); const bool kAltColors = song->fMeasures[fLayout->FirstMeasure(system)].fPropIdx & 1; NSArray * colors = [NSColor controlAlternatingRowBackgroundColors]; - NSColor * bgColor= [colors objectAtIndex:0]; - NSColor * fgColor= [colors objectAtIndex:1]; + NSColor * color= [colors objectAtIndex:1]; if (kAltColors) { float hue, saturation, brightness, alpha; - [[fgColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getHue:&hue saturation:&saturation + [[color colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; if (saturation) // Color @@ -513,17 +532,25 @@ const char * sBreak[3] = {"", "\xE2\xA4\xBE", "\xE2\x8E\x98"}; else // Black & white brightness -= 0.05f; - fgColor = [NSColor colorWithCalibratedHue:hue saturation:saturation - brightness:brightness alpha:alpha]; + color = [NSColor colorWithCalibratedHue:hue saturation:saturation + brightness:brightness alpha:alpha]; } + return color; +} + +- (void)drawBackgroundForSystem:(int)system +{ + const float kSystemY = [self systemY:system]; + const float kLineW = (*fLayout)[system].SystemWidth(); + [NSGraphicsContext saveGraphicsState]; - [fgColor setFill]; + [[self textBackgroundColorForSystem:system] setFill]; [NSBezierPath fillRect: NSMakeRect(kLineX, kSystemY-kSystemBaseline, kLineW, fNumStanzas*kLyricsH)]; [NSBezierPath fillRect: NSMakeRect(kLineX, kSystemY+kChordY, kLineW, kChordH)]; - [bgColor setFill]; + [[self notesBackgroundColorForSystem:system] setFill]; [NSBezierPath fillRect: NSMakeRect(kLineX, kSystemY-kSystemBaseline+fNumStanzas*kLyricsH, kLineW, kSystemBaseline+kChordY-fNumStanzas*kLyricsH)]; @@ -731,8 +758,10 @@ static int8_t sSharpAcc[] = { fCursorAccidental = kMusicFlatCursor; // G# -> Gb fCursorActualPitch = fCursorPitch-1; break; - default: case NSCommandKeyMask: + fCursorAccidental = kMusicSharpCursor; + // Fall through + default: fCursorActualPitch = fCursorPitch+1; break; // G# -> G# case NSAlternateKeyMask|NSCommandKeyMask: @@ -745,8 +774,10 @@ static int8_t sSharpAcc[] = { } else { if (prop.fKey <= -sFlatAcc[fCursorPitch % 12]) { // Flat in Key switch ([event modifierFlags] & (NSAlternateKeyMask|NSCommandKeyMask)) { - default: case NSAlternateKeyMask: + fCursorAccidental = kMusicFlatCursor; + // Fall through + default: fCursorActualPitch = fCursorPitch-1; break; // Gb -> Gb case NSCommandKeyMask: @@ -978,6 +1009,8 @@ static int8_t sSharpAcc[] = { break; default: [editable autorelease]; + fHighlightStanza = 0xFFFFFFFF; + fHighlightOne = false; editable = nil; } [self setEditTarget:editable]; diff --git a/Sources/VLSheetViewLyrics.h b/Sources/VLSheetViewLyrics.h index a902057..0a9a465 100644 --- a/Sources/VLSheetViewLyrics.h +++ b/Sources/VLSheetViewLyrics.h @@ -39,6 +39,7 @@ - (void) editLyrics; - (void) drawLyricsForSystem:(int)system stanza:(size_t)stanza; - (void) highlightLyricsInStanza:(size_t)stanza measure:(int)measure at:(VLFraction)at; +- (void) highlightTextInStanza:(size_t)stanza measure:(int)measure at:(VLFraction)at one:(BOOL)one; @end diff --git a/Sources/VLSheetViewLyrics.mm b/Sources/VLSheetViewLyrics.mm index c92ba84..3002328 100644 --- a/Sources/VLSheetViewLyrics.mm +++ b/Sources/VLSheetViewLyrics.mm @@ -36,6 +36,7 @@ VLFraction At = fAt; fSong->FindWord(fStanza, fMeasure, At); fAt = At; + [fView highlightTextInStanza:fStanza measure:fMeasure at:fAt one:NO]; [fView setNeedsDisplay: YES]; @@ -78,6 +79,7 @@ } fNextMeas = fMeasure; fNextAt = fAt; + [fView highlightTextInStanza:fStanza measure:fMeasure at:fAt]; [fView scrollMeasureToVisible:fMeasure]; } @@ -92,12 +94,15 @@ fAt = at; fNextMeas = fMeasure; fNextAt = fAt; + [fView highlightTextInStanza:fStanza measure:fMeasure at:fAt]; [fView scrollMeasureToVisible:fMeasure]; } - (void) highlightCursor { - [fView highlightLyricsInStanza:fStanza measure:fMeasure at:fAt]; + std::string word = fSong->GetWord(fStanza, fMeasure, fAt); + if (!word.size()) + [fView highlightLyricsInStanza:fStanza measure:fMeasure at:fAt]; } @end @@ -106,7 +111,7 @@ class VLCocoaFontHandler : public VLFontHandler { public: VLCocoaFontHandler(NSString * name, float size); - virtual void Draw(float x, float y, const char * utf8Text); + virtual void Draw(float x, float y, const char * utf8Text, bool highlight); virtual float Width(const char * utf8Text); private: NSDictionary * fTextAttr; @@ -121,10 +126,20 @@ VLCocoaFontHandler::VLCocoaFontHandler(NSString * name, float size) font, NSFontAttributeName, nil]; } -void VLCocoaFontHandler::Draw(float x, float y, const char * utf8Text) +static NSColor * sHighlightColor; + +void VLCocoaFontHandler::Draw(float x, float y, + const char * utf8Text, bool highlight) { - NSString * t = [NSString stringWithUTF8String:utf8Text]; - [t drawAtPoint:NSMakePoint(x,y) withAttributes:fTextAttr]; + NSDictionary * attr = fTextAttr; + if (highlight) { + NSMutableDictionary * aa = + [NSMutableDictionary dictionaryWithDictionary:attr]; + [aa setValue:sHighlightColor forKey:NSBackgroundColorAttributeName]; + attr = aa; + } + NSString * t = [NSString stringWithUTF8String:utf8Text]; + [t drawAtPoint:NSMakePoint(x,y) withAttributes:attr]; } float VLCocoaFontHandler::Width(const char * utf8Text) @@ -171,14 +186,28 @@ float VLCocoaFontHandler::Width(const char * utf8Text) ) { ; } else { + if (!fHighlightNow) { + fHighlightNow = stanza == fHighlightStanza + && measIdx == fHighlightMeasure + && at == fHighlightAt; + if (fHighlightNow && !sHighlightColor) + sHighlightColor = + [[self textBackgroundColorForSystem:system] + shadowWithLevel:0.2]; + } + text.AddSyllable(note->fLyrics[stanza-1], - [self noteXInMeasure:measIdx at:at]); + [self noteXInMeasure:measIdx at:at], + fHighlightNow); + fHighlightNow = fHighlightNow && !fHighlightOne && + note->fLyrics[stanza-1].fKind & VLSyllable::kHasNext; } at += note->fDuration; } } text.DrawLine(kSystemY+kLyricsY-stanza*kLyricsH); + sHighlightColor = nil; } - (void) editLyrics @@ -196,6 +225,21 @@ float VLCocoaFontHandler::Width(const char * utf8Text) - (void) highlightLyricsInStanza:(size_t)stanza measure:(int)measure at:(VLFraction)at { + const float kSystemY = [self systemY:fLayout->SystemForMeasure(measure)]; + NSRect r = + NSMakeRect([self noteXInMeasure:measure at:at]-kNoteW*0.5f, + kSystemY+kLyricsY-stanza*kLyricsH, kNoteW, kLyricsH); + [[NSColor colorWithCalibratedWhite:0.8f alpha:1.0f] setFill]; + NSRectFillUsingOperation(r, NSCompositePlusDarker); +} + +- (void) highlightTextInStanza:(size_t)stanza measure:(int)measure at:(VLFraction)at one:(BOOL)one +{ + fHighlightStanza = stanza; + fHighlightMeasure= measure; + fHighlightAt = at; + fHighlightNow = false; + fHighlightOne = one; } @end diff --git a/Sources/VLSheetViewNotes.h b/Sources/VLSheetViewNotes.h index ed2e9f9..a06bcc3 100644 --- a/Sources/VLSheetViewNotes.h +++ b/Sources/VLSheetViewNotes.h @@ -15,6 +15,7 @@ - (void) drawNotesForSystem:(int)system; - (void) addNoteAtCursor; - (void) startKeyboardCursor; +- (void) drawNoteCursor:(int)pitch inMeasure:(size_t)measure at:(VLFract)at; @end diff --git a/Sources/VLSheetViewNotes.mm b/Sources/VLSheetViewNotes.mm index 1d5cd2c..23c1a9b 100644 --- a/Sources/VLSheetViewNotes.mm +++ b/Sources/VLSheetViewNotes.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2007 Matthias Neeracher +// Copyright © 2005-2008 Matthias Neeracher // #import "VLSheetView.h" @@ -22,7 +22,14 @@ { if (fCursorMeasure > -1) { VLNote newNote(1, fClickMode==' ' ? fCursorActualPitch : VLNote::kNoPitch); - + switch (fCursorAccidental) { + case kMusicFlatCursor: + newNote.fVisual |= VLNote::kWantFlat; + break; + case kMusicSharpCursor: + newNote.fVisual |= VLNote::kWantSharp; + break; + } [[self document] willChangeSong]; if (fCursorAccidental == kMusicExtendCursor) [self song]->ExtendNote(fCursorMeasure, fCursorAt); @@ -49,11 +56,14 @@ } } -- (void) drawLedgerLinesInSection:(int)section withPitch:(int)pitch at:(NSPoint)p +- (void) drawLedgerLinesInSection:(int)section withPitch:(int)pitch visual:(int)visual at:(NSPoint)p { p.x += kLedgerX; int octave = (pitch / 12) - 5; - int step = (octave*7+[self stepInSection:section withPitch:pitch]-2)/2; + int step = (octave*7 + + [self stepInSection:section withPitch:pitch visual:visual] + - 2 + ) / 2; for (int i=0; i-- > step; ) { NSPoint p0 = p; @@ -71,71 +81,96 @@ } } -- (void) drawNoteCursor +- (void) drawNoteCursor:(int)pitch inMeasure:(size_t)measure at:(VLFract)at + accidental:(VLMusicElement)accidental + mode:(char)mode { int cursorX; int cursorY; int cursorSect; - VLMusicElement accidental; + int cursorVisual = 0; + VLMusicElement acc; VLMusicElement cursorElt; - cursorX = [self noteXInMeasure:fCursorMeasure at:fCursorAt]; - if (fCursorAccidental == kMusicExtendCursor) { + cursorX = [self noteXInMeasure:measure at:at]; + if (accidental == kMusicExtendCursor) { cursorY = - [self noteYInMeasure:fCursorMeasure - withPitch:fCursorPitch - accidental:&accidental]; - cursorElt = fCursorAccidental; + [self noteYInMeasure:measure + withPitch:pitch + visual:0 + accidental:&acc]; + cursorElt = accidental; } else - switch (fClickMode) { + switch (mode) { default: + switch (accidental) { + case kMusicSharp: + cursorVisual = VLNote::kWantSharp; + break; + case kMusicFlat: + cursorVisual = VLNote::kWantFlat; + break; + } cursorY = - [self noteYInMeasure:fCursorMeasure - withPitch:fCursorPitch accidental:&accidental] - kNoteY; - cursorSect = [self song]->fMeasures[fCursorMeasure].fPropIdx; - [self drawLedgerLinesInSection:cursorSect withPitch:fCursorPitch - at:NSMakePoint(cursorX, - [self systemY:fLayout->SystemForMeasure(fCursorMeasure)])]; + [self noteYInMeasure:measure withPitch:pitch + visual:cursorVisual accidental:&acc] - kNoteY; + cursorSect = [self song]->fMeasures[measure].fPropIdx; + [self drawLedgerLinesInSection:cursorSect withPitch:pitch + visual:cursorVisual at:NSMakePoint(cursorX, + [self systemY:fLayout->SystemForMeasure(measure)])]; cursorElt = kMusicNoteCursor; break; case 'r': - cursorY = [self noteYInMeasure:fCursorMeasure - withPitch:65 accidental:&accidental]; + cursorY = [self noteYInMeasure:measure + withPitch:65 visual:0 accidental:&acc]; cursorElt = kMusicRestCursor; break; case 'k': - cursorY = [self noteYInMeasure:fCursorMeasure - withPitch:fCursorPitch accidental:&accidental]; + cursorY = [self noteYInMeasure:measure + withPitch:pitch visual:0 + accidental:&acc]; cursorElt = kMusicKillCursor; break; } - NSPoint at = NSMakePoint(cursorX-kNoteX, cursorY); + NSPoint xy = NSMakePoint(cursorX-kNoteX, cursorY); [[self musicElement:cursorElt] - compositeToPoint:at + compositeToPoint:xy operation: NSCompositeSourceOver]; - if (fCursorAccidental && fCursorAccidental != kMusicExtendCursor) { - at.y += kNoteY; - switch (cursorElt= fCursorAccidental) { + if (accidental && accidental != kMusicExtendCursor) { + xy.y += kNoteY; + switch (cursorElt= accidental) { case kMusicFlatCursor: - at.x += kFlatW; - at.y += kFlatY; + xy.x += kFlatW; + xy.y += kFlatY; break; case kMusicSharpCursor: - at.x += kSharpW; - at.y += kSharpY; + xy.x += kSharpW; + xy.y += kSharpY; break; default: - at.x += kNaturalW; - at.y += kNaturalY; + xy.x += kNaturalW; + xy.y += kNaturalY; break; } [[self musicElement:cursorElt] - compositeToPoint:at + compositeToPoint:xy operation: NSCompositeSourceOver]; } } +- (void) drawNoteCursor:(int)pitch inMeasure:(size_t)measure at:(VLFract)at +{ + [self drawNoteCursor:pitch inMeasure:measure at:at + accidental:kMusicNothing mode:' ']; +} + +- (void) drawNoteCursor +{ + [self drawNoteCursor:fCursorPitch inMeasure:fCursorMeasure at:fCursorAt + accidental:kMusicNothing mode:' ']; +} + - (void) drawNote:(int)visual at:(NSPoint)p accidental:(VLMusicElement)accidental tied:(BOOL)tied { @@ -304,16 +339,20 @@ int pitch = note->fPitch; if (pitch != VLNote::kNoPitch) { [self drawLedgerLinesInSection:measure.fPropIdx withPitch:pitch - at:NSMakePoint([self noteXInMeasure:measIdx at:at], kSystemY)]; + visual:note->fVisual + at:NSMakePoint([self noteXInMeasure:measIdx at:at], + kSystemY)]; VLMusicElement accidental; NSPoint pos = NSMakePoint([self noteXInMeasure:measIdx at:at], kSystemY+[self noteYInSection:measure.fPropIdx withPitch:pitch + visual:note->fVisual accidental:&accidental]); VLMusicElement acc = accidental; int step= [self stepInSection:measure.fPropIdx - withPitch:pitch]; + withPitch:pitch + visual:note->fVisual]; if (acc == accidentals[step]) acc = kMusicNothing; // Don't repeat accidentals else if (acc == kMusicNothing) @@ -331,7 +370,7 @@ NSPoint pos = NSMakePoint([self noteXInMeasure:measIdx at:at], kSystemY+[self noteYInSection:measure.fPropIdx - withPitch:65 + withPitch:65 visual:0 accidental:&accidental]); [self drawRest:note->fVisual & VLNote::kNoteHead at: pos]; } diff --git a/Sources/VLSheetViewSelection.h b/Sources/VLSheetViewSelection.h index ac18e5d..d606202 100644 --- a/Sources/VLSheetViewSelection.h +++ b/Sources/VLSheetViewSelection.h @@ -8,6 +8,8 @@ // Copyright © 2006-2007 Matthias Neeracher // +#import "VLMIDIWriter.h" + @interface VLSheetView (Selection) - (void)editSelection; @@ -33,6 +35,8 @@ - (void)updateMenus; +- (void) willPlaySequence:(MusicSequence)music; + @end // Local Variables: diff --git a/Sources/VLSheetViewSelection.mm b/Sources/VLSheetViewSelection.mm index 7d1a424..8845b84 100644 --- a/Sources/VLSheetViewSelection.mm +++ b/Sources/VLSheetViewSelection.mm @@ -9,9 +9,67 @@ // #import "VLSheetView.h" +#import "VLSheetViewNotes.h" #import "VLSheetViewSelection.h" +#import "VLSheetViewNotes.h" +#import "VLSheetViewChords.h" +#import "VLSheetViewLyrics.h" +#import "VLSheetWindow.h" #import "VLDocument.h" +@interface VLPlaybackEditable : VLEditable { + VLSheetView * fView; + size_t fStanza; + size_t fNoteMeasure; + VLFract fNoteAt; + int fNotePitch; + size_t fChordMeasure; + VLFract fChordAt; +} + +- (VLPlaybackEditable *)initWithView:(VLSheetView *)view; +- (void) userEvent:(VLMIDIUserEvent *)event; +- (void) highlightCursor; + +@end + +@implementation VLPlaybackEditable + +- (VLPlaybackEditable *)initWithView:(VLSheetView *)view +{ + fView = view; + fStanza = 1; + fNoteMeasure = 0x80000000; + fChordMeasure = 0x80000000; + + return self; +} + +- (void) userEvent:(VLMIDIUserEvent *)event +{ + if (event->fPitch) { + fNotePitch = event->fPitch; + fNoteMeasure = event->fMeasure; + fNoteAt = event->fAt; + [fView highlightTextInStanza:fStanza measure:fNoteMeasure at:fNoteAt one:YES]; + } else { + fChordMeasure = event->fMeasure; + fChordAt = event->fAt; + } + [fView scrollMeasureToVisible:event->fMeasure]; + [fView setNeedsDisplay:YES]; +} + +- (void) highlightCursor +{ + if (fNoteMeasure != 0x80000000) + [fView drawNoteCursor:fNotePitch inMeasure:fNoteMeasure at:fNoteAt]; + if (fChordMeasure != 0x80000000) + [fView highlightChordInMeasure:fChordMeasure at:fChordAt]; +} + +@end + @interface NSMenuItem (VLSetStateToOff) - (void) VLSetStateToOff; @end @@ -30,6 +88,16 @@ // static VLSong sPasteboard; +extern "C" void +VLSequenceCallback( + void * inClientData, + MusicSequence inSequence, MusicTrack inTrack, + MusicTimeStamp inEventTime, const MusicEventUserData *inEventData, + MusicTimeStamp inStartSliceBeat, MusicTimeStamp inEndSliceBeat) +{ + [(id)inClientData userEvent:(VLMIDIUserEvent *)inEventData]; +} + @implementation VLSheetView (Selection) - (void)editSelection @@ -442,4 +510,12 @@ inline int TimeTag(const VLProperties & prop) [self updateGrooveMenu]; } +- (void) willPlaySequence:(MusicSequence)music +{ + VLEditable * e = + [[VLPlaybackEditable alloc] initWithView:self]; + [self setEditTarget:e]; + MusicSequenceSetUserCallback(music, VLSequenceCallback, e); +} + @end diff --git a/Sources/VLSheetWindow.h b/Sources/VLSheetWindow.h index beb3223..a2f3f97 100644 --- a/Sources/VLSheetWindow.h +++ b/Sources/VLSheetWindow.h @@ -5,10 +5,11 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2007 Matthias Neeracher +// Copyright © 2005-2008 Matthias Neeracher // #import +#import @interface VLEditable : NSObject { @@ -30,6 +31,10 @@ IBOutlet id logToolItem; IBOutlet id playToolItem; IBOutlet id stopToolItem; + IBOutlet id fwdToolItem; + IBOutlet id bckToolItem; + IBOutlet id tobegToolItem; + IBOutlet id toendToolItem; IBOutlet id zoomInToolItem; IBOutlet id zoomOutToolItem; IBOutlet id progressToolItem; @@ -46,5 +51,6 @@ - (void) setEditTarget:(VLEditable *)editable; - (void) startAnimation; - (void) stopAnimation; +- (void) willPlaySequence:(MusicSequence)music; @end diff --git a/Sources/VLSheetWindow.mm b/Sources/VLSheetWindow.mm index 33b3894..1f648cb 100644 --- a/Sources/VLSheetWindow.mm +++ b/Sources/VLSheetWindow.mm @@ -49,6 +49,10 @@ static NSString* sOutputToolbarItemIdentifier = @"Output Toolbar Item Identifie static NSString* sLogToolbarItemIdentifier = @"Log Toolbar Item Identifier"; static NSString* sPlayToolbarItemIdentifier = @"Play Toolbar Item Identifier"; static NSString* sStopToolbarItemIdentifier = @"Stop Toolbar Item Identifier"; +static NSString* sFwdToolbarItemIdentifier = @"Fwd Toolbar Item Identifier"; +static NSString* sBckToolbarItemIdentifier = @"Rew Toolbar Item Identifier"; +static NSString* sToBegToolbarItemIdentifier = @"Begin Toolbar Item Identifier"; +static NSString* sToEndToolbarItemIdentifier = @"End Toolbar Item Identifier"; static NSString* sZoomInToolbarItemIdentifier = @"Zoom In Toolbar Item Identifier"; static NSString* sZoomOutToolbarItemIdentifier = @"Zoom Out Toolbar Item Identifier"; static NSString* sProgressToolbarItemIdentifier = @"Progress Toolbar Item Identifier"; @@ -96,6 +100,14 @@ static NSString* sDisplayToolbarItemIdentifier = @"Display Toolbar Item Identifi prototype = playToolItem; else if ([itemIdent isEqual: sStopToolbarItemIdentifier]) prototype = stopToolItem; + else if ([itemIdent isEqual: sFwdToolbarItemIdentifier]) + prototype = fwdToolItem; + else if ([itemIdent isEqual: sBckToolbarItemIdentifier]) + prototype = bckToolItem; + else if ([itemIdent isEqual: sToBegToolbarItemIdentifier]) + prototype = tobegToolItem; + else if ([itemIdent isEqual: sToEndToolbarItemIdentifier]) + prototype = toendToolItem; else if ([itemIdent isEqual: sZoomInToolbarItemIdentifier]) prototype = zoomInToolItem; else if ([itemIdent isEqual: sZoomOutToolbarItemIdentifier]) @@ -112,6 +124,7 @@ static NSString* sDisplayToolbarItemIdentifier = @"Display Toolbar Item Identifi [toolbarItem setImage: [prototype image]]; [toolbarItem setTarget: [prototype target]]; [toolbarItem setAction: [prototype action]]; + [toolbarItem setTag: [prototype tag]]; } else if ([itemIdent isEqual: sProgressToolbarItemIdentifier]) { toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease]; @@ -126,8 +139,12 @@ static NSString* sDisplayToolbarItemIdentifier = @"Display Toolbar Item Identifi return [NSArray arrayWithObjects: sOutputToolbarItemIdentifier, NSToolbarSeparatorItemIdentifier, + sToBegToolbarItemIdentifier, + sBckToolbarItemIdentifier, sPlayToolbarItemIdentifier, sStopToolbarItemIdentifier, + sFwdToolbarItemIdentifier, + sToEndToolbarItemIdentifier, NSToolbarSeparatorItemIdentifier, sZoomInToolbarItemIdentifier, sZoomOutToolbarItemIdentifier, @@ -140,8 +157,12 @@ static NSString* sDisplayToolbarItemIdentifier = @"Display Toolbar Item Identifi - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar { return [NSArray arrayWithObjects: + sToBegToolbarItemIdentifier, + sBckToolbarItemIdentifier, sPlayToolbarItemIdentifier, sStopToolbarItemIdentifier, + sFwdToolbarItemIdentifier, + sToEndToolbarItemIdentifier, sZoomInToolbarItemIdentifier, sZoomOutToolbarItemIdentifier, sOutputToolbarItemIdentifier, @@ -179,4 +200,9 @@ static NSString* sDisplayToolbarItemIdentifier = @"Display Toolbar Item Identifi [sheetView mouseMoved:event]; } +- (void) willPlaySequence:(MusicSequence)music +{ + [sheetView willPlaySequence:music]; +} + @end diff --git a/Sources/VLSoundOut.cpp b/Sources/VLSoundOut.cpp index 918736e..e0d43c1 100644 --- a/Sources/VLSoundOut.cpp +++ b/Sources/VLSoundOut.cpp @@ -11,7 +11,6 @@ #include "VLSoundOut.h" #include -#include #include "CAAudioFileFormats.h" #include "AUOutputBL.h" @@ -27,9 +26,11 @@ public: virtual void PlayNote(const VLNote & note); virtual void PlayChord(const VLChord & chord); - virtual void PlayFile(CFDataRef file); + virtual void PlaySequence(MusicSequence music); virtual void Stop(); virtual bool Playing(); + virtual void SetPlayRate(float rate); + virtual void SetTime(MusicTimeStamp time); virtual ~VLAUSoundOut(); protected: @@ -37,14 +38,15 @@ protected: void InitSoundOutput(bool fileOutput); virtual void SetupOutput(AUNode outputNode); - virtual void PlaySequence(MusicSequence music); MusicTimeStamp SequenceLength(MusicSequence music); AUGraph fGraph; MusicPlayer fPlayer; private: MusicSequence fMusic; + MusicTimeStamp fMusicLength; bool fRunning; + bool fForward; void Play(const int8_t * note, size_t numNotes = 1); }; @@ -95,12 +97,22 @@ VLSoundOut * VLSoundOut::FileWriter(CFURLRef file, OSType dataFormat) return new VLAUFileSoundOut(file, dataFormat); } +void VLSoundOut::PlayFile(CFDataRef file) +{ + MusicSequence music; + + NewMusicSequence(&music); + MusicSequenceLoadSMFDataWithFlags(music, file, + kMusicSequenceLoadSMF_ChannelsToTracks); + PlaySequence(music); +} + VLSoundOut::~VLSoundOut() { } VLAUSoundOut::VLAUSoundOut() - : fRunning(false), fMusic(0) + : fMusic(0), fRunning(false), fForward(true) { InitSoundOutput(false); } @@ -179,7 +191,8 @@ void VLAUSoundOut::PlaySequence(MusicSequence music) { Stop(); - fMusic = music; + fMusic = music; + fMusicLength = SequenceLength(music); R(MusicSequenceSetAUGraph(fMusic, fGraph)); R(MusicPlayerSetSequence(fPlayer, fMusic)); @@ -188,6 +201,25 @@ void VLAUSoundOut::PlaySequence(MusicSequence music) fRunning = true; } +void VLAUSoundOut::SetPlayRate(float rate) +{ + if ((rate < 0) != fForward) { + fForward = !fForward; + + MusicTimeStamp rightNow; + MusicPlayerGetTime(fPlayer, &rightNow); + MusicSequenceReverse(fMusic); + MusicPlayerSetTime(fPlayer, fMusicLength - rightNow); + } + MusicPlayerSetPlayRateScalar(fPlayer, fabsf(rate)); +} + +void VLAUSoundOut::SetTime(MusicTimeStamp time) +{ + SetPlayRate(1.0f); + MusicPlayerSetTime(fPlayer, time); +} + void VLAUSoundOut::Stop() { MusicPlayerStop(fPlayer); @@ -240,16 +272,6 @@ void VLAUSoundOut::Play(const int8_t * note, size_t numNotes) PlaySequence(music); } -void VLAUSoundOut::PlayFile(CFDataRef file) -{ - MusicSequence music; - - NewMusicSequence(&music); - MusicSequenceLoadSMFDataWithFlags(music, file, - kMusicSequenceLoadSMF_ChannelsToTracks); - PlaySequence(music); -} - MusicTimeStamp VLAUSoundOut::SequenceLength(MusicSequence music) { UInt32 ntracks; diff --git a/Sources/VLSoundOut.h b/Sources/VLSoundOut.h index 07df0ac..02039ce 100644 --- a/Sources/VLSoundOut.h +++ b/Sources/VLSoundOut.h @@ -5,11 +5,12 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2007 Matthias Neeracher +// Copyright © 2005-2008 Matthias Neeracher // #include "VLModel.h" #import +#include class VLSoundEvent { protected: @@ -36,9 +37,12 @@ public: virtual void PlayNote(const VLNote & note) = 0; virtual void PlayChord(const VLChord & chord) = 0; - virtual void PlayFile(CFDataRef file) = 0; + void PlayFile(CFDataRef file); + virtual void PlaySequence(MusicSequence music) = 0; virtual void Stop() = 0; virtual bool Playing() = 0; + virtual void SetPlayRate(float rate) = 0; + virtual void SetTime(MusicTimeStamp time) = 0; virtual ~VLSoundOut(); }; diff --git a/Sources/VLXMLDocument.mm b/Sources/VLXMLDocument.mm index 96b4616..276c65f 100644 --- a/Sources/VLXMLDocument.mm +++ b/Sources/VLXMLDocument.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2006-2007 Matthias Neeracher +// Copyright © 2006-2008 Matthias Neeracher // #import "VLXMLDocument.h" diff --git a/Tools/lameWrapper b/Tools/lameWrapper new file mode 100755 index 0000000..ee29539 --- /dev/null +++ b/Tools/lameWrapper @@ -0,0 +1,3 @@ +#!/bin/bash -l + +exec lame $* diff --git a/Tools/lilyWrapper b/Tools/lilyWrapper index 8284470..0b7c07a 100755 --- a/Tools/lilyWrapper +++ b/Tools/lilyWrapper @@ -1,8 +1,7 @@ #!/bin/bash -l export PATH=`dirname $1`:$PATH -echo PATH=$PATH -$* +exec $* diff --git a/VocalEasel.xcodeproj/project.pbxproj b/VocalEasel.xcodeproj/project.pbxproj index 1faebf2..bf6c5d7 100644 --- a/VocalEasel.xcodeproj/project.pbxproj +++ b/VocalEasel.xcodeproj/project.pbxproj @@ -29,7 +29,6 @@ 95009B830B0EDCD800EB33A4 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95009B820B0EDCD800EB33A4 /* CoreFoundation.framework */; }; 95049CF30BDC32EB0015EE6E /* installLilypond.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 95049CF20BDC32CD0015EE6E /* installLilypond.scpt */; }; 95049D020BDC436A0015EE6E /* installPython.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 95049D010BDC43510015EE6E /* installPython.scpt */; }; - 950795E10B4A34D9008911A6 /* stop.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 950795E00B4A34D9008911A6 /* stop.tiff */; }; 95140E3C0C944F7F00966576 /* VLLilypondType.reader in Copy Filters */ = {isa = PBXBuildFile; fileRef = 95140E3B0C944F7F00966576 /* VLLilypondType.reader */; }; 9524DAFB0BE569C50002AC03 /* Help in Resources */ = {isa = PBXBuildFile; fileRef = 9524DAF70BE569C50002AC03 /* Help */; }; 9524DB390BE5CA070002AC03 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9524DB380BE5CA070002AC03 /* Carbon.framework */; }; @@ -42,6 +41,9 @@ 952CBBB6095FD37300434E43 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; }; 952DCD78096BBB11001C2316 /* VLSheetViewChords.mm in Sources */ = {isa = PBXBuildFile; fileRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; }; 9530A7020BD9E16700635FEC /* display.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 9530A7010BD9E16700635FEC /* display.tiff */; }; + 9531F3510DE2B4CD004F78C2 /* VLAIFFDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9531F34E0DE2B4CD004F78C2 /* VLAIFFDocument.mm */; }; + 9531F3520DE2B4CD004F78C2 /* VLMP3Document.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9531F3500DE2B4CD004F78C2 /* VLMP3Document.mm */; }; + 9531F3670DE2B872004F78C2 /* lameWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 9531F3660DE2B872004F78C2 /* lameWrapper */; }; 953722670AE9F0E100B6E483 /* VLLilypondDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */; }; 9545C5C30C092F4600251547 /* VLMMAWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9545C5C10C092F4600251547 /* VLMMAWriter.cpp */; }; 95498DBD0AE3812F006B5F81 /* VLSoundSched.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95498DBC0AE3812F006B5F81 /* VLSoundSched.mm */; }; @@ -65,6 +67,14 @@ 959408AD096922EA007CCCF8 /* TVLEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959408AC096922EA007CCCF8 /* TVLEdit.cpp */; }; 959408AE096922F7007CCCF8 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; }; 9599ED9D0B731CC500A6A2F7 /* VLGrooveController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9599ED9B0B731CC500A6A2F7 /* VLGrooveController.mm */; }; + 959A3A130DE64BA300EF207B /* play.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A110DE64BA300EF207B /* play.icns */; }; + 959A3A140DE64BA300EF207B /* stop.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A120DE64BA300EF207B /* stop.icns */; }; + 959A3A260DE78BCD00EF207B /* bck.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A220DE78BCD00EF207B /* bck.icns */; }; + 959A3A270DE78BCD00EF207B /* fwd.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A230DE78BCD00EF207B /* fwd.icns */; }; + 959A3A280DE78BCD00EF207B /* tobeg.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A240DE78BCD00EF207B /* tobeg.icns */; }; + 959A3A290DE78BCD00EF207B /* toend.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A250DE78BCD00EF207B /* toend.icns */; }; + 959A3A6E0DE8CB5B00EF207B /* VLMIDIWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959A3A6C0DE8CB5B00EF207B /* VLMIDIWriter.cpp */; }; + 959B77C20DE3139F004432E0 /* installLame.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 958139C20DE2FBE4003C00B4 /* installLame.scpt */; }; 95A1C37C0AF1D4370076597D /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A1C37B0AF1D4370076597D /* Quartz.framework */; }; 95A1C3860AF2ACE20076597D /* VLSheetWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */; }; 95A55C540BD5E5770068A203 /* VLPDFDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95A55C530BD5E5770068A203 /* VLPDFDocument.mm */; }; @@ -99,7 +109,6 @@ 95FC66C40AF0A4D4003D9C11 /* music.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 95FC66BD0AF0A4D4003D9C11 /* music.tiff */; }; 95FC66C50AF0A4D5003D9C11 /* nextpage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 95FC66BE0AF0A4D4003D9C11 /* nextpage.tiff */; }; 95FC66C60AF0A4D5003D9C11 /* prevpage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 95FC66BF0AF0A4D4003D9C11 /* prevpage.tiff */; }; - 95FC66C70AF0A4D5003D9C11 /* run.icns in Resources */ = {isa = PBXBuildFile; fileRef = 95FC66C00AF0A4D4003D9C11 /* run.icns */; }; 95FC66C80AF0A4D5003D9C11 /* zoomin.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 95FC66C10AF0A4D4003D9C11 /* zoomin.tiff */; }; 95FC66C90AF0A4D5003D9C11 /* zoomout.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 95FC66C20AF0A4D4003D9C11 /* zoomout.tiff */; }; 95FC66CE0AF0A591003D9C11 /* VLPDFView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95FC66CC0AF0A591003D9C11 /* VLPDFView.mm */; }; @@ -125,6 +134,7 @@ dstPath = bin; dstSubfolderSpec = 7; files = ( + 9531F3670DE2B872004F78C2 /* lameWrapper in Copy Tools */, 95D0C2FC0B785D020061080E /* rebuildGrooves in Copy Tools */, 95C462830B045CB700649F92 /* lilyWrapper in Copy Tools */, 95C462000B04472E00649F92 /* mmaWrapper in Copy Tools */, @@ -184,7 +194,6 @@ 95009B820B0EDCD800EB33A4 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 95049CF20BDC32CD0015EE6E /* installLilypond.scpt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.scpt; name = installLilypond.scpt; path = Resources/installLilypond.scpt; sourceTree = ""; }; 95049D010BDC43510015EE6E /* installPython.scpt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.scpt; name = installPython.scpt; path = Resources/installPython.scpt; sourceTree = ""; }; - 950795E00B4A34D9008911A6 /* stop.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = stop.tiff; path = Resources/stop.tiff; sourceTree = ""; }; 95140E3B0C944F7F00966576 /* VLLilypondType.reader */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = VLLilypondType.reader; sourceTree = ""; }; 9524DAF70BE569C50002AC03 /* Help */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Help; path = Resources/Help; sourceTree = ""; }; 9524DB380BE5CA070002AC03 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; @@ -198,6 +207,11 @@ 952DCD76096BBB11001C2316 /* VLSheetViewChords.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLSheetViewChords.h; path = Sources/VLSheetViewChords.h; sourceTree = ""; }; 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetViewChords.mm; path = Sources/VLSheetViewChords.mm; sourceTree = ""; }; 9530A7010BD9E16700635FEC /* display.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = display.tiff; path = Resources/display.tiff; sourceTree = ""; }; + 9531F34D0DE2B4CD004F78C2 /* VLAIFFDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLAIFFDocument.h; path = Sources/VLAIFFDocument.h; sourceTree = ""; }; + 9531F34E0DE2B4CD004F78C2 /* VLAIFFDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLAIFFDocument.mm; path = Sources/VLAIFFDocument.mm; sourceTree = ""; }; + 9531F34F0DE2B4CD004F78C2 /* VLMP3Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLMP3Document.h; path = Sources/VLMP3Document.h; sourceTree = ""; }; + 9531F3500DE2B4CD004F78C2 /* VLMP3Document.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLMP3Document.mm; path = Sources/VLMP3Document.mm; sourceTree = ""; }; + 9531F3660DE2B872004F78C2 /* lameWrapper */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = lameWrapper; path = Tools/lameWrapper; sourceTree = ""; }; 953722650AE9F0E100B6E483 /* VLLilypondDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLLilypondDocument.h; path = Sources/VLLilypondDocument.h; sourceTree = ""; }; 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLLilypondDocument.mm; path = Sources/VLLilypondDocument.mm; sourceTree = ""; }; 9545C5C10C092F4600251547 /* VLMMAWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = VLMMAWriter.cpp; path = Sources/VLMMAWriter.cpp; sourceTree = ""; }; @@ -222,6 +236,7 @@ 95784D860BFAD795009ABEA4 /* VLMirrorWindow.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLMirrorWindow.mm; path = Sources/VLMirrorWindow.mm; sourceTree = ""; }; 95795CE40C88B25D00E4A21F /* vl.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = vl.rb; sourceTree = ""; }; 95795CE50C88B25D00E4A21F /* VLMusicXMLType.reader */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = VLMusicXMLType.reader; sourceTree = ""; }; + 958139C20DE2FBE4003C00B4 /* installLame.scpt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.scpt; name = installLame.scpt; path = Resources/installLame.scpt; sourceTree = ""; }; 9588363A0C6F9C7D004B4162 /* VLPListDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLPListDocument.h; path = Sources/VLPListDocument.h; sourceTree = ""; }; 9588363B0C6F9C7D004B4162 /* VLPListDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLPListDocument.mm; path = Sources/VLPListDocument.mm; sourceTree = ""; }; 9588365A0C6FABBA004B4162 /* VLDebugFlags.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VLDebugFlags.cpp; path = Sources/VLDebugFlags.cpp; sourceTree = ""; }; @@ -232,6 +247,14 @@ 959408AC096922EA007CCCF8 /* TVLEdit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TVLEdit.cpp; path = Tests/TVLEdit.cpp; sourceTree = ""; }; 9599ED9A0B731CC500A6A2F7 /* VLGrooveController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLGrooveController.h; path = Sources/VLGrooveController.h; sourceTree = ""; }; 9599ED9B0B731CC500A6A2F7 /* VLGrooveController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLGrooveController.mm; path = Sources/VLGrooveController.mm; sourceTree = ""; }; + 959A3A110DE64BA300EF207B /* play.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = play.icns; path = Resources/play.icns; sourceTree = ""; }; + 959A3A120DE64BA300EF207B /* stop.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = stop.icns; path = Resources/stop.icns; sourceTree = ""; }; + 959A3A220DE78BCD00EF207B /* bck.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = bck.icns; path = Resources/bck.icns; sourceTree = ""; }; + 959A3A230DE78BCD00EF207B /* fwd.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = fwd.icns; path = Resources/fwd.icns; sourceTree = ""; }; + 959A3A240DE78BCD00EF207B /* tobeg.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = tobeg.icns; path = Resources/tobeg.icns; sourceTree = ""; }; + 959A3A250DE78BCD00EF207B /* toend.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = toend.icns; path = Resources/toend.icns; sourceTree = ""; }; + 959A3A6C0DE8CB5B00EF207B /* VLMIDIWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VLMIDIWriter.cpp; path = Sources/VLMIDIWriter.cpp; sourceTree = ""; }; + 959A3A6D0DE8CB5B00EF207B /* VLMIDIWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLMIDIWriter.h; path = Sources/VLMIDIWriter.h; sourceTree = ""; }; 95A1C37B0AF1D4370076597D /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = ""; }; 95A1C3840AF2ACE20076597D /* VLSheetWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSheetWindow.h; path = Sources/VLSheetWindow.h; sourceTree = ""; }; 95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetWindow.mm; path = Sources/VLSheetWindow.mm; sourceTree = ""; }; @@ -274,7 +297,6 @@ 95FC66BD0AF0A4D4003D9C11 /* music.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = music.tiff; path = Resources/music.tiff; sourceTree = ""; }; 95FC66BE0AF0A4D4003D9C11 /* nextpage.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = nextpage.tiff; path = Resources/nextpage.tiff; sourceTree = ""; }; 95FC66BF0AF0A4D4003D9C11 /* prevpage.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = prevpage.tiff; path = Resources/prevpage.tiff; sourceTree = ""; }; - 95FC66C00AF0A4D4003D9C11 /* run.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = run.icns; path = Resources/run.icns; sourceTree = ""; }; 95FC66C10AF0A4D4003D9C11 /* zoomin.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = zoomin.tiff; path = Resources/zoomin.tiff; sourceTree = ""; }; 95FC66C20AF0A4D4003D9C11 /* zoomout.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = zoomout.tiff; path = Resources/zoomout.tiff; sourceTree = ""; }; 95FC66CC0AF0A591003D9C11 /* VLPDFView.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLPDFView.mm; path = Sources/VLPDFView.mm; sourceTree = ""; }; @@ -384,8 +406,14 @@ 2A37F4ABFDCFA73011CA2CEA /* Classes */ = { isa = PBXGroup; children = ( - 95D059780D1E6B0D00E28FAE /* VLLayout.cpp */, 95D059790D1E6B0D00E28FAE /* VLLayout.h */, + 95D059780D1E6B0D00E28FAE /* VLLayout.cpp */, + 959A3A6D0DE8CB5B00EF207B /* VLMIDIWriter.h */, + 959A3A6C0DE8CB5B00EF207B /* VLMIDIWriter.cpp */, + 9531F34D0DE2B4CD004F78C2 /* VLAIFFDocument.h */, + 9531F34E0DE2B4CD004F78C2 /* VLAIFFDocument.mm */, + 9531F34F0DE2B4CD004F78C2 /* VLMP3Document.h */, + 9531F3500DE2B4CD004F78C2 /* VLMP3Document.mm */, 9588365A0C6FABBA004B4162 /* VLDebugFlags.cpp */, 9588365B0C6FABBA004B4162 /* VLDebugFlags.h */, 9588363A0C6F9C7D004B4162 /* VLPListDocument.h */, @@ -457,6 +485,10 @@ 2A37F4B8FDCFA73011CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + 959A3A220DE78BCD00EF207B /* bck.icns */, + 959A3A230DE78BCD00EF207B /* fwd.icns */, + 959A3A240DE78BCD00EF207B /* tobeg.icns */, + 959A3A250DE78BCD00EF207B /* toend.icns */, 9524DAF70BE569C50002AC03 /* Help */, 95003B3F0D4B9A5D00C9849C /* MainMenu.xib */, 95003B410D4B9A5D00C9849C /* VLDocument.xib */, @@ -465,14 +497,15 @@ 95003B470D4B9A5D00C9849C /* VLMirrorWindow.xib */, 95003B490D4B9A5D00C9849C /* VLPDFWindow.xib */, 95049CF20BDC32CD0015EE6E /* installLilypond.scpt */, + 958139C20DE2FBE4003C00B4 /* installLame.scpt */, 95049D010BDC43510015EE6E /* installPython.scpt */, 95FC66BC0AF0A4D4003D9C11 /* console.icns */, 9530A7010BD9E16700635FEC /* display.tiff */, + 959A3A110DE64BA300EF207B /* play.icns */, + 959A3A120DE64BA300EF207B /* stop.icns */, 95FC66BD0AF0A4D4003D9C11 /* music.tiff */, - 950795E00B4A34D9008911A6 /* stop.tiff */, 95FC66BE0AF0A4D4003D9C11 /* nextpage.tiff */, 95FC66BF0AF0A4D4003D9C11 /* prevpage.tiff */, - 95FC66C00AF0A4D4003D9C11 /* run.icns */, 95FC66C10AF0A4D4003D9C11 /* zoomin.tiff */, 95FC66C20AF0A4D4003D9C11 /* zoomout.tiff */, 95E04DCA0AEB4D9B006F30A0 /* Templates */, @@ -529,6 +562,7 @@ 95C4627A0B045C8E00649F92 /* lilyWrapper */, 95C461FF0B04472900649F92 /* mmaWrapper */, 95C461D50B04406300649F92 /* mma.py */, + 9531F3660DE2B872004F78C2 /* lameWrapper */, 95D0C2FB0B785D020061080E /* rebuildGrooves */, ); name = Tools; @@ -673,6 +707,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 959B77C20DE3139F004432E0 /* installLame.scpt in Resources */, 95049D020BDC436A0015EE6E /* installPython.scpt in Resources */, 95049CF30BDC32EB0015EE6E /* installLilypond.scpt in Resources */, 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */, @@ -685,10 +720,8 @@ 95FC66C40AF0A4D4003D9C11 /* music.tiff in Resources */, 95FC66C50AF0A4D5003D9C11 /* nextpage.tiff in Resources */, 95FC66C60AF0A4D5003D9C11 /* prevpage.tiff in Resources */, - 95FC66C70AF0A4D5003D9C11 /* run.icns in Resources */, 95FC66C80AF0A4D5003D9C11 /* zoomin.tiff in Resources */, 95FC66C90AF0A4D5003D9C11 /* zoomout.tiff in Resources */, - 950795E10B4A34D9008911A6 /* stop.tiff in Resources */, 9530A7020BD9E16700635FEC /* display.tiff in Resources */, 9524DAFB0BE569C50002AC03 /* Help in Resources */, 95003B4B0D4B9A5D00C9849C /* MainMenu.xib in Resources */, @@ -697,6 +730,12 @@ 95003B4E0D4B9A5D00C9849C /* VLLogWindow.xib in Resources */, 95003B4F0D4B9A5D00C9849C /* VLMirrorWindow.xib in Resources */, 95003B500D4B9A5D00C9849C /* VLPDFWindow.xib in Resources */, + 959A3A130DE64BA300EF207B /* play.icns in Resources */, + 959A3A140DE64BA300EF207B /* stop.icns in Resources */, + 959A3A260DE78BCD00EF207B /* bck.icns in Resources */, + 959A3A270DE78BCD00EF207B /* fwd.icns in Resources */, + 959A3A280DE78BCD00EF207B /* tobeg.icns in Resources */, + 959A3A290DE78BCD00EF207B /* toend.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -756,6 +795,9 @@ 9588363C0C6F9C7D004B4162 /* VLPListDocument.mm in Sources */, 9588365C0C6FABBA004B4162 /* VLDebugFlags.cpp in Sources */, 95D0597A0D1E6B0D00E28FAE /* VLLayout.cpp in Sources */, + 9531F3510DE2B4CD004F78C2 /* VLAIFFDocument.mm in Sources */, + 9531F3520DE2B4CD004F78C2 /* VLMP3Document.mm in Sources */, + 959A3A6E0DE8CB5B00EF207B /* VLMIDIWriter.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };