pax_global_header00006660000000000000000000000064135154134610014515gustar00rootroot0000000000000052 comment=ed2baaf7699329db3e17eec4e3ef7db26b3bc25c snibbetracker-1.1.1/000077500000000000000000000000001351541346100143335ustar00rootroot00000000000000snibbetracker-1.1.1/.gitignore000077500000000000000000000014061351541346100163270ustar00rootroot00000000000000# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ .DS_Store *.swp *~.nib # mingw *.o # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # # Pods/ snibbetracker-1.1.1/LICENSE000066400000000000000000000020611351541346100153370ustar00rootroot00000000000000MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. snibbetracker-1.1.1/README.md000066400000000000000000000374731351541346100156300ustar00rootroot00000000000000snibbetracker ================== license ---------------- MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. introduction ---------------- snibbetracker is a fakebit tracker written in C using SDL2 that I began working on in 2014 to learn DSP programming. As I do not have time to work on it anymore, I decided to release the source so that someone could take over if they wanted. credits ---------------- - lundstroem - salkinitzor - nordloef - Linde - sunfl0wr - Rockard - 0c0 - OlofsonArcade - goto80 - lolloise - crabinfo config ---------------- buffer setting: Use lower values to decrease latency, higher values to avoid stuttering if the buffering cannot keep up. Needs to be a power of two, for example: 256, 512, 1024, 2048, 4096, 8192. "buffer_size":4096 Path to working directory, needs to be full. OSX example: /Users/d/Documents/snibbetracker Windows example C:\\snibbetracker Make sure that the folder exists before using it and that is is accessible by the program. contact/support ---------------- If you encounter bugs or other issues, please let me know and if possible the steps to reproduce them. Feel free to contact if you have other feedback or questions, or if you've made a song you'd like to share. h.lundstroem@gmail.com http://harrylundstrom.se/snibbetracker.html controls overview ---------------- - modfier key is cmd on OSX and ctrl on win. macOS ---------------- To change settings, edit the config located at: snibbetracker.app/Contents/Resources/config.txt track view ---------------- - return: toggle editing on/off. - space: play/stop. - arrow keys: move cursor. - tab: go to pattern view. - modifier+left/right: change octave up/down. - modifier+up/down: move notes below cursor. - modifier+1-9: step size. - shift+arrow keys: make selection. - modifier+c/v/x: copy paste or cut note (or selection). - character keys: play notes or edit effects. - modifier+f: toggle play cursor follow. - home/end: go to top / bottom. - plus/minus: transpose halfnote in selection. - modifier+plus/minus: transpose octave in selection. track format explanation: - a = note, b = instrument number, ccc = effects. 6 supported channels. - a b ccc | a b ccc | a b ccc | a b ccc | a b ccc | a b ccc pattern view ---------------- - arrow keys: move around grid. - plus/minus: cycle waveform, pattern numbers, active rows etc. - return: go to instrument view (when gridcursor is at Ins 0-F) - tab: go to track view. - e: jump to trackview with current row position. - m: mute track (or channel if cursor is at the top) - x: activate/inactivate track. - s: solo track (or channel if cursor is at the top) - shift+up/down: paginate tracks (0-63). - modifier+c/v: copy paste track data. - home/end: set cursor to top / bottom. - modifier+up/down: move rows below cursor. - amp - master amplitude, used both for previewing and exporting. - rows - number of active rows in patterns. - arp - general arpeggio speed. - preview - if notes are audible when editing. - tempo - open tempo editor. - visual - visualiser. - credits - show credits. - wavetable - connect a channel to lane 0-5 to combine waves together at different speeds. (see effect 9). - cust wave - create custom waveform for the "cust" wave type. instrument view ---------------- - arrow keys: move node. - modifier+arrow keys: move node slowly. - tab: cycle nodes. - return/esc: go to pattern view. - shift: toggle editing of envelope or effects. - home/end: cycle instruments. custom wave ---------------- - arrow keys: move node. - tab: cycle nodes. wavetable view ---------------- - x: activate/inactivate row. First row is always active. Toggle loop active/inactive. - plus/minus: change speed on top row. - 1-F: change overall speed on top row, or speed per row. tempo view ---------------- - x: activate/inactivate row. each column must have at least one active row. - plus/minus: change BPM on top row. - 1-F: change BPM on top row, or beats. - modifier+return: switch tempo column. while playing, column will be armed and switched to when the current pattern has finished. global controls ---------------- - modifier+s: go to save view - modifier+o: go to load view - modifier+e: go to export view. - modifier+i: go to instrument view. - modifier+t: go to tempo view. - modifier+r: go to wavetable view. - modifier+j: go to custom wave view. - modifier+n: reset project. - space: toggle playback. - escape: exit current view. - F1, F2 etc to change views. save view ---------------- - arrow keys: navigate file system. - character keys: enter filename. - enter: save file at the current location. - escape: exit save view. load view ---------------- - arrow keys: navigate file system. - enter: load the file. - escape: exit load view. effects ---------------- - 0xx - arpeggio (second tone halfsteps, third tone halfsteps) change speed in settings:Arp xx. - 1xx - arpeggio speed (speed, speed) use one of the values or both multiplied. - 2xx - delay (speed, feedback) - 3xx - portamento (speed, speed) uses a single value if other is 0 or a multiplication of both. Sets the speed to when new notes will be reached. - 4xx - vibrato (speed, depth). - 5xx - distortion (amp, amp). - 6xx - FM (depth, speed). - 7xx - detune (amount, amount) 88 is middle. - 8xx - PWM (linear position/oscillation depth, oscillation speed) on squarewave. If param2 is present, param1 will be used for osc depth. - 9xx - set wavetable/waveform for current channel. param1: set wavetable lane 0-5 or param2: change waveform 0-5. - Axx - (left amplitud, right amplitud) can be used for amplitude, pan and turning off a tone. - Bxx - downsample sweep down (linear, sweep) Works best on noise channel. Choose either linear or sweep. - Cxx - downsample sweep up (linear, sweep) Works best on noise channel. Choose either linear or sweep. - Dxx - ends pattern. D11 - jump to next pattern and reset tempo seq. D1x - reset tempo seq. D2x - switch tempo_seq column. x = tempo seq column (0-5). - Exx - pitch up (fast, slow) Works on non-noise channels. Both values can be combined to increase effect. - Fxx - pitch down (fast, slow) Works on non-noise channels. Both values can be combined to increase effect. - Gxx - bitcrush, params are multiplied to represent a bit depth. Affects all channels. changelog ---------------- v1.1.1 - 2017-01-23 15.36 - fixed bug where groove setting was wrong in exported wavs. - changed instrument effect inputs to not jump down to the next row. - added icon to Windows build. - statically linked SDL2 on Windows build (no need for the DLL). v1.1.0 - 2017-01-01 14.21 - added functionality to move pattern rows in patternview with modifier+up/down. - changed pagination of pattern rows to shift+up/down. - added variable stepsize when adding or removing track items in trackview. Set with modifier+1-9. - save path folder changed from Palestone Software to lundstroem, need to move old projects to new dir. - changed fullscreen mode to better conserve aspect ratio. - command prompt removed on Windows. v1.0.0 - 2016-10-14 15.34 - file ending changed to .snibb, change ending on old project files to be able to load them. - numpad plus and minus now works. - added F1, F2 etc keys for fast switching of views. - working directory setting removed, SDL2 will provide a working dir depending on the platform. Default on macOS is /Users/username/Library/Application Support/lundstroem/snibbetracker/ on Windows it can be overridden with creating a file named exe_dir_as_workspace.txt in the exe dir. - setting for passive render removed, will always use passive. - fixed bug where tempo would get misaligned when loading a project while playing back. - fixed alignment of first custom wave node. - added "author", "title", and "info" strings to file format. build 21 - 2015-09-18 10.52 - show red lingering pixels in visualiser to display when audio clips. - reset will now clear wavetable and custom waveform. - noise table is now predefined instead of randomly generated at runtime. - fixed preview of downsample sweep effect. - fixed bug where notes at the end of the song leak into the start when exporting wav. build 20 - 2015-08-12 16.00 - set default amp to 50% instead of 100%. - fixed bug where visualiser showed twice the actual amplitude. - increased max file name length to 40 instead of 20. build 19 - 2015-08-10 12.27 - fixed reset of downsample. - added bitcrush effect. - when removing effect in trackview, the params are also removed. build 18 - 2015-07-23 13.26 - changed activate button to x for wavetable, tempo and pattern editors. - changed wavetable 900 to work like 90 to select wavetable lane 0 for current voice/channel. 9-0 to change waveform (param2). - removed portamento reset on loopback for smoother transition when previewing. Set effect 3 without params to reset it manually when needed. - made FM more chromatic and using now using effect 600. - removed linked dist. - fixed crash bug where sometimes noise phase would get a negative value. - preview in instrument view now works with the current instrument you are editing. - lowered modifiers for effects 700 and 300. - refactored input. - fixed bug where exported wave header indicated wrong size. - fixed bug where detune would not reset. - fixed bug where previous arp setting would apply on loopback and initial setting would not trigger. - fixed bug where wavetable could not be set. build 17 - 2015-06-22 11.56 - removed reads of uninitialized memory to potentially fix some random crashes. build 16 - 2015-06-22 09.28 - added wavetable editor - added custom wave editor. - changed activate key 'a' to enter key instead to be able to input 0-F in tempo and wavetable view. - transpose halfnotes with +/- in track view, also works with selections. (hold modifier for octaves). build 15 - 2015-06-11 14.58 - tempo editor. - improved preview: amplitude ramp, sustain (with third envelope node > 0), instrument effects added to preview. preview is disabled when playback is active. - shortcuts: ctrl (or cmd on OSX) + i for instruments, + t for tempo + p for visualiser. Exit views with escape. - editable color scheme. - delay effect: 2xx (speed, feedback). - in-editor help file. - working dir now defaults to username/Documents on OSX. - lots of tweaks. build 14 - 2015-05-27 20.24 - fixed resetting bugs of voices and instrument effects. build 13 - 2015-05-27 18.26 - fixed bug where active_tracks was not saved properly. - default BPM is now 120 - fixed FM to work better. - fixed bug where only a part of the song would be rendered at export. - added preview 0 1 to prefs. (add "preview":false to config if you want to disable preview from start). - disabled preview on play. - removed lock from audiothread. - moved mixing functions from client to engine code. - fixed bug where audio effect A clipped on loopback, added ramp. build 12 - 2015-05-26 12.32 - fixed effects so that they are not reset by the next row if there is no new note. (might be more adjustments needed). - made FM for other waveforms other than square for effect 8. (depth, speed). - made effect for changing waveform for channel (9). (channel, wavetype) - copy/paste instruments in pattern editor. - adjusted slow pitch shift param to be a bit faster. - decreased detune modifier. build 11 - 2015-05-21 11.00 - added effect table to instrument editor. These effects (pre-applied effects) will always be applied for the instrument (if not overridden with the same effect in the trackview). All effects will now be turned off after each row (and not as before by effect changes). - removed effect 9 (stacking) due to the introduction of instrument effects. - fixed bug where tone at the start of pattern disappears when moving a section of notes upwards. - instrument numbers on deleted notes get saved to file. - fixed bug where cursor does not go down when deleting note while playing. - fixed bug where export ignores config working dir. - added fullscreen setting to config - fixed bug where addnote skips rows when adding. - added deletekey, same use as backspace. - showing r:0 for example to show which row you are on. - added beat option for highlighting row intervals. - home/end keys get to top/bottom rows and cycle through instruments. - save/load preset effects in json. - controls for toggling adsr/effects in instrument (left shift). - clamp/dist effect - one linked / one channel wise. - added link effect (for pre-mixdown of channels). - fixed wrong instrument number when adding notes (unconfirmed). - fix bug where volume does not reset when removing A effect. - fixed bug where export wav buffer was not zeroed before use. - only play from track in pattern view if cursor is < 16 etc otherwise from track 0. - scroll for nodes in envelope. build 10 - 2015-05-10 11.40 - fixed crash bug on XP when saving/loading/exporting. build 9 - 2015-05-07 07.48 - added "move all notes in pattern-row below cursor up/down" in trackview. The notes that are moved out of the pattern area gets deleted. - added copy/cut/paste in trackview. - copy/paste pattern in patternview. - ability to type in BPM and arp speed etc for quicker changes. You can still use +/- like before. - will remember the last filename you saved as (or loaded) when going in to the save/load screen. - safety pass so you don't accidentally save over an existing song, or load a new song when you have a currently unsaved one. - first param of PWM effect control modulation depth if the second param (speed) is present. - changed default instrument envelope to one with fast attack. - make config file with default save/load path, buffersize etc. - optimize to use less CPU while running (passive rendering). - export songs to .wav. - added config file to executable directory. - OSX version. build 8 - 2015-03-20 10.48 - toggle tracks active/inactive with 'a' and 's' 'while in patternview. - 'e' to jump directly to that track from patternview. - mute/solo 'm'/'s' on channels. - cycle tracks in patternview (0-63). - new effects: PWM, stack effects, arp speed, amp. - no stacking of effects, except some combinations of arp/arp speed and amp. - save song fix (again). - correct loading of channel-waveforms data. - changed a few colors with with more contrast to make it easier to see what you're doing. build 7 - 2015-03-15 08.59 - edit cursor disconnected from player cursor. (can be toggled with modifier+F) - directory browsing completely disabled for saving and loading files, only uses the directory the exe is in. when loading files, just type the name without the .json and press enter, same as for saving. build 6 - 2015-03-13 15.26 - hopefully prevented crashes when saving (directory browsing is disabled for now). - clear track nodes before loading new project. - fixed memory leak when using more than 16 rows. - minimum amount of rows set to 1 instead of 16. - spacebar is now used for controlling playback. - enter(return) key is now used for toggling edit and enter/exit instrument view. - showing current pattern and track in lower right corner (p:0 t:0). - cursor is now advanced down a row when removing notes and params with backspace. build 5 - test release. snibbetracker-1.1.1/res/000077500000000000000000000000001351541346100151245ustar00rootroot00000000000000snibbetracker-1.1.1/res/[IconName].iconset/000077500000000000000000000000001351541346100205505ustar00rootroot00000000000000snibbetracker-1.1.1/res/[IconName].iconset/icon_128x128.png000066400000000000000000000060471351541346100232320ustar00rootroot00000000000000PNG  IHDR>a pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FRIDATxK !@0Ad0mCтk} @ @ @ @j i@ pp> @ ~>7>fK@ s H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx10 EA2\ |) ll.Z\               l5M   yDM1    ꪊ.d߾~c   O?    ?1>`><    =? m    p>^<@@@VWUt9O~>@@@?0                7WIENDB`snibbetracker-1.1.1/res/[IconName].iconset/icon_16x16.png000066400000000000000000000054621351541346100230620ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F]IDATx0C_in l`3ޠ( esW-TLp/w/-`.bf95>*IENDB`snibbetracker-1.1.1/res/[IconName].iconset/icon_16x16@2x.png000066400000000000000000000055231351541346100234320ustar00rootroot00000000000000PNG  IHDR szz pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F~IDATx 0rv" 7RC 6ց%`IXU,3@TfO@#K[GL+}l|gޝ|=#~p:195xIENDB`snibbetracker-1.1.1/res/[IconName].iconset/icon_256x256.png000066400000000000000000000066551351541346100232430ustar00rootroot00000000000000PNG  IHDR\rf pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx10 EA2\ |) ll.Z\               l5M   yDM1    ꪊ.d߾~c   O?    ?1>`><    =? m    p>^<@@@VWUt9O~>@@@?0                7WIENDB`snibbetracker-1.1.1/res/[IconName].iconset/icon_256x256@2x.png000066400000000000000000000110601351541346100235770ustar00rootroot00000000000000PNG  IHDRx pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F[IDATx 0Dۈ[޴@ćnl'gf:*#@ @  @ @ @ @@ @  @ @  @ @@ @  .#8'n@ @ @ @ _\Flp@ @  @ ܗ 6?Xq  @ @ @ @efz^d[o @@ @  ݽ @ @@ @pǵ}IV[ @ @ @ @:mW/@?z@ @  @ 23 H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F~IDATx 0rv" 7RC 6ց%`IXU,3@TfO@#K[GL+}l|gޝ|=#~p:195xIENDB`snibbetracker-1.1.1/res/[IconName].iconset/icon_32x32@2x.png000066400000000000000000000056311351541346100234260ustar00rootroot00000000000000PNG  IHDR@@iq pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx; ]4_f; Lxb̈(pmxkڄK9o_d{@y+.0ՙ#sheW `shVLDww f"@l6}IENDB`snibbetracker-1.1.1/res/[IconName].iconset/icon_512x512.png000066400000000000000000000110601351541346100232130ustar00rootroot00000000000000PNG  IHDRx pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F[IDATx 0Dۈ[޴@ćnl'gf:*#@ @  @ @ @ @@ @  @ @  @ @@ @  .#8'n@ @ @ @ _\Flp@ @  @ ܗ 6?Xq  @ @ @ @efz^d[o @@ @  ݽ @ @@ @pǵ}IV[ @ @ @ @:mW/@?z@ @  @ 23 H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx1C-OY> 3z]i&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Xv'(7@@@@@@@@          }L        &@@@@@@@@x,wW3j}0{$F?C@@@@        <m=/@b??`        `@@@@@@@@@rw5î?     @@@@@@@@@@౏ %1°F0 @@@@@0         cz %> n     @@@@@@@@@@ Z_?7@@@@@@@@          jmn     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[=ק!IENDB`snibbetracker-1.1.1/res/config.txt000066400000000000000000000040411351541346100171310ustar00rootroot00000000000000{ "buffer_size":4096, "buffer_size_info":"Must be a power of two, for example 256, 512, 1024, 2048, 4096, 8192, 16384", "fullscreen":false, "preview":true, "color_info_text_bg" : {"r" : 0, "g" : 0, "b" : 0}, "color_file_name_text" : {"r" : 250, "g" : 100, "b" : 100}, "color_inactive_instrument_node" : {"r" : 100, "g" : 100, "b" : 0}, "color_active_instrument_node" : {"r" : 255, "g" : 100, "b" : 0}, "color_envelope" : {"r" : 0, "g" : 100, "b" : 100}, "color_visualiser" : {"r" : 100, "g" : 250, "b" : 100}, "color_visualiser_clipping" : {"r" : 250, "g" : 100, "b" : 100}, "color_inactive_text" : {"r" : 100, "g" : 100, "b" : 100}, "color_text" : {"r" : 240, "g" : 240, "b" : 240}, "color_text_bg" : {"r" : 0, "g" : 0, "b" : 0}, "color_marker" : {"r" : 100, "g" : 100, "b" : 0}, "color_solo" : {"r" : 0, "g" : 0, "b" : 100}, "color_solo_text" : {"r" : 255, "g" : 255, "b" : 255}, "color_mute" : {"r" : 200, "g" : 0, "b" : 0}, "color_mute_text" : {"r" : 255, "g" : 255, "b" : 255}, "color_active_row" : {"r" : 0, "g" : 100, "b" : 100}, "color_active_row_text" : {"r" : 0, "g" : 0, "b" : 0}, "color_playing_row" : {"r" : 100, "g" : 250, "b" : 100}, "color_playing_row_text" : {"r" : 0, "g" : 0, "b" : 0}, "color_edit_marker" : {"r" : 255, "g" : 100, "b" : 0}, "color_edit_text" : {"r" : 0, "g" : 0, "b" : 0}, "color_selection_marker" : {"r" : 0, "g" : 255, "b" : 255}, "color_selection_text" : {"r" : 0, "g" : 0, "b" : 0}, "color_bg" : {"r" : 20, "g" : 20, "b" : 20}, "color_bg1" : {"r" : 60, "g" : 60, "b" : 60}, "color_bg2" : {"r" : 60, "g" : 60, "b" : 60}, "color_bg3" : {"r" : 60, "g" : 60, "b" : 60}, "color_bg4" : {"r" : 60, "g" : 60, "b" : 60}, "color_bg5" : {"r" : 60, "g" : 60, "b" : 60}, "color_bg6" : {"r" : 60, "g" : 60, "b" : 60}, "color_bg1_highlight" : {"r" : 40, "g" : 40, "b" : 40}, "color_bg2_highlight" : {"r" : 40, "g" : 40, "b" : 40}, "color_bg3_highlight" : {"r" : 40, "g" : 40, "b" : 40}, "color_bg4_highlight" : {"r" : 40, "g" : 40, "b" : 40}, "color_bg5_highlight" : {"r" : 40, "g" : 40, "b" : 40}, "color_bg6_highlight" : {"r" : 40, "g" : 40, "b" : 40} } snibbetracker-1.1.1/res/demos/000077500000000000000000000000001351541346100162335ustar00rootroot00000000000000snibbetracker-1.1.1/res/demos/catslayer.snibb000066400000000000000000001516741351541346100212570ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"salkinitzor","title":"catslayer","info":"","master_amp_percent":61,"solo_voice":-1,"solo_track":-1,"track_height":64,"arp":10,"track_highlight_interval":4,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":1,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":2,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":4,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":5,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":7,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":11,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":13,"n":32,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":15,"n":32,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":17,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":18,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":19,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":20,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":21,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":23,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":25,"n":25,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":26,"n":13,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":27,"n":25,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":28,"n":37,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":29,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":31,"n":42,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":32,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":33,"n":41,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":34,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":35,"n":41,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":36,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":37,"n":41,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":39,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":40,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":41,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":42,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":43,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":44,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":45,"n":32,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":47,"n":32,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":48,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":49,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":50,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":51,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":52,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":53,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":55,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":56,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":57,"n":72,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":52,"k":4},{"p":0,"c":0,"r":59,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":60,"n":60,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":53,"k":5},{"p":0,"c":0,"r":61,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":0,"r":62,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":17,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":3,"n":29,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":6,"n":17,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":9,"n":17,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":12,"n":20,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":15,"n":17,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":18,"n":17,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":21,"n":17,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":24,"n":13,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":27,"n":13,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":30,"n":30,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":32,"n":17,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":35,"n":29,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":38,"n":17,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":41,"n":17,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":44,"n":20,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":1,"r":47,"n":17,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":50,"n":17,"t":1,"i":2,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":1,"r":53,"n":29,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":0,"n":48,"t":1,"i":7,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":1,"n":41,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":3,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":4,"n":41,"t":1,"i":8,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":6,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":7,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":9,"n":48,"t":1,"i":8,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":10,"n":41,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":12,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":13,"n":39,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":15,"n":48,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":16,"n":41,"t":1,"i":8,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":18,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":19,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":20,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":21,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":22,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":24,"n":49,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":25,"n":37,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":26,"n":65,"t":1,"i":7,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":0,"c":2,"r":27,"n":49,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":28,"n":37,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":29,"n":68,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":30,"n":66,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":31,"n":61,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":32,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":33,"n":41,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":2,"r":35,"n":48,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":36,"n":41,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":55,"k":7},{"p":0,"c":2,"r":38,"n":48,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":39,"n":41,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":41,"n":48,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":42,"n":41,"t":1,"i":8,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":44,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":45,"n":39,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":47,"n":48,"t":1,"i":8,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":48,"n":41,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":55,"k":7},{"p":0,"c":2,"r":50,"n":48,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":51,"n":41,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":52,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":53,"n":48,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":54,"n":41,"t":1,"i":8,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":56,"n":17,"t":1,"i":6,"e":69,"f":14,"g":50,"h":2,"j":53,"k":5},{"p":0,"c":3,"r":0,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":2,"n":60,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":3,"n":60,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":6,"n":63,"t":1,"i":9,"e":51,"f":3,"g":52,"h":4,"j":52,"k":4},{"p":0,"c":3,"r":10,"n":0,"t":0,"i":0,"e":52,"f":4,"g":50,"h":2,"j":50,"k":2},{"p":0,"c":3,"r":24,"n":61,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":26,"n":65,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":27,"n":73,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":29,"n":68,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":30,"n":66,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":32,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":34,"n":60,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":35,"n":60,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":38,"n":63,"t":1,"i":9,"e":51,"f":3,"g":51,"h":3,"j":52,"k":4},{"p":0,"c":3,"r":42,"n":0,"t":0,"i":0,"e":52,"f":4,"g":50,"h":2,"j":50,"k":2},{"p":0,"c":3,"r":48,"n":72,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":51,"n":66,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":3,"r":54,"n":65,"t":1,"i":5,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":4,"r":4,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":12,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":20,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":28,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":36,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":44,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":52,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":0,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":8,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":16,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":24,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":32,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":40,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":48,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":56,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":1,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":2,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":3,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":7,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":8,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":9,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":12,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":13,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":14,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":15,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":18,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":19,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":20,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":21,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":25,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":26,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":27,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":28,"n":23,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":29,"n":23,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":30,"n":23,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":31,"n":23,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":32,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":33,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":34,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":35,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":38,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":39,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":40,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":41,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":44,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":45,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":46,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":47,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":50,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":51,"n":17,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":52,"n":17,"t":1,"i":1,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":0,"r":53,"n":17,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":56,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":57,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":58,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":59,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":60,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":61,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":62,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":63,"n":18,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":0,"n":53,"t":1,"i":7,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":1,"r":3,"n":65,"t":1,"i":7,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":1,"r":8,"n":63,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":20,"n":67,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":23,"n":63,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":32,"n":53,"t":1,"i":7,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":1,"r":35,"n":65,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":40,"n":51,"t":1,"i":7,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":1,"r":46,"n":53,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":52,"n":60,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":55,"n":63,"t":1,"i":7,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":1,"r":59,"n":66,"t":1,"i":7,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":1,"r":62,"n":72,"t":1,"i":7,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":2,"r":0,"n":41,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":1,"n":41,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":2,"n":53,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":3,"n":53,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":10,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":11,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":12,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":13,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":18,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":19,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":20,"n":53,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":21,"n":53,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":24,"n":42,"t":1,"i":8,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15},{"p":1,"c":2,"r":25,"n":42,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":1,"c":2,"r":26,"n":54,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":1,"c":2,"r":27,"n":54,"t":1,"i":8,"e":65,"f":10,"g":50,"h":2,"j":70,"k":15},{"p":1,"c":2,"r":28,"n":47,"t":1,"i":8,"e":65,"f":10,"g":65,"h":10,"j":69,"k":14},{"p":1,"c":2,"r":29,"n":47,"t":1,"i":8,"e":65,"f":10,"g":68,"h":13,"j":53,"k":5},{"p":1,"c":2,"r":30,"n":59,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":49,"k":1},{"p":1,"c":2,"r":31,"n":59,"t":1,"i":8,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":1,"c":2,"r":32,"n":41,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":33,"n":41,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":34,"n":53,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":35,"n":53,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":42,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":43,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":44,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":45,"n":41,"t":1,"i":8,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":1,"c":2,"r":50,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":51,"n":41,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":52,"n":53,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":53,"n":53,"t":1,"i":8,"e":65,"f":10,"g":70,"h":15,"j":57,"k":9},{"p":1,"c":2,"r":56,"n":42,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":57,"n":30,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":58,"n":30,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":59,"n":42,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":60,"n":30,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":61,"n":30,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":62,"n":42,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":63,"n":30,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":0,"n":53,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":3,"n":41,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":10,"n":56,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":16,"n":55,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":22,"n":51,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":32,"n":53,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":35,"n":41,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":42,"n":56,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":48,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":54,"n":51,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":60,"n":54,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":5,"r":0,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":2,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":3,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":4,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":6,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":7,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":8,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":10,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":11,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":12,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":14,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":15,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":16,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":18,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":19,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":20,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":22,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":23,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":24,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":26,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":27,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":28,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":30,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":31,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":32,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":34,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":35,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":36,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":38,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":39,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":40,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":42,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":43,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":44,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":46,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":47,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":48,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":50,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":51,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":52,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":54,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":55,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":56,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":58,"n":48,"t":1,"i":11,"e":65,"f":10,"g":52,"h":4,"j":55,"k":7},{"p":1,"c":5,"r":59,"n":48,"t":1,"i":11,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":60,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":62,"n":48,"t":1,"i":11,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":2,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":3,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":5,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":7,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":10,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":12,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":13,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":15,"n":41,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":18,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":19,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":21,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":23,"n":29,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":26,"n":32,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":27,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":28,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":30,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":31,"n":32,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":32,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":34,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":35,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":37,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":39,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":40,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":42,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":44,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":45,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":47,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":49,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":50,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":52,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":53,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":54,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":56,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":57,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":59,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":60,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":62,"n":34,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":63,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":0,"n":68,"t":1,"i":6,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"p":2,"c":1,"r":2,"n":65,"t":1,"i":6,"e":51,"f":3,"g":54,"h":6,"j":52,"k":4},{"p":2,"c":1,"r":4,"n":68,"t":1,"i":6,"e":51,"f":3,"g":53,"h":5,"j":54,"k":6},{"p":2,"c":1,"r":7,"n":70,"t":1,"i":6,"e":51,"f":3,"g":53,"h":5,"j":51,"k":3},{"p":2,"c":1,"r":10,"n":68,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":12,"n":65,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":14,"n":67,"t":1,"i":6,"e":51,"f":3,"g":54,"h":6,"j":50,"k":2},{"p":2,"c":1,"r":16,"n":65,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":18,"n":41,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":52,"k":4},{"p":2,"c":1,"r":21,"n":53,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":22,"n":56,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":23,"n":60,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":24,"n":65,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":25,"n":68,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":26,"n":72,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":27,"n":74,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":28,"n":75,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":29,"n":72,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":30,"n":70,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":31,"n":68,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":32,"n":74,"t":1,"i":6,"e":51,"f":3,"g":53,"h":5,"j":55,"k":7},{"p":2,"c":1,"r":35,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":1,"r":38,"n":77,"t":1,"i":6,"e":51,"f":3,"g":53,"h":5,"j":55,"k":7},{"p":2,"c":1,"r":41,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":1,"r":44,"n":82,"t":1,"i":6,"e":51,"f":3,"g":53,"h":5,"j":55,"k":7},{"p":2,"c":1,"r":47,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":1,"r":52,"n":87,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":53,"n":74,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":54,"n":75,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":55,"n":65,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":56,"n":70,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":57,"n":75,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":58,"n":87,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":59,"n":74,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":60,"n":75,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":61,"n":65,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":62,"n":70,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":63,"n":74,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":0,"n":29,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":1,"n":41,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":3,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":4,"n":29,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":6,"n":29,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":7,"n":41,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":9,"n":41,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":11,"n":13,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":45,"k":-1},{"p":2,"c":2,"r":12,"n":29,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":13,"n":29,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":14,"n":41,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":16,"n":29,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":17,"n":41,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":19,"n":29,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":20,"n":29,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":22,"n":29,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":23,"n":41,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":25,"n":32,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":26,"n":44,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":28,"n":32,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":29,"n":32,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":30,"n":44,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":32,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":33,"n":46,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":35,"n":34,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":36,"n":34,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":38,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":39,"n":46,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":41,"n":34,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":42,"n":46,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":44,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":45,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":46,"n":46,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":48,"n":34,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":49,"n":46,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":51,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":52,"n":46,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":54,"n":34,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":55,"n":46,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":2,"c":2,"r":57,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":58,"n":46,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":2,"r":61,"n":34,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":2,"c":3,"r":0,"n":53,"t":1,"i":6,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":2,"c":3,"r":2,"n":0,"t":0,"i":0,"e":65,"f":10,"g":48,"h":0,"j":48,"k":0},{"p":2,"c":3,"r":6,"n":53,"t":1,"i":6,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":2,"c":3,"r":9,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":10,"n":58,"t":1,"i":6,"e":51,"f":3,"g":50,"h":2,"j":45,"k":-1},{"p":2,"c":3,"r":12,"n":60,"t":1,"i":6,"e":51,"f":3,"g":50,"h":2,"j":56,"k":8},{"p":2,"c":3,"r":13,"n":58,"t":1,"i":6,"e":51,"f":3,"g":55,"h":7,"j":56,"k":8},{"p":2,"c":3,"r":15,"n":51,"t":1,"i":6,"e":51,"f":3,"g":55,"h":7,"j":56,"k":8},{"p":2,"c":3,"r":18,"n":53,"t":1,"i":6,"e":51,"f":3,"g":51,"h":3,"j":52,"k":4},{"p":2,"c":3,"r":21,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":50,"k":2},{"p":2,"c":3,"r":23,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":32,"n":53,"t":1,"i":6,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":2,"c":3,"r":34,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":38,"n":53,"t":1,"i":6,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":2,"c":3,"r":41,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":42,"n":58,"t":1,"i":6,"e":51,"f":3,"g":52,"h":4,"j":55,"k":7},{"p":2,"c":3,"r":44,"n":60,"t":1,"i":6,"e":51,"f":3,"g":52,"h":4,"j":55,"k":7},{"p":2,"c":3,"r":45,"n":58,"t":1,"i":6,"e":51,"f":3,"g":56,"h":8,"j":65,"k":10},{"p":2,"c":3,"r":48,"n":60,"t":1,"i":6,"e":51,"f":3,"g":51,"h":3,"j":53,"k":5},{"p":2,"c":3,"r":51,"n":53,"t":0,"i":0,"e":52,"f":4,"g":52,"h":4,"j":50,"k":2},{"p":2,"c":3,"r":54,"n":53,"t":0,"i":0,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":2,"c":3,"r":55,"n":0,"t":0,"i":0,"e":65,"f":10,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":3,"r":56,"n":58,"t":1,"i":6,"e":51,"f":3,"g":52,"h":4,"j":54,"k":6},{"p":2,"c":3,"r":62,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":50,"k":2},{"p":3,"c":3,"r":0,"n":36,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":1,"n":48,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":3,"n":36,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":4,"n":36,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":6,"n":36,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":7,"n":60,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":9,"n":48,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":11,"n":13,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":45,"k":-1},{"p":3,"c":3,"r":12,"n":48,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":13,"n":48,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":14,"n":48,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":16,"n":48,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":17,"n":48,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":19,"n":48,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":20,"n":48,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":22,"n":48,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":23,"n":48,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":25,"n":51,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":26,"n":51,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":28,"n":63,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":29,"n":63,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":30,"n":63,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":32,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":33,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":35,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":36,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":38,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":39,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":41,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":42,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":44,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":45,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":46,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":48,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":49,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":51,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":52,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":54,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":55,"n":53,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":3,"c":3,"r":57,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":58,"n":53,"t":1,"i":10,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":3,"c":3,"r":61,"n":41,"t":1,"i":10,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":57,"f":9,"g":48,"h":0,"j":48,"k":0},{"i_l":0,"r":1,"e":70,"f":15,"g":56,"h":8,"j":51,"k":3},{"i_l":0,"r":2,"e":53,"f":5,"g":51,"h":3,"j":51,"k":3},{"i_l":1,"r":0,"e":57,"f":9,"g":48,"h":0,"j":48,"k":0},{"i_l":1,"r":1,"e":56,"f":8,"g":50,"h":2,"j":50,"k":2},{"i_l":2,"r":0,"e":53,"f":5,"g":53,"h":5,"j":54,"k":6},{"i_l":2,"r":1,"e":50,"f":2,"g":51,"h":3,"j":65,"k":10},{"i_l":2,"r":2,"e":51,"f":3,"g":65,"h":10,"j":56,"k":8},{"i_l":2,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":2,"r":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":3,"r":0,"e":57,"f":9,"g":49,"h":1,"j":48,"k":0},{"i_l":3,"r":1,"e":70,"f":15,"g":53,"h":5,"j":50,"k":2},{"i_l":3,"r":2,"e":53,"f":5,"g":50,"h":2,"j":50,"k":2},{"i_l":4,"r":0,"e":56,"f":8,"g":56,"h":8,"j":50,"k":2},{"i_l":4,"r":1,"e":51,"f":3,"g":54,"h":6,"j":65,"k":10},{"i_l":4,"r":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":5,"r":0,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"i_l":5,"r":1,"e":50,"f":2,"g":57,"h":9,"j":67,"k":12},{"i_l":5,"r":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":6,"r":0,"e":50,"f":2,"g":54,"h":6,"j":65,"k":10},{"i_l":6,"r":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":7,"r":0,"e":51,"f":3,"g":55,"h":7,"j":55,"k":7},{"i_l":7,"r":1,"e":50,"f":2,"g":65,"h":10,"j":56,"k":8},{"i_l":7,"r":2,"e":53,"f":5,"g":50,"h":2,"j":52,"k":4},{"i_l":8,"r":0,"e":50,"f":2,"g":51,"h":3,"j":68,"k":13},{"i_l":8,"r":1,"e":56,"f":8,"g":65,"h":10,"j":45,"k":-1},{"i_l":9,"r":0,"e":56,"f":8,"g":54,"h":6,"j":66,"k":11},{"i_l":9,"r":1,"e":50,"f":2,"g":53,"h":5,"j":67,"k":12},{"i_l":10,"r":0,"e":57,"f":9,"g":50,"h":2,"j":48,"k":0},{"i_l":10,"r":1,"e":54,"f":6,"g":50,"h":2,"j":55,"k":7},{"i_l":10,"r":2,"e":53,"f":5,"g":51,"h":3,"j":50,"k":2},{"i_l":11,"r":0,"e":70,"f":15,"g":50,"h":2,"j":49,"k":1}],"patterns_and_voices":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,0,0,0,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.738400,"p":0.001000},{"a":0.502760,"p":0.053280},{"a":0.272800,"p":0.086400},{"a":0,"p":0.171600}],[{"a":0,"p":0},{"a":0.914000,"p":0.001000},{"a":0.170400,"p":0.053280},{"a":0,"p":0.142800},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.685600,"p":0.027720},{"a":0.166800,"p":0.100400},{"a":0,"p":0.252400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.822400,"p":0.001000},{"a":0.676000,"p":0.043200},{"a":0.089200,"p":0.100360},{"a":0,"p":0.203600}],[{"a":0,"p":0},{"a":0.773200,"p":0.001000},{"a":0.098000,"p":0.111160},{"a":0,"p":0.320400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.706800,"p":0.001000},{"a":0.218200,"p":0.032360},{"a":0,"p":0.116000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.459600,"p":0.001000},{"a":0.634000,"p":0.532400},{"a":0,"p":0.598400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.516920,"p":0.038400},{"a":0.099600,"p":0.150800},{"a":0,"p":0.222000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.552400,"p":0.000880},{"a":0.059200,"p":0.040000},{"a":0,"p":0.076000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.529600,"p":0},{"a":0.347600,"p":0.080920},{"a":0.235200,"p":0.504400},{"a":0,"p":0.766800}],[{"a":0,"p":0},{"a":0.800000,"p":0},{"a":0.146040,"p":0.056040},{"a":0.216800,"p":0.146800},{"a":0,"p":0.282400}],[{"a":0,"p":0},{"a":0.732800,"p":0.001000},{"a":0.097960,"p":0.023480},{"a":0,"p":0.074800},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":-0.357600,"p":0.200000},{"a":0.792000,"p":0.540800},{"a":-0.806400,"p":0.769600},{"a":0.772800,"p":0.885600},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":117},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":4,"a":1},{"x":0,"y":3,"t":4,"a":1},{"x":0,"y":4,"t":4,"a":1},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":50},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":1,"a":1},{"x":0,"y":4,"v":3,"a":1},{"x":0,"y":5,"v":2,"a":1},{"x":0,"y":6,"v":2,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":2,"a":1},{"x":1,"y":3,"v":8,"a":0},{"x":1,"y":4,"v":7,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":37},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":2,"a":1},{"x":2,"y":4,"v":3,"a":1},{"x":2,"y":5,"v":4,"a":1},{"x":2,"y":6,"v":4,"a":1},{"x":2,"y":7,"v":4,"a":1},{"x":2,"y":8,"v":4,"a":1},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":2,"a":0},{"x":3,"y":4,"v":3,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":5,"a":1},{"x":4,"y":3,"v":1,"a":1},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":2,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/dunsa2.snibb000066400000000000000000002730651351541346100204630ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"rotsak","title":"dunsa2","info":"","master_amp_percent":49,"solo_voice":-1,"solo_track":-1,"track_height":64,"arp":10,"track_highlight_interval":2,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":17,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":1,"n":17,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":2,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":17,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":5,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":29,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":7,"n":17,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":29,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":11,"n":17,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":30,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":13,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":14,"n":41,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":15,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":16,"n":20,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":17,"n":20,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":18,"n":32,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":19,"n":20,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":20,"n":33,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":21,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":22,"n":32,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":23,"n":20,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":32,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":25,"n":20,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":26,"n":28,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":27,"n":30,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":28,"n":32,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":30,"n":44,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":32,"n":17,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":33,"n":17,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":34,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":35,"n":17,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":37,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":38,"n":29,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":39,"n":17,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":40,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":41,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":42,"n":29,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":43,"n":17,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":44,"n":30,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":45,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":46,"n":41,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":47,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":48,"n":20,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":49,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":50,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":51,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":52,"n":34,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":53,"n":37,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":54,"n":33,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":55,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":56,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":57,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":58,"n":29,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":0,"c":1,"r":4,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":6,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":12,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":14,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":20,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":22,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":26,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":29,"n":60,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":0,"c":1,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":0,"c":1,"r":31,"n":60,"t":1,"i":2,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":0,"c":1,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":35,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":0,"c":1,"r":36,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":38,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":44,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":46,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":52,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":54,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":58,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":0,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":1,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":2,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":3,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":4,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":5,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":6,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":10,"n":65,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":13,"n":65,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":15,"n":53,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":17,"n":65,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":18,"n":51,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":19,"n":51,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":20,"n":51,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":21,"n":51,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":22,"n":51,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":24,"n":63,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":27,"n":63,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":30,"n":63,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":31,"n":51,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":32,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":33,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":34,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":35,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":36,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":37,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":38,"n":53,"t":1,"i":3,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":42,"n":65,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":45,"n":65,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":47,"n":53,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":49,"n":65,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":50,"n":50,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":51,"n":50,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":52,"n":50,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":53,"n":50,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":54,"n":50,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":2,"r":56,"n":62,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":0,"n":61,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":2,"n":60,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":3,"r":3,"n":61,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":3,"r":4,"n":56,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":3,"r":6,"n":53,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":8,"n":68,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":9,"n":65,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":10,"n":67,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":11,"n":0,"t":0,"i":0,"e":52,"f":4,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":3,"r":13,"n":65,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":14,"n":63,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":3,"r":15,"n":65,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":16,"n":70,"t":1,"i":4,"e":51,"f":3,"g":55,"h":7,"j":55,"k":7},{"p":0,"c":3,"r":18,"n":60,"t":0,"i":0,"e":52,"f":4,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":3,"r":20,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":22,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":24,"n":63,"t":1,"i":4,"e":51,"f":3,"g":54,"h":6,"j":50,"k":2},{"p":0,"c":3,"r":26,"n":0,"t":0,"i":0,"e":52,"f":4,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":3,"r":32,"n":61,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":34,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":35,"n":61,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":36,"n":56,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":38,"n":53,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":40,"n":68,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":41,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":42,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":43,"n":0,"t":0,"i":0,"e":52,"f":4,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":3,"r":45,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":46,"n":63,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":47,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":48,"n":69,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":50,"n":60,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":52,"k":4},{"p":0,"c":3,"r":60,"n":69,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":52,"k":4},{"p":0,"c":4,"r":2,"n":65,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":6,"n":65,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":10,"n":65,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":14,"n":65,"t":1,"i":5,"e":48,"f":0,"g":55,"h":7,"j":65,"k":10},{"p":0,"c":4,"r":18,"n":68,"t":1,"i":5,"e":48,"f":0,"g":52,"h":4,"j":55,"k":7},{"p":0,"c":4,"r":22,"n":68,"t":1,"i":5,"e":48,"f":0,"g":52,"h":4,"j":55,"k":7},{"p":0,"c":4,"r":26,"n":68,"t":1,"i":5,"e":48,"f":0,"g":52,"h":4,"j":57,"k":9},{"p":0,"c":4,"r":29,"n":68,"t":1,"i":5,"e":48,"f":0,"g":55,"h":7,"j":67,"k":12},{"p":0,"c":4,"r":34,"n":65,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":38,"n":65,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":42,"n":65,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":46,"n":65,"t":1,"i":5,"e":48,"f":0,"g":55,"h":7,"j":65,"k":10},{"p":0,"c":4,"r":50,"n":69,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":54,"n":69,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":55,"k":7},{"p":0,"c":4,"r":58,"n":69,"t":1,"i":5,"e":48,"f":0,"g":51,"h":3,"j":57,"k":9},{"p":0,"c":4,"r":60,"n":0,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":52,"k":4},{"p":0,"c":5,"r":0,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":0,"c":5,"r":1,"n":67,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":5,"r":2,"n":68,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":0,"c":5,"r":3,"n":58,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":70,"k":15},{"p":0,"c":5,"r":4,"n":70,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":65,"k":10},{"p":0,"c":5,"r":5,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":51,"k":3},{"p":0,"c":5,"r":6,"n":53,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":0,"c":5,"r":7,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":0,"c":5,"r":8,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":9,"n":70,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":10,"n":53,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":55,"k":7},{"p":0,"c":5,"r":11,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":0,"c":5,"r":12,"n":59,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":57,"k":9},{"p":0,"c":5,"r":13,"n":57,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8},{"p":0,"c":5,"r":14,"n":70,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":15,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":0,"c":5,"r":16,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":0,"c":5,"r":17,"n":53,"t":1,"i":6,"e":65,"f":10,"g":68,"h":13,"j":56,"k":8},{"p":0,"c":5,"r":18,"n":70,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":0,"c":5,"r":19,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":5,"r":20,"n":73,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":54,"k":6},{"p":0,"c":5,"r":21,"n":69,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":0,"c":5,"r":22,"n":70,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":51,"k":3},{"p":0,"c":5,"r":23,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":24,"n":73,"t":1,"i":6,"e":65,"f":10,"g":68,"h":13,"j":55,"k":7},{"p":0,"c":5,"r":25,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":0,"c":5,"r":26,"n":69,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":0,"c":5,"r":27,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":0,"c":5,"r":28,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":0,"c":5,"r":29,"n":71,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":0,"c":5,"r":30,"n":72,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":0,"c":5,"r":31,"n":64,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":0,"c":5,"r":32,"n":69,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":57,"k":9},{"p":0,"c":5,"r":33,"n":71,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":5,"r":34,"n":69,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":0,"c":5,"r":35,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":0,"c":5,"r":36,"n":72,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15},{"p":0,"c":5,"r":37,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":65,"k":10},{"p":0,"c":5,"r":38,"n":67,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":39,"n":71,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":51,"k":3},{"p":0,"c":5,"r":40,"n":72,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":66,"k":11},{"p":0,"c":5,"r":41,"n":67,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":42,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":65,"k":10},{"p":0,"c":5,"r":43,"n":72,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":55,"k":7},{"p":0,"c":5,"r":44,"n":64,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":0,"c":5,"r":45,"n":69,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":0,"c":5,"r":46,"n":71,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":70,"k":15},{"p":0,"c":5,"r":47,"n":72,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":0,"c":5,"r":48,"n":64,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":57,"k":9},{"p":0,"c":5,"r":49,"n":71,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":0,"c":5,"r":50,"n":64,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":51,"n":71,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":65,"k":10},{"p":0,"c":5,"r":52,"n":72,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":51,"k":3},{"p":0,"c":5,"r":53,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":0,"c":5,"r":54,"n":71,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":0,"c":5,"r":55,"n":72,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":0,"c":5,"r":56,"n":64,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":55,"k":7},{"p":0,"c":5,"r":57,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":0,"c":5,"r":58,"n":72,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":0,"c":5,"r":59,"n":67,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15},{"p":0,"c":5,"r":60,"n":69,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":0,"c":5,"r":61,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":55,"k":7},{"p":0,"c":5,"r":62,"n":71,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":51,"k":3},{"p":0,"c":5,"r":63,"n":72,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":1,"c":0,"r":0,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":1,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":2,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":3,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":4,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":5,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":6,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":7,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":8,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":9,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":10,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":11,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":12,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":13,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":14,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":15,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":16,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":17,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":18,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":19,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":20,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":21,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":22,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":23,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":24,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":25,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":26,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":27,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":28,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":29,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":30,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":31,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":32,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":33,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":34,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":35,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":36,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":37,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":38,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":39,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":40,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":41,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":42,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":43,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":44,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":45,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":46,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":47,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":48,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":49,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":50,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":51,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":52,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":53,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":54,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":55,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":56,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":57,"n":20,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":58,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":59,"n":32,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":60,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":61,"n":20,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":0,"r":62,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":1,"c":0,"r":63,"n":20,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":1,"c":1,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":7,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":8,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":38,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":40,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":60,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":61,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":62,"n":60,"t":1,"i":2,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":1,"r":63,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":0,"n":53,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":3,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":6,"n":56,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":12,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":2,"r":17,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":52,"k":4},{"p":1,"c":2,"r":24,"n":0,"t":0,"i":0,"e":69,"f":14,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":2,"r":30,"n":0,"t":0,"i":0,"e":52,"f":4,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":2,"r":32,"n":56,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":35,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":38,"n":53,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":40,"n":56,"t":1,"i":4,"e":51,"f":3,"g":53,"h":5,"j":52,"k":4},{"p":1,"c":2,"r":52,"n":67,"t":1,"i":4,"e":51,"f":3,"g":52,"h":4,"j":53,"k":5},{"p":1,"c":2,"r":58,"n":0,"t":0,"i":0,"e":52,"f":4,"g":52,"h":4,"j":52,"k":4},{"p":1,"c":3,"r":0,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":3,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":6,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":9,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":12,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":15,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":18,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":21,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":24,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":27,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":30,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":32,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":35,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":38,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":41,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":44,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":47,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":50,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":53,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":56,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":59,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":3,"r":62,"n":51,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":3,"r":63,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":0,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":3,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":6,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":9,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":12,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":15,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":18,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":21,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":24,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":27,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":30,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":32,"n":44,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":35,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":38,"n":44,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":41,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":44,"n":44,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":47,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":50,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":53,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":56,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":59,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":4,"r":62,"n":63,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":4,"r":63,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":1,"c":5,"r":0,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":1,"c":5,"r":1,"n":67,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":1,"c":5,"r":2,"n":68,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":5,"r":3,"n":58,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":70,"k":15},{"p":1,"c":5,"r":4,"n":70,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":65,"k":10},{"p":1,"c":5,"r":5,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":51,"k":3},{"p":1,"c":5,"r":6,"n":53,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":1,"c":5,"r":7,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":8,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":1,"c":5,"r":9,"n":70,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":1,"c":5,"r":10,"n":53,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":55,"k":7},{"p":1,"c":5,"r":11,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":1,"c":5,"r":12,"n":59,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":57,"k":9},{"p":1,"c":5,"r":13,"n":57,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8},{"p":1,"c":5,"r":14,"n":70,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":5,"r":15,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":1,"c":5,"r":16,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":5,"r":17,"n":53,"t":1,"i":6,"e":65,"f":10,"g":68,"h":13,"j":56,"k":8},{"p":1,"c":5,"r":18,"n":70,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":5,"r":19,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":1,"c":5,"r":20,"n":73,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":54,"k":6},{"p":1,"c":5,"r":21,"n":69,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":1,"c":5,"r":22,"n":70,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":51,"k":3},{"p":1,"c":5,"r":23,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":1,"c":5,"r":24,"n":73,"t":1,"i":6,"e":65,"f":10,"g":68,"h":13,"j":55,"k":7},{"p":1,"c":5,"r":25,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":1,"c":5,"r":26,"n":69,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":1,"c":5,"r":27,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":1,"c":5,"r":28,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":5,"r":29,"n":71,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":1,"c":5,"r":30,"n":72,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":1,"c":5,"r":31,"n":64,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":1,"c":5,"r":32,"n":69,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":57,"k":9},{"p":1,"c":5,"r":33,"n":71,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":1,"c":5,"r":34,"n":69,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":1,"c":5,"r":35,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":1,"c":5,"r":36,"n":72,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15},{"p":1,"c":5,"r":37,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":65,"k":10},{"p":1,"c":5,"r":38,"n":67,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":1,"c":5,"r":39,"n":71,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":51,"k":3},{"p":1,"c":5,"r":40,"n":72,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":66,"k":11},{"p":1,"c":5,"r":41,"n":67,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":1,"c":5,"r":42,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":65,"k":10},{"p":1,"c":5,"r":43,"n":72,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":55,"k":7},{"p":1,"c":5,"r":44,"n":64,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":5,"r":45,"n":69,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":1,"c":5,"r":46,"n":71,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":70,"k":15},{"p":1,"c":5,"r":47,"n":72,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":1,"c":5,"r":48,"n":64,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":57,"k":9},{"p":1,"c":5,"r":49,"n":71,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":5,"r":50,"n":64,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":1,"c":5,"r":51,"n":71,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":65,"k":10},{"p":1,"c":5,"r":52,"n":72,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":51,"k":3},{"p":1,"c":5,"r":53,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":1,"c":5,"r":54,"n":71,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":1,"c":5,"r":55,"n":72,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":5,"r":56,"n":64,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":55,"k":7},{"p":1,"c":5,"r":57,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":1,"c":5,"r":58,"n":72,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":1,"c":5,"r":59,"n":67,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15},{"p":1,"c":5,"r":60,"n":69,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":1,"c":5,"r":61,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":55,"k":7},{"p":1,"c":5,"r":62,"n":71,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":51,"k":3},{"p":1,"c":5,"r":63,"n":72,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":2,"c":0,"r":0,"n":67,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":6,"n":55,"t":0,"i":0,"e":52,"f":4,"g":52,"h":4,"j":49,"k":1},{"p":2,"c":0,"r":16,"n":0,"t":0,"i":0,"e":52,"f":4,"g":52,"h":4,"j":50,"k":2},{"p":2,"c":0,"r":28,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":0,"r":50,"n":0,"t":0,"i":0,"e":70,"f":15,"g":49,"h":1,"j":49,"k":1},{"p":2,"c":0,"r":58,"n":0,"t":0,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":2,"r":0,"n":67,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":6,"n":55,"t":0,"i":0,"e":52,"f":4,"g":52,"h":4,"j":49,"k":1},{"p":2,"c":2,"r":16,"n":0,"t":0,"i":0,"e":52,"f":4,"g":52,"h":4,"j":50,"k":2},{"p":2,"c":2,"r":28,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":2,"r":50,"n":0,"t":0,"i":0,"e":70,"f":15,"g":49,"h":1,"j":49,"k":1},{"p":2,"c":2,"r":58,"n":0,"t":0,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":3,"r":0,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":3,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":6,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":9,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":12,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":15,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":18,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":21,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":24,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":27,"n":55,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":30,"n":55,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":32,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":35,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":38,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":41,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":44,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":47,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":50,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":53,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":56,"n":52,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":59,"n":52,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":3,"r":62,"n":51,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":3,"r":63,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":0,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":3,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":6,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":9,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":12,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":15,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":18,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":21,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":24,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":27,"n":48,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":30,"n":48,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":32,"n":44,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":35,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":38,"n":44,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":41,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":44,"n":44,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":47,"n":44,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":50,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":53,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":56,"n":56,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":59,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":4,"r":62,"n":63,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":63,"n":56,"t":1,"i":5,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":5,"r":0,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":2,"c":5,"r":1,"n":67,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":2,"c":5,"r":2,"n":68,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":5,"r":3,"n":58,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":70,"k":15},{"p":2,"c":5,"r":4,"n":70,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":65,"k":10},{"p":2,"c":5,"r":5,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":51,"k":3},{"p":2,"c":5,"r":6,"n":53,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":2,"c":5,"r":7,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":2,"c":5,"r":8,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":2,"c":5,"r":9,"n":70,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":2,"c":5,"r":10,"n":53,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":55,"k":7},{"p":2,"c":5,"r":11,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":68,"k":13},{"p":2,"c":5,"r":12,"n":59,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":57,"k":9},{"p":2,"c":5,"r":13,"n":57,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8},{"p":2,"c":5,"r":14,"n":70,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":5,"r":15,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":2,"c":5,"r":16,"n":68,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":2,"c":5,"r":17,"n":53,"t":1,"i":6,"e":65,"f":10,"g":68,"h":13,"j":56,"k":8},{"p":2,"c":5,"r":18,"n":70,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":5,"r":19,"n":67,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":2,"c":5,"r":20,"n":73,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":54,"k":6},{"p":2,"c":5,"r":21,"n":69,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":2,"c":5,"r":22,"n":70,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":51,"k":3},{"p":2,"c":5,"r":23,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":2,"c":5,"r":24,"n":73,"t":1,"i":6,"e":65,"f":10,"g":68,"h":13,"j":55,"k":7},{"p":2,"c":5,"r":25,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":2,"c":5,"r":26,"n":69,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":2,"c":5,"r":27,"n":69,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":2,"c":5,"r":28,"n":64,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":5,"r":29,"n":71,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":2,"c":5,"r":30,"n":72,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":2,"c":5,"r":31,"n":64,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":2,"c":5,"r":32,"n":69,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":57,"k":9},{"p":2,"c":5,"r":33,"n":71,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":2,"c":5,"r":34,"n":69,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":2,"c":5,"r":35,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":51,"k":3},{"p":2,"c":5,"r":36,"n":72,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15},{"p":2,"c":5,"r":37,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":65,"k":10},{"p":2,"c":5,"r":38,"n":67,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":2,"c":5,"r":39,"n":71,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":51,"k":3},{"p":2,"c":5,"r":40,"n":72,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":66,"k":11},{"p":2,"c":5,"r":41,"n":67,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":5,"r":42,"n":71,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":65,"k":10},{"p":2,"c":5,"r":43,"n":72,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":55,"k":7},{"p":2,"c":5,"r":44,"n":64,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":5,"r":45,"n":69,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":2,"c":5,"r":46,"n":71,"t":1,"i":6,"e":65,"f":10,"g":54,"h":6,"j":70,"k":15},{"p":2,"c":5,"r":47,"n":72,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":2,"c":5,"r":48,"n":64,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":57,"k":9},{"p":2,"c":5,"r":49,"n":71,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":5,"r":50,"n":64,"t":1,"i":6,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":2,"c":5,"r":51,"n":71,"t":1,"i":6,"e":65,"f":10,"g":51,"h":3,"j":65,"k":10},{"p":2,"c":5,"r":52,"n":72,"t":1,"i":6,"e":65,"f":10,"g":52,"h":4,"j":51,"k":3},{"p":2,"c":5,"r":53,"n":64,"t":1,"i":6,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":2,"c":5,"r":54,"n":71,"t":1,"i":6,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":2,"c":5,"r":55,"n":72,"t":1,"i":6,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":2,"c":5,"r":56,"n":64,"t":1,"i":6,"e":65,"f":10,"g":56,"h":8,"j":55,"k":7},{"p":2,"c":5,"r":58,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":0,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":1,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":2,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":3,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":4,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":5,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":6,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":7,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":8,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":9,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":10,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":11,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":12,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":13,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":14,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":15,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":16,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":17,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":18,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":19,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":20,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":21,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":22,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":23,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":24,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":25,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":26,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":27,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":28,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":29,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":30,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":31,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":32,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":33,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":34,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":35,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":36,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":37,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":38,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":39,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":40,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":41,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":42,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":43,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":44,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":45,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":46,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":47,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":48,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":49,"n":23,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":50,"n":35,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":51,"n":23,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":52,"n":47,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":53,"n":35,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":54,"n":23,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":55,"n":35,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":56,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":57,"n":20,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":58,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":59,"n":32,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":60,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":61,"n":20,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":0,"r":62,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":3,"c":0,"r":63,"n":20,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":3,"c":1,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":3,"c":1,"r":4,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":6,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":12,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":14,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":20,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":22,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":26,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":29,"n":60,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":3,"c":1,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":3,"c":1,"r":31,"n":60,"t":1,"i":2,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":3,"c":1,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":35,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":3,"c":1,"r":36,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":38,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":44,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":46,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":52,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":54,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":58,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":62,"n":60,"t":1,"i":2,"e":65,"f":10,"g":56,"h":8,"j":69,"k":14},{"p":3,"c":1,"r":63,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":0,"n":60,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":1,"n":62,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":2,"n":72,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":4,"n":63,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":16,"n":48,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":17,"n":60,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":19,"n":48,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":20,"n":60,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":22,"n":48,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":23,"n":60,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":25,"n":48,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":26,"n":60,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":32,"n":68,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":33,"n":64,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":34,"n":68,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":36,"n":61,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":48,"n":49,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":49,"n":61,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":51,"n":49,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":52,"n":61,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":54,"n":49,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":55,"n":61,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":57,"n":49,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":58,"n":61,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":0,"n":72,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":2,"n":48,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":3,"n":72,"t":1,"i":9,"e":48,"f":0,"g":55,"h":7,"j":67,"k":12},{"p":3,"c":3,"r":7,"n":63,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":10,"n":55,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":12,"n":67,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":32,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":35,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":38,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":41,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":44,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":47,"n":60,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":52,"n":62,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":53,"n":64,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":54,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":55,"n":67,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":57,"n":68,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":60,"n":68,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":62,"n":63,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":63,"n":75,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":4,"r":0,"n":60,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":4,"r":12,"n":67,"t":1,"i":7,"e":51,"f":3,"g":51,"h":3,"j":51,"k":3},{"p":3,"c":4,"r":30,"n":0,"t":0,"i":0,"e":70,"f":15,"g":49,"h":1,"j":50,"k":2},{"p":3,"c":4,"r":34,"n":70,"t":1,"i":7,"e":51,"f":3,"g":51,"h":3,"j":51,"k":3},{"p":3,"c":4,"r":44,"n":0,"t":0,"i":0,"e":52,"f":4,"g":50,"h":2,"j":50,"k":2},{"p":3,"c":4,"r":48,"n":69,"t":1,"i":7,"e":51,"f":3,"g":51,"h":3,"j":51,"k":3},{"p":3,"c":4,"r":60,"n":72,"t":0,"i":0,"e":70,"f":15,"g":49,"h":1,"j":50,"k":2},{"p":4,"c":0,"r":0,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":1,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":2,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":3,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":4,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":5,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":6,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":7,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":8,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":9,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":10,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":11,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":12,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":13,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":14,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":15,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":16,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":17,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":18,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":19,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":20,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":21,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":22,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":23,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":24,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":25,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":26,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":27,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":28,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":29,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":30,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":31,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":32,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":33,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":34,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":35,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":36,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":37,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":38,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":39,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":40,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":41,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":42,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":43,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":44,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":45,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":46,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":47,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":48,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":49,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":50,"n":25,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":4,"c":0,"r":51,"n":13,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":0,"r":52,"n":37,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":4,"c":1,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":4,"c":1,"r":4,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":6,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":12,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":14,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":20,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":22,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":26,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":29,"n":60,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":4,"c":1,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":1,"r":31,"n":60,"t":1,"i":2,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":4,"c":1,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":35,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":4,"c":1,"r":36,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":38,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":44,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":46,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":52,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":54,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":0,"n":84,"t":1,"i":9,"e":65,"f":10,"g":50,"h":2,"j":50,"k":2},{"p":4,"c":2,"r":1,"n":72,"t":1,"i":3,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":4,"c":2,"r":2,"n":67,"t":1,"i":0,"e":65,"f":10,"g":52,"h":4,"j":52,"k":4},{"p":4,"c":2,"r":3,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":4,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":5,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":6,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":7,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":8,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":9,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":10,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":11,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":12,"n":84,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":13,"n":72,"t":1,"i":9,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":14,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":15,"n":79,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":16,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":17,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":18,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":19,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":20,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":21,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":22,"n":84,"t":1,"i":9,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":23,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":24,"n":84,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":25,"n":72,"t":1,"i":3,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":26,"n":67,"t":1,"i":9,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":27,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":28,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":29,"n":67,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":30,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":31,"n":72,"t":1,"i":9,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":32,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":33,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":34,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":35,"n":79,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":36,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":37,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":38,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":39,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":40,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":41,"n":79,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":42,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":43,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":44,"n":84,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":45,"n":72,"t":1,"i":3,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":46,"n":67,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":47,"n":79,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":48,"n":84,"t":1,"i":9,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":49,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":50,"n":84,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":51,"n":72,"t":1,"i":3,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":52,"n":67,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":53,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":54,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":55,"n":67,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":56,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":57,"n":72,"t":1,"i":9,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":2,"r":58,"n":67,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":4,"c":2,"r":59,"n":79,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":4,"c":2,"r":60,"n":84,"t":1,"i":9,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":4,"c":2,"r":61,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":62,"n":72,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":4,"c":2,"r":63,"n":72,"t":1,"i":9,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":4,"c":3,"r":0,"n":72,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":2,"n":48,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":3,"n":72,"t":1,"i":9,"e":48,"f":0,"g":55,"h":7,"j":67,"k":12},{"p":4,"c":3,"r":7,"n":63,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":10,"n":55,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":12,"n":67,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":32,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":35,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":38,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":41,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":44,"n":65,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":47,"n":60,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":58,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":50,"k":2},{"p":4,"c":4,"r":0,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":0,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":1,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":2,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":3,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":4,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":5,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":6,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":7,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":8,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":9,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":10,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":11,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":12,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":13,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":14,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":15,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":16,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":17,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":18,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":19,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":20,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":21,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":22,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":23,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":24,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":25,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":26,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":27,"n":24,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":28,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":29,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":30,"n":36,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":31,"n":12,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":32,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":33,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":34,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":35,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":36,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":37,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":38,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":39,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":40,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":41,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":42,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":43,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":44,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":45,"n":17,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":46,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":47,"n":29,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":48,"n":41,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":49,"n":23,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":50,"n":35,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":51,"n":23,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":52,"n":47,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":53,"n":35,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":54,"n":23,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":55,"n":35,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":49,"k":1},{"p":5,"c":0,"r":56,"n":44,"t":1,"i":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"p":5,"c":0,"r":58,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":5,"c":1,"r":4,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":6,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":12,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":14,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":20,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":22,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":26,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":29,"n":60,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":5,"c":1,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":5,"c":1,"r":31,"n":60,"t":1,"i":2,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":5,"c":1,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":35,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":5,"c":1,"r":36,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":38,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":44,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":46,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":52,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":54,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":62,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":63,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":0,"n":53,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":3,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":6,"n":56,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":12,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":52,"k":4},{"p":5,"c":2,"r":17,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":52,"k":4},{"p":5,"c":2,"r":24,"n":0,"t":0,"i":0,"e":69,"f":14,"g":51,"h":3,"j":51,"k":3},{"p":5,"c":2,"r":30,"n":0,"t":0,"i":0,"e":52,"f":4,"g":56,"h":8,"j":70,"k":15},{"p":5,"c":2,"r":32,"n":56,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":35,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":38,"n":53,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":40,"n":56,"t":1,"i":4,"e":51,"f":3,"g":53,"h":5,"j":52,"k":4},{"p":5,"c":2,"r":52,"n":67,"t":1,"i":4,"e":51,"f":3,"g":52,"h":4,"j":53,"k":5},{"p":5,"c":2,"r":60,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":50,"k":2},{"p":5,"c":4,"r":0,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":58,"n":0,"t":0,"i":0,"e":70,"f":15,"g":49,"h":1,"j":50,"k":2},{"p":6,"c":1,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":6,"c":1,"r":4,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":6,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":12,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":14,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":20,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":22,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":26,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":29,"n":60,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":6,"c":1,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":1,"r":31,"n":60,"t":1,"i":2,"e":65,"f":10,"g":57,"h":9,"j":70,"k":15},{"p":6,"c":1,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":35,"n":48,"t":1,"i":1,"e":65,"f":10,"g":57,"h":9,"j":65,"k":10},{"p":6,"c":1,"r":36,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":38,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":44,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":46,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":52,"n":60,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":54,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":0,"n":84,"t":1,"i":9,"e":65,"f":10,"g":50,"h":2,"j":50,"k":2},{"p":6,"c":2,"r":1,"n":72,"t":1,"i":3,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":6,"c":2,"r":2,"n":67,"t":1,"i":0,"e":65,"f":10,"g":52,"h":4,"j":52,"k":4},{"p":6,"c":2,"r":3,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":4,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":5,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":6,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":7,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":8,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":9,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":10,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":11,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":12,"n":84,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":13,"n":72,"t":1,"i":9,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":14,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":15,"n":79,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":16,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":17,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":18,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":19,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":20,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":21,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":22,"n":84,"t":1,"i":9,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":23,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":24,"n":84,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":25,"n":72,"t":1,"i":3,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":26,"n":67,"t":1,"i":9,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":27,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":28,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":29,"n":67,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":30,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":31,"n":72,"t":1,"i":9,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":32,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":33,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":34,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":35,"n":79,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":36,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":37,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":38,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":39,"n":72,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":40,"n":67,"t":1,"i":3,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":41,"n":79,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":42,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":43,"n":67,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":44,"n":84,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":45,"n":72,"t":1,"i":3,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":46,"n":67,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":47,"n":79,"t":1,"i":3,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":48,"n":84,"t":1,"i":9,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":49,"n":67,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":50,"n":84,"t":1,"i":9,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":51,"n":72,"t":1,"i":3,"e":65,"f":10,"g":54,"h":6,"j":56,"k":8},{"p":6,"c":2,"r":52,"n":67,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":70,"k":15},{"p":6,"c":2,"r":53,"n":79,"t":1,"i":9,"e":65,"f":10,"g":70,"h":15,"j":53,"k":5},{"p":6,"c":2,"r":54,"n":84,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":6,"c":2,"r":55,"n":67,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":56,"n":84,"t":1,"i":3,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":6,"c":2,"r":58,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":51,"f":3,"g":70,"h":15,"j":56,"k":8},{"i_l":0,"r":1,"e":53,"f":5,"g":54,"h":6,"j":50,"k":2},{"i_l":0,"r":2,"e":54,"f":6,"g":49,"h":1,"j":48,"k":0},{"i_l":0,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":1,"r":0,"e":70,"f":15,"g":70,"h":15,"j":70,"k":15},{"i_l":1,"r":1,"e":57,"f":9,"g":48,"h":0,"j":45,"k":-1},{"i_l":1,"r":2,"e":53,"f":5,"g":54,"h":6,"j":54,"k":6},{"i_l":1,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":2,"r":0,"e":70,"f":15,"g":70,"h":15,"j":70,"k":15},{"i_l":2,"r":1,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":2,"r":2,"e":53,"f":5,"g":53,"h":5,"j":53,"k":5},{"i_l":2,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":4,"r":0,"e":56,"f":8,"g":65,"h":10,"j":68,"k":13},{"i_l":4,"r":1,"e":51,"f":3,"g":56,"h":8,"j":56,"k":8},{"i_l":4,"r":2,"e":50,"f":2,"g":55,"h":7,"j":56,"k":8},{"i_l":4,"r":3,"e":57,"f":9,"g":50,"h":2,"j":45,"k":-1},{"i_l":5,"r":0,"e":49,"f":1,"g":51,"h":3,"j":53,"k":5},{"i_l":5,"r":1,"e":56,"f":8,"g":51,"h":3,"j":51,"k":3},{"i_l":5,"r":2,"e":50,"f":2,"g":56,"h":8,"j":68,"k":13},{"i_l":6,"r":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":6,"r":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":7,"r":0,"e":57,"f":9,"g":45,"h":-1,"j":51,"k":3},{"i_l":7,"r":1,"e":50,"f":2,"g":65,"h":10,"j":69,"k":14},{"i_l":7,"r":2,"e":54,"f":6,"g":50,"h":2,"j":49,"k":1},{"i_l":8,"r":0,"e":57,"f":9,"g":50,"h":2,"j":45,"k":-1},{"i_l":8,"r":1,"e":50,"f":2,"g":49,"h":1,"j":69,"k":14},{"i_l":8,"r":2,"e":52,"f":4,"g":53,"h":5,"j":49,"k":1},{"i_l":8,"r":3,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"i_l":8,"r":4,"e":54,"f":6,"g":54,"h":6,"j":54,"k":6}],"patterns_and_voices":[3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[2,2,1,1,1,4,3,5,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,3,0,4,0,5,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,2,2,1,5,4,6,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,1,1,2,2,3,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,1,1,2,2,4,5,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.732000,"p":0.001000},{"a":0,"p":0.058000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.077120},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.139200},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.012000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.804400,"p":0.001000},{"a":0.415200,"p":0.080000},{"a":0.097200,"p":0.166000},{"a":0.382800,"p":0.423600}],[{"a":0,"p":0},{"a":0.758800,"p":0},{"a":0.403200,"p":0.032000},{"a":0,"p":0.050800},{"a":0.183600,"p":0.160400}],[{"a":0,"p":0},{"a":0.799200,"p":0.001000},{"a":0,"p":0.036520},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.004400,"p":0.001000},{"a":0.704800,"p":0.465600},{"a":0.417600,"p":1.088400},{"a":0.480400,"p":2.122000}],[{"a":0,"p":0},{"a":0.658000,"p":0.001000},{"a":0,"p":0.023600},{"a":0.100400,"p":0.198800},{"a":0,"p":0.708000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.064800},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0.699200,"p":0.400000},{"a":-0.821600,"p":0.491200},{"a":0.581600,"p":0.923200},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":94},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":6,"a":1},{"x":0,"y":3,"t":4,"a":0},{"x":0,"y":4,"t":4,"a":0},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":71},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":3,"a":1},{"x":0,"y":4,"v":2,"a":1},{"x":0,"y":5,"v":2,"a":1},{"x":0,"y":6,"v":0,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":1,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":54},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":2,"a":1},{"x":2,"y":4,"v":3,"a":1},{"x":2,"y":5,"v":4,"a":1},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":11},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":5,"a":1},{"x":4,"y":3,"v":2,"a":1},{"x":4,"y":4,"v":2,"a":0},{"x":4,"y":5,"v":4,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":8,"a":1},{"x":5,"y":3,"v":4,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/fiskbolja.snibb000066400000000000000000000576301351541346100212310ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"salkinitzor","title":"fiskbolja","info":"","master_amp_percent":100,"solo_voice":-1,"solo_track":-1,"track_height":64,"arp":10,"track_highlight_interval":4,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":2,"n":48,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":13,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":14,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":16,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":19,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":22,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":26,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":29,"n":34,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":31,"n":39,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":34,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":35,"n":48,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":38,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":40,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":42,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":45,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":47,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":48,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":51,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":57,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":60,"n":27,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":62,"n":46,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":63,"n":34,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":6,"n":63,"t":1,"i":0,"e":50,"f":2,"g":65,"h":10,"j":65,"k":10},{"p":0,"c":1,"r":20,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":1,"r":22,"n":63,"t":1,"i":0,"e":51,"f":3,"g":52,"h":4,"j":52,"k":4},{"p":0,"c":1,"r":28,"n":58,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":38,"n":63,"t":1,"i":0,"e":50,"f":2,"g":65,"h":10,"j":65,"k":10},{"p":0,"c":1,"r":48,"n":58,"t":1,"i":2,"e":65,"f":10,"g":48,"h":0,"j":48,"k":0},{"p":0,"c":1,"r":50,"n":60,"t":1,"i":2,"e":51,"f":3,"g":52,"h":4,"j":51,"k":3},{"p":0,"c":2,"r":10,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":2,"r":16,"n":55,"t":1,"i":2,"e":65,"f":10,"g":57,"h":9,"j":50,"k":2},{"p":0,"c":2,"r":42,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":55,"n":63,"t":1,"i":2,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"p":0,"c":3,"r":0,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":4,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":10,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":12,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":16,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":20,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":22,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":28,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":36,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":42,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":44,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":48,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":52,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":54,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":60,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":49,"h":1,"j":65,"k":10},{"p":0,"c":5,"r":6,"n":48,"t":1,"i":1,"e":65,"f":10,"g":49,"h":1,"j":49,"k":1},{"p":0,"c":5,"r":7,"n":48,"t":1,"i":1,"e":65,"f":10,"g":50,"h":2,"j":51,"k":3},{"p":0,"c":5,"r":8,"n":48,"t":1,"i":1,"e":65,"f":10,"g":51,"h":3,"j":50,"k":2},{"p":0,"c":5,"r":9,"n":48,"t":1,"i":1,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":0,"c":5,"r":19,"n":48,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":0,"c":5,"r":24,"n":48,"t":1,"i":1,"e":65,"f":10,"g":49,"h":1,"j":48,"k":0},{"p":0,"c":5,"r":25,"n":48,"t":1,"i":1,"e":65,"f":10,"g":50,"h":2,"j":49,"k":1},{"p":0,"c":5,"r":27,"n":48,"t":1,"i":1,"e":65,"f":10,"g":51,"h":3,"j":50,"k":2},{"p":0,"c":5,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":55,"h":7,"j":53,"k":5},{"p":0,"c":5,"r":35,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":38,"n":48,"t":1,"i":1,"e":65,"f":10,"g":48,"h":0,"j":50,"k":2},{"p":0,"c":5,"r":41,"n":48,"t":1,"i":1,"e":65,"f":10,"g":52,"h":4,"j":53,"k":5},{"p":0,"c":5,"r":49,"n":60,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":5,"r":51,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":56,"n":48,"t":1,"i":1,"e":65,"f":10,"g":48,"h":0,"j":50,"k":2},{"p":0,"c":5,"r":59,"n":48,"t":1,"i":1,"e":65,"f":10,"g":52,"h":4,"j":53,"k":5},{"p":1,"c":0,"r":0,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":2,"n":48,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":3,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":6,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":8,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":10,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":13,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":14,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":16,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":19,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":22,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":26,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":29,"n":34,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":31,"n":39,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":34,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":35,"n":48,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":38,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":40,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":42,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":45,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":47,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":48,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":51,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":7,"n":39,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":8,"n":46,"t":1,"i":0,"e":50,"f":2,"g":65,"h":10,"j":65,"k":10},{"p":1,"c":1,"r":12,"n":51,"t":1,"i":0,"e":50,"f":2,"g":65,"h":10,"j":69,"k":14},{"p":1,"c":1,"r":22,"n":67,"t":1,"i":2,"e":51,"f":3,"g":55,"h":7,"j":55,"k":7},{"p":1,"c":1,"r":26,"n":0,"t":0,"i":0,"e":69,"f":14,"g":49,"h":1,"j":50,"k":2},{"p":1,"c":1,"r":28,"n":62,"t":1,"i":2,"e":50,"f":2,"g":50,"h":2,"j":69,"k":14},{"p":1,"c":1,"r":31,"n":51,"t":1,"i":0,"e":50,"f":2,"g":65,"h":10,"j":69,"k":14},{"p":1,"c":1,"r":34,"n":51,"t":1,"i":2,"e":48,"f":0,"g":52,"h":4,"j":66,"k":11},{"p":1,"c":2,"r":4,"n":55,"t":1,"i":2,"e":48,"f":0,"g":56,"h":8,"j":67,"k":12},{"p":1,"c":2,"r":10,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":51,"k":3},{"p":1,"c":2,"r":51,"n":63,"t":1,"i":2,"e":51,"f":3,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":3,"r":0,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":4,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":10,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":12,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":16,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":20,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":22,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":28,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":36,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":42,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":44,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":48,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":52,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":54,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":3,"n":48,"t":1,"i":1,"e":65,"f":10,"g":49,"h":1,"j":65,"k":10},{"p":1,"c":5,"r":6,"n":48,"t":1,"i":1,"e":65,"f":10,"g":49,"h":1,"j":49,"k":1},{"p":1,"c":5,"r":7,"n":48,"t":1,"i":1,"e":65,"f":10,"g":50,"h":2,"j":51,"k":3},{"p":1,"c":5,"r":8,"n":48,"t":1,"i":1,"e":65,"f":10,"g":51,"h":3,"j":50,"k":2},{"p":1,"c":5,"r":9,"n":48,"t":1,"i":1,"e":65,"f":10,"g":52,"h":4,"j":65,"k":10},{"p":1,"c":5,"r":19,"n":48,"t":1,"i":1,"e":65,"f":10,"g":70,"h":15,"j":50,"k":2},{"p":1,"c":5,"r":24,"n":48,"t":1,"i":1,"e":65,"f":10,"g":49,"h":1,"j":48,"k":0},{"p":1,"c":5,"r":25,"n":48,"t":1,"i":1,"e":65,"f":10,"g":50,"h":2,"j":49,"k":1},{"p":1,"c":5,"r":27,"n":48,"t":1,"i":1,"e":65,"f":10,"g":51,"h":3,"j":50,"k":2},{"p":1,"c":5,"r":30,"n":48,"t":1,"i":1,"e":65,"f":10,"g":55,"h":7,"j":53,"k":5},{"p":1,"c":5,"r":35,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":38,"n":48,"t":1,"i":1,"e":65,"f":10,"g":48,"h":0,"j":50,"k":2},{"p":1,"c":5,"r":40,"n":48,"t":1,"i":1,"e":65,"f":10,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":5,"r":41,"n":48,"t":1,"i":1,"e":65,"f":10,"g":52,"h":4,"j":53,"k":5},{"p":1,"c":5,"r":49,"n":60,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":52,"k":4},{"p":1,"c":5,"r":51,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":0,"n":27,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":6,"n":27,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":15,"n":31,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":18,"n":43,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":26,"n":26,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":30,"n":26,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":38,"n":27,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":46,"n":31,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":51,"n":43,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":56,"n":26,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":62,"n":26,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":57,"f":9,"g":48,"h":0,"j":45,"k":-1},{"i_l":0,"r":1,"e":54,"f":6,"g":51,"h":3,"j":51,"k":3},{"i_l":0,"r":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":1,"r":0,"e":69,"f":14,"g":53,"h":5,"j":53,"k":5},{"i_l":1,"r":1,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":1,"r":2,"e":50,"f":2,"g":65,"h":10,"j":65,"k":10},{"i_l":2,"r":0,"e":51,"f":3,"g":56,"h":8,"j":56,"k":8},{"i_l":2,"r":1,"e":50,"f":2,"g":70,"h":15,"j":69,"k":14},{"i_l":2,"r":2,"e":52,"f":4,"g":54,"h":6,"j":49,"k":1},{"i_l":3,"r":0,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":3,"r":1,"e":70,"f":15,"g":70,"h":15,"j":70,"k":15},{"i_l":3,"r":2,"e":53,"f":5,"g":55,"h":7,"j":55,"k":7},{"i_l":4,"r":0,"e":57,"f":9,"g":50,"h":2,"j":45,"k":-1},{"i_l":4,"r":1,"e":69,"f":14,"g":51,"h":3,"j":50,"k":2},{"i_l":4,"r":2,"e":50,"f":2,"g":50,"h":2,"j":65,"k":10},{"i_l":4,"r":3,"e":65,"f":10,"g":70,"h":15,"j":69,"k":14},{"i_l":5,"r":0,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0}],"patterns_and_voices":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.731600,"p":0},{"a":0.189600,"p":0.053200},{"a":0,"p":0.178800},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.410800,"p":0.001000},{"a":0,"p":0.018120},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.066800,"p":0.001000},{"a":0.102000,"p":0.151200},{"a":0.314000,"p":0.223600},{"a":0,"p":0.775600}],[{"a":0,"p":0},{"a":0.560000,"p":0},{"a":0,"p":0.055480},{"a":0,"p":0.218800},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.549600,"p":0.001000},{"a":0.061560,"p":0.040800},{"a":0,"p":0.143600},{"a":0,"p":0.258800}],[{"a":0,"p":0},{"a":0.463600,"p":0.001000},{"a":0,"p":0.062800},{"a":0,"p":0.139600},{"a":0,"p":0.219600}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0,"p":0.400000},{"a":0,"p":0.600000},{"a":0,"p":0.800000},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":82},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":8,"a":1},{"x":0,"y":3,"t":4,"a":1},{"x":0,"y":4,"t":8,"a":1},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":31},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":3,"a":1},{"x":0,"y":3,"v":3,"a":1},{"x":0,"y":4,"v":1,"a":0},{"x":0,"y":5,"v":1,"a":0},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":1,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":77},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":2,"a":1},{"x":2,"y":4,"v":1,"a":1},{"x":2,"y":5,"v":3,"a":1},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":2,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":56},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":4,"a":1},{"x":4,"y":3,"v":3,"a":1},{"x":4,"y":4,"v":2,"a":1},{"x":4,"y":5,"v":4,"a":1},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":2,"a":0},{"x":5,"y":4,"v":3,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/horizon.snibb000066400000000000000000000354551351541346100207560ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"lundstroem","title":"horizon","info":"","master_amp_percent":63,"solo_voice":-1,"solo_track":-1,"track_height":16,"arp":10,"track_highlight_interval":4,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":1,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":2,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":4,"n":46,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":5,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":62,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":7,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":11,"n":46,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":13,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":14,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":15,"n":62,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":1,"n":50,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":2,"n":52,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":3,"n":50,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":4,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":5,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":6,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":7,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":8,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":9,"n":50,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":10,"n":55,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":11,"n":55,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":12,"n":57,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":13,"n":57,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":14,"n":57,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":15,"n":50,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":0,"n":69,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":4,"n":64,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":8,"n":62,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":12,"n":57,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":71,"f":16,"g":53,"h":5,"j":53,"k":5},{"i_l":0,"r":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":0,"r":2,"e":65,"f":10,"g":70,"h":15,"j":51,"k":3},{"i_l":1,"r":0,"e":52,"f":4,"g":50,"h":2,"j":49,"k":1},{"i_l":1,"r":1,"e":54,"f":6,"g":51,"h":3,"j":70,"k":15},{"i_l":1,"r":2,"e":50,"f":2,"g":69,"h":14,"j":69,"k":14},{"i_l":2,"r":0,"e":55,"f":7,"g":56,"h":8,"j":50,"k":2},{"i_l":2,"r":1,"e":65,"f":10,"g":51,"h":3,"j":70,"k":15}],"patterns_and_voices":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.773200,"p":0.813600},{"a":0.419200,"p":1.399600},{"a":0,"p":1.814400}],[{"a":0,"p":0},{"a":0.527200,"p":0.482400},{"a":0.518800,"p":1.020000},{"a":0.373200,"p":1.326400},{"a":0,"p":1.726800}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.773200,"p":0.813600},{"a":0.419200,"p":1.399600},{"a":0,"p":1.814400}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0,"p":0.400000},{"a":0,"p":0.600000},{"a":0,"p":0.800000},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":40},{"x":0,"y":1,"t":1,"a":1},{"x":0,"y":2,"t":1,"a":1},{"x":0,"y":3,"t":1,"a":1},{"x":0,"y":4,"t":1,"a":1},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":50},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":1,"a":1},{"x":0,"y":3,"v":1,"a":0},{"x":0,"y":4,"v":1,"a":0},{"x":0,"y":5,"v":1,"a":0},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":1,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":50},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":1,"a":1},{"x":2,"y":3,"v":1,"a":0},{"x":2,"y":4,"v":1,"a":0},{"x":2,"y":5,"v":1,"a":0},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":1,"a":0},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/kissemisse.snibb000066400000000000000000000632741351541346100214450ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"salkinitzor","title":"kissemisse","info":"","master_amp_percent":50,"solo_voice":-1,"solo_track":-1,"track_height":64,"arp":10,"track_highlight_interval":2,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":29,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":29,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":6,"n":29,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":29,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":12,"n":41,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":14,"n":44,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":16,"n":29,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":19,"n":29,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":22,"n":29,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":25,"n":29,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":28,"n":41,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":29,"n":0,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":49,"k":1},{"p":0,"c":0,"r":32,"n":44,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":35,"n":44,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":38,"n":44,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":41,"n":44,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":44,"n":63,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":46,"n":56,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":48,"n":46,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":51,"n":46,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":54,"n":44,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":57,"n":44,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":0,"r":60,"n":56,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":0,"r":61,"n":5,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":49,"k":1},{"p":0,"c":1,"r":0,"n":36,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":3,"n":36,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":6,"n":36,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":9,"n":36,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":12,"n":46,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":14,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":16,"n":36,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":19,"n":36,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":22,"n":36,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":25,"n":36,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":28,"n":46,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":29,"n":0,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":49,"k":1},{"p":0,"c":1,"r":32,"n":51,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":35,"n":51,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":38,"n":51,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":41,"n":51,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":44,"n":46,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":46,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":48,"n":50,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":51,"n":50,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":54,"n":51,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":57,"n":56,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":45,"k":-1},{"p":0,"c":1,"r":60,"n":53,"t":1,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":70,"k":15},{"p":0,"c":1,"r":61,"n":0,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":49,"k":1},{"p":0,"c":2,"r":0,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":1,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":2,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":3,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":8,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":9,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":10,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":11,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":12,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":14,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":16,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":17,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":18,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":19,"n":17,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":24,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":25,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":26,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":27,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":30,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":32,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":33,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":34,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":35,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":40,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":41,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":42,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":43,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":44,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":46,"n":20,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":48,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":49,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":50,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":51,"n":22,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":56,"n":15,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":57,"n":15,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":58,"n":15,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":59,"n":15,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":62,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":63,"n":62,"t":1,"i":1,"e":51,"f":3,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":3,"r":0,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":6,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":8,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":11,"n":46,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":14,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":16,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":22,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":24,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":27,"n":46,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":29,"n":0,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":49,"k":1},{"p":0,"c":3,"r":32,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":38,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":40,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":43,"n":46,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":46,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":48,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":54,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":56,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":59,"n":46,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":61,"n":0,"t":0,"i":0,"e":70,"f":15,"g":51,"h":3,"j":49,"k":1},{"p":0,"c":4,"r":4,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":12,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":20,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":28,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":36,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":44,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":52,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":60,"n":60,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":0,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":1,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":2,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":3,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":4,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":5,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":6,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":7,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":8,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":5,"r":9,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":10,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":11,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":12,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8},{"p":0,"c":5,"r":13,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":55,"k":7},{"p":0,"c":5,"r":14,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":15,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":16,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":17,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":18,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":19,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":20,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":21,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":22,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":23,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":24,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":5,"r":25,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":26,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":27,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":28,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8},{"p":0,"c":5,"r":32,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":33,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":34,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":35,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":36,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":37,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":38,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":39,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":40,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":5,"r":41,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":42,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":43,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":44,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8},{"p":0,"c":5,"r":45,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":55,"k":7},{"p":0,"c":5,"r":46,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":47,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":48,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":0,"c":5,"r":49,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":50,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":51,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":52,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":53,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":5,"r":54,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":55,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":56,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":5,"r":57,"n":48,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":5,"r":58,"n":48,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":55,"k":7},{"p":0,"c":5,"r":59,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":60,"n":48,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":56,"k":8}],"instrument_effects":[{"i_l":0,"r":0,"e":56,"f":8,"g":52,"h":4,"j":65,"k":10},{"i_l":0,"r":1,"e":50,"f":2,"g":53,"h":5,"j":68,"k":13},{"i_l":0,"r":2,"e":52,"f":4,"g":50,"h":2,"j":49,"k":1},{"i_l":0,"r":3,"e":51,"f":3,"g":65,"h":10,"j":56,"k":8},{"i_l":1,"r":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":2,"r":0,"e":57,"f":9,"g":48,"h":0,"j":48,"k":0},{"i_l":2,"r":1,"e":70,"f":15,"g":53,"h":5,"j":53,"k":5},{"i_l":3,"r":0,"e":57,"f":9,"g":49,"h":1,"j":48,"k":0},{"i_l":3,"r":1,"e":53,"f":5,"g":50,"h":2,"j":50,"k":2}],"patterns_and_voices":[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.041200,"p":0.072400},{"a":0.296000,"p":0.218400},{"a":0,"p":0.258400}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.096400},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.419200,"p":0.001000},{"a":0,"p":0.046400},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0,"p":0.400000},{"a":0,"p":0.600000},{"a":0,"p":0.800000},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":97},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":6,"a":1},{"x":0,"y":3,"t":4,"a":0},{"x":0,"y":4,"t":4,"a":0},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":50},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":3,"a":1},{"x":0,"y":4,"v":2,"a":1},{"x":0,"y":5,"v":1,"a":0},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":1,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":10},{"x":2,"y":1,"v":1,"a":1},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":3,"a":1},{"x":2,"y":4,"v":2,"a":1},{"x":2,"y":5,"v":4,"a":1},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":1,"a":0},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/korvhastig.snibb000066400000000000000000002155701351541346100214450ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"salkinitzor","title":"korvhastighet","info":"","master_amp_percent":50,"solo_voice":-1,"solo_track":-1,"track_height":64,"arp":10,"track_highlight_interval":4,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":20,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":26,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":32,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":38,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":44,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":52,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":56,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":58,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":6,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":12,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":20,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":24,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":26,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":32,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":38,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":44,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":52,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":56,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":58,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":0,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":4,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":10,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":12,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":14,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":16,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":18,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":20,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":22,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":24,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":26,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":28,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":30,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":32,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":34,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":36,"n":38,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":38,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":42,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":44,"n":38,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":46,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":48,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":50,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":52,"n":38,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":54,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":56,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":58,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":60,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":62,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":4,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":8,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":20,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":24,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":26,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":28,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":36,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":40,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":44,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":52,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":56,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":58,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":60,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":62,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":0,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":2,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":4,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":6,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":8,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":10,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":12,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":14,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":16,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":18,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":20,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":22,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":24,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":26,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":28,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":30,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":32,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":34,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":36,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":38,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":40,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":42,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":44,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":46,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":48,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":50,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":52,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":54,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":56,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":58,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":60,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":62,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":0,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":2,"n":60,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":0,"c":5,"r":3,"n":60,"t":1,"i":5,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":0,"c":5,"r":4,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":6,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":7,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":8,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":10,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":11,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":12,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":14,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":15,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":16,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":18,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":19,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":20,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":22,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":23,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":24,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":26,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":27,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":28,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":30,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":31,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":32,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":34,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":35,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":36,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":38,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":39,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":40,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":42,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":43,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":44,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":46,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":47,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":48,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":50,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":51,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":52,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":54,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":55,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":56,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":58,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":59,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":60,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":62,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":63,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":0,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":6,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":12,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":18,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":24,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":26,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":32,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":38,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":44,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":50,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":56,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":58,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":60,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":62,"n":62,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":0,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":6,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":12,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":18,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":24,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":26,"n":69,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":32,"n":69,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":38,"n":69,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":44,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":50,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":56,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":58,"n":62,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":60,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":62,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":0,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":2,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":4,"n":40,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":6,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":10,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":12,"n":40,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":14,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":16,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":18,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":20,"n":40,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":22,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":24,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":26,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":28,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":30,"n":40,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":32,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":34,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":36,"n":41,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":38,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":42,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":44,"n":41,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":46,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":48,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":50,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":52,"n":41,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":54,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":56,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":58,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":60,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":62,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":4,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":8,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":20,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":24,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":26,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":28,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":36,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":40,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":44,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":48,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":50,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":52,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":54,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":56,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":58,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":60,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":62,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":0,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":2,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":4,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":6,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":8,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":10,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":12,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":14,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":16,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":18,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":20,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":22,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":24,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":26,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":28,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":30,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":32,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":34,"n":69,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":36,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":38,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":40,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":42,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":44,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":46,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":48,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":50,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":52,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":54,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":56,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":58,"n":69,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":60,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":62,"n":62,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":0,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":2,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":4,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":6,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":8,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":10,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":12,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":14,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":16,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":18,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":20,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":22,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":24,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":26,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":28,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":30,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":32,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":34,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":36,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":38,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":40,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":42,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":44,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":46,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":48,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":50,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":52,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":54,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":56,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":58,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":60,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":62,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":0,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":1,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":2,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":3,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":4,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":5,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":6,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":7,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":8,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":9,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":10,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":11,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":12,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":13,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":14,"n":59,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":15,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":16,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":17,"n":59,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":18,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":19,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":20,"n":59,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":21,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":22,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":23,"n":59,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":24,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":25,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":26,"n":59,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":27,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":28,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":29,"n":59,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":30,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":31,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":32,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":33,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":34,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":0,"r":35,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":0,"r":36,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":0,"r":37,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":38,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":39,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":40,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":41,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":42,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":43,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":44,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":45,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":46,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":47,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":48,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":49,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":50,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":51,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":52,"n":60,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":53,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":54,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":55,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":56,"n":60,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":57,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":58,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":59,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":60,"n":60,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":61,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":62,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":2,"c":0,"r":63,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":1,"r":0,"n":60,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":8,"n":67,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":32,"n":69,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":40,"n":60,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":10,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":14,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":18,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":22,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":26,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":30,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":34,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":38,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":42,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":46,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":50,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":54,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":58,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":62,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":0,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":0,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":0,"n":0,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":10,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":14,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":18,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":22,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":26,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":30,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":34,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":38,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":42,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":46,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":48,"n":81,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":50,"n":81,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":52,"n":74,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":54,"n":74,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":56,"n":67,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":58,"n":67,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":60,"n":60,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":2,"r":62,"n":60,"t":1,"i":3,"e":70,"f":15,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":0,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":1,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":2,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":3,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":4,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":5,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":6,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":7,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":8,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":9,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":10,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":11,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":12,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":13,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":14,"n":59,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":15,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":16,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":17,"n":59,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":18,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":19,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":20,"n":59,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":21,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":22,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":23,"n":59,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":24,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":25,"n":52,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":26,"n":59,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":27,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":28,"n":52,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":29,"n":59,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":30,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":31,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":32,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":33,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":34,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":4,"c":0,"r":35,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":4,"c":0,"r":36,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":4,"c":0,"r":37,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":38,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":39,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":40,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":41,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":42,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":43,"n":53,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":44,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":45,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":46,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":4,"c":0,"r":47,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":4,"c":0,"r":48,"n":57,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":0,"n":60,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":8,"n":67,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":32,"n":69,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":40,"n":60,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":48,"n":60,"t":1,"i":7,"e":70,"f":15,"g":50,"h":2,"j":49,"k":1},{"p":4,"c":1,"r":56,"n":0,"t":0,"i":0,"e":69,"f":14,"g":50,"h":2,"j":49,"k":1},{"p":4,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":10,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":14,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":18,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":22,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":26,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":30,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":34,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":38,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":42,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":46,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":0,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":4,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":8,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":10,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":16,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":20,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":24,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":26,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":28,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":32,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":36,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":40,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":42,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":44,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":48,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":0,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":2,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":4,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":6,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":8,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":10,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":12,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":14,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":16,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":18,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":20,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":22,"n":52,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":24,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":26,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":28,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":30,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":32,"n":55,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":34,"n":69,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":36,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":38,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":40,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":42,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":44,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":46,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":4,"r":48,"n":57,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":0,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":2,"n":60,"t":1,"i":5,"e":65,"f":10,"g":56,"h":8,"j":65,"k":10},{"p":4,"c":5,"r":3,"n":60,"t":1,"i":5,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":4,"c":5,"r":4,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":6,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":7,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":8,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":10,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":11,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":12,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":14,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":15,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":16,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":18,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":19,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":20,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":22,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":23,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":24,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":26,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":27,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":28,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":30,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":31,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":32,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":34,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":35,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":36,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":38,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":39,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":40,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":42,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":43,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":44,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":46,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":47,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":48,"n":60,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":4,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":6,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":8,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":10,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":12,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":14,"n":72,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":34,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":36,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":38,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":40,"n":72,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":42,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":44,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":0,"r":46,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":0,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":2,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":4,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":6,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":8,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":10,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":12,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":14,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":16,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":18,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":20,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":22,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":24,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":26,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":28,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":30,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":32,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":34,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":36,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":38,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":40,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":42,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":44,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":46,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":48,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":50,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":52,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":54,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":56,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":58,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":60,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":62,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":0,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":4,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":8,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":10,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":12,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":14,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":16,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":18,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":20,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":22,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":24,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":26,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":28,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":30,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":32,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":34,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":36,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":38,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":40,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":42,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":44,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":46,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":48,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":50,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":52,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":54,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":56,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":58,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":60,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":2,"r":62,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":0,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":4,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":6,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":10,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":14,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":18,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":20,"n":62,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":22,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":24,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":26,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":28,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":32,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":36,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":38,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":42,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":46,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":50,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":52,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":54,"n":71,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":56,"n":69,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":58,"n":67,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":60,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":4,"r":62,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":0,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":4,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":8,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":10,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":12,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":14,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":16,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":18,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":20,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":22,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":24,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":26,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":28,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":30,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":32,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":34,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":36,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":38,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":40,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":42,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":44,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":46,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":48,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":50,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":52,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":54,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":56,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":58,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":60,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":2,"r":62,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":4,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":6,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":8,"n":64,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":10,"n":65,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":12,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":14,"n":72,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":34,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":36,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":38,"n":57,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":40,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":42,"n":67,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":44,"n":69,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":0,"r":46,"n":74,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":0,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":4,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":8,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":10,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":12,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":14,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":16,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":18,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":20,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":22,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":24,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":26,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":28,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":30,"n":36,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":32,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":34,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":36,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":38,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":40,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":42,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":44,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":46,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":48,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":50,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":52,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":54,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":56,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":58,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":60,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":7,"c":2,"r":62,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":53,"f":5,"g":50,"h":2,"j":50,"k":2},{"i_l":0,"r":1,"e":50,"f":2,"g":65,"h":10,"j":65,"k":10},{"i_l":0,"r":2,"e":52,"f":4,"g":49,"h":1,"j":49,"k":1},{"i_l":1,"r":0,"e":70,"f":15,"g":70,"h":15,"j":70,"k":15},{"i_l":1,"r":1,"e":57,"f":9,"g":48,"h":0,"j":45,"k":-1},{"i_l":1,"r":2,"e":53,"f":5,"g":51,"h":3,"j":50,"k":2},{"i_l":1,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":2,"r":0,"e":70,"f":15,"g":70,"h":15,"j":70,"k":15},{"i_l":2,"r":1,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":2,"r":2,"e":53,"f":5,"g":51,"h":3,"j":50,"k":2},{"i_l":2,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":3,"r":0,"e":56,"f":8,"g":54,"h":6,"j":50,"k":2},{"i_l":3,"r":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":4,"r":0,"e":56,"f":8,"g":51,"h":3,"j":54,"k":6},{"i_l":4,"r":1,"e":52,"f":4,"g":50,"h":2,"j":49,"k":1},{"i_l":4,"r":2,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"i_l":6,"r":0,"e":51,"f":3,"g":54,"h":6,"j":56,"k":8},{"i_l":6,"r":1,"e":52,"f":4,"g":51,"h":3,"j":50,"k":2},{"i_l":7,"r":0,"e":51,"f":3,"g":54,"h":6,"j":56,"k":8},{"i_l":7,"r":1,"e":52,"f":4,"g":51,"h":3,"j":50,"k":2}],"patterns_and_voices":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[3,3,2,2,2,4,0,1,0,1,6,6,5,7,5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,2,2,2,4,0,1,0,1,6,6,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,2,2,2,4,0,1,0,1,5,5,6,7,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,1,1,1,4,0,0,0,0,6,6,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.773600,"p":0},{"a":0.140400,"p":0.065200},{"a":0,"p":0.148800},{"a":0,"p":0.276400}],[{"a":0,"p":0},{"a":0.750000,"p":0.001000},{"a":0.288120,"p":0.031920},{"a":0,"p":0.071520},{"a":0,"p":0.114400}],[{"a":0,"p":0},{"a":0.750000,"p":0.001000},{"a":0.288120,"p":0.031920},{"a":0,"p":0.071520},{"a":0,"p":0.114400}],[{"a":0,"p":0},{"a":0.852800,"p":0.001000},{"a":0.276400,"p":0.064000},{"a":0,"p":0.119600},{"a":0,"p":0.206400}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.098760,"p":0.051200},{"a":0,"p":0.280400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.471600,"p":0.001000},{"a":0,"p":0.019200},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.344000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.484000,"p":0.538800},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0,"p":0.400000},{"a":0,"p":0.600000},{"a":0,"p":0.800000},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":199},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":4,"a":1},{"x":0,"y":3,"t":4,"a":1},{"x":0,"y":4,"t":4,"a":1},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":59},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":2,"a":1},{"x":0,"y":4,"v":2,"a":1},{"x":0,"y":5,"v":1,"a":0},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":2,"a":1},{"x":1,"y":3,"v":1,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":50},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":2,"a":1},{"x":2,"y":3,"v":3,"a":1},{"x":2,"y":4,"v":4,"a":1},{"x":2,"y":5,"v":2,"a":1},{"x":2,"y":6,"v":4,"a":1},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":1,"a":0},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/laptopmidi.snibb000066400000000000000000001257341351541346100214300ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"salkinitzor","title":"laptopmidipotato","info":"","master_amp_percent":74,"solo_voice":-1,"solo_track":-1,"track_height":32,"arp":10,"track_highlight_interval":4,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":4,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":7,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":11,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":18,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":20,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":22,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":23,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":27,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":30,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":4,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":7,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":0,"c":1,"r":9,"n":48,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":57,"k":9},{"p":0,"c":1,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":13,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":14,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":15,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":20,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":23,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":0,"c":2,"r":0,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":3,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":6,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":9,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":12,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":14,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":16,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":19,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":23,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":24,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":25,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":26,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":27,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":28,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":29,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":30,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":31,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":0,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":3,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":6,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":9,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":12,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":14,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":16,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":19,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":23,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":24,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":25,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":26,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":27,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":28,"n":32,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":29,"n":32,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":30,"n":32,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":31,"n":32,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":4,"r":0,"n":76,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":4,"r":1,"n":84,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":69,"k":14},{"p":0,"c":4,"r":2,"n":64,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":56,"k":8},{"p":0,"c":4,"r":3,"n":86,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":4,"r":4,"n":76,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":0,"c":4,"r":5,"n":84,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":0,"c":4,"r":6,"n":64,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":65,"k":10},{"p":0,"c":4,"r":7,"n":69,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":53,"k":5},{"p":0,"c":4,"r":8,"n":76,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":69,"k":14},{"p":0,"c":4,"r":9,"n":64,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":4,"r":10,"n":69,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":53,"k":5},{"p":0,"c":4,"r":11,"n":86,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":4,"r":12,"n":76,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":0,"c":4,"r":13,"n":84,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":0,"c":4,"r":14,"n":64,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":54,"k":6},{"p":0,"c":4,"r":15,"n":69,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":53,"k":5},{"p":0,"c":4,"r":16,"n":86,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":69,"k":14},{"p":0,"c":4,"r":17,"n":76,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":70,"k":15},{"p":0,"c":4,"r":18,"n":84,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":0,"c":4,"r":19,"n":64,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":0,"c":4,"r":20,"n":69,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":69,"k":14},{"p":0,"c":4,"r":21,"n":86,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":53,"k":5},{"p":0,"c":4,"r":22,"n":76,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":0,"c":4,"r":23,"n":84,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":0,"c":4,"r":24,"n":64,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":65,"k":10},{"p":0,"c":4,"r":25,"n":69,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":69,"k":14},{"p":0,"c":4,"r":26,"n":86,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":53,"k":5},{"p":0,"c":4,"r":27,"n":84,"t":1,"i":4,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":0,"c":4,"r":28,"n":76,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":70,"k":15},{"p":0,"c":4,"r":29,"n":64,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":0,"c":4,"r":30,"n":71,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":53,"k":5},{"p":0,"c":4,"r":31,"n":86,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":1,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":4,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":7,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":9,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":10,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":11,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":12,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":17,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":18,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":19,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":20,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":30,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":4,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":7,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":1,"c":1,"r":9,"n":48,"t":1,"i":1,"e":65,"f":10,"g":56,"h":8,"j":57,"k":9},{"p":1,"c":1,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":13,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":14,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":15,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":20,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":23,"n":48,"t":1,"i":1,"e":65,"f":10,"g":53,"h":5,"j":54,"k":6},{"p":1,"c":1,"r":30,"n":48,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":0,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":3,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":6,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":9,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":12,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":14,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":16,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":17,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":18,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":19,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":20,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":21,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":22,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":23,"n":29,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":0,"n":26,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":3,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":6,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":9,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":12,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":14,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":16,"n":35,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":17,"n":35,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":18,"n":32,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":19,"n":30,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":20,"n":35,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":21,"n":35,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":22,"n":35,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":23,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":0,"n":76,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":1,"c":4,"r":1,"n":84,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":69,"k":14},{"p":1,"c":4,"r":2,"n":64,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":56,"k":8},{"p":1,"c":4,"r":3,"n":86,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":1,"c":4,"r":4,"n":76,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":54,"k":6},{"p":1,"c":4,"r":5,"n":84,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":1,"c":4,"r":6,"n":64,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":65,"k":10},{"p":1,"c":4,"r":7,"n":69,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":53,"k":5},{"p":1,"c":4,"r":8,"n":76,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":69,"k":14},{"p":1,"c":4,"r":9,"n":64,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":1,"c":4,"r":10,"n":69,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":53,"k":5},{"p":1,"c":4,"r":11,"n":86,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":1,"c":4,"r":12,"n":76,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":65,"k":10},{"p":1,"c":4,"r":13,"n":84,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":56,"k":8},{"p":1,"c":4,"r":14,"n":64,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":54,"k":6},{"p":1,"c":4,"r":15,"n":69,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":53,"k":5},{"p":1,"c":4,"r":16,"n":86,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":69,"k":14},{"p":1,"c":4,"r":17,"n":76,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":70,"k":15},{"p":1,"c":4,"r":18,"n":84,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":54,"k":6},{"p":1,"c":4,"r":19,"n":64,"t":1,"i":4,"e":65,"f":10,"g":70,"h":15,"j":65,"k":10},{"p":1,"c":4,"r":20,"n":69,"t":1,"i":4,"e":65,"f":10,"g":55,"h":7,"j":69,"k":14},{"p":1,"c":4,"r":21,"n":86,"t":1,"i":4,"e":65,"f":10,"g":69,"h":14,"j":53,"k":5},{"p":1,"c":4,"r":22,"n":76,"t":1,"i":4,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":1,"c":4,"r":23,"n":84,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":70,"k":15},{"p":2,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":1,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":3,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":4,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":5,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":7,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":9,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":10,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":11,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":12,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":13,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":14,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":15,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":17,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":18,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":19,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":20,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":21,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":22,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":23,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":24,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":25,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":26,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":27,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":28,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":29,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":30,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":31,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":15,"n":0,"t":0,"i":0,"e":68,"f":13,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":0,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":1,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":2,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":3,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":4,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":5,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":6,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":7,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":8,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":9,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":10,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":11,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":12,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":13,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":14,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":15,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":16,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":17,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":18,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":19,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":20,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":21,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":22,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":23,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":24,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":25,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":26,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":27,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":28,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":29,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":30,"n":13,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":31,"n":12,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":0,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":1,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":2,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":3,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":4,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":5,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":6,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":7,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":8,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":9,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":10,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":11,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":12,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":13,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":14,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":15,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":16,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":17,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":18,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":19,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":20,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":21,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":22,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":23,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":24,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":25,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":26,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":27,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":28,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":29,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":30,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":31,"n":19,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":0,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":1,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":2,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":3,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":4,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":5,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":6,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":7,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":8,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":9,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":10,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":11,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":12,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":13,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":14,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":15,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":16,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":17,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":18,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":19,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":20,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":21,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":22,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":23,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":24,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":25,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":26,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":27,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":28,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":29,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":30,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":31,"n":72,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":7,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":9,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":10,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":11,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":12,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":19,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":22,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":25,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":28,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":30,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":0,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":2,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":6,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":7,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":8,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":9,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":10,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":11,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":12,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":16,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":19,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":22,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":25,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":28,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":2,"r":30,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":0,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":6,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":7,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":8,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":9,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":10,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":11,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":12,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":16,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":19,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":22,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":25,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":28,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":30,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":0,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":2,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":6,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":7,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":8,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":9,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":10,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":11,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":12,"n":60,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":16,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":19,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":22,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":26,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":0,"r":30,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":0,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":2,"n":17,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":6,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":7,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":8,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":9,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":10,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":11,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":12,"n":18,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":16,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":19,"n":20,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":22,"n":21,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":26,"n":21,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":2,"r":30,"n":21,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":0,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":2,"n":24,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":6,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":7,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":8,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":9,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":10,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":11,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":12,"n":25,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":16,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":19,"n":27,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":22,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":26,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":3,"r":30,"n":28,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":57,"f":9,"g":48,"h":0,"j":48,"k":0},{"i_l":0,"r":1,"e":70,"f":15,"g":55,"h":7,"j":53,"k":5},{"i_l":1,"r":0,"e":57,"f":9,"g":49,"h":1,"j":48,"k":0},{"i_l":1,"r":1,"e":70,"f":15,"g":52,"h":4,"j":54,"k":6},{"i_l":2,"r":0,"e":57,"f":9,"g":49,"h":1,"j":48,"k":0},{"i_l":2,"r":1,"e":70,"f":15,"g":52,"h":4,"j":54,"k":6},{"i_l":3,"r":0,"e":54,"f":6,"g":65,"h":10,"j":55,"k":7},{"i_l":3,"r":1,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"i_l":4,"r":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":5,"r":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":5,"r":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1}],"patterns_and_voices":[5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,1,2,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.807600,"p":0},{"a":0.416800,"p":0.123600},{"a":0,"p":0.173200},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.019200},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.822000,"p":0.001000},{"a":0.176000,"p":0.062800},{"a":0,"p":0.267200},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.692000,"p":0},{"a":0,"p":0.044800},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.678400,"p":0.001000},{"a":0,"p":0.083600},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0.768000,"p":0.396800},{"a":-0.904000,"p":0.662400},{"a":0.655200,"p":0.943200},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":183},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":4,"a":1},{"x":0,"y":3,"t":4,"a":1},{"x":0,"y":4,"t":4,"a":1},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":88},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":5,"a":1},{"x":0,"y":4,"v":3,"a":1},{"x":0,"y":5,"v":2,"a":1},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":1,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":50},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":2,"a":1},{"x":2,"y":4,"v":4,"a":1},{"x":2,"y":5,"v":3,"a":1},{"x":2,"y":6,"v":4,"a":1},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":1,"a":0},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/projectcart.snibb000066400000000000000000001113641351541346100216000ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"salkinitzor","title":"projectcart","info":"","master_amp_percent":50,"solo_voice":-1,"solo_track":-1,"track_height":48,"arp":10,"track_highlight_interval":3,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":15,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":18,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":21,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":27,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":30,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":33,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":36,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":39,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":42,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":44,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":46,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":1,"n":36,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":2,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":53,"k":5},{"p":0,"c":1,"r":3,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":4,"n":36,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":5,"n":48,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":6,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":7,"n":36,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":49,"k":1},{"p":0,"c":1,"r":8,"n":48,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":55,"k":7},{"p":0,"c":1,"r":9,"n":24,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":52,"k":4},{"p":0,"c":1,"r":10,"n":36,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":55,"k":7},{"p":0,"c":1,"r":11,"n":51,"t":1,"i":0,"e":51,"f":3,"g":56,"h":8,"j":56,"k":8},{"p":0,"c":1,"r":12,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":13,"n":36,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":14,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":53,"k":5},{"p":0,"c":1,"r":15,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":16,"n":36,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":17,"n":48,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":18,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":19,"n":36,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":49,"k":1},{"p":0,"c":1,"r":20,"n":48,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":55,"k":7},{"p":0,"c":1,"r":21,"n":24,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":52,"k":4},{"p":0,"c":1,"r":22,"n":36,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":55,"k":7},{"p":0,"c":1,"r":23,"n":51,"t":1,"i":0,"e":51,"f":3,"g":56,"h":8,"j":56,"k":8},{"p":0,"c":1,"r":24,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":25,"n":36,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":26,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":53,"k":5},{"p":0,"c":1,"r":27,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":28,"n":36,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":29,"n":48,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":30,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":31,"n":36,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":49,"k":1},{"p":0,"c":1,"r":32,"n":48,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":55,"k":7},{"p":0,"c":1,"r":33,"n":24,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":52,"k":4},{"p":0,"c":1,"r":34,"n":36,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":55,"k":7},{"p":0,"c":1,"r":35,"n":51,"t":1,"i":0,"e":51,"f":3,"g":56,"h":8,"j":56,"k":8},{"p":0,"c":1,"r":36,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":37,"n":36,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":38,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":53,"k":5},{"p":0,"c":1,"r":39,"n":24,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":0,"c":1,"r":40,"n":36,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":49,"k":1},{"p":0,"c":1,"r":41,"n":48,"t":1,"i":0,"e":54,"f":6,"g":69,"h":14,"j":55,"k":7},{"p":0,"c":1,"r":42,"n":24,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":0,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":1,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":2,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":4,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":5,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":8,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":9,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":10,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":11,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":12,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":13,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":14,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":16,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":17,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":20,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":21,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":22,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":23,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":24,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":25,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":26,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":28,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":29,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":32,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":33,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":34,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":35,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":36,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":37,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":38,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":40,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":41,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":42,"n":12,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":43,"n":30,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":44,"n":42,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":45,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":46,"n":42,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":47,"n":54,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":2,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":3,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":5,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":9,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":14,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":15,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":17,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":21,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":26,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":27,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":29,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":33,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":38,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":39,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":0,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":9,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":24,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":42,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":0,"n":48,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":54,"k":6},{"p":1,"c":1,"r":1,"n":36,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":1,"r":2,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":50,"k":2},{"p":1,"c":1,"r":3,"n":0,"t":0,"i":0,"e":54,"f":6,"g":52,"h":4,"j":51,"k":3},{"p":1,"c":1,"r":4,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":1,"r":5,"n":36,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":54,"k":6},{"p":1,"c":1,"r":6,"n":0,"t":0,"i":0,"e":54,"f":6,"g":51,"h":3,"j":50,"k":2},{"p":1,"c":1,"r":7,"n":0,"t":0,"i":0,"e":54,"f":6,"g":54,"h":6,"j":51,"k":3},{"p":1,"c":1,"r":8,"n":48,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":54,"k":6},{"p":1,"c":1,"r":9,"n":36,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":50,"k":2},{"p":1,"c":1,"r":10,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":1,"r":11,"n":36,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":52,"k":4},{"p":1,"c":1,"r":12,"n":48,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":57,"k":9},{"p":1,"c":1,"r":13,"n":36,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":56,"k":8},{"p":1,"c":1,"r":14,"n":48,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":50,"k":2},{"p":1,"c":1,"r":15,"n":0,"t":0,"i":0,"e":54,"f":6,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":1,"r":16,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":52,"k":4},{"p":1,"c":1,"r":17,"n":36,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":54,"k":6},{"p":1,"c":1,"r":18,"n":0,"t":0,"i":0,"e":54,"f":6,"g":51,"h":3,"j":57,"k":9},{"p":1,"c":1,"r":19,"n":0,"t":0,"i":0,"e":54,"f":6,"g":52,"h":4,"j":50,"k":2},{"p":1,"c":1,"r":20,"n":48,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":51,"k":3},{"p":1,"c":1,"r":21,"n":36,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":1,"r":22,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":50,"k":2},{"p":1,"c":1,"r":23,"n":36,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":51,"k":3},{"p":1,"c":1,"r":24,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":56,"k":8},{"p":1,"c":1,"r":25,"n":36,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":57,"k":9},{"p":1,"c":1,"r":26,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":1,"r":27,"n":36,"t":0,"i":0,"e":54,"f":6,"g":52,"h":4,"j":49,"k":1},{"p":1,"c":1,"r":28,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":50,"k":2},{"p":1,"c":1,"r":29,"n":36,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":54,"k":6},{"p":1,"c":1,"r":30,"n":0,"t":0,"i":0,"e":54,"f":6,"g":49,"h":1,"j":51,"k":3},{"p":1,"c":1,"r":31,"n":0,"t":0,"i":0,"e":54,"f":6,"g":51,"h":3,"j":57,"k":9},{"p":1,"c":1,"r":32,"n":48,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":56,"k":8},{"p":1,"c":1,"r":33,"n":36,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":49,"k":1},{"p":1,"c":1,"r":34,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":56,"k":8},{"p":1,"c":1,"r":35,"n":36,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":57,"k":9},{"p":1,"c":1,"r":36,"n":48,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":50,"k":2},{"p":1,"c":1,"r":37,"n":36,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":51,"k":3},{"p":1,"c":1,"r":38,"n":48,"t":1,"i":0,"e":54,"f":6,"g":49,"h":1,"j":52,"k":4},{"p":1,"c":1,"r":39,"n":0,"t":0,"i":0,"e":54,"f":6,"g":51,"h":3,"j":57,"k":9},{"p":1,"c":1,"r":40,"n":48,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":56,"k":8},{"p":1,"c":1,"r":41,"n":36,"t":1,"i":0,"e":54,"f":6,"g":52,"h":4,"j":49,"k":1},{"p":1,"c":1,"r":42,"n":60,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":50,"k":2},{"p":1,"c":1,"r":43,"n":55,"t":1,"i":0,"e":54,"f":6,"g":50,"h":2,"j":51,"k":3},{"p":1,"c":1,"r":44,"n":51,"t":1,"i":0,"e":54,"f":6,"g":51,"h":3,"j":52,"k":4},{"p":1,"c":1,"r":45,"n":48,"t":1,"i":7,"e":54,"f":6,"g":52,"h":4,"j":53,"k":5},{"p":1,"c":1,"r":46,"n":51,"t":1,"i":0,"e":54,"f":6,"g":53,"h":5,"j":54,"k":6},{"p":1,"c":1,"r":47,"n":55,"t":1,"i":0,"e":54,"f":6,"g":54,"h":6,"j":55,"k":7},{"p":1,"c":2,"r":0,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":1,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":2,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":4,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":5,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":8,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":9,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":10,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":11,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":12,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":13,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":14,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":16,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":17,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":20,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":21,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":22,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":23,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":24,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":25,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":26,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":28,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":29,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":32,"n":36,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":33,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":34,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":35,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":36,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":37,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":38,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":40,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":41,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":43,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":44,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":45,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":46,"n":12,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":47,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":0,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":3,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":6,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":9,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":12,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":15,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":18,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":21,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":24,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":27,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":30,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":33,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":36,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":39,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":42,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":45,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":0,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":6,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":12,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":18,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":24,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":30,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":36,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":42,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":0,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":1,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":2,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":3,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":4,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":5,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":6,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":7,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":8,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":9,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":10,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":11,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":12,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":13,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":14,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":15,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":16,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":17,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":18,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":19,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":20,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":21,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":22,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":23,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":24,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":25,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":26,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":27,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":28,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":29,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":30,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":31,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":32,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":33,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":34,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":35,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":36,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":37,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":38,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":39,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":40,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":41,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":1,"r":42,"n":24,"t":1,"i":0,"e":70,"f":15,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":1,"r":43,"n":36,"t":1,"i":0,"e":69,"f":14,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":44,"n":48,"t":1,"i":0,"e":51,"f":3,"g":57,"h":9,"j":56,"k":8},{"p":2,"c":1,"r":45,"n":24,"t":1,"i":0,"e":54,"f":6,"g":70,"h":15,"j":69,"k":14},{"p":2,"c":1,"r":46,"n":36,"t":1,"i":0,"e":52,"f":4,"g":69,"h":14,"j":55,"k":7},{"p":2,"c":1,"r":47,"n":48,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":70,"k":15},{"p":2,"c":5,"r":2,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":5,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":8,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":11,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":14,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":17,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":20,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":23,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":26,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":29,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":32,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":35,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":38,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":41,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":44,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":47,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":2,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":5,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":8,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":11,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":14,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":17,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":20,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":23,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":26,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":29,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":32,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":35,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":38,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":41,"n":48,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":42,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":5,"r":43,"n":48,"t":1,"i":4,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":3,"c":5,"r":44,"n":48,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":3,"c":5,"r":45,"n":48,"t":1,"i":4,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":3,"c":5,"r":46,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":47,"n":48,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1}],"instrument_effects":[{"i_l":0,"r":0,"e":54,"f":6,"g":51,"h":3,"j":52,"k":4},{"i_l":0,"r":1,"e":51,"f":3,"g":69,"h":14,"j":57,"k":9},{"i_l":0,"r":2,"e":53,"f":5,"g":50,"h":2,"j":50,"k":2},{"i_l":1,"r":0,"e":54,"f":6,"g":52,"h":4,"j":51,"k":3},{"i_l":1,"r":1,"e":56,"f":8,"g":56,"h":8,"j":49,"k":1},{"i_l":2,"r":0,"e":50,"f":2,"g":50,"h":2,"j":53,"k":5},{"i_l":2,"r":1,"e":52,"f":4,"g":50,"h":2,"j":49,"k":1},{"i_l":3,"r":0,"e":70,"f":15,"g":65,"h":10,"j":57,"k":9},{"i_l":3,"r":1,"e":57,"f":9,"g":48,"h":0,"j":45,"k":-1},{"i_l":3,"r":2,"e":53,"f":5,"g":51,"h":3,"j":50,"k":2},{"i_l":3,"r":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":4,"r":0,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":4,"r":1,"e":53,"f":5,"g":50,"h":2,"j":50,"k":2},{"i_l":5,"r":0,"e":50,"f":2,"g":51,"h":3,"j":69,"k":14},{"i_l":5,"r":1,"e":52,"f":4,"g":49,"h":1,"j":49,"k":1},{"i_l":5,"r":2,"e":56,"f":8,"g":70,"h":15,"j":49,"k":1}],"patterns_and_voices":[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,3,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.800000,"p":0},{"a":0.094040,"p":0.053640},{"a":0,"p":0.217200},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.096000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.660800,"p":0.096400},{"a":0.117600,"p":0.127200},{"a":0,"p":0.270400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.102800,"p":0.074040},{"a":0,"p":0.206400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.040760,"p":0.132240},{"a":0,"p":0.238400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.104800,"p":0.659200},{"a":0.300000,"p":0.914880},{"a":0.155200,"p":1.266800},{"a":0,"p":1.382800}],[{"a":0,"p":0},{"a":0.544400,"p":0.001000},{"a":0,"p":0.042400},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0.676000,"p":0.292800},{"a":-0.816000,"p":0.600000},{"a":0.482400,"p":0.894400},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":95},{"x":0,"y":1,"t":5,"a":1},{"x":0,"y":2,"t":5,"a":1},{"x":0,"y":3,"t":5,"a":1},{"x":0,"y":4,"t":4,"a":0},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":50},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":1,"a":1},{"x":0,"y":4,"v":3,"a":1},{"x":0,"y":5,"v":2,"a":1},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":4,"a":1},{"x":1,"y":3,"v":3,"a":0},{"x":1,"y":4,"v":8,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":47},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":3,"a":1},{"x":2,"y":4,"v":2,"a":1},{"x":2,"y":5,"v":4,"a":1},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":1,"a":0},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]} snibbetracker-1.1.1/res/demos/websnacks.snibb000066400000000000000000000635561351541346100212510ustar00rootroot00000000000000{"build":20,"file_version":4,"author":"lundstroem","title":"websnacks","info":"demo","master_amp_percent":90,"solo_voice":-1,"solo_track":-1,"track_height":32,"arp":10,"track_highlight_interval":4,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":2,"n":43,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":4,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":14,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":16,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":18,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":20,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":22,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":26,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":28,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":30,"n":43,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":0,"t":0,"i":0,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":0,"n":48,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":2,"n":55,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":4,"n":60,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":6,"n":62,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":8,"n":48,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":10,"n":64,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":12,"n":60,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":14,"n":48,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":16,"n":41,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":18,"n":53,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":20,"n":60,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":22,"n":62,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":24,"n":41,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":26,"n":64,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":28,"n":60,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":0,"r":30,"n":55,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":1,"c":1,"r":0,"n":55,"t":1,"i":8,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":4,"n":54,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":1,"r":11,"n":0,"t":0,"i":0,"e":52,"f":4,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":12,"n":53,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":14,"n":52,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":18,"n":48,"t":1,"i":8,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":20,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":51,"k":3},{"p":1,"c":1,"r":23,"n":0,"t":0,"i":0,"e":52,"f":4,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":24,"n":48,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":26,"n":50,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":1,"r":28,"n":0,"t":0,"i":0,"e":52,"f":4,"g":50,"h":2,"j":50,"k":2},{"p":1,"c":2,"r":0,"n":24,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":2,"n":24,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":4,"n":36,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":6,"n":24,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":8,"n":24,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":10,"n":24,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":12,"n":36,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":14,"n":24,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":16,"n":29,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":18,"n":29,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":20,"n":41,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":22,"n":29,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":24,"n":29,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":26,"n":29,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":28,"n":41,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":2,"r":30,"n":29,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":0,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":4,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":8,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":12,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":16,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":20,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":24,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":3,"r":28,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":0,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":4,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":8,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":12,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":16,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":20,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":24,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":28,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":4,"r":30,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":4,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":12,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":20,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":5,"r":28,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":0,"n":36,"t":1,"i":0,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":0,"r":2,"n":43,"t":1,"i":0,"e":65,"f":10,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":0,"r":4,"n":48,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":2,"c":0,"r":6,"n":50,"t":1,"i":0,"e":65,"f":10,"g":53,"h":5,"j":53,"k":5},{"p":2,"c":0,"r":8,"n":36,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":2,"c":0,"r":10,"n":52,"t":1,"i":0,"e":65,"f":10,"g":54,"h":6,"j":54,"k":6},{"p":2,"c":0,"r":12,"n":48,"t":1,"i":0,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":2,"c":0,"r":14,"n":36,"t":1,"i":0,"e":65,"f":10,"g":55,"h":7,"j":55,"k":7},{"p":2,"c":0,"r":16,"n":29,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":18,"n":41,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":56,"k":8},{"p":2,"c":0,"r":20,"n":48,"t":1,"i":0,"e":65,"f":10,"g":57,"h":9,"j":57,"k":9},{"p":2,"c":0,"r":22,"n":50,"t":1,"i":0,"e":65,"f":10,"g":57,"h":9,"j":57,"k":9},{"p":2,"c":0,"r":24,"n":29,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":2,"c":0,"r":26,"n":52,"t":1,"i":0,"e":65,"f":10,"g":65,"h":10,"j":65,"k":10},{"p":2,"c":0,"r":28,"n":48,"t":1,"i":0,"e":65,"f":10,"g":66,"h":11,"j":66,"k":11},{"p":2,"c":0,"r":30,"n":43,"t":1,"i":0,"e":65,"f":10,"g":66,"h":11,"j":66,"k":11},{"p":2,"c":1,"r":0,"n":55,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":12,"n":59,"t":1,"i":8,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":14,"n":55,"t":1,"i":8,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":18,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":50,"k":2},{"p":2,"c":3,"r":0,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":8,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":10,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":16,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":24,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":26,"n":24,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":0,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":2,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":4,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":6,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":8,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":10,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":12,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":14,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":16,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":18,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":20,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":22,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":24,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":26,"n":28,"t":1,"i":7,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":28,"n":28,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":4,"r":30,"n":31,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":4,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":12,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":20,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":28,"n":47,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":29,"n":43,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":30,"n":40,"t":1,"i":6,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":0,"n":36,"t":1,"i":0,"e":65,"f":10,"g":67,"h":12,"j":67,"k":12},{"p":3,"c":0,"r":2,"n":43,"t":1,"i":0,"e":65,"f":10,"g":67,"h":12,"j":67,"k":12},{"p":3,"c":0,"r":4,"n":48,"t":1,"i":0,"e":65,"f":10,"g":68,"h":13,"j":68,"k":13},{"p":3,"c":0,"r":6,"n":50,"t":1,"i":0,"e":65,"f":10,"g":68,"h":13,"j":68,"k":13},{"p":3,"c":0,"r":8,"n":36,"t":1,"i":0,"e":65,"f":10,"g":69,"h":14,"j":69,"k":14},{"p":3,"c":0,"r":10,"n":52,"t":1,"i":0,"e":65,"f":10,"g":69,"h":14,"j":69,"k":14},{"p":3,"c":0,"r":12,"n":48,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":14,"n":36,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":16,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":18,"n":41,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":20,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":22,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":24,"n":29,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":26,"n":52,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":28,"n":48,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":30,"n":43,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":0,"n":76,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":16,"n":72,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":24,"n":67,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":4,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":12,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":20,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":5,"r":28,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":0,"n":76,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":16,"n":72,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":1,"r":24,"n":79,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":4,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":12,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":20,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":28,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":4,"c":5,"r":30,"n":26,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":0,"n":76,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":16,"n":72,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":5,"c":1,"r":24,"n":74,"t":1,"i":9,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":0,"n":55,"t":1,"i":8,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":12,"n":59,"t":1,"i":8,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":14,"n":57,"t":1,"i":8,"e":51,"f":3,"g":45,"h":-1,"j":45,"k":-1},{"p":6,"c":1,"r":18,"n":0,"t":0,"i":0,"e":52,"f":4,"g":51,"h":3,"j":50,"k":2}],"instrument_effects":[{"i_l":0,"r":0,"e":50,"f":2,"g":54,"h":6,"j":67,"k":12},{"i_l":0,"r":1,"e":54,"f":6,"g":49,"h":1,"j":53,"k":5},{"i_l":0,"r":2,"e":49,"f":1,"g":51,"h":3,"j":53,"k":5},{"i_l":1,"r":0,"e":70,"f":15,"g":50,"h":2,"j":49,"k":1},{"i_l":1,"r":1,"e":65,"f":10,"g":70,"h":15,"j":68,"k":13},{"i_l":2,"r":0,"e":65,"f":10,"g":70,"h":15,"j":68,"k":13},{"i_l":2,"r":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":3,"r":0,"e":65,"f":10,"g":68,"h":13,"j":70,"k":15},{"i_l":4,"r":0,"e":65,"f":10,"g":68,"h":13,"j":70,"k":15},{"i_l":5,"r":0,"e":57,"f":9,"g":48,"h":0,"j":45,"k":-1},{"i_l":5,"r":1,"e":65,"f":10,"g":68,"h":13,"j":70,"k":15},{"i_l":6,"r":0,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":6,"r":1,"e":70,"f":15,"g":49,"h":1,"j":45,"k":-1},{"i_l":7,"r":0,"e":65,"f":10,"g":70,"h":15,"j":68,"k":13},{"i_l":8,"r":0,"e":51,"f":3,"g":53,"h":5,"j":53,"k":5},{"i_l":8,"r":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"i_l":8,"r":2,"e":54,"f":6,"g":57,"h":9,"j":49,"k":1},{"i_l":8,"r":3,"e":50,"f":2,"g":53,"h":5,"j":57,"k":9},{"i_l":9,"r":0,"e":57,"f":9,"g":45,"h":-1,"j":48,"k":0},{"i_l":9,"r":1,"e":50,"f":2,"g":53,"h":5,"j":57,"k":9},{"i_l":9,"r":2,"e":55,"f":7,"g":56,"h":8,"j":55,"k":7}],"patterns_and_voices":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[2,3,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,6,3,4,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,3,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.519600,"p":0.009440},{"a":0,"p":0.222800},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.907600,"p":0.004360},{"a":0,"p":0.047960},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.249520,"p":0.006840},{"a":0,"p":0.029360},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.267240,"p":0.012920},{"a":0,"p":0.189600},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":1,"p":0.008760},{"a":0,"p":0.390000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.385000,"p":0.005320},{"a":0,"p":0.114680},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.678800,"p":0.001000},{"a":0,"p":0.243600},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.093920,"p":0.006200},{"a":0,"p":0.029360},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.376480,"p":0.015600},{"a":0.219480,"p":0.489600},{"a":0,"p":0.646800},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.080400,"p":0.003320},{"a":0,"p":0.657200},{"a":0,"p":0.706800},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0,"p":0.400000},{"a":0,"p":0.600000},{"a":0,"p":0.800000},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":120},{"x":0,"y":1,"t":4,"a":1},{"x":0,"y":2,"t":4,"a":1},{"x":0,"y":3,"t":4,"a":1},{"x":0,"y":4,"t":4,"a":1},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":44},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":4,"a":1},{"x":0,"y":3,"v":3,"a":1},{"x":0,"y":4,"v":2,"a":1},{"x":0,"y":5,"v":4,"a":1},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":15,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":3,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":74},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":0,"a":1},{"x":2,"y":3,"v":0,"a":0},{"x":2,"y":4,"v":1,"a":0},{"x":2,"y":5,"v":1,"a":0},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":5,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":1,"a":0},{"x":4,"y":4,"v":1,"a":0},{"x":4,"y":5,"v":1,"a":0},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/demos/wrestchest.snibb000066400000000000000000000737551351541346100214660ustar00rootroot00000000000000{"build":19,"file_version":4,"author":"rotsak","title":"wrestchest","info":"","master_amp_percent":40,"solo_voice":-1,"solo_track":-1,"track_height":32,"arp":10,"track_highlight_interval":2,"active_tempo_column":0,"nodes":[{"p":0,"c":0,"r":0,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":1,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":3,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":5,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":6,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":8,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":9,"n":55,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":10,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":12,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":13,"n":55,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":15,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":16,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":17,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":19,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":21,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":22,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":24,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":25,"n":55,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":26,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":28,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":29,"n":55,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":0,"r":31,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":0,"n":36,"t":1,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2},{"p":0,"c":1,"r":1,"n":38,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":3,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":51,"k":3},{"p":0,"c":1,"r":5,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":8,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":10,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":12,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":14,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":16,"n":31,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":18,"n":19,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":22,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":25,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":28,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":30,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":1,"r":31,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":3,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":4,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":6,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":10,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":16,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":19,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":20,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":22,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":26,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":2,"r":28,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":3,"r":2,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":5,"n":57,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":8,"n":55,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":12,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":16,"n":50,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":22,"n":53,"t":1,"i":0,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":0,"c":3,"r":28,"n":60,"t":1,"i":0,"e":51,"f":3,"g":53,"h":5,"j":53,"k":5},{"p":0,"c":3,"r":30,"n":0,"t":0,"i":0,"e":52,"f":4,"g":53,"h":5,"j":51,"k":3},{"p":0,"c":4,"r":2,"n":60,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":4,"r":5,"n":62,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":4,"r":8,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":4,"r":12,"n":62,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":4,"r":16,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":4,"r":22,"n":48,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":4,"r":28,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":0,"c":5,"r":0,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":3,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":6,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":9,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":12,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":15,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":18,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":21,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":24,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":27,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":0,"c":5,"r":30,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":1,"c":0,"r":0,"n":69,"t":1,"i":5,"e":70,"f":15,"g":70,"h":15,"j":51,"k":3},{"p":1,"c":0,"r":1,"n":62,"t":1,"i":0,"e":67,"f":12,"g":56,"h":8,"j":52,"k":4},{"p":1,"c":0,"r":2,"n":65,"t":1,"i":4,"e":54,"f":6,"g":55,"h":7,"j":55,"k":7},{"p":1,"c":0,"r":3,"n":67,"t":1,"i":0,"e":69,"f":14,"g":68,"h":13,"j":53,"k":5},{"p":1,"c":0,"r":4,"n":69,"t":1,"i":4,"e":70,"f":15,"g":70,"h":15,"j":51,"k":3},{"p":1,"c":0,"r":5,"n":69,"t":1,"i":5,"e":66,"f":11,"g":57,"h":9,"j":50,"k":2},{"p":1,"c":0,"r":6,"n":62,"t":1,"i":4,"e":53,"f":5,"g":56,"h":8,"j":52,"k":4},{"p":1,"c":0,"r":7,"n":65,"t":1,"i":4,"e":67,"f":12,"g":68,"h":13,"j":53,"k":5},{"p":1,"c":0,"r":8,"n":67,"t":1,"i":5,"e":69,"f":14,"g":70,"h":15,"j":55,"k":7},{"p":1,"c":0,"r":9,"n":69,"t":1,"i":0,"e":53,"f":5,"g":54,"h":6,"j":51,"k":3},{"p":1,"c":0,"r":10,"n":62,"t":1,"i":4,"e":70,"f":15,"g":57,"h":9,"j":52,"k":4},{"p":1,"c":0,"r":11,"n":69,"t":1,"i":0,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":1,"c":0,"r":12,"n":65,"t":1,"i":4,"e":69,"f":14,"g":56,"h":8,"j":51,"k":3},{"p":1,"c":0,"r":13,"n":67,"t":1,"i":4,"e":53,"f":5,"g":69,"h":14,"j":57,"k":9},{"p":1,"c":0,"r":14,"n":69,"t":1,"i":0,"e":66,"f":11,"g":70,"h":15,"j":52,"k":4},{"p":1,"c":0,"r":15,"n":62,"t":1,"i":4,"e":70,"f":15,"g":57,"h":9,"j":56,"k":8},{"p":1,"c":0,"r":16,"n":65,"t":1,"i":5,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":1,"c":0,"r":17,"n":67,"t":1,"i":0,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":1,"c":0,"r":18,"n":69,"t":1,"i":4,"e":54,"f":6,"g":70,"h":15,"j":70,"k":15},{"p":1,"c":0,"r":19,"n":62,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":48,"k":0},{"p":1,"c":0,"r":20,"n":69,"t":1,"i":5,"e":54,"f":6,"g":56,"h":8,"j":52,"k":4},{"p":1,"c":0,"r":21,"n":62,"t":1,"i":0,"e":69,"f":14,"g":55,"h":7,"j":53,"k":5},{"p":1,"c":0,"r":22,"n":69,"t":1,"i":5,"e":67,"f":12,"g":69,"h":14,"j":56,"k":8},{"p":1,"c":0,"r":23,"n":67,"t":1,"i":4,"e":66,"f":11,"g":70,"h":15,"j":51,"k":3},{"p":1,"c":0,"r":24,"n":65,"t":1,"i":5,"e":54,"f":6,"g":56,"h":8,"j":56,"k":8},{"p":1,"c":0,"r":25,"n":62,"t":1,"i":0,"e":69,"f":14,"g":55,"h":7,"j":51,"k":3},{"p":1,"c":0,"r":26,"n":65,"t":1,"i":4,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":1,"c":0,"r":27,"n":62,"t":1,"i":5,"e":70,"f":15,"g":70,"h":15,"j":48,"k":0},{"p":1,"c":0,"r":28,"n":69,"t":1,"i":0,"e":67,"f":12,"g":57,"h":9,"j":57,"k":9},{"p":1,"c":0,"r":29,"n":67,"t":1,"i":0,"e":54,"f":6,"g":56,"h":8,"j":53,"k":5},{"p":1,"c":0,"r":30,"n":65,"t":1,"i":4,"e":66,"f":11,"g":55,"h":7,"j":50,"k":2},{"p":1,"c":0,"r":31,"n":65,"t":1,"i":0,"e":53,"f":5,"g":54,"h":6,"j":70,"k":15},{"p":2,"c":0,"r":0,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":1,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":3,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":5,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":6,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":8,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":9,"n":55,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":10,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":12,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":13,"n":55,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":15,"n":60,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":16,"n":53,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":17,"n":50,"t":1,"i":1,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":0,"r":26,"n":65,"t":1,"i":4,"e":54,"f":6,"g":55,"h":7,"j":55,"k":7},{"p":2,"c":0,"r":27,"n":67,"t":1,"i":0,"e":69,"f":14,"g":68,"h":13,"j":53,"k":5},{"p":2,"c":0,"r":28,"n":53,"t":0,"i":0,"e":65,"f":10,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":24,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":1,"r":28,"n":31,"t":1,"i":0,"e":51,"f":3,"g":51,"h":3,"j":51,"k":3},{"p":2,"c":2,"r":3,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":4,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":6,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":10,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":12,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":16,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":18,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":19,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":20,"n":48,"t":1,"i":2,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":21,"n":48,"t":1,"i":3,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":2,"r":23,"n":48,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":2,"r":24,"n":48,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":56,"k":8},{"p":2,"c":2,"r":28,"n":48,"t":1,"i":3,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":2,"c":2,"r":29,"n":48,"t":1,"i":2,"e":65,"f":10,"g":55,"h":7,"j":70,"k":15},{"p":2,"c":2,"r":30,"n":48,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":55,"k":7},{"p":2,"c":2,"r":31,"n":48,"t":1,"i":2,"e":65,"f":10,"g":70,"h":15,"j":55,"k":7},{"p":2,"c":3,"r":2,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":5,"n":57,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":8,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":12,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":16,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":22,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":3,"r":28,"n":48,"t":1,"i":0,"e":51,"f":3,"g":53,"h":5,"j":53,"k":5},{"p":2,"c":3,"r":30,"n":0,"t":0,"i":0,"e":52,"f":4,"g":53,"h":5,"j":51,"k":3},{"p":2,"c":4,"r":2,"n":60,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":5,"n":62,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":8,"n":57,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":12,"n":62,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":16,"n":55,"t":1,"i":0,"e":65,"f":10,"g":56,"h":8,"j":70,"k":15},{"p":2,"c":4,"r":20,"n":0,"t":0,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2},{"p":2,"c":5,"r":0,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":3,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":6,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":9,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":12,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":15,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":18,"n":60,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":19,"n":64,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":20,"n":67,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":21,"n":64,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":22,"n":65,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":23,"n":69,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":24,"n":64,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":25,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":26,"n":62,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":27,"n":64,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":28,"n":64,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":29,"n":65,"t":1,"i":4,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":30,"n":69,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":2,"c":5,"r":31,"n":67,"t":1,"i":5,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":0,"r":0,"n":69,"t":1,"i":5,"e":70,"f":15,"g":70,"h":15,"j":51,"k":3},{"p":3,"c":0,"r":1,"n":62,"t":1,"i":0,"e":67,"f":12,"g":56,"h":8,"j":52,"k":4},{"p":3,"c":0,"r":2,"n":65,"t":1,"i":4,"e":54,"f":6,"g":55,"h":7,"j":55,"k":7},{"p":3,"c":0,"r":3,"n":67,"t":1,"i":0,"e":69,"f":14,"g":68,"h":13,"j":53,"k":5},{"p":3,"c":0,"r":4,"n":69,"t":1,"i":4,"e":70,"f":15,"g":70,"h":15,"j":51,"k":3},{"p":3,"c":0,"r":5,"n":69,"t":1,"i":5,"e":66,"f":11,"g":57,"h":9,"j":50,"k":2},{"p":3,"c":0,"r":6,"n":62,"t":1,"i":4,"e":53,"f":5,"g":56,"h":8,"j":52,"k":4},{"p":3,"c":0,"r":7,"n":65,"t":1,"i":4,"e":67,"f":12,"g":68,"h":13,"j":53,"k":5},{"p":3,"c":0,"r":8,"n":67,"t":1,"i":5,"e":69,"f":14,"g":70,"h":15,"j":55,"k":7},{"p":3,"c":0,"r":9,"n":69,"t":1,"i":0,"e":53,"f":5,"g":54,"h":6,"j":51,"k":3},{"p":3,"c":0,"r":10,"n":62,"t":1,"i":4,"e":70,"f":15,"g":57,"h":9,"j":52,"k":4},{"p":3,"c":0,"r":11,"n":69,"t":1,"i":0,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":3,"c":0,"r":12,"n":65,"t":1,"i":4,"e":69,"f":14,"g":56,"h":8,"j":51,"k":3},{"p":3,"c":0,"r":13,"n":67,"t":1,"i":4,"e":53,"f":5,"g":69,"h":14,"j":57,"k":9},{"p":3,"c":0,"r":14,"n":69,"t":1,"i":0,"e":66,"f":11,"g":70,"h":15,"j":52,"k":4},{"p":3,"c":0,"r":15,"n":62,"t":1,"i":4,"e":70,"f":15,"g":57,"h":9,"j":56,"k":8},{"p":3,"c":0,"r":16,"n":65,"t":1,"i":5,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":3,"c":0,"r":17,"n":67,"t":1,"i":0,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":3,"c":0,"r":18,"n":69,"t":1,"i":4,"e":54,"f":6,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":19,"n":65,"t":1,"i":5,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":3,"c":0,"r":20,"n":67,"t":1,"i":0,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":3,"c":0,"r":21,"n":69,"t":1,"i":4,"e":54,"f":6,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":22,"n":65,"t":1,"i":5,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":3,"c":0,"r":23,"n":67,"t":1,"i":0,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":3,"c":0,"r":24,"n":69,"t":1,"i":4,"e":54,"f":6,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":25,"n":65,"t":1,"i":5,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":3,"c":0,"r":26,"n":67,"t":1,"i":0,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":3,"c":0,"r":27,"n":69,"t":1,"i":4,"e":54,"f":6,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":28,"n":65,"t":1,"i":5,"e":67,"f":12,"g":56,"h":8,"j":53,"k":5},{"p":3,"c":0,"r":29,"n":67,"t":1,"i":0,"e":53,"f":5,"g":69,"h":14,"j":50,"k":2},{"p":3,"c":0,"r":30,"n":69,"t":1,"i":4,"e":54,"f":6,"g":70,"h":15,"j":70,"k":15},{"p":3,"c":0,"r":31,"n":62,"t":1,"i":0,"e":69,"f":14,"g":57,"h":9,"j":48,"k":0},{"p":3,"c":1,"r":0,"n":36,"t":1,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2},{"p":3,"c":1,"r":1,"n":38,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":3,"n":0,"t":0,"i":0,"e":70,"f":15,"g":50,"h":2,"j":51,"k":3},{"p":3,"c":1,"r":5,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":8,"n":36,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":10,"n":24,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":12,"n":33,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":14,"n":21,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":16,"n":31,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":18,"n":19,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":1,"r":20,"n":31,"t":0,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2},{"p":3,"c":1,"r":22,"n":72,"t":1,"i":0,"e":70,"f":15,"g":55,"h":7,"j":55,"k":7},{"p":3,"c":1,"r":25,"n":69,"t":1,"i":0,"e":70,"f":15,"g":55,"h":7,"j":55,"k":7},{"p":3,"c":1,"r":28,"n":67,"t":1,"i":0,"e":70,"f":15,"g":55,"h":7,"j":55,"k":7},{"p":3,"c":1,"r":29,"n":67,"t":1,"i":0,"e":70,"f":15,"g":55,"h":7,"j":55,"k":7},{"p":3,"c":3,"r":2,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":5,"n":57,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":8,"n":55,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":12,"n":53,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":16,"n":50,"t":1,"i":0,"e":45,"f":-1,"g":45,"h":-1,"j":45,"k":-1},{"p":3,"c":3,"r":20,"n":0,"t":0,"i":0,"e":69,"f":14,"g":50,"h":2,"j":50,"k":2}],"instrument_effects":[{"i_l":0,"r":0,"e":57,"f":9,"g":48,"h":0,"j":45,"k":-1},{"i_l":0,"r":1,"e":56,"f":8,"g":52,"h":4,"j":55,"k":7},{"i_l":1,"r":0,"e":48,"f":0,"g":67,"h":12,"j":48,"k":0},{"i_l":1,"r":1,"e":54,"f":6,"g":50,"h":2,"j":51,"k":3},{"i_l":2,"r":0,"e":70,"f":15,"g":55,"h":7,"j":70,"k":15},{"i_l":2,"r":1,"e":57,"f":9,"g":49,"h":1,"j":45,"k":-1},{"i_l":2,"r":2,"e":53,"f":5,"g":51,"h":3,"j":51,"k":3},{"i_l":3,"r":0,"e":70,"f":15,"g":70,"h":15,"j":70,"k":15},{"i_l":3,"r":1,"e":53,"f":5,"g":51,"h":3,"j":52,"k":4},{"i_l":5,"r":0,"e":51,"f":3,"g":54,"h":6,"j":56,"k":8},{"i_l":5,"r":1,"e":54,"f":6,"g":52,"h":4,"j":50,"k":2}],"patterns_and_voices":[3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"patterns":[0,0,0,0,0,0,0,0,0,2,1,3,1,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,3,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,2,0,3,1,1,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"active_tracks":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"muted_voices":[0,0,0,0,0,0],"instruments_adsr":[[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.230400,"p":0.150000},{"a":0,"p":0.500000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.763600,"p":0.034640},{"a":0,"p":0.156400},{"a":0,"p":0.430400},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.747200,"p":0.001000},{"a":0,"p":0.069200},{"a":0,"p":0.600000},{"a":0,"p":0.640000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0.693600,"p":0.021200},{"a":0,"p":0.062000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.502000,"p":0},{"a":0,"p":0.026400},{"a":0,"p":0.074400},{"a":0,"p":0.181600}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.087200},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}],[{"a":0,"p":0},{"a":0.800000,"p":0.001000},{"a":0,"p":0.150000},{"a":0,"p":0.600000},{"a":0,"p":0.900000}]],"custom_table":{"i":[{"a":0,"p":0.200000},{"a":0,"p":0.400000},{"a":0,"p":0.600000},{"a":0,"p":0.800000},{"a":0,"p":1}]},"tempo":[{"x":0,"y":0,"b":120},{"x":0,"y":1,"t":3,"a":1},{"x":0,"y":2,"t":5,"a":1},{"x":0,"y":3,"t":3,"a":0},{"x":0,"y":4,"t":4,"a":0},{"x":0,"y":5,"t":1,"a":0},{"x":0,"y":6,"t":1,"a":0},{"x":0,"y":7,"t":1,"a":0},{"x":0,"y":8,"t":1,"a":0},{"x":0,"y":9,"t":1,"a":0},{"x":0,"y":10,"t":1,"a":0},{"x":0,"y":11,"t":1,"a":0},{"x":0,"y":12,"t":1,"a":0},{"x":0,"y":13,"t":1,"a":0},{"x":0,"y":14,"t":1,"a":0},{"x":0,"y":15,"t":1,"a":0},{"x":0,"y":16,"t":1,"a":0},{"x":1,"y":0,"b":120},{"x":1,"y":1,"t":4,"a":1},{"x":1,"y":2,"t":1,"a":0},{"x":1,"y":3,"t":1,"a":0},{"x":1,"y":4,"t":1,"a":0},{"x":1,"y":5,"t":1,"a":0},{"x":1,"y":6,"t":1,"a":0},{"x":1,"y":7,"t":1,"a":0},{"x":1,"y":8,"t":1,"a":0},{"x":1,"y":9,"t":1,"a":0},{"x":1,"y":10,"t":1,"a":0},{"x":1,"y":11,"t":1,"a":0},{"x":1,"y":12,"t":1,"a":0},{"x":1,"y":13,"t":1,"a":0},{"x":1,"y":14,"t":1,"a":0},{"x":1,"y":15,"t":1,"a":0},{"x":1,"y":16,"t":1,"a":0},{"x":2,"y":0,"b":120},{"x":2,"y":1,"t":4,"a":1},{"x":2,"y":2,"t":1,"a":0},{"x":2,"y":3,"t":1,"a":0},{"x":2,"y":4,"t":1,"a":0},{"x":2,"y":5,"t":1,"a":0},{"x":2,"y":6,"t":1,"a":0},{"x":2,"y":7,"t":1,"a":0},{"x":2,"y":8,"t":1,"a":0},{"x":2,"y":9,"t":1,"a":0},{"x":2,"y":10,"t":1,"a":0},{"x":2,"y":11,"t":1,"a":0},{"x":2,"y":12,"t":1,"a":0},{"x":2,"y":13,"t":1,"a":0},{"x":2,"y":14,"t":1,"a":0},{"x":2,"y":15,"t":1,"a":0},{"x":2,"y":16,"t":1,"a":0},{"x":3,"y":0,"b":120},{"x":3,"y":1,"t":4,"a":1},{"x":3,"y":2,"t":1,"a":0},{"x":3,"y":3,"t":1,"a":0},{"x":3,"y":4,"t":1,"a":0},{"x":3,"y":5,"t":1,"a":0},{"x":3,"y":6,"t":1,"a":0},{"x":3,"y":7,"t":1,"a":0},{"x":3,"y":8,"t":1,"a":0},{"x":3,"y":9,"t":1,"a":0},{"x":3,"y":10,"t":1,"a":0},{"x":3,"y":11,"t":1,"a":0},{"x":3,"y":12,"t":1,"a":0},{"x":3,"y":13,"t":1,"a":0},{"x":3,"y":14,"t":1,"a":0},{"x":3,"y":15,"t":1,"a":0},{"x":3,"y":16,"t":1,"a":0},{"x":4,"y":0,"b":120},{"x":4,"y":1,"t":4,"a":1},{"x":4,"y":2,"t":1,"a":0},{"x":4,"y":3,"t":1,"a":0},{"x":4,"y":4,"t":1,"a":0},{"x":4,"y":5,"t":1,"a":0},{"x":4,"y":6,"t":1,"a":0},{"x":4,"y":7,"t":1,"a":0},{"x":4,"y":8,"t":1,"a":0},{"x":4,"y":9,"t":1,"a":0},{"x":4,"y":10,"t":1,"a":0},{"x":4,"y":11,"t":1,"a":0},{"x":4,"y":12,"t":1,"a":0},{"x":4,"y":13,"t":1,"a":0},{"x":4,"y":14,"t":1,"a":0},{"x":4,"y":15,"t":1,"a":0},{"x":4,"y":16,"t":1,"a":0},{"x":5,"y":0,"b":120},{"x":5,"y":1,"t":4,"a":1},{"x":5,"y":2,"t":1,"a":0},{"x":5,"y":3,"t":1,"a":0},{"x":5,"y":4,"t":1,"a":0},{"x":5,"y":5,"t":1,"a":0},{"x":5,"y":6,"t":1,"a":0},{"x":5,"y":7,"t":1,"a":0},{"x":5,"y":8,"t":1,"a":0},{"x":5,"y":9,"t":1,"a":0},{"x":5,"y":10,"t":1,"a":0},{"x":5,"y":11,"t":1,"a":0},{"x":5,"y":12,"t":1,"a":0},{"x":5,"y":13,"t":1,"a":0},{"x":5,"y":14,"t":1,"a":0},{"x":5,"y":15,"t":1,"a":0},{"x":5,"y":16,"t":1,"a":0}],"wavetable":[{"x":0,"y":0,"s":50},{"x":0,"y":1,"v":1,"a":0},{"x":0,"y":2,"v":1,"a":1},{"x":0,"y":3,"v":3,"a":1},{"x":0,"y":4,"v":2,"a":1},{"x":0,"y":5,"v":1,"a":0},{"x":0,"y":6,"v":1,"a":0},{"x":0,"y":7,"v":1,"a":0},{"x":0,"y":8,"v":1,"a":0},{"x":0,"y":9,"v":1,"a":0},{"x":0,"y":10,"v":1,"a":0},{"x":0,"y":11,"v":1,"a":0},{"x":0,"y":12,"v":1,"a":0},{"x":0,"y":13,"v":1,"a":0},{"x":0,"y":14,"v":1,"a":0},{"x":0,"y":15,"v":1,"a":0},{"x":0,"y":16,"v":1,"a":0},{"x":0,"y":17,"v":1,"a":0},{"x":1,"y":0,"s":50},{"x":1,"y":1,"v":1,"a":0},{"x":1,"y":2,"v":1,"a":1},{"x":1,"y":3,"v":3,"a":0},{"x":1,"y":4,"v":1,"a":0},{"x":1,"y":5,"v":1,"a":0},{"x":1,"y":6,"v":1,"a":0},{"x":1,"y":7,"v":1,"a":0},{"x":1,"y":8,"v":1,"a":0},{"x":1,"y":9,"v":1,"a":0},{"x":1,"y":10,"v":1,"a":0},{"x":1,"y":11,"v":1,"a":0},{"x":1,"y":12,"v":1,"a":0},{"x":1,"y":13,"v":1,"a":0},{"x":1,"y":14,"v":1,"a":0},{"x":1,"y":15,"v":1,"a":0},{"x":1,"y":16,"v":1,"a":0},{"x":1,"y":17,"v":1,"a":0},{"x":2,"y":0,"s":73},{"x":2,"y":1,"v":1,"a":0},{"x":2,"y":2,"v":4,"a":1},{"x":2,"y":3,"v":2,"a":1},{"x":2,"y":4,"v":4,"a":1},{"x":2,"y":5,"v":2,"a":0},{"x":2,"y":6,"v":1,"a":0},{"x":2,"y":7,"v":1,"a":0},{"x":2,"y":8,"v":1,"a":0},{"x":2,"y":9,"v":1,"a":0},{"x":2,"y":10,"v":1,"a":0},{"x":2,"y":11,"v":1,"a":0},{"x":2,"y":12,"v":1,"a":0},{"x":2,"y":13,"v":1,"a":0},{"x":2,"y":14,"v":1,"a":0},{"x":2,"y":15,"v":1,"a":0},{"x":2,"y":16,"v":1,"a":0},{"x":2,"y":17,"v":1,"a":0},{"x":3,"y":0,"s":50},{"x":3,"y":1,"v":1,"a":0},{"x":3,"y":2,"v":1,"a":1},{"x":3,"y":3,"v":1,"a":0},{"x":3,"y":4,"v":1,"a":0},{"x":3,"y":5,"v":1,"a":0},{"x":3,"y":6,"v":1,"a":0},{"x":3,"y":7,"v":1,"a":0},{"x":3,"y":8,"v":1,"a":0},{"x":3,"y":9,"v":1,"a":0},{"x":3,"y":10,"v":1,"a":0},{"x":3,"y":11,"v":1,"a":0},{"x":3,"y":12,"v":1,"a":0},{"x":3,"y":13,"v":1,"a":0},{"x":3,"y":14,"v":1,"a":0},{"x":3,"y":15,"v":1,"a":0},{"x":3,"y":16,"v":1,"a":0},{"x":3,"y":17,"v":1,"a":0},{"x":4,"y":0,"s":50},{"x":4,"y":1,"v":1,"a":0},{"x":4,"y":2,"v":1,"a":1},{"x":4,"y":3,"v":3,"a":1},{"x":4,"y":4,"v":2,"a":1},{"x":4,"y":5,"v":1,"a":1},{"x":4,"y":6,"v":1,"a":0},{"x":4,"y":7,"v":1,"a":0},{"x":4,"y":8,"v":1,"a":0},{"x":4,"y":9,"v":1,"a":0},{"x":4,"y":10,"v":1,"a":0},{"x":4,"y":11,"v":1,"a":0},{"x":4,"y":12,"v":1,"a":0},{"x":4,"y":13,"v":1,"a":0},{"x":4,"y":14,"v":1,"a":0},{"x":4,"y":15,"v":1,"a":0},{"x":4,"y":16,"v":1,"a":0},{"x":4,"y":17,"v":1,"a":0},{"x":5,"y":0,"s":50},{"x":5,"y":1,"v":1,"a":0},{"x":5,"y":2,"v":1,"a":1},{"x":5,"y":3,"v":1,"a":0},{"x":5,"y":4,"v":1,"a":0},{"x":5,"y":5,"v":1,"a":0},{"x":5,"y":6,"v":1,"a":0},{"x":5,"y":7,"v":1,"a":0},{"x":5,"y":8,"v":1,"a":0},{"x":5,"y":9,"v":1,"a":0},{"x":5,"y":10,"v":1,"a":0},{"x":5,"y":11,"v":1,"a":0},{"x":5,"y":12,"v":1,"a":0},{"x":5,"y":13,"v":1,"a":0},{"x":5,"y":14,"v":1,"a":0},{"x":5,"y":15,"v":1,"a":0},{"x":5,"y":16,"v":1,"a":0},{"x":5,"y":17,"v":1,"a":0},{"x":6,"y":0,"s":50},{"x":6,"y":1,"v":1,"a":0},{"x":6,"y":2,"v":1,"a":1},{"x":6,"y":3,"v":1,"a":0},{"x":6,"y":4,"v":1,"a":0},{"x":6,"y":5,"v":1,"a":0},{"x":6,"y":6,"v":1,"a":0},{"x":6,"y":7,"v":1,"a":0},{"x":6,"y":8,"v":1,"a":0},{"x":6,"y":9,"v":1,"a":0},{"x":6,"y":10,"v":1,"a":0},{"x":6,"y":11,"v":1,"a":0},{"x":6,"y":12,"v":1,"a":0},{"x":6,"y":13,"v":1,"a":0},{"x":6,"y":14,"v":1,"a":0},{"x":6,"y":15,"v":1,"a":0},{"x":6,"y":16,"v":1,"a":0},{"x":6,"y":17,"v":1,"a":0},{"x":7,"y":0,"s":50},{"x":7,"y":1,"v":1,"a":0},{"x":7,"y":2,"v":1,"a":1},{"x":7,"y":3,"v":1,"a":0},{"x":7,"y":4,"v":1,"a":0},{"x":7,"y":5,"v":1,"a":0},{"x":7,"y":6,"v":1,"a":0},{"x":7,"y":7,"v":1,"a":0},{"x":7,"y":8,"v":1,"a":0},{"x":7,"y":9,"v":1,"a":0},{"x":7,"y":10,"v":1,"a":0},{"x":7,"y":11,"v":1,"a":0},{"x":7,"y":12,"v":1,"a":0},{"x":7,"y":13,"v":1,"a":0},{"x":7,"y":14,"v":1,"a":0},{"x":7,"y":15,"v":1,"a":0},{"x":7,"y":16,"v":1,"a":0},{"x":7,"y":17,"v":1,"a":0},{"x":8,"y":0,"s":50},{"x":8,"y":1,"v":1,"a":0},{"x":8,"y":2,"v":1,"a":1},{"x":8,"y":3,"v":1,"a":0},{"x":8,"y":4,"v":1,"a":0},{"x":8,"y":5,"v":1,"a":0},{"x":8,"y":6,"v":1,"a":0},{"x":8,"y":7,"v":1,"a":0},{"x":8,"y":8,"v":1,"a":0},{"x":8,"y":9,"v":1,"a":0},{"x":8,"y":10,"v":1,"a":0},{"x":8,"y":11,"v":1,"a":0},{"x":8,"y":12,"v":1,"a":0},{"x":8,"y":13,"v":1,"a":0},{"x":8,"y":14,"v":1,"a":0},{"x":8,"y":15,"v":1,"a":0},{"x":8,"y":16,"v":1,"a":0},{"x":8,"y":17,"v":1,"a":0},{"x":9,"y":0,"s":50},{"x":9,"y":1,"v":1,"a":0},{"x":9,"y":2,"v":1,"a":1},{"x":9,"y":3,"v":1,"a":0},{"x":9,"y":4,"v":1,"a":0},{"x":9,"y":5,"v":1,"a":0},{"x":9,"y":6,"v":1,"a":0},{"x":9,"y":7,"v":1,"a":0},{"x":9,"y":8,"v":1,"a":0},{"x":9,"y":9,"v":1,"a":0},{"x":9,"y":10,"v":1,"a":0},{"x":9,"y":11,"v":1,"a":0},{"x":9,"y":12,"v":1,"a":0},{"x":9,"y":13,"v":1,"a":0},{"x":9,"y":14,"v":1,"a":0},{"x":9,"y":15,"v":1,"a":0},{"x":9,"y":16,"v":1,"a":0},{"x":9,"y":17,"v":1,"a":0},{"x":10,"y":0,"s":50},{"x":10,"y":1,"v":1,"a":0},{"x":10,"y":2,"v":1,"a":1},{"x":10,"y":3,"v":1,"a":0},{"x":10,"y":4,"v":1,"a":0},{"x":10,"y":5,"v":1,"a":0},{"x":10,"y":6,"v":1,"a":0},{"x":10,"y":7,"v":1,"a":0},{"x":10,"y":8,"v":1,"a":0},{"x":10,"y":9,"v":1,"a":0},{"x":10,"y":10,"v":1,"a":0},{"x":10,"y":11,"v":1,"a":0},{"x":10,"y":12,"v":1,"a":0},{"x":10,"y":13,"v":1,"a":0},{"x":10,"y":14,"v":1,"a":0},{"x":10,"y":15,"v":1,"a":0},{"x":10,"y":16,"v":1,"a":0},{"x":10,"y":17,"v":1,"a":0},{"x":11,"y":0,"s":50},{"x":11,"y":1,"v":1,"a":0},{"x":11,"y":2,"v":1,"a":1},{"x":11,"y":3,"v":1,"a":0},{"x":11,"y":4,"v":1,"a":0},{"x":11,"y":5,"v":1,"a":0},{"x":11,"y":6,"v":1,"a":0},{"x":11,"y":7,"v":1,"a":0},{"x":11,"y":8,"v":1,"a":0},{"x":11,"y":9,"v":1,"a":0},{"x":11,"y":10,"v":1,"a":0},{"x":11,"y":11,"v":1,"a":0},{"x":11,"y":12,"v":1,"a":0},{"x":11,"y":13,"v":1,"a":0},{"x":11,"y":14,"v":1,"a":0},{"x":11,"y":15,"v":1,"a":0},{"x":11,"y":16,"v":1,"a":0},{"x":11,"y":17,"v":1,"a":0}]}snibbetracker-1.1.1/res/windows/000077500000000000000000000000001351541346100166165ustar00rootroot00000000000000snibbetracker-1.1.1/res/windows/Makefile000066400000000000000000000027351351541346100202650ustar00rootroot00000000000000#usage mingw32-make clean, mingw32-make # Files to be compiled SRC = C:\snibbetracker\src\CAllocator.c C:\snibbetracker\src\CEngine.c C:\snibbetracker\src\CInput.c C:\snibbetracker\src\CSynth.c C:\snibbetracker\src\cJSON\cJSON.c C:\snibbetracker\src\dir_win.c C:\snibbetracker\src\main.c OBJ=$(SRC:.c=.o) # replaces the .c from SRC with .o # Compiler CC = gcc RM=del # Include paths INCLUDE_PATHS = -IC:\Downloads\SDL2-devel-2.0.4-mingw\i686-w64-mingw32\include -IC:\snibbetracker\src\cJSON # Library paths LIBRARY_PATHS = -LC:\Downloads\SDL2-devel-2.0.4-mingw\i686-w64-mingw32\lib # Compiler flags COMPILER_FLAGS = -Wall -std=c99 -Wno-unused-function # Linker flags LINKER_FLAGS = -static -lmingw32 -lSDL2main -lSDL2 -mwindows -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc # Executable file EXE = snibbetracker.exe # Compile command #all: # $(SRC) # $(CC) $(SRC) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(EXE) %.o: %.c # combined w/ next line will compile recently changed .c files $(CC) $(COMPILER_FLAGS) $(INCLUDE_PATHS) -o $@ -c $< .PHONY : all # .PHONY ignores files named all all: $(EXE) # all is dependent on $(EXE) to be complete $(EXE): $(OBJ) # $(EXE) is dependent on all of the files in $(OBJ) to exist $(CC) $(OBJ) my.res $(LIBRARY_PATHS) $(LINKER_FLAGS) -o $@ .PHONY : clean # .PHONY ignores files named clean clean: -$(RM) $(OBJ) $(EXE)snibbetracker-1.1.1/res/windows/full.ico000066400000000000000000010760761351541346100202750ustar00rootroot00000000000000  ( 00 % 00fF  U e ^n hFqhu({( (0` (0`( @ ( @( @(  ( ( snibbetracker-1.1.1/res/windows/my.res000066400000000000000000010774121351541346100177720ustar00rootroot00000000000000L~.rsrcT~<~ @0 P x  8         h ID(( P"%GVHgorh@wh|(}( (0` (0`( @ ( @( @(  ( (   ( 00 %00     hh( .rsrcsnibbetracker-1.1.1/res/windows/win_build_info.txt000066400000000000000000000000701351541346100223430ustar00rootroot00000000000000make icon with mingw32: windres my.rc -O coff -o my.res snibbetracker-1.1.1/snibbetracker.xcodeproj/000077500000000000000000000000001351541346100211455ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker.xcodeproj/project.pbxproj000066400000000000000000000616141351541346100242310ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 035B60591AADA84700E41249 /* dir_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 035B60571AADA84700E41249 /* dir_posix.c */; }; 0388C9A322E61BBE008BED68 /* CInput.c in Sources */ = {isa = PBXBuildFile; fileRef = 0388C98422E61BBE008BED68 /* CInput.c */; }; 0388C9A722E61BBE008BED68 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 0388C98B22E61BBE008BED68 /* LICENSE */; }; 0388C9A822E61BBE008BED68 /* test1 in Resources */ = {isa = PBXBuildFile; fileRef = 0388C98E22E61BBE008BED68 /* test1 */; }; 0388C9A922E61BBE008BED68 /* test4 in Resources */ = {isa = PBXBuildFile; fileRef = 0388C98F22E61BBE008BED68 /* test4 */; }; 0388C9AA22E61BBE008BED68 /* test3 in Resources */ = {isa = PBXBuildFile; fileRef = 0388C99022E61BBE008BED68 /* test3 */; }; 0388C9AB22E61BBE008BED68 /* test2 in Resources */ = {isa = PBXBuildFile; fileRef = 0388C99122E61BBE008BED68 /* test2 */; }; 0388C9AC22E61BBE008BED68 /* test5 in Resources */ = {isa = PBXBuildFile; fileRef = 0388C99222E61BBE008BED68 /* test5 */; }; 0388C9AD22E61BBE008BED68 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 0388C99322E61BBE008BED68 /* README */; }; 0388C9AE22E61BBE008BED68 /* cJSON.c in Sources */ = {isa = PBXBuildFile; fileRef = 0388C99422E61BBE008BED68 /* cJSON.c */; }; 0388C9AF22E61BBE008BED68 /* test.c in Sources */ = {isa = PBXBuildFile; fileRef = 0388C99522E61BBE008BED68 /* test.c */; }; 0388C9B022E61BBE008BED68 /* CSynth.c in Sources */ = {isa = PBXBuildFile; fileRef = 0388C99622E61BBE008BED68 /* CSynth.c */; }; 0388C9B222E61BBE008BED68 /* CAllocator.c in Sources */ = {isa = PBXBuildFile; fileRef = 0388C99B22E61BBE008BED68 /* CAllocator.c */; }; 0388C9B322E61BBE008BED68 /* CEngine.c in Sources */ = {isa = PBXBuildFile; fileRef = 0388C99D22E61BBE008BED68 /* CEngine.c */; }; 0399B2F517F35C1D005ACCBE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0399B2F317F35C1D005ACCBE /* InfoPlist.strings */; }; 0399B2F717F35C1D005ACCBE /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 0399B2F617F35C1D005ACCBE /* main.c */; }; 03A4319C1DACE5670069859A /* catslayer.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431931DACE5670069859A /* catslayer.snibb */; }; 03A4319D1DACE5670069859A /* dunsa2.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431941DACE5670069859A /* dunsa2.snibb */; }; 03A4319E1DACE5670069859A /* fiskbolja.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431951DACE5670069859A /* fiskbolja.snibb */; }; 03A4319F1DACE5670069859A /* horizon.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431961DACE5670069859A /* horizon.snibb */; }; 03A431A01DACE5670069859A /* kissemisse.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431971DACE5670069859A /* kissemisse.snibb */; }; 03A431A11DACE5670069859A /* korvhastig.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431981DACE5670069859A /* korvhastig.snibb */; }; 03A431A21DACE5670069859A /* laptopmidi.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A431991DACE5670069859A /* laptopmidi.snibb */; }; 03A431A31DACE5670069859A /* websnacks.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A4319A1DACE5670069859A /* websnacks.snibb */; }; 03A431A41DACE5670069859A /* wrestchest.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03A4319B1DACE5670069859A /* wrestchest.snibb */; }; 03BA8FB31AFB3AF800F296DB /* [IconName].iconset in Resources */ = {isa = PBXBuildFile; fileRef = 03BA8FB21AFB3AF800F296DB /* [IconName].iconset */; }; 03BA8FB61AFB5C4F00F296DB /* config.txt in Resources */ = {isa = PBXBuildFile; fileRef = 03BA8FB51AFB5C4F00F296DB /* config.txt */; }; 03BA8FB81AFB5EAB00F296DB /* osx_settings.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BA8FB71AFB5EAB00F296DB /* osx_settings.m */; }; 03EB37241DB0FF720026857F /* projectcart.snibb in Resources */ = {isa = PBXBuildFile; fileRef = 03EB37231DB0FF720026857F /* projectcart.snibb */; }; 03FCECB317F606C20045D4FB /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0399B30717F35D84005ACCBE /* SDL2.framework */; }; 03FCECB417F606D50045D4FB /* SDL2.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0399B30717F35D84005ACCBE /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ 03FD05B817F361CA00E1F97F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( 03FCECB417F606D50045D4FB /* SDL2.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 033AC4891A99DEC000183CD7 /* chars_gfx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chars_gfx.h; sourceTree = ""; }; 035B60571AADA84700E41249 /* dir_posix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dir_posix.c; sourceTree = ""; }; 035B60581AADA84700E41249 /* dir_posix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dir_posix.h; sourceTree = ""; }; 035B605A1AADAA3100E41249 /* file_settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = file_settings.h; sourceTree = ""; }; 03758DED1A9C7451005882C2 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; 0388C97822E61BBD008BED68 /* CSynth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSynth.h; sourceTree = ""; }; 0388C97E22E61BBD008BED68 /* CEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CEngine.h; sourceTree = ""; }; 0388C98222E61BBD008BED68 /* CAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAllocator.h; sourceTree = ""; }; 0388C98422E61BBE008BED68 /* CInput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CInput.c; sourceTree = ""; }; 0388C98B22E61BBE008BED68 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 0388C98C22E61BBE008BED68 /* cJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cJSON.h; sourceTree = ""; }; 0388C98E22E61BBE008BED68 /* test1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test1; sourceTree = ""; }; 0388C98F22E61BBE008BED68 /* test4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test4; sourceTree = ""; }; 0388C99022E61BBE008BED68 /* test3 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test3; sourceTree = ""; }; 0388C99122E61BBE008BED68 /* test2 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test2; sourceTree = ""; }; 0388C99222E61BBE008BED68 /* test5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test5; sourceTree = ""; }; 0388C99322E61BBE008BED68 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 0388C99422E61BBE008BED68 /* cJSON.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cJSON.c; sourceTree = ""; }; 0388C99522E61BBE008BED68 /* test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = test.c; sourceTree = ""; }; 0388C99622E61BBE008BED68 /* CSynth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CSynth.c; sourceTree = ""; }; 0388C99822E61BBE008BED68 /* CInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CInput.h; sourceTree = ""; }; 0388C99B22E61BBE008BED68 /* CAllocator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CAllocator.c; sourceTree = ""; }; 0388C99C22E61BBE008BED68 /* CNoiseTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNoiseTable.h; sourceTree = ""; }; 0388C99D22E61BBE008BED68 /* CEngine.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CEngine.c; sourceTree = ""; }; 0399B2E717F35C1D005ACCBE /* snibbetracker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = snibbetracker.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0399B2F217F35C1D005ACCBE /* snibbetracker-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "snibbetracker-Info.plist"; sourceTree = ""; }; 0399B2F417F35C1D005ACCBE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 0399B2F617F35C1D005ACCBE /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; 0399B30717F35D84005ACCBE /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; 03A431931DACE5670069859A /* catslayer.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = catslayer.snibb; sourceTree = ""; }; 03A431941DACE5670069859A /* dunsa2.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dunsa2.snibb; sourceTree = ""; }; 03A431951DACE5670069859A /* fiskbolja.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fiskbolja.snibb; sourceTree = ""; }; 03A431961DACE5670069859A /* horizon.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = horizon.snibb; sourceTree = ""; }; 03A431971DACE5670069859A /* kissemisse.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = kissemisse.snibb; sourceTree = ""; }; 03A431981DACE5670069859A /* korvhastig.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = korvhastig.snibb; sourceTree = ""; }; 03A431991DACE5670069859A /* laptopmidi.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = laptopmidi.snibb; sourceTree = ""; }; 03A4319A1DACE5670069859A /* websnacks.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = websnacks.snibb; sourceTree = ""; }; 03A4319B1DACE5670069859A /* wrestchest.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wrestchest.snibb; sourceTree = ""; }; 03BA8FB21AFB3AF800F296DB /* [IconName].iconset */ = {isa = PBXFileReference; lastKnownFileType = folder.iconset; path = "[IconName].iconset"; sourceTree = ""; }; 03BA8FB51AFB5C4F00F296DB /* config.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.txt; sourceTree = ""; }; 03BA8FB71AFB5EAB00F296DB /* osx_settings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = osx_settings.m; sourceTree = ""; }; 03BA8FB91AFB5EB800F296DB /* osx_settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = osx_settings.h; sourceTree = ""; }; 03C75C971A96370E00DA3DE7 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 03EB37231DB0FF720026857F /* projectcart.snibb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = projectcart.snibb; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 0399B2E417F35C1D005ACCBE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 03FCECB317F606C20045D4FB /* SDL2.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 0388C97722E61A87008BED68 /* src */ = { isa = PBXGroup; children = ( 0388C99B22E61BBE008BED68 /* CAllocator.c */, 0388C98222E61BBD008BED68 /* CAllocator.h */, 0388C99D22E61BBE008BED68 /* CEngine.c */, 0388C97E22E61BBD008BED68 /* CEngine.h */, 0388C98422E61BBE008BED68 /* CInput.c */, 0388C99822E61BBE008BED68 /* CInput.h */, 0388C98A22E61BBE008BED68 /* cJSON */, 0388C99C22E61BBE008BED68 /* CNoiseTable.h */, 0388C99622E61BBE008BED68 /* CSynth.c */, 0388C97822E61BBD008BED68 /* CSynth.h */, 0399B2F617F35C1D005ACCBE /* main.c */, 033AC4891A99DEC000183CD7 /* chars_gfx.h */, 035B60571AADA84700E41249 /* dir_posix.c */, 035B60581AADA84700E41249 /* dir_posix.h */, 035B605A1AADAA3100E41249 /* file_settings.h */, 03BA8FB71AFB5EAB00F296DB /* osx_settings.m */, 03BA8FB91AFB5EB800F296DB /* osx_settings.h */, ); path = src; sourceTree = ""; }; 0388C98A22E61BBE008BED68 /* cJSON */ = { isa = PBXGroup; children = ( 0388C98B22E61BBE008BED68 /* LICENSE */, 0388C98C22E61BBE008BED68 /* cJSON.h */, 0388C98D22E61BBE008BED68 /* tests */, 0388C99322E61BBE008BED68 /* README */, 0388C99422E61BBE008BED68 /* cJSON.c */, 0388C99522E61BBE008BED68 /* test.c */, ); path = cJSON; sourceTree = ""; }; 0388C98D22E61BBE008BED68 /* tests */ = { isa = PBXGroup; children = ( 0388C98E22E61BBE008BED68 /* test1 */, 0388C98F22E61BBE008BED68 /* test4 */, 0388C99022E61BBE008BED68 /* test3 */, 0388C99122E61BBE008BED68 /* test2 */, 0388C99222E61BBE008BED68 /* test5 */, ); path = tests; sourceTree = ""; }; 0399B2DE17F35C1D005ACCBE = { isa = PBXGroup; children = ( 03D930E71AA491AC000251CC /* res */, 0399B2F017F35C1D005ACCBE /* snibbetracker */, 0399B2E917F35C1D005ACCBE /* Frameworks */, 0399B2E817F35C1D005ACCBE /* Products */, ); sourceTree = ""; }; 0399B2E817F35C1D005ACCBE /* Products */ = { isa = PBXGroup; children = ( 0399B2E717F35C1D005ACCBE /* snibbetracker.app */, ); name = Products; sourceTree = ""; }; 0399B2E917F35C1D005ACCBE /* Frameworks */ = { isa = PBXGroup; children = ( 03758DED1A9C7451005882C2 /* OpenGL.framework */, 03C75C971A96370E00DA3DE7 /* AppKit.framework */, 0399B30717F35D84005ACCBE /* SDL2.framework */, ); name = Frameworks; sourceTree = ""; }; 0399B2F017F35C1D005ACCBE /* snibbetracker */ = { isa = PBXGroup; children = ( 0388C97722E61A87008BED68 /* src */, 0399B2F117F35C1D005ACCBE /* Supporting Files */, ); path = snibbetracker; sourceTree = ""; }; 0399B2F117F35C1D005ACCBE /* Supporting Files */ = { isa = PBXGroup; children = ( 0399B2F217F35C1D005ACCBE /* snibbetracker-Info.plist */, 0399B2F317F35C1D005ACCBE /* InfoPlist.strings */, ); name = "Supporting Files"; sourceTree = ""; }; 03A431921DACE5670069859A /* demos */ = { isa = PBXGroup; children = ( 03EB37231DB0FF720026857F /* projectcart.snibb */, 03A431931DACE5670069859A /* catslayer.snibb */, 03A431941DACE5670069859A /* dunsa2.snibb */, 03A431951DACE5670069859A /* fiskbolja.snibb */, 03A431961DACE5670069859A /* horizon.snibb */, 03A431971DACE5670069859A /* kissemisse.snibb */, 03A431981DACE5670069859A /* korvhastig.snibb */, 03A431991DACE5670069859A /* laptopmidi.snibb */, 03A4319A1DACE5670069859A /* websnacks.snibb */, 03A4319B1DACE5670069859A /* wrestchest.snibb */, ); path = demos; sourceTree = ""; }; 03D930E71AA491AC000251CC /* res */ = { isa = PBXGroup; children = ( 03A431921DACE5670069859A /* demos */, 03BA8FB51AFB5C4F00F296DB /* config.txt */, 03BA8FB21AFB3AF800F296DB /* [IconName].iconset */, ); path = res; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 0399B2E617F35C1D005ACCBE /* snibbetracker */ = { isa = PBXNativeTarget; buildConfigurationList = 0399B30417F35C1D005ACCBE /* Build configuration list for PBXNativeTarget "snibbetracker" */; buildPhases = ( 0399B2E317F35C1D005ACCBE /* Sources */, 0399B2E417F35C1D005ACCBE /* Frameworks */, 0399B2E517F35C1D005ACCBE /* Resources */, 03FD05B817F361CA00E1F97F /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = snibbetracker; productName = SDL2_template; productReference = 0399B2E717F35C1D005ACCBE /* snibbetracker.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0399B2DF17F35C1D005ACCBE /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0610; ORGANIZATIONNAME = D; TargetAttributes = { 0399B2E617F35C1D005ACCBE = { DevelopmentTeam = QM9YTQA8XQ; ProvisioningStyle = Manual; SystemCapabilities = { com.apple.Sandbox = { enabled = 0; }; }; }; }; }; buildConfigurationList = 0399B2E217F35C1D005ACCBE /* Build configuration list for PBXProject "snibbetracker" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 0399B2DE17F35C1D005ACCBE; productRefGroup = 0399B2E817F35C1D005ACCBE /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 0399B2E617F35C1D005ACCBE /* snibbetracker */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 0399B2E517F35C1D005ACCBE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 03A431A01DACE5670069859A /* kissemisse.snibb in Resources */, 0388C9AC22E61BBE008BED68 /* test5 in Resources */, 03BA8FB31AFB3AF800F296DB /* [IconName].iconset in Resources */, 0388C9AB22E61BBE008BED68 /* test2 in Resources */, 03A4319F1DACE5670069859A /* horizon.snibb in Resources */, 0388C9AD22E61BBE008BED68 /* README in Resources */, 03A431A21DACE5670069859A /* laptopmidi.snibb in Resources */, 03BA8FB61AFB5C4F00F296DB /* config.txt in Resources */, 0388C9A822E61BBE008BED68 /* test1 in Resources */, 03A4319D1DACE5670069859A /* dunsa2.snibb in Resources */, 03A431A11DACE5670069859A /* korvhastig.snibb in Resources */, 03A431A31DACE5670069859A /* websnacks.snibb in Resources */, 0388C9A722E61BBE008BED68 /* LICENSE in Resources */, 0399B2F517F35C1D005ACCBE /* InfoPlist.strings in Resources */, 0388C9AA22E61BBE008BED68 /* test3 in Resources */, 0388C9A922E61BBE008BED68 /* test4 in Resources */, 03EB37241DB0FF720026857F /* projectcart.snibb in Resources */, 03A4319E1DACE5670069859A /* fiskbolja.snibb in Resources */, 03A431A41DACE5670069859A /* wrestchest.snibb in Resources */, 03A4319C1DACE5670069859A /* catslayer.snibb in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 0399B2E317F35C1D005ACCBE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0388C9B322E61BBE008BED68 /* CEngine.c in Sources */, 0388C9AF22E61BBE008BED68 /* test.c in Sources */, 03BA8FB81AFB5EAB00F296DB /* osx_settings.m in Sources */, 0388C9B222E61BBE008BED68 /* CAllocator.c in Sources */, 0388C9B022E61BBE008BED68 /* CSynth.c in Sources */, 0388C9AE22E61BBE008BED68 /* cJSON.c in Sources */, 0388C9A322E61BBE008BED68 /* CInput.c in Sources */, 035B60591AADA84700E41249 /* dir_posix.c in Sources */, 0399B2F717F35C1D005ACCBE /* main.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 0399B2F317F35C1D005ACCBE /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 0399B2F417F35C1D005ACCBE /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 0399B30217F35C1D005ACCBE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; name = Debug; }; 0399B30317F35C1D005ACCBE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; }; name = Release; }; 0399B30517F35C1D005ACCBE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = QM9YTQA8XQ; FRAMEWORK_SEARCH_PATHS = ( /Library/Frameworks, "$(LOCAL_LIBRARY_DIR)/Frameworks", ); GCC_C_LANGUAGE_STANDARD = c99; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ""; GCC_WARN_PEDANTIC = NO; INFOPLIST_FILE = "snibbetracker/snibbetracker-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.harrylundstrom.snibbetracker; PRODUCT_NAME = snibbetracker; PROVISIONING_PROFILE = "2916dd01-98e5-4815-a829-1aee8083203f"; PROVISIONING_PROFILE_SPECIFIER = snibbetracker_mac_dev_profile; WRAPPER_EXTENSION = app; }; name = Debug; }; 0399B30617F35C1D005ACCBE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CODE_SIGN_IDENTITY = "Developer ID Application"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = QM9YTQA8XQ; FRAMEWORK_SEARCH_PATHS = ( /Library/Frameworks, "$(LOCAL_LIBRARY_DIR)/Frameworks", ); GCC_C_LANGUAGE_STANDARD = c99; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ""; GCC_WARN_PEDANTIC = NO; INFOPLIST_FILE = "snibbetracker/snibbetracker-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.harrylundstrom.snibbetracker; PRODUCT_NAME = snibbetracker; PROVISIONING_PROFILE = "0fd81e7e-7104-4d42-a779-162489b185ed"; PROVISIONING_PROFILE_SPECIFIER = snibbetracker_mac_dist_profile; WRAPPER_EXTENSION = app; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 0399B2E217F35C1D005ACCBE /* Build configuration list for PBXProject "snibbetracker" */ = { isa = XCConfigurationList; buildConfigurations = ( 0399B30217F35C1D005ACCBE /* Debug */, 0399B30317F35C1D005ACCBE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 0399B30417F35C1D005ACCBE /* Build configuration list for PBXNativeTarget "snibbetracker" */ = { isa = XCConfigurationList; buildConfigurations = ( 0399B30517F35C1D005ACCBE /* Debug */, 0399B30617F35C1D005ACCBE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0399B2DF17F35C1D005ACCBE /* Project object */; } snibbetracker-1.1.1/snibbetracker.xcodeproj/project.xcworkspace/000077500000000000000000000000001351541346100251435ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker.xcodeproj/project.xcworkspace/contents.xcworkspacedata000066400000000000000000000002361351541346100321060ustar00rootroot00000000000000 snibbetracker-1.1.1/snibbetracker.xcodeproj/project.xcworkspace/xcshareddata/000077500000000000000000000000001351541346100275765ustar00rootroot00000000000000IDEWorkspaceChecks.plist000066400000000000000000000003561351541346100342010ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker.xcodeproj/project.xcworkspace/xcshareddata IDEDidComputeMac32BitWarning snibbetracker.xcscmblueprint000066400000000000000000000031351351541346100353230ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker.xcodeproj/project.xcworkspace/xcshareddata{ "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "1E655E55D34180930F338391307226E47EC98BA2", "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { }, "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { "C4D6EFF8926804CF95C1D0E3F3187B354CF8EE87" : 0, "1E655E55D34180930F338391307226E47EC98BA2" : 0 }, "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "FEBBE278-D586-4D08-90DB-23B4A69B1B1E", "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { "C4D6EFF8926804CF95C1D0E3F3187B354CF8EE87" : "cengine\/", "1E655E55D34180930F338391307226E47EC98BA2" : "synth\/" }, "DVTSourceControlWorkspaceBlueprintNameKey" : "snibbetracker", "DVTSourceControlWorkspaceBlueprintVersion" : 204, "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "snibbetracker.xcodeproj", "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ { "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "bitbucket.org:harrylundstrom\/csynth.git", "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "1E655E55D34180930F338391307226E47EC98BA2" }, { "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "bitbucket.org:harrylundstrom\/cengine.git", "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C4D6EFF8926804CF95C1D0E3F3187B354CF8EE87" } ] }snibbetracker-1.1.1/snibbetracker/000077500000000000000000000000001351541346100171515ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker/en.lproj/000077500000000000000000000000001351541346100207005ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker/en.lproj/InfoPlist.strings000066400000000000000000000000551351541346100242220ustar00rootroot00000000000000/* Localized versions of Info.plist keys */ snibbetracker-1.1.1/snibbetracker/snibbetracker-Info.plist000066400000000000000000000022231351541346100237340ustar00rootroot00000000000000 CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile [IconName] CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.1.1 CFBundleSignature ???? CFBundleVersion 3 LSApplicationCategoryType public.app-category.music LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright Copyright © lundstroem. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass NSApplication snibbetracker-1.1.1/snibbetracker/src/000077500000000000000000000000001351541346100177405ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker/src/CAllocator.c000066400000000000000000000154701351541346100221360ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include "CAllocator.h" static bool track_allocations = false; static bool debug_log = false; static int null_allocs = 0; static int alloc_count = 0; static int alloc_track_size = 1000; static int alloc_track_cursor = 0; static struct CAllocatorNode **alloc_ids = NULL; static struct CAllocatorNode *cAllocatorNodeNew(size_t size, void *pointer, char *name); static bool cAllocatorRemoveTrackedAllocation(void *pointer); void cAllocatorSetTrackAllocations(bool track) { track_allocations = track; } void cAllocatorSetDebuglog(bool debuglog) { debug_log = debuglog; } void cAllocatorPrintAllocationCount(void) { if(debug_log) { printf("CAllocator alloc count:%d\n", alloc_count); } } void cAllocatorPrintAllocations(void) { if (track_allocations) { for (int i = 0; i < alloc_track_size; i++) { if(alloc_ids[i] != NULL) { if (debug_log) { if(!alloc_ids[i]->deallocated && !alloc_ids[i]->duplicate_address) { printf("active alloc name: %s size:%zu pointer:%p\n", alloc_ids[i]->name, alloc_ids[i]->size, alloc_ids[i]->pointer); } } } } } else { if(debug_log) { printf("cAllocator - allocation tracking is disabled.\n"); } } } void cAllocatorCleanup(void) { if (track_allocations) { if(alloc_ids != NULL) { for (int i = 0; i < alloc_track_size; i++) { if(alloc_ids[i] != NULL) { free(alloc_ids[i]); alloc_ids[i] = NULL; } } free(alloc_ids); alloc_ids = NULL; } } } static struct CAllocatorNode *cAllocatorNodeNew(size_t size, void *pointer, char *name) { struct CAllocatorNode *n = NULL; if(alloc_track_cursor < alloc_track_size) { if(alloc_ids == NULL) { alloc_ids = malloc(sizeof(struct CAllocatorNode*)*alloc_track_size); for (int i = 0; i < alloc_track_size; i++) { alloc_ids[i] = NULL; } } n = malloc(sizeof(struct CAllocatorNode)); n->size = size; n->pointer = pointer; n->name = name; n->deallocated = false; n->duplicate_address = false; cAllocatorCheckDuplicates(pointer); alloc_ids[alloc_track_cursor] = n; //printf("alloc_ids[%d]: alloc %s pointer:%p\n", alloc_track_cursor, n->name, n->pointer); alloc_track_cursor++; return n; } else { if(debug_log) { printf("cAllocatorAlloc error: cursor exceeds size for trackable allocations limit:%d", alloc_track_size); } return NULL; } } void cAllocatorExpandTrackSize(void) { int new_track_size = alloc_track_size + 10000; struct CAllocatorNode **new_alloc_ids = malloc(sizeof(struct CAllocatorNode*)*new_track_size); for(int i = 0; i < new_track_size; i++) { if (i < alloc_track_size) { new_alloc_ids[i] = alloc_ids[i]; } else { new_alloc_ids[i] = NULL; } } alloc_track_size = new_track_size; free(alloc_ids); alloc_ids = new_alloc_ids; if(debug_log) { printf("re2_allocator_alloc new size:%d", alloc_track_size); } } void cAllocatorCheckDuplicates(void *pointer) { /* if a tracked and freed alloc has the same address as a new one, prevent it from generating errors by setting the duplicate flag.*/ for (int i = 0; i < alloc_track_size; i++) { if(alloc_ids[i] != NULL) { if(alloc_ids[i]->pointer == pointer && alloc_ids[i]->deallocated) { alloc_ids[i]->duplicate_address = true; } } } } static bool cAllocatorRemoveTrackedAllocation(void *pointer) { for (int i = 0; i < alloc_track_size; i++) { if(alloc_ids[i] != NULL) { if(alloc_ids[i]->pointer == pointer) { if (!alloc_ids[i]->deallocated) { alloc_ids[i]->deallocated = true; return true; } else if(!alloc_ids[i]->duplicate_address) { printf("cAllocator warning: trying to free deallocated pointer. name: %s size:%zu pointer:%p alloc_node:%p\n", alloc_ids[i]->name, alloc_ids[i]->size, alloc_ids[i]->pointer, alloc_ids[i]); return false; } else if(alloc_ids[i]->duplicate_address) { // it has been replaced by another alloc. ignore it. } } } } if (debug_log) { printf("cAllocator warning: Could not find pointer:%p to dealloc\n", pointer); } return false; } void *cAllocatorAlloc(size_t size, char *name) { void *ptr = NULL; ptr = malloc(size); if(ptr == NULL) { if(debug_log) { printf("cAllocatorAlloc error: malloc with size %zu returned NULL.\n name:%s", size, name); } } else { if(track_allocations) { struct CAllocatorNode *node = cAllocatorNodeNew(size, ptr, name); if (node == NULL) { cAllocatorExpandTrackSize(); cAllocatorNodeNew(size, ptr, name); } } alloc_count++; } return ptr; } void *cAllocatorFree(void *ptr) { if(ptr != NULL) { bool dealloc = true; if(track_allocations) { dealloc = cAllocatorRemoveTrackedAllocation(ptr); } if(dealloc) { free(ptr); alloc_count--; } } else { if(debug_log) { printf("cAllocatorAlloc warning: pointer cannot be deallocated because it's NULL. \n"); } null_allocs++; } return NULL; } snibbetracker-1.1.1/snibbetracker/src/CAllocator.h000066400000000000000000000034051351541346100221360ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef cengine_CAllocator_h #define cengine_CAllocator_h struct CAllocatorNode { size_t size; void *pointer; char *name; bool deallocated; bool duplicate_address; }; struct CAllocatorArray { int x; int y; int z; void **array1d; void ***array2d; void ****array3d; }; void cAllocatorSetTrackAllocations(bool track); void cAllocatorSetDebuglog(bool debuglog); void cAllocatorPrintAllocationCount(void); void cAllocatorPrintAllocations(void); void cAllocatorCleanup(void); void *cAllocatorAlloc(size_t size, char *name); void *cAllocatorFree(void *ptr); void cAllocatorExpandTrackSize(void); void cAllocatorCheckDuplicates(void *pointer); #endif snibbetracker-1.1.1/snibbetracker/src/CEngine.c000066400000000000000000000517701351541346100214260ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include #include "CEngine.h" #include "CAllocator.h" #include "CSynth.h" // CTimer struct CTimer *cTimerNew(double wait_time) { struct CTimer *t = cAllocatorAlloc(sizeof(struct CTimer), "CTimer"); t->amountToWait = wait_time; t->initAmountToWait = wait_time; t->currentWaitingTime = 0; t->isReady = false; return t; } double cTimerTimeLeft(struct CTimer *t) { return t->amountToWait-t->currentWaitingTime; } void cTimerSetReady(struct CTimer *t) { t->currentWaitingTime = t->amountToWait+1; } unsigned char cTimerIsReady(struct CTimer *t) { if(t->currentWaitingTime > t->amountToWait) { t->isReady = true; } return t->isReady; } void cTimerAdvance(double time, struct CTimer *t) { //if the timer has not finished, advance. if(t->isReady == 0) { t->currentWaitingTime += time; } } void cTimerResetWithTime(double time, struct CTimer *t) { t->amountToWait = time; t->initAmountToWait = time; t->isReady = false; t->currentWaitingTime = 0; } void cTimerReset(struct CTimer *t) { t->amountToWait = t->initAmountToWait; t->isReady = false; t->currentWaitingTime = 0; } // CLabel struct CLabel *cLabelNew(struct CStr *cstr) { struct CLabel *t = cAllocatorAlloc(sizeof(struct CLabel), "CLabel"); if (cstr != NULL) { if (cstr->chars != NULL) { int length = (int)cStrLength(cstr); t->x_offset_max = length*8; t->scrolling = false; return t; } } return NULL; } void cLabelSetLabel(struct CLabel *l, struct CStr *cstr) { if (cstr != NULL) { if (cstr->chars != NULL) { int length = (int)cStrLength(cstr); l->x_offset_max = length*8; l->scrolling = false; } } } void cLabelActivateScrolling(struct CLabel *l, int start_x) { l->scrolling = true; l->x = start_x; } void cLabelCleanup(struct CLabel *l) { if (l->str != NULL) { l->str = cStrCleanup(l->str); } } // CStr int cPrint(const char *fmt,...) { size_t count = 255; char chars[256]; size_t ret; va_list ap; va_start(ap, fmt); ret = vsnprintf(chars, count, fmt, ap); va_end(ap); printf("str:%s\n",chars); return (int)ret; } void cStrResize(struct CStr *cstr, size_t size) { if (cstr != NULL) { char *temp_chars = cAllocatorAlloc((sizeof(char)*size)+1, "cstr resize file name chars"); if (cstr->chars != NULL) { cstr->chars = cAllocatorFree(cstr->chars); } cstr->size = (int)size; cstr->chars = temp_chars; } } struct CStr *cStrPrintWithSize(size_t size, struct CStr *cstr, const char *fmt,...) { if (cstr == NULL) { const size_t default_size = size; cstr = cAllocatorAlloc(sizeof(struct CStr), "CStr"); char *temp_chars = cAllocatorAlloc((sizeof(char)*default_size)+1, "cstr file name chars"); cstr->chars = temp_chars; cstr->size = (int)default_size; } if (cstr != NULL) { if (cstr->chars != NULL) { size_t count = cstr->size; size_t ret; va_list ap; va_start(ap, fmt); ret = vsnprintf(cstr->chars, count, fmt, ap); va_end(ap); } } return cstr; } struct CStr *cStrPrint(struct CStr *cstr, const char *fmt,...) { if (cstr == NULL) { const size_t default_size = 20; cstr = cAllocatorAlloc(sizeof(struct CStr), "CStr"); char *temp_chars = cAllocatorAlloc((sizeof(char)*default_size)+1, "cstr file name chars"); cstr->chars = temp_chars; cstr->size = default_size; } if (cstr != NULL) { if (cstr->chars != NULL) { size_t count = cstr->size; size_t ret; va_list ap; va_start(ap, fmt); ret = vsnprintf(cstr->chars, count, fmt, ap); va_end(ap); } } return cstr; } struct CStr *cStrCleanup(struct CStr *cstr) { if (cstr != NULL) { if(cstr->chars != NULL) { cstr->chars = cAllocatorFree(cstr->chars); } cAllocatorFree(cstr); } return NULL; } unsigned long cStrLength(struct CStr *cstr) { unsigned long length = 0; if (cstr != NULL) { if(cstr->chars != NULL) { length = strlen(cstr->chars); } } return length; } char cStrCharAt(struct CStr *cstr, int pos) { char ret = 0; if (cstr != NULL) { if(pos < cstr->size) { ret = cstr->chars[pos]; } } return ret; } // CEngine static void cEngineShowFPS(double dt, unsigned int **raster); static void cEngineInitData(void); static void cEngineRender(double dt, unsigned int **raster, struct CInput *input); static void cEngineUpdate(double dt, struct CInput *input); static void cEngineClearScreen(unsigned int **raster); static void cEngineRenderSprite(unsigned int **raster, int sprite_x, int sprite_y, int screen_x, int screen_y ,unsigned char camera_offset, int width, int height, unsigned char hit, unsigned int color, unsigned int bg_color); static unsigned int **sprite_pixel_data = NULL; static int camera_x = 0; static int camera_y = 0; static struct CEngineContext *engine = NULL; void cEngineInit(struct CEngineContext *e) { engine = e; cEngineInitData(); srand(666); // custom init if(engine->cEngineInitHook != NULL) { engine->cEngineInitHook(e); } } struct CEngineContext *cEngineContextNew(void) { struct CEngineContext *c = cAllocatorAlloc(sizeof(struct CEngineContext), "CEngineContext"); c->width = 144; c->height = 256; c->sprite_size = 16; c->sheet_width = 1024; c->sheet_height = 1024; c->max_touches = 8; c->level_width = 64; c->level_height = 64; // TODO use these in rendering. c->color_mode_rgba = true; c->color_mode_argb = false; c->clear_color = 0x000000FF; c->show_fps = false; c->input = NULL; c->ground_render_enabled = true; c->cEngineInitHook = NULL; c->cEnginePreUpdateHook = NULL; c->cEngineUpdateHook = NULL; c->cEngineRenderHook = NULL; c->cEngineEnvironmentCollisionHook = NULL; c->cEngineCleanupHook = NULL; return c; } void cEngineLog(char *string) { printf("cEngineLog:%s\n", string); } void cEngineCleanup(void) { if(engine->cEngineCleanupHook != NULL) { engine->cEngineCleanupHook(); } for(int i = 0; i < engine->sheet_width; i++) { if(sprite_pixel_data != NULL) { sprite_pixel_data[i] = cAllocatorFree(sprite_pixel_data[i]); } } sprite_pixel_data = cAllocatorFree(sprite_pixel_data); cInputCleanup(engine->input, engine->max_touches); engine->input = NULL; if(engine != NULL) { engine = cAllocatorFree(engine); } } void cEngineDrawArea(int x, int y, int w, int h, unsigned int color, unsigned int **raster2d) { if (x > -1 && y > -1 && x < engine->width && y < engine->height && x+w > -1 && y+h > -1 && x+w < engine->width && y+h < engine->height) { for (int r_x = x; r_x < x+w; r_x++) { for (int r_y = y; r_y < y+h; r_y++) { raster2d[r_x][r_y] = color; } } } } void cEngineInitData(void) { int i; sprite_pixel_data = cAllocatorAlloc(engine->sheet_width * sizeof(unsigned int*), "sprite pixel data"); if(sprite_pixel_data == NULL) { fprintf(stderr, "sheet out of memory\n"); } for(i = 0; i < engine->sheet_width; i++) { if(sprite_pixel_data != NULL) { sprite_pixel_data[i] = cAllocatorAlloc(engine->sheet_height * sizeof(unsigned int), "sprite pixel data"); if(sprite_pixel_data[i] == NULL) { fprintf(stderr, "sheet out of memory\n"); } } } if(sprite_pixel_data != NULL) { for(int x = 0; x < engine->sheet_width; x++) { for(int y = 0; y < engine->sheet_height; y++) { if(sprite_pixel_data[x] != NULL) { sprite_pixel_data[x][y] = 0; } } } } engine->input = cInputNew(); } // only used for init void cEngineWritePixelData(unsigned int* ptr) { for (int s_x = 0; s_x < engine->sheet_width; s_x++) { for (int s_y = 0; s_y < engine->sheet_height; s_y++) { sprite_pixel_data[s_x][s_y] = ptr[s_x+s_y*engine->sheet_width]; } } } void cEngineUpdateInput(double dt, unsigned int **raster) { cEngineUpdate(dt, engine->input); } void cEngineGameloop(double dt, unsigned int **raster) { cEngineRender(dt, raster, engine->input); } void cEngineUpdate(double dt, struct CInput *input) { if(engine->cEnginePreUpdateHook != NULL) { engine->cEnginePreUpdateHook(engine->input, dt); } if(engine->cEngineUpdateHook != NULL) { engine->cEngineUpdateHook(dt); } } void cEngineUpdateCamera(int x, int y) { camera_x = x; camera_y = y; } void cEngineRender(double dt, unsigned int **raster, struct CInput *input) { cEngineClearScreen(raster); if(engine->cEngineRenderHook != NULL) { engine->cEngineRenderHook(dt, raster); } if(engine->show_fps) { cEngineShowFPS(dt, raster); } } void cEngineShowFPS(double dt, unsigned int **raster) { static int frame_cache_counter = 0; static double cached_frame_time = 16; frame_cache_counter++; if(frame_cache_counter == 20) { cached_frame_time = dt; frame_cache_counter = 0; } char fps[20]; double double_fps = 1000/cached_frame_time; sprintf(fps, "%f", double_fps); cEngineRenderLabelWithParams(raster, fps, 0, 0, 0x00FF00FF, 0x00FFFFFF); } static void cEngineRenderSprite(unsigned int **raster, int sprite_x, int sprite_y, int screen_x, int screen_y ,unsigned char camera_offset, int width, int height, unsigned char hit, unsigned int color, unsigned int bg_color) { unsigned int alpha = color & 0xff; unsigned int bg_alpha = bg_color & 0xff; if(engine->color_mode_argb) { alpha = (color >> (8*3)) & 0xff; bg_alpha = (bg_color >> (8*3)) & 0xff; } screen_x *= width; screen_y *= height; for (int s_x = 0; s_x < width; s_x++) { for (int s_y = 0; s_y < height; s_y++) { // screen offsets int s_x_p = sprite_x+s_x; int s_y_p = sprite_y+s_y; // sheet offsets int s_x_sheet_p = screen_x+s_x; int s_y_sheet_p = screen_y+s_y; // camera offsets if(camera_offset) { s_x_p -= camera_x; s_y_p -= camera_y; } if(s_x_p > -1 && s_y_p > -1 && s_x_p < engine->width && s_y_p < engine->height && s_x_sheet_p > -1 && s_y_sheet_p > -1 && s_x_sheet_p < engine->sheet_width && s_y_sheet_p < engine->sheet_height) { unsigned int alpha2 = sprite_pixel_data[s_x_sheet_p][s_y_sheet_p] & 0xFF; if(alpha2 > 0) { raster[s_x_p][s_y_p] = sprite_pixel_data[s_x_sheet_p][s_y_sheet_p]; } else { if(bg_alpha > 0) { raster[s_x_p][s_y_p] = bg_color; } if(alpha2 > 0) { raster[s_x_p][s_y_p] = color; } } } } } } void cEngineClearScreen(unsigned int **raster) { for (int s_x = 0; s_x < engine->width; s_x++) { for (int s_y = 0; s_y < engine->height; s_y++) { raster[s_x][s_y] = engine->clear_color; } } } void cEngineRenderLabelWithParams(unsigned int **raster, char *string, int s_x, int s_y, unsigned int color, unsigned int bg_color) { unsigned int alpha = color & 0xff; if(engine->color_mode_argb) { alpha = (color >> (8*3)) & 0xff; } if(alpha > 0) { int len = (int)strlen(string); for(int i = 0; i < len; i++) { char c = string[i]; int x_char_pos = cEngineGetCharPos(c); cEngineRenderSprite(raster, (s_x*8)+(i*8), s_y*12, x_char_pos, 0, 1, 8, 12, 0, color, bg_color); } } } void cEngineRenderLabel(unsigned int **raster, struct CLabel *l, unsigned int color, unsigned int bg_color) { int len = (int)cStrLength(l->str); if(l->scrolling == 1) { l->x--; if (l->x < -l->x_offset_max) { l->x = engine->width; } } for(int i = 0; i < len; i++) { char c = l->str->chars[i]; int x_char_pos = cEngineGetCharPos(c); if(l->x+(i*8) > -engine->sprite_size && l->x < engine->width+engine->sprite_size) { cEngineRenderSprite(raster, l->x+(i*8), l->y, x_char_pos, 0, 1, 8, 12, 0, color, bg_color); } } } void cEngineRenderLabelByPixelPos(unsigned int **raster, char *string, int s_x, int s_y, unsigned int color, unsigned int bg_color) { unsigned int alpha = color & 0xff; if(engine->color_mode_argb) { alpha = (color >> (8*3)) & 0xff; } if(alpha > 0) { int len = (int)strlen(string); for(int i = 0; i ': return 92; break; default: return 77; break; } } char cEngineGetCharPosReverse(int c) { switch (c) { case 0: return 'A'; break; case 1: return 'B'; break; case 2: return 'C'; break; case 3: return 'D'; break; case 4: return 'E'; break; case 5: return 'F'; break; case 6: return 'G'; break; case 7: return 'H'; break; case 8: return 'I'; break; case 9: return 'J'; break; case 10: return 'K'; break; case 11: return 'L'; break; case 12: return 'M'; break; case 13: return 'N'; break; case 14: return 'O'; break; case 15: return 'P'; break; case 16: return 'Q'; break; case 17: return 'R'; break; case 18: return 'S'; break; case 19: return 'T'; break; case 20: return 'U'; break; case 21: return 'V'; break; case 22: return 'W'; break; case 23: return 'X'; break; case 24: return 'Y'; break; case 25: return 'Z'; break; case 29: return 'a'; break; case 30: return 'b'; break; case 31: return 'c'; break; case 32: return 'd'; break; case 33: return 'e'; break; case 34: return 'f'; break; case 35: return 'g'; break; case 36: return 'h'; break; case 37: return 'i'; break; case 38: return 'j'; break; case 39: return 'k'; break; case 40: return 'l'; break; case 41: return 'm'; break; case 42: return 'n'; break; case 43: return 'o'; break; case 44: return 'p'; break; case 45: return 'q'; break; case 46: return 'r'; break; case 47: return 's'; break; case 48: return 't'; break; case 49: return 'u'; break; case 50: return 'v'; break; case 51: return 'w'; break; case 52: return 'x'; break; case 53: return 'y'; break; case 54: return 'z'; break; case 58: return ' '; break; case 59: return '0'; break; case 60: return '1'; break; case 61: return '2'; break; case 62: return '3'; break; case 63: return '4'; break; case 64: return '5'; break; case 65: return '6'; break; case 66: return '7'; break; case 67: return '8'; break; case 68: return '9'; break; case 69: return '.'; break; case 70: return ','; break; case 71: return ':'; break; case 72: return '-'; break; case 73: return '\''; break; case 74: return '!'; break; case 75: return '"'; break; case 76: return '#'; break; case 77: return '?'; break; case 78: return '/'; break; case 79: return '\\'; break; case 80: return '['; break; case 81: return ']'; break; case 82: return '('; break; case 83: return ')'; break; case 84: return '%'; break; case 85: return '_'; break; case 86: return '+'; break; case 87: return '|'; break; case 88: return '='; break; case 89: return '^'; break; case 90: return '`'; break; case 91: return '<'; break; case 92: return '>'; break; default: return 77; break; } } snibbetracker-1.1.1/snibbetracker/src/CEngine.h000066400000000000000000000076251351541346100214330ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include "CInput.h" #ifndef cengine_CEngine_h #define cengine_CEngine_h struct CTimer { double amountToWait; double initAmountToWait; double currentWaitingTime; bool isReady; }; struct CTimer *cTimerNew(double wait_time); double cTimerTimeLeft(struct CTimer *t); void cTimerSetReady(struct CTimer *t); unsigned char cTimerIsReady(struct CTimer *t); void cTimerAdvance(double time, struct CTimer *t); void cTimerResetWithTime(double time, struct CTimer *t); void cTimerReset(struct CTimer *t); struct CLabel { struct CStr *str; int x_offset_max; // for scrolltext int x; int y; bool scrolling; }; struct CLabel *cLabelNew(struct CStr *cstr); void cLabelSetLabel(struct CLabel *l, struct CStr *cstr); void cLabelActivateScrolling(struct CLabel *l, int start_x); void cLabelCleanup(struct CLabel *l); struct CStr { char *chars; int size; }; void cStrTests(void); int cPrint(const char *fmt,...); void cStrResize(struct CStr *cstr, size_t size); struct CStr *cStrPrint(struct CStr *cstr, const char *fmt,...); struct CStr *cStrPrintWithSize(size_t size, struct CStr *cstr, const char *fmt,...); unsigned long cStrLength(struct CStr *cstr); char cStrCharAt(struct CStr *cstr, int pos); struct CStr *cStrCleanup(struct CStr *cstr); struct CEngineContext { int width; int height; int sprite_size; int sheet_width; int sheet_height; int max_touches; int level_width; int level_height; bool color_mode_rgba; bool color_mode_argb; unsigned int clear_color; bool show_fps; bool ground_render_enabled; struct CInput *input; void (*cEngineInitHook)(struct CEngineContext *e); void (*cEnginePreUpdateHook)(struct CInput *input, double dt); void (*cEngineUpdateHook)(double dt); void (*cEngineRenderHook)(double dt, unsigned int **raster); void (*cEngineEnvironmentCollisionHook)(void); void (*cEngineCleanupHook)(void); }; void cEngineInit(struct CEngineContext *e); struct CEngineContext *cEngineContextNew(void); void cEngineLog(char *string); void cEngineWritePixelData(unsigned int* data); void cEngineUpdateCamera(int x, int y); void cEngineCleanup(void); int cEngineGetCharPos(char c); char cEngineGetCharPosReverse(int c); void cEngineDrawArea(int x, int y, int w, int h, unsigned int color, unsigned int **raster2d); void cEngineUpdateInput(double dt, unsigned int **raster); void cEngineGameloop(double dt, unsigned int **raster); void cEngineRenderLabelByPixelPos(unsigned int **raster, char *string, int s_x, int s_y, unsigned int color, unsigned int bg_color); void cEngineRenderLabelWithParams(unsigned int **raster, char *string, int s_x, int s_y, unsigned int color, unsigned int bg_color); void cEngineRenderLabel(unsigned int **raster, struct CLabel *l, unsigned int color, unsigned int bg_color); #endif snibbetracker-1.1.1/snibbetracker/src/CInput.c000066400000000000000000000334541351541346100213170ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include "CInput.h" #include "CAllocator.h" struct CInput *cInputNew(void) { struct CInput *input = cAllocatorAlloc(sizeof(struct CInput), "CInput"); input->mouse1 = false; input->mouse2 = false; input->key_0 = false; input->key_1 = false; input->key_2 = false; input->key_3 = false; input->key_4 = false; input->key_5 = false; input->key_6 = false; input->key_7 = false; input->key_8 = false; input->key_9 = false; input->key_a = false; input->key_b = false; input->key_c = false; input->key_d = false; input->key_e = false; input->key_f = false; input->key_g = false; input->key_h = false; input->key_i = false; input->key_j = false; input->key_k = false; input->key_l = false; input->key_m = false; input->key_n = false; input->key_o = false; input->key_p = false; input->key_q = false; input->key_r = false; input->key_s = false; input->key_t = false; input->key_u = false; input->key_v = false; input->key_w = false; input->key_x = false; input->key_y = false; input->key_z = false; input->key_space = false; input->key_plus = false; input->key_minus = false; input->key_tab = false; input->key_lgui = false; input->key_lctrl = false; input->key_escape = false; input->key_return = false; input->key_left = false; input->key_right = false; input->key_up = false; input->key_down = false; input->key_lshift = false; input->key_home = false; input->key_end = false; input->key_backspace = false; input->key_delete = false; input->key_comma = false; input->key_period = false; input->key_f1 = false; input->key_f2 = false; input->key_f3 = false; input->key_f4 = false; input->key_f5 = false; input->key_f6 = false; input->key_f7 = false; input->key_f8 = false; input->key_f9 = false; input->key_f10 = false; input->key_f11 = false; input->key_f12 = false; // key locks. if locked, key_up must be called before key can be active again. input->mouse1_lock = false; input->mouse2_lock = false; input->key_lock_0 = false; input->key_lock_1 = false; input->key_lock_2 = false; input->key_lock_3 = false; input->key_lock_4 = false; input->key_lock_5 = false; input->key_lock_6 = false; input->key_lock_7 = false; input->key_lock_8 = false; input->key_lock_9 = false; input->key_lock_a = false; input->key_lock_b = false; input->key_lock_c = false; input->key_lock_d = false; input->key_lock_e = false; input->key_lock_f = false; input->key_lock_g = false; input->key_lock_h = false; input->key_lock_i = false; input->key_lock_j = false; input->key_lock_k = false; input->key_lock_l = false; input->key_lock_m = false; input->key_lock_n = false; input->key_lock_o = false; input->key_lock_p = false; input->key_lock_q = false; input->key_lock_r = false; input->key_lock_s = false; input->key_lock_t = false; input->key_lock_u = false; input->key_lock_v = false; input->key_lock_w = false; input->key_lock_x = false; input->key_lock_y = false; input->key_lock_z = false; input->key_lock_space = false; input->key_lock_plus = false; input->key_lock_minus = false; input->key_lock_tab = false; input->key_lock_lgui = false; input->key_lock_lctrl = false; input->key_lock_escape = false; input->key_lock_return = false; input->key_lock_left = false; input->key_lock_right = false; input->key_lock_up = false; input->key_lock_down = false; input->key_lock_lshift = false; input->key_lock_home = false; input->key_lock_end = false; input->key_lock_backspace = false; input->key_lock_delete = false; input->key_lock_comma = false; input->key_lock_period = false; input->key_lock_f1 = false; input->key_lock_f2 = false; input->key_lock_f3 = false; input->key_lock_f4 = false; input->key_lock_f5 = false; input->key_lock_f6 = false; input->key_lock_f7 = false; input->key_lock_f8 = false; input->key_lock_f9 = false; input->key_lock_f10 = false; input->key_lock_f11 = false; input->key_lock_f12 = false; input->mouse1_pending_lock = false; input->mouse2_pending_lock = false; input->key_pending_lock_0 = false; input->key_pending_lock_1 = false; input->key_pending_lock_2 = false; input->key_pending_lock_3 = false; input->key_pending_lock_4 = false; input->key_pending_lock_5 = false; input->key_pending_lock_6 = false; input->key_pending_lock_7 = false; input->key_pending_lock_8 = false; input->key_pending_lock_9 = false; input->key_pending_lock_a = false; input->key_pending_lock_b = false; input->key_pending_lock_c = false; input->key_pending_lock_d = false; input->key_pending_lock_e = false; input->key_pending_lock_f = false; input->key_pending_lock_g = false; input->key_pending_lock_h = false; input->key_pending_lock_i = false; input->key_pending_lock_j = false; input->key_pending_lock_k = false; input->key_pending_lock_l = false; input->key_pending_lock_m = false; input->key_pending_lock_n = false; input->key_pending_lock_o = false; input->key_pending_lock_p = false; input->key_pending_lock_q = false; input->key_pending_lock_r = false; input->key_pending_lock_s = false; input->key_pending_lock_t = false; input->key_pending_lock_u = false; input->key_pending_lock_v = false; input->key_pending_lock_w = false; input->key_pending_lock_x = false; input->key_pending_lock_y = false; input->key_pending_lock_z = false; input->key_pending_lock_space = false; input->key_pending_lock_plus = false; input->key_pending_lock_minus = false; input->key_pending_lock_tab = false; input->key_pending_lock_lgui = false; input->key_pending_lock_lctrl = false; input->key_pending_lock_escape = false; input->key_pending_lock_return = false; input->key_pending_lock_left = false; input->key_pending_lock_right = false; input->key_pending_lock_up = false; input->key_pending_lock_down = false; input->key_pending_lock_lshift = false; input->key_pending_lock_home = false; input->key_pending_lock_end = false; input->key_pending_lock_backspace = false; input->key_pending_lock_delete = false; input->key_pending_lock_comma = false; input->key_pending_lock_period = false; input->key_pending_lock_f1 = false; input->key_pending_lock_f2 = false; input->key_pending_lock_f3 = false; input->key_pending_lock_f4 = false; input->key_pending_lock_f5 = false; input->key_pending_lock_f6 = false; input->key_pending_lock_f7 = false; input->key_pending_lock_f8 = false; input->key_pending_lock_f9 = false; input->key_pending_lock_f10 = false; input->key_pending_lock_f11 = false; input->key_pending_lock_f12 = false; input->mouse_x = 0; input->mouse_y = 0; return input; } void cInputApplyPendingLocks(struct CInput *input) { input->mouse1_lock = input->mouse1_pending_lock; input->mouse2_lock = input->mouse2_pending_lock; input->key_lock_0 = input->key_pending_lock_0; input->key_lock_1 = input->key_pending_lock_1; input->key_lock_2 = input->key_pending_lock_2; input->key_lock_3 = input->key_pending_lock_3; input->key_lock_4 = input->key_pending_lock_4; input->key_lock_5 = input->key_pending_lock_5; input->key_lock_6 = input->key_pending_lock_6; input->key_lock_7 = input->key_pending_lock_7; input->key_lock_8 = input->key_pending_lock_8; input->key_lock_9 = input->key_pending_lock_9; input->key_lock_a = input->key_pending_lock_a; input->key_lock_b = input->key_pending_lock_b; input->key_lock_c = input->key_pending_lock_c; input->key_lock_d = input->key_pending_lock_d; input->key_lock_e = input->key_pending_lock_e; input->key_lock_f = input->key_pending_lock_f; input->key_lock_g = input->key_pending_lock_g; input->key_lock_h = input->key_pending_lock_h; input->key_lock_i = input->key_pending_lock_i; input->key_lock_j = input->key_pending_lock_j; input->key_lock_k = input->key_pending_lock_k; input->key_lock_l = input->key_pending_lock_l; input->key_lock_m = input->key_pending_lock_m; input->key_lock_n = input->key_pending_lock_n; input->key_lock_o = input->key_pending_lock_o; input->key_lock_p = input->key_pending_lock_p; input->key_lock_q = input->key_pending_lock_q; input->key_lock_r = input->key_pending_lock_r; input->key_lock_s = input->key_pending_lock_s; input->key_lock_t = input->key_pending_lock_t; input->key_lock_u = input->key_pending_lock_u; input->key_lock_v = input->key_pending_lock_v; input->key_lock_w = input->key_pending_lock_w; input->key_lock_x = input->key_pending_lock_x; input->key_lock_y = input->key_pending_lock_y; input->key_lock_z = input->key_pending_lock_z; input->key_lock_space = input->key_pending_lock_space; input->key_lock_plus = input->key_pending_lock_plus; input->key_lock_minus = input->key_pending_lock_minus; input->key_lock_tab = input->key_pending_lock_tab; input->key_lock_lgui = input->key_pending_lock_lgui; input->key_lock_lctrl = input->key_pending_lock_lctrl; input->key_lock_escape = input->key_pending_lock_escape; input->key_lock_return = input->key_pending_lock_return; input->key_lock_left = input->key_pending_lock_left; input->key_lock_right = input->key_pending_lock_right; input->key_lock_up = input->key_pending_lock_up; input->key_lock_down = input->key_pending_lock_down; input->key_lock_lshift = input->key_pending_lock_lshift; input->key_lock_home = input->key_pending_lock_home; input->key_lock_end = input->key_pending_lock_end; input->key_lock_backspace = input->key_pending_lock_backspace; input->key_lock_delete = input->key_pending_lock_delete; input->key_lock_comma = input->key_pending_lock_comma; input->key_lock_period = input->key_pending_lock_period; input->key_lock_f1 = input->key_pending_lock_f1; input->key_lock_f2 = input->key_pending_lock_f2; input->key_lock_f3 = input->key_pending_lock_f3; input->key_lock_f4 = input->key_pending_lock_f4; input->key_lock_f5 = input->key_pending_lock_f5; input->key_lock_f6 = input->key_pending_lock_f6; input->key_lock_f7 = input->key_pending_lock_f7; input->key_lock_f8 = input->key_pending_lock_f8; input->key_lock_f9 = input->key_pending_lock_f9; input->key_lock_f10 = input->key_pending_lock_f10; input->key_lock_f11 = input->key_pending_lock_f11; input->key_lock_f12 = input->key_pending_lock_f12; } void cInputResetKeys(struct CInput *input) { input->key_0 = false; input->key_1 = false; input->key_2 = false; input->key_3 = false; input->key_4 = false; input->key_5 = false; input->key_6 = false; input->key_7 = false; input->key_8 = false; input->key_9 = false; input->key_a = false; input->key_b = false; input->key_c = false; input->key_d = false; input->key_e = false; input->key_f = false; input->key_g = false; input->key_h = false; input->key_i = false; input->key_j = false; input->key_k = false; input->key_l = false; input->key_m = false; input->key_n = false; input->key_o = false; input->key_p = false; input->key_q = false; input->key_r = false; input->key_s = false; input->key_t = false; input->key_u = false; input->key_v = false; input->key_w = false; input->key_x = false; input->key_y = false; input->key_z = false; input->key_space = false; input->key_plus = false; input->key_minus = false; input->key_tab = false; input->key_lgui = false; input->key_lctrl = false; input->key_escape = false; input->key_return = false; input->key_left = false; input->key_right = false; input->key_up = false; input->key_down = false; input->key_lshift = false; input->key_home = false; input->key_end = false; input->key_backspace = false; input->key_delete = false; input->key_comma = false; input->key_period = false; input->key_f1 = false; input->key_f2 = false; input->key_f3 = false; input->key_f4 = false; input->key_f5 = false; input->key_f6 = false; input->key_f7 = false; input->key_f8 = false; input->key_f9 = false; input->key_f10 = false; input->key_f11 = false; input->key_f12 = false; } void *cInputCleanup(struct CInput *input, int max_touches) { input = cAllocatorFree(input); return input; } snibbetracker-1.1.1/snibbetracker/src/CInput.h000066400000000000000000000142411351541346100213150ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #ifndef HelloSDL_CInputKeys_h #define HelloSDL_CInputKeys_h struct CInput { bool mouse1; bool mouse2; bool key_0; bool key_1; bool key_2; bool key_3; bool key_4; bool key_5; bool key_6; bool key_7; bool key_8; bool key_9; bool key_a; bool key_b; bool key_c; bool key_d; bool key_e; bool key_f; bool key_g; bool key_h; bool key_i; bool key_j; bool key_k; bool key_l; bool key_m; bool key_n; bool key_o; bool key_p; bool key_q; bool key_r; bool key_s; bool key_t; bool key_u; bool key_v; bool key_w; bool key_x; bool key_y; bool key_z; bool key_space; bool key_plus; bool key_minus; bool key_tab; bool key_lgui; bool key_lctrl; bool key_escape; bool key_return; bool key_left; bool key_right; bool key_up; bool key_down; bool key_lshift; bool key_home; bool key_end; bool key_backspace; bool key_delete; bool key_comma; bool key_period; bool key_f1; bool key_f2; bool key_f3; bool key_f4; bool key_f5; bool key_f6; bool key_f7; bool key_f8; bool key_f9; bool key_f10; bool key_f11; bool key_f12; bool mouse1_lock; bool mouse2_lock; bool key_lock_0; bool key_lock_1; bool key_lock_2; bool key_lock_3; bool key_lock_4; bool key_lock_5; bool key_lock_6; bool key_lock_7; bool key_lock_8; bool key_lock_9; bool key_lock_a; bool key_lock_b; bool key_lock_c; bool key_lock_d; bool key_lock_e; bool key_lock_f; bool key_lock_g; bool key_lock_h; bool key_lock_i; bool key_lock_j; bool key_lock_k; bool key_lock_l; bool key_lock_m; bool key_lock_n; bool key_lock_o; bool key_lock_p; bool key_lock_q; bool key_lock_r; bool key_lock_s; bool key_lock_t; bool key_lock_u; bool key_lock_v; bool key_lock_w; bool key_lock_x; bool key_lock_y; bool key_lock_z; bool key_lock_space; bool key_lock_plus; bool key_lock_minus; bool key_lock_tab; bool key_lock_lgui; bool key_lock_lctrl; bool key_lock_escape; bool key_lock_return; bool key_lock_left; bool key_lock_right; bool key_lock_up; bool key_lock_down; bool key_lock_lshift; bool key_lock_home; bool key_lock_end; bool key_lock_backspace; bool key_lock_delete; bool key_lock_comma; bool key_lock_period; bool key_lock_f1; bool key_lock_f2; bool key_lock_f3; bool key_lock_f4; bool key_lock_f5; bool key_lock_f6; bool key_lock_f7; bool key_lock_f8; bool key_lock_f9; bool key_lock_f10; bool key_lock_f11; bool key_lock_f12; bool mouse1_pending_lock; bool mouse2_pending_lock; bool key_pending_lock_0; bool key_pending_lock_1; bool key_pending_lock_2; bool key_pending_lock_3; bool key_pending_lock_4; bool key_pending_lock_5; bool key_pending_lock_6; bool key_pending_lock_7; bool key_pending_lock_8; bool key_pending_lock_9; bool key_pending_lock_a; bool key_pending_lock_b; bool key_pending_lock_c; bool key_pending_lock_d; bool key_pending_lock_e; bool key_pending_lock_f; bool key_pending_lock_g; bool key_pending_lock_h; bool key_pending_lock_i; bool key_pending_lock_j; bool key_pending_lock_k; bool key_pending_lock_l; bool key_pending_lock_m; bool key_pending_lock_n; bool key_pending_lock_o; bool key_pending_lock_p; bool key_pending_lock_q; bool key_pending_lock_r; bool key_pending_lock_s; bool key_pending_lock_t; bool key_pending_lock_u; bool key_pending_lock_v; bool key_pending_lock_w; bool key_pending_lock_x; bool key_pending_lock_y; bool key_pending_lock_z; bool key_pending_lock_space; bool key_pending_lock_plus; bool key_pending_lock_minus; bool key_pending_lock_tab; bool key_pending_lock_lgui; bool key_pending_lock_lctrl; bool key_pending_lock_escape; bool key_pending_lock_return; bool key_pending_lock_left; bool key_pending_lock_right; bool key_pending_lock_up; bool key_pending_lock_down; bool key_pending_lock_lshift; bool key_pending_lock_home; bool key_pending_lock_end; bool key_pending_lock_backspace; bool key_pending_lock_delete; bool key_pending_lock_comma; bool key_pending_lock_period; bool key_pending_lock_f1; bool key_pending_lock_f2; bool key_pending_lock_f3; bool key_pending_lock_f4; bool key_pending_lock_f5; bool key_pending_lock_f6; bool key_pending_lock_f7; bool key_pending_lock_f8; bool key_pending_lock_f9; bool key_pending_lock_f10; bool key_pending_lock_f11; bool key_pending_lock_f12; // add more keys as needed. int mouse_x; int mouse_y; }; struct CInput *cInputNew(void); void cInputApplyPendingLocks(struct CInput *input); void cInputResetKeys(struct CInput *input); void *cInputCleanup(struct CInput* input, int max_touches); #endif snibbetracker-1.1.1/snibbetracker/src/CNoiseTable.h000066400000000000000000010247761351541346100222620ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef snibbetracker_noise_table_h #define snibbetracker_noise_table_h int16_t static_noise_table[44100] = {7063,25593,21601,-18189,-1907,-32485,26101,-16239,16073,-6065,19459,18893,-8883,-24345,27041,-20553,-30785,19843,-5493,4629,-6631,24583,27015,12867,-29075,5123,24705,-14845,-29121,-30601,31983,19215,-26017,13985,20421,6441,-28583,23937,-29929,21243,-8737,1191,16545,1245,-5335,20067,14365,-17179,8127,-3369,-23255,-18329,14139,-4137,-1941,4455,5313,-27941,-15947,-5071,20149,13293,9635,-27655,19079,-591,-4995,-10389,25797,-9857,-575,19179,17051,-22057,-6409,-5453,22709,-23135,-28687,-14433,-705,1751,-12291,-30757,-17891,-32535,-9323,-10809,-10795,10605,24765,8575,10413,9423,13973,12977,-6955,4987,-16471,-24759,-5555,-5319,-29333,3025,26569,-16181,-12239,-3167,-14623,17557,13229,-26143,7871,28425,-11655,-9487,-30623,9657,19739,-13241,-17083,-29679,421,30073,7803,-18751,-19919,13075,-10215,-447,7503,-9227,31677,-7015,-31541,28453,409,30711,5355,21075,-8901,14601,29551,-31749,15435,2853,-28537,6795,-29675,753,-4179,14505,-3947,17233,-26535,29809,-10701,26005,-4917,-1921,-6443,-27437,18895,-19019,10261,6493,-3555,16535,19887,16529,-4747,25095,32079,-9495,-7989,-2993,16147,-11687,14487,4703,1431,-26483,-647,-20933,14473,17549,31097,-6825,30765,-15523,-15387,24459,20675,-5525,-13667,-17767,-275,10461,-23273,3169,-26109,-27249,20675,8705,11525,15921,-14085,16637,29395,16659,1591,-1069,28519,947,-8933,-29785,-3035,32339,29537,-24725,-26033,30637,-6145,-16689,-20591,7437,-1061,-29643,-28657,6333,-4557,-3037,-17165,-20547,7093,-25601,-10533,26441,6099,1381,-14223,19325,-20043,-30585,-1091,6521,-3699,8835,-20301,6205,6393,23605,32255,10775,11367,-5677,-2691,-27367,17431,2159,-21393,28165,-13833,-9187,-22501,-5399,13687,-1235,10167,-3527,-2163,13179,-7651,31289,19425,18027,10483,19191,-17033,32375,32573,-22753,28717,28877,28401,-32203,-22029,-3849,-13587,20115,21465,-25415,-937,13063,1721,4957,-4625,-13335,-19327,4969,13023,-29451,-20059,10541,-4867,32483,29703,-25981,-19913,1331,15865,21429,-31041,-20331,-29029,-8523,4845,27675,15935,-25527,-11789,15751,6571,8235,-17655,5955,14827,5119,31321,-24041,-6195,1077,-5427,-13461,29281,-867,32477,7945,-30821,29381,4005,-5105,-28293,-15213,20267,-19317,-12285,-4073,23123,6297,-25551,-5431,-5509,-11085,-4401,19917,-8109,13161,-13347,-26331,-399,-30699,24453,-3107,3723,28589,-9597,28955,-11411,22441,14773,-25901,6421,-23119,31797,-19565,-7197,1927,-13637,10875,-19677,26625,9389,-10153,6625,3937,17349,19499,-23391,-14641,-11237,-7159,-10579,-29679,22341,25161,-20281,27557,10995,-31775,-30733,-21549,15917,-24013,23735,-16469,-1469,3027,-2849,-9509,419,22417,3219,3935,-13009,11879,6371,-6597,-17207,2599,8297,-32247,-16465,7035,3411,-25743,-10745,5779,-1543,8365,-6725,-2959,-10515,10231,-17675,-5963,-22145,-30967,-9853,-10031,24335,-23927,-29389,-25795,31215,7259,23421,30977,15179,22241,-1703,-6457,-27781,7553,-8959,-715,-30187,-17321,-28941,30105,31829,-20509,13713,26783,-30361,9903,17537,18765,26175,-27905,8395,-23735,-18275,8291,14869,16317,23685,-11631,-21791,-3961,-20691,23789,-9565,-28829,12077,13731,16735,-8943,9713,-16689,-14231,-13931,14613,28401,18227,-30561,9343,-10515,-1597,4869,25131,-12183,20753,-397,-9373,-18719,1435,-17741,-6685,11569,-29033,1363,31915,-15987,-24827,28229,12209,-421,-23839,-11519,27575,-7701,-26955,-1,31005,10005,32367,-22901,-21011,-2405,12957,-26639,1955,21853,2025,2167,22453,-5545,-21711,-21649,-30659,-18627,-9855,20509,-29619,-20723,-9631,-6699,-7141,16817,27377,5171,8867,-481,12775,8905,-18285,28041,27465,30579,19143,18733,-5733,25647,-1079,-12405,-30985,28949,12203,25335,24693,-22921,10823,25161,23321,30805,14245,17009,-12737,20937,31059,22393,-25561,31219,18235,15981,25257,29341,-11369,-14895,-20447,-9011,-13237,-12671,9469,28693,21579,-14167,32233,29663,3547,-28129,-21525,-26619,-14001,13987,-19719,26387,-11289,-21323,20741,-14777,-93,-4493,-30261,-17721,-18157,5989,31621,24149,-2877,-8161,-27525,-9841,-16959,15021,18579,32649,-17977,-29225,-24035,-23627,26033,5031,-9229,-11589,23929,-22693,-19067,-15591,4697,26077,19273,27485,-30795,14133,-29465,-71,-30127,-30079,-26517,25239,-26705,-527,26881,-11603,7665,-31095,-10997,12965,-20635,-15283,24053,12841,9357,-24701,-20763,-24771,-479,5111,27065,-5643,30383,899,27043,18947,-5703,16167,-9431,9137,2659,-31703,11691,13699,-4605,32155,14999,-28205,8305,-7807,22835,-8977,31377,-1983,10915,-14377,23873,26305,7207,-8701,18775,-20037,-11707,13727,7353,-21955,-6473,-29151,-25983,19327,-25947,24879,11097,-20897,-30925,-15221,12541,17327,29903,-24531,13811,-29447,-8747,22025,-31747,-27113,28551,2587,22541,-23463,-29931,28107,16979,21323,17293,-14765,11617,-8351,-7587,1443,-25975,9565,-25797,-26581,-31979,30175,-28489,18999,31821,-22455,-21423,-19529,24699,10793,-31693,-29661,-6011,8331,8761,-21295,13209,16371,10319,19313,-13469,16819,12391,25625,-29423,-7835,30913,107,4063,-6325,28735,21031,12377,-12573,13717,-30017,-17395,-11523,-23507,7431,-28479,-11613,29789,31101,-573,-15639,-13419,23261,-30061,18423,24527,3601,27029,31647,-8035,13051,-24893,25121,11899,14021,-29955,-24287,-8897,10375,27905,-30741,-26011,-14617,12715,28885,-25919,-21661,-23101,-545,-11957,13941,4497,-11073,-2607,14745,6853,26885,-20445,-31795,-25939,17423,6007,7853,-13343,-25,-29827,31939,-23481,-9671,-29779,25321,26629,19277,-17045,24571,31409,-16217,-20721,-23069,12513,-18113,22969,-27127,-15501,29949,18477,21685,-6991,1769,-29569,-28225,-2891,25583,-4293,-29133,19405,-32035,-1521,-27679,-3529,-29895,-11707,-29629,-12703,2563,-4395,26903,26131,-32497,-18715,10237,19015,20379,6031,-19051,5861,-3571,-20141,8193,5263,29059,8183,28155,-28335,-4173,-32131,19387,-16757,13359,-53,15799,-17013,-26339,-19193,15869,-29961,3489,-17553,20557,-13561,-26051,-9799,-29111,-891,19409,-21523,-3073,27731,-29979,26827,-20907,-12709,26139,-23729,-5641,-7861,-16723,-6223,-20533,-9215,26745,-2687,32401,23883,-18273,11367,-13373,6743,-2035,-15591,21481,-1833,31341,-16713,22147,-22607,5599,-10041,-31773,23987,-19603,18737,-4361,23871,-3789,17155,31493,29401,7167,-25555,-5659,26463,-24401,-17679,-2997,24071,15349,7867,-28071,-30133,-22139,-10175,15587,19001,-20163,-16111,663,-14427,-29193,-9999,25433,31087,15729,-14501,-8187,8925,31131,-25533,-28809,29105,-7207,-23919,-23125,19403,7405,-17777,-23221,13329,-3599,-10823,3863,13499,31185,-28673,-1617,3407,31471,-13817,12361,-17471,15973,28273,-21545,23391,-32009,-15901,-15703,17219,689,-28215,-30677,8689,8981,2347,-6361,25863,25093,9643,-26013,10989,-10115,-12397,15275,13583,29875,-31373,-31425,20201,19133,-12399,-8111,-16919,-24169,24149,-113,-8903,19181,-1701,23371,27475,-9569,-27589,8737,-29571,-19041,19249,19689,27553,1139,-6083,-9153,9629,20933,2735,21041,6739,-7983,30939,24225,23709,15803,-24763,-14625,-2731,14723,-24079,14033,-11425,-7107,355,2545,-27655,-31215,24461,14727,-18819,-32335,-14161,-11277,26213,12733,12677,-6591,21985,-11807,-7333,4445,-15623,-9771,-15537,15839,-25291,31965,-27449,7913,-6905,-519,-13331,-4541,1637,-16529,-24909,-27783,25451,10465,25505,-3295,29211,-32439,9411,16137,23203,-21505,17677,14531,27105,22823,-1079,-2343,-6291,9919,-31073,-20873,-19715,-31163,29773,9275,14837,-24227,-25667,20101,441,5007,-26041,18295,-24557,-3853,-31297,4341,-12733,26379,13055,1875,29479,-4079,-17937,30541,26239,13209,24131,21247,-26003,11203,1635,2723,11537,-14797,-23915,24591,25431,-11029,26813,-31815,12809,-29309,19551,-20783,-24853,3777,25359,-31951,21627,4561,21485,-7407,-6333,-14079,-11035,-12521,-32169,-26369,12773,-31957,-1713,-26457,19951,24119,-26555,12729,5351,10969,4313,-12013,6909,-26105,-13657,2927,-24071,-32265,-10291,18063,-2101,-3605,22847,-6459,-21,23407,-30715,26665,15225,25665,-18193,4783,20013,-29145,18431,25747,-3999,-5559,-11915,-8709,16205,-26031,-28479,-19199,-7921,20725,6367,-26139,11135,-31585,29705,-12585,21733,-21251,-18031,-21333,-31371,29365,-11497,27051,20819,7409,-7905,-26585,-12513,-25901,22257,-8099,-13137,-31177,5153,25839,19295,7475,-1555,3241,-15077,-11431,10235,31061,-7031,-13695,24923,30021,-13975,-23275,-18479,-22633,-343,-25511,6113,22709,-27277,17241,-32035,-4537,26115,32639,-26321,14125,-32389,18213,-21475,1877,18721,11373,24555,19669,-3843,2795,-17483,4979,30105,24395,3069,-18999,18023,4955,22131,23323,9325,-131,13151,17399,-19823,-7965,247,19693,16035,3347,15551,3775,4019,14751,-26703,-23749,-7661,-313,24699,14699,20195,15567,-807,-20815,-17901,-2173,28523,-14993,-14511,3049,-21655,-7293,32129,-29173,-16535,23209,6627,6241,8683,31237,-6589,-2161,25767,14101,19587,-3501,-1219,4933,-5973,7657,30519,-21967,-3651,31077,-11591,-4149,-25067,6271,-2581,-17743,31275,-10711,-1935,29383,29693,-17749,-29515,22441,-7155,-10605,-3405,-31491,-29179,20997,-29841,-10007,10051,20045,29617,18265,3333,-16445,26369,16907,-3671,11095,5921,233,-24039,-25543,-17617,-21939,21081,4653,-11561,-15125,-30717,-12291,-21349,-22531,21467,22003,-5421,27693,9715,30949,9445,10837,6939,25371,27939,5549,-14657,-28245,12221,8569,19367,-19241,26795,-28569,-3891,-17019,2433,-15837,17815,-20229,-20101,-15703,23531,-27327,19197,14533,-10915,28169,-5253,21841,8973,-14485,9187,1409,12861,16743,-22527,12711,-19631,11931,29545,931,31007,1979,11035,-6729,-11441,32099,-231,30873,-17287,29029,30923,13335,-6335,-6237,4365,3635,10901,22313,573,-13579,15329,19573,15953,-6299,5439,-18403,20115,-23441,-13175,-5207,12475,-9239,11547,-1979,24751,-23073,-29181,-7519,28721,30027,-27395,2999,-1439,-17093,13711,-6107,18443,-20119,-3149,-725,-1003,-19855,-7109,-18487,-17359,-6207,6147,6767,21043,28493,3505,30921,983,-20699,25887,1279,-11547,20667,14669,-8311,17011,14473,17539,-27479,17861,24847,2769,-3401,22165,24933,-1889,14955,19125,-28269,-7969,-7583,-8375,-3395,-11867,9577,-19813,-19311,3817,-21229,19423,-1381,-23689,28301,-2591,3209,-9013,28671,-31559,12145,-18383,26639,28107,25009,-29527,17379,-3767,-23045,-21061,24097,-22993,-729,-15517,21715,3781,17991,-20523,-32297,-16617,21573,11301,2957,7683,7853,-26771,-3557,-30753,-22875,12919,-10219,-14653,-21529,25463,15077,-32439,32509,20551,-29427,-6695,-32255,31889,10617,24805,29867,-17811,-20509,6979,-18865,-19291,29543,-24111,597,-10175,7671,273,-4969,32071,-16527,9489,27583,-28145,29363,32079,-7507,-27063,-4917,-31741,19313,-20453,24225,-24733,-8555,-4909,-16309,-2669,16941,28929,3913,3781,30605,-26497,7133,21571,-21375,2341,877,28653,3691,32367,27021,-30305,-27413,28117,-24507,-20103,16271,-19001,-28103,23341,-17783,7531,16617,8031,19015,16123,-9531,13601,8385,7111,13581,-10295,14327,27,-5727,-6789,32073,16241,-19695,-14541,23035,22843,8849,27843,14233,8811,15773,6023,-23483,16563,21693,24441,-7777,30921,-14857,-30527,-13665,-907,-6163,27379,25689,11337,14939,2281,-2853,-2341,26261,-18137,2625,-16599,-6359,-23261,21563,409,32109,-22691,6665,9467,-29733,21867,-15783,-11749,-12743,-30317,-30777,31207,14615,11785,-2767,-6391,-12045,-27501,-23203,3189,30379,4417,-31391,17797,15223,-19911,26613,-17061,7427,25645,-13965,3627,-19719,20697,-3791,16777,28039,-9629,-31309,10459,16361,-22731,2885,-21637,-23885,8639,-31665,-4425,-21289,8651,23633,-15319,-4179,10567,-17723,14031,10621,-12943,15083,6171,15987,-1685,30163,18703,11179,-6821,-23411,-31867,-9943,-11465,11889,-24901,-27577,5939,4919,-31817,8245,25729,28401,-30717,8089,12891,-7991,21751,20261,2725,-20095,10415,-23877,15181,15527,-26475,-2345,7509,21579,-7615,1221,4339,-15189,13435,6169,-23867,-2491,-6271,21989,1649,-7123,5761,639,-13083,29375,-30409,-7193,16247,-19703,-7065,-20271,8787,13943,-32527,-24767,-13547,13753,2425,-20019,-15917,-28321,-22707,2613,-11689,-5393,-21817,-15759,20761,-4457,-11631,-14975,30891,-3551,13055,-4657,12095,-29597,23475,9339,-17287,2709,22753,-12767,23233,-7307,-17167,-8723,-8803,-7417,24471,-25121,22541,-22937,6975,27075,30027,22691,16981,-6465,-22553,-13579,4919,22585,-2189,14647,-1729,18719,25907,3033,28869,-31185,-8835,-16679,15833,14753,13987,-13539,-28539,-24413,-8691,-20023,29599,-4375,-4577,-17091,-18765,20085,-27651,29221,-197,14565,19167,-26133,-24859,18561,-16709,26671,-13359,31667,16007,-13733,-22401,-21879,29763,4419,-8453,-23497,-6403,-30795,-15929,-26577,-3371,14513,-5101,-31349,-5767,-25165,-18847,21023,15215,2997,21149,27687,-26373,-10617,1101,9537,-21561,16507,6565,12281,22615,25427,-9707,631,31705,-22441,-24417,-11327,-16779,28643,-11343,-15001,28563,-5267,2571,-4313,-29903,-2041,-29267,1731,-29301,-4729,-14999,-4057,14787,16723,22789,22833,29863,-26567,32161,-18321,-5915,-24023,-2337,-26491,-7485,12761,21535,-13351,-25033,-12667,16657,-22631,-27165,-3183,28009,-13119,21107,5473,25673,-2573,781,12003,-3169,15983,-3989,-16629,-6353,17665,-1963,14741,13409,31809,23935,-2607,6635,32253,19011,28143,30461,-9211,32143,15759,29075,19773,-11023,-28047,-4901,3711,-24643,-949,-31809,-19789,32291,-2351,-5131,-26037,2085,31643,-16421,29291,-15815,-7097,-23839,-3921,18655,-4527,-3339,31415,-28021,10859,-29259,6953,5853,-4581,-8475,11539,16399,27593,4519,-14265,26143,-26105,217,9295,-15947,-411,12893,7969,-31141,15439,20735,22561,-17637,-28179,9431,-27363,24219,-14297,20527,20245,-19743,-23737,18143,-26557,-15915,14571,-24079,19041,-6713,7255,22807,-5727,3775,-14861,29531,-31703,12117,16637,21399,-18899,-7017,5687,8305,-22301,31795,-18125,26347,-28447,2413,28893,-20709,-31269,32295,16319,9047,6977,-5425,-29881,24499,-209,24481,24847,-10327,25803,30639,-21847,-11449,-29929,6661,7591,26427,24285,-5657,-20319,-14369,27291,-22167,-8501,-26147,7751,-29847,19403,-2023,4207,-24915,14021,-20757,23921,24829,-21465,519,-6093,13575,11735,22095,23183,-28589,-10233,-31583,-4013,32215,-13329,7823,-8197,24227,-10487,30347,-24999,14233,6689,4513,10007,13505,12757,32563,-16425,27393,14587,-3357,-911,-2233,18513,-7789,16187,1461,-24379,24939,-10205,28187,-11481,14549,8313,-11517,10111,-91,12209,4345,1107,-21987,-22513,-7313,24669,12163,10677,-9557,-26543,-30449,-25183,8145,31215,27033,-30555,21277,-28171,7517,-32275,-25391,-9993,1939,5145,9483,-26295,-3757,27325,-28455,1129,-32159,-169,15221,-32407,31973,27261,6741,-31615,-10071,-12237,10503,16967,9813,14935,-9963,25061,11323,-28385,6845,6449,31307,-16547,1601,5641,19639,-31681,-26871,18069,-16975,2731,13155,22079,14465,16191,13555,8867,-15905,30083,-11991,-17329,-31537,-22315,-20061,-13533,-12777,-7009,21847,-27855,12443,-10477,-20315,-31961,-5821,-8569,12541,1215,21509,2625,11501,13151,31629,31229,-22325,11075,-457,-19319,26085,-19883,32439,-977,16857,-10575,28381,10187,25899,-2087,-25805,-5915,-8415,-22331,-21907,-25603,19775,16819,23851,30889,-13347,-2687,-24715,27897,14871,29929,-23765,6487,10437,-23097,19595,1391,18439,29181,-12901,7973,-25903,22659,-15651,-18083,5595,28467,-29605,3379,26529,29255,30401,29989,-24833,2353,8329,-16631,-24001,29417,-9325,29481,18497,-15947,-19587,17163,-29503,-31871,8789,-8497,28845,22075,2359,-10097,13553,28195,-22971,-17617,31803,17557,-19357,29953,29517,-22309,16825,-27891,-24129,-17177,-24707,-30481,-30849,21983,25511,22065,28903,8165,-22195,-18133,5381,-8409,-263,29587,-16125,13299,28413,-12325,-17115,-28255,30435,6829,-2357,4107,11061,-26973,26193,31587,-24017,10283,-13253,155,30619,17641,-5161,5797,32559,-18133,27483,6425,-30111,-26019,-15745,-26725,-20959,29511,-1339,23273,22015,-13467,-5065,-10219,-4091,28125,-28247,13909,-14369,-31285,6775,27005,-23021,-23683,-3611,-32547,29351,26163,-22041,-12901,5621,15787,25175,-4389,-5193,-18377,-23543,-26489,7795,-2065,21127,-6487,-11825,2543,-12623,25709,12059,21115,-18265,16539,28945,3659,7915,-13833,-6921,-30963,-21579,-25699,-20887,5171,-19975,-10905,-1701,31921,1483,2563,-11923,-11115,24865,-6805,18985,32259,-12037,-25329,3847,14527,28143,30893,-25279,-18995,27779,2207,-21931,29055,11543,-7025,4459,-30623,21895,12283,-12599,-32281,-1855,1931,5541,-8663,-15467,17867,-19033,-21167,20921,7127,-25283,-18409,-30755,14451,-7743,4099,-4165,-30213,4667,-8501,19877,-29337,4831,-19417,2373,4961,5877,-7931,-4765,-27397,22501,-26667,-5431,-11893,-27523,-5675,31833,-31295,-12071,15203,-15133,-13661,26807,-5061,-14613,2041,7681,27301,17271,1933,-31251,-9775,-24939,-22933,25379,32305,-28941,-22879,22733,6875,-10707,-16007,-20515,24897,-15329,22851,17645,16615,-15327,12505,-17349,25309,-31435,-3567,-16795,25355,23845,15651,-19705,13791,-28475,7213,-22385,-20815,20073,-14169,-1097,13525,-30731,17999,-17885,6105,32629,-11005,17273,-31757,11681,23779,24347,2409,-20493,19987,-29281,29329,-20313,14083,21069,4603,8585,-26281,-17545,21583,14343,-157,-17479,14747,-19275,-26867,-26179,4137,-23343,7805,-27749,-1645,-11891,25527,25755,-15293,-30131,4079,3701,-14291,31763,-16153,-3423,-4529,22555,12241,22823,937,2575,12355,6883,-10887,26873,-24147,9285,-15173,27477,-14873,29889,8725,13743,10775,21485,-7151,-30097,-10995,-19789,-22295,-15089,4777,-3381,31539,25271,-2371,32321,1295,-10075,-8415,26349,4649,-6081,9247,30127,-4773,32189,-3669,-5209,-16715,-14391,10885,17923,-30887,15907,9929,22053,21049,14161,-18891,1389,5129,11221,-26173,-25597,-11293,-27929,27,-8943,1503,5795,3463,-18603,-20641,21935,12315,17517,-2247,18065,-8233,16843,19019,25149,-32583,-29277,6397,31575,19933,-18431,-14253,20901,14345,-26647,3107,-20959,29305,32505,-8611,21923,14441,-28965,4801,4623,25551,-24477,12773,-30565,-2135,20257,5301,19551,-9829,-8303,-31423,-14559,-11643,-23505,-13011,-10381,-24883,9145,15665,463,-17313,-8801,24757,127,16367,25167,13391,-9561,-25165,-27,-2071,27123,-16143,-20727,-5841,-9653,6549,7807,-15293,-6801,-18597,-29977,-14651,4345,13559,483,31907,-30299,24027,-9321,17371,-22747,-8269,4901,-6839,-293,-11663,-18375,27645,-9419,4177,233,-20363,22383,10127,-12403,-21989,23033,-501,12623,3185,-15961,15311,20533,-9423,7477,5035,-14163,18081,-23253,5511,14659,14933,31927,-24777,-31257,16675,4427,19585,-15207,-15537,9135,-21085,15559,-3851,-5343,-30409,13961,25719,-7519,30029,9347,-7421,-31397,-26211,-31257,17503,24219,-10101,1919,-22987,-30177,-25671,-4911,21339,-31927,-32219,-29421,-28145,-20665,-16691,5161,7987,-3553,28369,26633,5861,-11749,29763,-16137,23763,169,2595,22955,-16477,15363,-15323,-17123,11119,19161,-14321,-9911,13141,-13611,-2147,4129,-12439,-22487,-11269,-21621,-5663,20813,32639,17535,-6391,-26053,-7291,-13253,-4089,-523,-23911,-26777,28807,-25587,28121,-12199,-5225,-2829,8079,-26917,23195,-26479,3623,-18975,-26609,-24021,1965,-12897,9675,-6987,-23105,13563,11875,29169,-31907,-4983,1141,19433,-17449,-15983,-19345,-21033,21079,-31101,-18415,-13827,26641,13541,-20563,20783,-19349,-24825,18321,-23377,12531,24305,14813,-31773,19301,-27719,-12525,21619,26507,-8245,21039,22013,23513,-3213,-14119,-2135,13861,-21421,9461,1587,-17491,-7833,5533,-19631,8903,16145,12267,-1395,11189,5913,18811,-10177,-2509,24489,27875,-22267,-5475,30265,-17931,9337,29641,-23619,-31475,-17675,-16007,23787,15835,-17815,4445,-10701,14355,20133,-6095,-27443,-10547,4479,12151,6701,15715,17433,-15097,-13145,-30387,-20235,7131,26805,2567,1913,28485,3843,30323,-29331,-23247,1161,-25735,-9385,-7733,-15765,-21339,21793,-14493,-21929,-21739,-19419,-16687,8617,-13375,28841,19447,3839,10841,-1297,17215,-24215,-23409,26281,-12223,-11611,11891,-27995,-9307,-17893,-20743,4275,-117,-29021,-16701,25981,-19537,23339,7063,14561,5461,26711,-8833,14011,-12769,-8547,-29879,-5173,-823,-30009,-17189,25879,-13035,-14413,13681,-29445,22013,12019,12395,-21673,-25037,-6703,-13253,-8223,-21895,-19619,27045,-12919,-27553,13269,31807,7337,26043,-18807,-27925,-3781,-5887,6621,-13289,30067,-27631,20737,-791,-13553,-11891,-6113,-2727,15067,-8373,12067,-20759,-23161,-55,-23755,-21121,4669,4429,-15363,-24291,1277,23859,-22665,13867,20039,-1359,22233,-11809,25451,-18195,-27279,-16599,-5833,-26027,-27517,-27441,7153,20045,24213,-22305,-32479,21533,15223,-16913,24641,549,25033,-3369,-11645,5121,22427,31629,10277,13707,-4195,-21201,-24195,-19901,-8061,12611,3121,7715,25903,-16067,25565,5893,453,-11557,-14007,25755,-16613,6127,-7225,-3297,-1847,6729,-19155,14997,6635,24861,28571,-7213,-3901,5587,-24135,12217,-2195,-26041,6755,10263,-27717,23141,22029,29031,-3557,27653,-30227,-13477,-31161,24729,-27739,-28673,24131,-23359,8795,26327,-19513,9269,1613,31247,25473,-16753,30563,1147,-18767,-7443,-3605,7095,16017,-25911,-16189,-18567,-3191,29171,-14595,-9799,-18385,-27977,-15789,-32473,-23015,5157,19171,9793,29367,11089,-12397,10069,15091,-11963,-20901,30525,5993,-10737,839,-19855,-29909,30711,-12337,-30737,-539,-18969,3065,-9075,19027,-28275,12919,4467,32275,12155,19249,-29315,-24885,-21907,18589,-7677,-15493,31017,32363,-20601,25261,25109,14611,-18295,-29375,13285,-13109,-27577,3635,-3653,-11521,-3137,8955,28231,7391,20013,28747,24129,-8285,3407,-20753,21383,-6401,10681,5657,-23509,-31057,-27839,-4417,-1789,1493,-23787,25703,-16365,-5585,25053,8829,-12355,-5079,1149,-28741,-27145,8907,-4905,-18177,9143,-12191,3819,3617,7757,16799,7181,13737,-28677,-4113,-16499,15379,-1507,26835,-15205,13029,8947,7647,-15957,27033,-9807,-20585,-27299,-12727,-25813,-25793,2455,-32655,957,9555,11487,-4455,7867,11831,-12603,-30763,22657,-22125,-27155,-26831,-12381,32305,-28331,-22629,32427,4191,-19755,28923,31579,-31885,26975,-6915,6733,18437,19073,12671,9225,-25517,-32537,4955,31107,-22165,-32621,-16301,14785,-19129,7827,3119,-17775,15089,-20869,25941,-24657,11355,-13087,-28339,-18335,24835,-12633,-4267,-23991,-12643,10901,-21789,29279,-31667,25449,-32083,-21497,-18991,8131,-13185,25185,-22275,8617,-23691,-11759,-12655,14973,-25035,3545,3559,-24611,-3001,-5059,28585,-13019,-1609,14675,-27255,-8719,-9441,15179,23541,10435,-9847,22077,-25253,31909,10035,6795,25787,8879,-8511,10967,-31307,-14391,-11337,17517,11303,-15263,31337,-18953,4335,-18129,-31741,-31667,30621,-4097,12847,-17161,-29563,-14205,-14273,21751,10253,5351,3637,-26109,-20773,15933,10567,-29421,32429,-27347,18759,31019,-17699,25655,30435,6929,-25303,26589,-25849,31327,6339,-22563,795,-24923,4121,-14073,-16161,20147,-22097,-31883,-13871,-26381,-5209,-8907,-27867,835,-20943,29007,7555,29677,-17649,18893,-9821,-5611,-22617,23371,-28429,-25723,-11499,-16501,-13997,-7397,-25989,-21995,-7225,-12373,-30001,27663,23087,29185,-10655,-1841,-25973,27481,31743,26181,5141,5609,16225,-22775,-27009,-10525,23943,12883,-24273,29239,12409,4537,25915,-18521,3063,9867,8821,-8529,-32645,27969,-12969,-28935,-8839,-5991,16267,-28181,30249,21553,10743,-5803,30727,8735,4381,9083,9201,30141,-16709,25331,5761,5669,-13667,-21649,-31599,-17133,-27481,4319,-31557,-29455,-21803,14263,27525,-6605,-10357,-32235,-12661,-22509,16595,-18013,11489,21287,107,763,30001,7749,-6075,-11031,-12729,31273,3115,30291,4941,-12751,-21689,19885,23019,28109,-9579,9501,14649,-31749,14755,1249,-6639,20287,-19915,21527,-19909,5461,15113,-22001,14539,17499,30773,-22419,12795,11621,-1897,25993,1929,18187,-11625,32687,-17715,18665,-11489,8221,16909,16261,8019,11795,-31217,-28421,1381,1711,25213,-11935,2687,-8859,-9983,22119,25453,23183,25873,13505,-32087,-26233,7371,-6181,-31443,-29923,-18423,-20331,27539,30007,22105,-15771,-3991,-987,28387,407,20959,-15785,-17643,11355,7931,-18151,-5563,-3667,-29943,29125,28061,21327,24541,-31915,-26549,10543,-20559,13525,27711,-15419,31687,16717,-601,-18263,-8405,13807,-6197,15307,29839,6909,-26777,22645,29235,22437,3263,-13929,-26205,-1553,25389,-2213,8533,2937,-2517,13583,20885,-13411,-31799,-24243,27201,-21283,15149,-5099,16023,8959,-26845,953,19735,-2653,14917,19959,18115,-23755,15753,-8443,-26359,-9513,8445,-13165,-28969,24421,-12599,-26119,17477,-8401,20135,-30579,22259,30581,-26849,-16775,-18371,-32589,-7701,-4145,-7861,-32203,-19661,16465,27685,-6907,7463,-29703,12497,-31605,22135,-29311,-28931,-3807,17831,-19971,2037,11559,25599,-19439,10209,6965,-917,28387,87,-10117,-353,10299,8403,-10905,14815,17493,1653,32153,-745,-16113,20327,-19807,-489,30989,22951,-9205,-12795,-31929,67,-8059,-2181,-25745,11447,31941,-29575,-6669,26343,-12529,21905,-20105,-13925,-20587,-11859,16183,8065,21675,-26485,20975,4773,4665,-4145,-25723,-19325,-16735,-15701,-12883,-23531,-14083,5439,-20097,-10641,-8001,-8023,12475,-2087,30843,-7469,16631,5705,-3895,-5083,13547,16159,-8231,-1163,15685,-29429,20793,28133,-3235,-8443,19867,-18337,6535,-30215,-4129,-183,-21493,-19491,7575,-29251,14485,-29765,10243,-6827,-8739,-26793,18853,-20879,3283,30159,24121,-7241,-6073,11671,-4499,5241,-11819,-12735,-23141,6175,-27581,21033,-17811,-139,17123,21831,29771,-10851,-12117,28381,-23865,3481,17513,6075,-24247,24083,13811,-19451,9397,-11993,15117,-24809,19223,-13243,24949,5967,-6309,-17439,8253,22745,-1927,-27421,29157,-28795,-6633,-23409,10375,-19979,-16633,-1165,-4719,-18701,-11379,26853,26501,15519,-14797,8129,21633,-27121,29973,-27847,13673,23257,19977,1349,-29083,19435,7529,-14553,28809,26155,-24977,3721,-10561,11769,-11745,-20619,-24843,27123,-29617,20811,-5593,-28023,-10659,18367,-3169,-13173,18281,6219,-28813,-31611,-27641,-10971,6761,-10269,-3705,-23977,20927,-14801,-4275,15887,4471,23543,-8913,-11301,-26467,3869,11575,28039,30891,10567,-14625,-2267,-30837,-2189,13749,2985,31949,-21305,-15129,-19669,19015,13739,21979,26109,-8947,17931,17431,8681,11569,-3183,-31107,-313,-18173,5893,-1721,15399,-14725,11473,22687,-4883,30645,15869,28465,-3965,2779,27711,-23649,-11261,-12315,32165,-4049,29663,21809,-10343,15955,24451,28251,2379,-21259,-19529,32569,31489,-31165,4917,-20397,-10691,-899,11485,21339,11639,-25339,14385,8305,-17621,-32479,7261,-21811,93,-26117,-24319,-2175,-16779,-19917,-4031,-14835,217,20879,17991,-11225,-7035,-25943,18357,-23319,7753,-6881,-6517,12939,8117,17883,7309,6943,-30623,-8161,-29695,20541,-14739,-20937,9523,5365,-20975,18181,-30791,-3025,-13111,27923,2935,-29585,11073,32255,4981,12521,-10481,-26975,-5837,-20705,-28185,-30221,27411,-28621,28629,-12459,-32629,-23087,1643,8653,-1863,39,-16089,-15303,9069,-11465,-25823,1237,9535,1683,-28401,11437,7083,5771,-29739,-7725,-27713,29965,27801,-17653,25495,10373,-8987,-16073,26283,10203,11867,17601,-26793,-28005,32663,-22131,-16639,-29211,4543,-657,23455,-11097,-847,-21999,-10915,27459,201,21699,-11549,-2497,20947,-2699,21387,-13857,-1575,-12413,22781,-2819,-23749,5031,-6699,-11101,-31339,-24021,25073,6993,12439,-5477,-3765,12723,-17737,1051,-30579,-27675,20971,5359,3043,24115,23941,-13661,18741,23561,8369,19605,-11821,4221,28829,13301,-6039,-8497,-21903,20197,-24495,-12325,-11749,-27153,-9719,2833,15865,-26559,19825,12597,-31495,19947,29407,-14969,-31045,-22203,-17735,30337,-12127,-24957,26733,-2625,-17029,28009,-11455,-6611,-32009,-13491,-18029,6329,-16459,-32115,13247,9711,29063,24271,5909,5727,-26147,1463,1495,21655,24717,-8479,26159,32375,31503,-8495,-1397,21005,31627,6741,25403,-13573,-16875,-17467,12563,-29399,6493,-1429,22603,-30675,-6659,-18677,-16397,28991,4621,-7707,21081,31391,18553,-16943,22189,-28387,-21397,15281,-27403,6245,17171,-30383,-7735,12363,32241,18401,-2223,27391,-15999,-20133,30323,23941,-19115,16389,-16953,-4921,-13969,-1985,-19799,2279,13525,-31837,-3785,10043,10537,-5423,12713,-4623,15781,-1719,2253,20189,14017,-13897,-10705,26007,31019,2245,-24051,29109,6033,-8767,19041,5019,11085,-27827,-457,-23531,-20737,-23377,14779,-15107,18909,20975,-7829,3681,-2727,7543,5331,-19761,-11329,27423,-23007,29225,3503,7449,12327,26645,17809,-4791,10265,20873,-1305,-8311,2567,16269,11623,29597,5237,-19175,20507,-13335,2015,23801,-4183,-1141,9087,3445,29635,3705,-1527,11465,14261,-4223,-18997,-8355,4257,-31797,5433,12549,-55,-17839,-10841,14615,9057,-19471,6855,-24111,25539,-22353,-2655,-24985,-4737,-20081,-27883,973,18637,-24855,-30303,14883,-28757,-8957,-11945,23969,-2595,3827,16787,14907,-24255,24173,17973,1077,13143,-31795,26495,-13713,-4475,12809,-5167,-14285,1663,18513,26967,-13377,-6387,32257,-29397,21133,21609,-11009,21233,9231,16259,32585,-26269,-29587,-7403,15597,-22211,-19923,32677,15767,17679,-24955,-2963,2055,-6131,9615,26419,29707,-19195,-13935,-7735,-11273,-27983,13731,4897,-10495,1427,-23485,-1165,-625,25309,-29043,28691,-7409,-30727,12469,30439,7563,28539,-12849,-31605,20453,15749,-4675,1843,21515,-17819,-14955,11729,-1461,-10135,-22775,-3933,16425,4667,-19619,-2707,19383,-5583,-6009,-22419,18975,22229,-15021,-26909,26699,-2971,-15905,32603,-4545,17623,26751,-25417,14509,-8085,25461,-26411,-29827,22097,-28633,-30021,-32229,7591,-13203,-29161,319,23345,-22459,-17617,-26013,16641,-13979,-9943,-4359,-6519,2817,6165,-23183,12617,26985,10105,26405,30987,-18377,-21227,-7633,-3683,9817,23903,10393,24059,9803,-8615,21941,-10067,2973,1489,29437,-1223,15813,24491,-28225,10897,-31407,-8365,29291,-21117,-13699,-21155,32623,30895,-7015,-32261,1193,-23097,28911,9309,22335,-6053,29783,5071,4987,-28467,-11679,-29417,-24011,-26609,24367,-995,28081,25625,-29479,18333,-26245,5993,-4925,-26279,14191,-2167,-13961,3751,-23555,-7421,32599,-873,-19197,20753,4445,-2077,-6853,3611,-22917,-30829,27447,5013,-25115,-13629,10889,30797,15499,-22889,-11023,-26531,31971,7521,31225,-14421,20973,-21769,-9233,-25839,295,30659,25413,10123,-8163,24419,32311,30603,24685,-29489,-17261,12091,-21257,20733,5361,-16863,6629,-15047,-15339,-13619,12301,17289,-14205,-19189,18293,11025,185,27263,28827,-21869,-2157,-16607,-22919,-9147,-4067,-11701,1999,12663,10205,10175,19871,-12579,-26923,10979,25429,-27677,-28769,-12441,-3047,25917,-22007,-28339,-445,27327,21029,-22839,-29153,6783,5411,30725,20015,-25887,-3879,-16155,-16825,-27169,-8789,-16937,4903,11327,-21667,6273,-17607,28777,-17447,15919,23281,21631,23583,-23095,-1285,-2351,-13637,29037,-27239,9591,26417,-21907,-21963,-2819,-29933,-9005,3487,-2055,-7753,13411,4691,-21161,-29199,29803,19071,-29351,7749,7273,-10515,-5041,-4615,16341,28645,20803,-6425,-39,-12015,14799,13185,4263,-12123,29861,-6313,-29779,22869,-31181,-16703,-4349,14075,-23895,-10995,2071,-4465,27799,13119,1365,-16989,31077,-9377,-14069,-28463,5787,-5455,-1569,-28255,32475,32311,-31613,2067,3253,-11335,-26855,-20663,-29235,19655,-16217,-15721,-7973,-11035,-23259,-15365,15,23225,1983,4149,-18531,17799,19515,-13173,-27641,6547,-6037,19573,-26385,-11017,5853,-24243,15599,19035,28755,16791,3251,18345,28911,6203,-25137,13513,26909,6961,-10465,-25141,-4051,3461,13023,-18227,17489,-11291,1653,-27925,10229,8385,-1859,-16851,4025,-7441,28455,-30447,8723,-11509,2161,-9475,-18987,18255,-26499,-32545,28463,19039,26401,-25747,-30433,-23739,-10451,23793,-15699,31291,-9235,20703,10499,26393,-27957,-14177,-12007,20347,8689,7935,-19743,30675,-16491,-30295,30827,-24115,18589,5307,2445,-7285,-26353,18779,-383,30063,-18359,9649,6979,-19115,25143,-2633,23079,31845,-14831,7355,2577,-16499,27823,14109,9843,5167,-21969,20009,30547,-20093,-11625,28487,-11155,9441,-9433,23597,-23647,6151,16837,-14399,12641,-10825,-28885,-5713,22469,8355,25265,10801,-11625,20551,9895,25957,-13985,16667,1755,2057,9605,-713,-7495,-15947,4683,-7005,19979,-16041,-16689,29945,-20611,-27985,-19627,25109,19143,16501,-26765,-16215,26003,-17007,-10761,-16343,29217,-15207,-30931,2143,12091,-9587,-4417,-9273,32233,5805,20371,5111,-23371,-9161,30269,-10551,-3339,-28067,-18461,20217,-24569,-15761,-12601,3707,31085,-8279,-24483,-16675,11937,11365,22927,29423,30511,-19361,-26525,19555,-4251,29891,29019,10483,30607,7443,32141,-16007,25405,24567,27431,-28333,16391,16661,-14417,26479,28881,-17703,26271,30375,-24321,22897,-593,-32543,-3481,-11023,-16317,4123,-345,32363,-10519,-7063,-28747,29487,-13523,27101,-5787,-28519,-11185,24839,4003,30959,26671,-20575,17871,-6567,27373,-16107,-14009,-18047,10243,-7355,16461,-28699,27485,26107,19867,-2805,30051,-30479,15659,-13929,27071,23245,11521,-20531,-31063,9123,-23441,1271,-12197,-28189,13017,6435,11419,28597,-29389,-25081,29187,10339,22263,-29365,-12855,-14519,18011,-12925,-17437,-28399,24343,-9051,-24303,6607,24337,1847,12705,1195,12241,8629,-10647,27367,-32455,19955,23417,32593,-17735,19197,5063,25087,29121,21043,25201,-18847,15813,-3945,-9747,-6815,2629,12529,-5783,28189,11359,8249,16663,22887,26899,8323,17777,-24405,-12909,18213,-30279,-27713,-27057,-11797,1531,-31287,-28727,24011,-23047,-8095,-13323,9729,1281,25135,-15305,23649,4717,15703,-2433,-9731,20077,-8375,-20947,-17869,5741,9753,-3721,32363,-9415,14721,8861,25055,24527,3383,16109,-10523,2215,-19167,8163,19351,20075,10117,28117,-8257,4813,22027,-22051,-19477,27597,12857,-6103,-18201,4121,26407,25921,32679,-31381,-6589,4589,-28703,-17247,-26655,-19909,-19447,15039,29321,22075,-2693,-4219,-1103,-12509,-11359,-29801,115,6077,18117,-9001,12317,24213,-27123,-1969,-4733,8623,30097,-20161,7751,-12733,20805,16509,-10279,30423,14753,27589,2885,30281,-28157,21085,17899,1825,-16601,12553,-9167,-12763,-19055,-3401,17281,-16639,22393,-32571,-16421,27545,-8355,3643,-4421,-8667,-17785,-16775,27177,31135,-3729,22355,-3881,-21685,24331,-6997,15827,-5739,2485,-7161,30875,15897,-4073,8925,-8713,-3697,-28561,-9615,-26039,-23343,-1911,-26661,2101,-20197,7485,13841,-32349,29369,-13641,19631,21957,9273,7539,-1367,6567,11403,17151,-32365,13421,-18801,-5457,12843,-21537,19049,-13,31193,32349,-4945,-21939,26231,6881,24105,-493,7381,-11825,9393,32409,-32677,29917,28091,-5163,-30589,-20973,3889,-3643,30091,-19659,4569,24985,-27001,-11313,18279,-32475,22911,-22797,803,-8375,-11655,-13275,25507,-31899,5719,24735,10725,14201,-3395,13993,18441,20841,-10159,11951,-26329,18739,22147,-15511,-23089,8861,1471,8863,-28619,3545,-21687,4683,-29555,16123,-28361,12601,22633,9493,16805,27081,7645,-31525,-27331,29543,23667,28439,19639,-28391,-21761,-323,-6629,-12515,17159,14563,32479,19143,8595,4465,-9689,-15487,-21871,-13179,-25891,27857,6103,11253,-17585,-6517,23189,2495,-13051,-20115,-527,-22871,7153,22093,-17601,-29667,23135,13167,-16037,-23715,-15619,7747,-29791,-22551,24331,-3031,27737,549,-14459,-14431,-20805,2531,-26299,8867,-10013,-28497,13827,-19117,-3355,4103,9335,-26781,-28695,-23261,343,-24231,20955,297,-9355,-19129,4935,20055,-8495,-6411,26679,-20643,22227,3613,16245,-10857,9961,25561,-417,-1129,10731,-11293,-29165,16871,23979,-26645,12119,-13165,28355,-1389,-26937,29323,-13481,13833,20389,-24593,-31365,-14931,16779,-2255,18897,9275,11505,-29133,30341,19099,-16445,24535,9303,26905,-3033,-1295,29059,32487,22787,-4861,4773,-20627,-21175,-3051,13661,30105,-22021,-895,9363,3,28941,-11639,-6755,9551,6045,-3691,-5117,27745,18399,-23289,1933,18985,31013,11763,32281,-30219,-26391,23503,10025,-1769,1303,7873,8101,31691,12947,10871,-1243,-6777,-23611,-24411,31941,24975,1081,7471,-12043,8117,-20823,21435,-13241,-20545,-13201,27923,1909,30995,-2731,12579,-30045,17871,-16329,-9243,20847,19547,-28457,-19259,31953,27461,-31877,26837,13325,16473,12699,29331,-25,29829,-13027,-6979,-12805,-2129,-21221,11859,9619,-23297,-4917,-14519,13243,10421,25063,27109,19659,-23837,22901,3493,20397,3781,-30011,2821,23847,-14161,-5789,-9547,11221,-16393,-32187,13025,12925,-17001,-30187,-1601,21175,-31581,-28121,-30431,-30981,24459,27469,17381,-30175,559,2007,32309,-13247,19031,-28719,-31043,12059,21107,9359,12131,-4071,-22109,32327,14703,-16515,24637,29779,381,29379,7033,18371,12587,-25057,28395,-4571,28711,1045,-11759,9055,-11243,8155,22167,32319,-32115,13871,15053,993,-29651,30663,-28787,-9547,13151,-17921,-9719,6501,23,-20709,-28293,-29915,-31751,-15239,-20369,6519,29481,30675,-26523,-30993,4895,-1521,-11553,1333,-13265,-25157,-7807,-15805,20317,10163,13547,-7721,22509,15913,2003,24615,23501,-989,21661,9909,4405,31455,-29227,-2525,14743,-15073,19747,20717,-20949,22121,-1337,-1223,21761,-29205,-12253,14061,-2827,-19391,-4635,7481,15257,28923,13395,6833,-4185,24335,-6169,-31371,27411,26379,2969,-3711,13391,13563,17057,-1523,8315,19025,-2195,-14135,-7577,18989,-26311,5065,-20143,-24195,30735,-2143,24185,11703,19333,4509,13293,-17839,-7345,3123,-9483,-14451,-32005,32493,9169,10391,26369,23259,-23273,4875,6309,-17859,-14035,7645,28449,-18787,-20373,-26625,15539,-14279,-26007,-14783,27657,-11281,-23165,-13871,-28975,-17437,-15205,11865,-12529,26463,-30275,6319,16443,-741,-5355,10587,-18177,-11553,75,-8369,-25883,-6893,-12107,-15387,-22245,-26619,13729,-21469,-16695,-8955,23309,31723,-17261,-5467,31421,11021,12749,29905,2189,12973,-10987,5225,-1547,4601,-28589,-25653,-19469,-5955,-18565,-25111,-7047,28277,-24701,7487,-887,16059,29133,19527,-24655,-14733,15733,27347,2831,-1677,-17085,5851,28863,-12167,30295,28099,15763,15111,19319,12539,25175,9055,12049,-5695,10089,5827,8783,15933,-15667,-22525,-13511,-29769,20157,9755,32235,-11865,-12331,28407,16359,19471,25561,12041,-23525,-29477,4157,-8331,7811,-4031,11847,16825,-20611,-29645,2899,16011,6573,14221,2599,-31705,-26831,-30323,11113,-17177,-25267,-15461,-22763,2021,4895,937,1393,8221,12475,6813,-5613,9803,-16327,-22009,20995,15769,-8697,26069,-21919,-32093,9977,30251,13929,6265,20209,-22591,-7729,-16477,-3525,-16017,-11985,-5249,-25815,25589,25149,21525,1499,-2185,14123,-14229,-30995,-21265,-7083,11421,-28155,303,-26029,24263,17297,-13315,9431,-20759,3283,-2885,-7055,14409,1129,25183,22211,14107,-8985,12785,-23739,-13085,3149,31635,-15223,-24111,11759,-24041,7293,4303,4609,-5433,-24455,-2851,-24387,14857,-833,4419,999,947,30407,-5855,12445,15153,1827,24711,2243,-10065,15649,-1367,15381,-31499,-27289,-3277,18153,20169,21719,-12629,-19607,3499,6521,8317,-12967,767,22935,-15179,8913,-22709,-25755,-17717,-6649,-23225,30747,8003,-763,11321,16115,31239,13953,20873,-6713,4605,-20167,-19665,13917,-2299,5801,28619,32171,21583,-15181,10249,4491,32035,32285,27749,-31177,-6909,-24543,29965,-22087,19061,8479,18385,-4755,6861,32575,-4989,7729,4939,21105,24189,6311,18645,-26653,3843,31541,-11589,29643,-9625,25999,-21895,-28447,25183,21237,19233,13943,-15739,24905,-14557,-22067,-23609,6851,-18639,-31097,-16905,18161,24813,32323,31899,29031,21623,9051,14841,-15471,13059,-2645,12131,-16587,-16647,29923,-14077,-24307,7533,27829,-21617,-27649,-13331,-21027,-8235,-28159,-15069,20051,10767,-2783,-2507,-23197,-21147,14039,1555,-19911,4467,13175,-27083,-13373,-2417,-10775,26649,19339,18475,5645,-27841,32307,6589,26543,-7657,16921,10219,18189,-31813,1161,20147,30165,-10375,-16709,-28401,2325,4993,16271,-19049,13541,21577,-25195,2281,-21535,-19637,31251,25701,-431,10377,19845,-147,-2787,-11961,27969,-5741,12385,-9481,13515,271,9361,27151,-7179,-12525,-25969,-14407,-16461,1999,21547,-31341,-325,-27383,-8561,11879,1791,249,-21579,24685,29467,-15433,-29737,31961,-27749,-4571,25917,-22205,-13501,21597,24775,-21449,8733,25947,4043,-8247,-21143,17929,7227,12331,26781,7017,7939,-12961,-15069,5005,24361,-31469,97,25319,19045,7429,-9935,-9385,-5415,-14149,-785,-26441,-16011,31787,7981,29933,29355,13409,-20231,8153,-4179,12203,-26333,6965,11357,25919,9691,17077,11805,18901,-1,27787,9677,22105,-201,10699,-22851,8773,-16121,31639,-3957,-19275,16617,-30935,5185,23417,25561,5453,28361,4369,5141,4981,16077,-13661,13113,-17545,23547,-25299,-19713,-829,8207,-22105,-24261,-25177,-17663,-18775,-14315,25101,5195,8259,-839,-29121,16733,77,25817,-9063,-32719,-15475,-15261,-17809,13867,-6515,8941,-6807,2873,32485,-895,2419,15825,3719,-25105,19271,-8109,13253,31005,-25743,-29429,28157,-14039,27565,16545,-19031,6441,30947,21025,-5491,29387,14933,29099,29759,-8461,-18595,-5125,11591,26933,11909,11685,-18591,-625,26133,-12679,-3935,31395,10177,-10569,1187,24389,25263,-5195,27661,32425,-15029,29587,-7373,1757,-26607,8851,-3635,21385,21485,-25595,-10715,-30693,999,-3393,-22655,32087,641,1337,-24041,24877,-10569,-79,-17243,-29387,-1821,-29325,6785,-21983,875,25163,13419,7267,14121,7999,155,25199,20275,28823,-30637,-16683,-1207,19589,-30501,27225,-19455,19219,-5283,-8561,8311,3307,863,19685,29343,24217,-31317,23807,19785,-9649,18991,21967,30553,20341,29517,-14187,10329,-27217,23373,7019,-10373,31875,23073,-391,16467,6035,26167,30201,7255,18893,-7557,-31313,-6765,-10597,13157,6117,31421,16847,13155,-24801,25009,24133,-15021,27033,-31335,-31537,-12737,27861,15341,887,25345,-10873,14893,22687,3873,-3329,11835,3327,-12515,-6903,-31359,-30229,6365,-2981,16697,-6873,-9039,-31897,31833,-16027,-28557,-10039,21289,-17075,-25881,25817,-6503,383,-655,-7213,-15105,2417,-19641,22953,17333,6297,-29191,25785,25229,-13705,-7617,22975,41,19523,-11159,5421,18329,15305,791,-26585,-23619,10091,-19243,-12595,-18021,-2419,21461,-27601,8569,22243,15649,5761,14113,10913,29127,-12039,10015,5689,-31825,-693,8387,-27409,28103,3429,16433,-2095,-26635,-17603,7713,-1261,-31877,-30655,-1381,-22673,-16703,19881,-18507,13687,-15879,-24921,-22373,3085,10729,24871,20093,1957,-20747,-16837,-4913,-7651,-26055,28095,17673,-2099,29789,-23431,-25667,16457,19609,-16713,28495,28519,-19575,-23451,-32129,-919,-7995,15517,14843,12377,-14391,2581,-21187,18253,-19851,-22941,25379,-21701,25973,-6361,22493,11773,-11785,17805,-7411,18599,-17845,6023,15065,-31225,-5727,-2955,-8787,10039,-28319,-16647,19029,3547,21473,-10173,-1227,12843,26049,25483,6735,-4463,24227,-7487,28375,-7391,31841,-22325,6833,11503,-9883,23687,-18903,-19495,-4841,3015,3757,-31273,-26655,-11677,-7553,-19995,-14285,16449,16635,113,-15605,-31689,-23091,-16147,-23951,5671,10407,-5119,-8123,20781,9307,-13687,-16665,-14321,10571,-15239,-24639,-14135,-31173,18901,15891,16641,21899,4607,21137,-10969,24627,28573,28339,-8069,8845,22385,-29767,-14459,-23505,-23099,-24585,-24955,-3269,15743,19585,27215,18059,19449,-30973,9659,-1087,-3477,-9485,5185,21397,8595,-115,23017,-2377,24853,-18335,-31565,23835,-32107,-17425,-9253,-25525,31789,22839,6977,21897,19591,-2743,24383,-11877,-6745,-12121,10451,14973,-7353,14021,-12149,-2379,-19463,12951,28865,-19723,-15929,-28467,-2049,19965,-7921,13685,-25593,10649,-17157,-16059,1277,4821,15371,-22723,8531,-18025,799,-25051,18859,-26321,-22751,-5465,14029,-11067,21791,12603,-19833,-27327,-24365,2459,29767,5517,-26033,7005,28453,-935,-10509,25937,-22395,919,-29507,12715,-7211,31387,9709,-13821,15257,27391,28347,-8731,26661,-30907,6143,3021,21509,1537,3427,-12701,14881,-3641,1831,22303,28973,15613,-1329,-6213,19231,-21191,-6867,25757,26819,-1543,3909,23603,-15269,295,-30153,-9777,18315,2829,10413,7023,-16521,-18303,-8525,16921,15639,-32739,-32295,32173,8149,-23597,3685,-21873,3299,-12799,20293,-2627,11931,-26263,23939,1107,27043,2197,1335,-4425,-13013,32389,3441,5643,8887,4437,-13471,-19903,-25585,4743,2371,-8039,-8531,-13415,4177,-131,10873,6957,3557,867,-1017,-6373,20941,13951,31585,5667,-4681,32569,18051,6741,30145,-26433,-12945,2401,-28883,25635,-4425,-18037,5347,-6661,-25685,-20937,23755,-497,14183,-6469,-16027,-24029,12711,-28557,10581,26673,-27223,16887,-19501,32635,19235,-19047,-2357,19223,-27039,18171,-11855,8683,23641,-28721,-3867,-8687,-8725,4941,7977,-23775,22079,15577,-20705,-8493,26613,-9031,-26183,-6301,-8387,-26739,-3731,-6987,-4783,-11,-5601,22617,1599,-27261,-29805,-19531,-28839,-9453,10881,17739,4307,-32087,31163,-17085,13423,13189,3939,3639,9093,-31717,-19449,-19939,-2303,21015,25941,-12559,-24671,-32279,18977,-28293,-16363,26315,-23715,-31527,31045,29251,-24769,-26513,-4287,21919,1259,26303,18325,23959,22271,13663,-7779,-17393,-5659,-31925,-3339,20471,-3237,-12129,21999,29593,10299,9117,-4311,1879,-19141,-23775,18469,31111,-17445,-7159,-13745,-11309,-32737,3537,-1055,14639,-9473,15791,-26679,-20885,-22835,20653,31129,26489,4315,17451,19245,22897,-3381,-9265,-16831,-941,14851,29991,26303,14539,14555,-19285,-355,30197,10415,-27311,29793,-19419,31111,-29177,-2369,20875,13479,29485,23763,-10597,12645,-3265,9239,-1121,2085,20923,31333,-30137,-31963,-31215,11159,-22239,21837,-2833,-4401,-6393,16437,10419,-2499,-19367,-11431,15519,-1909,26579,11837,-29707,-10977,-27425,22659,-8683,-21959,-1071,12873,12527,-25419,-32379,-11561,-19295,17077,32557,20139,-13675,26761,-5893,27917,27663,1947,-1057,-12553,16257,4535,-13269,32339,20403,12961,-14209,-11407,25379,-31447,-5551,-7169,4811,-30369,10335,21619,6525,19235,-20101,-14063,18349,-31455,-1745,5041,-32581,-1795,18803,5359,10103,-941,17863,7249,-11337,21805,-19865,-8389,21931,7349,22675,-2011,9557,-16027,-28495,-24159,-163,-14583,-30333,-21689,-29745,30775,-32401,3479,-13777,24041,27271,32695,-20979,-22275,6061,20789,25875,-12325,-1173,-15511,-21113,-3257,24231,20591,20673,-19409,-4457,-17223,-7989,-25051,13155,-32533,3593,23015,15997,22811,3621,11799,-7637,-397,-4285,-28231,-24465,-30237,-3343,16491,15701,23513,7035,-5925,-2507,2697,23759,-3349,-1595,29499,14593,16285,4715,4913,-4327,-4065,9319,-27485,-22615,6343,32073,30777,-16811,9447,27101,2465,-8107,-15507,-26149,-16175,20103,20171,-3901,30969,11389,-27353,-23315,12299,-2931,19697,15345,24485,27405,12701,-11591,15401,29055,-32521,21475,14289,-29847,2373,16835,12417,9319,-21113,9403,16287,-21235,-23899,-30781,-18313,-885,-1655,24263,10497,-8595,21533,-6567,-24767,-321,11457,-11045,-6193,14801,-8625,-13565,-4959,-10613,-10261,2305,-3307,27535,29033,28685,9855,26249,30077,22189,-26889,-6857,23351,19587,20209,-10367,-3033,-10105,27095,-17699,32135,11881,-21773,-16973,-9553,-18549,-13587,12761,13577,-821,26309,-9835,24279,-32579,-20429,23943,9413,2591,18831,22183,-2333,-27887,-29185,-7559,4519,-12679,16077,-20385,-25679,-595,-169,-32589,-4895,12149,-30805,26707,-8439,-31451,-22123,-4793,-32333,29327,11799,-20547,3689,-26671,-7421,22449,7663,-13831,-29631,-21643,13363,-1537,-20967,-17495,-11367,-20989,-8825,31095,-21031,17519,-15563,-30637,20907,-12917,-5179,18047,16799,-12671,19829,24223,-13029,3791,-9353,13711,20207,-2675,-14439,29857,9491,-6245,24125,-18041,-19705,5821,-8985,17705,-25473,5099,22113,-9725,30287,-1433,13601,-12919,-29167,25203,23003,13017,20425,-8689,-28081,15329,-10243,-29019,19639,24567,23683,-29321,-13263,23355,25071,-20431,-17515,-3655,30233,-26397,-15551,32333,-2745,-5269,23341,-10343,21863,-11799,-15727,9467,-20515,21679,32637,-20911,-19769,-21503,1061,2155,-30275,31493,16849,-9599,-4889,-5877,30043,-11761,23613,27471,17503,-28817,19019,24599,32393,-29861,27831,23285,-27531,18803,2591,7419,14949,31403,15273,-7515,25289,12131,1965,-9017,-2103,-30381,27419,-31091,11111,15959,-15271,29011,6539,-18169,5227,22741,11383,615,29111,28063,-3907,-28733,-4301,-22737,-16497,-16549,-26477,11887,28961,11385,-14397,-27917,21659,17801,-13219,-32177,-14223,20787,-10489,-31477,3509,-29381,27207,20057,-12295,29361,-10375,7085,-8671,5085,-14869,25293,-22027,-19631,14497,-30513,20161,6537,30453,-24825,17139,12163,637,17369,8651,24663,-15559,28581,-21491,-433,-21941,-27483,18611,-27653,1495,-4415,29027,13611,-21521,30677,277,-23621,-2361,23821,-1481,4965,-1779,-22589,31239,21759,3969,-19703,-12585,22549,-11743,9001,-4707,-24823,-26659,-24541,-12603,26147,18007,-23089,30563,2881,-27889,22519,6535,-4781,-15441,-19037,-21401,6365,5419,29433,29063,11487,-23439,24925,13443,21737,-20705,-13735,23131,5703,7433,5781,-29685,-7203,19883,-10307,15401,24615,-31585,-30067,-15299,20515,4497,-6713,-6561,7511,11275,26147,-24761,22743,18049,-25819,3053,-32505,20719,24517,24461,-9319,-28595,-3209,-1805,2359,32671,-32279,-24825,5729,16975,21295,3375,16881,-9949,19801,-15115,26397,-20669,2947,-20785,19059,-29095,-11653,18449,25955,-2015,-1713,-24289,29241,4413,-15235,-17425,-10413,4721,20043,-7739,-853,3175,-7601,23995,-12873,-29919,27221,-6867,-31727,1729,-2779,2105,-21317,-29463,27315,33,5715,14363,32227,-5357,-3983,25673,-9533,2893,-24973,4545,-26705,-22087,22989,-19081,14241,12283,6667,-18059,18719,14527,31839,4563,-327,-11421,31395,27239,-27867,-997,-11309,27553,-11991,26755,-25659,16049,-3581,30645,-4465,31929,13821,26165,21821,-14205,-19837,-30045,6915,6793,8473,-29405,25563,-26373,-10937,-4115,-23081,31019,-12771,30777,-11039,-17465,-32305,-25985,-19377,24115,8861,3567,30611,13831,-23601,1523,-31475,-17937,26763,32311,27049,-3189,-2573,-16393,-23571,-32279,22559,14955,-6691,-25291,31751,-17701,2183,-23753,-11261,32151,20519,-4037,31533,-9635,-22565,-13647,-23125,-1793,-22531,-28785,-23875,-4361,23717,31513,-27513,-7503,-25003,27629,32549,16661,-25237,14403,-20995,8479,5093,-9005,5345,-22177,12803,23115,-11793,12135,2893,-22247,4009,-7919,-4603,31187,16905,13919,-21329,-7677,-20809,14133,26231,15445,-14035,5907,-22771,-2169,21221,2985,12087,22799,-4547,-23665,-16527,9131,22573,-23147,25753,-29331,-25295,-22557,-18373,535,633,15495,-14535,-3483,-21693,-32639,-2557,10139,-8535,3309,17703,-11959,-17949,20447,-12889,807,-11553,-22263,17701,15575,14609,17649,-8277,-11765,23365,11253,-9037,-10075,-15667,-1057,-10873,28111,-3707,16557,-6261,3901,26871,6667,-28863,20353,-23595,-28695,-13435,26265,-14167,-31787,23433,21903,8519,-12967,19951,-31395,12155,-3657,-12321,-14721,28409,-10925,-17847,-22481,1135,-15875,28279,27241,13705,-23025,-22201,-9947,-17519,-4839,-15545,-3561,-23839,4299,20267,17159,18091,-25747,-25405,6731,2589,-32091,31303,-4299,2455,14859,19849,12923,2901,-24749,-15069,14475,14221,-14937,-1563,-4365,24379,-13619,5597,4255,1421,9827,743,24355,8499,-22665,2349,15081,-26545,-1665,-4377,193,12739,-23597,7081,-27661,-5689,-30983,-15629,-20401,-21989,23759,-867,-24999,-27531,5853,-10359,-10851,-15013,-23645,-17525,3657,-17653,-24237,-2027,-11899,14675,32269,-32297,-21445,-15115,25737,25917,-27463,26221,-24943,-16019,18073,-27351,9277,1277,26653,9207,-407,-27979,-2463,653,4707,10777,-9837,-9441,-20805,11269,-8449,-6921,-13973,25303,3707,19759,8173,-26601,24555,5455,-6703,30381,5205,-28635,-7775,-18423,1747,-17865,13,-9861,-13723,31141,7505,-31283,-21063,2943,24449,3103,-17135,22719,5639,-5287,-5793,-4789,22147,-14025,-10211,-7901,12487,6205,7013,25517,1247,-21467,18941,-23917,-10755,21617,-30451,5025,21467,26487,27917,-22445,19121,21309,-24349,18891,-19355,-15831,-19165,-32155,-2883,24587,20457,21757,22643,-7807,-20753,15297,4911,9845,-16785,-11453,23355,22529,-31203,28937,-2825,91,-161,-31751,-20833,429,-18859,-3089,-27799,26701,26963,-19843,-7149,8409,10695,-31247,18159,-12919,-22755,-8519,-4669,15897,-2119,19343,-18133,26253,26695,5751,-10311,7757,5907,-14869,11467,-21745,6041,-4525,12793,-25827,-8453,-24271,9745,-12423,-17263,-27317,6635,8981,10327,6865,-26801,9459,-8239,-17553,-411,17379,-3557,20693,-2255,32567,1191,21247,-2789,20195,13803,-24299,10203,28117,-14397,28481,-997,10669,-3527,17083,1643,14245,-8847,-9555,32741,30287,819,-22385,-5883,1901,15253,-27403,-18055,-30947,-1399,-8301,-12581,5345,32443,4669,4683,-16695,-6661,-26695,-29419,-11797,29599,-21957,-29379,5083,17683,-1309,14369,-22127,10273,-27335,9871,25101,-747,8469,-29887,-23907,-25289,9177,21955,-30467,11311,26997,-31977,-15063,-23127,22815,-17699,-13783,7017,19957,-17523,-26033,16315,7085,-17463,16831,12233,13461,-2103,19797,-14261,28535,-12541,-26597,30937,-14041,-9597,-29459,-28155,9457,18957,27133,16481,-24477,8355,21991,28021,2505,19079,-2297,-28793,29737,25031,26117,-3151,-8565,2293,189,3167,-14917,18813,-20499,-25559,1299,-17295,29819,14153,-21389,31231,23767,22181,31963,8777,-22485,22263,22779,-7973,-3545,-16089,24985,-27171,27517,-4643,9825,-30381,25925,31951,-10037,-22653,22857,-10909,6937,-8605,-2055,-31371,27239,30729,-21423,-16105,17045,4889,-29663,15463,15851,6743,-8073,19611,22409,-16865,-16885,10317,-30885,3905,26749,-23461,-4671,-13335,-27733,19859,-27321,-17459,11249,-23675,-5799,-27405,30437,-5133,31497,20013,-29423,-18043,22517,28395,5883,-19373,18011,-3613,4295,6061,5367,20749,17767,18999,-31587,853,27051,17397,15063,-2001,-28615,7897,17771,23845,8735,11489,25157,-27147,-12491,28291,24891,11359,-11117,-31527,29351,15735,24175,-26781,17689,-29479,-18027,30731,-5099,-3647,26179,-25227,-8867,-25425,28625,-1803,31779,-6509,19369,11057,14055,27187,-3587,-15187,-17215,-23803,8637,3323,4453,-10185,-15417,-8189,28373,9639,-20043,-29307,-23331,20469,28903,16909,7703,18535,9801,31951,-12307,30677,2597,-9957,5115,-16033,-16439,-8777,-9847,-31577,19197,-11967,26703,3829,-4839,-14229,-17385,2013,-7921,29851,-29555,5677,-4475,2981,25825,-8335,24349,25995,-18639,21425,32559,-12157,-2219,-22567,17905,-8255,-9619,-19069,8715,-4409,5669,-30287,3675,24363,-18193,-17985,31097,-615,17073,25427,-28859,-22827,-20167,-27593,10767,21565,12587,-899,16889,13615,15419,-3203,29827,5289,25767,1511,11647,-26769,-27569,11295,-20983,14323,1033,-25079,11035,-7751,-21587,-28285,-6111,-21887,22973,-20773,32405,23969,3957,-27185,-8535,-3831,17309,-13669,20727,12587,-7115,9913,1759,-9547,22609,-7291,-3473,15183,-24253,-23953,-4597,-14923,-19441,-19635,20775,-27583,-2757,-8253,17527,-25589,3661,-6013,-9301,25603,-885,-23289,-10273,14187,5831,9237,-15505,12195,8101,6149,-25183,1367,13399,5777,30949,-12737,1605,27531,20335,-18969,-7805,3253,-581,-4087,-17805,29305,28107,21409,18723,-21531,-21151,10165,-12839,10587,-19811,485,10079,-30783,17967,-17775,1651,17035,-14365,-30693,9101,-9787,-3173,-14039,8771,-5331,-13305,26577,-20707,22445,-5295,-14941,-17577,-20437,-23791,22185,10497,-509,1429,1161,15821,4625,4351,32101,13615,21869,19785,-19447,-31231,441,-8339,-9315,-21425,5911,-12785,-955,-5357,4385,28229,-29139,-5175,-18585,25459,8217,22335,4697,14643,3519,30509,19749,-15177,-31967,18371,18875,-21919,27613,23383,-15549,7369,-17779,3683,2637,17263,14693,6301,-23725,11105,-11159,-17783,-9669,-8471,25351,-30101,-11063,-24881,30949,2749,-29823,26973,21869,-29375,-5531,30653,-3045,-4323,-5837,-31103,10973,-22061,7959,-10577,-5559,11041,15429,-24229,-8823,10579,-7713,-32631,-3719,2993,-27145,-2891,-29095,-13091,12221,10977,-197,1901,15065,28771,11335,-22163,-929,-17415,-26889,-25095,-8351,-1727,-19025,-23669,-15397,-3981,-1041,-3295,-12387,-9999,14521,-25343,30799,-24823,-22689,8035,30125,-17895,32209,3189,-17509,32339,24019,-21579,-29077,-15203,-4649,26303,-24453,-28461,-13607,3683,15129,-17385,15481,4027,-22853,-19563,-29209,-13111,28647,25003,12873,26673,10567,-26901,31255,23621,-18545,-6997,2521,28023,24185,8543,-7163,-14127,30105,22861,-7839,13485,24233,-23965,-8605,-17069,1025,-27455,26449,-1457,10615,8063,-21775,-32527,-1913,-945,14903,1851,17685,23559,-11213,12217,-12555,-12951,25347,22361,-16751,-12093,8453,-17469,-31659,32429,-28585,-24741,-20547,5887,-15819,-21103,32307,10197,-6233,21117,21005,-19253,-8233,-31425,-32121,-10687,-2653,10635,23503,15649,18667,15221,14341,-5479,24317,2737,-5405,30547,-12833,-17039,1837,1469,30427,14635,18129,-2017,-30507,-10823,16527,-30693,9783,-4753,-22133,16325,16187,23157,27089,-1673,-11301,27441,23623,7549,-16603,-19421,-13473,24213,30147,15631,22807,-1001,-5555,10817,-373,-6501,29875,-21239,-19191,4549,14323,19097,-32127,22507,-131,17397,-30807,-8835,-2609,-9877,-32667,-11721,-17707,32167,16349,-10353,-31977,-12021,-4637,-26285,29001,10809,-1771,24455,-15853,12389,-10013,2781,-5803,-29933,17591,22269,9795,-28821,29361,-9367,20761,7925,26725,-26529,13293,817,20439,-20967,22055,8009,-18737,-22959,31867,13547,-847,31193,24679,-14619,-27023,18845,-28117,-10931,28851,-20263,-3813,-12383,14481,-24277,24233,26393,26375,-8727,-23531,-4393,-2401,-10913,12929,25151,15437,-5885,26313,3869,11109,-555,25017,-19207,1585,9861,-12259,-29003,26783,22571,17539,2939,16555,20209,-16581,15851,-4473,26767,-18213,-27469,12367,-29959,25281,7543,13487,-29889,14325,21725,16141,-29235,13367,6505,2547,-11291,6899,13465,-97,7785,11827,-19965,21485,-21461,-23825,29079,23551,29743,-12553,-30925,-24719,7309,29741,16767,-14651,5675,18637,19133,-15291,205,8375,-10193,-28751,4487,-30637,32485,-16887,-20401,30639,22651,-4295,9609,1647,13129,733,-7689,-2873,1781,18761,30291,20883,-22441,-22251,29017,27579,-14729,15449,-22629,9981,29111,25377,5045,29915,-1073,-29423,3867,24563,24997,-19259,29833,-14853,-26425,-12549,18111,19203,-15835,-19681,30643,24211,-13949,9545,27841,5307,-18399,-4583,18767,-11279,17569,-31491,-17527,-17865,9305,-5267,6045,-10511,16945,26621,-923,2423,12193,-7959,-23221,-25357,-20629,17187,31197,-32419,-29401,16647,12159,-9159,-14159,23325,-26419,7035,1611,2693,27325,-20651,32519,-13117,-11939,-11891,12351,20889,1409,18151,-12799,14019,16565,8451,20193,-24775,9569,3735,-31585,14765,-23701,-28113,2097,22695,17643,19649,-10855,-23759,-29655,28585,-26751,11975,-23131,-20611,-29035,29009,-22343,28527,-21151,25043,29637,-15681,14465,-31493,-18227,13141,-14295,-15801,-26429,-7325,715,11429,437,-21903,32425,31921,29019,2613,-15951,-10571,-27073,24703,1379,24979,-7749,26587,-31573,-23077,19461,-27599,-9009,16655,6031,21881,31773,4549,10691,22687,3019,-12631,22421,-3955,14339,7121,9513,-29483,25513,-15981,22303,-29659,31051,-5495,27437,18017,28137,1419,-29203,24921,4813,15113,-21909,-6643,18085,1743,-29097,-25697,-23241,10925,-21627,17965,20177,20811,4753,-3103,-6035,11187,-4433,-23351,17233,10089,21459,9353,-27385,32743,22029,15197,24351,-16619,-16731,4061,12797,-27259,-26521,-4035,-19605,-26703,31107,17455,19163,18425,681,-27661,-15163,1591,-17613,27575,29725,12213,4765,-837,-1619,20415,-28931,14025,-10421,6049,19409,32323,-26115,29141,18481,15879,16907,-13081,7115,-32065,4383,1193,-12849,-19811,-7077,-24307,8507,31323,4971,30931,-27059,-5207,20063,6037,7375,10299,13221,24121,-24453,24091,20177,11421,-7949,21653,-3847,17571,14913,22993,-25709,-26517,-1973,-873,7025,12195,25555,29903,-24875,22511,-12693,31995,29331,16437,10517,-3013,17661,-2025,30315,-27975,22547,10809,-25361,27797,29289,2285,-16325,15309,9265,-10521,-19035,4899,23257,-31219,1829,-16553,26367,5915,-28637,-31141,25127,-21587,30275,16771,-3615,-24505,7481,5731,-22735,-9309,-31937,-5519,5261,15747,21275,13415,14467,1849,-9047,22735,11029,27803,-5605,13871,21449,-29199,29957,-16231,15315,-18789,-3857,-30979,2389,-26935,2507,-10159,24121,-17899,18941,12339,17321,7291,26859,8157,31479,-2861,-13673,24953,14233,-8121,-14175,19229,14737,519,-11049,18941,-31427,-9203,-15943,-1305,19581,21441,-27729,32035,26183,-31563,5749,21885,19245,32755,-1759,-10661,-30143,15673,26425,-25681,-32613,-24939,5563,15215,-22425,-14171,-26193,4091,-15555,-31215,27929,27535,-25897,-1215,19033,-523,27629,20957,15541,27747,-12483,4883,14013,-14725,10633,-24627,-17513,18443,-32513,22367,-14003,-19381,24689,-16855,-7551,-2017,-19159,15725,-14709,-24611,10301,-25007,-28085,-12463,23545,24141,-14397,-27451,-15283,23675,16555,17149,-26349,2209,16325,21025,-16077,-14971,2963,-11625,13359,-577,-12487,-31997,-9329,14351,30529,30357,16613,32193,3771,-9573,-15797,-25959,14621,22847,-3763,-15931,5607,-28025,15059,-17125,-13155,-8393,32293,-9481,25735,-7083,28811,-16141,4581,-32013,28947,-17561,-939,5815,17417,-25111,-16749,17215,-26685,18897,10577,27071,-29583,-7013,3471,8151,-5587,8991,-32589,549,30081,18377,-1399,12809,-14953,2687,4969,15595,13933,3577,19087,-16159,-27787,25035,7215,24093,-32427,-32439,13113,-11957,4515,-21813,20737,-7333,1881,4761,-11515,-31963,26573,-11917,17345,16879,-23677,28191,31567,-18695,6813,10777,28809,7795,-11197,-6721,5335,11665,-31467,-27381,-24787,-2547,26987,-18993,-10001,-21303,14741,30187,-16769,-437,-19707,-27431,-16913,23247,32023,-23151,22121,-15667,-3467,31125,21517,-11195,-18751,-27699,-6371,4391,-17739,-28293,30625,-8939,12717,17793,5089,-22071,28945,11035,-6733,-6249,13145,-14029,-16925,13337,7447,-18363,29387,23623,14437,28225,15645,-4959,-2213,19715,6209,11799,-25247,-14711,-1215,18061,-26453,-13507,-18407,7239,18139,-25367,-3473,17553,-26373,2773,-12401,14579,-17517,9215,1947,18815,7111,27569,649,21715,-9949,521,8675,29041,-28343,-13647,-13889,-10705,23097,25623,15785,11105,-26973,10193,1911,-15081,7037,-26801,23041,-8953,26573,-26831,26795,-15335,667,-24613,-27099,-16293,4963,-27291,28807,-23229,15719,5709,-13527,-24865,-6709,-6527,-14815,55,-14863,3475,-8489,27007,-487,-24917,-19063,-10601,2863,9969,-31337,2989,19271,2529,10775,-1841,-29343,-25513,27801,29103,25951,11837,20025,-29631,-23045,-18931,-6081,12403,-20959,26941,6999,-30927,-2791,10709,10233,12949,-32491,-10915,-20169,16405,1581,14233,-4477,-24723,24931,-9741,25209,-1681,-23913,13893,-24959,-24959,-30843,-13701,-139,18407,28879,-1389,24709,-13189,17627,22377,-28007,-8727,-20033,9975,-3457,18745,13277,-6265,8315,29257,-7713,-26261,2437,-4547,25975,-31241,-20579,15433,-18161,4375,-20523,18043,-3967,-31357,-22131,-12077,29579,27725,14697,-13781,16625,26339,31921,32483,-27679,-8483,1333,28151,29245,-12621,7361,-30869,16791,4899,20017,30661,7437,-271,24833,-19259,21963,29985,-26953,18407,32495,-27309,-6175,13073,22513,28943,21709,14471,6067,-25787,26469,13781,11155,-19205,9067,-7065,-11287,-7411,-7577,19795,-32279,-23301,9783,-21387,-7091,-2065,14629,-18885,-28381,20813,16041,-10729,17685,9359,4831,32601,-24847,-25647,18529,-8913,-19933,-12113,14515,6221,-2933,25445,26237,31695,26667,-23069,-24469,28329,-6633,-23663,-5533,-5577,16759,-17715,21249,24937,7173,31373,-13323,1297,9417,-2279,11949,4535,-17953,-20643,25581,11843,9901,-3439,-5441,10757,-25009,5187,5435,-14121,18025,-18279,3165,-22253,-15037,-32199,5145,20791,-16783,-30877,-17363,1169,-24289,-16451,-25775,23555,-25267,-3823,-32233,14863,-15501,-28281,-23387,-22159,-753,-19791,-2259,-27607,22753,-4601,-11095,25693,-11529,7839,23119,-1427,-4175,3497,30077,10063,-14855,-8235,-3283,-25173,-21279,-25363,15341,-5231,26477,-1717,29391,32673,20573,-13039,-20823,26425,-13621,31581,-5045,-14151,-18285,17309,-597,27869,2497,8611,12553,-1131,-17083,-30577,5135,-22231,26123,28621,-2923,-2259,12359,-27323,17779,32609,-29913,23955,5679,-1099,5917,19629,-24555,7277,1571,29971,-1819,-1025,-10975,-3681,32311,22875,32559,-10183,16717,-1275,-25061,32449,-24437,-14173,5459,-29845,-18385,-23767,18985,-15901,-13733,32729,19041,16031,-7153,10147,-10785,-29149,5271,-29487,27155,14773,22343,-2677,12569,25511,7725,-14679,10183,17189,5511,13253,-29409,-25075,215,-21281,-8627,4667,-9711,8991,-10813,-27741,28741,-17665,9469,21409,6427,-5149,18615,-28865,11587,25957,-15991,-29691,22489,21849,28073,13227,-13103,23529,-1007,28823,-22201,18281,11661,11553,32119,-9429,32307,17049,-873,-19783,-2033,26931,-17615,-3771,-14107,-7975,-27051,-1111,-18183,17949,6495,24429,-3013,8509,13331,-19133,-13361,15975,-18737,19005,-13189,7847,11725,-20293,21373,-7299,2519,-6519,-20079,24821,11813,-32159,14093,2299,24791,-24199,-25735,-5249,-17413,-18587,-20465,6573,-20665,5257,-18859,15021,2855,4965,-7279,11509,7917,14853,12941,-13107,22843,-8013,-17993,27879,-23893,-5277,9947,-5979,-30239,27773,-30151,6555,6577,19309,-8367,5231,-32557,-9403,20763,29637,-30545,8133,21075,-27367,4797,8237,23519,27417,13047,-21227,-6507,-13055,30085,-28805,7567,13205,30117,-22579,4569,28311,14149,-22211,16323,-6441,-23391,-26519,27089,4685,-32667,-22419,16131,-11099,12037,-5521,-20951,-25753,-9971,-31865,-29307,30285,-32393,-4655,-20473,9155,-7189,-7881,22963,-23393,9167,-10823,8585,17981,21893,23213,10701,603,-24903,6331,30841,29549,9659,-19793,24195,-22129,-17507,-19199,2147,9173,7761,-921,21315,16315,-10159,-28531,-28737,-11279,6793,-14481,-19063,1931,11111,24127,-23737,13963,-28719,-27933,14665,-27551,-14865,31715,23805,5395,10847,-31741,-30815,5443,-16151,30969,12929,30083,-1875,3629,21137,-25163,30283,21333,-21889,9297,6315,-31263,87,18955,-11827,24773,21955,9579,17737,-9839,28513,24217,16473,27451,-8587,31161,-25629,-14071,-12021,-3347,10051,18263,-16205,-11991,-25059,-1231,11539,-5303,-4871,-22795,-10709,31741,14387,32671,-19869,3043,13277,-10465,6257,-29487,29819,19735,13067,-17741,-9695,29119,27561,7895,-16933,8027,-25533,-30707,-16103,9853,-24277,26761,9641,3139,-4635,16315,-10507,-825,-375,31925,18949,-21769,-21513,-18179,-28265,-10333,30989,32145,-21339,1977,-12033,-9585,-18321,15825,16855,-28655,-9335,-11571,28619,29871,-31857,-23981,-28233,9191,-21243,-29845,25823,-28889,-17589,143,25835,-25273,17663,26699,6873,32347,-27129,17123,13321,7263,-27097,22987,19127,-7605,-30415,14595,-7469,9187,-20675,-27937,10297,-28999,-10811,-1653,-27393,-28001,-29565,26287,-27443,-22435,1469,16649,-26725,-19971,-13625,18049,-18659,29205,-32119,-30759,22119,17199,-23089,12711,-25679,14417,7109,4621,-25253,18509,30495,26439,15827,-31071,8091,2141,-11545,-12897,6927,-32209,24965,8881,13937,-5331,-26921,-25989,25241,1055,5251,18443,-7511,-29793,2267,-1251,-18741,-28493,14137,17461,3201,-22985,-17377,8767,3663,-3953,-18401,-23931,-29525,-23623,-31033,427,24449,10317,-20579,11791,-30047,-15875,23173,-28679,-7121,26911,23925,29663,17195,-13677,21573,17945,-18183,-18521,-29075,-475,-6219,-9661,20103,29109,-889,-6861,9983,3389,527,-3925,11337,2649,16899,-6729,16283,-15403,15871,-12845,30751,18465,30709,15451,17729,-17739,17785,7043,-123,8907,-8033,-17253,14017,27793,-14651,3999,18831,14297,28795,25363,22951,3645,23101,29393,1405,-11311,-15061,17233,29575,-27553,22579,10439,-9191,-12151,-32511,7931,-6805,-22117,-20355,22455,-13861,1595,-39,-30089,14993,-4165,-25537,-19931,-603,12617,25529,-1213,-16343,18507,16969,32039,27389,301,-925,-23527,10695,-14229,-19601,-13929,-22009,5697,-357,11989,-19727,22931,-10905,-31,-23423,-31591,-3587,-1611,-29979,-32133,-26161,26179,-5399,7575,20565,-9771,-16129,29299,-23229,13467,-15219,28955,-25875,-27379,-7305,19339,30381,22365,-20585,-20981,-20077,-7493,-7681,4325,-1043,24185,23905,-18969,-21297,-3399,-13555,9563,18751,-17971,-5225,-13743,25805,-27865,-22603,-6065,17083,-16897,25519,15979,-28229,1933,-31097,29077,3711,-19415,-16371,26191,-18427,-709,-12115,29325,17743,6559,-12613,-14017,-9303,-13863,18693,-28135,11419,20337,26119,6867,-12957,455,28831,-495,2969,4485,-5563,17615,-28043,-30691,-22493,-2019,-8719,-27373,26703,-7475,-10923,15833,5623,-10433,1223,-26727,24291,25811,19679,-22301,29965,25991,26361,6701,8081,12747,-11219,21859,-15517,17351,-12933,-11217,2155,12501,-24723,1739,-18837,-5767,-12099,-6511,-8023,17143,23371,-16653,-1429,2225,17861,12301,-24381,-10361,-15991,-6959,15039,-31659,17095,-1405,19015,27751,-3425,-30419,12129,31099,15135,25649,-15689,21577,21971,17825,11663,4139,31705,-12659,12097,-1557,-22241,-10415,-26373,-2689,4251,-14327,-28347,-19509,21845,20249,-7987,-26657,30491,27375,-27313,3799,-1707,8531,-13753,-18221,-12445,-10263,-29525,-27337,-13221,10301,24259,21255,-15427,28557,-31171,-25303,24441,-9381,-15823,-17783,-2669,15073,-23337,-22523,-28099,12731,-27247,-8751,17143,2289,-16149,4313,-15621,22443,-22845,-12323,28105,-26349,26715,-453,25395,-26257,-9347,-19911,-28355,-20895,6171,-32679,-9337,3439,-5749,18791,-12669,-13169,22129,-8573,4607,27145,-21871,-30373,4171,17555,-15415,14131,-28647,-11541,-14945,-1005,5957,-29299,-26415,13087,9719,9353,-26749,-25787,18791,-2747,193,16765,5245,-9553,-31273,-26003,9035,965,6413,30273,-15265,6199,-31611,-11343,29215,30295,29571,-24743,4081,10617,-19625,-27651,7155,-10045,-12157,-13903,23355,22255,18525,-3387,2471,-32525,4807,25799,11033,17187,-27117,10667,13597,-21499,-3281,9745,2031,-17397,3431,-14467,-27305,-8823,-5495,23361,4959,25523,-27019,12185,-30763,16837,-1863,-1543,-11213,-2067,-16771,-19309,-6691,-10537,11073,-18547,6839,-20505,12395,-17761,-9393,-6585,-5091,19021,-21781,-32117,7463,-13333,31605,11325,4851,-7559,5169,30467,-26393,-13195,-24625,27013,-26019,-24621,-26617,28919,27987,-32239,-19377,21163,26103,3735,-9641,13181,-2119,24613,721,-17427,7875,13473,13787,26719,4415,12129,18029,25233,3707,28701,23231,-11975,31527,22757,15215,-23631,26665,27301,20795,-20047,-30691,-14599,-17671,-6575,-27277,19237,21279,-583,405,32465,-28275,17443,-2071,27539,-28681,15415,21939,30125,-6895,20929,315,31779,-20521,-3521,-29981,-12441,18313,27407,-25989,-32049,-25063,12535,-30083,-22839,-30587,21223,26875,5443,-20433,25893,26479,-23085,28213,12063,-26601,29711,-19941,-32163,12495,3539,12953,-5573,-19423,23069,4225,7443,-27449,9645,6407,-21543,-22407,5613,29501,-25071,9571,-28835,-10073,16133,30033,7843,12829,2945,-3857,-18499,22993,30571,-263,4709,-23261,21127,4429,30791,22443,-18559,-12439,-32025,-24917,-21107,26023,29181,-31847,24827,3627,-17879,26539,-12475,23023,-30835,-19817,23945,-25881,16019,17429,28375,-9489,-1955,13837,25599,1733,28199,-15677,28795,-22083,19227,-753,-28395,-29445,3607,-3285,19147,611,17409,-29665,-26101,-12179,7497,16125,28877,-29729,25433,-27375,955,-11763,13221,30383,-19447,20223,27917,17187,24273,-16699,-7897,31275,-11283,-5817,-20865,-20825,6251,-16171,-16609,-5239,25217,-2531,-15457,-10011,19735,-7009,5059,-3371,-2565,-10135,-24901,21053,-17,-26839,-14279,-18613,10139,-1051,12243,-29373,-31263,-13101,-4813,12075,-23033,-15843,-11165,-28481,-31291,479,-21207,-7933,9587,27921,31997,-6787,4883,-7777,-147,217,32597,-31563,9405,-21481,-17223,-10443,30965,9207,-14419,-11197,4549,15053,22161,-1275,-29889,-26671,-24547,28005,13815,-5263,-1143,-10389,28259,23757,-22781,17821,4961,-7439,-15505,9587,-23031,7049,-16007,32619,29745,487,31571,-24817,-5557,30313,-23835,-16733,12153,23435,3589,10255,-25813,-4663,-17259,-22087,6999,32253,13039,-4261,-3143,-13371,31557,-6641,-19451,18339,-14173,-3759,-12417,32231,-20023,30305,3983,26127,19689,21899,-12237,23495,15899,25437,19291,24565,-10645,-9179,-7273,23703,-12835,-2041,5481,13605,-10997,-30385,23079,31129,18249,2805,14575,-30281,-1541,-26997,8777,30169,-15193,20967,-7847,32553,-26573,-9455,-6683,-7165,7673,32455,25835,-19599,13695,10347,15335,28311,32347,-24785,8251,-12557,14721,17515,-29075,12561,-4063,-28713,-6563,-18119,-10867,-30523,32709,24239,14941,-23237,9179,1619,-6025,-24589,-27597,1739,-7107,20497,17347,-20459,-13299,5055,20581,3987,10897,25897,22841,-15757,-23829,-30103,31263,-21827,5703,-27385,23605,-17867,-25435,-26071,28347,-29563,-8647,-9003,-28837,11271,5367,16995,18543,-32547,-17013,-24637,27037,-9711,17121,-10455,-21189,-32649,-24647,-8745,2023,-14241,29409,6627,29555,29211,1821,-15827,-2141,-24841,-18199,29641,-18133,20733,-4639,1239,20223,663,-8497,-31065,-5783,-15757,-9049,4265,-16015,-27013,-10451,21559,2943,-28055,-6789,-23111,-12327,-28149,-13341,8331,10741,-29985,-26627,6419,11257,-19915,28423,23155,-3113,15747,16551,22745,-11211,31755,31285,4975,-16629,2857,-29053,-7469,8037,11233,-14851,15695,-20207,-27171,-23469,-25957,-24373,-14977,-17041,-25691,8273,-25201,-29265,-26643,-539,-29107,-12597,3637,-20019,-11417,-12325,5911,-20003,-9559,18649,31693,-13275,9355,-9033,3489,-22925,12601,20715,21303,3153,-31431,6551,-11105,-20765,11509,30925,-25085,25259,30733,-20413,-17697,381,17039,-10861,28749,-6259,24181,9901,14743,-21725,-9069,-9943,-25415,-16503,27661,-21525,27529,2757,2757,2759,-28293,-26823,27871,-29073,28323,-24879,22009,3475,-13645,21351,26441,-17869,-8807,5207,12993,-7677,-5659,29315,-18699,25205,8631,31955,13721,-26605,-19545,4561,-20625,22889,10095,-13413,-10215,-6951,5491,1843,22351,-8413,-6733,-9083,21151,20375,15801,8635,9515,-16301,2753,-28275,7035,12989,-3679,645,-5193,-8399,-1869,26773,4887,1353,-25475,16259,32135,7141,8327,12597,30693,27191,25613,29845,-11905,-25597,-6265,-6081,29083,-29351,13591,21389,12069,-3403,9727,12745,18041,-27095,5769,9929,-6205,24791,-6785,-10395,-16841,-16983,19341,14937,29701,-9353,-5875,18011,-22363,20123,-21423,-16359,26997,-28757,28367,-27413,19333,-5905,12877,26615,-30255,-21223,-21623,32211,31763,-19463,17429,-15377,8749,-14903,-24667,31615,271,24123,30569,31355,8889,15933,5401,-10879,-13523,-31639,-13933,21977,-3697,-29823,17715,-12217,23885,23817,-3043,19811,-20669,2953,-8737,5981,-20717,-25093,16525,-11833,5179,5737,2727,-6703,-16901,16137,2965,21119,-10529,22687,-3199,28687,-22935,-23501,-29679,6839,-5415,2023,-23751,22515,-5791,-19557,22467,-8677,26881,-14491,28027,-18879,11357,12157,-17959,-9269,-20985,5105,-7399,8053,-9859,29893,20783,2327,-21547,-21515,7545,13,1575,27891,-19933,-18401,-28297,24487,-6251,-22155,-2573,-18569,-31097,31067,19117,-19869,-9563,247,4031,31145,8609,28719,-3639,-19357,-24665,6599,-2409,10887,-507,-2677,2327,-27549,-20999,-30613,-13523,-23111,-26009,17945,133,-13091,30591,-4567,32137,-21877,14611,1595,-1193,-10229,-24377,-7147,-3303,31169,15369,6857,21707,-13639,-23727,-23959,16307,-15021,15477,15633,15865,21985,16045,-31355,12611,-5085,-23287,30519,-12361,-23129,-2497,22287,-21821,-18149,15817,6341,-3215,18035,-11109,-23649,28133,-739,4297,-10863,-1941,5101,13979,-6347,2083,-12605,-9639,-24889,-29283,-30843,-12565,23205,-3495,22983,3815,24355,169,-2993,-1115,-5413,21229,13211,-17009,-31163,-19427,32015,-32747,11689,-18867,-4073,21673,15647,-31859,20525,-14223,-10929,-4081,10051,-32417,-11535,-23857,13639,-9509,-13357,15537,32121,-18513,-21399,-4095,31381,-26671,-10749,12351,17091,-1037,1281,-32737,4753,-9175,-15493,20637,28317,-16703,14687,15715,-4789,-24125,-20471,-26079,31793,17311,7007,-8679,10081,-291,4203,-19033,20767,-17075,-20613,18811,-2135,22459,-32141,-26163,-5391,-1473,4873,-23181,-11087,-32621,-28267,29427,28569,-12329,-27003,26931,-21013,-15223,26915,15629,4575,-12035,9571,10019,7799,-6441,1295,2309,-18353,-17239,-18369,2581,-20203,19983,28631,27761,11095,12757,-30551,-25707,-8183,3357,-25549,31027,1083,-31195,10497,-167,9969,17909,-30343,1615,-15135,637,3087,30297,-29743,-22959,-30643,-16153,2363,-21157,-28035,-15709,-2445,-8263,-19491,-14253,-28279,11123,20545,-23053,28231,-16915,30573,-13681,1385,-2053,9059,9493,-28203,-20509,12927,10215,30183,27289,8763,18271,27599,-5821,-12805,-28985,-2427,27489,-9835,23177,-28501,24983,-12523,10571,3823,6185,6585,-13249,3279,-23481,-24901,-22117,28961,16339,19911,-2239,28319,17717,-18017,-5703,-4111,-23515,2531,-15319,6309,-10097,22751,-20185,12225,5239,13007,-31463,32561,-27877,20363,20405,-16385,-11373,-11385,-11581,-32053,15567,17343,26875,21783,14355,30767,5239,-29727,2115,-4491,-8767,31343,9305,7759,-15897,-3409,-26479,6275,-7053,-11201,20531,-2007,2697,27219,19845,18949,-32509,17725,22751,28503,-19899,30639,24657,16201,-28611,22751,20987,9281,-11329,20787,4987,-4225,-2927,15511,-17557,-10653,31309,-29583,-2009,21995,-12459,-32409,-12165,-21721,-1595,30355,32515,-10317,-23479,12973,-4003,23681,-12473,-2117,-13895,25869,23363,-20391,24587,17347,27771,-10247,-19059,-5423,1771,-19511,10279,8641,-1433,2147,-28569,-7335,-17883,-22373,-10485,-12755,-11907,-7683,-30045,15879,-681,-10257,24881,-28633,22757,2089,29875,-18933,6623,17755,20287,-25367,-3259,-9435,11389,25041,-5953,5933,16791,-8555,-4081,12101,17161,-1411,-9139,-21051,2277,-10911,-22323,-23731,-20643,-30717,2933,-10005,-14565,-31315,26223,-10165,-16131,-30675,-21699,-15467,-7173,-6341,17667,-28761,-7899,-12597,-3023,-21209,19049,15727,7053,-32129,-1323,14825,-11811,-12439,24135,15765,-2083,-17607,-463,10425,29511,5713,-8639,10061,-14735,-3967,20573,-16121,9185,14105,19979,-29439,-1423,3011,-16775,-20137,31887,-27671,22655,1945,27075,-21081,15805,-4873,-12303,21805,-21183,22677,29581,14149,17385,7867,28137,-13855,32151,13723,-4511,-2945,18355,-2817,23827,16967,22037,19629,-3591,-9851,9641,15735,23973,10489,-11255,14285,27061,-9445,-30949,-32227,-13463,9839,-5545,-31441,-30843,29805,-27431,-13901,-8117,10401,19591,18319,-19119,15737,29323,-10741,18385,1413,7187,10635,7143,-19037,32603,8365,4917,-381,-10749,-1785,5201,-32669,-24777,28533,-29007,20341,16513,-6163,19389,28041,7135,-10823,7835,15021,9849,-18019,21175,21547,-4269,-3007,-19799,-13155,15357,22941,10471,12259,-21045,22593,10135,-6513,21729,25969,-13387,-28783,-3991,8345,10343,-31989,-10819,3757,22941,19085,6627,-28899,29911,-5579,-7719,23055,-28085,14435,-9267,5865,-20545,-28907,5329,-25155,20491,-2511,-28387,-13097,2669,19555,-7273,-28377,11263,16517,-4245,14745,22977,-28593,-22769,6491,13619,-20591,2179,-26873,-10647,-3919,-19681,24893,-19707,-19931,14353,-28091,21595,19795,11647,-20029,-927,-11383,22447,-14413,9139,-14183,29541,-10715,-30457,-14043,2483,-29447,-24373,11069,-16055,17607,14061,-21833,11585,-19185,29985,-3635,16501,-11467,-17329,-28185,-31325,5627,-695,-32475,15025,-8911,20553,-16353,-4745,-23391,-4121,-4479,-8707,-21621,-21711,-24133,23797,-28599,9725,-26971,-5915,-13129,28335,25297,15639,-28013,23911,-7681,-21757,1605,21443,5785,28243,10649,-23901,10785,-28501,18545,-7987,-28905,-30111,21809,-3687,22339,-24971,-13599,18971,21491,16189,-12893,25509,-2041,10813,-21335,6889,-22077,23,-14763,23219,-31429,12309,-25867,-8907,28877,-9853,-8387,-29141,5449,9783,-30991,-27287,-16539,5389,-27539,7749,20515,9517,-22773,18087,19621,-2405,617,12383,28351,-27051,16349,-30675,-26851,30597,-10809,-15555,-24727,7609,20727,-25447,27621,-20563,807,-19495,3979,15263,-2773,25413,8141,31581,-2749,-12433,21077,6515,-18181,-4949,-19405,5741,5299,-30307,4039,31453,9251,31109,-13119,28455,23745,28703,8119,-6383,-14843,-8795,-1247,-9165,14547,-28159,-5959,-29581,30829,2787,28877,-27515,15515,-30771,471,-14635,29395,-29149,23739,-11063,32453,-10439,-20259,1479,8343,17767,-29913,17243,-5591,-7365,-22719,2635,-29861,-30655,5187,-8923,-31739,-9197,17647,-15579,7667,-12873,24235,-9507,-31173,-869,-859,-20239,13511,1597,21085,29545,-9411,18135,-15723,26593,-18907,-3189,-4639,3093,-11949,-31235,-7171,31427,29439,-11413,-2761,-18245,-21597,-3421,-30755,17609,1513,-10765,-15557,-9675,-23537,-25031,28253,22211,-10009,-20119,7971,-573,1265,9777,22987,12517,-15959,3283,-26315,7513,27075,27561,2891,4217,11151,-23347,16775,-4483,2749,-26949,10141,31399,29565,-3611,-9297,29519,16731,-22931,-17019,10653,-5605,23483,31259,23185,1261,22487,-16527,24669,-29831,14499,7603,-13013,27557,-2193,18611,-22847,26235,13035,-30407,-19401,6569,15015,18857,-2123,6667,25851,25519,25563,-7931,-30319,15583,21665,12115,-5205,3467,-15061,12737,17007,12301,23515,25487,16029,24539,-6753,-17731,29067,32755,-2225,17659,-20001,21377,7719,-27903,-17119,-30707,-25923,-26455,3567,-23967,16567,-23831,10879,1719,23027,27689,5243,14541,-13389,-18637,2741,-29293,4681,29171,13987,-22139,4615,25757,-20931,-14013,10681,8923,26571,-1549,-18489,8331,-31209,-22941,21391,-11073,-12495,28803,-29807,-29293,81,27501,-21097,7331,-25195,7221,-23373,-20263,12775,407,545,19143,8373,-1263,-5279,-19037,29181,-15033,12291,-13251,18251,-31785,19121,31053,-18683,2215,-26311,-12899,-18799,20315,-19217,21469,-29983,31977,-17225,25655,-31533,-3209,-9901,20799,111,22227,19139,10473,-31545,26789,20961,21373,7693,-15961,32011,-27635,-24095,9065,-27763,-16261,12433,-31657,849,-24349,13501,15891,22707,19311,8235,-19991,-4177,29097,-4801,-18141,17959,-25083,-13917,-18215,17593,-26553,2963,29387,-23247,783,-22021,-1595,-9381,7207,19757,-22239,29853,1567,-13131,4107,-4227,-19003,20725,2547,-6049,27621,32233,26403,-3,-3713,32199,21315,5359,12965,-10817,-13455,-5263,8875,-6159,10405,16925,8473,-15479,-6285,-13549,6651,-24035,-11295,-11223,22277,-17979,-25357,-27399,-19635,-1667,26625,-2735,-29173,6717,31997,-18823,-30125,-26055,-14915,-24897,-24897,-25135,-27333,-1175,11035,-2333,24073,-30235,-29791,23059,-22651,-19043,-19647,8669,5953,18653,-32521,5925,-31557,-25323,-26291,-7515,14599,-4089,14095,-26631,6467,27981,563,-991,-24087,15963,-27283,-12747,-14289,15727,-3979,25885,27559,-27577,4065,28573,-30627,14301,-22207,23363,-24231,-29375,3123,-32097,1005,23707,-20039,24043,-12445,7285,-9711,7061,-26527,-18175,-24849,-9057,-15521,13349,11299,24279,10831,-21349,-27907,-12349,-26739,17295,1437,29883,29143,-23467,9111,-31173,18701,-3751,-28321,30185,19075,-4687,31797,-24999,-32085,-6409,20385,-28665,17373,4107,-4631,3817,-6601,-24735,5709,-7757,27571,29981,-18717,26563,19115,1647,18421,-2947,-19189,25619,3537,4539,-14779,31921,18303,-3119,-22923,-18341,901,-7757,10807,-30179,1393,-12993,25743,67,-15143,19551,-3797,-15879,28775,-32545,10815,-26123,3025,19049,9571,8389,14643,22519,-7321,28423,5675,18101,-2195,-5589,11297,-5321,16453,29273,21869,22743,-21213,23995,27393,-3951,16539,7897,9149,22621,10711,-18005,6513,6607,2389,25865,5671,-5215,-29887,-22993,-16293,7701,-17545,-9123,-5247,9921,-7127,-5391,26243,-1191,19075,-6029,-23237,30553,-26283,16295,-3163,-27003,-18827,25025,-23455,-27273,9493,31401,-18637,8711,-14129,4783,-26783,10277,-28437,-18559,3749,24253,-29741,-32067,-22139,-21427,28201,4245,24057,24493,17335,-21757,-3833,-15493,10529,-11647,-15451,15073,26053,15817,25067,17305,-21633,-20437,28717,26885,-30105,-17201,17479,-21409,23277,-27155,-25101,14743,-23691,-21149,-25357,-25805,-22847,9929,22907,21733,19593,23869,5155,-23245,-32733,-5873,-23729,5987,6867,-11227,27579,-27165,6689,239,11787,-32601,-18233,31473,24997,28983,-5127,3351,8183,-24469,-32419,18211,12593,-27527,10877,23847,-19465,-12391,-6863,-17767,-4153,30859,-15897,-17297,-12075,-12135,-28567,-28977,22047,6243,-16885,28001,-20409,-11803,-16553,25611,13339,-13055,31097,5537,-4931,7747,-25603,-22155,-7291,-11005,30651,-12441,-6641,-18991,9023,-12707,-7001,11139,-21021,-10063,-18007,-18981,-7633,-5353,-17615,23475,21961,9453,-31,-23315,17853,24771,-16345,-2855,-19001,-30983,-23597,16329,22005,15253,29343,5739,-16921,-4853,-1819,24921,4335,-32383,-20583,-1437,13379,-17191,-22059,14883,-9057,6439,-9007,-22369,1129,4049,12637,-16883,-17987,-767,13469,18341,-16479,25887,-12305,2981,7105,-8185,-30611,8225,16001,-30435,27221,-4509,21405,19637,-11081,-19931,29427,-9073,-10697,26565,-12771,-28721,-15187,-19861,-6435,13653,27265,-721,995,953,-4385,17267,8633,-11571,23875,-8991,-5225,-27589,329,-871,-28823,-18035,-27419,-27225,-18291,-5233,-13385,-9377,-12921,13783,-23315,19207,24555,2453,-8159,9831,9277,-16801,6179,20951,-3107,8273,20183,-11247,8333,265,-17735,-28951,-12211,8939,20177,-30661,29103,25149,-18443,3281,8935,30535,-19863,27755,-12939,-24957,27577,5017,13087,-685,10601,-22997,-12721,11067,-12525,-13303,-10305,-5831,31339,-3265,18411,-21773,-13853,-17333,-29299,-10215,-3127,-19791,4311,-27669,-22847,15597,-27589,16987,30513,24683,9157,25835,-26351,-14609,8193,1461,-25109,21877,24477,15049,15059,-9041,15035,31367,12767,-8827,-10069,29897,25177,-32575,-23985,-22627,131,15649,-3549,-12813,-4593,-3633,5959,2857,14877,7849,-15751,29615,1249,1421,2051,-15273,-23633,-30469,24251,25927,-871,21427,10603,3553,-17829,21151,24531,-2603,3019,8425,15165,3233,-18087,17649,-9327,-11423,9415,15217,23139,4897,-29181,-19297,-21433,-1181,-20859,3025,-27503,23565,5307,-8857,3871,-28325,-29165,-8535,2371,-3237,21403,-14921,-3521,-15409,4051,-30285,-27147,-27119,-27565,16331,6265,-18975,9571,-26587,-1193,-13271,22665,-23581,15531,6577,24157,2357,20035,13473,2601,-19655,4647,31741,10119,6825,3967,5069,-27577,6547,-20691,25925,-19075,-22527,30283,12129,14443,-12821,-24919,975,-14499,4823,-26727,26477,17759,13197,22535,11581,2527,31,-14327,-23383,-18021,5351,8189,-35,-20955,-15527,30831,-12199,1037,-32303,2741,-8339,20371,13879,18471,-4377,5629,32435,3693,-13143,-5857,-7827,13117,-17857,15113,26813,31755,-13085,-9751,2901,-14245,-22021,1173,24359,-10151,17057,26681,-31365,-14249,-26481,12287,-21693,20987,3157,17429,25537,-13531,-20007,-27349,-31197,5725,2513,16029,-30553,9033,-25597,1237,11371,12717,9495,3887,31477,26203,3933,-27817,-12003,-30985,8433,18355,-6101,-291,23751,9229,30023,-17657,-27789,-19827,1699,-26703,13943,31837,-18617,861,31953,21475,30643,32465,-15971,-9327,-3927,28631,-23043,4333,-4251,27803,14127,-26087,14395,18591,-29783,21705,5711,20827,10037,6403,-16719,3687,6953,-8609,5939,-11599,5045,22623,-23079,-26281,-31929,-2787,51,-14501,-21113,-9321,13007,-13601,-19991,-13319,11635,-30885,-22247,19421,21405,23493,-323,-9967,32639,17771,26859,11855,-8663,-8473,-22359,-24081,-5707,4439,26103,1343,23635,3795,-11569,-29545,-14067,20837,-6873,-2153,-12929,-16121,-32149,-28659,2017,2619,-30483,12925,29501,-28397,-17767,12627,8141,-22783,-9759,-6933,-18253,-15083,-22699,-29081,24735,10703,-20177,13945,-3263,-6213,7979,-8579,-21623,4443,1889,15129,-3419,-16571,-20763,-14609,-7351,24577,-17645,-28467,17305,957,26317,-11127,7467,-12691,907,25813,-3365,-23285,4517,22903,28735,22159,28865,25181,-14355,6365,14799,18041,30461,-7459,-2943,9427,-22861,-15245,1005,21199,-25823,13923,30775,27009,23615,6987,-24535,-23425,-6079,-5235,22053,-25289,9789,-227,30213,27845,-4081,19165,-13087,11467,25567,-3331,-30101,-17565,-1033,-6031,18059,7989,29295,-6417,-6235,-13383,28259,-5623,-14859,-4439,14429,24957,8147,18975,15793,-1863,-16869,22821,-17967,-11829,5737,11695,6489,811,-22211,-29757,17141,-32207,-22709,-12619,27027,-3221,-21267,-23715,-21831,-13043,-6675,1759,-2507,-19587,-28061,-5237,30277,-10175,21093,22811,7567,23811,17459,20099,-27623,30157,-23919,26383,8835,-18777,18879,17549,25275,-3803,22875,5513,-9369,12219,23531,-13031,-14597,-2325,16201,-14167,12333,-22615,-12319,31915,-15075,-15833,26751,-27293,20921,25137,-28597,-13109,1971,22417,-24007,2245,17759,2113,-12303,-29771,-25609,-6523,4809,591,30047,31871,26967,-31485,6059,-26087,24061,-32249,12755,-2039,-20707,17075,-9823,22273,8097,9695,23149,-11243,8223,28713,-18227,8811,30893,-20029,8583,-13109,-14651,4639,-19033,-18033,-16249,22679,3225,-9085,-4363,-28243,25397,13433,2665,-1989,-21861,26647,30785,6293,31621,5515,3717,-1409,23727,-7647,-17365,3359,29455,-1281,26089,-30141,-18545,-10651,23453,-15591,21065,19325,-20817,-14437,17283,5187,-4439,18841,-25833,21633,-20925,2571,1347,21383,-27209,-21303,11691,13461,10437,26279,21791,28255,-2123,9585,-18813,1841,-22893,-13645,12857,-8217,25687,-19521,25459,-13355,-17699,-29083,-3917,21687,-11585,-28981,2593,-24505,10645,-12639,32341,12315,14371,7399,25729,-31819,17221,12751,-12315,22717,-16443,-20223,5247,13377,-27701,-18535,25249,2483,-15527,-11355,-12545,28631,-23787,13421,-29373,-5051,11161,-7069,-2759,16447,-7443,6017,-24535,-23287,27685,-4353,11275,30229,17585,-19753,-16087,-10819,19977,-10617,2799,-30433,-18047,25153,-28853,-3781,4113,28193,21165,-10281,-8149,-4865,8043,17093,-19531,-16729,21717,16521,-30037,10973,-5387,9953,3697,-18765,23973,10529,-2839,26187,-17761,-7933,25401,8563,4401,29881,-7423,3271,-31167,28779,15957,-6263,-22081,-10667,-7097,-12941,-9495,25331,21557,12275,-4969,11561,-20761,15963,30195,-16943,32057,14571,-15447,13307,32161,-22867,23159,14069,-8813,-16693,-20417,21781,-6005,-29437,19939,-26553,-19287,30849,15859,14935,-16123,-16703,7107,-23761,6729,-25065,-31527,17113,23191,23533,-11585,-10135,-30989,6503,-18337,-8385,24101,-7249,-14275,-30235,-25049,-20853,-17249,-10015,13031,-9969,7365,-16601,-2779,12821,-15585,-22491,-30449,-27943,-27359,4935,21851,-14499,-29935,-31643,-32677,-28039,-6589,-665,5827,20703,11883,1875,-20621,19949,10305,-24611,-2303,22305,5363,26221,-21629,-7583,-16189,-10587,27277,10009,29887,-23385,18773,32323,-30385,-133,-26157,-25951,24407,20205,21037,-4893,-7443,-6831,-89,-121,-25387,-18837,-6467,8831,-16791,23691,-32665,16933,31649,-23003,7541,31589,21225,6893,-16825,-30769,-8833,-22347,-17901,-16703,15255,-1071,9019,-12043,-411,13685,-25521,29245,-15247,-32289,4857,-32183,-14827,1013,-29335,-23117,20903,-12017,-13633,26469,5505,-29823,-32515,-6477,-24425,31677,-17829,2911,32503,24129,4681,21449,25287,107,16913,29571,24525,22367,9123,-25453,-8839,-11889,-11355,-24903,-6399,-28103,-28101,-495,-7709,-27313,-2103,-24135,-7147,1335,15393,-20667,-26537,13821,18199,10255,-2243,31773,4457,817,23569,21209,2637,-12759,-22295,-17129,-29327,-23643,3521,-1833,-32357,16753,9055,16159,-13509,4181,-13515,-21945,-29875,-20815,-18325,20749,20003,-4835,-18819,12205,-12405,9599,25651,32669,-1639,20725,-18105,-30233,-1757,-3651,-30797,-25669,-20193,229,29849,-21473,31895,-30491,-1637,-8279,-32591,-30949,21549,19057,-6677,23665,-11053,-7209,-2819,-25703,-5387,2721,24483,-21061,26145,9345,-24107,4621,-17269,-13131,14271,-16293,19419,-10185,27523,15785,-16273,15257,-19723,-16793,12289,18675,25983,15195,-19625,28401,-24039,31611,-21837,-27165,-6827,-18359,30697,10109,15697,30655,-22169,-49,6743,1569,5121,-2203,-6127,15311,24323,-5213,2451,-32683,-4341,25183,19981,-6923,14687,-25665,-28341,7137,23391,-16885,9767,-14201,-28711,-22773,-27455,-23435,30065,12555,29875,30257,25321,25961,-32387,-5285,24763,-20627,-13641,15961,3319,1955,963,32557,14961,-31277,20041,30215,-29987,24395,-1759,-12585,17913,-18401,30487,-17629,26567,13247,22425,-8477,-28871,-22873,-13833,-3777,7683,2789,3307,-25559,-17261,11323,-24113,27499,1567,-22455,6573,19501,-11365,13511,1163,-14567,-19823,-5171,32119,5419,-31985,2243,-6029,20291,-10655,23107,-8863,-27955,9443,17265,-20239,28167,-27189,-771,-5263,9663,-12025,849,18755,-4783,-8771,7705,-9791,-11699,25351,-32549,8707,-8407,-13511,-21189,-21515,-5591,-13677,-3323,-28761,25939,19569,-28351,-4403,26639,28711,-4029,25277,11737,-3669,-4889,-2881,2211,-11637,16581,24783,-23225,28963,-6767,-32487,-6233,22739,24545,-20589,-27213,-22069,5095,-23655,13671,-14625,-13615,16769,13031,-27809,-28151,1017,-12271,-7387,17489,13751,14823,16261,19013,-2913,28503,-22989,-3123,-9557,-7853,-23539,7737,-8097,-1199,4343,-13597,31201,29613,25501,-3951,-24527,25805,-12929,10945,-7207,-25483,29941,-19669,15079,-13849,-11787,-18527,26719,-1257,16095,-31153,16771,7743,-30775,-393,-6905,-14185,-19061,20687,24571,6501,949,-1431,-20953,-3385,-24405,-15083,-28987,-14981,-6515,-22671,28377,-29215,8923,22601,17597,-26247,-29421,-32527,-28657,22427,29799,6099,-18313,25533,-11237,-11643,-4245,2975,-11701,-4407,-29535,10255,-30643,6943,29211,6293,-32443,21923,8701,25367,22183,-9289,-22349,2311,-21523,-20991,18485,14825,-4873,-635,-20587,-3785,11657,24461,20867,31669,-25329,-16823,7685,-14459,27029,-28715,28573,31379,6993,22341,25227,-22353,-6973,21865,15867,-14629,-17043,-12031,17223,-4093,14447,-1161,15775,27283,-16289,22133,-5219,2763,-31413,27795,2421,-20255,-8041,-15481,12791,6581,24341,6835,-14989,-32397,2529,10459,-3629,6513,5387,15701,-28493,27295,-3,-9241,-14611,26939,-16341,2133,-7023,-16527,7587,-21051,-14025,-14851,-747,-997,9541,-20015,-20671,29715,-22137,24493,26417,-21227,-20359,-24719,22109,-18767,-17287,13675,1291,-5651,-21609,3299,-16887,-11669,1959,18471,-5793,2727,1589,11927,23715,-27309,2451,-30569,-8555,31339,-3707,-6857,22017,28323,32121,-12445,19115,-15015,9469,23627,-65,-5607,-3549,-14557,11487,-8909,-10099,-32511,-7213,-1317,-6281,8319,21261,-27485,-4065,10545,-2891,-29383,17733,-12903,-14281,11803,-24193,-4459,-3039,29245,11043,-25677,24937,5247,19087,-819,-8439,-30329,21991,28553,-27887,-25593,2869,-27981,-17471,14043,3939,4037,5277,7219,10293,-26847,-22397,-14401,-31719,17239,691,-18247,-10665,-28415,-29903,-10857,10207,-22301,28823,-26641,27839,9637,12021,-13673,7043,11841,-22975,-23697,8325,-25689,19923,15285,-25091,-5643,-17429,-14689,21767,7197,-29241,-32405,19309,-26591,26913,5929,-28921,-28567,-25337,-547,25023,15793,597,-9117,-16869,21571,2405,-22693,-6649,19131,18121,20813,-26941,27609,31473,-30771,20733,-5641,8231,-25467,17459,24635,-6639,2203,-4143,12847,-25567,-14675,10985,-2281,-12473,-23963,4419,9283,-25375,75,1809,29249,-9175,-7043,26211,1951,397,-28551,-26713,-853,-4713,6285,-21789,-20849,-23011,17105,29039,-4309,-12697,16399,-30331,5881,-2273,-15277,-8685,23437,18609,7147,-16227,2575,19165,-22035,-15641,24019,-18683,31571,27975,25231,30849,20207,17937,1329,-18199,24663,-16091,-6559,23181,-5599,-22753,19725,29599,-5473,-5693,-18257,24103,3507,8491,-27377,-32043,-12401,20375,24429,-527,-20085,-24745,-14075,7793,-30215,-17083,-16561,22833,-27773,883,19759,993,30123,10943,23419,-16077,-20195,-26481,32347,-15101,-11637,9705,29911,-1427,-3689,31987,17143,2399,-14999,639,29759,-11673,18985,-10979,1773,18879,32585,-21035,1521,-26543,14499,5473,25785,-23855,-17439,11067,6221,-1507,12769,-17121,-677,2137,-27951,29995,23267,1447,1301,28499,26989,11163,-8211,69,31243,-27793,-7379,4957,-6027,11285,-7855,8281,-25355,-5493,4845,9483,-17737,2969,-2715,-31509,-10689,-32755,5109,8301,-25957,-23401,19571,8079,-21805,-14045,-1243,-13297,26203,-25095,-21739,20395,25451,2347,26809,14985,-4491,-8837,29989,-24637,18569,-15183,-3239,9885,5981,-11221,-14669,-14845,-12495,13035,-21039,-1403,-18335,-29067,14143,-11847,18189,-32715,24881,-20549,-14587,-23687,10349,-18281,-29181,-10799,16653,23733,-31825,-47,-17429,-7283,-8563,-12695,-5219,12925,18627,-2257,-6811,-12459,30067,-18507,-32425,-2477,-23745,18379,26843,-4643,-5761,15373,20017,-28265,-27311,-19423,-19009,-12211,-2137,31869,-18087,-1495,13745,-9369,1801,-19983,-19565,8809,-4643,-2151,17079,-15275,30513,17341,11553,-6289,1393,14029,-18069,-27615,-21729,13485,16037,26043,-14127,-26665,21603,11491,-30373,23715,-23145,-9097,-30307,12531,31629,29759,-12873,23575,-2595,21435,5241,-5651,-29649,-13049,23729,6893,19997,28817,22681,-13069,995,4375,-12039,11363,10663,-31981,-19795,-10579,-22059,13317,9529,31429,9505,-27031,20699,25397,-3933,11215,11367,-14879,-6033,-31999,10833,8073,7067,23281,-26335,-5001,25997,8083,-10465,-13047,-9023,-17201,5645,28761,-15571,15325,851,-16925,5503,-8263,-9929,-28333,22341,-24985,-11523,-27513,-21513,-30653,20093,633,12083,-31079,9767,-12385,30719,431,7853,-19401,799,-11561,-347,-30829,4495,-15697,18257,13015,-10991,3039,-661,29797,20815,5771,-15081,15211,-14599,-21101,-5775,-27251,-4971,7333,10101,18199,-7181,4953,11185,22249,-31149,26489,-3419,-21203,-15373,-6199,-11895,-3007,20339,-19287,28627,18925,12453,27717,17347,23481,-13559,-27401,14823,32413,-29713,-18171,-14009,1461,12851,22031,587,23851,-30667,-17015,-5067,-263,-32581,2389,15771,-29203,23809,-15205,21145,-9597,21397,23167,-865,6451,14023,19429,22983,3663,-5877,21035,23545,10015,15049,13799,-30003,-3177,7643,-22745,-22045,13807,-12665,-21389,1821,-923,-4633,32057,17073,-30331,-13013,16039,1469,-22593,-16687,3047,2127,3609,28769,9229,-11093,-1207,28451,7401,561,-13011,-5711,-8045,-22335,-8355,16677,-19507,4311,26503,-2765,-11501,1307,-4447,19705,19093,-25729,19631,14127,-11629,-30607,20245,-12449,6891,-1015,-26237,-19183,-11667,-25755,-16593,32273,29077,-16543,879,25219,25469,-21293,-9635,-4645,-18215,32575,13647,-29917,-345,24549,30583,-1419,-22895,9357,19237,-29643,24323,29241,-1377,-27893,12741,14579,-26401,2469,-19585,-4885,7387,17467,16003,4805,7453,4041,17031,-21561,5155,2449,-7471,-2687,-18595,4333,-8833,-30885,9753,-4001,-29971,-30131,22479,-18903,-25451,-23535,-18833,-21583,-28677,16919,-27081,-27097,25187,4117,26763,20337,-22079,22615,-14849,19575,2497,16441,16215,3513,32259,-15855,-19051,-10231,-3447,-27809,-1499,-32227,-26283,6555,3221,-23403,-3493,8651,-25745,13537,-32513,-23567,-6715,28079,4423,2691,4387,-5217,-28875,-26869,-8607,20111,13899,29623,-9939,431,28919,23299,-681,-2591,22507,-10471,21765,-15007,1303,-10491,27073,2295,15045,28505,9657,30415,-7305,27505,-12565,5847,20531,26199,-2503,-4585,-15281,-11575,10773,32055,-31963,22333,8661,10765,-20995,12217,-9395,30785,11953,131,12379,17099,4257,-27741,1355,469,5709,-14053,-4857,10339,15903,14435,-13983,-26245,-6845,17755,18781,18771,-17207,-13067,28599,19593,-17095,17357,10661,-21205,-26729,-22363,-18569,28847,-10243,-3321,-8585,14675,-28337,21117,-30887,31445,14441,10181,-27157,-4435,19611,18671,-2377,8857,3709,12343,4331,32763,26023,-30327,-11797,15085,18159,-21189,-17205,32097,-22673,-6313,30785,-16529,-19095,27875,27465,-32749,-14873,-24043,-22975,-15879,18943,3639,-2187,-17235,28243,4065,22791,-1949,-13719,14123,-30343,-16955,20439,-28611,10513,6009,-5909,23087,-29067,9689,-29813,-26153,-27325,-11209,16047,15857,24731,9693,-9965,14593,14643,9897,9041,16615,5427,30985,2479,18863,22825,30943,17233,-25487,3607,-14235,-2597,-10769,5593,-2175,-11593,26973,23113,17551,-16559,-14613,-9925,30941,-6551,27171,6725,27803,22739,25195,22557,-4149,-14879,6151,3955,-12181,-6657,30199,-31995,6289,-21221,26445,-11901,-29579,1141,-25351,-2397,905,-4111,16047,6329,-21735,-31965,3001,30993,26193,10233,12401,18671,23473,-14995,21001,-25321,4431,17163,32295,-143,2499,-20523,10833,-14335,14541,-2705,11395,21173,4577,-16773,15783,22343,8499,-30687,-14101,-28645,20111,32441,26969,14755,-16371,29107,-32037,-25857,15801,15021,3521,-29573,10055,-27119,-27055,-147,10965,-25645,-18567,15709,-16767,-26933,-28409,-18027,28709,26229,22817,26257,29267,-17853,10627,23073,12193,-4881,8879,-15975,-32549,-4507,-21687,-8709,6381,25627,13911,-23611,21037,-12457,6465,-1043,18687,18329,-24805,-3565,-20753,-29447,-11295,-9413,-21737,815,-23065,16399,-24489,2757,-13191,-8219,1361,-8857,1837,1341,-27533,21103,-25291,-14587,-13455,4831,-30407,-19165,31199,3405,-12571,-32259,-25953,-791,-767,12263,-6357,-28519,-22943,-16797,3505,30111,12143,-11289,-17837,16205,-8631,-991,-25061,-27205,29149,18845,-26885,-22581,-23029,-5913,7599,-30665,11475,-27281,23621,-26189,12513,-947,-13845,-3893,21281,-23353,-24447,-8707,-12023,26109,-14067,21,19821,-1995,1865,-8983,-11017,13755,-24419,7605,5831,25027,27347,467,-27183,26133,-18861,25129,27033,-27091,-9015,-20703,19421,22951,-20849,-23991,-15679,-17975,-315,10177,-26195,-27009,6579,9869,-23981,-25459,15303,31339,471,-30557,16549,3591,-3615,-21587,-28563,31571,24399,19893,25587,-26237,-11761,28627,-17875,21727,-19665,14485,-27705,-29909,10643,17317,-18537,-10045,-22307,3253,12705,1929,27351,26403,10871,-12613,-10789,-24553,-12271,-28147,18015,5531,23729,32387,-5435,-11489,25265,8335,16867,-25717,-32603,20869,-12329,1099,24009,19331,13659,-17849,807,-23309,-12177,-13361,-1531,12965,-18039,-25487,15805,-7673,691,-363,-11599,2307,-26797,32335,-19627,13079,-12437,1163,2323,-24149,17771,14083,-19259,32429,23237,-2641,-27645,5149,14845,-12837,-16045,-19175,-5539,20161,25721,7175,1039,15407,13961,19809,-14371,23021,-16959,13865,-13283,23841,-4699,-19877,6503,-26153,15477,-3757,4023,26833,-26171,-22425,-14187,17009,8351,-24431,-3777,13141,-8671,13257,-28527,29199,22049,18405,-6689,6309,-22337,21587,-4811,-2635,8033,-2853,-10015,4539,-10145,-13141,27379,26063,-21663,-13275,971,-16681,-4675,-29155,-27589,13711,21873,21329,-16951,-25565,6919,19865,14161,23341,-17475,-6157,-9101,-9569,27375,26383,2247,-9993,1737,-685,-4917,-1749,-2171,-19063,-4187,12243,-32249,-9239,23949,-12019,27891,-17995,-4453,-15969,4663,-15415,21473,-13803,-11449,17425,-25349,-4615,5943,-6353,-20555,9599,-16909,4983,-30319,16753,24137,-18309,6655,19331,14161,-32563,-16389,-22099,25775,10299,2183,-12687,-15995,-21271,-20335,25659,-31089,-10449,10613,-25447,-23175,1963,4223,-23715,-30867,24131,-23357,-30879,-21721,5123,-17055,-20873,-25039,27871,-14269,17723,11009,17817,24859,3191,17605,-10911,-25029,-14677,-8721,9951,-19819,-10641,-25073,-32061,7313,22273,-14393,-25521,21409,25957,-7837,-17385,-2845,-3067,23717,14087,-18653,-3257,28763,12285,-27703,-2593,-8847,-12865,27733,1953,27911,-23205,-30887,23331,10551,-18117,18471,1433,9565,-523,-23261,-871,18369,-12977,24881,-13289,28293,-18305,28391,-1587,31723,-22435,14839,29109,14611,-19385,2225,-30053,11037,29411,-15257,-1675,15509,29311,-5619,32039,23133,-32503,-1775,-15583,17083,-9203,21277,-28307,-9007,347,-20033,4319,22841,30837,13693,-29667,29161,-23697,23737,20875,15987,-21647,17865,-23759,27837,-22243,12395,-24159,-13681,-2129,-12891,31861,-4403,-27439,-26365,-6907,16625,-26155,-10789,-15663,-15909,31297,3777,-30215,-27415,-5339,-21023,4541,27359,24161,19749,-17699,-16981,-2033,6903,3213,-13171,2519,-14095,789,-10241,24671,4585,26661,15279,14763,6693,8385,-1459,31055,12397,6043,-31101,-29981,-8195,1161,-28609,-9793,14771,-3751,-27553,-32491,12311,-893,-28145,-24943,-1099,-10383,-6745,-17527,-16305,9725,-18649,-10009,-997,7435,30729,27099,-14591,-27055,7103,12509,-27611,-11861,-10545,19289,30839,-2521,14485,29671,28513,17023,28435,3555,19717,27197,-19245,-1013,-17109,-12005,5603,-22147,-4057,-30929,-16793,11913,8575,3209,-2711,16231,24525,15961,15221,6627,21297,-29111,1737,2145,-7731,10425,16837,3375,24371,-11399,10633,-6823,-4225,23891,5541,-11589,-17331,-12381,31885,-10601,-12193,-9151,-17853,24313,-5779,32221,11121,-6675,-12695,-19613,-18301,-1541,26755,20729,-3979,13021,3813,-17637,-16987,2319,24863,12985,-19829,-28523,-17803,11085,-31011,26635,-10283,25137,14697,-4793,-18579,-6791,16251,20121,18041,27625,31601,29993,-12541,29381,-5041,-9267,13211,6347,23641,-19455,2595,7995,-5057,-1129,26245,29567,22881,3143,-1537,29617,9399,27537,7279,-23931,24661,15363,203,-5655,23933,30569,-14627,-24957,28129,-16859,-877,-2901,-3139,30677,30993,20065,26943,30227,-8225,21133,28041,12081,-9231,10149,-25133,1735,32215,-10931,-27219,23081,25797,-22419,-1763,-17021,-24561,-30805,32565,-28905,-29145,18449,17025,-6791,-7523,-30763,-2057,-791,-18299,-19701,19049,4503,-30495,-10297,-7843,9699,7665,18729,6081,-31585,9757,11263,5575,20541,-8241,8699,-5955,-18325,20189,17783,-30251,32173,-12707,3303,-24077,2265,-21697,31867,24999,-2437,-24143,7649,26463,-32219,-19677,17193,10705,17249,-31117,30839,-25865,9637,21031,-31739,-11391,18845,-14975,6187,-28849,14711,-32507,-1093,-26337,-32681,19809,6823,32287,23141,-23917,-17067,-15901,-12331,25349,-24463,7299,-30015,14887,-29525,-4649,-23893,-8531,-21229,22845,-9035,-29593,30331,-23003,25073,-10601,11835,9349,21347,13917,-567,19111,7595,23095,31737,12681,1707,-26563,30983,-3241,-32115,-26649,4229,24609,-185,30179,-15575,8267,4929,-22697,-2959,-17791,-6685,13237,-27463,-15693,-4291,24945,7493,-31855,13899,27791,8317,-17041,-26105,-10241,5659,-2349,7703,4767,-29897,18683,12059,30321,-2877,8095,-21613,-15695,-22469,18795,12773,-27701,22471,-9593,-18049,-17181,19605,-31233,-24757,18983,13943,-17469,-19459,7939,-23829,-25175,-29149,2235,-18689,31147,-28967,-11395,-32649,-23551,-11057,253,30105,28807,-13241,-4045,-32717,321,17205,8373,6179,-22001,19551,-5415,-15991,-32485,30291,18639,-14081,-24879,30965,-2237,11267,17983,-27199,12625,23507,27207,4725,32125,-24449,32505,2067,5427,-21051,7365,-11801,1295,-6171,17613,-11445,-14785,-8901,5073,-25535,8143,-1657,-15661,-31337,4049,-5269,23827,18149,8929,-19465,-15871,18339,12527,-30353,7367,-6529,32197,2607,7171,-17163,7389,-27725,10775,8913,-23815,9377,26225,-32275,-30657,-25419,-16977,2287,18939,-1133,1947,-8477,-26987,25863,-9145,12343,24443,-24721,-19385,2851,-16093,32485,5549,-21123,-21841,-30341,19955,19481,-3615,30049,10037,5815,-8451,24703,2253,-14115,-3641,-8989,27467,12597,-29159,-18213,-16895,-10471,22711,30029,7321,3239,24161,965,1763,-3909,29439,-1803,29481,-16847,-3977,-8207,-3275,-19881,15231,8729,11055,9653,27917,-27211,11413,-255,20321,22797,23255,-21829,24605,10907,-18067,16867,27173,-10947,8915,11063,15651,-27229,-29419,-10785,-18833,-2423,-29417,10603,-10591,-19335,17145,-29125,28603,30505,-5223,14137,8535,-32629,-27327,30843,-13943,-9681,5313,26211,-13001,18671,26369,-28501,14661,-25497,-25937,-18059,10075,-29695,1635,-6711,-13007,-4883,-20761,12283,4701,-30139,3305,14137,25493,-13167,-21431,-17219,-17305,-17185,-25473,4051,-17219,-6191,-6647,4419,6087,-17185,20523,17125,-19129,5727,-22057,2371,-1621,4275,12837,4597,-27525,28843,-8549,3029,26721,-21883,28261,-12095,-16765,9957,10409,8291,-4489,-25019,-29509,-617,28417,-15533,5199,-1835,11127,29235,-21929,-8035,8541,549,22657,17757,-26763,15387,-2223,-25769,6881,-21549,26025,24571,6467,13201,23107,-3231,16577,-2797,-25043,4833,16945,18097,-2659,-24109,-7895,-11807,-15535,-14509,-24085,2313,-12137,5523,24291,28897,-24141,24989,-19895,-31175,-22235,8037,11367,-10375,-3849,31591,-28041,23087,-13863,29755,-19055,-11439,-4259,-22603,-10783,-32267,28837,12067,25135,-13001,23603,437,-2971,-20573,-23911,-21113,745,-15785,19825,10645,-7433,30835,-11381,3897,10983,-25597,-1949,3983,24495,673,-32163,20043,10401,-3119,-14007,-32467,13911,-31839,21189,9499,-7085,-8859,-2567,-23789,-3109,23065,17995,-13511,-8545,22363,6363,28465,-17875,22477,9155,-21521,-27367,-1175,32747,5931,-6801,-22455,7559,7417,6555,-17581,-239,-25083,7685,-19721,6409,-28675,-26021,23101,1533,-15909,-26823,28597,-12199,24203,4519,-17417,6503,26671,-26329,18819,16545,-6255,-27981,-10145,-10685,-25209,-32585,4077,18693,3163,8927,24215,4207,-20141,-28331,-9331,31485,24663,-16739,-6605,-14429,6429,19695,-1671,5331,12399,-23523,9107,25437,-29487,29577,-3129,2783,21569,20997,-22435,7957,22191,-16047,5117,-11115,21501,-8079,-15521,18921,21657,1461,26145,12469,-28459,-3191,29957,-11839,30163,13503,-6319,5267,-15399,25231,31323,-1257,13673,17803,-30671,-5663,17741,-9845,-19469,-32407,25703,-15653,6201,-6837,23929,-20049,11859,11425,-13823,26955,-20607,4949,7491,1739,-19901,6725,-20319,-22263,-5353,9191,-14017,-14387,7697,31513,-7259,-5363,13489,9133,-8089,19373,17409,-29433,3723,22789,27803,3727,26881,-12417,15397,-24625,32489,10713,-1445,3929,21617,31015,-9799,-24787,-9833,3215,6041,11855,16323,8433,15657,9809,17509,21061,20835,-3159,21163,27943,18197,31193,-16049,-26079,28773,-6477,-9279,-13483,-16181,-1125,7371,15267,19591,13263,573,31643,4879,-12013,-14359,16759,-9089,-22393,-6131,9571,5957,30883,17247,-2007,3373,-14277,12493,-13761,-20241,-9263,23065,11707,591,25739,-11011,-10617,-14695,-5689,-14241,18773,26345,30369,27389,2201,13229,26419,217,10009,-17975,2669,11735,13161,6359,-21321,-25085,16093,-7295,1403,-22799,29835,30103,9633,8271,-8015,26667,-2033,16671,20823,3801,32037,-8537,20229,-9471,2219,-3323,-28329,27113,1933,-21751,-26977,13633,9421,-6531,-18883,3927,-24917,20501,19057,13933,-3667,20971,-11255,9363,2935,20421,-9015,-30075,29049,-22089,-9785,20489,18455,-959,-16875,883,5741,5729,-15321,16965,-11223,-26205,-2459,14629,21157,-25381,-18963,32677,11371,8025,-10669,-14299,-16455,-23253,1401,13853,-28677,21211,-28963,201,18737,21271,6341,4835,-15677,3671,10023,13833,-29285,28233,-25167,-30967,5429,18245,9379,2155,27323,-4373,17349,15907,23095,-31659,29033,25495,16281,3057,-28021,-26743,6651,24375,11501,28431,25425,14803,14595,-6337,29101,20019,-12153,-1677,-13079,-22119,15019,-13817,28831,-4067,-16183,-31341,-2733,801,19817,-11869,-20633,-627,-13353,7001,10027,24991,261,-11283,12731,-25283,25761,-18431,-16539,12225,15831,-9935,2399,-129,-12035,31117,-4993,22477,21961,2533,19115,1129,10803,18509,-29277,15105,30623,30153,-15507,2565,24253,-9941,55,-14207,1755,-14519,7099,22041,15117,-14083,-16483,-32425,-16059,16645,22303,28625,12265,28501,26151,-25557,28917,3015,-13001,-31091,12409,28097,-18659,13335,-26267,22699,15975,-5809,-11043,-27099,-9505,7201,-14707,8697,23113,25143,-15095,16185,-13905,32293,-4331,-15137,-22403,24225,-21547,-1165,-16689,-7487,-32155,28375,-20801,10965,-10029,-14465,-5861,-18129,18735,28559,9135,-32049,-25087,-8031,17819,-23835,-2593,-12203,9957,32607,5373,-30811,-265,-18627,-29873,-31153,1829,1819,31491,9155,-13979,-10121,10377,-3285,28359,-20245,29389,-11731,10933,-15791,8505,925,-2445,-32757,-9671,22225,-12181,-12795,31433,-4031,-7307,-27299,22145,-7699,16609,-29055,5109,-1471,-21135,-25825,-29163,24551,18075,-30229,-4633,-31373,-28477,-31523,17495,-26843,-16049,-30265,5945,10601,17911,27105,3023,6473,-27761,11423,13429,-11441,-28105,-12737,-2227,-28197,28003,-21183,2891,-879,31049,30177,1675,27647,-6463,16223,20489,22847,13887,15419,-1579,-23547,-12061,-28691,-19753,-2321,28881,-32291,30551,3153,-24959,29435,-13651,-29193,2249,-23461,5573,17289,-13557,-10525,-25647,29053,-7349,-2527,-9357,4747,-5343,17283,877,-7647,29305,31851,-29325,13405,-11967,-7991,-29019,15059,-8259,-28739,17403,-18417,17681,21049,6893,19341,4677,11225,-17799,4793,-13173,-26267,14847,-22065,6887,-12107,-943,1817,-3217,-18709,30365,4839,-17441,-29895,-11175,-28969,6689,18569,-12173,-12169,2811,29507,7007,-24335,-11055,25393,20329,29941,24167,-22577,-22209,5567,-30665,-28947,-12755,-29319,-28213,501,29245,9187,-10747,23335,9341,17837,795,-18949,5473,21001,-22839,29323,-7835,28975,-31083,23767,18919,-31929,14239,17439,22399,7229,-30575,21609,25653,-4563,23701,24479,32549,10983,23595,-5685,-2359,-8959,-1273,2073,24267,11213,13783,-26133,23683,-28321,19419,-13975,-16361,-27241,-19453,-20889,16223,14757,27121,21131,-11793,19793,-14957,6053,16317,-28753,-14977,-12781,1921,28079,-19347,12147,3243,-19837,-30977,23883,-20971,-21017,-27605,-1367,13865,-20075,933,11809,27331,4221,17533,5451,-19619,6631,30629,-17555,30707,-12023,20799,-1663,14315,-6709,15095,9437,-12451,-29787,29767,-16263,-18413,-28095,26061,32257,-31533,-26271,-709,843,-7785,25873,23219,-19363,583,31935,-1023,25441,-31365,-17187,-7577,-28247,-25969,-28575,27001,-19641,32429,27861,-6265,7587,17573,-22549,-3921,-5937,23047,29613,32689,3093,10977,-39,-4111,14623,5191,-8941,-15851,-25119,-9097,-9773,20091,9287,-31971,9169,25609,25665,-21231,-18901,22535,3489,-23897,3913,13081,-23481,-853,-12341,-167,3983,6275,-8697,7795,-10315,-30339,-695,28323,31311,-9905,-20993,-23263,-10519,12193,-24807,-24291,-1425,1861,-9273,-21839,5877,-10131,24057,-31201,-11993,-2877,9457,-6355,-7035,24459,-14167,-30699,31505,-17777,25269,21903,-4205,22911,-17275,26945,15093,-28391,-23917,9289,5877,6719,2695,-4145,-15265,1553,3169,-29235,-465,-22501,7793,32263,-6183,6237,16533,-12043,15445,-2449,-22261,-30645,21759,4487,-29325,-2009,-27477,-5523,18751,29047,17995,-20803,-21931,9487,623,-29507,-28473,30317,2697,28529,7785,22907,28685,27867,22935,-30157,-10617,-18923,-23121,21495,-24023,-12997,-27337,-24303,9943,-15625,-17721,-13391,-25979,5137,4117,32427,-7725,-12277,14319,7995,17367,-29371,-3019,-18505,-8701,-32395,-21425,3907,-24661,21249,3597,31443,-31503,-22415,15653,22725,-21367,1035,-3785,-11263,5313,4731,-8683,-14521,-21219,-17011,-391,21977,4653,7317,18387,6315,22797,15593,-7407,-6635,20277,-14411,-22019,-19055,-24203,31825,-22213,-8631,4073,27637,28299,10235,-11059,-26689,11401,-15805,18511,17931,15177,-7055,-30437,-17991,31493,29533,-5599,-13067,-13977,21299,-6543,-11749,27689,-3507,29509,-20965,4041,6441,-29673,-27237,24299,-14723,-21577,19135,12357,4833,3613,14051,-32093,-3981,-22235,27111,-4441,3147,-20905,-28649,29183,-6911,5795,-12577,219,-7589,-32081,27875,-30297,-20161,30179,-28929,-21535,-23183,10233,-7039,22613,9073,-23727,-14527,-2249,-10391,-6893,-15563,30381,25683,13713,27777,21325,-15819,-21435,16809,-31237,-19685,5835,28505,14503,-1963,22047,-11215,21467,24751,-19873,-2889,-26497,2565,21459,15101,30345,3755,-32055,-7287,-12501,-7777,27777,-27643,28125,-18035,-22561,-6217,5329,-24237,-15379,32453,-29451,29721,-1463,-32225,3727,-32271,17835,-18299,-20281,-22743,15381,17039,-12065,29911,-813,-11,-20915,-7219,10529,13657,11863,1217,-6435,20513,-17435,13775,30191,-14659,-31967,31799,-3453,27057,-7745,13309,7487,-17005,26671,2365,19677,22793,-29829,-15145,-17313,-13431,24953,27491,25621,-20153,20749,21199,-30093,1889,19641,-20241,-30125,3435,-4447,27191,5595,-21817,19543,-3053,-30677,9773,22247,9245,-3411,12933,31559,-23167,26339,-7893,-18275,-5393,-13191,-19727,-27795,-26697,-10723,-13815,-27941,-17373,16225,-18043,10189,3545,-8423,-32301,-16577,31441,25901,16899,-8383,-6057,11939,-23799,6349,7005,-31729,29557,-11431,-3195,-29385,-23973,27083,30703,-21713,4235,-25635,24873,-31115,9395,16467,-15821,11765,-9749,-22765,31325,24697,-12455,28481,-1273,8677,-5287,-26895,21677,-1351,30205,17515,-21001,-17827,-5153,11375,12383,23597,23819,-29901,19911,24297,-4313,-14515,23959,14699,29337,-23885,9263,13349,15553,31221,-5805,11605,-7969,5113,-11333,29275,-14049,-17461,-26579,13153,-223,19659,-16407,-12723,-16253,20779,-18093,25219,-30711,26095,4695,-8327,17393,28625,7461,21001,-23331,28457,691,3623,8827,-26229,14413,10511,29575,-11119,-3487,-32151,30711,13739,11483,31297,26251,-87,12089,8697,26769,-983,-18063,-32431,23113,15325,17559,-18565,-20779,-9133,17959,25041,-8759,20693,-27269,8909,-23893,2621,-10897,15121,-16345,2573,-32021,-27057,-25101,30099,9367,775,-31763,-18163,-17871,-15635,-5447,-11495,-8281,12021,29075,26849,-22371,-22369,-5171,-23185,-25959,3939,-12379,-3241,29531,9325,20275,28283,1523,6095,1507,19333,-1929,-8031,-9267,-383,-20461,2731,11885,2881,-25641,347,-21399,-22987,27259,-24471,-5437,15731,7741,9357,-18573,19441,-26581,-3639,-27463,-30319,195,-30193,16199,8085,24375,-6567,-24861,-5003,-6617,-6653,26809,10245,16989,-28785,-25357,-13811,-22115,-1181,-7677,6125,-22313,-32599,21629,-539,19259,6977,12437,14153,-27945,1901,30135,27121,8135,11707,18715,27003,-6445,-19723,-23667,3605,9911,-22931,1299,-14969,-10003,8553,12669,2833,8103,-23673,30169,4183,-29195,9053,24997,31143,-19931,9799,2749,-27741,21199,22001,13935,27383,14619,-6053,29223,11471,29089,-12953,-1675,641,10931,-5507,14519,28231,-8047,9797,31067,30005,7373,-26249,-20485,11611,-15741,-10387,3755,-17833,19669,-705,-13707,-31025,6387,-4631,-2323,-8795,291,13791,-31015,-25991,9519,-769,-32101,18281,-1883,-13799,-1575,-16991,15813,27777,-17921,-26449,30675,-5875,-1617,15319,20565,-2151,-7911,-18367,23061,-289,-24547,22063,-11837,13737,-20565,-26085,-5687,10647,18951,-6167,-5261,31515,16191,5827,-499,-30101,3945,-29651,15701,-25987,-10023,24663,-6145,-12305,-12599,-31681,-25701,-27755,-13899,9171,-32221,14465,-24669,6239,2657,2567,19171,18783,-5837,-22039,-28069,-2293,-4723,24145,9369,32367,29743,31265,-11563,1745,32047,32157,-8715,-15319,-5381,-10703,-26825,9057,23309,-28693,-2779,-10797,-1757,3547,-30711,-14849,25415,-9247,21539,-6785,-21355,-14385,29825,-3813,-521,19359,-31861,-28091,-18963,17797,-8671,-16695,1371,-25823,5639,-17057,7821,-14105,20803,-14555,-17639,13465,16075,15871,-6223,1095,27085,1163,-9233,-20281,14185,29587,-9047,-20481,19545,6621,-507,-23361,-14797,-13433,-25361,-20051,17331,-27971,25127,-23181,-32047,5175,103,16563,24249,-11419,4107,-4887,-29331,-25701,14077,-15137,-10487,-493,25091,27837,-4701,20161,23317,30169,-17163,5459,-26199,-11691,15437,-10913,13085,24331,-3959,22271,23773,-24729,30873,24011,-7349,-9597,-25637,3477,27943,4413,-22215,24461,19467,25235,-12389,-24351,-22103,1361,-1269,17115,-2831,-15257,9571,21903,-9859,18155,-3713,16521,281,-15681,997,22093,-31057,3149,20593,-7165,13441,-6505,-20493,9107,15867,-13641,22595,-24675,-30127,7391,24495,-20687,6021,6539,-10527,-17711,23273,9395,11513,32647,19589,-21827,-18387,-713,4391,877,30749,-22853,-22751,-5543,-2801,30663,-19635,9577,-1463,22161,5443,27909,-32011,1629,-25387,9059,7213,-16211,17419,2541,30981,-2095,16779,-6475,8321,-14645,-9113,31417,5621,16735,-17757,-12919,27753,22213,-18663,-24357,1225,-21833,-32489,24893,-17049,21279,-15349,19419,8477,-3371,-2429,-28093,6541,26533,-22917,25931,13231,-4177,32043,-16849,28269,-21121,-6699,-4775,2649,1645,-11011,-13725,3367,13877,-17115,20663,10893,-31837,-30517,-30457,-15271,-30733,-6663,-287,21131,14653,-14091,3211,30743,21367,-16135,-30603,6971,-26877,-115,14575,-9715,7579,22219,11115,19365,10203,-24847,-23595,-28479,2679,-16055,27319,18165,20999,6093,16593,6987,-8161,-26751,22305,-3301,21775,15025,-6055,-18611,-2561,-20217,5967,6675,-8121,-14033,-495,2539,-1881,31029,24815,-23207,17225,18377,-15767,19389,16013,27277,8811,20665,19971,22177,31571,17473,9751,29605,29287,-8879,-11079,31703,-24821,10521,4119,9745,-8891,-23767,28641,-11489,19989,8487,6621,-4435,30061,6833,-5835,14043,8095,2873,-32371,709,-19479,2333,-6041,19655,-30533,937,-5809,4707,-1283,-17117,-13317,-31149,9855,3001,-23577,18545,-17621,-16179,16393,3193,29095,26967,-4397,-153,25283,3707,-29883,5645,-30395,-28421,-3825,-14023,15407,3959,-5191,13771,19513,11913,-9793,18755,30487,-25525,24977,-22399,27747,-5307,-20789,26155,-21849,11417,-31449,1841,-23893,-6653,32701,8579,-6713,4905,-32089,-1741,4197,6617,-2577,-5849,-3415,2519,-24313,7969,26717,-14903,-20791,-23263,-8573,-10105,7945,24377,-19737,6727,13411,15919,19813,17443,14645,-24159,433,1245,-11969,-233,14415,-29027,20483,-4557,11147,18617,12847,-24971,-16087,-4155,24595,27391,18603,-14397,-22195,-23951,3211,2655,-30961,17871,6547,-27797,4659,-29307,-31631,-32453,-18055,30425,-12283,-23111,-14451,-16975,5189,26101,28967,-25329,-17373,15749,-31059,12985,-2089,-4541,6161,2793,-12159,21551,-4707,-26301,24231,14115,-31499,28247,1011,1183,19621,-24089,-9515,-19193,-24751,16643,6093,-27549,-29637,11367,-7287,4051,-17215,-28625,-21193,23637,-15943,-10973,-29595,-22567,6855,-15671,-27463,-24033,8525,15603,30355,-18439,-4213,31365,-13983,24931,32451,6549,24649,30645,-1637,-13987,-24991,25959,755,8139,6641,-13003,-16653,19,-15745,-25351,21821,14953,-24865,-19393,23953,-5169,-2685,2473,-9881,-26329,8143,1987,30707,-9617,15047,-15493,18845,-27789,9759,-14205,-20609,29203,10741,24679,-14299,-13187,-30089,14895,-12273,18987,6139,15221,24333,26477,20861,327,-15985,657,18373,-19427,26301,-14763,30687,-1725,20481,30703,1349,-4959,-5679,-32767,30773,5315,-19233,17583,6619,12235,-26833,4849,25925,27133,29093,601,-19217,5481,-23515,1681,4667,-28215,-14419,-25073,20613,21477,-28911,-2429,-26007,-13045,-3897,4135,6193,17759,11313,4851,5425,-2753,-25319,21321,-13025,-27783,22719,4145,841,22577,-13345,29657,25939,-6731,-19383,-15813,13347,-17533,24137,5171,2163,-22137,-21117,7865,-5215,27025,32695,1697,13683,-5571,10279,6549,28539,-5331,-17683,-17661,-26697,-15491,-16329,-2927,13499,-27669,-10345,-17389,-1969,-14845,-17527,-3621,-3515,5205,-12687,-14037,-16045,-10799,3873,6433,-25703,-17613,-10595,-31409,-16205,-7087,16411,21213,21625,-19225,25851,29211,30287,15551,-11907,10611,-10699,-6153,-16609,-851,-28899,26823,3761,9057,18219,20491,5633,-22937,21225,21111,-19159,26137,-17721,-6469,-10645,-17837,327,-18255,-2929,-17903,11581,-6141,-7843,19387,-177,27913,29651,1567,-32317,-7097,-31559,-6433,10337,-8487,13357,31899,26855,14097,6865,11399,15239,10187,22893,-15591,32259,-10221,16861,-6453,-10279,27883,-27071,9975,-7127,8727,-10057,17217,11619,-13535,18223,21117,-21533,13299,28769,6497,8451,-8385,13427,4055,-25363,12765,-26181,17385,-29481,-2821,21197,9827,-6543,-25277,16049,-25445,767,31257,15209,22515,11085,-11733,-14393,19105,-27303,26997,25147,5019,-16893,21007,31345,-17375,-15495,-23683,-739,24775,22865,-15907,14793,27033,-24267,15795,-12937,5415,19619,32117,-19097,17613,-25491,22871,6633,1719,-18741,32047,-28585,-20117,-24171,-24417,-3395,7037,-24313,20307,-29543,-9265,-32003,23653,-4431,-32501,13893,-10025,-17271,16065,-15369,7491,-4295,18729,10591,8505,12221,5405,-19177,-24799,-30307,25571,-2461,31131,28955,32735,14199,31685,-6929,-19385,3221,-18041,2801,15077,21995,-16039,-32555,29151,-16431,-13559,22741,11259,2995,-11003,-1557,31321,23231,-32601,-20385,-21021,-25093,26539,-2411,-31631,-14895,-13819,-9379,15807,26277,-24361,17455,21881,28273,-18441,27761,28507,-32245,4435,26459,-18053,3849,-24003,-6947,6005,-29903,-6211,-24573,-4409,-7031,26155,-15919,18165,22285,-9293,-29115,-3767,-31265,-31293,18429,-8947,21519,-32481,22761,-7021,12519,23841,7823,3949,29331,5585,14123,-25411,-25647,13937,-3729,16395,-26001,19061,20669,-21581,10141,19729,20235,9555,17981,21755,-10549,9819,11381,-14887,-1467,-15167,10317,-17213,21683,-11559,27519,24393,24417,-26337,7923,-6023,-6067,-12909,13209,8111,8913,-30289,-25555,-23685,-32227,-7955,30889,-9849,3061,-9753,27497,-19695,-15835,31565,-2861,-2571,16587,-14209,28893,30475,14881,26967,-21169,-10255,-10001,-22549,-26991,22263,14699,24179,-24349,17235,6597,-21989,12119,-17257,10207,-31773,-4137,-28627,10279,-4183,477,-8041,31205,-27781,-8413,23265,-32333,-21099,-15917,-13315,3575,-14105,-29585,5817,-15989,9429,-9057,7009,8689,-7091,2369,32699,-21269,3669,-24699,23979,-27259,-17419,22251,28081,16805,32427,8849,12663,6113,31699,-28001,-14417,6987,-8309,-1835,15547,-14699,-2567,-25759,29677,-28789,-20831,24205,26833,-29569,14415,-6667,-19501,-29851,1479,17811,-18233,-30865,-9053,-8951,20453,12519,15769,-18705,-10979,19299,21555,-13245,8517,18219,5717,-8067,-4753,-685,-6795,9855,12095,-21385,26851,9129,12023,11637,6731,2393,-22447,6767,6945,7777,15807,30995,-6063,-26809,24493,27707,23729,18423,-21675,-18731,11601,417,-8219,-15015,-17581,-13467,-8971,-13815,-17287,28341,-3399,11871,25875,-4509,14639,-5137,8511,-18041,-22879,8717,11609,9381,-9985,10377,14767,2407,-1573,6455,6335,-22651,-30057,29645,-30773,27121,15681,15141,-297,-25287,28867,-12607,-18861,-10889,18393,-5419,-18423,-6171,11701,-18295,-21793,30327,26359,-7419,-7339,24903,12495,16483,-12005,8289,-22479,-13187,-4099,24809,5899,-29453,-3777,7417,11079,10361,-3505,-11225,12441,23397,8219,-32311,23319,13973,18265,3177,24049,28279,29649,25193,-3353,-23091,-26731,5845,-22315,-259,13395,14111,29971,26925,9911,32007,29433,-2253,8887,10445,32541,6649,-14511,24577,-19323,-5839,27017,25825,7971,-2763,5889,13321,-169,13719,23779,4947,32007,10511,26547,6533,6381,11821,31333,16753,24689,-14325,10177,-23781,-25905,-1373,-28959,-10703,2191,-24543,14127,-14675,13009,873,28065,30655,24049,10133,16439,-13021,-30721,-16745,10433,-32143,25507,29577,-2249,-15643,-3417,23855,-7455,-9477,4401,-20513,-16337,-15505,27371,12793,-19679,-25265,4629,-797,5983,26237,-32309,-22767,-8973,21057,9449,-10807,-4853,19015,-27735,-32115,21815,14671,20917,13335,-6467,23769,25377,6533,20361,-32381,811,-20821,875,-3147,29515,29667,12245,-6337,-21349,-28261,-22553,-2785,27481,-12173,-18529,-10303,12363,25337,-14275,-31559,-839,-19079,-32627,15871,-10077,24817,18591,-12887,-27489,-441,-24307,6833,17705,-30429,-6775,10983,29931,-13135,-2847,-28287,16661,-10849,-31953,12251,-28913,-9007,-15561,-5355,13843,-9435,10611,-1911,26967,-14619,-27453,-4761,-25027,1687,29393,-1047,30891,15961,19089,27669,-25459,-25401,14583,-9121,-13983,-31817,-8583,24557,-32011,19867,-2305,-19143,16391,27709,15433,-6665,14627,4517,47,-9727,3523,4801,13803,-31345,-19991,-22523,30725,-20971,17473,-18171,-21881,3197,26869,-31763,-28531,-28875,29111,-10105,26353,25869,8483,-31813,-16149,-6091,-14373,26195,-9779,-20047,18329,25689,-355,-11529,753,1749,-30467,14815,22361,20893,12133,-27629,-18663,15259,9907,27439,-277,-27145,19283,4335,24503,5921,14939,-11693,-12137,15103,6679,-7763,-10477,-8191,12919,11573,-11991,22389,28355,-32113,5297,27643,18049,-9485,-67,-32041,31997,-7893,22773,2663,-20353,-11509,13267,2827,-10989,28171,-25911,-24467,5989,-16499,13627,-31955,-32369,-28803,-17487,-3081,23935,4965,16823,311,16993,-17189,26031,31011,-4717,3401,12075,-19011,951,-14721,25063,27373,-23111,-32361,11687,-11133,27417,9473,7915,-10301,-4807,8977,-9645,20221,-8377,8009,-18653,-11321,9091,3237,-15557,-17799,-3227,4859,-2991,-14869,20629,30095,14787,16837,-29547,6081,18089,-8589,6533,10769,-25053,28655,30551,-17483,12859,-21691,237,-21971,13859,-12983,-2413,-14881,27817,-24031,-7147,-29317,-7931,-4419,24243,24703,11923,-30473,-25167,21961,9639,709,28847,-20989,-10613,-21581,8371,32483,30827,-12921,14903,-5061,-30467,4363,-26143,5397,-6851,-14281,21429,30379,-7325,23459,-2979,-12225,-26963,-499,-13481,-29999,-4063,-13295,-4865,14385,-9363,-31627,27017,-30733,-6463,19357,559,6367,-28559,29037,-12023,5459,-21011,4145,-21483,10635,4897,-19297,-19543,-19745,5721,11265,-11299,14691,28861,31543,17453,-5825,-15721,-5301,9403,22859,21805,-18511,8635,8697,-3377,-9731,1413,22519,-2733,-6049,14457,29031,2405,18721,-3969,-20653,-7987,22279,24659,465,-11117,-27583,-27599,-27641,815,-1763,26817,11937,10355,14443,-6129,-4927,10035,16099,-24869,-28073,15871,6409,-22223,14207,7329,25125,28593,-7975,13801,16589,15651,-28121,-12657,-10631,7867,31509,-14347,23015,19179,26773,-11097,-23233,11233,27311,-13147,16117,-1207,24465,12837,-18951,-29583,-10211,-14199,11113,-14907,-13061,4799,-23713,3843,12323,15319,-21201,-20227,9247,31729,-9751,145,-15267,18701,-14849,-16527,-3967,25917,-32159,19871,-12565,17841,21265,15089,32449,-20193,8349,-2509,27249,-10775,20029,-30351,-20707,18933,9727,25345,-6837,19537,13399,11599,19307,11169,16045,-13403,18225,-24909,20747,25201,-11743,19839,-27215,4777,-13907,4115,-9621,-29765,2881,-30189,25993,13753,-7785,19877,-21131,-21081,25485,28723,23035,28615,-26683,-15547,21261,28159,-24487,-27585,17305,-17447,19633,-20393,-5727,-865,-7707,16049,-28367,-14911,-29553,-15667,-19569,-1465,-9513,-2167,1259,-28007,-1041,-13889,-6687,-11829,-12905,20055,-8651,-5591,-19459,16733,24767,32213,-3519,30109,-23207,15951,26805,5255,-29471,20823,19833,14979,22053,16591,-24473,31395,-31655,13101,-30141,-26559,-28865,1621,23185,-10921,3773,-25545,-31555,16867,-32593,-18853,26651,-14925,9231,22455,31043,20409,2761,-18659,17365,-2617,25019,26163,21677,-1647,11075,1061,-22121,-18155,-4913,-7359,29321,24127,15833,7375,2775,26925,-7709,-15023,9141,-2775,-1133,16675,24433,4051,-5953,-8521,16925,26231,17021,-17145,-29223,10951,6231,-16549,-31485,-1443,30615,24411,24495,-8159,2221,-31759,-11307,6703,-22793,16721,8209,-513,7051,5811,-1067,9743,-31103,-8699,-4841,9577,-20399,14817,-23215,-1291,-12409,32087,-11829,-12411,-10133,-15709,8919,14755,-6941,-23931,-28875,28145,-23985,-27859,-5115,-13259,22187,-1287,-7251,-3385,-23971,11951,-29137,16257,10119,7371,18337,-29319,-32753,1951,6211,-29807,24819,-14009,-10175,-113,-5359,-25335,31039,327,28779,-31533,-13209,8199,-31141,15821,29069,1693,-7611,943,31945,-21117,-12935,-30345,-26597,26309,12017,-30279,4433,31269,-5669,-6567,24603,20881,-15605,-29147,-20941,18951,10697,899,-30179,7999,553,-26909,27177,-12389,32285,-8079,-30457,-14627,22799,-21509,-20693,-7877,-27559,-17571,-21855,-24411,32521,18473,23705,20051,-5981,-939,-4145,-12981,-15631,-15803,-5051,26569,-20845,-25651,31253,-12285,18523,-849,-14591,-31169,-5751,-18023,18831,-2607,22839,-6395,-25045,-23215,7511,-59,-21171,16761,6319,12123,3009,29795,-3179,14691,-30769,-16755,-13447,-7115,-1537,-27703,-18277,28799,25751,-6413,503,-22677,1411,-10115,30927,16531,15073,-30853,6657,-4533,8861,27075,15633,-8535,-3187,22547,4987,-5099,-12127,-20629,12599,135,24333,25203,12049,-12153,6107,1173,-17769,-19425,4245,23891,-7403,13369,-31193,-9325,2605,-2277,-29557,23035,21245,-31039,30793,-1265,6373,26331,-26543,-22483,-4999,-19833,9665,27443,-10109,7585,3581,19993,1767,-4337,30241,16075,7973,-25051,-2519,-27707,39,-29849,22581,-17275,21281,25915,-6161,-10201,-17851,-20613,32423,-1289,7075,5507,15941,6195,-30037,9433,11331,-27505,-23111,-7917,17649,-1325,-20731,-11069,-18637,-707,-24965,26455,20725,1153,16807,-4547,27665,-12533,-22941,1903,-22403,20861,-22819,29863,-30025,26207,-5365,-14861,-22859,19897,21421,-24763,1295,-15747,30031,-21363,-14651,6545,7169,18833,-18351,-32059,2927,-30275,-28959,-13331,-6405,9713,-24009,22543,2141,-5921,16159,4829,4317,-19237,15855,6811,22881,-16147,29209,-8589,-4193,29235,26161,9547,15577,-9259,26161,16387,-29019,24045,27263,-15289,-12067,-13045,28491,-29957,-12123,-28299,-7149,8369,-6341,-27131,-32611,16189,-27921,13141,-1487,16873,4039,25035,13685,-27177,-18957,-5389,-31061,-15157,32091,-8737,-2537,6835,-31201,-605,-24827,-25895,-15037,29909,9373,23755,2865,-27645,-22951,-21907,29841,-20291,-737,-13203,-8241,28261,32591,-251,20105,-3391,13359,-21069,22851,3717,-3259,2411,11175,-10313,-7037,-7691,22123,26995,-181,14053,-4653,22443,19729,-22647,-31967,-27299,-25229,-32501,31607,-6609,-10939,6775,31477,-31019,-15635,-5545,-19603,-29291,-27443,-20635,-26967,-21421,-295,11501,7855,23263,-9727,6339,22757,15691,-1995,7853,-2543,-13707,21373,18557,7957,31195,10753,15775,22987,8027,9381,-17989,7639,-17205,27883,-29821,-27295,-11513,-4335,5443,-15359,-11141,23797,-30659,-24277,-28425,3507,9233,-22651,23641,-28821,10457,-15151,-1871,-22739,13483,27293,18313,6265,31735,-19399,-26183,-459,-11511,27877,3327,3059,28457,-16781,-11407,11309,20125,-6181,-22359,-17345,17507,-21177,25679,20963,-17519,-9975,-21305,4559,11303,30621,-8459,13375,-12867,-12307,-30647,6319,8085,3559,20127,-24703,9791,521,14479,3689,-16191,21973,7529,-13253,-15965,6749,-10597,5829,-20877,25599,4193,1471,8697,13639,-16439,-1065,-31431,2895,6399,-1783,30069,24525,-22467,285,-10329,-1019,19941,1277,22327,-7711,-1697,-14647,8933,-30989,22583,19549,22497,-26819,-25589,-4345,22301,22791,-3615,27811,16633,25079,-14383,-5669,-18647,-30869,3779,6069,23201,-1791,22375,14435,-6287,-27059,17341,15299,-31161,13561,-17301,-31233,-23753,15419,-2961,9591,30121,-32761,-7151,-8547,-22579,-2171,-15573,3327,5311,-24769,22287,25081,-2935,6553,22115,-31639,31977,-19689,31715,-26811,-26489,28513,28667,-41,4789,-3139,-6873,11445,8685,23745,15841,18853,5029,18797,-26461,-19429,1849,-1721,32489,-16649,-19659,1783,17209,26651,-12071,-7499,-14743,-3645,6263,7345,27817,-13803,-7473,5135,-11713,-10221,-23915,32351,27737,25207,21431,-16381,-11209,19055,-10313,-15847,-26895,3969,-23771,12265,24343,-7165,10621,-19267,24197,31491,5757,-2999,-20087,14763,-15163,11223,-7907,-4383,29125,1463,-6077,28709,24627,-11879,10253,-31,-2553,-13727,-31073,29443,-10391,-2691,-10077,26529,32005,-15105,875,-6351,-17443,12205,-35,-19243,-10735,-20903,-13895,25745,25743,5031,-5033,-12959,14199,26987,-16707,-9947,-6773,-32027,-4019,13585,-27715,2725,-10033,-13187,-9405,32019,-26387,23349,-4421,-15633,29193,-24657,-3545,32507,31283,31143,-2757,-11539,15843,-4259,-28365,26413,-29579,-7751,9339,2225,25983,23045,9793,31721,12501,-29461,18025,-19829,18221,-19009,-12283,27561,-3543,3561,-9371,22051,14663,20155,-5619,-5913,3973,-20221,-13037,25293,14997,-14557,-24081,5955,-10325,-26443,22843,-7253,-30609,31253,-6799,-3425,28203,-27403,-4115,30263,-11789,4365,23329,-2993,4825,16811,-709,-11223,-18491,19059,-30981,27577,28309,-9385,3255,19585,-17013,-25009,-22737,-14997,23853,-923,17981,16601,26895,22201,-27887,-26661,20555,10377,18513,-31085,26609,10601,23791,32395,4007,-31291,-16203,-30055,-28085,615,-19371,3911,-11971,-21073,29163,3015,-1197,-45,13203,-18337,-7471,-15197,24777,6337,-4597,-12907,-31765,31043,23157,-11691,16291,-18849,-31003,-28501,30425,-20451,-23265,16615,-11775,-19963,2313,10643,21963,-27455,25333,32011,29725,11997,19707,-25521,-32267,27407,-18359,17505,153,4629,-893,-7317,24181,7561,-24679,-27879,-21947,15273,-10187,-3771,-17971,273,-25407,-1861,25357,-9545,-18873,31775,-12175,5785,18499,-3637,8793,-12317,-813,3831,1993,8473,-5975,10995,26493,28167,18179,-5085,-31559,1589,26787,-30293,32235,-2207,-4491,-465,-29561,24231,-11177,8385,1401,3939,13111,-1049,-15183,-21109,15909,3031,-31,-24061,1081,-17835,-8303,20505,22503,8149,-28137,-29347,19157,-24855,14177,-8915,31059,12629,-13883,-30861,-8323,1277,32591,-3049,-23813,23961,-12535,-6523,-19177,24987,4219,-13395,31855,29837,-2825,8893,-18865,-18005,-3081,27747,-4739,27961,-25571,-9769,31475,8315,10061,-11959,-28907,9091,3355,26929,-14127,-12043,13691,-1845,-17399,32129,-17347,597,-25369,-27973,-19155,21713,21331,-31467,-30005,26959,-14871,2649,489,14041,-6515,-13413,-11689,-927,15053,21383,-19609,-12985,-17165,31657,-19387,-4049,28811,-9927,-14303,27889,29275,-17047,-6869,5329,25603,-1829,31689,-14821,-10381,17333,2431,10109,25961,-30217,21247,-26975,-14725,26033,28895,3235,-24407,28735,16235,28971,-22675,18953,-19589,-20633,265,-4255,24333,7965,30269,28239,-14447,-14641,-3373,-24369,-14459,-28117,-17813,30551,-1403,-14789,9193,14851,25223,23789,-25981,-20107,2357,7343,2617,4901,31801,-20965,-6465,-3847,15663,-31957,15219,3491,6745,-14099,-10513,-20063,10851,-30913,-21099,-10925,-22313,6183,29527,24495,-28727,-32759,32607,27251,-21703,-25703,-12249,21559,-7497,-9361,2547,-6119,17645,14307,7155,31331,-17893,-55,-23467,22207,13777,-5789,7551,16153,23885,-30911,3941,-23617,4387,-9671,-20979,11809,21421,23231,28009,3781,-24657,2261,24395,11403,-4189,22957,14611,-17055,311,-31247,12577,26781,10201,-10533,23309,-30885,1845,-7253,-24915,4751,9027,-13185,18203,-6249,21013,-27813,-17865,-6781,-15527,-29247,7395,9517,-24433,-24923,10525,-14975,-1661,-23787,12859,-14351,3035,-8801,-27685,-23887,-11061,-7385,-24849,413,31251,-19637,-20417,25213,1815,20055,8671,22307,-15623,16137,-31075,26223,-14147,-15891,-31233,-24473,27831,21583,-16847,-5135,-9015,-13553,4237,15991,-18131,-3803,17745,-27871,3161,14841,10089,-633,18615,-23693,-25961,-5233,-14161,-1849,21469,-17607,6565,14861,15939,-26609,-14461,-6923,18769,25301,-21319,3059,7773,14387,-30795,12367,26391,-4025,32151,10347,18415,20737,-6321,-12069,25765,-22393,-17855,-9837,-17611,1475,-8653,-22467,-10043,21563,-8435,25157,-16307,-26379,-23659,2165,9395,6215,-18821,-6819,-12381,15325,9223,6299,22337,22107,17933,5005,22563,5585,22151,28947,22487,297,-12065,26173,-3567,-7771,-22101,31713,-17743,13507,-27631,17595,3663,13065,-21679,-23471,25915,-817,30677,8851,-11807,-4629,-30471,20503,-9543,-31993,-26573,-24031,30313,-11023,-11687,-18507,23277,-23207,12771,-8209,21443,-5277,10543,-16011,-29363,24591,-25201,-30761,-15323,8877,14073,12647,8691,27415,-6649,-24573,-22523,-23873,12921,-30953,-26069,-13345,31297,29377,-26873,-10269,9609,6031,21121,27149,-32327,-985,16539,21599,2627,-27147,-29945,4537,24581,-9785,14975,7789,30967,-13439,15263,3761,20363,19111,9387,-3577,-28227,-18541,-31799,-23719,-10047,-6301,-1861,26891,1363,14177,25565,16743,-29013,-6643,4663,-29417,-25615,18041,-26609,-14035,30495,-19291,28943,30787,28813,20105,-18753,25165,-13901,-9179,-25399,-20661,-2853,-12155,-29053,-1901,14969,-14523,22143,32333,-4485,22859,4987,-18023,-26945,29721,2853,26131,31171,3173,-32213,17191,-28115,19631,-31853,-19613,-925,22623,-28771,-4973,-28801,20771,-7685,-745,-24659,32505,3033,-32413,-1809,-10925,-2943,-7733,26001,13979,-27399,-4475,15177,6527,-22531,10117,-30405,8329,-3027,-30011,8155,6149,-28307,-2901,-28307,-5973,-5257,22557,-31275,8779,25897,28233,23149,-12849,27013,25787,9631,-27983,8465,29145,18637,-26069,12297,-19051,-4171,-12891,-30057,731,5741,10735,-10611,31327,11229,31057,28971,30981,26227,-6277,11973,16115,-18603,403,21637,-21345,-20827,26571,11211,7535,5003,-11681,-10927,-26669,13565,-25835,-1607,-10811,20819,2735,11503,-15529,8547,32567,-2323,10409,20013,6299,14567,-30157,-9631,-31005,-5201,-9597,-25423,-23511,171,26683,-15767,15815,-11759,7467,-18417,-31065,-12053,-27617,-11059,-25651,9397,-26687,-21427,-30869,-2159,1085,13107,17221,28153,-7087,11433,823,-20215,27813,-3017,-7551,-771,13955,-25867,-10699,-18605,593,-7223,-30549,-11745,-17803,-6887,29011,-265,-16877,14389,-6923,31687,19451,22959,-25631,25837,-4875,25939,4945,10615,7461,24505,11707,-1691,3251,25447,-10165,-2519,-29831,28451,22181,-30603,5245,-10899,-24199,26611,-29017,6489,-861,7273,-14169,-1349,-16195,18641,-30403,-21551,-12899,29231,12343,26759,-31725,17185,-9907,13009,6319,32185,-16259,-20315,-21269,-12035,30289,-16163,-29385,-30641,-20637,7243,8799,10227,-27699,-6973,-23485,-23023,7405,-93,-12745,-2381,18633,-27285,21873,13779,24481,22539,20773,28613,-5381,-12297,10869,-1071,16187,20963,5853,-15615,6437,-10565,20311,-35,-26215,-18907,-1161,-6679,-2947,-9067,-29343,28587,29287,95,5541,-13179,-19313,-5023,-16133,12731,-26045,-4721,-7259,12683,32403,-8635,-3925,15967,-28601,-8997,-26821,4659,-30901,-2559,-26563,10301,-20365,-17999,-31013,14791,-10071,-5043,15781,8831,-23911,23195,12351,18169,-25679,3771,2733,31589,21703,-19765,-2135,-497,26495,-17761,-28021,29297,22087,7697,-28733,-5749,29715,28183,28625,8311,18255,-20839,27361,-12723,-8475,5743,31365,-12185,-3505,-5619,-32555,-9413,-13409,3577,-5055,17677,15301,-18331,-15975,-2705,7543,22463,-18463,-11605,-24503,-17137,-14575,-27599,-26899,5541,-11615,10397,2019,-29227,13097,-8781,-32235,-14133,26617,11611,20745,13033,22929,5089,1811,15447,27459,1531,9537,-26399,21259,-18379,18485,14349,-17889,2159,-26221,97,-15413,-21703,-22733,27319,18599,30791,-27559,-12285,19329,-6817,22577,-1243,-2943,9683,18907,-12161,-7749,11425,-8743,-20465,14621,24971,-14935,31073,-12163,19283,10403,-26379,-22483,-31609,-607,21033,-12103,-16357,-23767,12569,5773,27015,21469,-10507,-10077,20685,-7973,10359,-25403,5631,8639,13561,-20071,31615,-7861,28957,5063,13413,-31929,-763,3203,26039,-32031,10307,13857,28213,32447,19687,31175,-11279,18189,18717,-16503,20847,12585,13329,-8187,15029,11097,-27489,-8327,-1799,10567,-25749,11395,-2543,-15563,-29231,16955,12051,29943,12365,5265,-6745,7037,23523,-26313,25397,8901,24781,11417,-22419,18153,5867,17605,-179,-14207,20067,13345,15777,-1269,9969,-32513,28145,-20247,23187,-30857,-6653,-21039,-1711,-13267,12665,1687,10411,-6419,17957,3987,7117,-2511,-30321,-32237,9295,-12357,-15843,28441,-21461,-6851,-3283,-24333,26035,-12733,27543,-22383,32575,8321,-13983,-29839,13779,-16747,-31121,12215,32139,10419,-24161,30739,22675,4313,-25417,6701,22633,3479,7037,-19893,-6389,23321,-32409,-6571,23015,23783,-2609,25455,1993,-15901,-27823,1627,3719,-21833,15863,8323,30983,30313,8445,-26115,14995,22167,-7083,14987,-29671,-311,-1761,19603,22547,2567,21423,-8583,-14817,-26447,-3105,27185,-32713,17263,-4359,-17669,26965,15359,-26713,-10959,15665,26491,-7605,-28247,32507,22343,-14969,-15913,-29351,7131,31221,-27555,-13695,27019,12095,-19575,-25781,-21593,-15743,20521,-12473,3733,24317,22299,-23775,32603,17141,-3299,-5737,16845,-20595,-5967,-30867,23261,-29129,1455,-13243,-32443,25229,-6959,17261,22189,-29941,-9769,15585,-2971,-16709,24757,-6743,-28563,-28707,-32563,-32603,6267,-4519,-4375,-26403,26981,28861,24077,-17443,4957,7041,32241,12617,-25267,29933,-28945,-21191,17037,-10277,9889,-11501,13731,11271,21521,11371,-11259,9693,-14593,-2451,8507,24571,24959,-4723,30021,2613,-19107,-16399,-9271,14417,-1981,-28625,-32091,-19081,10881,23059,24619,-23017,-26561,-26143,16351,9699,16053,-18489,-14847,13079,5887,30689,-29699,-11485,29245,-1981,30743,19305,-27703,-17511,-2825,17517,8221,-2495,-14483,20067,4557,22331,-20745,11935,-30325,-28585,-27423,453,-14075,-4213,24303,-14787,13523,-13097,-2581,-16641,-15903,23959,15313,-15279,22249,-20519,25775,7373,-16923,-10903,-25193,-15001,-16613,3215,18433,8773,-21385,7593,-6857,13343,-8839,-20123,7803,8661,-17489,-31067,26241,-17157,25441,10401,26749,-7251,11831,-19483,14039,26971,-13881,-27611,-20249,-12999,-7831,10813,-24975,-27429,8661,-2597,-17981,26277,-23281,18673,-23677,22845,-17929,-29381,-32049,12913,-21893,-8717,24897,-3303,-23149,-19473,-20851,6051,22663,-10653,26611,-22121,-24603,6581,-22151,-10531,-7493,17545,-24865,-21217,-25091,-747,-55,-31625,15097,20157,5329,29641,-19619,7855,12123,-9777,22879,30565,-30471,11537,20367,1281,30991,-13339,-25031,26071,-5983,16897,3539,17207,-15869,-4027,-4091,19867,-3795,-18209,-1817,-32581,5207,2675,-25845,-23213,21231,-32545,23835,-20439,5717,8145,28989,26669,29559,21263,-11301,-25371,18797,-22229,1431,-30949,19397,23475,24783,-8837,22281,8995,-28981,5993,-26865,4595,13033,13601,-21733,5115,20127,29391,-26629,32639,26587,18439,-31119,9585,4849,8475,15427,15707,-12165,-6567,-22661,5849,-20299,3203,29343,17843,2201,13863,7561,-20507,-32573,-15807,-6997,24461,-2851,25341,-7225,609,-15491,-13577,-13951,-14147,-20027,-21551,-21649,26959,-28733,-10677,-32321,-11895,17543,-15307,19643,-24227,13529,29273,26649,1059,26653,4461,-16835,13199,-25291,-14291,-11565,-12217,-23867,-23133,2259,15973,12581,9245,-9405,-22797,13825,31791,-7491,30515,-12017,-21755,-32569,4831,-11789,8823,-20811,-21247,-22243,4545,11955,-17001,26865,-17355,-8001,-11739,13047,-25717,-29461,-827,-6915,16305,-28461,27523,23375,-14809,-19477,-23703,-15439,14509,-23633,-3145,11617,1623,2041,2249,28271,26421,-4941,-31583,4787,27325,30979,-23701,6237,17785,2065,27779,-901,-21109,15119,14089,-9429,25843,32073,6081,21659,-32539,-8629,-11279,13791,-25419,-3687,20351,-14515,4343,-28731,21109,-28753,30037,7183,1047,19353,14443,-10009,-10391,-75,-29005,15489,9529,22915,31865,-14183,17367,-5333,-95,12023,22299,-14855,4665,-411,21897,17529,11549,-10573,2965,11323,-26271,2629,12603,7619,-16481,8929,-5905,14569,14271,-31149,19941,-17273,-24975,-23735,-26289,-27163,25069,-5021,-12597,9653,-32685,21011,20927,-5431,-8711,-23563,-20393,-3201,-12425,15637,6343,29215,9597,15977,11119,15479,22291,-26045,6067,-31225,-10467,18525,-28735,20229,-17495,8203,-32503,-891,17713,27067,-22603,-16393,-25181,-8297,677,29013,-25751,-17097,-6191,8603,5275,-32379,-14277,5337,-27865,31829,-14941,12023,17043,-23425,-8373,18909,177,10143,1047,10103,-4169,-32421,5657,-30033,-24347,-13979,-11781,15661,19651,21207,-26819,30055,32147,189,12929,-26595,15361,6059,-10855,-6035,15097,-23271,-24703,-29299,28743,29709,-15477,-28319,-14669,-32761,-21741,-7695,12795,18867,-26213,6543,-16005,18255,-18617,15677,5775,-16839,2313,643,-25469,-13863,-24491,-26681,12279,-6087,-13339,-20365,-8811,-6901,9137,6867,-5549,-21255,-7077,-11949,17677,18153,21853,28379,-1915,24017,12699,24931,-21725,-8341,-32741,-12049,-28001,27445,24551,11559,23011,-2379,24335,-15877,-23427,-28499,-25285,19283,17363,-19869,-1525,-9267,11463,-12055,16895,-24675,24171,-5959,-26555,26989,23483,1165,24515,-8063,3057,-24237,-3527,13235,-10881,26175,-19937,28579,13821,25709,8703,-30217,2625,-10097,843,12249,17093,19543,-27609,-6737,2171,-29681,-10219,-10551,-10337,31163,-1803,7219,-3237,-24675,-13773,-26883,7621,7847,-1733,17715,-127,24105,-15801,-24219,19001,-23105,7987,6709,-32503,4515,-21065,32317,-11307,7637,29201,-18109,16019,14865,17707,-9765,-29221,-32373,30835,-553,-11653,-265,-18763,-20535,18953,31825,-10193,29907,-21437,-7369,-11009,30455,21091,-13933,31801,18797,-22697,-13351,-6261,5883,26801,16349,-8757,-9329,17061,16283,-28145,-10255,-28325,-26215,22517,-31299,-23101,17759,431,32757,-5513,-19959,-2837,6961,-16401,30217,4811,-29263,1065,-4839,-8745,341,13579,20165,17697,28945,2663,-21337,26435,12833,-6977,29621,16199,21365,-7519,-31353,4755,17527,-16227,-7629,14195,9193,30035,28151,19853,31591,-17401,6797,-11739,9897,-2257,8765,-8153,-19421,-10525,-18889,12493,31245,-15751,3,27641,-23777,-3367,25227,-26683,20973,-15865,-9237,-24709,4425,-24987,-25689,-23723,-25667,4867,-12563,-27793,-9233,-2547,-22175,-30937,-31137,16107,-20451,-9383,29837,2225,-31465,-5679,-31997,-23283,-17467,14619,-7445,21025,-19229,13681,22237,-32751,18589,3217,-24495,-30779,14591,-22165,5151,-25507,20285,-1541,28105,-13969,13349,18555,24057,30761,-22525,10817,-23191,11745,-10361,-19169,32183,15209,22591,-23805,-22901,-22243,9245,-699,24545,-9457,-25399,5031,5169,23063,-18497,-7849,-29429,25189,-19127,31995,-32585,7757,13135,17829,26841,-32295,20665,18667,6613,32021,-10705,25377,5011,-6125,-8567,-17119,28123,9337,21203,-27531,19723,1201,-21683,3043,17275,3005,18571,17641,-10297,-8581,-8839,-13049,18891,28885,28557,29601,18711,-27687,19029,967,-20145,9831,-1893,24691,2149,-16093,27081,4653,-8885,-8501,-15163,8621,-26991,-16561,-18855,19275,8345,-14369,32445,-16511,30105,32341,-2505,19879,9275,15623,-21471,14295,-13543,22099,26063,-8967,1007,1609,-24281,-27419,-7223,11041,-32419,20727,-23061,21973,-15585,-22759,8893,-22357,5535,2381,31107,20681,-30567,18547,30217,9901,-12913,-7349,7303,-31727,-17221,2027,-20821,-4699,26167,-30687,-10285,4751,16703,25777,-21823,4097,-18671,-31537,-13297,-14031,7411,10983,-25891,-17651,-9533,1699,17525,17339,25973,-9957,25877,9301,9265,6955,13237,-29615,-28515,-6331,-2137,-29001,21185,-18429,-29491,28875,-6605,-22285,21875,-20065,-11113,-20605,25647,3845,-2091,-25879,-9243,22937,3387,9585,-13887,29395,15715,8277,27885,-1469,16745,12959,1995,-31359,17523,-29461,23749,25955,21117,21503,28139,-28367,-8535,-11347,29247,-23603,22277,-2921,-11429,-21929,-27161,5649,31843,18501,24947,-25979,-3863,6605,-23341,26667,-7949,23633,-21157,-6247,-25095,-10983,-13751,12293,25409,4641,1427,-32497,22093,-1145,4507,-19307,29429,8183,10655,15415,11241,29483,13903,27455,-3443,-14593,18947,9791,-17027,11905,2793,-8305,-10791,19803,23225,7573,-20075,3909,6513,-4723,15411,20807,3045,-28875,-31683,25331,-3217,-14377,28277,-5479,32299,19393,10403,-6765,-13535,-24851,15103,-8331,2199,-14183,6747,10855,-21027,-5557,21567,-14059,-5353,-16905,9401,-27415,-83,18601,16109,18879,-28243,-30261,-19527,-19011,23635,2231,1823,14401,18245,-1559,-17925,-24757,19785,-4071,-32757,2089,24189,5803,12691,19635,29731,-27885,17859,-4903,29879,-28009,16687,18505,-20873,32723,6663,22229,-7447,-25343,10773,30487,-30619,13821,32595,1809,-30123,27397,16127,-30149,-15669,1287,-9669,-11087,27039,12971,16833,-1661,-28739,4413,-22543,21011,30491,20161,24425,-18775,-26135,14825,-5883,-499,-6621,-9165,10433,15901,-20475,-13197,5169,21821,111,3179,15837,32069,11143,32709,-25323,12005,28805,3049,-8931,5123,-29681,-16561,-23767,19245,12055,24321,7715,22151,-11861,-23043,-1213,-7857,-27845,-16451,-9481,3399,-20687,22221,29999,8011,18143,-16857,-30713,-931,5407,-31633,4761,-8813,-18585,29197,-6269,-3407,11303,-28583,3095,24495,-29733,10481,32027,-24445,20575,-28053,27357,2535,-16551,7885,-10435,-14885,16601,20885,7243,9627,-26897,-7869,-25325,3979,17547,5901,23927,-8571,32289,-23579,28907,22465,2897,-18735,-12467,14631,-8573,8793,-15559,26587,7969,29117,-1649,-23013,-16271,-24803,-5379,9759,27673,-15195,-22193,-10233,-29275,-17873,-2627,17271,2567,-1815,1533,3431,-25059,-12985,-26669,-2863,-27397,-20143,-17697,20697,-133,25133,26543,-3551,14299,-14645,-14951,20729,-14025,-6581,-14919,-25597,-2513,-32717,-2389,-3029,-129,-21645,29927,-7859,15697,18159,-16809,-21261,6057,9843,9015,-18067,24095,11581,-27605,-7055,29983,2007,-27243,-13661,10463,22257,-22425,-20575,-2857,4139,9161,21393,4185,-4783,-3785,-4721,-10123,-11923,-3281,14715,-32725,-13467,-5669,-15661,5171,-20929,28599,3889,20651,9247,13953,26813,32751,16169,15515,-16853,27303,-7687,24807,-17893,2537,28435,11021,14941,-31635,-17369,653,22725,-20161,-129,-9231,12929,-29405,26693,24595,28287,22509,21891,-10459,29125,563,21071,-9047,23731,-8011,21035,-30779,-5821,-1051,603,11151,19959,18133,15815,-20541,-4985,16033,-31561,-14717,-28875,21845,5695,15093,-14351,22967,5363,11691,4777,-11147,-17295,645,5473,21737,-30161,32549,-32633,32497,-3205,-5325,9071,-1151,28589,-1631,14659,24675,11731,6595,2683,-19603,27279,-2727,31595,-21139,-28465,-20727,4641,-2691,-22919,6109,26077,-29741,7865,-11669,-8011,29511,29841,-13085,6205,3495,-5989,-12391,-8265,-1767,23335,4113,-23655,-7687,9745,7853,-20419,11323,30031,32209,3417,-8353,30867,5889,10081,22037,-28721,-835,-22911,-15655,4825,24537,22471,-31999,23905,23835,-19039,3531,11219,6459,21545,-613,-19057,29449,27051,4177,15595,-32171,15215,-23377,16713,-4587,28299,22829,31363,-1951,26913,-13579,25387,23597,26015,-22477,3291,-9701,-18957,9359,-15493,29107,-31747,3659,-5653,-11457,-26215,31431,-14373,-11559,4517,2225,15039,-26323,2823,-12613,225,26171,28641,5379,29577,15265,-23249,7471,-12623,23241,6071,-26621,15609,2861,-26795,-24241,-16717,21973,14251,-17563,-18367,11247,18725,-15201,16263,-26763,-5067,7049,20377,-21029,24967,5625,12359,19327,11893,-8833,-32481,26777,14965,-9993,-1947,18687,10981,-3405,-24079,9453,4043,-27497,-13035,-6905,3507,24131,28343,28083,-1927,29459,-8107,31221,-23825,-17797,28901,-8895,-27331,-30495,-5237,-32729,12747,-19627,2267,8203,-25351,9785,28239,-11109,-28741,-5455,-25827,-2423,7825,-13077,10487,31521,-7449,13421,-29521,-23237,18949,27849,-5069,-30549,12875,-30003,-3253,-23001,-11577,-14195,23667,26265,-18939,-29109,29493,-26557,-17637,25355,-29209,-20659,21785,-24457,21309,-25819,19723,9161,17507,-13327,-1815,8267,-16455,29403,-32627,14979,15305,8955,9815,-9575,1933,15055,-15583,31923,-14815,595,9893,-3289,24273,-7651,22125,7257,-8205,30019,22323,-26455,-3417,14493,-22025,18363,26805,1379,-22887,-2363,-16891,-23637,-7807,-14153,8177,-18649,-1479,30029,-11143,-11757,21801,4497,-3989,-24339,-7203,-31355,30051,-17475,16255,26527,1869,8863,-21821,29879,30279,1331,-10093,21697,6329,-8831,-17045,-28541,12645,-15869,-17605,-17189,10713,6367,-14741,30521,5945,32361,1773,31495,12797,-12167,23447,8927,26099,21891,-13983,-23051,16019,-4163,14303,-6977,-23971,-10387,5553,-23835,-3855,6507,-25739,-15755,-3813,-21541,14361,1945,-13387,16083,15027,-16771,31117,3785,14261,16605,30127,305,-10039,12603,1013,-21407,-19967,-2959,-18803,15885,-23783,13473,5111,-19065,-31813,2319,-27339,8409,25621,-13173,27157,23351,20345,30025,7553,-5157,13779,-26395,10995,32419,-11613,17987,-13757,-31929,14537,-11723,6821,2927,-25953,-15469,-14979,1941,-18861,23905,-19997,30665,-1189,2243,5157,9751,-26901,-31983,-31575,4801,12265,19853,9555,5365,-15371,30101,17949,10825,-12139,-14801,3557,-11505,10583,-3487,14399,21911,-2135,21185,2147,12345,-29615,-22987,-25055,-7763,-7301,32017,-22223,-26419,16025,23321,-14419,-18403,-2393,-1643,19909,-26159,10967,-25155,-27775,20503,-14705,-18645,11963,-14525,-20115,14847,23897,-24701,-5493,-6777,-24251,30693,32239,-935,8061,-9637,6851,-6507,-5221,-11119,12277,29809,-16133,18355,20251,26681,23847,-27223,2543,-9597,-17803,-15295,18039,7439,-29523,6489,-18651,21507,22699,21209,8057,1847,-22777,13883,24211,-11871,17583,-6999,-657,1629,24355,-2739,17471,29911,-11155,4357,-5115,2917,2647,-14927,-18709,27985,-25757,-1995,-3371,16823,24141,-15203,-21483,13083,-6253,13745,-10559,-26427,11763,-18621,3205,-32379,-17721,-4147,28879,7123,-14889,5995,26379,-16723,4991,-15701,11125,-13549,-5595,2427,-331,6435,-697,-9429,24629,519,-11837,16187,-5855,24443,27933,-22361,2507,-26805,11639,-13071,22303,-19999,-18025,15151,11573,-7843,5749,845,-25323,-28213,9487,-18007,-10865,30737,24413,-8549,26197,23871,-24557,2207,-32121,-13925,19553,-31805,-1111,-12209,-28993,9535,12331,10457,-14063,14821,-12901,-5245,31543,8505,-1879,-18739,-9813,-3047,11003,-29799,-28519,29317,-29769,-803,-26603,11087,10749,13969,14969,-21147,8699,-27273,5843,4039,-28747,173,945,19827,-20925,20899,-22611,-23719,-6165,-23269,-6299,25677,4507,-17211,-31597,17129,-11071,-31203,11919,-30599,1101,-907,19565,-25145,4337,-1251,-6677,30507,-12549,11547,17499,-13875,17777,-18953,-13983,-9747,4691,-11315,-20619,-12441,-159,5555,31309,14841,361,24653,15015,22197,-21415,23539,-27343,19819,30883,18385,-1097,32457,-955,-4331,-7903,8533,-4041,25557,12901,25141,32577,-27849,-26995,30185,-9985,-17411,24669,-27213,-9621,15519,-21691,-17693,-1825,32361,-4285,-7353,-16985,-19815,-10227,609,-16101,17227,-25113,-625,-19569,7189,-20541,-28681,13031,-29325,9131,-18807,27453,-24535,-20945,18813,-30233,18733,9307,31057,-26319,-12547,-9115,-1181,-21267,-17255,25251,-22935,-26439,15087,-16207,14947,-8329,-22393,-5305,3501,24317,23371,-29411,-18833,-10463,28389,-30333,-27505,-31915,-23695,2433,-8237,8895,-17053,3515,15713,30039,-26473,23107,-21147,15951,25991,-26685,-5515,23415,-8745,11683,-15021,16553,-3817,-601,-21877,-4919,30145,-13241,-11609,29485,-27393,-24133,22529,-21937,-12895,-18177,-1661,-1937,15215,-26859,24675,-7793,7519,-4959,12033,-24157,18151,-17773,-20185,9697,-26303,4209,24559,-2989,6935,24955,-32223,-11881,-13731,10553,6591,-9717,-13301,-19741,-777,-28447,17497,15093,-29639,22317,15911,18127,-12169,-8159,25107,-17597,-4131,4663,-17935,14027,16779,-4205,20527,5615,-10065,-32295,13049,31119,25183,24165,24525,-18405,-22799,31519,2283,18877,-2799,-7405,-12319,21125,-25589,5849,-14065,-15783,4905,-19267,18781,28933,-6839,-25633,-21531,1065,-1475,23581,-32157,-27779,-22119,-955,-5687,23369,-11735,12103,-11865,-19221,6013,-4159,-8261,8483,16259,-29519,21225,2419,22225,25249,3941,21653,-16655,24571,32495,31529,-12353,-30959,8173,-19783,2493,6579,12619,4669,-5057,-1693,-19077,18697,-10877,263,7959,-19475,25705,12723,-3349,-14251,1199,11309,-1719,6941,-19989,13247,20237,-9045,-6373,-32231,-30365,5337,30929,-20673,-9747,9489,6571,-9047,-28517,-1995,657,31853,-23057,30459,-28911,8129,28839,-20179,-18865,-25595,-26979,-17599,18461,4577,-21579,-17579,20911,-27659,-32589,8995,-16067,22575,31961,22221,-12407,-11875,19585,-28149,-21633,-3257,-28869,-5131,-3665,-10375,-16869,-31009,18783,-1485,1633,25823,-30887,-31229,-21295,26909,1227,-23433,14135,-25841,20537,-7085,-6279,-26481,21743,-2443,11217,-23639,28065,-28891,13249,-26059,29477,25663,6467,2451,-27285,-1681,-8947,14521,-21545,7385,-25439,-27389,-21907,12817,-3199,29367,13151,21603,11523,5669,31209,30085,32181,-15081,16325,-25633,-25665,-28927,18833,-18187,22271,21441,25479,-1437,27891,-9013,1781,-22943,-27765,-895,5509,32345,4431,4369,9903,-21793,-29363,18043,617,13517,17213,15111,21293,31475,-19069,31623,-12781,-20511,14985,2569,-16653,-8121,-9147,-7215,11759,-25309,5335,-2301,-16655,29443,-27611,-19053,10037,-20625,23667,28429,-30317,-19721,2379,-12651,19707,-11723,371,-2819,-8713,15633,14641,-25043,8265,-23529,-29977,-19349,29047,24467,-20351,26509,20279,-30667,-12143,17601,-17343,-15611,17017,-5569,25175,14443,-18005,2345,23349,-16829,-9021,23115,-8057,20081,-8303,30675,-17187,-14557,-26033,21397,16579,-31753,6795,20427,28445,2551,-12135,-28055,28699,10729,29631,-10109,19113,32635,19023,-23111,26885,-13885,-24899,18681,31703,7803,11135,26407,21077,25383,22289,-8763,9765,-4559,32407,4833,6569,26097,-11839,-26305,-30731,32403,6385,1589,9535,8697,-3193,-12419,-14897,5355,10237,4989,1017,-13259,-29785,-1899,-9851,7633,-30621,-20827,30283,7213,28225,21453,30031,28895,3601,9893,-21373,22805,15701,21887,-17173,24503,-21961,-28133,-25883,-21211,-4069,2795,28973,25977,-2371,27651,15509,19935,26441,1545,14979,-31527,26149,-13983,-25319,21053,9079,9835,-4503,-2703,-18603,-13945,28113,-9187,31857,-19057,-28253,-341,10291,-11435,-8859,-17109,955,-31505,-14015,12605,27857,-2191,-12381,21417,9959,-5943,-12375,-3389,27131,-17617,-8991,-17691,-12049,-30875,27037,-18479,23573,16795,8871,-14395,5157,-29833,31509,-9697,283,23993,-703,28259,-3381,-18027,-20767,-1317,6973,12775,-5139,-28923,11543,18693,-23865,6213,-2029,13253,-9223,27431,-25799,20305,29867,28111,22263,-30341,14703,22957,-29731,-7787,-25121,-3497,8793,-12959,2569,-30843,-7657,2567,21887,11391,7073,-26731,11305,707,11161,-413,3625,32561,16243,22609,18215,12431,-17777,-10333,-25135,-29409,16647,-2173,28269,-22281,-16127,963,-3291,-32509,13315,-31667,32503,-20893,17535,-1041,-12803,23819,28569,-15373,11419,26513,-32235,-9195,21353,8047,23949,-29439,-25357,-10809,27633,-14135,-6329,-10005,569,-12605,3039,15357,7649,23633,-12165,1649,-7237,-7437,17391,-1309,11399,-4781,29251,-30149,-6845,25581,-29279,-11557,-17141,-11229,-16149,13095,14071,21495,-27769,-5365,-7473,12449,18811,17349,4499,-20387,22501,9619,-27515,10367,-20953,17261,-20889,-22145,-31539,20745,6725,28513,8663,-24181,13021,14485,24547,7177,16473,-26097,-23331,30191,22623,32117,29807,18841,-8909,5053,-22523,32347,22243,-1347,3745,13801,-2635,4651,-17837,9259,12383,20367,13209,16555,-23421,4471,24061,-27157,15291,24517,-24825,6977,-6825,29219,-28093,-7735,-5307,-24867,26909,6099,-763,-2947,-8871,-30367,-28425,-17435,29687,18943,-21243,-21371,3669,-4121,-4913,-1259,-20001,1745,-32181,-14383,-6227,-8819,-3829,-2383,-32283,-28549,-7719,6183,-32481,-11299,6805,11693,-12773,-1363,9673,31559,-22597,18175,-10101,23863,-15953,-24611,-8423,28629,-4435,26921,6093,-25795,18053,-26997,893,-26673,23511,26787,-18673,-8185,30915,1715,28375,-17945,20095,-29739,-24517,19203,29503,8927,-209,6763,763,12435,-3343,27853,4237,-30939,8197,-15111,22653,11369,-27935,-18161,19181,-13883,21899,-13577,-5679,23403,-9657,15671,-21469,267,22555,16127,-7959,31471,-14897,28383,-3945,15981,32057,-1237,24579,11809,-31605,10913,24535,10385,14311,-13621,-22983,-23079,-4095,-19271,-20439,-16591,-15949,-24033,-2567,13583,31173,-27857,-18799,-25533,16947,14121,-445,-24425,-25577,715,1673,1729,19461,-32071,-18253,-24895,13383,4641,-3817,-13545,-14161,13253,-26915,18719,-31983,5953,-18649,-8535,-24261,29905,16607,-769,26815,-22789,8453,29545,5373,-9603,5471,-273,-17883,29483,-637,21145,-30369,3021,22147,-22513,1659,24047,-687,21605,-29395,-9959,31905,-249,3689,3877,939,-20687,26311,22287,20911,-29293,1883,-31987,7835,22921,14867,20565,-5827,-29977,-28625,-27371,16455,119,20251,28347,-17683,-29733,12653,-12167,8305,-25259,-6113,9669,24033,6373,19607,8819,-21549,1343,7791,-26703,-22029,-4633,-30155,15125,-26683,31347,-1433,14487,23805,-16243,-9875,2513,-129,-19735,19883,-16101,16555,19809,9667,-8537,12099,-9829,-4331,-7467,-21349,-20207,21317,-1083,3999,25619,16537,-24155,5253,3761,13067,2297,-6429,12363,27693,-12865,16913,7117,11535,-2443,17763,12649,-19151,25785,-10165,-17005,-14015,25181,-26207,-22711,29729,16167,-12303,25969,-6871,-25109,9771,-11885,28365,11101,32093,23245,8625,-24263,7309,14721,2633,7795,3857,-22081,-9619,1181,-15007,16597,28069,20933,28875,-7773,1105,4251,-7285,12233,-6779,14661,-25895,-30743,24555,15809,7831,7379,25623,163,-13665,23691,-26881,305,-18941,14579,-17727,22391,-843,-19713,13547,-8757,-15161,-21253,1045,-18445,18351,121,-19485,-22821,-5095,12403,-9675,15889,27779,-11077,-10705,17399,9025,14507,1647,5057,-17173,26903,17153,-12869,5745,1769,-21829,13857,-30867,-32533,21401,13871,6899,14549,13169,14683,14777,32639,27951,11263,28529,10199,15389,-28785,24515,1299,-16855,11987,-15089,-17249,3807,701,-22563,18009,19067,-20399,65,31943,1025,-27903,-28107,21909,-15701,1129,-31693,28423,21095,-2633,15763,15133,-11837,-4801,-23103,-31823,24913,-7277,-21871,-24945,25631,22951,-27759,-29043,16111,-13687,-29163,22093,-12111,-5085,-24955,-2105,6165,2237,30695,-18171,-14939,27047,-30931,22599,-28233,11271,12655,18333,-21037,30347,-11135,-12115,-8551,-10447,25159,-7089,-9327,-7271,-12417,6663,-21807,19185,-12427,31761,26473,13571,5635,7339,-17271,12653,-6053,-27307,29651,-9771,-8907,15469,3753,5379,4255,-3325,-6601,-23613,1529,-6443,26597,-20645,1051,25297,21399,325,21223,28905,-19029,24515,-17541,6343,18887,-24045,8561,16335,-2107,-26415,23541,9927,-7183,-13185,30693,7397,-11701,-24667,-21289,-613,25791,17517,22211,-13983,-21641,29307,-11227,-21527,-8363,-6807,1705,16203,-1033,-25697,12845,-4941,-26841,-8073,31257,-14687,387,-4265,6867,-14543,10523,23113,25401,12859,-11293,26615,-30131,-32223,-31027,31773,27153,-20241,-22887,3317,-31243,-2079,28251,11875,6407,-17395,26487,-21895,-29243,6953,-8585,643,-11453,-18597,20953,-32703,-18613,4043,-31075,4061,2379,3379,16463,-16105,12991,-30705,-99,-31197,-14259,-21729,5453,15165,-9015,-8867,-4887,13751,26843,-10733,-6497,27615,-10803,-2769,29027,3199,12545,11065,32061,26155,-22637,17281,-21893,9,-10637,-13361,18709,4821,11637,21053,-10837,-21673,-30655,2149,-6745,-11733,-17459,14529,5633,-31537,-28395,-27755,-25977,27853,195,663,-2941,-25795,9163,-14739,-9033,17623,28639,26747,22135,-13643,-6133,-4661,-27855,13211,1001,22437,1891,-30849,5837,-18923,-23805,-26637,9485,2955,-12725,6533,19667,-13217,12425,3013,16043,9051,-7005,20083,29975,8729,-28643,-10667,1421,16421,12627,12405,-363,29001,12721,5423,-15819,-20415,18333,-20371,21671,23683,-26105,-4315,17601,32429,-17229,17283,3611,-1329,-11563,5979,13233,16843,-28493,14877,13567,9367,-3929,3325,20371,-767,14439,-24691,21717,21395,-21181,28863,-4675,-28069,2917,-11423,19405,12695,18215,13325,17183,24483,-2559,15077,22137,3913,3295,2113,-13563,14799,21713,-30247,-30703,-12625,-11611,-10691,-19601,2911,29119,-8095,-9547,-30823,-14029,-2241,-75,22177,27159,2731,-3735,3973,-23025,-12089,16203,16201,-21485,-12999,-3605,11003,-28681,20787,-21825,26411,27545,-4909,-17927,5839,5199,-9245,-18885,30173,5785,29907,-25689,20169,7097,-13337,9743,26003,28725,-11831,-25745,16875,18923,-25649,-8173,-25419,-25167,7429,-15677,27707,-21535,-22641,12555,-28349,9059,17919,5099,-32473,-31085,-9323,-8835,8141,31895,-18201,-16255,-4405,14319,10715,-12459,-31009,11507,-1161,511,-1095,-20141,24147,19669,2343,-31461,5833,-9489,10815,15661,29617,32599,17627,26647,-15973,2409,27217,-1819,95,-1343,28195,-17937,24899,31767,-29947,14205,-7563,3419,-20959,-31911,-14345,-29215,16471,3603,-15961,6215,-16139,-19199,-8435,-31759,-1271,2209,22095,7925,20615,-27163,-21191,7435,29869,14369,-6945,-12659,16777,-22729,-11403,26179,-19863,-25007,31987,30049,12125,-27587,-3911,-30039,-4599,10975,30347,-31385,-10825,21431,-13629,17441,-26075,-27309,-729,-8669,23647,25475,16631,8485,-25407,-13627,11347,-14453,12797,-8521,21521,-1385,31679,15961,9733,2713,-25241,24597,1007,-11383,-23213,22491,-11581,-23487,3287,-24305,21361,5113,3699,10591,-13133,31173,22171,-13129,-23653,28213,-30749,-1233,18373,-12199,10707,-31421,14717,17193,6839,30689,17107,16291,-30123,12765,-25917,-8145,-4503,-19455,10867,-19989,5313,-29441,26427,2875,8635,29949,22823,7447,-23039,5693,-16309,16279,-22347,-15147,-1867,5095,31209,-28513,26745,-27769,2195,-16189,-12295,-13763,16633,-30993,8293,-12499,-1587,-3053,-1387,-8021,-20145,17967,-20539,19633,3833,-27925,-1195,25347,24527,14973,-17253,557,-25593,11899,10765,26837,19083,-6909,-24961,16643,-10181,32177,-4975,-11219,-27127,-11143,-8487,9775,-28589,-16317,5589,12637,-31125,-27599,-25785,-14115,-161,22723,13189,8741,24953,23603,-3937,-4107,24423,22905,11357,18973,30705,-27099,-15459,-2871,12963,13413,-4911,17531,-27415,-24403,10259,-19119,31115,22605,9863,-821,-1203,10679,-19595,-32125,3515,25859,-21597,-17293,-11263,26971,-5703,5259,-27951,28615,25353,-20435,-13609,-15845,12625,-27963,3261,945,14297,-28061,9039,-3415,-8225,20115,29943,4153,-6733,9481,13203,-20319,-24641,7153,10091,31725,-8417,1485,25037,-21469,-19659,-1995,14661,-9025,-3913,-699,-19481,24031,-6605,-17337,-30021,-30829,22645,23373,8423,-513,21873,8921,-18957,-15627,-6537,8577,24535,19651,20773,3061,-19313,-29149,14173,-31463,-19637,-29025,3219,14075,-19781,-15381,-899,20047,14249,16569,20883,15451,28271,6155,30931,18675,28205,12131,-17145,-15439,7445,15237,-32039,6967,18817,-16765,11987,-14065,-12297,17611,20379,12463,12659,24915,27403,-26619,-8309,1297,26669,-32649,31361,-20729,27369,-12115,-11135,10041,-23311,13925,-14657,-14899,-13123,-1229,24377,20311,-17897,-21955,37,2149,-16627,31613,31839,26845,17013,-11001,10361,-7211,-26231,-19857,4487,27189,-16659,-32405,6193,2719,-11339,-3411,10987,-28917,-23887,-16909,6123,13693,31291,-8857,8369,18725,-2017,-20311,-4087,28941,-2955,6209,3607,-2865,-15825,22207,-1127,-11917,32201,16357,-16589,15153,5553,-8679,-16299,31519,17039,32681,-2175,-13587,-481,-28889,2365,22825,30387,-3991,3023,-13395,21537,3049,-4363,-29247,-2091,31809,30299,22555,10701,22301,-4489,-18811,18907,-28141,-28909,-14463,-19369,16967,7323,-25433,25173,-23853,-27011,-31455,-19475,13775,32353,-12223,7983,20943,-2429,-21695,2211,-27441,20361,-21823,-18497,-11937,21385,-2257,-18007,-8773,-25097,14405,21463,-2687,-10361,24847,5653,21101,-26493,29677,-22555,-145,-17719,30619,13335,-13563,-30317,-27025,-21291,31191,13469,9837,-26939,-3437,31177,-19717,21441,-14335,-26335,2131,10917,19931,29693,-8925,3401,-13185,22431,-19871,-13257,4143,30067,-22745,-17037,9899,17713,-28995,24169,16155,8637,-7361,-8339,4883,10827,17559,4927,7447,-27237,29495,7967,12915,-2675,-27005,-5811,-28177,28517,6787,29071,10043,-27383,-14401,15003,12709,-6809,-31625,-8555,-19297,-9627,-18429,13435,16705,-12019,23731,-3017,-1777,6799,21551,379,-13381,12879,-17601,-6127,26959,30329,-2509,-31243,7371,18213,-18319,-23347,2387,10819,-29029,-399,-32703,29817,-12937,7257,-5593,24903,-23689,-32673,21717,24921,17179,-17155,4299,26999,-11349,23037,-9911,-18671,10551,-29679,18911,-5093,-18785,-7489,5637,-29227,-609,-14307,30611,18145,17515,-4533,9389,-6747,-31979,18311,-19555,-8389,-30665,10017,32129,27453,13067,61,17407,-403,16341,26591,24711,-3471,-23135,-29419,4937,-17009,-30605,-29255,4975,-26585,-15493,-32651,1855,-27667,-2971,-26845,-13339,-8577,17143,31655,13939,-15745,-20169,-251,-26375,29199,12187,4735,7785,11241,-25511,11937,23115,-16447,-25473,-20875,-8571,-17611,2851,3075,29979,21127,-12513,-14633,-19747,-32575,-32221,18965,-17293,-14659,15519,-30217,28863,3675,17691,-12427,-28367,-12303,18819,16933,31369,-28425,2841,9291,24079,7573,-2437,-31939,-25505,29313,-28331,6879,-8929,2499,-10443,-30111,13359,-641,32687,-12013,-981,10215,20639,-24267,4869,16939,10199,19639,23025,-28561,-4183,-18391,17023,-30513,8583,1887,-3843,-1939,-23629,-10561,7775,-4545,3509,31999,23179,11125,8013,-24135,-4643,12311,6559,-12151,-28525,11117,-3307,24513,19059,-22575,21309,-12897,8681,6859,2617,-12999,13833,21047,25409,-2423,14435,-13343,-7195,-23159,8189,-18817,-15305,32515,-19487,-8021,-17667,-17483,1043,2515,-9371,23967,16667,-1165,3619,-17703,28525,20249,201,13069,28665,25633,-25305,5537,-6545,11061,-18391,19003,17711,-15235,27415,27713,10019,15181,16819,13289,-10143,24349,28539,-7869,-25027,31729,17987,-28455,-6367,5537,-11427,3971,7361,26171,-9245,32441,-26173,20293,-4561,-7209,-19635,-7973,-7465,18325,-30527,-22033,-3465,13443,-30089,19301,-9577,-19985,23393,15439,29469,-28551,29171,-10457,-19481,-21209,-27105,-31007,26891,4169,8037,-11925,29337,25713,17187,-29731,-1459,26105,-9863,-32711,-29383,22195,-5321,2437,-31525,-23575,28767,9679,13865,-20405,-28377,5347,-2381,1825,-19941,-7829,-8553,-465,25855,-31209,213,22071,8001,-22789,9889,1293,18881,-581,-6731,-31491,-29743,-24325,24825,21767,7169,29541,-19473,-30963,-11479,-27073,-29485,-6555,-7727,9173,18515,21845,24173,9321,-1707,9095,5707,-24837,-3323,18943,-16535,12503,-31925,22631,-17807,1711,-28549,311,29487,17125,29757,7059,13333,21993,18691,13901,2199,-15485,17043,28791,-24569,-16257,-25513,25311,-2643,-20463,-7021,16607,-18351,19253,-32649,-26053,12447,10557,10749,-26149,-18675,29795,-87,26019,-11103,26517,24985,14111,-22571,8617,-7967,-23749,-5867,-1123,-17779,8113,25899,-4075,-32589,-21475,14835,-27007,-30015,11159,-21995,-3591,-24583,16403,32745,31153,-29345,6649,3249,-17079,-14167,13963,-3599,-23791,-365,-1979,3187,661,24467,31575,-19203,6569,-29881,32759,18439,-23483,31513,-31061,-31949,4853,6817,14065,-10635,1251,-13299,17641,7853,-9185,-1189,-1939,25429,12281,19507,-13425,-6159,27815,2975,-23543,-18007,-24743,-4921,-4135,22173,12159,7189,-29429,18059,4575,4131,22849,-26985,15061,16895,-10991,-4681,14069,-10553,11435,26763,14101,10721,12083,-27013,-9889,32401,12343,16545,-12497,-24469,24431,-25807,20007,-29455,31599,-11613,21739,-721,-15353,16221,881,-13727,11537,32727,-11981,3273,22761,15921,-8107,-26879,-30161,-17119,32241,25619,-10861,-30115,27647,17077,28665,21633,901,-24261,-12775,11969,32413,31659,10619,19231,-25047,16855,17263,12769,-19797,23751,-14889,27511,27047,25433,29437,22677,-32267,20637,18973,-31375,23719,677,-32363,-9675,-21243,-18119,-16875,-2383,-9857,-22313,30021,12807,10061,10561,-749,-32663,167,-24773,-24547,26489,7997,-10541,19365,-5505,-16387,13405,-28143,-5691,16653,31937,21611,9883,25181,-2093,-6385,15589,-20797,-8917,-15569,-19805,28935,17669,26549,-14221,-30793,21329,-15567,-24223,31741,13095,10149,21429,-19217,10611,18489,-26863,32101,20143,-12469,10331,20935,-22913,23407,-16337,-12733,7623,-17643,-14001,10213,7021,11133,-171,-23669,-22759,-18721,17677,1775,-4109,-20427,-6809,-32093,11145,6861,31553,-6515,-3137,29117,3257,13263,25127,-917,28497,9857,-29807,9551,11099,-951,-6477,-32563,-23831,3243,-28829,9419,-27477,-19097,9079,22831,6477,-155,-5867,7143,-9517,-1941,-5371,5253,-20521,-4101,11003,31939,-5105,29933,-25069,29139,-9295,-3609,13589,4007,-24143,-333,27049,-14527,12215,22191,-18317,10151,2127,17033,-5605,5749,10705,2161,-12125,20813,-27715,-21777,-15687,-32103,19993,4365,2699,-10041,-9859,3601,27987,12811,22815,-2779,-11185,26153,3991,21839,30709,-23873,16129,28055,-21685,7313,30763,16837,-6485,-11733,-11473,-30751,-32027,-7661,1699,17569,-19113,8781,-16341,-16671,12541,15353,10967,19711,-8757,-4615,6069,17129,-28491,-1677,-12929,-3933,7231,16801,31143,-22605,29035,4679,-24015,515,-6457,-2029,32509,3337,23171,16357,29981,-24803,-27659,18279,-20795,30477,-14069,31179,-1167,-31271,219,9099,6057,2917,-18367,17985,19505,10169,-30477,-29175,25525,8695,-29049,-26477,28937,10001,-15633,-20535,23283,12499,11521,19533,23555,-14489,5031,-13213,19705,21901,-14627,15641,21301,-18141,21921,-7983,-26583,16579,28057,17923,-31987,23411,-7253,29443,-26147,-881,-6873,14031,22679,8149,-16011,-32759,4519,31835,28319,-18611,-16397,-26789,25761,31011,825,-27473,719,22405,-24245,4411,-13525,-5985,-12871,-17543,-20625,10671,-22225,-15377,-7819,20499,2493,21709,27903,-21453,-23391,4909,-14029,3567,-22001,-28265,-24433,-24207,-22557,-10427,-13659,-10005,-23311,26753,4101,31731,31073,-24843,27331,5503,-9901,-27179,26781,-3031,28009,16355,17867,-19729,11811,-2437,-18315,-22999,-26773,-20239,71,5021,-20691,-31187,-20253,29573,-2889,-15999,-16437,21233,16861,-16963,24299,-28755,-4691,-20579,-1337,6219,-29441,7915,29523,4513,26067,11821,14399,-21815,-11623,-6163,24753,-5339,31047,-3979,17469,-7509,6281,-25337,-17981,27027,14161,32185,6717,20961,18523,27851,24175,-20513,3691,20581,-12747,31645,17059,-1921,10675,-22609,-25167,10351,17243,-9049,3921,23739,-11729,-24403,20277,-6269,-2757,-19705,10497,-19773,-9365,-16475,-18455,-4493,-25151,-23909,5609,-93,2673,-31735,-12927,28915,29359,-51,-18159,-17511,-20699,2873,-31171,-29741,20185,23565,-31613,14843,-31169,13107,6971,25153,-25671,8799,-26621,23217,9415,31775,-13925,18437,10283,1983,21781,-18133,30889,-14939,17765,-2809,26195,-5301,9863,30785,-8763,-27175,-29049,-15857,12749,30933,1949,-19801,22489,22517,28015,32029,2965,-2855,-24145,-26357,12149,23873,18263,-17761,-17603,7279,28621,-15711,-26415,12603,-1531,-9745,-24503,-21349,-26917,-29625,10135,-1,-17699,-11255,12697,11267,-32649,-29691,3989,-6755,-32767,9845,27431,-18341,8675,30693,7811,-10427,-23495,22751,26281,-8213,12141,-32513,19629,2113,-29499,31345,28153,-17203,-903,-2333,12689,12383,-23535,4643,27413,8469,-26739,26787,-13999,-18973,3843,10713,4821,20983,4671,-18401,-17475,5509,-20439,6359,27195,12675,17103,-8039,-12813,-27113,-31791,-17821,6045,1043,18269,11253,-30225,9945,30191,-25847,-16233,29091,-27695,1969,-9881,-11095,21149,-30747,13899,11223,12667,11591,18683,25979,17479,21557,28143,28851,6151,26277,-239,-24899,13617,13485,19303,19209,-633,12743,3733,-3581,13811,-17687,-15405,-9507,29213,-8289,-17571,-21073,23211,-29491,11927,23889,28683,-19737,-4375,-29945,9391,-941,25443,-1569,10647,17325,-4515,-22881,-28837,24569,-767,-9113,-30177,-20277,-28111,-30277,3509,-20517,-14237,28367,-22111,17313,7425,11811,-20539,23419,4615,29645,-17233,17991,-17629,-31991,7607,-27881,-31953,12707,32499,-26497,-32603,-29599,-8785,-21057,-21453,-8825,23165,-18987,22427,-22575,23113,-29285,23067,-23865,20647,6559,-18741,-28361,9991,13935,24941,6763,14831,17779,13301,12985,-8521,-27631,-28907,1875,29233,-13131,2341,20575,-21487,6629,-13971,30745,-30083,-31563,-3673,-18239,20493,11769,-1737,7809,15489,8951,24225,28195,-12965,-6431,-26899,4807,30189,8639,15979,-24159,-22917,32643,24499,2091,-4853,143,-31959,16809,-10315,-31417,32567,9817,25899,-1827,28011,-15909,-8791,19987,-6751,-32245,10815,22231,12315,19031,-22291,5859,12157,-27249,20617,26253,-29617,-8249,7545,-17665,11765,14505,-3729,19535,31651,-10497,-13397,-21401,-2229,10947,18479,-15695,-22267,-1235,9685,-11351,-18321,-6253,13967,-30693,17211,-9325,22185,27545,-14277,20989,-18777,19221,26089,-23511,15567,19863,-13973,24703,1691,31959,2975,-18111,-1739,-393,-3465,491,-29225,31595,-23279,-22383,-29967,8115,-18267,-4351,-14677,32469,-10337,-23163,30655,23149,-11013,12185,-19337,-22559,22737,-14149,-11965,-3853,-12841,29721,17251,-4749,-11255,18017,22959,-7563,13595,25551,-18175,26195,-22531,26319,27535,28337,21989,3983,25443,6037,-8659,-7123,-18837,-26935,-18041,3053,-29357,-11361,2305,1731,-31727,-16115,-15863,-31261,15507,-27641,-11357,20859,25145,32585,-31069,-7799,29073,7035,5951,7461,22885,-14267,-14903,-24085,-5939,24365,25863,-20313,14161,-27635,28405,-15523,-23257,29621,-27903,-15465,-25607,-21233,18635,-19921,-28919,-4939,19413,14263,31201,-15591,1371,7357,-20817,10223,30737,-11309,24375,13337,-3637,12333,-11965,-4513,7885,-18175,-25915,-22425,24307,-27041,-25241,-26723,29727,-21481,-21263,29779,3813,28579,7007,-22955,26533,29791,10601,-30459,-4517,7303,29455,2207,-879,26991,-225,12285,32723,-18839,18375,12433,-30885,-1485,-12159,31093,3747,-7859,6345,-11989,2363,-22999,-25255,-23043,21365,19993,5047,-889,-12983,-9553,-23895,-23411,-15411,15611,27643,-1907,29939,-7557,-31643,29459,-17059,-16555,3721,-6051,3567,24221,-31897,20235,10479,20019,-4407,21401,12871,-17161,-29671,19127,-9129,31065,-12577,20917,14625,-18423,-19001,-7057,609,-455,-11593,23405,7389,-15337,30125,-14249,21661,8893,23547,-8505,-32147,1101,16243,-30959,-13665,-3235,7801,15495,32529,527,-12443,-26647,-3457,-231,-19723,-14791,29357,-22481,3229,5873,5195,97,-28619,6353,-10585,693,-22379,9611,24167,-15627,8499,19181,-19659,5709,-5157,3553,-8831,10043,30781,-1517,29311,-15239,-24299,-17643,-1347,29893,26321,-921,28223,-13115,22117,-21979,-8477,-15059,-19625,-17759,31005,31023,11503,-8659,5183,-11125,-27323,-27787,17279,16957,-25221,-18665,4219,-30329,-32575,-23961,-19301,-15739,22065,29697,-8085,6159,11295,22187,2585,-8643,847,-1043,2767,31345,25419,-6281,7933,18119,-25571,-27891,-841,5219,8327,5601,19197,-2731,26413,-32093,14093,-5189,12429,19939,15249,-27277,24121,-2683,-24865,-17603,2475,-18555,17827,-13297,23585,-23409,21333,-17243,-16863,8191,28475,22265,-10453,-217,13991,5317,-30859,27261,15911,9841,-28949,-28815,-1773,-12371,13983,-1881,20257,-11663,27715,-20135,6743,11703,17355,-17855,-10937,-18727,307,-31319,26489,26101,30499,25253,-1809,-15099,24183,673,29055,1359,31003,2333,-3167,20063,12497,-11077,407,-6543,-28087,27381,-6909,-25625,-5733,22003,-30207,-621,18131,-22065,-19651,11905,-18229,-4681,7001,-973,27651,19153,-25093,30675,-12093,31081,-14023,-29037,-15551,-22543,29155,10079,-28537,18227,-31163,29761,16231,-26013,-30145,-7375,32087,-1851,9265,-22405,-18617,12337,-31847,15805,20029,-24277,-16441,28437,-9225,963,30619,-30041,23397,29025,-17565,-16217,-17579,-27525,-14107,-8325,-25207,9765,383,-9103,21693,12731,-25521,32185,-8291,25729,-31763,-8947,4375,-18203,31705,3509,-5679,28445,-25819,21511,18737,2653,18025,-26175,-15663,-25867,-4295,32211,-15471,-1881,17291,26349,17599,15489,11501,24611,19653,13803,-11759,16685,-1365,-14677,-26637,-30349,26453,12353,3789,17457,-10279,-26521,-2823,-13913,-26271,11941,17095,8577,-30037,-31099,7465,20795,439,9891,-22687,14197,-24697,-12211,16745,11893,5867,-23563,-28287,3831,1447,-14517,-21107,-13889,-3825,-13085,5295,-27935,-19059,-19205,13895,21001,-9707,5105,-7345,-12923,28345,10209,-18025,-12631,-28583,17933,-15599,13647,-6013,29155,7617,20625,8401,30309,-19387,30313,-10751,-21741,-3669,-6657,-29799,30289,-9475,-12821,-24519,31641,25905,23727,-25043,-1753,-5325,2425,-31733,19823,-13979,-24521,6777,-27861,24355,-18473,-3255,-239,23661,-10933,-20183,-12465,-11231,20781,13489,22955,-3179,-25253,22633,10529,14799,16201,-32293,-14791,20867,-27851,1677,-1881,16299,523,-4727,13565,-12867,-5999,20683,18761,4019,-28931,18753,14731,-32337,-21335,581,-16493,3597,24777,20793,21129,-30207,-28227,-31569,-18479,-14805,3317,-20869,-10081,-28103,14071,29241,3927,4569,27541,2671,569,-17529,18587,27737,4945,-13425,-12701,26007,-13873,-23525,13997,23599,-14631,-22301,-29223,20201,-14831,23349,-22895,2189,3471,-2405,-17331,1577,1597,8249,3931,3617,17297,-26467,-9349,12107,-2131,9187,-20709,-15683,-30699,-11275,9149,19955,28181,5819,2359,-14633,-7431,-9387,22787,-4081,673,13457,-11463,-15751,1733,-2149,-30255,-31661,-8121,-5033,-2983,-7227,29263,26699,15501,5945,-24695,14101,-7801,14635,-4981,-30527,-17255,23145,27807,21331,-29221,-21125,-2445,-22237,-28775,3191,17673,21497,7443,-14645,-18023,17917,-2981,8299,-2371,-11473,7691,27671,19579,13673,28643,-10077,9389,-15823,-3221,-10273,-7371,-29115,3229,-19769,-1371,17629,-12543,-4479,12643,4065,32495,26353,21767,-2707,28021,731,19787,21373,5887,-25433,141,-21547,-15801,11995,-4439,30747,25367,30359,-19519,-15505,24709,-31843,7083,14435,569,-26893,-4603,6061,-2711,-26445,31933,-29467,28443,26595,30151,9579,20411,-29073,26583,20489,-28379,-9625,7375,26035,-14347,22239,845,-21859,-1591,-32563,29375,9447,20929,7331,-5121,24095,18353,-13217,11261,-9843,18843,24789,7195,-4851,-12631,9627,-26347,-7311,-24741,-17455,25837,-12169,-13309,-25415,-19761,-24183,-29141,10299,-10547,-14719,7905,4053,22369,25337,-14145,3969,-21851,-21977,23447,5031,-10315,32059,-32487,9833,24481,29127,-31111,-5233,-6365,-25609,2603,8561,14923,-10201,27227,-19961,29051,6275,18677,-29243,647,-25435,-10329,-18227,22481,14191,5729,4867,7365,31237,-6297,-12319,21799,12261,29059,-30515,-16397,22891,28083,-2811,-21077,13939,-15493,9551,15911,22025,-32669,31191,8133,-15565,1755,-25543,6435,-8733,-5109,-29383,-8019,27677,-26577,-12083,-5203,13773,-7177,21475,24591,-25391,8173,-19435,23081,10251,-25165,-11783,-26467,-5409,-22409,-30961,32143,26339,-12769,-4699,-8735,32413,-25209,32307,16079,-31995,23571,-27597,895,7687,4927,26823,-20485,-3125,-29647,-29817,-27501,-13605,25149,22961,21539,-22179,28565,-30727,-25377,26241,-18801,13381,-18973,-12423,-2053,4797,4315,32073,19953,-6453,-25883,-31469,3317,11835,-1257,-31529,-28761,31625,17265,-19871,-25501,-26309,25015,24971,-5097,-32737,5249,-22123,10951,29729,1291,-11679,-27845,-21929,-15161,-21245,25141,20935,-30427,-26761,-23333,32673,9295,27301,-21179,9533,-14851,-13871,30077,14929,-21475,19795,10727,-1399,-3859,-4897,-24663,26553,-10779,16909,9935,-8729,19629,-553,-3409,-26381,-11479,-3527,3625,31031,8763,-7501,2747,691,749,-26061,-5195,-28269,-4293,-16571,3353,-29337,-20023,-23227,-5669,-12609,16703,-29179,15681,10189,-123,16039,11367,-3935,-22199,-25029,-10365,20349,16971,12667,13991,-16357,-8275,19049,9625,-3967,-28703,-32643,-11215,27815,1723,-29031,19177,3765,28841,29983,-32607,5031,-3461,-2257,9633,11433,-21191,-2743,5793,15181,-1169,2687,719,3459,-16011,-15577,-18587,1291,-21613,-3195,6651,-24057,2619,-27387,10441,18605,-1385,-31985,-11119,5605,18335,5517,-19625,-30143,-2157,23623,15301,4709,28421,-16397,-21035,16191,23915,4397,15019,-17495,11957,32255,-14879,3139,-12977,-22591,10715,-27239,157,-6749,4025,16667,15493,521,-31201,1023,-619,9211,4419,-4795,-6519,-23917,5339,-941,28203,-31599,-28607,22507,-20573,28331,-25363,-771,-5003,-27915,26031,-24165,21865,-32675,-24661,-3653,-6863,-10395,3631,-12543,-15049,21669,-13633,11487,-26073,-12959,27275,-19357,25659,14157,-17575,28693,16193,-32405,-7839,10983,30497,18373,-22541,-10787,32427,217,-29899,741,-9133,-24057,-5515,25741,16967,6081,19037,-11845,-19483,19079,-23671,-9511,23433,-26451,-9393,3067,21755,1755,293,-22507,-19213,8467,2449,-9707,3909,671,-1601,26329,13749,-7001,3419,-14911,31137,8089,32631,7199,-12927,30113,-26953,22127,-21563,-16757,-3025,-7011,-21399,-19445,-12063,-10685,23255,-30763,16401,2157,-2863,-31611,-27291,26857,-21599,12061,-15861,-16691,23377,5309,-30433,-15185,15279,5361,-16293,24325,231,-14097,15031,-21607,-27693,-20917,5557,-22437,-24737,-26617,29455,-7599,7577,-413,4241,13805,14327,17465,4317,-18235,8863,-13033,6085,16253,4785,-16575,-15805,7339,-9539,8207,-22421,-17429,-5339,-22239,4041,7973,29529,-27689,23509,9899,-19539,-12173,-2787,8657,-1127,-17359,457,2145,-4743,6791,9615,-14993,-21265,-11443,6755,-4907,31359,5329,14231,25211,29277,8157,-13525,18511,-5451,-20519,23391,-26651,-4415,-28235,-14373,-11151,2363,459,15223,-16607,-14909,22881,-17205,31317,21101,7651,-3565,22497,15321,-14655,-32235,-4467,15451,-28871,-27635,12941,-23871,-24021,15285,-27755,-19225,7863,-29683,9117,-10761,13373,31601,1907,-13149,-32709,15849,-31149,-225,-4347,-17769,28307,16817,-29607,-20819,20999,15185,-7077,-2191,-6049,27777,-25501,-9011,-7323,28661,17947,-21373,8881,25115,-5487,-15543,22393,-27533,29523,30445,-12005,-11151,7323,-10101,11805,28489,6483,30507,-25435,27577,28765,-22127,1781,-27513,-10635,3547,28093,-26017,-27579,-445,-11519,32443,20161,2543,3171,-2165,19287,-371,-16017,-7761,8755,1043,24529,-18223,29973,28525,27367,14509,-1385,-21845,4543,-7107,-8153,-11341,5617,-31587,-15413,-20195,15903,9235,16811,17875,6587,5025,31349,22813,26669,6137,-31469,23259,-6819,-4051,-21587,-20815,32215,-29731,-21467,24399,12917,31227,24067,11713,-12949,-7713,-31145,9159,-13769,-16131,-5547,6537,8881,-30379,-15171,-17235,27395,32671,-27749,23785,-26631,3735,-18009,-6617,-16015,-27435,-9961,-1507,32319,11141,8579,1555,30407,-8641,27101,17819,-18149,20963,13763,13497,18869,-20809,7439,-28241,4915,31739,27011,-13287,-3895,-14317,-8595,-27999,-7943,-32235,-7917,-31939,23465,-19823,-12777,-5489,13851,12395,-24323,-2477,-20641,-3111,4339,19909,-24831,-18435,-7973,1399,-23119,-22219,-31849,-15513,31243,-25363,7433,8759,-501,27745,20235,1557,4857,27691,-23011,11635,-18079,10427,-15647,-11769,-29069,26603,-29361,-16383,19819,-20219,14925,-20013,4941,-4953,-28207,-31015,-21765,-24771,-5943,26955,-20795,-30271,19395,-14113,6895,20099,21657,10433,16905,15633,17945,7591,32191,-18103,10609,30067,-29379,19577,25965,-24193,13981,8633,-18061,1093,12363,-24893,31139,-31821,-17617,-7541,-27041,-5743,8703,-29783,-18635,23253,26661,-32355,10299,15667,-4271,-24913,-27039,9199,-11235,21533,12711,-8883,-20451,-5507,31873,9397,-30217,2317,12211,10545,-5627,-21887,23631,29229,-4187,-12197,-26165,-32123,14943,-4917,-13015,159,22899,-25999,1309,-32289,-25027,30125,28157,-15367,-8565,-637,17329,-15473,-27073,-31305,21983,-16383,20181,-29023,-20635,-32661,13701,-32137,-14217,-12765,16457,-31771,-22165,7817,22557,-3539,2613,-16189,-4149,-16933,1437,22925,201,6559,5987,261,-7533,-17335,5839,8229,16203,22235,5419,-16865,-32431,-23483,26097,-16381,-11043,-23203,9669,29067,9217,-28479,-14049,-14313,6875,-9059,-22953,-2749,-3927,-25377,19823,-31607,-12871,-19393,14973,-20025,20305,4845,6219,-24715,24445,7153,-753,24945,7093,-14227,5527,14307,2339,-17507,-9187,-22913,-29107,-2033,-26055,26775,-28845,18629,28211,-15281,-13865,7289,14587,-29049,-26175,-5419,13379,-6135,31887,21119,-6553,1777,26453,-6977,-22173,851,15531,-22041,-11593,-15059,-29773,-9223,-29163,-19359,-14585,6783,10499,29833,-21901,-8325,-31157,3119,30991,-26065,10847,-11155,-13177,19835,-21195,5613,8141,-26559,13553,-25125,14543,30927,15609,7843,14263,-11495,-25321,6781,-2095,-21209,-30623,11639,-2765,-18105,22241,-15859,-18245,24929,18933,-29289,10057,13241,27999,22031,-12789,-26519,-10877,14917,18847,6717,31795,-7413,-11023,-6929,-9037,22949,5539,9421,-3923,-18805,4495,20601,-2163,-5425,31555,-22937,14517,-21213,-23957,-13339,-26125,-19911,29289,32665,8435,241,23897,15809,20907,-21723,-29577,18849,-20171,-17959,-503,-22243,24435,14277,7533,-9039,29401,7547,13833,-27997,-18205,-3871,12973,-9083,5567,17835,-22139,8533,-3465,15627,32587,-6135,21461,-20631,30553,-32471,24693,21569,28361,26789,-9291,6281,-15735,7407,22547,9605,-6959,1209,-325,-24237,-9587,-11803,-10099,-30749,-963,-303,18655,16249,-7395,17887,12845,-6381,32465,-23049,-32461,-11075,-25793,-4735,13787,-21471,27019,16113,-6209,-32277,-11905,25741,13205,17243,-4887,-24869,-9501,14777,-28407,25045,-18451,-24643,-8589,8369,13183,28859,-8955,20031,-11397,-22085,-20737,-28569,-13107,-30643,-11015,-22931,-27809,-8481,32093,18145,7853,-7181,19307,25375,-19003,20139,28055,-17065,17503,31021,-20013,8773,-23379,-19861,6677,-1841,30545,24879,13737,-19259,-24333,28833,22567,16209,-26545,-16885,-29533,27197,-16271,-14931,32385,-30871,-26037,26631,-16395,17337,-1073,30533,3893,9471,-17913,-17607,26099,-1639,14911,-16849,-16231,11399,1813,-24399,23435,-15709,11713,-18907,-21215,-6415,-29979,6563,-7469,23003,3241,4579,17981,15817,10327,17211,-10501,30101,20059,11803,-24937,13247,21359,26447,-22543,7691,10867,-17941,20413,-20787,-13551,25129,28559,20063,3609,-29871,-8049,26913,-14371,19203,-19303,15805,4219,-1491,14095,-29909,20259,-26361,20771,-30361,2971,-30513,18377,-16851,14743,-6901,-11151,-8879,28547,-9673,14313,29433,21355,27879,26577,-14013,-14477,-12251,-19819,-12357,-7433,-31315,-10209,19593,-13119,22307,-7737,-32229,13241,-20495,-29645,2363,-13937,32291,-4743,19523,-19407,28111,8105,19977,-1061,-9517,-1705,19259,-6357,13583,31299,-21615,5299,-31391,16633,-23493,30939,17713,23463,4979,-26211,-15467,3439,-3525,-15327,-8717,-2315,-3331,32451,6737,-22903,-14761,19635,20457,-1529,-22185,10149,27915,8757,-29697,24359,-2321,29339,15309,-17501,-30145,29215,27369,-6775,9075,301,12593,20933,9271,-32301,-14323,29937,-31129,-28405,-9743,933,-6801,-28285,-4895,9665,-24643,-15299,5721,-9101,30279,8967,29075,19289,26019,-15113,2765,3855,32019,31543,20223,5481,17907,11217,-29241,-32147,21403,-6021,-22737,-30169,31207,11829,26441,-101,-26367,-15791,-15981,361,6409,10939,-3525,-28133,-15531,-15297,-11053,-6845,22859,5739,-28875,20069,-10839,5263,25749,29035,17307,23395,-31319,-14087,-15469,-19061,25129,23633,-7491,30537,13741,-23077,20163,-5427,-13275,4159,-31725,-31001,-1115,-13571,31357,-12443,-11311,-4777,-26501,22151,-31803,21471,19069,6837,3419,26007,-18769,7393,-2571,-29845,-31885,-20035,-31901,-29847,-7241,-18835,8081,13377,32029,-1803,29113,2341,-6325,-23155,23435,3017,23613,22975,4935,11037,19955,-25887,-7921,6827,-11947,-2377,8341,8139,20721,2621,8809,-14351,23033,-5329,-6823,-14411,1579,-15541,2067,-1429,18457,11825,-27199,-831,-9211,24663,-15607,-3929,-7239,27631,3427,-14451,-12141,5629,32089,8965,671,-8969,-17701,12041,-4891,20843,13421,-24105,-29299,-17973,20427,26993,-31201,-3895,-21317,-23519,4673,14535,19717,-31179,29339,13919,-22271,7627,-7871,14203,11409,-13847,20827,22071,6929,89,29293,23477,-8511,-12821,-21749,3273,11485,-651,-24479,-13713,3523,17313,4913,-31881,30467,-31911,-1429,21849,11231,10391,32721,-27397,-28023,-5575,-3193,-15991,31485,-30471,13067,-11827,-16657,5563,-27925,-507,-14485,-23525,18239,11639,-24067,-19903,-30201,6601,-10965,-28345,28305,-3693,-25221,-30363,-11865,-4233,9967,-16615,30499,-18403,7297,24997,30563,-13429,-12825,-9831,31731,30255,5323,-17185,29773,9877,-14201,30577,-31309,20201,18597,23187,17607,29651,-7245,-29087,-10705,29523,28045,14415,-26413,-24305,32451,29565,17427,791,23483,16325,-24175,-28161,-16741,15053,24885,-10433,4915,26291,14271,-15891,10411,-17829,5529,-8859,-1457,1423,-28097,-3043,7691,12033,-27519,3065,-17307,15753,-9259,21047,-20527,27297,10907,12707,-31151,-17433,-10429,11159,-18349,-5519,30639,21983,26815,-10663,-3581,30923,32007,-30375,-18573,14723,29277,24609,-19,5161,-27625,-17773,-20199,-26447,12929,-20927,-653,2785,-10773,3371,10963,-27393,28567,8963,-21987,-5355,23171,26009,-8709,23467,-5585,27889,18061,-13259,22309,10147,-2109,-23039,-6549,4959,-19335,9111,9677,-23939,11127,-22655,28771,14637,-15389,5513,28909,-25513,-18727,-10493,-9017,24809,4003,-31559,-1265,26277,-26599,6809,7645,27761,12427,-21839,5585,17267,-4005,30753,-17171,-12697,30801,-869,-17591,26369,22161,1473,21193,8279,4773,-379,25829,-999,22263,-32005,-31735,10921,-20623,-27245,20517,21883,-6747,10793,-6853,29401,-6787,25401,11931,-16759,-15695,25133,13079,13789,21893,-21677,10789,-9397,-5777,24877,-5177,-9465,27239,22309,-3003,30831,-20737,-28223,29915,-12425,-2483,-17353,10103,-27613,2919,8037,6741,24303,24985,30005,763,22311,29229,6179,29861,-6847,-16627,-31495,-30929,-21811,14161,18899,-25159,23853,-3211,5879,15149,-249,4315,9217,-27131,-9073,-14469,-12229,-28023,-17605,-17533,2173,-10381,31423,-32003,25431,-1711,12301,23069,-3209,-8653,22859,25523,15397,-31801,-7373,-1429,5679,3145,28439,11661,32537,14887,-20167,-19367,-6625,31641,31557,2621,9443,-15969,-29721,12201,-361,4623,20471,-8111,-20985,4109,28881,-17213,9897,-11653,6449,-21307,20703,31331,-3831,15673,20803,-20257,-29045,-6769,-7181,103,-2967,4505,10033,-2695,-12263,-20877,25169,28881,-28941,26735,9887,-25919,27473,-26531,-15997,1371,29329,-24269,-30645,-27391,2825,23889,-29633,-11133,-28381,8283,-14639,26101,29303,-23645,-6503,12943,-2895,26047,-17347,-6015,23191,21741,-24587,1781,24871,13685,21867,-23639,29559,30515,-15121,-17505,21969,-14301,2985,13933,1015,-8821,15599,15901,-25469,-16247,15639,-30189,25005,-25885,4859,1695,-32613,-31127,-20523,-27057,-21755,22855,13163,21495,14629,-14767,-29339,20781,18877,-7099,4863,-11993,-23,-7273,21983,23811,10313,-9583,15777,339,-22633,5385,-15973,29433,645,4001,-11911,-3113,11193,30151,5441,-4387,-27721,-28985,27119,-14071,16391,23143,10131,-16771,-9105,-10341,-25749,875,7941,19487,-23607,13283,21691,-28059,-21407,-18937,22661,31441,8465,32717,20549,-23745,14887,-6531,-15197,27655,10173,-24161,18935,-8371,3519,21017,-4487,-14371,17969,23401,679,709,-21493,-25019,26299,-23625,-7215,24937,14037,-9899,4111,8813,10987,19399,-14389,20689,-16393,-20969,-13195,-30799,-2601,-24503,25823,9295,-25519,6815,21927,21901,32103,-13087,21149,-20181,1445,25985,-10181,-18695,4149,-28667,-28917,-31835,2477,-2191,-26833,7737,14183,-1101,-28737,-29213,-7543,2551,477,-11599,17143,29697,8715,-25281,1617,27763,-11121,-8109,-2665,12967,25951,22551,-103,25391,25621,-20581,-16669,-6275,31799,15317,-6115,-32573,3015,13011,21821,-2773,26969,30993,32745,27515,19111,5355,-4793,-16001,17589,28279,26207,1897,22827,1477,-13797,20379,5519,11241,31727,19357,-4887,10869,2339,-27609,-11241,-17253,4297,-31459,-29861,-18105,18525,-32527,-9843,-29955,21281,-16001,14493,30765,-28429,-25115,-28489,25225,-11261,-20739,-9757,23933,-21917,6431,14325,32019,22365,20205,-15021,17725,-15159,3945,-26279,23829,14395,25491,25327,53,14723,-19595,16319,5439,-8543,-695,26149,-7267,-10623,30259,16037,-21527,-15471,-5641,6021,-12121,23795,3441,13413,-30245,14517,-2099,-31347,12083,-22467,-13103,11795,-22077,-19579,-22051,-24241,-11163,-7239,27727,-5705,-26941,32741,-14489,-8327,1851,20687,16395,25353,-21913,6229,24281,-17109,-17273,-21871,-27985,-15293,-8031,10295,-10131,31113,-2771,-4993,9655,-7181,-6187,2515,-10729,12135,10945,-4239,-11775,9495,-6017,23205,-6195,4413,20147,32505,3185,-28041,25373,3433,12251,-5709,24183,-10741,21819,-30439,8631,24003,29679,27675,27141,29363,18689,-11245,-73,-3541,-28745,-4769,32381,16285,15161,-10353,-10725,22799,-3475,-20681,-18445,11583,23639,32141,-15513,3837,1495,6465,-24739,7065,-28953,-31015,-28411,-29493,2775,-26289,-20767,-5123,-10947,6045,-11777,23607,4003,7871,6677,23387,-21079,-9841,-16321,-409,795,-31613,1371,10369,13355,-11399,7947,-15111,20923,32539,-5439,-19923,17615,15651,-22763,-1171,-23161,-23725,19669,16233,-11383,25713,1185,-28353,6007,-31835,-31999,-1689,-15753,-15761,-8457,-24981,16653,-9867,20981,32627,13667,2791,-19253,-6673,25909,-29489,8737,-28055,-13223,24527,-817,22669,-19749,4271,-3791,-32393,9239,28893,-16075,6443,9339,-25453,14603,-24795,811,-15359,32517,-7745,-19769,-11437,29181,-13937,-29695,2463,21701,6823,-23233,6703,-12679,3197,-6121,7479,-16727,-16721,-22511,-20839,-28101,5013,13343,-31615,32399,-3045,-9455,9071,13459,19015,25735,-8343,16469,15165,10913,-32611,30081,9399,987,3767,-18001,23083,-30251,-27471,-22993,-4383,-20445,26151,-23975,-10437,-11691,23679,-31835,1415,27541,-1551,-13435,21147,19645,5573,-3503,25083,23281,25621,-26719,-32675,-11813,23623,4943,26419,30997,25761,24847,-4693,13423,2385,31435,-16997,-26803,-10505,-15343,-13435,2447,19691,-2661,6821,10255,-7579,6371,-32383,-21289,-1175,32191,-23915,-27809,-3979,8415,-1285,9875,-31375,20863,22599,-14121,11215,10639,7919,-19399,-20501,11049,27531,23037,3029,-21197,-26575,13583,4687,-19629,-16835,17,6091,-18011,-31775,-19949,25211,-26189,13845,21371,-27227,9023,-9455,-10305,-19153,-31385,-26821,-4819,-1755,-7483,-22445,-20697,-15637,28503,30443,12235,-26803,-28071,30479,-29025,-12341,32101,25447,-14487,23663,19867,-4533,11547,9501,-26999,23715,-31415,-12167,26327,30003,-25497,-17221,13705,-21877,20045,26485,7141,21283,15163,21339,19215,-20345,1399,20085,-15155,-1999,3529,-9387,-28315,-7541,-18245,-14061,-15461,25907,-21381,-32447,14549,2373,5933,14565,-297,-25517,-23391,3411,-19949,-20519,26601,-7317,17455,17061,24303,19359,32001,1393,-3375,-693,7341,24655,-16411,-8867,-4041,-32095,-21653,-31049,2119,9303,-29303,28983,-23553,10583,-17245,16035,15989,-31965,-1757,21523,26523,-18511,15751,14385,-1813,-24767,10943,26367,-19507,10199,30031,20113,8389,12309,-27289,24437,-22393,-4579,-27919,-11835,-18185,993,12893,-29515,4153,-14453,-1651,20901,11197,22675,-6713,-3649,-9525,-16811,10209,9291,24793,22787,-31389,27017,-16019,29979,6609,-15497,8103,4283,3869,5735,-17131,9777,-1911,-20377,-6807,-7901,27061,-16977,-24101,-4399,-26207,26063,4051,-27789,2835,-24347,-16589,19193,13623,-15029,-30253,5799,99,4529,25177,-25529,-28271,26545,31381,-9023,-13879,3695,32409,28789,-2147,13869,29471,5947,-21183,-9543,-32071,-26163,-14333,-16533,-9753,-30153,-28389,10995,25745,7965,-27367,24635,-25379,-6165,-24279,2459,23629,29183,16477,-25809,-21129,-11449,-21723,-19251,-13043,-12755,-23175,17081,26463,-25153,10415,-16509,-6323,17233,-28585,-19769,-20825,11287,29775,-13709,-8889,10425,9213,-16889,19579,-535,-27703,4429,-25079,2657,22509,-25343,-1497,-20531,12233,-4993,6995,-8717,6029,-4099,28715,-7745,15773,1427,-21727,-15583,29483,11809,22947,-12391,7133,33,9113,-22477,24709,31153,-31313,-239,-31121,-31267,-2777,26855,19251,-13341,32519,-16445,26257,29571,30565,-18027,27151,3375,21653,-4007,-2277,-2131,21935,20893,-10343,12969,-11589,-12575,-20151,-1947,23563,-19837,31971,1269,10641,-19223,-10905,-15207,-2255,11723,21133,-31199,27267,-23091,-19051,-17299,6133,-11591,-9107,-5887,-6329,-17619,-4219,-27535,605,-19241,703,-10343,2035,-11001,-28215,-23091,-1895,-12675,-10011,8433,30007,20571,-26679,28493,5223,-531,-30329,-19435,-24083,20567,24655,-10923,12289,10465,-25687,-16629,11177,23767,20679,22615,-18249,-17739,26033,15407,8631,15075,-14771,-26183,-20229,-28261,-9003,-5061,49,28405,23733,20089,873,-23939,28481,15423,22615,-22899,-3627,-28299,12825,-105,-19127,11405,-22595,-11043,-14839,17419,-9495,-12649,-4357,-28047,-969,2013,-11301,-24805,7205,-27375,-287,6845,24251,10115,-12567,-15041,28631,24447,28519,-1029,-22677,-4497,26135,9371,9441,14331,-6525,6589,-17667,-2535,-12041,-5825,-21381,26189,2539,9477,16137,-32577,-367,-9139,-5725,-31757,4991,-27265,16757,26505,17789,13195,-6341,22031,-3427,5291,-5217,-12905,1247,-23569,24819,-5241,-16627,-27361,30115,21945,1235,21415,-707,29457,15917,-9167,-883,16773,-31263,3893,11015,-22583,6773,-4251,-25927,19311,22753,8855,-9429,29705,-2035,-13049,-2229,15779,-24181,4841,4047,-18737,11879,5319,-1063,15421,-7237,-7325,13349,13973,5043,8901,-25075,-7223,16107,-10775,12167,12721,659,-23525,23555,-2531,-16465,-1253,17685,17667,-26787,2417,24709,-10513,-15421,-10117,17541,24841,28987,-21097,-3787,-30541,23909,26329,-2559,16683,20587,-25193,-29981,-22331,-27969,-28207,-30431,6213,-677,-4203,-23927,27545,-1261,31867,30497,-5481,-2291,25393,8901,-30679,-1901,869,-30045,15489,18609,6203,-18163,-17989,24653,24383,-8099,-12817,-25961,-27763,-26741,-16961,-16737,21765,-22215,-22879,4845,30241,-26883,27203,23855,-17015,-589,-27265,29393,-2005,23867,-32373,10281,-25251,-4005,-26743,4367,-6733,-1559,-1173,2687,-23687,-11329,18117,-6831,-827,-10039,3417,11381,-14285,17789,6135,10095,-21409,11141,457,-17809,12247,-15247,29231,25973,-24219,30179,-31881,-30153,25035,10877,18635,1047,22913,6071,-16501,-8299,26443,8793,-17957,30573,-21841,16707,18873,959,-11919,-4653,13579,30121,-29487,32543,-6661,14369,-24893,24829,22055,17991,-28115,31773,18119,25553,9947,737,-15543,-28555,-23193,-24807,-4393,16371,16257,7057,28657,3225,2319,18449,12225,6375,-20563,-3849,-8811,12243,-31175,-28689,7485,9651,6929,-22027,-30305,-22495,-8099,-7793,9701,31855,-30889,-17757,-21705,11873,-11809,2521,21335,16241,-13593,-29383,2123,29525,-4319,10703,-9179,-5957,9879,13015,-14261,15065,32425,-23411,-9113,-14069,-15311,7327,-6287,9267,20913,17429,-9297,-23229,15027,24873,-1913,-1031,8459,5671,14197,-9529,2869,18541,-15785,-20933,23485,-5709,31617,13977,21029,-16261,-30979,-16925,17727,13673,29947,-3133,24955,-17701,11773,-29,24959,-8381,30285,-11907,4873,-27093,30183,-16723,-953,-32733,14109,-2915,13623,-17171,-10357,27121,19831,-23931,23181,721,-26675,-24551,26033,13575,9645,29635,1159,1515,22945,31347,18283,-13321,22481,11829,31945,17523,31927,-25145,-12071,14327,-10521,-19237,7689,-7157,23383,-27207,16943,-11813,-4019,15791,21045,-6547,-32693,15117,-26217,-11305,25853,665,3059,13361,29837,-25841,-23557,28475,-18489,5815,4445,-6905,-17679,-30001,24681,-26765,23331,16091,30355,-27855,-6427,-28515,-1953,-14815,26509,23643,27519,-27157,881,-20419,8785,-8365,17535,-28273,-12727,32693,26685,32043,-30391,-28135,12189,-25099,-12679,5241,-3069,29209,451,18975,-661,7063,11025,25779,1317,25549,-9881,-31491,-26801,8491,-30739,9785,4081,26257,-29439,32475,17629,-961,20839,17845,19615,29201,-4031,-20075,5355,19595,16131,-29763,-13981,-3323,20925,17877,23657,-22657,1539,14713,-6515,3627,10791,-1789,-7843,-31603,-24919,-9225,1199,6957,-8149,-13451,3185,-21485,28843,-20421,-17325,-21091,-21795,4345,14681,-3697,-32313,-31273,-26599,10447,16103,-20463,-9591,7703,25015,-133,-12767,26081,29449,24247,13745,-9509,-909,-22333,2053,10237,-4303,5043,16493,-23611,23577,12127,-9423,14387,-29587,-28469,-27103,-20729,-28891,9823,-4593,409,-25643,13993,25561,21339,10357,10713,30999,-8037,26955,-15511,-23567,-30015,-13219,-21409,1587,-1041,-11567,24217,29149,7355,9391,6305,-7493,-5003,28191,-17519,-25857,22559,15699,10081,17315,23709,24473,26211,2649,-6721,12293,23367,-29463,-18835,5019,-5011,-31131,-11061,-11545,-9871,3089,-11513,-2749,-4625,-9641,28497,13905,-14881,9079,19323,7687,9569,-11385,-5533,-17299,5971,8233,21897,-31583,1063,21041,1473,24885,-21479,26787,28871,12267,-25227,-8337,-24763,-17517,14203,24001,19953,-3953,7525,-25757,-7387,31877,-10173,-2919,25187,26943,-15681,2387,-12811,14191,-661,7433,17699,-19921,-24631,-27487,10269,-30621,26883,17097,20571,27609,-26193,12359,-29725,9719,15875,14833,-7617,31575,-24493,18871,31139,-31209,-13939,5091,14131,2389,-28175,-18559,18357,28491,28189,26723,22303,26981,14021,29689,3239,32291,1323,8315,237,22459,-20017,10097,28019,30581,-20193,-10391,-2257,-8905,8893,-26929,27857,-12131,-25641,-19945,-31953,-7847,25043,14655,1035,-2173,-31819,30133,-31007,27555,26545,-24147,-15075,24983,-3637,12127,-21223,-21851,-11425,31765,9505,-22821,7181,9937,-71,-22453,-25597,-2477,-19109,-9443,3885,19119,-207,-16397,26253,-13745,-19293,-26957,2275,17039,-28163,-7873,-12889,22815,-18639,27383,-28095,-20871,6863,-12277,-5105,25647,14721,6249,30169,5005,9601,-9027,-20951,28545,16353,30667,-6269,8535,-15283,21137,-13223,-13543,-27981,32749,32499,-20631,-15161,-22883,-731,26531,-20323,-8679,-9805,9435,32125,25249,26105,30987,-18439,1513,-2197,23883,-16351,20225,-28815,-27379,20533,-23587,-19787,2349,10517,-5987,5717,-3471,24545,29989,-3745,13897,-10491,9595,23509,-2895,6365,-1791,-29229,-22605,25495,4327,-20315,-3539,13713,32359,-16575,-9977,11173,4229,9347,5917,27797,-24401,-23789,-3629,-10413,21967,17299,7265,6401,22727,25339,15819,-24269,-7531,30407,9999,-7119,15475,29151,-20997,-10243,-3379,17583,23051,-22449,12129,14695,16899,-8757,-16157,-10833,23827,-23327,3129,8273,13165,17031,-20267,13867,-3879,-1469,12863,-26985,-9583,-89,-16243,16277,18461,4523,-17843,-23751,-19519,6857,19205,9865,-13423,22221,26885,-20455,-16217,-17271,-23971,-6321,-31345,-12551,-16811,18327,-9253,-26989,-3625,6247,-22259,18589,11171,-23215,13977,28019,22861,-5465,14793,-11637,12087,-27459,-31419,-10995,-18043,-29755,-25829,-14641,1365,2445,-28013,32647,32601,-22997,-21571,31739,-10547,-13829,-3665,-15055,-18129,9141,1407,-30025,30163,13501,16113,19815,30917,-18273,25111,-16673,-12169,-8181,-9271,-257,-21387,-19993,-30797,15609,-16795,26567,3677,-1403,2027,-25777,-16573,15037,8969,11827,3337,-25185,-10177,-3503,12477,-29423,-7933,22807,-20905,30135,9497,-25081,21979,-31083,4097,-20777,19207,-31059,7195,2493,-6407,25735,-24033,-1035,15871,14705,1411,-24795,-9147,-11277,-22069,-17637,32089,-31855,1771,-3277,21485,2641,16697,7591,-24751,-9819,-13407,25549,-8509,-23191,22705,-4195,-16461,19859,47,-18251,1785,-21729,-6287,30341,-12305,-11675,27269,29689,-25861,19771,31811,15445,-9431,2385,31267,-17839,-32239,-9101,-29425,12801,-22691,20429,-11177,30113,-16297,2307,24349,13157,12661,-15065,1663,7719,13025,5365,-25525,26587,-29141,17597,-24787,2565,-18873,22259,8555,-11041,1905,29387,22705,-6605,-22755,-18767,-12861,16269,9045,-25835,-5323,29435,-20295,-16673,-21063,-16589,9897,5601,27801,-32457,-20819,24003,25259,-2543,23795,17031,28173,3743,-25203,11055,4211,-21067,-9391,28679,-12913,-4315,10317,-5155,-22757,22881,-11411,12923,-7597,-28181,-29389,31933,-26035,-29269,10553,18881,-7095,24077,21749,-20351,31777,-26401,-8813,-30965,25323,6755,3351,15525,21429,31737,-4113,-20339,-29963,-31747,-2977,30961,4609,-2587,8873,-29909,19759,-3027,21949,-1515,-67,25709,17745,-12243,-8317,-15397,-15413,-8173,-16285,2679,-4395,26367,-3817,-6779,27855,27161,31313,9787,-21075,-10187,21977,12177,-6387,-15319,-3117,-27787,-26989,5147,-31257,17495,-22311,1507,4379,-18135,-20115,-217,6541,32425,23711,-31271,-13195,-15205,15415,3297,12625,26013,-10111,29391,-30313,-22143,-7033,-13273,-22407,23751,9995,-10219,-9875,22321,7795,-4457,-11133,-15873,-21277,13919,-27411,-1559,-2689,5489,20553,-26299,-7621,28407,-8095,29087,24423,18795,-15309,23411,-4647,-4961,-27049,-10057,27409,-2313,27971,7527,-3931,-25597,1737,10471,26085,26965,28955,-30959,11421,-26515,-30739,17893,-21317,-31403,-12493,-29781,901,-15681,11087,-3377,-13499,-25333,-5811,16763,-21837,-30967,-12701,27367,32437,-16337,6231,-17953,15569,24575,14709,8063,-23293,1329,-24677,-5077,-19423,-20311,-1917,15799,28327,-28785,16957,-12419,-6659,-1755,29129,24457,-9459,-3991,14625,-27853,25417,5799,-17915,4415,16937,28957,12119,-6451,8571,6349,-9139,-10629,-16313,-1437,-1875,-4235,-18565,28235,-6755,30867,-12929,-6497,27617,15057,14715,-11869,-23125,-9941,20315,-31073,28639,30057,27145,14691,32309,-3839,-2849,-8219,5703,13151,30899,2305,-5129,-26701,-13125,-20421,23557,20603,32611,3127,-15285,-21607,20147,-7197,13917,9527,14311,-3943,-32485,26807,-16501,-2741,657,25207,-27779,-26355,-16621,8157,-11547,15013,1293,21265,-23471,30279,15897,-5649,-13825,8931,3479,-10637,-14895,-819,-12213,-12209,22753,9613,385,-17909,-4159,10833,9815,-21061,-23899,-18655,-21727,-15523,-10497,-27129,801,9483,-17887,-32457,-28427,8827,-17295,22617,19261,14371,-28175,-14555,-4421,-4307,12743,-22539,20759,-26545,-16183,23689,21461,-17927,4259,-12361,-10555,-25507,299,31131,-31989,1691,25921,20937,14849,-11349,12619,-5133,6827,-26157,29243,-28139,19989,-4303,22139,-21677,31215,5633,25073,13357,20361,30621,-8297,-15071,-27855,-16669,-7419,18841,-691,-27817,-2307,-917,22025,9405,-12715,-1241,-23145,-18313,12983,15099,-5523,14755,-15475,7151,-13235,26775,29669,-30673,12689,-10059,13433,-28837,11913,-6635,2149,-1863,3979,6309,-28117,1971,669,28275,24155,-32415,-19569,-3751,-9569,-16697,-17507,6199,-31395,13389,-29121,-29229,-16629,-12827,-8647,-2355,-20687,5489,-28601,-31389,-22879,22459,-8931,22503,-10709,12403,29863,-23313,-10817,-31129,8357,-1571,-11635,-15,-4935,-1847,5613,22933,18091,-24909,-29813,-15609,31051,3407,16841,-12759,19817,12913,-26799,-10513,-15033,27507,17097,-27707,-16573,28191,-29163,28479,-26725,-2341,17827,29671,23259,-13981,849,-23443,-24033,26023,-14333,-20029,1739,-11613,32125,-15679,-30859,24337,5425,-4389,-8089,12371,16297,-31733,-23075,-3677,-16021,-19027,12539,-19831,-4053,18801,25207,10657,-4565,6211,-12883,-26241,-17075,30439,12193,-19951,-6713,19255,4535,-28445,-29269,30215,-22435,17443,17139,28255,17753,-6997,12923,913,2947,-29159,26887,18135,-31183,-18001,753,-14567,-13637,26105,-10099,-9049,14261,-6489,20519,6357,-11051,-20733,18567,16663,27335,15577,32241,9427,20829,-10745,19389,21735,7527,11707,-4359,-5141,31785,26579,2565,-17165,-16049,-28633,-31955,-16889,15689,9579,-29143,-16535,2953,1059,30343,-16677,-10839,6973,-3939,-24169,26451,-26021,-30667,-24131,6483,31677,-22965,-2847,-24911,-6263,31003,-7277,21503,-30851,30353,24329,24111,27863,-20761,28905,-29243,-4551,-25693,-30273,-15633,18341,18621,22103,30095,8035,19585,32365,3047,21613,-10921,-22071,-29319,21097,22011,-6925,-27665,-8159,30017,4867,6705,12289,28827,-30847,-22203,25337,-6749,-10783,32459,26183,-9087,30685,14809,-18455,-2723,27629,31033,28083,2985,29491,-11817,-7469,907,9075,5333,-19045,-28623,-2757,31881,-655,757,-8733,9411,8083,-29287,-7193,11103,7357,-22309,-31943,27075,-25283,-29355,16463,6011,24295,-16765,-5931,-31931,-17009,21389,5737,-9763,-20349,15813,12989,6389,14951,13685,-24077,-18015,-13347,-25727,-12197,-7929,13391,1287,-14957,-12597,-8039,-1723,-2659,-18061,-27623,-22873,-13803,-28077,-3779,-23313,-3215,20291,30487,-29691,2047,-24131,17499,-14187,19417,19839,-4761,-4667,-3643,14693,-4219,-13241,-19379,-5537,-21457,-31,-939,-8421,11231,18343,-477,15891,-3757,30863,-5671,11977,18211,1691,-25379,1261,19443,13277,-25267,-5575,-14387,-12307,-23679,2441,1419,-12037,-3273,12031,16419,25239,30317,-9223,-24335,-25773,-14475,30139,2141,5251,26389,-21705,25101,28993,-25497,-11157,24929,12315,-4825,20393,-8949,-30587,29419,-23133,10965,-10839,5315,-12467,-31797,3041,-19711,-9441,-27289,535,-171,-18211,31315,-8771,14707,-17299,6615,22091,24537,-27351,11263,21875,7241,2215,-8615,25101,7809,-27909,20153,19355,-15077,2369,11819,2305,-8223,-6977,31273,12679,-23463,7513,-24221,-14547,-7061,-17475,16771,-17575,10975,-30325,-24191,-17769,-13833,-2739,14297,-24109,-6575,26089,-20247,22547,-1615,-23839,-6053,31591,-7889,22311,-15337,23531,-26133,-31921,17757,-28117,-18877,-22491,-9625,-30541,11863,6897,-12167,26055,-16855,9183,-22763,-10321,-25047,24393,-25831,5367,-4093,-1621,2289,-7761,24007,-20533,-28483,3903,-7245,-10253,28205,19683,-6855,-28573,-22667,19373,8065,-4433,-4729,-16885,26553,-24871,16861,-6855,29781,-31477,5761,26027,-13805,10229,16963,22003,-32197,23645,1101,12025,32619,11933,6203,-27803,5123,-32285,-21831,-5381,-12475,16983,18179,11673,25173,-21459,22489,11433,-15443,6693,10303,21211,-19359,-5465,15727,5875,-24213,-8809,-24629,7797,19585,26271,16125,-1115,-25485,-9459,6455,25221,-16765,11385,32215,31937,17833,24575,23007,645,4709,-25987,13043,1657,-16751,-20669,-3361,-15201,22633,10447,-14079,5475,-16563,-4375,-24373,-6111,24291,16119,-6961,32579,17235,-15751,11037,12727,-1673,-7279,-12679,4049,25615,11439,-28663,-21545,22787,-11591,10847,25415,-17793,-31815,16055,12253,18351,-4051,2449,4541,11757,-17949,18103,-21257,-6815,-13591,-5635,-24469,15975,-12375,-7555,21439,14153,-24659,-22275,-8681,-31025,2035,-11063,-22715,14379,31091,22395,23145,28591,20659,7801,32443,2033,15093,29169,23199,15373,-30225,6865,29145,28837,6527,-23337,-32209,31463,-27017,-1541,-29019,14243,-26387,25781,-29281,5655,-6177,31011,2057,-30503,-1641,1277,22083,475,-13449,-30033,31035,-8871,-9353,-13043,-23617,-12611,19367,-22763,9101,-11645,25569,14921,29123,-19465,-32253,-2431,10299,16489,-31009,22541,-7453,6599,25049,-23133,3695,27393,8603,-6371,4717,-31529,-7285,-24415,15487,-21557,15659,-31819,24577,-10415,30095,-15369,15045,14615,-10421,10535,-17979,1139,-2911,1765,19597,-20019,-25637,-4799,-4415,-24911,-7701,-23519,11247,17901,-22943,-32661,30025,-11059,-21099,-12823,6633,7225,-6309,-21773,-24141,31593,24705,-19763,15715,2203,32239,-26989,219,6721,-21111,21301,-13521,-2371,-9193,12939,23245,24547,-2797,24087,6597,-17463,17627,30465,-22251,16485,-20341,-11403,32485,5607,-30051,3285,23885,-32295,2599,17095,11157,-5657,-19069,13551,4653,-4359,-20233,-943,-18417,16975,4071,-7797,18039,-5367,29197,-6493,-26375,-17789,-26713,-15681,-6059,2283,11463,20675,6611,7017,6973,7639,-2279,28715,11209,14395,27291,5511,11501,5677,-18743,-13385,13737,-20655,20957,11211,-1219,-697,9837,-26683,21091,759,-23051,7373,-25953,-1355,28067,-14621,-10059,3515,901,2731,-1235,-5719,-2767,23525,-7259,1073,-8287,15109,31265,-545,-1017,-5653,8527,-10593,-7511,-24613,-28425,-26563,5267,-31829,-19431,27333,-27361,-29953,8721,-32455,10567,-20337,-6715,-26387,-31363,16273,18227,-32465,31435,-15349,5923,-10223,-3271,2841,21905,26725,30989,271,25563,-20117,30315,-28405,-18299,-19605,-7325,24045,19807,30823,-11423,-3583,4237,20593,-7839,15263,18333,-28679,-29487,20367,-4707,-23743,22851,27467,-12611,22363,-2301,-24277,-13255,18585,11029,15203,-3161,18227,-32499,12635,10659,12807,18327,10201,5213,-28457,-25419,-27053,-10255,-21833,22427,18647,13007,22915,27421,26427,13875,5975,11057,-28901,-10497,29303,375,-20717,28777,5431,23227,24577,-2585,-5917,6759,23491,3011,8441,31785,20383,12727,-14325,-18339,17539,-19373,32135,15235,-4923,26201,27923,963,-14041,-8749,-1151,-27133,19201,-3047,23171,1065,-13771,291,25093,23363,-24019,-8069,7381,-4409,3159,-13637,8103,-17169,23561,9129,15609,-24463,-14161,63,-19629,-24381,-3417,25103,-31255,-1553,-27067,20405,-11697,5363,3861,-7505,225,-31161,16543,15309,6655,20455,-21073,-29779,-28201,1399,-28127,21363,-14179,-32543,-30313,-19957,-15087,-19755,22429,5369,-13469,28985,-30901,-9145,-22973,12115,-24801,-393,5951,11325,14637,-15913,-14153,-2091,21555,-15801,18517,-11149,16887,32731,12909,27857,5035,11697,-12727,-30649,-26233,-3533,-12653,-25043,1151,-20597,17977,25743,-11101,-30565,-495,-10785,-16311,-26029,7003,-7481,-5103,7099,-30609,-9533,-9333,27245,14189,-21849,10215,30053,26241,31245,10329,-19885,-3119,-237,10659,30117,-12349,-26811,-1301,-471,-19423,25561,13537,-26225,10625,-8967,1339,17107,17153,-13965,8057,3541,-641,14459,-10999,1067,17795,15371,-26131,4035,-17853,18485,24867,19923,-859,-26423,-525,11783,30133,-12405,28021,-2247,21657,-15045,16375,19647,18821,28577,-5727,-11173,15461,5841,-25113,14189,-6073,16923,-7975,31357,26017,22425,-13831,-11069,10081,20717,-1083,3877,5567,27411,30977,18451,-3597,183,30489,15031,-17579,9769,11965,32001,-7835,29631,-6941,-30311,23647,29809,31785,31667,18915,-25579,-3909,13919,16017,-28441,-25297,-12817,-31921,15649,14005,-20623,-31321,16077,3253,-5129,21561,17347,-21027,20727,24749,3081,-11779,-169,23843,-31183,29997,-8779,25385,167,-24951,-9811,29723,-31995,28583,6401,-29853,-32437,-12491,19491,29781,32585,20407,19573,-29741,3185,26743,14653,-12503,27625,-27603,-15367,-17437,-22963,-12875,2223,-14469,-2207,-28987,-16505,-10569,15691,-8769,-23775,11175,31537,243,3361,-19065,23067,22141,-7717,-21507,9935,-5119,4095,-3813,-4743,13975,-9201,3027,-6213,23699,-32615,-1759,-20031,22587,21621,-8827,-3231,7733,7493,14843,31903,-11887,13161,-8965,21335,8531,-14443,-12869,-31395,-2689,-1473,5423,-31243,5513,-18579,10641,-2995,-11747,-8129,7497,30607,26875,4105,24547,17381,21443,8209,-3471,26059,-15913,32095,9649,-28259,-31855,15363,-2329,24909,12197,-22797,-1823,26131,8055,-32193,-24839,28981,14341,-26863,10883,-26929,27365,-12997,-17115,20239,7955,7691,20537,-8439,16371,-30733,7831,-9247,30279,19685,12373,11713,-12527,417,-24095,9841,-18049,-17149,-27129,8293,-31641,-9567,471,-19841,30901,-5451,-31323,-14647,18247,25225,-7023,-10265,-4647,7113,-865,-13381,2775,20019,-17953,-29811,27227,16173,-19839,-13193,30109,22001,17649,949,20763,29615,-16629,-8031,9239,9217,28769,3653,32035,-30845,4757,-12975,3039,15617,-4069,13639,-12541,-21565,7919,-14079,8431,4103,-137,-16639,20307,-21603,30027,-29565,-23531,-15235,-22995,-25965,-19041,18527,6241,-30923,15597,-15013,-28455,-6021,31317,-26711,17923,8643,-30149,30991,-20177,5753,27739,-23343,-4077,7149,7261,-12301,15607,-29715,-10685,-26053,8069,5993,-12727,-23187,-3383,-1237,21741,16389,-139,-217,2655,28725,-8293,-2961,27721,3759,-23787,16761,8249,27837,-6557,17851,-11787,-25853,-22709,-21627,22659,667,-9053,11789,20029,-25989,-21233,14639,-7529,-23747,-27427,-32331,20093,-3177,-17887,-24731,-5249,-11949,25101,27395,31201,-9675,20269,1289,13869,-24505,10699,31921,5011,-7369,-24439,-7559,18695,7627,-5925,26385,-19903,23981,11107,18801,-23589,19199,24697,-31601,17071,-689,11903,16455,4073,13257,-23699,353,7611,-4555,28457,-12061,-24165,-31485,11897,1843,11675,-14351,14213,-26197,15725,29915,-2597,-7615,-5819,12053,4113,26039,-17517,-29809,5665,-15033,18033,-24483,-13677,1345,-20543,10477,31029,18483,-20947,-28865,-14031,14097,1687,28279,9989,-30079,-26421,-26995,-24649,25137,28793,7303,-14865,28613,-11617,11883,16351,22243,17343,-29017,-1329,5761,11445,2521,-30069,24703,15099,18353,-10791,14027,7037,15991,-10845,-28325,26213,10387,-30173,-15683,30785,-3769,24167,-7487,-23961,-16441,31301,6761,-12871,-22789,29379,-27051,3011,10145,-27191,12289,18913,10939,21071,-26417,-28059,-13611,14219,19811,27551,-18091,-6697,28753,3947,13883,10947,25113,4605,-22317,10615,-2671,-10163,12811,22337,15259,-9859,31359,-717,2905,-27787,16707,30315,23567,-9067,32513,11715,75,1399,-25513,-23425,22831,-14123,-31503,-32013,-32167,12657,2407,18149,7933,25437,8381,2617,5895,-30339,-13185,14677,-1509,-13051,-17571,-29429,13697,30963,25911,-791,-4217,13165,12477,-15287,12579,-27113,-30323,3779,-7925,14021,-31073,-25301,8745,25147,-4737,-15599,-3163,32383,-2015,-3875,-12911,19853,31529,-29141,10765,26667,-24861,2201,22759,24589,9843,-8377,-30081,19817,17565,-32291,27803,17607,5623,115,14733,24329,-2013,18669,27191,11749,-721,-12681,19419,13497,28863,-11283,-10563,-11433,-27695,8061,8097,10165,-18983,13585,-13741,-5231,4555,11815,-24075,16423,24573,-19375,2779,26481,22483,-23447,28031,29343,6099,-20531,6163,-28265,-14117,7773,25561,13917,-12697,-29197,-12739,-17339,4711,1815,30665,8059,-13625,26099,4543,-5533,-28503,-14439,-20775,-27481,-16349,4703,-21071,-6449,-11205,15771,12409,20271,-27515,27647,3725,-9759,9539,3771,2279,13279,24645,16495,77,28343,-12003,-25391,4875,11699,21049,-3057,-773,22971,12671,11473,9223,21077,22225,-26641,23587,-19739,14111,-27409,30609,593,-22965,-9837,-15741,255,4705,17793,-5609,20389,-30337,-28753,-32521,19127,2495,25125,22013,16283,-13479,-14945,-10803,21269,14709,227,-16569,24311,29453,15671,477,-9939,-5381,-26739,21285,-23003,-27747,-22281,-23819,5205,-24539,13801,14901,22803,-8271,25511,-32715,-31105,-22479,-23769,-13977,14309,19869,28271,-4029,25859,31095,-29093,32327,-23143,-29331,14291,-15435,24877,-31323,-18557,28463,-22941,9453,1699,-27245,28861,21115,-10485,-3689,31825,-19947,17387,-10637,-22589,17235,-2897,-15175,11455,-22013,6647,23701,6159,6449,-19589,-10749,21,-2567,31237,-25445,15945,4897,-9149,11595,22939,31467,-1855,-4253,125,-14495,23639,10831,32749,27067,-28279,10007,5719,29559,26743,28859,743,27665,-12353,-11817,16155,-23307,20945,-32343,-2075,-11577,-10947,-305,25065,-2207,-1807,30257,25373,-3635,21833,10507,16573,15601,-23761,10919,1191,19869,-31759,-219,-11945,5483,-12297,1321,-21573,10823,30473,-20137,17983,29935,8507,-28445,-28797,31183,-12151,14699,26699,-8283,-29363,29409,9823,-4495,-8723,27401,-6659,5443,-19077,3243,30731,-9171,-30519,-6999,-4391,-20131,4987,-6387,-13983,-8423,28775,18943,177,22913,-5749,30137,-3361,-12373,-31903,-12351,21191,15029,-8569,19019,13715,-8661,21795,32303,28589,-25617,-9239,32351,26579,15779,27169,-22321,20171,-22153,-28255,13289,3867,-26915,20057,-11431,14467,-13613,25705,7423,15911,5919,-3153,-2777,-26693,-12733,17721,20657,25449,-26149,-19941,-11837,10795,29393,-2553,875,18031,-14601,9965,20279,25907,-18481,5767,-22355,-14065,-11553,-97,-4019,15261,-19289,-8453,-24061,-3431,-9633,21265,31783,-22573,24791,-12239,-4129,-7837,-217,20681,-26411,8763,8585,-26667,-12067,7481,20575,23373,4979,-9995,13081,-15785,-18907,-21655,2797,15281,-27633,-14959,31719,-20631,-25955,28709,18011,7393,-25991,-8423,-13341,28573,-19835,-14857,-26403,23283,3469,29689,-8757,-11543,26981,19679,-27661,-7383,21035,-32219,-20669,-13,-27637,-20151,-20571,14579,-21753,-6451,15791,-16101,-31675,16757,-31753,17467,14317,20577,11285,6733,29863,19351,19783,-28019,55,-11837,-365,12205,-705,-13993,17041,14765,30225,13971,-6191,-13069,5425,10397,-1347,-30499,-21407,-22119,1461,12657,-16617,9551,29677,-21051,12631,12245,4195,26745,-22463,-22257,-17405,5857,-17413,10985,10261,19869,29575,28777,-6625,-11679,25109,20087,18437,-6201,-21703,-20413,-24551,26075,-9063,23017,-26025,11261,-15805,10535,30565,19791,-32317,26653,16595,-13393,4437,-11955,-31325,11725,-10345,-6807,7909,-4345,-31497,4189,-3263,-13235,-32705,25417,13657,1119,-19887,15539,-2051,-9265,-21487,1123,-26403,19031,31007,-17739,12985,-22891,1383,16605,7245,-10431,-14275,-7037,13335,30547,-3873,28971,-3813,-18159,-10327,157,3407,24779,31725,3301,17465,-19867,29619,-10939,-30795,3413,-7571,-11451,-5377,-27873,30969,-2329,-25921,-1319,-26875,6261,15539,1697,8963,-23867,-10991,3937,29105,18035,-8345,32521,25321,-22657,9713,-12759,32363,31443,-3825,-2413,-18057,-3769,-4905,-4633,-22419,5485,-24097,-10511,11377,-28605,-7199,25545,-151,5019,-1549,-30371,-5063,11197,-28771,15767,27689,-1719,-9209,-2317,29973,-13625,-24905,-30483,14047,8081,4949,-13321,23241,-789,-30215,-30917,-31755,-6891,32039,-25083,-8031,-875,5499,9597,1081,-14015,28521,20035,-5837,-23463,10467,-6983,-13247,22351,-8235,-12849,-28333,25667,16165,-22421,-29469,4519,-11423,16371,26919,25143,13441,623,-21761,-14017,6749,-22403,14457,26379,-18137,19329,-13045,13939,27603,1651,18871,-20573,-26299,6969,10313,-11439,13467,30769,-13119,-161,22477,12757,13003,-20489,10791,3831,26407,12877,-2193,29843,-26737,-21751,-29223,13373,22809,30893,-18079,15573,-25467,-28559,-22817,12609,-26971,-13389,2031,-16279,-4177,-16091,-6601,-11095,30547,-2569,-20997,-4265,10021,-25955,24751,-26715,24467,-27769,6883,-16693,-30549,-4265,-20917,24647,1327,18025,25319,11607,27577,19949,3535,12721,14353,-19663,1413,-5249,-23987,12527,23665,-2783,-12759,22097,-7699,16825,-30183,-5179,-20097,24523,8577,14393,9181,14531,15751,15281,-23769,-5965,-1957,-25301,333,19367,-15989,23491,6671,-14257,31757,15621,1391,17967,28215,-23183,10717,30071,-6337,31465,11045,8695,-31657,-17935,12353,-5459,-23589,18297,8743,10723,-3043,25211,16473,-29709,-25035,-51,29377,-12535,-1169,6121,-22513,-11115,27415,-23661,-23059,-1089,-21659,-10441,-8491,11751,-30631,-6875,-24929,13731,21079,-9367,24227,3493,-13857,10013,-23341,-17127,15689,29347,1419,-14627,27599,-8815,9835,-10155,18403,12443,269,-13023,-18965,485,-3855,2831,-16751,-27483,22129,-13387,-18369,-12197,-20091,3195,22979,-13029,19547,-19783,26523,2647,-28263,13491,-21875,-8589,-7189,8773,-5995,11157,22561,-5365,-25453,83,-13967,-11423,24929,-9457,9651,-8831,10835,-28569,-24153,-26013,23597,-19517,24095,9605,18993,-28345,7415,26839,-12427,-18559,13721,-17841,1629,-27095,-18167,-21133,4701,-29321,16239,-21427,20441,10559,-28195,-5599,-28719,16609,16421,-6675,-15425,-13883,9489,32709,-29243,15367,-25239,-2653,-31325,15071,8273,14475,-12269,15723,14947,1969,-29983,13571,24385,-17111,26227,4323,18319,4869,17201,7101,-6371,-12829,-16861,25321,-21949,-12983,19415,-7231,15163,21251,-4471,15509,3329,-17297,-29773,-1841,-23143,24667,-21617,-20343,27579,-31369,-7417,20107,-24593,26835,-5681,-9467,-17869,16359,15997,31757,30727,13349,7713,3465,15707,11039,4191,-32387,-13293,-21077,27483,-7383,9743,28893,-31311,-6563,-23461,-8643,-6239,-22413,-26273,-15199,-21251,-15463,10003,5345,29533,-9347,-31295,-11597,-32123,28651,-21825,-24873,-12901,9971,-3643,28079,13331,-9669,-4497,-21419,-17935,-5829,2205,12255,-26825,4431,18313,17627,20273,-8317,-25021,-9645,13647,-28985,17169,-11753,-16301,5369,-4103,-18551,9731,12309,-27687,2391,-13279,6575,5313,30747,7983,-9281,-19389,23497,-19741,-21395,31703,27645,-27675,15679,-16821,-2941,-29015,-17025,23049,-10971,10125,30677,13315,30255,13557,-19103,29709,15547,-6943,4933,-8479,10495,4383,-14225,-14547,13219,-8583,-23203,14199,20761,26375,-11663,-18439,-9955,-22937,17945,-8199,6581,27127,-25063,14377,-7001,1981,-29759,32177,-20151,1329,32203,-16481,-7455,-12863,-22629,11837,-16873,28449,-9889,-25777,-10823,-6579,14951,7019,-6263,24061,17165,-19733,-14261,25761,21019,-31131,-24017,3131,-32549,5645,-26795,-11137,-30447,3361,-17803,-4265,8319,10589,18299,-13683,-22829,4567,719,17835,-24355,-24649,14479,-3107,-8045,-28521,43,-24125,-29677,-15607,-7811,26971,37,-779,-13301,-17589,3423,-10389,14523,16673,-31493,-13973,28705,18587,-18323,28423,24485,19205,2365,29467,-7993,1835,-28487,8605,-9823,17977,15171,28977,15799,-10663,-6267,22635,-8379,-21727,-29555,6387,-1309,-12893,10869,14593,26939,-32345,17323,31007,7325,-27435,-10591,-18895,7931,-8851,-2733,-27539,-13941,-27525,-26465,22177,-29521,-31757,29259,-11761,-16781,17697,18635,8591,487,-30427,-27895,-12197,-9489,4351,30687,-28961,8509,-12879,-8913,-9637,19969,15907,2469,-18037,-14747,-14813,915,-26019,-21417,3101,12879,-19847,-23627,6845,7639,-5999,17239,657,11245,-18159,-16111,-5647,-26085,6413,-30571,18713,-10587,32581,25229,11187,-29873,-24085,-16371,1619,9045,13435,17251,10971,-26673,21865,28543,-17485,-31097,23227,-25879,-31859,-4709,8111,3367,23019,347,-18785,14999,32235,-11471,-2333,32373,-3173,-319,-15095,23661,-20447,-4643,-10337,-14027,-29465,-3221,-15287,24165,1633,-22181,-2349,5961,-32639,17283,11003,28785,6307,15705,24759,30073,31333,-21785,-8635,4427,13433,-10443,-31359,11299,-26051,-26017,-26607,16863,-19901,-23785,-6453,-2197,12971,27235,-28771,15557,32245,11507,-12259,-30797,-20701,-32517,18705,1529,-639,-7375,7523,6615,11801,4503,23713,23393,23539,-20025,5477,29359,19701,-32361,-25889,14287,-1593,5277,21523,-16647,27707,26897,-22379,18855,22111,-29655,19549,27663,28793,4347,30003,24373,-19351,-14535,-3289,8335,-25587,27095,31141,13003,-17087,-31243,15267,11183,-32191,6807,29837,-11611,-15605,28663,-26879,7695,28415,417,-13421,-27323,-24449,-19253,329,-7459,-28659,-19161,-10177,-26797,-30587,32173,-16917,16821,-8617,-1597,11971,3297,12597,10639,18835,14597,15417,-24945,20001,30139,19451,-2993,3925,18097,9583,28777,11701,-13205,-5445,21913,-27035,-30403,-24903,13351,-28491,-5915,-14783,-25059,-11425,30665,-229,-7971,19989,23979,21723,-16601,29135,-8427,-13621,15987,-5821,-8449,-10507,4887,12693,11457,12647,10621,-22405,-16215,29017,-31131,1117,20981,29709,10037,-5561,23783,3335,11433,479,28159,27081,13089,26079,4367,-23199,5705,1891,-30333,-21027,23685,-2879,-24713,-9465,30543,6649,-11109,30837,24143,-15643,-22345,6127,1797,-11081,-11465,14231,-25153,-3939,-22079,18911,-3995,4763,8225,9087,9379,22571,26877,-28919,19129,-27827,15845,11463,21753,30261,-23995,-17673,30181,-99,18279,30525,27615,13515,-11667,30753,-3617,22937,7777,7191,-15095,32351,-17867,27323,8349,3905,2147,11071,-12567,-17981,21675,31963,-395,-24267,23655,14719,30629,-17255,-29509,-26131,5659,11549,-30899,30525,2953,13873,-30143,18197,-10995,-19823,-1423,-6567,-12977,-14039,1963,18395,10403,-22305,21629,-30465,-26863,-28943,-13817,24821,11855,10737,27463,12173,-30641,24013,27389,-6033,-15907,27949,-16293,11339,-467,-7829,2793,8843,26651,-19705,-3565,-26881,-4117,-9487,-6253,10837,-7335,-28903,11443,25745,21715,-18619,-7355,-23145,-13287,17591,10653,-20511,22549,-28579,9591,-21477,-31893,29037,-9679,31067,20113,763,31719,15969,10663,31131,29159,7513,30067,-3699,77,18865,-8717,17733,-15643,7027,-17271,-31337,-7251,17933,8777,-21419,-12663,16453,26997,-28245,-1925,12255,-3595,-21159,10203,29539,26415,-1799,23787,-421,-6485,-21733,-10611,14875,-10897,-5113,21087,-6679,-10067,-9563,15673,29825,-28041,26871,733,-13179,-18835,-31681,-1443,-22531,9281,-137,-17379,-6851,-26299,131,23857,22261,1525,5501,27325,-16275,2603,8891,-4061,29763,-14013,-13271,29687,25723,31055,1353,-3139,-27051,22709,-8941,-25723,-23211,14047,19299,4589,25973,-3257,-21431,-25279,31985,-23295,30529,6023,-27873,-29337,-9129,16063,30101,-24961,10843,-12455,24433,-7579,-6869,16545,-617,19979,-19445,-9137,17041,5453,8493,-20489,12783,22665,28891,-1997,-10957,-29507,29781,27213,-1363,23287,1351,29021,-20549,-24941,27313,-32185,26835,7553,-4909,-25461,-13173,15541,18905,23665,-3279,187,-4347,-16791,-21685,30327,-28181,17545,-30639,5695,-31219,27701,11215,-5713,-19913,415,-5179,-29551,81,-28233,-10547,-19193,-27199,10553,5083,-31113,-27249,-23373,16435,31639,6355,26517,29765,9667,-6737,-16335,17635,22099,24005,133,-14993,30249,-23949,-6659,6535,-7577,32035,25801,-22657,-5415,6439,-5581,-26595,-1837,-15599,9405,-11295,5091,10639,17309,-6697,20277,8861,21147,3691,22219,21743,10031,-28521,14913,11497,3713,-3509,-8615,31213,-5369,-23987,-2723,22809,-29853,-15667,-28251,-28243,31401,-9515,26275,30765,-19205,21225,8323,13601,-23139,-21987,-3373,-16571,-12357,-29499,-32541,12585,16581,5749,18237,-4689,25581,-31975,21593,-31373,-19339,-249,8611,-6477,-30395,-31781,15569,-12089,-25029,-6407,-31513,1365,3605,7275,-21141,-2355,-15167,-2849,-6603,28249,23425,14379,16513,-23383,-14215,14653,30935,-23455,22669,-22335,-26963,-21697,4879,-8975,705,30255,-6247,-14979,1353,-10595,-20611,-24695,25159,-10769,4853,27581,-273,32555,-23913,-16539,-2883,-30607,-1151,-27545,17925,-4219,-20869,-25831,20235,5667,14283,-10249,17761,-14799,30345,11445,11997,-19541,12143,-13657,10143,6967,23811,8717,16063,18727,-15161,-25069,15941,16995,30433,-20917,28007,-26687,32105,-29837,-12943,-25985,29271,-25045,-27159,29981,-23685,13027,-16847,5329,23911,-6725,-919,14969,-19025,-19715,-13771,-6507,-18481,3431,-15247,-31825,-26891,20269,1147,2539,-10839,2259,-1567,-8999,-3259,-3979,5121,16037,-22719,4593,-7395,12383,-22019,-32641,-18295,-31255,-9591,-313,-19061,26083,1371,20419,-29149,10271,-5771,-12407,-25849,18923,-26721,-11157,-23501,-27621,6361,-5431,3441,10831,16103,-16467,-21983,2531,-18029,-13925,-18599,-5073,31743,-15185,26351,-18377,-15789,-18991,25075,-21247,-11237,119,14957,-11073,8365,-11909,-32609,-4157,-27575,3397,-7305,11937,15845,13165,-6171,20697,-6971,-997,12195,9147,28239,3315,-21815,3253,-15407,29049,-20339,-13817,12687,-22641,20967,3291,-27737,3465,-31061,-8319,9927,-26421,-20653,-2811,-20461,12425,16093,-1013,6307,20059,137,-13599,-2681,21539,-25377,28135,5739,25417,8485,-18247,-4715,-21767,5023,6105,21053,1585,16479,-14291,-24793,29755,-27883,3939,-2135,18763,-5811,14419,-12965,-5089,-20159,-17245,18967,-9771,2691,-19657,-28809,-30309,-30771,17913,-18405,-12613,-3083,7349,-30255,16213,-23893,10823,16679,7565,1629,-31447,-7357,-8023,22457,5775,-11991,-26637,-32601,-20335,-28183,-21861,23113,11429,-1615,25105,20833,28043,-10413,-1039,-30729,-19597,-18221,-21583,-24299,12861,12413,5419,-25019,20799,1853,-14521,-12025,-11905,-17653,-29079,-703,25753,-22977,6825,6195,31291,-4673,31199,1649,-29207,4635,-23291,21343,32177,10053,9769,21837,12853,1055,5979,4267,-10161,-11235,-28569,-6361,-31627,-29287,-12019,-30777,-24785,14451,-19291,14821,-1875,7467,-16295,-28425,-21,-29129,23365,14665,-18355,24723,15923,27445,8627,21147,4763,16583,-29693,-17573,3167,-9683,32679,-7607,-21237,24687,-285,32655,23039,14035,5431,-25041,30351,-22405,-6045,11759,26245,-15995,28221,20919,-12277,26747,27141,22121,6761,28631,20819,-12757,5023,-19379,-26005,17205,19813,11547,12883,-3395,-11577,-9201,-7765,14325,-21623,2941,1161,-27911,31383,22113,-13787,5077,-9777,4879,-7559,3607,-4433,-14479,13697,22807,-20873,23075,31539,8931,19753,-22069,-7523,27187,3333,-25713,7859,13305,-15719,30605,-10423,-15321,-32037,-20559,1735,-24105,-5925,2247,121,-29027,17017,8495,-29823,12133,18861,7323,-8255,-9979,24213,-19787,-2599,5499,-11241,2017,-12535,-9417,-28103,16781,23615,-5055,7757,1939,-12965,-29793,11457,427,26595,7663,-8399,-13361,2707,14819,3089,-6831,1941,23699,-13943,8683,-30899,22105,-9681,-3255,-13229,-6325,-25089,30155,27129,16337,-11921,-26269,-12437,-1015,-22443,5695,19749,-25035,14705,-13733,-27927,22705,-12659,7357,19923,23345,-227,-15547,22161,18253,-18763,-32107,17731,469,-8987,6319,5099,24433,-4683,-11755,-5811,29263,24525,25215,-28275,31977,-16429,18025,-19195,-9257,-23715,-19391,-5187,-27557,13203,-4339,-3483,-32493,20717,-5707,-1119,-13647,-15071,-32079,-4811,-16791,-20995,16355,6785,-20085,-28071,24121,-16279,-12001,9535,9181,8057,6679,-17143,917,-9589,31865,-8925,3505,-6843,-197,11713,-29637,11063,9829,32707,-21293,-19805,17807,-29011,-29643,24141,9495,387,8489,-22259,9753,2453,5065,-26947,-5665,7863,28309,-16751,-6295,19347,-25741,1003,-2541,7625,-32183,-4525,14091,25983,-29329,949,3263,-14603,-15763,7269,-18275,-5893,27383,14955,-4367,-25441,8665,-8281,109,-16933,-831,27959,13441,2091,8459,21531,-15751,28703,-7747,2897,-23981,28917,-7077,-13393,-599,16253,15293,-20101,-26171,-4201,12425,10555,-32245,20601,22499,-23023,16529,-4961,17601,-7151,-20923,-23027,13791,-30493,24729,-26485,28537,21919,-2593,-12081,12771,-11769,21195,17231,-21605,-11909,-15975,-10579,-25201,-30521,4115,16221,-3557,30311,10983,22357,16351,11609,14629,22785,16069,-15889,-18821,-19037,20831,13361,11619,-31785,19339,-23561,23485,-8035,5905,19579,-13029,12139,-15313,28931,19521,18267,-28875,10077,22737,8717,28159,-25919,-18337,-7811,-28929,26983,765,-19321,-24045,21281,25323,-1321,7877,-871,22237,-26417,-23343,1259,32551,-21433,9807,-25183,24837,15867,-11003,-10247,-19553,24765,8827,31513,-23935,32317,-18271,-2299,5303,-18775,-13229,-1307,29579,-29687,25441,20393,-6827,-10705,9419,-30063,-15849,-7357,-16271,-3147,29053,-12739,-24193,13165,7745,4427,14525,-24803,-20053,-18267,-13213,21573,-22419,13277,-28851,-17769,-25529,-15395,-22201,-3245,17949,-5917,1753,-29515,22151,-19431,-21183,17653,2539,4047,-13943,-21957,-18079,-881,701,-32695,-25279,-29347,-26429,-22841,-17711,-26069,-5055,25645,-30049,19225,28009,-2293,27991,8771,13289,871,9539,3917,25657,-13465,-24071,-28993,12161,-13555,-25267,-30621,-30985,6103,-10785,-3439,-12669,-30563,-24367,-14319,21431,13871,21123,10453,26433,-2087,30099,-7001,7527,8327,23759,-413,-6687,-30473,-30405,-12573,25843,23485,-16017,15111,21255,-16615,-13485,-29987,24915,31721,-16555,-12895,31323,-19083,31539,29693,-20447,3635,8207,-15265,5295,-7891,13495,-15537,16985,-8905,-14623,-27427,-5175,-19245,15131,27325,-31669,-4391,-23467,-29207,29197,-17945,-16163,21529,20373,-21849,13487,-21647,10641,-21979,13931,-22533,6361,10045,4831,-13091,-29175,30627,-30207,-28647,-13837,-8043,9151,-18725,23199,20751,-27461,-8457,-4409,-1853,-21777,-9199,-17943,14653,-6025,-25409,7761,3803,3365,-7525,-4587,27291,-25327,13297,-12751,29983,6559,-9789,2173,14479,7607,-19553,10483,13231,9139,-25915,-31203,23903,-5669,-17357,22707,26545,-26365,17277,-22607,-22371,-28505,21923,22265,-14919,-28465,26369,10209,12583,-18389,-27639,-26461,16067,16683,28627,-17467,10953,-5415,-15389,12631,3545,-22481,20933,7627,-13305,20367,1605,31013,-27301,1723,-27921,4715,-3737,27369,-6645,-29551,-4695,-20363,-23441,-15917,29913,13965,-125,-4129,-1567,-14215,5205,-21133,9677,30745,-24939,-27569,10101,4275,-6387,-6403,-17243,-14777,14465,15529,8419,9019,-18175,-26803,-19475,-6103,-16601,21575,8911,-4895,13085,29809,-24141,29429,18843,2881,-17285,-15999,31729,3925,12729,30915,17945,-3521,-9399,19009,-2267,-26911,1303,8137,30865,23167,1733,-3753,5775,-1087,14317,28001,3287,-17421,-2773,-28293,-31643,32519,-7291,-2913,-17077,-307,1429,11725,-22493,1901,22399,28139,21565,23507,-29009,-9789,21475,25069,-12375,5377,-13801,19199,-28213,21001,31817,-22119,16199,-4491,4285,29969,-31495,30867,1297,23887,-23185,-12553,-26907,5887,-31217,-31525,-2989,6729,-23977,-32075,-6553,9883,23487,15445,-24445,26161,-7411,13357,18347,3269,24043,7183,-4537,7333,12429,4235,4703,-1885,21995,-15905,-2219,27093,-5531,24779,-18721,32601,-6013,-12597,-8795,-2917,28937,14119,-16591,-20565,26119,16129,-1301,-1819,18703,11171,-13675,-29289,11489,21233,21081,28093,-15847,-18975,8883,-3995,13359,-11117,-10521,-27655,3675,25233,4819,-16815,17199,-24287,3487,17677,17821,6355,-13055,-15369,8737,20199,-6847,-15457,-20405,-11835,20105,-595,-3063,-1841,-30587,6907,3859,25093,19947,21545,2241,-27167,-23763,22419,24947,-31005,17389,28537,16283,-7451,-17329,30441,-10515,-10631,28229,-22115,4455,14423,-20659,20131,-29557,16619,-5373,-22321,14115,-26521,8965,-5197,-21217,22163,-9811,30793,-15199,-8307,25113,23865,2289,-6723,-17671,-13929,21751,-5687,18469,7137,8613,-8153,-23035,10203,30949,29,8623,12593,-28133,-11805,-393,2437,-25373,19953,11087,12935,14537,-7529,-11789,25231,29147,-17403,27501,-15695,30659,-22885,-25337,-16521,-15141,-21703,-12491,23465,31305,11249,31061,-23169,-11601,-32555,-27981,-17507,-8185,27009,32599,16649,-28569,-11999,25621,28061,27331,18831,25197,785,17493,2719,-2771,-7071,18857,-4375,-5641,-13217,-10969,-25725,5639,6919,24865,-27657,-16223,7437,-9577,32389,32239,-21637,-8961,23285,-25605,-12013,4633,-2065,11191,921,-16747,-935,6947,10017,-4601,-18833,-16391,16447,421,-2575,21105,8331,22445,15385,-32299,32371,-5235,22593,-533,3025,32535,-4445,-15075,28093,30023,27531,30925,-10857,24589,-18597,6673,14803,9999,21279,14443,-13087,14425,6561,18393,2269,-17471,-3877,17127,-2147,19893,-16013,-3797,-6651,-12851,-10281,18409,5503,7989,-24685,-5093,-21603,22849,-29753,12375,-32749,2547,3343,17891,-7069,-22101,-28417,-16847,1269,24563,2415,14997,-5997,-8735,25433,16677,-3347,-28939,1109,6959,16685,-919,14019,-1955,-28671,-5821,-20775,-877,-7951,-11073,-14541,-25969,-20975,-30213,17035,-14909,-1963,28941,14607,-20609,30805,14383,-23383,4161,-19897,-13871,15841,17365,5963,589,-21217,-29655,11189,23341,4759,4533,23059,22097,-8031,18567,27419,-24051,-31083,-4811,-17035,-21427,20617,26877,32637,-20303,-10899,-27825,28435,28023,29005,21135,4555,11689,26597,8341,373,11559,26043,-7985,1389,14063,28047,32095,-10745,6565,-24647,30839,527,-20511,-32505,18057,28173,17721,-29733,28583,7533,-18557,24271,-26765,-27397,31351,18195,-7409,-11367,31371,3551,15767,21833,4935,23455,6385,21041,-18605,30443,16877,523,-13119,16303,6593,25709,15965,7469,26961,21743,-199,-23003,27039,1481,27249,9739,27691,31649,20535,24909,-9241,1983,29343,7633,7617,7181,25639,19095,1675,6585,-19875,-27405,14479,-9153,20303,32061,28369,24357,29901,13101,27755,-8811,-10441,17407,-5449,20455,-31705,-23873,7583,-16681,-14863,5447,-32655,-2689,2861,-27717,25443,-21119,-26235,24085,31543,14915,-4549,17653,3905,31353,-18363,-32183,1051,19257,22121,-217,17031,-27913,16137,24685,27617,-19509,22587,-31939,31681,-13019,-10047,2145,-25575,-19899,15503,-19915,21899,-13235,25295,-10835,-9503,-30845,18367,18923,-13813,-1429,29445,-32171,12097,1643,-4569,-13379,-17053,19363,32397,9937,-2109,-13455,5127,-11275,-2711,32317,3731,-12813,-13525,22643,-1321,7221,-25011,10781,-31147,-19547,-16289,18323,-17949,-22921,13685,32525,25503,12875,-26781,17743,23701,4161,-24431,-8995,-4255,22227,-6825,12505,-16069,-19365,-32033,-17283,-30753,-5961,-13943,-20633,14623,13363,-13979,-27961,-16521,-1681,-16609,-5539,11279,27593,-30373,7397,-14935,18209,-27289,13209,19407,-17719,-18179,-29845,-19271,13663,-9955,-16299,-23863,-5309,-3249,31949,25385,4641,-15707,31737,22369,-14753,-1363,24495,-5003,-23003,17441,-11859,18653,22675,-12139,-30303,4033,9331,-29887,-557,-17013,20757,-5005,15127,4625,4657,9793,3915,-25789,-6769,-23535,-22537,-2109,6029,-12831,479,-19581,-18205,-22311,-7319,-11295,-14543,10413,13343,-20443,2955,-12093,-29565,30977,15153,10297,30183,22603,-30405,-11523,-22793,5403,-25399,-12771,-30553,3067,28201,4075,-19887,-31929,-479,-13809,16191,9487,-14577,19389,29241,-6075,-3191,23649,-6255,-31797,-12489,-8745,-7707,7617,22871,8663,16921,8721,29509,-22397,-21193,-20145,-30317,-28475,-11941,24885,-26109,1123,-26783,-3117,21311,21509,-3253,-24843,13637,-6981,28259,11017,-613,-31161,18947,-7683,24857,30405,19087,1721,7525,-30201,7363,10897,-23501,-30973,6749,-15103,26079,-4387,-20279,11209,16189,-13191,-19481,29553,-14945,4663,29617,15473,14563,-16717,28071,-4017,24123,9993,-19101,17859,2257,-26743,4409,-29371,11813,8701,12787,24525,-23741,17333,-5323,-19823,-5867,8183,31579,-27369,-26093,-43,-31643,19455,14855,27601,-29845,-12093,31093,-12359,-4205,20425,-5921,31519,15455,11695,-6425,1469,18001,12731,-18659,21965,7673,-21447,26751,20867,31239,16599,-13735,20303,-13917,-19289,5989,-8619,-29547,-6595,-27349,-26567,31389,-7367,31413,-11557,-20811,18425,8565,11939,-21835,1189,-11083,-25919,31607,-22399,11743,18503,1227,14533,-21957,-29307,32299,3577,12521,-12671,20751,-16841,-24645,16523,15729,-21043,-9993,-7925,31149,6471,19533,19395,-25371,-9779,-15081,-2615,-5353,6803,-25609,12667,-28853,-1169,-9623,-1801,-15109,-20061,-12069,31257,-6431,15607,10367,-30323,13077,-30957,-27339,25827,9907,-23295,16749,4335,-17923,-49,217,30713,-32005,-28785,-32181,27255,-11631,-18043,22887,26447,-23801,-9845,-4405,2189,2081,15257,-30545,10807,10459,20221,31129,-1699,791,-19071,-13125,-30961,25523,24943,-19919,14009,24539,-3245,20733,1857,13635,-28757,-17607,28371,5373,-11409,-4001,-32145,-11795,-27757,2293,-21065,16639,15953,18629,22653,10503,-30279,17111,5981,31263,-17625,25003,-675,-19347,5967,-7365,-6713,21927,-889,187,-16737,-27521,-14539,14909,7217,-30961,14209,-13857,-13221,-9797,4059,-4601,-28889,-3175,-25647,11181,3867,-24433,-11965,13089,-24331,-9639,-4211,-15587,17637,13477,-4535,-18075,3179,-10025,-28517,1053,-25717,19193,-3457,10991,-25275,-22075,16659,4675,-22457,24823,-2595,21465,-19059,-17113,9783,-19569,4043,-10895,-21017,-10555,-28947,2863,9263,17219,-11699,17969,-7515,28747,9465,5025,-30131,27353,-1427,-23577,7233,-21941,-8013,-18251,-8697,19601,-10321,-28077,7565,-17433,-5357,-12063,9531,3165,30799,26467,-27109,29595,-11257,-18663,-29035,-31091,19785,4829,4941,3343,21287,13005,-13605,-21965,-13559,26543,-109,-10699,-7325,20593,12089,139,-28249,-2975,-20427,-16317,-13127,16213,-17611,-1515,26035,-16713,19165,-6925,-255,16705,423,22107,12023,24015,-32495,3917,17113,24575,16255,29253,18573,-4383,-9757,-23163,29429,7175,-20261,30851,-4979,-28685,-2795,-1555,-1423,-2629,-25061,-28323,5703,21939,7105,-11721,-1673,32349,14907,-19411,22849,-19679,-26803,-26947,-4753,-26243,-24155,-9935,-28455,-3423,7301,11,-18851,12861,14751,-6881,11697,-15597,29285,15225,22279,28931,21119,-15999,-15811,-4479,-9741,-16189,-7891,-5873,24241,-27537,26247,23259,-12663,21505,3877,18443,-21335,-3649,-20111,4365,-1759,-31433,8393,30671,-25281,147,28595,17397,25229,3173,-22227,-28433,-18493,8843,-28993,17957,2533,13039,-11757,17313,7403,25725,28833,11585,-24335,-11917,-21817,26507,-10357,25253,15857,-18333,-3279,-21447,9411,18931,-1839,13737,-285,-17193,19873,-23111,28737,-15003,7267,30845,20069,-14371,3147,-14191,17101,-28615,10885,31377,-15409,-15051,-29853,-11721,-24859,12869,21841,-2233,4779,28227,-7073,-11113,-22665,-8355,2391,7331,-3515,5305,21281,24459,-17479,12585,-30331,14733,20155,-31801,11059,-5233,-31489,6497,-2793,-19971,6017,-5923,-7345,-11247,28151,15045,3423,27745,22375,4095,-1919,-11259,27479,7417,5791,-17011,9465,14979,19273,29483,87,3539,29575,-22277,-25867,-11347,29643,-4985,10225,7605,3695,17297,-12457,-12319,-29875,-273,-21151,-29217,-14131,-18263,-12499,18093,-22037,18889,-6081,24457,5325,-23109,19803,-24661,-4179,-12715,-10831,1423,-22501,-6601,1037,-26351,-30285,-21461,-3563,-1601,19871,-7473,20377,-17713,10971,22351,-17193,15295,26835,9817,26301,6407,-11665,22213,-29137,-2031,-14419,-17177,-17471,9073,-9597,-31925,8959,12709,6517,-8575,32487,28571,9563,18247,27795,10501,-4113,-20737,22147,26885,-27299,-31961,-3995,26663,-22443,-17673,2957,-1789,-16487,20761,8941,-9659,-20071,21633,-7103,-9759,-11247,32025,8459,26609,-1063,-4543,-31581,28825,21627,11989,-22759,-11137,29525,-5335,29847,16397,-8877,13505,14515,-30149,-18349,8475,5339,-15739,19797,-13563,-26877,-3729,18063,6621,535,-4697,10761,-14937,12847,-24963,-9233,1723,-18763,-3785,-13945,-30601,-31249,-32553,267,11569,-10603,-28301,-22737,28261,-29733,19083,-23559,-23629,-13501,9441,-13045,4651,-21857,18325,-32109,-8539,-6245,17661,-3017,-12751,-18269,26043,-17855,-19135,22659,10801,-5437,12153,-14837,-29407,5935,-14553,-27981,-9481,11691,8141,29799,-277,-10655,-1897,17435,3825,32209,21487,13885,-2771,16469,-25615,-19245,2469,-16451,-24815,-9093,-24979,29623,-5639,-29075,-4909,-15667,-23291,18111,-21535,5523,12753,24041,-30519,-27003,-28531,-11899,22611,25033,-18251,-635,-21067,-20227,11513,-25027,7571,20871,-30625,-23131,-25129,-1827,4653,-8605,-11701,5553,863,775,-31589,29209,-24043,-19499,3785,17741,-8597,-169,26505,13453,3235,17053,29445,26261,-14363,10365,125,-28315,-12325,-8607,16685,-4307,18041,28929,-18367,29543,15637,13755,19553,26145,12901,12387,27223,11921,-8087,-25891,-15035,-11219,24159,-10371,-5881,20129,-11621,18597,15263,645,22951,-16717,19813,-5425,-25481,-2093,5931,-26757,-31323,-31965,2395,8311,1953,32135,-581,-20045,-13205,2095,4679,-16953,9939,-11065,8041,11019,-6557,7267,-30285,-20335,26737,1183,8057,16025,32009,-6647,-5391,2495,-31511,16609,32085,29937,14285,22225,29787,11111,28671,-13137,23919,18655,-11405,-15451,19713,10279,-20217,-8327,9419,10207,13545,-15103,-23185,-10627,-31861,25415,-16063,3929,9577,-16041,-14999,17601,-21507,13179,-15279,-32077,29179,9675,-5823,24231,12231,-14701,23559,-15109,-15577,-18403,-1397,27611,-20359,19621,-13019,-10819,-4141,-21749,-2015,-7267,-3697,31781,28033,23959,12265,19717,18893,-10061,14625,18087,16365,-19769,-5529,-15689,23635,12871,-31709,-16975,3807,10945,-26419,30715,-477,-27313,-10819,1013,-24713,-12927,21163,16667,1623,14821,-2883,7605,-2329,31729,-1245,27845,-17977,-30201,12143,-2167,8347,-20451,-2563,16397,-12667,17915,3525,-27909,6743,15721,30721,-24349,-1249,22757,-7009,-1605,17869,-23087,-1301,-1731,2715,-7197,9031,-18231,3621,30325,-15381,-3475,30149,3689,-355,-19919,12113,5193,31299,-20523,25419,-18615,-23773,-2065,4857,-31301,1227,-22503,28219,453,-4667,-17473,28789,-13519,-16005,11043,-6553,10587,5985,28663,-12303,27615,-17245,-10281,2627,26421,-23925,2717,-25633,-9289,-20203,-31395,-7875,8551,-5705,-28153,-12625,2565,-30059,-24115,8787,8571,-6003,10979,22965,-30237,-8031,-245,455,19437,-25243,-24731,-1707,14263,-26647,-9447,-15291,-1015,13069,16999,28351,-25217,-24339,-27751,-18143,-23427,-10937,-381,15919,18353,-14543,991,-9539,14305,-23449,-7777,17603,17241,31875,31597,9965,26983,-9353,-605,-28669,-509,1303,-13701,7739,-19575,-30249,-10169,-20851,777,-8239,-19431,-28479,-16401,18757,25407,-27853,20555,24465,6513,-1217,-20279,9613,19401,-24787,-15763,5085,1825,-12489,-9075,19895,17171,28635,-28649,30633,-7641,-3915,-8477,-21687,6605,-29317,16695,-27005,255,287,30675,-23501,27273,22651,-7555,23299,-5969,-4101,-12571,-25165,2273,-31407,2421,27757,-29721,18739,-19223,-14969,-17981,3947,-16217,-17011,-4637,-17785,-20881,21177,6481,-647,433,-3045,1959,24927,29241,5911,-26555,-26841,11939,-20523,14991,10361,-5621,15423,20833,27867,30183,19681,19449,-6799,11865,28853,27583,-10551,-18327,-14779,27497,-23963,6611,21899,4583,17813,4899,18211,-4673,23613,-18821,-6081,6157,-29495,9061,-16503,27729,2263,10485,-27269,24075,-3623,-14539,13161,6057,-4207,3569,12015,1525,-25129,-9913,16135,-315,-16811,31225,-6381,20081,-30351,-22375,17361,26785,-3983,17765,-12785,7949,9909,-8907,-20987,21567,-25257,20765,8011,23095,-17031,-6505,16569,-3265,-28295,18901,19947,21181,-6197,-25107,-5695,9365,23433,14373,-24305,32347,31843,24039,-735,9243,23755,-855,26413,32031,-25057,-15611,23621,-17883,20571,16917,11073,-27967,9817,31729,10627,25763,15289,-11071,14029,-22731,10695,-17873,-433,29887,32525,15921,4625,-7607,-20559,17671,-6169,-10895,-21637,-21089,18079,5049,32307,21111,-6717,-9969,-4149,30161,7007,-27337,4729,-27187,18981,-19463,1285,22963,-3619,-10329,-19053,19931,11845,-16815,16613,9841,-23545,-27919,-14011,-25711,-1195,9453,1195,1281,11085,-29371,4213,17623,9613,911,10377,10825,-6177,-23731,29813,-18681,-31777,-5937,1263,-14487,28151,16961,31285,23911,-9285,31515,147,-27073,-22419,-2323,6619,-32493,-20709,-18671,29851,11963,-2539,30677,13875,6615,21487,-29199,15413,22325,17483,25921,-22131,-10173,-9755,-941,12595,-2985,16327,5149,7327,-18137,6051,-12205,-25341,-12851,-12289,20347,-7265,-32331,-10513,-19851,32157,-26653,6591,-8771,5875,-31209,-11685,-5035,-26881,-7439,1083,-25917,-3467,-20483,-27573,-31871,4255,13619,-23283,21517,-6135,30517,24867,-3605,22843,-1267,-18975,9607,-12979,-8247,-6357,-23621,-2141,-30793,-24845,-5285,30439,9887,-28525,13583,7873,-12241,-28615,8839,-23395,-6577,-15971,-12897,11401,-5725,-31053,-3893,-30063,-6577,-2661,22305,-7359,22427,24165,9859,25959,7727,24931,-29117,9837,-18579,-16355,21711,-14483,24091,24777,21713,11119,22241,-4655,-15077,20437,8199,16715,-22281,-16347,12477,-30915,24055,3127,-4821,11319,26975,-12351,12897,8633,-1599,30075,-11123,5165,-27911,-28075,-30535,-20297,16183,753,-8849,11479,-7439,-8023,9901,11443,23221,19461,-6991,-13907,-2309,-17235,-9439,-11337,14941,-26887,7679,8993,10075,29695,30493,16845,5913,28805,-651,-20511,-24237,-4735,19589,-24389,-11815,32515,-28295,24495,-851,-18975,26373,-32167,6615,16943,-17365,20001,21269,22985,-15711,-19277,4377,16193,-12943,13977,24061,26429,-21891,18437,-627,-19965,-27213,26241,24977,-23965,29093,-13817,3145,17199,-30977,26597,-5929,6439,14019,-5497,10653,-19607,16069,-19917,-16609,-3873,-30251,25083,-20263,4825,11173,8245,14093,15439,7427,-17833,20079,23003,2013,-6203,-10221,20685,-23115,-23827,7919,-6589,-18881,-22549,-16483,-20937,21819,-28259,-28709,-2903,6023,18439,-23095,-30879,32559,-8123,16237,-1291,-23643,1497,-30847,-24849,3031,15753,-27737,961,14877,16531,-28647,6187,-32299,15613,-13673,12139,9185,22537,-14017,-19509,12221,-17083,28379,6961,1475,13807,-19863,-12857,-25013,-16475,-25777,-10819,5467,1873,15397,-19705,22135,-20623,-12539,-6811,-12759,-14925,13087,7353,23521,-1017,-9605,-24151,-6597,-909,-22749,31831,7595,28031,-30441,-6899,-30567,31413,-2951,-16057,-27337,-11715,31697,-27327,24887,-32637,-31529,-20027,28807,30571,3269,6825,16679,-32473,-15183,-22235,25283,-17239,-12855,-21233,11935,27385,5661,-27657,-15873,-3029,-4437,-16233,24375,14351,-345,1305,-28263,13889,171,-17703,-18343,-24457,16957,-15009,-32701,26917,-12931,23977,-7025,20757,18185,29413,16647,1277,10127,-9081,-23939,26681,-21675,-4849,16205,30435,15755,7611,-9037,3737,22063,-3511,13071,-5493,-3129,16923,5833,-8497,-28893,-27545,31541,-8567,-17299,25617,-20931,-13369,7299,-21937,-29313,4357,19181,7935,-11789,31957,28265,-16867,10321,30805,-6645,-26615,16073,2685,21731,-5565,28553,-23749,-9415,17531,-2471,6519,-14615,-25161,9315,-23335,13923,16503,15835,-7429,-19133,-10191,-7587,-10239,-11107,15383,-9857,-11761,-18575,1265,27613,20597,-9511,26051,-2279,30555,-191,-27791,-26575,7875,-27387,-10769,-12993,28309,-3079,20103,30559,-10239,-553,-15973,12105,371,-4243,21203,26959,-23939,3781,-23687,-6293,-1473,-3929,-4477,-24833,15161,9949,15305,-2479,-14559,9465,22419,16365,-32433,-18251,-10303,29771,2767,-30277,1389,11323,-24801,19037,17589,-31139,-18025,7287,-10889,13521,28825,14675,12335,27693,-11303,-13721,-4795,-15357,15661,115,29089,-9775,-9763,-999,-32481,26803,-21383,-8377,29107,25607,-6779,16595,-6755,28165,-9067,24379,16547,-25431,-16543,-797,25413,20633,22793,15525,9933,-4377,18895,-26981,2123,21393,26375,2683,-2483,-7565,-29305,20067,25053,-959,-4003,14243,-31825,-11157,-24539,31299,-32277,4451,17327,13817,4881,26569,29355,10151,-6541,537,-21409,-1101,21725,12111,-21831,9577,7157,32005,-12549,21927,21547,-17773,28351,-9559,5417,-3917,-4213,28049,13,8205,-3531,10581,9707,11995,5113,6385,1639,-6247,27945,28857,32041,767,-23261,399,-2105,-20923,-171,-4661,-27873,13315,19809,-5657,-14175,13685,19751,-5611,-11567,4927,-28073,20137,15017,-14027,17601,-21645,-20583,-16159,-21299,-26339,1877,13703,4999,-14639,26777,-12193,-30997,26323,25211,-29881,26361,31391,14475,18291,-13927,14129,15695,-3569,-21545,31359,14037,-26393,-12617,-8695,-1351,-32659,3473,23647,30183,-32269,4923,6765,-30815,-14381,-29165,-12081,29647,-3945,-15667,-20521,-10257,29579,-18855,13317,12083,-21671,-12113,8115,1931,1523,17643,-26457,-16459,31343,8637,-18043,13349,21421,26231,-13637,-26657,17587,12455,4229,22147,-25177,-29165,15839,-10261,4659,-10517,26489,6931,24385,25691,25057,8315,-761,-15415,-29267,-205,17091,1897,18623,-12629,6071,-16001,-579,23793,-9215,-23509,-17513,31991,30745,-5067,26575,22881,-10451,-28345,8707,-24793,27825,-26355,-18527,4389,31667,-2103,12527,15351,-17695,29033,-24997,-17983,-4697,-3525,-31199,19567,155,-28691,31473,12571,-12595,-24429,-13563,20039,7955,-12947,6635,-29003,-19013,29139,-1123,-17267,17495,-17451,13893,-21519,-1663,8511,27263,-13073,3873,1045,-12889,6379,-18435,-13047,-27099,-20435,-14643,20641,24975,1135,-4885,10143,18489,-24719,20825,-17195,-2143,8173,-28255,19455,767,13741,-11665,10159,-7129,14517,-21805,-27737,20755,26331,-11977,21635,7527,23665,-17235,-9197,-5711,-8277,4757,-27307,31847,23513,-8043,6109,28317,6765,-25947,13481,331,-8909,-3523,5337,17129,-13639,2995,-24795,-30767,-1049,-8095,-13551,14387,-32219,-6011,5683,17509,-263,7093,-23717,7151,32599,11381,26731,15665,8965,-10281,17583,2953,5645,18305,6651,-19127,-31933,14159,10683,-14723,-10909,-16263,-15935,10609,31627,-20337,-9823,-25565,20235,18819,15823,-11083,28595,-31165,15299,-30163,20381,-6583,-31771,-4235,-29569,-29447,-6819,3259,22751,-28217,11353,-29819,18269,-9687,24709,-12525,-25531,-9807,-31159,-13079,16151,4915,5051,-1645,-24253,-30171,-15001,-29717,-22729,-11003,-69,4525,23955,3051,16167,-7875,6129,-13663,-26077,4027,20463,-25163,31937,-30481,32319,18909,17741,-21867,-18335,-24383,-29463,-15557,8467,17299,8775,22605,-9905,-22763,-19127,16091,25193,2735,77,-24427,17449,-25781,2725,-24641,22249,-19287,14125,21029,-2573,509,22057,-18007,-19615,2603,31385,-5089,-13607,17279,-6357,-28507,-21281,8035,-26055,-18801,14505,-5913,22393,-8447,23999,-12751,-28561,-19853,15725,-31641,-14885,6021,-11425,-17805,-22719,8797,-1909,8531,-15697,4077,20335,6601,-11215,-32205,29629,-27457,10321,-6319,-6015,21515,21937,-29423,-19667,-15505,28261,-29831,28215,-11069,-2977,6617,-15679,-5931,-15365,18315,-24727,1845,-19659,-9681,-17343,-9849,-20177,-8257,-3773,17169,4905,28895,23905,-26185,21821,-9957,-2507,-19057,12271,-3331,21647,8373,4507,-9759,1637,-18485,-4273,-19833,6341,12153,18275,-31355,16759,-21725,14739,-28225,19663,24247,26981,20909,8983,-27229,-24729,-25103,-2117,-9185,11451,21271,941,15987,-16519,25389,11761,575,17525,22483,-1087,5287,-27985,-8987,-17043,3781,-27995,16359,26477,12859,-16225,-12987,9873,3009,-32615,26949,8349,5619,-6873,-5693,-30521,19613,-30785,-12785,7707,12903,-1705,-22573,25933,31773,10409,24705,26463,32751,17775,-25709,-28473,18663,7077,-12085,13883,18323,1843,28205,-32309,-7365,-12365,25791,-3343,19821,3365,-463,13457,6665,14801,26721,-8295,17161,4407,-15589,-16099,2919,31425,6189,14281,24157,7283,21729,-30939,-115,21699,-31651,13549,-25333,-19121,-1199,30427,995,1911,-23219,-17417,-7197,2139,24909,-16899,2593,-32459,743,24155,-11143,-2093,10635,29549,13163,-24431,11531,5069,-22009,4857,-30431,-32673,28183,-21155,11695,-3903,-22139,-11113,-5353,-13171,-17135,25455,-1855,-11185,17609,-14883,-19387,-12055,17453,-25883,-18885,30261,-18823,27555,32493,-3689,-15121,-7329,-5675,15451,13469,-14297,-3489,12027,15409,-12843,-1067,3265,-3929,3987,16885,15097,-13351,-2719,14853,7085,-15073,5989,-29367,3695,8549,28371,-2407,17441,-22897,21517,13647,-16605,21043,-24775,-23059,1149,11419,18341,-27195,2915,12755,631,30785,-3811,-27349,-4841,1643,4077,-31261,16089,8957,-3279,-12877,9177,29741,1025,-16373,-12867,-9621,8695,-20297,10275,5949,-28935,-6449,407,8167,22167,-20337,-6707,28761,6547,-21665,-17243,-28179,9063,17687,-26179,-4607,20913,20655,-2113,-7091,14503,27521,-14013,-13055,-11113,-32613,-28469,20687,8775,25755,9737,-10003,7417,6567,-7297,8577,-24583,-6311,-3009,14869,-9491,-6157,-14083,14905,14629,-30549,17439,6353,5383,11569,-5309,19739,733,-25041,-15091,25421,15403,-7795,32209,2891,20275,31901,-7157,8713,22349,28513,-32199,-17683,-28161,-16317,751,17389,9467,-21395,31483,8105,11707,-4129,-18417,15767,27667,12197,-25371,-14153,1023,10347,-29491,-21965,21317,-209,13199,-3775,-13621,30591,12229,14509,-991,-29089,-24995,-21221,-32239,-15163,11071,13581,-14081,-26129,25477,-30585,-25757,-13791,6919,23377,16379,16555,31897,23699,-17591,7181,-23525,-27329,-20931,-10699,1877,6695,-16781,12157,27077,5401,-21711,-27261,24721,-23727,-15825,20093,-5533,-2057,25833,-18623,27265,23617,31669,31919,-7743,4515,-16703,5929,32449,31277,6433,-16215,20437,19161,447,31417,-9453,-24717,-11,-473,30141,-28415,11013,9963,-9443,-5765,9515,-14975,21643,20939,-23903,30607,25641,-18727,9423,13871,1441,-30905,-12797,-17825,3231,-29271,-11485,24407,2769,5801,25507,29565,4707,9043,-9335,-23387,4531,-11771,8661,-16877,12285,21389,-623,-5637,-3991,28725,27343,14583,-5115,-2279,2389,30663,-16117,23843,-21327,14379,21857,17493,12487,23459,-6117,12897,-29437,28149,-9365,11067,10885,11903,-21649,-19461,-1643,16215,26033,3503,-8089,7817,-27017,481,13807,-28237,3593,6201,-5947,-27315,-21671,-4001,-31097,-20759,2209,-31729,-22623,-12681,26387,-7619,-11305,-21459,27275,-3397,-27235,9335,435,5815,-11859,28827,-13589,-31905,15657,6423,-9521,-12121,20299,-24741,-16095,-10627,27053,-15655,-5729,-18261,16525,-8653,-25341,-10451,-21467,3577,18943,-5057,425,-2623,-4241,3871,21803,27713,-189,6785,-20427,15109,-23191,13625,3895,-15951,-6393,23381,3219,6705,24157,-2543,-18005,-6033,-29165,11447,23185,4399,-2635,-14051,-3979,31587,-26569,-7343,27321,-21193,31651,10891,-5157,27221,-21201,-28779,-7861,-31391,20899,-23507,-10383,-8951,25109,10455,-8511,-7743,-15683,-13957,23127,-9637,6779,31811,8885,-24947,-26219,-13069,10983,15665,13599,-29483,-21391,-8761,-19421,883,15971,-25651,20601,2343,-8433,-16967,17521,11795,-7231,4097,-22309,16919,-14591,-22071,8489,-22795,-11575,12155,16157,24891,20983,355,-19843,-28903,5541,-5305,22053,31947,-8655,19819,-32643,16449,11671,7245,-15127,10427,3873,-7499,25149,-18829,-25723,-6637,-17927,-4925,-7185,15521,26047,-8341,29405,17833,20367,-3147,-31943,25485,-18643,27521,-1497,-1277,24791,-9253,-16383,957,16893,5665,24729,1801,31547,29933,-26351,-8961,23335,15525,23253,6627,7481,12507,-30779,-5539,12989,-10715,-2027,-13515,31803,4509,25119,-9329,25627,4001,-4257,-15771,20539,28661,2341,15861,-27735,-27719,-8205,17871,-8643,5521,-11831,-24305,-25191,1867,32649,-7491,29459,-18531,23951,14751,2651,-29803,11513,-29997,-23207,16941,-21523,-21935,7929,10277,-29441,10867,-27393,21831,25423,-13855,-29569,29879,24113,-4189,30803,23363,15359,-1585,17277,-25519,3287,-16435,2385,23127,-2621,-30119,10893,30761,-8183,-2517,24309,2419,909,-12691,-9271,18977,30947,-22929,24159,-29991,-4445,-24539,10607,17899,-3327,20843,24933,17097,-24537,2965,22143,25477,-30513,27319,-10411,-20147,-29985,-28763,-1311,-28547,-32701,25731,-3251,-5401,26935,-24613,31573,-14695,5015,-10171,913,-1859,-14227,-8047,-12603,28155,-23605,7165,29987,27917,29919,-21991,-7097,26893,-7133,17737,-16595,-11839,-30393,-5779,-12529,-17133,-12857,-26025,6095,2737,30117,26273,-12901,24175,-24879,26651,-26113,-14709,-28301,31439,-31003,-21859,31719,-32109,-13877,-593,-20651,-14285,19451,851,-12839,-14257,17715,-209,3847,22993,21567,-1203,11537,-32725,8277,30015,-23025,-29409,22785,13833,-31727,-14103,-5753,-31571,-1329,10279,1479,-5153,16307,3691,17095,-16833,-24019,-12099,-16267,-6729,-7027,24409,-1293,10191,12995,-27081,19055,-10853,16311,-4117,6683,-24027,-24697,-10913,3023,-8981,31087,-30045,-30467,5329,-29503,26107,29553,3167,4263,9349,-29607,-11031,-9787,-18685,-20417,23727,-2443,20801,27713,-5655,28629,-2753,-9519,31355,-1389,-16251,-14799,20969,17647,29553,13203,-26091,-28783,2495,27701,-13949,9357,-21191,-13353,15023,-30437,-12833,-16337,-10473,-4267,28771,-31709,-26617,18299,-29979,28379,-1481,-14483,12549,-9365,-5091,21701,22753,-12153,-4143,6795,13165,7999,11715,16139,-22719,27117,6949,5601,24067,-5923,-8155,25775,-10489,-4043,-7977,8175,9965,32297,-18329,-11959,-23819,-421,-22543,14431,-10785,-7119,-7109,20305,23255,-23343,4975,-24935,-13819,-30901,3089,-2803,8349,-7481,1663,31875,15333,-11421,-22559,9457,-8117,-4665,7429,-9045,-3715,8977,5467,-12685,17809,21695,-23823,1425,14039,28871,-8349,-27185,4749,-23677,-20555,24327,29815,1051,19657,4493,8157,30515,-21935,16605,7767,-25245,15257,22269,1819,9675,-14071,-9993,-14007,20027,-8911,16309,9419,-30281,-9529,-16025,-11441,-31071,25275,-12343,7427,32761,-8277,5189,30779,30227,55,3,-21245,5945,25307,16445,9949,19485,-17559,29491,14791,21597,21571,-11493,7287,-16389,21757,-11983,-16869,-17901,-8759,14873,18853,-13529,16361,-13389,-16923,-32141,1991,27625,27555,-15987,-10601,10319,-5089,32083,4367,-30599,25649,-5841,-26757,29243,28653,15951,-23485,-23177,-22827,20773,13793,8749,-26437,30819,-21341,27611,-2247,19223,32249,9635,-29735,-14819,16763,-23667,-4093,19345,2401,-31723,4353,9555,11731,9791,-31367,7997,-12675,6441,-26355,-15373,-7023,-19639,13603,11591,-25277,479,-14275,-25417,9975,5413,-10651,8509,-7701,-17173,-20403,24759,-30933,28223,-23581,-5617,17773,-17121,3699,11893,-23429,13237,25713,-2431,23427,-11157,32077,2323,-30739,9315,28975,-32075,-2057,-3409,31681,-10129,-13169,23429,12185,-14797,-24007,-19763,24843,18001,-32043,6675,-17863,23405,1637,28713,-26843,-28659,-12241,18969,-19207,-18117,-31393,-32683,-7303,-16151,-20699,12441,32329,7803,-7545,-21943,27537,-7153,27823,10075,-17233,-93,-10477,-24655,-28109,-17397,15105,29345,26533,18593,10859,-23029,-15461,-21523,-20015,-9073,-22651,-22665,-5775,-12903,-28687,27207,28371,-6003,3585,6663,-17545,-1497,-24655,32197,6645,6621,-7495,28913,-22827,-20515,-22321,24583,18453,2715,-1975,29855,19345,2025,6471,13613,-2933,-22241,-22785,2467,-31837,-7711,-2071,32165,2175,-13419,23525,1323,-6119,-22165,23891,-17137,-25113,8847,-21089,7707,7857,-23451,32713,18245,3617,-26185,30011,24575,14623,-7003,-3455,-32215,-27145,-5345,-16181,-2493,11119,18217,-24877,-14457,-11427,-2109,-8953,29745,1327,4731,3829,-23411,-21755,-32087,-9779,-10177,-18061,1077,-18587,-4617,-7795,26235,18781,18703,-32375,-12039,23149,-32343,3635,6685,15163,-20407,9657,27525,-21423,-27281,20627,-3549,31345,19881,-28891,6211,-14919,-13817,16589,-39,-19763,5535,17797,15563,19683,-23643,13149,-4175,14295,7773,11745,7241,-11711,23233,12275,-9779,-7987,8369,-3937,15409,-14409,26139,12239,-20893,-31295,-14727,-26005,14569,4363,-25607,18105,-537,10103,211,-10617,-2899,27121,30191,-19781,-27443,-16799,32187,-26153,-19759,17983,-4287,16299,-15751,15325,-9821,-10815,13371,-16997,-28795,-20717,31691,31493,-19407,27857,9437,2347,26913,-21773,-12573,3529,-29895,-23929,-17085,14427,32057,1581,11481,15169,-13093,-18187,-29155,-21715,-27525,-31069,-13973,-541,8551,-9141,-22161,-31553,30093,-26271,17193,4999,-14825,-22257,-30853,2427,469,-6387,30595,-1679,-6921,-4759,4447,15685,-27841,-20327,-30213,25563,-9745,27507,27353,-29901,20965,-20911,-19455,19957,13255,12151,8149,-19495,6255,-157,21895,-8057,-29803,14599,-16903,-25433,2559,17465,-19347,6183,-30925,-31547,22517,22739,-24733,-23297,-17049,7899,-26045,21725,15773,-18667,27035,27033,-5657,-2743,12197,-16777,14799,13449,-21269,12853,13227,-16645,5937,-30809,30189,-6325,23971,21945,-25203,-3381,-12997,26943,-20309,11203,-1461,-12033,-11067,29143,-13993,19639,21801,-10055,-11963,-10563,-25565,20757,-4615,-4165,-11835,-17835,-853,2017,17451,31205,-29651,10047,-22123,-12477,-21237,13957,14753,15397,25609,-18117,29929,29131,-25345,-14593,8675,20707,13761,-2563,11933,-6435,31759,-2423,24123,18491,-15495,-24229,2131,27129,22619,-7017,16589,23397,20817,30779,18963,2385,-23569,22475,-4989,25267,657,16123,-5875,4717,-26613,18607,-10639,1435,-23151,20045,19397,16825,-9225,-20543,31613,18169,-30607,7271,28189,20507,-1915,-18377,-5525,-14329,2957,17363,-32705,24583,-26803,-5633,-9915,1515,24837,30025,12833,-10501,-22555,31655,-3869,15831,3475,-11207,-13895,20103,-25643,11391,15099,-6855,-7563,-2093,-5765,17501,13727,24375,-7995,27487,20869,1119,-21333,-11357,12067,19651,26185,28053,7829,-25731,-27887,-23979,16795,-1691,1487,-6665,-28665,13441,-11435,14059,-32439,15623,19687,32121,25137,-25313,2387,11203,5167,-3781,1961,32613,-12907,22751,25187,11339,-18119,-16745,24527,-14855,10267,-14353,-12383,6741,-26687,-30811,-5663,27005,-29245,-20275,12157,-19575,25099,-15241,-8433,9013,11959,-25429,23161,-9557,-11913,16787,-609,-16819,4159,-28415,22301,-6283,30291,27883,-16137,26627,-23519,6247,-5815,16619,7961,-32089,12985,2627,-29345,-23555,-13813,9305,-8025,-29459,28743,11763,-22855,13399,-1049,-27999,-3723,-4417,-16029,-16741,32745,-31937,-4247,19267,9273,-14615,30635,15699,-19735,29257,131,13545,-32151,4395,375,4333,9129,7445,13291,21313,-27255,-19011,-7043,15255,16453,-31405,22207,9923,-13119,527,-8737,14221,-19207,-22217,517,12605,28795,-12303,21259,7549,-23017,-11561,-3287,-3305,13481,10085,3611,-14323,20557,-11115,19713,-26275,15349,23045,11103,11041,32473,1677,-6747,31539,22013,11317,24705,-15937,-23381,-25891,31493,-28539,-22423,6715,-20479,-29127,-30319,17879,14763,1959,19479,16503,3307,-12249,-30353,26063,-1381,21477,-21517,-25801,-21215,5057,-5811,15439,28235,-11709,-3441,26929,-13157,27699,19855,-11757,-21981,21177,-22961,4155,31659,9353,-31021,1853,-9829,-9101,-27221,-29835,16083,-26869,-22081,-29747,-3337,-13385,-819,-32057,31793,14527,-31821,-19089,-1517,-17479,13799,32277,31181,-29067,-1541,-13875,8757,23311,-2893,-28087,19279,-517,20427,-25141,13873,-23539,-11357,16431,-11929,23361,-43,-32673,11075,-1889,29603,-16515,9531,581,-22869,-5987,29381,-10649,32301,-22451,-15883,-29425,25193,-25773,-17281,-12015,7599,-12763,-24043,-16835,127,24481,11817,8187,15763,30207,-18679,10955,24565,-29915,-26827,-30785,-32747,9223,1005,31211,14653,-24357,20983,1875,29075,27363,4253,-32217,7377,-7819,22551,3779,-199,-28333,13685,17095,13521,-28445,-28785,-32689,12681,-14861,-22213,-5919,-23987,4105,-14829,28137,-20485,23899,695,-7981,-4029,15243,-6203,2431,23125,28217,-30461,32019,-24735,19829,16285,-601,-29211,21573,-28133,31261,-9853,-627,-975,-6365,29035,23653,-8255,-24461,-22077,-20119,-7133,30571,-3029,-11789,27601,18407,25337,-10361,-21109,18233,2881,-23119,-14641,-993,-11015,2127,16313,15427,14277,14323,1819,25971,17495,29557,-4223,29607,4797,2915,25641,-32641,-13981,9861,-15649,-24981,-7869,-32659,-12631,-26185,31185,-17821,20639,-22241,-31653,9431,23919,12943,1387,22503,-14881,17097,23723,-1043,20069,-32049,30579,5925,27885,13615,-31535,2559,887,9201,27467,2525,27261,9487,-15013,23409,27921,-26473,-28417,1743,-8547,-13047,-17813,29025,-31317,6089,12941,-18919,-15575,23475,19801,7017,25551,-12459,16831,7989,-26301,-27639,-31877,-26165,21573,30631,20299,-25229,17521,-631,-9137,-32689,1673,-10435,-25215,-11849,-5485,-1339,9777,20555,20137,-5213,-21461,-20745,-26789,18385,-28493,9257,-12063,14405,3401,-829,-2879,31023,14467,-6999,-2187,-5853,-5755,-18207,5731,-17099,-26883,24297,-3973,-18021,-11749,25691,-25767,24087,15585,-4373,16531,20213,26627,-32027,9601,-4577,10827,-27619,27221,-11661,2109,25127,-2961,16827,4141,-11509,4475,-25101,-31935,-24559,-32313,-7525,-13519,-20587,-16591,-12395,-22021,18565,-11921,27627,5653,-29873,28009,4293,-6655,8427,6887,-8147,29971,19715,-17699,-21129,-11255,16925,-28215,-18869,-22371,12713,-231,22007,-18943,-30267,21519,-18121,-30349,-26377,-9609,24851,12815,23367,22183,4187,-29407,3533,-13993,4805,-213,15035,-17147,9487,-8367,-20163,-12831,21351,-24151,5293,27961,-9761,24361,16957,-28931,11195,1013,-22141,30457,-20733,25213,-9667,20085,-7553,-24733,-23859,-2029,15985,19529,1109,-5355,19359,27093,-3831,19289,-13739,30409,32693,28737,-14965,-18799,-24257,-13913,-21449,2099,14267,-11923,9961,26127,31093,-20823,28231,4473,-18099,18925,12471,-6865,-2931,-3119,-6081,1735,-11421,-27787,-23415,-32617,-11449,-20811,29419,-32005,-11359,24493,23011,137,-2701,17605,-19833,25343,17423,12401,8715,-20737,29455,5687,30833,12713,-4081,863,9003,-5881,24739,14145,27525,2551,3575,-27895,-24315,-25083,7381,-28467,17579,8143,9123,19053,5169,-32007,5807,14993,893,-10747,31165,13003,22479,-15397,-4227,-18713,-32533,13125,-27107,-6409,-993,-4191,-7887,4359,-22405,-24875,2137,-9025,21863,-3471,-21587,-22041,16239,26555,-2801,-26779,6789,5697,-28871,22257,-11725,-19933,-23655,-2389,12919,2229,30249,-18097,-16741,-29067,5399,23789,-18479,28399,-15479,-8505,-15677,23125,-31929,5017,-25473,-11475,-2827,-1519,6581,-21601,-1353,-22925,26169,18337,-24937,6293,26897,-7589,29025,-17819,-23505,-19193,-29609,4257,31991,21513,7273,-16113,12329,32603,5449,18527,24767,26867,12519,19423,3465,18089,-23897,-11255,6623,24241,-8653,-16159,32667,-15513,22977,23289,-32031,9973,20791,1327,-223,26435,32463,7063,-1385,-19329,25801,-7127,861,-27327,19627,20897,18029,20971,-10091,-26075,-31899,-737,-18921,23557,12287,457,11419,8573,29349,-30073,13295,29987,25693,-1497,-25941,-17951,-13181,17377,15607,-32079,-18951,-14867,-22065,6555,-10363,-8875,-17055,-14203,17489,4753,-30983,-6005,-17549,5709,981,19559,-3293,18221,-24379,31481,31275,27551,29397,8871,-17543,-11055,25879,-16713,17007,16501,-22721,-13335,-26925,-17163,11317,1629,22647,-4105,6611,9927,-18685,-4431,17261,27853,-1089,16049,-22767,-15041,32267,-10195,-5157,23269,28895,8719,-6679,-25233,-21213,16817,-29711,15939,29081,2819,-12727,-2899,29603,-1831,4739,-705,-12823,2271,16373,-18031,25541,-5669,1001,14121,18031,9475,-30419,27737,28343,-12313,2111,-4379,-19975,-195,31657,-31049,-23763,14353,-20587,7995,4897,-25879,-21145,1023,15083,11137,-4957,-32727,-28213,4623,23093,28111,5885,9229,31429,18065,-20307,-9341,22343,-15751,10619,16645,-21799,417,-21839,3145,9411,16877,19309,-15341,-28801,-30301,-26825,18395,17313,-8633,-26179,-4695,-28633,-26511,-24819,-18149,22371,18429,22449,18515,8423,10255,-19231,-28923,10023,9447,-32083,-17137,-14325,-15119,21295,-6173,-12243,703,-749,-10485,-19889,-253,-22469,17009,-5423,3169,26597,-20147,-8469,-10853,8813,-9521,9971,11037,-28433,-22925,16635,-9123,10545,21719,-17385,14021,-10719,-3005,-10363,-11043,-9105,-26529,749,-26333,13481,6411,-9835,24937,183,-24989,-6805,-25003,-31047,-29391,-2345,9379,-5501,-11743,16843,-30435,6121,-17717,15393,22971,-9681,10019,8363,-18033,-3851,591,19441,-12385,-31729,30765,-26407,26331,-21451,19727,4073,16945,25891,-12605,-12413,-31003,-16333,4375,-21719,-22233,-24675,26741,-14295,27645,-13739,-693,-14133,1347,20337,-23439,-32315,-6023,-2717,9135,-28107,31791,-19375,-121,-3111,-22165,23047,14895,-7181,12903,-16821,-18955,-20679,15127,24725,-14817,-12399,-23521,-20383,30755,14763,435,15425,-10669,31693,-6809,-28103,-30535,-18735,-14451,-11161,29793,29583,-25087,8417,19277,-24105,32389,3985,-31707,5063,15521,-30951,-13563,31251,-21693,5923,-22819,25035,24683,-7405,-23301,-10797,-26975,30973,11357,26545,-16021,-9525,12579,-13291,22881,-8815,2717,-15845,16839,27479,-9261,-16871,-2191,-15765,-19429,11747,-22737,-21071,-20087,7059,-3963,14661,32487,15495,30045,23929,-20947,-17907,23187,15337,205,4527,-22717,-16821,-6603,7497,13565,-21465,-12519,22805,31159,-16295,-4801,-24233,-17257,-14311,31635,-1309,16533,-16263,-12371,5665,28073,25609,-31661,-4041,11453,2571,-467,5055,575,28141,-14373,-16595,-15567,16809,-22207,27679,-31407,-1931,-26967,-16611,-29039,15873,22335,-23191,16437,18423,-17001,-20897,-31487,-26061,3143,-27271,-29923,-23173,-22947,-31787,23439,-5723,12929,20049,-19815,9729,-16383,5935,-2389,-545,2329,4343,-19709,4707,-22357,7481,31805,-32239,-12443,29541,-21557,5865,-13081,5989,-5453,17617,-17051,-5725,19741,-21225,13101,-16155,-15613,-21477,-8357,29433,4543,741,-4593,-25507,17521,-799,-18599,-22109,-26981,6103,-13329,25463,16297,11163,-28185,-31131,-4017,23843,21813,9701,-9859,9407,2635,24963,-7099,18639,-13733,-12911,-14883,-4543,25435,-17777,31535,30337,-5133,8973,5669,-22641,1405,-4201,18255,14387,-18477,21743,-14697,22203,-2533,-6511,9931,-25537,-28485,21961,-2453,31541,1459,11027,-18393,-11007,-8997,-29851,22311,-21033,-24121,-25943,13317,-7157,1913,18447,-8903,17469,-15115,25587,-889,-3659,31081,3365,-11831,-30229,23209,-13957,5843,27793,30861,23063,31325,23043,22117,6305,-5467,-7043,22151,-14639,-23963,-7215,13561,-19263,-31265,13291,23407,-22747,-10065,-28769,-31363,17133,-25955,9405,-18437,9889,-10025,-23347,3179,-8859,-3615,-14825,32457,-8447,19553,15811,-18977,-16923,-25215,-5107,-9897,-22549,-23165,407,20107,18015,-21603,23291,12755,2087,-14811,22921,15189,-5273,28261,-27863,9243,5813,-13427,21551,-6085,27505,-28215,-17053,2577,-31089,-19619,17451,25463,-1179,9945,4861,31481,28039,-29589,21929,-32001,-32517,27379,-26841,-13929,-27623,17977,9089,-13197,1887,-24729,-7653,9589,4201,24215,8619,29085,-13377,5461,26853,19737,-31689,-9749,29235,12829,-3119,2161,-19189,-23091,-24577,-21009,-2787,-14073,23565,4119,6015,21071,-8163,8733,-30057,2215,1379,26005,5823,24377,18163,-18671,28461,-18667,17749,-31047,27033,-18247,-10683,-11071,22407,21161,-1563,-14603,-16633,10115,-1959,32643,24731,6053,12631,-4187,-18035,-28233,-2251,21683,-32699,-11343,-27023,12457,-30743,18357,-8511,9201,15929,-2329,20883,23029,-23649,-22847,7233,-9477,7499,11483,-25765,669,21741,-19091,-9883,-2795,1371,-30609,29087,-21283,-30297,30679,-14985,-18973,-7441,21765,-15959,1133,12587,-25091,-16267,3951,10957,-9613,24199,2177,1531,19063,-23035,11929,14971,24113,-3413,31895,-27043,11273,3451,-29563,-13821,11303,-31149,14859,-26767,-10683,-13699,31051,23385,20415,26909,1199,9489,9579,30317,-3561,26949,14591,-6513,-25435,-20629,20417,2135,4145,-26965,10149,26833,12731,-3095,15989,14903,-13963,-11251,19123,12235,28817,5095,24235,20229,-3031,14923,4123,185,15783,-24629,14363,24715,27251,22523,125,-3567,11003,-25985,27309,-25079,9883,-27565,22063,-6629,-10203,6727,-17341,-24133,31065,-1297,6437,32467,23105,21439,15909,-25263,-27137,-5921,8081,5927,-15019,3249,6057,3855,19813,18125,11057,-27103,741,-26253,2167,-28455,7211,1395,29759,-771,-403,30669,11597,-18157,16763,-28489,-25303,23643,12061,2403,4523,-1739,-30833,28997,22467,-27131,-12313,-9503,-22637,18317,15775,-28359,-9679,29699,23861,3713,-12751,-11751,-1337,-2623,15327,-16263,-19781,-15727,12995,17847,-24339,-23923,-31377,31499,12957,-28255,-29211,27595,-11513,18579,26359,-21115,-28443,13545,20633,19709,11051,-3857,-25471,14821,-15221,6951,-23983,7463,-13247,-27485,7503,8339,25529,-8911,24143,-23165,-5213,-22763,-10449,-8853,14843,26341,27711,27309,17115,-155,-17251,-24391,12757,15119,9777,18415,-30695,-30471,12069,-1407,6127,681,22387,7645,18165,16327,3067,13101,-18269,28275,20417,-9307,-9843,19699,3039,-1921,-8407,-30897,-12535,10649,-26705,3111,-21573,-10307,15705,-32173,22781,-1351,15093,24563,859,9385,26341,21115,-1817,-4435,14127,-7677,2073,16247,-19051,5027,4263,5137,23587,-13055,27247,-24227,-26501,2075,8235,-4239,-18035,-26565,-681,4625,-3371,29589,5297,17909,-29053,-18963,23647,3679,27783,-4869,-12039,20679,18583,-28085,10503,32105,-24963,-21327,23937,-30133,-1827,8897,31157,13835,-8307,12767,7737,-9225,-17687,32123,14475,-5181,-2581,-4061,7615,-9637,269,31565,-1939,-26395,-27059,-6897,-7265,24417,-9151,-20373,-17615,23333,-15229,5633,32425,-30477,26329,19633,1717,7343,-8819,-5659,15871,15781,-18039,24275,12523,-32239,-26103,22045,25565,20917,9393,-15049,1611,-16797,-18485,11235,-8263,-27571,-4533,1903,-1867,-19873,-11659,28247,-3689,-8595,29059,31451,-23501,-26013,-26243,32467,24859,-5025,-6439,18391,-27241,20455,-5125,29493,-25825,-11147,-6389,27785,-30021,29101,-6515,6665,-7,-5779,-29637,2135,5053,26897,-27769,14429,12601,-32075,-31919,-11931,9279,15383,5929,-29249,16277,17719,-203,-7993,-7331,-9599,-19097,20551,12519,13885,-19147,16367,8599,499,-14433,25043,31899,-18951,-20669,-19145,-20143,-26767,13211,-8295,-25259,-3329,-8417,18427,-17507,6175,13573,-4243,-30117,-1235,15479,-29745,18515,23451,-11857,-21255,-24145,-23941,-561,-14643,28711,8401,30609,-14071,16205,-25891,-8529,16653,30577,23593,-30809,-27167,-30369,253,28081,-22639,-20279,1453,17483,28171,-18443,-20623,-3325,15433,-15325,22229,28091,9955,-25589,9623,-14943,16955,18427,22287,-25739,-23407,-22211,-29419,5013,13635,23761,28429,-4885,19,-17943,-1721,-28561,-5743,-18811,30407,-14461,-931,11397,-7951,-29961,-6615,28687,-7285,25261,5761,23231,-14623,23035,10287,14517,-2479,-5203,-31113,22201,31899,-18857,-15989,-1073,-24537,5765,17767,31627,-10039,17067,-5219,30281,-14019,10543,-30551,-18433,31167,-13009,-23267,-18927,-31805,-15875,32667,30041,-6459,31669,27485,-25811,6899,16783,-14093,24511,-17727,-23997,-29107,-2813,-30577,8707,-3079,-3585,25791,13891,15415,-6461,-29183,16387,-28291,1247,-24905,-26787,-12283,-32503,12521,-9705,-17261,-6725,5265,11765,2823,-23343,23883,-7103,-4265,8143,2891,6987,31077,-5735,-2183,-8213,27625,-24267,1587,-20989,-13581,-9429,-19231,-22065,-3623,22473,7953,24197,31763,-12919,27857,-14545,-26745,-11993,6875,-21125,-2609,-11033,18247,12973,-9849,-19725,10053,-6715,-19089,2691,55,-3131,-18555,-11077,7639,-1469,-8305,-15687,-32053,-26843,25083,23909,-22525,-2331,-12683,-499,-12817,-16245,-20231,19031,21403,-29315,-17507,-2075,27643,1549,10031,27535,18197,-10913,-16805,-8183,18601,2933,-11847,-29025,-6617,-10081,13795,-20291,-23477,-29847,5891,22481,8569,-28521,25923,-15363,-7831,21639,16389,-22663,-14561,9437,-17361,30523,-13103,-29309,4655,-20057,5675,26159,19243,-18435,7031,10443,-7803,30839,-24933,27151,-15269,-13089,-4601,-27897,22651,-3321,13105,28235,6177,-12995,8133,25425,-29557,-24329,20539,23339,4463,21339,10771,3369,-17347,5945,18935,1667,-32027,1839,-24123,6625,-16815,7491,-16343,13113,31547,-31397,27429,19219,-30457,-17587,-32349,-27217,-17587,22649,26471,21725,19395,-15299,16575,-9279,-9917,30595,30293,-28475,6313,-3857,22979,-10881,20319,-4663,-20307,-12953,-13845,18071,28213,28939,20895,-24635,-16797,5511,10933,-8591,-31081,29229,2267,-3023,25067,-19371,2501,5795,-15479,10299,-4187,-10225,-24469,21199,-22605,31491,9005,-1111,-3801,-9401,-14185,-10501,-12261,12017,28085,28339,-24513,-6425,-7907,-15473,-17761,-26813,22943,-29939,-19847,-15651,-14409,19041,-10793,-9231,17255,-12487,27983,11263,16891,-11385,4017,-19231,-3211,17943,25857,6567,-7019,27811,10679,32247,-18747,-6373,23157,-9783,-2375,-11077,5331,3771,-22981,-10811,3823,17959,-20843,31039,-11635,-10067,3087,-24987,30169,11641,7467,-23623,10115,-5843,23751,11681,-17371,-29723,-15847,29879,-31019,-22677,-6451,15715,18791,-20507,24607,-21893,-9137,16767,-10353,-23831,-15191,-19833,27633,20907,29869,5801,27769,-21999,3075,15971,-6957,30939,-27331,19179,-32203,-21441,-12115,30931,24813,26971,-15833,-3547,-9361,11747,11035,-12693,-28371,-11643,-17691,-31509,7649,-32619,-613,-19433,10729,20293,21747,16539,15137,-13401,-18723,659,-17379,-19117,8885,13889,-22055,18137,3425,6949,-18023,-17255,-17793,29523,8803,-27535,4147,24211,-17545,12929,25371,26357,-29249,16063,-29447,-21947,5215,16841,-15303,9047,-6169,-25971,24879,11205,11307,29465,-24535,-30163,1761,18915,-32217,12037,-6457,1209,-6939,12275,-12329,-25613,-16591,-25285,16443,-21159,26143,-31871,-9117,23593,15461,1713,45,6875,-20245,-29653,-20003,-8951,-6961,23901,24939,26633,-7151,-19199,-16571,-13111,3787,525,-31607,-29333,-81,4959,20871,9525,-27601,12971,30131,23257,9217,32067,-18863,18051,12519,15281,32151,32519,-22309,8815,22855,22511,-79,26021,3229,-10911,-32429,-11973,15579,18945,26155,31163,-12409,11257,-29899,-22539,15001,-3163,21477,-29155,31619,-20275,-3793,-8121,3767,-16493,-12435,-32319,6219,-5289,15415,-6219,-6319,26671,-2067,-29445,26647,-7183,-26577,32147,15433,-24123,-3935,-14747,30639,-31433,7927,-15163,877,-24207,-25025,825,-27893,18451,-32693,-289,-17633,30541,24847,-12229,25463,11259,4891,16963,13417,-28433,-30951,13997,-22287,7927,-22595,-6599,10085,20911,-20803,-23801,-28965,4751,20405,6303,9007,-31687,19303,26483,30095,12395,-24043,-22917,32107,-5449,27809,-23819,17067,-19663,6219,28113,-22553,-16849,25567,-25879,-25339,19633,-7219,21571,-3021,-9673,-10577,20635,4351,-32083,-12463,23181,-10159,-29823,31515,-2013,-20887,-12853,-26945,-25023,30609,-27581,1035,-4041,12501,2229,13485,1091,-31601,13169,-857,1647,-5007,-19433,-5053,-24323,-10165,-21593,-5403,-1087,3759,-983,27905,22183,631,-17607,12963,27771,-4533,11251,7611,-9953,17175,-27449,16773,13757,4851,-1467,31767,-29823,29065,517,27619,13641,10359,20121,-8123,-21039,3587,-18713,23059,22297,11613,-2005,19133,27015,-5257,17955,32589,-26303,-10169,-1577,4613,-15291,20763,27881,1113,11525,29155,-9529,9043,-139,16201,-11261,-8133,11893,-6577,-16745,3251,29775,-7059,-31793,6113,29939,8851,-29979,1269,27267,-32499,-14411,-5767,-25193,-16979,17937,-4999,-12513,-18489,-4645,-25053,-10795,31331,-11801,9301,13809,17553,23195,17757,-11987,29087,-20407,-3857,-30747,14973,-25467,28233,-26853,-6573,-6753,-14539,-8411,-8119,-20501,9647,3857,2477,921,10253,26081,-20881,27073,-8997,10623,17863,3107,-30943,4203,-23697,15977,1327,11783,-10843,-1865,-28441,-26693,-15823,-16041,-13557,1395,-21077,30581,24613,315,-20469,28595,27087,-13665,13827,-9497,13309,-3169,2815,-19239,-27551,3991,30849,12643,23227,23133,-29481,8199,-29859,5629,29941,-22861,-12977,27023,6489,-10515,2861,17643,22893,-3775,-26427,-2083,-18237,-17851,-13961,9519,-5601,27801,31247,31917,7999,24931,-27495,21999,29603,-5279,447,-28451,14207,20057,-24565,-30277,-17041,23747,-3649,-19791,18199,14843,11579,7053,20807,1121,19181,-223,29393,4835,-20731,929,11383,8607,12947,1701,5595,-21401,-1615,-16429,32579,14639,-5547,19285,-32291,6995,-31619,-21843,-23029,-13601,-15785,18029,25267,75,-11855,-29969,2977,24267,-29733,25883,-11037,-2227,32421,-23749,13091,-7695,27041,-16385,-30287,7029,23973,-8521,24911,-19219,-29767,-10601,-12747,-13137,-21375,1891,-31247,1031,23691,-18071,10889,15229,-30245,445,-2249,-1413,13153,8027,14211,27317,-22813,-10107,32409,31693,-26039,-20097,-8643,5641,13415,11401,-28587,6403,5097,-16187,17515,-23939,18319,-12183,1679,32649,10607,-7083,435,19269,29479,15355,-28733,-26469,12795,14379,-31927,-13259,7109,2129,-25947,-29375,22477,14431,-30293,-1105,13021,703,5619,-16377,-14353,-21045,28155,27451,-4645,31125}; #endif snibbetracker-1.1.1/snibbetracker/src/CSynth.c000066400000000000000000005303501351541346100213220ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "CSynth.h" #include "CAllocator.h" #include "CEngine.h" #include #include #include #include "CNoiseTable.h" const int build_number = 24; const int file_version = 4; const double ChromaticRatio = 1.059463094359295264562; static double cSynthInstrumentVolumeByBaseNode(struct CInstrument *i, int base_node, double cursor); static void cSynthInitData(struct CSynthContext *synth); static void cSynthBuildSineWave(int16_t *data, int wave_length); static void cSynthBuildSawtoothWave(int16_t *data, int wave_length); static void cSynthBuildSquareWave(int16_t *data, int wave_length); static void cSynthBuildTriangleWave(int16_t *data, int wave_length); static void cSynthBuildNoise(int16_t *data, int wave_length); static void cSynthLookAheadForActivatingSlope(struct CSynthContext *synth); static void cSynthVoiceApplyVibrato(struct CSynthContext *synth, struct CVoice *v); static void cSynthVoiceApplyPitchUpDown(struct CSynthContext *synth, struct CVoice *v); static void cSynthVoiceApplyDetune(struct CSynthContext *synth, struct CVoice *v); static void cSynthVoiceApplyArpeggio(struct CSynthContext *synth, struct CVoice *v); static void cSynthVoiceApplyPortamento(struct CSynthContext *synth, struct CVoice *v); static void cSynthUpdateWavetable(struct CSynthContext *synth, struct CVoice *v); void cSynthResetAllEffects(struct CVoice *v); static void cSynthBitcrush(struct CSynthContext *synth, int16_t *s_byteStream, long begin, long length); static struct CVoice *cSynthNewVoice(struct CSynthContext *synth, int16_t *waveform); static void cSynthResetVoice(struct CSynthContext *synth, int16_t *waveform, struct CVoice *v); void cSynthInstrumentResetEnvelope(struct CInstrument *i); static struct CInstrument *cSynthNewInstrument(struct CSynthContext *synth); static void cSynthLoadFailed(char *reason, cJSON *json); static struct CTempoNode *cSynthNewTempoNode(void); static struct CWavetableNode *cSynthNewWavetableNode(void); static void cSynthSetWaveformsFromPattern(struct CSynthContext *synth); static void cSynthChangeWaveformForChannel(struct CSynthContext *synth, int channel, int waveform); static void cSynthPostEffectFix(struct CSynthContext *synth, struct CVoice *v, struct CTrackNode *t); static void cSynthVoiceSetEffect(struct CSynthContext *synth, struct CVoice *v, struct CTrackNode *t, int previous_tone); static void cSynthUpdateTicksModifier(struct CSynthContext *synth); void cSynthInit(struct CSynthContext *synth) { cSynthInitData(synth); } struct CSynthContext *cSynthContextNew() { struct CSynthContext *s = cAllocatorAlloc(sizeof(struct CSynthContext), "CSynthContext"); s->debuglog = false; s->errorlog = true; s->file_version = file_version; s->build_number = build_number; s->str_title = NULL; s->str_author = NULL; s->str_info = NULL; s->sample_rate = 44100; s->frame_rate = 60; s->chunk_size = 0; s->master_amp = 0.5; s->master_amp_percent = 50; s->default_bpm = 120; s->audio_clips = false; s->preview_enabled = true; s->sustain_active = false; s->preview_locked = false; s->preview_started = false; s->interleaved = true; s->voices = NULL; s->instruments = NULL; s->custom_instrument = NULL; s->max_voices = 6; s->max_instruments = 16; s->current_instrument = 0; s->active_tracks = NULL; s->solo_track = -1; s->solo_voice = -1; s->wave_length = 1024; s->noise_length = 44100; s->looped = false; s->track = NULL; s->swap_track = NULL; s->copy_track = NULL; s->instrument_effects = NULL; s->max_instrument_effects = 16; s->max_tracks_and_patterns = 32; s->track_width = 6; s->track_height = 16; s->track_max_height = 256; s->track_progress = 0; s->track_progress_int = 0; s->track_cursor_x = 0; s->track_cursor_y = 0; s->track_advance = true; s->current_track = 0; s->patterns_and_voices = NULL; s->patterns_and_voices_width = 6; s->patterns_and_voices_height = 22; s->patterns = NULL; s->patterns_width = 6; s->patterns_height = 64; s->max_adsr_nodes = 5; s->arpeggio_speed = 10; s->temp_mixdown_buffer = NULL; s->temp_mixdown_size = 64; s->sine_wave_table = NULL; s->sawtooth_wave_table = NULL; s->square_wave_table = NULL; s->triangle_wave_table = NULL; s->noise_table = NULL; s->custom_table = NULL; s->needs_redraw = true; s->base_mod_adsr_cursor = 0.441000; s->base_mod_noteoff_slope = 2.2; s->base_mod_advance_amp_targets = 2.2; s->base_mod_vibrato_speed = 0.689063; s->base_mod_vibrato_depth = 0.003445; s->base_mod_pitch_1 = 13.781250; s->base_mod_pitch_2 = 0.17813; s->base_mod_arp_speed = 0.013877; s->base_mod_portamento_speed = 0.037223; s->base_mod_pwm_speed = 441.000000; s->base_mod_detune = 630.781250; s->mod_noteoff_slope = 0; s->mod_adsr_cursor = 0; s->mod_advance_amp_targets = 0; s->mod_vibrato_speed = 0; s->mod_vibrato_depth = 0; s->mod_pitch_1 = 0; s->mod_pitch_2 = 0; s->mod_arp_speed = 0; s->mod_portamento_speed = 0; s->mod_pwm_speed = 0; s->track_highlight_interval = 4; s->tempo_width = 6; s->tempo_height = 17; s->tempo_map = NULL; s->wavetable_width = 12; s->wavetable_height = 18; s->wavetable_map = NULL; s->current_tempo_column = 0; s->tempo_index = 1; s->pending_tempo_column = -1; s->pending_tempo_blink_counter = 0; s->ticks_modifier = -1; s->pending_tempo_blink_counter_toggle = false; s->tempo_skip_step = false; s->bitcrush_active = false; s->bitcrush_depth = 0; return s; } cJSON* cSynthSaveProject(struct CSynthContext *synth) { char *node_build_number = NULL; char *node_file_version = NULL; char *node_author = NULL; char *node_title = NULL; char *node_info = NULL; char *node_master_amp_percent = NULL; char *node_solo_voice = NULL; char *node_solo_track = NULL; char *node_active_tracks = NULL; char *node_muted_voices = NULL; char *node_track_height = NULL; char *node_arp = NULL; char *node_pattern = NULL; char *node_column = NULL; char *node_row = NULL; char *node_tone = NULL; char *node_tone_active = NULL; char *node_instrument = NULL; char *node_effect = NULL; char *node_effect_value = NULL; char *node_effect_param_1 = NULL; char *node_effect_param_1_value = NULL; char *node_effect_param_2 = NULL; char *node_effect_param_2_value = NULL; char *node_nodes = NULL; char *node_patterns = NULL; char *node_patterns_and_voices = NULL; char *node_instruments_adsr = NULL; char *node_amp = NULL; char *node_pos = NULL; char *node_instrument_effects = NULL; char *node_instrument_link = NULL; char *node_track_highlight_interval = NULL; char *node_tempo = NULL; char *node_tempo_active_column = NULL; char *node_tempo_bpm = NULL; char *node_tempo_ticks = NULL; char *node_tempo_active = NULL; char *node_tempo_x = NULL; char *node_tempo_y = NULL; char *node_wavetable = NULL; char *node_wavetable_speed = NULL; char *node_wavetable_value = NULL; char *node_wavetable_active = NULL; char *node_wavetable_x = NULL; char *node_wavetable_y = NULL; char *node_custom_table = NULL; char *node_custom_instrument = NULL; cJSON *root = NULL; cJSON *node = NULL; cJSON *instrument = NULL; cJSON *adsr_node = NULL; cJSON *array = NULL; cJSON *tempo_node = NULL; cJSON *wavetable_node = NULL; cJSON *custom_table_node = NULL; int a; int s_x; int s_y; int i; root = cJSON_CreateObject(); node_build_number = "build"; node_file_version = "file_version"; node_author = "author"; node_title = "title"; node_info = "info"; node_master_amp_percent = "master_amp_percent"; node_solo_voice = "solo_voice"; node_solo_track = "solo_track"; node_active_tracks = "active_tracks"; node_muted_voices = "muted_voices"; node_track_height = "track_height"; node_arp = "arp"; node_pattern = "p"; node_column = "c"; node_row = "r"; node_tone = "n"; node_tone_active = "t"; node_instrument = "i"; node_effect = "e"; node_effect_value = "f"; node_effect_param_1 = "g"; node_effect_param_1_value = "h"; node_effect_param_2 = "j"; node_effect_param_2_value = "k"; node_nodes = "nodes"; node_patterns = "patterns"; node_patterns_and_voices = "patterns_and_voices"; node_instruments_adsr = "instruments_adsr"; node_amp = "a"; node_pos = "p"; node_instrument_effects = "instrument_effects"; node_instrument_link = "i_l"; node_track_highlight_interval = "track_highlight_interval"; node_tempo = "tempo"; node_tempo_active_column = "active_tempo_column"; node_tempo_bpm = "b"; node_tempo_ticks = "t"; node_tempo_active = "a"; node_tempo_x = "x"; node_tempo_y = "y"; node_wavetable = "wavetable"; node_wavetable_speed = "s"; node_wavetable_value = "v"; node_wavetable_active = "a"; node_wavetable_x = "x"; node_wavetable_y = "y"; node_custom_table = "custom_table"; node_custom_instrument = "i"; cJSON_AddNumberToObject(root, node_build_number, synth->build_number); cJSON_AddNumberToObject(root, node_file_version, synth->file_version); if (synth->str_author != NULL) { cJSON_AddStringToObject(root, node_author, synth->str_author->chars); } if (synth->str_title != NULL) { cJSON_AddStringToObject(root, node_title, synth->str_title->chars); } if (synth->str_info != NULL) { cJSON_AddStringToObject(root, node_info, synth->str_info->chars); } cJSON_AddNumberToObject(root, node_master_amp_percent, synth->master_amp_percent); cJSON_AddNumberToObject(root, node_solo_voice, synth->solo_voice); cJSON_AddNumberToObject(root, node_solo_track, synth->solo_track); cJSON_AddNumberToObject(root, node_track_height, synth->track_height); cJSON_AddNumberToObject(root, node_arp, synth->arpeggio_speed); cJSON_AddNumberToObject(root, node_track_highlight_interval, synth->track_highlight_interval); cJSON_AddNumberToObject(root, node_tempo_active_column, synth->current_tempo_column); /* loop through all existing nodes. Add them to an array. */ array = cJSON_CreateArray(); cJSON_AddItemToObject(root, node_nodes, array); for(a = 0; a < synth->patterns_height; a++) { for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->track[a] != NULL && synth->track[a][s_x] != NULL && synth->track[a][s_x][s_y] != NULL) { struct CTrackNode *track_node = synth->track[a][s_x][s_y]; // Only add node if it has any relevant data. if(track_node->tone_active || track_node->effect != '-' || track_node->effect_param1 != '-' || track_node->effect_param2 != '-' || track_node->effect_value != -1 || track_node->effect_param1_value != -1 || track_node->effect_param2_value != -1) { node = cJSON_CreateObject(); cJSON_AddNumberToObject(node, node_pattern, a); cJSON_AddNumberToObject(node, node_column, s_x); cJSON_AddNumberToObject(node, node_row, s_y); cJSON_AddNumberToObject(node, node_tone, track_node->tone); cJSON_AddNumberToObject(node, node_tone_active, track_node->tone_active); cJSON_AddNumberToObject(node, node_instrument, track_node->instrument_nr); cJSON_AddNumberToObject(node, node_effect, track_node->effect); cJSON_AddNumberToObject(node, node_effect_value, track_node->effect_value); cJSON_AddNumberToObject(node, node_effect_param_1, track_node->effect_param1); cJSON_AddNumberToObject(node, node_effect_param_1_value, track_node->effect_param1_value); cJSON_AddNumberToObject(node, node_effect_param_2, track_node->effect_param2); cJSON_AddNumberToObject(node, node_effect_param_2_value, track_node->effect_param2_value); cJSON_AddItemToArray(array, node); } } } } } array = cJSON_CreateArray(); cJSON_AddItemToObject(root, node_instrument_effects, array); // instrument effects for(s_x = 0; s_x < synth->max_instrument_effects; s_x++) { for(s_y = 0; s_y < synth->max_instrument_effects; s_y++) { if(synth->instrument_effects != NULL && synth->instrument_effects[s_x] != NULL) { struct CTrackNode *track_node = synth->instrument_effects[s_x][s_y]; if(track_node != NULL) { node = cJSON_CreateObject(); cJSON_AddNumberToObject(node, node_instrument_link, s_x); cJSON_AddNumberToObject(node, node_row, s_y); cJSON_AddNumberToObject(node, node_effect, track_node->effect); cJSON_AddNumberToObject(node, node_effect_value, track_node->effect_value); cJSON_AddNumberToObject(node, node_effect_param_1, track_node->effect_param1); cJSON_AddNumberToObject(node, node_effect_param_1_value, track_node->effect_param1_value); cJSON_AddNumberToObject(node, node_effect_param_2, track_node->effect_param2); cJSON_AddNumberToObject(node, node_effect_param_2_value, track_node->effect_param2_value); cJSON_AddItemToArray(array, node); } } } } // new save int size = synth->patterns_and_voices_width*synth->patterns_and_voices_height; int int_array[size]; int pos = 0; for(s_x = 0; s_x < synth->patterns_and_voices_width; s_x++) { for(s_y = 0; s_y < synth->patterns_and_voices_height; s_y++) { if(synth->patterns_and_voices != NULL && synth->patterns_and_voices[s_x] != NULL) { int_array[pos] = synth->patterns_and_voices[s_x][s_y]; pos++; } } } cJSON *json_int_array = cJSON_CreateIntArray(int_array, size); cJSON_AddItemToObject(root, node_patterns_and_voices, json_int_array); size = synth->patterns_width*synth->patterns_height; int int_array_patterns[size]; pos = 0; for(s_x = 0; s_x < synth->patterns_width; s_x++) { for(s_y = 0; s_y < synth->patterns_height; s_y++) { if(synth->patterns != NULL && synth->patterns[s_x] != NULL) { int_array_patterns[pos] = synth->patterns[s_x][s_y]; pos++; } } } json_int_array = cJSON_CreateIntArray(int_array_patterns, size); cJSON_AddItemToObject(root, node_patterns, json_int_array); // active tracks size = synth->patterns_height; int int_array_tracks[64]; for(i = 0; i < synth->patterns_height; i++) { int_array_tracks[i] = synth->active_tracks[i]; } json_int_array = cJSON_CreateIntArray(int_array_tracks, size); cJSON_AddItemToObject(root, node_active_tracks, json_int_array); // muted voices size = synth->max_voices; int int_array_voices[size]; for(i = 0; i < size; i++) { int_array_voices[i] = synth->voices[i]->muted; } json_int_array = cJSON_CreateIntArray(int_array_voices, size); cJSON_AddItemToObject(root, node_muted_voices, json_int_array); /* loop through all instruments, add to array. */ array = cJSON_CreateArray(); cJSON_AddItemToObject(root, node_instruments_adsr, array); for(i = 0; i < synth->max_instruments; i++) { instrument = cJSON_CreateArray(); /* add the 5 nodes to array. */ for(s_x = 0; s_x < synth->max_adsr_nodes; s_x++) { adsr_node = cJSON_CreateObject(); cJSON_AddNumberToObject(adsr_node, node_amp, synth->instruments[i]->adsr[s_x]->amp); cJSON_AddNumberToObject(adsr_node, node_pos, synth->instruments[i]->adsr[s_x]->pos); cJSON_AddItemToArray(instrument, adsr_node); } cJSON_AddItemToArray(array, instrument); } /* custom table instrument */ custom_table_node = cJSON_CreateObject(); cJSON_AddItemToObject(root, node_custom_table, custom_table_node); instrument = cJSON_CreateArray(); /* add the 5 nodes to array. */ for(s_x = 0; s_x < synth->max_adsr_nodes; s_x++) { adsr_node = cJSON_CreateObject(); cJSON_AddNumberToObject(adsr_node, node_amp, synth->custom_instrument->adsr[s_x]->amp); cJSON_AddNumberToObject(adsr_node, node_pos, synth->custom_instrument->adsr[s_x]->pos); cJSON_AddItemToArray(instrument, adsr_node); } cJSON_AddItemToObject(custom_table_node, node_custom_instrument, instrument); /* save tempo */ array = cJSON_CreateArray(); for(s_x = 0; s_x < synth->tempo_width; s_x++) { for(s_y = 0; s_y < synth->tempo_height; s_y++) { if(synth->tempo_map != NULL && synth->tempo_map[s_x] != NULL) { struct CTempoNode *t = synth->tempo_map[s_x][s_y]; tempo_node = cJSON_CreateObject(); cJSON_AddNumberToObject(tempo_node, node_tempo_x, s_x); cJSON_AddNumberToObject(tempo_node, node_tempo_y, s_y); if (s_y == 0) { cJSON_AddNumberToObject(tempo_node, node_tempo_bpm, t->bpm); } else { cJSON_AddNumberToObject(tempo_node, node_tempo_ticks, t->ticks); cJSON_AddNumberToObject(tempo_node, node_tempo_active, t->active); } cJSON_AddItemToArray(array, tempo_node); } } } cJSON_AddItemToObject(root, node_tempo, array); /* save wavetable */ array = cJSON_CreateArray(); for(s_x = 0; s_x < synth->wavetable_width; s_x++) { for(s_y = 0; s_y < synth->wavetable_height; s_y++) { if(synth->wavetable_map != NULL && synth->wavetable_map[s_x] != NULL) { struct CWavetableNode *t = synth->wavetable_map[s_x][s_y]; wavetable_node = cJSON_CreateObject(); cJSON_AddNumberToObject(wavetable_node, node_wavetable_x, s_x); cJSON_AddNumberToObject(wavetable_node, node_wavetable_y, s_y); if (s_y == 0) { cJSON_AddNumberToObject(wavetable_node, node_wavetable_speed, t->speed); } else { cJSON_AddNumberToObject(wavetable_node, node_wavetable_value, t->value); cJSON_AddNumberToObject(wavetable_node, node_wavetable_active, t->active); } cJSON_AddItemToArray(array, wavetable_node); } } } cJSON_AddItemToObject(root, node_wavetable, array); return root; } int cSynthLoadProject(struct CSynthContext *synth, const char* json) { cSynthResetTrackProgress(synth, 0, 0); /* reset voices */ for (int i = 0; i < synth->max_voices; i++) { struct CVoice *v = synth->voices[i]; cSynthResetVoice(synth, synth->sine_wave_table, v); } cJSON *object = NULL; cJSON *array = NULL; cJSON *node = NULL; cJSON *instrument = NULL; char *node_author = NULL; char *node_title = NULL; char *node_info = NULL; char *node_master_amp_percent = NULL; char *node_solo_voice = NULL; char *node_solo_track = NULL; char *node_active_tracks = NULL; char *node_muted_voices = NULL; char *node_track_height = NULL; char *node_arp = NULL; char *node_pattern = NULL; char *node_column = NULL; char *node_row = NULL; char *node_tone = NULL; char *node_tone_active = NULL; char *node_instrument = NULL; char *node_effect = NULL; char *node_effect_value = NULL; char *node_effect_param_1 = NULL; char *node_effect_param_1_value = NULL; char *node_effect_param_2 = NULL; char *node_effect_param_2_value = NULL; char *node_nodes = NULL; char *node_patterns_and_voices = NULL; char *node_patterns = NULL; char *node_instruments_adsr = NULL; char *node_amp = NULL; char *node_pos = NULL; char *node_instrument_effects = NULL; char *node_instrument_link = NULL; char *node_track_highlight_interval = NULL; char *node_tempo = NULL; char *node_tempo_active_column = NULL; char *node_tempo_bpm = NULL; char *node_tempo_ticks = NULL; char *node_tempo_active = NULL; char *node_tempo_x = NULL; char *node_tempo_y = NULL; char *node_wavetable = NULL; char *node_wavetable_speed = NULL; char *node_wavetable_value = NULL; char *node_wavetable_active = NULL; char *node_wavetable_x = NULL; char *node_wavetable_y = NULL; char *node_custom_table = NULL; char *node_custom_instrument = NULL; char *node_file_version = "file_version"; int i, s_x, s_y, nodes_size, pattern_count; cJSON *root = cJSON_Parse(json); if(root == NULL) { cSynthLoadFailed("root missing", root); return 0; } node_author = "author"; node_title = "title"; node_info = "info"; node_master_amp_percent = "master_amp_percent"; node_solo_voice = "solo_voice"; node_solo_track = "solo_track"; node_muted_voices = "muted_voices"; node_active_tracks = "active_tracks"; node_track_height = "track_height"; node_arp = "arp"; node_pattern = "p"; node_column = "c"; node_row = "r"; node_tone = "n"; node_tone_active = "t"; node_instrument = "i"; node_effect = "e"; node_effect_value = "f"; node_effect_param_1 = "g"; node_effect_param_1_value = "h"; node_effect_param_2 = "j"; node_effect_param_2_value = "k"; node_nodes = "nodes"; node_patterns_and_voices = "patterns_and_voices"; node_patterns = "patterns"; node_instruments_adsr = "instruments_adsr"; node_amp = "a"; node_pos = "p"; node_instrument_effects = "instrument_effects"; node_instrument_link = "i_l"; node_track_highlight_interval = "track_highlight_interval"; node_tempo = "tempo"; node_tempo_active_column = "active_tempo_column"; node_tempo_bpm = "b"; node_tempo_ticks = "t"; node_tempo_active = "a"; node_tempo_x = "x"; node_tempo_y = "y"; node_wavetable = "wavetable"; node_wavetable_speed = "s"; node_wavetable_value = "v"; node_wavetable_active = "a"; node_wavetable_x = "x"; node_wavetable_y = "y"; node_custom_table = "custom_table"; node_custom_instrument = "i"; object = cJSON_GetObjectItem(root, node_file_version); if(object == NULL) { cSynthLoadFailed("file version missing", root); return 0; } object = cJSON_GetObjectItem(root, node_author); if(object != NULL) { synth->str_author = cStrPrint(synth->str_author, object->valuestring); } object = cJSON_GetObjectItem(root, node_title); if(object != NULL) { synth->str_title = cStrPrint(synth->str_title, object->valuestring); } object = cJSON_GetObjectItem(root, node_info); if(object != NULL) { synth->str_info = cStrPrint(synth->str_info, object->valuestring); } object = cJSON_GetObjectItem(root, node_master_amp_percent); if(object != NULL) { synth->master_amp_percent = object->valueint; synth->master_amp = synth->master_amp_percent * 0.01; } object = cJSON_GetObjectItem(root, node_solo_voice); if(object != NULL) { synth->solo_voice = object->valueint; } object = cJSON_GetObjectItem(root, node_solo_track); if(object != NULL) { synth->solo_track = object->valueint; } object = cJSON_GetObjectItem(root, node_track_height); if(object == NULL) { cSynthLoadFailed("track height missing", root); return 0; } synth->track_height = object->valueint; object = cJSON_GetObjectItem(root, node_arp); if(object == NULL) { cSynthLoadFailed("arp missing", root); return 0; } synth->arpeggio_speed = object->valueint; object = cJSON_GetObjectItem(root, node_track_highlight_interval); if(object != NULL) { synth->track_highlight_interval = object->valueint; } object = cJSON_GetObjectItem(root, node_tempo_active_column); if(object != NULL) { synth->current_tempo_column = object->valueint; } object = cJSON_GetObjectItem(root, node_custom_table); if(object != NULL) { array = cJSON_GetObjectItem(object, node_custom_instrument); if(array != NULL) { /* add the 5 nodes to array. */ for(s_x = 0; s_x < synth->max_adsr_nodes; s_x++) { node = cJSON_GetArrayItem(array, s_x); synth->custom_instrument->adsr[s_x]->amp = cJSON_GetObjectItem(node, node_amp)->valuedouble; synth->custom_instrument->adsr[s_x]->pos = cJSON_GetObjectItem(node, node_pos)->valuedouble; if(s_x == 0) { // force first node to 0. synth->custom_instrument->adsr[s_x]->pos = 0.0; } } cSynthWriteCustomTableFromNodes(synth); } } /* nodes */ array = cJSON_GetObjectItem(root, node_nodes); nodes_size = cJSON_GetArraySize(array); for (i = 0; i < nodes_size; i++) { struct CTrackNode *track_node = cSynthNewTrackNode(); int value_node_pattern = 0; int value_node_column = 0; int value_node_row = 0; int value_node_tone = 0; int value_node_tone_active = 0; int value_node_instrument = 0; int value_node_effect = 0; int value_node_effect_value = 0; int value_node_effect_param_1 = 0; int value_node_effect_param_1_value = 0; int value_node_effect_param_2 = 0; int value_node_effect_param_2_value = 0; node = cJSON_GetArrayItem(array, i); object = cJSON_GetObjectItem(node, node_pattern); if(object == NULL) { cSynthLoadFailed("node_pattern missing", root); return 0; } value_node_pattern = object->valueint; object = cJSON_GetObjectItem(node, node_column); if(object == NULL) { cSynthLoadFailed("node_column missing", root); return 0; } value_node_column = object->valueint; object = cJSON_GetObjectItem(node, node_row); if(object == NULL) { cSynthLoadFailed("node_row missing", root); return 0; } value_node_row = object->valueint; object = cJSON_GetObjectItem(node, node_tone); if(object == NULL) { cSynthLoadFailed("node_note missing", root); return 0; } value_node_tone = object->valueint; object = cJSON_GetObjectItem(node, node_tone_active); if(object == NULL) { cSynthLoadFailed("node_tone_active missing", root); return 0; } value_node_tone_active = object->valueint; object = cJSON_GetObjectItem(node, node_instrument); if(object == NULL) { cSynthLoadFailed("node_instrument missing", root); return 0; } value_node_instrument = object->valueint; object = cJSON_GetObjectItem(node, node_effect); if(object == NULL) { cSynthLoadFailed("node_effect missing", root); return 0; } value_node_effect = object->valueint; object = cJSON_GetObjectItem(node, node_effect_value); if(object == NULL) { cSynthLoadFailed("node_effect_value missing", root); return 0; } value_node_effect_value = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_1); if(object == NULL) { cSynthLoadFailed("node_effect_param_1 missing", root); return 0; } value_node_effect_param_1 = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_1_value); if(object == NULL) { cSynthLoadFailed("node_effect_param_1_value missing", root); return 0; } value_node_effect_param_1_value = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_2); if(object == NULL) { cSynthLoadFailed("node_effect_param_2 missing", root); return 0; } value_node_effect_param_2 = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_2_value); if(object == NULL) { cSynthLoadFailed("node_effect_param_2_value missing", root); return 0; } value_node_effect_param_2_value = object->valueint; track_node->tone = value_node_tone; track_node->tone_active = value_node_tone_active; track_node->instrument_nr = value_node_instrument; track_node->instrument = synth->instruments[value_node_instrument]; track_node->effect = (char)value_node_effect; track_node->effect_value = (char)value_node_effect_value; track_node->effect_param1 = (char)value_node_effect_param_1; track_node->effect_param1_value = (char)value_node_effect_param_1_value; track_node->effect_param2 = (char)value_node_effect_param_2; track_node->effect_param2_value = (char)value_node_effect_param_2_value; synth->track[value_node_pattern][value_node_column][value_node_row] = track_node; } /* instrument effects */ for(s_x = 0; s_x < synth->max_instrument_effects; s_x++) { for(s_y = 0; s_y < synth->max_instrument_effects; s_y++) { if(synth->instrument_effects != NULL && synth->instrument_effects[s_x] != NULL) { if(synth->instrument_effects[s_x][s_y] != NULL) { synth->instrument_effects[s_x][s_y] = cAllocatorFree(synth->instrument_effects[s_x][s_y]); } } } } array = cJSON_GetObjectItem(root, node_instrument_effects); nodes_size = cJSON_GetArraySize(array); for (i = 0; i < nodes_size; i++) { struct CTrackNode *track_node = cSynthNewTrackNode(); int value_instrument_link = 0; int value_node_row = 0; int value_node_effect = 0; int value_node_effect_value = 0; int value_node_effect_param_1 = 0; int value_node_effect_param_1_value = 0; int value_node_effect_param_2 = 0; int value_node_effect_param_2_value = 0; node = cJSON_GetArrayItem(array, i); object = cJSON_GetObjectItem(node, node_instrument_link); if(object == NULL) { cSynthLoadFailed("node_pattern missing", root); return 0; } value_instrument_link = object->valueint; object = cJSON_GetObjectItem(node, node_row); if(object == NULL) { cSynthLoadFailed("node_row missing", root); return 0; } value_node_row = object->valueint; object = cJSON_GetObjectItem(node, node_effect); if(object == NULL) { cSynthLoadFailed("node_effect missing", root); return 0; } value_node_effect = object->valueint; object = cJSON_GetObjectItem(node, node_effect_value); if(object == NULL) { cSynthLoadFailed("node_effect_value missing", root); return 0; } value_node_effect_value = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_1); if(object == NULL) { cSynthLoadFailed("node_effect_param_1 missing", root); return 0; } value_node_effect_param_1 = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_1_value); if(object == NULL) { cSynthLoadFailed("node_effect_param_1_value missing", root); return 0; } value_node_effect_param_1_value = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_2); if(object == NULL) { cSynthLoadFailed("node_effect_param_2 missing", root); return 0; } value_node_effect_param_2 = object->valueint; object = cJSON_GetObjectItem(node, node_effect_param_2_value); if(object == NULL) { cSynthLoadFailed("node_effect_param_2_value missing", root); return 0; } value_node_effect_param_2_value = object->valueint; track_node->effect = (char)value_node_effect; track_node->effect_value = (char)value_node_effect_value; track_node->effect_param1 = (char)value_node_effect_param_1; track_node->effect_param1_value = (char)value_node_effect_param_1_value; track_node->effect_param2 = (char)value_node_effect_param_2; track_node->effect_param2_value = (char)value_node_effect_param_2_value; synth->instrument_effects[value_instrument_link][value_node_row] = track_node; } array = cJSON_GetObjectItem(root, node_patterns_and_voices); pattern_count = 0; /* loop through all patterns and voices */ for(s_x = 0; s_x < synth->patterns_and_voices_width; s_x++) { for(s_y = 0; s_y < synth->patterns_and_voices_height; s_y++) { if(synth->patterns_and_voices != NULL && synth->patterns_and_voices[s_x] != NULL) { node = cJSON_GetArrayItem(array, pattern_count); synth->patterns_and_voices[s_x][s_y] = node->valueint; pattern_count++; } } } array = cJSON_GetObjectItem(root, node_patterns); pattern_count = 0; /* loop through all patterns */ for(s_x = 0; s_x < synth->patterns_width; s_x++) { for(s_y = 0; s_y < synth->patterns_height; s_y++) { if(synth->patterns != NULL && synth->patterns[s_x] != NULL) { node = cJSON_GetArrayItem(array, pattern_count); synth->patterns[s_x][s_y] = node->valueint; pattern_count++; } } } // active tracks array = cJSON_GetObjectItem(root, node_active_tracks); pattern_count = 0; /* loop through all patterns */ for(i = 0; i < synth->patterns_height; i++) { node = cJSON_GetArrayItem(array, i); synth->active_tracks[i] = node->valueint; pattern_count++; } // muted voices array = cJSON_GetObjectItem(root, node_muted_voices); pattern_count = 0; /* loop through all voices */ for(i = 0; i < synth->max_voices; i++) { node = cJSON_GetArrayItem(array, i); synth->voices[i]->muted = node->valueint; pattern_count++; } array = cJSON_GetObjectItem(root, node_instruments_adsr); /* loop through all instruments */ for(i = 0; i < synth->max_instruments; i++) { instrument = cJSON_GetArrayItem(array, i); /* add the 5 nodes to array. */ for(s_x = 0; s_x < synth->max_adsr_nodes; s_x++) { node = cJSON_GetArrayItem(instrument, s_x); synth->instruments[i]->adsr[s_x]->amp = cJSON_GetObjectItem(node, node_amp)->valuedouble; synth->instruments[i]->adsr[s_x]->pos = cJSON_GetObjectItem(node, node_pos)->valuedouble; } } // reset tempo for(s_x = 0; s_x < synth->tempo_width; s_x++) { for(s_y = 0; s_y < synth->tempo_height; s_y++) { if(synth->tempo_map != NULL && synth->tempo_map[s_x] != NULL) { if (s_y == 0) { synth->tempo_map[s_x][s_y]->bpm = synth->default_bpm; } else if(s_y == 1 || (s_x == 0 && s_y < 5 && s_y > 0)) { synth->tempo_map[s_x][s_y]->active = true; synth->tempo_map[s_x][s_y]->ticks = 4; } } } } // tempo int value_node_tempo_x = 0; int value_node_tempo_y = 0; int value_node_tempo_ticks = 0; int value_node_tempo_bpm = 0; int value_node_tempo_active = 0; array = cJSON_GetObjectItem(root, node_tempo); if(array != NULL) { nodes_size = cJSON_GetArraySize(array); for(i = 0; i < nodes_size; i++) { node = cJSON_GetArrayItem(array, i); object = cJSON_GetObjectItem(node, node_tempo_y); if(object != NULL) { value_node_tempo_y = object->valueint; if(value_node_tempo_y == 0) { object = cJSON_GetObjectItem(node, node_tempo_x); if(object != NULL) { value_node_tempo_x = object->valueint; } else { if(synth->errorlog) { printf("error: node_tempo_x is null\n"); } } object = cJSON_GetObjectItem(node, node_tempo_bpm); if(object != NULL) { value_node_tempo_bpm = object->valueint; } else { if(synth->errorlog) { printf("error: node_tempo_bpm is null\n"); } } synth->tempo_map[value_node_tempo_x][value_node_tempo_y]->bpm = value_node_tempo_bpm; } else { object = cJSON_GetObjectItem(node, node_tempo_x); if(object != NULL) { value_node_tempo_x = object->valueint; } else { if(synth->errorlog) { printf("error: node_tempo_x is null\n"); } } object = cJSON_GetObjectItem(node, node_tempo_active); if(object != NULL) { value_node_tempo_active = object->valueint; } else { if(synth->errorlog) { printf("error: node_tempo_active is null\n"); } } object = cJSON_GetObjectItem(node, node_tempo_ticks); if(object != NULL) { value_node_tempo_ticks = object->valueint; } else { if(synth->errorlog) { printf("error: node_tempo_ticks is null\n"); } } synth->tempo_map[value_node_tempo_x][value_node_tempo_y]->active = value_node_tempo_active; synth->tempo_map[value_node_tempo_x][value_node_tempo_y]->ticks = (char)value_node_tempo_ticks; } } else { if(synth->errorlog) { printf("error: node_tempo_y is null\n"); } } } } int value_node_wavetable_x = 0; int value_node_wavetable_y = 0; int value_node_wavetable_value = 0; int value_node_wavetable_speed = 0; int value_node_wavetable_active = 0; array = cJSON_GetObjectItem(root, node_wavetable); if(array != NULL) { nodes_size = cJSON_GetArraySize(array); for(i = 0; i < nodes_size; i++) { node = cJSON_GetArrayItem(array, i); object = cJSON_GetObjectItem(node, node_wavetable_y); if(object != NULL) { value_node_wavetable_y = object->valueint; if(value_node_wavetable_y == 0) { object = cJSON_GetObjectItem(node, node_wavetable_x); if(object != NULL) { value_node_wavetable_x = object->valueint; } else { if(synth->errorlog) { printf("error: node_wavetable_x is null\n"); } } object = cJSON_GetObjectItem(node, node_wavetable_speed); if(object != NULL) { value_node_wavetable_speed = object->valueint; } else { if(synth->errorlog) { printf("error: node_wavetable_bpm is null\n"); } } synth->wavetable_map[value_node_wavetable_x][value_node_wavetable_y]->speed = value_node_wavetable_speed; } else { object = cJSON_GetObjectItem(node, node_wavetable_x); if(object != NULL) { value_node_wavetable_x = object->valueint; } else { if(synth->errorlog) { printf("error: node_wavetable_x is null\n"); } } object = cJSON_GetObjectItem(node, node_wavetable_active); if(object != NULL) { value_node_wavetable_active = object->valueint; } else { if(synth->errorlog) { printf("error: node_wavetable_active is null\n"); } } object = cJSON_GetObjectItem(node, node_wavetable_value); if(object != NULL) { value_node_wavetable_value = object->valueint; } else { if(synth->errorlog) { printf("error: node_wavetable_ticks is null\n"); } } synth->wavetable_map[value_node_wavetable_x][value_node_wavetable_y]->active = value_node_wavetable_active; synth->wavetable_map[value_node_wavetable_x][value_node_wavetable_y]->value = (char)value_node_wavetable_value; } } else { if(synth->errorlog) { printf("error: node_wavetable_y is null\n"); } } } } cSynthSetWaveformsFromPattern(synth); cJSON_Delete(root); return 1; } static void cSynthLoadFailed(char *reason, cJSON *json) { if(json != NULL) { printf("load failed:%s json:%s\n", reason, cJSON_Print(json)); } else { printf("load failed:%s\n", reason); } } void cSynthReset(struct CSynthContext *synth) { synth->str_author = cStrCleanup(synth->str_author); synth->str_title = cStrCleanup(synth->str_title); synth->str_info = cStrCleanup(synth->str_info); synth->track_cursor_x = 0; synth->track_cursor_y = 0; synth->bitcrush_active = false; cSynthResetTrackProgress(synth, 0, 0); /* reset voices */ for (int i = 0; i < synth->max_voices; i++) { struct CVoice *v = synth->voices[i]; cSynthResetVoice(synth, synth->sine_wave_table, v); } synth->voices[0]->waveform = synth->sine_wave_table; synth->voices[1]->waveform = synth->sawtooth_wave_table; synth->voices[2]->waveform = synth->square_wave_table; synth->voices[3]->waveform = synth->triangle_wave_table; synth->voices[4]->waveform = synth->noise_table; synth->voices[5]->waveform = synth->noise_table; /* clear all track nodes before loading */ int i = 0; int a = 0; int s_x = 0; int s_y = 0; for(a = 0; a < synth->max_tracks_and_patterns; a++) { for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->track[a] != NULL && synth->track[a][s_x] != NULL) { synth->track[a][s_x][s_y] = cAllocatorFree(synth->track[a][s_x][s_y]); } } } } for(s_x = 0; s_x < synth->patterns_and_voices_width; s_x++) { for(s_y = 0; s_y < synth->patterns_and_voices_height; s_y++) { if(synth->patterns_and_voices != NULL && synth->patterns_and_voices[s_x] != NULL) { synth->patterns_and_voices[s_x][s_y] = 0; } } } for(s_x = 0; s_x < synth->patterns_and_voices_width; s_x++) { for(s_y = 0; s_y < synth->patterns_and_voices_height; s_y++) { if(synth->patterns_and_voices != NULL && synth->patterns_and_voices[s_x] != NULL) { if(s_x == 0 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 0; } else if(s_x == 1 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 1; } else if(s_x == 2 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 2; } else if(s_x == 3 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 3; } else if(s_x == 4 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 4; } else if(s_x == 5 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 4; } } } } synth->master_amp = 0.5; synth->master_amp_percent = 50; synth->default_bpm = 120; synth->current_instrument = 0; synth->track_height = 16; synth->current_track = 0; synth->arpeggio_speed = 10; //patterns for(s_x = 0; s_x < synth->patterns_width; s_x++) { for(s_y = 0; s_y < synth->patterns_height; s_y++) { if(synth->patterns != NULL && synth->patterns[s_x] != NULL) { synth->patterns[s_x][s_y] = 0; } } } /* active tracks */ for (i = 0; i < synth->patterns_height; i++) { synth->active_tracks[i] = 0; } // activate first track synth->active_tracks[0] = 1; // no track or voice is solo to begin with. synth->solo_track = -1; synth->solo_voice = -1; /* tempo */ for(s_x = 0; s_x < synth->tempo_width; s_x++) { for(s_y = 0; s_y < synth->tempo_height; s_y++) { if(synth->tempo_map != NULL && synth->tempo_map[s_x] != NULL) { synth->tempo_map[s_x][s_y]->active = false; synth->tempo_map[s_x][s_y]->ticks = 1; if (s_y == 0) { synth->tempo_map[s_x][s_y]->bpm = synth->default_bpm; } else if(s_y == 1 || (s_x == 0 && s_y < 5 && s_y > 0)) { synth->tempo_map[s_x][s_y]->active = true; synth->tempo_map[s_x][s_y]->ticks = 4; } } else { fprintf(stderr, "error allocating tempo_node, setting null."); } } } synth->current_tempo_column = 0; /* envelopes */ for(i = 0; i < synth->max_instruments; i++) { cSynthInstrumentResetEnvelope(synth->instruments[i]); } /* instrument effects */ for(s_x = 0; s_x < synth->max_instrument_effects; s_x++) { for(s_y = 0; s_y < synth->max_instrument_effects; s_y++) { if(synth->instrument_effects != NULL && synth->instrument_effects[s_x] != NULL) { if(synth->instrument_effects[s_x][s_y] != NULL) { synth->instrument_effects[s_x][s_y] = cAllocatorFree(synth->instrument_effects[s_x][s_y]); } } } } // swap track for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->swap_track != NULL && synth->swap_track[s_x] != NULL && synth->swap_track[s_x][s_y] != NULL) { synth->swap_track[s_x][s_y] = cAllocatorFree(synth->swap_track[s_x][s_y]); } } } // copy track for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->copy_track != NULL && synth->copy_track[s_x] != NULL && synth->copy_track[s_x][s_y] != NULL) { synth->copy_track[s_x][s_y] = cAllocatorFree(synth->copy_track[s_x][s_y]); } } } // custom instrument synth->custom_instrument->adsr[0]->amp = 0.0; synth->custom_instrument->adsr[0]->pos = 0.0; synth->custom_instrument->adsr[1]->amp = 1.0; synth->custom_instrument->adsr[1]->pos = 0.4; synth->custom_instrument->adsr[2]->amp = 0.0; synth->custom_instrument->adsr[2]->pos = 0.6; synth->custom_instrument->adsr[3]->amp = -1.0; synth->custom_instrument->adsr[3]->pos = 0.8; synth->custom_instrument->adsr[4]->amp = 0.0; synth->custom_instrument->adsr[4]->pos = 1.0; // wavetable for(s_x = 0; s_x < synth->wavetable_width; s_x++) { for(s_y = 0; s_y < synth->wavetable_height; s_y++) { if(synth->wavetable_map != NULL && synth->wavetable_map[s_x] != NULL) { if(synth->wavetable_map[s_x][s_y] != NULL) { synth->wavetable_map[s_x][s_y]->active = false; synth->wavetable_map[s_x][s_y]->value = 1; synth->wavetable_map[s_x][s_y]->speed = 1; if (s_y == 0) { synth->wavetable_map[s_x][s_y]->speed = 50; } else if(s_y == 2) { synth->wavetable_map[s_x][s_y]->active = true; synth->wavetable_map[s_x][s_y]->value = 1; } } } } } } void cSynthCleanup(struct CSynthContext *synth) { int i; int a; int s_x; int s_y; int c; if(synth != NULL) { /* patterns and voices */ for(i = 0; i < synth->patterns_and_voices_width; i++) { synth->patterns_and_voices[i] = cAllocatorFree(synth->patterns_and_voices[i]); } synth->patterns_and_voices = cAllocatorFree(synth->patterns_and_voices); for(i = 0; i < synth->patterns_width; i++) { synth->patterns[i] = cAllocatorFree(synth->patterns[i]); } synth->patterns = cAllocatorFree(synth->patterns); /* track */ for(a = 0; a < synth->patterns_height; a++) { for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->track[a] != NULL && synth->track[a][s_x] != NULL) { synth->track[a][s_x][s_y] = cAllocatorFree(synth->track[a][s_x][s_y]); } } } } for(a = 0; a < synth->patterns_height; a++) { for(i = 0; i < synth->track_width; i++) { if(synth->track[a] != NULL) { synth->track[a][i] = cAllocatorFree(synth->track[a][i]); } } } for(a = 0; a < synth->patterns_height; a++) { synth->track[a] = cAllocatorFree(synth->track[a]); } synth->track = cAllocatorFree(synth->track); /* swap track */ for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->swap_track != NULL && synth->swap_track[s_x] != NULL) { synth->swap_track[s_x][s_y] = cAllocatorFree(synth->swap_track[s_x][s_y]); } } } for(i = 0; i < synth->track_width; i++) { if(synth->swap_track != NULL) { synth->swap_track[i] = cAllocatorFree(synth->swap_track[i]); } } synth->swap_track = cAllocatorFree(synth->swap_track); /* copy track */ for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->copy_track != NULL && synth->copy_track[s_x] != NULL) { synth->copy_track[s_x][s_y] = cAllocatorFree(synth->copy_track[s_x][s_y]); } } } for(i = 0; i < synth->track_width; i++) { if(synth->copy_track != NULL) { synth->copy_track[i] = cAllocatorFree(synth->copy_track[i]); } } synth->copy_track = cAllocatorFree(synth->copy_track); /* instrument effects */ for(s_x = 0; s_x < synth->max_instrument_effects; s_x++) { for(s_y = 0; s_y < synth->max_instrument_effects; s_y++) { if(synth->instrument_effects != NULL && synth->instrument_effects[s_x] != NULL) { synth->instrument_effects[s_x][s_y] = cAllocatorFree(synth->instrument_effects[s_x][s_y]); } } } for(i = 0; i < synth->max_instrument_effects; i++) { if(synth->instrument_effects != NULL) { synth->instrument_effects[i] = cAllocatorFree(synth->instrument_effects[i]); } } synth->instrument_effects = cAllocatorFree(synth->instrument_effects); /* temp mixdown buffer */ for(i = 0; i < synth->max_voices; i++) { if(synth->temp_mixdown_buffer != NULL) { synth->temp_mixdown_buffer[i] = cAllocatorFree(synth->temp_mixdown_buffer[i]); } } synth->temp_mixdown_buffer = cAllocatorFree(synth->temp_mixdown_buffer); /* voices and instruments */ for(i = 0; i < synth->max_voices; i++) { if(synth->voices[i]->delay_buffer != NULL) { synth->voices[i]->delay_buffer = cAllocatorFree(synth->voices[i]->delay_buffer); } synth->voices[i] = cAllocatorFree(synth->voices[i]); } synth->voices = cAllocatorFree(synth->voices); for(i = 0; i < synth->max_instruments; i++) { for(c = 0; c < synth->instruments[i]->adsr_nodes; c++) { synth->instruments[i]->adsr[c] = cAllocatorFree(synth->instruments[i]->adsr[c]); } synth->instruments[i]->adsr = cAllocatorFree(synth->instruments[i]->adsr); synth->instruments[i] = cAllocatorFree(synth->instruments[i]); } synth->instruments = cAllocatorFree(synth->instruments); for(c = 0; c < synth->custom_instrument->adsr_nodes; c++) { synth->custom_instrument->adsr[c] = cAllocatorFree(synth->custom_instrument->adsr[c]); } synth->custom_instrument->adsr = cAllocatorFree(synth->custom_instrument->adsr); synth->custom_instrument = cAllocatorFree(synth->custom_instrument); /* tempo */ for(s_x = 0; s_x < synth->tempo_width; s_x++) { for(s_y = 0; s_y < synth->tempo_height; s_y++) { if(synth->tempo_map != NULL && synth->tempo_map[s_x] != NULL) { synth->tempo_map[s_x][s_y] = cAllocatorFree(synth->tempo_map[s_x][s_y]); } } } for(i = 0; i < synth->tempo_width; i++) { if(synth->tempo_map != NULL) { synth->tempo_map[i] = cAllocatorFree(synth->tempo_map[i]); } } synth->tempo_map = cAllocatorFree(synth->tempo_map); /* wavetable */ for(s_x = 0; s_x < synth->wavetable_width; s_x++) { for(s_y = 0; s_y < synth->wavetable_height; s_y++) { if(synth->wavetable_map != NULL && synth->wavetable_map[s_x] != NULL) { synth->wavetable_map[s_x][s_y] = cAllocatorFree(synth->wavetable_map[s_x][s_y]); } } } for(i = 0; i < synth->wavetable_width; i++) { if(synth->wavetable_map != NULL) { synth->wavetable_map[i] = cAllocatorFree(synth->wavetable_map[i]); } } synth->wavetable_map = cAllocatorFree(synth->wavetable_map); /* tables */ synth->sine_wave_table = cAllocatorFree(synth->sine_wave_table); synth->sawtooth_wave_table = cAllocatorFree(synth->sawtooth_wave_table); synth->square_wave_table = cAllocatorFree(synth->square_wave_table); synth->triangle_wave_table = cAllocatorFree(synth->triangle_wave_table); synth->noise_table = cAllocatorFree(synth->noise_table); synth->custom_table = cAllocatorFree(synth->custom_table); synth->active_tracks = cAllocatorFree(synth->active_tracks); /* synth */ cAllocatorFree(synth); } } void cSynthInitData(struct CSynthContext *synth) { int a, i, s_x, s_y; if(synth != NULL) { synth->temp_mixdown_buffer = cAllocatorAlloc(sizeof(int16_t*)*synth->max_voices, "mixdown buffer 1"); for (i = 0; i < synth->max_voices; i++) { synth->temp_mixdown_buffer[i] = cAllocatorAlloc(sizeof(int16_t)*synth->temp_mixdown_size, "mixdown buffer 2"); } for(i = 0; i < synth->max_voices; i++) { for(s_x = 0; s_x < synth->temp_mixdown_size; s_x++) { synth->temp_mixdown_buffer[i][s_x] = 0; } } synth->sine_wave_table = cAllocatorAlloc(sizeof(int16_t)*synth->wave_length, "PCM table"); cSynthBuildSineWave(synth->sine_wave_table, synth->wave_length); synth->sawtooth_wave_table = cAllocatorAlloc(sizeof(int16_t)*synth->wave_length, "PCM table"); cSynthBuildSawtoothWave(synth->sawtooth_wave_table, synth->wave_length); synth->square_wave_table = cAllocatorAlloc(sizeof(int16_t)*synth->wave_length, "PCM table"); cSynthBuildSquareWave(synth->square_wave_table, synth->wave_length); synth->triangle_wave_table = cAllocatorAlloc(sizeof(int16_t)*synth->wave_length, "PCM table"); cSynthBuildTriangleWave(synth->triangle_wave_table, synth->wave_length); synth->noise_table = cAllocatorAlloc(sizeof(int16_t)*synth->noise_length, "PCM table"); cSynthBuildNoise(synth->noise_table, synth->noise_length); synth->custom_table = cAllocatorAlloc(sizeof(int16_t)*synth->wave_length, "PCM table"); for (i = 0; i < synth->wave_length; i++) { synth->custom_table[i] = 0; } synth->voices = cAllocatorAlloc(sizeof(struct CVoice*)*synth->max_voices, "Synth Voices"); for(i = 0; i < synth->max_voices; i++) { synth->voices[i] = NULL; } synth->instruments = cAllocatorAlloc(sizeof(struct CInstrument*)*synth->max_instruments, "Synth Instruments"); for(i = 0; i < synth->max_instruments; i++) { synth->instruments[i] = cSynthNewInstrument(synth); synth->instruments[i]->instrument_number = i; } for (i = 0; i < synth->max_voices; i++) { struct CVoice *v = cSynthNewVoice(synth, synth->sine_wave_table); v->active = false; v->int_id = i; synth->voices[i] = v; } synth->custom_instrument = cSynthNewInstrument(synth); synth->custom_instrument->adsr[0]->amp = 0.0; synth->custom_instrument->adsr[0]->pos = 0.0; synth->custom_instrument->adsr[1]->amp = 1.0; synth->custom_instrument->adsr[1]->pos = 0.4; synth->custom_instrument->adsr[2]->amp = 0.0; synth->custom_instrument->adsr[2]->pos = 0.6; synth->custom_instrument->adsr[3]->amp = -1.0; synth->custom_instrument->adsr[3]->pos = 0.8; synth->custom_instrument->adsr[4]->amp = 0.0; synth->custom_instrument->adsr[4]->pos = 1.0; cSynthWriteCustomTableFromNodes(synth); /* init track */ synth->track = cAllocatorAlloc(synth->track_width * sizeof(int)*synth->patterns_height, "Synth Tracks"); if(synth->track == NULL) { fprintf(stderr, "synth track out of memory\n"); } for(a = 0; a < synth->patterns_height; a++) { if(synth->track != NULL) { synth->track[a] = cAllocatorAlloc(synth->track_width * sizeof(struct CTrackNode**), "Synth Track 1"); for(i = 0; i < synth->track_width; i++) { if(synth->track[a] != NULL) { synth->track[a][i] = cAllocatorAlloc(synth->track_max_height * sizeof(struct CTrackNode*), "Synth Track 2"); if(synth->track[a][i] == NULL) { fprintf(stderr, "synth track out of memory\n"); } } } } } for(a = 0; a < synth->patterns_height; a++) { if(synth->track != NULL) { for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->track[a] != NULL && synth->track[a][s_x] != NULL) { synth->track[a][s_x][s_y] = NULL; } else { fprintf(stderr, "error not setting null! track"); } } } } } /* swap track */ synth->swap_track = cAllocatorAlloc(synth->track_width * sizeof(struct CTrackNode**), "Synth swap track 1"); for(i = 0; i < synth->track_width; i++) { if(synth->swap_track != NULL) { synth->swap_track[i] = cAllocatorAlloc(synth->track_max_height * sizeof(struct CTrackNode*), "Synth swap track 2"); if(synth->swap_track[i] == NULL) { fprintf(stderr, "synth swap track out of memory\n"); } } } for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->swap_track != NULL && synth->swap_track[s_x] != NULL) { synth->swap_track[s_x][s_y] = NULL; } else { fprintf(stderr, "error not setting null!"); } } } /* copy track */ synth->copy_track = cAllocatorAlloc(synth->track_width * sizeof(struct CTrackNode**), "Synth copy track 1"); for(i = 0; i < synth->track_width; i++) { if(synth->copy_track != NULL) { synth->copy_track[i] = cAllocatorAlloc(synth->track_max_height * sizeof(struct CTrackNode*), "Synth copy track 2"); if(synth->copy_track[i] == NULL) { fprintf(stderr, "synth swap track out of memory\n"); } } } for(s_x = 0; s_x < synth->track_width; s_x++) { for(s_y = 0; s_y < synth->track_max_height; s_y++) { if(synth->copy_track != NULL && synth->copy_track[s_x] != NULL) { synth->copy_track[s_x][s_y] = NULL; } else { fprintf(stderr, "error not setting null! copy"); } } } /* instrument effects */ synth->instrument_effects = cAllocatorAlloc(synth->max_instrument_effects * sizeof(struct CTrackNode**), "Synth instrument effects 1"); for(i = 0; i < synth->max_instrument_effects; i++) { if(synth->instrument_effects != NULL) { synth->instrument_effects[i] = cAllocatorAlloc(synth->max_instrument_effects * sizeof(struct CTrackNode*), "Synth instrument effects 2"); if(synth->instrument_effects[i] == NULL) { fprintf(stderr, "synth swap track out of memory\n"); } } } for(s_x = 0; s_x < synth->max_instrument_effects; s_x++) { for(s_y = 0; s_y < synth->max_instrument_effects; s_y++) { if(synth->instrument_effects != NULL && synth->instrument_effects[s_x] != NULL) { synth->instrument_effects[s_x][s_y] = NULL; } else { fprintf(stderr, "error not setting null! ins"); } } } /* init voice types and settings */ synth->patterns_and_voices = cAllocatorAlloc(synth->patterns_and_voices_width * sizeof(int*), "Synth Patterns and Voices"); if(synth->patterns_and_voices == NULL) { fprintf(stderr, "out of memory\n"); } else { for(i = 0; i < synth->patterns_and_voices_width; i++) { synth->patterns_and_voices[i] = cAllocatorAlloc(synth->patterns_and_voices_height * sizeof(int), "Synth Patterns and Voices"); if(synth->patterns_and_voices[i] == NULL) { fprintf(stderr, "out of memory\n"); } } for(s_x = 0; s_x < synth->patterns_and_voices_width; s_x++) { for(s_y = 0; s_y < synth->patterns_and_voices_height; s_y++) { if(synth->patterns_and_voices != NULL && synth->patterns_and_voices[s_x] != NULL) { synth->patterns_and_voices[s_x][s_y] = 0; } } } for(s_x = 0; s_x < synth->patterns_and_voices_width; s_x++) { for(s_y = 0; s_y < synth->patterns_and_voices_height; s_y++) { if(synth->patterns_and_voices != NULL && synth->patterns_and_voices[s_x] != NULL) { if(s_x == 0 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 0; } else if(s_x == 1 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 1; } else if(s_x == 2 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 2; } else if(s_x == 3 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 3; } else if(s_x == 4 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 4; } else if(s_x == 5 && s_y == 0) { synth->patterns_and_voices[s_x][s_y] = 4; } } } } } /* patterns */ synth->patterns = cAllocatorAlloc(synth->patterns_width * sizeof(int*), "Synth Patterns"); if(synth->patterns == NULL) { fprintf(stderr, "out of memory\n"); } else { for(i = 0; i < synth->patterns_width; i++) { synth->patterns[i] = cAllocatorAlloc(synth->patterns_height * sizeof(int), "Synth Patterns 2"); if(synth->patterns[i] == NULL) { fprintf(stderr, "out of memory\n"); } } for(s_x = 0; s_x < synth->patterns_width; s_x++) { for(s_y = 0; s_y < synth->patterns_height; s_y++) { if(synth->patterns != NULL && synth->patterns[s_x] != NULL) { synth->patterns[s_x][s_y] = 0; } } } } synth->voices[0]->waveform = synth->sine_wave_table; synth->voices[1]->waveform = synth->sawtooth_wave_table; synth->voices[2]->waveform = synth->square_wave_table; synth->voices[3]->waveform = synth->triangle_wave_table; synth->voices[4]->waveform = synth->noise_table; synth->voices[5]->waveform = synth->noise_table; synth->active_tracks = cAllocatorAlloc(sizeof(int) * synth->patterns_height, "active tracks"); for (i = 0; i < synth->patterns_height; i++) { synth->active_tracks[i] = 0; } // activate first track synth->active_tracks[0] = 1; // no track or voice is solo to begin with. synth->solo_track = -1; synth->solo_voice = -1; /* tempo */ synth->tempo_map = cAllocatorAlloc(synth->tempo_width * sizeof(struct CTempoNode**), "Synth tempo 1"); for(i = 0; i < synth->tempo_width; i++) { if(synth->tempo_map != NULL) { synth->tempo_map[i] = cAllocatorAlloc(synth->tempo_height * sizeof(struct CTempoNode*), "Synth tempo 2"); if(synth->tempo_map[i] == NULL) { fprintf(stderr, "synth tempo out of memory\n"); } } } for(s_x = 0; s_x < synth->tempo_width; s_x++) { for(s_y = 0; s_y < synth->tempo_height; s_y++) { if(synth->tempo_map != NULL && synth->tempo_map[s_x] != NULL) { synth->tempo_map[s_x][s_y] = cSynthNewTempoNode(); if (s_y == 0) { synth->tempo_map[s_x][s_y]->bpm = synth->default_bpm; } else if(s_y == 1 || (s_x == 0 && s_y < 5 && s_y > 0)) { synth->tempo_map[s_x][s_y]->active = true; synth->tempo_map[s_x][s_y]->ticks = 4; } } else { fprintf(stderr, "error allocating tempo_node, setting null."); } } } synth->current_tempo_column = 0; /* wavetable */ synth->wavetable_map = cAllocatorAlloc(synth->wavetable_width * sizeof(struct CWavetableNode**), "Synth wavetable 1"); for(i = 0; i < synth->wavetable_width; i++) { if(synth->wavetable_map != NULL) { synth->wavetable_map[i] = cAllocatorAlloc(synth->wavetable_height * sizeof(struct CWavetableNode*), "Synth wavetable 2"); if(synth->wavetable_map[i] == NULL) { fprintf(stderr, "synth tempo out of memory\n"); } } } for(s_x = 0; s_x < synth->wavetable_width; s_x++) { for(s_y = 0; s_y < synth->wavetable_height; s_y++) { if(synth->wavetable_map != NULL && synth->wavetable_map[s_x] != NULL) { synth->wavetable_map[s_x][s_y] = cSynthNewWavetableNode(); if (s_y == 0) { synth->wavetable_map[s_x][s_y]->speed = 50; } else if(s_y == 2) { synth->wavetable_map[s_x][s_y]->active = true; synth->wavetable_map[s_x][s_y]->value = 1; } } else { fprintf(stderr, "error allocating tempo_node, setting null."); } } } synth->mod_adsr_cursor = cSynthGetRelativeModifier(synth->base_mod_adsr_cursor, synth->sample_rate, synth->interleaved, false); synth->mod_noteoff_slope = cSynthGetRelativeModifier(synth->base_mod_noteoff_slope, synth->sample_rate, synth->interleaved, false); synth->mod_advance_amp_targets = cSynthGetRelativeModifier(synth->base_mod_advance_amp_targets, synth->sample_rate, synth->interleaved, false); synth->mod_pwm_speed = cSynthGetRelativeModifier(synth->base_mod_pwm_speed, synth->sample_rate, synth->interleaved, false); synth->mod_vibrato_speed = cSynthGetRelativeModForChunks(synth->base_mod_vibrato_speed, synth->sample_rate, synth->chunk_size, synth->interleaved, false); synth->mod_vibrato_depth = 0.000005; synth->mod_pitch_1 = cSynthGetRelativeModForChunks(synth->base_mod_pitch_1, synth->sample_rate, synth->chunk_size, synth->interleaved, false); synth->mod_pitch_2 = cSynthGetRelativeModForChunks(synth->base_mod_pitch_2, synth->sample_rate, synth->chunk_size, synth->interleaved, false); synth->mod_arp_speed = cSynthGetRelativeModForChunks(synth->base_mod_arp_speed, synth->sample_rate, synth->chunk_size, synth->interleaved, false); synth->mod_portamento_speed = cSynthGetRelativeModForChunks(synth->base_mod_portamento_speed, synth->sample_rate, synth->chunk_size, synth->interleaved, false); synth->mod_detune = cSynthGetRelativeModForChunks(synth->base_mod_detune, synth->sample_rate, synth->chunk_size, synth->interleaved, false); } else { fprintf(stderr, "CSynth error: cannot init data"); } } static struct CTempoNode *cSynthNewTempoNode(void) { struct CTempoNode *t = cAllocatorAlloc(sizeof(struct CTempoNode), "CTempoNode"); t->active = false; t->ticks = 1; t->bpm = 0; return t; } static struct CWavetableNode *cSynthNewWavetableNode(void) { struct CWavetableNode *t = cAllocatorAlloc(sizeof(struct CWavetableNode), "CWavetableNode"); t->active = false; t->value = 1; t->speed = 1; return t; } static void cSynthSetWaveformsFromPattern(struct CSynthContext *synth) { for(int x = 0; x < synth->track_width; x++) { int current_waveform = synth->patterns_and_voices[x][0]; if(current_waveform == 0) { synth->voices[x]->waveform = synth->sine_wave_table; } if(current_waveform == 1) { synth->voices[x]->waveform = synth->sawtooth_wave_table; } if(current_waveform == 2) { synth->voices[x]->waveform = synth->square_wave_table; } if(current_waveform == 3) { synth->voices[x]->waveform = synth->triangle_wave_table; } if(current_waveform == 4) { synth->voices[x]->waveform = synth->noise_table; } if(current_waveform == 5) { synth->voices[x]->waveform = synth->custom_table; } } } static void cSynthChangeWaveformForChannel(struct CSynthContext *synth, int channel, int waveform) { if(channel > -1 && channel < synth->max_voices && waveform > -1 && waveform < 6) { synth->patterns_and_voices[channel][0] = waveform; if(waveform == 0) { synth->voices[channel]->waveform = synth->sine_wave_table; } if(waveform == 1) { synth->voices[channel]->waveform = synth->sawtooth_wave_table; } if(waveform == 2) { synth->voices[channel]->waveform = synth->square_wave_table; } if(waveform == 3) { synth->voices[channel]->waveform = synth->triangle_wave_table; } if(waveform == 4) { synth->voices[channel]->waveform = synth->noise_table; } if(waveform == 5) { synth->voices[channel]->waveform = synth->custom_table; } } } void cSynthMoveNotes(struct CSynthContext *synth, bool up, bool down, int cursor_x, int cursor_y, int pattern) { // copy notes to swap track for(int y = 0; y < synth->track_height; y++) { struct CTrackNode *node = synth->track[pattern][cursor_x][y]; synth->swap_track[cursor_x][y] = node; synth->track[pattern][cursor_x][y] = NULL; } if(up) { for(int y = 0; y < synth->track_height; y++) { if(y > -1) { if(cursor_y > y) { if(y == cursor_y-1) { synth->swap_track[cursor_x][y] = cAllocatorFree(synth->swap_track[cursor_x][y]); } else { synth->track[pattern][cursor_x][y] = synth->swap_track[cursor_x][y]; } } else { if(y-1 > -1) { synth->track[pattern][cursor_x][y-1] = synth->swap_track[cursor_x][y]; } } } else { synth->swap_track[cursor_x][y] = cAllocatorFree(synth->swap_track[cursor_x][y]); } } } else { for(int y = 0; y < synth->track_height; y++) { if(y+1 < synth->track_height) { if(cursor_y > y) { synth->track[pattern][cursor_x][y] = synth->swap_track[cursor_x][y]; } else { synth->track[pattern][cursor_x][y+1] = synth->swap_track[cursor_x][y]; } } else { synth->swap_track[cursor_x][y] = cAllocatorFree(synth->swap_track[cursor_x][y]); } } } for(int y = 0; y < synth->track_height; y++) { synth->swap_track[cursor_x][y] = NULL; } } void cSynthAddTrackNodeParams(struct CSynthContext *synth, int current_track, int x, int y, int instrument, char effect, char effect_param1, char effect_param2) { int pattern = synth->patterns[x][current_track]; struct CTrackNode *t = synth->track[pattern][x][y]; if(t == NULL) { t = cSynthNewTrackNode(); t->tone_active = false; } if(instrument != -1) { t->instrument_nr = instrument; t->instrument = synth->instruments[instrument]; if(synth->debuglog) { printf("setting instrument:%d\n", instrument); } if(synth->debuglog) { printf("pattern:%d x:%d y:%d\n", pattern, x, y); } } if(effect != -1) { t->effect = cSynthGetCharFromParam(effect); t->effect_value = effect; } if(effect_param1 != -1) { t->effect_param1 = cSynthGetCharFromParam(effect_param1); t->effect_param1_value = effect_param1; } if(effect_param2 != -1) { t->effect_param2 = cSynthGetCharFromParam(effect_param2); t->effect_param2_value = effect_param2; } synth->track[pattern][x][y] = t; } void cSynthRemoveTrackNodeParams(struct CSynthContext *synth, int current_track, int x, int y, bool instrument, bool effect, bool effect_param1, bool effect_param2) { int pattern = synth->patterns[x][current_track]; struct CTrackNode *t = synth->track[pattern][x][y]; if(t == NULL) { return; } if(instrument) { t->instrument_nr = 0; t->instrument = NULL; } if(effect) { t->effect = '-'; t->effect_value = -1; } if(effect_param1) { t->effect_param1 = '-'; t->effect_param1_value = -1; } if(effect_param2) { t->effect_param2 = '-'; t->effect_param2_value = -1; } synth->track[pattern][x][y] = t; } void cSynthTurnOffSustain(struct CSynthContext *synth) { for (int i = 0; i < synth->max_voices; i++) { synth->voices[i]->sustain_active = false; } } void cSynthAddTrackNode(struct CSynthContext *synth, int instrument_nr, int current_track, int x, int y, bool editing, bool preview, int tone, bool playing) { if(x > -1 && x < synth->track_width && y > -1 && y < synth->track_height) { struct CInstrument *instrument = synth->instruments[instrument_nr]; if(editing) { int pattern = synth->patterns[x][current_track]; struct CTrackNode *t = synth->track[pattern][x][y]; if(t != NULL) { t->tone = tone; if(t->instrument == NULL) { // don't overwrite existing instrument! only set if null. t->instrument_nr = synth->current_instrument; t->instrument = instrument; } t->tone_active = true; } else { t = cSynthNewTrackNode(); t->tone = tone; t->instrument = instrument; t->instrument_nr = synth->current_instrument; t->tone_active = true; synth->track[pattern][x][y] = t; } } if(preview && synth->preview_enabled /*&& !playing*/ && synth->sustain_active && !synth->preview_started) { synth->preview_started = true; int x_node = x; synth->voices[x_node]->tone = tone; synth->voices[x_node]->adsr_cursor = 0; synth->voices[x_node]->preview_slope = true; synth->voices[x_node]->note_on = true; synth->voices[x_node]->active = true; synth->voices[x_node]->instrument = instrument; cSynthResetAllEffects(synth->voices[x_node]); synth->voices[x_node]->sustain_active = synth->sustain_active; // apply instrument effects struct CTrackNode *pre_effect_node = NULL; for (int pre_effect = 0; pre_effect < synth->max_instrument_effects; pre_effect++) { if(instrument != NULL) { if(synth->instrument_effects[instrument->instrument_number][pre_effect] != NULL) { pre_effect_node = synth->instrument_effects[instrument->instrument_number][pre_effect]; } if(pre_effect_node != NULL && pre_effect_node->effect_value > -1) { pre_effect_node->tone = tone; pre_effect_node->tone_active = true; pre_effect_node->instrument = instrument; pre_effect_node->instrument_nr = instrument->instrument_number; cSynthVoiceSetEffect(synth, synth->voices[x_node], pre_effect_node, synth->voices[x_node]->last_preview_tone); } } } synth->voices[x_node]->last_preview_tone = tone; cSynthPostEffectFix(synth, synth->voices[x_node], pre_effect_node); } } } void cSynthRemoveTrackNode(struct CSynthContext *synth, int current_track, int x, int y) { if(x > -1 && x < synth->track_width && y > -1 && y < synth->track_height) { int pattern = synth->patterns[x][current_track]; struct CTrackNode *t = synth->track[pattern][x][y]; if(t != NULL) { t->tone_active = false; } } } void cSynthUpdateTrackCursor(struct CSynthContext *synth, int x, int y) { if(x >= synth->track_width) { x = 0; } if(x < 0) { x = synth->track_width-1; } if(y >= synth->track_height) { y = 0; } if(y < 0) { y = synth->track_height-1; } if(x > -1 && x < synth->track_width && y > -1 && y < synth->track_height) { synth->track_cursor_x = x; synth->track_cursor_y = y; } } int cSynthGetNextActiveTrack(int current_track, struct CSynthContext *synth, bool forward) { if(synth->solo_track > -1) { return synth->solo_track; } bool next_track_set = false; int next_track = 0; if(forward) { for(int i = 0; i < synth->patterns_height; i++) { if(i > current_track && synth->active_tracks[i] == 1) { next_track_set = true; next_track = i; break; } } if(!next_track_set) { for(int i = 0; i < synth->patterns_height; i++) { if(current_track >= i && synth->active_tracks[i] == 1) { next_track_set = true; next_track = i; break; } } } } else { for(int i = synth->patterns_height-1; i > -1; i--) { if(i < current_track && synth->active_tracks[i] == 1) { next_track_set = true; next_track = i; break; } } if(!next_track_set) { for(int i = synth->patterns_height-1; i > -1; i--) { if(current_track <= i && synth->active_tracks[i] == 1) { next_track_set = true; next_track = i; break; } } } } if(next_track_set) { return next_track; } else { return 0; } } static void cSynthLookAheadForActivatingSlope(struct CSynthContext *synth) { int i; int pattern; bool d_is_detected = false; struct CTrackNode *t = NULL; int next_row; int next_track; double p = synth->track_progress_int - synth->track_progress; if (p < -0.90) { /* check what the next row contains and apply a slope if amp needs to be lowered for voices to avoic sound clipping */ for (i = 0; i < synth->track_width; i++) { next_row = synth->track_progress_int+1; next_track = synth->current_track; if(next_row >= synth->track_height) { next_track = cSynthGetNextActiveTrack(synth->current_track, synth, true); next_row = 0; } pattern = synth->patterns[i][next_track]; t = synth->track[pattern][i][next_row]; if(t != NULL) { if(t->tone_active) { synth->voices[i]->noteoff_slope = true; } if(t->effect_value == 13 && t->effect_param1_value == -1 && t->effect_param2_value == -1) { synth->voices[i]->noteoff_slope = true; d_is_detected = true; } } } if(d_is_detected) { for (i = 0; i < synth->track_width; i++) { synth->voices[i]->noteoff_slope = false; next_row = synth->track_height; next_track = synth->current_track; if(next_row >= synth->track_height) { next_track = cSynthGetNextActiveTrack(synth->current_track, synth, true); next_row = 0; } pattern = synth->patterns[i][next_track]; t = synth->track[pattern][i][next_row]; if(t != NULL) { if(t->tone_active) { synth->voices[i]->noteoff_slope = true; } } } } } } void cSynthAdvanceTrackProgress(struct CSynthContext *synth) { if(synth->track_progress_int >= synth->track_height) { if(synth->debuglog) { printf("track_progress_int:%d track_height:%d\n", synth->track_progress_int, synth->track_height); } synth->track_progress = synth->track_progress - synth->track_height; synth->track_progress_int = (int)synth->track_progress; synth->track_advance = true; int last_track = synth->current_track; synth->current_track = cSynthGetNextActiveTrack(synth->current_track, synth, true); // check if we have an pending switch of tempo columns. if(synth->pending_tempo_column > -1) { if(synth->debuglog) { printf("resetting tempo index\n"); } synth->current_tempo_column = synth->pending_tempo_column; synth->pending_tempo_column = -1; cSynthResetTempoIndex(synth); synth->tempo_skip_step = true; } if(synth->current_track <= last_track) { if(synth->debuglog) { printf("looped. current:%d last_track:%d\n", synth->current_track, last_track); } synth->looped = true; cSynthResetOnLoopBack(synth); } else { if(synth->debuglog) { printf("-- NOT looped. current:%d last_track:%d\n", synth->current_track, last_track); } } } } void cSynthTempoIncrement(struct CSynthContext *synth) { int next_index = -1; bool next_index_set = false; if(synth->tempo_skip_step) { next_index = synth->tempo_index; next_index_set = true; synth->tempo_skip_step = false; if(synth->debuglog) { printf("=== tempo skip step set to false.\n"); } } else { // find next active node for current column. for(int i = 1; i < synth->tempo_height; i++) { struct CTempoNode *node = synth->tempo_map[synth->current_tempo_column][i]; if(node->active) { if(i > synth->tempo_index && !next_index_set) { next_index = i; next_index_set = true; } } } if(!next_index_set) { for(int i = 1; i < synth->tempo_height; i++) { struct CTempoNode *node = synth->tempo_map[synth->current_tempo_column][i]; if(node->active) { if(!next_index_set) { next_index = i; next_index_set = true; } } } } } if(!next_index_set) { if(synth->debuglog) { printf("tempo error: could not set next index.\n"); } } else { synth->tempo_index = next_index; } char ticks_value = synth->tempo_map[synth->current_tempo_column][synth->tempo_index]->ticks; int ticks_int = (int)ticks_value; synth->ticks_modifier = 1.0 / (double)ticks_int; } void cSynthUpdateTicksModifier(struct CSynthContext *synth) { char ticks_value = synth->tempo_map[synth->current_tempo_column][synth->tempo_index]->ticks; int ticks_int = (int)ticks_value; synth->ticks_modifier = 1.0 / (double)ticks_int; } void cSynthAdvanceTrack(struct CSynthContext *synth, long samples) { int i; int previous_tone; struct CVoice *v = NULL; double bpm = synth->tempo_map[synth->current_tempo_column][0]->bpm; double sample_time_modifier = (double)bpm/(((double)synth->sample_rate*2.0)*60); if(!synth->interleaved) { sample_time_modifier /= 2; } if (synth->ticks_modifier < 0) { if(synth->debuglog) { printf("ticks_mod is not set. initing."); } cSynthUpdateTicksModifier(synth); } double speed = sample_time_modifier * (1 / synth->ticks_modifier); int p = synth->track_progress_int; double speed_inc = ((double)samples*speed); synth->track_progress += speed_inc; synth->track_progress_int = (int)synth->track_progress; cSynthAdvanceTrackProgress(synth); cSynthLookAheadForActivatingSlope(synth); if(synth->track_progress_int > p || synth->track_advance) { cSynthTempoIncrement(synth); synth->track_advance = false; synth->needs_redraw = true; for (i = 0; i < synth->track_width; i++) { // remove preview_slopes v = synth->voices[i]; v->preview_slope = false; } for (i = 0; i < synth->track_width; i++) { int pattern = synth->patterns[i][synth->current_track]; struct CTrackNode *t = synth->track[pattern][i][synth->track_progress_int]; v = synth->voices[i]; if(t != NULL) { // Dxx - jump to next pattern. if(t->effect_value == 13 && v->muted == false && t->effect_param1_value == -1 && t->effect_param2_value == -1) { if(synth->debuglog) { printf("jump to next pattern\n"); } synth->track_progress_int = synth->track_height; synth->track_progress = synth->track_progress_int; return; // D11 - jump to next pattern and reset tempo seq. } else if(t->effect_value == 13 && v->muted == false && t->effect_param1_value == 1 && t->effect_param2_value == 1) { if(synth->debuglog) { printf("jump to next pattern and reset tempo seq\n"); } synth->track_progress_int = synth->track_height; synth->track_progress = synth->track_progress_int; cSynthResetTempoIndex(synth); synth->tempo_skip_step = true; return; // D1x - reset tempo seq. } else if(t->effect_value == 13 && v->muted == false && t->effect_param1_value == 1 && t->effect_param2_value == -1) { if(synth->debuglog) { printf("reset tempo seq\n"); } cSynthResetTempoIndex(synth); cSynthUpdateTicksModifier(synth); // D2x - switch tempo_seq column. x = tempo seq column (0-5) } else if(t->effect_value == 13 && v->muted == false && t->effect_param1_value == 2) { if(t->effect_param2_value > -1 && t->effect_param2_value < synth->tempo_width) { synth->current_tempo_column = t->effect_param2_value; cSynthResetTempoIndex(synth); cSynthUpdateTicksModifier(synth); } } } /* reset slopes */ v->noteoff_slope = false; v->noteoff_slope_value = 1; if(t != NULL && t->tone_active && t->instrument != NULL) { /* set previous tone before tone. */ v->previous_tone = v->tone; v->instrument = t->instrument; v->adsr_cursor = 0; v->note_on = true; v->tone = t->tone; v->last_valid_tone = t->tone; } previous_tone = v->previous_tone; if(t != NULL) { if(t->effect_param1_value > -1) { v->previous_effect_param1 = t->effect_param1_value; } if(t->effect_param2_value > -1) { v->previous_effect_param2 = t->effect_param2_value; } if(t->tone_active) { v->arpeggio_tone = t->tone; } if(t != NULL && t->tone_active) { cSynthResetAllEffects(v); if(v->instrument != NULL) { // update previous instrument number. v->previous_instrument_number = v->instrument->instrument_number; } for (int pre_effect = 0; pre_effect < synth->max_instrument_effects; pre_effect++) { if(v->instrument != NULL) { struct CTrackNode *pre_effect_node = synth->instrument_effects[v->instrument->instrument_number][pre_effect]; if(pre_effect_node != NULL && pre_effect_node->effect_value > -1) { pre_effect_node->tone = t->tone; pre_effect_node->tone_active = t->tone_active; pre_effect_node->instrument = t->instrument; pre_effect_node->instrument_nr = t->instrument_nr; cSynthVoiceSetEffect(synth, v, pre_effect_node, previous_tone); } } } // reset waveform to original if wavetable is inactive. if(v->wavetable_previous_table != NULL) { v->waveform = v->wavetable_previous_table; } } /* set effect from track */ cSynthVoiceSetEffect(synth, v, t, previous_tone); /* add additional effects stuff */ cSynthPostEffectFix(synth, v, t); } } } } static void cSynthPostEffectFix(struct CSynthContext *synth, struct CVoice *v, struct CTrackNode *t) { if(v->downsample_sweep_down) { v->downsample_sweep_slope = -1; if(v->last_downsample_effect1 > 0) { v->downsample_sweep_slope = v->last_downsample_effect1; } else if(v->last_downsample_effect2 > 0) { v->downsample_sweep_speed = v->last_downsample_effect2; } else { v->downsample_sweep_down = false; } if(v->downsample_sweep_speed < 1 && v->downsample_sweep_slope < 1) { v->downsample_sweep_down = false; } int limit = (int)(v->downsample_sweep_speed * synth->sample_rate/4); if(!synth->interleaved) { limit /= 2; } v->downsample_limit = limit; if(v->downsample_sweep_speed < 1) { limit = synth->sample_rate/4; if(!synth->interleaved) { limit /= 2; } v->downsample_limit = limit; } if(t != NULL && t->tone_active) { v->downsample_sweep_start = v->downsample_limit/2; v->downsample_count = 0; } } if(v->downsample_sweep_up) { v->downsample_sweep_slope = -1; if(v->last_downsample_effect1 > 0) { v->downsample_sweep_slope = v->last_downsample_effect1; } else if(v->last_downsample_effect2 > 0) { v->downsample_sweep_speed = v->last_downsample_effect2; } else { v->downsample_sweep_up = false; } if(v->downsample_sweep_speed < 1 && v->downsample_sweep_slope < 1) { v->downsample_sweep_up = false; } int limit = (int)(v->downsample_sweep_speed * synth->sample_rate/4); if(!synth->interleaved) { limit /= 2; } v->downsample_limit = limit; if(v->downsample_sweep_speed < 1) { limit = synth->sample_rate/4; if(!synth->interleaved) { limit /= 2; } v->downsample_limit = limit; } if(t != NULL && t->tone_active) { v->downsample_sweep_start = 0; v->downsample_count = 0; } } } static void cSynthVoiceSetEffect(struct CSynthContext *synth, struct CVoice *v, struct CTrackNode *t, int previous_tone) { // multiple effects can be added per row, so it's important not to have increments etc here, just set init values. if(t->effect_value == 0 || v->arpeggio_active) { if(t->effect_value == 0) { v->arpeggio_active = true; v->last_arpeggio_effect1 = v->previous_effect_param1; v->last_arpeggio_effect2 = v->previous_effect_param2; v->last_arpeggio_effect1 = t->effect_param1_value; v->last_arpeggio_effect2 = t->effect_param2_value; if(t->effect_param1_value == -1 && t->effect_param2_value == -1) { v->arpeggio_active = false; } } if(v->last_arpeggio_effect1 > -1 && v->last_arpeggio_effect2 > -1) { if(v->last_valid_tone > -1) { v->arpeggio_tone_0 = v->last_valid_tone; v->arpeggio_tone_1 = v->last_arpeggio_effect1+v->last_valid_tone; v->arpeggio_tone_2 = v->last_arpeggio_effect2+v->last_valid_tone; } else if(v->tone > -1){ v->arpeggio_tone_0 = v->tone; v->arpeggio_tone_1 = v->last_arpeggio_effect1+v->tone; v->arpeggio_tone_2 = v->last_arpeggio_effect2+v->tone; } else if(previous_tone > -1) { v->arpeggio_tone_0 = previous_tone; v->arpeggio_tone_1 = v->last_arpeggio_effect1+previous_tone; v->arpeggio_tone_2 = v->last_arpeggio_effect2+previous_tone; } else { /* we don't have a tone to make the arp of. Cancel. */ } } else { v->arpeggio_active = false; } v->arpeggio_count = 0; } // 1 arp speed if(t->effect_value == 1) { v->last_arp_speed_effect1 = t->effect_param1_value; v->last_arp_speed_effect2 = t->effect_param2_value; if(v->last_arp_speed_effect1 > -1 && v->last_arp_speed_effect2 > -1) { v->arp_speed = v->last_arp_speed_effect1 * v->last_arp_speed_effect2; } else if(v->last_arp_speed_effect1 > -1) { v->arp_speed = v->last_arp_speed_effect1; } else if(v->last_arp_speed_effect2 > -1) { v->arp_speed = v->last_arp_speed_effect2; } else { // use global arp speed v->arp_speed = -1; } } // 2 delay if(t->effect_value == 2) { double effect_scalar = 0.063; int length_scalar = 4096; if(t->effect_param1_value > 0 && t->effect_param2_value > 0) { v->param_delay_length = t->effect_param1_value * length_scalar; v->param_delay_decay = t->effect_param2_value * effect_scalar; v->delay_active = true; } else { v->delay_active = false; } } // 3 portamento if((t->tone_active && t->effect_value == 3) || (t->tone_active && v->portamento_active)) { int portamento_previous_tone = previous_tone; if (portamento_previous_tone == -1) { portamento_previous_tone = t->tone; } double f_previous_tone = portamento_previous_tone; double f_new_tone = t->tone; double diff = f_previous_tone - f_new_tone; v->portamento_diff = diff; v->portamento_active = true; v->portamento_original_diff = diff; if(t->effect_value == 3) { v->last_portamento_effect1 = t->effect_param1_value; v->last_portamento_effect2 = t->effect_param2_value; if(v->last_portamento_effect1 > -1 || v->last_portamento_effect2 > -1) { v->portamento_speed = v->last_portamento_effect1*v->last_portamento_effect2; if(v->last_portamento_effect1 <= 0 && v->last_portamento_effect2 > 0) { v->portamento_speed = v->last_portamento_effect2; } else if(v->last_portamento_effect1 > 0 && v->last_portamento_effect2 <= 0) { v->portamento_speed = v->last_portamento_effect1; } } else if(v->last_portamento_effect1 == -1 && v->last_portamento_effect2 == -1) { v->portamento_active = false; } } if(v->portamento_speed < 0) { v->portamento_speed = 0; } if(v->portamento_speed == 0) { v->portamento_active = false; } if (previous_tone == -1) { v->portamento_diff = 0; v->portamento_active = false; v->portamento_original_diff = 0; } } // 4 vibrato if(t->effect_value == 4) { v->last_vibrato_effect1 = t->effect_param1_value; v->last_vibrato_effect2 = t->effect_param2_value; v->vibrato_active = true; if(v->last_vibrato_effect1 > -1 && v->last_vibrato_effect2 > -1) { v->vibrato_speed = v->last_vibrato_effect1; v->vibrato_depth = v->last_vibrato_effect2; } else { v->vibrato_active = false; } } // 5 dist if(t->effect_value == 5) { v->last_dist_effect1 = t->effect_param1_value; v->last_dist_effect2 = t->effect_param2_value; v->dist_active = true; double pre_amp_scalar_mod = 0.1; double post_amp = 3.0; if(v->last_dist_effect1 > 0 && v->last_dist_effect2 > 0) { v->dist_amp_pre_clamp = (v->last_dist_effect1 * v->last_dist_effect2) * pre_amp_scalar_mod; v->dist_amp_post_clamp = post_amp; } else if(v->last_dist_effect1 > 0) { v->dist_amp_pre_clamp = v->last_dist_effect1 * pre_amp_scalar_mod; v->dist_amp_post_clamp = post_amp; } else if(v->last_dist_effect2 > 0) { v->dist_amp_pre_clamp = v->last_dist_effect2 * pre_amp_scalar_mod; v->dist_amp_post_clamp = post_amp; } else { v->dist_active = false; v->dist_amp_pre_clamp = 0; v->dist_amp_post_clamp = 0; } } // 6 FM if(t->effect_value == 6) { v->last_fm_effect1 = t->effect_param1_value; v->last_fm_effect2 = t->effect_param2_value; if(v->last_fm_effect1 > 0 && v->last_fm_effect2 > 0) { v->fm_active = true; double effect_scalar = 0.063; // convert 0-15 to 0-1 v->fm_depth = v->last_fm_effect1 * effect_scalar; // convert 0-15 to 0-1 v->fm_speed = v->last_fm_effect2; } else { v->fm_active = false; } } // 7 detune if(t->effect_value == 7) { double effect_max = 225; double combined = 0; if(t->effect_param1_value > 0 && t->effect_param2_value > 0) { combined = t->effect_param1_value * t->effect_param2_value; } else if(t->effect_param1_value > 0) { combined = t->effect_param1_value; } else if(t->effect_param2_value > 0) { combined = t->effect_param2_value; } else { v->detune_active = false; } if(combined != 0){ v->detune_amount = (combined / effect_max)-0.3; v->detune_active = true; } } // 8 PWM if(t->effect_value == 8) { v->last_pwm_effect1 = t->effect_param1_value; v->last_pwm_effect2 = t->effect_param2_value; if(v->last_pwm_effect1 > 0 && v->last_pwm_effect2 < 1) { v->pwm_active = true; v->pwm_speed = 0; v->pwm_static_pos = ((synth->wave_length/16) * v->last_pwm_effect1)/4; if(v->pwm_static_pos > v->waveform_length) { v->pwm_static_pos = v->waveform_length; } } else if(v->last_pwm_effect2 > 0) { v->pwm_static_pos = 0; v->pwm_active = true; double effect_scalar = 0.063; // convert 0-15 to 0-1 v->pwm_depth = v->last_pwm_effect1 * effect_scalar; // convert 0-15 to 0-1 v->pwm_speed = v->last_pwm_effect2 * synth->mod_pwm_speed; } else { v->pwm_active = false; } } // 9 change waveform or activate wavetable lane. if(t->effect_value == 9) { if(t->effect_param1_value < 6 && t->effect_param1_value > -1) { v->wavetable_active = true; v->wavetable_lane = t->effect_param1_value * 2; v->wavetable_cursor = 2; v->wavetable_previous_table = v->waveform; } else if(t->effect_param2_value < 6) { // change the default waveform for the channel. If wavetable is reset, it should return to // this value. cSynthChangeWaveformForChannel(synth, v->int_id, t->effect_param2_value); v->wavetable_previous_table = v->waveform; synth->needs_redraw = true; } } // A if(t->effect_value == 10) { v->last_amp_effect1 = t->effect_param1_value; v->last_amp_effect2 = t->effect_param2_value; double effect_scalar = 0.063; // convert 0-15 to 0-1 if(v->last_amp_effect1 > 0) { v->amp_target_left = v->last_amp_effect1 * effect_scalar; } if(v->last_amp_effect2 > 0) { v->amp_target_right = v->last_amp_effect2 * effect_scalar; } if(t->effect_param1_value < 1) { v->amp_target_left = 0; } if(t->effect_param2_value < 1) { v->amp_target_right = 0; } if(v->amp_left > v->amp_target_left) { v->amp_target_left_higher = false; v->amp_target_left_reached = false; } else if(v->amp_left < v->amp_target_left) { v->amp_target_left_higher = true; v->amp_target_left_reached = false; } else { // same as target } if(v->amp_right > v->amp_target_right) { v->amp_target_right_higher = false; v->amp_target_right_reached = false; } else if(v->amp_right < v->amp_target_right) { v->amp_target_right_higher = true; v->amp_target_right_reached = false; } else { // same as target } } // B downsample sweep down if(t->effect_value == 11) { v->downsample_sweep_down = true; v->downsample_sweep_up = false; v->downsample_next_sample = true; v->last_downsample_effect1 = t->effect_param1_value; v->last_downsample_effect2 = t->effect_param2_value; } // C downsample sweep up if(t->effect_value == 12) { v->downsample_sweep_up = true; v->downsample_sweep_down = false; v->downsample_next_sample = true; v->last_downsample_effect1 = t->effect_param1_value; v->last_downsample_effect2 = t->effect_param2_value; } // E if(t->effect_value == 14) { if(t->effect_param1_value > -1 || t->effect_param2_value > -1) { v->last_pitch_effect1 = t->effect_param1_value; v->last_pitch_effect2 = t->effect_param2_value; v->pitch_up_active = true; v->pitch_down_active = false; if(v->last_pitch_effect1 > -1) { v->pitch_speed1 = v->last_pitch_effect1; } else { v->pitch_speed1 = 0; } if(v->last_pitch_effect2 > -1) { v->pitch_speed2 = v->last_pitch_effect2; } else { v->pitch_speed2 = 0; } } } // F if(t->effect_value == 15) { if(t->effect_param1_value > -1 || t->effect_param2_value > -1) { v->last_pitch_effect1 = t->effect_param1_value; v->last_pitch_effect2 = t->effect_param2_value; v->pitch_down_active = true; v->pitch_up_active = false; if(v->last_pitch_effect1 > -1) { v->pitch_speed1 = -v->last_pitch_effect1; } else { v->pitch_speed1 = 0; } if(v->last_pitch_effect2 > -1) { v->pitch_speed2 = -v->last_pitch_effect2; } else { v->pitch_speed2 = 0; } } } // G bitcrush if(t != NULL) { if(t->effect_value == 16) { if(t->effect_param1_value > 0 || t->effect_param2_value > 0) { if (t->effect_param1_value > 0 && t->effect_param2_value > 0) { synth->bitcrush_active = true; synth->bitcrush_depth = (t->effect_param1_value * t->effect_param2_value); } else if(t->effect_param1_value > 0) { synth->bitcrush_active = true; synth->bitcrush_depth = t->effect_param1_value; } else if(t->effect_param2_value > 0) { synth->bitcrush_active = true; synth->bitcrush_depth = t->effect_param2_value; } else { synth->bitcrush_active = false; } } else { synth->bitcrush_active = false; } } } } void cSynthVoiceApplyEffects(struct CSynthContext *synth, struct CVoice *v) { v->tone_with_fx = v->tone; if (v->arpeggio_active) { v->tone_with_fx = v->arpeggio_tone; } if(v->vibrato_active) { cSynthVoiceApplyVibrato(synth, v); } if(v->pitch_up_active) { cSynthVoiceApplyPitchUpDown(synth, v); } if(v->pitch_down_active) { cSynthVoiceApplyPitchUpDown(synth, v); } if(v->detune_active) { cSynthVoiceApplyDetune(synth, v); } if(v->arpeggio_active) { cSynthVoiceApplyArpeggio(synth, v); } if(v->portamento_active) { cSynthVoiceApplyPortamento(synth, v); } if (v->wavetable_active) { cSynthUpdateWavetable(synth, v); } } void cSynthAdvanceAmpTargets(struct CSynthContext *synth, struct CVoice *v) { double bpm = synth->tempo_map[synth->current_tempo_column][0]->bpm; double speed = bpm * synth->mod_advance_amp_targets; if(!v->amp_target_left_reached) { if(v->amp_target_left_higher) { v->amp_left += speed; if(v->amp_left >= v->amp_target_left) { v->amp_left = v->amp_target_left; v->amp_target_left_reached = true; } } else { v->amp_left -= speed; if(v->amp_left <= v->amp_target_left) { v->amp_left = v->amp_target_left; v->amp_target_left_reached = true; } } } if(!v->amp_target_right_reached) { if(v->amp_target_right_higher) { v->amp_right += speed; if(v->amp_right >= v->amp_target_right) { v->amp_right = v->amp_target_right; v->amp_target_right_reached = true; } } else { v->amp_right -= speed; if(v->amp_right <= v->amp_target_right) { v->amp_right = v->amp_target_right; v->amp_target_right_reached = true; } } } } void cSynthRampUpToFullAmp(struct CVoice *v) { v->amp_target_left = 1; v->amp_target_right = 1; if(v->amp_left > v->amp_target_left) { v->amp_target_left_higher = false; v->amp_target_left_reached = false; } else if(v->amp_left < v->amp_target_left) { v->amp_target_left_higher = true; v->amp_target_left_reached = false; } else { // same as target } if(v->amp_right > v->amp_target_right) { v->amp_target_right_higher = false; v->amp_target_right_reached = false; } else if(v->amp_right < v->amp_target_right) { v->amp_target_right_higher = true; v->amp_target_right_reached = false; } else { // same as target } } int16_t cSynthGetFMSample(struct CSynthContext *synth, struct CVoice *v, double delta_phi) { int fm_pos_int = 0; double fm_speed_mod = v->fm_speed; double d_waveformLength = v->waveform_length; double delta_phi2 = delta_phi; v->fm_pos += delta_phi2 * fm_speed_mod; if(v->fm_pos >= synth->wave_length) { v->fm_pos -= synth->wave_length; } if(v->fm_pos < 0) { v->fm_pos += d_waveformLength; } else if(v->fm_pos >= d_waveformLength) { v->fm_pos -= d_waveformLength; } fm_pos_int = (int)v->fm_pos; if(fm_pos_int >= synth->wave_length) { fm_pos_int -= synth->wave_length-1; } if(fm_pos_int < 0) { fm_pos_int = 0; } if(fm_pos_int >= synth->wave_length) { fm_pos_int = synth->wave_length-1; } const double int16_to_wavelength = 0.0156; double sine_phase = ((double)synth->sine_wave_table[fm_pos_int]+INT16_MAX) * int16_to_wavelength; sine_phase *= v->fm_depth; int phase_int = (int)(v->phase_double + sine_phase); if(phase_int < 0) { phase_int += synth->wave_length; } else if(phase_int >= synth->wave_length) { phase_int -= synth->wave_length; } if(phase_int < 0) { phase_int = 0; } else if(phase_int >= synth->wave_length) { phase_int = synth->wave_length-1; } int16_t sample = v->waveform[phase_int]; return sample; } int16_t cSynthGetPWMSample(struct CSynthContext *synth, struct CVoice *v, int phase_int) { bool use_sine = false; int pwm_pos_int = 0; if(v->pwm_static_pos > 0 && v->pwm_speed < 1) { pwm_pos_int = (int)v->pwm_static_pos; v->pwm_depth = 0; } else if(v->pwm_speed > 0) { use_sine = true; v->pwm_pos += v->pwm_speed; pwm_pos_int = (int)v->pwm_pos; if(v->pwm_pos > synth->wave_length) { v->pwm_pos -= synth->wave_length; pwm_pos_int = (int)v->pwm_pos; } } const double int16_to_wavelength = 0.0156; double half_wavelength = synth->wave_length/2; // 512 double sine_phase = ((double)synth->sine_wave_table[pwm_pos_int]+INT16_MAX) * int16_to_wavelength; // 512 is the middle, 0 - 1024 the edges. Scale the value closer to 512 for decreased depth. if(use_sine) { double diff = sine_phase - half_wavelength; double mod_diff = 0; if(diff < 0) { mod_diff = -diff; } else { mod_diff = diff; } mod_diff *= v->pwm_depth; if(diff < 0) { sine_phase = half_wavelength - mod_diff; } else { sine_phase = half_wavelength + mod_diff; } } if(sine_phase > phase_int) { return (int16_t)INT16_MAX; } else { return (int16_t)INT16_MIN; } } void cSynthVoiceApplyVibrato(struct CSynthContext *synth, struct CVoice *v) { if(v->vibrato_depth > 0) { double phase = v->vibrato_phase; double depth = v->vibrato_depth; double speed = v->vibrato_speed; double wave_length = (double)synth->wave_length; phase += (synth->mod_vibrato_speed * wave_length) + speed; if(phase > synth->wave_length) { phase = synth->wave_length - phase; } if(phase < 0) { phase = 0; } v->vibrato_phase = phase; double d_depth = synth->mod_vibrato_depth * depth; int phase_int = (int)phase; double mod = synth->sine_wave_table[phase_int] * d_depth; v->tone_with_fx = v->tone_with_fx + mod; } } void cSynthVoiceApplyPitchUpDown(struct CSynthContext *synth, struct CVoice *v) { double upper_limit = 119; double lower_limit = 3; if(v->pitch_speed1 != 0 || v->pitch_speed2 != 0) { double mod = v->pitch_speed1 * synth->mod_pitch_1 + v->pitch_speed2 * synth->mod_pitch_2; v->pitch_up_down_phase += mod; v->tone_with_fx = v->tone_with_fx + v->pitch_up_down_phase; if(v->tone_with_fx > upper_limit) { v->tone_with_fx = upper_limit; } else if(v->tone_with_fx < lower_limit) { v->tone_with_fx = lower_limit; } } } void cSynthVoiceApplyDetune(struct CSynthContext *synth, struct CVoice *v) { double upper_limit = 119; double lower_limit = 3; double detune_factor = synth->mod_detune; v->tone_with_fx = v->tone_with_fx + v->detune_amount * detune_factor; if(v->tone_with_fx > upper_limit) { v->tone_with_fx = upper_limit; } else if(v->tone_with_fx < lower_limit) { v->tone_with_fx = lower_limit; } } void cSynthVoiceApplyDownsampleSweep(struct CSynthContext *synth, struct CVoice *v, bool up) { double f_sample_rate = synth->sample_rate; double mod = 0.001; if(!synth->interleaved) { mod /= 2; } if(up) { if (v->downsample_sweep_slope > 0) { v->downsample_count += v->downsample_sweep_slope * (f_sample_rate * mod); } else if (v->downsample_sweep_speed > 0) { v->downsample_sweep_start += 1; v->downsample_count += v->downsample_sweep_start; } if(v->downsample_count > v->downsample_limit) { v->downsample_next_sample = true; v->downsample_count = 0; } } else { if (v->downsample_sweep_slope > 0) { v->downsample_count += v->downsample_sweep_slope * (f_sample_rate * mod); } else if (v->downsample_sweep_speed > 0) { if(v->downsample_sweep_start > f_sample_rate * mod) { v->downsample_sweep_start -= 1; } v->downsample_count += v->downsample_sweep_start; } if(v->downsample_count > v->downsample_limit) { v->downsample_next_sample = true; v->downsample_count = 0; } } } void cSynthVoiceApplyArpeggio(struct CSynthContext *synth, struct CVoice *v) { int arpeggio_speed = v->arp_speed; if(arpeggio_speed < 0) { // use global speed instead. arpeggio_speed = synth->arpeggio_speed; } v->arpeggio_count += synth->mod_arp_speed * arpeggio_speed; if(v->arpeggio_count > v->arpeggio_limit) { if(v->arpeggio_tone_toggle == 0) { v->arpeggio_tone = v->arpeggio_tone_1; v->arpeggio_count = 0; v->arpeggio_tone_toggle++; } else if(v->arpeggio_tone_toggle == 1) { v->arpeggio_tone = v->arpeggio_tone_2; v->arpeggio_count = 0; v->arpeggio_tone_toggle++; } else if(v->arpeggio_tone_toggle == 2) { v->arpeggio_tone = v->arpeggio_tone_0; v->arpeggio_count = 0; v->arpeggio_tone_toggle = 0; } } } void cSynthVoiceApplyPortamento(struct CSynthContext *synth, struct CVoice *v) { double segment = synth->mod_portamento_speed * (v->portamento_speed * v->portamento_speed); if(v->portamento_original_diff > 0) { v->portamento_diff -= segment; if(v->portamento_diff < 0) { v->portamento_diff = 0; } } else { v->portamento_diff += segment; if(v->portamento_diff > 0) { v->portamento_diff = 0; } } v->tone_with_fx += v->portamento_diff; } static void cSynthUpdateWavetable(struct CSynthContext *synth, struct CVoice *v) { /* Each voice has a wavetable_count which is the cursor for a lane in the wavetable_map. This effect will change the waveform of the channel. When the effect is reset, the channel should be reset to its original waveform. Also for each noteon, the wavetable_count should be set to 0. */ double speed_mod = 0.001; int wavetable_lane = (int)v->wavetable_lane; int wavetable_cursor = (int)v->wavetable_cursor; int new_wavetable_cursor = 0; bool loop = false; if (wavetable_lane > -1 && wavetable_lane < synth->wavetable_width-1) { struct CWavetableNode *w_loop_node = synth->wavetable_map[wavetable_lane][1]; if(w_loop_node->active > 0) { loop = true; } bool cursor_set = false; struct CWavetableNode *w_base_node = synth->wavetable_map[wavetable_lane][0]; struct CWavetableNode *w_right_node = synth->wavetable_map[wavetable_lane+1][wavetable_cursor]; if(w_right_node != NULL) { int n_speed = w_right_node->value; v->wavetable_cursor += (w_base_node->speed * speed_mod) * n_speed; } new_wavetable_cursor = (int)v->wavetable_cursor; if(new_wavetable_cursor > wavetable_cursor && new_wavetable_cursor < synth->wavetable_height) { for (int i = new_wavetable_cursor; i < synth->wavetable_height; i++) { struct CWavetableNode *w_new_node = synth->wavetable_map[wavetable_lane][i]; if (w_new_node->active) { new_wavetable_cursor = i; cursor_set = true; break; } } if(!cursor_set && loop) { new_wavetable_cursor = 2; v->wavetable_cursor = 2; cursor_set = true; } else if(!cursor_set) { new_wavetable_cursor = wavetable_cursor; v->wavetable_cursor = wavetable_cursor; cursor_set = true; } } if(cursor_set) { wavetable_cursor = new_wavetable_cursor; } } if (wavetable_cursor >= synth->wavetable_height) { if(loop) { wavetable_cursor = 2; v->wavetable_cursor = 2; } else { wavetable_cursor = synth->wavetable_height - 1; } } if (wavetable_lane > -1 && wavetable_lane < synth->wavetable_width && wavetable_cursor >= 0 && wavetable_cursor < synth->wavetable_height) { struct CWavetableNode *w_node = synth->wavetable_map[wavetable_lane][wavetable_cursor]; char wave_type = w_node->value; if(wave_type == 0) { v->waveform = synth->sine_wave_table; } else if(wave_type == 1) { v->waveform = synth->sawtooth_wave_table; } else if(wave_type == 2) { v->waveform = synth->square_wave_table; } else if(wave_type == 3) { v->waveform = synth->triangle_wave_table; } else if(wave_type == 4) { v->waveform = synth->noise_table; } else if(wave_type == 5) { v->waveform = synth->custom_table; } } } void cSynthResetOnLoopBack(struct CSynthContext *synth) { // reset stuff when song loops. for (int i = 0; i < synth->track_width; i++) { struct CVoice *v = synth->voices[i]; // tones v->last_valid_tone = -1; v->previous_tone = -1; // arpeggio v->arpeggio_active = false; // reset amp v->amp_target_left = 1; v->amp_target_right = 1; v->amp_target_left_higher = false; v->amp_target_right_higher = false; v->amp_target_left_reached = true; v->amp_target_right_reached = true; v->last_amp_effect1 = 0; v->last_amp_effect2 = 0; } } void cSynthResetPortamento(struct CVoice *v) { v->portamento_active = false; v->portamento_diff = 0; v->portamento_original_diff = 0; v->portamento_speed = 0; v->last_portamento_effect1 = -1; v->last_portamento_effect2 = -1; } void cSynthResetAllEffects(struct CVoice *v) { cSynthResetPortamento(v); v->vibrato_active = false; v->vibrato_phase = 0; v->pitch_up_active = false; v->pitch_down_active = false; // downsample v->downsample_sweep_up = false; v->downsample_sweep_down = false; v->downsample_last_sample = 0; v->downsample_limit = 100; v->downsample_count = 0; v->downsample_next_sample = true; v->downsample_sweep_start = 0; v->downsample_sweep_slope = 0; v->downsample_sweep_speed = 0; v->last_downsample_effect1 = -1; v->last_downsample_effect2 = -1; v->pitch_up_down_phase = 0; v->pitch_speed1 = 0; v->pitch_speed2 = 0; v->arpeggio_active = false; v->portamento_active = false; v->last_valid_tone = -1; v->previous_tone = -1; v->previous_effect = -1; v->sustain_active = false; v->pwm_active = false; v->pwm_static_pos = 0; v->pwm_speed = 0; v->fm_active = false; v->fm_speed = 0; v->fm_depth = 0; v->arp_speed = -1; v->last_arp_speed_effect1 = -1; v->last_arp_speed_effect2 = -1; v->dist_active = false; v->dist_amp_pre_clamp = 0; v->dist_amp_post_clamp = 0; v->last_dist_effect1 = -1; v->last_dist_effect2 = -1; v->wavetable_active = false; v->wavetable_lane = 0; v->wavetable_cursor = 2; if(v->wavetable_previous_table != NULL) { v->waveform = v->wavetable_previous_table; } v->wavetable_previous_table = NULL; v->delay_active = false; // detune v->detune_active = false; v->detune_amount = 0; // ramp upp to full vol cSynthRampUpToFullAmp(v); } void cSynthResetTempoIndex(struct CSynthContext *synth) { for(int i = 1; i < synth->tempo_height; i++) { struct CTempoNode *node = synth->tempo_map[synth->current_tempo_column][i]; // go to the first active tempo-node in the current tempo column. if(node->active) { synth->tempo_index = i; break; } } } void cSynthUpdateHighlightInterval(struct CSynthContext *synth) { int count = 0; for(int i = 1; i < synth->tempo_height; i++) { struct CTempoNode *node = synth->tempo_map[synth->current_tempo_column][i]; if(node->active) { count++; } } synth->track_highlight_interval = count; } void cSynthResetTrackProgress(struct CSynthContext *synth, int start_pattern, int start_row) { synth->track_progress = start_row; synth->track_progress_int = (int)synth->track_progress; synth->track_advance = true; synth->current_track = start_pattern; for (int i = 0; i < synth->track_width; i++) { struct CVoice *v = synth->voices[i]; cSynthResetAllEffects(v); } } struct CVoice *cSynthNewVoice(struct CSynthContext *synth, int16_t *waveform) { struct CVoice *v = cAllocatorAlloc(sizeof(struct CVoice), "CVoice"); v->delay_buffer = NULL; v->wavetable_previous_table = NULL; v->preview_amp_current = 0; v->int_id = 0; cSynthResetVoice(synth, waveform, v); return v; } static void cSynthResetVoice(struct CSynthContext *synth, int16_t *waveform, struct CVoice *v) { v->muted = 0; v->volume = 0.2; v->waveform = waveform; v->waveform_length = synth->wave_length; v->phase_int = 0; v->phase_double = 0; v->phase_double_inc = 0; v->active = true; v->tone = -1; v->last_valid_tone = -1; v->previous_tone = -1; v->previous_effect = -1; v->previous_effect_param1 = -1; v->previous_effect_param2 = -1; v->instrument = NULL; v->previous_instrument_number = -1; v->adsr_cursor = 0; v->tone_with_fx = 0; v->last_preview_tone = -1; v->sustain_active = false; // 4 v->vibrato_active = false; v->vibrato_depth = 0; v->vibrato_speed = 0; v->vibrato_phase = 0; v->last_vibrato_effect1 = -1; v->last_vibrato_effect2 = -1; // E v->pitch_up_active = false; v->pitch_down_active = false; v->pitch_speed1 = 0; v->pitch_speed2 = 0; v->pitch_up_down_phase = 0; v->last_pitch_effect1 = -1; v->last_pitch_effect2 = -1; // downsample v->downsample_last_sample = 0; v->downsample_limit = 100; v->downsample_count = 0; v->downsample_next_sample = true; // B v->downsample_sweep_up = false; // C v->downsample_sweep_down = false; v->downsample_sweep_start = 0; v->downsample_sweep_slope = 0; v->downsample_sweep_speed = 0; v->last_downsample_effect1 = -1; v->last_downsample_effect2 = -1; v->wavetable_active = false; v->wavetable_lane = 0; v->wavetable_cursor = 2; if(v->wavetable_previous_table != NULL) { v->waveform = v->wavetable_previous_table; } v->wavetable_previous_table = NULL; // avoid clicks/pops when cutting off note. v->noteoff_slope = 0; v->noteoff_slope_value = 0; v->preview_slope = false; v->preview_amp_target = 0; // 0 v->arpeggio_active = false; v->arpeggio_tone = -1; v->arpeggio_count = 0; v->arpeggio_limit = 0.01; v->arpeggio_tone_0 = 0; v->arpeggio_tone_1 = 0; v->arpeggio_tone_2 = 0; v->arpeggio_tone_toggle = 0; v->last_arpeggio_effect1 = 0; v->last_arpeggio_effect2 = 0; // 3 cSynthResetPortamento(v); // A v->amp_left = 1; v->amp_right = 1; v->amp_target_left = 0; v->amp_target_right = 0; v->amp_target_left_higher = false; v->amp_target_right_higher = false; v->amp_target_left_reached = true; v->amp_target_right_reached = true; v->last_amp_effect1 = 0; v->last_amp_effect2 = 0; // 1 arp speed v->arp_speed = -1; v->last_arp_speed_effect1 = -1; v->last_arp_speed_effect2 = -1; // 8 PWM v->pwm_active = false; v->pwm_pos = 0; v->pwm_speed = 0; v->pwm_depth = 0; v->pwm_static_pos = 0; v->last_pwm_effect1 = 0; v->last_pwm_effect2 = 0; // FM v->fm_active = false; v->fm_pos = 0; v->fm_speed = 0; v->fm_depth = 0; v->last_fm_effect1 = 0; v->last_fm_effect2 = 0; // 5 dist v->dist_active = false; v->dist_amp_pre_clamp = 0; v->dist_amp_post_clamp = 0; v->last_dist_effect1 = -1; v->last_dist_effect2 = -1; // delay v->delay_active = false; v->param_delay_length = 0; v->param_delay_decay = 0; v->delay_buffer_size = synth->sample_rate*8; v->delay_buffer_limit = synth->sample_rate*2; v->delay_buffer_write_cursor = 0; v->delay_buffer_read_cursor = 0; if(v->delay_buffer == NULL) { v->delay_buffer = cAllocatorAlloc(sizeof(int16_t*)*v->delay_buffer_size, "delay buffer 1"); } for(int i = 0; i < v->delay_buffer_size; i++) { v->delay_buffer[i] = 0; } // 7 detune v->detune_active = false; v->detune_amount = 0; } void cSynthInstrumentResetEnvelope(struct CInstrument *i) { i->adsr[0]->amp = 0.0; i->adsr[0]->pos = 0.0; i->adsr[1]->amp = 0.8; i->adsr[1]->pos = 0.001; i->adsr[2]->amp = 0.0; i->adsr[2]->pos = 0.15; i->adsr[3]->amp = 0.0; i->adsr[3]->pos = 0.6; i->adsr[4]->amp = 0.0; i->adsr[4]->pos = 0.9; i->adsr_cursor = 0; } struct CInstrument *cSynthNewInstrument(struct CSynthContext *synth) { struct CInstrument *i = cAllocatorAlloc(sizeof(struct CInstrument), "CInstrument"); i->volume_scalar = 0.2; i->adsr_nodes = synth->max_adsr_nodes; i->adsr = cAllocatorAlloc(sizeof(struct CadsrNode*) * i->adsr_nodes, "Synth adsr nodes"); for(int c = 0; c < i->adsr_nodes; c++) { i->adsr[c] = cAllocatorAlloc(sizeof(struct CadsrNode), "CadsrNode"); i->adsr[c]->amp = 0; i->adsr[c]->pos = 0; } i->adsr[0]->amp = 0.0; i->adsr[0]->pos = 0.0; i->adsr[1]->amp = 0.8; i->adsr[1]->pos = 0.001; i->adsr[2]->amp = 0.0; i->adsr[2]->pos = 0.15; i->adsr[3]->amp = 0.0; i->adsr[3]->pos = 0.6; i->adsr[4]->amp = 0.0; i->adsr[4]->pos = 0.9; i->adsr_cursor = 0; i->instrument_number = -1; return i; } void cSynthWriteCustomTableFromNodes(struct CSynthContext *synth) { int i = 0; struct CInstrument *ins = synth->custom_instrument; for (i = 0; i < synth->wave_length; i++) { double pos = i / (double)synth->wave_length; double amp = 0; if(pos < ins->adsr[1]->pos) { amp = cSynthInstrumentVolumeByBaseNode(ins, 0, pos); } else if(pos < ins->adsr[2]->pos) { amp = cSynthInstrumentVolumeByBaseNode(ins, 1, pos); } else if(pos < ins->adsr[3]->pos) { amp = cSynthInstrumentVolumeByBaseNode(ins, 2, pos); } else if(pos < ins->adsr[4]->pos) { amp = cSynthInstrumentVolumeByBaseNode(ins, 3, pos); } else { amp = ins->adsr[4]->amp; } int sample = (int)(amp * INT16_MAX); if(sample > INT16_MAX) { sample = INT16_MAX; } else if(sample < INT16_MIN) { sample = INT16_MIN; } synth->custom_table[i] = (int16_t)sample; } } static double cSynthInstrumentVolumeByBaseNode(struct CInstrument *i, int base_node, double cursor) { double relative_cursor_pos = (cursor - i->adsr[base_node]->pos) / (i->adsr[base_node+1]->pos - i->adsr[base_node]->pos); double amp_diff = (i->adsr[base_node+1]->amp - i->adsr[base_node]->amp); double amp = i->adsr[base_node]->amp+(relative_cursor_pos*amp_diff); return amp; } void cSynthIncAdsrCursor(struct CVoice *v, struct CInstrument *i, struct CSynthContext *synth) { if(v->sustain_active) { // do not increase cursor if sustain is active. if(v->adsr_cursor > i->adsr[3]->pos) { return; } } v->adsr_cursor += synth->mod_adsr_cursor; } double cSynthInstrumentVolumeWithPreviewSlope(double amp, struct CVoice *v) { double mod = 0.001; v->preview_amp_target = amp; if(v->preview_amp_target > v->preview_amp_current) { v->preview_amp_current += mod; if(v->preview_amp_current >= v->preview_amp_target) { v->preview_amp_current = v->preview_amp_target; } } else if(v->preview_amp_target < v->preview_amp_current) { v->preview_amp_current -= mod; if(v->preview_amp_current <= v->preview_amp_target) { v->preview_amp_current = v->preview_amp_target; } } amp = v->preview_amp_current; return amp; } double cSynthInstrumentVolumeByPos(struct CInstrument* i, struct CVoice *v) { double pos = v->adsr_cursor; double amp = 0; if(pos < i->adsr[1]->pos) { amp = cSynthInstrumentVolumeByBaseNode(i, 0, pos); } else if(pos < i->adsr[2]->pos) { //todo: crash here in iOS 1.0.7. investigate further. amp = cSynthInstrumentVolumeByBaseNode(i, 1, pos); } else if(pos < i->adsr[3]->pos) { amp = cSynthInstrumentVolumeByBaseNode(i, 2, pos); } else if(pos < i->adsr[4]->pos) { amp = cSynthInstrumentVolumeByBaseNode(i, 3, pos); } else { // just use the last pos of adsr[4] amp = i->adsr[4]->amp; } if(v->preview_slope) { return cSynthInstrumentVolumeWithPreviewSlope(amp, v); } return amp; } struct CTrackNode *cSynthNewTrackNode() { struct CTrackNode *t = cAllocatorAlloc(sizeof(struct CTrackNode), "CTrackNode"); t->instrument = NULL; t->tone = 0; t->tone_active = false; t->instrument_nr = 0; t->effect = '-'; t->effect_param1 = '-'; t->effect_param2 = '-'; t->effect_value = -1; t->effect_param1_value = -1; t->effect_param2_value = -1; return t; } struct CTrackNode *cSynthCopyTracknode(struct CTrackNode *track_node) { struct CTrackNode *t = NULL; if(track_node != NULL) { t = cAllocatorAlloc(sizeof(struct CTrackNode), "CTrackNode copy"); t->instrument = track_node->instrument; t->tone = track_node->tone; t->tone_active = track_node->tone_active; t->instrument_nr = track_node->instrument_nr; t->effect = track_node->effect; t->effect_param1 = track_node->effect_param1; t->effect_param2 = track_node->effect_param2; t->effect_value = track_node->effect_value; t->effect_param1_value = track_node->effect_param1_value; t->effect_param2_value = track_node->effect_param2_value; } return t; } void cSynthBuildSineWave(int16_t *data, int wave_length) { double pi = 3.14159265358979323846; double phaseIncrement = (2.0f * pi)/(double)wave_length; double currentPhase = 0.0; for(int i = 0; i < wave_length; i++) { int sample = (int)(sin(currentPhase) * INT16_MAX); data[i] = (int16_t)sample; currentPhase += phaseIncrement; } } void cSynthBuildSawtoothWave(int16_t *data, int wave_length) { double phaseIncrement = INT16_MAX * 2 / (double)wave_length; double currentPhase = 0.0; for(int i = 0; i < wave_length; i++) { int16_t sample = (int16_t)(INT16_MAX-(int)currentPhase); data[i] = sample; currentPhase += phaseIncrement; } } void cSynthBuildSquareWave(int16_t *data, int wave_length) { for(int i = 0; i < wave_length; i++) { int16_t sample = INT16_MAX; if(i > wave_length/2) { sample = INT16_MIN; } data[i] = sample; } } void cSynthBuildTriangleWave(int16_t *data, int wave_length) { double phaseIncrement = (INT16_MAX * 2 / (double)wave_length) * 2; double currentPhase = -INT16_MAX; for (int i = 0; i < wave_length; i++) { int16_t sample = (int16_t)currentPhase; if(currentPhase > INT16_MAX) { sample = INT16_MAX; } data[i] = sample; if(i < wave_length/2) { currentPhase += phaseIncrement; } else { currentPhase -= phaseIncrement; } } } void cSynthBuildNoise(int16_t *data, int wave_length) { for (int i = 0; i < wave_length; i++) { data[i] = static_noise_table[i]; } } double cSynthGetFrequency(double pitch) { return pow(ChromaticRatio, pitch - 57) * 440; } void cSynthIncPhase(struct CVoice *v, double inc) { v->phase_double += inc; v->phase_int = (int)v->phase_double; if(v->phase_double >= v->waveform_length) { double diff = v->phase_double - v->waveform_length; v->phase_double = diff; v->phase_int = (int)diff; } } char *cSynthToneToChar(int tone) { char *return_str; switch (tone) { // octave 0 case 12: return_str = "C-0"; break; case 13: return_str = "C#0"; break; case 14: return_str = "D-0"; break; case 15: return_str = "D#0"; break; case 16: return_str = "E-0"; break; case 17: return_str = "F-0"; break; case 18: return_str = "F#0"; break; case 19: return_str = "G-0"; break; case 20: return_str = "G#0"; break; case 21: return_str = "A-0"; break; case 22: return_str = "A#0"; break; case 23: return_str = "B-0"; break; // octave 1 case 24: return_str = "C-1"; break; case 25: return_str = "C#1"; break; case 26: return_str = "D-1"; break; case 27: return_str = "D#1"; break; case 28: return_str = "E-1"; break; case 29: return_str = "F-1"; break; case 30: return_str = "F#1"; break; case 31: return_str = "G-1"; break; case 32: return_str = "G#1"; break; case 33: return_str = "A-1"; break; case 34: return_str = "A#1"; break; case 35: return_str = "B-1"; break; // octave 2 case 36: return_str = "C-2"; break; case 37: return_str = "C#2"; break; case 38: return_str = "D-2"; break; case 39: return_str = "D#2"; break; case 40: return_str = "E-2"; break; case 41: return_str = "F-2"; break; case 42: return_str = "F#2"; break; case 43: return_str = "G-2"; break; case 44: return_str = "G#2"; break; case 45: return_str = "A-2"; break; case 46: return_str = "A#2"; break; case 47: return_str = "B-2"; break; // octave 3 case 48: return_str = "C-3"; break; case 49: return_str = "C#3"; break; case 50: return_str = "D-3"; break; case 51: return_str = "D#3"; break; case 52: return_str = "E-3"; break; case 53: return_str = "F-3"; break; case 54: return_str = "F#3"; break; case 55: return_str = "G-3"; break; case 56: return_str = "G#3"; break; case 57: return_str = "A-3"; break; case 58: return_str = "A#3"; break; case 59: return_str = "B-3"; break; // octave 4 case 60: return_str = "C-4"; break; case 61: return_str = "C#4"; break; case 62: return_str = "D-4"; break; case 63: return_str = "D#4"; break; case 64: return_str = "E-4"; break; case 65: return_str = "F-4"; break; case 66: return_str = "F#4"; break; case 67: return_str = "G-4"; break; case 68: return_str = "G#4"; break; case 69: return_str = "A-4"; break; case 70: return_str = "A#4"; break; case 71: return_str = "B-4"; break; // octave 5 case 72: return_str = "C-5"; break; case 73: return_str = "C#5"; break; case 74: return_str = "D-5"; break; case 75: return_str = "D#5"; break; case 76: return_str = "E-5"; break; case 77: return_str = "F-5"; break; case 78: return_str = "F#5"; break; case 79: return_str = "G-5"; break; case 80: return_str = "G#5"; break; case 81: return_str = "A-5"; break; case 82: return_str = "A#5"; break; case 83: return_str = "B-5"; break; // octave 6 case 84: return_str = "C-6"; break; case 85: return_str = "C#6"; break; case 86: return_str = "D-6"; break; case 87: return_str = "D#6"; break; case 88: return_str = "E-6"; break; case 89: return_str = "F-6"; break; case 90: return_str = "F#6"; break; case 91: return_str = "G-6"; break; case 92: return_str = "G#6"; break; case 93: return_str = "A-6"; break; case 94: return_str = "A#6"; break; case 95: return_str = "B-6"; break; // octave 7 case 96: return_str = "C-7"; break; case 97: return_str = "C#7"; break; case 98: return_str = "D-7"; break; case 99: return_str = "D#7"; break; case 100: return_str = "E-7"; break; case 101: return_str = "F-7"; break; case 102: return_str = "F#7"; break; case 103: return_str = "G-7"; break; case 104: return_str = "G#7"; break; case 105: return_str = "A-7"; break; case 106: return_str = "A#7"; break; case 107: return_str = "B-7"; break; // octave 8 case 108: return_str = "C-8"; break; case 109: return_str = "C#8"; break; case 110: return_str = "D-8"; break; case 111: return_str = "D#8"; break; case 112: return_str = "E-8"; break; case 113: return_str = "F-8"; break; case 114: return_str = "F#8"; break; case 115: return_str = "G-8"; break; case 116: return_str = "G#8"; break; case 117: return_str = "A-8"; break; case 118: return_str = "A#8"; break; case 119: return_str = "B-8"; break; // octave 9 case 120: return_str = "C-9"; break; case 121: return_str = "C#9"; break; case 122: return_str = "D-9"; break; case 123: return_str = "D#9"; break; case 124: return_str = "E-9"; break; case 125: return_str = "F-9"; break; case 126: return_str = "F#9"; break; case 127: return_str = "G-9"; break; case 128: return_str = "G#9"; break; case 129: return_str = "A-9"; break; case 130: return_str = "A#9"; break; case 131: return_str = "B-9"; break; default: return_str = "err"; break; } return return_str; } char cSynthGetCharFromParam(char value) { char ch = '-'; switch (value) { case 0: ch = '0'; break; case 1: ch = '1'; break; case 2: ch = '2'; break; case 3: ch = '3'; break; case 4: ch = '4'; break; case 5: ch = '5'; break; case 6: ch = '6'; break; case 7: ch = '7'; break; case 8: ch = '8'; break; case 9: ch = '9'; break; case 10: ch = 'A'; break; case 11: ch = 'B'; break; case 12: ch = 'C'; break; case 13: ch = 'D'; break; case 14: ch = 'E'; break; case 15: ch = 'F'; break; case 16: ch = 'G'; break; default: break; } return ch; } char cSynthGetValueForParam(char value) { char ch = '-'; switch (value) { case '0': ch = 0; break; case '1': ch = 1; break; case '2': ch = 2; break; case '3': ch = 3; break; case '4': ch = 4; break; case '5': ch = 5; break; case '6': ch = 6; break; case '7': ch = 7; break; case '8': ch = 8; break; case '9': ch = 9; break; case 'A': ch = 10; break; case 'B': ch = 11; break; case 'C': ch = 12; break; case 'D': ch = 13; break; case 'E': ch = 14; break; case 'F': ch = 15; break; case 'G': ch = 16; break; default: break; } return ch; } void cSynthPasteNotesFromPattern(struct CSynthContext *synth, int origin_x, int origin_y, int target_x, int target_y) { if(origin_x > -1 && origin_x < synth->patterns_width && target_x > -1 && target_x < synth->patterns_width && origin_y > -1 && origin_y < synth->patterns_height && target_y > -1 && target_y < synth->patterns_height) { int origin_pattern = synth->patterns[origin_x][origin_y]; int target_pattern = synth->patterns[target_x][target_y]; for(int y = 0; y < synth->track_max_height; y++) { struct CTrackNode *track_node = synth->track[origin_pattern][origin_x][y]; if(synth->track[target_pattern][target_x][y] != NULL) { synth->track[target_pattern][target_x][y] = cAllocatorFree(synth->track[target_pattern][target_x][y]); } synth->track[target_pattern][target_x][y] = cSynthCopyTracknode(track_node); } } } void cSynthTransposePattern(struct CSynthContext *synth, int track, int track_x, bool up, int amount) { int note_min = 12; int note_max = 119; int shift = amount; bool is_in_range = true; for(int y = 0; y < synth->track_height; y++) { if(y > -1 && y < synth->track_height) { int pattern = synth->patterns[track_x][track]; struct CTrackNode *node = synth->track[pattern][track_x][y]; if(node != NULL) { if(up) { if(node->tone != -1 && node->tone_active && node->tone + shift > note_max) { is_in_range = false; } } else { if(node->tone != -1 && node->tone_active && node->tone - shift < note_min) { is_in_range = false; } } } } } if(is_in_range) { for(int y = 0; y < synth->track_height; y++) { if(y > -1 && y < synth->track_height) { int pattern = synth->patterns[track_x][track]; struct CTrackNode *node = synth->track[pattern][track_x][y]; if(node != NULL) { if(up) { if(node->tone != -1 && node->tone_active && node->tone + shift <= note_max) { node->tone += shift; } } else { if(node->tone != -1 && node->tone_active && node->tone - shift >= note_min) { node->tone -= shift; } } } } } } } void cSynthTransposeSelection(struct CSynthContext *synth, int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool up, int amount) { // change octave for notes int sel_x = (int)floor(selection_x/5); int cur_x = (int)floor(cursor_x/5); int s_x = 0; int s_y = 0; int s_w = 0; int s_h = 0; if(cur_x < sel_x) { s_x = cur_x; s_w = sel_x; } else { s_x = sel_x; s_w = cur_x; } if(cursor_y < selection_y) { s_y = cursor_y; s_h = selection_y; } else { s_y = selection_y; s_h = cursor_y; } s_w += 1; s_h += 1; int note_min = 12; int note_max = 119; int shift = amount; if(synth->debuglog) { printf("octave selection x:%d y:%d w:%d h:%d\n", s_x, s_y, s_w, s_h); } for(int x = 0; x < s_w-s_x; x++) { for(int y = 0; y < s_h-s_y; y++) { int pos_x = s_x + x; int pos_y = s_y + y; if(x > -1 && x < synth->track_width && y > -1 && y < synth->track_height && pos_x > -1 && pos_x < synth->track_width && pos_y > -1 && pos_y < synth->track_height) { int pattern = synth->patterns[pos_x][track]; struct CTrackNode *node = synth->track[pattern][pos_x][pos_y]; if(node != NULL) { if(up) { if(node->tone + shift <= note_max) { node->tone += shift; } } else { if(node->tone - shift >= note_min) { node->tone -= shift; } } } } } } } void cSynthCopyNotesFromSelection(struct CSynthContext *synth, int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool cut, bool store) { // clear copytrack before making new copy. for(int x = 0; x < synth->track_width; x++) { for(int y = 0; y < synth->track_max_height; y++) { if(synth->copy_track[x][y] != NULL) { synth->copy_track[x][y] = cAllocatorFree(synth->copy_track[x][y]); } } } // copy notes from to copy track int sel_x = (int)floor(selection_x/5); int cur_x = (int)floor(cursor_x/5); int s_x = 0; int s_y = 0; int s_w = 0; int s_h = 0; if(cur_x < sel_x) { s_x = cur_x; s_w = sel_x; } else { s_x = sel_x; s_w = cur_x; } if(cursor_y < selection_y) { s_y = cursor_y; s_h = selection_y; } else { s_y = selection_y; s_h = cursor_y; } s_w += 1; s_h += 1; if(synth->debuglog) { printf("copy selection x:%d y:%d w:%d h:%d\n", s_x, s_y, s_w, s_h); } for(int x = 0; x < s_w-s_x; x++) { for(int y = 0; y < s_h-s_y; y++) { int pos_x = s_x + x; int pos_y = s_y + y; if(x > -1 && x < synth->track_width && y > -1 && y < synth->track_height && pos_x > -1 && pos_x < synth->track_width && pos_y > -1 && pos_y < synth->track_height) { int pattern = synth->patterns[pos_x][track]; if(store) { struct CTrackNode *track_node = synth->track[pattern][pos_x][pos_y]; synth->copy_track[x][y] = cSynthCopyTracknode(track_node); } if(cut) { synth->track[pattern][pos_x][pos_y] = cAllocatorFree(synth->track[pattern][pos_x][pos_y]); } } } } } void cSynthPasteNotesToPos(struct CSynthContext *synth, int track, int cursor_x, int cursor_y) { int node_x = (int)floor(cursor_x/5); for(int x = 0; x < synth->track_width; x++) { for(int y = 0; y < synth->track_height; y++) { struct CTrackNode *track_node = synth->copy_track[x][y]; int pos_x = node_x + x; int pos_y = cursor_y + y; if(pos_x > -1 && pos_x < synth->track_width && pos_y > -1 && pos_y < synth->track_height) { int pattern = synth->patterns[pos_x][track]; if(track_node != NULL && synth->track[pattern][pos_x][pos_y] != NULL) { synth->track[pattern][pos_x][pos_y] = cAllocatorFree(synth->track[pattern][pos_x][pos_y]); } if(track_node != NULL) { synth->track[pattern][pos_x][pos_y] = cSynthCopyTracknode(track_node); } } } } } double cSynthGetRelativeModifierReverse(double base, int sample_rate, bool interleaved, bool log) { // enter the value you would like to receive as a modifier and get the value you need // to supply to cSynthGetRelativeModifier. if(!interleaved) { base *= 2; } double value = base * sample_rate; if(log) { printf("got base:%f from relative sample mod:%f\n", value, base); } return value; } double cSynthGetRelativeModifier(double base, int sample_rate, bool interleaved, bool log) { // use this for modifiers that are applied per sample or sample pair(interleaved). double value = base / sample_rate; if (!interleaved) { value /= 2; } if(log) { printf("got relative sample modifier:%f using base:%f\n", value, base); } return value; } double cSynthGetRelativeModForChunksReverse(double base, int sample_rate, int chunk_size, bool interleaved, bool log) { // use this for modifiers that are applied per chunk. double value = chunk_size / (double)sample_rate; double ret = base / value; if(!interleaved) { ret /= 2; } if(log) { printf("got base:%f relative chunk mod:%f\n", base, ret); } return ret; } double cSynthGetRelativeModForChunks(double base, int sample_rate, int chunk_size, bool interleaved, bool log) { // use this for modifiers that are applied per chunk. double value = chunk_size / (double)sample_rate; value *= base; if(!interleaved) { value /= 2; } if(log) { printf("got relative chunk mod:%f with base:%f\n", value, base); } return value; } void cSynthRenderAudio(struct CSynthContext *synth, int16_t *s_byteStream, long begin, long end, long length, bool playing, bool exporting) { if(synth == NULL) { fprintf(stderr, "audioCallback: synthContext is null, returning.\n"); return; } int i = 0; for(i = 0; i < synth->max_voices; i++) { for(int s_x = 0; s_x < synth->temp_mixdown_size; s_x++) { synth->temp_mixdown_buffer[i][s_x] = 0; } } for(int v_i = 0; v_i < synth->max_voices; v_i++) { struct CVoice *voice = synth->voices[v_i]; struct CInstrument *ins = voice->instrument; bool advance = false; if(synth->solo_voice > -1 && v_i != synth->solo_voice) { // if solo is active and this is a channel that is not the solo channel. } else if (synth->solo_voice > -1 && voice != NULL && ins != NULL && voice->note_on && voice->instrument != NULL) { // this is the solo channel. No care if muted. advance = true; } else if(voice != NULL && voice->muted == 0 && ins != NULL && voice->note_on && voice->instrument != NULL) { advance = true; } if(advance) { double d_sampleRate = synth->sample_rate; double d_waveformLength = voice->waveform_length; cSynthVoiceApplyEffects(synth, voice); double delta_phi = (double) (cSynthGetFrequency((double)voice->tone_with_fx) / d_sampleRate * (double)d_waveformLength); for (i = 0; i < length; i+=2) { if(voice->note_on) { double amp = 0; double amp_left = 0; double amp_right = 0; cSynthAdvanceAmpTargets(synth, voice); if(voice->waveform == synth->noise_table) { if(voice->tone_with_fx > 0) { voice->phase_double += voice->tone_with_fx; voice->phase_int = (int)voice->phase_double; if(voice->phase_double >= synth->noise_length) { double diff = voice->phase_double - synth->noise_length; voice->phase_double = diff; voice->phase_int = (int)diff; } } } else { cSynthIncPhase(voice, delta_phi); } if(voice->noteoff_slope) { double init_amp = cSynthInstrumentVolumeByPos(ins, voice)*ins->volume_scalar; amp = voice->noteoff_slope_value*init_amp; double bpm = synth->tempo_map[synth->current_tempo_column][0]->bpm; voice->noteoff_slope_value -= bpm * synth->mod_noteoff_slope; if(voice->noteoff_slope_value < 0) { voice->noteoff_slope_value = 0; } } else { amp = cSynthInstrumentVolumeByPos(ins, voice)*ins->volume_scalar; } amp_left = amp * voice->amp_left; amp_right = amp * voice->amp_right; cSynthIncAdsrCursor(voice, ins, synth); if(voice->downsample_sweep_up || voice->downsample_sweep_down) { if(voice->downsample_sweep_up) { cSynthVoiceApplyDownsampleSweep(synth, voice, true); } if(voice->downsample_sweep_down) { cSynthVoiceApplyDownsampleSweep(synth, voice, false); } if(voice->downsample_next_sample) { if(voice->waveform == synth->noise_table) { if(voice->phase_int < synth->noise_length && voice->phase_int > -1) { voice->downsample_last_sample = (int16_t)(voice->waveform[voice->phase_int]); } } else { if(voice->phase_int < synth->wave_length && voice->phase_int > -1) { voice->downsample_last_sample = (int16_t)(voice->waveform[voice->phase_int]); } } voice->downsample_next_sample = false; } if(s_byteStream != NULL) { int sample_left = (int)(voice->downsample_last_sample * synth->master_amp); int sample_right = (int)(voice->downsample_last_sample * synth->master_amp); cSynthAddSamples(synth, v_i, voice, sample_left, sample_right, s_byteStream, i, i+1, amp_left, amp_right); } } else { if(voice->waveform == synth->noise_table) { if(voice->phase_int < synth->noise_length) { int16_t sample = voice->waveform[voice->phase_int]; if(s_byteStream != NULL) { int sample_left = (int)(sample * synth->master_amp); int sample_right = (int)(sample * synth->master_amp); cSynthAddSamples(synth, v_i, voice, sample_left, sample_right, s_byteStream, i, i+1, amp_left, amp_right); } } } else if(voice->phase_int < synth->wave_length) { int16_t sample = 0; if(voice->waveform == synth->square_wave_table && voice->pwm_active) { sample = cSynthGetPWMSample(synth, voice, voice->phase_int); } else if(voice->fm_active) { sample = cSynthGetFMSample(synth, voice, delta_phi); } else { sample = voice->waveform[voice->phase_int]; } if(s_byteStream != NULL) { int sample_left = (int)(sample * synth->master_amp); int sample_right = (int)(sample * synth->master_amp); cSynthAddSamples(synth, v_i, voice, sample_left, sample_right, s_byteStream, i, i+1, amp_left, amp_right); } } } } } } } if(s_byteStream != NULL) { int16_t sample_left = 0; int16_t sample_right = 0; for(int v_i = 0; v_i < synth->max_voices; v_i++) { if(cSynthChannelShouldBeRendered(synth, v_i)) { // regular mixdown for(i = 0; i < length; i+=2) { sample_left = (int16_t)synth->temp_mixdown_buffer[v_i][i]; sample_right = (int16_t)synth->temp_mixdown_buffer[v_i][i+1]; s_byteStream[i+begin] += sample_left; s_byteStream[i+begin+1] += sample_right; if(sample_left > INT16_MAX || sample_left < INT16_MIN || sample_right > INT16_MAX || sample_right < INT16_MIN) { synth->audio_clips = true; } } } } } if(s_byteStream != NULL) { for(int v_i = 0; v_i < synth->max_voices; v_i++) { struct CVoice *voice = synth->voices[v_i]; if(voice->delay_active) { int delay_samples = (int)voice->param_delay_length; int delay_buffer_limit = delay_samples*2; double decay = voice->param_delay_decay; // write delay to buffer for(i = 0; i < length; i+=2) { int delay_pos = delay_samples + voice->delay_buffer_write_cursor; if(delay_pos >= delay_buffer_limit) { voice->delay_buffer_write_cursor = 0; delay_pos = delay_samples + voice->delay_buffer_write_cursor; } voice->delay_buffer[delay_pos] += synth->temp_mixdown_buffer[v_i][i]; voice->delay_buffer[delay_pos+1] += synth->temp_mixdown_buffer[v_i][i+1]; voice->delay_buffer[delay_pos] *= decay; voice->delay_buffer[delay_pos+1] *= decay; voice->delay_buffer_write_cursor += 2; } // write delay to master for(i = 0; i < length; i+=2) { int pos = voice->delay_buffer_read_cursor; if(pos >= delay_buffer_limit) { voice->delay_buffer_read_cursor = delay_samples; pos = voice->delay_buffer_read_cursor; } voice->delay_buffer[pos] *= decay; voice->delay_buffer[pos+1] *= decay; s_byteStream[i+begin] += voice->delay_buffer[pos]; s_byteStream[i+begin+1] += voice->delay_buffer[pos+1]; voice->delay_buffer_read_cursor += 2; } } // write channel to master for(i = 0; i < length; i+=2) { s_byteStream[i+begin] += synth->temp_mixdown_buffer[v_i][i]; s_byteStream[i+begin+1] += synth->temp_mixdown_buffer[v_i][i+1]; } if(synth->bitcrush_active) { cSynthBitcrush(synth, s_byteStream, begin, length); } } } if(playing || exporting) { cSynthAdvanceTrack(synth, length); } } static void cSynthBitcrush(struct CSynthContext *synth, int16_t *s_byteStream, long begin, long length) { for(long i = 0; i < length; i+=2) { double bit_depth = synth->bitcrush_depth+15; const double default_bit_depth = 32767; int16_t sample_left = s_byteStream[i+begin]; int16_t sample_right = s_byteStream[i+begin+1]; int16_t positive_sample_left = sample_left; int16_t positive_sample_right = sample_right; if (positive_sample_left < 0) { positive_sample_left = -positive_sample_left; } if (positive_sample_right < 0) { positive_sample_right = -positive_sample_right; } int16_t new_sample_left = 0; int16_t new_sample_right = 0; double left_diff_base = positive_sample_left / default_bit_depth; double right_diff_base = positive_sample_right / default_bit_depth; double scale = default_bit_depth / bit_depth; double left_diff = left_diff_base * bit_depth; int16_t left_diff_int = (int16_t)left_diff; if(left_diff_int <= 0) { left_diff_int = 1; } new_sample_left = (int16_t)(left_diff_int * scale); double right_diff = right_diff_base * bit_depth; int16_t right_diff_int = (int16_t)right_diff; if(right_diff_int <= 0) { right_diff_int = 1; } new_sample_right = (int16_t)(right_diff_int * scale); if(sample_left < 0) { new_sample_left = -new_sample_left; } if(sample_right < 0) { new_sample_right = -new_sample_right; } s_byteStream[i+begin] = new_sample_left; s_byteStream[i+begin+1] = new_sample_right; } } bool cSynthChannelShouldBeRendered(struct CSynthContext *synth, int v_i) { struct CVoice *voice = synth->voices[v_i]; struct CInstrument *ins = voice->instrument; bool advance = false; if(synth->solo_voice > -1 && v_i != synth->solo_voice) { // if solo is active and this is a channel that is not the solo channel. } else if (synth->solo_voice > -1 && voice != NULL && ins != NULL && voice->note_on && voice->instrument != NULL) { // this is the solo channel. No care if muted. advance = true; } else if(voice != NULL && voice->muted == 0 && ins != NULL && voice->note_on && voice->instrument != NULL) { advance = true; } if(advance) { return true; } return false; } void cSynthDistClamp(struct CVoice *voice, int16_t *byte_stream, long length) { const int16_t clamp_base = 10000; int16_t positive_dist_clamp = clamp_base; int16_t negative_dist_clamp = -clamp_base; for(int i = 0; i < length; i++) { byte_stream[i] *= voice->dist_amp_pre_clamp; if(byte_stream[i] > positive_dist_clamp) { byte_stream[i] = positive_dist_clamp; byte_stream[i] *= voice->dist_amp_post_clamp; } else if(byte_stream[i] < negative_dist_clamp) { byte_stream[i] = negative_dist_clamp; byte_stream[i] *= voice->dist_amp_post_clamp; } } } void cSynthAddSamples(struct CSynthContext *synth, int voice_index, struct CVoice *voice, int sample_left, int sample_right, int16_t *byte_stream, int index_left, int index_right, double amp_left, double amp_right) { const int16_t clamp_base = 10000; int16_t positive_dist_clamp = clamp_base; int16_t negative_dist_clamp = -clamp_base; if(voice->dist_active) { sample_left *= voice->dist_amp_pre_clamp; if(sample_left > positive_dist_clamp) { sample_left = positive_dist_clamp; } else if(sample_left < negative_dist_clamp) { sample_left = negative_dist_clamp; } sample_right *= voice->dist_amp_pre_clamp; if(sample_right > positive_dist_clamp) { sample_right = positive_dist_clamp; } else if(sample_right < negative_dist_clamp) { sample_right = negative_dist_clamp; } sample_left *= voice->dist_amp_post_clamp; sample_right *= voice->dist_amp_post_clamp; if(index_left < synth->temp_mixdown_size) { synth->temp_mixdown_buffer[voice_index][index_left] = (int16_t)(sample_left * amp_left); } if(index_right < synth->temp_mixdown_size) { synth->temp_mixdown_buffer[voice_index][index_right] = (int16_t)(sample_right * amp_right); } } else { if(index_left < synth->temp_mixdown_size) { synth->temp_mixdown_buffer[voice_index][index_left] = (int16_t)(sample_left * amp_left); } if(index_right < synth->temp_mixdown_size) { synth->temp_mixdown_buffer[voice_index][index_right] = (int16_t)(sample_right * amp_right); } } } snibbetracker-1.1.1/snibbetracker/src/CSynth.h000066400000000000000000000310721351541346100213240ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include "cJSON/cJSON.h" #ifndef cengine_CSynth_h #define cengine_CSynth_h struct CSynthContext { double base_mod_noteoff_slope; double base_mod_adsr_cursor; double base_mod_advance_amp_targets; double base_mod_vibrato_speed; double base_mod_vibrato_depth; double base_mod_pitch_1; double base_mod_pitch_2; double base_mod_arp_speed; double base_mod_portamento_speed; double base_mod_pwm_speed; double base_mod_detune; double mod_noteoff_slope; double mod_adsr_cursor; double mod_advance_amp_targets; double mod_vibrato_speed; double mod_vibrato_depth; double mod_pitch_1; double mod_pitch_2; double mod_arp_speed; double mod_portamento_speed; double mod_pwm_speed; double mod_detune; struct CStr *str_title; struct CStr *str_author; struct CStr *str_info; bool debuglog; bool errorlog; bool interleaved; double master_amp; int master_amp_percent; int default_bpm; bool audio_clips; bool preview_enabled; bool sustain_active; bool preview_locked; bool preview_started; int chunk_size; int build_number; int file_version; int sample_rate; int frame_rate; double samples_per_minute; bool looped; // query to find out if the song has looped. struct CVoice **voices; struct CInstrument **instruments; struct CInstrument *custom_instrument; int max_voices; int max_instruments; int current_instrument; int *active_tracks; int solo_track; int solo_voice; int wave_length; int noise_length; struct CTrackNode ****track; struct CTrackNode ***swap_track; struct CTrackNode ***copy_track; struct CTrackNode ***instrument_effects; int max_instrument_effects; int max_tracks_and_patterns; int track_width; int track_height; // number of active rows in a track. int track_max_height; double track_progress; int track_progress_int; int track_cursor_x; // will only go to max_voices. int track_cursor_y; bool track_advance; int current_track; int **patterns_and_voices; int patterns_and_voices_width; int patterns_and_voices_height; int **patterns; int patterns_width; int patterns_height; int max_adsr_nodes; int arpeggio_speed; bool needs_redraw; int16_t **temp_mixdown_buffer; int temp_mixdown_size; int track_highlight_interval; int tempo_width; int tempo_height; struct CTempoNode ***tempo_map; int wavetable_width; int wavetable_height; struct CWavetableNode ***wavetable_map; int current_tempo_column; int tempo_index; int pending_tempo_column; double pending_tempo_blink_counter; double ticks_modifier; bool pending_tempo_blink_counter_toggle; bool tempo_skip_step; bool bitcrush_active; double bitcrush_depth; // tables int16_t *sine_wave_table; int16_t *sawtooth_wave_table; int16_t *square_wave_table; int16_t *triangle_wave_table; int16_t *noise_table; int16_t *custom_table; }; struct CadsrNode { double pos; double amp; }; struct CInstrument { double volume_scalar; struct CadsrNode **adsr; double adsr_cursor; int adsr_nodes; int instrument_number; }; struct CVoice { int muted; double adsr_cursor; // keep a cursor for voice to use same instrument for different voices. int int_id; struct CInstrument *instrument; int previous_instrument_number; // use to clear out preset effects when switching instrument. bool note_on; int16_t *waveform; int waveform_length; double volume; double phase_double; double phase_double_inc; int phase_int; bool active; int tone; int last_valid_tone; int previous_tone; int previous_effect; int previous_effect_param1; int previous_effect_param2; double tone_with_fx; int last_preview_tone; bool sustain_active; // vibrato bool vibrato_active; double vibrato_depth; double vibrato_speed; double vibrato_phase; int last_vibrato_effect1; int last_vibrato_effect2; // pitch bool pitch_up_active; double pitch_speed1; double pitch_speed2; double pitch_up_down_phase; bool pitch_down_active; int last_pitch_effect1; int last_pitch_effect2; // downsample int16_t downsample_last_sample; bool downsample_next_sample; int downsample_limit; double downsample_count; bool downsample_sweep_up; bool downsample_sweep_down; double downsample_sweep_slope; double downsample_sweep_start; double downsample_sweep_speed; int last_downsample_effect1; int last_downsample_effect2; // wavetable bool wavetable_active; int wavetable_lane; double wavetable_cursor; int16_t *wavetable_previous_table; // smoothing for preview. As we cannot look ahead, we need to gracefully end the current note before starting the next. bool preview_slope; double preview_amp_target; double preview_amp_current; // smoothing/slope bool noteoff_slope; double noteoff_slope_value; // arpeggio bool arpeggio_active; int arpeggio_tone; double arpeggio_count; double arpeggio_limit; int arpeggio_tone_0; int arpeggio_tone_1; int arpeggio_tone_2; int arpeggio_tone_toggle; int last_arpeggio_effect1; int last_arpeggio_effect2; // portamento bool portamento_active; double portamento_diff; double portamento_original_diff; double portamento_speed; int last_portamento_effect1; int last_portamento_effect2; // amp A double amp_left; double amp_right; double amp_target_left; double amp_target_right; bool amp_target_left_higher; bool amp_target_right_higher; bool amp_target_left_reached; bool amp_target_right_reached; int last_amp_effect1; int last_amp_effect2; // arp speed int arp_speed; int last_arp_speed_effect1; int last_arp_speed_effect2; // PWM bool pwm_active; double pwm_pos; double pwm_speed; double pwm_depth; int pwm_static_pos; int last_pwm_effect1; int last_pwm_effect2; // FM bool fm_active; double fm_pos; double fm_speed; double fm_depth; int last_fm_effect1; int last_fm_effect2; // dist bool dist_active; double dist_amp_pre_clamp; double dist_amp_post_clamp; int last_dist_effect1; int last_dist_effect2; // delay bool delay_active; double param_delay_length; double param_delay_decay; int16_t *delay_buffer; int delay_buffer_size; int delay_buffer_limit; int delay_buffer_write_cursor; int delay_buffer_read_cursor; // 7 detune bool detune_active; double detune_amount; }; struct CTrackNode { int tone; bool tone_active; struct CInstrument *instrument; int instrument_nr; char effect; char effect_param1; char effect_param2; char effect_value; char effect_param1_value; char effect_param2_value; }; struct CTempoNode { char ticks; bool active; int bpm; }; struct CWavetableNode { char value; bool active; int speed; }; void cSynthInit(struct CSynthContext *synth); struct CSynthContext *cSynthContextNew(void); cJSON* cSynthSaveProject(struct CSynthContext *synth); int cSynthLoadProject(struct CSynthContext *synth, const char* json); void cSynthReset(struct CSynthContext *synth); void cSynthCleanup(struct CSynthContext *synth); void cSynthMoveNotes(struct CSynthContext *synth, bool up, bool down, int cursor_x, int cursor_y, int pattern); void cSynthAddTrackNodeParams(struct CSynthContext *synth, int current_track, int x, int y, int instrument, char effect, char effect_param1, char effect_param2); void cSynthRemoveTrackNodeParams(struct CSynthContext *synth, int current_track, int x, int y, bool instrument, bool effect, bool effect_param1, bool effect_param2); void cSynthTurnOffSustain(struct CSynthContext *synth); void cSynthAddTrackNode(struct CSynthContext *synth, int instrument_nr, int current_track, int x, int y, bool editing, bool preview, int tone, bool playing); void cSynthRemoveTrackNode(struct CSynthContext *synth, int current_track, int x, int y); void cSynthUpdateTrackCursor(struct CSynthContext *synth, int x, int y); int cSynthGetNextActiveTrack(int current_track, struct CSynthContext *synth, bool forward); void cSynthAdvanceTrack(struct CSynthContext *synth, long samples); void cSynthVoiceApplyEffects(struct CSynthContext *synth, struct CVoice *v); void cSynthAdvanceAmpTargets(struct CSynthContext *synth, struct CVoice *v); void cSynthRampUpToFullAmp(struct CVoice *v); int16_t cSynthGetFMSample(struct CSynthContext *synth, struct CVoice *v, double delta_phi); int16_t cSynthGetPWMSample(struct CSynthContext *synth, struct CVoice *v, int phase_int); void cSynthVoiceApplyDownsampleSweep(struct CSynthContext *synth, struct CVoice *v, bool up); void cSynthResetTrackProgress(struct CSynthContext *synth, int start_pattern, int start_row); void cSynthResetPortamento(struct CVoice *v); void cSynthResetAllEffects(struct CVoice *v); void cSynthResetOnLoopBack(struct CSynthContext *synth); void cSynthResetTempoIndex(struct CSynthContext *synth); void cSynthUpdateHighlightInterval(struct CSynthContext *synth); struct CTrackNode *cSynthNewTrackNode(void); struct CTrackNode *cSynthCopyTracknode(struct CTrackNode *track_node); void cSynthIncAdsrCursor(struct CVoice *v, struct CInstrument *i, struct CSynthContext *synth); void cSynthWriteCustomTableFromNodes(struct CSynthContext *synth); double cSynthInstrumentVolumeByPos(struct CInstrument* i, struct CVoice *v); double cSynthGetFrequency(double pitch); void cSynthIncPhase(struct CVoice *v, double inc); void cSynthInstrumentNoteOn(struct CInstrument *i); char *cSynthToneToChar(int tone); char cSynthGetCharFromParam(char value); char cSynthGetValueForParam(char value); void cSynthPasteNotesFromPattern(struct CSynthContext *synth, int origin_x, int origin_y, int target_x, int target_y); void cSynthTransposePattern(struct CSynthContext *synth, int track, int track_x, bool up, int amount); void cSynthTransposeSelection(struct CSynthContext *synth, int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool up, int amount); void cSynthCopyNotesFromSelection(struct CSynthContext *synth, int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool cut, bool store); void cSynthPasteNotesToPos(struct CSynthContext *synth, int track, int cursor_x, int cursor_y); double cSynthGetRelativeModifierReverse(double base, int sample_rate, bool interleaved, bool log); double cSynthGetRelativeModifier(double base, int sample_rate, bool interleaved, bool log); double cSynthGetRelativeModForChunksReverse(double base, int sample_rate, int chunk_size, bool interleaved, bool log); double cSynthGetRelativeModForChunks(double base, int sample_rate, int chunk_size, bool interleaved, bool log); void cSynthRenderAudio(struct CSynthContext *synth, int16_t *s_byteStream, long begin, long end, long length, bool playing, bool exporting); bool cSynthChannelShouldBeRendered(struct CSynthContext *synth, int v_i); void cSynthDistClamp(struct CVoice *voice, int16_t *byte_stream, long length); void cSynthAddSamples(struct CSynthContext *synth, int voice_index, struct CVoice *voice, int sample_left, int sample_right, int16_t *byte_stream, int index_left, int index_right, double amp_left, double amp_right); #endif /* defined(__synth__CSynth__) */ snibbetracker-1.1.1/snibbetracker/src/cJSON/000077500000000000000000000000001351541346100206545ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker/src/cJSON/LICENSE000066400000000000000000000021031351541346100216550ustar00rootroot00000000000000 Copyright (c) 2009 Dave Gamble Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. snibbetracker-1.1.1/snibbetracker/src/cJSON/README000066400000000000000000000210571351541346100215410ustar00rootroot00000000000000/* Copyright (c) 2009 Dave Gamble Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ Welcome to cJSON. cJSON aims to be the dumbest possible parser that you can get your job done with. It's a single file of C, and a single header file. JSON is described best here: http://www.json.org/ It's like XML, but fat-free. You use it to move data around, store things, or just generally represent your program's state. First up, how do I build? Add cJSON.c to your project, and put cJSON.h somewhere in the header search path. For example, to build the test app: gcc cJSON.c test.c -o test -lm ./test As a library, cJSON exists to take away as much legwork as it can, but not get in your way. As a point of pragmatism (i.e. ignoring the truth), I'm going to say that you can use it in one of two modes: Auto and Manual. Let's have a quick run-through. I lifted some JSON from this page: http://www.json.org/fatfree.html That page inspired me to write cJSON, which is a parser that tries to share the same philosophy as JSON itself. Simple, dumb, out of the way. Some JSON: { "name": "Jack (\"Bee\") Nimble", "format": { "type": "rect", "width": 1920, "height": 1080, "interlace": false, "frame rate": 24 } } Assume that you got this from a file, a webserver, or magic JSON elves, whatever, you have a char * to it. Everything is a cJSON struct. Get it parsed: cJSON *root = cJSON_Parse(my_json_string); This is an object. We're in C. We don't have objects. But we do have structs. What's the framerate? cJSON *format = cJSON_GetObjectItem(root,"format"); int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint; Want to change the framerate? cJSON_GetObjectItem(format,"frame rate")->valueint=25; Back to disk? char *rendered=cJSON_Print(root); Finished? Delete the root (this takes care of everything else). cJSON_Delete(root); That's AUTO mode. If you're going to use Auto mode, you really ought to check pointers before you dereference them. If you want to see how you'd build this struct in code? cJSON *root,*fmt; root=cJSON_CreateObject(); cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble")); cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject()); cJSON_AddStringToObject(fmt,"type", "rect"); cJSON_AddNumberToObject(fmt,"width", 1920); cJSON_AddNumberToObject(fmt,"height", 1080); cJSON_AddFalseToObject (fmt,"interlace"); cJSON_AddNumberToObject(fmt,"frame rate", 24); Hopefully we can agree that's not a lot of code? There's no overhead, no unnecessary setup. Look at test.c for a bunch of nice examples, mostly all ripped off the json.org site, and a few from elsewhere. What about manual mode? First up you need some detail. Let's cover how the cJSON objects represent the JSON data. cJSON doesn't distinguish arrays from objects in handling; just type. Each cJSON has, potentially, a child, siblings, value, a name. The root object has: Object Type and a Child The Child has name "name", with value "Jack ("Bee") Nimble", and a sibling: Sibling has type Object, name "format", and a child. That child has type String, name "type", value "rect", and a sibling: Sibling has type Number, name "width", value 1920, and a sibling: Sibling has type Number, name "height", value 1080, and a sibling: Sibling hs type False, name "interlace", and a sibling: Sibling has type Number, name "frame rate", value 24 Here's the structure: typedef struct cJSON { struct cJSON *next,*prev; struct cJSON *child; int type; char *valuestring; int valueint; double valuedouble; char *string; } cJSON; By default all values are 0 unless set by virtue of being meaningful. next/prev is a doubly linked list of siblings. next takes you to your sibling, prev takes you back from your sibling to you. Only objects and arrays have a "child", and it's the head of the doubly linked list. A "child" entry will have prev==0, but next potentially points on. The last sibling has next=0. The type expresses Null/True/False/Number/String/Array/Object, all of which are #defined in cJSON.h A Number has valueint and valuedouble. If you're expecting an int, read valueint, if not read valuedouble. Any entry which is in the linked list which is the child of an object will have a "string" which is the "name" of the entry. When I said "name" in the above example, that's "string". "string" is the JSON name for the 'variable name' if you will. Now you can trivially walk the lists, recursively, and parse as you please. You can invoke cJSON_Parse to get cJSON to parse for you, and then you can take the root object, and traverse the structure (which is, formally, an N-tree), and tokenise as you please. If you wanted to build a callback style parser, this is how you'd do it (just an example, since these things are very specific): void parse_and_callback(cJSON *item,const char *prefix) { while (item) { char *newprefix=malloc(strlen(prefix)+strlen(item->name)+2); sprintf(newprefix,"%s/%s",prefix,item->name); int dorecurse=callback(newprefix, item->type, item); if (item->child && dorecurse) parse_and_callback(item->child,newprefix); item=item->next; free(newprefix); } } The prefix process will build you a separated list, to simplify your callback handling. The 'dorecurse' flag would let the callback decide to handle sub-arrays on it's own, or let you invoke it per-item. For the item above, your callback might look like this: int callback(const char *name,int type,cJSON *item) { if (!strcmp(name,"name")) { /* populate name */ } else if (!strcmp(name,"format/type") { /* handle "rect" */ } else if (!strcmp(name,"format/width") { /* 800 */ } else if (!strcmp(name,"format/height") { /* 600 */ } else if (!strcmp(name,"format/interlace") { /* false */ } else if (!strcmp(name,"format/frame rate") { /* 24 */ } return 1; } Alternatively, you might like to parse iteratively. You'd use: void parse_object(cJSON *item) { int i; for (i=0;ichild; while (subitem) { // handle subitem if (subitem->child) parse_object(subitem->child); subitem=subitem->next; } } Of course, this should look familiar, since this is just a stripped-down version of the callback-parser. This should cover most uses you'll find for parsing. The rest should be possible to infer.. and if in doubt, read the source! There's not a lot of it! ;) In terms of constructing JSON data, the example code above is the right way to do it. You can, of course, hand your sub-objects to other functions to populate. Also, if you find a use for it, you can manually build the objects. For instance, suppose you wanted to build an array of objects? cJSON *objects[24]; cJSON *Create_array_of_anything(cJSON **items,int num) { int i;cJSON *prev, *root=cJSON_CreateArray(); for (i=0;i<24;i++) { if (!i) root->child=objects[i]; else prev->next=objects[i], objects[i]->prev=prev; prev=objects[i]; } return root; } and simply: Create_array_of_anything(objects,24); cJSON doesn't make any assumptions about what order you create things in. You can attach the objects, as above, and later add children to each of those objects. As soon as you call cJSON_Print, it renders the structure to text. The test.c code shows how to handle a bunch of typical cases. If you uncomment the code, it'll load, parse and print a bunch of test files, also from json.org, which are more complex than I'd care to try and stash into a const char array[]. Enjoy cJSON! - Dave Gamble, Aug 2009 snibbetracker-1.1.1/snibbetracker/src/cJSON/cJSON.c000066400000000000000000000551711351541346100217450ustar00rootroot00000000000000/* Copyright (c) 2009 Dave Gamble Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* cJSON */ /* JSON parser in C. */ #include #include #include #include #include #include #include #include "cJSON.h" static const char *ep; const char *cJSON_GetErrorPtr(void) {return ep;} static int cJSON_strcasecmp(const char *s1,const char *s2) { if (!s1) return (s1==s2)?0:1;if (!s2) return 1; for(; tolower(*s1) == tolower(*s2); ++s1, ++s2) if(*s1 == 0) return 0; return tolower(*(const unsigned char *)s1) - tolower(*(const unsigned char *)s2); } static void *(*cJSON_malloc)(size_t sz) = malloc; static void (*cJSON_free)(void *ptr) = free; static char* cJSON_strdup(const char* str) { size_t len; char* copy; len = strlen(str) + 1; if (!(copy = (char*)cJSON_malloc(len))) return 0; memcpy(copy,str,len); return copy; } void cJSON_InitHooks(cJSON_Hooks* hooks) { if (!hooks) { /* Reset hooks */ cJSON_malloc = malloc; cJSON_free = free; return; } cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:malloc; cJSON_free = (hooks->free_fn)?hooks->free_fn:free; } /* Internal constructor. */ static cJSON *cJSON_New_Item(void) { cJSON* node = (cJSON*)cJSON_malloc(sizeof(cJSON)); if (node) memset(node,0,sizeof(cJSON)); return node; } /* Delete a cJSON structure. */ void cJSON_Delete(cJSON *c) { cJSON *next; while (c) { next=c->next; if (!(c->type&cJSON_IsReference) && c->child) cJSON_Delete(c->child); if (!(c->type&cJSON_IsReference) && c->valuestring) cJSON_free(c->valuestring); if (c->string) cJSON_free(c->string); cJSON_free(c); c=next; } } /* Parse the input text to generate a number, and populate the result into item. */ static const char *parse_number(cJSON *item,const char *num) { double n=0,sign=1,scale=0;int subscale=0,signsubscale=1; if (*num=='-') sign=-1,num++; /* Has sign? */ if (*num=='0') num++; /* is zero */ if (*num>='1' && *num<='9') do n=(n*10.0)+(*num++ -'0'); while (*num>='0' && *num<='9'); /* Number? */ if (*num=='.' && num[1]>='0' && num[1]<='9') {num++; do n=(n*10.0)+(*num++ -'0'),scale--; while (*num>='0' && *num<='9');} /* Fractional part? */ if (*num=='e' || *num=='E') /* Exponent? */ { num++;if (*num=='+') num++; else if (*num=='-') signsubscale=-1,num++; /* With sign? */ while (*num>='0' && *num<='9') subscale=(subscale*10)+(*num++ - '0'); /* Number? */ } n=sign*n*pow(10.0,(scale+subscale*signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */ item->valuedouble=n; item->valueint=(int)n; item->type=cJSON_Number; return num; } /* Render the number nicely from the given item into a string. */ static char *print_number(cJSON *item) { char *str; double d=item->valuedouble; if (fabs(((double)item->valueint)-d)<=DBL_EPSILON && d<=INT_MAX && d>=INT_MIN) { str=(char*)cJSON_malloc(21); /* 2^64+1 can be represented in 21 chars. */ if (str) sprintf(str,"%d",item->valueint); } else { str=(char*)cJSON_malloc(64); /* This is a nice tradeoff. */ if (str) { if (fabs(floor(d)-d)<=DBL_EPSILON && fabs(d)<1.0e60)sprintf(str,"%.0f",d); else if (fabs(d)<1.0e-6 || fabs(d)>1.0e9) sprintf(str,"%e",d); else sprintf(str,"%f",d); } } return str; } static unsigned parse_hex4(const char *str) { unsigned h=0; if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; h=h<<4;str++; if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; h=h<<4;str++; if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; h=h<<4;str++; if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; return h; } /* Parse the input text into an unescaped cstring, and populate item. */ static const unsigned char firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; static const char *parse_string(cJSON *item,const char *str) { const char *ptr=str+1;char *ptr2;char *out;int len=0;unsigned uc,uc2; if (*str!='\"') {ep=str;return 0;} /* not a string! */ while (*ptr!='\"' && *ptr && ++len) if (*ptr++ == '\\') ptr++; /* Skip escaped quotes. */ out=(char*)cJSON_malloc(len+1); /* This is how long we need for the string, roughly. */ if (!out) return 0; ptr=str+1;ptr2=out; while (*ptr!='\"' && *ptr) { if (*ptr!='\\') *ptr2++=*ptr++; else { ptr++; switch (*ptr) { case 'b': *ptr2++='\b'; break; case 'f': *ptr2++='\f'; break; case 'n': *ptr2++='\n'; break; case 'r': *ptr2++='\r'; break; case 't': *ptr2++='\t'; break; case 'u': /* transcode utf16 to utf8. */ uc=parse_hex4(ptr+1);ptr+=4; /* get the unicode char. */ if ((uc>=0xDC00 && uc<=0xDFFF) || uc==0) break; /* check for invalid. */ if (uc>=0xD800 && uc<=0xDBFF) /* UTF16 surrogate pairs. */ { if (ptr[1]!='\\' || ptr[2]!='u') break; /* missing second-half of surrogate. */ uc2=parse_hex4(ptr+3);ptr+=6; if (uc2<0xDC00 || uc2>0xDFFF) break; /* invalid second-half of surrogate. */ uc=0x10000 + (((uc&0x3FF)<<10) | (uc2&0x3FF)); } len=4;if (uc<0x80) len=1;else if (uc<0x800) len=2;else if (uc<0x10000) len=3; ptr2+=len; switch (len) { case 4: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6; case 3: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6; case 2: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6; case 1: *--ptr2 =(uc | firstByteMark[len]); } ptr2+=len; break; default: *ptr2++=*ptr; break; } ptr++; } } *ptr2=0; if (*ptr=='\"') ptr++; item->valuestring=out; item->type=cJSON_String; return ptr; } /* Render the cstring provided to an escaped version that can be printed. */ static char *print_string_ptr(const char *str) { const char *ptr;char *ptr2,*out;int len=0;unsigned char token; if (!str) return cJSON_strdup(""); ptr=str;while ((token=*ptr) && ++len) {if (strchr("\"\\\b\f\n\r\t",token)) len++; else if (token<32) len+=5;ptr++;} out=(char*)cJSON_malloc(len+3); if (!out) return 0; ptr2=out;ptr=str; *ptr2++='\"'; while (*ptr) { if ((unsigned char)*ptr>31 && *ptr!='\"' && *ptr!='\\') *ptr2++=*ptr++; else { *ptr2++='\\'; switch (token=*ptr++) { case '\\': *ptr2++='\\'; break; case '\"': *ptr2++='\"'; break; case '\b': *ptr2++='b'; break; case '\f': *ptr2++='f'; break; case '\n': *ptr2++='n'; break; case '\r': *ptr2++='r'; break; case '\t': *ptr2++='t'; break; default: sprintf(ptr2,"u%04x",token);ptr2+=5; break; /* escape and print */ } } } *ptr2++='\"';*ptr2++=0; return out; } /* Invote print_string_ptr (which is useful) on an item. */ static char *print_string(cJSON *item) {return print_string_ptr(item->valuestring);} /* Predeclare these prototypes. */ static const char *parse_value(cJSON *item,const char *value); static char *print_value(cJSON *item,int depth,int fmt); static const char *parse_array(cJSON *item,const char *value); static char *print_array(cJSON *item,int depth,int fmt); static const char *parse_object(cJSON *item,const char *value); static char *print_object(cJSON *item,int depth,int fmt); /* Utility to jump whitespace and cr/lf */ static const char *skip(const char *in) {while (in && *in && (unsigned char)*in<=32) in++; return in;} /* Parse an object - create a new root, and populate. */ cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated) { const char *end=0; cJSON *c=cJSON_New_Item(); ep=0; if (!c) return 0; /* memory fail */ end=parse_value(c,skip(value)); if (!end) {cJSON_Delete(c);return 0;} /* parse failure. ep is set. */ /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ if (require_null_terminated) {end=skip(end);if (*end) {cJSON_Delete(c);ep=end;return 0;}} if (return_parse_end) *return_parse_end=end; return c; } /* Default options for cJSON_Parse */ cJSON *cJSON_Parse(const char *value) {return cJSON_ParseWithOpts(value,0,0);} /* Render a cJSON item/entity/structure to text. */ char *cJSON_Print(cJSON *item) {return print_value(item,0,1);} char *cJSON_PrintUnformatted(cJSON *item) {return print_value(item,0,0);} /* Parser core - when encountering text, process appropriately. */ static const char *parse_value(cJSON *item,const char *value) { if (!value) return 0; /* Fail on null. */ if (!strncmp(value,"null",4)) { item->type=cJSON_NULL; return value+4; } if (!strncmp(value,"false",5)) { item->type=cJSON_False; return value+5; } if (!strncmp(value,"true",4)) { item->type=cJSON_True; item->valueint=1; return value+4; } if (*value=='\"') { return parse_string(item,value); } if (*value=='-' || (*value>='0' && *value<='9')) { return parse_number(item,value); } if (*value=='[') { return parse_array(item,value); } if (*value=='{') { return parse_object(item,value); } ep=value;return 0; /* failure. */ } /* Render a value to text. */ static char *print_value(cJSON *item,int depth,int fmt) { char *out=0; if (!item) return 0; switch ((item->type)&255) { case cJSON_NULL: out=cJSON_strdup("null"); break; case cJSON_False: out=cJSON_strdup("false");break; case cJSON_True: out=cJSON_strdup("true"); break; case cJSON_Number: out=print_number(item);break; case cJSON_String: out=print_string(item);break; case cJSON_Array: out=print_array(item,depth,fmt);break; case cJSON_Object: out=print_object(item,depth,fmt);break; } return out; } /* Build an array from input text. */ static const char *parse_array(cJSON *item,const char *value) { cJSON *child; if (*value!='[') {ep=value;return 0;} /* not an array! */ item->type=cJSON_Array; value=skip(value+1); if (*value==']') return value+1; /* empty array. */ item->child=child=cJSON_New_Item(); if (!item->child) return 0; /* memory fail */ value=skip(parse_value(child,skip(value))); /* skip any spacing, get the value. */ if (!value) return 0; while (*value==',') { cJSON *new_item; if (!(new_item=cJSON_New_Item())) return 0; /* memory fail */ child->next=new_item;new_item->prev=child;child=new_item; value=skip(parse_value(child,skip(value+1))); if (!value) return 0; /* memory fail */ } if (*value==']') return value+1; /* end of array */ ep=value;return 0; /* malformed. */ } /* Render an array to text */ static char *print_array(cJSON *item,int depth,int fmt) { char **entries; char *out=0,*ptr,*ret;int len=5; cJSON *child=item->child; int numentries=0,i=0,fail=0; /* How many entries in the array? */ while (child) numentries++,child=child->next; /* Explicitly handle numentries==0 */ if (!numentries) { out=(char*)cJSON_malloc(3); if (out) strcpy(out,"[]"); return out; } /* Allocate an array to hold the values for each */ entries=(char**)cJSON_malloc(numentries*sizeof(char*)); if (!entries) return 0; memset(entries,0,numentries*sizeof(char*)); /* Retrieve all the results: */ child=item->child; while (child && !fail) { ret=print_value(child,depth+1,fmt); entries[i++]=ret; if (ret) len+=strlen(ret)+2+(fmt?1:0); else fail=1; child=child->next; } /* If we didn't fail, try to malloc the output string */ if (!fail) out=(char*)cJSON_malloc(len); /* If that fails, we fail. */ if (!out) fail=1; /* Handle failure. */ if (fail) { for (i=0;itype=cJSON_Object; value=skip(value+1); if (*value=='}') return value+1; /* empty array. */ item->child=child=cJSON_New_Item(); if (!item->child) return 0; value=skip(parse_string(child,skip(value))); if (!value) return 0; child->string=child->valuestring;child->valuestring=0; if (*value!=':') {ep=value;return 0;} /* fail! */ value=skip(parse_value(child,skip(value+1))); /* skip any spacing, get the value. */ if (!value) return 0; while (*value==',') { cJSON *new_item; if (!(new_item=cJSON_New_Item())) return 0; /* memory fail */ child->next=new_item;new_item->prev=child;child=new_item; value=skip(parse_string(child,skip(value+1))); if (!value) return 0; child->string=child->valuestring;child->valuestring=0; if (*value!=':') {ep=value;return 0;} /* fail! */ value=skip(parse_value(child,skip(value+1))); /* skip any spacing, get the value. */ if (!value) return 0; } if (*value=='}') return value+1; /* end of array */ ep=value;return 0; /* malformed. */ } /* Render an object to text. */ static char *print_object(cJSON *item,int depth,int fmt) { char **entries=0,**names=0; char *out=0,*ptr,*ret,*str;int len=7,i=0,j; cJSON *child=item->child; int numentries=0,fail=0; /* Count the number of entries. */ while (child) numentries++,child=child->next; /* Explicitly handle empty object case */ if (!numentries) { out=(char*)cJSON_malloc(fmt?depth+4:3); if (!out) return 0; ptr=out;*ptr++='{'; if (fmt) {*ptr++='\n';for (i=0;ichild;depth++;if (fmt) len+=depth; while (child) { names[i]=str=print_string_ptr(child->string); entries[i++]=ret=print_value(child,depth,fmt); if (str && ret) len+=strlen(ret)+strlen(str)+2+(fmt?2+depth:0); else fail=1; child=child->next; } /* Try to allocate the output string */ if (!fail) out=(char*)cJSON_malloc(len); if (!out) fail=1; /* Handle failure */ if (fail) { for (i=0;ichild;int i=0;while(c)i++,c=c->next;return i;} cJSON *cJSON_GetArrayItem(cJSON *array,int item) {cJSON *c=array->child; while (c && item>0) item--,c=c->next; return c;} cJSON *cJSON_GetObjectItem(cJSON *object,const char *string) {cJSON *c=object->child; while (c && cJSON_strcasecmp(c->string,string)) c=c->next; return c;} /* Utility for array list handling. */ static void suffix_object(cJSON *prev,cJSON *item) {prev->next=item;item->prev=prev;} /* Utility for handling references. */ static cJSON *create_reference(cJSON *item) {cJSON *ref=cJSON_New_Item();if (!ref) return 0;memcpy(ref,item,sizeof(cJSON));ref->string=0;ref->type|=cJSON_IsReference;ref->next=ref->prev=0;return ref;} /* Add item to array/object. */ void cJSON_AddItemToArray(cJSON *array, cJSON *item) {cJSON *c=array->child;if (!item) return; if (!c) {array->child=item;} else {while (c && c->next) c=c->next; suffix_object(c,item);}} void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item) {if (!item) return; if (item->string) cJSON_free(item->string);item->string=cJSON_strdup(string);cJSON_AddItemToArray(object,item);} void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item) {cJSON_AddItemToArray(array,create_reference(item));} void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item) {cJSON_AddItemToObject(object,string,create_reference(item));} cJSON *cJSON_DetachItemFromArray(cJSON *array,int which) {cJSON *c=array->child;while (c && which>0) c=c->next,which--;if (!c) return 0; if (c->prev) c->prev->next=c->next;if (c->next) c->next->prev=c->prev;if (c==array->child) array->child=c->next;c->prev=c->next=0;return c;} void cJSON_DeleteItemFromArray(cJSON *array,int which) {cJSON_Delete(cJSON_DetachItemFromArray(array,which));} cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string) {int i=0;cJSON *c=object->child;while (c && cJSON_strcasecmp(c->string,string)) i++,c=c->next;if (c) return cJSON_DetachItemFromArray(object,i);return 0;} void cJSON_DeleteItemFromObject(cJSON *object,const char *string) {cJSON_Delete(cJSON_DetachItemFromObject(object,string));} /* Replace array/object items with new ones. */ void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem) {cJSON *c=array->child;while (c && which>0) c=c->next,which--;if (!c) return; newitem->next=c->next;newitem->prev=c->prev;if (newitem->next) newitem->next->prev=newitem; if (c==array->child) array->child=newitem; else newitem->prev->next=newitem;c->next=c->prev=0;cJSON_Delete(c);} void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem){int i=0;cJSON *c=object->child;while(c && cJSON_strcasecmp(c->string,string))i++,c=c->next;if(c){newitem->string=cJSON_strdup(string);cJSON_ReplaceItemInArray(object,i,newitem);}} /* Create basic types: */ cJSON *cJSON_CreateNull(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_NULL;return item;} cJSON *cJSON_CreateTrue(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_True;return item;} cJSON *cJSON_CreateFalse(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_False;return item;} cJSON *cJSON_CreateBool(int b) {cJSON *item=cJSON_New_Item();if(item)item->type=b?cJSON_True:cJSON_False;return item;} cJSON *cJSON_CreateNumber(double num) {cJSON *item=cJSON_New_Item();if(item){item->type=cJSON_Number;item->valuedouble=num;item->valueint=(int)num;}return item;} cJSON *cJSON_CreateString(const char *string) {cJSON *item=cJSON_New_Item();if(item){item->type=cJSON_String;item->valuestring=cJSON_strdup(string);}return item;} cJSON *cJSON_CreateArray(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_Array;return item;} cJSON *cJSON_CreateObject(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_Object;return item;} /* Create Arrays: */ cJSON *cJSON_CreateIntArray(const int *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} cJSON *cJSON_CreateFloatArray(const float *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} cJSON *cJSON_CreateDoubleArray(const double *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} cJSON *cJSON_CreateStringArray(const char **strings,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} /* Duplication */ cJSON *cJSON_Duplicate(cJSON *item,int recurse) { cJSON *newitem,*cptr,*nptr=0,*newchild; /* Bail on bad ptr */ if (!item) return 0; /* Create new item */ newitem=cJSON_New_Item(); if (!newitem) return 0; /* Copy over all vars */ newitem->type=item->type&(~cJSON_IsReference),newitem->valueint=item->valueint,newitem->valuedouble=item->valuedouble; if (item->valuestring) {newitem->valuestring=cJSON_strdup(item->valuestring); if (!newitem->valuestring) {cJSON_Delete(newitem);return 0;}} if (item->string) {newitem->string=cJSON_strdup(item->string); if (!newitem->string) {cJSON_Delete(newitem);return 0;}} /* If non-recursive, then we're done! */ if (!recurse) return newitem; /* Walk the ->next chain for the child. */ cptr=item->child; while (cptr) { newchild=cJSON_Duplicate(cptr,1); /* Duplicate (with recurse) each item in the ->next chain */ if (!newchild) {cJSON_Delete(newitem);return 0;} if (nptr) {nptr->next=newchild,newchild->prev=nptr;nptr=newchild;} /* If newitem->child already set, then crosswire ->prev and ->next and move on */ else {newitem->child=newchild;nptr=newchild;} /* Set newitem->child and move to it */ cptr=cptr->next; } return newitem; } void cJSON_Minify(char *json) { char *into=json; while (*json) { if (*json==' ') json++; else if (*json=='\t') json++; // Whitespace characters. else if (*json=='\r') json++; else if (*json=='\n') json++; else if (*json=='/' && json[1]=='/') while (*json && *json!='\n') json++; // double-slash comments, to end of line. else if (*json=='/' && json[1]=='*') {while (*json && !(*json=='*' && json[1]=='/')) json++;json+=2;} // multiline comments. else if (*json=='\"'){*into++=*json++;while (*json && *json!='\"'){if (*json=='\\') *into++=*json++;*into++=*json++;}*into++=*json++;} // string literals, which are \" sensitive. else *into++=*json++; // All other characters. } *into=0; // and null-terminate. }snibbetracker-1.1.1/snibbetracker/src/cJSON/cJSON.h000066400000000000000000000152261351541346100217470ustar00rootroot00000000000000/* Copyright (c) 2009 Dave Gamble Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef cJSON__h #define cJSON__h #ifdef __cplusplus extern "C" { #endif /* cJSON Types: */ #define cJSON_False 0 #define cJSON_True 1 #define cJSON_NULL 2 #define cJSON_Number 3 #define cJSON_String 4 #define cJSON_Array 5 #define cJSON_Object 6 #define cJSON_IsReference 256 /* The cJSON structure: */ typedef struct cJSON { struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ int type; /* The type of the item, as above. */ char *valuestring; /* The item's string, if type==cJSON_String */ int valueint; /* The item's number, if type==cJSON_Number */ double valuedouble; /* The item's number, if type==cJSON_Number */ char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ } cJSON; typedef struct cJSON_Hooks { void *(*malloc_fn)(size_t sz); void (*free_fn)(void *ptr); } cJSON_Hooks; /* Supply malloc, realloc and free functions to cJSON */ extern void cJSON_InitHooks(cJSON_Hooks* hooks); /* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */ extern cJSON *cJSON_Parse(const char *value); /* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */ extern char *cJSON_Print(cJSON *item); /* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */ extern char *cJSON_PrintUnformatted(cJSON *item); /* Delete a cJSON entity and all subentities. */ extern void cJSON_Delete(cJSON *c); /* Returns the number of items in an array (or object). */ extern int cJSON_GetArraySize(cJSON *array); /* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */ extern cJSON *cJSON_GetArrayItem(cJSON *array,int item); /* Get item "string" from object. Case insensitive. */ extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string); /* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ extern const char *cJSON_GetErrorPtr(void); /* These calls create a cJSON item of the appropriate type. */ extern cJSON *cJSON_CreateNull(void); extern cJSON *cJSON_CreateTrue(void); extern cJSON *cJSON_CreateFalse(void); extern cJSON *cJSON_CreateBool(int b); extern cJSON *cJSON_CreateNumber(double num); extern cJSON *cJSON_CreateString(const char *string); extern cJSON *cJSON_CreateArray(void); extern cJSON *cJSON_CreateObject(void); /* These utilities create an Array of count items. */ extern cJSON *cJSON_CreateIntArray(const int *numbers,int count); extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count); extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count); extern cJSON *cJSON_CreateStringArray(const char **strings,int count); /* Append item to the specified array/object. */ extern void cJSON_AddItemToArray(cJSON *array, cJSON *item); extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item); /* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); extern void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item); /* Remove/Detatch items from Arrays/Objects. */ extern cJSON *cJSON_DetachItemFromArray(cJSON *array,int which); extern void cJSON_DeleteItemFromArray(cJSON *array,int which); extern cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string); extern void cJSON_DeleteItemFromObject(cJSON *object,const char *string); /* Update array items. */ extern void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem); extern void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); /* Duplicate a cJSON item */ extern cJSON *cJSON_Duplicate(cJSON *item,int recurse); /* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will need to be released. With recurse!=0, it will duplicate any children connected to the item. The item->next and ->prev pointers are always zero on return from Duplicate. */ /* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ extern cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated); extern void cJSON_Minify(char *json); /* Macros for creating things quickly. */ #define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull()) #define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) #define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) #define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) #define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) #define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) /* When assigning an integer value, it needs to be propagated to valuedouble too. */ #define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) #ifdef __cplusplus } #endif #endif snibbetracker-1.1.1/snibbetracker/src/cJSON/test.c000066400000000000000000000147621351541346100220110ustar00rootroot00000000000000/* Copyright (c) 2009 Dave Gamble Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include "cJSON.h" /* Parse text to JSON, then render back to text, and print! */ void doit(char *text) { char *out;cJSON *json; json=cJSON_Parse(text); if (!json) {printf("Error before: [%s]\n",cJSON_GetErrorPtr());} else { out=cJSON_Print(json); cJSON_Delete(json); printf("%s\n",out); free(out); } } /* Read a file, parse, render back, etc. */ void dofile(char *filename) { FILE *f=fopen(filename,"rb");fseek(f,0,SEEK_END);long len=ftell(f);fseek(f,0,SEEK_SET); char *data=(char*)malloc(len+1);fread(data,1,len,f);fclose(f); doit(data); free(data); } /* Used by some code below as an example datatype. */ struct record {const char *precision;double lat,lon;const char *address,*city,*state,*zip,*country; }; /* Create a bunch of objects as demonstration. */ void create_objects() { cJSON *root,*fmt,*img,*thm,*fld;char *out;int i; /* declare a few. */ /* Here we construct some JSON standards, from the JSON site. */ /* Our "Video" datatype: */ root=cJSON_CreateObject(); cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble")); cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject()); cJSON_AddStringToObject(fmt,"type", "rect"); cJSON_AddNumberToObject(fmt,"width", 1920); cJSON_AddNumberToObject(fmt,"height", 1080); cJSON_AddFalseToObject (fmt,"interlace"); cJSON_AddNumberToObject(fmt,"frame rate", 24); out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Print to text, Delete the cJSON, print it, release the string. */ /* Our "days of the week" array: */ const char *strings[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; root=cJSON_CreateStringArray(strings,7); out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Our matrix: */ int numbers[3][3]={{0,-1,0},{1,0,0},{0,0,1}}; root=cJSON_CreateArray(); for (i=0;i<3;i++) cJSON_AddItemToArray(root,cJSON_CreateIntArray(numbers[i],3)); /* cJSON_ReplaceItemInArray(root,1,cJSON_CreateString("Replacement")); */ out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Our "gallery" item: */ int ids[4]={116,943,234,38793}; root=cJSON_CreateObject(); cJSON_AddItemToObject(root, "Image", img=cJSON_CreateObject()); cJSON_AddNumberToObject(img,"Width",800); cJSON_AddNumberToObject(img,"Height",600); cJSON_AddStringToObject(img,"Title","View from 15th Floor"); cJSON_AddItemToObject(img, "Thumbnail", thm=cJSON_CreateObject()); cJSON_AddStringToObject(thm, "Url", "http:/*www.example.com/image/481989943"); cJSON_AddNumberToObject(thm,"Height",125); cJSON_AddStringToObject(thm,"Width","100"); cJSON_AddItemToObject(img,"IDs", cJSON_CreateIntArray(ids,4)); out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Our array of "records": */ struct record fields[2]={ {"zip",37.7668,-1.223959e+2,"","SAN FRANCISCO","CA","94107","US"}, {"zip",37.371991,-1.22026e+2,"","SUNNYVALE","CA","94085","US"}}; root=cJSON_CreateArray(); for (i=0;i<2;i++) { cJSON_AddItemToArray(root,fld=cJSON_CreateObject()); cJSON_AddStringToObject(fld, "precision", fields[i].precision); cJSON_AddNumberToObject(fld, "Latitude", fields[i].lat); cJSON_AddNumberToObject(fld, "Longitude", fields[i].lon); cJSON_AddStringToObject(fld, "Address", fields[i].address); cJSON_AddStringToObject(fld, "City", fields[i].city); cJSON_AddStringToObject(fld, "State", fields[i].state); cJSON_AddStringToObject(fld, "Zip", fields[i].zip); cJSON_AddStringToObject(fld, "Country", fields[i].country); } /* cJSON_ReplaceItemInObject(cJSON_GetArrayItem(root,1),"City",cJSON_CreateIntArray(ids,4)); */ out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); } /* Harry: changed to cJSON_main to prevent naming clash */ int cJSON_main (int argc, const char * argv[]) { /* a bunch of json: */ char text1[]="{\n\"name\": \"Jack (\\\"Bee\\\") Nimble\", \n\"format\": {\"type\": \"rect\", \n\"width\": 1920, \n\"height\": 1080, \n\"interlace\": false,\"frame rate\": 24\n}\n}"; char text2[]="[\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]"; char text3[]="[\n [0, -1, 0],\n [1, 0, 0],\n [0, 0, 1]\n ]\n"; char text4[]="{\n \"Image\": {\n \"Width\": 800,\n \"Height\": 600,\n \"Title\": \"View from 15th Floor\",\n \"Thumbnail\": {\n \"Url\": \"http:/*www.example.com/image/481989943\",\n \"Height\": 125,\n \"Width\": \"100\"\n },\n \"IDs\": [116, 943, 234, 38793]\n }\n }"; char text5[]="[\n {\n \"precision\": \"zip\",\n \"Latitude\": 37.7668,\n \"Longitude\": -122.3959,\n \"Address\": \"\",\n \"City\": \"SAN FRANCISCO\",\n \"State\": \"CA\",\n \"Zip\": \"94107\",\n \"Country\": \"US\"\n },\n {\n \"precision\": \"zip\",\n \"Latitude\": 37.371991,\n \"Longitude\": -122.026020,\n \"Address\": \"\",\n \"City\": \"SUNNYVALE\",\n \"State\": \"CA\",\n \"Zip\": \"94085\",\n \"Country\": \"US\"\n }\n ]"; /* Process each json textblock by parsing, then rebuilding: */ doit(text1); doit(text2); doit(text3); doit(text4); doit(text5); /* Parse standard testfiles: */ /* dofile("../../tests/test1"); */ /* dofile("../../tests/test2"); */ /* dofile("../../tests/test3"); */ /* dofile("../../tests/test4"); */ /* dofile("../../tests/test5"); */ /* Now some samplecode for building objects concisely: */ create_objects(); return 0; } snibbetracker-1.1.1/snibbetracker/src/cJSON/tests/000077500000000000000000000000001351541346100220165ustar00rootroot00000000000000snibbetracker-1.1.1/snibbetracker/src/cJSON/tests/test1000066400000000000000000000011071351541346100230000ustar00rootroot00000000000000{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } } } snibbetracker-1.1.1/snibbetracker/src/cJSON/tests/test2000066400000000000000000000003621351541346100230030ustar00rootroot00000000000000{"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} snibbetracker-1.1.1/snibbetracker/src/cJSON/tests/test3000066400000000000000000000011351351541346100230030ustar00rootroot00000000000000{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" } }} snibbetracker-1.1.1/snibbetracker/src/cJSON/tests/test4000066400000000000000000000066131351541346100230120ustar00rootroot00000000000000{"web-app": { "servlet": [ { "servlet-name": "cofaxCDS", "servlet-class": "org.cofax.cds.CDSServlet", "init-param": { "configGlossary:installationAt": "Philadelphia, PA", "configGlossary:adminEmail": "ksm@pobox.com", "configGlossary:poweredBy": "Cofax", "configGlossary:poweredByIcon": "/images/cofax.gif", "configGlossary:staticPath": "/content/static", "templateProcessorClass": "org.cofax.WysiwygTemplate", "templateLoaderClass": "org.cofax.FilesTemplateLoader", "templatePath": "templates", "templateOverridePath": "", "defaultListTemplate": "listTemplate.htm", "defaultFileTemplate": "articleTemplate.htm", "useJSP": false, "jspListTemplate": "listTemplate.jsp", "jspFileTemplate": "articleTemplate.jsp", "cachePackageTagsTrack": 200, "cachePackageTagsStore": 200, "cachePackageTagsRefresh": 60, "cacheTemplatesTrack": 100, "cacheTemplatesStore": 50, "cacheTemplatesRefresh": 15, "cachePagesTrack": 200, "cachePagesStore": 100, "cachePagesRefresh": 10, "cachePagesDirtyRead": 10, "searchEngineListTemplate": "forSearchEnginesList.htm", "searchEngineFileTemplate": "forSearchEngines.htm", "searchEngineRobotsDb": "WEB-INF/robots.db", "useDataStore": true, "dataStoreClass": "org.cofax.SqlDataStore", "redirectionClass": "org.cofax.SqlRedirection", "dataStoreName": "cofax", "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", "dataStoreUser": "sa", "dataStorePassword": "dataStoreTestQuery", "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", "dataStoreInitConns": 10, "dataStoreMaxConns": 100, "dataStoreConnUsageLimit": 100, "dataStoreLogLevel": "debug", "maxUrlLength": 500}}, { "servlet-name": "cofaxEmail", "servlet-class": "org.cofax.cds.EmailServlet", "init-param": { "mailHost": "mail1", "mailHostOverride": "mail2"}}, { "servlet-name": "cofaxAdmin", "servlet-class": "org.cofax.cds.AdminServlet"}, { "servlet-name": "fileServlet", "servlet-class": "org.cofax.cds.FileServlet"}, { "servlet-name": "cofaxTools", "servlet-class": "org.cofax.cms.CofaxToolsServlet", "init-param": { "templatePath": "toolstemplates/", "log": 1, "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", "logMaxSize": "", "dataLog": 1, "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", "dataLogMaxSize": "", "removePageCache": "/content/admin/remove?cache=pages&id=", "removeTemplateCache": "/content/admin/remove?cache=templates&id=", "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", "lookInContext": 1, "adminGroupID": 4, "betaServer": true}}], "servlet-mapping": { "cofaxCDS": "/", "cofaxEmail": "/cofaxutil/aemail/*", "cofaxAdmin": "/admin/*", "fileServlet": "/static/*", "cofaxTools": "/tools/*"}, "taglib": { "taglib-uri": "cofax.tld", "taglib-location": "/WEB-INF/tlds/cofax.tld"}}}snibbetracker-1.1.1/snibbetracker/src/cJSON/tests/test5000066400000000000000000000015511351541346100230070ustar00rootroot00000000000000{"menu": { "header": "SVG Viewer", "items": [ {"id": "Open"}, {"id": "OpenNew", "label": "Open New"}, null, {"id": "ZoomIn", "label": "Zoom In"}, {"id": "ZoomOut", "label": "Zoom Out"}, {"id": "OriginalView", "label": "Original View"}, null, {"id": "Quality"}, {"id": "Pause"}, {"id": "Mute"}, null, {"id": "Find", "label": "Find..."}, {"id": "FindAgain", "label": "Find Again"}, {"id": "Copy"}, {"id": "CopyAgain", "label": "Copy Again"}, {"id": "CopySVG", "label": "Copy SVG"}, {"id": "ViewSVG", "label": "View SVG"}, {"id": "ViewSource", "label": "View Source"}, {"id": "SaveAs", "label": "Save As"}, null, {"id": "Help"}, {"id": "About", "label": "About Adobe CVG Viewer..."} ] }} snibbetracker-1.1.1/snibbetracker/src/chars_gfx.h000066400000000000000000001072001351541346100220550ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef synth_chars_gfx_h #define synth_chars_gfx_h unsigned int chars_gfx[16384] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,0,-1,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,0,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,0,-1,-1,0,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,-1,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,0,0,0,-1,-1,0,0,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,0,-1,-1,-1,0,0,0,-1,-1,-1,0,-1,-1,0,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,0,0,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,0,0,0,-1,-1,0,0,-1,0,0,-1,-1,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,-1,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,0,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,0,-1,-1,0,0,0,-1,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,-1,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,0,-1,-1,0,0,0,-1,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,-1,-1,0,-1,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,-1,-1,0,0,0,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,-1,-1,0,-1,-1,0,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,-1,-1,-1,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,-1,-1,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,-1,0,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,-1,-1,-1,-1,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,-1,-1,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,-1,0,0,0,0,-1,-1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,-1,-1,-1,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,-1,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; #endif snibbetracker-1.1.1/snibbetracker/src/dir_posix.c000066400000000000000000000046331351541346100221120ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "dir_posix.h" #include "CAllocator.h" #include #include int getDirectoryListPosix(char *dir_string, struct FileSettings *f) { // Clear out all stored directories for (int i = 0; i < f->file_dir_max_length; i++) { if (f->file_dirs[i] != NULL) { f->file_dirs[i] = cAllocatorFree(f->file_dirs[i]); } } int pos = 0; struct dirent *dir; DIR *d = opendir(dir_string); if (d) { while ((dir = readdir(d)) != NULL) { int length = (int)strlen(dir->d_name); bool add_file = false; if(length > 6) { // check for snibb if(dir->d_name[length-1] == 'b' && dir->d_name[length-2] == 'b' && dir->d_name[length-3] == 'i' && dir->d_name[length-4] == 'n' && dir->d_name[length-5] == 's' && dir->d_name[length-6] == '.') { add_file = true; } } if (add_file) { char *dir_name_chars = cAllocatorAlloc(sizeof(char)*f->file_name_max_length, "dir name chars 2"); sprintf(dir_name_chars, "%s", dir->d_name); f->file_dirs[pos] = dir_name_chars; pos++; } } closedir(d); } else { return 0; printf("dir is null.\n"); } return 1; } snibbetracker-1.1.1/snibbetracker/src/dir_posix.h000066400000000000000000000025051351541346100221130ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include "file_settings.h" #ifndef __snibbetracker__dir_posix__ #define __snibbetracker__dir_posix__ int getDirectoryListPosix(char *dir_string, struct FileSettings *f); #endif /* defined(__snibbetracker__dir_posix__) */ snibbetracker-1.1.1/snibbetracker/src/dir_win.c000066400000000000000000000042261351541346100215430ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "dir_win.h" #include "CAllocator.h" #include #include int getDirectoryListWin(char *dir_string, struct FileSettings *f) { // Clear out all stored directories for (int i = 0; i < f->file_dir_max_length; i++) { if (f->file_dirs[i] != NULL) { f->file_dirs[i] = cAllocatorFree(f->file_dirs[i]); } } WIN32_FIND_DATA fdFile; HANDLE hFind = NULL; char sPath[2048]; //Specify a file mask. *.* = We want everything! sprintf(sPath, "%s*.snibb", dir_string); if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE) { //printf("Path not found: [%s]\n", sPath); return 0; } int pos = 0; do { char *dir_name_chars = cAllocatorAlloc(sizeof(char)*f->file_name_max_length, "dir name chars"); sprintf(dir_name_chars, "%s", fdFile.cFileName); f->file_dirs[pos] = dir_name_chars; pos++; } while(FindNextFile(hFind, &fdFile)); //Find the next file. FindClose(hFind); //Always, Always, clean things up! return 1; } snibbetracker-1.1.1/snibbetracker/src/dir_win.h000066400000000000000000000024771351541346100215560ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include "file_settings.h" #ifndef __snibbetracker__dir_win__ #define __snibbetracker__dir_win__ int getDirectoryListWin(char *dir_string, struct FileSettings *f); #endif /* defined(__snibbetracker__dir_posix__) */ snibbetracker-1.1.1/snibbetracker/src/file_settings.h000066400000000000000000000032321351541346100227500ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #ifndef snibbetracker_file_settings_h #define snibbetracker_file_settings_h struct FileSettings { bool file_editor_save; int file_cursor_y; char **file_dirs; int file_dir_max_length; int file_name_max_length; char **file_path_list; char *file_path; int file_path_max_length; int file_path_pos; int file_cursor_y_saved[256]; bool reload_dirs; char *file_name; int file_name_limit; bool file_enter_pressed; bool file_moved_in_list; }; struct PeekDirResult { int status; char *path; }; #endif snibbetracker-1.1.1/snibbetracker/src/main.c000066400000000000000000006546151351541346100210510ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include "CEngine.h" #include "CInput.h" #include "CSynth.h" #include "CAllocator.h" #include "chars_gfx.h" #include "cJSON.h" #include #include #include #include "file_settings.h" #include #include #include #include #ifdef _WIN64 //define something for Windows (64-bit) #define platform_windows #include "dir_win.h" #elif _WIN32 //define something for Windows (32-bit) #define platform_windows #include "dir_win.h" #elif __APPLE__ #include "TargetConditionals.h" #if TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR // define something for simulator #elif TARGET_OS_IPHONE // define something for iphone #else #define TARGET_OS_OSX 1 // define something for OSX #define platform_osx #include "dir_posix.h" #include "osx_settings.h" #endif #elif __linux // linux #elif __unix // all unices not caught above // Unix #elif __posix // POSIX #endif static const bool debuglog = false; static const bool errorlog = false; static const int passive_render_delay_ms = 16; static const int active_render_delay_ms = 16; static bool log_file_enabled = false; static bool run_with_sdl = true; static bool redraw_screen = true; static bool passive_rendering = true; static bool preview_enabled = true; static char *conf_default_dir = NULL; static int current_pattern = 0; static int current_track = 0; static int quit = 0; static char *title = "snibbetracker 1.1.1"; static struct CInput *input = NULL; static unsigned int *raster = NULL; static unsigned int **raster2d = NULL; static unsigned int *raw_sheet = NULL; static unsigned int **credits2d = NULL; static unsigned int **visualiser2d = NULL; static int width = 256*4; static int height = 144*4; static int s_width = 256*2; // 512 static int s_height = 144*2; // 288 static bool playing = false; static bool exporting = false; static bool editing = false; static bool modifier = false; static bool shift_down = false; static bool selection_enabled = false; static bool follow = false; static bool visualiser = false; static bool credits = false; static bool help = false; static bool reset_confirmation = false; static int help_index = 0; static int help_index_max = 8; static bool export_project = false; static int octave = 2; static int step_size = 1; static int visual_pattern_offset = 0; static int visual_track_width = 30; static int visual_track_height = 16; static int visual_cursor_x = 0; static int visual_cursor_y = 0; static int selection_x = 0; static int selection_y = 0; static int last_selection_x = 0; static int last_selection_y = 0; static int last_selection_w = 0; static int last_selection_h = 0; static int last_copied_pattern_x = 0; static int last_copied_pattern_y = 0; static bool pattern_editor = false; static int pattern_cursor_x = 0; static int pattern_cursor_y = 0; static bool instrument_editor = false; static bool custom_table = false; static bool instrument_editor_effects = false; static int instrument_editor_effects_x = 0; static int instrument_editor_effects_y = 0; static int visual_instrument_effects = 5; static int selected_instrument_id = 0; static int selected_instrument_node_index = 1; static int selected_custom_table_node_index = 0; static int copied_instrument = -1; static bool file_editor = false; static bool file_editor_confirm_action = false; static bool file_editor_existing_file = false; static bool pressed_left = false; static bool pressed_right = false; static bool pressed_up = false; static bool pressed_down = false; static bool tempo_editor = false; static bool any_key_pressed = false; static int tempo_selection_x = 0; static int tempo_selection_y = 0; static bool wavetable_editor = false; static int wavetable_selection_x = 0; static int wavetable_selection_y = 0; static struct CSynthContext *synth = NULL; static struct CTimer *info_timer = NULL; static char *info_string = NULL; static struct FileSettings *file_settings = NULL; static int envelope_node_camera_offset = 0; static int fullscreen = 0; static int fps_print_interval = 0; static int print_interval_limit = 100; static int old_time = 0; static int last_dt = 16; static SDL_Keycode last_key = 0; // 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 Uint16 bufferSize = 4096; // must be a power of two, decrease to allow for a lower syncCompensationFactor to allow for lower latency, increase to reduce risk of underrun Uint32 samplesPerFrame = 0; Uint32 msPerFrame = 0; double practicallySilent = 0.001; SDL_atomic_t audioCallbackLeftOff; Sint32 audioMainLeftOff = 0; Sint8 audioMainAccumulator = 0; SDL_AudioDeviceID AudioDevice; SDL_AudioSpec audioSpec; SDL_Event event; SDL_bool running = SDL_TRUE; SDL_Window *window = NULL; SDL_Texture *texture = NULL; SDL_Renderer *renderer = NULL; SDL_GLContext context; // credits static float c_hue_a = 0; static float c_hue_r = 0; static float c_hue_g = 0; static float c_hue_b = 0; static float c_new_hue_r = 0; static float c_new_hue_g = 0; static float c_new_hue_b = 0; static bool credits_higher_contrast = false; static bool credits_scanlines_x = false; static bool credits_scanlines_y = false; static float credits_hue_rotation = 0; static float credits_hue_rotation_inc = 0.2f; static bool credits_init = false; static double credits_x = 0; static double credits_y = 0; static double credits_x_inc = 0.435; static double credits_y_inc = 0.351; static int credits_cursor_x = 0; static int credits_cursor_y = 0; static bool credits_up = false; static bool credits_down = false; static bool credits_left = false; static bool credits_right = false; static int credits_color = 0xFFCCCCCC; static int credits_bg_color = 0xFF000000; static int credits_brush_color = 0xFF000000; static void resetColorValues(); static void transformHSV(float H, float S, float V); static void renderPixels(unsigned int **data, int start_x, int start_y, int w, int h, float rotation); #define MAX_TOUCHES 8 #define sheet_width 1024 #define sheet_height 1024 #define cengine_color_dull_red 0xFF771111 #define cengine_color_red 0xFFFF0000 #define cengine_color_green 0xFF00FF00 #define cengine_color_cyan 0xFF00FFFF #define cengine_color_blue 0xFF0000FF #define cengine_color_black 0xFF000000 #define cengine_color_white 0xFFCCCCCC #define cengine_color_grey 0xFF666666 #define cengine_color_magenta 0xFFFF00FF #define cengine_color_dull_green 0xFF117711 #define cengine_color_transparent 0x00000000 #define cengine_color_bg 0xFF000000 #define cengine_color_bg1 0xFF332222 #define cengine_color_bg2 0xFF223322 #define cengine_color_bg3 0xFF222233 #define cengine_color_bg4 0xFF332233 #define cengine_color_bg5 0xFF333322 #define cengine_color_bg6 0xFF223333 #define cengine_color_bg1_highlight 0xFF443333 #define cengine_color_bg2_highlight 0xFF334433 #define cengine_color_bg3_highlight 0xFF333344 #define cengine_color_bg4_highlight 0xFF443344 #define cengine_color_bg5_highlight 0xFF444433 #define cengine_color_bg6_highlight 0xFF334444 unsigned int color_info_text_bg = cengine_color_black; unsigned int color_file_name_text = cengine_color_red; unsigned int color_inactive_instrument_node = cengine_color_red; unsigned int color_active_instrument_node = cengine_color_green; unsigned int color_envelope = cengine_color_green; unsigned int color_visualiser = cengine_color_green; unsigned int color_visualiser_clipping = cengine_color_red; unsigned int color_inactive_text = cengine_color_grey; unsigned int color_text = cengine_color_white; unsigned int color_text_bg = cengine_color_black; unsigned int color_marker = cengine_color_dull_red; unsigned int color_solo = cengine_color_blue; unsigned int color_solo_text = cengine_color_black; unsigned int color_mute = cengine_color_dull_red; unsigned int color_mute_text = cengine_color_black; unsigned int color_active_row = cengine_color_dull_green; unsigned int color_active_row_text = cengine_color_black; unsigned int color_playing_row = cengine_color_green; unsigned int color_playing_row_text = cengine_color_black; unsigned int color_edit_marker = cengine_color_magenta; unsigned int color_edit_text = cengine_color_black; unsigned int color_selection_marker = cengine_color_cyan; unsigned int color_selection_text = cengine_color_black; unsigned int color_bg = cengine_color_black; unsigned int color_bg1 = cengine_color_bg1; unsigned int color_bg2 = cengine_color_bg2; unsigned int color_bg3 = cengine_color_bg3; unsigned int color_bg4 = cengine_color_bg4; unsigned int color_bg5 = cengine_color_bg5; unsigned int color_bg6 = cengine_color_bg6; unsigned int color_bg1_highlight = cengine_color_bg1_highlight; unsigned int color_bg2_highlight = cengine_color_bg2_highlight; unsigned int color_bg3_highlight = cengine_color_bg3_highlight; unsigned int color_bg4_highlight = cengine_color_bg4_highlight; unsigned int color_bg5_highlight = cengine_color_bg5_highlight; unsigned int color_bg6_highlight = cengine_color_bg6_highlight; static void reset_project(void); static void init_file_settings(void); static bool file_exists(char *path); static void handle_credits_keys(); static void handle_help_keys(); static void handle_key_down_file(); static void set_list_file_name(void); static void exit_file_editor(void); static void render_files(void); static void add_filename_char(char c); static void remove_filename_char(void); static char *load_file(char *path); static void load_project_file(char *path); static void save_project_file(void); static void set_info_timer(char *string); static void set_info_timer_with_int(char *string, int data); static void update_info(double dt); static void render_info(void); static void init_data(void); static void convert_input(int x, int y); static void cleanup_data(void); static void copy_instrument(int instrument); static void paste_instrument(int instrument); static void copy_notes(int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool cut, bool store); static void transpose_selection(int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool up, int amount); static void paste_notes(int track, int cursor_x, int cursor_y); static void copy_pattern(int cursor_x, int cursor_y); static void paste_pattern(int cursor_x, int cursor_y); static void convert_input(int x, int y); static void add_track_node_with_octave(int x, int y, bool editing, int value); static void set_visual_cursor(int diff_x, int diff_y, bool user); static void check_pattern_cursor_bounds(void); static bool check_screen_bounds(int x, int y); static void toggle_playback(void); static void toggle_editing(void); static void move_notes_up(void); static void move_notes_down(void); static void move_patterns(int direction); static void change_octave(bool up); void handle_key_up(SDL_Keysym* keysym); void handle_key_down(SDL_Keysym* keysym); static void sdl_key_set_locks(SDL_Keysym* keysym, bool down); static void sdl_key_mapping(SDL_Keysym* keysym, bool down); static void handle_reset_confirmation_keys(void); static void handle_note_keys(void); static void handle_pattern_keys(void); static void handle_param_value(void); static void handle_tempo_keys(void); static void handle_wavetable_keys(void); static void instrument_effect_remove(void); static void handle_instrument_effect_keys(void); static void check_sdl_events(SDL_Event event); static int get_delta(void); static void log_wave_data(float *floatStream, Uint32 floatStreamLength, Uint32 increment); void audio_callback(void *unused, Uint8 *byteStream, int byteStreamLength); static void clear_clipping_color_from_visualiser(void); static void prepare_visualiser(Sint16 *s_byteStream, int byteStreamLength); static void change_waveform(int plus); static void change_param(bool plus); static void draw_line(int x0, int y0, int x1, int y1); static void render_custom_table(double dt); static void render_instrument_editor(double dt); static void adsr_invert_y_render(double x, double y, int color); static void render_pattern_mapping(void); static char *get_wave_type_as_char(int type); static void draw_wave_types(void); static void render_visualiser(void); static void render_help(void); static void set_view(int view); static void render_credits(void); static void render_tempo_editor(double dt); static void render_reset_confirmation(double dt); static void render_wavetable_editor(double dt); static void render_track(double dt); static void setup_sdl(void); static void setup_synth(void); static void setup_texture(void); static void destroy_sdl(void); static int setup_sdl_audio(void); static void setup_cengine(void); static void cleanup_synth(void); static void main_loop(void); static void debug_log(char *str); static int get_buffer_size_from_index(int i); static void copy_project_win(const char *name); static void load_config(void); static bool parse_config(char *json); static void st_log(char *message); static void st_pause(void); static void add_track_node_with_octave(int x, int y, bool editing, int tone); static bool check_screen_bounds(int x, int y); static char *get_wave_type_as_char(int type); static void change_param(bool plus); static void export_wav(char *filename); static void write_little_endian(unsigned int word, int num_bytes, FILE *wav_file); static void write_wav(char *filename, unsigned long num_samples, short int *data, int s_rate); static void reset_project(void) { current_pattern = 0; current_track = 0; playing = false; exporting = false; editing = false; modifier = false; shift_down = false; selection_enabled = false; follow = false; visualiser = false; credits = false; help = false; help_index = 0; octave = 2; tempo_selection_x = 0; tempo_selection_y = 0; instrument_editor_effects_x = 0; instrument_editor_effects_y = 0; pattern_cursor_x = 0; pattern_cursor_y = 0; visual_pattern_offset = 0; visual_track_width = 30; visual_track_height = 16; visual_cursor_x = 0; visual_cursor_y = 0; selection_x = 0; selection_y = 0; last_selection_x = 0; last_selection_y = 0; last_selection_w = 0; last_selection_h = 0; last_copied_pattern_x = 0; last_copied_pattern_y = 0; } static void init_file_settings(void) { struct FileSettings *f = cAllocatorAlloc(sizeof(struct FileSettings), "FileSettings"); f->file_editor_save = false; f->file_cursor_y = 0; f->file_dirs = NULL; f->file_dir_max_length = 1024; f->file_name_max_length = 256; f->file_path_list = NULL; f->file_path = NULL; f->file_path_max_length = 256; f->file_path_pos = 0; f->reload_dirs = true; f->file_name = NULL; f->file_name_limit = 40; f->file_enter_pressed = false; f->file_moved_in_list = false; file_settings = f; int r = 0; for(r = 0; r < file_settings->file_path_max_length; r++) { file_settings->file_cursor_y_saved[r] = 0; } file_settings->file_path_list = cAllocatorAlloc((file_settings->file_path_max_length * sizeof(char*)), "file path array"); for(r = 0; r < file_settings->file_path_max_length; r++) { file_settings->file_path_list[r] = NULL; } file_settings->file_dirs = cAllocatorAlloc((file_settings->file_dir_max_length * sizeof(char*)), "file dir array"); for(r = 0; r < file_settings->file_dir_max_length; r++) { file_settings->file_dirs[r] = NULL; } } static bool file_exists(char *path) { bool exists = false; FILE * fp; fp = fopen (path, "r"); if(fp != NULL) { exists = true; fclose(fp); } return exists; } static void handle_key_down_file(void) { char c = 0; if(input->key_0) { c = '0'; add_filename_char(c); } else if(input->key_1) { c = '1'; add_filename_char(c); } else if(input->key_2) { c = '2'; add_filename_char(c); } else if(input->key_3) { c = '3'; add_filename_char(c); } else if(input->key_4) { c = '4'; add_filename_char(c); } else if(input->key_5) { c = '5'; add_filename_char(c); } else if(input->key_6) { c = '6'; add_filename_char(c); } else if(input->key_7) { c = '7'; add_filename_char(c); } else if(input->key_8) { c = '8'; add_filename_char(c); } else if(input->key_9) { c = '9'; add_filename_char(c); } else if(input->key_a) { c = 'a'; add_filename_char(c); } else if(input->key_b) { c = 'b'; add_filename_char(c); } else if(input->key_c) { c = 'c'; add_filename_char(c); } else if(input->key_d) { c = 'd'; add_filename_char(c); } else if(input->key_e) { c = 'e'; add_filename_char(c); } else if(input->key_f) { c = 'f'; add_filename_char(c); } else if(input->key_g) { c = 'g'; add_filename_char(c); } else if(input->key_h) { c = 'h'; add_filename_char(c); } else if(input->key_i) { c = 'i'; add_filename_char(c); } else if(input->key_j) { c = 'j'; add_filename_char(c); } else if(input->key_k) { c = 'k'; add_filename_char(c); } else if(input->key_l) { c = 'l'; add_filename_char(c); } else if(input->key_m) { c = 'm'; add_filename_char(c); } else if(input->key_n) { c = 'n'; add_filename_char(c); } else if(input->key_o) { c = 'o'; add_filename_char(c); } else if(input->key_p) { c = 'p'; add_filename_char(c); } else if(input->key_q) { c = 'q'; add_filename_char(c); } else if(input->key_r) { c = 'r'; add_filename_char(c); } else if(input->key_s) { c = 's'; add_filename_char(c); } else if(input->key_t) { c = 't'; add_filename_char(c); } else if(input->key_u) { c = 'u'; add_filename_char(c); } else if(input->key_v) { c = 'v'; add_filename_char(c); } else if(input->key_w) { c = 'w'; add_filename_char(c); } else if(input->key_x) { c = 'x'; add_filename_char(c); } else if(input->key_y) { c = 'y'; add_filename_char(c); } else if(input->key_z) { c = 'z'; add_filename_char(c); } else if(input->key_escape) { exit_file_editor(); } else if(input->key_return) { if(export_project) { if(file_settings->file_name != NULL) { char *file_path = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "load_path chars"); if(conf_default_dir != NULL) { snprintf(file_path, file_settings->file_name_max_length-1, "%s%s.wav", conf_default_dir, file_settings->file_name); } else { snprintf(file_path, file_settings->file_name_max_length-1, "%s.wav", file_settings->file_name); } if(file_editor_confirm_action) { export_wav(file_path); export_project = false; exit_file_editor(); file_editor_confirm_action = false; } else { if(file_exists(file_path)) { file_editor_existing_file = true; file_editor_confirm_action = true; } else { // just proceed. export_wav(file_path); export_project = false; exit_file_editor(); file_editor_confirm_action = false; } if(debuglog) { printf("confirm action\n"); } } cAllocatorFree(file_path); } } else { if(file_settings->file_name != NULL && file_settings->file_editor_save && file_editor_confirm_action) { save_project_file(); file_editor_confirm_action = false; } else if(file_settings->file_name != NULL) { file_editor_existing_file = false; char *file_path = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "load_path chars"); if(conf_default_dir != NULL) { snprintf(file_path, file_settings->file_name_max_length-1, "%s%s.snibb", conf_default_dir, file_settings->file_name); } else { snprintf(file_path, file_settings->file_name_max_length-1, "%s.snibb", file_settings->file_name); } if(file_editor_confirm_action) { bool was_playing = playing; if(was_playing) { toggle_playback(); } load_project_file(file_path); visual_track_height = synth->track_height; file_editor_confirm_action = false; if(was_playing) { toggle_playback(); } } else { // save project file_editor_confirm_action = true; if(file_settings->file_editor_save) { if(file_exists(file_path)) { file_editor_existing_file = true; if(debuglog) { printf("confirm action\n"); } } else { // just proceed save_project_file(); file_editor_confirm_action = false; } } else { // load file. file_editor_confirm_action = true; if(debuglog) { printf("confirm action\n"); } } } cAllocatorFree(file_path); } } } else if(input->key_up) { file_settings->file_cursor_y--; if(file_settings->file_cursor_y < 0) { file_settings->file_cursor_y = 0; } set_list_file_name(); } else if(input->key_down) { if(file_settings->file_cursor_y < file_settings->file_dir_max_length-1) { if(file_settings->file_dirs[file_settings->file_cursor_y+1] != NULL) { file_settings->file_cursor_y++; } } set_list_file_name(); } else if(input->key_backspace) { remove_filename_char(); } else if(input->key_escape) { exit_file_editor(); } } static void set_list_file_name(void) { // must remove file ending.. char *list_name = file_settings->file_dirs[file_settings->file_cursor_y]; if(list_name != NULL) { int length = (int)strlen(list_name); file_settings->file_name = cAllocatorFree(file_settings->file_name); char *temp_chars = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "file name chars"); snprintf(temp_chars, file_settings->file_name_max_length-1, "%s", list_name); file_settings->file_name = temp_chars; // a list_name cannot be added unless it has the correct file endings, so we can assume // it will be of at least a certain size. if(file_settings->file_name[length-2] == 'a') { // wav file file_settings->file_name[length-4] = '\0'; // it will be of at least a certain size. } else if(file_settings->file_name[length-2] == 'b') { // snibb file file_settings->file_name[length-6] = '\0'; } else { // json file file_settings->file_name[length-5] = '\0'; } } } static void exit_file_editor(void) { for (int i = 0; i < file_settings->file_dir_max_length; i++) { if (file_settings->file_dirs[i] != NULL) { file_settings->file_dirs[i] = cAllocatorFree(file_settings->file_dirs[i]); } } file_settings->file_path = cAllocatorFree(file_settings->file_path); file_editor = false; file_settings->file_editor_save = false; file_settings->reload_dirs = true; file_editor_confirm_action = false; file_editor_existing_file = false; } static int getDirectoryList(char *dir_string) { #if defined(platform_osx) return getDirectoryListPosix(dir_string, file_settings); #elif defined(platform_windows) return getDirectoryListWin(dir_string, file_settings); #endif } static void render_files(void) { if(file_settings->file_dirs[0] == NULL && conf_default_dir != NULL) { getDirectoryList(conf_default_dir); } int offset_y = 0; for (int i = 0; i < file_settings->file_dir_max_length; i++) { if (file_settings->file_dirs[i] != NULL) { if(i == file_settings->file_cursor_y) { cEngineRenderLabelWithParams(raster2d, file_settings->file_dirs[i], 0, offset_y-file_settings->file_cursor_y+10, color_text, cengine_color_transparent); } else { cEngineRenderLabelWithParams(raster2d, file_settings->file_dirs[i], 0, offset_y-file_settings->file_cursor_y+10, color_inactive_text, cengine_color_transparent); } } offset_y++; } int offset_x = 0; if(conf_default_dir != NULL) { cEngineRenderLabelWithParams(raster2d, "path: ", offset_x, 23, color_text, color_text_bg); cEngineRenderLabelWithParams(raster2d, conf_default_dir, offset_x+5, 23, color_text, color_text_bg); } int file_name_offset = 0; if(export_project && !file_editor_confirm_action) { cEngineRenderLabelWithParams(raster2d, "export wav as: ", offset_x, 22, color_file_name_text, color_text_bg); file_name_offset = 1; } else if(!file_settings->file_editor_save && !file_editor_confirm_action) { cEngineRenderLabelWithParams(raster2d, "open project: ", offset_x, 22, color_file_name_text, color_text_bg); file_name_offset = 0; } else if(!file_editor_confirm_action) { cEngineRenderLabelWithParams(raster2d, "save project as: ", offset_x, 22, color_file_name_text, color_text_bg); file_name_offset = 3; } else if(file_editor_existing_file) { cEngineRenderLabelWithParams(raster2d, "overwrite file? [PRESS RETURN] ", offset_x, 22, color_file_name_text, color_text_bg); } else { cEngineRenderLabelWithParams(raster2d, "current project will be reset. continue? [PRESS RETURN] ", offset_x, 22, color_file_name_text, color_text_bg); } if(file_settings->file_name != NULL && !file_editor_confirm_action) { cEngineRenderLabelWithParams(raster2d, file_settings->file_name, offset_x+13+file_name_offset, 22, color_file_name_text, color_text_bg); } } static void add_filename_char(char c) { if(file_settings->file_name == NULL) { file_settings->file_name = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "file name chars"); file_settings->file_name[0] = '\0'; } int len = (int)strlen(file_settings->file_name); if(len < file_settings->file_name_limit) { char *temp_chars = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "file name chars"); snprintf(temp_chars, file_settings->file_name_max_length-1, "%s%c", file_settings->file_name, c); file_settings->file_name = cAllocatorFree(file_settings->file_name); file_settings->file_name = temp_chars; } } static void remove_filename_char(void) { if(file_settings->file_name == NULL) { file_settings->file_name = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "file name chars"); file_settings->file_name[0] = '\0'; } int len = (int)strlen(file_settings->file_name); if(len > 0) { file_settings->file_name[len] = ' '; file_settings->file_name[len-1] = '\0'; char *temp_chars = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "file name chars"); snprintf(temp_chars, file_settings->file_name_max_length-1, "%s", file_settings->file_name); file_settings->file_name = cAllocatorFree(file_settings->file_name); file_settings->file_name = temp_chars; } } static char *load_file(char *path) { if(path != NULL) { FILE *fp = NULL; fp = fopen(path, "rb"); if(fp != NULL) { fseek(fp, 0L, SEEK_END); long sz = 0; sz = ftell(fp); char *b = NULL; b = cAllocatorAlloc(sizeof(char)*sz, "load file chars"); if(b != NULL) { fseek(fp, 0, SEEK_SET); fread(b, sz, 1, fp); return b; } else { if(errorlog) { printf("buffer is null\n"); } } fclose(fp); } else { if(errorlog) { printf("file not found at path %s\n", path); } } } else { if(errorlog) { printf("cannot load, path is null\n"); } } return NULL; } static void load_project_file(char *path) { char *b = load_file(path); if(b != NULL) { cSynthReset(synth); int status = cSynthLoadProject(synth, b); cAllocatorFree(b); if(status == 0) { set_info_timer("error: could not load project"); } else { set_info_timer(path); exit_file_editor(); } } else { if(errorlog) { printf("could not load file.\n"); } set_info_timer("could not load file."); } } static void save_project_file(void) { if(file_settings->file_name != NULL) { char *save_path = cAllocatorAlloc(sizeof(char)*file_settings->file_name_max_length, "save_path chars"); if(conf_default_dir != NULL) { snprintf(save_path, file_settings->file_name_max_length-1, "%s%s.snibb", conf_default_dir, file_settings->file_name); } else { snprintf(save_path, file_settings->file_name_max_length-1, "%s.snibb", file_settings->file_name); } cJSON *root = cSynthSaveProject(synth); if(root != NULL) { FILE * fp; fp = fopen(save_path, "w+"); if(fp!= NULL) { char *json_print = cJSON_PrintUnformatted(root); fprintf(fp, "%s", json_print); fclose(fp); cJSON_Delete(root); free(json_print); set_info_timer(save_path); } else { set_info_timer("could not save file. Set proper path in config."); } } cAllocatorFree(save_path); exit_file_editor(); } else { if(errorlog) { printf("cannot save, filename or path is null\n"); } } } static void set_info_timer(char *string) { if(string != NULL) { int max_size = file_settings->file_name_max_length; int len = (int)strlen(string); if(len < max_size) { char *info = cAllocatorAlloc(max_size * sizeof(char), "info timer string"); snprintf(info, max_size-1, "%s", string); if(info_string != NULL) { info_string = cAllocatorFree(info_string); } info_string = info; cTimerReset(info_timer); } else { if(errorlog) { printf("setInfoTimerWithInt: string too large\n"); } } } } static void set_info_timer_with_int(char *string, int data) { if(string != NULL) { int max_size = file_settings->file_name_max_length; int len = (int)strlen(string); if(len < max_size) { char *info = cAllocatorAlloc(max_size * sizeof(char), "info timer with int"); snprintf(info, max_size-1, "%s:%d", string, data); if(info_string != NULL) { info_string = cAllocatorFree(info_string); } info_string = info; cTimerReset(info_timer); } else { if(errorlog) { printf("setInfoTimerWithInt: string too large\n"); } } } } static void update_info(double dt) { if(info_string != NULL) { if(!cTimerIsReady(info_timer)) { cTimerAdvance(dt, info_timer); if(cTimerIsReady(info_timer)) { redraw_screen = true; } } } } static void render_info(void) { if(info_string != NULL) { if(!cTimerIsReady(info_timer)) { cEngineRenderLabelWithParams(raster2d, info_string, 0, 23, color_text, color_info_text_bg); } } } static void init_data(void) { int i = 0; int r_x = 0; int r_y = 0; init_file_settings(); raster = cAllocatorAlloc((s_width*s_height) * sizeof(unsigned int), "main.c raster 1"); for(i = 0; i < s_width*s_height; i++) { raster[i] = 0; } raster2d = cAllocatorAlloc(s_width * sizeof(unsigned int *), "main.c raster 2"); if(raster2d == NULL) { fprintf(stderr, "out of memory\n"); } else { for(i = 0; i < s_width; i++) { raster2d[i] = cAllocatorAlloc(s_height * sizeof(unsigned int), "main.c raster 3"); if(raster2d[i] == NULL) { fprintf(stderr, "out of memory\n"); } } } for(r_x = 0; r_x < s_width; r_x++) { for(r_y = 0; r_y < s_height; r_y++) { if(raster2d != NULL && raster2d[r_x] != NULL) { raster2d[r_x][r_y] = color_bg; } } } credits2d = cAllocatorAlloc(s_width * sizeof(unsigned int *), "main.c credits 2"); if(credits2d == NULL) { fprintf(stderr, "out of memory\n"); } else { for(i = 0; i < s_width; i++) { credits2d[i] = cAllocatorAlloc(s_height * sizeof(unsigned int), "main.c credits 3"); if(credits2d[i] == NULL) { fprintf(stderr, "out of memory\n"); } } } for(r_x = 0; r_x < s_width; r_x++) { for(r_y = 0; r_y < s_height; r_y++) { if(credits2d != NULL && credits2d[r_x] != NULL) { credits2d[r_x][r_y] = 0; } } } visualiser2d = cAllocatorAlloc(s_width * sizeof(unsigned int *), "main.c visualiser2d 2"); if(visualiser2d == NULL) { fprintf(stderr, "out of memory\n"); } else { for(i = 0; i < s_width; i++) { visualiser2d[i] = cAllocatorAlloc(s_height * sizeof(unsigned int), "main.c visualiser2d 3"); if(visualiser2d[i] == NULL) { fprintf(stderr, "out of memory\n"); } } } for(r_x = 0; r_x < s_width; r_x++) { for(r_y = 0; r_y < s_height; r_y++) { if(visualiser2d != NULL && visualiser2d[r_x] != NULL) { visualiser2d[r_x][r_y] = 0; } } } info_timer = cTimerNew(3000); cTimerReset(info_timer); } static void convert_input(int x, int y) { input->mouse_x = x/4; input->mouse_y = y/4; } static void cleanup_data(void) { int i = 0; raster = cAllocatorFree(raster); for(i = 0; i < s_width; i++) { raster2d[i] = cAllocatorFree(raster2d[i]); } raster2d = cAllocatorFree(raster2d); for(i = 0; i < s_width; i++) { credits2d[i] = cAllocatorFree(credits2d[i]); } credits2d = cAllocatorFree(credits2d); for(i = 0; i < s_width; i++) { visualiser2d[i] = cAllocatorFree(visualiser2d[i]); } visualiser2d = cAllocatorFree(visualiser2d); cSynthCleanup(synth); cEngineCleanup(); info_timer = cAllocatorFree(info_timer); info_string = cAllocatorFree(info_string); // File settings -- for (i = 0; i < file_settings->file_path_max_length; i++) { if (file_settings->file_path_list[i] != NULL) { file_settings->file_path_list[i] = cAllocatorFree(file_settings->file_path_list[i]); } } file_settings->file_path_list = cAllocatorFree(file_settings->file_path_list); for (int i = 0; i < file_settings->file_dir_max_length; i++) { if (file_settings->file_dirs[i] != NULL) { file_settings->file_dirs[i] = cAllocatorFree(file_settings->file_dirs[i]); } } file_settings->file_dirs = cAllocatorFree(file_settings->file_dirs); file_settings->file_path = cAllocatorFree(file_settings->file_path); file_settings->file_name = cAllocatorFree(file_settings->file_name); file_settings = cAllocatorFree(file_settings); conf_default_dir = cAllocatorFree(conf_default_dir); } static void copy_instrument(int instrument) { if (instrument > -1 && instrument < synth->max_instruments) { copied_instrument = instrument; } } static void paste_instrument(int instrument) { if (instrument > -1 && instrument < synth->max_instruments && copied_instrument > -1 && copied_instrument < synth->max_instruments) { struct CInstrument *ins = synth->instruments[instrument]; struct CInstrument *copied_ins = synth->instruments[copied_instrument]; for(int c = 0; c < ins->adsr_nodes; c++) { ins->adsr[c]->amp = copied_ins->adsr[c]->amp; ins->adsr[c]->pos = copied_ins->adsr[c]->pos; } ins->adsr[0]->amp = copied_ins->adsr[0]->amp; ins->adsr[0]->pos = copied_ins->adsr[0]->pos; ins->adsr[1]->amp = copied_ins->adsr[1]->amp; ins->adsr[1]->pos = copied_ins->adsr[1]->pos; ins->adsr[2]->amp = copied_ins->adsr[2]->amp; ins->adsr[2]->pos = copied_ins->adsr[2]->pos; ins->adsr[3]->amp = copied_ins->adsr[3]->amp; ins->adsr[3]->pos = copied_ins->adsr[3]->pos; ins->adsr[4]->amp = copied_ins->adsr[4]->amp; ins->adsr[4]->pos = copied_ins->adsr[4]->pos; for(int c = 0; c < synth->max_instrument_effects; c++) { if (synth->instrument_effects[instrument][c] != NULL) { synth->instrument_effects[instrument][c] = cAllocatorFree(synth->instrument_effects[instrument][c]); } if (synth->instrument_effects[copied_instrument][c] != NULL) { synth->instrument_effects[instrument][c] = cSynthCopyTracknode(synth->instrument_effects[copied_instrument][c]); } } } } static void transpose_selection(int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool up, int amount) { cSynthTransposeSelection(synth, track, cursor_x, cursor_y, selection_x, selection_y, up, amount); } static void copy_notes(int track, int cursor_x, int cursor_y, int selection_x, int selection_y, bool cut, bool store) { cSynthCopyNotesFromSelection(synth, track, cursor_x, cursor_y, selection_x, selection_y, cut, store); last_selection_x = cursor_x; last_selection_y = cursor_y; last_selection_w = selection_x; last_selection_h = selection_y; } static void paste_notes(int track, int cursor_x, int cursor_y) { cSynthPasteNotesToPos(synth, track, cursor_x, cursor_y); selection_x = cursor_x + abs(last_selection_x - last_selection_w); selection_y = cursor_y + abs(last_selection_y - last_selection_h); selection_enabled = true; } static void copy_pattern(int cursor_x, int cursor_y) { if(cursor_y > 0 && cursor_y < 17) { last_copied_pattern_x = cursor_x; last_copied_pattern_y = cursor_y-1+visual_pattern_offset; if(debuglog) { printf("copy pattern x:%d y:%d", last_copied_pattern_x, last_copied_pattern_y); } } } static void paste_pattern(int cursor_x, int cursor_y) { int target_x = cursor_x; int target_y = cursor_y; if(target_y > 0 && target_y < 17) { target_y = target_y-1+visual_pattern_offset; cSynthPasteNotesFromPattern(synth, last_copied_pattern_x, last_copied_pattern_y, target_x, target_y); if(debuglog) { printf("paste pattern to x:%d y:%d", last_copied_pattern_x, last_copied_pattern_y); } } } static void add_track_node_with_octave(int x, int y, bool editing, int value) { int x_count = visual_cursor_x%5; int instrument = synth->current_instrument; //only effects are allowed to go over F so limit it. if(instrument_editor || pattern_editor || visualiser || !editing) { if(instrument_editor) { instrument = selected_instrument_id; } cSynthAddTrackNode(synth, instrument, current_track, x, y, false, true, value+(octave*12), playing); } else { if(!editing) { cSynthAddTrackNode(synth, instrument, current_track, x, y, false, true, value+(octave*12), playing); } else { bool move_down = false; if(x_count == 0) { cSynthAddTrackNode(synth, instrument, current_track, x, y, editing, true, value+(octave*12), playing); if(editing) { move_down = true; } } // only effects are allowed to go over F. if(x_count != 0 && x_count != 2 && value > 15) { printf("only effects are allowed to go over F.\n"); return; } if(x_count == 1 && editing) { cSynthAddTrackNodeParams(synth, current_track, x, y, value, -1, -1, -1); // change instrument synth->current_instrument = value; move_down = true; } if(x_count == 2 && editing) { // change effect cSynthAddTrackNodeParams(synth, current_track, x, y, -1, (char)value, -1, -1); move_down = true; } if(x_count == 3 && editing) { // change param2 cSynthAddTrackNodeParams(synth, current_track, x, y, -1, -1, (char)value, -1); move_down = true; } if(x_count == 4 && editing) { // change param1 cSynthAddTrackNodeParams(synth, current_track, x, y, -1, -1, -1, (char)value); move_down = true; } if(move_down) { if(follow) { if(playing) {} else { set_visual_cursor(0, step_size, true); } } else { set_visual_cursor(0, step_size, true); } } } } } // only move across active tracks static void set_visual_cursor(int diff_x, int diff_y, bool user) { if(shift_down) { int node_x = (int)floor(visual_cursor_x/5); visual_cursor_x = (node_x + diff_x)*5; } else { visual_cursor_x += diff_x; } visual_cursor_y += diff_y; if(user) { if(visual_cursor_x > visual_track_width-1) { visual_cursor_x = 0; } if(visual_cursor_x < 0) { visual_cursor_x = visual_track_width-1; if(shift_down) { visual_cursor_x = visual_track_width-5; } } if(visual_cursor_y >= visual_track_height) { current_track = cSynthGetNextActiveTrack(current_track, synth, true); visual_cursor_y = visual_cursor_y - visual_track_height; } if(visual_cursor_y < 0) { current_track = cSynthGetNextActiveTrack(current_track, synth, false); visual_cursor_y = visual_track_height-1; } } else { if(playing && follow) { if(visual_cursor_x == visual_track_width) { visual_cursor_x = 0; } if(visual_cursor_x == -1) { visual_cursor_x = visual_track_width-1; } if(visual_cursor_y == visual_track_height) { synth->current_track = cSynthGetNextActiveTrack(synth->current_track, synth, true); visual_cursor_y = 0; } if(visual_cursor_y == -1) { synth->current_track = cSynthGetNextActiveTrack(synth->current_track, synth, false); visual_cursor_y = visual_track_height-1; } current_track = synth->current_track; } } if(!shift_down) { selection_x = visual_cursor_x; selection_y = visual_cursor_y; selection_enabled = false; } else if(!editing) { selection_x = visual_cursor_x; selection_y = visual_cursor_y; selection_enabled = false; } else if(editing) { selection_enabled = true; } } static void check_pattern_cursor_bounds(void) { if(pattern_cursor_x == synth->patterns_and_voices_width) { pattern_cursor_x = 0; } if(pattern_cursor_x == -1) { pattern_cursor_x = synth->patterns_and_voices_width-1; } if(pattern_cursor_y == synth->patterns_and_voices_height) { pattern_cursor_y = 0; } if(pattern_cursor_y == -1) { pattern_cursor_y = synth->patterns_and_voices_height-1; } } static bool check_screen_bounds(int x, int y) { if(x > -1 && x < s_width && y > -1 && y < s_height) { return true; } else { return false; } } static void toggle_playback(void) { if(playing == false) { playing = true; if(pattern_editor) { if(pattern_cursor_y > 0 && pattern_cursor_y < 17) { cSynthResetTrackProgress(synth, pattern_cursor_y-1+visual_pattern_offset, 0); } else { cSynthResetTrackProgress(synth, current_track, 0); } } else { cSynthResetTrackProgress(synth, current_track, 0); } cSynthResetTempoIndex(synth); synth->tempo_skip_step = true; clear_clipping_color_from_visualiser(); set_info_timer("playback started"); } else { // note off to all voices when stopping playing. for(int v_i = 0; v_i < synth->max_voices; v_i++) { synth->voices[v_i]->note_on = false; } cSynthResetOnLoopBack(synth); playing = false; synth->bitcrush_active = false; set_info_timer("playback stopped"); } } static void toggle_editing(void) { if(editing == true) { editing = false; set_info_timer("editing off"); } else { editing = true; set_info_timer("editing on"); } } static void move_notes_up(void) { int cursor_x = visual_cursor_x/5; int pattern_at_cursor = synth->patterns[cursor_x][current_track]; cSynthMoveNotes(synth, true, false, cursor_x, visual_cursor_y, pattern_at_cursor); } static void move_notes_down(void) { int cursor_x = visual_cursor_x/5; int pattern_at_cursor = synth->patterns[cursor_x][current_track]; cSynthMoveNotes(synth, false, true, cursor_x, visual_cursor_y, pattern_at_cursor); } static void change_octave(bool up) { if(up) { octave++; if(octave > 7) { octave = 7; } set_info_timer_with_int("octave", octave); } else { octave--; if(octave < 0) { octave = 0; } set_info_timer_with_int("octave", octave); } } void handle_key_up(SDL_Keysym* keysym) { sdl_key_mapping(keysym, false); sdl_key_set_locks(keysym, false); if(last_key == keysym->sym) { any_key_pressed = false; } #if defined(platform_osx) if(!input->key_lock_lgui) { modifier = false; } #elif defined(platform_windows) if(!input->key_lock_lctrl) { modifier = false; } #endif if(!input->key_lock_left) { pressed_left = false; } if(!input->key_lock_right) { pressed_right = false; } if(!input->key_lock_up) { pressed_up = false; } if(!input->key_lock_down) { pressed_down = false; } if (!input->key_lock_lshift) { shift_down = false; } redraw_screen = true; } static void move_patterns(int direction) { int pattern_y = visual_pattern_offset+pattern_cursor_y; for(int x = 0; x < synth->patterns_width; x++) { int patterns[synth->patterns_height]; for(int i = 0; i < synth->patterns_height; i++) { patterns[i] = synth->patterns[x][i]; } if(direction == 1) { for(int i = 1; i < synth->patterns_height; i++) { if(i >= pattern_y-1) { synth->patterns[x][i] = patterns[i-1]; } } if(pattern_y-2 < synth->patterns_height) { synth->patterns[x][pattern_y-2] = 0; } } else { for(int i = 0; i < synth->patterns_height-1; i++) { if(i >= pattern_y-1) { synth->patterns[x][i] = patterns[i+1]; } } synth->patterns[x][synth->patterns_height-1] = 0; } } } void handle_key_down(SDL_Keysym* keysym) { sdl_key_mapping(keysym, true); sdl_key_set_locks(keysym, true); if(last_key != keysym->sym) { synth->preview_locked = false; synth->preview_started = false; } last_key = keysym->sym; any_key_pressed = true; redraw_screen = true; if(!file_editor) { if(input->key_f1) { set_view(0); } if(input->key_f2) { set_view(1); } if(input->key_f3) { set_view(2); } if(input->key_f4) { set_view(3); } if(input->key_f5) { set_view(4); } if(input->key_f6) { set_view(5); } if(input->key_f7) { set_view(6); } if(input->key_f8) { set_view(7); } if(input->key_f9) { set_view(8); } } if(help) { handle_help_keys(); return; } if(credits) { handle_credits_keys(); return; } if(reset_confirmation) { handle_reset_confirmation_keys(); } if(file_editor) { handle_key_down_file(); return; } else { if(input->key_i) { if(modifier) { if (instrument_editor) { instrument_editor = false; } else { tempo_editor = false; visualiser = false; wavetable_editor = false; custom_table = false; instrument_editor = true; } return; } } if(input->key_j) { if(modifier) { if (custom_table) { custom_table = false; } else { tempo_editor = false; visualiser = false; wavetable_editor = false; instrument_editor = false; custom_table = true; } return; } } if(input->key_t) { if(modifier) { if (tempo_editor) { tempo_editor = false; } else { instrument_editor = false; visualiser = false; wavetable_editor = false; custom_table = false; tempo_editor = true; } return; } } if(input->key_r) { if(modifier) { if (wavetable_editor) { wavetable_editor = false; } else { instrument_editor = false; visualiser = false; tempo_editor = false; custom_table = false; wavetable_editor = true; } return; } } if(input->key_q) { if(modifier) { // user will quit app on OSX. return; } } if(input->key_n) { if(modifier) { reset_confirmation = true; return; } } if(input->key_home) { if(tempo_editor) { tempo_selection_y = 0; } else if(instrument_editor) { int ins_id = selected_instrument_id-1; if(ins_id < 0) { ins_id = synth->max_instruments-1; } selected_instrument_id = ins_id; } else if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { pattern_cursor_y = 0; } else { visual_cursor_y = 0; } } if(input->key_end) { if(tempo_editor) { tempo_selection_y = synth->tempo_height-1; } else if(instrument_editor) { int ins_id = selected_instrument_id+1; if(ins_id >= synth->max_instruments) { ins_id = 0; } selected_instrument_id = ins_id; } else if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { pattern_cursor_y = synth->patterns_and_voices_height-1; } else { visual_cursor_y = synth->track_height-1; } } if(input->key_m) { if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y == 0) { if(synth->voices[pattern_cursor_x]->muted == 1) { synth->voices[pattern_cursor_x]->muted = 0; } else { synth->voices[pattern_cursor_x]->muted = 1; } } } } if(input->key_plus) { if(instrument_editor) { change_octave(true); } else if(visualiser) { change_octave(true); } else if(pattern_editor) { change_param(true); } else if(tempo_editor) { } else if(wavetable_editor) { } else { if (editing && modifier) { transpose_selection(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, true, 12); set_info_timer("transpose octave up"); } else if(editing) { transpose_selection(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, true, 1); set_info_timer("transpose halfnote up"); } } } if(input->key_minus) { if(instrument_editor) { change_octave(false); } else if(visualiser) { change_octave(false); } else if(pattern_editor) { change_param(false); } else if(tempo_editor) { } else if(wavetable_editor) { } else { if (editing && modifier) { transpose_selection(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, false, 12); set_info_timer("transpose octave down"); } else if(editing) { transpose_selection(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, false, 1); set_info_timer("transpose halfnote down"); } } } if(input->key_c) { if(modifier) { if(instrument_editor) {} else if(file_editor) {} else if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y == 17 || pattern_cursor_y == 18 || pattern_cursor_y == 19) { int instrument = -1; if(pattern_cursor_y < 19) { int ins_nr = pattern_cursor_x; if(pattern_cursor_y == 18) { ins_nr += 6; } instrument = ins_nr; } else if(pattern_cursor_y == 19 && pattern_cursor_x < 4) { int ins_nr = pattern_cursor_x; ins_nr += 12; instrument = ins_nr; } if(instrument > -1) { set_info_timer("copy instrument"); copy_instrument(instrument); } } else { copy_pattern(pattern_cursor_x, pattern_cursor_y); set_info_timer("copy pattern"); } } else { if(editing) { copy_notes(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, false, true); set_info_timer("copy notes"); } return; } } } if(input->key_x) { if(modifier) { if(instrument_editor) {} else if(file_editor) {} else if(pattern_editor) { // cut for pattern editor is not supported. } else if(!instrument_editor && !visualiser && !tempo_editor && !wavetable_editor){ if(editing) { copy_notes(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, true, true); set_info_timer("cut notes"); } return; } } } if(input->key_v) { if(modifier) { if(instrument_editor) {} else if(file_editor) {} else if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y == 17 || pattern_cursor_y == 18 || pattern_cursor_y == 19) { int instrument = -1; if(pattern_cursor_y < 19) { int ins_nr = pattern_cursor_x; if(pattern_cursor_y == 18) { ins_nr += 6; } instrument = ins_nr; } else if(pattern_cursor_y == 19 && pattern_cursor_x < 4) { int ins_nr = pattern_cursor_x; ins_nr += 12; instrument = ins_nr; } if(instrument > -1) { set_info_timer("paste instrument"); paste_instrument(instrument); } } else { paste_pattern(pattern_cursor_x, pattern_cursor_y); set_info_timer("paste pattern"); } } else { if(editing) { paste_notes(current_track, visual_cursor_x, visual_cursor_y); set_info_timer("paste notes"); } return; } } } if(input->key_x) { if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y > 0 && pattern_cursor_y < 17) { if(synth->active_tracks[pattern_cursor_y-1+visual_pattern_offset] == 0) { synth->active_tracks[pattern_cursor_y-1+visual_pattern_offset] = 1; } else { synth->active_tracks[pattern_cursor_y-1+visual_pattern_offset] = 0; } } } } if(input->key_p) { if(modifier) { if(visualiser) { visualiser = false; } else { visualiser = true; tempo_editor = false; instrument_editor = false; } return; } } if(input->key_o) { if(modifier) { file_editor = true; return; } } if(input->key_e) { if(modifier) { file_editor = true; file_settings->file_editor_save = true; export_project = true; return; } else if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y > 0 && pattern_cursor_y < 17) { pattern_editor = false; current_track = pattern_cursor_y-1+visual_pattern_offset; visual_cursor_x = pattern_cursor_x*5; set_info_timer("jump to track"); } return; } } if(input->key_s) { if(modifier) { file_editor = true; file_settings->file_editor_save = true; export_project = false; return; } else { if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y > 0) { if(synth->solo_track == pattern_cursor_y-1+visual_pattern_offset) { synth->solo_track = -1; } else { synth->solo_track = pattern_cursor_y-1+visual_pattern_offset; } } else if(pattern_cursor_y == 0) { if(synth->solo_voice == pattern_cursor_x) { synth->solo_voice = -1; } else { synth->solo_voice = pattern_cursor_x; } } } } } if(input->key_f) { if(modifier && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(follow) { follow = false; set_info_timer("follow: false"); } else { follow = true; set_info_timer("follow: true"); } return; } } if(input->key_tab) { if(instrument_editor) { struct CInstrument *ins = synth->instruments[selected_instrument_id]; selected_instrument_node_index++; if(selected_instrument_node_index >= ins->adsr_nodes) { selected_instrument_node_index = 1; } } else if(custom_table) { struct CInstrument *ins = synth->custom_instrument; selected_custom_table_node_index++; if(selected_custom_table_node_index >= ins->adsr_nodes) { selected_custom_table_node_index = 0; } } else if(!instrument_editor && !visualiser && !tempo_editor && !wavetable_editor){ if(pattern_editor) { pattern_editor = false; } else { pattern_editor = true; } } } #if defined(platform_osx) if(input->key_lgui) { modifier = true; } #elif defined(platform_windows) if(input->key_lctrl) { modifier = true; } #endif if(input->key_escape) { if(instrument_editor) { instrument_editor = false; } else if(visualiser) { visualiser = false; } else if(tempo_editor) { tempo_editor = false; } else if(wavetable_editor) { wavetable_editor = false; } else if(custom_table) { custom_table = false; } else if(help) { help = false; } else if(credits) { credits = false; } else if(pattern_editor) { pattern_editor = false; } } if(input->key_space) { toggle_playback(); } if(input->key_left) { pressed_left = true; if(tempo_editor) { tempo_selection_x--; if(tempo_selection_x < 0) { tempo_selection_x = synth->tempo_width-1; } } else if(custom_table) { } else if(wavetable_editor) { int inc = 1; if(wavetable_selection_y < 2) { inc = 2; } wavetable_selection_x -= inc; if(wavetable_selection_x < 0) { wavetable_selection_x = synth->wavetable_width-inc; } } else if(instrument_editor) { if(instrument_editor_effects) { instrument_editor_effects_x--; if(instrument_editor_effects_x < 0) { instrument_editor_effects_x = 2; } } } else { if(modifier) { change_octave(false); } else if(pattern_editor) { pattern_cursor_x -= 1; check_pattern_cursor_bounds(); } else { set_visual_cursor(-1, 0, true); } } } if(input->key_right) { pressed_right = true; if(tempo_editor) { tempo_selection_x++; if(tempo_selection_x >= synth->tempo_width) { tempo_selection_x = 0; } } else if(custom_table) { } else if(wavetable_editor) { int inc = 1; if(wavetable_selection_y < 2) { inc = 2; } wavetable_selection_x += inc; if(wavetable_selection_x >= synth->wavetable_width) { wavetable_selection_x = 0; } } else if(instrument_editor) { if(instrument_editor_effects) { instrument_editor_effects_x++; if(instrument_editor_effects_x > 2) { instrument_editor_effects_x = 0; } } } else { if(modifier) { change_octave(true); } else if(pattern_editor) { pattern_cursor_x += 1; check_pattern_cursor_bounds(); } else { set_visual_cursor(1, 0, true); } } } if(input->key_up) { pressed_up = true; if(tempo_editor) { tempo_selection_y--; if(tempo_selection_y < 0) { tempo_selection_y = synth->tempo_height-1; } } else if(custom_table) { } else if(wavetable_editor) { wavetable_selection_y--; if(wavetable_selection_y < 0) { wavetable_selection_y = synth->wavetable_height-1; } if(wavetable_selection_y == 1){ if(wavetable_selection_x == 1 || wavetable_selection_x == 3 || wavetable_selection_x == 5 || wavetable_selection_x == 7 || wavetable_selection_x == 9 || wavetable_selection_x == 11) wavetable_selection_x--; } } else if(instrument_editor) { if(instrument_editor_effects) { instrument_editor_effects_y--; if(instrument_editor_effects_y < 0) { instrument_editor_effects_y = visual_instrument_effects-1; } } } else if(shift_down && pattern_editor) { visual_pattern_offset -= 16; if(visual_pattern_offset < 0){ visual_pattern_offset = 48; } } else if(modifier && pattern_editor) { pattern_cursor_y -= 1; check_pattern_cursor_bounds(); move_patterns(-1); } else { if(pattern_editor) { pattern_cursor_y -= 1; check_pattern_cursor_bounds(); } else { if(playing && follow) {} else if(modifier && editing) { move_notes_up(); set_visual_cursor(0, -1, true); } else { set_visual_cursor(0, -1, true); } } } } if(input->key_down) { pressed_down = true; if(tempo_editor) { tempo_selection_y++; if(tempo_selection_y >= synth->tempo_height) { tempo_selection_y = 0; } } else if(custom_table) { } else if(wavetable_editor) { wavetable_selection_y++; if(wavetable_selection_y >= synth->wavetable_height) { wavetable_selection_y = 0; } } else if(instrument_editor) { if(instrument_editor_effects) { instrument_editor_effects_y++; if(instrument_editor_effects_y >= visual_instrument_effects) { instrument_editor_effects_y = 0; } } } else if(shift_down && pattern_editor) { visual_pattern_offset += 16; if(visual_pattern_offset > 48){ visual_pattern_offset = 0; } } else if(modifier && pattern_editor) { pattern_cursor_y += 1; check_pattern_cursor_bounds(); move_patterns(1); } else { if(pattern_editor) { pattern_cursor_y += 1; check_pattern_cursor_bounds(); } else { if(playing && follow) {} else if(modifier && editing) { move_notes_down(); set_visual_cursor(0, 1, true); } else { set_visual_cursor(0, 1, true); } } } } if(input->key_backspace || input->key_delete) { if(instrument_editor) { if(instrument_editor_effects) { instrument_effect_remove(); } } else if(pattern_editor) {} else if(editing && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { int x_count = visual_cursor_x%5; if(selection_enabled) { copy_notes(current_track, visual_cursor_x, visual_cursor_y, selection_x, selection_y, true, false); } else { if(x_count == 0 || x_count == 1) { cSynthRemoveTrackNode(synth, current_track, synth->track_cursor_x, synth->track_cursor_y); cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, true, false, false, false); cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, true, false, false); cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, false, true, false); cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, false, false, true); } else if(x_count == 2) { cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, true, false, false); cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, false, true, false); cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, false, false, true); } else if(x_count == 3) { cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, false, true, false); } else if(x_count == 4) { cSynthRemoveTrackNodeParams(synth, current_track, synth->track_cursor_x, synth->track_cursor_y, false, false, false, true); } if(follow) { if(playing) {} else { set_visual_cursor(0, step_size, true); } } else { set_visual_cursor(0, step_size, true); } } } } if(input->key_return) { if(tempo_editor) { if(modifier) { if (playing) { synth->pending_tempo_column = tempo_selection_x; } else { synth->current_tempo_column = tempo_selection_x; } } else { } } else if(visualiser) { visualiser = false; } else if(wavetable_editor) { } else if(instrument_editor) { instrument_editor = false; } else { if(pattern_editor && !instrument_editor && !visualiser && !tempo_editor && !wavetable_editor) { if(pattern_cursor_y == 17 || pattern_cursor_y == 18 || pattern_cursor_y == 19) { if(pattern_cursor_y < 19) { int ins_nr = pattern_cursor_x; if(pattern_cursor_y == 18) { ins_nr += 6; } selected_instrument_id = ins_nr; if(instrument_editor) { instrument_editor = false; } else { instrument_editor = true; } } else if(pattern_cursor_y == 19 && pattern_cursor_x < 4) { int ins_nr = pattern_cursor_x; ins_nr += 12; selected_instrument_id = ins_nr; if(instrument_editor) { instrument_editor = false; } else { instrument_editor = true; } } } else if(pattern_cursor_y == 20 && pattern_cursor_x == 0) { wavetable_editor = true; return; } else if(pattern_cursor_y == 21 && pattern_cursor_x == 2) { custom_table = true; } else if(pattern_cursor_y == 20 && pattern_cursor_x == 4) { tempo_editor = true; } else if(pattern_cursor_y == 20 && pattern_cursor_x == 5) { visualiser = true; } else if(pattern_cursor_y == 21 && pattern_cursor_x == 5) { credits = true; } else if(pattern_cursor_y == 21 && pattern_cursor_x == 1) { help = true; } } else { if(!input->key_lock_return) { toggle_editing(); } } } } if(input->key_lshift) { if(instrument_editor) { if(instrument_editor_effects) { instrument_editor_effects = false; } else { instrument_editor_effects = true; } } else { shift_down = true; } } } if(shift_down && editing) { selection_enabled = true; } if(!pattern_editor && !tempo_editor && !wavetable_editor && !instrument_editor && !visualiser && modifier) { bool stepsize_set = false; if(input->key_1) { step_size = 1; stepsize_set = true; } else if(input->key_2) { step_size = 2; stepsize_set = true; } else if(input->key_3) { step_size = 3; stepsize_set = true; } else if(input->key_4) { step_size = 4; stepsize_set = true; } else if(input->key_5) { step_size = 5; stepsize_set = true; } else if(input->key_6) { step_size = 6; stepsize_set = true; } else if(input->key_7) { step_size = 7; stepsize_set = true; } else if(input->key_8) { step_size = 8; stepsize_set = true; } else if(input->key_9) { step_size = 9; stepsize_set = true; } if(stepsize_set) { set_info_timer_with_int("stepsize", step_size); } return; } int x_count = visual_cursor_x%5; if(tempo_editor) { handle_tempo_keys(); return; } else if(wavetable_editor) { handle_wavetable_keys(); return; } else if(instrument_editor && instrument_editor_effects) { handle_instrument_effect_keys(); return; } else if(pattern_editor && !instrument_editor && !visualiser) { handle_pattern_keys(); return; } else if(x_count == 1 && editing && !instrument_editor && !visualiser) { handle_param_value(); return; } else if((x_count > 1 && editing) && (x_count < 5 && editing) && !instrument_editor && !visualiser) { handle_param_value(); return; } else { handle_note_keys(); } } static void set_view(int view) { instrument_editor = false; visualiser = false; tempo_editor = false; wavetable_editor = false; custom_table = false; help = false; credits = false; pattern_editor = false; if (view == 1) { pattern_editor = true; } else if (view == 2) { instrument_editor = true; } else if (view == 3) { tempo_editor = true; } else if (view == 4) { wavetable_editor = true; } else if (view == 5) { custom_table = true; } else if (view == 6) { visualiser = true; } else if (view == 7) { help = true; } else if (view == 8) { credits = true; } } static void sdl_key_set_locks(SDL_Keysym* keysym, bool down) { switch(keysym->sym) { case SDLK_0: input->key_pending_lock_0 = down; break; case SDLK_1: input->key_pending_lock_1 = down; break; case SDLK_2: input->key_pending_lock_2 = down; break; case SDLK_3: input->key_pending_lock_3 = down; break; case SDLK_4: input->key_pending_lock_4 = down; break; case SDLK_5: input->key_pending_lock_5 = down; break; case SDLK_6: input->key_pending_lock_6 = down; break; case SDLK_7: input->key_pending_lock_7 = down; break; case SDLK_8: input->key_pending_lock_8 = down; break; case SDLK_9: input->key_pending_lock_9 = down; break; case SDLK_a: input->key_pending_lock_a = down; break; case SDLK_b: input->key_pending_lock_b = down; break; case SDLK_c: input->key_pending_lock_c = down; break; case SDLK_d: input->key_pending_lock_d = down; break; case SDLK_e: input->key_pending_lock_e = down; break; case SDLK_f: input->key_pending_lock_f = down; break; case SDLK_g: input->key_pending_lock_g = down; break; case SDLK_h: input->key_pending_lock_h = down; break; case SDLK_i: input->key_pending_lock_i = down; break; case SDLK_j: input->key_pending_lock_j = down; break; case SDLK_k: input->key_pending_lock_k = down; break; case SDLK_l: input->key_pending_lock_l = down; break; case SDLK_m: input->key_pending_lock_m = down; break; case SDLK_n: input->key_pending_lock_n = down; break; case SDLK_o: input->key_pending_lock_o = down; break; case SDLK_p: input->key_pending_lock_p = down; break; case SDLK_q: input->key_pending_lock_q = down; break; case SDLK_r: input->key_pending_lock_r = down; break; case SDLK_s: input->key_pending_lock_s = down; break; case SDLK_t: input->key_pending_lock_t = down; break; case SDLK_u: input->key_pending_lock_u = down; break; case SDLK_v: input->key_pending_lock_v = down; break; case SDLK_w: input->key_pending_lock_w = down; break; case SDLK_x: input->key_pending_lock_x = down; break; case SDLK_y: input->key_pending_lock_y = down; break; case SDLK_z: input->key_pending_lock_z = down; break; case SDLK_SPACE: input->key_pending_lock_space = down; break; case SDLK_PLUS: case SDLK_KP_PLUS: input->key_pending_lock_plus = down; break; case SDLK_MINUS: case SDLK_KP_MINUS: input->key_pending_lock_minus = down; break; case SDLK_TAB: input->key_pending_lock_tab = down; break; case SDLK_LGUI: input->key_pending_lock_lgui = down; break; case SDLK_LCTRL: input->key_pending_lock_lctrl = down; break; case SDLK_ESCAPE: input->key_pending_lock_escape = down; break; case SDLK_RETURN: case SDLK_KP_ENTER: input->key_pending_lock_return = down; break; case SDLK_LEFT: input->key_pending_lock_left = down; break; case SDLK_RIGHT: input->key_pending_lock_right = down; break; case SDLK_UP: input->key_pending_lock_up = down; break; case SDLK_DOWN: input->key_pending_lock_down = down; break; case SDLK_LSHIFT: input->key_pending_lock_lshift = down; break; case SDLK_HOME: input->key_pending_lock_home = down; break; case SDLK_END: input->key_pending_lock_end = down; break; case SDLK_BACKSPACE: input->key_pending_lock_backspace = down; break; case SDLK_DELETE: input->key_pending_lock_delete = down; break; case SDLK_COMMA: input->key_pending_lock_comma = down; break; case SDLK_PERIOD: input->key_pending_lock_period = down; break; case SDLK_F1: input->key_pending_lock_f1 = down; break; case SDLK_F2: input->key_pending_lock_f2 = down; break; case SDLK_F3: input->key_pending_lock_f3 = down; break; case SDLK_F4: input->key_pending_lock_f4 = down; break; case SDLK_F5: input->key_pending_lock_f5 = down; break; case SDLK_F6: input->key_pending_lock_f6 = down; break; case SDLK_F7: input->key_pending_lock_f7 = down; break; case SDLK_F8: input->key_pending_lock_f8 = down; break; case SDLK_F9: input->key_pending_lock_f9 = down; break; case SDLK_F10: input->key_pending_lock_f10 = down; break; case SDLK_F11: input->key_pending_lock_f11 = down; break; case SDLK_F12: input->key_pending_lock_f12 = down; break; } if(!down) { switch(keysym->sym) { case SDLK_0: input->key_lock_0 = down; break; case SDLK_1: input->key_lock_1 = down; break; case SDLK_2: input->key_lock_2 = down; break; case SDLK_3: input->key_lock_3 = down; break; case SDLK_4: input->key_lock_4 = down; break; case SDLK_5: input->key_lock_5 = down; break; case SDLK_6: input->key_lock_6 = down; break; case SDLK_7: input->key_lock_7 = down; break; case SDLK_8: input->key_lock_8 = down; break; case SDLK_9: input->key_lock_9 = down; break; case SDLK_a: input->key_lock_a = down; break; case SDLK_b: input->key_lock_b = down; break; case SDLK_c: input->key_lock_c = down; break; case SDLK_d: input->key_lock_d = down; break; case SDLK_e: input->key_lock_e = down; break; case SDLK_f: input->key_lock_f = down; break; case SDLK_g: input->key_lock_g = down; break; case SDLK_h: input->key_lock_h = down; break; case SDLK_i: input->key_lock_i = down; break; case SDLK_j: input->key_lock_j = down; break; case SDLK_k: input->key_lock_k = down; break; case SDLK_l: input->key_lock_l = down; break; case SDLK_m: input->key_lock_m = down; break; case SDLK_n: input->key_lock_n = down; break; case SDLK_o: input->key_lock_o = down; break; case SDLK_p: input->key_lock_p = down; break; case SDLK_q: input->key_lock_q = down; break; case SDLK_r: input->key_lock_r = down; break; case SDLK_s: input->key_lock_s = down; break; case SDLK_t: input->key_lock_t = down; break; case SDLK_u: input->key_lock_u = down; break; case SDLK_v: input->key_lock_v = down; break; case SDLK_w: input->key_lock_w = down; break; case SDLK_x: input->key_lock_x = down; break; case SDLK_y: input->key_lock_y = down; break; case SDLK_z: input->key_lock_z = down; break; case SDLK_SPACE: input->key_lock_space = down; break; case SDLK_PLUS: case SDLK_KP_PLUS: input->key_pending_lock_plus = down; break; case SDLK_MINUS: case SDLK_KP_MINUS: input->key_pending_lock_minus = down; break; case SDLK_TAB: input->key_lock_tab = down; break; case SDLK_LGUI: input->key_lock_lgui = down; break; case SDLK_LCTRL: input->key_lock_lctrl = down; break; case SDLK_ESCAPE: input->key_lock_escape = down; break; case SDLK_RETURN: case SDLK_KP_ENTER: input->key_lock_return = down; break; case SDLK_LEFT: input->key_lock_left = down; break; case SDLK_RIGHT: input->key_lock_right = down; break; case SDLK_UP: input->key_lock_up = down; break; case SDLK_DOWN: input->key_lock_down = down; break; case SDLK_LSHIFT: input->key_lock_lshift = down; break; case SDLK_HOME: input->key_lock_home = down; break; case SDLK_END: input->key_lock_end = down; break; case SDLK_BACKSPACE: input->key_lock_backspace = down; break; case SDLK_DELETE: input->key_lock_delete = down; break; case SDLK_COMMA: input->key_lock_comma = down; break; case SDLK_PERIOD: input->key_lock_period = down; break; case SDLK_F1: input->key_lock_f1 = down; break; case SDLK_F2: input->key_lock_f2 = down; break; case SDLK_F3: input->key_lock_f3 = down; break; case SDLK_F4: input->key_lock_f4 = down; break; case SDLK_F5: input->key_lock_f5 = down; break; case SDLK_F6: input->key_lock_f6 = down; break; case SDLK_F7: input->key_lock_f7 = down; break; case SDLK_F8: input->key_lock_f8 = down; break; case SDLK_F9: input->key_lock_f9 = down; break; case SDLK_F10: input->key_lock_f10 = down; break; case SDLK_F11: input->key_lock_f11 = down; break; case SDLK_F12: input->key_lock_f12 = down; break; } } } static void sdl_key_mapping(SDL_Keysym* keysym, bool down) { cInputResetKeys(input); switch(keysym->sym) { case SDLK_0: input->key_0 = down; break; case SDLK_1: input->key_1 = down; break; case SDLK_2: input->key_2 = down; break; case SDLK_3: input->key_3 = down; break; case SDLK_4: input->key_4 = down; break; case SDLK_5: input->key_5 = down; break; case SDLK_6: input->key_6 = down; break; case SDLK_7: input->key_7 = down; break; case SDLK_8: input->key_8 = down; break; case SDLK_9: input->key_9 = down; break; case SDLK_a: input->key_a = down; break; case SDLK_b: input->key_b = down; break; case SDLK_c: input->key_c = down; break; case SDLK_d: input->key_d = down; break; case SDLK_e: input->key_e = down; break; case SDLK_f: input->key_f = down; break; case SDLK_g: input->key_g = down; break; case SDLK_h: input->key_h = down; break; case SDLK_i: input->key_i = down; break; case SDLK_j: input->key_j = down; break; case SDLK_k: input->key_k = down; break; case SDLK_l: input->key_l = down; break; case SDLK_m: input->key_m = down; break; case SDLK_n: input->key_n = down; break; case SDLK_o: input->key_o = down; break; case SDLK_p: input->key_p = down; break; case SDLK_q: input->key_q = down; break; case SDLK_r: input->key_r = down; break; case SDLK_s: input->key_s = down; break; case SDLK_t: input->key_t = down; break; case SDLK_u: input->key_u = down; break; case SDLK_v: input->key_v = down; break; case SDLK_w: input->key_w = down; break; case SDLK_x: input->key_x = down; break; case SDLK_y: input->key_y = down; break; case SDLK_z: input->key_z = down; break; case SDLK_SPACE: input->key_space = down; break; case SDLK_PLUS: case SDLK_KP_PLUS: input->key_plus = down; break; case SDLK_MINUS: case SDLK_KP_MINUS: input->key_minus = down; break; case SDLK_TAB: input->key_tab = down; break; case SDLK_LGUI: input->key_lgui = down; break; case SDLK_LCTRL: input->key_lctrl = down; break; case SDLK_ESCAPE: input->key_escape = down; break; case SDLK_RETURN: case SDLK_KP_ENTER: input->key_return = down; break; case SDLK_LEFT: input->key_left = down; break; case SDLK_RIGHT: input->key_right = down; break; case SDLK_UP: input->key_up = down; break; case SDLK_DOWN: input->key_down = down; break; case SDLK_LSHIFT: input->key_lshift = down; break; case SDLK_HOME: input->key_home = down; break; case SDLK_END: input->key_end = down; break; case SDLK_BACKSPACE: input->key_backspace = down; break; case SDLK_DELETE: input->key_delete = down; break; case SDLK_COMMA: input->key_comma = down; break; case SDLK_PERIOD: input->key_period = down; break; case SDLK_F1: input->key_f1 = down; break; case SDLK_F2: input->key_f2 = down; break; case SDLK_F3: input->key_f3 = down; break; case SDLK_F4: input->key_f4 = down; break; case SDLK_F5: input->key_f5 = down; break; case SDLK_F6: input->key_f6 = down; break; case SDLK_F7: input->key_f7 = down; break; case SDLK_F8: input->key_f8 = down; break; case SDLK_F9: input->key_f9 = down; break; case SDLK_F10: input->key_f10 = down; break; case SDLK_F11: input->key_f11 = down; break; case SDLK_F12: input->key_f12 = down; break; } } static void handle_reset_confirmation_keys(void) { if(input->key_return) { set_info_timer("reset project"); reset_project(); cSynthReset(synth); reset_confirmation = false; input->key_lock_return = true; } else { // reset cancelled. reset_confirmation = false; } } static void handle_tempo_keys(void) { bool zero = false; bool move_cursor_down = false; int cursor_x = tempo_selection_x; int cursor_y = tempo_selection_y; char value = -1; if(input->key_plus) { if(cursor_y == 0) { synth->tempo_map[cursor_x][cursor_y]->bpm++; if(synth->tempo_map[cursor_x][cursor_y]->bpm > 999) { synth->tempo_map[cursor_x][cursor_y]->bpm = 999; } } } else if(input->key_minus) { if(cursor_y == 0) { synth->tempo_map[cursor_x][cursor_y]->bpm--; if(synth->tempo_map[cursor_x][cursor_y]->bpm < 0) { synth->tempo_map[cursor_x][cursor_y]->bpm = 0; } } } else if(input->key_backspace || input->key_delete) { zero = true; if(cursor_y > 0) { move_cursor_down = true; } } else if(input->key_x) { if (!modifier) { if(cursor_y > 0) { if(synth->tempo_map[cursor_x][cursor_y]->active) { // check so that it's not the last one active. We need at least one. bool other_active_exists = false; for (int i = 1; i < synth->tempo_height; i++) { if(synth->tempo_map[cursor_x][i]->active && i != cursor_y) { other_active_exists = true; } } if(other_active_exists) { synth->tempo_map[cursor_x][cursor_y]->active = false; } move_cursor_down = true; } else { synth->tempo_map[cursor_x][cursor_y]->active = true; move_cursor_down = true; } cSynthUpdateHighlightInterval(synth); } } } else if(input->key_0) { value = 0; } else if(input->key_1) { value = 1; } else if(input->key_2) { value = 2; } else if(input->key_3) { value = 3; } else if(input->key_4) { value = 4; } else if(input->key_5) { value = 5; } else if(input->key_6) { value = 6; } else if(input->key_7) { value = 7; } else if(input->key_8) { value = 8; } else if(input->key_9) { value = 9; } else if(input->key_a) { value = 10; } else if(input->key_b) { value = 11; } else if(input->key_c) { value = 12; } else if(input->key_d) { value = 13; } else if(input->key_e) { value = 14; } else if(input->key_f) { value = 15; } if(cursor_y > 0) { if(zero) { synth->tempo_map[cursor_x][cursor_y]->ticks = 1; move_cursor_down = true; } else if(value > 0) { synth->tempo_map[cursor_x][cursor_y]->ticks = value; move_cursor_down = true; } } else if(cursor_y == 0) { // bpm if(zero) { synth->tempo_map[cursor_x][cursor_y]->bpm = 0; } else if(value > -1) { int old_bpm = synth->tempo_map[cursor_x][cursor_y]->bpm; int number = value; if(old_bpm < 100) { old_bpm *= 10; number += old_bpm; } else if(old_bpm < 10) { old_bpm *= 10; number += old_bpm; } if(number >= 999) { number = 999; } synth->tempo_map[cursor_x][cursor_y]->bpm = number; } } if(move_cursor_down) { tempo_selection_y++; if(tempo_selection_y >= synth->tempo_height) { tempo_selection_y = 1; } } } static void handle_wavetable_keys(void) { bool zero = false; bool move_cursor_down = false; int cursor_x = wavetable_selection_x; int cursor_y = wavetable_selection_y; char value = -1; bool h_switch = false; if(cursor_x % 2 == 0) { h_switch = true; } if(input->key_plus) { if(cursor_y == 0 && h_switch) { synth->wavetable_map[cursor_x][cursor_y]->speed++; if(synth->wavetable_map[cursor_x][cursor_y]->speed > 999) { synth->wavetable_map[cursor_x][cursor_y]->speed = 999; } } } else if(input->key_minus) { if(cursor_y == 0 && h_switch) { synth->wavetable_map[cursor_x][cursor_y]->speed--; if(synth->wavetable_map[cursor_x][cursor_y]->speed < 0) { synth->wavetable_map[cursor_x][cursor_y]->speed = 0; } } } else if(input->key_backspace || input->key_delete) { zero = true; if(cursor_y > 0) { move_cursor_down = true; } } else if(input->key_x) { if(cursor_y > 0 && cursor_y != 2) { if(synth->wavetable_map[cursor_x][cursor_y]->active) { synth->wavetable_map[cursor_x][cursor_y]->active = false; move_cursor_down = true; } else { synth->wavetable_map[cursor_x][cursor_y]->active = true; move_cursor_down = true; } } if(cursor_y == 2) { move_cursor_down = true; } } else if(input->key_0) { value = 0; } else if(input->key_1) { value = 1; } else if(input->key_2) { value = 2; } else if(input->key_3) { value = 3; } else if(input->key_4) { value = 4; } else if(input->key_5) { value = 5; } else if(input->key_6) { value = 6; } else if(input->key_7) { value = 7; } else if(input->key_8) { value = 8; } else if(input->key_9) { value = 9; } else if(input->key_a) { value = 10; } else if(input->key_b) { value = 11; } else if(input->key_c) { value = 12; } else if(input->key_d) { value = 13; } else if(input->key_e) { value = 14; } else if(input->key_f) { value = 15; } if(cursor_y > 1) { if(zero) { synth->wavetable_map[cursor_x][cursor_y]->value = 0; if(!h_switch) { synth->wavetable_map[cursor_x][cursor_y]->value = 1; } move_cursor_down = true; } else if(value > -1) { if(h_switch) { value = value % 6; synth->wavetable_map[cursor_x][cursor_y]->value = value; } if(!h_switch && value == 0) { synth->wavetable_map[cursor_x][cursor_y]->value = 1; } else if(!h_switch) { synth->wavetable_map[cursor_x][cursor_y]->value = value; } move_cursor_down = true; } } else if(cursor_y == 0) { // bpm if(zero) { synth->wavetable_map[cursor_x][cursor_y]->speed = 0; } else if(value > -1) { int old_bpm = synth->wavetable_map[cursor_x][cursor_y]->speed; int number = value; if(old_bpm < 100) { old_bpm *= 10; number += old_bpm; } else if(old_bpm < 10) { old_bpm *= 10; number += old_bpm; } if(number >= 999) { number = 999; } synth->wavetable_map[cursor_x][cursor_y]->speed = number; } } if(move_cursor_down) { wavetable_selection_y++; if(wavetable_selection_y >= synth->wavetable_height) { wavetable_selection_y = 2; } } } static void handle_note_keys(void) { int cursor_y = visual_cursor_y; if(input->key_z) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 12); } else if(input->key_s) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 13); } else if(input->key_x) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 14); } else if(input->key_d) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 15); } else if(input->key_c) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 16); } else if(input->key_v) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 17); } else if(input->key_g) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 18); } else if(input->key_b) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 19); } else if(input->key_h) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 20); } else if(input->key_n) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 21); } else if(input->key_j) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 22); } else if(input->key_m) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 23); } else if(input->key_comma) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 24); } else if(input->key_l) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 25); } else if(input->key_period) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 26); } else if(input->key_q) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 24); } else if(input->key_2) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 25); } else if(input->key_w) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 26); } else if(input->key_3) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 27); } else if(input->key_e) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 28); } else if(input->key_r) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 29); } else if(input->key_5) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 30); } else if(input->key_t) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 31); } else if(input->key_6) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 32); } else if(input->key_y) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 33); } else if(input->key_7) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 34); } else if(input->key_u) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 35); } else if(input->key_i) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 36); } else if(input->key_9) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 37); } else if(input->key_o) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 38); } else if(input->key_0) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 39); } else if(input->key_p) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 40); } } static void handle_pattern_keys(void) { bool zero = false; int number = 0; if(input->key_backspace || input->key_delete) { zero = true; } else if(input->key_0) { number = 0; } else if(input->key_1) { number = 1; } else if(input->key_2) { number = 2; } else if(input->key_3) { number = 3; } else if(input->key_4) { number = 4; } else if(input->key_5) { number = 5; } else if(input->key_6) { number = 6; } else if(input->key_7) { number = 7; } else if(input->key_8) { number = 8; } else if(input->key_9) { number = 9; } else { return; } if(pattern_cursor_y > 0 && pattern_cursor_y < 17) { if(zero) { synth->patterns[pattern_cursor_x][pattern_cursor_y-1+visual_pattern_offset] = 0; } else { if(number < 0){ number = 0; } int old_pattern = synth->patterns[pattern_cursor_x][pattern_cursor_y-1+visual_pattern_offset]; if(old_pattern < 10) { old_pattern *= 10; number += old_pattern; if(number >= synth->patterns_height) { number = synth->patterns_height-1; } } synth->patterns[pattern_cursor_x][pattern_cursor_y-1+visual_pattern_offset] = number; } } // master amp if(pattern_cursor_y == 20 && pattern_cursor_x == 1) { if(zero) { synth->master_amp_percent = 0; synth->master_amp = 0; } else { int old_master_amp = synth->master_amp_percent; if(old_master_amp < 1000) { old_master_amp *= 10; number += old_master_amp; } else if(old_master_amp < 100) { old_master_amp *= 10; number += old_master_amp; } else if(old_master_amp < 10) { old_master_amp *= 10; number += old_master_amp; } if(number >= 9999) { number = 9999; } synth->master_amp_percent = number; synth->master_amp = synth->master_amp_percent*0.01; } } // rows if(pattern_cursor_y == 20 && pattern_cursor_x == 2) { if(zero) { synth->track_height = 1; visual_track_height = synth->track_height; } else { int track_height = synth->track_height; if(track_height < 10) { track_height *= 10; number += track_height; } if(number >= synth->track_max_height) { number = synth->track_max_height-1; } synth->track_height = number; if(synth->track_height < 1) { synth->track_height = 1; } visual_track_height = synth->track_height; } } // arp if(pattern_cursor_y == 20 && pattern_cursor_x == 3) { if(zero) { synth->arpeggio_speed = 1; } else { int old_arp = synth->arpeggio_speed; if(old_arp < 100) { old_arp *= 10; number += old_arp; } else if(old_arp < 10) { old_arp *= 10; number += old_arp; } if(number >= 600) { number = 600; } synth->arpeggio_speed = number; } } } void handle_param_value(void) { int cursor_y = visual_cursor_y; if(input->key_0) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 0); } else if(input->key_1) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 1); } else if(input->key_2) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 2); } else if(input->key_3) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 3); } else if(input->key_4) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 4); } else if(input->key_5) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 5); } else if(input->key_6) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 6); } else if(input->key_7) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 7); } else if(input->key_8) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 8); } else if(input->key_9) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 9); } else if(input->key_a) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 10); } else if(input->key_b) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 11); } else if(input->key_c) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 12); } else if(input->key_d) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 13); } else if(input->key_e) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 14); } else if(input->key_f) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 15); } else if(input->key_g) { add_track_node_with_octave(synth->track_cursor_x, cursor_y, editing, 16); } } static void instrument_effect_remove() { int instrument = selected_instrument_id; struct CTrackNode *node = synth->instrument_effects[instrument][instrument_editor_effects_y]; if(node == NULL) { node = cSynthNewTrackNode(); synth->instrument_effects[instrument][instrument_editor_effects_y] = node; } if(instrument_editor_effects_x == 0) { // TODO this is ugly, find a better way if(node->effect_value == 16) { // remove bitcrush synth->bitcrush_active = false; } node->effect = '-'; node->effect_value = -1; // remove params as well node->effect_param1 = '-'; node->effect_param1_value = -1; node->effect_param2 = '-'; node->effect_param2_value = -1; } if(instrument_editor_effects_x == 1) { node->effect_param1 = '-'; node->effect_param1_value = -1; } if(instrument_editor_effects_x == 2) { node->effect_param2 = '-'; node->effect_param2_value = -1; } } static void handle_instrument_effect_keys(void) { int instrument = selected_instrument_id; char value = -1; if(input->key_0) { value = 0; } else if(input->key_1) { value = 1; } else if(input->key_2) { value = 2; } else if(input->key_3) { value = 3; } else if(input->key_4) { value = 4; } else if(input->key_5) { value = 5; } else if(input->key_6) { value = 6; } else if(input->key_7) { value = 7; } else if(input->key_8) { value = 8; } else if(input->key_9) { value = 9; } else if(input->key_a) { value = 10; } else if(input->key_b) { value = 11; } else if(input->key_c) { value = 12; } else if(input->key_d) { value = 13; } else if(input->key_e) { value = 14; } else if(input->key_f) { value = 15; } else if(input->key_g) { value = 16; } if(value > -1) { struct CTrackNode *node = synth->instrument_effects[instrument][instrument_editor_effects_y]; if(node == NULL) { node = cSynthNewTrackNode(); synth->instrument_effects[instrument][instrument_editor_effects_y] = node; } // only effects are allowed to go over F. if(instrument_editor_effects_x != 0 && value > 15) { return; } if(instrument_editor_effects_x == 0) { // TODO this is ugly, find a better way if(node->effect_value == 16 && value != 16) { // remove bitcrush synth->bitcrush_active = false; } node->effect = cSynthGetCharFromParam(value); node->effect_value = value; } if(instrument_editor_effects_x == 1) { node->effect_param1 = cSynthGetCharFromParam(value); node->effect_param1_value = value; } if(instrument_editor_effects_x == 2) { node->effect_param2 = cSynthGetCharFromParam(value); node->effect_param2_value = value; } } } static void check_sdl_events(SDL_Event event) { while (SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: quit = true; break; case SDL_KEYDOWN: handle_key_down(&event.key.keysym); break; case SDL_KEYUP: handle_key_up(&event.key.keysym); break; } } } static void log_wave_data(float *floatStream, Uint32 floatStreamLength, Uint32 increment) { printf("\n\nwaveform data:\n\n"); Uint32 i=0; for (i=0; i= (fourth*2)-1) { visual_left = (fourth*2)-1; color = color_visualiser_clipping; } if(visualiser2d[x_counter][visual_left] != color_visualiser_clipping) { visualiser2d[x_counter][visual_left] = color; } color = color_visualiser; if(visual_right < (fourth*2)+2) { visual_right = (fourth*2)+1; color = color_visualiser_clipping; } else if (visual_right >= s_height-1) { visual_right = s_height-1; color = color_visualiser_clipping; } if(visualiser2d[x_counter][visual_right] != color_visualiser_clipping) { visualiser2d[x_counter][visual_right] = color; } x_counter++; } } } static void change_waveform(int plus) { int current_waveform = synth->patterns_and_voices[pattern_cursor_x][pattern_cursor_y]; if(plus) { current_waveform++; } else { current_waveform--; } if(current_waveform < 0) { current_waveform = 5; } else if(current_waveform > 5) { current_waveform = 0; } if(current_waveform == 0) { synth->voices[pattern_cursor_x]->waveform = synth->sine_wave_table; } if(current_waveform == 1) { synth->voices[pattern_cursor_x]->waveform = synth->sawtooth_wave_table; } if(current_waveform == 2) { synth->voices[pattern_cursor_x]->waveform = synth->square_wave_table; } if(current_waveform == 3) { synth->voices[pattern_cursor_x]->waveform = synth->triangle_wave_table; } if(current_waveform == 4) { synth->voices[pattern_cursor_x]->waveform = synth->noise_table; } if(current_waveform == 5) { synth->voices[pattern_cursor_x]->waveform = synth->custom_table; } synth->patterns_and_voices[pattern_cursor_x][pattern_cursor_y] = current_waveform; } static void change_param(bool plus) { int x = pattern_cursor_x; int y = pattern_cursor_y; if(y == 0) { change_waveform(plus); } else if(y == 17 || y == 18) { // nothing } else if(y == 20 && x == 1) { //master amp int amp = synth->master_amp_percent; if(plus) { amp++; synth->master_amp_percent = amp; } else { amp--; if(amp < 1) { amp = 1; } synth->master_amp_percent = amp; } synth->master_amp = synth->master_amp_percent*0.01; } else if(y == 21 && x == 0) { //toggle preview if(synth->preview_enabled) { synth->preview_enabled = false; } else { synth->preview_enabled = true; } } else if(y == 19 && x == 1) { // nothing } else if(y == 19 && x == 2) { // nothing } else if(y == 20 && x == 2) { // active rows for all patterns int track_height = synth->track_height; if(plus) { track_height++; if(track_height >= synth->track_max_height) { track_height = synth->track_max_height-1; } synth->track_height = track_height; visual_track_height = track_height; } else { track_height--; if(track_height < 1) { track_height = 1; } synth->track_height = track_height; visual_track_height = track_height; } } else if(y == 20 && x == 3) { if(plus) { synth->arpeggio_speed++; } else { synth->arpeggio_speed--; if(synth->arpeggio_speed < 1) { synth->arpeggio_speed = 1; } } } else if(y == 20 && x == 4) { // nothing } else if(y == 20) { // nothing } else { // pattern nr. int pattern = synth->patterns[pattern_cursor_x][pattern_cursor_y-1+visual_pattern_offset]; if(plus) { pattern++; } else { pattern--; } if(pattern >= synth->patterns_height) { pattern = 0; } else if(pattern < 0) { pattern = synth->patterns_height-1; } synth->patterns[pattern_cursor_x][pattern_cursor_y-1+visual_pattern_offset] = pattern; } } static void draw_line(int x0, int y0, int x1, int y1) { double g_vec_x = x1 - x0; double g_vec_y = y1 - y0; double scale_factor = 1.0; double length = sqrt( g_vec_x*g_vec_x + g_vec_y*g_vec_y ); g_vec_x = (g_vec_x/length) * scale_factor; g_vec_y = (g_vec_y/length) * scale_factor; double pos_x = x0; double pos_y = y0; int i = 0; while (i < length) { pos_x += g_vec_x; pos_y += g_vec_y; int i_pos_x = (int)pos_x; int i_pos_y = (int)pos_y; if(instrument_editor_effects) { adsr_invert_y_render(i_pos_x, i_pos_y, color_inactive_text); } else { adsr_invert_y_render(i_pos_x, i_pos_y, color_envelope); } i++; } } static void render_custom_table(double dt) { struct CInstrument *ins = synth->custom_instrument; int max_nodes = ins->adsr_nodes; int inset_x = 50; int inset_y_node = 50; double speed = 0.0008*dt; if(modifier) { speed *= 0.1; } if(selected_custom_table_node_index > 0 && selected_custom_table_node_index < max_nodes-1) { if (pressed_left) { double pos1 = ins->adsr[selected_custom_table_node_index-1]->pos; double pos2 = ins->adsr[selected_custom_table_node_index]->pos; if(pos2 > pos1) { ins->adsr[selected_custom_table_node_index]->pos -= speed; } if(pos2 < pos1) { ins->adsr[selected_custom_table_node_index]->pos = pos1; } } else if(pressed_right) { if(selected_instrument_node_index < max_nodes-1) { double pos1 = ins->adsr[selected_custom_table_node_index]->pos; double pos2 = ins->adsr[selected_custom_table_node_index+1]->pos; if(pos1 < pos2) { ins->adsr[selected_custom_table_node_index]->pos += speed; } if(ins->adsr[selected_custom_table_node_index]->pos > pos2) { ins->adsr[selected_custom_table_node_index]->pos = pos2; } } else if(selected_custom_table_node_index == max_nodes-1) { // last node ins->adsr[selected_custom_table_node_index]->pos += speed; } } } if(pressed_down) { ins->adsr[selected_custom_table_node_index]->amp -= speed; if(ins->adsr[selected_custom_table_node_index]->amp < -1) { ins->adsr[selected_custom_table_node_index]->amp = -1; } } else if(pressed_up) { ins->adsr[selected_custom_table_node_index]->amp += speed; if(ins->adsr[selected_custom_table_node_index]->amp > 1) { ins->adsr[selected_custom_table_node_index]->amp = 1; } } double amp_factor = 100; double pos_factor = 400; int i; for(i = 0; i < 1000; i++) { double g_pos = (i*(pos_factor*0.001)) + inset_x; int top_line_y = 150; int bottom_line_y = -50; int middle_line = 50; adsr_invert_y_render(g_pos, top_line_y, color_text); adsr_invert_y_render(g_pos, middle_line, color_inactive_text); adsr_invert_y_render(g_pos, bottom_line_y, color_text); } for(i = 20; i < 220; i++) { raster2d[50][i] = color_text; raster2d[450][i] = color_text; } for(i = 0; i < max_nodes-1; i++) { struct CadsrNode *node = ins->adsr[i]; struct CadsrNode *node2 = ins->adsr[i+1]; double g_amp = (node->amp*amp_factor) + inset_y_node; double g_pos = (node->pos*pos_factor) + inset_x - envelope_node_camera_offset; double g_amp2 = (node2->amp*amp_factor) + inset_y_node; double g_pos2 = (node2->pos*pos_factor) + inset_x - envelope_node_camera_offset; draw_line((int)g_pos, (int)g_amp, (int)g_pos2, (int)g_amp2); } // render dots for nodes for(i = 0; i < max_nodes; i++) { struct CadsrNode *node = ins->adsr[i]; double g_amp = (node->amp*amp_factor) + inset_y_node; double g_pos = (node->pos*pos_factor) + inset_x; envelope_node_camera_offset = 0; for(int x = -2; x < 2; x++) { for(int y = -2; y < 2; y++) { int color = color_inactive_instrument_node; if(i == selected_custom_table_node_index) { color = color_active_instrument_node; } adsr_invert_y_render(g_pos+x-envelope_node_camera_offset, g_amp+y, color); } } } cSynthWriteCustomTableFromNodes(synth); } static void render_instrument_editor(double dt) { struct CInstrument *ins = synth->instruments[selected_instrument_id]; int max_nodes = ins->adsr_nodes; int inset_x = 10; int inset_y = 30; double speed = 0.0004*dt; if(modifier) { speed *= 0.1; } if(selected_instrument_node_index > 0 && !instrument_editor_effects) { if (pressed_left) { double pos1 = ins->adsr[selected_instrument_node_index-1]->pos; double pos2 = ins->adsr[selected_instrument_node_index]->pos; if(pos2 > pos1) { ins->adsr[selected_instrument_node_index]->pos -= speed; } if(pos2 < pos1) { ins->adsr[selected_instrument_node_index]->pos = pos1; } } else if(pressed_right) { if(selected_instrument_node_index < max_nodes-1) { double pos1 = ins->adsr[selected_instrument_node_index]->pos; double pos2 = ins->adsr[selected_instrument_node_index+1]->pos; if(pos1 < pos2) { ins->adsr[selected_instrument_node_index]->pos += speed; } if(ins->adsr[selected_instrument_node_index]->pos > pos2) { ins->adsr[selected_instrument_node_index]->pos = pos2; } } else if(selected_instrument_node_index == max_nodes-1) { // last node ins->adsr[selected_instrument_node_index]->pos += speed; } } if(pressed_down) { ins->adsr[selected_instrument_node_index]->amp -= speed; if(ins->adsr[selected_instrument_node_index]->amp < 0) { ins->adsr[selected_instrument_node_index]->amp = 0; } } else if(pressed_up) { ins->adsr[selected_instrument_node_index]->amp += speed; if(ins->adsr[selected_instrument_node_index]->amp > 1) { ins->adsr[selected_instrument_node_index]->amp = 1; } } } double amp_factor = 100; double pos_factor = 400; int i; for(i = 0; i < 2000; i++) { double g_pos = (i*(pos_factor*0.001)) + inset_x; int top_line_y = (int)(amp_factor + inset_y); int bottom_line_y = 0 + inset_y; if(instrument_editor_effects) { adsr_invert_y_render(g_pos, top_line_y, color_inactive_text); adsr_invert_y_render(g_pos, bottom_line_y, color_inactive_text); } else { adsr_invert_y_render(g_pos, top_line_y, color_text); adsr_invert_y_render(g_pos, bottom_line_y, color_text); } } for(i = 0; i < max_nodes-1; i++) { struct CadsrNode *node = ins->adsr[i]; struct CadsrNode *node2 = ins->adsr[i+1]; double g_amp = (node->amp*amp_factor) + inset_y; double g_pos = (node->pos*pos_factor) + inset_x - envelope_node_camera_offset; double g_amp2 = (node2->amp*amp_factor) + inset_y; double g_pos2 = (node2->pos*pos_factor) + inset_x - envelope_node_camera_offset; draw_line((int)g_pos, (int)g_amp, (int)g_pos2, (int)g_amp2); } // render dots for nodes for(i = 0; i < max_nodes; i++) { struct CadsrNode *node = ins->adsr[i]; double g_amp = (node->amp*amp_factor) + inset_y; double g_pos = (node->pos*pos_factor) + inset_x; if(i == selected_instrument_node_index) { envelope_node_camera_offset = (int)(g_pos) - (s_width/2); if(envelope_node_camera_offset < 0) { envelope_node_camera_offset = 0; } } for(int x = -2; x < 2; x++) { for(int y = -2; y < 2; y++) { int color = color_inactive_instrument_node; if(instrument_editor_effects) { color = color_inactive_text; } else if(i == selected_instrument_node_index) { color = color_active_instrument_node; } adsr_invert_y_render(g_pos+x-envelope_node_camera_offset, g_amp+y, color); } } } char cval[64]; char c = cSynthGetCharFromParam((char)selected_instrument_id); snprintf(cval, 63, "instrument %c", c); cEngineRenderLabelWithParams(raster2d, cval, 1, 2, color_text, cengine_color_transparent); // render preset instrument effects. int offset_y = 13; for (int x = 0; x < 3; x++) { for (int y = 0; y < visual_instrument_effects; y++) { //effect type char cval[20]; struct CTrackNode *t = synth->instrument_effects[selected_instrument_id][y]; int color = color_text; int bg_color = cengine_color_transparent; if(x == instrument_editor_effects_x && y == instrument_editor_effects_y && instrument_editor_effects) { color = color_edit_text; bg_color = color_edit_marker; } else if(!instrument_editor_effects){ color = color_inactive_text; } if(t != NULL) { if(x == 0) { snprintf(cval, 19, "%c", t->effect); cEngineRenderLabelWithParams(raster2d, cval, x+1, y+offset_y, color, bg_color); } if(x == 1) { snprintf(cval, 19, "%c", t->effect_param1); cEngineRenderLabelWithParams(raster2d, cval, x+1, y+offset_y, color, bg_color); } if(x == 2) { snprintf(cval, 19, "%c", t->effect_param2); cEngineRenderLabelWithParams(raster2d, cval, x+1, y+offset_y, color, bg_color); } } else { cEngineRenderLabelWithParams(raster2d, "-", x+1, y+offset_y, color, bg_color); } } } } static void adsr_invert_y_render(double x, double y, int color) { int i_x = (int)x; int i_y = (int)y/-1+170; if(check_screen_bounds(i_x, i_y)) { raster2d[i_x][i_y] = color; } } static void render_pattern_mapping(void) { int inset_x = 5; int inset_y = 1; for (int x = 0; x < synth->patterns_and_voices_width; x++) { for (int y = 0; y < synth->patterns_and_voices_height; y++) { int bg_color = cengine_color_transparent; int color = color_text; if(x == pattern_cursor_x && y == pattern_cursor_y) { bg_color = color_edit_marker; color = color_edit_text; } if(y == 0) { int wave_color = color; if(synth->solo_voice > -1) { if(x == synth->solo_voice) { wave_color = color_solo_text; bg_color = color_solo; } else { wave_color = color_mute_text; bg_color = color_mute; } } else if(synth->voices[x]->muted == 1) { wave_color = color_mute_text; bg_color = color_mute; } if(x == pattern_cursor_x && y == pattern_cursor_y) { bg_color = color_edit_marker; wave_color = color_edit_text; } int val = synth->patterns_and_voices[x][y]; char cval[4]; snprintf(cval, 3, "%d", val); cEngineRenderLabelWithParams(raster2d, get_wave_type_as_char(val), x*10+inset_x, y+inset_y, wave_color, bg_color); } else if(y == 17) { char cval[10]; int ins_nr = x; char c = cSynthGetCharFromParam((char)ins_nr); snprintf(cval, 9, "ins %c", c); cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 18) { char cval[10]; int ins_nr = x; ins_nr += 6; char c = cSynthGetCharFromParam((char)ins_nr); snprintf(cval, 9, "ins %c", c); cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 19 && x < 4) { char cval[10]; int ins_nr = x; ins_nr += 12; char c = cSynthGetCharFromParam((char)ins_nr); snprintf(cval, 9, "ins %c", c); cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20 && x == 0) { cEngineRenderLabelWithParams(raster2d, "wavetable", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 21 && x == 2) { cEngineRenderLabelWithParams(raster2d, "cust edit", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20 && x == 1) { char cval[10]; snprintf(cval, 9, "amp %d%%", synth->master_amp_percent); if(synth->audio_clips) { bg_color = color_file_name_text; synth->audio_clips = false; } cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20 && x == 2) { char cval[20]; snprintf(cval, 19, "rows %d", synth->track_height); cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20 && x == 3) { char cval[20]; snprintf(cval, 19, "arp %d", synth->arpeggio_speed); cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20 && x == 4) { cEngineRenderLabelWithParams(raster2d, "tempo", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20 && x == 5) { cEngineRenderLabelWithParams(raster2d, "visual", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 21 && x == 0) { if(synth->preview_enabled) { cEngineRenderLabelWithParams(raster2d, "preview 1", x*10+inset_x, y+inset_y, color, bg_color); } else { cEngineRenderLabelWithParams(raster2d, "preview 0", x*10+inset_x, y+inset_y, color, bg_color); } } else if(y == 21 && x == 1) { cEngineRenderLabelWithParams(raster2d, "help", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 21 && x == 5) { cEngineRenderLabelWithParams(raster2d, "credits", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 19) { //nothing cEngineRenderLabelWithParams(raster2d, "-", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 20) { //nothing cEngineRenderLabelWithParams(raster2d, "-", x*10+inset_x, y+inset_y, color, bg_color); } else if(y == 21) { //nothing cEngineRenderLabelWithParams(raster2d, "-", x*10+inset_x, y+inset_y, color, bg_color); } else { color = color_inactive_text; if(synth->active_tracks[y-1+visual_pattern_offset] == 1) { bg_color = color_active_row; color = color_active_row_text; if(synth->solo_track == y-1+visual_pattern_offset) { bg_color = color_solo; color = color_solo_text; } } if(synth->solo_track == y-1) { bg_color = color_solo; color = color_solo_text; } if(y-1+visual_pattern_offset == synth->current_track && playing) { if(synth->current_track == synth->solo_track) { bg_color = color_solo; } else { bg_color = color_playing_row; } color = color_playing_row_text; } if(x == pattern_cursor_x && y == pattern_cursor_y) { bg_color = color_edit_marker; color = color_edit_text; } int pattern = synth->patterns[x][y-1+visual_pattern_offset]; char cval[4]; snprintf(cval, 3, "%d", pattern); cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); if(x == 0) { // print track numbers int track_nr = y-1+visual_pattern_offset; char cval[4]; snprintf(cval, 3, "%d", track_nr); int x_offset = 1; if(track_nr < 10) { x_offset = 2; } cEngineRenderLabelWithParams(raster2d, cval, x_offset, y+1, color_text, cengine_color_transparent); } } } } int pattern_at_cursor = -1; int track_at_cursor = -1; if(pattern_cursor_y > 0 && pattern_cursor_y < 17) { track_at_cursor = pattern_cursor_y-1+visual_pattern_offset; pattern_at_cursor = synth->patterns[pattern_cursor_x][pattern_cursor_y-1+visual_pattern_offset]; } if(track_at_cursor > -1 && pattern_at_cursor > -1) { char cval[20]; snprintf(cval, 19, "p:%d t:%d", pattern_at_cursor, track_at_cursor); cEngineRenderLabelWithParams(raster2d, cval, 55, 23, cengine_color_white, cengine_color_transparent); } } static char *get_wave_type_as_char(int type) { if(type == 0) { return "sine"; } if(type == 1) { return "saw"; } if(type == 2) { return "sqr"; } if(type == 3) { return "tri"; } if(type == 4) { return "nois"; } if(type == 5) { return "cust"; } return "error"; } static void draw_wave_types(void) { for (int x = 0; x < synth->patterns_and_voices_width; x++) { int val = synth->patterns_and_voices[x][0]; int wave_color = color_text; if(synth->solo_voice > -1) { if(x == synth->solo_voice) { wave_color = color_solo; } else { wave_color = color_mute; } } else if(synth->voices[x]->muted == 1) { wave_color = color_mute; } cEngineRenderLabelWithParams(raster2d, get_wave_type_as_char(val), 2+x*10, -visual_cursor_y+5, wave_color, cengine_color_transparent); } } static void render_visualiser(void) { for(int x = 0; x < s_width; x++) { for(int y = 0; y < s_height; y++) { raster2d[x][y] = visualiser2d[x][y]; } } } int is_in_bounds(int x, int y, int width, int height) { if(x > -1 && y > -1 && x < width && y < height) { return 1; } else { return 0; } } static void render_tempo_editor(double dt) { int inset_x = 5; int inset_y = 1; if(synth->pending_tempo_column > -1) { redraw_screen = true; synth->pending_tempo_blink_counter += dt; if (synth->pending_tempo_blink_counter > 200) { synth->pending_tempo_blink_counter_toggle = !synth->pending_tempo_blink_counter_toggle; synth->pending_tempo_blink_counter = 0; } } for(int x = 0; x < synth->tempo_width; x++) { for(int y = 0; y < synth->tempo_height; y++) { if(x == 0 && y > 0) { // print track numbers int track_nr = y-1; char cval[4]; snprintf(cval, 3, "%d", track_nr); int x_offset = 1; if(track_nr < 10) { x_offset = 2; } cEngineRenderLabelWithParams(raster2d, cval, x_offset, y+1, color_text, cengine_color_transparent); } int color = color_inactive_text; int bg_color = cengine_color_transparent; char cval[10]; struct CTempoNode *t = synth->tempo_map[x][y]; if(synth->current_tempo_column == x) { if(t->active) { bg_color = color_active_row; color = color_active_row_text; } else { color = color_text; } if(synth->tempo_index == y && playing) { if(t->active) { bg_color = color_playing_row; color = color_playing_row_text; } } } else if(synth->pending_tempo_column == x) { if(t->active && synth->pending_tempo_blink_counter_toggle) { bg_color = color_active_row; color = color_active_row_text; } } else { if(t->active) { bg_color = color_inactive_text; color = color_active_row_text; } } if(tempo_selection_x == x && tempo_selection_y == y) { bg_color = color_edit_marker; color = color_edit_text; } if (y == 0) { int bpm = t->bpm; snprintf(cval, 9, "BPM %d", bpm); } else { char node_value = t->ticks; char c = cSynthGetCharFromParam((char)node_value); snprintf(cval, 9, "%c", c); } cEngineRenderLabelWithParams(raster2d, cval, x*10+inset_x, y+inset_y, color, bg_color); } } } static void render_reset_confirmation(double dt) { for(int x = 0; x < s_width; x++) { for(int y = 0; y < s_height; y++) { raster2d[x][y] = color_bg; } } cEngineRenderLabelWithParams(raster2d, "Reset project? Press [RETURN] to reset or [ESCAPE].", 2, 3, color_text, cengine_color_transparent); } static void render_wavetable_editor(double dt) { int inset_x = 5; int inset_y = 1; bool h_switch = true; for(int x = 0; x < synth->wavetable_width; x++) { for(int y = 0; y < synth->wavetable_height; y++) { if(x == 0 && y > 1) { // print track numbers int track_nr = y-2; char cval[4]; snprintf(cval, 3, "%d", track_nr); int x_offset = 1; if(track_nr < 10) { x_offset = 2; } cEngineRenderLabelWithParams(raster2d, cval, x_offset, y+1, color_text, cengine_color_transparent); } int color = color_inactive_text; int bg_color = cengine_color_transparent; char cval[20]; struct CWavetableNode *t = synth->wavetable_map[x][y]; if(t->active || (y == 0 && h_switch)) { color = color_text; } if(wavetable_selection_x == x && wavetable_selection_y == y) { bg_color = color_edit_marker; color = color_edit_text; } if(h_switch) { if (y == 0) { snprintf(cval, 19, "speed %d", t->speed); cEngineRenderLabelWithParams(raster2d, cval, x*5+inset_x, y+inset_y, color, bg_color); } else if (y == 1) { cEngineRenderLabelWithParams(raster2d, "loop", x*5+inset_x, y+inset_y, color, bg_color); } else { char node_value = t->value; char c = cSynthGetCharFromParam((char)node_value); snprintf(cval, 19, "%c", c); cEngineRenderLabelWithParams(raster2d, get_wave_type_as_char(node_value), x*5+inset_x, y+inset_y, color, bg_color); } } else { if (y > 1) { struct CWavetableNode *p_t = synth->wavetable_map[x-1][y]; if(p_t->active) { color = color_text; } else { color = color_inactive_text; } char node_value = t->value; char c = cSynthGetCharFromParam((char)node_value); snprintf(cval, 19, "%c", c); cEngineRenderLabelWithParams(raster2d, cval, x*5+inset_x, y+inset_y, color, bg_color); } } } if(h_switch) { inset_x = 5; } else { inset_x = 5; } h_switch = !h_switch; } } static void render_track(double dt) { if(help) { render_help(); return; } else if(credits) { render_credits(); return; } else if(reset_confirmation) { render_reset_confirmation(dt); return; } else if(visualiser && !instrument_editor && !file_editor) { render_visualiser(); return; } else if(instrument_editor && !file_editor && !tempo_editor && !visualiser) { render_instrument_editor(dt); return; } else if(custom_table && !file_editor && !tempo_editor && !visualiser) { render_custom_table(dt); return; } else if(tempo_editor && !file_editor) { render_tempo_editor(dt); return; } else if(wavetable_editor && !file_editor) { render_wavetable_editor(dt); return; } else if(pattern_editor && !file_editor) { render_pattern_mapping(); return; } else if(file_editor) { render_files(); return; } int x_count = 0; int offset_x = 0; int inset_x = 2; int inset_y = 6; int cursor_x = visual_cursor_x/5; cSynthUpdateTrackCursor(synth, cursor_x, visual_cursor_y); int track_progress_int = synth->track_progress_int; draw_wave_types(); if(follow && playing) { int diff = track_progress_int - visual_cursor_y; set_visual_cursor(0, diff, false); } else { track_progress_int = visual_cursor_y; } int node_x = -1; int node_y = -1; int node_y_bright = 0; for (int y = 0; y < synth->track_height; y++) { offset_x = 0; node_y++; if(node_y > synth->track_highlight_interval-1) { node_y = 0; } for (int x = 0; x < visual_track_width; x++) { int bg_color = 0; int color = color_text; if(x >= 0 && x < 5) { bg_color = color_bg1; if(node_y == node_y_bright) { bg_color = color_bg1_highlight; } } if(x >= 5 && x < 10) { bg_color = color_bg2; if(node_y == node_y_bright) { bg_color = color_bg2_highlight; } } if(x >= 10 && x < 15) { bg_color = color_bg3; if(node_y == node_y_bright) { bg_color = color_bg3_highlight; } } if(x >= 15 && x < 20) { bg_color = color_bg4; if(node_y == node_y_bright) { bg_color = color_bg4_highlight; } } if(x >= 20 && x < 25) { bg_color = color_bg5; if(node_y == node_y_bright) { bg_color = color_bg5_highlight; } } if(x >= 25 && x < 30) { bg_color = color_bg6; if(node_y == node_y_bright) { bg_color = color_bg6_highlight; } } node_x = (int)floor(x/5); if(selection_enabled && editing) { int sel_x = (int)floor(selection_x/5); int vis_x = (int)floor(visual_cursor_x/5); bool inside_selection_x = false; bool inside_selection_y = false; if(sel_x < vis_x) { if(node_x >= sel_x && node_x <= vis_x) { inside_selection_x = true; } } else { if(node_x >= vis_x && node_x <= sel_x) { inside_selection_x = true; } } if(selection_y < visual_cursor_y) { if(y >= selection_y && y <= visual_cursor_y) { inside_selection_y = true; } } else { if(y >= visual_cursor_y && y <= selection_y) { inside_selection_y = true; } } if(inside_selection_x && inside_selection_y && editing) { color = color_selection_text; bg_color = color_selection_marker; if(visual_cursor_x == x && visual_cursor_y == y) { bg_color = color_edit_marker; } } } if(synth->track_progress_int == y && playing == 1) { if(synth->current_track == current_track) { bg_color = color_playing_row; color = color_playing_row_text; } } if(visual_cursor_x == x && visual_cursor_y == y) { if(editing == 1) { bg_color = color_edit_marker; color = color_edit_text; } else { bg_color = color_marker; } } int pos_y = inset_y+y-track_progress_int; if(x == 0 || x == 5 || x == 10 || x == 15 || x == 20 || x == 25) { int pattern = synth->patterns[node_x][current_track]; struct CTrackNode *t = synth->track[pattern][node_x][y]; if(t != NULL && t->tone_active) { int tone = t->tone; char *ctone = cSynthToneToChar(tone); cEngineRenderLabelWithParams(raster2d, ctone, inset_x+x+offset_x, pos_y, color, bg_color); } else { cEngineRenderLabelWithParams(raster2d, " - ", inset_x+x+offset_x, pos_y, color, bg_color); } offset_x += 3; } else { int pattern = synth->patterns[node_x][current_track]; struct CTrackNode *t = synth->track[pattern][node_x][y]; if(t != NULL) { if(x_count == 1) { if(t->instrument != NULL) { char cval[20]; char c = cSynthGetCharFromParam((char)t->instrument_nr); snprintf(cval, 19, "%c", c); cEngineRenderLabelWithParams(raster2d, cval, inset_x+x+offset_x, pos_y, color, bg_color); } else { cEngineRenderLabelWithParams(raster2d, "-", inset_x+x+offset_x, pos_y, color, bg_color); } } else if(x_count == 2) { //effect type char cval[20]; snprintf(cval, 19, "%c", t->effect); cEngineRenderLabelWithParams(raster2d, cval, inset_x+x+offset_x, pos_y, color, bg_color); } else if(x_count == 3) { //effect type char cval[20]; snprintf(cval, 19, "%c", t->effect_param1); cEngineRenderLabelWithParams(raster2d, cval, inset_x+x+offset_x, pos_y, color, bg_color); } else if(x_count == 4) { //effect type char cval[20]; snprintf(cval, 19, "%c", t->effect_param2); cEngineRenderLabelWithParams(raster2d, cval, inset_x+x+offset_x, pos_y, color, bg_color); } } else { cEngineRenderLabelWithParams(raster2d, "-", inset_x+x+offset_x, pos_y, color, bg_color); } if(x_count == 1 || x_count == 4) { offset_x++; } } x_count++; if(x_count == 5) { x_count = 0; } } int pattern_at_cursor = synth->patterns[cursor_x][current_track]; current_pattern = pattern_at_cursor; char cval[20]; snprintf(cval, 19, "p:%d t:%d r:%d", current_pattern, current_track, visual_cursor_y); cEngineRenderLabelWithParams(raster2d, cval, 50, 23, color_text, color_text_bg); } } static void setup_sdl(void) { SDL_Init(SDL_INIT_VIDEO); // Get current display mode of all displays. int i; SDL_DisplayMode current; for(i = 0; i < SDL_GetNumVideoDisplays(); ++i) { int should_be_zero = SDL_GetCurrentDisplayMode(i, ¤t); if(should_be_zero != 0) { // In case of error... if(debuglog) { SDL_Log("Could not get display mode for video display #%d: %s", i, SDL_GetError()); } st_pause(); } else { // On success, print the current display mode. if(debuglog) { SDL_Log("Display #%d: current display mode is %dx%dpx @ %dhz. \n", i, current.w, current.h, current.refresh_rate); } } } if(fullscreen) { window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP); } else { window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL); } if(window != NULL) { context = SDL_GL_CreateContext(window); if(context == NULL) { printf("\nFailed to create context: %s\n", SDL_GetError()); st_pause(); } renderer = SDL_CreateRenderer(window, -1, 0); if (renderer != NULL) { texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, s_width, s_height); if(fullscreen) { SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); // make the scaled rendering look smoother. SDL_RenderSetLogicalSize(renderer, width, height); } SDL_GL_SetSwapInterval(1); char title_string[256]; snprintf(title_string, 255, "%s", title); SDL_SetWindowTitle(window, title_string); visual_track_height = synth->track_height; } else { if(errorlog) { printf("Failed to create renderer: %s", SDL_GetError()); } st_pause(); } } else { if(errorlog) { printf("Failed to create window:%s", SDL_GetError()); } st_pause(); } } static void setup_synth(void) { synth = cSynthContextNew(); synth->interleaved = true; synth->debuglog = debuglog; synth->errorlog = errorlog; synth->chunk_size = 64; synth->preview_enabled = preview_enabled; cSynthInit(synth); visual_track_height = synth->track_height; } static void setup_texture(void) { // contains an integer for every color/pixel on the sheet. raw_sheet = cAllocatorAlloc((sheet_width*sheet_height) * sizeof(unsigned int), "main.c raw_sheet 1"); for(int r = 0; r < sheet_width*sheet_height; r++) { raw_sheet[r] = 0; } // load gfx from source. for (int i = 0; i < 1024*16; i++) { raw_sheet[i] = chars_gfx[i]; } cEngineWritePixelData(raw_sheet); raw_sheet = cAllocatorFree(raw_sheet); } static void destroy_sdl(void) { SDL_DestroyTexture(texture); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); } static int setup_sdl_audio(void) { SDL_Init(SDL_INIT_AUDIO | SDL_INIT_TIMER); SDL_AudioSpec want; SDL_zero(want); SDL_zero(audioSpec); want.freq = synth->sample_rate; want.format = AUDIO_S16LSB; want.channels = 2; want.samples = bufferSize; want.callback = audio_callback; if(debuglog) { printf("\naudioSpec want\n"); printf("----------------\n"); printf("sample rate:%d\n", want.freq); printf("channels:%d\n", want.channels); printf("samples:%d\n", want.samples); printf("----------------\n\n"); } AudioDevice = SDL_OpenAudioDevice(NULL, 0, &want, &audioSpec, 0); if(debuglog) { printf("\naudioSpec get\n"); printf("----------------\n"); printf("sample rate:%d\n", audioSpec.freq); printf("channels:%d\n", audioSpec.channels); printf("samples:%d\n", audioSpec.samples); printf("size:%d\n", audioSpec.size); printf("----------------\n"); } if (AudioDevice == 0) { if(errorlog) { printf("\nFailed to open audio: %s\n", SDL_GetError()); } st_pause(); return 1; } if (audioSpec.format != want.format) { if(errorlog) { printf("\nCouldn't get requested audio format.\n"); } st_pause(); return 2; } int frameRate = synth->frame_rate; int sampleRate = audioSpec.freq; bufferSize = audioSpec.samples; samplesPerFrame = sampleRate/frameRate; msPerFrame = 1000/frameRate; audioMainLeftOff = samplesPerFrame*8; SDL_AtomicSet(&audioCallbackLeftOff, 0); SDL_PauseAudioDevice(AudioDevice, 0);// unpause audio. return 0; } static void setup_cengine(void) { struct CEngineContext *c = cEngineContextNew(); c->width = s_width; c->height = s_height; c->sprite_size = 16; c->max_touches = 8; c->level_width = 64; c->level_height = 64; c->color_mode_argb = true; c->color_mode_rgba = false; c->show_fps = false; c->ground_render_enabled = false; cEngineInit(c); input = c->input; } static void cleanup_synth(void) { if(debuglog) { printf("allocs before cleanup:\n"); } cAllocatorPrintAllocationCount(); cleanup_data(); if(debuglog) { printf("allocs after cleanup:\n"); } cAllocatorPrintAllocations(); cAllocatorPrintAllocationCount(); // If allocation tracking is on, clean up the last stuff. cAllocatorCleanup(); } static int get_delta(void) { int currentTime = SDL_GetTicks(); int delta = 0; if(old_time == 0) { old_time = currentTime; delta = 16; } else { delta = currentTime-old_time; old_time = currentTime; if(delta <= 0) { delta = 1; } } if(fps_print_interval >= print_interval_limit) { fps_print_interval = 0; } fps_print_interval++; return delta; } static void main_loop(void) { int delay_ms = active_render_delay_ms; if(passive_rendering == false) { delay_ms = passive_render_delay_ms; } check_sdl_events(event); cInputApplyPendingLocks(input); if(instrument_editor) { synth->needs_redraw = true; } if(custom_table) { synth->needs_redraw = true; } if(credits) { synth->needs_redraw = true; } if(tempo_editor) { synth->needs_redraw = true; } if(visualiser) { synth->needs_redraw = true; } if(any_key_pressed && !synth->preview_locked) { synth->sustain_active = true; synth->preview_locked = true; } else if(!any_key_pressed && synth->preview_locked) { synth->preview_locked = false; synth->preview_started = false; cSynthTurnOffSustain(synth); } update_info(last_dt); if(redraw_screen || synth->needs_redraw || !passive_rendering) { render_track(last_dt); render_info(); for (int r_x = 0; r_x < s_width; r_x++) { for (int r_y = 0; r_y < s_height; r_y++) { raster[r_x+r_y*s_width] = raster2d[r_x][r_y]; } } for(int x = 0; x < s_width; x++) { for(int y = 0; y < s_height; y++) { raster2d[x][y] = color_bg; } } redraw_screen = false; synth->needs_redraw = false; } SDL_UpdateTexture(texture, NULL, raster, s_width * sizeof (unsigned int)); SDL_RenderClear(renderer); SDL_RenderCopy(renderer, texture, NULL, NULL); SDL_RenderPresent(renderer); int dt = get_delta(); last_dt = dt; int wait_time = delay_ms-dt; if(dt < 10) { SDL_Delay(wait_time); } } static void debug_log(char *str) { // TODO need to use write safe location before using this. if(log_file_enabled) { FILE * fp; fp = fopen ("log.txt", "a"); fprintf(fp, "%s\n", str); fclose(fp); } } static int get_buffer_size_from_index(int i) { switch (i) { case 1: return 256; break; case 2: return 512; break; case 3: return 1024; break; case 4: return 2048; break; case 5: return 4096; break; case 6: return 8192; break; case 7: return 16384; break; default: return 4096; break; } } static void copy_project_win(const char *name) { char *read_path = cAllocatorAlloc((1024 * sizeof(char*)), "win path 1"); snprintf(read_path, 1023, "%s%s", "demos\\", name); char *write_path = cAllocatorAlloc((1024 * sizeof(char*)), "win path 2"); snprintf(write_path, 1023, "%s%s", conf_default_dir, name); char *b = load_file(read_path); if(b != NULL) { FILE * fp; fp = fopen(write_path, "w+"); if(fp != NULL) { if(debuglog) { printf("writing file at path %s", write_path); } fprintf(fp, "%s", b); fclose(fp); } } else { if(debuglog) { printf("could not load file %s", read_path); } } cAllocatorFree(read_path); cAllocatorFree(write_path); } static void load_config(void) { // for windows bool success = false; char *path = cAllocatorAlloc((1024 * sizeof(char*)), "config path"); snprintf(path, 1023, "%sconfig.txt", conf_default_dir); char *b = load_file(path); if(b != NULL) { success = parse_config(b); cAllocatorFree(b); } if(!success) { if(debuglog) { printf("could not find config file. Writing config.txt and copying demo projects to %s\n", path); } bufferSize = 8192; FILE * fp; fp = fopen(path, "w+"); if(fp != NULL) { fprintf(fp, "%s", "{\r\n\"buffer_size\":4096,\r\n\"buffer_size_info\":\"Must be a power of two, for example 256, 512, 1024, 2048, 4096, 8192, 16384\",\r\n\"fullscreen\":false,\r\n\"preview\":true,\r\n\"color_info_text_bg\" : {\"r\" : 0, \"g\" : 0, \"b\" : 0},\r\n\"color_file_name_text\" : {\"r\" : 250, \"g\" : 100, \"b\" : 100},\r\n\"color_inactive_instrument_node\" : {\"r\" : 100, \"g\" : 100, \"b\" : 0},\r\n\"color_active_instrument_node\" : {\"r\" : 255, \"g\" : 100, \"b\" : 0},\r\n\"color_envelope\" : {\"r\" : 0, \"g\" : 100, \"b\" : 100},\r\n\"color_visualiser\" : {\"r\" : 100, \"g\" : 250, \"b\" : 100},\r\n\"color_visualiser_clipping\" : {\"r\" : 250, \"g\" : 100, \"b\" : 100},\r\n\"color_inactive_text\" : {\"r\" : 100, \"g\" : 100, \"b\" : 100},\r\n\"color_text\" : {\"r\" : 240, \"g\" : 240, \"b\" : 240},\r\n\"color_text_bg\" : {\"r\" : 0, \"g\" : 0, \"b\" : 0},\r\n\"color_marker\" : {\"r\" : 100, \"g\" : 100, \"b\" : 0},\r\n\"color_solo\" : {\"r\" : 0, \"g\" : 0, \"b\" : 100},\r\n\"color_solo_text\" : {\"r\" : 255, \"g\" : 255, \"b\" : 255},\r\n\"color_mute\" : {\"r\" : 200, \"g\" : 0, \"b\" : 0},\r\n\"color_mute_text\" : {\"r\" : 255, \"g\" : 255, \"b\" : 255},\r\n\"color_active_row\" : {\"r\" : 0, \"g\" : 100, \"b\" : 100},\r\n\"color_active_row_text\" : {\"r\" : 0, \"g\" : 0, \"b\" : 0},\r\n\"color_playing_row\" : {\"r\" : 100, \"g\" : 250, \"b\" : 100},\r\n\"color_playing_row_text\" : {\"r\" : 0, \"g\" : 0, \"b\" : 0},\r\n\"color_edit_marker\" : {\"r\" : 255, \"g\" : 100, \"b\" : 0},\r\n\"color_edit_text\" : {\"r\" : 0, \"g\" : 0, \"b\" : 0},\r\n\"color_selection_marker\" : {\"r\" : 0, \"g\" : 255, \"b\" : 255},\r\n\"color_selection_text\" : {\"r\" : 0, \"g\" : 0, \"b\" : 0},\r\n\"color_bg\" : {\"r\" : 20, \"g\" : 20, \"b\" : 20},\r\n\"color_bg1\" : {\"r\" : 60, \"g\" : 60, \"b\" : 60},\r\n\"color_bg2\" : {\"r\" : 60, \"g\" : 60, \"b\" : 60},\r\n\"color_bg3\" : {\"r\" : 60, \"g\" : 60, \"b\" : 60},\r\n\"color_bg4\" : {\"r\" : 60, \"g\" : 60, \"b\" : 60},\r\n\"color_bg5\" : {\"r\" : 60, \"g\" : 60, \"b\" : 60},\r\n\"color_bg6\" : {\"r\" : 60, \"g\" : 60, \"b\" : 60},\r\n\"color_bg1_highlight\" : {\"r\" : 40, \"g\" : 40, \"b\" : 40},\r\n\"color_bg2_highlight\" : {\"r\" : 40, \"g\" : 40, \"b\" : 40},\r\n\"color_bg3_highlight\" : {\"r\" : 40, \"g\" : 40, \"b\" : 40},\r\n\"color_bg4_highlight\" : {\"r\" : 40, \"g\" : 40, \"b\" : 40},\r\n\"color_bg5_highlight\" : {\"r\" : 40, \"g\" : 40, \"b\" : 40},\r\n\"color_bg6_highlight\" : {\"r\" : 40, \"g\" : 40, \"b\" : 40}\r\n}\r\n"); fclose(fp); } b = load_file(path); if(b != NULL) { success = parse_config(b); cAllocatorFree(b); copy_project_win("catslayer.snibb"); copy_project_win("dunsa2.snibb"); copy_project_win("fiskbolja.snibb"); copy_project_win("horizon.snibb"); copy_project_win("kissemisse.snibb"); copy_project_win("korvhastig.snibb"); copy_project_win("websnacks.snibb"); copy_project_win("wrestchest.snibb"); copy_project_win("projectcart.snibb"); } else { if(debuglog) { printf("could not find config file after writing. path:%s\n", path); } } } path = cAllocatorFree(path); } static unsigned int get_color_from_json_config(cJSON *color_obj) { cJSON *rgb_obj = NULL; unsigned int ret = 0; if(color_obj != NULL) { rgb_obj = cJSON_GetObjectItem(color_obj, "r"); int r = rgb_obj->valueint; rgb_obj = cJSON_GetObjectItem(color_obj, "g"); int g = rgb_obj->valueint; rgb_obj = cJSON_GetObjectItem(color_obj, "b"); int b = rgb_obj->valueint; if(r > 254) { r = 254; } if(g > 254) { g = 254; } if(b > 254) { b = 254; } unsigned char c_r = (unsigned char)r; unsigned char c_g = (unsigned char)g; unsigned char c_b = (unsigned char)b; ret = (255 << 24) | ((unsigned char)c_r << 16) | ((unsigned char)c_g << 8) | (unsigned char)c_b; } return ret; } static bool parse_config(char *json) { cJSON *root = NULL; cJSON *object = NULL; char *param_buffer_size = "buffer_size"; char *param_fullscreen = "fullscreen"; char *param_preview = "preview"; char *param_color_info_text_bg = "color_info_text_bg"; char *param_color_file_name_text = "color_file_name_text"; char *param_color_inactive_instrument_node = "color_inactive_instrument_node"; char *param_color_active_instrument_node = "color_active_instrument_node"; char *param_color_visualiser = "color_visualiser"; char *param_color_visualiser_clipping = "color_visualiser_clipping"; char *param_color_envelope = "color_envelope"; char *param_color_inactive_text = "color_inactive_text"; char *param_color_text = "color_text"; char *param_color_text_bg = "color_text_bg"; char *param_color_marker = "color_marker"; char *param_color_solo = "color_solo"; char *param_color_solo_text = "color_solo_text"; char *param_color_mute = "color_mute"; char *param_color_mute_text = "color_mute_text"; char *param_color_active_row = "color_active_row"; char *param_color_active_row_text = "color_active_row_text"; char *param_color_playing_row = "color_playing_row"; char *param_color_playing_row_text = "color_playing_row_text"; char *param_color_edit_marker = "color_edit_marker"; char *param_color_edit_text = "color_edit_text"; char *param_color_selection_marker = "color_selection_marker"; char *param_color_selection_text = "color_selection_text"; char *param_color_bg = "color_bg"; char *param_color_bg1 = "color_bg1"; char *param_color_bg2 = "color_bg2"; char *param_color_bg3 = "color_bg3"; char *param_color_bg4 = "color_bg4"; char *param_color_bg5 = "color_bg5"; char *param_color_bg6 = "color_bg6"; char *param_color_bg1_highlight = "color_bg1_highlight"; char *param_color_bg2_highlight = "color_bg2_highlight"; char *param_color_bg3_highlight = "color_bg3_highlight"; char *param_color_bg4_highlight = "color_bg4_highlight"; char *param_color_bg5_highlight = "color_bg5_highlight"; char *param_color_bg6_highlight = "color_bg6_highlight"; root = cJSON_Parse(json); if(root != NULL) { // buffer size object = cJSON_GetObjectItem(root, param_buffer_size); if(object != NULL) { bufferSize = 8192; int buffer_index_value = object->valueint; bufferSize = (Uint16)buffer_index_value; } else { if(errorlog) { printf("could not find buffersize in config.\n"); } } // fullscreen object = cJSON_GetObjectItem(root, param_fullscreen); if(object != NULL) { bool fullscreen_value = object->valueint; if(fullscreen_value) { if(debuglog) { printf("fullscreen in config is true\n"); } fullscreen = true; } else { if(debuglog) { printf("fullscreen in config is false\n"); } fullscreen = false; } } else { if(debuglog) { printf("could not find fullscreen in config.\n"); } } // preview object = cJSON_GetObjectItem(root, param_preview); if(object != NULL) { bool fullscreen_value = object->valueint; if(fullscreen_value) { if(debuglog) { printf("preview in config is true\n"); } preview_enabled = true; } else { if(debuglog) { printf("preview in config is false\n"); } preview_enabled = false; } } else { if(debuglog) { printf("could not find preview in config.\n"); } } object = cJSON_GetObjectItem(root, param_color_info_text_bg); if(object != NULL) { color_info_text_bg = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_file_name_text); if(object != NULL) { color_file_name_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_inactive_instrument_node); if(object != NULL) { color_inactive_instrument_node = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_active_instrument_node); if(object != NULL) { color_active_instrument_node = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_envelope); if(object != NULL) { color_envelope = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_visualiser); if(object != NULL) { color_visualiser = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_visualiser_clipping); if(object != NULL) { color_visualiser_clipping = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_inactive_text); if(object != NULL) { color_inactive_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_text); if(object != NULL) { color_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_text_bg); if(object != NULL) { color_text_bg = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_marker); if(object != NULL) { color_marker = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_solo); if(object != NULL) { color_solo = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_solo_text); if(object != NULL) { color_solo_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_mute); if(object != NULL) { color_mute = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_mute_text); if(object != NULL) { color_mute_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_active_row); if(object != NULL) { color_active_row = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_active_row_text); if(object != NULL) { color_active_row_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_playing_row); if(object != NULL) { color_playing_row = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_playing_row_text); if(object != NULL) { color_playing_row_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_edit_marker); if(object != NULL) { color_edit_marker = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_edit_text); if(object != NULL) { color_edit_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_selection_marker); if(object != NULL) { color_selection_marker = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_selection_text); if(object != NULL) { color_selection_text = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg); if(object != NULL) { color_bg = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg1); if(object != NULL) { color_bg1 = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg2); if(object != NULL) { color_bg2 = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg3); if(object != NULL) { color_bg3 = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg4); if(object != NULL) { color_bg4 = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg5); if(object != NULL) { color_bg5 = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg6); if(object != NULL) { color_bg6 = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg1_highlight); if(object != NULL) { color_bg1_highlight = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg2_highlight); if(object != NULL) { color_bg2_highlight = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg3_highlight); if(object != NULL) { color_bg3_highlight = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg4_highlight); if(object != NULL) { color_bg4_highlight = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg5_highlight); if(object != NULL) { color_bg5_highlight = get_color_from_json_config(object); } object = cJSON_GetObjectItem(root, param_color_bg6_highlight); if(object != NULL) { color_bg6_highlight = get_color_from_json_config(object); } cJSON_Delete(root); return true; } return false; } static void st_pause(void) { SDL_Delay(5000); } static void st_log(char *message) { if(debuglog) { printf("*** %s \n", message); } } int main(int argc, char* argv[]) { // override to use exe dir as default_dir bool path_defined = false; #if defined(platform_windows) char *b = load_file("exe_dir_as_workspace.txt"); if(b != NULL) { path_defined = true; conf_default_dir = cAllocatorAlloc((1024 * sizeof(char*)), "conf default dir exe dir"); snprintf(conf_default_dir, 1023, "%s", ""); printf("exe dir override found. default dir:%s\n", conf_default_dir); cAllocatorFree(b); } #endif // get path from SDL2 if(path_defined == false) { char *pref_path = SDL_GetPrefPath("lundstroem", "snibbetracker"); if (pref_path != NULL) { conf_default_dir = cAllocatorAlloc((1024 * sizeof(char*)), "conf default dir 2"); snprintf(conf_default_dir, 1023, "%s", pref_path); printf("default dir:%s\n", conf_default_dir); } else { if(debuglog) { printf("SDL_GetPrefPath returned NULL\n"); } } } #if defined(platform_windows) load_config(); st_log("started executing."); #elif defined(platform_osx) //osx, load from bundle char *settings = get_settings_json(); parse_config(settings); if(conf_default_dir != NULL) { copy_demo_songs(conf_default_dir); } free(settings); #else //linux #endif init_data(); st_log("init data successful."); setup_cengine(); st_log("setup cengine successful."); setup_synth(); st_log("setup synth successful."); if(run_with_sdl) { setup_texture(); st_log("setup texture successful."); setup_sdl(); st_log("setup SDL successful."); setup_sdl_audio(); st_log("setup SDL audio successful."); } if(run_with_sdl) { if (texture != NULL) { while (!quit) { main_loop(); } } } cleanup_synth(); st_log("synth cleanup successful."); if(run_with_sdl) { destroy_sdl(); st_log("SDL cleanup successful."); SDL_CloseAudioDevice(AudioDevice); st_log("SDL audio cleanup successful."); SDL_Quit(); st_log("SDL quit successful."); } return 0; } static void export_wav(char *filename) { if(playing) { toggle_playback(); } // find starting pattern int starting_track = 0; for(int i = 0; i < synth->patterns_height; i++) { if(synth->active_tracks[i] == 1) { starting_track = i; break; } } synth->current_track = starting_track; cSynthResetTrackProgress(synth, starting_track, 0); cSynthResetTempoIndex(synth); synth->tempo_skip_step = true; exporting = true; synth->looped = false; unsigned long buffer_size = 0; long chunk_size = 64; Sint16 *buffer = NULL; long iterations = LONG_MAX; // calculate size of file and allocate buffer etc for(long i = 0; i < iterations; i++) { long begin = i*chunk_size; long end = (i*chunk_size) + chunk_size; cSynthRenderAudio(synth, NULL, begin, end, chunk_size, playing, exporting); if(synth->looped) { synth->looped = false; break; } buffer_size += chunk_size*2; } if(debuglog) { printf("export buffer size:%ld\n", buffer_size); } synth->current_track = starting_track; cSynthResetTrackProgress(synth, starting_track, 0); cSynthResetTempoIndex(synth); synth->tempo_skip_step = true; cSynthResetOnLoopBack(synth); exporting = true; synth->looped = false; synth->bitcrush_active = false; for (int i = 0; i < synth->track_width; i++) { struct CVoice *v = synth->voices[i]; v->adsr_cursor = 0; v->note_on = false; for(int i = 0; i < v->delay_buffer_size; i++) { v->delay_buffer[i] = 0; } } // alloc buffer buffer = cAllocatorAlloc(sizeof(Sint16) * buffer_size, "export buffer"); for(int i = 0; i < buffer_size; i++) { buffer[i] = 0; } // render to buffer for(long i = 0; i < iterations; i++) { long begin = i*chunk_size; long end = (i*chunk_size) + chunk_size; cSynthRenderAudio(synth, buffer, begin, end, chunk_size, playing, exporting); if(synth->looped) { synth->looped = false; break; } } write_wav(filename, buffer_size, buffer, synth->sample_rate); if(debuglog) { printf("total buffer size: %lu\n", buffer_size); } cAllocatorFree(buffer); exporting = false; } static void write_little_endian(unsigned int word, int num_bytes, FILE *wav_file) { unsigned buf; while(num_bytes > 0) { buf = word & 0xff; fwrite(&buf, 1,1, wav_file); num_bytes--; word >>= 8; } } static void write_wav(char *filename, unsigned long num_samples, short int *data, int s_rate) { FILE* wav_file; unsigned int sample_rate; unsigned int num_channels; unsigned int bytes_per_sample; unsigned int byte_rate; unsigned long i; /* counter for samples */ num_channels = 2; bytes_per_sample = 2; if (s_rate <= 0) sample_rate = 44100; else sample_rate = (unsigned int) s_rate; byte_rate = sample_rate * num_channels * bytes_per_sample; wav_file = fopen(filename, "wb"); if(wav_file != NULL) { /* write RIFF header */ fwrite("RIFF", 1, 4, wav_file); write_little_endian((unsigned int)(36 + num_samples), 4, wav_file); fwrite("WAVE", 1, 4, wav_file); /* write fmt subchunk */ fwrite("fmt ", 1, 4, wav_file); write_little_endian(16, 4, wav_file); /* SubChunk1Size is 16 */ write_little_endian(1, 2, wav_file); /* PCM is format 1 */ write_little_endian(num_channels, 2, wav_file); write_little_endian(sample_rate, 4, wav_file); write_little_endian(byte_rate, 4, wav_file); write_little_endian(num_channels*bytes_per_sample, 2, wav_file); /* block align */ write_little_endian(8*bytes_per_sample, 2, wav_file); /* bits/sample */ /* write data subchunk */ fwrite("data", 1, 4, wav_file); //write_little_endian((unsigned int)(bytes_per_sample * num_samples * num_channels), 4, wav_file); write_little_endian((unsigned int)(num_samples), 4, wav_file); for (i = 0; i < num_samples; i++) { if(i < num_samples/2) { write_little_endian((unsigned int)(data[i]), bytes_per_sample, wav_file); } } fclose(wav_file); } else { set_info_timer("could not export file. Set proper path in config."); } } static void handle_credits_keys(void) { credits_left = false; credits_right = false; credits_up = false; credits_down = false; if(input->key_return || input->key_escape) { credits = false; } if(input->key_left) { credits_left = true; } if(input->key_right) { credits_right = true; } if(input->key_up) { credits_up = true; } if(input->key_down) { credits_down = true; } if(input->key_space) { toggle_playback(); } } static void handle_help_keys() { if(input->key_return || input->key_escape) { help = false; } if(input->key_up) { help_index--; if(help_index < 0) { help_index = help_index_max-1; } } if(input->key_down) { help_index++; if(help_index >= help_index_max) { help_index = 0; } } if(input->key_space) { toggle_playback(); } } static void render_help(void) { int x = 0; int offset_x = 1; int inset_x = 1; int y = 1; int color = color_text; int bg_color = cengine_color_transparent; int page = help_index; if(page == 0) { cEngineRenderLabelWithParams(raster2d, "track view", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- return: toggle editing on/off.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- space: play/stop.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- arrow keys: move cursor.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- tab: go to pattern view.", inset_x+x+offset_x, y, color, bg_color); y++; #if defined(platform_windows) cEngineRenderLabelWithParams(raster2d, "- ctrl+left/right: change octave up/down.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+up/down: move notes below cursor.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+c/v/x: copy paste or cut note (or selection).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+f: toggle play cursor follow.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+plus/minus: transpose octave in selection.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+1-9: set stepsize.", inset_x+x+offset_x, y, color, bg_color); y++; #elif defined(platform_osx) cEngineRenderLabelWithParams(raster2d, "- cmd+left/right: change octave up/down.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+up/down: move notes below cursor.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+c/v/x: copy paste or cut note (or selection).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+f: toggle play cursor follow.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+plus/minus: transpose octave in selection.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+1-9: set stepsize.", inset_x+x+offset_x, y, color, bg_color); y++; #endif cEngineRenderLabelWithParams(raster2d, "- plus/minus: transpose halfnote", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- shift+arrow keys: make selection. (if edit is on)", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- character keys: play notes or edit effects.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- home/end: go to top / bottom.", inset_x+x+offset_x, y, color, bg_color); y++; y++; cEngineRenderLabelWithParams(raster2d, "[note] [instrument number] [effects]", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "E-2", inset_x+x+offset_x, y, color, cengine_color_bg1_highlight); cEngineRenderLabelWithParams(raster2d, "0", inset_x+x+offset_x+4, y, color, cengine_color_bg1_highlight); cEngineRenderLabelWithParams(raster2d, "047", inset_x+x+offset_x+6, y, color, cengine_color_bg1_highlight); y++; cEngineRenderLabelWithParams(raster2d, "1 / 7", 1, 22, color, bg_color); } if(page == 1) { cEngineRenderLabelWithParams(raster2d, "pattern view", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- arrow keys: move around grid.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- plus/minus: cycle waveform, pattern numbers, rows etc.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- return: go to instrument view (when cursor is at Ins 0-F).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- tab: go to track view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- e: jump to trackview with current position.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- m: mute track (or channel if cursor is at the top).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- x: activate/inactivate track.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- s: solo track (or channel if cursor is at the top).", inset_x+x+offset_x, y, color, bg_color); y++; #if defined(platform_windows) cEngineRenderLabelWithParams(raster2d, "- shift+up/down: paginate tracks (0-63).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+c/v: copy paste track data.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+up/down: move pattern rows.", inset_x+x+offset_x, y, color, bg_color); y++; #elif defined(platform_osx) cEngineRenderLabelWithParams(raster2d, "- shift+up/down: paginate tracks (0-63).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+c/v: copy paste track data.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+up/down: move pattern rows.", inset_x+x+offset_x, y, color, bg_color); y++; #endif cEngineRenderLabelWithParams(raster2d, "- home/end: set cursor to top / bottom.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "amp - master amplitude.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "rows - number of active rows in patterns.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "arp - general arpeggio speed.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "preview - 1 or 0. if notes are audiable when editing.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "2 / 7", 1, 22, color, bg_color); } if(page == 2) { cEngineRenderLabelWithParams(raster2d, "instrument view", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- arrow keys: move node.", inset_x+x+offset_x, y, color, bg_color); y++; #if defined(platform_windows) cEngineRenderLabelWithParams(raster2d, "- ctrl+arrow keys: move node slowly.", inset_x+x+offset_x, y, color, bg_color); y++; #elif defined(platform_osx) cEngineRenderLabelWithParams(raster2d, "- cmd+arrow keys: move node slowly.", inset_x+x+offset_x, y, color, bg_color); y++; #endif cEngineRenderLabelWithParams(raster2d, "- tab: cycle nodes.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- return: go to pattern view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- shift: toggle editing of envelope or effects.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- home/end: cycle instruments.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "3 / 7", 1, 22, color, bg_color); } if(page == 3) { cEngineRenderLabelWithParams(raster2d, "custom wave", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- arrow keys: move node.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- tab: cycle nodes.", inset_x+x+offset_x, y, color, bg_color); y++; y++; cEngineRenderLabelWithParams(raster2d, "wavetable view", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- x: activate/inactivate row. first row is always", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " active. toggle loop active/inactive.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- 1-F: change overall speed on top row, or speed per row.", inset_x+x+offset_x, y, color, bg_color); y++; } if(page == 4) { cEngineRenderLabelWithParams(raster2d, "tempo view", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- x: activate/inactivate row. each column", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " must have at least one active row.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- plus/minus: change BPM on top row.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- 1-9: change BPM on top row, or beats.", inset_x+x+offset_x, y, color, bg_color); y++; #if defined(platform_windows) cEngineRenderLabelWithParams(raster2d, "- ctrl+enter: switch tempo column. while", inset_x+x+offset_x, y, color, bg_color); y++; #elif defined(platform_osx) cEngineRenderLabelWithParams(raster2d, "- cmd+enter: switch tempo column. while", inset_x+x+offset_x, y, color, bg_color); y++; #endif cEngineRenderLabelWithParams(raster2d, " playing, column will be armed and switched", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " to when the current pattern has finished.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "4 / 7", 1, 22, color, bg_color); } if(page == 5) { cEngineRenderLabelWithParams(raster2d, "global controls", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; #if defined(platform_windows) cEngineRenderLabelWithParams(raster2d, "- ctrl+s: go to save view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+o: go to load view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+e: export wav.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+n: reset project.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+i: go to instrument view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+t: go to tempo view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+p: go to visualiser.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+r: go to wavetable view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- ctrl+j: go to custom wave view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- escape: exit view.", inset_x+x+offset_x, y, color, bg_color); y++; #elif defined(platform_osx) cEngineRenderLabelWithParams(raster2d, "- cmd+s: go to save view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+o: go to load view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+e: export wav.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+n: reset project.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+i: go to instrument view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+t: go to tempo view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+p: go to visualiser.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+r: go to wavetable view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- cmd+j: go to custom wave view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- escape: exit view.", inset_x+x+offset_x, y, color, bg_color); y++; #endif cEngineRenderLabelWithParams(raster2d, "- f1-f9: switch views", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "save/load view", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- character keys: enter filename.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- backspace: remove character.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- return: save/load file.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "- escape: exit view.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "5 / 7", 1, 22, color, bg_color); } if(page == 6) { cEngineRenderLabelWithParams(raster2d, "effects 1(2)", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "0xx - arpeggio (second tone halfsteps, third tone halfsteps)", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " change speed in settings:Arp xx.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "1xx - arpeggio speed (speed, speed) use one of the values or", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " both multiplied.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "2xx - delay (speed, feedback).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "3xx - portamento (speed, speed) uses a single value if other", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " is 0 or a multiplication of both. sets the speed to when", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " new notes will be reached.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "4xx - vibrato (speed, depth).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "5xx - distortion (amp, amp).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "6xx - FM (depth, speed).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "7xx - detune (amount, amount) 88 is middle.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "8xx - PWM (linear position/oscillation depth, oscillation", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " speed) on squarewave. if param2 is present, param1", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " will be used for osc depth.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "6 / 7", 1, 22, color, bg_color); } if(page == 7) { cEngineRenderLabelWithParams(raster2d, "effects 2(2)", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "----------------", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "9xx - set wavetable/waveform for current channel.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " param1: set wavetable lane 0-5 or param2:", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " change waveform 0-5.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Axx - (left amplitud, right amplitud) can be used for", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " amplitude, pan och turning off a note.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Bxx - downsample sweep down (linear, sweep) sweep works on", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " noise channel. choose either linear or sweep.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Cxx - downsample sweep up (linear, sweep) sweep works on", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " noise channel. choose either linear or sweep.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Dxx - ends pattern. D11 - jump to next pattern and reset", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " tempo seq. D1x - reset tempo seq. D2x - switch", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " tempo_seq column. x = tempo seq column (0-5).", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Exx - pitch up (fast, slow) Works on non-noise channels.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " both values can be combined to increase effect.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Fxx - pitch down (fast, slow) Works on non-noise channels.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " both values can be combined to increase effect.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "Gxx - bitcrush, params are multiplied to represent", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, " a bit depth. Affects all channels.", inset_x+x+offset_x, y, color, bg_color); y++; cEngineRenderLabelWithParams(raster2d, "7 / 7", 1, 22, color, bg_color); } } static void render_credits(void) { if(!credits_init) { resetColorValues(); credits_init = true; } credits_hue_rotation += credits_hue_rotation_inc; if(credits_hue_rotation > 360) { credits_hue_rotation = 0; } if (credits_left) { credits_cursor_x--; if (credits_cursor_x < 10) { credits_cursor_x = 10; } } else if(credits_right) { credits_cursor_x++; if (credits_cursor_x > s_width) { credits_cursor_x = s_width; } } else if(credits_up) { credits_cursor_y--; if (credits_cursor_y < 10) { credits_cursor_y = 0; } } else if(credits_down) { credits_cursor_y++; if (credits_cursor_y > s_height) { credits_cursor_y = s_height; } } redraw_screen = true; int int_x = 0; int inset_x = 0; int inset_y = 0; int int_y = 4; int inc = 10; int brush_size = 10; for(int x = credits_cursor_x-brush_size; x < credits_cursor_x+brush_size; x++) { for(int y = credits_cursor_y-brush_size; y < credits_cursor_y+brush_size; y++) { if(check_screen_bounds(x, y)) { credits2d[x][y] = credits_brush_color; } } } int color = credits_color; int bg_color = credits_bg_color; credits_x += credits_x_inc; credits_y += credits_y_inc; int_x = (int)credits_x; int_y = (int)credits_y; bool change_colors = false; if(credits_x > s_width-235) { credits_x_inc = -credits_x_inc; credits_x = s_width-236; change_colors = true; } else if(credits_x < 0) { credits_x_inc = -credits_x_inc; credits_x = 1; change_colors = true; } if(credits_y > s_height-215) { credits_y_inc = -credits_y_inc; credits_y = s_height-216; change_colors = true; } else if(credits_y < 0) { credits_y_inc = -credits_y_inc; credits_y = 1; change_colors = true; } if(change_colors) { if(credits_x_inc < 0) { credits_x_inc = (double)(rand() % 120 / 100.0); credits_x_inc = -credits_x_inc; } else { credits_x_inc = (double)(rand() % 120 / 100.0); } if(credits_y_inc < 0) { credits_y_inc = (double)(rand() % 120 / 100.0); credits_y_inc = -credits_y_inc; } else { credits_y_inc = (double)(rand() % 120 / 100.0); } credits_hue_rotation_inc = (float)(rand() % 100 / 100.0); credits_bg_color = rand(); credits_color = abs(INT_MAX-credits_bg_color); credits_brush_color = rand(); if(rand() % 2 == 1) { credits_bg_color = cengine_color_transparent; } credits_higher_contrast = false; credits_scanlines_x = false; credits_scanlines_y = false; } cEngineRenderLabelByPixelPos(credits2d, "_code_and_design_", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " lundstroem", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, "_design_and_testing_", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " salkinitzor", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, "_feedback_and_testing_", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " nordloef", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " Linde", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " sunfl0wr", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " Rockard", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " 0c0", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, "_special_thanks_to_", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " OlofsonArcade", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " goto80", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " lolloise", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " crabinfo", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, "_etc_", int_x+inset_x, int_y+inset_y, color, bg_color); inset_y+=inc; cEngineRenderLabelByPixelPos(credits2d, " (C) lundstroem", int_x+inset_x, int_y+inset_y, color, bg_color); int hue_x = int_x; int hue_y = int_y; int hue_width = 240; int hue_height = 215; if (hue_x >= s_width) { hue_x = s_width-1; } if (hue_y >= s_height) { hue_y = s_height-1; } if (hue_width+hue_x >= s_width) { hue_width = s_width-hue_x-1; if(hue_width < 0) { hue_width = 0; } } if (hue_height+hue_y > s_height) { hue_height = s_height-hue_y-1; if(hue_height < 0) { hue_height = 0; } } if(hue_x+hue_width <= s_width && hue_y+hue_height <= s_height && hue_x > 0 && hue_y > 0) { renderPixels(credits2d, hue_x, hue_y, hue_width, hue_height, credits_hue_rotation); } for(int x = 0; x < s_width; x++) { for(int y = 0; y < s_height; y++) { raster2d[x][y] = credits2d[x][y]; } } } static void resetColorValues(void) { c_hue_a = 0; c_hue_r = 0; c_hue_g = 0; c_hue_b = 0; c_new_hue_r = 0; c_new_hue_g = 0; c_new_hue_b = 0; } static void transformHSV(float H, float S, float V) { float VSU = 0.1f; float VSW = 0.1f; if(credits_higher_contrast) { VSU = (float)(credits_hue_rotation * 0.01); VSW = (float)(credits_hue_rotation * 0.01); } else { VSU = (float)(V*S*cos(H*M_PI/180.0f)); VSW = (float)(V*S*sin(H*M_PI/180)); } c_new_hue_r = (float)(.299*V+.701*VSU+.168*VSW)*c_hue_r + (float)(.587*V-.587*VSU+.330*VSW)*c_hue_g + (float)(.114*V-.114*VSU-.497*VSW)*c_hue_b; c_new_hue_g = (float)(.299*V-.299*VSU-.328*VSW)*c_hue_r + (float)(.587*V+.413*VSU+.035*VSW)*c_hue_g + (float)(.114*V-.114*VSU+.292*VSW)*c_hue_b; c_new_hue_b = (float)(.299*V-.3*VSU+1.25*VSW)*c_hue_r + (float)(.587*V-.588*VSU-1.05*VSW)*c_hue_g + (float)(.114*V+.886*VSU-.203*VSW)*c_hue_b; } static void renderPixels(unsigned int **data, int start_x, int start_y, int w, int h, float rotation) { if (data != NULL) { for(int x = start_x; x < w+start_x; x++) { if(credits_scanlines_x) { if (x % 2 == 0) { continue; } } for(int y = start_y; y < h+start_y; y++) { if(credits_scanlines_y) { if (y % 2 == 0) { continue; } } unsigned int rast = data[x][y]; unsigned char red = rast & 0xff; unsigned char green = (rast >> 8) & 0xff; unsigned char blue = (rast >> 16) & 0xff; float rscale = red /255.0f; float gscale = green /255.0f; float bscale = blue /255.0f; c_hue_r = rscale; c_hue_g = gscale; c_hue_b = bscale; transformHSV(rotation, 1.0f, 0.99f); c_new_hue_r = (float)(c_new_hue_r*255.0); c_new_hue_g = (float)(c_new_hue_g*255.0); c_new_hue_b = (float)(c_new_hue_b*255.0); if (c_new_hue_r > 255) { c_new_hue_r = 255; } if (c_new_hue_g > 255) { c_new_hue_g = 255; } if (c_new_hue_b > 255) { c_new_hue_b = 255; } if(c_new_hue_r < 0) { c_new_hue_r = 0; } if(c_new_hue_g < 0) { c_new_hue_g = 0; } if(c_new_hue_b < 0) { c_new_hue_b = 0; } data[x][y] = (255 << 24) | ((unsigned char)c_new_hue_b << 16) | ((unsigned char)c_new_hue_g << 8) | (unsigned char)c_new_hue_r; } } } } snibbetracker-1.1.1/snibbetracker/src/osx_settings.h000066400000000000000000000024651351541346100226510ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef snibbetracker_osx_settings_h #define snibbetracker_osx_settings_h void copy_demo_songs(const char *path); void load_and_save_demo_from_bundle(const char *path, const char *name); char *get_settings_json(void); #endif snibbetracker-1.1.1/snibbetracker/src/osx_settings.m000066400000000000000000000076121351541346100226550ustar00rootroot00000000000000/* MIT License Copyright (c) 2019 Harry Lundström Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import #import "osx_settings.h" void copy_demo_songs(const char *path) { NSString *demo_songs_key = @"demo_songs_added"; NSString *demo_songs_added = [[NSUserDefaults standardUserDefaults] stringForKey:demo_songs_key]; if (demo_songs_added == nil) { load_and_save_demo_from_bundle(path, "kissemisse"); load_and_save_demo_from_bundle(path, "fiskbolja"); load_and_save_demo_from_bundle(path, "catslayer"); load_and_save_demo_from_bundle(path, "laptopmidi"); load_and_save_demo_from_bundle(path, "korvhastig"); load_and_save_demo_from_bundle(path, "websnacks"); load_and_save_demo_from_bundle(path, "horizon"); load_and_save_demo_from_bundle(path, "dunsa2"); load_and_save_demo_from_bundle(path, "wrestchest"); load_and_save_demo_from_bundle(path, "projectcart"); [[NSUserDefaults standardUserDefaults] setObject:@"true" forKey:demo_songs_key]; } } void load_and_save_demo_from_bundle(const char *path, const char *name) { NSString *ns_name = [NSString stringWithUTF8String:name]; NSString *bundle_path = [[NSBundle mainBundle] pathForResource:ns_name ofType:@"snibb"]; if(bundle_path != nil) { if(bundle_path != nil) { NSData *data = [NSData dataWithContentsOfFile:bundle_path]; if(data != nil) { NSString *file_name = [NSString stringWithUTF8String:name]; NSString *file_path = [NSString stringWithUTF8String:path]; file_path = [file_path stringByAppendingString:file_name]; file_path = [file_path stringByAppendingString:@".snibb"]; NSFileHandle *output = [NSFileHandle fileHandleForWritingAtPath:file_path]; if(output == nil) { [[NSFileManager defaultManager] createFileAtPath:file_path contents:data attributes:nil]; output = [NSFileHandle fileHandleForWritingAtPath:file_path]; } else { NSLog(@"error: could not create file handle for path:%@", file_path); } } } } } char *get_settings_json(void) { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"txt"]; NSError* error = nil; NSString* content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; if(error) { // If error object was instantiated, handle it. NSLog(@"ERROR while loading from file: %@", error); } if (content) { const char *chars = [content UTF8String]; char *my_str = strdup(chars); //printf("osx config:%s", my_str); return my_str; } return NULL; }