0000: 40 3c 0a 40 3e 0a 54 68 69 73 20 69 73 20 6a 75 @<.@>.This is ju
0010: 73 74 20 61 20 73 61 6d 70 6c 65 0a 43 6f 70 79 st a sample.Copy
0020: 72 69 67 68 74 20 28 43 29 20 32 30 32 31 20 58 right (C) 2021 X
0030: 79 7a 7a 79 20 41 70 70 73 0a 53 65 65 20 68 74 yzzy Apps.See ht
0040: 74 70 73 3a 2f 2f 62 69 74 72 68 79 74 68 6d 2e tps://bitrhythm.
0050: 78 79 7a 7a 79 61 70 70 73 2e 6c 69 6e 6b 2f 64 xyzzyapps.link/d
0060: 6f 63 73 2f 73 6f 75 72 63 65 2d 63 6f 64 65 2e ocs/source-code.
0070: 68 74 6d 6c 20 66 6f 72 20 74 68 65 20 6c 61 74 html for the lat
0080: 65 73 74 20 73 6f 75 72 63 65 20 63 6f 64 65 0a est source code.
0090: 40 40 0a 0a 23 20 43 6f 6e 63 65 70 74 73 20 61 @@..# Concepts a
00a0: 6e 64 20 43 6f 64 65 20 57 61 6c 6b 74 68 72 6f nd Code Walkthro
00b0: 75 67 68 0a 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 ugh..@<.import c
00c0: 6f 67 0a 69 6d 70 6f 72 74 20 6f 73 0a 0a 69 66 og.import os..if
00d0: 20 44 45 56 20 3d 3d 20 22 31 22 3a 0a 20 20 20 DEV == "1":.
00e0: 20 73 74 75 66 66 20 3d 20 22 22 22 0a 23 23 20 stuff = """.##
00f0: 52 75 6e 6e 69 6e 67 0a 0a 6c 73 20 73 6f 75 72 Running..ls sour
0100: 63 65 2f 6d 61 69 6e 2e 63 6f 67 20 7c 20 65 6e ce/main.cog | en
0110: 74 72 20 2d 72 20 72 75 6e 73 65 72 76 65 72 2e tr -r runserver.
0120: 73 68 20 2d 62 0a 22 22 22 0a 20 20 20 20 63 6f sh -b.""". co
0130: 67 2e 6f 75 74 28 73 74 75 66 66 29 0a 40 3e 0a g.out(stuff).@>.
0140: 40 40 0a 0a 23 23 20 43 6f 72 65 20 54 72 61 63 @@..## Core Trac
0150: 6b 65 72 20 4c 6f 6f 70 0a 0a 49 6e 20 62 69 74 ker Loop..In bit
0160: 72 68 79 74 68 6d 20 63 6f 64 65 20 69 73 20 65 rhythm code is e
0170: 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 76 65 valuated for eve
0180: 72 79 20 63 79 63 6c 65 2e 0a 0a 31 20 62 65 61 ry cycle...1 bea
0190: 74 20 3d 20 36 30 20 2f 20 74 65 6d 70 6f 0a 31 t = 60 / tempo.1
01a0: 20 63 79 63 6c 65 20 3d 20 31 20 62 65 61 74 20 cycle = 1 beat
01b0: 2f 20 74 69 63 6b 73 0a 0a 46 6f 72 20 65 76 65 / ticks..For eve
01c0: 72 79 20 63 79 63 6c 65 20 76 69 73 75 61 6c 20 ry cycle visual
01d0: 61 6e 64 20 61 75 64 69 6f 20 63 6f 64 65 20 69 and audio code i
01e0: 73 20 65 76 61 6c 75 61 74 65 64 2e 0a 0a 54 68 s evaluated...Th
01f0: 65 20 65 64 69 74 20 63 68 65 63 6b 62 6f 78 20 e edit checkbox
0200: 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 70 65 allows you to pe
0210: 72 66 6f 72 6d 20 6c 6f 6e 67 20 65 64 69 74 73 rform long edits
0220: 2c 20 77 68 65 72 65 20 6f 6e 6c 79 20 6f 6c 64 , where only old
0230: 20 63 6f 64 65 20 69 73 20 65 76 61 6c 75 61 74 code is evaluat
0240: 65 64 2e 20 4f 6e 63 65 20 79 6f 75 20 64 69 73 ed. Once you dis
0250: 61 62 6c 65 20 69 74 2c 20 61 6c 6c 20 74 68 65 able it, all the
0260: 20 6e 65 77 20 65 64 69 74 20 63 68 61 6e 67 65 new edit change
0270: 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 69 6e s are applied in
0280: 20 74 68 65 20 6e 65 78 74 20 63 79 63 6c 65 2e the next cycle.
0290: 0a 0a 49 66 20 74 68 65 72 65 20 69 73 20 61 6e ..If there is an
02a0: 79 20 73 79 6e 74 61 78 20 65 72 72 6f 72 2c 20 y syntax error,
02b0: 70 72 65 76 69 6f 75 73 20 77 6f 72 6b 69 6e 67 previous working
02c0: 20 63 6f 64 65 20 69 73 20 75 73 65 64 2e 0a 0a code is used...
02d0: 49 66 20 74 68 65 20 63 6c 69 63 6b 20 74 68 65 If the click the
02e0: 20 60 65 78 65 63 75 74 65 20 74 72 61 6e 73 69 `execute transi
02f0: 74 69 6f 6e 60 20 69 73 20 73 65 6c 65 63 74 65 tion` is selecte
0300: 64 2c 20 74 68 65 20 74 72 61 6e 73 69 74 69 6f d, the transitio
0310: 6e 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 75 n function is ru
0320: 6e 2e 20 55 73 65 20 74 68 69 73 20 70 72 6f 67 n. Use this prog
0330: 72 65 73 73 69 6e 67 20 74 68 65 20 73 6f 6e 67 ressing the song
0340: 20 66 72 6f 6d 20 69 6e 69 74 69 61 6c 69 7a 69 from initializi
0350: 6e 67 20 74 6f 20 74 77 65 61 6b 69 6e 67 2e 0a ng to tweaking..
0360: 0a 0a 50 61 74 74 65 72 6e 73 20 69 73 20 61 6e ..Patterns is an
0370: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 array of string
0380: 73 2c 20 65 61 63 68 20 73 74 72 69 6e 67 20 63 s, each string c
0390: 61 6e 20 62 65 20 68 65 78 61 64 65 63 69 6d 61 an be hexadecima
03a0: 6c 2c 20 64 65 63 69 6d 61 6c 20 6f 72 20 73 6f l, decimal or so
03b0: 6d 65 74 68 69 6e 67 20 6c 69 6b 65 20 e2 80 9c mething like ...
03c0: 78 30 30 30 20 78 30 30 30 20 78 30 30 30 20 78 x000 x000 x000 x
03d0: 30 30 30 e2 80 9d 2e 0a 69 73 48 69 74 20 61 6e 000.....isHit an
03e0: 64 20 74 72 61 63 6b 5f 6e 6f 20 63 61 6e 20 62 d track_no can b
03f0: 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 e used to identi
0400: 66 79 20 74 68 65 20 6c 61 79 65 72 20 69 6e 20 fy the layer in
0410: 74 68 65 20 6c 69 76 65 20 65 64 69 74 6f 72 2e the live editor.
0420: 20 48 65 78 61 64 65 63 69 6d 61 6c 20 75 73 65 Hexadecimal use
0430: 73 20 5c 60 30 20 5c 60 31 20 5c 60 32 20 5c 60 s \`0 \`1 \`2 \`
0440: 33 20 5c 60 34 20 5c 60 35 20 69 6e 73 74 65 61 3 \`4 \`5 instea
0450: 64 20 6f 66 20 74 68 65 20 52 6f 6d 61 6e 20 6e d of the Roman n
0460: 75 6d 65 72 61 6c 73 20 61 62 63 64 65 20 66 6f umerals abcde fo
0470: 72 20 31 30 2c 20 31 31 2c 20 31 32 20 2e 2e 2e r 10, 11, 12 ...
0480: 0a 0a 53 63 68 65 64 75 6c 65 64 20 54 69 6d 65 ..Scheduled Time
0490: 20 61 73 20 73 69 67 6e 69 66 69 65 64 20 62 79 as signified by
04a0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 74 69 the variable ti
04b0: 6d 65 20 69 73 20 63 72 75 63 69 61 6c 20 77 68 me is crucial wh
04c0: 65 6e 20 63 61 6c 6c 69 6e 67 20 6e 6f 74 65 20 en calling note
04d0: 74 72 69 67 67 65 72 73 2e 20 54 68 69 73 20 69 triggers. This i
04e0: 73 20 75 73 65 64 20 62 79 20 54 6f 6e 65 2e 6a s used by Tone.j
04f0: 73 20 74 6f 20 73 63 68 65 64 75 6c 65 20 6e 6f s to schedule no
0500: 74 65 73 20 74 6f 20 70 6c 61 79 20 69 6e 20 74 tes to play in t
0510: 68 65 20 66 75 74 75 72 65 2e 0a 0a 23 23 23 20 he future...###
0520: 4f 62 73 65 72 76 65 72 73 0a 0a 53 69 64 65 63 Observers..Sidec
0530: 68 61 69 6e 20 63 6f 6d 70 72 65 73 73 69 6f 6e hain compression
0540: 20 69 73 20 61 20 73 69 6d 70 6c 65 20 61 6c 67 is a simple alg
0550: 6f 72 69 74 68 6d 20 77 68 69 63 68 20 6f 62 73 orithm which obs
0560: 65 72 76 65 73 20 61 6d 70 6c 69 74 75 64 65 20 erves amplitude
0570: 6f 66 20 61 6e 6f 74 68 65 72 20 69 6e 73 74 72 of another instr
0580: 75 6d 65 6e 74 20 62 75 74 20 79 6f 75 20 63 61 ument but you ca
0590: 6e 20 67 65 6e 65 72 61 6c 69 73 65 20 69 74 20 n generalise it
05a0: 74 6f 20 61 6e 79 74 68 69 6e 67 2e 20 42 79 20 to anything. By
05b0: 61 74 74 61 63 68 69 6e 67 20 6f 62 73 65 72 76 attaching observ
05c0: 65 72 73 20 20 74 6f 20 74 69 6d 65 20 6f 72 20 ers to time or
05d0: 6f 74 68 65 72 20 69 6e 73 74 72 75 6d 65 6e 74 other instrument
05e0: 73 20 79 6f 75 20 63 61 6e 20 63 72 65 61 74 65 s you can create
05f0: 20 73 65 63 74 69 6f 6e 73 20 77 69 74 68 69 6e sections within
0600: 20 74 68 65 20 73 6f 6e 67 20 74 68 61 74 20 63 the song that c
0610: 61 6e 20 74 72 69 67 67 65 72 20 6f 74 68 65 72 an trigger other
0620: 73 20 77 69 74 68 20 63 6f 6e 64 69 74 69 6f 6e s with condition
0630: 61 6c 20 6c 6f 67 69 63 2e 20 54 68 69 73 20 69 al logic. This i
0640: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 70 75 72 s similar to pur
0650: 65 20 64 61 74 61 27 73 20 62 61 6e 67 73 20 2d e data's bangs -
0660: 20 5b 73 65 65 20 74 68 69 73 5d 28 68 74 74 70 [see this](http
0670: 73 3a 2f 2f 77 77 77 2e 79 6f 75 74 75 62 65 2e s://www.youtube.
0680: 63 6f 6d 2f 77 61 74 63 68 3f 76 3d 6e 54 54 5a com/watch?v=nTTZ
0690: 5a 79 44 34 78 6c 45 29 2e 20 49 6e 20 66 75 74 ZyD4xlE). In fut
06a0: 75 72 65 20 74 68 69 73 20 77 69 6c 6c 20 62 65 ure this will be
06b0: 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 referred to as
06c0: 73 69 64 65 20 65 76 65 6e 74 73 2e 20 59 6f 75 side events. You
06d0: 20 63 6f 75 6c 64 20 64 65 63 72 65 61 73 65 20 could decrease
06e0: 74 68 65 20 76 6f 6c 75 6d 65 20 6f 66 20 74 68 the volume of th
06f0: 65 20 64 72 75 6d 73 20 74 6f 20 68 61 76 65 20 e drums to have
0700: 74 68 65 20 73 6e 61 72 65 73 20 64 72 6f 70 20 the snares drop
0710: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 66 6f automatically fo
0720: 72 20 65 78 61 6d 70 6c 65 2e 0a 0a 54 68 69 73 r example...This
0730: 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 is something th
0740: 61 74 20 79 6f 75 20 63 61 6e 27 74 20 64 6f 20 at you can't do
0750: 69 6e 20 44 41 57 73 2e 0a 0a 60 60 60 7b 63 6f in DAWs...```{co
0760: 64 65 2d 62 6c 6f 63 6b 7d 20 6a 73 0a 2d 2d 2d de-block} js.---
0770: 0a 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d .force: true.---
0780: 0a 0a 40 3c 0a 63 6f 72 65 5f 6c 6f 6f 70 20 3d ..@<.core_loop =
0790: 20 22 22 22 0a 0a 61 73 79 6e 63 20 70 6c 61 79 """..async play
07a0: 28 29 20 7b 0a 20 20 20 20 76 61 72 20 73 65 6c () {. var sel
07b0: 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 76 61 f = this;. va
07c0: 72 20 63 65 6c 6c 78 20 3d 20 77 69 6e 64 6f 77 r cellx = window
07d0: 2e 63 65 6c 6c 78 2e 63 65 6c 6c 78 3b 0a 0a 20 .cellx.cellx;..
07e0: 20 20 20 61 77 61 69 74 20 54 6f 6e 65 2e 73 74 await Tone.st
07f0: 61 72 74 28 29 3b 0a 20 20 20 20 54 6f 6e 65 2e art();. Tone.
0800: 54 72 61 6e 73 70 6f 72 74 2e 73 74 61 72 74 28 Transport.start(
0810: 29 3b 0a 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e );. Tone.Tran
0820: 73 70 6f 72 74 2e 62 70 6d 2e 76 61 6c 75 65 20 sport.bpm.value
0830: 3d 20 74 68 69 73 2e 73 74 61 74 65 2e 74 65 6d = this.state.tem
0840: 70 6f 3b 0a 20 20 20 20 54 6f 6e 65 2e 54 72 61 po;. Tone.Tra
0850: 6e 73 70 6f 72 74 2e 73 77 69 6e 67 2e 76 61 6c nsport.swing.val
0860: 75 65 20 3d 20 30 3b 0a 0a 20 20 20 20 76 61 72 ue = 0;.. var
0870: 20 74 72 61 6e 73 69 74 69 6f 6e 20 3d 20 66 75 transition = fu
0880: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 nction () {.
0890: 7d 0a 0a 20 20 20 20 76 61 72 20 61 6c 77 61 79 }.. var alway
08a0: 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 s = function ()
08b0: 7b 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 76 61 {. }... va
08c0: 72 20 72 65 6e 64 65 72 5f 6c 6f 6f 70 20 3d 20 r render_loop =
08d0: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 function () {.
08e0: 20 20 7d 0a 0a 20 20 20 20 76 61 72 20 61 6e 69 }.. var ani
08f0: 6d 61 74 69 6f 6e 20 3d 20 66 75 6e 63 74 69 6f mation = functio
0900: 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 72 n () {. r
0910: 65 6e 64 65 72 5f 6c 6f 6f 70 28 29 3b 0a 20 20 ender_loop();.
0920: 20 20 20 20 20 20 77 69 6e 64 6f 77 2e 72 65 71 window.req
0930: 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e 46 72 61 uestAnimationFra
0940: 6d 65 28 61 6e 69 6d 61 74 69 6f 6e 29 0a 20 20 me(animation).
0950: 20 20 7d 0a 0a 20 20 20 20 54 6f 6e 65 2e 4d 61 }.. Tone.Ma
0960: 73 74 65 72 2e 6d 75 74 65 20 3d 20 66 61 6c 73 ster.mute = fals
0970: 65 3b 0a 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e e;. document.
0980: 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 getElementById('
0990: 74 65 6d 70 6f 2d 76 61 6c 75 65 27 29 2e 64 69 tempo-value').di
09a0: 73 61 62 6c 65 64 20 3d 20 74 72 75 65 3b 0a 20 sabled = true;.
09b0: 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 document.getE
09c0: 6c 65 6d 65 6e 74 42 79 49 64 28 27 74 69 63 6b lementById('tick
09d0: 2d 76 61 6c 75 65 27 29 2e 64 69 73 61 62 6c 65 -value').disable
09e0: 64 20 3d 20 74 72 75 65 3b 0a 0a 20 20 20 20 76 d = true;.. v
09f0: 61 72 20 6d 65 6d 20 3d 20 73 65 6c 66 2e 73 74 ar mem = self.st
0a00: 61 74 65 2e 6d 65 6d 3b 0a 20 20 20 20 76 61 72 ate.mem;. var
0a10: 20 68 61 6e 64 6c 65 72 73 20 3d 20 7b 7d 3b 0a handlers = {};.
0a20: 20 20 20 20 76 61 72 20 63 6f 75 6e 74 20 3d 20 var count =
0a30: 2d 31 3b 0a 0a 20 20 20 20 76 61 72 20 74 65 78 -1;.. var tex
0a40: 74 20 3d 20 65 64 69 74 6f 72 2e 67 65 74 56 61 t = editor.getVa
0a50: 6c 75 65 28 29 3b 0a 20 20 20 20 65 64 69 74 6f lue();. edito
0a60: 72 2e 6f 6e 28 22 63 68 61 6e 67 65 22 2c 20 66 r.on("change", f
0a70: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 unction () {.
0a80: 20 20 20 20 20 20 20 20 20 74 65 78 74 20 3d 20 text =
0a90: 65 64 69 74 6f 72 2e 67 65 74 56 61 6c 75 65 28 editor.getValue(
0aa0: 29 3b 0a 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20 );. });..
0ab0: 76 61 72 20 70 61 74 74 65 72 6e 73 20 3d 20 5b var patterns = [
0ac0: 20 63 65 6c 6c 78 28 22 30 30 30 30 22 29 20 5d cellx("0000") ]
0ad0: 3b 20 2f 2f 20 6e 65 65 64 20 74 68 69 73 20 66 ; // need this f
0ae0: 6f 72 20 66 69 72 73 74 20 65 76 61 6c 0a 0a 20 or first eval..
0af0: 20 20 20 76 61 72 20 62 61 72 73 20 3d 20 30 3b var bars = 0;
0b00: 0a 20 20 20 20 76 61 72 20 74 69 63 6b 20 3d 20 . var tick =
0b10: 30 3b 0a 0a 20 20 20 20 6c 6f 6f 70 20 3d 20 6e 0;.. loop = n
0b20: 65 77 20 54 6f 6e 65 2e 54 6f 6e 65 45 76 65 6e ew Tone.ToneEven
0b30: 74 28 28 74 69 6d 65 2c 20 63 68 6f 72 64 29 20 t((time, chord)
0b40: 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 63 6f 75 => {. cou
0b50: 6e 74 20 3d 20 63 6f 75 6e 74 20 2b 20 31 3b 0a nt = count + 1;.
0b60: 20 20 20 20 20 20 20 20 74 69 63 6b 20 3d 20 28 tick = (
0b70: 63 6f 75 6e 74 20 25 20 74 68 69 73 2e 73 74 61 count % this.sta
0b80: 74 65 2e 74 69 63 6b 73 29 3b 0a 20 20 20 20 20 te.ticks);.
0b90: 20 20 20 69 66 20 28 74 69 63 6b 20 3d 3d 3d 20 if (tick ===
0ba0: 30 29 20 2b 2b 62 61 72 73 3b 0a 0a 20 20 20 20 0) ++bars;..
0bb0: 20 20 20 20 24 28 22 23 64 75 72 61 74 69 6f 6e $("#duration
0bc0: 22 29 2e 68 74 6d 6c 28 22 22 20 2b 20 62 61 72 ").html("" + bar
0bd0: 73 20 2b 20 22 2e 22 20 2b 20 74 69 63 6b 20 2b s + "." + tick +
0be0: 20 22 20 2f 20 22 20 2b 20 63 6f 75 6e 74 20 2b " / " + count +
0bf0: 20 22 20 2f 20 22 20 2b 20 77 69 6e 64 6f 77 2e " / " + window.
0c00: 72 6f 75 6e 64 54 6f 28 54 6f 6e 65 2e 54 72 61 roundTo(Tone.Tra
0c10: 6e 73 70 6f 72 74 2e 73 65 63 6f 6e 64 73 2c 20 nsport.seconds,
0c20: 32 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 66 6f 2));.. fo
0c30: 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 r (var i = 0; i
0c40: 3c 20 70 61 74 74 65 72 6e 73 2e 6c 65 6e 67 74 < patterns.lengt
0c50: 68 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 h; i++) {.
0c60: 20 20 20 20 20 20 76 61 72 20 73 61 6d 70 6c 65 var sample
0c70: 73 20 3d 20 74 68 69 73 2e 73 74 61 74 65 2e 73 s = this.state.s
0c80: 61 6d 70 6c 65 73 3b 0a 20 20 20 20 20 20 20 20 amples;.
0c90: 20 20 20 20 76 61 72 20 64 69 61 6c 73 20 3d 20 var dials =
0ca0: 73 65 6c 66 2e 73 74 61 74 65 2e 64 69 61 6c 73 self.state.dials
0cb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 ;. va
0cc0: 72 20 6e 75 6d 62 65 72 73 20 3d 20 73 65 6c 66 r numbers = self
0cd0: 2e 73 74 61 74 65 2e 6e 75 6d 62 65 72 73 3b 0a .state.numbers;.
0ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
0cf0: 28 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 (document.getEle
0d00: 6d 65 6e 74 42 79 49 64 28 27 65 64 69 74 2d 6d mentById('edit-m
0d10: 6f 64 65 27 29 2e 63 68 65 63 6b 65 64 29 20 7b ode').checked) {
0d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0d30: 20 70 20 3d 20 6f 6c 64 50 61 74 74 65 72 6e 73 p = oldPatterns
0d40: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 [i];.
0d50: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
0d60: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 70 20 var p
0d70: 3d 20 70 61 74 74 65 72 6e 73 5b 69 5d 3b 0a 20 = patterns[i];.
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o
0d90: 6c 64 50 61 74 74 65 72 6e 73 5b 69 5d 20 3d 20 ldPatterns[i] =
0da0: 70 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d p;. }
0db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
0dc0: 28 70 20 26 26 20 70 2e 6c 65 6e 67 74 68 20 21 (p && p.length !
0dd0: 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 == 0) {.
0de0: 20 20 20 20 20 20 20 20 76 61 72 20 74 72 61 63 var trac
0df0: 6b 5f 6e 6f 20 3d 20 69 20 2b 20 31 3b 0a 20 20 k_no = i + 1;.
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 va
0e10: 72 20 70 61 74 74 65 72 6e 20 3d 20 70 61 74 74 r pattern = patt
0e20: 65 72 6e 5f 63 6c 65 61 6e 28 70 28 29 29 3b 0a ern_clean(p());.
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e40: 76 61 72 20 69 73 48 69 74 20 3d 20 28 70 61 74 var isHit = (pat
0e50: 74 65 72 6e 2e 73 70 6c 69 74 28 27 27 29 5b 74 tern.split('')[t
0e60: 69 63 6b 5d 20 3d 3d 20 22 31 22 29 20 3f 20 74 ick] == "1") ? t
0e70: 72 75 65 20 3a 20 66 61 6c 73 65 3b 0a 0a 20 20 rue : false;..
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
0e90: 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 y {.
0ea0: 20 20 20 20 20 20 20 20 69 66 20 28 64 6f 63 75 if (docu
0eb0: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 ment.getElementB
0ec0: 79 49 64 28 27 65 64 69 74 2d 6d 6f 64 65 27 29 yId('edit-mode')
0ed0: 2e 63 68 65 63 6b 65 64 29 20 7b 0a 20 20 20 20 .checked) {.
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ef0: 20 20 20 20 65 76 61 6c 28 6f 6c 64 43 6f 64 65 eval(oldCode
0f00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 );.
0f10: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a } else {.
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0f30: 20 20 20 20 20 20 20 20 65 76 61 6c 28 74 65 78 eval(tex
0f40: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t);.
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
0f60: 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d document.getElem
0f70: 65 6e 74 42 79 49 64 28 27 6c 6f 61 64 2d 6d 6f entById('load-mo
0f80: 64 65 27 29 2e 63 68 65 63 6b 65 64 29 20 7b 0a de').checked) {.
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 docu
0fb0: 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 ment.getElementB
0fc0: 79 49 64 28 27 6c 6f 61 64 2d 6d 6f 64 65 27 29 yId('load-mode')
0fd0: 2e 63 68 65 63 6b 65 64 20 3d 20 66 61 6c 73 65 .checked = false
0fe0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1000: 61 6e 73 69 74 69 6f 6e 28 29 3b 0a 20 20 20 20 ansition();.
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1020: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
1030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6c ol
1040: 64 43 6f 64 65 20 3d 20 74 65 78 74 3b 0a 20 20 dCode = text;.
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1060: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.
1070: 20 20 20 20 20 20 20 20 24 28 22 23 65 72 72 6f $("#erro
1080: 72 22 29 2e 68 74 6d 6c 28 22 22 29 3b 0a 20 20 r").html("");.
1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 }
10a0: 63 61 74 63 68 20 28 65 78 29 20 7b 0a 20 20 20 catch (ex) {.
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c0: 20 24 28 22 23 65 72 72 6f 72 22 29 2e 68 74 6d $("#error").htm
10d0: 6c 28 65 78 29 3b 0a 20 20 20 20 20 20 20 20 20 l(ex);.
10e0: 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6c 28 eval(
10f0: 6f 6c 64 43 6f 64 65 29 3b 0a 20 20 20 20 20 20 oldCode);.
1100: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
1110: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
1120: 20 20 7d 0a 20 20 20 20 7d 2c 20 5b 5d 29 3b 0a }. }, []);.
1130: 20 20 20 20 6c 6f 6f 70 2e 6c 6f 6f 70 20 3d 20 loop.loop =
1140: 74 72 75 65 3b 0a 20 20 20 20 6c 6f 6f 70 2e 6c true;. loop.l
1150: 6f 6f 70 45 6e 64 20 3d 20 74 68 69 73 2e 73 74 oopEnd = this.st
1160: 61 74 65 2e 74 69 63 6b 73 20 2b 20 22 6e 22 3b ate.ticks + "n";
1170: 0a 20 20 20 20 6c 6f 6f 70 2e 73 74 61 72 74 28 . loop.start(
1180: 29 3b 0a 0a 20 20 20 77 69 6e 64 6f 77 2e 72 65 );.. window.re
1190: 71 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e 46 72 questAnimationFr
11a0: 61 6d 65 28 61 6e 69 6d 61 74 69 6f 6e 29 0a 0a ame(animation)..
11b0: 7d 0a 22 22 22 0a 63 6f 67 2e 6f 75 74 28 63 6f }.""".cog.out(co
11c0: 72 65 5f 6c 6f 6f 70 29 0a 40 3e 0a 40 40 0a 60 re_loop).@>.@@.`
11d0: 60 60 0a 0a 23 23 20 44 69 61 6c 73 0a 0a 42 69 ``..## Dials..Bi
11e0: 74 72 68 79 74 68 6d 20 70 72 6f 76 69 64 65 73 trhythm provides
11f0: 20 63 75 73 74 6f 6d 20 64 69 61 6c 73 2e 20 54 custom dials. T
1200: 68 65 73 65 20 64 69 61 6c 73 20 63 61 6e 20 62 hese dials can b
1210: 65 20 6d 61 70 70 65 64 20 74 6f 20 61 6e 79 20 e mapped to any
1220: 61 73 70 65 63 74 73 20 6f 66 20 54 6f 6e 65 2e aspects of Tone.
1230: 6a 73 2e 20 41 6c 6c 20 64 69 61 6c 73 20 61 72 js. All dials ar
1240: 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 61 e available as a
1250: 6e 20 61 72 72 61 79 20 64 69 61 6c 73 20 69 6e n array dials in
1260: 20 74 68 65 20 6c 69 76 65 20 63 6f 64 65 20 65 the live code e
1270: 64 69 74 6f 72 2e 0a 0a 60 60 60 7b 63 6f 64 65 ditor...```{code
1280: 2d 62 6c 6f 63 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d -block} html.---
1290: 0a 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d .force: true.---
12a0: 0a 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a ..@<.import cog.
12b0: 69 6d 70 6f 72 74 20 6f 73 0a 0a 64 69 61 6c 20 import os..dial
12c0: 3d 20 22 22 22 0a 3c 64 69 61 6c 3e 0a 20 20 20 = """.<dial>.
12d0: 20 3c 76 62 6f 78 3e 0a 20 20 20 20 20 20 20 20 <vbox>.
12e0: 3c 64 69 76 20 63 6c 61 73 73 3d 22 6d 6c 2d 34 <div class="ml-4
12f0: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c ">. <
1300: 68 73 74 61 63 6b 3e 0a 20 20 20 20 20 20 20 20 hstack>.
1310: 20 20 20 20 20 20 20 20 3c 64 69 76 20 69 64 3d <div id=
1320: 7b 22 6b 6e 6f 62 22 20 2b 20 70 72 6f 70 73 2e {"knob" + props.
1330: 74 69 7d 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 20 ti}></div>.
1340: 20 20 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 <div
1350: 63 6c 61 73 73 3d 22 6d 74 2d 31 22 20 73 74 79 class="mt-1" sty
1360: 6c 65 3d 22 68 65 69 67 68 74 3a 20 32 32 70 78 le="height: 22px
1370: 22 20 69 64 3d 7b 22 6b 6e 6f 62 2d 76 61 6c 75 " id={"knob-valu
1380: 65 22 20 2b 20 70 72 6f 70 73 2e 74 69 7d 3e 3c e" + props.ti}><
1390: 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 20 /div>.
13a0: 20 20 20 20 20 20 3c 73 70 61 6e 20 63 6c 61 73 <span clas
13b0: 73 3d 22 63 75 72 73 6f 72 2d 70 6f 69 6e 74 65 s="cursor-pointe
13c0: 72 22 20 69 64 3d 7b 22 73 61 6d 70 6c 65 22 20 r" id={"sample"
13d0: 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 7d + this.props.ti}
13e0: 20 6f 6e 63 6c 69 63 6b 3d 7b 72 65 6d 6f 76 65 onclick={remove
13f0: 28 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 20 2d (this.props.ti -
1400: 31 29 7d 3e 28 78 29 3c 2f 73 70 61 6e 3e 0a 20 1)}>(x)</span>.
1410: 20 20 20 20 20 20 20 20 20 20 20 3c 2f 68 73 74 </hst
1420: 61 63 6b 3e 0a 20 20 20 20 20 20 20 20 3c 2f 64 ack>. </d
1430: 69 76 3e 0a 20 20 20 20 3c 2f 76 62 6f 78 3e 0a iv>. </vbox>.
1440: 0a 20 20 20 20 3c 73 63 72 69 70 74 3e 0a 0a 74 . <script>..t
1450: 68 69 73 2e 70 72 6f 70 73 20 3d 20 6f 70 74 73 his.props = opts
1460: 3b 0a 0a 72 65 6d 6f 76 65 28 69 6e 64 65 78 29 ;..remove(index)
1470: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 29 {. return ()
1480: 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 74 68 => {. th
1490: 69 73 2e 70 72 6f 70 73 2e 72 6d 64 69 61 6c 28 is.props.rmdial(
14a0: 69 6e 64 65 78 29 3b 0a 20 20 20 20 7d 0a 7d 0a index);. }.}.
14b0: 0a 74 68 69 73 2e 6f 6e 28 22 6d 6f 75 6e 74 22 .this.on("mount"
14c0: 2c 20 28 29 20 3d 3e 20 7b 0a 20 20 20 20 69 66 , () => {. if
14d0: 20 28 6f 70 74 73 2e 76 29 20 7b 0a 0a 20 20 20 (opts.v) {..
14e0: 20 20 20 20 20 4e 65 78 75 73 2e 63 6f 6c 6f 72 Nexus.color
14f0: 73 2e 61 63 63 65 6e 74 20 3d 20 22 23 30 30 30 s.accent = "#000
1500: 30 30 30 22 0a 20 20 20 20 20 20 20 20 4e 65 78 000". Nex
1510: 75 73 2e 63 6f 6c 6f 72 73 2e 66 69 6c 6c 20 3d us.colors.fill =
1520: 20 22 23 66 66 66 66 66 66 22 0a 0a 20 20 20 20 "#ffffff"..
1530: 20 20 20 20 76 61 72 20 63 65 6c 6c 20 3d 20 77 var cell = w
1540: 69 6e 64 6f 77 2e 63 65 6c 6c 78 2e 63 65 6c 6c indow.cellx.cell
1550: 78 28 30 2e 35 29 3b 0a 20 20 20 20 20 20 20 20 x(0.5);.
1560: 76 61 72 20 64 69 61 6c 20 3d 20 6e 65 77 20 4e var dial = new N
1570: 65 78 75 73 2e 44 69 61 6c 28 27 23 6b 6e 6f 62 exus.Dial('#knob
1580: 27 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e 74 ' + this.props.t
1590: 69 2c 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 i, {.
15a0: 20 27 73 69 7a 65 27 3a 20 5b 34 35 2c 20 34 35 'size': [45, 45
15b0: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 27 ],. '
15c0: 76 61 6c 75 65 27 3a 20 30 2e 35 0a 20 20 20 20 value': 0.5.
15d0: 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 });.
15e0: 63 65 6c 6c 2e 6f 6e 43 68 61 6e 67 65 28 65 76 cell.onChange(ev
15f0: 74 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 t => {.
1600: 20 20 20 69 66 20 28 65 76 74 2e 64 61 74 61 2e if (evt.data.
1610: 70 72 65 76 56 61 6c 75 65 20 21 3d 3d 20 65 76 prevValue !== ev
1620: 74 2e 64 61 74 61 2e 76 61 6c 75 65 29 20 7b 0a t.data.value) {.
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1640: 64 69 61 6c 2e 76 61 6c 75 65 20 3d 20 65 76 74 dial.value = evt
1650: 2e 64 61 74 61 2e 76 61 6c 75 65 3b 0a 20 20 20 .data.value;.
1660: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
1670: 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 64 });. d
1680: 69 61 6c 2e 63 6f 6c 6f 72 69 7a 65 28 22 61 63 ial.colorize("ac
1690: 63 65 6e 74 22 2c 22 23 30 30 30 22 29 0a 20 20 cent","#000").
16a0: 20 20 20 20 20 20 64 69 61 6c 2e 6f 6e 28 27 63 dial.on('c
16b0: 68 61 6e 67 65 27 2c 20 28 76 61 6c 29 20 3d 3e hange', (val) =>
16c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 {. v
16d0: 61 6c 20 3d 20 77 69 6e 64 6f 77 2e 72 6f 75 6e al = window.roun
16e0: 64 54 6f 28 76 61 6c 2c 20 34 29 3b 0a 20 20 20 dTo(val, 4);.
16f0: 20 20 20 20 20 20 20 20 20 24 28 27 23 6b 6e 6f $('#kno
1700: 62 2d 76 61 6c 75 65 27 20 2b 20 74 68 69 73 2e b-value' + this.
1710: 70 72 6f 70 73 2e 74 69 29 2e 68 74 6d 6c 28 76 props.ti).html(v
1720: 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 al);.
1730: 20 63 65 6c 6c 28 76 61 6c 29 3b 0a 20 20 20 20 cell(val);.
1740: 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 74 });. t
1750: 68 69 73 2e 70 72 6f 70 73 2e 76 5b 22 63 65 6c his.props.v["cel
1760: 6c 22 5d 20 3d 20 63 65 6c 6c 3b 0a 20 20 20 20 l"] = cell;.
1770: 7d 0a 7d 29 3b 0a 20 20 20 3c 2f 73 63 72 69 70 }.});. </scrip
1780: 74 3e 0a 0a 3c 2f 64 69 61 6c 3e 0a 22 22 22 0a t>..</dial>.""".
1790: 0a 63 6f 67 2e 6f 75 74 28 64 69 61 6c 29 0a 6f .cog.out(dial).o
17a0: 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 75 62 s.system("rm pub
17b0: 6c 69 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 64 lic/components/d
17c0: 69 61 6c 2e 74 61 67 22 29 0a 66 20 3d 20 6f 70 ial.tag").f = op
17d0: 65 6e 28 22 70 75 62 6c 69 63 2f 63 6f 6d 70 6f en("public/compo
17e0: 6e 65 6e 74 73 2f 64 69 61 6c 2e 74 61 67 22 2c nents/dial.tag",
17f0: 20 22 77 22 29 0a 66 2e 77 72 69 74 65 28 64 69 "w").f.write(di
1800: 61 6c 29 0a 66 2e 63 6c 6f 73 65 28 29 0a 40 3e al).f.close().@>
1810: 0a 40 40 0a 60 60 60 0a 0a 23 23 20 4e 75 6d 62 .@@.```..## Numb
1820: 65 72 73 0a 0a 54 68 65 73 65 20 6e 75 6d 62 65 ers..These numbe
1830: 72 73 20 63 61 6e 20 62 65 20 6d 61 70 70 65 64 rs can be mapped
1840: 20 74 6f 20 61 6e 79 20 61 73 70 65 63 74 20 6f to any aspect o
1850: 66 20 54 6f 6e 65 2e 6a 73 2e 20 41 6c 6c 20 6e f Tone.js. All n
1860: 75 6d 62 65 72 20 62 6f 78 65 73 20 61 72 65 20 umber boxes are
1870: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 61 6e 20 available as an
1880: 61 72 72 61 79 20 6e 75 6d 62 65 72 73 20 69 6e array numbers in
1890: 20 74 68 65 20 6c 69 76 65 20 63 6f 64 65 20 65 the live code e
18a0: 64 69 74 6f 72 2e 20 55 73 65 66 75 6c 20 66 6f ditor. Useful fo
18b0: 72 20 64 65 62 75 67 67 69 6e 67 20 70 75 72 70 r debugging purp
18c0: 6f 73 65 73 2e 0a 0a 60 60 60 7b 63 6f 64 65 2d oses...```{code-
18d0: 62 6c 6f 63 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a block} html.---.
18e0: 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a force: true.---.
18f0: 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 69 .@<.import cog.i
1900: 6d 70 6f 72 74 20 6f 73 0a 0a 6e 75 6d 62 65 72 mport os..number
1910: 20 3d 20 22 22 22 0a 3c 6e 75 6d 62 65 72 3e 0a = """.<number>.
1920: 20 20 20 20 3c 76 62 6f 78 3e 0a 20 20 20 20 20 <vbox>.
1930: 20 20 20 3c 64 69 76 20 20 63 6c 61 73 73 3d 22 <div class="
1940: 6d 6c 2d 34 22 3e 0a 20 20 20 20 20 20 20 20 20 ml-4">.
1950: 20 20 20 3c 68 73 74 61 63 6b 3e 0a 20 20 20 20 <hstack>.
1960: 20 20 20 20 20 20 20 20 3c 64 69 76 20 69 64 3d <div id=
1970: 7b 22 6e 75 6d 62 65 72 22 20 2b 20 70 72 6f 70 {"number" + prop
1980: 73 2e 74 69 7d 3e 3c 2f 64 69 76 3e 0a 20 20 20 s.ti}></div>.
1990: 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 63 6c <div cl
19a0: 61 73 73 3d 22 6d 74 2d 31 22 20 73 74 79 6c 65 ass="mt-1" style
19b0: 3d 22 68 65 69 67 68 74 3a 20 32 32 70 78 22 20 ="height: 22px"
19c0: 69 64 3d 7b 22 6e 75 6d 62 65 72 2d 76 61 6c 75 id={"number-valu
19d0: 65 22 20 2b 20 70 72 6f 70 73 2e 74 69 7d 3e 3c e" + props.ti}><
19e0: 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 20 /div>.
19f0: 20 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 <span class="c
1a00: 75 72 73 6f 72 2d 70 6f 69 6e 74 65 72 22 20 6f ursor-pointer" o
1a10: 6e 63 6c 69 63 6b 3d 7b 72 65 6d 6f 76 65 28 74 nclick={remove(t
1a20: 68 69 73 2e 70 72 6f 70 73 2e 74 69 20 2d 31 29 his.props.ti -1)
1a30: 7d 3e 28 78 29 3c 2f 73 70 61 6e 3e 0a 20 20 20 }>(x)</span>.
1a40: 20 20 20 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 20 </hstack>.
1a50: 20 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 </div>.
1a60: 20 20 3c 2f 76 62 6f 78 3e 0a 0a 20 20 20 20 3c </vbox>.. <
1a70: 73 63 72 69 70 74 3e 0a 0a 74 68 69 73 2e 70 72 script>..this.pr
1a80: 6f 70 73 20 3d 20 6f 70 74 73 3b 0a 0a 20 20 20 ops = opts;..
1a90: 20 72 65 6d 6f 76 65 28 69 6e 64 65 78 29 20 7b remove(index) {
1aa0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return
1ab0: 28 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 () => {.
1ac0: 20 20 20 20 74 68 69 73 2e 70 72 6f 70 73 2e 72 this.props.r
1ad0: 6d 6e 75 6d 62 65 72 28 69 6e 64 65 78 29 3b 0a mnumber(index);.
1ae0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a }. }.
1af0: 0a 74 68 69 73 2e 6f 6e 28 22 6d 6f 75 6e 74 22 .this.on("mount"
1b00: 2c 20 28 29 20 3d 3e 20 7b 0a 20 20 20 20 69 66 , () => {. if
1b10: 20 28 6f 70 74 73 2e 76 29 20 7b 0a 0a 20 20 20 (opts.v) {..
1b20: 20 20 20 20 20 4e 65 78 75 73 2e 63 6f 6c 6f 72 Nexus.color
1b30: 73 2e 61 63 63 65 6e 74 20 3d 20 22 23 30 30 30 s.accent = "#000
1b40: 30 30 30 22 0a 20 20 20 20 20 20 20 20 4e 65 78 000". Nex
1b50: 75 73 2e 63 6f 6c 6f 72 73 2e 66 69 6c 6c 20 3d us.colors.fill =
1b60: 20 22 23 66 66 66 66 66 66 22 0a 0a 20 20 20 20 "#ffffff"..
1b70: 20 20 20 20 76 61 72 20 63 65 6c 6c 20 3d 20 77 var cell = w
1b80: 69 6e 64 6f 77 2e 63 65 6c 6c 78 2e 63 65 6c 6c indow.cellx.cell
1b90: 78 28 30 29 0a 20 20 20 20 20 20 20 20 76 61 72 x(0). var
1ba0: 20 6e 75 6d 62 65 72 20 3d 20 6e 65 77 20 4e 65 number = new Ne
1bb0: 78 75 73 2e 4e 75 6d 62 65 72 28 27 23 6e 75 6d xus.Number('#num
1bc0: 62 65 72 27 20 2b 20 74 68 69 73 2e 70 72 6f 70 ber' + this.prop
1bd0: 73 2e 74 69 2c 20 7b 0a 20 20 20 20 20 20 20 20 s.ti, {.
1be0: 20 20 20 20 27 76 61 6c 75 65 27 3a 20 30 2c 0a 'value': 0,.
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 27 73 74 65 'ste
1c00: 70 27 3a 20 30 2e 30 31 0a 20 20 20 20 20 20 20 p': 0.01.
1c10: 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 63 65 6c });. cel
1c20: 6c 2e 6f 6e 43 68 61 6e 67 65 28 65 76 74 20 3d l.onChange(evt =
1c30: 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 > {.
1c40: 69 66 20 28 65 76 74 2e 64 61 74 61 2e 70 72 65 if (evt.data.pre
1c50: 76 56 61 6c 75 65 20 21 3d 3d 20 65 76 74 2e 64 vValue !== evt.d
1c60: 61 74 61 2e 76 61 6c 75 65 29 20 7b 0a 20 20 20 ata.value) {.
1c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d num
1c80: 62 65 72 2e 76 61 6c 75 65 20 3d 20 65 76 74 2e ber.value = evt.
1c90: 64 61 74 61 2e 76 61 6c 75 65 3b 0a 20 20 20 20 data.value;.
1ca0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
1cb0: 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20 74 });.. t
1cc0: 68 69 73 2e 70 72 6f 70 73 2e 76 5b 22 76 22 5d his.props.v["v"]
1cd0: 20 3d 20 63 65 6c 6c 3b 0a 20 20 20 20 7d 0a 7d = cell;. }.}
1ce0: 29 3b 0a 20 20 20 3c 2f 73 63 72 69 70 74 3e 0a );. </script>.
1cf0: 0a 3c 2f 6e 75 6d 62 65 72 3e 0a 22 22 22 0a 0a .</number>."""..
1d00: 63 6f 67 2e 6f 75 74 28 6e 75 6d 62 65 72 29 0a cog.out(number).
1d10: 6f 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 75 os.system("rm pu
1d20: 62 6c 69 63 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f blic/components/
1d30: 6e 75 6d 62 65 72 2e 74 61 67 22 29 0a 66 20 3d number.tag").f =
1d40: 20 6f 70 65 6e 28 22 70 75 62 6c 69 63 2f 63 6f open("public/co
1d50: 6d 70 6f 6e 65 6e 74 73 2f 6e 75 6d 62 65 72 2e mponents/number.
1d60: 74 61 67 22 2c 20 22 77 22 29 0a 66 2e 77 72 69 tag", "w").f.wri
1d70: 74 65 28 6e 75 6d 62 65 72 29 0a 66 2e 63 6c 6f te(number).f.clo
1d80: 73 65 28 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a se().@>.@@.```..
1d90: 23 23 20 41 75 74 6f 4b 6e 6f 62 0a 0a 41 75 74 ## AutoKnob..Aut
1da0: 6f 4b 6e 6f 62 20 65 6e 61 62 6c 65 73 20 70 72 oKnob enables pr
1db0: 6f 67 72 61 6d 6d 61 74 69 63 20 61 75 74 6f 6d ogrammatic autom
1dc0: 61 74 69 6f 6e 20 69 6e 20 42 69 74 72 68 79 74 ation in Bitrhyt
1dd0: 68 6d 0a 0a 60 78 20 2d 3e 20 5b 31 2c 20 32 2e hm..`x -> [1, 2.
1de0: 35 2c 20 34 2c 20 33 2e 32 5d 20 7c 20 62 79 20 5, 4, 3.2] | by
1df0: 30 2e 33 60 0a 0a 78 20 77 69 6c 6c 20 67 6f 20 0.3`..x will go
1e00: 66 72 6f 6d 20 31 20 74 6f 20 32 2e 35 20 74 6f from 1 to 2.5 to
1e10: 20 34 20 74 6f 20 33 2e 32 20 69 6e 20 69 6e 63 4 to 3.2 in inc
1e20: 72 65 6d 65 6e 74 73 20 6f 66 20 30 2e 33 20 66 rements of 0.3 f
1e30: 6f 72 20 65 76 65 72 79 20 74 69 63 6b 2e 20 57 or every tick. W
1e40: 68 69 6c 65 20 78 20 77 69 6c 6c 20 69 6e 63 72 hile x will incr
1e50: 65 61 73 65 20 74 69 6c 6c 20 34 20 2e 2e 2e 20 ease till 4 ...
1e60: 69 74 20 77 69 6c 6c 20 64 65 63 72 65 61 73 65 it will decrease
1e70: 20 6f 6e 63 65 20 69 74 20 72 65 61 63 68 65 73 once it reaches
1e80: 20 34 20 61 6e 64 20 64 72 6f 70 20 64 6f 77 6e 4 and drop down
1e90: 20 74 6f 20 33 2e 32 2e 20 41 66 74 65 72 20 72 to 3.2. After r
1ea0: 65 61 63 68 69 6e 67 20 33 2e 32 20 79 6f 75 20 eaching 3.2 you
1eb0: 63 61 6e 20 73 74 61 79 20 74 68 65 72 65 20 6f can stay there o
1ec0: 72 20 72 65 76 65 72 73 65 20 62 61 63 6b 2e 20 r reverse back.
1ed0: 41 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 At any point dur
1ee0: 69 6e 67 20 6c 69 76 65 20 65 64 69 74 69 6e 67 ing live editing
1ef0: 2c 20 79 6f 75 20 63 61 6e 20 61 64 64 20 61 6e , you can add an
1f00: 20 65 78 74 72 61 20 65 6c 65 6d 65 6e 74 20 74 extra element t
1f10: 6f 20 74 68 65 20 61 72 72 61 79 2e 20 49 66 20 o the array. If
1f20: 79 6f 75 20 61 64 64 20 35 20 66 6f 72 20 65 78 you add 5 for ex
1f30: 61 6d 70 6c 65 2c 20 74 68 65 20 6c 6f 6f 70 20 ample, the loop
1f40: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 72 will continue fr
1f50: 6f 6d 20 33 2e 32 20 74 6f 20 35 2e 0a 0a 59 6f om 3.2 to 5...Yo
1f60: 75 20 63 61 6e 20 74 68 69 6e 6b 20 6f 66 20 65 u can think of e
1f70: 61 63 68 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 ach element in t
1f80: 68 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20 he array as the
1f90: 22 66 69 6e 61 6c 20 6b 6e 6f 62 20 70 6f 73 69 "final knob posi
1fa0: 74 69 6f 6e 22 20 61 6e 64 20 69 6e 20 65 61 63 tion" and in eac
1fb0: 68 20 63 79 63 6c 65 20 77 65 20 61 72 65 20 6d h cycle we are m
1fc0: 6f 76 69 6e 67 20 74 6f 20 74 68 65 20 6e 65 78 oving to the nex
1fd0: 74 20 6b 6e 6f 62 20 70 6f 73 69 74 69 6f 6e 20 t knob position
1fe0: 69 6e 20 69 6e 63 72 65 6d 65 6e 74 73 20 6f 66 in increments of
1ff0: 20 30 2e 33 0a 0a 41 6e 20 61 6c 74 65 72 6e 61 0.3..An alterna
2000: 74 65 20 74 6f 20 41 75 74 6f 4b 6e 6f 62 20 69 te to AutoKnob i
2010: 73 20 74 6f 20 75 73 65 20 54 69 6d 65 64 4b 6e s to use TimedKn
2020: 6f 62 2e 20 49 6e 20 74 68 65 20 65 6e 64 6c 65 ob. In the endle
2030: 73 73 20 61 63 69 64 20 62 61 6e 67 65 72 20 20 ss acid banger
2040: 70 72 6f 6a 65 63 74 2c 20 74 68 65 20 62 61 73 project, the bas
2050: 69 63 20 63 6f 64 65 20 77 61 73 20 75 73 69 6e ic code was usin
2060: 67 20 61 20 73 69 6d 70 6c 65 20 74 69 6d 65 72 g a simple timer
2070: 20 74 6f 20 72 61 6e 64 6f 6d 6c 79 20 6d 6f 76 to randomly mov
2080: 65 20 74 68 65 20 6b 6e 6f 62 20 70 6f 73 69 74 e the knob posit
2090: 69 6f 6e 20 61 6c 6f 6e 67 20 77 69 74 68 20 6e ion along with n
20a0: 6f 74 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 ote collections
20b0: 61 6e 64 20 77 65 69 67 68 74 65 64 20 72 61 6e and weighted ran
20c0: 64 6f 6d 20 63 68 6f 69 63 65 20 6f 6e 20 6e 6f dom choice on no
20d0: 74 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 66 te collections f
20e0: 6f 72 20 67 65 6e 65 72 61 74 69 6e 67 20 72 68 or generating rh
20f0: 79 74 68 6d 73 2e 0a 0a 54 69 6d 65 64 4b 6e 6f ythms...TimedKno
2100: 62 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 bs can be used t
2110: 6f 20 61 64 64 20 73 6d 61 6c 6c 20 76 61 72 69 o add small vari
2120: 61 74 69 6f 6e 73 20 69 6e 20 76 6f 6c 75 6d 65 ations in volume
2130: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 72 75 to make the dru
2140: 6d 73 20 73 6f 75 6e 64 73 20 6d 6f 72 65 20 6e ms sounds more n
2150: 61 74 75 72 61 6c 2e 0a 0a 60 60 60 7b 63 6f 64 atural...```{cod
2160: 65 2d 62 6c 6f 63 6b 7d 20 6a 73 0a 2d 2d 2d 0a e-block} js.---.
2170: 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a force: true.---.
2180: 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 0a .@<.import cog..
2190: 6b 6e 6f 62 5f 63 6f 64 65 20 3d 20 22 22 22 0a knob_code = """.
21a0: 66 75 6e 63 74 69 6f 6e 20 6b 6e 6f 62 28 6f 70 function knob(op
21b0: 74 69 6f 6e 73 29 20 7b 0a 20 20 20 20 6f 70 74 tions) {. opt
21c0: 69 6f 6e 73 20 3d 20 6f 70 74 69 6f 6e 73 20 7c ions = options |
21d0: 7c 20 7b 7d 3b 0a 20 20 20 20 76 61 72 20 63 6f | {};. var co
21e0: 6e 74 65 78 74 20 3d 20 7b 7d 3b 0a 20 20 20 20 ntext = {};.
21f0: 63 6f 6e 74 65 78 74 2e 72 61 6d 70 20 3d 20 6f context.ramp = o
2200: 70 74 69 6f 6e 73 2e 72 61 6d 70 20 7c 7c 20 5b ptions.ramp || [
2210: 30 20 2c 20 31 5d 3b 0a 20 20 20 20 63 6f 6e 74 0 , 1];. cont
2220: 65 78 74 2e 63 6f 75 6e 74 5f 73 6b 69 70 20 3d ext.count_skip =
2230: 20 6f 70 74 69 6f 6e 73 2e 73 70 65 65 64 20 7c options.speed |
2240: 7c 20 34 3b 0a 20 20 20 20 63 6f 6e 74 65 78 74 | 4;. context
2250: 2e 73 74 65 70 20 3d 20 6f 70 74 69 6f 6e 73 2e .step = options.
2260: 73 74 65 70 20 7c 7c 20 30 2e 30 31 3b 0a 20 20 step || 0.01;.
2270: 20 20 63 6f 6e 74 65 78 74 2e 72 65 76 65 72 73 context.revers
2280: 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 65 76 65 e = options.reve
2290: 72 73 65 20 7c 7c 20 74 72 75 65 3b 0a 20 20 20 rse || true;.
22a0: 20 63 6f 6e 74 65 78 74 2e 6e 75 6d 62 65 72 20 context.number
22b0: 3d 20 6f 70 74 69 6f 6e 73 2e 6e 75 6d 62 65 72 = options.number
22c0: 20 7c 7c 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 63 || null;.. c
22d0: 6f 6e 74 65 78 74 2e 63 75 72 72 65 6e 74 5f 63 ontext.current_c
22e0: 6f 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 63 6f ount = 0;. co
22f0: 6e 74 65 78 74 2e 69 6e 64 65 78 20 3d 20 30 3b ntext.index = 0;
2300: 0a 20 20 20 20 63 6f 6e 74 65 78 74 2e 76 61 6c . context.val
2310: 20 3d 20 77 69 6e 64 6f 77 2e 63 65 6c 6c 78 2e = window.cellx.
2320: 63 65 6c 6c 78 28 6f 70 74 69 6f 6e 73 2e 69 6e cellx(options.in
2330: 69 74 69 61 6c 20 7c 7c 20 30 2e 35 29 0a 0a 20 itial || 0.5)..
2340: 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 68 61 6e function chan
2350: 67 65 43 6f 6e 74 65 78 74 28 29 20 7b 0a 20 20 geContext() {.
2360: 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 6e 65 context.ne
2370: 78 74 5f 76 61 6c 20 3d 20 63 6f 6e 74 65 78 74 xt_val = context
2380: 2e 72 61 6d 70 5b 63 6f 6e 74 65 78 74 2e 69 6e .ramp[context.in
2390: 64 65 78 20 2b 20 31 5d 3b 0a 0a 20 20 20 20 20 dex + 1];..
23a0: 20 20 20 63 6f 6e 74 65 78 74 2e 76 61 6c 28 63 context.val(c
23b0: 6f 6e 74 65 78 74 2e 72 61 6d 70 5b 63 6f 6e 74 ontext.ramp[cont
23c0: 65 78 74 2e 69 6e 64 65 78 5d 29 3b 0a 20 20 20 ext.index]);.
23d0: 20 20 20 20 20 69 66 20 28 63 6f 6e 74 65 78 74 if (context
23e0: 2e 76 61 6c 28 29 20 3e 20 63 6f 6e 74 65 78 74 .val() > context
23f0: 2e 6e 65 78 74 5f 76 61 6c 29 20 7b 0a 20 20 20 .next_val) {.
2400: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 context
2410: 2e 64 69 72 65 63 74 69 6f 6e 20 3d 20 2d 31 3b .direction = -1;
2420: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else
2430: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f {. co
2440: 6e 74 65 78 74 2e 64 69 72 65 63 74 69 6f 6e 20 ntext.direction
2450: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 = 1;. }.
2460: 20 20 20 7d 0a 0a 20 20 20 20 63 68 61 6e 67 65 }.. change
2470: 43 6f 6e 74 65 78 74 28 29 3b 0a 0a 20 20 20 20 Context();..
2480: 72 65 74 75 72 6e 20 7b 0a 20 20 20 20 20 20 20 return {.
2490: 20 22 63 65 6c 6c 22 3a 20 63 6f 6e 74 65 78 74 "cell": context
24a0: 2e 76 61 6c 2c 0a 20 20 20 20 20 20 20 20 22 70 .val,. "p
24b0: 75 73 68 22 3a 20 66 75 6e 63 74 69 6f 6e 20 28 ush": function (
24c0: 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 val) {.
24d0: 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e context.ramp.
24e0: 70 75 73 68 28 76 61 6c 29 3b 0a 20 20 20 20 20 push(val);.
24f0: 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 72 },. "r
2500: 65 70 6c 61 63 65 22 3a 20 66 75 6e 63 74 69 6f eplace": functio
2510: 6e 20 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 n (val) {.
2520: 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 context.ra
2530: 6d 70 20 3d 20 76 61 6c 3b 0a 20 20 20 20 20 20 mp = val;.
2540: 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 73 70 },. "sp
2550: 65 65 64 22 3a 20 66 75 6e 63 74 69 6f 6e 20 28 eed": function (
2560: 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 val) {.
2570: 20 20 20 63 6f 6e 74 65 78 74 2e 63 6f 75 6e 74 context.count
2580: 5f 73 6b 69 70 20 3d 20 76 61 6c 3b 0a 20 20 20 _skip = val;.
2590: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 },.
25a0: 22 73 74 65 70 22 3a 20 66 75 6e 63 74 69 6f 6e "step": function
25b0: 20 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 (val) {.
25c0: 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 73 74 65 context.ste
25d0: 70 20 3d 20 76 61 6c 3b 0a 20 20 20 20 20 20 20 p = val;.
25e0: 20 7d 2c 0a 20 20 20 20 20 20 20 20 22 75 70 22 },. "up"
25f0: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 : function (val)
2600: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 {. v
2610: 61 6c 20 3d 20 76 61 6c 20 7c 7c 20 30 2e 31 3b al = val || 0.1;
2620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e . con
2630: 74 65 78 74 2e 72 61 6d 70 2e 70 75 73 68 28 63 text.ramp.push(c
2640: 6f 6e 74 65 78 74 2e 72 61 6d 70 5b 63 6f 6e 74 ontext.ramp[cont
2650: 65 78 74 2e 72 61 6d 70 2e 6c 65 6e 67 74 68 20 ext.ramp.length
2660: 2d 20 31 5d 20 2b 20 76 61 6c 29 3b 0a 20 20 20 - 1] + val);.
2670: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 },.
2680: 22 64 6f 77 6e 22 3a 20 66 75 6e 63 74 69 6f 6e "down": function
2690: 20 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 (val) {.
26a0: 20 20 20 20 20 76 61 6c 20 3d 20 76 61 6c 20 7c val = val |
26b0: 7c 20 2d 30 2e 31 3b 0a 20 20 20 20 20 20 20 20 | -0.1;.
26c0: 20 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 context.ramp
26d0: 2e 70 75 73 68 28 63 6f 6e 74 65 78 74 2e 72 61 .push(context.ra
26e0: 6d 70 5b 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e mp[context.ramp.
26f0: 6c 65 6e 67 74 68 20 2d 20 31 5d 20 2b 20 76 61 length - 1] + va
2700: 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d 2c 0a 20 l);. },.
2710: 20 20 20 20 20 20 22 6d 6f 76 65 22 3a 20 66 75 "move": fu
2720: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 nction () {.
2730: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 if (cont
2740: 65 78 74 2e 63 75 72 72 65 6e 74 5f 63 6f 75 6e ext.current_coun
2750: 74 20 3e 3d 20 63 6f 6e 74 65 78 74 2e 63 6f 75 t >= context.cou
2760: 6e 74 5f 73 6b 69 70 29 20 7b 0a 20 20 20 20 20 nt_skip) {.
2770: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 conte
2780: 78 74 2e 63 75 72 72 65 6e 74 5f 63 6f 75 6e 74 xt.current_count
2790: 20 3d 20 31 3b 0a 0a 20 20 20 20 20 20 20 20 20 = 1;..
27a0: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 65 if (conte
27b0: 78 74 2e 64 69 72 65 63 74 69 6f 6e 20 3d 3d 20 xt.direction ==
27c0: 31 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 1) {.
27d0: 20 20 20 20 20 20 20 20 20 76 61 72 20 63 6d 70 var cmp
27e0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b = function () {
27f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2800: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
2810: 28 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 20 3e (context.val() >
2820: 3d 20 63 6f 6e 74 65 78 74 2e 6e 65 78 74 5f 76 = context.next_v
2830: 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 al);.
2840: 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 };.
2850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
2860: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 se {.
2870: 20 20 20 20 20 20 20 20 20 76 61 72 20 63 6d 70 var cmp
2880: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b = function () {
2890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
28b0: 28 63 6f 6e 74 65 78 74 2e 6e 65 78 74 5f 76 61 (context.next_va
28c0: 6c 20 3e 3d 20 63 6f 6e 74 65 78 74 2e 76 61 6c l >= context.val
28d0: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ());.
28e0: 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 };.
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 }..
2900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
2910: 66 20 28 63 6d 70 28 29 29 20 7b 0a 20 20 20 20 f (cmp()) {.
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2930: 63 6f 6e 74 65 78 74 2e 76 61 6c 28 63 6f 6e 74 context.val(cont
2940: 65 78 74 2e 6e 65 78 74 5f 76 61 6c 29 3b 0a 20 ext.next_val);.
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2960: 20 20 20 63 6f 6e 74 65 78 74 2e 69 6e 64 65 78 context.index
2970: 20 3d 20 63 6f 6e 74 65 78 74 2e 69 6e 64 65 78 = context.index
2980: 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 + 1;.
2990: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f if (co
29a0: 6e 74 65 78 74 2e 69 6e 64 65 78 20 3d 3d 3d 20 ntext.index ===
29b0: 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e 6c 65 6e context.ramp.len
29c0: 67 74 68 20 2d 31 29 20 7b 0a 20 20 20 20 20 20 gth -1) {.
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29e0: 20 20 69 66 20 28 63 6f 6e 74 65 78 74 2e 72 65 if (context.re
29f0: 76 65 72 73 65 29 20 7b 0a 20 20 20 20 20 20 20 verse) {.
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a10: 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 69 6e 64 context.ind
2a20: 65 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 ex = 0;.
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a40: 20 20 20 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 context.ramp
2a50: 20 3d 20 63 6f 6e 74 65 78 74 2e 72 61 6d 70 2e = context.ramp.
2a60: 72 65 76 65 72 73 65 28 29 3b 0a 20 20 20 20 20 reverse();.
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a80: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 } else {.
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2aa0: 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e context.
2ab0: 69 6e 64 65 78 20 3d 20 63 6f 6e 74 65 78 74 2e index = context.
2ac0: 69 6e 64 65 78 20 2d 20 31 3b 0a 20 20 20 20 20 index - 1;.
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ae0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 }.
2af0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
2b10: 68 61 6e 67 65 43 6f 6e 74 65 78 74 28 29 3b 0a hangeContext();.
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b30: 20 20 20 20 63 6f 6e 74 65 78 74 2e 76 61 6c 28 context.val(
2b40: 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 20 2b 20 context.val() +
2b50: 63 6f 6e 74 65 78 74 2e 73 74 65 70 20 2a 20 63 context.step * c
2b60: 6f 6e 74 65 78 74 2e 64 69 72 65 63 74 69 6f 6e ontext.direction
2b70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 );.
2b80: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 65 if (conte
2b90: 78 74 2e 6e 75 6d 62 65 72 29 20 63 6f 6e 74 65 xt.number) conte
2ba0: 78 74 2e 6e 75 6d 62 65 72 28 63 6f 6e 74 65 78 xt.number(contex
2bb0: 74 2e 76 61 6c 28 29 29 3b 0a 20 20 20 20 20 20 t.val());.
2bc0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
2bd0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
2be0: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 76 context.v
2bf0: 61 6c 28 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 al(context.val()
2c00: 20 2b 20 63 6f 6e 74 65 78 74 2e 73 74 65 70 20 + context.step
2c10: 2a 20 63 6f 6e 74 65 78 74 2e 64 69 72 65 63 74 * context.direct
2c20: 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ion);.
2c30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f if (co
2c40: 6e 74 65 78 74 2e 6e 75 6d 62 65 72 29 20 63 6f ntext.number) co
2c50: 6e 74 65 78 74 2e 6e 75 6d 62 65 72 28 63 6f 6e ntext.number(con
2c60: 74 65 78 74 2e 76 61 6c 28 29 29 3b 0a 20 20 20 text.val());.
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 }.
2c80: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els
2c90: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e {.
2ca0: 20 20 20 20 63 6f 6e 74 65 78 74 2e 63 75 72 72 context.curr
2cb0: 65 6e 74 5f 63 6f 75 6e 74 20 2b 3d 20 31 3b 0a ent_count += 1;.
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 }..
2cd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2ce0: 20 63 6f 6e 74 65 78 74 2e 76 61 6c 28 29 3b 0a context.val();.
2cf0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a }. }.
2d00: 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 74 69 6d 65 }..function time
2d10: 64 4b 6e 6f 62 28 6f 70 74 69 6f 6e 73 29 20 7b dKnob(options) {
2d20: 0a 20 20 20 20 6f 70 74 69 6f 6e 73 20 3d 20 6f . options = o
2d30: 70 74 69 6f 6e 73 20 7c 7c 20 7b 7d 3b 0a 20 20 ptions || {};.
2d40: 20 20 76 61 72 20 63 6f 6e 74 65 78 74 20 3d 20 var context =
2d50: 7b 7d 3b 0a 20 20 20 20 63 6f 6e 74 65 78 74 2e {};. context.
2d60: 69 6e 74 65 72 76 61 6c 20 3d 20 6f 70 74 69 6f interval = optio
2d70: 6e 73 2e 69 6e 74 65 72 76 61 6c 20 7c 7c 20 31 ns.interval || 1
2d80: 30 30 3b 0a 20 20 20 20 63 6f 6e 74 65 78 74 2e 00;. context.
2d90: 6b 6e 6f 62 20 3d 20 6b 6e 6f 62 28 6f 70 74 69 knob = knob(opti
2da0: 6f 6e 73 29 3b 0a 0a 20 20 20 20 63 6f 6e 74 65 ons);.. conte
2db0: 78 74 2e 74 69 6d 65 72 20 3d 20 73 65 74 49 6e xt.timer = setIn
2dc0: 74 65 72 76 61 6c 28 66 75 6e 63 74 69 6f 6e 20 terval(function
2dd0: 28 29 20 7b 0a 20 20 20 20 20 20 20 63 6f 6e 74 () {. cont
2de0: 65 78 74 2e 6b 6e 6f 62 2e 6d 6f 76 65 28 29 3b ext.knob.move();
2df0: 0a 20 20 20 20 7d 2c 20 63 6f 6e 74 65 78 74 2e . }, context.
2e00: 69 6e 74 65 72 76 61 6c 29 3b 0a 0a 20 20 20 20 interval);..
2e10: 63 6f 6e 74 65 78 74 2e 6b 6e 6f 62 5b 22 63 6c context.knob["cl
2e20: 65 61 72 22 5d 20 3d 20 66 75 6e 63 74 69 6f 6e ear"] = function
2e30: 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20 63 6c () {. cl
2e40: 65 61 72 49 6e 74 65 72 76 61 6c 28 63 6f 6e 74 earInterval(cont
2e50: 65 78 74 2e 74 69 6d 65 72 29 3b 0a 20 20 20 20 ext.timer);.
2e60: 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f }.. return co
2e70: 6e 74 65 78 74 2e 6b 6e 6f 62 3b 0a 7d 0a 22 22 ntext.knob;.}.""
2e80: 22 0a 63 6f 67 2e 6f 75 74 28 6b 6e 6f 62 5f 63 ".cog.out(knob_c
2e90: 6f 64 65 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a ode).@>.@@.```..
2ea0: 23 23 20 4d 61 69 6e 20 55 49 0a 0a 40 3c 0a 69 ## Main UI..@<.i
2eb0: 6d 70 6f 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 mport cog.import
2ec0: 20 6f 73 0a 0a 69 66 20 44 45 56 20 3d 3d 20 22 os..if DEV == "
2ed0: 31 22 3a 0a 20 20 20 20 73 74 75 66 66 20 3d 20 1":. stuff =
2ee0: 22 22 22 0a 60 60 60 0a 2f 2f 20 4e 6f 74 20 77 """.```.// Not w
2ef0: 6f 72 6b 69 6e 67 0a 0a 2e 43 6f 64 65 4d 69 72 orking...CodeMir
2f00: 72 6f 72 2d 73 65 6c 65 63 74 65 64 2c 0a 2e 43 ror-selected,..C
2f10: 6f 64 65 4d 69 72 72 6f 72 2d 66 6f 63 75 73 65 odeMirror-focuse
2f20: 64 2c 0a 2e 43 6f 64 65 4d 69 72 72 6f 72 2d 61 d,..CodeMirror-a
2f30: 63 74 69 76 65 6c 69 6e 65 2c 0a 2e 43 6f 64 65 ctiveline,..Code
2f40: 4d 69 72 72 6f 72 2d 61 63 74 69 76 65 6c 69 6e Mirror-activelin
2f50: 65 2d 62 61 63 6b 67 72 6f 75 6e 64 20 7b 0a 20 e-background {.
2f60: 20 20 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 74 background: t
2f70: 72 61 6e 73 70 61 72 65 6e 74 3b 0a 20 20 20 20 ransparent;.
2f80: 63 6f 6c 6f 72 3a 20 23 38 38 32 64 32 64 3b 0a color: #882d2d;.
2f90: 20 20 20 20 7a 2d 69 6e 64 65 78 3a 20 35 20 21 z-index: 5 !
2fa0: 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 60 60 60 important;.}.```
2fb0: 0a 22 22 22 0a 20 20 20 20 63 6f 67 2e 6f 75 74 .""". cog.out
2fc0: 28 73 74 75 66 66 29 0a 40 3e 0a 40 40 0a 0a 0a (stuff).@>.@@...
2fd0: 60 60 60 7b 63 6f 64 65 2d 62 6c 6f 63 6b 7d 20 ```{code-block}
2fe0: 68 74 6d 6c 0a 2d 2d 2d 0a 66 6f 72 63 65 3a 20 html.---.force:
2ff0: 74 72 75 65 0a 2d 2d 2d 0a 0a 40 3c 0a 69 6d 70 true.---..@<.imp
3000: 6f 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 20 6f ort cog.import o
3010: 73 0a 0a 62 69 74 72 68 79 74 68 6d 20 3d 20 22 s..bitrhythm = "
3020: 22 22 0a 3c 62 69 74 72 68 79 74 68 6d 3e 0a 0a "".<bitrhythm>..
3030: 3c 64 69 76 3e 0a 20 20 20 20 3c 76 73 74 61 63 <div>. <vstac
3040: 6b 20 69 64 3d 22 68 65 61 64 65 72 2d 70 6c 61 k id="header-pla
3050: 79 62 61 63 6b 22 3e 0a 20 20 20 20 20 20 20 20 yback">.
3060: 3c 68 73 74 61 63 6b 3e 0a 20 20 20 20 20 20 20 <hstack>.
3070: 20 20 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d <div class=
3080: 22 6d 6c 2d 32 22 3e 0a 20 20 20 20 20 20 20 20 "ml-2">.
3090: 20 20 20 20 20 20 20 20 3c 62 75 74 74 6f 6e 20 <button
30a0: 74 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 63 6c type="button" cl
30b0: 61 73 73 3d 22 62 74 6e 20 62 74 6e 2d 70 72 69 ass="btn btn-pri
30c0: 6d 61 72 79 20 77 2d 31 2f 31 30 20 6d 6c 2d 32 mary w-1/10 ml-2
30d0: 20 6d 74 2d 31 22 20 6f 6e 63 6c 69 63 6b 3d 7b mt-1" onclick={
30e0: 61 64 64 44 69 61 6c 7d 3e 2b 20 44 69 61 6c 3c addDial}>+ Dial<
30f0: 2f 62 75 74 74 6f 6e 3e 0a 20 20 20 20 20 20 20 /button>.
3100: 20 20 20 20 20 20 20 20 20 3c 62 75 74 74 6f 6e <button
3110: 20 74 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 63 type="button" c
3120: 6c 61 73 73 3d 22 62 74 6e 20 62 74 6e 2d 70 72 lass="btn btn-pr
3130: 69 6d 61 72 79 20 77 2d 31 2f 31 30 20 6d 6c 2d imary w-1/10 ml-
3140: 32 20 6d 74 2d 31 22 20 6f 6e 63 6c 69 63 6b 3d 2 mt-1" onclick=
3150: 7b 61 64 64 4e 75 6d 62 65 72 7d 3e 2b 20 4e 75 {addNumber}>+ Nu
3160: 6d 62 65 72 3c 2f 62 75 74 74 6f 6e 3e 0a 20 20 mber</button>.
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 <!
3180: 2d 2d 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d -- <button type=
3190: 22 62 75 74 74 6f 6e 22 20 63 6c 61 73 73 3d 22 "button" class="
31a0: 62 74 6e 20 62 74 6e 2d 70 72 69 6d 61 72 79 20 btn btn-primary
31b0: 77 2d 31 2f 31 30 20 6d 6c 2d 32 20 6d 74 2d 31 w-1/10 ml-2 mt-1
31c0: 22 20 6f 6e 63 6c 69 63 6b 3d 7b 61 64 64 53 61 " onclick={addSa
31d0: 6d 70 6c 65 7d 3e 2b 20 53 61 6d 70 6c 65 20 46 mple}>+ Sample F
31e0: 69 6c 65 3c 2f 62 75 74 74 6f 6e 3e 20 2d 2d 3e ile</button> -->
31f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3200: 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 62 <button type="b
3210: 75 74 74 6f 6e 22 20 63 6c 61 73 73 3d 22 62 74 utton" class="bt
3220: 6e 20 62 74 6e 2d 70 72 69 6d 61 72 79 20 77 2d n btn-primary w-
3230: 31 2f 31 30 20 6d 6c 2d 32 20 6d 74 2d 31 22 20 1/10 ml-2 mt-1"
3240: 6f 6e 63 6c 69 63 6b 3d 7b 61 64 64 53 61 6d 70 onclick={addSamp
3250: 6c 65 55 52 4c 7d 3e 2b 20 53 61 6d 70 6c 65 20 leURL}>+ Sample
3260: 55 52 4c 3c 2f 62 75 74 74 6f 6e 3e 0a 20 20 20 URL</button>.
3270: 20 20 20 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a </div>.
3280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 64 69 . <di
3290: 76 20 63 6c 61 73 73 3d 22 6d 6c 2d 32 22 20 3e v class="ml-2" >
32a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
32b0: 20 3c 6c 61 62 65 6c 20 66 6f 72 3d 22 74 65 6d <label for="tem
32c0: 70 6f 2d 76 61 6c 75 65 22 3e 54 65 6d 70 6f 20 po-value">Tempo
32d0: 2f 20 54 69 63 6b 73 3c 2f 6c 61 62 65 6c 3e 3c / Ticks</label><
32e0: 62 72 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 br>.
32f0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
3300: 22 74 65 78 74 22 20 69 64 3d 22 74 65 6d 70 6f "text" id="tempo
3310: 2d 76 61 6c 75 65 22 20 76 61 6c 75 65 3d 7b 73 -value" value={s
3320: 74 61 74 65 2e 74 65 6d 70 6f 7d 20 73 74 79 6c tate.tempo} styl
3330: 65 3d 22 77 69 64 74 68 3a 20 31 35 30 70 78 22 e="width: 150px"
3340: 20 6f 6e 6b 65 79 75 70 3d 7b 20 65 64 69 74 54 onkeyup={ editT
3350: 65 6d 70 6f 20 7d 2f 3e 0a 20 20 20 20 20 20 20 empo }/>.
3360: 20 20 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 <input
3370: 74 79 70 65 3d 22 74 65 78 74 22 20 20 63 6c 61 type="text" cla
3380: 73 73 3d 22 6d 74 2d 32 22 20 69 64 3d 22 74 69 ss="mt-2" id="ti
3390: 63 6b 2d 76 61 6c 75 65 22 20 76 61 6c 75 65 3d ck-value" value=
33a0: 7b 73 74 61 74 65 2e 74 69 63 6b 73 7d 20 73 74 {state.ticks} st
33b0: 79 6c 65 3d 22 77 69 64 74 68 3a 20 31 35 30 70 yle="width: 150p
33c0: 78 22 20 6f 6e 6b 65 79 75 70 3d 7b 65 64 69 74 x" onkeyup={edit
33d0: 54 69 63 6b 73 7d 2f 3e 0a 20 20 20 20 20 20 20 Ticks}/>.
33e0: 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 </div>.
33f0: 20 20 20 20 20 20 20 20 3c 64 69 76 20 63 6c 61 <div cla
3400: 73 73 3d 22 6d 6c 2d 32 22 20 73 74 79 6c 65 3d ss="ml-2" style=
3410: 22 6d 69 6e 2d 77 69 64 74 68 3a 20 32 35 30 70 "min-width: 250p
3420: 78 3b 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 x;">.
3430: 20 20 20 20 20 3c 6c 61 62 65 6c 20 66 6f 72 3d <label for=
3440: 22 64 75 72 61 74 69 6f 6e 22 3e 42 61 72 73 20 "duration">Bars
3450: 2f 20 54 69 63 6b 73 20 2f 20 53 65 63 6f 6e 64 / Ticks / Second
3460: 73 3c 2f 6c 61 62 65 6c 3e 3c 62 72 3e 0a 20 20 s</label><br>.
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 64 <d
3480: 69 76 20 69 64 3d 22 64 75 72 61 74 69 6f 6e 22 iv id="duration"
3490: 20 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 ></div>.
34a0: 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 </div>.
34b0: 20 20 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 0a 20 </hstack>..
34c0: 20 20 20 20 20 20 20 3c 64 69 76 20 63 6c 61 73 <div clas
34d0: 73 3d 22 6d 74 2d 32 20 6d 6c 2d 32 22 20 3e 0a s="mt-2 ml-2" >.
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 62 75 74 <but
34f0: 74 6f 6e 20 74 79 70 65 3d 22 62 75 74 74 6f 6e ton type="button
3500: 22 20 63 6c 61 73 73 3d 22 62 74 6e 20 62 74 6e " class="btn btn
3510: 2d 70 72 69 6d 61 72 79 20 77 2d 31 2f 31 30 20 -primary w-1/10
3520: 6d 6c 2d 32 20 6d 74 2d 31 22 20 20 6f 6e 63 6c ml-2 mt-1" oncl
3530: 69 63 6b 3d 7b 70 6c 61 79 7d 3e 50 6c 61 79 3c ick={play}>Play<
3540: 2f 62 75 74 74 6f 6e 3e 0a 20 20 20 20 20 20 20 /button>.
3550: 20 20 20 20 20 3c 62 75 74 74 6f 6e 20 74 79 70 <button typ
3560: 65 3d 22 62 75 74 74 6f 6e 22 20 63 6c 61 73 73 e="button" class
3570: 3d 22 62 74 6e 20 62 74 6e 2d 70 72 69 6d 61 72 ="btn btn-primar
3580: 79 20 6d 6c 2d 32 22 20 6f 6e 63 6c 69 63 6b 3d y ml-2" onclick=
3590: 7b 73 61 76 65 7d 3e 53 61 76 65 3c 2f 62 75 74 {save}>Save</but
35a0: 74 6f 6e 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ton>.
35b0: 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 62 <button type="b
35c0: 75 74 74 6f 6e 22 20 63 6c 61 73 73 3d 22 62 74 utton" class="bt
35d0: 6e 20 62 74 6e 2d 70 72 69 6d 61 72 79 20 6d 6c n btn-primary ml
35e0: 2d 32 22 20 6f 6e 63 6c 69 63 6b 3d 7b 72 65 73 -2" onclick={res
35f0: 65 74 7d 3e 52 65 73 65 74 3c 2f 62 75 74 74 6f et}>Reset</butto
3600: 6e 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c n>. <
3610: 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 62 75 74 button type="but
3620: 74 6f 6e 22 20 63 6c 61 73 73 3d 22 62 74 6e 20 ton" class="btn
3630: 62 74 6e 2d 70 72 69 6d 61 72 79 20 6d 6c 2d 32 btn-primary ml-2
3640: 22 20 6f 6e 63 6c 69 63 6b 3d 7b 72 65 6c 6f 61 " onclick={reloa
3650: 64 7d 3e 57 69 6e 64 6f 77 20 52 65 6c 6f 61 64 d}>Window Reload
3660: 3c 2f 62 75 74 74 6f 6e 3e 0a 0a 20 20 20 20 20 </button>..
3670: 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 63 6c <input cl
3680: 61 73 73 3d 22 6d 6c 2d 31 22 20 6e 61 6d 65 3d ass="ml-1" name=
3690: 22 65 64 69 74 2d 6d 6f 64 65 22 20 69 64 3d 22 "edit-mode" id="
36a0: 65 64 69 74 2d 6d 6f 64 65 22 20 74 79 70 65 3d edit-mode" type=
36b0: 22 63 68 65 63 6b 62 6f 78 22 2f 3e 0a 20 20 20 "checkbox"/>.
36c0: 20 20 20 20 20 20 20 20 20 3c 6c 61 62 65 6c 20 <label
36d0: 66 6f 72 3d 22 65 64 69 74 2d 6d 6f 64 65 22 3e for="edit-mode">
36e0: 45 64 69 74 3c 2f 6c 61 62 65 6c 3e 0a 20 20 20 Edit</label>.
36f0: 20 20 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 <input
3700: 63 6c 61 73 73 3d 22 6d 6c 2d 31 22 20 6e 61 6d class="ml-1" nam
3710: 65 3d 22 6c 6f 61 64 2d 6d 6f 64 65 22 20 69 64 e="load-mode" id
3720: 3d 22 6c 6f 61 64 2d 6d 6f 64 65 22 20 74 79 70 ="load-mode" typ
3730: 65 3d 22 63 68 65 63 6b 62 6f 78 22 2f 3e 0a 20 e="checkbox"/>.
3740: 20 20 20 20 20 20 20 20 20 20 20 3c 6c 61 62 65 <labe
3750: 6c 20 66 6f 72 3d 22 6c 6f 61 64 2d 6d 6f 64 65 l for="load-mode
3760: 22 3e 45 78 65 63 75 74 65 20 54 72 61 6e 73 69 ">Execute Transi
3770: 74 69 6f 6e 3c 2f 6c 61 62 65 6c 3e 0a 20 20 20 tion</label>.
3780: 20 20 20 20 20 3c 2f 64 69 76 3e 0a 0a 20 20 20 </div>..
3790: 20 20 20 20 20 3c 68 73 74 61 63 6b 3e 0a 20 20 <hstack>.
37a0: 20 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 65 <div e
37b0: 61 63 68 3d 7b 20 6b 65 79 2c 20 69 6e 64 65 78 ach={ key, index
37c0: 20 69 6e 20 73 74 61 74 65 2e 73 61 6d 70 6c 65 in state.sample
37d0: 73 7d 20 3e 0a 20 20 20 20 20 20 20 20 20 20 20 s} >.
37e0: 20 20 20 20 20 3c 64 69 76 20 69 66 3d 7b 20 73 <div if={ s
37f0: 74 61 74 65 2e 73 61 6d 70 6c 65 73 20 26 26 20 tate.samples &&
3800: 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 5b 69 6e state.samples[in
3810: 64 65 78 5d 20 7d 3e 0a 20 20 20 20 20 20 20 20 dex] }>.
3820: 20 20 20 20 20 20 20 20 20 20 20 20 3c 73 61 6d <sam
3830: 70 6c 65 20 20 73 65 74 73 61 6d 70 6c 65 3d 7b ple setsample={
3840: 73 65 74 53 61 6d 70 6c 65 7d 20 72 6d 73 61 6d setSample} rmsam
3850: 70 6c 65 3d 7b 72 6d 53 61 6d 70 6c 65 7d 20 73 ple={rmSample} s
3860: 61 6d 70 6c 65 73 3d 7b 73 74 61 74 65 2e 73 61 amples={state.sa
3870: 6d 70 6c 65 73 7d 20 74 69 3d 7b 69 6e 64 65 78 mples} ti={index
3880: 20 2b 20 31 7d 3e 3c 2f 73 61 6d 70 6c 65 3e 0a + 1}></sample>.
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38a0: 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 20 </div>.
38b0: 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 </div>.
38c0: 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 0a 20 20 20 </hstack>..
38d0: 20 20 20 20 20 3c 68 73 74 61 63 6b 3e 0a 20 20 <hstack>.
38e0: 20 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 65 <div e
38f0: 61 63 68 3d 7b 20 6b 65 79 2c 20 69 6e 64 65 78 ach={ key, index
3900: 20 69 6e 20 73 74 61 74 65 2e 64 69 61 6c 73 7d in state.dials}
3910: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >.
3920: 20 20 3c 64 69 61 6c 20 72 6d 64 69 61 6c 3d 7b <dial rmdial={
3930: 72 6d 44 69 61 6c 7d 20 20 76 3d 7b 73 74 61 74 rmDial} v={stat
3940: 65 2e 64 69 61 6c 73 5b 69 6e 64 65 78 5d 7d 20 e.dials[index]}
3950: 74 69 3d 7b 69 6e 64 65 78 20 2b 20 31 7d 3e 3c ti={index + 1}><
3960: 2f 64 69 61 6c 3e 0a 20 20 20 20 20 20 20 20 20 /dial>.
3970: 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 </div>.
3980: 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 0a 20 20 20 </hstack>..
3990: 20 20 20 20 20 3c 68 73 74 61 63 6b 3e 0a 20 20 <hstack>.
39a0: 20 20 20 20 20 20 20 20 20 20 3c 64 69 76 20 65 <div e
39b0: 61 63 68 3d 7b 20 6b 65 79 2c 20 69 6e 64 65 78 ach={ key, index
39c0: 20 69 6e 20 73 74 61 74 65 2e 6e 75 6d 62 65 72 in state.number
39d0: 73 7d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 s}>.
39e0: 20 20 20 20 3c 6e 75 6d 62 65 72 20 72 6d 6e 75 <number rmnu
39f0: 6d 62 65 72 3d 7b 72 6d 4e 75 6d 62 65 72 7d 20 mber={rmNumber}
3a00: 76 3d 7b 73 74 61 74 65 2e 6e 75 6d 62 65 72 73 v={state.numbers
3a10: 5b 69 6e 64 65 78 5d 7d 20 74 69 3d 7b 69 6e 64 [index]} ti={ind
3a20: 65 78 20 2b 20 31 7d 3e 3c 2f 6e 75 6d 62 65 72 ex + 1}></number
3a30: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 2f >. </
3a40: 64 69 76 3e 0a 20 20 20 20 20 20 20 20 3c 2f 68 div>. </h
3a50: 73 74 61 63 6b 3e 0a 0a 20 20 20 20 3c 2f 76 73 stack>.. </vs
3a60: 74 61 63 6b 3e 0a 0a 20 20 20 20 3c 64 69 76 20 tack>.. <div
3a70: 69 64 3d 22 65 72 72 6f 72 22 20 63 6c 61 73 73 id="error" class
3a80: 3d 22 70 2d 32 22 20 73 74 79 6c 65 3d 22 63 6f ="p-2" style="co
3a90: 6c 6f 72 3a 20 79 65 6c 6c 6f 77 20 21 69 6d 70 lor: yellow !imp
3aa0: 6f 72 74 61 6e 74 3b 20 68 65 69 67 68 74 3a 20 ortant; height:
3ab0: 33 32 70 78 3b 20 66 6f 6e 74 2d 73 69 7a 65 3a 32px; font-size:
3ac0: 20 31 32 70 78 3b 22 3e 3c 2f 64 69 76 3e 0a 20 12px;"></div>.
3ad0: 20 20 20 3c 64 69 76 20 69 64 3d 22 63 61 6e 76 <div id="canv
3ae0: 61 73 2d 63 6f 6e 74 61 69 6e 65 72 22 20 73 74 as-container" st
3af0: 79 6c 65 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 72 yle="position: r
3b00: 65 6c 61 74 69 76 65 3b 22 3e 0a 20 20 20 20 20 elative;">.
3b10: 20 20 20 3c 64 69 76 20 69 64 3d 22 70 35 22 20 <div id="p5"
3b20: 73 74 79 6c 65 3d 22 70 6f 73 69 74 69 6f 6e 3a style="position:
3b30: 20 61 62 73 6f 6c 75 74 65 3b 20 77 69 64 74 68 absolute; width
3b40: 3a 20 31 30 30 25 3b 20 62 61 63 6b 67 72 6f 75 : 100%; backgrou
3b50: 6e 64 3a 20 62 6c 61 63 6b 22 3e 3c 2f 64 69 76 nd: black"></div
3b60: 3e 0a 20 20 20 20 20 20 20 20 3c 63 61 6e 76 61 >. <canva
3b70: 73 20 69 64 3d 22 76 69 73 75 61 6c 22 20 73 74 s id="visual" st
3b80: 79 6c 65 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 61 yle="position: a
3b90: 62 73 6f 6c 75 74 65 3b 20 77 69 64 74 68 3a 20 bsolute; width:
3ba0: 31 30 30 25 3b 20 62 61 63 6b 67 72 6f 75 6e 64 100%; background
3bb0: 3a 20 62 6c 61 63 6b 3b 22 3e 3c 2f 63 61 6e 76 : black;"></canv
3bc0: 61 73 3e 0a 20 20 20 20 20 20 20 20 3c 64 69 76 as>. <div
3bd0: 20 69 64 3d 22 63 6f 64 65 22 20 73 74 79 6c 65 id="code" style
3be0: 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 61 62 73 6f ="position: abso
3bf0: 6c 75 74 65 3b 22 3e 3c 2f 64 69 76 3e 0a 20 20 lute;"></div>.
3c00: 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 0a 3c 2f </div>. .</
3c10: 64 69 76 3e 0a 0a 3c 73 74 79 6c 65 3e 0a 3a 68 div>..<style>.:h
3c20: 6f 73 74 20 7b 0a 20 20 20 20 6d 61 72 67 69 6e ost {. margin
3c30: 2d 74 6f 70 3a 20 34 76 68 3b 0a 7d 0a 3c 2f 73 -top: 4vh;.}.</s
3c40: 74 79 6c 65 3e 0a 0a 3c 73 63 72 69 70 74 3e 0a tyle>..<script>.
3c50: 76 61 72 20 6f 6c 64 43 6f 64 65 20 3d 20 22 22 var oldCode = ""
3c60: 3b 0a 76 61 72 20 6f 6c 64 50 61 74 74 65 72 6e ;.var oldPattern
3c70: 73 20 3d 20 5b 5d 3b 0a 0a 2f 2f 20 76 61 72 20 s = [];..// var
3c80: 61 75 64 69 6f 20 3d 20 6e 65 77 20 41 75 64 69 audio = new Audi
3c90: 6f 28 29 3b 0a 2f 2f 20 61 75 64 69 6f 2e 6c 6f o();.// audio.lo
3ca0: 6f 70 20 3d 20 74 72 75 65 3b 0a 63 6f 6e 73 74 op = true;.const
3cb0: 20 61 63 74 78 20 3d 20 54 6f 6e 65 2e 63 6f 6e actx = Tone.con
3cc0: 74 65 78 74 3b 0a 63 6f 6e 73 74 20 64 65 73 74 text;.const dest
3cd0: 20 3d 20 61 63 74 78 2e 63 72 65 61 74 65 4d 65 = actx.createMe
3ce0: 64 69 61 53 74 72 65 61 6d 44 65 73 74 69 6e 61 diaStreamDestina
3cf0: 74 69 6f 6e 28 29 3b 0a 63 6f 6e 73 74 20 72 65 tion();.const re
3d00: 63 6f 72 64 65 72 20 3d 20 6e 65 77 20 4d 65 64 corder = new Med
3d10: 69 61 52 65 63 6f 72 64 65 72 28 64 65 73 74 2e iaRecorder(dest.
3d20: 73 74 72 65 61 6d 29 3b 0a 6c 65 74 20 63 68 75 stream);.let chu
3d30: 6e 6b 73 20 3d 20 5b 5d 3b 0a 76 61 72 20 73 61 nks = [];.var sa
3d40: 6d 70 6c 65 55 52 4c 20 3d 20 22 22 3b 0a 76 61 mpleURL = "";.va
3d50: 72 20 73 61 6d 3b 0a 76 61 72 20 6c 6f 6f 70 3b r sam;.var loop;
3d60: 0a 74 68 69 73 2e 70 72 6f 70 73 20 3d 20 6f 70 .this.props = op
3d70: 74 73 3b 0a 0a 74 68 69 73 2e 73 74 61 74 65 20 ts;..this.state
3d80: 3d 20 7b 0a 20 20 20 20 6d 65 6d 3a 20 7b 7d 2c = {. mem: {},
3d90: 0a 20 20 20 20 64 69 61 6c 73 3a 20 5b 5d 2c 0a . dials: [],.
3da0: 20 20 20 20 6e 75 6d 62 65 72 73 3a 20 5b 5d 2c numbers: [],
3db0: 0a 20 20 20 20 73 61 6d 70 6c 65 73 3a 20 5b 5d . samples: []
3dc0: 2c 0a 20 20 20 20 74 65 6d 70 6f 3a 20 31 32 30 ,. tempo: 120
3dd0: 2c 0a 20 20 20 20 74 69 63 6b 73 3a 20 31 36 2c ,. ticks: 16,
3de0: 0a 7d 0a 0a 61 73 79 6e 63 20 66 75 6e 63 74 69 .}..async functi
3df0: 6f 6e 20 63 6f 70 79 54 65 78 74 54 6f 43 6c 69 on copyTextToCli
3e00: 70 62 6f 61 72 64 28 74 65 78 74 29 20 7b 0a 20 pboard(text) {.
3e10: 20 20 20 74 72 79 20 7b 20 61 77 61 69 74 20 6e try { await n
3e20: 61 76 69 67 61 74 6f 72 2e 63 6c 69 70 62 6f 61 avigator.clipboa
3e30: 72 64 2e 77 72 69 74 65 54 65 78 74 28 74 65 78 rd.writeText(tex
3e40: 74 29 3b 20 7d 0a 20 20 20 20 63 61 74 63 68 28 t); }. catch(
3e50: 65 72 72 29 20 7b 0a 20 20 20 20 20 20 20 20 61 err) {. a
3e60: 6c 65 72 74 28 27 45 72 72 6f 72 20 69 6e 20 63 lert('Error in c
3e70: 6f 70 79 69 6e 67 20 74 65 78 74 3a 20 27 2c 20 opying text: ',
3e80: 65 72 72 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 73 err);. }.}..s
3e90: 68 6f 75 6c 64 55 70 64 61 74 65 28 64 61 74 61 houldUpdate(data
3ea0: 2c 20 6e 65 78 74 4f 70 74 73 29 20 7b 0a 20 20 , nextOpts) {.
3eb0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 7d return true;.}
3ec0: 0a 0a 74 68 69 73 2e 6f 6e 28 27 6d 6f 75 6e 74 ..this.on('mount
3ed0: 27 2c 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a ', function() {.
3ee0: 20 20 20 20 76 61 72 20 73 65 6c 66 20 3d 20 74 var self = t
3ef0: 68 69 73 3b 0a 20 20 20 20 24 28 22 23 6c 6f 61 his;. $("#loa
3f00: 64 2d 6d 6f 64 65 22 29 2e 63 6c 69 63 6b 28 29 d-mode").click()
3f10: 3b 0a 20 20 20 20 65 64 69 74 6f 72 20 3d 20 43 ;. editor = C
3f20: 6f 64 65 4d 69 72 72 6f 72 28 64 6f 63 75 6d 65 odeMirror(docume
3f30: 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 nt.getElementByI
3f40: 64 28 22 63 6f 64 65 22 29 2c 20 7b 0a 20 20 20 d("code"), {.
3f50: 20 20 20 20 20 6d 6f 64 65 3a 20 22 6e 75 6c 6c mode: "null
3f60: 22 2c 0a 20 20 20 20 20 20 20 20 73 70 65 6c 6c ",. spell
3f70: 63 68 65 63 6b 3a 20 66 61 6c 73 65 2c 0a 20 20 check: false,.
3f80: 20 20 20 20 20 20 61 75 74 6f 63 6f 72 72 65 63 autocorrec
3f90: 74 3a 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 t: false,.
3fa0: 20 20 73 63 72 6f 6c 6c 62 61 72 53 74 79 6c 65 scrollbarStyle
3fb0: 3a 20 22 6e 75 6c 6c 22 2c 0a 20 20 20 20 20 20 : "null",.
3fc0: 20 20 6c 69 6e 65 57 72 61 70 70 69 6e 67 3a 20 lineWrapping:
3fd0: 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 6c false,. l
3fe0: 69 6e 65 4e 75 6d 62 65 72 73 3a 20 66 61 6c 73 ineNumbers: fals
3ff0: 65 2c 0a 20 20 20 20 20 20 20 20 73 74 79 6c 65 e,. style
4000: 41 63 74 69 76 65 4c 69 6e 65 3a 20 66 61 6c 73 ActiveLine: fals
4010: 65 2c 0a 20 20 20 20 20 20 20 20 6d 61 74 63 68 e,. match
4020: 42 72 61 63 6b 65 74 73 3a 20 66 61 6c 73 65 2c Brackets: false,
4030: 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 3a 20 . value:
4040: 60 2f 2f 20 74 72 61 63 6b 5f 6e 6f 2c 20 70 61 `// track_no, pa
4050: 74 74 65 72 6e 2c 20 63 75 72 72 65 6e 74 5f 62 ttern, current_b
4060: 69 74 2c 20 73 61 6d 70 6c 65 73 2c 20 73 61 6d it, samples, sam
4070: 70 6c 65 20 61 6e 64 20 54 6f 6e 65 20 61 72 65 ple and Tone are
4080: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 67 6c available as gl
4090: 6f 62 61 6c 73 60 0a 20 20 20 20 7d 29 3b 0a 0a obals`. });..
40a0: 20 20 20 20 65 64 69 74 6f 72 2e 73 65 74 53 69 editor.setSi
40b0: 7a 65 28 6e 75 6c 6c 2c 20 77 69 6e 64 6f 77 2e ze(null, window.
40c0: 69 6e 6e 65 72 48 65 69 67 68 74 20 2d 20 64 6f innerHeight - do
40d0: 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e cument.getElemen
40e0: 74 42 79 49 64 28 22 68 65 61 64 65 72 2d 70 6c tById("header-pl
40f0: 61 79 62 61 63 6b 22 29 2e 63 6c 69 65 6e 74 48 ayback").clientH
4100: 65 69 67 68 74 20 2d 20 31 36 30 29 3b 0a 0a 20 eight - 160);..
4110: 20 20 20 69 66 20 28 74 68 69 73 2e 70 72 6f 70 if (this.prop
4120: 73 2e 73 6f 6e 67 29 20 7b 0a 20 20 20 20 20 20 s.song) {.
4130: 20 20 63 6f 6e 73 74 20 6c 69 62 20 3d 20 77 69 const lib = wi
4140: 6e 64 6f 77 2e 4a 73 6f 6e 55 72 6c 28 27 6c 7a ndow.JsonUrl('lz
4150: 6d 61 27 29 3b 0a 20 20 20 20 20 20 20 20 6c 69 ma');. li
4160: 62 2e 64 65 63 6f 6d 70 72 65 73 73 28 74 68 69 b.decompress(thi
4170: 73 2e 70 72 6f 70 73 2e 73 6f 6e 67 29 2e 74 68 s.props.song).th
4180: 65 6e 28 64 61 74 61 20 3d 3e 20 7b 0a 20 20 20 en(data => {.
4190: 20 20 20 20 20 20 20 20 20 76 61 72 20 73 61 6d var sam
41a0: 70 6c 65 5f 6e 61 6d 65 73 20 3d 20 64 61 74 61 ple_names = data
41b0: 5b 22 73 61 6d 70 6c 65 5f 6e 61 6d 65 73 22 5d ["sample_names"]
41c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 ;. va
41d0: 72 20 64 69 61 6c 5f 63 6f 75 6e 74 20 3d 20 64 r dial_count = d
41e0: 61 74 61 5b 22 64 69 61 6c 5f 63 6f 75 6e 74 22 ata["dial_count"
41f0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 ];. v
4200: 61 72 20 6e 75 6d 62 65 72 73 5f 63 6f 75 6e 74 ar numbers_count
4210: 20 3d 20 64 61 74 61 5b 22 6e 75 6d 62 65 72 73 = data["numbers
4220: 5f 63 6f 75 6e 74 22 5d 3b 0a 20 20 20 20 20 20 _count"];.
4230: 20 20 20 20 20 20 64 65 6c 65 74 65 20 64 61 74 delete dat
4240: 61 5b 22 73 61 6d 70 6c 65 5f 6e 61 6d 65 73 22 a["sample_names"
4250: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 ];. d
4260: 65 6c 65 74 65 20 64 61 74 61 5b 22 64 69 61 6c elete data["dial
4270: 5f 63 6f 75 6e 74 22 5d 3b 0a 20 20 20 20 20 20 _count"];.
4280: 20 20 20 20 20 20 64 65 6c 65 74 65 20 64 61 74 delete dat
4290: 61 5b 22 6e 75 6d 62 65 72 73 5f 63 6f 75 6e 74 a["numbers_count
42a0: 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 "];.
42b0: 74 68 69 73 2e 73 74 61 74 65 2e 74 65 6d 70 6f this.state.tempo
42c0: 20 3d 20 64 61 74 61 2e 74 65 6d 70 6f 3b 0a 20 = data.tempo;.
42d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
42e0: 73 74 61 74 65 2e 74 69 63 6b 73 20 3d 20 64 61 state.ticks = da
42f0: 74 61 2e 74 69 63 6b 73 3b 0a 20 20 20 20 20 20 ta.ticks;.
4300: 20 20 20 20 20 20 74 68 69 73 2e 73 74 61 74 65 this.state
4310: 2e 63 6f 64 65 20 3d 20 64 61 74 61 2e 63 6f 64 .code = data.cod
4320: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 e;. s
4330: 61 6d 70 6c 65 5f 6e 61 6d 65 73 2e 6d 61 70 28 ample_names.map(
4340: 66 75 6e 63 74 69 6f 6e 20 28 75 72 6c 29 20 7b function (url) {
4350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4360: 20 73 65 6c 66 2e 61 64 64 55 52 4c 28 75 72 6c self.addURL(url
4370: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d );. }
4380: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 );. f
4390: 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 or (var i = 0; i
43a0: 20 3c 20 64 69 61 6c 5f 63 6f 75 6e 74 3b 20 69 < dial_count; i
43b0: 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ++) {.
43c0: 20 20 20 20 20 20 74 68 69 73 2e 73 74 61 74 65 this.state
43d0: 2e 64 69 61 6c 73 2e 70 75 73 68 28 7b 7d 29 3b .dials.push({});
43e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 . }.
43f0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 for (
4400: 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 6e var i = 0; i < n
4410: 75 6d 62 65 72 73 5f 63 6f 75 6e 74 3b 20 69 2b umbers_count; i+
4420: 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 +) {.
4430: 20 20 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e this.state.
4440: 6e 75 6d 62 65 72 73 2e 70 75 73 68 28 7b 7d 29 numbers.push({})
4450: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ;. }.
4460: 20 20 20 20 20 20 20 20 20 20 20 20 65 64 69 74 edit
4470: 6f 72 2e 73 65 74 56 61 6c 75 65 28 74 68 69 73 or.setValue(this
4480: 2e 73 74 61 74 65 2e 63 6f 64 65 29 3b 0a 20 20 .state.code);.
4490: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 75 this.u
44a0: 70 64 61 74 65 28 29 3b 0a 20 20 20 20 20 20 20 pdate();.
44b0: 20 20 20 20 20 72 69 6f 74 2e 6d 6f 75 6e 74 28 riot.mount(
44c0: 27 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 29 0a '');. }).
44d0: 20 20 20 20 7d 0a 0a 0a 7d 29 3b 0a 0a 0a 70 61 }...});...pa
44e0: 74 74 65 72 6e 5f 63 6c 65 61 6e 28 70 29 20 7b ttern_clean(p) {
44f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 77 69 6e 64 . return wind
4500: 6f 77 2e 70 61 74 74 65 72 6e 5f 63 6c 65 61 6e ow.pattern_clean
4510: 28 70 29 3b 0a 7d 0a 0a 73 61 76 65 28 29 20 7b (p);.}..save() {
4520: 0a 20 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e . this.state.
4530: 63 6f 64 65 20 3d 20 65 64 69 74 6f 72 2e 67 65 code = editor.ge
4540: 74 56 61 6c 75 65 28 29 3b 0a 20 20 20 20 76 61 tValue();. va
4550: 72 20 74 65 78 74 20 3d 20 7b 0a 20 20 20 20 20 r text = {.
4560: 20 20 20 74 65 6d 70 6f 3a 20 74 68 69 73 2e 73 tempo: this.s
4570: 74 61 74 65 2e 74 65 6d 70 6f 2c 0a 20 20 20 20 tate.tempo,.
4580: 20 20 20 20 64 69 61 6c 5f 63 6f 75 6e 74 3a 20 dial_count:
4590: 74 68 69 73 2e 73 74 61 74 65 2e 64 69 61 6c 73 this.state.dials
45a0: 2e 6c 65 6e 67 74 68 2c 0a 20 20 20 20 20 20 20 .length,.
45b0: 20 6e 75 6d 62 65 72 73 5f 63 6f 75 6e 74 3a 20 numbers_count:
45c0: 74 68 69 73 2e 73 74 61 74 65 2e 6e 75 6d 62 65 this.state.numbe
45d0: 72 73 2e 6c 65 6e 67 74 68 2c 0a 20 20 20 20 20 rs.length,.
45e0: 20 20 20 73 61 6d 70 6c 65 5f 6e 61 6d 65 73 3a sample_names:
45f0: 20 74 68 69 73 2e 73 74 61 74 65 2e 73 61 6d 70 this.state.samp
4600: 6c 65 73 2e 6d 61 70 28 66 75 6e 63 74 69 6f 6e les.map(function
4610: 20 28 69 74 65 6d 29 20 7b 72 65 74 75 72 6e 20 (item) {return
4620: 69 74 65 6d 5b 22 5f 5f 75 72 6c 22 5d 7d 29 2c item["__url"]}),
4630: 0a 20 20 20 20 20 20 20 20 74 69 63 6b 73 3a 20 . ticks:
4640: 31 36 2c 0a 20 20 20 20 20 20 20 20 63 6f 64 65 16,. code
4650: 3a 20 74 68 69 73 2e 73 74 61 74 65 2e 63 6f 64 : this.state.cod
4660: 65 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f e,. };. co
4670: 6e 73 74 20 6c 69 62 20 3d 20 77 69 6e 64 6f 77 nst lib = window
4680: 2e 4a 73 6f 6e 55 72 6c 28 27 6c 7a 6d 61 27 29 .JsonUrl('lzma')
4690: 3b 0a 09 6c 69 62 2e 63 6f 6d 70 72 65 73 73 28 ;..lib.compress(
46a0: 74 65 78 74 29 2e 74 68 65 6e 28 65 6e 63 6f 64 text).then(encod
46b0: 65 64 44 61 74 61 20 3d 3e 20 7b 0a 20 20 20 20 edData => {.
46c0: 20 20 20 20 76 61 72 20 6c 69 6e 6b 20 3d 20 22 var link = "
46d0: 2f 73 6f 6e 67 2f 22 20 2b 20 65 6e 63 6f 64 65 /song/" + encode
46e0: 64 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 77 dData;. w
46f0: 69 6e 64 6f 77 2e 6f 70 65 6e 28 6c 69 6e 6b 2c indow.open(link,
4700: 20 22 5f 62 6c 61 6e 6b 22 29 3b 0a 20 20 20 20 "_blank");.
4710: 7d 29 3b 0a 7d 0a 0a 72 65 6c 6f 61 64 28 29 20 });.}..reload()
4720: 7b 0a 20 20 20 20 77 69 6e 64 6f 77 2e 6c 6f 63 {. window.loc
4730: 61 74 69 6f 6e 2e 72 65 70 6c 61 63 65 28 20 22 ation.replace( "
4740: 2f 2f 22 20 2b 20 77 69 6e 64 6f 77 2e 6c 6f 63 //" + window.loc
4750: 61 74 69 6f 6e 2e 68 6f 73 74 29 0a 7d 0a 0a 72 ation.host).}..r
4760: 65 73 65 74 28 29 20 7b 0a 0a 20 20 20 20 54 6f eset() {.. To
4770: 6e 65 2e 4d 61 73 74 65 72 2e 6d 75 74 65 20 3d ne.Master.mute =
4780: 20 74 72 75 65 3b 0a 20 20 20 20 69 66 20 28 6c true;. if (l
4790: 6f 6f 70 29 20 7b 0a 20 20 20 20 20 20 20 20 6c oop) {. l
47a0: 6f 6f 70 2e 73 74 6f 70 28 29 3b 0a 20 20 20 20 oop.stop();.
47b0: 20 20 20 20 6c 6f 6f 70 2e 63 61 6e 63 65 6c 28 loop.cancel(
47c0: 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 2e );. loop.
47d0: 64 69 73 70 6f 73 65 28 29 3b 0a 20 20 20 20 20 dispose();.
47e0: 20 20 20 54 6f 6e 65 2e 4d 61 73 74 65 72 2e 6d Tone.Master.m
47f0: 75 74 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 ute = false;.
4800: 20 7d 0a 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e }. document.
4810: 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 getElementById('
4820: 74 65 6d 70 6f 2d 76 61 6c 75 65 27 29 2e 64 69 tempo-value').di
4830: 73 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0a sabled = false;.
4840: 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 document.get
4850: 45 6c 65 6d 65 6e 74 42 79 49 64 28 27 74 69 63 ElementById('tic
4860: 6b 2d 76 61 6c 75 65 27 29 2e 64 69 73 61 62 6c k-value').disabl
4870: 65 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 ed = false;.
4880: 65 64 69 74 6f 72 2e 73 65 74 56 61 6c 75 65 28 editor.setValue(
4890: 22 22 29 3b 0a 0a 20 20 20 20 74 68 69 73 2e 73 "");.. this.s
48a0: 74 61 74 65 20 3d 20 7b 0a 20 20 20 20 20 20 20 tate = {.
48b0: 20 6d 65 6d 3a 20 7b 7d 2c 0a 20 20 20 20 20 20 mem: {},.
48c0: 20 20 64 69 61 6c 73 3a 20 5b 5d 2c 0a 20 20 20 dials: [],.
48d0: 20 20 20 20 20 73 61 6d 70 6c 65 73 3a 20 5b 5d samples: []
48e0: 2c 0a 20 20 20 20 20 20 20 20 74 65 6d 70 6f 3a ,. tempo:
48f0: 20 31 32 30 2c 0a 20 20 20 20 20 20 20 20 74 69 120,. ti
4900: 63 6b 73 3a 20 31 36 2c 0a 20 20 20 20 7d 0a 0a cks: 16,. }..
4910: 20 20 20 20 74 68 69 73 2e 75 70 64 61 74 65 28 this.update(
4920: 29 3b 0a 20 20 20 20 72 69 6f 74 2e 6d 6f 75 6e );. riot.moun
4930: 74 28 27 62 69 74 72 68 79 74 68 6d 27 2c 20 7b t('bitrhythm', {
4940: 0a 20 20 20 20 20 20 20 20 73 6f 6e 67 3a 20 74 . song: t
4950: 68 69 73 2e 70 72 6f 70 73 2e 73 6f 6e 67 0a 20 his.props.song.
4960: 20 20 20 7d 29 0a 0a 0a 7d 0a 0a 65 64 69 74 54 })...}..editT
4970: 65 6d 70 6f 28 65 29 20 7b 0a 20 20 20 20 74 68 empo(e) {. th
4980: 69 73 2e 75 70 64 61 74 65 28 7b 0a 20 20 20 20 is.update({.
4990: 20 20 20 20 74 65 6d 70 6f 3a 20 65 2e 74 61 72 tempo: e.tar
49a0: 67 65 74 2e 76 61 6c 75 65 0a 20 20 20 20 7d 29 get.value. })
49b0: 0a 7d 0a 0a 65 64 69 74 54 69 63 6b 73 28 65 29 .}..editTicks(e)
49c0: 20 7b 0a 20 20 20 20 74 68 69 73 2e 75 70 64 61 {. this.upda
49d0: 74 65 28 7b 0a 20 20 20 20 20 20 20 20 74 69 63 te({. tic
49e0: 6b 73 3a 20 65 2e 74 61 72 67 65 74 2e 76 61 6c ks: e.target.val
49f0: 75 65 0a 20 20 20 20 7d 29 0a 7d 0a 0a 24 7b 63 ue. }).}..${c
4a00: 6f 72 65 5f 6c 6f 6f 70 7d 0a 0a 73 74 61 72 74 ore_loop}..start
4a10: 28 29 20 7b 0a 20 20 20 20 72 65 63 6f 72 64 65 () {. recorde
4a20: 72 2e 73 74 61 72 74 28 29 3b 0a 7d 0a 0a 73 74 r.start();.}..st
4a30: 6f 70 28 29 20 7b 0a 20 20 20 20 72 65 63 6f 72 op() {. recor
4a40: 64 65 72 2e 73 74 6f 70 28 29 3b 0a 7d 0a 0a 61 der.stop();.}..a
4a50: 64 64 44 69 61 6c 28 29 20 7b 0a 20 20 20 20 74 ddDial() {. t
4a60: 68 69 73 2e 73 74 61 74 65 2e 64 69 61 6c 73 2e his.state.dials.
4a70: 70 75 73 68 28 7b 7d 29 3b 0a 20 20 20 20 74 68 push({});. th
4a80: 69 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a 0a is.update();.}..
4a90: 61 64 64 4e 75 6d 62 65 72 28 29 20 7b 0a 20 20 addNumber() {.
4aa0: 20 20 74 68 69 73 2e 73 74 61 74 65 2e 6e 75 6d this.state.num
4ab0: 62 65 72 73 2e 70 75 73 68 28 7b 7d 29 3b 0a 20 bers.push({});.
4ac0: 20 20 20 74 68 69 73 2e 75 70 64 61 74 65 28 29 this.update()
4ad0: 3b 0a 7d 0a 0a 61 64 64 55 52 4c 28 76 61 6c 75 ;.}..addURL(valu
4ae0: 65 29 20 7b 0a 20 20 20 20 76 61 72 20 73 65 6c e) {. var sel
4af0: 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 74 68 f = this;. th
4b00: 69 73 2e 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 is.state.samples
4b10: 2e 70 75 73 68 28 7b 22 5f 5f 6e 61 6d 65 22 3a .push({"__name":
4b20: 20 76 61 6c 75 65 7d 29 3b 0a 20 20 20 20 76 61 value});. va
4b30: 72 20 73 61 6d 3b 0a 20 20 20 20 73 61 6d 20 3d r sam;. sam =
4b40: 20 6e 65 77 20 54 6f 6e 65 2e 53 61 6d 70 6c 65 new Tone.Sample
4b50: 72 28 7b 0a 20 20 20 20 20 20 20 20 75 72 6c 73 r({. urls
4b60: 3a 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 : {.
4b70: 20 22 43 33 22 3a 20 76 61 6c 75 65 2c 0a 20 20 "C3": value,.
4b80: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 29 3b 0a }. });.
4b90: 20 20 20 20 73 61 6d 5b 22 5f 5f 6e 61 6d 65 22 sam["__name"
4ba0: 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 73 ] = value;. s
4bb0: 61 6d 5b 22 5f 5f 75 72 6c 22 5d 20 3d 20 76 61 am["__url"] = va
4bc0: 6c 75 65 3b 0a 20 20 20 20 73 65 6c 66 2e 73 65 lue;. self.se
4bd0: 74 53 61 6d 70 6c 65 28 73 61 6d 2c 20 73 65 6c tSample(sam, sel
4be0: 66 2e 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 2e f.state.samples.
4bf0: 6c 65 6e 67 74 68 20 2d 20 31 29 3b 0a 7d 0a 0a length - 1);.}..
4c00: 61 64 64 53 61 6d 70 6c 65 55 52 4c 28 29 20 7b addSampleURL() {
4c10: 0a 20 20 20 20 76 61 72 20 73 65 6c 66 20 3d 20 . var self =
4c20: 74 68 69 73 3b 0a 20 20 20 20 61 6c 65 72 74 69 this;. alerti
4c30: 66 79 2e 70 72 6f 6d 70 74 28 20 27 45 6e 74 65 fy.prompt( 'Ente
4c40: 72 20 53 61 6d 70 6c 65 20 55 52 4c 27 2c 20 27 r Sample URL', '
4c50: 27 2c 20 27 27 0a 20 20 20 20 20 20 20 20 2c 20 ', ''. ,
4c60: 66 75 6e 63 74 69 6f 6e 28 65 76 74 2c 20 76 61 function(evt, va
4c70: 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 lue) {.
4c80: 20 20 20 73 65 6c 66 2e 61 64 64 55 52 4c 28 76 self.addURL(v
4c90: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 7d alue);. }
4ca0: 0a 20 20 20 20 20 20 20 20 2c 20 66 75 6e 63 74 . , funct
4cb0: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 ion() {.
4cc0: 20 20 20 20 61 6c 65 72 74 69 66 79 2e 65 72 72 alertify.err
4cd0: 6f 72 28 27 43 61 6e 63 65 6c 27 29 0a 20 20 20 or('Cancel').
4ce0: 20 20 20 20 20 7d 29 3b 0a 7d 0a 0a 61 64 64 53 });.}..addS
4cf0: 61 6d 70 6c 65 28 29 20 7b 0a 20 20 20 20 74 68 ample() {. th
4d00: 69 73 2e 73 74 61 74 65 2e 73 61 6d 70 6c 65 73 is.state.samples
4d10: 2e 70 75 73 68 28 7b 7d 29 3b 0a 20 20 20 20 74 .push({});. t
4d20: 68 69 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a his.update();.}.
4d30: 0a 72 6d 53 61 6d 70 6c 65 28 69 6e 64 65 78 29 .rmSample(index)
4d40: 20 7b 0a 20 20 20 74 68 69 73 2e 73 74 61 74 65 {. this.state
4d50: 2e 73 61 6d 70 6c 65 73 2e 73 70 6c 69 63 65 28 .samples.splice(
4d60: 69 6e 64 65 78 2c 20 31 29 3b 0a 20 20 20 74 68 index, 1);. th
4d70: 69 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a 0a is.update();.}..
4d80: 72 6d 44 69 61 6c 28 69 6e 64 65 78 29 20 7b 0a rmDial(index) {.
4d90: 20 20 20 74 68 69 73 2e 73 74 61 74 65 2e 64 69 this.state.di
4da0: 61 6c 73 2e 73 70 6c 69 63 65 28 69 6e 64 65 78 als.splice(index
4db0: 2c 20 31 29 3b 0a 20 20 20 74 68 69 73 2e 75 70 , 1);. this.up
4dc0: 64 61 74 65 28 29 3b 0a 7d 0a 0a 72 6d 4e 75 6d date();.}..rmNum
4dd0: 62 65 72 28 69 6e 64 65 78 29 20 7b 0a 20 20 20 ber(index) {.
4de0: 74 68 69 73 2e 73 74 61 74 65 2e 6e 75 6d 62 65 this.state.numbe
4df0: 72 73 2e 73 70 6c 69 63 65 28 69 6e 64 65 78 2c rs.splice(index,
4e00: 20 31 29 3b 0a 20 20 20 74 68 69 73 2e 75 70 64 1);. this.upd
4e10: 61 74 65 28 29 3b 0a 7d 0a 0a 73 65 74 53 61 6d ate();.}..setSam
4e20: 70 6c 65 28 65 2c 20 69 29 20 7b 0a 20 20 20 20 ple(e, i) {.
4e30: 74 68 69 73 2e 73 74 61 74 65 2e 73 61 6d 70 6c this.state.sampl
4e40: 65 73 5b 69 5d 20 3d 20 65 3b 0a 20 20 20 20 74 es[i] = e;. t
4e50: 68 69 73 2e 75 70 64 61 74 65 28 29 3b 0a 7d 0a his.update();.}.
4e60: 0a 3c 2f 73 63 72 69 70 74 3e 0a 0a 3c 2f 62 69 .</script>..</bi
4e70: 74 72 68 79 74 68 6d 3e 0a 0a 22 22 22 0a 66 72 trhythm>..""".fr
4e80: 6f 6d 20 6d 61 6b 6f 2e 74 65 6d 70 6c 61 74 65 om mako.template
4e90: 20 69 6d 70 6f 72 74 20 54 65 6d 70 6c 61 74 65 import Template
4ea0: 0a 0a 63 6f 64 65 20 3d 20 54 65 6d 70 6c 61 74 ..code = Templat
4eb0: 65 28 62 69 74 72 68 79 74 68 6d 29 2e 72 65 6e e(bitrhythm).ren
4ec0: 64 65 72 28 63 6f 72 65 5f 6c 6f 6f 70 3d 63 6f der(core_loop=co
4ed0: 72 65 5f 6c 6f 6f 70 29 0a 63 6f 67 2e 6f 75 74 re_loop).cog.out
4ee0: 28 62 69 74 72 68 79 74 68 6d 29 0a 6f 73 2e 73 (bitrhythm).os.s
4ef0: 79 73 74 65 6d 28 22 72 6d 20 70 75 62 6c 69 63 ystem("rm public
4f00: 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 62 69 74 72 /components/bitr
4f10: 68 79 74 68 6d 2e 74 61 67 22 29 0a 66 20 3d 20 hythm.tag").f =
4f20: 6f 70 65 6e 28 22 70 75 62 6c 69 63 2f 63 6f 6d open("public/com
4f30: 70 6f 6e 65 6e 74 73 2f 62 69 74 72 68 79 74 68 ponents/bitrhyth
4f40: 6d 2e 74 61 67 22 2c 20 22 77 22 29 0a 66 2e 77 m.tag", "w").f.w
4f50: 72 69 74 65 28 63 6f 64 65 29 0a 66 2e 63 6c 6f rite(code).f.clo
4f60: 73 65 28 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a se().@>.@@.```..
4f70: 23 23 20 53 61 6d 70 6c 65 0a 0a 59 6f 75 20 63 ## Sample..You c
4f80: 61 6e 20 61 64 64 20 73 61 6d 70 6c 65 73 20 75 an add samples u
4f90: 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20 75 70 sing the file up
4fa0: 6c 6f 61 64 2e 20 41 6c 6c 20 73 61 6d 70 6c 65 load. All sample
4fb0: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 s are available
4fc0: 61 73 20 61 6e 20 61 72 72 61 79 20 e2 80 93 20 as an array ...
4fd0: 73 61 6d 70 6c 65 73 2e 20 49 6e 69 74 69 61 6c samples. Initial
4fe0: 69 73 65 20 73 61 6d 70 6c 65 73 2c 20 67 6c 6f ise samples, glo
4ff0: 62 61 6c 20 76 61 72 69 61 62 6c 65 73 20 61 6e bal variables an
5000: 64 20 73 79 6e 74 68 65 73 69 73 65 72 73 20 75 d synthesisers u
5010: 73 69 6e 67 20 74 68 65 20 74 72 61 6e 73 69 74 sing the transit
5020: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 ion function and
5030: 20 63 68 61 6e 67 65 20 74 68 65 20 73 61 6d 70 change the samp
5040: 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 75 73 le parameters us
5050: 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64 75 72 ing the same dur
5060: 69 6e 67 20 6c 69 76 65 20 63 6f 64 69 6e 67 2e ing live coding.
5070: 0a 0a 60 60 60 7b 63 6f 64 65 2d 62 6c 6f 63 6b ..```{code-block
5080: 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a 66 6f 72 63 65 } html.---.force
5090: 3a 20 74 72 75 65 0a 2d 2d 2d 0a 0a 40 3c 0a 69 : true.---..@<.i
50a0: 6d 70 6f 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 mport cog.import
50b0: 20 6f 73 0a 0a 73 61 6d 70 6c 65 20 3d 20 22 22 os..sample = ""
50c0: 22 0a 3c 73 61 6d 70 6c 65 3e 0a 20 20 20 20 3c ".<sample>. <
50d0: 76 62 6f 78 20 63 6c 61 73 73 3d 22 6d 6c 2d 32 vbox class="ml-2
50e0: 22 3e 0a 20 20 20 20 20 20 20 20 3c 76 73 74 61 ">. <vsta
50f0: 63 6b 20 63 6c 61 73 73 3d 22 6d 6c 2d 32 22 3e ck class="ml-2">
5100: 0a 20 20 20 20 20 20 20 20 3c 21 2d 2d 20 3c 69 . <!-- <i
5110: 6e 70 75 74 20 74 79 70 65 3d 22 66 69 6c 65 22 nput type="file"
5120: 20 69 64 3d 7b 22 73 61 6d 70 6c 65 2d 66 69 6c id={"sample-fil
5130: 65 22 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e e" + this.props.
5140: 74 69 7d 20 73 74 79 6c 65 3d 22 77 69 64 74 68 ti} style="width
5150: 3a 20 31 32 30 70 78 3b 22 2f 3e 20 2d 2d 3e 0a : 120px;"/> -->.
5160: 20 20 20 20 20 20 20 20 3c 64 69 76 20 73 74 79 <div sty
5170: 6c 65 3d 22 6d 61 78 2d 77 69 64 74 68 3a 20 31 le="max-width: 1
5180: 32 30 70 78 3b 74 65 78 74 2d 6f 76 65 72 66 6c 20px;text-overfl
5190: 6f 77 3a 20 65 6c 6c 69 70 73 69 73 3b 20 77 68 ow: ellipsis; wh
51a0: 69 74 65 2d 73 70 61 63 65 3a 20 6e 6f 77 72 61 ite-space: nowra
51b0: 70 3b 6f 76 65 72 66 6c 6f 77 3a 20 68 69 64 64 p;overflow: hidd
51c0: 65 6e 3b 22 3e 0a 20 20 20 20 20 20 20 20 20 20 en;">.
51d0: 20 20 3c 73 70 61 6e 3e 7b 20 67 65 74 4c 61 73 <span>{ getLas
51e0: 74 28 74 68 69 73 2e 70 72 6f 70 73 2e 74 69 20 t(this.props.ti
51f0: 2d 31 29 7d 20 3c 2f 73 70 61 6e 3e 0a 20 20 20 -1)} </span>.
5200: 20 20 20 20 20 20 20 20 20 3c 73 70 61 6e 20 63 <span c
5210: 6c 61 73 73 3d 22 63 75 72 73 6f 72 2d 70 6f 69 lass="cursor-poi
5220: 6e 74 65 72 22 20 69 64 3d 7b 22 73 61 6d 70 6c nter" id={"sampl
5230: 65 22 20 2b 20 74 68 69 73 2e 70 72 6f 70 73 2e e" + this.props.
5240: 74 69 7d 20 6f 6e 63 6c 69 63 6b 3d 7b 72 65 6d ti} onclick={rem
5250: 6f 76 65 28 74 68 69 73 2e 70 72 6f 70 73 2e 74 ove(this.props.t
5260: 69 20 2d 31 29 7d 3e 28 78 29 3c 2f 73 70 61 6e i -1)}>(x)</span
5270: 3e 0a 20 20 20 20 20 20 20 20 3c 2f 64 69 76 3e >. </div>
5280: 0a 20 20 20 20 20 20 20 20 3c 2f 76 73 74 61 63 . </vstac
5290: 6b 3e 0a 20 20 20 20 3c 2f 76 62 6f 78 3e 0a 0a k>. </vbox>..
52a0: 20 20 20 20 3c 73 63 72 69 70 74 3e 0a 20 20 20 <script>.
52b0: 20 74 68 69 73 2e 70 72 6f 70 73 20 3d 20 6f 70 this.props = op
52c0: 74 73 3b 0a 0a 20 20 20 20 72 65 6d 6f 76 65 28 ts;.. remove(
52d0: 69 6e 64 65 78 29 20 7b 0a 20 20 20 20 20 20 20 index) {.
52e0: 20 72 65 74 75 72 6e 20 28 29 20 3d 3e 20 7b 0a return () => {.
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
5300: 2e 70 72 6f 70 73 2e 72 6d 73 61 6d 70 6c 65 28 .props.rmsample(
5310: 69 6e 64 65 78 29 3b 0a 20 20 20 20 20 20 20 20 index);.
5320: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 67 65 74 }. }.. get
5330: 4c 61 73 74 20 28 69 6e 64 65 78 29 20 7b 0a 20 Last (index) {.
5340: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e if (this.
5350: 70 72 6f 70 73 2e 73 61 6d 70 6c 65 73 20 26 26 props.samples &&
5360: 20 74 68 69 73 2e 70 72 6f 70 73 2e 73 61 6d 70 this.props.samp
5370: 6c 65 73 5b 69 6e 64 65 78 5d 20 26 26 20 74 68 les[index] && th
5380: 69 73 2e 70 72 6f 70 73 2e 73 61 6d 70 6c 65 73 is.props.samples
5390: 5b 69 6e 64 65 78 5d 5b 22 5f 5f 6e 61 6d 65 22 [index]["__name"
53a0: 5d 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ]) {.
53b0: 20 76 61 72 20 65 20 3d 20 74 68 69 73 2e 70 72 var e = this.pr
53c0: 6f 70 73 2e 73 61 6d 70 6c 65 73 5b 69 6e 64 65 ops.samples[inde
53d0: 78 5d 5b 22 5f 5f 6e 61 6d 65 22 5d 3b 0a 20 20 x]["__name"];.
53e0: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 65 6c var el
53f0: 65 6d 73 20 3d 20 65 2e 73 70 6c 69 74 28 22 2f ems = e.split("/
5400: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ");.
5410: 76 61 72 20 6e 61 6d 65 20 3d 20 65 6c 65 6d 73 var name = elems
5420: 5b 65 6c 65 6d 73 2e 6c 65 6e 67 74 68 20 2d 20 [elems.length -
5430: 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 1];.
5440: 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0a 20 20 20 return name;.
5450: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 } else {.
5460: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c consol
5470: 65 2e 6c 6f 67 28 74 68 69 73 2e 70 72 6f 70 73 e.log(this.props
5480: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 ). re
5490: 74 75 72 6e 20 22 22 3b 0a 20 20 20 20 20 20 20 turn "";.
54a0: 20 7d 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 74 }. }... t
54b0: 68 69 73 2e 6f 6e 28 22 6d 6f 75 6e 74 22 2c 20 his.on("mount",
54c0: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 0a 20 function () {..
54d0: 20 20 20 20 20 20 20 76 61 72 20 73 65 6c 66 20 var self
54e0: 3d 20 74 68 69 73 3b 0a 2f 2a 0a 20 20 20 20 20 = this;./*.
54f0: 20 20 20 76 61 72 20 73 61 6d 70 6c 65 5f 66 69 var sample_fi
5500: 6c 65 20 3d 20 24 28 22 23 73 61 6d 70 6c 65 2d le = $("#sample-
5510: 66 69 6c 65 22 20 2b 20 74 68 69 73 2e 70 72 6f file" + this.pro
5520: 70 73 2e 74 69 29 2e 67 65 74 28 30 29 3b 0a 20 ps.ti).get(0);.
5530: 20 20 20 20 20 20 20 76 61 72 20 73 61 6d 3b 0a var sam;.
5540: 0a 20 20 20 20 20 20 20 20 73 61 6d 70 6c 65 5f . sample_
5550: 66 69 6c 65 2e 61 64 64 45 76 65 6e 74 4c 69 73 file.addEventLis
5560: 74 65 6e 65 72 28 27 63 68 61 6e 67 65 27 2c 20 tener('change',
5570: 28 65 76 65 6e 74 29 20 3d 3e 20 7b 0a 20 20 20 (event) => {.
5580: 20 20 20 20 20 20 20 20 20 76 61 72 20 66 69 6c var fil
5590: 65 20 3d 20 65 76 65 6e 74 2e 73 72 63 45 6c 65 e = event.srcEle
55a0: 6d 65 6e 74 2e 66 69 6c 65 73 5b 30 5d 3b 0a 20 ment.files[0];.
55b0: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 61 var a
55c0: 20 3d 20 6e 65 77 20 41 75 64 69 6f 28 29 3b 0a = new Audio();.
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 61 2e 6f 6e a.on
55e0: 6c 6f 61 64 65 64 6d 65 74 61 64 61 74 61 20 3d loadedmetadata =
55f0: 20 28 65 29 20 3d 3e 20 7b 0a 20 20 20 20 20 20 (e) => {.
5600: 20 20 20 20 20 20 20 20 20 20 73 61 6d 20 3d 20 sam =
5610: 6e 65 77 20 54 6f 6e 65 2e 53 61 6d 70 6c 65 72 new Tone.Sampler
5620: 28 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ({.
5630: 20 20 20 20 20 20 20 75 72 6c 73 3a 20 20 7b 0a urls: {.
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5650: 20 20 20 20 20 20 20 20 22 43 33 22 3a 20 55 52 "C3": UR
5660: 4c 2e 63 72 65 61 74 65 4f 62 6a 65 63 74 55 52 L.createObjectUR
5670: 4c 28 66 69 6c 65 29 2c 0a 20 20 20 20 20 20 20 L(file),.
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a },.
5690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56a0: 20 20 20 20 6f 6e 6c 6f 61 64 3a 20 28 29 20 3d onload: () =
56b0: 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 > {.
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
56d0: 2e 75 70 64 61 74 65 28 29 3b 0a 20 20 20 20 20 .update();.
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56f0: 20 20 20 73 61 6d 2e 74 72 69 67 67 65 72 41 74 sam.triggerAt
5700: 74 61 63 6b 52 65 6c 65 61 73 65 28 22 43 33 22 tackRelease("C3"
5710: 2c 20 30 2e 35 29 3b 0a 20 20 20 20 20 20 20 20 , 0.5);.
5720: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
5730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 })
5740: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
5750: 20 20 20 73 61 6d 5b 22 5f 5f 6e 61 6d 65 22 5d sam["__name"]
5760: 20 3d 20 66 69 6c 65 2e 6e 61 6d 65 3b 0a 20 20 = file.name;.
5770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 sa
5780: 6d 5b 22 5f 5f 75 72 6c 22 5d 20 3d 20 22 22 3b m["__url"] = "";
5790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
57a0: 20 2f 2f 20 72 69 6f 74 20 64 6f 65 73 6e 27 74 // riot doesn't
57b0: 20 61 6c 6c 6f 77 20 63 61 6d 65 6c 63 61 73 65 allow camelcase
57c0: 20 3f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ?.
57d0: 20 20 20 73 65 6c 66 2e 70 72 6f 70 73 2e 73 65 self.props.se
57e0: 74 73 61 6d 70 6c 65 28 73 61 6d 2c 20 73 65 6c tsample(sam, sel
57f0: 66 2e 70 72 6f 70 73 2e 74 69 20 2d 20 31 29 3b f.props.ti - 1);
5800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 . }.
5810: 20 20 20 20 20 20 20 20 20 20 20 61 2e 73 72 63 a.src
5820: 20 3d 20 55 52 4c 2e 63 72 65 61 74 65 4f 62 6a = URL.createObj
5830: 65 63 74 55 52 4c 28 66 69 6c 65 29 3b 0a 20 20 ectURL(file);.
5840: 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 });.
5850: 20 20 2a 2f 0a 0a 20 20 20 20 7d 29 3b 0a 20 20 */.. });.
5860: 20 3c 2f 73 63 72 69 70 74 3e 0a 3c 2f 73 61 6d </script>.</sam
5870: 70 6c 65 3e 0a 22 22 22 0a 0a 63 6f 67 2e 6f 75 ple>."""..cog.ou
5880: 74 28 73 61 6d 70 6c 65 29 0a 6f 73 2e 73 79 73 t(sample).os.sys
5890: 74 65 6d 28 22 72 6d 20 70 75 62 6c 69 63 2f 63 tem("rm public/c
58a0: 6f 6d 70 6f 6e 65 6e 74 73 2f 73 61 6d 70 6c 65 omponents/sample
58b0: 2e 74 61 67 22 29 0a 66 20 3d 20 6f 70 65 6e 28 .tag").f = open(
58c0: 22 70 75 62 6c 69 63 2f 63 6f 6d 70 6f 6e 65 6e "public/componen
58d0: 74 73 2f 73 61 6d 70 6c 65 2e 74 61 67 22 2c 20 ts/sample.tag",
58e0: 22 77 22 29 0a 66 2e 77 72 69 74 65 28 73 61 6d "w").f.write(sam
58f0: 70 6c 65 29 0a 66 2e 63 6c 6f 73 65 28 29 0a 40 ple).f.close().@
5900: 3e 0a 40 40 0a 60 60 60 0a 0a 40 3c 0a 69 6d 70 >.@@.```..@<.imp
5910: 6f 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 20 6f ort cog.import o
5920: 73 0a 0a 61 70 70 20 3d 20 22 22 22 0a 28 69 6d s..app = """.(im
5930: 70 6f 72 74 20 5b 73 61 6e 69 63 20 5b 53 61 6e port [sanic [San
5940: 69 63 20 72 65 73 70 6f 6e 73 65 5d 5d 29 0a 28 ic response]]).(
5950: 69 6d 70 6f 72 74 20 5b 73 61 6e 69 63 2e 72 65 import [sanic.re
5960: 73 70 6f 6e 73 65 20 5b 6a 73 6f 6e 20 74 65 78 sponse [json tex
5970: 74 5d 5d 29 0a 28 69 6d 70 6f 72 74 20 5b 73 61 t]]).(import [sa
5980: 6e 69 63 2e 65 78 63 65 70 74 69 6f 6e 73 20 5b nic.exceptions [
5990: 4e 6f 74 46 6f 75 6e 64 20 61 62 6f 72 74 5d 5d NotFound abort]]
59a0: 29 0a 28 69 6d 70 6f 72 74 20 5b 6a 69 6e 6a 61 ).(import [jinja
59b0: 32 20 5b 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 46 2 [Environment F
59c0: 69 6c 65 53 79 73 74 65 6d 4c 6f 61 64 65 72 5d ileSystemLoader]
59d0: 5d 29 0a 28 69 6d 70 6f 72 74 20 72 65 29 0a 28 ]).(import re).(
59e0: 69 6d 70 6f 72 74 20 69 70 64 62 29 0a 28 69 6d import ipdb).(im
59f0: 70 6f 72 74 20 73 79 73 29 0a 28 69 6d 70 6f 72 port sys).(impor
5a00: 74 20 74 72 61 63 65 62 61 63 6b 29 0a 28 69 6d t traceback).(im
5a10: 70 6f 72 74 20 6a 73 6f 6e 29 0a 28 69 6d 70 6f port json).(impo
5a20: 72 74 20 64 61 74 65 74 69 6d 65 29 0a 28 69 6d rt datetime).(im
5a30: 70 6f 72 74 20 5b 65 6d 61 69 6c 2e 75 74 69 6c port [email.util
5a40: 73 20 5b 66 6f 72 6d 61 74 5f 64 61 74 65 74 69 s [format_dateti
5a50: 6d 65 5d 5d 29 0a 28 69 6d 70 6f 72 74 20 5b 75 me]]).(import [u
5a60: 72 6c 6c 69 62 2e 70 61 72 73 65 20 5b 75 72 6c rllib.parse [url
5a70: 70 61 72 73 65 5d 5d 29 0a 28 69 6d 70 6f 72 74 parse]]).(import
5a80: 20 62 61 73 65 36 34 29 0a 0a 28 73 65 74 76 20 base64)..(setv
5a90: 66 69 6c 65 2d 6c 6f 61 64 65 72 20 28 46 69 6c file-loader (Fil
5aa0: 65 53 79 73 74 65 6d 4c 6f 61 64 65 72 20 22 74 eSystemLoader "t
5ab0: 65 6d 70 6c 61 74 65 73 22 29 29 0a 28 73 65 74 emplates")).(set
5ac0: 76 20 65 6e 76 20 28 45 6e 76 69 72 6f 6e 6d 65 v env (Environme
5ad0: 6e 74 20 3a 6c 6f 61 64 65 72 20 66 69 6c 65 2d nt :loader file-
5ae0: 6c 6f 61 64 65 72 29 29 0a 0a 28 73 65 74 76 20 loader))..(setv
5af0: 61 70 70 20 28 53 61 6e 69 63 20 22 42 69 74 72 app (Sanic "Bitr
5b00: 68 79 74 68 6d 22 29 29 0a 0a 28 77 69 74 68 2d hythm"))..(with-
5b10: 64 65 63 6f 72 61 74 6f 72 0a 20 20 28 61 70 70 decorator. (app
5b20: 2e 65 78 63 65 70 74 69 6f 6e 20 4e 6f 74 46 6f .exception NotFo
5b30: 75 6e 64 29 0a 20 20 28 64 65 66 6e 2f 61 20 69 und). (defn/a i
5b40: 67 6e 6f 72 65 5f 34 30 34 73 20 5b 72 65 71 75 gnore_404s [requ
5b50: 65 73 74 20 65 78 63 65 70 74 69 6f 6e 5d 0a 20 est exception].
5b60: 20 20 20 28 72 65 74 75 72 6e 20 28 74 65 78 74 (return (text
5b70: 20 28 2b 20 22 59 65 70 2c 20 49 20 74 6f 74 61 (+ "Yep, I tota
5b80: 6c 6c 79 20 66 6f 75 6e 64 20 74 68 65 20 70 61 lly found the pa
5b90: 67 65 20 22 20 72 65 71 75 65 73 74 2e 75 72 6c ge " request.url
5ba0: 29 29 29 0a 20 20 29 0a 29 0a 0a 28 77 69 74 68 ))). ).)..(with
5bb0: 2d 64 65 63 6f 72 61 74 6f 72 0a 20 20 28 61 70 -decorator. (ap
5bc0: 70 2e 72 6f 75 74 65 20 22 2f 73 6f 6e 67 2f 3c p.route "/song/<
5bd0: 6e 61 6d 65 3e 22 29 0a 20 20 28 64 65 66 6e 2f name>"). (defn/
5be0: 61 20 67 65 74 2d 69 6e 64 65 78 20 5b 72 65 71 a get-index [req
5bf0: 75 65 73 74 20 6e 61 6d 65 5d 0a 20 20 20 20 28 uest name]. (
5c00: 73 65 74 76 20 74 65 6d 70 6c 61 74 65 20 28 65 setv template (e
5c10: 6e 76 2e 67 65 74 5f 74 65 6d 70 6c 61 74 65 20 nv.get_template
5c20: 22 69 6e 64 65 78 2e 68 74 6d 6c 22 29 29 0a 20 "index.html")).
5c30: 20 20 20 28 72 65 74 75 72 6e 20 28 72 65 73 70 (return (resp
5c40: 6f 6e 73 65 2e 68 74 6d 6c 20 28 74 65 6d 70 6c onse.html (templ
5c50: 61 74 65 2e 72 65 6e 64 65 72 20 7b 22 64 61 74 ate.render {"dat
5c60: 61 22 20 6e 61 6d 65 7d 29 29 29 0a 20 20 29 0a a" name}))). ).
5c70: 29 0a 0a 28 77 69 74 68 2d 64 65 63 6f 72 61 74 )..(with-decorat
5c80: 6f 72 0a 20 20 28 61 70 70 2e 72 6f 75 74 65 20 or. (app.route
5c90: 22 2f 22 29 0a 20 20 28 64 65 66 6e 2f 61 20 67 "/"). (defn/a g
5ca0: 65 74 2d 69 6e 64 65 78 20 5b 72 65 71 75 65 73 et-index [reques
5cb0: 74 5d 0a 20 20 20 20 28 73 65 74 76 20 74 65 6d t]. (setv tem
5cc0: 70 6c 61 74 65 20 28 65 6e 76 2e 67 65 74 5f 74 plate (env.get_t
5cd0: 65 6d 70 6c 61 74 65 20 22 69 6e 64 65 78 2e 68 emplate "index.h
5ce0: 74 6d 6c 22 29 29 0a 20 20 20 20 28 72 65 74 75 tml")). (retu
5cf0: 72 6e 20 28 72 65 73 70 6f 6e 73 65 2e 68 74 6d rn (response.htm
5d00: 6c 20 28 74 65 6d 70 6c 61 74 65 2e 72 65 6e 64 l (template.rend
5d10: 65 72 20 7b 22 64 61 74 61 22 20 22 22 7d 29 29 er {"data" ""}))
5d20: 29 0a 20 20 29 0a 29 0a 0a 28 77 69 74 68 2d 64 ). ).)..(with-d
5d30: 65 63 6f 72 61 74 6f 72 0a 20 20 28 61 70 70 2e ecorator. (app.
5d40: 72 6f 75 74 65 20 22 2f 69 73 73 75 65 22 29 0a route "/issue").
5d50: 20 20 28 64 65 66 6e 2f 61 20 67 65 74 2d 69 6e (defn/a get-in
5d60: 64 65 78 20 5b 72 65 71 75 65 73 74 5d 0a 20 20 dex [request].
5d70: 20 20 28 73 65 74 76 20 74 65 6d 70 6c 61 74 65 (setv template
5d80: 20 28 65 6e 76 2e 67 65 74 5f 74 65 6d 70 6c 61 (env.get_templa
5d90: 74 65 20 22 70 61 67 65 2e 68 74 6d 6c 22 29 29 te "page.html"))
5da0: 0a 20 20 20 20 28 72 65 74 75 72 6e 20 28 72 65 . (return (re
5db0: 73 70 6f 6e 73 65 2e 68 74 6d 6c 20 28 74 65 6d sponse.html (tem
5dc0: 70 6c 61 74 65 2e 72 65 6e 64 65 72 29 29 29 0a plate.render))).
5dd0: 20 20 29 0a 29 0a 0a 28 61 70 70 2e 73 74 61 74 ).)..(app.stat
5de0: 69 63 20 22 2f 22 20 22 2e 2f 70 75 62 6c 69 63 ic "/" "./public
5df0: 22 29 0a 0a 28 64 65 66 6d 61 69 6e 20 5b 26 72 ")..(defmain [&r
5e00: 65 73 74 20 61 72 67 73 5d 0a 20 20 20 20 28 61 est args]. (a
5e10: 70 70 2e 72 75 6e 20 3a 68 6f 73 74 20 22 30 2e pp.run :host "0.
5e20: 30 2e 30 2e 30 22 20 3a 70 6f 72 74 20 38 30 31 0.0.0" :port 801
5e30: 35 29 0a 29 0a 22 22 22 0a 0a 69 66 20 44 45 56 5).)."""..if DEV
5e40: 20 3d 3d 20 22 31 22 3a 0a 20 20 20 20 66 6f 72 == "1":. for
5e50: 5f 64 6f 63 73 20 3d 20 22 22 22 0a 23 23 20 41 _docs = """.## A
5e60: 70 70 0a 0a 60 60 60 7b 63 6f 64 65 2d 62 6c 6f pp..```{code-blo
5e70: 63 6b 7d 20 68 79 6c 61 6e 67 0a 2d 2d 2d 0a 66 ck} hylang.---.f
5e80: 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a 25 orce: true.---.%
5e90: 73 0a 60 60 60 0a 22 22 22 0a 20 20 20 20 63 6f s.```.""". co
5ea0: 67 2e 6f 75 74 28 66 6f 72 5f 64 6f 63 73 20 25 g.out(for_docs %
5eb0: 20 28 61 70 70 2c 29 29 0a 6f 73 2e 73 79 73 74 (app,)).os.syst
5ec0: 65 6d 28 22 72 6d 20 62 69 74 72 68 79 74 68 6d em("rm bitrhythm
5ed0: 2e 68 79 22 29 0a 66 20 3d 20 6f 70 65 6e 28 22 .hy").f = open("
5ee0: 62 69 74 72 68 79 74 68 6d 2e 68 79 22 2c 20 22 bitrhythm.hy", "
5ef0: 77 22 29 0a 66 2e 77 72 69 74 65 28 61 70 70 29 w").f.write(app)
5f00: 0a 66 2e 63 6c 6f 73 65 28 29 0a 40 3e 0a 40 40 .f.close().@>.@@
5f10: 0a 0a 40 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a ..@<.import cog.
5f20: 69 6d 70 6f 72 74 20 6f 73 0a 0a 69 6e 64 65 78 import os..index
5f30: 20 3d 20 22 22 22 0a 3c 21 44 4f 43 54 59 50 45 = """.<!DOCTYPE
5f40: 20 68 74 6d 6c 3e 0a 3c 68 74 6d 6c 20 6c 61 6e html>.<html lan
5f50: 67 3d 22 65 6e 22 3e 0a 0a 20 20 20 20 3c 68 65 g="en">.. <he
5f60: 61 64 3e 0a 20 20 20 20 20 20 20 20 3c 6d 65 74 ad>. <met
5f70: 61 20 63 68 61 72 73 65 74 3d 22 75 74 66 2d 38 a charset="utf-8
5f80: 22 3e 0a 0a 20 20 20 20 20 20 20 20 3c 74 69 74 ">.. <tit
5f90: 6c 65 3e 42 69 74 72 68 79 74 68 6d 3c 2f 74 69 le>Bitrhythm</ti
5fa0: 74 6c 65 3e 0a 0a 20 20 20 20 20 20 20 20 3c 6d tle>.. <m
5fb0: 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d 22 eta http-equiv="
5fc0: 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 22 20 63 Cache-Control" c
5fd0: 6f 6e 74 65 6e 74 3d 22 6e 6f 2d 63 61 63 68 65 ontent="no-cache
5fe0: 2c 20 6e 6f 2d 73 74 6f 72 65 2c 20 6d 75 73 74 , no-store, must
5ff0: 2d 72 65 76 61 6c 69 64 61 74 65 22 20 2f 3e 0a -revalidate" />.
6000: 20 20 20 20 20 20 20 20 3c 6d 65 74 61 20 68 74 <meta ht
6010: 74 70 2d 65 71 75 69 76 3d 22 50 72 61 67 6d 61 tp-equiv="Pragma
6020: 22 20 63 6f 6e 74 65 6e 74 3d 22 6e 6f 2d 63 61 " content="no-ca
6030: 63 68 65 22 20 2f 3e 0a 20 20 20 20 20 20 20 20 che" />.
6040: 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 <meta http-equiv
6050: 3d 22 45 78 70 69 72 65 73 22 20 63 6f 6e 74 65 ="Expires" conte
6060: 6e 74 3d 22 30 22 20 2f 3e 0a 0a 20 20 20 20 20 nt="0" />..
6070: 20 20 20 3c 6d 65 74 61 20 63 6f 6e 74 65 6e 74 <meta content
6080: 3d 22 42 69 74 72 68 79 74 68 6d 22 20 6e 61 6d ="Bitrhythm" nam
6090: 65 3d 22 64 65 73 63 72 69 70 74 69 6f 6e 22 20 e="description"
60a0: 78 6d 6c 3a 6c 61 6e 67 3d 22 65 6e 22 20 6c 61 xml:lang="en" la
60b0: 6e 67 3d 22 65 6e 22 3e 0a 20 20 20 20 20 20 20 ng="en">.
60c0: 20 3c 6d 65 74 61 20 63 6f 6e 74 65 6e 74 3d 22 <meta content="
60d0: 6c 69 74 65 72 61 74 65 20 70 72 6f 67 72 61 6d literate program
60e0: 6d 69 6e 67 2c 20 70 35 2c 20 6c 69 76 65 20 63 ming, p5, live c
60f0: 6f 64 69 6e 67 2c 20 61 6c 67 6f 72 61 76 65 2c oding, algorave,
6100: 20 64 65 6d 6f 73 63 65 6e 65 2c 20 63 72 65 61 demoscene, crea
6110: 74 69 76 65 20 70 72 6f 67 72 61 6d 6d 69 6e 67 tive programming
6120: 2c 20 6d 75 73 69 63 2c 20 74 65 63 68 6e 6f 2c , music, techno,
6130: 20 70 72 6f 67 72 61 6d 6d 69 6e 67 2c 20 77 65 programming, we
6140: 62 61 75 64 69 6f 2c 20 77 65 62 67 6c 2c 20 70 baudio, webgl, p
6150: 35 2c 20 69 6d 70 72 6f 76 69 73 69 6e 67 22 3e 5, improvising">
6160: 0a 0a 20 20 20 20 20 20 20 24 7b 63 6f 6d 6d 6f .. ${commo
6170: 6e 5f 73 63 72 69 70 74 73 7d 0a 0a 20 20 20 20 n_scripts}..
6180: 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 70 <link rel="p
6190: 72 65 63 6f 6e 6e 65 63 74 22 20 68 72 65 66 3d reconnect" href=
61a0: 22 68 74 74 70 73 3a 2f 2f 66 6f 6e 74 73 2e 67 "https://fonts.g
61b0: 73 74 61 74 69 63 2e 63 6f 6d 22 3e 0a 20 20 20 static.com">.
61c0: 20 20 20 20 20 3c 6c 69 6e 6b 20 68 72 65 66 3d <link href=
61d0: 22 68 74 74 70 73 3a 2f 2f 66 6f 6e 74 73 2e 67 "https://fonts.g
61e0: 6f 6f 67 6c 65 61 70 69 73 2e 63 6f 6d 2f 63 73 oogleapis.com/cs
61f0: 73 32 3f 66 61 6d 69 6c 79 3d 52 6f 62 6f 74 6f s2?family=Roboto
6200: 2b 4d 6f 6e 6f 3a 69 74 61 6c 2c 77 67 68 74 40 +Mono:ital,wght@
6210: 30 2c 31 30 30 3b 30 2c 32 30 30 3b 30 2c 33 30 0,100;0,200;0,30
6220: 30 3b 30 2c 34 30 30 3b 30 2c 35 30 30 3b 30 2c 0;0,400;0,500;0,
6230: 37 30 30 3b 31 2c 31 30 30 3b 31 2c 32 30 30 3b 700;1,100;1,200;
6240: 31 2c 33 30 30 3b 31 2c 34 30 30 3b 31 2c 35 30 1,300;1,400;1,50
6250: 30 3b 31 2c 37 30 30 26 64 69 73 70 6c 61 79 3d 0;1,700&display=
6260: 73 77 61 70 22 20 72 65 6c 3d 22 73 74 79 6c 65 swap" rel="style
6270: 73 68 65 65 74 22 3e 0a 20 20 20 20 20 20 20 20 sheet">.
6280: 3c 6c 69 6e 6b 20 68 72 65 66 3d 22 68 74 74 70 <link href="http
6290: 73 3a 2f 2f 66 6f 6e 74 73 2e 67 6f 6f 67 6c 65 s://fonts.google
62a0: 61 70 69 73 2e 63 6f 6d 2f 63 73 73 32 3f 66 61 apis.com/css2?fa
62b0: 6d 69 6c 79 3d 4d 61 6a 6f 72 2b 4d 6f 6e 6f 2b mily=Major+Mono+
62c0: 44 69 73 70 6c 61 79 26 66 61 6d 69 6c 79 3d 52 Display&family=R
62d0: 6f 62 6f 74 6f 2b 4d 6f 6e 6f 3a 69 74 61 6c 2c oboto+Mono:ital,
62e0: 77 67 68 74 40 30 2c 31 30 30 3b 30 2c 32 30 30 wght@0,100;0,200
62f0: 3b 30 2c 33 30 30 3b 30 2c 34 30 30 3b 30 2c 35 ;0,300;0,400;0,5
6300: 30 30 3b 30 2c 37 30 30 3b 31 2c 31 30 30 3b 31 00;0,700;1,100;1
6310: 2c 32 30 30 3b 31 2c 33 30 30 3b 31 2c 34 30 30 ,200;1,300;1,400
6320: 3b 31 2c 35 30 30 3b 31 2c 37 30 30 26 64 69 73 ;1,500;1,700&dis
6330: 70 6c 61 79 3d 73 77 61 70 22 20 72 65 6c 3d 22 play=swap" rel="
6340: 73 74 79 6c 65 73 68 65 65 74 22 3e 0a 0a 20 20 stylesheet">..
6350: 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 72 <script sr
6360: 63 3d 22 68 74 74 70 73 3a 2f 2f 63 6f 64 65 2e c="https://code.
6370: 6a 71 75 65 72 79 2e 63 6f 6d 2f 75 69 2f 31 2e jquery.com/ui/1.
6380: 31 32 2e 30 2f 6a 71 75 65 72 79 2d 75 69 2e 6d 12.0/jquery-ui.m
6390: 69 6e 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e in.js"></script>
63a0: 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e 6b 20 72 . <link r
63b0: 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 20 el="stylesheet"
63c0: 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 63 6f href="https://co
63d0: 64 65 2e 6a 71 75 65 72 79 2e 63 6f 6d 2f 75 69 de.jquery.com/ui
63e0: 2f 31 2e 31 32 2e 30 2f 74 68 65 6d 65 73 2f 73 /1.12.0/themes/s
63f0: 6d 6f 6f 74 68 6e 65 73 73 2f 6a 71 75 65 72 79 moothness/jquery
6400: 2d 75 69 2e 63 73 73 22 3e 0a 20 20 20 20 20 20 -ui.css">.
6410: 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 <script src="h
6420: 74 74 70 73 3a 2f 2f 63 64 6e 6a 73 2e 63 6c 6f ttps://cdnjs.clo
6430: 75 64 66 6c 61 72 65 2e 63 6f 6d 2f 61 6a 61 78 udflare.com/ajax
6440: 2f 6c 69 62 73 2f 6d 69 63 72 6f 6d 6f 64 61 6c /libs/micromodal
6450: 2f 30 2e 34 2e 36 2f 6d 69 63 72 6f 6d 6f 64 61 /0.4.6/micromoda
6460: 6c 2e 6d 69 6e 2e 6a 73 22 20 69 6e 74 65 67 72 l.min.js" integr
6470: 69 74 79 3d 22 73 68 61 35 31 32 2d 52 4d 4d 68 ity="sha512-RMMh
6480: 2b 49 48 7a 66 5a 4c 73 56 46 6f 31 72 58 39 50 +IHzfZLsVFo1rX9P
6490: 42 6f 79 73 78 72 4a 4a 71 6a 79 4f 53 33 31 48 BoysxrJJqjyOS31H
64a0: 59 57 66 74 6f 62 57 74 76 32 41 74 36 4b 42 54 YWftobWtv2At6KBT
64b0: 71 4b 70 76 56 44 49 57 41 6a 4c 35 61 69 56 2b qKpvVDIWAjL5aiV+
64c0: 4c 6a 46 71 6b 51 36 65 35 33 52 64 77 33 56 4f LjFqkQ6e53Rdw3VO
64d0: 42 67 3d 3d 22 20 63 72 6f 73 73 6f 72 69 67 69 Bg==" crossorigi
64e0: 6e 3d 22 61 6e 6f 6e 79 6d 6f 75 73 22 3e 3c 2f n="anonymous"></
64f0: 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 script>.
6500: 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 74 <script src="htt
6510: 70 73 3a 2f 2f 63 64 6e 2e 6a 73 64 65 6c 69 76 ps://cdn.jsdeliv
6520: 72 2e 6e 65 74 2f 6e 70 6d 2f 77 68 65 6e 69 70 r.net/npm/whenip
6530: 72 65 73 73 40 31 2e 38 2e 30 2f 64 69 73 74 2f ress@1.8.0/dist/
6540: 77 68 65 6e 69 70 72 65 73 73 2e 6a 73 22 3e 3c whenipress.js"><
6550: 2f 73 63 72 69 70 74 3e 0a 0a 20 20 20 20 20 20 /script>..
6560: 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 <script src="h
6570: 74 74 70 73 3a 2f 2f 63 64 6e 6a 73 2e 63 6c 6f ttps://cdnjs.clo
6580: 75 64 66 6c 61 72 65 2e 63 6f 6d 2f 61 6a 61 78 udflare.com/ajax
6590: 2f 6c 69 62 73 2f 41 6c 65 72 74 69 66 79 4a 53 /libs/AlertifyJS
65a0: 2f 31 2e 31 33 2e 31 2f 61 6c 65 72 74 69 66 79 /1.13.1/alertify
65b0: 2e 6d 69 6e 2e 6a 73 22 20 69 6e 74 65 67 72 69 .min.js" integri
65c0: 74 79 3d 22 73 68 61 35 31 32 2d 4a 6e 6a 47 2b ty="sha512-JnjG+
65d0: 57 74 35 33 47 73 70 55 51 58 51 68 63 2b 63 34 Wt53GspUQXQhc+c4
65e0: 6a 38 53 42 45 52 73 67 4a 41 6f 48 65 65 68 61 j8SBERsgJAoHeeha
65f0: 67 4b 48 6c 78 51 4e 2b 4d 74 43 43 6d 46 44 67 gKHlxQN+MtCCmFDg
6600: 68 58 39 2f 41 63 62 6b 6b 4e 52 5a 70 74 79 5a hX9/AcbkkNRZptyZ
6610: 55 34 7a 43 38 75 74 4b 35 39 4d 35 4c 34 35 49 U4zC8utK59M5L45I
6620: 77 3d 3d 22 20 63 72 6f 73 73 6f 72 69 67 69 6e w==" crossorigin
6630: 3d 22 61 6e 6f 6e 79 6d 6f 75 73 22 3e 3c 2f 73 ="anonymous"></s
6640: 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 3c cript>. <
6650: 6c 69 6e 6b 20 72 65 6c 3d 22 73 74 79 6c 65 73 link rel="styles
6660: 68 65 65 74 22 20 68 72 65 66 3d 22 68 74 74 70 heet" href="http
6670: 73 3a 2f 2f 63 64 6e 6a 73 2e 63 6c 6f 75 64 66 s://cdnjs.cloudf
6680: 6c 61 72 65 2e 63 6f 6d 2f 61 6a 61 78 2f 6c 69 lare.com/ajax/li
6690: 62 73 2f 41 6c 65 72 74 69 66 79 4a 53 2f 31 2e bs/AlertifyJS/1.
66a0: 31 33 2e 31 2f 63 73 73 2f 61 6c 65 72 74 69 66 13.1/css/alertif
66b0: 79 2e 6d 69 6e 2e 63 73 73 22 20 69 6e 74 65 67 y.min.css" integ
66c0: 72 69 74 79 3d 22 73 68 61 35 31 32 2d 49 58 75 rity="sha512-IXu
66d0: 6f 71 31 61 46 64 32 77 58 73 34 4e 71 47 73 6b oq1aFd2wXs4NqGsk
66e0: 77 58 32 56 62 2b 49 38 55 4a 2b 74 47 4a 45 75 wX2Vb+I8UJ+tGJEu
66f0: 2f 44 63 30 7a 77 4c 4e 4b 65 51 37 43 57 33 53 /Dc0zwLNKeQ7CW3S
6700: 72 36 76 30 79 55 33 7a 35 4f 51 57 65 33 65 53 r6v0yU3z5OQWe3eS
6710: 63 56 49 6b 45 52 34 4a 39 4c 37 62 79 72 67 52 cVIkER4J9L7byrgR
6720: 2f 66 41 3d 3d 22 20 63 72 6f 73 73 6f 72 69 67 /fA==" crossorig
6730: 69 6e 3d 22 61 6e 6f 6e 79 6d 6f 75 73 22 20 2f in="anonymous" /
6740: 3e 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e 6b 20 >. <link
6750: 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 rel="stylesheet"
6760: 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 63 href="https://c
6770: 64 6e 6a 73 2e 63 6c 6f 75 64 66 6c 61 72 65 2e dnjs.cloudflare.
6780: 63 6f 6d 2f 61 6a 61 78 2f 6c 69 62 73 2f 41 6c com/ajax/libs/Al
6790: 65 72 74 69 66 79 4a 53 2f 31 2e 31 33 2e 31 2f ertifyJS/1.13.1/
67a0: 63 73 73 2f 74 68 65 6d 65 73 2f 64 65 66 61 75 css/themes/defau
67b0: 6c 74 2e 6d 69 6e 2e 63 73 73 22 20 69 6e 74 65 lt.min.css" inte
67c0: 67 72 69 74 79 3d 22 73 68 61 35 31 32 2d 52 67 grity="sha512-Rg
67d0: 55 6a 44 70 77 6a 45 44 7a 41 62 37 6e 6b 53 68 UjDpwjEDzAb7nkSh
67e0: 69 7a 43 43 4a 2b 51 54 53 4c 49 69 4a 4f 31 6c izCCJ+QTSLIiJO1l
67f0: 64 74 75 78 7a 73 30 55 49 42 52 48 34 51 70 4f dtuxzs0UIBRH4QpO
6800: 6a 55 55 39 77 34 37 41 46 39 5a 6c 76 69 71 56 jUU9w47AF9ZlviqV
6810: 2f 64 4f 46 47 57 46 36 6f 37 6c 33 6c 74 74 45 /dOFGWF6o7l3lttE
6820: 46 62 36 67 3d 3d 22 20 63 72 6f 73 73 6f 72 69 Fb6g==" crossori
6830: 67 69 6e 3d 22 61 6e 6f 6e 79 6d 6f 75 73 22 20 gin="anonymous"
6840: 2f 3e 0a 0a 20 20 20 20 20 20 20 20 3c 73 63 72 />.. <scr
6850: 69 70 74 20 73 72 63 3d 22 2f 6a 73 6f 6e 2d 75 ipt src="/json-u
6860: 72 6c 2d 6d 61 73 74 65 72 2f 64 69 73 74 2f 62 rl-master/dist/b
6870: 72 6f 77 73 65 72 2f 6a 73 6f 6e 2d 75 72 6c 2e rowser/json-url.
6880: 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 js"></script>.
6890: 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 72 <script sr
68a0: 63 3d 22 2f 72 69 6f 74 2d 33 2e 31 33 2e 32 2f c="/riot-3.13.2/
68b0: 72 69 6f 74 2b 63 6f 6d 70 69 6c 65 72 2e 6a 73 riot+compiler.js
68c0: 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 0a 20 20 20 "></script>..
68d0: 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 <link rel="
68e0: 73 74 79 6c 65 73 68 65 65 74 22 20 68 72 65 66 stylesheet" href
68f0: 3d 22 68 74 74 70 73 3a 2f 2f 63 64 6e 6a 73 2e ="https://cdnjs.
6900: 63 6c 6f 75 64 66 6c 61 72 65 2e 63 6f 6d 2f 61 cloudflare.com/a
6910: 6a 61 78 2f 6c 69 62 73 2f 74 61 69 6c 77 69 6e jax/libs/tailwin
6920: 64 63 73 73 2f 32 2e 31 2e 32 2f 74 61 69 6c 77 dcss/2.1.2/tailw
6930: 69 6e 64 2e 6d 69 6e 2e 63 73 73 22 20 69 6e 74 ind.min.css" int
6940: 65 67 72 69 74 79 3d 22 73 68 61 35 31 32 2d 52 egrity="sha512-R
6950: 6e 74 61 74 50 4f 68 45 63 51 45 41 38 31 67 43 ntatPOhEcQEA81gC
6960: 2f 65 73 59 6f 43 6b 47 6b 4c 37 41 59 56 37 54 /esYoCkGkL7AYV7T
6970: 65 54 50 6f 55 2b 52 39 7a 45 34 34 2f 79 57 78 eTPoU+R9zE44/yWx
6980: 56 76 4c 49 42 66 42 53 61 4d 75 37 38 72 68 6f VvLIBfBSaMu78rho
6990: 44 64 37 33 5a 65 52 48 58 52 4a 4e 35 2b 61 50 Dd73ZeRHXRJN5+aP
69a0: 45 4b 35 33 51 3d 3d 22 20 63 72 6f 73 73 6f 72 EK53Q==" crossor
69b0: 69 67 69 6e 3d 22 61 6e 6f 6e 79 6d 6f 75 73 22 igin="anonymous"
69c0: 20 2f 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 72 />. <scr
69d0: 69 70 74 20 73 72 63 3d 22 68 74 74 70 73 3a 2f ipt src="https:/
69e0: 2f 73 74 61 63 6b 70 61 74 68 2e 62 6f 6f 74 73 /stackpath.boots
69f0: 74 72 61 70 63 64 6e 2e 63 6f 6d 2f 62 6f 6f 74 trapcdn.com/boot
6a00: 73 74 72 61 70 2f 34 2e 33 2e 31 2f 6a 73 2f 62 strap/4.3.1/js/b
6a10: 6f 6f 74 73 74 72 61 70 2e 6d 69 6e 2e 6a 73 22 ootstrap.min.js"
6a20: 20 69 6e 74 65 67 72 69 74 79 3d 22 73 68 61 33 integrity="sha3
6a30: 38 34 2d 4a 6a 53 6d 56 67 79 64 30 70 33 70 58 84-JjSmVgyd0p3pX
6a40: 42 31 72 52 69 62 5a 55 41 59 6f 49 49 79 36 4f B1rRibZUAYoIIy6O
6a50: 72 51 36 56 72 6a 49 45 61 46 66 2f 6e 4a 47 7a rQ6VrjIEaFf/nJGz
6a60: 49 78 46 44 73 66 34 78 30 78 49 4d 2b 42 30 37 IxFDsf4x0xIM+B07
6a70: 6a 52 4d 22 20 63 72 6f 73 73 6f 72 69 67 69 6e jRM" crossorigin
6a80: 3d 22 61 6e 6f 6e 79 6d 6f 75 73 22 3e 3c 2f 73 ="anonymous"></s
6a90: 63 72 69 70 74 3e 0a 0a 20 20 20 20 20 20 20 20 cript>..
6aa0: 3c 6c 69 6e 6b 20 72 65 6c 3d 22 73 74 79 6c 65 <link rel="style
6ab0: 73 68 65 65 74 22 20 68 72 65 66 3d 22 68 74 74 sheet" href="htt
6ac0: 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 ps://esironal.gi
6ad0: 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f thub.io/cmtouch/
6ae0: 6c 69 62 2f 63 6f 64 65 6d 69 72 72 6f 72 2e 63 lib/codemirror.c
6af0: 73 73 22 3e 0a 20 20 20 20 20 20 20 20 3c 6c 69 ss">. <li
6b00: 6e 6b 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 nk rel="styleshe
6b10: 65 74 22 20 68 72 65 66 3d 22 68 74 74 70 73 3a et" href="https:
6b20: 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 //esironal.githu
6b30: 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f 61 64 64 b.io/cmtouch/add
6b40: 6f 6e 2f 68 69 6e 74 2f 73 68 6f 77 2d 68 69 6e on/hint/show-hin
6b50: 74 2e 63 73 73 22 3e 0a 20 20 20 20 20 20 20 20 t.css">.
6b60: 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 74 <script src="htt
6b70: 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 ps://esironal.gi
6b80: 74 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f thub.io/cmtouch/
6b90: 6c 69 62 2f 63 6f 64 65 6d 69 72 72 6f 72 2e 6a lib/codemirror.j
6ba0: 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 s"></script>.
6bb0: 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 72 63 <script src
6bc0: 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 6f 6e ="https://esiron
6bd0: 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 6d 74 al.github.io/cmt
6be0: 6f 75 63 68 2f 61 64 64 6f 6e 2f 68 69 6e 74 2f ouch/addon/hint/
6bf0: 73 68 6f 77 2d 68 69 6e 74 2e 6a 73 22 3e 3c 2f show-hint.js"></
6c00: 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 script>.
6c10: 3c 73 63 72 69 70 74 20 73 72 63 3d 22 68 74 74 <script src="htt
6c20: 70 3a 2f 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 74 p://esironal.git
6c30: 68 75 62 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f 61 hub.io/cmtouch/a
6c40: 64 64 6f 6e 2f 68 69 6e 74 2f 78 6d 6c 2d 68 69 ddon/hint/xml-hi
6c50: 6e 74 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e nt.js"></script>
6c60: 0a 20 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 . <script
6c70: 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 65 73 src="https://es
6c80: 69 72 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f ironal.github.io
6c90: 2f 63 6d 74 6f 75 63 68 2f 61 64 64 6f 6e 2f 68 /cmtouch/addon/h
6ca0: 69 6e 74 2f 68 74 6d 6c 2d 68 69 6e 74 2e 6a 73 int/html-hint.js
6cb0: 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 "></script>.
6cc0: 20 20 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d <script src=
6cd0: 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 6f 6e 61 "https://esirona
6ce0: 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 6d 74 6f l.github.io/cmto
6cf0: 75 63 68 2f 6d 6f 64 65 2f 78 6d 6c 2f 78 6d 6c uch/mode/xml/xml
6d00: 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 .js"></script>.
6d10: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 73 <script s
6d20: 72 63 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 72 rc="https://esir
6d30: 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f 63 onal.github.io/c
6d40: 6d 74 6f 75 63 68 2f 6d 6f 64 65 2f 6a 61 76 61 mtouch/mode/java
6d50: 73 63 72 69 70 74 2f 6a 61 76 61 73 63 72 69 70 script/javascrip
6d60: 74 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a t.js"></script>.
6d70: 20 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 <script
6d80: 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 65 73 69 src="https://esi
6d90: 72 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 6f 2f ronal.github.io/
6da0: 63 6d 74 6f 75 63 68 2f 6d 6f 64 65 2f 63 73 73 cmtouch/mode/css
6db0: 2f 63 73 73 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 /css.js"></scrip
6dc0: 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 72 69 t>. <scri
6dd0: 70 74 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f pt src="https://
6de0: 65 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 62 2e esironal.github.
6df0: 69 6f 2f 63 6d 74 6f 75 63 68 2f 6d 6f 64 65 2f io/cmtouch/mode/
6e00: 68 74 6d 6c 6d 69 78 65 64 2f 68 74 6d 6c 6d 69 htmlmixed/htmlmi
6e10: 78 65 64 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 xed.js"></script
6e20: 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 72 69 70 >. <scrip
6e30: 74 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 65 t src="https://e
6e40: 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 62 2e 69 sironal.github.i
6e50: 6f 2f 63 6d 74 6f 75 63 68 2f 61 64 64 6f 6e 2f o/cmtouch/addon/
6e60: 73 65 6c 65 63 74 69 6f 6e 2f 61 63 74 69 76 65 selection/active
6e70: 2d 6c 69 6e 65 2e 6a 73 22 3e 3c 2f 73 63 72 69 -line.js"></scri
6e80: 70 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 72 pt>. <scr
6e90: 69 70 74 20 73 72 63 3d 22 68 74 74 70 73 3a 2f ipt src="https:/
6ea0: 2f 65 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 62 /esironal.github
6eb0: 2e 69 6f 2f 63 6d 74 6f 75 63 68 2f 61 64 64 6f .io/cmtouch/addo
6ec0: 6e 2f 65 64 69 74 2f 6d 61 74 63 68 62 72 61 63 n/edit/matchbrac
6ed0: 6b 65 74 73 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 kets.js"></scrip
6ee0: 74 3e 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e 6b t>. <link
6ef0: 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 rel="stylesheet
6f00: 22 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f " href="https://
6f10: 65 73 69 72 6f 6e 61 6c 2e 67 69 74 68 75 62 2e esironal.github.
6f20: 69 6f 2f 63 6d 74 6f 75 63 68 2f 74 68 65 6d 65 io/cmtouch/theme
6f30: 2f 6e 65 6f 6e 73 79 6e 74 61 78 2e 63 73 73 22 /neonsyntax.css"
6f40: 3e 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e 6b 20 >. <link
6f50: 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 rel="stylesheet"
6f60: 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 75 href="https://u
6f70: 6e 70 6b 67 2e 63 6f 6d 2f 70 79 6c 6f 6e 63 73 npkg.com/pyloncs
6f80: 73 40 6c 61 74 65 73 74 2f 63 73 73 2f 70 79 6c s@latest/css/pyl
6f90: 6f 6e 2e 63 73 73 22 2f 3e 0a 0a 0a 20 20 20 20 on.css"/>...
6fa0: 20 20 20 20 3c 73 63 72 69 70 74 20 73 72 63 3d <script src=
6fb0: 22 2f 74 75 6e 65 2e 6a 73 22 3e 3c 2f 73 63 72 "/tune.js"></scr
6fc0: 69 70 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 63 ipt>. <sc
6fd0: 72 69 70 74 20 73 72 63 3d 22 2f 6d 69 73 63 2e ript src="/misc.
6fe0: 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 0a 20 js"></script>..
6ff0: 20 20 20 20 20 20 20 3c 73 74 79 6c 65 20 74 79 <style ty
7000: 70 65 3d 22 74 65 78 74 2f 63 73 73 22 3e 0a 62 pe="text/css">.b
7010: 6f 64 79 20 7b 0a 20 20 20 20 62 61 63 6b 67 72 ody {. backgr
7020: 6f 75 6e 64 3a 20 62 6c 61 63 6b 3b 0a 20 20 20 ound: black;.
7030: 20 63 6f 6c 6f 72 3a 20 77 68 69 74 65 3b 0a 20 color: white;.
7040: 20 20 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 font-family:
7050: 27 52 6f 62 6f 74 6f 20 4d 6f 6e 6f 27 2c 20 6d 'Roboto Mono', m
7060: 6f 6e 6f 73 70 61 63 65 3b 0a 7d 0a 0a 61 20 7b onospace;.}..a {
7070: 0a 20 20 20 20 63 6f 6c 6f 72 3a 20 77 68 69 74 . color: whit
7080: 65 3b 0a 7d 0a 0a 69 6e 70 75 74 20 7b 0a 20 20 e;.}..input {.
7090: 20 20 63 6f 6c 6f 72 3a 20 62 6c 61 63 6b 3b 0a color: black;.
70a0: 7d 0a 0a 2e 62 74 6e 20 7b 0a 20 20 20 20 62 61 }...btn {. ba
70b0: 63 6b 67 72 6f 75 6e 64 3a 20 77 68 69 74 65 3b ckground: white;
70c0: 0a 20 20 20 20 63 6f 6c 6f 72 3a 20 62 6c 61 63 . color: blac
70d0: 6b 3b 0a 20 20 20 20 70 61 64 64 69 6e 67 3a 20 k;. padding:
70e0: 34 70 78 3b 0a 7d 0a 0a 2e 43 6f 64 65 4d 69 72 4px;.}...CodeMir
70f0: 72 6f 72 20 7b 0a 20 20 20 20 66 6f 6e 74 2d 73 ror {. font-s
7100: 69 7a 65 3a 20 31 32 70 78 3b 0a 20 20 20 20 77 ize: 12px;. w
7110: 69 64 74 68 3a 20 31 30 30 25 3b 0a 20 20 20 20 idth: 100%;.
7120: 70 61 64 64 69 6e 67 2d 6c 65 66 74 3a 20 34 70 padding-left: 4p
7130: 78 3b 0a 20 20 20 20 6c 69 6e 65 2d 68 65 69 67 x;. line-heig
7140: 68 74 3a 20 31 3b 0a 20 20 20 20 62 61 63 6b 67 ht: 1;. backg
7150: 72 6f 75 6e 64 3a 20 74 72 61 6e 73 70 61 72 65 round: transpare
7160: 6e 74 20 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 20 nt !important;.
7170: 20 20 20 63 6f 6c 6f 72 3a 20 77 68 69 74 65 20 color: white
7180: 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 20 20 20 20 !important;.
7190: 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 27 52 6f font-family: 'Ro
71a0: 62 6f 74 6f 20 4d 6f 6e 6f 27 2c 20 6d 6f 6e 6f boto Mono', mono
71b0: 73 70 61 63 65 20 21 69 6d 70 6f 72 74 61 6e 74 space !important
71c0: 3b 0a 7d 0a 0a 2e 43 6f 64 65 4d 69 72 72 6f 72 ;.}...CodeMirror
71d0: 2d 76 73 63 72 6f 6c 6c 62 61 72 2c 20 2e 43 6f -vscrollbar, .Co
71e0: 64 65 4d 69 72 72 6f 72 2d 68 73 63 72 6f 6c 6c deMirror-hscroll
71f0: 62 61 72 20 7b 0a 20 20 20 20 6f 76 65 72 66 6c bar {. overfl
7200: 6f 77 2d 78 3a 20 68 69 64 64 65 6e 20 21 69 6d ow-x: hidden !im
7210: 70 6f 72 74 61 6e 74 3b 0a 20 20 20 20 6f 76 65 portant;. ove
7220: 72 66 6c 6f 77 2d 79 3a 20 68 69 64 64 65 6e 20 rflow-y: hidden
7230: 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a 2e !important;.}...
7240: 43 6f 64 65 4d 69 72 72 6f 72 2d 63 75 72 73 6f CodeMirror-curso
7250: 72 20 7b 0a 20 20 62 6f 72 64 65 72 2d 6c 65 66 r {. border-lef
7260: 74 3a 20 32 70 78 20 73 6f 6c 69 64 20 77 68 69 t: 2px solid whi
7270: 74 65 20 21 69 6d 70 6f 72 74 61 6e 74 3b 0a 7d te !important;.}
7280: 0a 0a 2e 43 6f 64 65 4d 69 72 72 6f 72 20 70 72 ...CodeMirror pr
7290: 65 2c 0a 2e 43 6f 64 65 4d 69 72 72 6f 72 2d 6c e,..CodeMirror-l
72a0: 69 6e 65 20 3e 20 73 70 61 6e 2c 0a 2e 43 6f 64 ine > span,..Cod
72b0: 65 4d 69 72 72 6f 72 2d 6c 69 6e 65 73 20 7b 0a eMirror-lines {.
72c0: 20 20 70 61 64 64 69 6e 67 3a 20 30 20 21 69 6d padding: 0 !im
72d0: 70 6f 72 74 61 6e 74 3b 0a 7d 0a 0a 0a 20 20 20 portant;.}...
72e0: 20 20 20 20 20 3c 2f 73 74 79 6c 65 3e 0a 0a 20 </style>..
72f0: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 74 <script t
7300: 79 70 65 3d 22 72 69 6f 74 2f 74 61 67 22 20 73 ype="riot/tag" s
7310: 72 63 3d 22 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f rc="/components/
7320: 62 69 74 72 68 79 74 68 6d 2e 74 61 67 22 3e 3c bitrhythm.tag"><
7330: 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 20 /script>.
7340: 20 3c 73 63 72 69 70 74 20 74 79 70 65 3d 22 72 <script type="r
7350: 69 6f 74 2f 74 61 67 22 20 73 72 63 3d 22 2f 63 iot/tag" src="/c
7360: 6f 6d 70 6f 6e 65 6e 74 73 2f 64 69 61 6c 2e 74 omponents/dial.t
7370: 61 67 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 20 20 ag"></script>.
7380: 20 20 20 20 20 20 3c 73 63 72 69 70 74 20 74 79 <script ty
7390: 70 65 3d 22 72 69 6f 74 2f 74 61 67 22 20 73 72 pe="riot/tag" sr
73a0: 63 3d 22 2f 63 6f 6d 70 6f 6e 65 6e 74 73 2f 73 c="/components/s
73b0: 61 6d 70 6c 65 2e 74 61 67 22 20 3e 3c 2f 73 63 ample.tag" ></sc
73c0: 72 69 70 74 3e 0a 20 20 20 20 20 20 20 20 3c 73 ript>. <s
73d0: 63 72 69 70 74 20 74 79 70 65 3d 22 72 69 6f 74 cript type="riot
73e0: 2f 74 61 67 22 20 73 72 63 3d 22 2f 63 6f 6d 70 /tag" src="/comp
73f0: 6f 6e 65 6e 74 73 2f 6e 75 6d 62 65 72 2e 74 61 onents/number.ta
7400: 67 22 20 3e 3c 2f 73 63 72 69 70 74 3e 0a 0a 20 g" ></script>..
7410: 20 20 20 20 20 20 20 3c 73 63 72 69 70 74 3e 0a <script>.
7420: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 6e 64 wind
7430: 6f 77 2e 67 6f 61 74 63 6f 75 6e 74 65 72 20 3d ow.goatcounter =
7440: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
7450: 20 20 20 70 61 74 68 3a 20 66 75 6e 63 74 69 6f path: functio
7460: 6e 28 70 29 20 7b 20 72 65 74 75 72 6e 20 6c 6f n(p) { return lo
7470: 63 61 74 69 6f 6e 2e 68 6f 73 74 20 2b 20 70 20 cation.host + p
7480: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a }. }.
7490: 20 20 20 20 20 20 20 20 3c 2f 73 63 72 69 70 74 </script
74a0: 3e 0a 09 20 20 20 20 3c 73 63 72 69 70 74 20 64 >.. <script d
74b0: 61 74 61 2d 67 6f 61 74 63 6f 75 6e 74 65 72 3d ata-goatcounter=
74c0: 22 68 74 74 70 73 3a 2f 2f 61 6e 61 6c 79 74 69 "https://analyti
74d0: 63 73 2e 78 79 7a 7a 79 61 70 70 73 2e 6c 69 6e cs.xyzzyapps.lin
74e0: 6b 2f 63 6f 75 6e 74 22 20 61 73 79 6e 63 20 73 k/count" async s
74f0: 72 63 3d 22 2f 2f 61 6e 61 6c 79 74 69 63 73 2e rc="//analytics.
7500: 78 79 7a 7a 79 61 70 70 73 2e 6c 69 6e 6b 2f 63 xyzzyapps.link/c
7510: 6f 75 6e 74 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 ount.js"></scrip
7520: 74 3e 0a 20 20 20 20 3c 2f 68 65 61 64 3e 0a 0a t>. </head>..
7530: 20 20 20 20 3c 62 6f 64 79 3e 0a 20 20 20 20 20 <body>.
7540: 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 63 <div class="c
7550: 6f 6e 74 61 69 6e 65 72 61 2d 66 75 6c 6c 22 3e ontainera-full">
7560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 68 73 . <hs
7570: 74 61 63 6b 20 63 6c 61 73 73 3d 22 6d 62 2d 32 tack class="mb-2
7580: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ">.
7590: 20 20 20 3c 68 35 20 63 6c 61 73 73 3d 22 6d 6c <h5 class="ml
75a0: 2d 34 22 3e 3c 61 20 68 72 65 66 3d 22 2f 64 6f -4"><a href="/do
75b0: 63 73 2f 69 6e 64 65 78 2e 68 74 6d 6c 22 20 74 cs/index.html" t
75c0: 61 72 67 65 74 3d 22 5f 62 6c 61 6e 6b 22 3e 44 arget="_blank">D
75d0: 6f 63 73 3c 2f 61 3e 3c 2f 68 35 3e 0a 20 20 20 ocs</a></h5>.
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 68 35 <h5
75f0: 20 63 6c 61 73 73 3d 22 6d 6c 2d 34 22 3e 3c 61 class="ml-4"><a
7600: 20 74 61 72 67 65 74 3d 22 5f 62 6c 61 6e 6b 22 target="_blank"
7610: 20 68 72 65 66 3d 22 2f 69 73 73 75 65 22 3e 52 href="/issue">R
7620: 65 70 6f 72 74 20 62 75 67 73 20 2f 20 46 65 65 eport bugs / Fee
7630: 64 62 61 63 6b 3c 2f 61 3e 3c 2f 68 35 3e 0a 20 dback</a></h5>.
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
7650: 68 35 20 63 6c 61 73 73 3d 22 6d 6c 2d 34 22 3e h5 class="ml-4">
7660: 3c 61 20 68 72 65 66 3d 22 2f 73 6f 6e 67 2f 58 <a href="/song/X
7670: 51 41 41 41 41 4c 48 43 77 41 41 41 41 41 41 41 QAAAALHCwAAAAAAA
7680: 41 42 44 4b 55 71 47 55 35 76 49 38 45 79 67 76 ABDKUqGU5vI8Eygv
7690: 38 56 4c 63 36 48 31 4e 46 49 7a 64 59 51 34 53 8VLc6H1NFIzdYQ4S
76a0: 6d 54 2d 37 39 42 54 4b 6f 73 48 36 58 6a 65 32 mT-79BTKosH6Xje2
76b0: 49 59 6e 4e 52 67 45 4f 70 65 75 68 67 39 45 6a IYnNRgEOpeuhg9Ej
76c0: 39 49 7a 2d 5f 75 45 67 2d 6e 70 47 58 30 79 39 9Iz-_uEg-npGX0y9
76d0: 43 6d 7a 79 79 56 70 77 67 61 4f 55 72 4b 4e 6c CmzyyVpwgaOUrKNl
76e0: 46 2d 70 7a 56 58 66 33 59 6d 73 6c 45 71 42 6c F-pzVXf3YmslEqBl
76f0: 6f 52 59 30 4a 73 6c 4b 35 4b 61 70 65 53 46 53 oRY0JslK5KapeSFS
7700: 53 48 39 53 63 77 65 52 67 41 50 75 39 61 34 74 SH9ScweRgAPu9a4t
7710: 31 4c 30 2d 74 37 31 58 62 39 45 62 33 4b 4a 2d 1L0-t71Xb9Eb3KJ-
7720: 6c 65 7a 50 6f 37 78 63 6d 4b 39 78 43 6e 4e 47 lezPo7xcmK9xCnNG
7730: 6f 72 6d 5f 5f 6b 69 78 74 50 75 4d 5f 38 4c 33 orm__kixtPuM_8L3
7740: 59 4e 63 33 30 4f 41 33 47 4d 42 50 48 75 35 70 YNc30OA3GMBPHu5p
7750: 41 48 5f 5f 63 4b 6a 4c 46 36 6b 35 6d 43 47 4b AH__cKjLF6k5mCGK
7760: 73 4e 70 38 57 46 57 59 51 41 43 63 6b 42 52 30 sNp8WFWYQACckBR0
7770: 33 56 61 5a 47 68 66 5a 76 39 34 36 4e 59 79 46 3VaZGhfZv946NYyF
7780: 51 6c 77 36 62 6f 58 51 75 56 69 73 32 39 32 55 Qlw6boXQuVis292U
7790: 55 62 6f 45 6b 61 43 4a 30 43 56 35 77 47 75 72 UboEkaCJ0CV5wGur
77a0: 62 4a 55 41 37 69 6c 32 75 58 2d 6f 6b 79 4d 53 bJUA7il2uX-okyMS
77b0: 6a 78 37 57 56 73 65 56 47 2d 7a 44 51 30 77 42 jx7WVseVG-zDQ0wB
77c0: 6a 62 4d 4c 4e 59 6e 58 7a 6f 54 30 6b 59 78 49 jbMLNYnXzoT0kYxI
77d0: 5f 36 2d 47 4f 41 4f 56 61 6d 4a 4a 48 54 72 6b _6-GOAOVamJJHTrk
77e0: 75 6c 56 66 64 31 6b 30 41 67 7a 43 48 42 79 49 ulVfd1k0AgzCHByI
77f0: 36 7a 43 4e 74 57 79 42 61 33 69 5f 32 6b 73 34 6zCNtWyBa3i_2ks4
7800: 6e 63 4d 65 63 38 76 71 73 6a 41 79 38 42 68 77 ncMec8vqsjAy8Bhw
7810: 46 41 62 4b 41 50 31 52 44 4b 68 37 4d 55 78 77 FAbKAP1RDKh7MUxw
7820: 73 65 63 42 75 7a 79 4c 52 30 68 4b 47 64 64 69 secBuzyLR0hKGddi
7830: 76 5a 6d 50 6e 2d 78 79 59 42 2d 70 38 2d 58 72 vZmPn-xyYB-p8-Xr
7840: 75 5f 4d 69 6e 32 2d 33 5a 5f 33 59 5a 61 6c 32 u_Min2-3Z_3YZal2
7850: 5f 77 76 38 73 36 63 49 63 71 50 41 4a 34 77 66 _wv8s6cIcqPAJ4wf
7860: 35 44 48 32 39 55 37 6c 65 2d 65 52 4c 63 55 4e 5DH29U7le-eRLcUN
7870: 36 6c 68 4b 37 37 36 35 31 5f 78 65 55 2d 2d 7a 6lhK77651_xeU--z
7880: 37 41 36 45 33 4e 44 51 36 57 45 62 36 55 50 63 7A6E3NDQ6WEb6UPc
7890: 2d 62 72 78 54 7a 2d 4c 2d 77 5a 77 46 77 79 39 -brxTz-L-wZwFwy9
78a0: 35 51 6b 77 41 5a 77 34 62 57 52 32 4c 4e 57 37 5QkwAZw4bWR2LNW7
78b0: 38 44 56 64 43 53 6e 4d 43 38 7a 66 2d 44 56 57 8DVdCSnMC8zf-DVW
78c0: 67 46 6b 4b 50 39 53 55 39 69 47 51 6a 36 79 6b gFkKP9SU9iGQj6yk
78d0: 36 45 38 71 42 41 6c 5a 66 64 33 59 61 76 74 68 6E8qBAlZfd3Yavth
78e0: 5a 42 64 77 68 73 32 6d 74 7a 73 76 49 4c 38 71 ZBdwhs2mtzsvIL8q
78f0: 63 42 54 42 52 68 79 32 46 78 78 35 6e 35 74 4c cBTBRhy2Fxx5n5tL
7900: 71 32 6c 58 75 50 6b 48 31 39 2d 63 71 49 6f 4a q2lXuPkH19-cqIoJ
7910: 43 48 4a 55 6a 69 75 47 4b 57 68 33 50 71 4f 41 CHJUjiuGKWh3PqOA
7920: 6e 54 6a 39 6e 32 50 65 6a 76 4e 6c 70 31 47 55 nTj9n2PejvNlp1GU
7930: 4d 4d 69 78 52 37 59 4d 55 6f 66 63 4c 65 41 35 MMixR7YMUofcLeA5
7940: 6f 51 43 51 70 4d 53 75 49 45 50 38 73 55 73 68 oQCQpMSuIEP8sUsh
7950: 74 6b 33 7a 59 33 35 76 47 34 78 72 33 46 66 50 tk3zY35vG4xr3FfP
7960: 6a 37 4f 5a 69 4f 51 78 35 6a 52 74 4d 61 77 37 j7OZiOQx5jRtMaw7
7970: 6c 38 78 71 46 56 6d 5f 50 5a 2d 6b 45 67 78 6f l8xqFVm_PZ-kEgxo
7980: 49 56 46 74 70 5a 46 63 67 73 41 43 6e 75 42 65 IVFtpZFcgsACnuBe
7990: 4a 46 31 79 5a 32 73 73 31 47 4e 39 35 58 45 74 JF1yZ2ss1GN95XEt
79a0: 39 42 73 46 33 55 59 5f 55 4d 31 78 38 65 50 67 9BsF3UY_UM1x8ePg
79b0: 59 38 42 4c 34 57 48 37 42 63 48 5a 52 43 4f 56 Y8BL4WH7BcHZRCOV
79c0: 32 59 5a 65 52 58 5a 36 73 59 4c 4e 6a 4b 42 6a 2YZeRXZ6sYLNjKBj
79d0: 47 56 44 5f 46 41 52 5f 5a 4c 36 79 64 36 6c 5f GVD_FAR_ZL6yd6l_
79e0: 31 77 71 70 51 4a 50 62 33 6c 4c 31 66 68 42 65 1wqpQJPb3lL1fhBe
79f0: 63 4e 54 63 61 58 41 6e 36 31 52 68 79 53 4f 76 cNTcaXAn61RhySOv
7a00: 6f 6b 41 4a 35 54 63 72 54 74 71 64 68 73 47 45 okAJ5TcrTtqdhsGE
7a10: 42 55 6e 61 51 4f 47 52 49 66 4b 55 30 4e 56 34 BUnaQOGRIfKU0NV4
7a20: 7a 50 6d 67 54 6d 39 54 4c 41 53 7a 35 67 73 31 zPmgTm9TLASz5gs1
7a30: 56 52 6f 55 5a 30 36 68 74 57 69 72 66 4e 66 6a VRoUZ06htWirfNfj
7a40: 69 57 4e 72 62 77 38 49 39 67 67 6f 38 4b 4d 4b iWNrbw8I9ggo8KMK
7a50: 77 44 5a 32 76 34 43 6e 66 71 79 4c 34 65 43 70 wDZ2v4CnfqyL4eCp
7a60: 46 4e 5a 6a 56 49 59 4f 45 57 47 47 6b 74 4c 41 FNZjVIYOEWGGktLA
7a70: 61 64 61 66 51 6a 64 6a 4f 6b 57 48 57 46 38 4b adafQjdjOkWHWF8K
7a80: 49 64 72 33 75 50 42 74 31 6b 58 59 5f 2d 49 45 Idr3uPBt1kXY_-IE
7a90: 6b 6e 31 31 67 6a 6d 6e 31 71 39 79 62 67 4d 4c kn11gjmn1q9ybgML
7aa0: 78 72 69 7a 37 6b 57 71 7a 79 61 77 41 45 70 71 xriz7kWqzyawAEpq
7ab0: 4d 32 37 77 7a 49 77 45 54 32 73 6d 7a 62 4a 2d M27wzIwET2smzbJ-
7ac0: 7a 48 63 78 30 31 72 64 48 75 33 41 71 4c 4d 48 zHcx01rdHu3AqLMH
7ad0: 6b 2d 41 6c 69 51 4c 47 76 47 6b 6e 6c 75 4a 4e k-AliQLGvGknluJN
7ae0: 6a 57 6d 4b 2d 57 46 77 5a 55 52 38 5a 6f 6b 4a jWmK-WFwZUR8ZokJ
7af0: 36 63 56 59 57 37 30 61 36 58 31 64 59 57 6e 63 6cVYW70a6X1dYWnc
7b00: 51 73 50 77 79 43 33 41 4f 70 6c 44 79 55 43 68 QsPwyC3AOplDyUCh
7b10: 6c 43 5f 52 6d 67 76 7a 39 66 71 65 4d 73 2d 66 lC_Rmgvz9fqeMs-f
7b20: 58 75 62 30 6f 64 72 30 31 62 37 50 46 72 72 61 Xub0odr01b7PFrra
7b30: 4c 57 4a 30 32 58 6b 37 74 72 56 71 5f 47 71 68 LWJ02Xk7trVq_Gqh
7b40: 38 56 32 41 32 4c 41 54 55 4b 65 77 4a 54 30 35 8V2A2LATUKewJT05
7b50: 64 47 30 62 56 4a 54 42 64 4d 39 6e 38 36 43 2d dG0bVJTBdM9n86C-
7b60: 6d 67 79 4c 66 37 73 37 4a 65 4e 66 39 75 6c 39 mgyLf7s7JeNf9ul9
7b70: 37 43 73 53 33 42 61 6c 4e 5a 2d 2d 4e 30 68 66 7CsS3BalNZ--N0hf
7b80: 6b 50 62 54 5f 56 50 55 39 68 65 46 6b 6f 39 67 kPbT_VPU9heFko9g
7b90: 6f 47 5f 6d 6b 46 37 4b 79 36 46 62 74 56 70 45 oG_mkF7Ky6FbtVpE
7ba0: 52 43 71 77 37 55 62 76 50 67 64 46 64 49 4f 45 RCqw7UbvPgdFdIOE
7bb0: 6b 6f 71 50 59 45 77 41 6d 6a 77 7a 76 61 32 55 koqPYEwAmjwzva2U
7bc0: 2d 37 63 4c 6f 33 67 33 75 45 51 71 31 4e 42 56 -7cLo3g3uEQq1NBV
7bd0: 33 43 38 4c 69 6a 50 31 30 2d 31 41 76 71 75 32 3C8LijP10-1Avqu2
7be0: 64 66 5f 52 38 58 74 79 6b 4f 6b 34 48 38 79 69 df_R8XtykOk4H8yi
7bf0: 74 79 6c 63 78 6b 61 34 76 53 71 31 4a 6f 32 66 tylcxka4vSq1Jo2f
7c00: 76 2d 77 70 37 34 45 69 4a 69 36 54 6e 36 54 33 v-wp74EiJi6Tn6T3
7c10: 65 70 5a 4a 59 58 41 4d 42 52 58 52 78 6f 7a 79 epZJYXAMBRXRxozy
7c20: 6c 31 72 34 6c 62 4f 71 52 6a 44 66 71 6a 57 52 l1r4lbOqRjDfqjWR
7c30: 54 52 72 72 38 6c 39 55 32 69 4b 62 41 69 49 7a TRrr8l9U2iKbAiIz
7c40: 36 53 73 79 37 34 49 63 39 73 51 41 42 52 39 46 6Ssy74Ic9sQABR9F
7c50: 34 55 61 68 77 73 44 51 75 4a 67 6a 4f 48 4b 64 4UahwsDQuJgjOHKd
7c60: 61 4c 58 6d 42 48 6f 50 75 44 37 6e 58 5f 39 6d aLXmBHoPuD7nX_9m
7c70: 4d 59 56 22 3e 45 78 61 6d 70 6c 65 31 3c 2f 61 MYV">Example1</a
7c80: 3e 3c 2f 68 35 3e 0a 20 20 20 20 20 20 20 20 20 ></h5>.
7c90: 20 20 20 20 20 20 20 3c 68 35 20 63 6c 61 73 73 <h5 class
7ca0: 3d 22 6d 6c 2d 34 22 3e 3c 61 20 68 72 65 66 3d ="ml-4"><a href=
7cb0: 22 2f 73 6f 6e 67 2f 58 51 41 41 41 41 4c 59 45 "/song/XQAAAALYE
7cc0: 77 41 41 41 41 41 41 41 41 42 44 4b 55 71 47 55 wAAAAAAAABDKUqGU
7cd0: 35 76 49 38 45 79 67 76 38 56 4c 63 36 48 31 4e 5vI8Eygv8VLc6H1N
7ce0: 46 49 7a 64 59 51 65 35 6d 54 2d 37 39 42 54 4b FIzdYQe5mT-79BTK
7cf0: 6f 73 48 36 58 6a 65 32 49 59 6e 4e 52 67 45 4f osH6Xje2IYnNRgEO
7d00: 70 65 75 68 67 39 4e 54 66 49 54 2d 5f 75 45 67 peuhg9NTfIT-_uEg
7d10: 2d 6e 70 47 58 30 79 39 43 6d 7a 79 79 56 70 77 -npGX0y9CmzyyVpw
7d20: 67 61 4f 55 72 4b 4e 6c 46 2d 70 7a 56 58 66 33 gaOUrKNlF-pzVXf3
7d30: 59 6e 51 32 67 53 66 70 7a 59 33 7a 6c 59 4c 75 YnQ2gSfpzY3zlYLu
7d40: 6a 61 76 51 52 71 37 33 68 53 45 4d 2d 52 61 47 javQRq73hSEM-RaG
7d50: 78 54 78 75 75 64 39 6e 61 6f 6b 39 72 4d 70 59 xTxuud9naok9rMpY
7d60: 6e 2d 55 43 61 4e 69 46 32 7a 72 6e 6e 71 55 42 n-UCaNiF2zrnnqUB
7d70: 36 31 73 5f 32 32 70 59 4f 45 5f 39 4b 75 46 6f 61s_22pYOE_9KuFo
7d80: 37 76 45 4a 4d 43 74 55 32 62 6b 78 79 4e 64 67 7vEJMCtU2bkxyNdg
7d90: 53 58 7a 77 6d 49 44 75 6f 38 4f 79 78 63 49 68 SXzwmIDuo8OyxcIh
7da0: 39 48 51 50 35 39 55 5a 62 4e 52 69 78 6c 42 6e 9HQP59UZbNRixlBn
7db0: 6d 77 37 33 50 6e 79 77 53 35 44 4a 42 6f 48 38 mw73PnywS5DJBoH8
7dc0: 4e 45 49 41 6e 6c 4c 70 4c 34 72 71 61 6f 6b 66 NEIAnlLpL4rqaokf
7dd0: 4e 39 43 66 74 65 30 49 64 33 39 32 39 6e 32 36 N9Cfte0Id3929n26
7de0: 49 6a 41 37 7a 56 5a 46 37 35 6f 76 58 33 37 4b IjA7zVZF75ovX37K
7df0: 4f 31 78 54 39 69 42 61 38 67 74 2d 77 38 63 76 O1xT9iBa8gt-w8cv
7e00: 59 42 64 49 64 56 4c 35 4a 55 4f 72 62 66 30 63 YBdIdVL5JUOrbf0c
7e10: 63 56 4a 53 6f 58 47 46 6f 4d 30 55 34 47 58 6f cVJSoXGFoM0U4GXo
7e20: 45 44 54 68 77 30 30 46 64 4b 6e 66 73 71 31 57 EDThw00FdKnfsq1W
7e30: 65 4a 6a 45 51 74 34 51 6e 38 66 39 30 54 6b 6b eJjEQt4Qn8f90Tkk
7e40: 51 67 6b 70 53 61 6a 52 39 64 41 30 41 4a 42 71 QgkpSajR9dA0AJBq
7e50: 4b 44 75 56 65 45 67 44 6f 46 73 62 56 49 2d 5a KDuVeEgDoFsbVI-Z
7e60: 5a 56 76 4a 57 32 64 44 5f 39 47 49 6d 35 50 70 ZVvJW2dD_9GIm5Pp
7e70: 51 53 54 7a 70 75 42 73 6c 7a 44 37 5a 4a 51 53 QSTzpuBslzD7ZJQS
7e80: 49 33 58 41 31 67 32 46 5f 51 50 34 77 36 55 34 I3XA1g2F_QP4w6U4
7e90: 72 4f 72 54 4d 5a 55 51 53 72 5f 5f 5f 73 32 32 rOrTMZUQSr___s22
7ea0: 64 38 50 6c 70 30 46 62 66 66 44 43 71 38 64 72 d8Plp0FbffDCq8dr
7eb0: 69 30 43 38 6b 55 59 50 71 53 5f 6e 70 5f 4e 6e i0C8kUYPqS_np_Nn
7ec0: 72 37 73 44 59 39 4b 73 78 67 4e 5a 4a 6d 55 78 r7sDY9KsxgNZJmUx
7ed0: 59 6b 74 31 58 42 54 4f 33 69 57 6d 52 36 52 5a Ykt1XBTO3iWmR6RZ
7ee0: 37 4f 46 6b 36 50 5a 38 52 34 34 4e 58 77 68 76 7OFk6PZ8R44NXwhv
7ef0: 78 62 55 45 69 6b 4d 6f 62 6f 50 53 57 31 58 50 xbUEikMoboPSW1XP
7f00: 69 56 34 78 74 43 66 5a 62 34 71 45 34 79 43 50 iV4xtCfZb4qE4yCP
7f10: 32 78 48 50 6c 45 6e 69 55 68 63 4e 72 57 63 35 2xHPlEniUhcNrWc5
7f20: 36 30 38 68 72 4e 6b 56 66 70 51 55 6d 59 4c 46 608hrNkVfpQUmYLF
7f30: 76 58 46 54 79 55 48 41 34 61 4f 6b 52 44 6f 48 vXFTyUHA4aOkRDoH
7f40: 66 30 6a 48 77 47 7a 79 42 56 2d 59 61 6e 50 36 f0jHwGzyBV-YanP6
7f50: 35 59 6c 5a 70 75 70 5a 43 34 6f 57 33 62 6a 68 5YlZpupZC4oW3bjh
7f60: 4f 30 31 74 66 68 5f 71 59 57 4e 41 5f 5a 70 44 O01tfh_qYWNA_ZpD
7f70: 56 43 43 58 52 6f 47 5a 4a 66 72 42 6a 6b 6d 61 VCCXRoGZJfrBjkma
7f80: 59 6f 6d 39 47 64 36 6d 76 47 56 7a 69 6c 6c 62 Yom9Gd6mvGVzillb
7f90: 6b 36 4c 44 30 5f 41 6d 75 5f 5a 75 62 6c 62 34 k6LD0_Amu_Zublb4
7fa0: 5f 41 5a 31 53 41 78 4b 53 57 6c 4d 66 62 6d 62 _AZ1SAxKSWlMfbmb
7fb0: 58 51 66 57 31 36 52 53 4d 69 64 74 6d 54 43 4b XQfW16RSMidtmTCK
7fc0: 41 4d 6d 46 39 4c 43 4f 4e 4b 63 6a 54 52 5f 31 AMmF9LCONKcjTR_1
7fd0: 50 32 76 55 33 66 50 52 37 68 42 68 52 74 62 74 P2vU3fPR7hBhRtbt
7fe0: 4e 52 30 78 4e 45 66 52 73 74 58 4a 38 31 5a 63 NR0xNEfRstXJ81Zc
7ff0: 79 43 35 59 54 4b 38 64 6e 70 4d 77 4d 58 4b 6b yC5YTK8dnpMwMXKk
8000: 35 75 6f 61 42 4d 44 62 6f 63 68 62 41 4b 58 61 5uoaBMDbochbAKXa
8010: 73 77 67 5a 4b 49 6e 32 75 73 79 69 35 5a 34 70 swgZKIn2usyi5Z4p
8020: 79 51 66 38 78 43 53 68 65 51 61 77 79 59 53 41 yQf8xCSheQawyYSA
8030: 30 33 31 5a 48 41 33 77 52 75 71 5f 37 72 6a 68 031ZHA3wRuq_7rjh
8040: 6e 30 62 58 5a 72 45 47 6e 42 30 51 46 7a 78 67 n0bXZrEGnB0QFzxg
8050: 4d 2d 64 59 73 59 37 43 55 6f 6a 4b 72 38 7a 69 M-dYsY7CUojKr8zi
8060: 5a 47 58 47 62 39 7a 6f 56 48 76 47 44 49 30 53 ZGXGb9zoVHvGDI0S
8070: 49 46 79 46 49 72 4d 73 36 6b 45 7a 70 5a 41 71 IFyFIrMs6kEzpZAq
8080: 5f 43 6e 4a 79 71 4a 69 34 6e 62 62 71 66 6f 48 _CnJyqJi4nbbqfoH
8090: 6c 45 33 6e 44 79 4c 4e 4b 46 6b 31 65 34 4f 48 lE3nDyLNKFk1e4OH
80a0: 71 50 73 55 39 47 31 4c 52 4e 6e 48 42 77 53 6a qPsU9G1LRNnHBwSj
80b0: 69 4a 43 6e 76 5a 4f 5f 78 76 5f 56 51 62 74 57 iJCnvZO_xv_VQbtW
80c0: 6d 51 77 4c 72 54 37 6a 36 50 5a 65 58 76 4e 4f mQwLrT7j6PZeXvNO
80d0: 7a 2d 79 4b 57 51 46 63 45 2d 30 52 58 6e 36 2d z-yKWQFcE-0RXn6-
80e0: 45 75 71 54 37 4c 4e 54 46 31 47 53 6f 32 6f 39 EuqT7LNTF1GSo2o9
80f0: 41 46 53 35 5a 32 50 4a 71 49 58 69 6f 44 39 65 AFS5Z2PJqIXioD9e
8100: 62 72 39 78 6a 46 58 4e 72 66 54 64 49 65 33 32 br9xjFXNrfTdIe32
8110: 64 67 63 67 51 48 56 48 4e 79 6a 45 49 48 32 32 dgcgQHVHNyjEIH22
8120: 41 41 42 55 51 57 59 74 48 52 76 5a 51 70 63 66 AABUQWYtHRvZQpcf
8130: 73 55 6a 4a 51 4d 31 34 30 4d 4a 38 6e 6d 70 6a sUjJQM140MJ8nmpj
8140: 6d 78 6c 68 74 41 4d 45 73 74 50 7a 62 47 59 55 mxlhtAMEstPzbGYU
8150: 4b 5a 64 6a 68 46 31 4c 6b 65 65 50 78 58 44 34 KZdjhF1LkeePxXD4
8160: 36 7a 6e 69 4e 39 63 46 45 74 52 50 54 4e 52 39 6zniN9cFEtRPTNR9
8170: 6c 75 50 34 57 32 72 68 66 48 6e 76 50 34 5f 74 luP4W2rhfHnvP4_t
8180: 52 41 69 70 6d 51 69 42 5f 36 52 53 52 76 4c 61 RAipmQiB_6RSRvLa
8190: 69 56 59 66 6b 59 59 58 64 7a 4d 6b 58 5f 4d 35 iVYfkYYXdzMkX_M5
81a0: 62 6c 66 77 43 4b 51 2d 44 79 44 46 79 30 68 54 blfwCKQ-DyDFy0hT
81b0: 77 33 6d 59 5a 2d 53 62 59 54 31 31 52 56 4f 2d w3mYZ-SbYT11RVO-
81c0: 35 64 45 6d 5f 59 6e 74 59 6d 67 51 4f 49 31 46 5dEm_YntYmgQOI1F
81d0: 49 37 41 68 4d 78 70 6d 79 45 32 37 4c 77 62 37 I7AhMxpmyE27Lwb7
81e0: 33 6f 44 4f 30 53 65 53 2d 53 44 6a 34 54 36 6e 3oDO0SeS-SDj4T6n
81f0: 62 66 6c 74 66 48 64 57 44 50 46 61 65 55 57 64 bfltfHdWDPFaeUWd
8200: 31 32 4b 52 6d 49 2d 45 38 41 51 43 63 6e 6d 4a 12KRmI-E8AQCcnmJ
8210: 61 79 6f 42 6e 4d 58 79 58 4e 77 33 6d 75 58 30 ayoBnMXyXNw3muX0
8220: 33 31 39 57 68 75 69 74 54 74 61 62 33 6e 33 76 319WhuitTtab3n3v
8230: 77 5a 4d 31 65 37 6b 75 31 31 71 31 72 4e 6f 61 wZM1e7ku11q1rNoa
8240: 41 33 56 58 4c 62 42 4a 64 79 53 31 56 78 76 64 A3VXLbBJdyS1Vxvd
8250: 76 6d 38 54 6c 65 64 35 36 53 35 34 73 69 4f 73 vm8Tled56S54siOs
8260: 45 59 47 52 71 6d 64 69 43 33 67 4f 32 5a 47 61 EYGRqmdiC3gO2ZGa
8270: 42 71 36 38 53 4a 5a 39 7a 78 65 39 79 74 74 4e Bq68SJZ9zxe9yttN
8280: 46 45 58 46 46 67 57 59 46 6e 49 6e 5f 45 4d 53 FEXFFgWYFnIn_EMS
8290: 54 4e 6a 31 49 4c 42 30 77 6b 4f 51 50 7a 73 6a TNj1ILB0wkOQPzsj
82a0: 46 58 45 45 61 33 57 36 65 73 58 54 75 6a 46 75 FXEEa3W6esXTujFu
82b0: 6f 48 4b 30 35 71 34 72 72 66 59 69 63 4b 5a 6b oHK05q4rrfYicKZk
82c0: 71 30 31 68 66 61 6f 5a 63 6f 76 49 62 44 46 4e q01hfaoZcovIbDFN
82d0: 79 47 74 70 67 45 7a 6e 2d 42 46 50 4a 58 4b 57 yGtpgEzn-BFPJXKW
82e0: 77 71 6e 35 67 6b 67 72 76 5a 69 59 78 56 78 47 wqn5gkgrvZiYxVxG
82f0: 37 61 34 34 39 47 6a 6a 5f 52 32 48 71 4e 62 62 7a449Gjj_R2HqNbb
8300: 69 54 6d 64 31 6c 61 30 4d 4b 44 6e 56 4c 57 76 iTmd1la0MKDnVLWv
8310: 39 79 58 58 52 64 52 4c 51 72 4b 43 34 5a 32 6b 9yXXRdRLQrKC4Z2k
8320: 41 4a 49 4f 64 77 78 6c 75 6b 36 66 52 42 46 7a AJIOdwxluk6fRBFz
8330: 52 57 54 5f 6f 30 34 36 79 6a 4d 2d 6e 76 67 70 RWT_o046yjM-nvgp
8340: 33 4b 4c 4a 55 2d 6e 5f 43 57 75 33 6d 67 66 6d 3KLJU-n_CWu3mgfm
8350: 51 69 35 76 43 62 4e 78 52 63 7a 45 65 79 61 4a Qi5vCbNxRczEeyaJ
8360: 47 67 33 44 4a 4c 2d 61 6e 78 58 6b 30 41 32 43 Gg3DJL-anxXk0A2C
8370: 46 73 46 43 58 52 4c 63 63 6d 68 48 56 37 4d 6a FsFCXRLccmhHV7Mj
8380: 51 64 68 34 73 64 76 6e 76 6c 33 4a 4f 31 59 70 Qdh4sdvnvl3JO1Yp
8390: 74 31 5f 6e 73 42 58 51 4a 71 58 76 61 68 77 6b t1_nsBXQJqXvahwk
83a0: 6a 70 45 43 35 6a 7a 64 75 76 54 64 30 72 49 48 jpEC5jzduvTd0rIH
83b0: 67 44 42 41 7a 4f 33 50 41 37 59 4e 6a 57 46 5f gDBAzO3PA7YNjWF_
83c0: 72 31 45 6d 61 67 74 73 42 5f 31 56 46 53 52 71 r1EmagtsB_1VFSRq
83d0: 41 51 64 58 6a 62 45 65 70 38 53 4c 4b 4e 71 76 AQdXjbEep8SLKNqv
83e0: 38 4e 37 49 4c 6b 69 78 32 4e 65 54 4d 33 30 72 8N7ILkix2NeTM30r
83f0: 39 78 79 58 74 58 63 47 4f 4f 6d 6f 51 4b 34 41 9xyXtXcGOOmoQK4A
8400: 4d 6b 31 74 48 42 6d 51 34 6d 36 59 59 4e 61 6c Mk1tHBmQ4m6YYNal
8410: 57 58 4a 5f 61 47 49 6a 64 42 67 78 34 6a 67 73 WXJ_aGIjdBgx4jgs
8420: 52 59 6a 57 70 31 48 39 71 52 72 30 77 4d 6b 6d RYjWp1H9qRr0wMkm
8430: 47 37 35 7a 4f 53 62 75 4f 79 5f 6c 67 35 2d 43 G75zOSbuOy_lg5-C
8440: 2d 78 62 73 7a 76 70 37 42 35 59 45 4c 5a 62 6c -xbszvp7B5YELZbl
8450: 70 6a 6e 70 58 43 57 38 41 68 58 4d 57 43 4c 4d pjnpXCW8AhXMWCLM
8460: 5f 69 47 31 36 6c 6b 67 77 32 34 5a 34 30 56 57 _iG16lkgw24Z40VW
8470: 68 34 51 39 44 43 58 6f 4d 67 5a 6d 4f 58 6d 2d h4Q9DCXoMgZmOXm-
8480: 39 38 57 69 64 45 46 66 6b 4d 50 5f 38 4c 37 73 98WidEFfkMP_8L7s
8490: 64 51 6a 57 52 78 4d 41 6f 64 6b 4c 68 55 6b 48 dQjWRxMAodkLhUkH
84a0: 6e 73 42 52 6c 59 4e 43 68 6d 41 65 78 4e 76 7a nsBRlYNChmAexNvz
84b0: 4b 57 33 78 69 69 44 68 43 5f 6b 36 71 4b 52 66 KW3xiiDhC_k6qKRf
84c0: 6c 64 56 67 43 47 53 42 46 66 70 6c 64 4a 46 5f ldVgCGSBFfpldJF_
84d0: 38 65 37 45 79 51 22 3e 45 78 61 6d 70 6c 65 32 8e7EyQ">Example2
84e0: 3c 2f 61 3e 3c 2f 68 35 3e 0a 20 20 20 20 20 20 </a></h5>.
84f0: 20 20 20 20 20 20 20 20 20 20 3c 68 35 20 63 6c <h5 cl
8500: 61 73 73 3d 22 6d 6c 2d 34 22 3e 3c 61 20 68 72 ass="ml-4"><a hr
8510: 65 66 3d 22 2f 64 6f 63 73 2f 64 65 6d 6f 2e 68 ef="/docs/demo.h
8520: 74 6d 6c 22 3e 53 65 65 20 44 65 6d 6f 20 53 6f tml">See Demo So
8530: 6e 67 20 2f 2f 20 54 65 63 68 6e 6f 3c 2f 61 3e ng // Techno</a>
8540: 3c 2f 68 35 3e 0a 20 20 20 20 20 20 20 20 20 20 </h5>.
8550: 20 20 3c 2f 68 73 74 61 63 6b 3e 0a 0a 20 20 20 </hstack>..
8560: 20 20 20 20 20 20 20 20 20 3c 62 69 74 72 68 79 <bitrhy
8570: 74 68 6d 20 73 6f 6e 67 3d 22 7b 7b 64 61 74 61 thm song="{{data
8580: 7d 7d 22 3e 3c 2f 62 69 74 72 68 79 74 68 6d 3e }}"></bitrhythm>
8590: 0a 20 20 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a . </div>.
85a0: 0a 20 20 20 20 3c 73 63 72 69 70 74 3e 0a 20 20 . <script>.
85b0: 20 20 20 20 20 20 72 69 6f 74 2e 63 6f 6d 70 69 riot.compi
85c0: 6c 65 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a le(function() {.
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 var
85e0: 62 69 74 72 68 79 74 68 6d 20 3d 20 72 69 6f 74 bitrhythm = riot
85f0: 2e 6d 6f 75 6e 74 28 27 62 69 74 72 68 79 74 68 .mount('bitrhyth
8600: 6d 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 m');.
8610: 20 77 69 6e 64 6f 77 2e 62 69 74 72 68 79 74 68 window.bitrhyth
8620: 6d 20 3d 20 62 69 74 72 68 79 74 68 6d 5b 30 5d m = bitrhythm[0]
8630: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 ;. va
8640: 72 20 64 69 61 6c 20 3d 20 72 69 6f 74 2e 6d 6f r dial = riot.mo
8650: 75 6e 74 28 27 64 69 61 6c 27 29 3b 0a 20 20 20 unt('dial');.
8660: 20 20 20 20 20 20 20 20 20 76 61 72 20 6e 75 6d var num
8670: 62 65 72 20 3d 20 72 69 6f 74 2e 6d 6f 75 6e 74 ber = riot.mount
8680: 28 27 6e 75 6d 62 65 72 27 29 3b 0a 20 20 20 20 ('number');.
8690: 20 20 20 20 20 20 20 20 76 61 72 20 73 61 6d 70 var samp
86a0: 6c 65 20 3d 20 72 69 6f 74 2e 6d 6f 75 6e 74 28 le = riot.mount(
86b0: 27 73 61 6d 70 6c 65 27 29 3b 0a 20 20 20 20 20 'sample');.
86c0: 20 20 20 7d 29 0a 20 20 20 20 3c 2f 73 63 72 69 }). </scri
86d0: 70 74 3e 0a 0a 0a 20 20 20 20 3c 2f 62 6f 64 79 pt>... </body
86e0: 3e 0a 0a 3c 2f 68 74 6d 6c 3e 0a 0a 22 22 22 0a >..</html>..""".
86f0: 0a 66 72 6f 6d 20 6d 61 6b 6f 2e 74 65 6d 70 6c .from mako.templ
8700: 61 74 65 20 69 6d 70 6f 72 74 20 54 65 6d 70 6c ate import Templ
8710: 61 74 65 0a 69 6d 70 6f 72 74 20 63 6f 6d 6d 6f ate.import commo
8720: 6e 0a 63 6f 64 65 20 3d 20 54 65 6d 70 6c 61 74 n.code = Templat
8730: 65 28 69 6e 64 65 78 29 2e 72 65 6e 64 65 72 28 e(index).render(
8740: 63 6f 6d 6d 6f 6e 5f 73 63 72 69 70 74 73 3d 63 common_scripts=c
8750: 6f 6d 6d 6f 6e 2e 65 78 74 65 72 6e 61 6c 5f 6c ommon.external_l
8760: 69 62 72 61 72 69 65 73 29 0a 0a 69 66 20 44 45 ibraries)..if DE
8770: 56 20 3d 3d 20 22 31 22 3a 0a 20 20 20 20 66 6f V == "1":. fo
8780: 72 5f 64 6f 63 73 20 3d 20 22 22 22 0a 23 23 20 r_docs = """.##
8790: 49 6e 64 65 78 0a 0a 60 60 60 7b 63 6f 64 65 2d Index..```{code-
87a0: 62 6c 6f 63 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a block} html.---.
87b0: 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a force: true.---.
87c0: 25 73 0a 60 60 60 0a 20 20 20 20 22 22 22 0a 20 %s.```. """.
87d0: 20 20 20 63 6f 67 2e 6f 75 74 28 66 6f 72 5f 64 cog.out(for_d
87e0: 6f 63 73 20 25 20 28 69 6e 64 65 78 2c 29 29 0a ocs % (index,)).
87f0: 0a 6f 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 74 .os.system("rm t
8800: 65 6d 70 6c 61 74 65 73 2f 69 6e 64 65 78 2e 68 emplates/index.h
8810: 74 6d 6c 22 29 0a 66 20 3d 20 6f 70 65 6e 28 22 tml").f = open("
8820: 74 65 6d 70 6c 61 74 65 73 2f 69 6e 64 65 78 2e templates/index.
8830: 68 74 6d 6c 22 2c 20 22 77 22 29 0a 66 2e 77 72 html", "w").f.wr
8840: 69 74 65 28 63 6f 64 65 29 0a 66 2e 63 6c 6f 73 ite(code).f.clos
8850: 65 28 29 0a 40 3e 0a 40 40 0a 0a 0a 40 3c 0a 69 e().@>.@@...@<.i
8860: 6d 70 6f 72 74 20 63 6f 67 0a 69 6d 70 6f 72 74 mport cog.import
8870: 20 6f 73 0a 0a 70 61 67 65 20 3d 20 22 22 22 0a os..page = """.
8880: 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a <!DOCTYPE html>.
8890: 3c 68 74 6d 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e <html lang="en">
88a0: 0a 20 20 20 20 3c 68 65 61 64 3e 0a 20 20 20 20 . <head>.
88b0: 20 20 20 20 3c 6d 65 74 61 20 63 68 61 72 73 65 <meta charse
88c0: 74 3d 22 75 74 66 2d 38 22 3e 0a 20 20 20 20 20 t="utf-8">.
88d0: 20 20 20 3c 6d 65 74 61 20 6e 61 6d 65 3d 22 76 <meta name="v
88e0: 69 65 77 70 6f 72 74 22 20 63 6f 6e 74 65 6e 74 iewport" content
88f0: 3d 22 77 69 64 74 68 3d 64 65 76 69 63 65 2d 77 ="width=device-w
8900: 69 64 74 68 2c 20 69 6e 69 74 69 61 6c 2d 73 63 idth, initial-sc
8910: 61 6c 65 3d 31 22 3e 0a 20 20 20 20 20 20 20 20 ale=1">.
8920: 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 <meta http-equiv
8930: 3d 22 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 22 ="Cache-Control"
8940: 20 63 6f 6e 74 65 6e 74 3d 22 6e 6f 2d 63 61 63 content="no-cac
8950: 68 65 2c 20 6e 6f 2d 73 74 6f 72 65 2c 20 6d 75 he, no-store, mu
8960: 73 74 2d 72 65 76 61 6c 69 64 61 74 65 22 20 2f st-revalidate" /
8970: 3e 0a 20 20 20 20 20 20 20 20 3c 6d 65 74 61 20 >. <meta
8980: 68 74 74 70 2d 65 71 75 69 76 3d 22 50 72 61 67 http-equiv="Prag
8990: 6d 61 22 20 63 6f 6e 74 65 6e 74 3d 22 6e 6f 2d ma" content="no-
89a0: 63 61 63 68 65 22 20 2f 3e 0a 20 20 20 20 20 20 cache" />.
89b0: 20 20 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 <meta http-equ
89c0: 69 76 3d 22 45 78 70 69 72 65 73 22 20 63 6f 6e iv="Expires" con
89d0: 74 65 6e 74 3d 22 30 22 20 2f 3e 0a 20 20 20 20 tent="0" />.
89e0: 20 20 20 20 3c 74 69 74 6c 65 3e 41 62 6f 75 74 <title>About
89f0: 20 62 69 72 74 68 79 74 68 6d 3c 2f 74 69 74 6c birthythm</titl
8a00: 65 3e 0a 20 20 20 20 20 20 20 20 3c 6c 69 6e 6b e>. <link
8a10: 20 72 65 6c 3d 22 69 63 6f 6e 22 20 68 72 65 66 rel="icon" href
8a20: 3d 22 66 61 76 69 63 6f 6e 2e 69 63 6f 22 3e 0a ="favicon.ico">.
8a30: 20 20 20 20 20 20 20 20 3c 73 74 79 6c 65 3e 0a <style>.
8a40: 20 20 20 20 20 20 20 20 68 74 6d 6c 2c 20 62 6f html, bo
8a50: 64 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 dy {.
8a60: 20 6d 61 72 67 69 6e 3a 20 30 3b 0a 20 20 20 20 margin: 0;.
8a70: 20 20 20 20 20 20 20 20 77 69 64 74 68 3a 20 31 width: 1
8a80: 30 30 25 3b 0a 20 20 20 20 20 20 20 20 20 20 20 00%;.
8a90: 20 68 65 69 67 68 74 3a 20 31 30 30 25 3b 0a 20 height: 100%;.
8aa0: 20 20 20 20 20 20 20 20 20 20 20 70 61 64 64 69 paddi
8ab0: 6e 67 3a 20 30 3b 0a 20 20 20 20 20 20 20 20 7d ng: 0;. }
8ac0: 0a 20 20 20 20 20 20 20 20 69 66 72 61 6d 65 20 . iframe
8ad0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6f {. po
8ae0: 73 69 74 69 6f 6e 3a 66 69 78 65 64 3b 0a 20 20 sition:fixed;.
8af0: 20 20 20 20 20 20 20 20 20 20 74 6f 70 3a 30 3b top:0;
8b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 66 . lef
8b10: 74 3a 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 t:0;.
8b20: 20 62 6f 74 74 6f 6d 3a 30 3b 0a 20 20 20 20 20 bottom:0;.
8b30: 20 20 20 20 20 20 20 72 69 67 68 74 3a 30 3b 0a right:0;.
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64 74 widt
8b50: 68 3a 31 30 30 25 3b 0a 20 20 20 20 20 20 20 20 h:100%;.
8b60: 20 20 20 20 68 65 69 67 68 74 3a 31 30 30 25 3b height:100%;
8b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 72 . bor
8b80: 64 65 72 3a 6e 6f 6e 65 3b 0a 20 20 20 20 20 20 der:none;.
8b90: 20 20 20 20 20 20 6d 61 72 67 69 6e 3a 30 3b 0a margin:0;.
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 64 64 padd
8bb0: 69 6e 67 3a 30 3b 0a 20 20 20 20 20 20 20 20 20 ing:0;.
8bc0: 20 20 20 6f 76 65 72 66 6c 6f 77 3a 68 69 64 64 overflow:hidd
8bd0: 65 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 en;.
8be0: 7a 2d 69 6e 64 65 78 3a 39 39 39 39 39 39 3b 0a z-index:999999;.
8bf0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
8c00: 20 20 3c 2f 73 74 79 6c 65 3e 0a 20 20 20 20 20 </style>.
8c10: 20 20 20 3c 6c 69 6e 6b 20 68 72 65 66 3d 22 68 <link href="h
8c20: 74 74 70 73 3a 2f 2f 75 6e 70 6b 67 2e 63 6f 6d ttps://unpkg.com
8c30: 2f 74 61 69 6c 77 69 6e 64 63 73 73 40 5e 32 2f /tailwindcss@^2/
8c40: 64 69 73 74 2f 74 61 69 6c 77 69 6e 64 2e 6d 69 dist/tailwind.mi
8c50: 6e 2e 63 73 73 22 20 72 65 6c 3d 22 73 74 79 6c n.css" rel="styl
8c60: 65 73 68 65 65 74 22 3e 0a 20 20 20 20 20 20 20 esheet">.
8c70: 20 3c 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 <script>.
8c80: 20 20 20 20 20 20 77 69 6e 64 6f 77 2e 67 6f 61 window.goa
8c90: 74 63 6f 75 6e 74 65 72 20 3d 20 7b 0a 20 20 20 tcounter = {.
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 74 pat
8cb0: 68 3a 20 66 75 6e 63 74 69 6f 6e 28 70 29 20 7b h: function(p) {
8cc0: 20 72 65 74 75 72 6e 20 6c 6f 63 61 74 69 6f 6e return location
8cd0: 2e 68 6f 73 74 20 2b 20 70 20 7d 0a 20 20 20 20 .host + p }.
8ce0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
8cf0: 20 20 3c 2f 73 63 72 69 70 74 3e 0a 20 20 20 20 </script>.
8d00: 20 20 20 20 3c 73 63 72 69 70 74 20 64 61 74 61 <script data
8d10: 2d 67 6f 61 74 63 6f 75 6e 74 65 72 3d 22 68 74 -goatcounter="ht
8d20: 74 70 73 3a 2f 2f 61 6e 61 6c 79 74 69 63 73 2e tps://analytics.
8d30: 78 79 7a 7a 79 61 70 70 73 2e 6c 69 6e 6b 2f 63 xyzzyapps.link/c
8d40: 6f 75 6e 74 22 20 61 73 79 6e 63 20 73 72 63 3d ount" async src=
8d50: 22 2f 2f 61 6e 61 6c 79 74 69 63 73 2e 78 79 7a "//analytics.xyz
8d60: 7a 79 61 70 70 73 2e 6c 69 6e 6b 2f 63 6f 75 6e zyapps.link/coun
8d70: 74 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a t.js"></script>.
8d80: 20 20 20 20 3c 2f 68 65 61 64 3e 0a 20 20 20 20 </head>.
8d90: 3c 62 6f 64 79 3e 0a 20 20 20 20 20 20 20 20 3c <body>. <
8da0: 69 66 72 61 6d 65 20 73 72 63 3d 22 68 74 74 70 iframe src="http
8db0: 73 3a 2f 2f 62 6c 6f 67 2e 78 79 7a 7a 79 61 70 s://blog.xyzzyap
8dc0: 70 73 2e 6c 69 6e 6b 2f 62 69 74 72 68 79 74 68 ps.link/bitrhyth
8dd0: 6d 2d 73 75 62 6d 69 74 2d 69 73 73 75 65 2d 66 m-submit-issue-f
8de0: 65 65 64 62 61 63 6b 22 20 66 72 61 6d 65 62 6f eedback" framebo
8df0: 72 64 65 72 3d 22 30 22 3e 3c 2f 69 66 72 61 6d rder="0"></ifram
8e00: 65 3e 0a 20 20 20 20 3c 2f 62 6f 64 79 3e 0a 3c e>. </body>.<
8e10: 2f 68 74 6d 6c 3e 0a 22 22 22 0a 0a 69 66 20 44 /html>."""..if D
8e20: 45 56 20 3d 3d 20 22 31 22 3a 0a 20 20 20 20 66 EV == "1":. f
8e30: 6f 72 5f 64 6f 63 73 20 3d 20 22 22 22 0a 23 23 or_docs = """.##
8e40: 20 50 61 67 65 0a 0a 60 60 60 7b 63 6f 64 65 2d Page..```{code-
8e50: 62 6c 6f 63 6b 7d 20 68 74 6d 6c 0a 2d 2d 2d 0a block} html.---.
8e60: 66 6f 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a force: true.---.
8e70: 25 73 0a 60 60 60 0a 20 20 20 20 22 22 22 0a 20 %s.```. """.
8e80: 20 20 20 63 6f 67 2e 6f 75 74 28 66 6f 72 5f 64 cog.out(for_d
8e90: 6f 63 73 20 25 20 28 70 61 67 65 2c 29 29 0a 0a ocs % (page,))..
8ea0: 6f 73 2e 73 79 73 74 65 6d 28 22 72 6d 20 74 65 os.system("rm te
8eb0: 6d 70 6c 61 74 65 73 2f 70 61 67 65 2e 68 74 6d mplates/page.htm
8ec0: 6c 22 29 0a 66 20 3d 20 6f 70 65 6e 28 22 74 65 l").f = open("te
8ed0: 6d 70 6c 61 74 65 73 2f 70 61 67 65 2e 68 74 6d mplates/page.htm
8ee0: 6c 22 2c 20 22 77 22 29 0a 66 2e 77 72 69 74 65 l", "w").f.write
8ef0: 28 70 61 67 65 29 0a 66 2e 63 6c 6f 73 65 28 29 (page).f.close()
8f00: 0a 40 3e 0a 40 40 0a 0a 23 23 20 4a 61 76 61 73 .@>.@@..## Javas
8f10: 63 72 69 70 74 0a 0a 60 60 60 7b 63 6f 64 65 2d cript..```{code-
8f20: 62 6c 6f 63 6b 7d 20 6a 73 0a 2d 2d 2d 0a 66 6f block} js.---.fo
8f30: 72 63 65 3a 20 74 72 75 65 0a 2d 2d 2d 0a 0a 40 rce: true.---..@
8f40: 3c 0a 69 6d 70 6f 72 74 20 63 6f 67 0a 69 6d 70 <.import cog.imp
8f50: 6f 72 74 20 6f 73 0a 0a 6d 69 73 63 5f 6a 73 20 ort os..misc_js
8f60: 3d 20 22 22 22 0a 66 75 6e 63 74 69 6f 6e 20 69 = """.function i
8f70: 6e 69 74 57 69 6e 61 6d 70 28 70 72 65 73 65 74 nitWinamp(preset
8f80: 29 20 7b 0a 20 20 20 20 76 61 72 20 63 61 6e 20 ) {. var can
8f90: 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c = document.getEl
8fa0: 65 6d 65 6e 74 42 79 49 64 28 22 76 69 73 75 61 ementById("visua
8fb0: 6c 22 29 3b 0a 20 20 20 20 63 61 6e 2e 68 65 69 l");. can.hei
8fc0: 67 68 74 20 3d 20 77 69 6e 64 6f 77 2e 69 6e 6e ght = window.inn
8fd0: 65 72 48 65 69 67 68 74 20 2d 20 64 6f 63 75 6d erHeight - docum
8fe0: 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 ent.getElementBy
8ff0: 49 64 28 22 68 65 61 64 65 72 2d 70 6c 61 79 62 Id("header-playb
9000: 61 63 6b 22 29 2e 63 6c 69 65 6e 74 48 65 69 67 ack").clientHeig
9010: 68 74 20 2d 20 37 35 3b 0a 20 20 20 20 63 61 6e ht - 75;. can
9020: 2e 77 69 64 74 68 20 3d 20 77 69 6e 64 6f 77 2e .width = window.
9030: 69 6e 6e 65 72 57 69 64 74 68 3b 0a 20 20 20 20 innerWidth;.
9040: 76 61 72 20 63 61 6e 5f 63 6f 6e 74 61 69 6e 65 var can_containe
9050: 72 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 r = document.get
9060: 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 63 61 6e ElementById("can
9070: 76 61 73 2d 63 6f 6e 74 61 69 6e 65 72 22 29 3b vas-container");
9080: 0a 20 20 20 20 63 61 6e 5f 63 6f 6e 74 61 69 6e . can_contain
9090: 65 72 2e 77 69 64 74 68 20 3d 20 77 69 6e 64 6f er.width = windo
90a0: 77 2e 69 6e 6e 65 72 57 69 64 74 68 3b 0a 20 20 w.innerWidth;.
90b0: 20 20 76 61 72 20 76 69 73 75 61 6c 69 7a 65 72 var visualizer
90c0: 20 3d 20 77 69 6e 64 6f 77 2e 62 75 74 74 65 72 = window.butter
90d0: 63 68 75 72 6e 2e 64 65 66 61 75 6c 74 2e 63 72 churn.default.cr
90e0: 65 61 74 65 56 69 73 75 61 6c 69 7a 65 72 28 54 eateVisualizer(T
90f0: 6f 6e 65 2e 67 65 74 43 6f 6e 74 65 78 74 28 29 one.getContext()
9100: 2e 72 61 77 43 6f 6e 74 65 78 74 2c 20 63 61 6e .rawContext, can
9110: 2c 20 7b 0a 20 20 20 20 20 20 20 20 68 65 69 67 , {. heig
9120: 68 74 3a 20 77 69 6e 64 6f 77 2e 69 6e 6e 65 72 ht: window.inner
9130: 48 65 69 67 68 74 20 2d 20 64 6f 63 75 6d 65 6e Height - documen
9140: 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 t.getElementById
9150: 28 22 68 65 61 64 65 72 2d 70 6c 61 79 62 61 63 ("header-playbac
9160: 6b 22 29 2e 63 6c 69 65 6e 74 48 65 69 67 68 74 k").clientHeight
9170: 20 2d 20 37 35 2c 0a 20 20 20 20 20 20 20 20 77 - 75,. w
9180: 69 64 74 68 3a 20 77 69 6e 64 6f 77 2e 69 6e 6e idth: window.inn
9190: 65 72 57 69 64 74 68 2c 0a 20 20 20 20 20 20 20 erWidth,.
91a0: 20 6d 65 73 68 57 69 64 74 68 3a 20 32 34 2c 0a meshWidth: 24,.
91b0: 20 20 20 20 20 20 20 20 6d 65 73 68 48 65 69 67 meshHeig
91c0: 68 74 3a 20 31 38 2c 0a 20 20 20 20 7d 29 3b 0a ht: 18,. });.
91d0: 20 20 20 20 76 69 73 75 61 6c 69 7a 65 72 2e 63 visualizer.c
91e0: 6f 6e 6e 65 63 74 41 75 64 69 6f 28 54 6f 6e 65 onnectAudio(Tone
91f0: 2e 67 65 74 43 6f 6e 74 65 78 74 28 29 2e 64 65 .getContext().de
9200: 73 74 69 6e 61 74 69 6f 6e 29 3b 0a 20 20 20 20 stination);.
9210: 63 6f 6e 73 74 20 70 72 65 73 65 74 73 20 3d 20 const presets =
9220: 77 69 6e 64 6f 77 2e 62 75 74 74 65 72 63 68 75 window.butterchu
9230: 72 6e 50 72 65 73 65 74 73 2e 67 65 74 50 72 65 rnPresets.getPre
9240: 73 65 74 73 28 29 3b 0a 20 20 20 20 63 6f 6e 73 sets();. cons
9250: 74 20 70 72 65 73 65 74 50 61 72 61 6d 20 3d 20 t presetParam =
9260: 70 72 65 73 65 74 73 5b 70 72 65 73 65 74 5d 3b presets[preset];
9270: 0a 20 20 20 20 76 69 73 75 61 6c 69 7a 65 72 2e . visualizer.
9280: 6c 6f 61 64 50 72 65 73 65 74 28 70 72 65 73 65 loadPreset(prese
9290: 74 50 61 72 61 6d 2c 20 30 2e 30 29 3b 20 2f 2f tParam, 0.0); //
92a0: 20 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 2nd argument is
92b0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 the number of s
92c0: 65 63 6f 6e 64 73 20 74 6f 20 62 6c 65 6e 64 20 econds to blend
92d0: 70 72 65 73 65 74 73 0a 20 20 20 20 72 65 74 75 presets. retu
92e0: 72 6e 20 76 69 73 75 61 6c 69 7a 65 72 3b 0a 7d rn visualizer;.}
92f0: 0a 0a 66 75 6e 63 74 69 6f 6e 20 67 75 61 72 64 ..function guard
9300: 28 72 61 6e 67 65 29 20 7b 0a 20 20 20 20 76 61 (range) {. va
9310: 72 20 73 74 61 74 65 20 3d 20 6e 75 6c 6c 3b 0a r state = null;.
9320: 20 20 20 20 72 65 74 75 72 6e 20 66 75 6e 63 74 return funct
9330: 69 6f 6e 20 28 76 61 6c 29 20 7b 0a 20 20 20 20 ion (val) {.
9340: 20 20 20 20 69 66 20 28 28 76 61 6c 20 3e 3d 20 if ((val >=
9350: 72 61 6e 67 65 5b 30 5d 29 20 26 26 20 28 76 61 range[0]) && (va
9360: 6c 20 3c 3d 20 72 61 6e 67 65 5b 31 5d 29 29 20 l <= range[1]))
9370: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 {. st
9380: 61 74 65 20 3d 20 76 61 6c 3b 0a 20 20 20 20 20 ate = val;.
9390: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 return va
93a0: 6c 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 l;. } els
93b0: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e {.
93c0: 72 65 74 75 72 6e 20 73 74 61 74 65 3b 0a 20 20 return state;.
93d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 0a }. }.}.
93e0: 0a 66 75 6e 63 74 69 6f 6e 20 68 65 78 32 62 69 .function hex2bi
93f0: 6e 28 68 65 78 29 20 7b 0a 20 20 20 20 76 61 72 n(hex) {. var
9400: 20 6c 65 74 74 65 72 73 20 3d 20 68 65 78 2e 72 letters = hex.r
9410: 65 70 6c 61 63 65 28 27 60 31 27 2c 27 61 27 29 eplace('`1','a')
9420: 3b 0a 20 20 20 20 6c 65 74 74 65 72 73 20 3d 20 ;. letters =
9430: 68 65 78 2e 72 65 70 6c 61 63 65 28 27 60 32 27 hex.replace('`2'
9440: 2c 27 62 27 29 3b 0a 20 20 20 20 6c 65 74 74 65 ,'b');. lette
9450: 72 73 20 3d 20 68 65 78 2e 72 65 70 6c 61 63 65 rs = hex.replace
9460: 28 27 60 33 27 2c 27 63 27 29 3b 0a 20 20 20 20 ('`3','c');.
9470: 6c 65 74 74 65 72 73 20 3d 20 68 65 78 2e 72 65 letters = hex.re
9480: 70 6c 61 63 65 28 27 60 34 27 2c 27 64 27 29 3b place('`4','d');
9490: 0a 20 20 20 20 6c 65 74 74 65 72 73 20 3d 20 68 . letters = h
94a0: 65 78 2e 72 65 70 6c 61 63 65 28 27 60 35 27 2c ex.replace('`5',
94b0: 27 65 27 29 3b 0a 20 20 20 20 6c 65 74 74 65 72 'e');. letter
94c0: 73 20 3d 20 68 65 78 2e 72 65 70 6c 61 63 65 28 s = hex.replace(
94d0: 27 60 36 27 2c 27 66 27 29 3b 0a 20 20 20 20 6c '`6','f');. l
94e0: 65 74 74 65 72 73 20 3d 20 6c 65 74 74 65 72 73 etters = letters
94f0: 2e 73 70 6c 69 74 28 27 27 29 3b 0a 20 20 20 20 .split('');.
9500: 76 61 72 20 62 69 6e 20 3d 20 22 22 3b 0a 20 20 var bin = "";.
9510: 20 20 6c 65 74 74 65 72 73 2e 6d 61 70 28 66 75 letters.map(fu
9520: 6e 63 74 69 6f 6e 28 6c 65 74 74 65 72 29 20 7b nction(letter) {
9530: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 74 . if (let
9540: 74 65 72 20 3d 3d 20 22 30 22 29 20 7b 0a 20 20 ter == "0") {.
9550: 20 20 20 20 20 20 20 20 20 20 62 69 6e 20 2b 3d bin +=
9560: 20 22 30 30 30 30 22 3b 0a 20 20 20 20 20 20 20 "0000";.
9570: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6c }. if (l
9580: 65 74 74 65 72 20 3d 3d 20 22 31 22 29 20 7b 0a etter == "1") {.
9590: 20 20 20 20 20 20 20 20 20 20 20 20 62 69 6e 20 bin
95a0: 2b 3d 20 22 30 30 30 31 22 3b 0a 20 20 20 20 20 += "0001";.
95b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 }. els
95c0: 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 e if (letter ==
95d0: 22 32 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 "2") {.
95e0: 20 20 20 62 69 6e 20 2b 3d 20 22 30 30 31 30 22 bin += "0010"
95f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
9600: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 74 else if (let
9610: 74 65 72 20 3d 3d 20 22 33 22 29 20 7b 0a 20 20 ter == "3") {.
9620: 20 20 20 20 20 20 20 20 20 20 62 69 6e 20 2b 3d bin +=
9630: 20 22 30 30 31 31 22 3b 0a 20 20 20 20 20 20 20 "0011";.
9640: 20 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 }. else
9650: 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 34 if (letter == "4
9660: 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ") {.
9670: 20 62 69 6e 20 2b 3d 20 22 30 31 30 30 22 3b 0a bin += "0100";.
9680: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
9690: 20 20 65 6c 73 65 20 69 66 20 28 6c 65 74 74 65 else if (lette
96a0: 72 20 3d 3d 20 22 35 22 29 20 7b 0a 20 20 20 20 r == "5") {.
96b0: 20 20 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 bin += "
96c0: 30 31 30 31 22 3b 0a 20 20 20 20 20 20 20 20 7d 0101";. }
96d0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 . else if
96e0: 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 36 22 29 (letter == "6")
96f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 {. b
9700: 69 6e 20 2b 3d 20 22 30 31 31 30 22 3b 0a 20 20 in += "0110";.
9710: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
9720: 65 6c 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 else if (letter
9730: 3d 3d 20 22 37 22 29 20 7b 0a 20 20 20 20 20 20 == "7") {.
9740: 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 30 31 bin += "01
9750: 31 31 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 11";. }.
9760: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 else if (
9770: 6c 65 74 74 65 72 20 3d 3d 20 22 38 22 29 20 7b letter == "8") {
9780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 69 6e . bin
9790: 20 2b 3d 20 22 31 30 30 30 22 3b 0a 20 20 20 20 += "1000";.
97a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c }. el
97b0: 73 65 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d se if (letter ==
97c0: 20 22 39 22 29 20 7b 0a 20 20 20 20 20 20 20 20 "9") {.
97d0: 20 20 20 20 62 69 6e 20 2b 3d 20 22 31 30 30 31 bin += "1001
97e0: 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 ";. }.
97f0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 else if (le
9800: 74 74 65 72 20 3d 3d 20 22 61 22 29 20 7b 0a 20 tter == "a") {.
9810: 20 20 20 20 20 20 20 20 20 20 20 62 69 6e 20 2b bin +
9820: 3d 20 22 31 30 31 30 22 3b 0a 20 20 20 20 20 20 = "1010";.
9830: 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 }. else
9840: 20 69 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 if (letter == "
9850: 62 22 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 b") {.
9860: 20 20 62 69 6e 20 2b 3d 20 22 31 30 31 31 22 3b bin += "1011";
9870: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
9880: 20 20 20 65 6c 73 65 20 69 66 20 28 6c 65 74 74 else if (lett
9890: 65 72 20 3d 3d 20 22 63 22 29 20 7b 0a 20 20 20 er == "c") {.
98a0: 20 20 20 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 bin +=
98b0: 22 31 31 30 30 22 3b 0a 20 20 20 20 20 20 20 20 "1100";.
98c0: 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 }. else i
98d0: 66 20 28 6c 65 74 74 65 72 20 3d 3d 20 22 64 22 f (letter == "d"
98e0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
98f0: 62 69 6e 20 2b 3d 20 22 31 31 30 31 22 3b 0a 20 bin += "1101";.
9900: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
9910: 20 65 6c 73 65 20 69 66 20 28 6c 65 74 74 65 72 else if (letter
9920: 20 3d 3d 20 22 65 22 29 20 7b 0a 20 20 20 20 20 == "e") {.
9930: 20 20 20 20 20 20 20 62 69 6e 20 2b 3d 20 22 31 bin += "1
9940: 31 31 30 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 110";. }.
9950: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 else if
9960: 28 6c 65 74 74 65 72 20 3d 3d 20 22 66 22 29 20 (letter == "f")
9970: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 69 {. bi
9980: 6e 20 2b 3d 20 22 31 31 31 31 22 3b 0a 20 20 20 n += "1111";.
9990: 20 20 20 20 20 7d 0a 0a 20 20 20 20 7d 29 0a 20 }.. }).
99a0: 20 20 20 72 65 74 75 72 6e 20 62 69 6e 3b 0a 7d return bin;.}
99b0: 0a 0a 0a 66 75 6e 63 74 69 6f 6e 20 70 61 74 74 ...function patt
99c0: 65 72 6e 5f 63 6c 65 61 6e 28 70 29 20 7b 0a 20 ern_clean(p) {.
99d0: 20 20 20 69 66 20 28 21 70 29 20 7b 0a 20 20 20 if (!p) {.
99e0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 3b 0a return "";.
99f0: 20 20 20 20 7d 0a 20 20 20 20 70 20 3d 20 70 2e }. p = p.
9a00: 72 65 70 6c 61 63 65 28 2f 20 2f 67 2c 20 22 22 replace(/ /g, ""
9a10: 29 3b 0a 20 20 20 20 76 61 72 20 66 63 20 3d 20 );. var fc =
9a20: 70 2e 73 70 6c 69 74 28 27 27 29 5b 30 5d 3b 0a p.split('')[0];.
9a30: 20 20 20 20 69 66 20 28 66 63 3d 3d 20 22 70 22 if (fc== "p"
9a40: 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 20 ) {. var
9a50: 70 74 79 70 65 20 3d 20 22 78 6f 22 3b 0a 20 20 ptype = "xo";.
9a60: 20 20 20 20 20 20 76 61 72 20 6c 20 3d 20 28 70 var l = (p
9a70: 2e 6c 65 6e 67 74 68 20 2d 20 31 29 3b 0a 20 20 .length - 1);.
9a80: 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 }. else if
9a90: 28 66 63 3d 3d 20 22 62 22 29 20 7b 0a 20 20 20 (fc== "b") {.
9aa0: 20 20 20 20 20 76 61 72 20 6c 20 3d 20 28 70 2e var l = (p.
9ab0: 6c 65 6e 67 74 68 20 2d 20 31 29 3b 0a 20 20 20 length - 1);.
9ac0: 20 20 20 20 20 76 61 72 20 70 74 79 70 65 20 3d var ptype =
9ad0: 20 22 62 69 6e 22 3b 0a 20 20 20 20 7d 0a 20 20 "bin";. }.
9ae0: 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 else {.
9af0: 20 76 61 72 20 70 74 79 70 65 20 3d 20 22 68 65 var ptype = "he
9b00: 78 22 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 x";. var
9b10: 6c 20 3d 20 28 70 2e 6c 65 6e 67 74 68 29 20 2a l = (p.length) *
9b20: 20 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 4;. }.. i
9b30: 66 20 28 70 74 79 70 65 20 3d 3d 20 22 62 69 6e f (ptype == "bin
9b40: 22 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 ") {. var
9b50: 20 66 70 20 3d 20 20 70 2e 73 75 62 73 74 72 69 fp = p.substri
9b60: 6e 67 28 31 29 3b 0a 20 20 20 20 7d 20 65 6c 73 ng(1);. } els
9b70: 65 20 69 66 20 28 70 74 79 70 65 20 3d 3d 20 22 e if (ptype == "
9b80: 78 6f 22 29 20 7b 0a 20 20 20 20 20 20 20 20 76 xo") {. v
9b90: 61 72 20 66 70 20 3d 20 70 2e 73 75 62 73 74 72 ar fp = p.substr
9ba0: 28 31 29 3b 0a 20 20 20 20 20 20 20 20 66 70 20 (1);. fp
9bb0: 3d 20 66 70 2e 72 65 70 6c 61 63 65 28 2f 78 2f = fp.replace(/x/
9bc0: 67 2c 20 22 31 22 29 3b 0a 20 20 20 20 7d 20 65 g, "1");. } e
9bd0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 76 61 lse {. va
9be0: 72 20 66 70 20 3d 20 68 65 78 32 62 69 6e 28 70 r fp = hex2bin(p
9bf0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 );. }.. re
9c00: 74 75 72 6e 20 66 70 3b 0a 7d 0a 0a 66 75 6e 63 turn fp;.}..func
9c10: 74 69 6f 6e 20 64 6f 77 6e 6c 6f 61 64 28 64 61 tion download(da
9c20: 74 61 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 74 79 ta, filename, ty
9c30: 70 65 29 20 7b 0a 20 20 20 20 76 61 72 20 66 69 pe) {. var fi
9c40: 6c 65 20 3d 20 6e 65 77 20 42 6c 6f 62 28 5b 64 le = new Blob([d
9c50: 61 74 61 5d 2c 20 7b 20 74 79 70 65 3a 20 74 79 ata], { type: ty
9c60: 70 65 20 7d 29 3b 0a 20 20 20 20 69 66 20 28 77 pe });. if (w
9c70: 69 6e 64 6f 77 2e 6e 61 76 69 67 61 74 6f 72 2e indow.navigator.
9c80: 6d 73 53 61 76 65 4f 72 4f 70 65 6e 42 6c 6f 62 msSaveOrOpenBlob
9c90: 29 20 2f 2f 20 49 45 31 30 2b 0a 20 20 20 20 20 ) // IE10+.
9ca0: 20 20 20 77 69 6e 64 6f 77 2e 6e 61 76 69 67 61 window.naviga
9cb0: 74 6f 72 2e 6d 73 53 61 76 65 4f 72 4f 70 65 6e tor.msSaveOrOpen
9cc0: 42 6c 6f 62 28 66 69 6c 65 2c 20 66 69 6c 65 6e Blob(file, filen
9cd0: 61 6d 65 29 3b 0a 20 20 20 20 65 6c 73 65 20 7b ame);. else {
9ce0: 20 2f 2f 20 4f 74 68 65 72 73 0a 20 20 20 20 20 // Others.
9cf0: 20 20 20 76 61 72 20 61 20 3d 20 64 6f 63 75 6d var a = docum
9d00: 65 6e 74 2e 63 72 65 61 74 65 45 6c 65 6d 65 6e ent.createElemen
9d10: 74 28 22 61 22 29 2c 0a 20 20 20 20 20 20 20 20 t("a"),.
9d20: 20 20 20 20 75 72 6c 20 3d 20 55 52 4c 2e 63 72 url = URL.cr
9d30: 65 61 74 65 4f 62 6a 65 63 74 55 52 4c 28 66 69 eateObjectURL(fi
9d40: 6c 65 29 3b 0a 20 20 20 20 20 20 20 20 61 2e 68 le);. a.h
9d50: 72 65 66 20 3d 20 75 72 6c 3b 0a 20 20 20 20 20 ref = url;.
9d60: 20 20 20 61 2e 64 6f 77 6e 6c 6f 61 64 20 3d 20 a.download =
9d70: 66 69 6c 65 6e 61 6d 65 3b 0a 20 20 20 20 20 20 filename;.
9d80: 20 20 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2e document.body.
9d90: 61 70 70 65 6e 64 43 68 69 6c 64 28 61 29 3b 0a appendChild(a);.
9da0: 20 20 20 20 20 20 20 20 61 2e 63 6c 69 63 6b 28 a.click(
9db0: 29 3b 0a 20 20 20 20 20 20 20 20 73 65 74 54 69 );. setTi
9dc0: 6d 65 6f 75 74 28 66 75 6e 63 74 69 6f 6e 20 28 meout(function (
9dd0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
9de0: 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2e 72 65 document.body.re
9df0: 6d 6f 76 65 43 68 69 6c 64 28 61 29 3b 0a 20 20 moveChild(a);.
9e00: 20 20 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77 window
9e10: 2e 55 52 4c 2e 72 65 76 6f 6b 65 4f 62 6a 65 63 .URL.revokeObjec
9e20: 74 55 52 4c 28 75 72 6c 29 3b 0a 20 20 20 20 20 tURL(url);.
9e30: 20 20 20 7d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a }, 0);. }.
9e40: 7d 0a 0a 2f 2f 20 68 74 74 70 73 3a 2f 2f 73 74 }..// https://st
9e50: 61 63 6b 6f 76 65 72 66 6c 6f 77 2e 63 6f 6d 2f ackoverflow.com/
9e60: 71 75 65 73 74 69 6f 6e 73 2f 31 35 37 36 32 37 questions/157627
9e70: 36 38 2f 6a 61 76 61 73 63 72 69 70 74 2d 6d 61 68/javascript-ma
9e80: 74 68 2d 72 6f 75 6e 64 2d 74 6f 2d 74 77 6f 2d th-round-to-two-
9e90: 64 65 63 69 6d 61 6c 2d 70 6c 61 63 65 73 0a 66 decimal-places.f
9ea0: 75 6e 63 74 69 6f 6e 20 72 6f 75 6e 64 54 6f 28 unction roundTo(
9eb0: 6e 2c 20 64 69 67 69 74 73 29 20 7b 0a 20 20 20 n, digits) {.
9ec0: 20 76 61 72 20 6e 65 67 61 74 69 76 65 20 3d 20 var negative =
9ed0: 66 61 6c 73 65 3b 0a 20 20 20 20 69 66 20 28 64 false;. if (d
9ee0: 69 67 69 74 73 20 3d 3d 3d 20 75 6e 64 65 66 69 igits === undefi
9ef0: 6e 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 64 ned) {. d
9f00: 69 67 69 74 73 20 3d 20 30 3b 0a 20 20 20 20 7d igits = 0;. }
9f10: 0a 20 20 20 20 69 66 20 28 6e 20 3c 20 30 29 20 . if (n < 0)
9f20: 7b 0a 20 20 20 20 20 20 20 20 6e 65 67 61 74 69 {. negati
9f30: 76 65 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 ve = true;.
9f40: 20 20 20 6e 20 3d 20 6e 20 2a 20 2d 31 3b 0a 20 n = n * -1;.
9f50: 20 20 20 7d 0a 20 20 20 20 76 61 72 20 6d 75 6c }. var mul
9f60: 74 69 70 6c 69 63 61 74 6f 72 20 3d 20 4d 61 74 tiplicator = Mat
9f70: 68 2e 70 6f 77 28 31 30 2c 20 64 69 67 69 74 73 h.pow(10, digits
9f80: 29 3b 0a 20 20 20 20 6e 20 3d 20 70 61 72 73 65 );. n = parse
9f90: 46 6c 6f 61 74 28 28 6e 20 2a 20 6d 75 6c 74 69 Float((n * multi
9fa0: 70 6c 69 63 61 74 6f 72 29 2e 74 6f 46 69 78 65 plicator).toFixe
9fb0: 64 28 31 31 29 29 3b 0a 20 20 20 20 6e 20 3d 20 d(11));. n =
9fc0: 28 4d 61 74 68 2e 72 6f 75 6e 64 28 6e 29 20 2f (Math.round(n) /
9fd0: 20 6d 75 6c 74 69 70 6c 69 63 61 74 6f 72 29 2e multiplicator).
9fe0: 74 6f 46 69 78 65 64 28 64 69 67 69 74 73 29 3b toFixed(digits);
9ff0: 0a 20 20 20 20 69 66 20 28 6e 65 67 61 74 69 76 . if (negativ
a000: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 6e 20 3d e) {. n =
a010: 20 28 6e 20 2a 20 2d 31 29 2e 74 6f 46 69 78 65 (n * -1).toFixe
a020: 64 28 64 69 67 69 74 73 29 3b 0a 20 20 20 20 7d d(digits);. }
a030: 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d . return n;.}
a040: 0a 0a 24 7b 6b 6e 6f 62 5f 63 6f 64 65 7d 0a 22 ..${knob_code}."
a050: 22 22 0a 66 72 6f 6d 20 6d 61 6b 6f 2e 74 65 6d "".from mako.tem
a060: 70 6c 61 74 65 20 69 6d 70 6f 72 74 20 54 65 6d plate import Tem
a070: 70 6c 61 74 65 0a 0a 63 6f 64 65 20 3d 20 54 65 plate..code = Te
a080: 6d 70 6c 61 74 65 28 6d 69 73 63 5f 6a 73 29 2e mplate(misc_js).
a090: 72 65 6e 64 65 72 28 6b 6e 6f 62 5f 63 6f 64 65 render(knob_code
a0a0: 3d 6b 6e 6f 62 5f 63 6f 64 65 29 0a 63 6f 67 2e =knob_code).cog.
a0b0: 6f 75 74 28 6d 69 73 63 5f 6a 73 29 0a 0a 6f 73 out(misc_js)..os
a0c0: 2e 73 79 73 74 65 6d 28 22 72 6d 20 70 75 62 6c .system("rm publ
a0d0: 69 63 2f 6d 69 73 63 2e 6a 73 22 29 0a 66 20 3d ic/misc.js").f =
a0e0: 20 6f 70 65 6e 28 22 70 75 62 6c 69 63 2f 6d 69 open("public/mi
a0f0: 73 63 2e 6a 73 22 2c 20 22 77 22 29 0a 66 2e 77 sc.js", "w").f.w
a100: 72 69 74 65 28 63 6f 64 65 29 0a 66 2e 63 6c 6f rite(code).f.clo
a110: 73 65 28 29 0a 40 3e 0a 40 40 0a 60 60 60 0a 0a se().@>.@@.```..