Fork: Smoke on the water (loud!)

A small remake of the classic riff by . I wanted to create a distortion effect and it turns out that FM modulation is quite usable for creating that effect when fiddling with the modulation frequency - here, it has to be really close to but not exactly a quarter of the carrier frequency to yield a somewhat convincing result. Other values just sound meh.

Log in to post a comment.

class Delayline {constructor(n) {this.n = ~~n;this.p = 0;this.lastOut = 0;this.data = new Float32Array(n);}process(input) {this.lastOut = this.data[this.p];this.data[this.p] = input;if(++this.p >= this.n)this.p = 0;return this.lastOut;}tap(offset) {var x = this.p - offset - 1;x %= this.n;if(x < 0)x += this.n;return this.data[x];}}const reverb = filter.def(class {constructor(opt) {this.lastReturn = 0;this.density = opt.density;this.delaylines = [];[263,863,1319,1433,439,359,887,1399,233,1367,4253,2903].forEach((dl) => this.delaylines.push(new Delayline(dl)));this.tap = [111,2250,311,1150,511,50,4411,540];this.dry = 1-opt.mix;this.wet = opt.mix*.25;this.pred = new Delayline(opt.pred / ditty.dt);}allpass(delayline, x, k) {var delayin = x - delayline.lastOut * k;var y = delayline.lastOut + k * delayin;delayline.process(delayin);return y;}process(input, options) {var inv = input[0] + input[1];if(this.pred.n > 0)inv = this.pred.process(inv);var v = this.lastReturn;var dls = this.delaylines;v = this.allpass(dls[0], v + inv, .5);v = this.allpass(dls[1], v, .5);dls[2].process(v);v = dls[2].lastOut * this.density;v = this.allpass(dls[3], v + inv, .5);v = this.allpass(dls[4], v, .5);dls[5].process(v);v = dls[5].lastOut * this.density;v = this.allpass(dls[6], v + inv, .5);v = this.allpass(dls[7], v, .5);dls[8].process(v);v = dls[8].lastOut * this.density;v = this.allpass(dls[9], v + inv, .5);v = this.allpass(dls[10], v, .5);dls[11].process(v);v = dls[11].lastOut * this.density;this.lastReturn = v;var ret = [0, 0];ret[0] += dls[2].tap(this.tap[0]);ret[1] += dls[2].tap(this.tap[1]);ret[0] += dls[5].tap(this.tap[2]);ret[1] += dls[5].tap(this.tap[3]);ret[0] += dls[8].tap(this.tap[4]);ret[1] += dls[8].tap(this.tap[5]);ret[0] += dls[11].tap(this.tap[6]);ret[1] += dls[11].tap(this.tap[7]);ret[0] = ret[0] * this.wet + input[0] * this.dry;ret[1] = ret[1] * this.wet + input[1] * this.dry;var m = (ret[0]+ret[1]) * .5;var s = (ret[1]-ret[0]) * .5;ret[0] = m + s * 1.5;ret[1] = m - s * 1.5;return ret;}}, {mix: .1, density: .5, pred: .01});
const sin = Math.sin;
const TAU = 2*Math.PI;

ditty.bpm = 120;

// synths

const hihat = synth.def( (phase, env, tick, options) => [(Math.random()-.5) * env.value, (Math.random()-.5) * env.value]);

const strat = synth.def( class {
    constructor (options) {
        this.t = Math.random();
        this.iom = options.iom || (13.37 + Math.random()*.1);
        this.mul = options.multiplier || 0.251;
    }
    add_fm(note, env, tick) {
        // carrier frequency
        const fc = midi_to_hz(note);
        // modulator frequency
        const fm = fc * this.mul;
        let mod = sin(TAU*this.t*fm) * (Math.exp(tick * -40)*.4+1);
        return sin(TAU*this.t*fc + this.iom*mod) * env.value;
    }
    process(note, env, tick, options) {
        // forward time
        this.t += ditty.dt;

        // overdrive the oscillators
        const gain = 10;

        let osc = this.add_fm(note, env, tick) * gain;
        
        return [osc, osc]; // left, right
    }
}); 


// filters

// from https://dittytoy.net/syntax#filters
const lowpass = filter.def(class {
    constructor(options) {
        this.hist0 = [0, 0];
        this.hist1 = [0, 0];
        this.t = 0;
    }

    process(input, options) {
        const alpha = clamp(options.cutoff, 0.01, 1);
        if (input) {
            for (let i = 0; i < 2; i++) {
                this.hist0[i] += alpha * (input[i] - this.hist0[i]);
                this.hist1[i] += alpha * (this.hist0[i] - this.hist1[i]);
            }
            return this.hist1;
        }
    }
});

let clamp11 = (x) => x < -1 ? -1 : x > 1 ? 1 : x;

const amp = filter.def(class {
    constructor(options) {
        this.amp = .5;
    }

    process(inpt, options) {
        return [clamp11(inpt[0]) * this.amp, clamp11(inpt[1]) * this.amp];
    }
});

// notes

const riff = [
    [d4, .5, 1], [f4, .5, 1], [g4, 1.3, 1.5],
    [d4, .5, 1], [f4, .5, 1], [gs4, .35, .5], [g4, 1.4, 2],
    [d4, .5, 1], [f4, .5, 1], [g4, 1.3, 1.5],
    [f4, .5, 1], [d4, 2.4, 3.5],
];
let i = 0;

// loops

loop( () => {
    var swing = 0.04;
    for(let i = 0; i < 4; ++i) {
        hihat.play(g4, { attack: 0.001, release: 0.05, duration: 0.0, amp: i ? .5 : 1.4 });
        sleep((i&1) ? .25-swing : .25+swing);
    }
}, { name: 'hat' })
    .connect(reverb.create())
;
loop( () => {
    let [note, duration, pause] = riff[i++];
    if (i>=riff.length) i = 0;

    strat.play(note, { attack: 0.001, duration: duration, release: .05, pan: -1, amp: .5 });
    strat.play(note+7, { attack: 0.001, duration: duration, release: .05, pan: -1, amp: .5 });
    strat.play(note, { attack: 0.001, duration: duration, release: .05, pan: 1, amp: .5 });
    strat.play(note+7, { attack: 0.001, duration: duration, release: .05, pan: 1, amp: .5 });
    
    sleep(pause); // sleep in ticks

}, { name: 'Riff' })
    .connect(amp.create())
    .connect(lowpass.create( { cutoff: () => input.cutoff } ))
    .connect(reverb.create())
;

loop( () => {
    sleep(16);
    for(var i = 0; i < riff.length; ++i) {
        let [note, duration, pause] = riff[i];
        if (i>=riff.length) i = 0;
    
        sine.play(note-24, { attack: 0.001, duration: duration, amp: 0.7, release: .05 });
        sleep(pause); // sleep in ticks
    }

}, { name: 'sub' })
    .connect(reverb.create())
;

function softclip(x) {
    return x < -1 ? -1 : x > 1 ? 1 : 1.5*(1 - x*x/3)*x;
}
function varsaw(p, formant) {
    let x = p%1;
    return (x - 0.5) * softclip(formant*x*(1-x));
}

var sbass = synth.def((ph, env, tick, opt) => varsaw(ph, Math.exp(-tick * 2) * 100) * env.value, {decay: .05, sustain: .2});

loop( (lc) => {
    if(lc == 0) {
        sleep(32);
    }
    else {
        for(var i = 0; i < riff.length; ++i) {
            sbass.play(d1, { attack: 0.001, duration: .2, release: .1 });
            sbass.play(d2 * 1.005, { attack: 0.001, duration: .2, release: .1, pan: -.6 });
            sbass.play(d2, { attack: 0.001, duration: .2, release: .1, pan: .6 });
            sleep(.5); // sleep in ticks
        }
    }
}, { name: 'bass', amp: 3 })
    .connect(reverb.create())
;

// inputs

input.cutoff = 0.464;




var unpck = (code) => {
    var d = [];
    for(var i = 0; i < code.length; ++i) {
        var v = ((code.charCodeAt(i)-0x23) / 91 - .5) * 2;
        d.push(v);
    }
    return d;
};
var smpsnarel = unpck("QPOOOPQPNNOPPPPPNNNOONMLLLKIIIGGGIIHGIIGEB>6-'),*########(0-(#%*############*,.38?JSY[]bd_Z[aflu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|wrjc^\\ZZ\\bjqssuwtmghf`\\[[WRTX\\ZQD94455436871+&######%'&###$',11,%##$%#####################################+6>CEC@<94,####$&%%###(/7@HMPRUWY]ckookfcfmv}~~{wtrpprpkhecdhouyzz|~}{wtroljd\\TMIJMNKC<62..0242,'%(,05<CGJKPTX\\^][Y[bhnnoponmqy~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{{~~~|vrrokijlmpswywog^VMD<61,,/0,($######################################################################%/9ADFID<<93*#######/3/9PdppovqjheffWOJ:465;?9AVbaVPYcgeciw~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~znhfhe\\VTRNC856:EB.###########################################'135415>CC?DUbc`bjqrooi`bfddhnsurhVKNUYYVPIFKQPKFFPYYVSQOS\\daWQQRYbbXNNTUONKECB921233.-9EB87=EHD=>AAAFP_jh[MGHGGPVPGHLJHFCBCEGGFB<6/($)4789;<BGIGD@DJMIFDDA<?FGA84=ILJHLROJLONNU^a_dqtqqolosurkky~~~~~~~~~~~|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~zh\\]`\\Z]bd_YUOEAAD@;9=BC=4.042141)%##$'&%(+*'(0=E@3,-//2566541(#########$*/12134/042+(-7<<7/###6CEGGA:8AI:$$4?B<7EOC<HLEDEEK\\nnQ32BQXI01RpsdQ@<Naa[^a]VU_hbZXMBOfw~~wnkmuxtonr~~~okklx~ujf_WXdopi]Zk~~~}z}~~~~~~~~~}ypiif`bjhXMQXUSPHBEIJHD;42458=>:6.##$10(#######-9AA<<;77;>GPUWWSQTUQQ[ceeilliegt~~~rhjpwwwyvlgfn~~}utkca`ccXQX]VMJNM?3145:?BA<548<<62366321165,)3;5'#####$-3-+/'##3KYQEGIA9:BJKGIPSPJ>2,.9IOA26K`g]OF?746=HJ>6=EA79ELMPSQOMGEFIOTNGKZd`QFHQSMIOX^_[Z`bbbagnh^\\\\]djs}~ysv{~~~~~~{v}~~~}~zuvxvx~~~~~}}|wz~~~pbgrxvspnmjknonptvo`WZ_]XTW[XMGLTQG;8;=;67?EE=.####&-137;?ABB8###+30'###'&#&,,)(*,(#(19=;6-##(2671-03568DOPOV]]YOIPZ`^\\^\\ROSPJKRWZ^cfc__\\USZbmwuotxtk]RVUD9DORJ;<JMDACN[]TTZYXXWYYZfjYB@KU[binndVRXZWQJP]^P;19KV_hi`WQQV[cjkdTGEE<49IUNBDKMHA=DQY[\\ac][[]ce[OLNT]][XTOPRYfrtnhb\\Y^ef^Zcjgc`]bgc`_[_inppllqvwvogdZPP[_[WSRV[YSNJ@;BLNOMJLOOJGIOUZ^[XSICCBCB><?>92)&&'*16<:119:5039826;=>;:BC70452/-1551+*18>>3,--.5<?@?=>?AHTbg`YUOIKQRICHU\\[UPNLKJLNQVZ]\\WVX[]\\Z[YVY^_^_abb]ZVRU]]WX\\^_dlj`aie^ac]X_nwpgcaeq|~~ywvqntyxrg`_ehigilf\\VTYdhhlnjjqsi^[\\YTVXVNKLIC?<:79>@@@CHJD<=>9:BLPF42:>ACEMRNIEDGIFKUZTHB=98<@IW]VJ=7ARYVQQT[[PHILOTUVWQIGDELNKKLSWWWVTTVYYUNOX[VRRQIB@><=EJHCGLNQTVRLJQV]`ULRSNNJEGE<AID:449><98:<;851/274./<LRK>8;?>=>BEIHDB@@GJHGHCDFC=<<AIKFEKTYYX]jrnc_biliikkkosw{yuvyxqlr~~~zvwvljpw~~zwywy~~~vrsoio}~tjcghb_`YQMLLKHJU\\^]VRSUUTQLC;?GGGJLKHECABHJFFFA;>CD@?BA=;=C@42:?FKD;89@GB:;?FKD=>EIH?73126:=;9:745401458<>:8;826@B>=BE</-:@?>DHJJKKIJNMIIORSUXYUKFGKOSSTWZ]`adimponnjbYXbppg`[Y`ec`^`c`XW`ijdbenqlhlonjfhopifhilliggd^XUUSRRRSTUPLKO[`YRPOKHHLROJJMSVTJA@CCADJNNJB;77;@HONLNNF>=@?;:BID74;@??>827B@629BFDBDEFIGCEKNNHGQXRIGKRTRPJJT_ccbdhf\\VW[^^`ba_``_ZVWUTYemnjghgdZSYdd`^ZY^a^ZTOSXXVTSUWRLMONKIFJLJJFABCBAA>=97<A>4-1677879<9<DF@@CJMKHHGFGJOQQRRTUKCHLKOUY`d`XZfnlge`^abdimmic`bb`biomh\\ST[]`^Z]bfki``efe_YY[^cfb[Y^db_^]UKA=BMRLFHJHHLOPMIF><DF??DJQPKD939>=AGKIA<>@><:;;;>FKFBEIJE<517BIHB@BC@FQUPLLHBEIIJMT\\_YTW\\_\\Z]cjkgb^ZXWWY[[^gjbTMQWY[YSLLMKJLQZa_WQPSUSQSUX^cbZROS[ad`[Y[ZXVVXYVXZYW[a]RNQVYXSTXXWXVVXWRLGKSTOOQSSUUPJJMNNIB@DINPLGDCB=<BILLGCBDHF@;=><;;<<:>?<;??=<>??<:77:=BBBEGFB@@DEDGKMOPONOPQONNPSTRRSPPRRRSOMOU\\_ZTSV\\bdda^\\Z\\`ab_[X\\`ca]^^\\aijd^XVUX_ddb_\\YX[^]XPQYaa_[SORY`dbXRTVOKQVUUVWXUSQQSSNLLMONLMMJFGJLOSPNRTOKLHFGHFGD@CGFDDIQTOJKOSTX[VPQSRSY]_bdd`ZYYURUVUPJFGHHIKNRMEEHJQTVZ]_`^ZSQYbc^WTX`]WTY^[RIJPY]ZWYZYWUUSNJKNNMKFCGNKA?FKLJIJKJJHFFGEB?<::;=AFB?AGG@;=@=;=ADFEB?AA><?@?>>;989;@CDDFGC@DLSTQMLORPMQVXZZXYYXWXZ]`a]WUX^db\\]cgjllkjd\\W\\cgfghfgfcbcfhkorja^_dhjmle_aeggge`\\]bdfg`VQU[\\[ZXTPPPQRSOJIMOPMHEGMQQNNOMIJKNOMKKMJD=757:>DHGA<>@<<@EFEFGFA;8:BIHA814;<;>@?:43557::42:AABHD<>DEEHMPNNSRLILOQRTVUSPLIKIGKOPOPTVXVSU\\^XUUV\\cbZQNRUSU\\a]YXY^_[WXYXXWWZ\\\\[YY]]YWVUTQPRRPPSVWX]`]WTV\\``^[Z`dc``_[YZ]_\\UV[^]XQOSXXUV]^XSRQPNOPRPRY[UPPSTTUWVXXUSSQQRSWXURRTUSLHJNPOKIEEIOPLIGECGKKMQPKKLLLIJQVSNIGLPOMHFLUYRORUPJLQTUY[WQNRY^\\WRSUWVRNNRTSOGEIOPJGGIJKNOMHFGIJLIEEDBBCBBA@DFEDA>>@>9679769>CFEDDA??CGKKMKGEHLMHDFFCADDCEMUUQNRTSVWX[`a`aa_^^`ba_accccccbacghbZUX[^bd^ZZ`feddegigcab_^ekjgb^\\]ahkheb_\\\\]][ZZ]__[URQPPSUTQPQPMLNPQPQQRSUTQMMQSONLJHGGIJGGIILLIGGEFFE@;=BFC?><4158:9766778:867;@A925=CEFFECEHJHFEGKLIFFC@>?DIKLMNNPNNOPSWWVUTTUSQRUVUVXXTQU\\^^ZY\\[YUW[[WSV]a\\YXXXY\\_ca[X\\a_Z\\_`_]XX\\_^[XW[]^\\ZXVSRSUTRQQOOTZXTRRSVURSURPPOMNPQNKMQQLKMQRNLSVQOPONONMMMKMRUVUTUTSSUVVWUSTVTOPY^\\XUTUUOLPTUTSSSUXVRSRQUZ[VQQUWRMMOOLOUYWSOQTVWVSOOSUUVXXTQOMNPQRTTOIHJKNNLPRPMKHGFFFGIKLIHHGFDCDECDDDCFEEIMMHEB>=BFJLKFBBEECDIGEDB??ADGHFDBCCBDEFGIKMNMKJLMNRURLLRUSRQRWXVUTV[[UQRVZZYY[ZYYYYY[_^[YZ]__]]^][[^``\\YXZ]_`_]]\\XUTVY]_^\\Z[ZZZ[\\YUSUWXVUWZYY\\___^^_^^_\\VSW\\ZURUVVSRPONLGGJNPQPNLIIJKLNMLJIHGHJGECEDFKIB=>A@@AA@CHHCB?=?AEFB@CFFIGAADFFEA?AFIIGHJLIGHILPQPQSPMMMMOORVXXYWTSUVTSUUUY][YYXVWYXXWWXZXWWZYURTWWTSTTPPSW[[[]]ZX[_^]]__]YXVX]]XTONPPMPSQOONNQUSPNOONLNQSRSWVOMMNNNOMGDEHFFGGE?=AEDDGFDCEHHFEFJMPQRNJLNNNLKOUUOKLQTRRTVSRUVVY^][ZXWWWZ^acc`]]`dda`ff`XRRX^aaZXXXY\\\\[[ZURSUXYWUROMQUWTPLMQROLKMQQOLKIGEIMLJIGGGFGIGDEEDEEECBBCEFGHFEEIJHCDHLLLLKKJJLNLHFFIMOMJFFJMMMMNQSPLIKLIIMPQPLJKLJLOSUURPPQPQSRQRQOPTTOMNRSTUUUVXYXWUTSSUVY[ZXURRTURPOOQWZYZ[XUTUUUSRONPSSSTUUWYXVTTX[\\ZXVTTTVVWUSRRTVUUTPMPRQPRSQQQQOLLOUY[WRPQPQRSSPOOPTWSOKIGGINPOMLKNPNJJKMNONLHGJOPLKNONNMLKKKJJJJJIKLKJMOOMORSPOOPOMNRVVQNOPPTUSRQRTUSTVUTSSUVUSQPQQSTSQSTUTTVWWUSRRRRQRTVUSRPPRX[XTOKILQUWSNMOQQONLNPOMNNKHIMRRPPONOPRROLMRUTPMNQQNNQPOPMIJLIIKNLJGHLOPOMLOQONOPPOMLMNLJJMPTUUROPRTUWWVWXYVRPRUXWXXUSTY]]ZY]\\XUWZZYX[\\YUSTUUUURPPRVY[]\\YUQNMPRROLLMMMNPPMIJKJGEFFGJMNLKJHGFGLPNLKIGEEFIMRTPLJHIKNPONOPPRSPMMNONMKLQROPRUWYWSOKKLMPRRRSTQOMMNOPQRSRSQONPONNNMMPSTQNLMNPSUVTSQNNQSUTUVVVURRSSSSRSSSQOPRTTTSSRQRSUTRRQPQRQOORTSRQPPPPNMMNNNLMMOQPOOQQQOOQRPNNLKMNNNNNNMPRSRPMMMOQPMMOPPPONLNNNOQRPMPQPONMOPQQSTUUUSSVY]]XTSVZ\\ZVSTVYWUSSSUURPRSSRTTQNLMPRSTSOLKIKMNPRRSTSOKMORSTSRQRSQOQRRQTWXWVUQPRUTQPRTSOMMPQPOOQSQNNPRTSQPONLNSVURRRPNLMOOMKKNQQPQRQPPQPNMMMNNLMNMKKNMKKLLLLLKJKLLKJLMMLLNPSSPNLKLNOPRSSRQPPOLLLMPQONOQRQOPRVVSNMOOPQQPOPQTUUSPORSRSSUTQPQRSSSSSTTTRPPSTTRQPONMMMMMPSPLJJLNNNOQSTTTQPQQRSUWVUVZ\\\\[WVTVVVUTRPQTTTSQOOPPOONOQRRQONNNOQQPQSTTRONNORSUTSQQTTQQRRQRSRQRSSSTSSOKKNQQRSRPOPTTRPONONNPRQPNNLNRUTPMLORRRPMMOQRQPPQPPQQPMLMNOOPNMJHIKONKJJKKLMMKKKJJKKJIIIIIJJKKKLMMLKIJMONNMKJIHJMNNMOPQONOQRRQRRRQQTUSRSRTUTSQQRTTSTVUVXWTSTWYZZZYXXZ]]^[[ZYXVVVWXXYXWVWWVUSSVVVWWWUSTUSRSTSSUUTRRRSUVTSSRRQRRRRRRQPOOQRSQONLMOPQOMMNNLKKMNNOOONMNOMMMNNONNOOPNMLOQQPNMLLNOLJJJJLNLKJKJJJKLLLLKKKKKLMLLMNOONMLMNMLLLNOQQONNPPPONMLMOPQQONNMLKLNNMNOOOQQRRQRSSRQSTTTSRSSQPRRSUXYXVSSRSTSRQQRTTRSSUVUUTRQOOPQRRPPQSUURQOPRTSRPQRQPPQRTVXWTPPQQPPRSUSRPPOPPOPQRSSPOPRSTSSUWUTSRRRRQRSSTTRONOOMORTTRQQPPOPRQRQQRRPPPQQSRQONOQRQPPSVUSQPRRSSSRPORRQPPPPNKKMNLKMNNNPPNLNMKIIJKKKLMMIGGHLNONPSSNJKMOOMNPPOMMLKJKMNONLMOQRPONNNNMLLLLLOMNMNNQQRRSSQPQRSTVUUSSTUUUSRQRSRRQQRRSTTUUTTUUTSRSTTUTUVVVVWYZXXYZZYWUUVVVUTTTSTSSTTTTSTUSRRRRSTSSRTUTSRQRRRQPOPPQPMLMLKJKLNNMLMLKJKMNMLLJLOQPOPNMLLMLLLMNOMKJLNNONLLKKLNOOOOOQRQQQQOPRRRPPRTTRPOOQPOOPQQRQPPOOPQQPOMKLMMLLMOOOPPRQPPPPRRRPOOONNMNOPPOPQPNNNQRSSTUUSQQRTSRRSTSQOPQPPPQQPOQRRSSTQONPRRSRRSTTTUVWURPQRRQRSTTSPNOPQPOPQQRPPQSSONMLNOOQSQQQQSRQRUUUUWVVTRQRSTUUUUSRRSTTSRTSRQQPMLNQQOPQRRQQRQOQPNNNOPRQPPPPOMMNQRQPPQQPNOONLLMNOPQPNMLMNNNNPQQNMMNOOOOMLKLMMNNNNOPOONNNPPPOPPPPQQQPNNOOOOOOPONMMNOPOOPPQPONNOOQQPOOQSTTRRQSSSSTTTSSTVUSQQQRRSSRRRRTTTSRQRRRQPRTVTSTRSTSRSTTSSSUVURQQRRSSRONNPONOPPQPOOOOPONNPQPONNOOOPPPOOQRQOPQPPPONNNPQOOOOOOOPPPOMNPRRRRQPOPRRRQPPOONNNNPRQQQPOOOPPPOOOPQQPPPONNNOPRRSSRPOPPPOONNOONNOQPONMNONMMPQRPPPPQQPPOQPOOQRRQPOOPPPQRRRQQPPNMNOPQRPOPOPPPQQPQQQQQSSSSSRRRQRRRSSSRSSSRQRSSSSSTUUUSSRRRQRSRSRRSSTSSRSSSRQRSUTSRRRRQRRRQQRRQRRQONOOOOPRTSONNOOOOOPPONNMMNNONNONNOOOPQRSQPOOPQPQRUTSQQRRSQPPQRSQQPQRQRRQPQQPOONMNNNMLMMKLMMMKMNOOMLLMNNNONOONMMMNNNOPONMMMMNNNMMMNNMMMLKKLNONMOOPPPOPRQQRQQQPQRRSSRQSUUUTSTUUVVVWXWUTSSTTRRRQQQSSSTSSSSTUVVVUVWWVTSSTTTTTSSRSSRQRRRQRQQPPQRRSRQQPQRSSQNNNPRRPOOMNNNNPQQRQPOMMORTTROPRRSTSRRRQQRRQPNNNNONNLMMLLMNNLLMMMMOOPPQQQQRRQQPPPPNOPRRQOOQQQPQPPPOOOPOONLMNMMMMNNNNONMLLKLMMLMLKKJJKLMNOPOMNOPPQQQPPPOOPOOPPPNMNOPNNNNNOPQQQQQPQQRRSSSSRQQRSTTTVVVVWVVUUUVVVVWVUUUVVUSRSTTTTSSSTTSSSRRTUUTRPQSTUUTTSSSSSRRSRSRRTTTRRQQRQPPQRQOOOOONMNOPPPOPQPOPPOOONOOPQONNOONMNOONNNOOOPPPPPPPPPPPPONMOQPPONMNNMMNMNNNNNOONNNQQPMNOPPPONNOPOOOPPPOMMNOOPPPPOOOOOOPPONNNONMMLMMMMNNPOPQPONNOPPPQQQSSRQQQPOPRSRRRRRQQPQRRQQRRSSSSSTTSSSRRRRSSSTTTTQPPQQRQQRSTSRRTTTTSUUSRRRRRQPQRSSQPOPRSSRRRRRPQPPPQPOPPPOOPQPQPONOOQQPPQPQQPQQQPONNPPPPQQQPPPQRTSTTTTTSRSRRQRRRRRQRRQQQRSSQQQRRSSTSRRRPPRRQPQPOONNOONNNNMNOPOONNNNOOONNNMMMMNONNMMNONNNOOOONMLMMKLLLLJJKLLLKJKKLLLNMLMNOQPNOPQRRQQQRRQPQRQQRQQQOOPQQQQPPRRRRQRRSSTTUUUUVVVVUUTSRSSTSSSRQQQSSSSTTSSRSSSSSRQQPPRRQQQPQQQQOONNOOOOOPRRQQQQQRRSSQQRQSRQPPRSSRRRSTSSRRQPOPQSSQQPPONOPQQONOQSRQRRQQQRRSSSRSSTRRSTSRQRQQQQPOOOOOONOOOONNNNNOOPOPPNNNNNNNNNMMMNOOOPQOOOONNOPPPPPPNNNOOONOOONNOOQQPOOOOOOOOONNNMMNNONNNNNMMOOOOOOPQQPOOQQRRQQQPOPQQRRPPNNPQQQQRRRRQOPQQQQRRSSSRRQRRTTUTSSRSTTTSSRRRRSSSRRQSSQQQQRSRRQPPPQQRRQQSSRQPQRRSUTSSTSSTTTTTTSTTSRRSTTTTUTSRRSTSRRRQQQQPQOOPPONMNNNNNNMMNNOPPPOONNMNNOONNNNOOOPQPONMMMNMMNNMMLLLLMMMLKLMMNNMMNPPPPOOOOOONOPPPOONMMOOPPQRPQPPPOPQRRQPRRRPPQRRQQPPQRRSSRSTTTSRRRQQRRSSSSSRSSSTUUUSSTTTTSSSRQQQRRQRSTSSQRRQPQSSQPQQQQPOOOOPRRQQQPQQOOOOONNNNOOOOOOPNMLMNOPOOOOOOOOPRSQPPOPQPOONOOOMMNOPPONOOPPPPPOOOPOPPOONOOOPPQPPOOOPPPPPQPPPQQPQPQPQQQQRSRRQQQSSSSRSSSRRSSSRRSRQQQPPPPQQQQRPQQRRRQQSSRPPPQQQRRPPPPPONOOOOOOPPOPPOOPOPOOPQPOPPPPOPOOOQQQOOPQQQQQRRRQQPQQQQQSSRPPQQQRSRRRQQPQRSRRRQPQRTSRRRRSRRRRRQQQQRRQRQPQPQQQPOOOPOPPPOOOOOOMMMOOPPPNONOOPOPPQQQPPOPRRRQQRRRQQPPPQQQPONOOPPPPNNNNPNMMMNOPPPOOONNOOOOPPOOPQQQPPQQPPQPPPQRRRRRRRRSRQRRRQQQPQPOOPOOPPPQQQRRQPPQQQRSSSSQQQSRSRRSSSRRSSSSRRRSSTSRQPPOOOPPPPPPPOOOOPQQPQQRQQQQRRRRSSRRQPQQRQPQQQPOOPOPQPOPPPPONOOPOONOPPQQOOOPPPPQPQPQPOOOOOOONOONNNOOONNMNNPPPOOOOOONNOPPNNNOONONOPOOOOPOPPOPOPQQQQSSTTSRRRRSSSTSTSRRQRSSSRSRQQQRRRRRPPPPQQQQQQQQPQPPQRRQQPPOPQQQQPPPPRRRRSRQRQQPPPPQPPOONNNOPPQPPQQPPPQPPQPOOOOOOPQPQPOOPQQPQPPPQPPPQQRRRRSRQRPPPQRQQRSRQQQQSTSSQQQRRSSSQQRRRSTTTSRRSSTTTSRQQQQPPQPOPPONNOOONNOOOONNOONNNNNNNNNOONOOONNNOOPOOONNNOOONNNNOOOONMNNOOOOOPPOOPPQQQRQRQQPQRRRQQPPPPOPQQQPQQRRQRQQRQRSSSSRRRRSTSSRQPQRRRRRRQQRQRRRRSSSSRRRRRRQQQQSSSRRQQRRRQQQPPPPPPQPPPPPPOOOPPOOPPQPOPQQPPPOPOPPPPOOOOOOOONNNONNOPPOOOPPOOOQQPOPPPOPPQQPPQQQQRQQPPQQQPPOPQPPQQQPQPPPPQRRQPPPOQQQPOPQQPPQQQQPPQQQQQQRPPPPPPPQQPQPPPPPQQPPPRQQPPPPOOPQQPQQQQPOPPQQQRSRRRQPQQQRQQQQQRRRQPOOOPPPPPPPPPPOPPQQPOOOPPOPPPPPQRRQPPQPQQQQPPPQQPPQQQQQQQQQQPQQRRQQQQPQRRQQQPQQQPOPPQQRQQRRSSSSRSTSSTSSSSRSRSSRQQQRPPPPPPPOOOPPPPOOOONOOPPPPOOOPPPPPQRRQQPPQPPPPPOOPPPNNOONMMNNONNNMMLMNNNNNMNNNNOONOOONONNNOPOOONNOPONOOPQPPPQPQQQRRQQRRQQRQRQPPPPPPPPQRQQPQQRQRSSSSSSSQQRTTUTTTTTTSSTTTUTSSRRRRQQRRRQQPPQQQPQPPPQPPPPQQQPQQQQPPOQQQPOPPOOOPPPOOOOOOOPOOOONOPPPPOOPNNNNOOOPNNOPPPOOPOPQQOPPPPQQQPPPQRQRRQQQQQQQQQQPPQPPQQQQPQRRRRQQQQPQQQQQQQRRRRRRRSRRRRRRRQQRRRQQQQQQQOPOPONOOOOONOOPONNOOOOPOOOQPPOOOOPQQQQPQQPPPPQQRRQQPQQQRQPOOOQQQQPPPPPPOPPPQQQQQQRQQQQQQQQPQRRQQQPQQQPPPPPOOOOPQQQPPPQQQQPQPPQPQQQQRRRQQQRQQQQPQQQQQQQQQQQPQQPPONOPPOOOOOPPPQQPPPQQQQQQPPPPPPPPPPPOPOOONNONOONOONOOPPPPQPPPPQPPPQQPQPPPQQPPPOQQQRRQPQQQRRQQQQQPPPQQQQQQPQQQQOPPPPQRRQQPPPQQQRRQQRQQQQQRQRRRRRRRQQQRRRRRQQRQRRQRRRSSSRRQRRRRSRRSRSRRRSRRQQQRRRRRRQQRRRQPPOOPOPOOOONNNOOONNMMNNNNOONMNNOOOOONONNOOPPPPPOOOOONOOOPOPONOPOOPPPPPPPPOPQQPPPOPPPOOPPPPPPPQQQRRQQQQQQRQRRRRRRRRRRSSRRRRRRRSSSSSSRSSSRRRRSRQRPPPQPQQRQQRQQQRRQRSSRQQRSSSQRRRRRQQQQPPPPPPNOOOOONNNNNNONNOONNOOOOPOOOPPPPPPPPPPPQQRRRRRQPPQQQQRQQQPPQQQQPPRQPOOPPQQPPPOQRQQQQPPQRRQQPQQQQQPQRRRQPPPQPPQPPOOOONOONOOONOOOPPOPPPOPPPQPPPPOOOOPOOPOOOOOOOOOOOOPPONOPPOOOPOOOOPPPQQPPPOOOPPPQPQQQQPQRQRRRRSSSSSSSSTSTSSSTSSSSSRRRRRSRRSRSSRSSRRRSSRSSSSRRQRSSSRRSRRSRRQQRQRRQRQQQQPPPPPOOOOPPOOOPPPOOOPPOOPPPPPOOPPOOOOOOPOOPONOOPOOOONNOPOOOOPPPPPPOOPONONNNNNONMNNNNNNNONNONOOOPOOOPPPQQQPPPPPPQQQQQPQQQQPPPQQPQRRRQRRRSRSSSSSSTSRSSSSSTTSSRRSRRRRRRQRRRRSSRSRRQQQQRRQQPPPPPQQQPOPOPPPPPPPPPPPPQPPPQQRQQQRRRRQQQRRQQQQQPPPPQPPPOPOPPPOOOOOOOOOOOPPOOOOPPOOOOOPOOONNOOOOONONOOOOPPOPOOPPPQQQQQQRQQQQQQQQRRQRRRQRRQQQRRRRRSRQQRRRRSRRQQQRRRRSRRRQQQQQPQQQPPPPPPPOOOPOOOPOOOOOOPPPONNNNOOPPPOONOOOPOOOPPPPPPPQPQQQQQPPPPQQQPPPPPPPPPPPPQQPQPPPQQQQQPPPPQQQRQQRRQQQRRRRRRRQRRRRRRSSRSSSSTSSRRRRRRRRQQQQQQPPPPQQQQPQPPPPPPPQQPPPPPPPQPQQQQQPPPQOPPOOOPPPPPNOOPPOOOOOONOOOOOONNOOOOOPPPQPPQRRRRRRRRRQQRRRQQQQQQQQQQQPPPOPPPPPOPOOPPPPPPPQPPPQQPPQQQQQQQQQQQQPPPQQQQPQPPPPPPPPPQPQQPPQQPPQQQPOPQPPPPPQQQQPPQQQQQRQQQRQPPQQQQPPPPPPPPPPPPPPPOOOPNNOPOOOOOOPPPPPPPQPQQQQRRQPQQRQQRQQQQPPOPPPQQQPPOPPPPQPPPQQQQPPPPQRRRQQQQRQQQRQQRRQQQQQRQRRRRRRRRRSRSRRRRRRRRRSRQRSSRRRRQRRRQQQRQQQRQRQRQPPOPQQPPPPOPOPPPPPPQPPPPOPPPPPPOPOONNONNNNMNNNNMMNNNNNNNOOONPPOOOOPOPPOOOOPPPOOOOOOPQQPPOPPPPQQQPQQQQQQQQRRRRQQRRRRRRSSSRRRRRRQRSSSQRRRRRQQQQPQQQQQQQQRRQPQQRQQQRRQRRRSTTSRRSSSSRRRRRSSSRRRRRRQQPPQQPOPQQPOPOOOOPOPPOPPPOOOPPOPPONNNOOOPPOOOOOPOOOOOOOPPPPPPPPPPPPPPQQQQQPPPPPPPPPOPPPPPPPQQPQPPPPPPPPPPPPQQQQQPPQPQQQQQPPPPPQPPOPPQQQQPQQQQQQQPPQQQQQPQQPPPPPPPQQQQPPQPQQPQQQPQQQQRQQQQRRRRRRQQQRRRRQQPPQPQPPQQPPOPPQQPPPPPPPQQQQQQRQRRQQRQQQQRQQPQQQQQQQQQQQQQQQQPQQQQQQPQQQPQQPQPQQPPPPQPQPQPPPONNOPPPPPPPPPOPOPPOPOPPPPPPPPOPPPPOPPPPPPPOOOOPPPPPOPQPQPQQQQQPQPQRQQPPQPPPPPOPPPPPPOPPPPPPPQPPPPPPPQQQQPPQQQRQQQQQQQQQQPQRSRRRRRRQQRRSSSSSSRRSRRRRRRQRQQQQQQQQQPPQQQQQQQQRQQRRRRRQRRQQQRQQQQQPQPQQPQQQPPOOPOPOOPPOPOONOOPPOOONOOPPPPPOOOPPPPPOOOPOOOOOOONOOONNOONNONONNNPOOONNOOOOPOOOOPOPOPPPQQPPPQPQQPQQQQQRRSRRQQQQRRRQQRRQQPQQQQQQQRSRRRRQRRRRRRSSSSRRRSSRRSRSRRRRSRRQQQPQQQRQQQQQPPQQQQQPPQQQRQQPQRQQQQQPQQQQPQQQQPPPQQPQQQRQQQQPQQQPQPPQPPPPPOPOPPPPPOOOPQPQPPPOPPPPPPPQQQQPPPPPPPOOOOOOOPOOOPOOOOOOOOOOOOOOOOOOPOPOPPPPPOPOOOPPQQQPOPQPPPOOOOPPOOPPPOOOOOPOPPPOPPPPPPPPPPQPPQPQPQPPQQQRQQQQRRRRRQQRRRRRRRRRRSRRSSSRRRRRQQRRRSRRQRRSSRRSRRRSSSRRRRSRRRRRRRQQRRRQQQQRRRQQQPQQQRRQQQQQRQRQRQQRQRQQPQQQRQPPPPPPQPQPPPPPPPPPOOOPPOOPPOOOOOPOONNOOOOOONONNNMNMNNNNMNNNNNOONONOOOOOOOOOOOOPPPPOOOOOPOOPPPOOOOOOPPQPQOPPPPPPPPPPPPPQQPQPPQPPQQPPQPQQQRRRRRRRQRRSRSRSRSRRRRRRRRRRSRRRRQRRRRSRRRSRRRQRRRRRQRRRSRSRRRQRQRQQQRRRRRQQPQQQQQQQQQPPQQQQQPQQQPPPPPPPOPOOOPOPPPPPPPOOOOPPOPQPPQQRQRRQQPPQQQQQPQPQPPQQPPPPOPPOONONOONONOOOOOPPPPPQPPPPPPQPPPPOPPPPPPPOPPPPPPPPPPPPPPPPPPQQQQQQPPQPQPPQQQQQQQPQQQQQPPPQQQQRQQQQQQQQQQQPPPPPPPPPPPQPQQPQQRQQQPQQRQQQQPQQQQRRRRRRRSQRQRQQQQPQRRRQQPPPPPPQQPRQQQQPQQQQQQRRRQQQQQQQQQRQQQQRQPPPPPPPPPPPPOOPOOOOPPPPOOPPPPPPPPOPPQPPPPPPPPOPPPPPPQPPPPPOOPPOPPOPQPOOOPPPOOPOONPPOPPOOOPOOOPPQPPPPPPPPQPQQQQQQQPQPQPPQPQQPQQPPPPQQQQQQQQPQQQQRRRRQQQQQPQRRQQQQQQQQRQRQRQQQPQQQQQQQQQQQPQQQQQQPPQPPPPPPPPPQQQPPPPQQQPQQQQQQQRRRRQRQRRRQRRRQRQRQQQQPPQPQPPPPQPPPPPPPQPQPPQQQQQQPQPPQQQQQQPPPOOPPPPPPOPPPOPPPPPQPPQQPPPQQPQQQQPPOPPPPPPOPPPQPQPPPPPPPQQQQQPPQQQQQQQQPQQQPPPPPPPPPPPPPPPPPPPQQQPPQQRQQQQQQRQQRRQPQPQQQQQPPPPPPPPPPPPOOPOOPOOOOPPPPOOPPPPOOOOOONOONOONNOOOOOOOOOOOPOOPPQQPPQQQQQQQQRRQQRRQQQRRRRRRRRSRRRRRRRSRRRSRRRRRSSRRRRRRRRQQRRRRQQRRQQRQQQQPQPQQQPQPQQPQQQQPQPPPPPPPPPPOPOPPPPOOOPPPPPPPPQQQQQQPPPPOPPPPPPPOOPPOPPOOOPPOOOOPPPOPPPPPPPOOPPPPPPPPPPOPPQPPPPPPQPPPQPPPPPPQQPQQPPQPQPPPQQQQQPPPPQPQQQPQQPQPQPQPPQQQQPQPQQQQQQQQPQQQQPQPPPPPPPQQPPPPQPPQQQQPQQQQRRSRRRRRRRRRRRRRRQQRQRQRQQQQPQPPQQPQQPPQPQQQPQPQPQQQPPPPPPPQPPPPPPPPPPPPPPPPPQPPPPPPPPPQPPPQPPPPPPPPPPQPQPPPPPQQPPPPQPPPPQPQPPQQQPPQQPPQPPPPPPPPOPOPPPPOPOPPPOOPOOOOPPPQPQPPPPQPPPPPQQQQQQQQQPPPPPPPPOPOQPQPPQPPQQQQQQQPQPQRQQQQQQQQQRQQQQQQQQQQQRQQQQQQRQQRRQRRRRRRRRRRRRRRRQQQQRQRRQRQQQRRRQQQQRQRQQQQQQQQPPPPPQPPOPPPPPPOOOOPOOOONNONNONNOOONOONOOOOOPOOOOOOOOOPPPPPPOOPOOOOPPPPPPPOPPPPQQPPPQQQQPPPQPQPQQQPPQQPPPQQQQRQRQQQQRRRRRRQQQQRRRQQQQQPQPQQRQQQQQRRRRQQRRRRQQRRQRQRSRRRRRQQQQQRQQRQQQPRQQQQQQQQPQPPPPPQPPQQPQPPQPPPPPPPOPPOPQPPPPOOOPPPPQPQQQPPPQPQPQPQQPPQQPQQQQQQPQQQQQQQPPPPPPPPQPPQQPPPOPOPOPPPOOOONOOPOOOOOONOOPOPOPPPQPPPPPQQQQQPPPPPPPPPQQPPPPPPQQQPQQPPQQQRQRQRQRQQRRRRRRQQQQQQQQQPQQPPPPPPPPPPPOPPPQPQPQQQQPQPQQQQQPQPQQPQPPQPQQQQQQQPPQQQQQQQQQQQQPQQQQPQPPQQPQQPQPQQQPPPPPQQQQQQQQQPPPQQQQQQRQQRQPQQQRQQQQPQPQQPPPPPPPPPPPPPQQQQQPPQQQQQQQQQPQPPPPPPPPPPPPOPPPPPOPOPPPPOPPPPPPPPPQPPPPPPPPPPPPPQPPPPPPQQQPPQQPQQQQQQQQPQQRQQQQQQQPPPPPPPQQPQPPPPQPQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQQPPPPPPPPPPPPPPPPPPPQPPQPQQPQQQQQQQQRQRRQQQQRPQQQQPPQQQQPPPQPPPPOPPOOPPPPOOOPPPPPPPPQQPPQPPPPPPPPPPQPPPPPPQPQPQPPQPPPQPPQPPPQPOPPPPPQQPQPQQPQQQQQQQQQPQPQQPPPPQQQQQPPPQQPPPPPPPPPPPQQQPPPQQQQQPQQQQQQPPPPPQQQQQQPPQPQQPQQQQQRQQQQQQQQQQPPPPPPOPPPPPPPPPQQPPOPPPPPPPPPQQPPPPQPQQQPQQQQQPPQPQPQPQPQPPPPPQQQQQRQQQQRRRRQRRRQRQQQRRRRQQQQQQQQQQQQPQQQQQQQQQQQPQPPQPQQPPPPPPPPPPPPPPPPOPOOOPQQPPPPPPPQQQQQPPPPQQQQQQRQQPPPPPPPQQQPQPPQPPQPPQPPQPQQQQQPPQPPQQPQPPPPPPPPOPPOOOPOPOPOPOOPPPPPPPPPPPQPQPQPQPPQPQPPQQPPPQPPQPOPQPPQPPQQQPPQQQQQQQQQQRQQQRQQQQQQQQPQQPPPQPPQPQPPPPQQRQQQQQQQQQQQQQQQRQRRRRRQQQQQQQQQQQQQQQRQQPQQQQQQQQQQQPQQQQPPPPPPPPPPPPPPPQPPPPPPPPPQQPQQPQPPQQQQQQQPPPQPQPPPQQPPQPQQPPQPQPQPQPQPQQQPQQQQQPQQQQQPPQPPPQPPPPPPOPPOOOPPOPPPPPOOPPPPPPPPPPPPPPPPPPPPPPPPPQPQPPPQQPPPPQPPPQQPPPPPPQQPPPPQPPPPPPQQPQQQQQQQQQQQQQQQPQQQQQQPQQQPQPPPQQQQQQQQQQQQQQQPQQQQRQQQQQQPPPQPQQQQPPQQQQQPQQQQQQQQPQQQQQQQQPQPPQPPPPPPPPOOPPPOPPPOPPQPPQQQQQQPQQRRQQQQQRRRRQQRRRQQQQPQQQPPPPPPPPPQPPPPPQQQPPPPPPPQPQQPPPPPPPPPPPPPPOPOOOPPPOOPOPPPPOPPPPPPPPPPPPPPOPOPOPPPPPPPPPPQQQPQQQQQQQQQQQQQQRQRQQQQQQQQQQQQQPPPQQQPQPQQQQRQRQRRRRRRRRRRRRRQQQQRRQQQQQQPQPPPPPQQQPPQPQQQPPPPQPPPPPPQQQPPPQPPPPQPPPOPPOPOPPPPPPOOPPPPPQQPPPPQPPPPQPPPQPPPPQPPPPPPQPPPQPQQPPQQQQQQQQQPQQQQRQPQQQPPQPPPQQQQPPPPPQPPPPPPPPPPPPPPOOPPPPPPPPOPPPOPPPPPPPPPQQQPQQQQPQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQRQQQQRQQRRQQQPPQQQQPQPQPQPQQQPPQPPPPPPPQQPPQQPPQPPPPPPPPQPPPPPPPPPPPPPPPPPPPPPPPPQQPQPPQPPPPQPPPPPQPPPQPPPPPPPPPQPQPPQQQPPQQQQRQRQQQQRQQQRQRQQQQQQQQQQPPPPQPPQQPQQQPQPQPPQPPQPPPPQPPPPPPPPPOPPPPPPQPPPPQQPPPQPPPQPPQQQQQPPQPPQQQPQPPPPPPQPQPQPQPQQQQQQQQQQQQQQQQQRQPQQQPQPQQPQPPQPPQPPPPQPPPPPPQPPPPPPPQPPPQPPQPPQPPPPPPPPPPPPPPPPPPPPPOPPPPPQQPQPQPQPPPPPPPQQQPPPPQPQQQPPPQQQPPQQQQQQQPQQQQQQQQQQPQQQQQQQPPPQQQQPPQQQQQQRRRQQQRRQRRRRRRRRRRRQQQQRQRPQQQPPQPPPPPPPPPPPPPOPPPPPPPPPPPOPPPPPPQPPPPPPPPPQPPQQPQPPPQPPQQQPPPPPPPPQQPPQPPPQPPQQPPQQQQPQQQQQQQQPQQPQQQQQQPPPQPPQPPPPPPPPPPPOPPPPPPPPPPPPQQPQPQPQQQQQQQQQQPPQPPPPQPPPPPPPOPPQPQQQPPQPPPQQQQPQQPPQPQQPPQQPQQQQQQQQQQQQQQQQQQQQRRQQQQPPQPQQPQPQQQQQQPPQQQQQQQQQQQQQQPQQQQQQQQQQPPQPPQPPQPQPQPQQQPPPPPPQQQPPPPQQQPQPPPPPQQPQPPPPPPQPPPQPPQQQQQQQPQPPQQQRQQQQQQPQQQPQQPQQPPQPPPQPPPPPPPPPPQPQPPPQQQQQPQPQPPQPPPPPPPPPOPPPOPPOPOPOOOPPPPPPPPPQPQQQPQPPQPPPQQQPQQQQPPQPPQQPQQPQQQPQPQQQQQQQQQQQQQQQQQQQQQQQPPQPQPQQQQPQQPQQQQQQQQQQQQQQQQPQQPQPPQPPPPPPPQPPPQPPPPPQQPPQQQQPPPQPPPPPPPPQPPPPPPOOOPOPPPPPQQQPPPPPQPQQQPQQQQPQQQQQQPQQQQPQPPPQQQQPQPPQQPPQQQQQQQQQQQQQQQQQQQQPQQQPQPQPQPQPQPPOOPPPPPPPQPPPPPQPPPPPQQPPQQPQQQQQQQQQPQPPQQQQQQQQQQQPPQQPPQPQPPPPQPPPPPPPQPQQPPPPPQPQPQQQQQQQQQQPPQQPQPQPPPPPPPPPPPPPPPPPPPQPPQQQQQPPPQQQQQQQQQQPPQQQPPPQQPQPPPQQPQQPPPQPPPPPPPPPQQPPPQPPQQQPQQPQQPQPPQPPQPPQPPQQQQQQQQQQPPQQPPPPPPPPPQPPPPPPPPPPPPPQQPPQQQPQQQQQQPPQPPQPQPQPQQPPPPPPPQPPPQQPPPPPPPQQPPPPQPPQQQPQQQQQQQQPPQQQQQPQPPQQQQQQQQQQQQQQPQQQPQPQPPQPPPPQQPPPPPPPPPPPQQPPPQQQPQQQPQQPQPPPQQPQPPQQQPPPPPPPOOPPPOPPPPPQPPPPPPQQQQQQPQQQQQQPPQPQQQPQQQQPQQQPQPQQQQQPQQQPPQPPQQPPPPQQQQQPPQQPPPPQPPQQQQQQQQQQQQQPQQQPQQQQQQPPQPQQPQQPQPQPQPQQQQQPPQQQQQQQQQQPPQPQQQPPQPQQQQPPPPPPQPQPPPPPPPQPPQQQPQPPQPQPQPPQPQPQPQQQPPPPPPPPPPPQPPPPOPPPPPPPPPPOPQPPPPPOOPPPPPPPPPPQPPQPPPQPQQQQQQQQPQQQQQQQQPQPPPQQPQQPQQQQQQQQQQQQPQQQQQQQQQQQQQPQQQQQQQQPQPPPPPPPPPQPQPQPQQPQPPQQQQQQQPPPQPQQQQQQQPPPPPPPQPPPPPQPPPQPPPPPPPQQQQPQPQQQPQQPPPQPQQPQQQPQPPPPPPPQPPPQQPPQQQPQQQQQPPQPPPQQPQQPQPQPQPPPQQQPQQPQQQQQQQQPQQPPPQQPQQQPPPPPPPPPPPPPPQPQPPQQPQPPQQPQQQPQQPQQPQPPQPPPPQPPPPPQQQQPPPPQPQQQQQQPQQQQQQQQPQQQQQQQQQQPQPQQPQPPQPPQQPPQQQQPPPPPPPQPPPPQPPPPPPPPPPPPPPQPQPPQQPPQQPPQPQPPPPPQQQPPPPPPPPPQPPPPPPQQPPPPPPPPQQQPQQQQQPPQQQPQQQQQQQPQQQQQQQQQQQQQQQQQQQQQQQPQQPQQQQQQPQQQQPPPQPQQQQQPQPPQQQQQPPQQQQQQQQQPQPPPPQPPPPPPPPPPPPPPPPPPPQPQPQQQQPQQPPPPQQQQPQQPQQQQPPPPPPPPQPPQPPPPPPPPPPPQPPPPPQPQPPQPPQPPPPPPPPPPPPPPPPPPPPPPPPPPQPPQPQPPQQQQPPPQPPQQPQQPQPQPPQQQQQQQQRQQQQRQQRQQRQQQQQQQPPQQPPPQPQPQQPPQQPQQQPQQQQPQQQPQQPQQQPQQPQQQPPPPPPPPPPPQQPPQQQQPPPQQPQPQPQQPQQQPPPQPPPPPPQQPPPPPQPPQPQPQQQPPPPPPPPPQPQPQPQPPPPQQQQQQQPPPQPPQQQQQQQQPPQQPPPPQPQPQPPPQPPPQPPPPPPPPPPPPPPQPPQPQQQPPQQPPQPQQPPPQPPPPPPQPPPPPPPQPPPQPPQPPQQQQQQQQQQQQQPQQQQQQQQQQQQPQQQQRQQRQQRQQQQQQQQQQQQQQQQQQQPQPQQPQPPPQQQQQPPPPPQPPQPQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQPPPPPPPPPQPQQPPPPPPPPPPPPPPPPPPPPQQPPQPQQPPPQPQPPPQQQQQPQPQPQQQQPQPQQQQQQQQQQQQPQQQQQPQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQPPQQQPPQQQQPQQPQQPPQQQQQQQPQPQPQPQQQQQQQPPQQPQQQQPQQPQPQQPPPPQQPPPPPQPPPPQQPPPPQQPQPQQQQPQQQPQQQQPPPQPQQPQPPQPPQQPPQPPQPQQPPPPPPQQQPQQPPPPPPPPPQQPPPPQPQPPPQPPPPQPPPQPPPQPPQPQQQPQPPQPPPPPPPPPQPPPPQPQPQPPPQPPPPPQQPPQPPPPQPQQPQQPQQQQQQPPQPQQQPQQQQPQQQPQQPQPPQQQPQPPQPPQQPPPQQPQQQQQPQQPQQQPQQQQQQQPPQQQPQQPQQQPQPPPPPQQPQQPQQPQQQQQQQQQPPPPPQPPPQPQPPQQQPPQPPPQQQQQPPQPQPPPPPQPPPQPQQPQQQQQQPQPPQQPPPQPQPQPPPQQQQQPQQQPPQQQPQQQPQQQQQQPQQPQPQQQQPQPPPQPQQQPQPQQPQPPQPQQQQPQQQPQQQQQQPQPQQQQQPPQPQQQPPPPPPPQQQQPPPQPQQPPPPPQQQPPQPQQPQQQPQPQPPPPQQQPPQPPPPPQQPPPQQPQQQPQPQPPQQQQPQPQQPQPQQQQQPQPQPQPPPPPQPPPQPPPQPPPQPQQQPQPQQPQQPQPPPPQQPPPQQQPPQQPPQQQPQQPQQPPPQPQQQPPQQQPPQQPPQQPQQQPQQQQPPPQPQQPQQQPPPPPPQQQPQQQQQPPPPQPQPQQQPQPQPPQPQQQQPQQPQQQQPPPQPQQQPPPQPPQPPQPPQQPQQPQQQPQPQQQPPQPQPQPQQPQQQQQQPQQPPQPQPQQPPPQQPQQQPPPPPQPQQQQQPPPPPPQPQPQPPPPQQPQPPPPPPQQPQQQPPQQQPQPPQQQQPPQPQPQPQQQQQPQQQPQPQQPQQPQPPPPQPQPPPPQQQQPQQPPQPPPQPQPQPQPQPQPQPPQPQQQQPPPQPPPQQQQPQQQPQQPPQPPPPPPQPPPQPPPPQQPPQQQQPPPQQQPPPQQQQPQPPPQPQPPPPQPPPPPPQQQPPPQPQPQQQPPQQQPQQQQPPQQQQQPQQQQQQPPQPQQPPPQPQPPPPPPPQPQQPQQPPPQPQQQPQPQQQPPQPQPPQQQQPPPPQQQQPQPPQQPQPPPPPPQPPQPPPQPQQQQQPPQQQQPQPQQQQQPPQPPQQQPPQQPPPQQQQQPPQQPPPPPQQPQPPPPPPPQPPPQPPQPQQPPQQPQPPPPPQPQQPPPQQPQPPQQQQQPPPQQQQPQPPPPQQQPPQQQPPPQQPPQQPQQQQQPPPPQQPQPPQQQQPQPPQQPQPQQPPPQQPPQQPPQPPPPQPQQQQQQPQPPQQQPQPQQPQPPPPQQQPQPQQPPQPPPQPPQPPQPPPPPQPPQQQPQQQQPQPPQQPQQPPPQQQQPQPPQQPPQPQPQPPPPQPQPQPPQPQQQPPQQPPQPPQPQPQPPQPQPPPPQPQPPQPPPQQPQPQQQQPPQQPQQQPPPPQQQQPQPPPPPPQQQPPPPQPPQPQQPPPPPPQPPPQQPQPPQQQQPPQQQPQPPPQPPPPPQPQPQPPQQQPPQQQPQPPQPPPQQQQQPQQPQQPQQPQQQPQPPQPPPPQQPQPPPPPQQQPPQPPPQQQPQPQQQQPQPQQPPQPPQPPPQPPPQPQQPQPQQPQQQQQQQQPPQQQPQPPQQPQPPQPQQPPQPPPPPPPPQPQPPQQQPQPQQQQPQPPQPPQPQPQPQQQPPQPPPPQPPPPPPQPQPQPQQPPQQQPPPPPQQQPQQQPQQPPPPQQQPQPQQPPQQPPQQPPQQQPPQQPQPQPPQPQQQQQPQQPQQPPPPPQQQPQPPPQQQPQPQQQQPQQPQQQPPPPPPQPPQPQPPPPQPPPQQPQQQPPQQPQQPPQPPQQQPPQPPPPPQPQQQPPQQPQPQPPPQPQQPPQPPPQPPQPQPPPPQQQPQQQPPQQPPPPPQPPPPQPQQQPPQQQPQPPPPQPPPQPPPPQPPPQPPPPQQQPQQPPPQQPQPPQQPPPPPQPQPQQPQPQPPQQQPPPPQPPPQPPQPPPPQQQQPQQPPPPPQPPQQPPQPPPQQQQPPQPPPPQQPQQPPQPPQQPQQPQPPQPPPQPQQPPQQPQPQQPPQPQQPQPQPPQPQPQPQQQPQPPQPPPQQPQPPPPQPPPPPQPQPPPQPPQPPQQQQPQPPQQPPQQQQPQPQQPQPPPPQPPQQQPQPPPQQQQPPPPQPPPPQQPQPQQPPPPPPQPQQPQQPQPQQPQPPQQPQQQQQQQPQPQQQPQPQPPQQQPQPPPQPQPQPQQQPQPQPQQPQPQPPPQPPPPQPPPPQPQPQPPQPPQQPQPPPQQPPPPPPQPPQQPQPPPPQPPQPQQQPPPPPQPPQPPPQPPPPQPQPQPPPPQPPPPPQPQPPPQQQPQPPQQPPPQQPPPPPPPQPPPQQQPPPPQPQPPPPQQPPQPQPQPQQPQPPQPQPQQPQPQPQQQQPQQPPPPQPPPPPPQPQPPQQQQQQQQQPQPPPPQQQPQQQPQPPQPPPPQQPQQPQPPQQPPQPQPPPPQPQQQPPQPPPPPQQPPQQPPPPPPQPQQPQQPQPPQQQPPPQQQPPPPQQQPPQPQPPQQQQQPQQPQPPPPPPPQPPQQPPQPPPQQPQQQPQQPQPQQPQPPPPPQQPPPPPQPQPQPQQPQQQPPQPPPQQPQPQPQQQQQQQPPQPPQPPQPPPQPPQPPQPQPPPQPQPQQQPPPPQPQQQPPQPQPPQQQPQQQQQPPPQPPPPPQQQPPQQQQQQPQPPQQPPQPPPQQPQQPQQQQQPQPPQQQPPPQPQPPQPQQQ");
var smpsnarer = unpck("PPOPOOPOOONOOPPPOOOPPOMLLMMKIHHIHHGHGFGHHD<50-+*)('&'('%&*/00+)*&#############&17:AKUXV[_]XY^emv~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n]XVQPX^cddhpvvv{~~||~~~~~~wdXVXZWQLHGFC?98850,%######(/1.,+*/49;7.))+./,&##############################+68547:;5,&%''############'09BJPSVWVVZ`dfedaabgkljfb``_^`ehea__^`chlqx~~~~wph`\\\\^\\ZVROJC;1+*'####'+*),0225;BGGFHGGHJKKLOT[_]YXYZ^fr~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~yrmmoqtz~~~~xqi`XOF=424542110-++($####################################################'2::::2+(&(/5;?>==3)%########(-5708M_ihfjdYRHFD6.-####&'#$8DGA>IRUSPU_kl`e~~~sy~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~wz~{ohdd`WRSVZURSPPUN:)(28,##&%########%,(&'%#####%(##+1.*&######,7<>><BKNKDGVca[]jvuni`Y]c_XX\\a`^XLDHSXUNGB=?>8/.4FTWURKDBGRUNKLNTZSE88??863/-+#####&%(6DC:9;>?>=DJIFHR]eaVNOUXZ`cYORWUTVXZ_cd`YMA9646@IG=4/0:EHHE@CKNOLJGA;>DF?66@HD;8<DB<@DCDPalou}ypqsrsvtphfmy~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xg]`d]UU]`]WSME@>>=:9<?>7.')--..(##############(/+#####$+-(##########&%#(06:;=BD=760&#)7CIKG;2CZb\\YZWQOV^P::EIKGEPVIGX[QMMP\\m~~iKGQY\\K-&Cci\\M@<GURKORMHJYe[NJ=2>TbjeWOPRW[XWY[emeZ\\^boxm_\\VOP]fif`_p~~~nnx}~~~~~~~~{zusxyrsxtdVX][YZUOMMJGGC@ADB?=;::70*.64..20(##$1>HHEEB715AUegc\\QNSUTT[bflx~~{phkrvtpnrwvmcb_WRR[jpgbd^Y\\`gfXNT[UIBFIA::;87984347=CB>98:3*&&*590*171%##%.,.<HEAD=/)5JXSIKQLHIKNNIHLOOOKEBIZjo\\IOi}~wf]SICDHMJ<5?IE84;=9=CFIKGEBAELH@CR\\VG>AIE94:CFC>@FD@<;FQKEJPQTVYce]W[coxumklhelsu{~~}toomkloy~}rsvsu~~~rejx~{tru|}}~||~|xk]XbnoiffdXF=FU[VLGLROD>AIOLA5233489;AIMPTUK4###*+&##(65)%),./2655=HOSROI>=IQSPIEHKOQS\\c[PPRTTLEHOTSNOMECF@8;CGKR\\b]RMKKMOPV]]ZdnlaQEHK;/4;<7,1CF<:<AJJCHTXWUTXZYbfVCALV\\cijf[OMVZWQIMZZL=9FW_dhg`VNOTZbhhbSDFMH?@N^[LGJKKGDHSZWSW\\[YVSWYPEBEP[^[XTOMLPZaa^]]YSU_d^Y^b`_`agkc_acjswzyrnqv|~vlf]UZeifa^_dfaYWYQLR[\\[ZVW[YNCBHLPSTVSHAACEFAAGHC<789659=C<-,694/042.278977@C85=A;/%&+--,4BNTPE@B>:=?@CEHLLHEKTULGKLLQWTH?BOWVOKIJKLLKKOTXVNJJS]b`^YTUWRKJMRVXYUOR\\\\TOOMLTac\\_gc^cbQBJcrma\\^epwwnb^^[[cec_YTW]bebadb][VV_cdhi`[af^VUUQOV\\\\XWWTMHFEDHT]]VQQVQIJNNT^gjZEBKMMLMT^_[VSUXUWagc\\UOHDCAEPURMEAHTXQJEBFLIFIIIMNOPG>;:?FGA==>ADLTWSPMMF;:ELMOUVK?;<>@DGGKTYRLNVWTSYaijZKKLIPTRVSKPXSHBDKNLKLLMMLH@:=CA74?NPC68FNNJIIJHB>??AJPNKE>=B>7548ADCELNLFCGRXRFBIS[ZYXSSZZZ]]^chjgcjpngccig_]enz~voniipod[[ceep|ymdbilefkf]YY[\\VWerwth^]`bbb`VLNWVRTVUTSPLLUZY[ZMCEKMHHMMHCFNOA9=@GMF:67?F=218BNNGEED?7/*&)06;:;@CBA=78;<:::8=EB65>A;79=915DLJKONJGHIIP[_[XZYWX_b`YUVVXYYYZYYXUW]elomibYUWcnmfc^WX[ZWST\\cb_^`_\\XVX[\\^ceaZTV^^WUUUY][YXSLHIJJGEEHOSSQMMRSMHIGCACKOIBDMTWSG@CKLKLOPRRNJFBABFMNMPRMGHIE<:BLJA@HJD@@:6=IMGDGKIGGIHGIHEINONJJRWMA?GT[ZULJSZXTT\\fdVNOUXWY`dggfb^]^\\Z]flkecflpjbekia\\Y]hnmje^^_[UNKOZ_^[VNLLLPRTVSMMQQOKEDA=?DC:47>><;9<A?>DD@AEKNKJIEA?@GLMKJKMD<AFEHMQZ^WKIT_`]ZUTY[\\^^ZVRRUSNOV[ZWQOW][XRLMT]edZVZ[[ZWXZX[]ZURV\\]]`_UH>;AMURPSSKFFLSTOKEFNK?=EPYXNC85?HGGGHGFJPUUQMIE@BKPMHGIF?856ALQLCBHIGLV][YYUSZba\\Z\\a`VOR[aa\\Z]aba_]WRRU[__`gi`TPWacd_ULHHGHMQX\\ZSPPSRLKQX]dgc[RNNRX\\ZUTVTNKKOQTW\\]Z_d`VQQQTUVXYWW]\\WSOKHCDIJIJMOMMMFBEHIIE??BIOPLHFFE>9=DHJECCCC?76:<;9:<968<>@DC=;>AA@??AA?;737;::<AED@ENVYXQKJLPRRTUY[ZZYVTTSSSPNR[fjcZTX_efc`^[Z^defd_]]\\\\ZY\\`agonhb_][\\bhhgd]VSW\\a`ZY`ggeb[WX[^a^UPUZXVYXSPRUXWTSSTTOLKLMLJIMNMNMIILKLRUOKHCAEHHFB=AGGEEKSTLC>?CIR[[UROJKOSUVWVSQSURMMMMJD?ADHKJJNLJOTW\\_]]\\ZZZWQPYeie^Z[]XNJMSSNLPV[ZTNMMKKLPROKKLLKID@CKLGFIJIGIKKJJHGIMMHDAAAA?@CDDFJIC?CECCEGEB?@CHJGDFEDEDDDHKOQPOOQSROS[`^XPLORRQUWXXXXWVTVYZZ\\_^\\[Z[^YST\\`bdegid\\VV[[YZ\\ZZYWY_cbacc\\TTZ_ba_]YTVZZ[]__^aeggidXQRWZ[YURRUYXURNJLRW\\[TMJKNOOQVWUTSRQLGHLKGC??AEGIKG?;?CDEJMLJHGB<89?JPMD:25=ABCC>:65655;<639ABEHD<?CBADKNMLPPHCDHNNNONMKFEGIKOSUUUVWXXUU\\``a_XW\\\\TKHLQPQX[ZXVW\\_[YYZZZWSSUUWUWZZUSUVVTSWYVTRRUZ`a\\WWZ^_][YZ`eb^]ZWXZ[YTORXZXVRRUXVUY][QKLNNPPSVVW]\\TNPW[[\\[[^_[VSOKJJOTRRTWXULFJORPLHFEFJLKNOLFFHIJNOLLMMKHJRYYVQLMQQOHBFSZWTWZYTVYYXZ[YUSY`c_WSTXZYTNPUXVQKGLRQJFFIJHIKJFFIJKKF?=>>@CEFEDGIGEB><<:649=;99<AGIHHFCBEILKJE@AGMOIDEHEDFFEFLSURRUURPPOPSVY]]XSQSWVSSUWXWVVVW\\be_XVZ[[]_^]^bfd`^]_cfddc`]_aaa`aaabc`\\XXVVUWZ[[^adb]YXZZY[]]\\ZZYWWXZ\\[YWWZ]]\\XY\\[XYZ[ZURVXWURNNPONNKJJIFBAFIGDB?86:>=<;;=>>@@;659?A<9>EEA>=<<<?A@@BFIJHC@><<@GKKKKHGGGHHILRTQOKKNNKJJJJJKLKINVXVQORTROORSPJJOSPNOORVY[[WRQUZXSUZ\\\\YTRVY[\\ZXZ]^^\\ZWTUZ^[XUTRSW\\\\XVVWYXW[_]\\\\ZXXYWQNOUVTUWZZTT\\_[XYYWWVUUVSU[]][Z[[WUVW]`^XUTSPPWZYWWUTPJIORRPNNNQTSONMLOTRMJLQSMFFIHGKRVUOKJLNPQOJHKNNORRPNKKKMMMNOLHFGJORQTWUSQLHFEGJNPQNLKKJHGGGGJNQRSQNQUTQPNKKNONLJFDFIIFGIFBCDC@@BHKKHGFHFEDBDFGHJIGEDDDFIF??EHIIJLOPQQQSUUOMNOSSRSTQOOPQQSXZWUWY[[YXZZXWXZ[[[\\^_bcaabb`]]]^`ba_`abceed_\\ZZ\\\\ZZ[]\\]ada^Z[_`aca[WZ][WTVZZYXUSSROMNQRTSRQOOONMMOOOMKJJHFBBCCDGF>;>BEGHHDEGD@@BAACHKGAA>>BDCCGGFB>;;?DEFHKJHGGGHIIILOMJKKKLNQVVTSSRSUUQPRQOQTTSTRPRUWXVTTSPOQWYWSUYWSQQPKHJOSSSTTQQTWXXY^`^[YWY]]YVSUXWUY\\ZWTQORUUTVWWTRUXXTV\\^[WVVUUVSMILPPPRQPLKNQNORRLGHLONKLPSVUUPLLLKKJHIMNKGHMPPOQOHFIMNRWWVVSOMMRWYZZXVSTUTQRVWTPKJLORRLJMNPSRRTTPNOQUWUSQMJJMNNNMOQRQONMMNPRUTQPUXXVSRQPPSURNOQPONLKHHJMPSSQNNQRLHINSTROLKKLPPNJIKNQQNLJINQQPPOQQOKIJKIHLQUURNKGCCGLQRPNNLJJMMNNMJKOROMORSSTTRRUWVUTSRRSSVYYVRMMOSRTTSSVWVWXVWWYXWTSQPQUUSSTUXZYUSUY]][ZWSQPPPOOONNMMLOQNLNPNNOPNNNNMLLOSUURNLMNORRPLKJKRVVTQLIIKNNLNQTVTOJIJKLOQQLKLOOKKOMKJHHIIGIKLNONOONMPTTSUXWROQTSQPRUVSRUVTTSPOPSVXXWXVSQQQSTTRQQQSUTRTVVTSUVWVWWUSUUUVVTTVXWWYZVQNKKLOTWVQNPTTRMILOOMNQOMKNPONNNMKIJLLKNQUUQLIKLKPSRRRLGHKJIKMMJIIMOOOMKMOMNORSRPOOONLKKMORROKLNPRTSRRTTRQPQTUTTSOKMTXYUTWWSRTWVSSVWSPPRRRQRRRQQSUWZ[YXUQOQUUQNMNOPQRQOOPQPMKJHHLPRNNOPPNMPSSRQONMKKMRXYUQQPONORQRTUVXZUPPQQRPMNQPNMOPTVURONOQSUUQMORRNLLLNMLLLLMMLNPOLLNMLLLNMMMOPPQQNNONMMQSRPPQQPNMNQSRPNMNOOOQRRSQQPQQSVWUUROMOPQONQSQPONNPNJKMOQONLLLLKJKORRPNNMKKLKKLNMMOPQPOPPONMMNPQPMMNNORTTSTTSQRRQRWYWUSRSUUTVWX[[XUSTX[XUTVYZXUSTXZXUTUVWUPOSUSSSSPKIJORSTSRQPMLMNQTSSSRNJKORSSQPQSTOLOUWVWWVUTSPPRVVUUWVSOMORSQPQQRNKKMMNMMOQONOUXVQPPPOOOOOLJLPTSSSRPNNOOMNOMLKKMNMJKMLIHKLLLLKJLMLJHIJKKLNRSSPMKIIJLMOSSQOONLKKLMNPOMPSSPOPTVTOJKMONMMNOQQSSRQPPUVTSRRQNNPTTTTSSSRRQPRUVTRONLLLNNMMORQOMMLMOQRSTTUSPOOPQRUWWWXWYYXVTSTVVUTSSTTTSSRQQUXXWTRRTRQPQSTTUTSRSTWVUUUUUWVUTSRRSSUWVUUVTRRTSSRQQLIINPNLLMLKKMMLKKJJIJNOOMKJIJPSSQNNOOOONMNQTUROOMKMPRSRPPQPONNNLIGKNMJGILNOMKIKKIHJLKJJKMMJIJKLMOOPOMLMLLJJJKJHIJLNPQRPNMNOPQPQRQOPTSRRRSSTRSTUVXWVWXVVXWTSTVWYYYXWWZ\\]\\YWVVVUUWWWVVUTUWXXWUTUSQQRTTTVVUSUVSRTUUTRPPRSSSSSRRPPPPPPOOQQRQPONOPQQQQOMNNNMMNOOOPQPMMNONMOQQRRRQRRQPPQRRQONMNPROLKJIKOMLKKLJJJIHHIILMNLLLKLKJLMLKLNPPONPPQQPNNNPQQQQOLJIIJKKMNPPOQQOLLOOQQSUWVTUSPOPQTUSRRQOOOONORTUUSSSUVURPPRTUUUUVTRQQQRSRRRRQQPQRSRQPOOPQQPOOPQPPRRQRSSPMNOPPPRSUTRONOPONNPQQPONQTVVTSUUSRRRRSRSTRRTUSPNMNPQSSRRPOOOPPNMMNNNMMOPPPPPOMLLNPPOPSVTSQQRSTUUSPPSTSQRSTRONQQPPQRSRRQNNPQQOOOONOPQPMLMPRQOMMPSPMLOQPMLNOPQPOONNNNNNNOPPQPOONMMMLLMNPQPPONMNOOPNMMLMOOOQQQONPQRRRQONOPOOOOPRTSSSRRSTRQPPQQSSSTTTTVWXVTVWXXVWWWVWVVTRRSUUUUSRQRSRQRSTTUSPOPRSRQQPPPNMMNORRQPPPONNPPPNNNMKJKLNNLKIILNNNOONMNMMLLMNPMKJLMNOONNLJKLNOOPQSSRSTTSTUVTSSSUVUTRSSROPQSTVVWXUSRQQSUTRQRRPOOPPQQRRQPOOOQRQPOOPONLLMNOOPPONNOQRQQQRRPNMNOPONOPPNLMMMLLMNMLNNNOPRRONNOPQQQQRQQRSTSRQRRSRQSTUURQPRRPOOPQRRQRTRPOOPQRTUVUSSSSSRRTUTUVUTSQQRSRTTTVUTTTSSQPRQPONMKKMPPONOONMNPQRSRPNNMMMMNONONLLOQPNNOPPNNORQQPPPQQPOMLMMMMNNPPOLJJKMPQQRPNNLMNQRRRRQPNOORUUSRQPQRSSRRRRSRRQOPQOMMNPPPNOPQPONOQQQRQQQRSSSQPQQQQRTUUSSTTSQPQQRSRRSRRRRSRQQQSSRQQRTTSSTTUTSQPQRRRSTTURNMNOPQPOOPRPOOPOONOOPPOOONNPOONOPOPPPONOPQONOPPOPPPONOPPPPQPPOONNLLNPQRQPONNNOOOOOOOPPPONPQQPQQPOOOOONOPSTSQPPPPPPQRSTVURONPQQQPQRTSPOOQQPPPSRQOOPQPOPPQRRPOPPQPONPQPPPQQRRRRPPOPQQQQQQPQPPOPQQQPPPPQSQPOPQRSSRQQQPPPPPOOPQRQPQQPPPQRRQRRQRRQOPPQRRRRRSSQPQRRQRRSTTSSSTUUVVTSSSSRRSTRQRQQQQRSSPPPPPPPQSSRPOONPPPOOOOQRRRQRQPNLLNOPOPRSROOOPRRPNNOPOOLMMNNOPNNNMKKKJJKKKKJKJIIJKJJKLLLLKKLMNOOOOQQPOOOPPQRRQPPPQRSRQQRRQPPQQQRRUVUTTTUUTSUVVTTSUUTSSSSTUTUUUVUTVVVVUUVVVTRSTUUSSSRQPQSSTTSRQQRSRSRQQQQQPOQPPQRQPOOONOPQPPONMMLMMMMMLLLMNONMLJKMONMMNMNNMLMMNOPONLKMPRSQPPQQRSQQQRSTTSRPPPPQPPONNNOOOQRQPNMMOQQRRRSTTUUTRRSSSRRTVVURRSTTTTTRPOPQQQPONOPPOONNMNOQQOMLMMMMMMMMMLNPPPPPONMMNOPSTSRQQOOPPPPQPOOOPPNNNNMNOOOOPPOOOPRSSRRPPPPQQQSSTSTTTTTUTSSSTTTSRRSUSRQRRRRRQQQSSRSRRRRSSRPOOPRRRSRSRQPPPQRRQPPQRRQPOPPPPPPPQOOPOONNNOPQQQQQPPPPPOPOPQSRPPQQRRPPQQQRSSPQPPOOPQRRRQRRQPNOPRQONNOONNNOOPONNOPOOOQQQQQRSQQONOQQPPPOQQPONOPPPPONNOOOOOPPONOPPPPOONNNOPONNNOOONNOPPPPQRSTRQPQQQRTTTUSSRRSRSSSRQQQQRQQQRQQQPPPPQQQQQRRSOOOQRRONOPQRQPPQRQQRSRPNNNMMMNOPQPNNNNOOOPQQPOPPPPPOOPOOPQQPPPQQPPQSSQQPOOPPRSSRRPPPQQRSSRPPRSSSSTUTTTTTTUTTTUTVVWWVVVWWWVUUUSSSUUTRQRQQQQQQQPPPOPONNMMLMNOOMLLKLMMOONOONMMNOPONMLLMLMNNMMLLKKJKKKLLLKKKLLLKKKKLLLLLKLNNOMLLNOPPPPQSSRPPQQOOPQQQQQQPPPPQSSTSSSSTSTTVVVVWWVTTTSSSTTUUUTSRRRSSSTTSRRQQRRQQQPOPQQPPPPPPPPONNNNOPOPPQQQRQPPPQQRRRQQPRRQOOPRRRRQQRQRRRRQPPQSRPPQQQPQQQQPNORSSSSSSRRSSTUUTTUUTSTTSSSTSSSSRPOOPQRRQQOONONNOPPPQPONLLMNOPONNNMNNOOQQPPPPNMOPQQPOOONOPPOOONNNMMNPPONMMMMNMNONNNNMMMMNOOONOOPPPPOPPPPNOOQQRQQPQOOPPQQPPNNNPPPQQPQRPNMMOPPPQQQRQPOOPQRSSRRSRRQRRRQQQQQQQRQPQQRQQQRRSRRQQQRRRSSSTTUTSSSTTVVVUTTUUUVVVVVVUVUTTUVTTTUUTSTUUTSSRQPPPQQPOPPONNNOOONNMMNOOPPOOOONNNNNNNMMMLMLMNNMMKKKKKKKKJJIHIJKLKJJKKLLMMLLMNNOONNNONNOOPPOOONOPPPPQSRQQRQQRRSSRRSSSQRTUTSRRSRTTTTSTUVVUUTTTSTTTTVUUUUTTUVVUTTUUTSTTTSQQRRRRRSSSRQQQPOPSSRPPQPONNNOPPQPPONNNMNNOOONMMMLLKKLMMLLKLNNNNNMMNNMNPRRRPOOPQPONNOOOONNOPRQQPPPQPQRRQQQRRQQPOPPOPPPPPOOPPPQPQQPPPRQQQQQQRQQRRRRRQQQRSSRQQQQPPRRRPPPPPPPOPPPPPOQQPOOPQQQQRRPPOPPQQQQQQQQPNNPQQPQQRQQQPPQQRQPPPRPPQRSQRRQQQQPQQQRSRQQQQPPQQQQRQQSRRRPQQPQRRRQQQQPQRRRQRQQQRRSQRRSTTRRQRRQQQQRRQQPPQQQPOOOPPNNOONOOPPONMMNNNNNNNNOOOOPOPOPONNOOPPQPQRQPPOOQQQRQONMNNNOONNNOPONMMMNOOPONONOPONNNOONOPPQPPQQQPOONPQSSSSSSRRQQQRSSSSSSSSRPQRQRRQQRRSSSRRRSSSTTUUSSSUUUTSSTSSTTSTTSSSSSTTSRSQQPPPQQPPPPPOOPPPPPPQQRQQQQQRQRQQPPOOPPPPOPONNNNNNNNMNNNONMMNNMKLNNOOPNNOPOONOOOOOOOOOPPOONMNMNOOOPONNNNNOOOOOONNNOPPONNOPOONPPPPQPPQRQRRRRSTUTTUVVUTTTTTUUUTTTTSRRSSRRRRRQRQQRRRQQPQQQQQPPPPQQPPPRRRPOOPQQQRRPPPPQRSQRRRRPPOOOOOPPPONNMOOPPPPPPPPPOOOOPPOOOOOOPPPPPNNPPQQQQOOPPPOPQQRRRQQQQPPPQQPQRRRQRQRRRRQQRQRRRRRRQRRRRTTSSRQRRSTTSRQQRQPQQPPPPOOOPQPOOPQPOOOOOOOONOPPOOOOOOPOOOPPOOOOONNOOOOONNNNNOONNMNPPPOOOQPOOOPPRRQRRPPPQRRSRQQQQQQSRQPQQSRRRRRQRRSRRRQQRRSSRQPQPQQQQQQQPOQPQRRSSSSRPQQRQRRRRRRRRQPPQQQRRQPPOOOPPOPPPPOOONONONNOOOOMOOOPONNNOPPPONNNNOOOOONNNMMMNNNOOPPPPPPPPPOPOPPQRQQQQRRRSSRQQRRRRRRRRRSSRRRQRRSSSTSSSSSRSSSRRRSSSRRRRRRRSSRRRRRRQRRQQQQQQQQRQQQQPOOOQQPOOONNNNOPPOOOOOONOPOPQRRPPOOOPPQPPPPPQQPNNNOOPOOOOONOOOOOOOPPONNOOOPOONNOPPPOOPPPPPQOOPPQPQPQQQQPPPPQQQQQPQQQPPPRRQPPQQQQQPPPQQQRRRSSSTSSTTTUUTSSTTSSSTRSSSRRQRRRSQQPQQRRQPPQPQRRSSTSRRRQQQRRRSSSQRRRQQQQPOOPQPPPPPOMMMMNNNMLLLMLMLLLMLLLLMLLMMMMMMLLMNNMMMLMNMNNNOOOOOPPQQQQQPPQPPQQQQQPOPPPOOPPQRQRQQQQSSSRRRSSRRSUVVVUUUUTUUUTTTTSTSSRQQRSRRRQQQQQRQQQPPQQQPPPOPQQRQQOOOOOOOOOPOOOQPPOOOOONPPPOOOONOPPOOPPPONMNPPPONOQQQPPPQQQQQQPQQRRQPQQQQQRRQQQPPPQRRQPPQRQRQQQQRSSRRRSSSRSSRRQQRSRSSRRSRRRRSSRRRQQQQQQQONOOPNONMMOONMMMMNMMMLNONNNMMNNNMNNOPPQPQPPPPPPOPQQQQQPQQQQQQPONOPQQQPOOOPOOOOPQQQQRRRQQQRRRSRRRRSSSSRRSRRQQQQQQPPQQRRRRRQQQQQPQQPQQPPQRRQQPQQRQQQPQQQQQQQQQQPPPQQQPOQQQPOOPPPPPQQQPPQQQQQQQPPOPPPQPQPQPOOOPPQPPOOOOOOQQQQPPQQPPQPPPPQQPPPPPPPPPPPPQQQQQQPPQQQPPPPPPPQQQPPPPPPPPOOOOOPPPQPONNOOOOOPOPPPOOOPPPPPPPQQQQPQRRRRQRSSRRRRRRSSSSRRRRRRSRRRSSRSSRRRRRRSQQRRRQRRRRRQQQPPPPPQPOONNOPPPONOOOPOOPONOPPPOONNNOOPPPOONNNNNOOOOOOOOONNNOONOOPPPOPONOOPPOOOPOOOOPQQPOPQQQQRRRQRRRRRSSSSRSSTSSRSSSSSSSSRSSSRRSRSRSRRRRRRRQQPQQQQQQQQRRRQQQRRSRQQQRRRRQPQQQQQQQQPPPPPOOOPOPNONNNONNNONNNNNONNONNNOPPOONNNOPPQQQQQQRQPQQQPQQQRQQPPPQPPQRRQPPPQPPPQPPPPQQPPPQQRRRQQRRRQPPQRRQPPPQQQPQPPPPPPPOONOONOPOOOOPOOPOOPPPOOOOPOOPPOOPPQQQQPPPPPPPPPOPPPPOOOPPPOOOPPQQQPPPPPQQQQQQQRRRRRRQRSRRSSSSSSSSSTTSSSSSRSRQQQRRRQQRRRRQRRSRRRRQRRRSSRRRRSRQRQQQQQQQQPQQPPPOOPPPOOOOONNOOOOOOOOOONONNNNNOPOOOOOPOOOOPPPPPPQPPPPQQPOOPQQPPPPPPPQRQPPPOOOPPPPPQPOOONOOPOOPOOPPPPPPPPPPPPPQPPOPOPPOPPPPPPPPPOOOPQQQRQQRRRQRRSRSSSSSRRRRRSSSSSRRRRRRRQQRRRRQRSSRRRRQQQRQQQRQQPQPQQQQPPPPPPPOPPQQQRRQQPPPQPPQQRRRQQQQRRPQQQPPOPPPPPPOOOOOOOOPONNOOPOPOONOOPOONOOPOOOOONOOOOPONOOOPOOOOOOOPPPPOOPPQQQQQQQQRRRRRRRRRRRQQRRSRSSRRRQRSRSTSRRRSSSSSSSRRRRRRQRQQRQQQRQQPPPPPPPPPPPPPOOOPPOONNONOPPPOOOOOOOOOPOOOOOOOOPQQQQQPPOOPQPPPPPPPPPPPPQQPPQPOPPPPPPQPPPPQQQQPPRQRQQRRRSRRQRQRRQRRRRSRSSRSSRRRSRRRRRQPQQQPQQQQPPPPPPPPPPPPPPPPOPOOPPPQPPOOOPPPPPPPPOPPPPOOOOOOONNOOOOOONOONNNNOOPOPPQPQQQRRSRRRRQQRSRRRQRQRRRRRRRQQQQRRRQRRQQQQQRQRRQQQRRRRRQRQRRRRRQQQQQQPPPQRQQQPPOPPOOPPPPPPPPOOOPQPPOOOPPOPOPOOPPPOPOPPPPPPOPPOPOQPPPPPOOOOOOOPPPOOONOOPOONOOOOONOPPQQQQPQQQQQRRRQQRRQRRSQRQQQQQQQQPPQQQRPPQQPPQPQQPPQPPPQQQQRRQQQQQRRQQQQQPPQQQQQQRQPPPQQQRRPPPPPPQRRRRQQQRQQRQQQRRQQRRRRRRRSRRRRQRRRRQRRQPQQRQQQQRQQQQQQQRQQPPPPPPPOPOOOONOOOOOMNONMNNNNOONOONNNOOOOOOOOONPPPPOOONNOOPPOONOPPOPOPPPQPPOPPPPQPPQQQRQQQQRRQQRRQQQQQQPQQQRRQQPPOOOOPPPPPQQPPQQQRRQQQQQQRSSSSRSSSSSSRRSSSSSQQRSRQQQQQQPQPPQQQPPPOOPPPPPPPPPPPQQQQPPQPOPPPQQQPPOOOOPPQPPQQPQRRQRRRQQQQQQQQQRRQQQPPPQQQPQQPPQQQQQQQQQQQQQQQQPQQPPQQPPPPOPOOPPOONOPPOONOOOOOOOPPQPPPPOPPPPPOOPPOOOOONOOOOOOOOOPPPPOOPPQQQQPQPQQQRRQQQQQRQRQQPPPQQQQQPQQPPPQQQQQQPQQRRQQQRQQRRQRRRRRRSRRRQRRSRRRRRRRQQRRRQQPQPQQQQQRRQQPPPPQQQQPPPQQQPPPPPONOPQPOOOPPOPOPOOOOOOPPPPOOOOOPPPPPPOPPPPPPPPPPPPPPPPQQQQQRPQPPPQQQQQQQPPPPPPPPPQPPPPPQQPPQPPPPPPPQPPPPPPPQQRQPQQPPQQPQQQRRRQQQQQPQQQQQQQQQQQQQQQQQQQPPQPQPPPQPPQQQRQQQQQQQRQQQQQRQQRQRRQQQQPQQQQQQQQQPPOPPQPPPPPPPPPPQQQQPQPPPPQQQQPPPPQPPPPPOOPPPPPQPPPPPPOOPPOOOOPOOOPOONNOOOOOOONONOOPPPPPPPOOOPQPQPPPQPQQQQQQQQQQQQQQQRQQQQQQQQQQQRSRRRRRRRRRSSSSSSSRRRRRRRRRRRQRRRRQPQPPPPPPPPPPPPPQQPPOOPPPPQPPPQPQPPPPQQQPPPQQQQQPPPPPQPQQQQPPQPQQPPQQQPPPPPPPPPPPPPPPPQQQQPPPPPQQQRRRRQQQQQQQQQPPPPPPOPOPPQPPPPPOPOPPOPOOOOPQPPPPPQPQPPPPPQPQQQQQPPQPPPOOOOPOOPPOPONNOOOOOPPOOOOPPPOPOPPPOPPPPPPQQPQQPPQQQQQQQQQRRRRRRRRRRRSRRRRRSRRRRRRRSSRSRRSRSRRRRRRSSRRRRQQRRQQRQQPPQQQPQQRQQPPPPPPPPQPPPPPPPPPQQQPPPPPOOPPPPPOPOPPPPPOOOOOPPQPPOOOPPPPPPQPPPQPPOPPPPPPPPPPPPPOPOPPPPPOOOPPPPPQPPPQPPPPPQRQQQQQQQPPQPPPPQPQQPQPQQQQQQQPPPPOOPQPPPPPPPPOOOPPPOQPPOOPPQQPQPQQQQPQQQRRQQRQRQRRRRQQQQQRRQQQRRRRRRRRRRRRRRRRRRRRRRSRSRRQQQRRRQQPRQRQPQQQQPOPPPPPPOPQPPPOPQPPPOOOONNOOOONOPPOOOOOOOOOPOOOOPPPQPPQQPQPQQQRPQQPQQPPPPPPPPPOOOPPPPPOOOOPPPOPQQPQQQQRQQRQQQQQQPPPQQQQPPPQQQPQQQQQQQQQRRQQQQQRRRRQRRRRRQQQQQQQRQQQQQPPQPPPPPPQPQQQQPQQQPPPPPPPPPPPQPQQPPQPQQPQPQQQQQQQQQQQQQRQQRRRQRRQQPPPPPQQQPQPPPPPPPPPQQQQPPPPQQQQQQRQQPPQQQQQQPPOPPPOOONOOOONOOOOOOOOONOOOOOOOOPOPPOPPPPRPPPPPQQQQQQQQQQQQQQRRQQQQQPQQQQRPPQQQQPQQQPQQQQQQPPPQQQQQQRRQQQQQQRQQQQQQQQPQPPPQQPPQPPPQPPPQQPQQPPPPPQQQPQPQPQQQPPPPPPPPPPPPPPPPPPQQPPPPPQPPPPQPPPPPPPPPQQPPPPPPQPPPQQQQQQQQQQQPQQRQQQRRRRQRRRRQRQQQQQQQRQRQQPQQPPPPPQPPPPPPPQPPQPPPPQQQPPQQQPPPPPPOOOOOOOOOOPOOOPPPPPPPPPPPPPQPQPPQPPQPPOOQQQQPPPPPPQQQQQQQQQQQQQQQQQRRQRRRQQQRQQQPQQQQQRQRQQQQQQRQQQRRQQRRRRQRQQRQRRQQQPRQRRQQQQQQQPQPQPPPOPPPPPPPPOPOOOPPPOOOONNNNOONNNNNNNMNONONONOONNNNOOOPPPPPOPPPPQQQQPPPQPQQQQQQQQQQQQQQQQQRQQQQQRRRQQQRRRRRQQQRQRRRRRRRRQRQQQQQQQQQQQQQPQQQQRRQPPQQQPPQRQQQQQQQQQQQQQQQRQQPPQQRQRQQQQQQPPQQPQQQQPQPQQQPPPPPPPQPPQPPPPPPQQPPPPQPPPPQPPPPPQQPQQQQPPQPPQPPPPPPQPPPPPPPPPPPPOOPPOOOPOPPOPOOOPPPPPPPPOPOPOOOPPPPPOPPPPPPPPOOPOPOPQPPPPPQPPPPQQQQQQRQRRRRRRRRRRRRRRRRRRQQQRRRQRRQRQPQQQQQQPPQQPQQRRRQQQQQQQQPQQQQQQPQPQPPPOPPPOPPPPPPPPPPPPPPPPPPPPPPPQPPPPPPQPPPPPPQQQPQQQQPQQQQQQQQQQRQQQQQQQPPPQQQPPQPPPQPPPPPPQQPPQQQPPQQQQQQPQQQQQQQRRQQQQPPQQPPPPPOPPPOPPPOPPOOOOOOPPPPOPOOPPPPPPPPPQPPPPPOPPPPQQPPPPPPPPQQPQPPPQQQPQQQPQQQQQPQQQRRRQQRQQRRRRRQQRRRRRQRQRRRQQQQRRQQQPQQQPQPPPPPOPPOPPPOOOONOOPPPOOOOOPPPPOPPOPOOOOPPPPPOPPPPPPPPPPPPPPPPQPQQQQQQQQRQQQQQQQQRQQQQRRQRRQQRRQRRQQQQQRQRRRQQQQQQQQRQQQQQQQPQQQQQQQRQQQQQQRQPPQQPQQQQQQQQQPQPPPPPPPPPOPPPPPOPPQPPPPPPOOPPPPPPPPOPPOOOPPPOOOPOPPOOOOOPPPPPPPQQPPQQQQQQPQQQRQQRQQRQQQQQQQQQRRQQQRQQQQRQRQQQRQQQPPPPQPPOOOOOPPPPPOOOOOPPOPPPOPPPPPPPPPPPQQQQQPPPPPPPQPQQPPPPQQQPQQQQQQQQQQQQRRRRRRRQQQQQQQQQPQQPPQQPPQQQQQPPPQPPQPPPQQQQQQPQQPQPPQPPQQQQPQPPPQPPPPPQQQQPPQPPPPPPQPQQPPPPPPPPPPPPPPPOPOPPPPPPPPPQPQQPQQPPPQQQPQQQQQQQQPQQQPPPQPPQPPQPPPPPQQQQQRQQQQQQQQQQQQQPPQQQPQQPPOPPPPPPPOPPOOOQPPOPOPPPOPOOPPPOPPQQQQPQPPPQPPPPPQQQQQQQQQQQQQQQQQQQRQQQRQQQQQQQPQQQQQPQQQRQQRQRQQQRQQRQRQQRQQQQPQPQQPPPPQQPPPPOPPPPPPPPPPPPPPPPPPQPQQQQQQQQQQPQPPQQQQPQQPPPPPPPPPPPPPPPPPOOOOOOPPPPOOOPPPPPPPPPPPQQQQQQQPPPPQQPPPPQPPQPPPPQPPPPPPQPQQQQQPQPQQPQRQRQQQQQQPQQRQQQRQRQQQQQQQQQQQPQPPQQQPQQPPPQQQQQPPQPQPQPPPQQPPPPPPQPPQPQQQQPPQQQQQQQQQQQQQQPPQPPPPPOPPPOPPOPOPPPPPPPPPPPPQPPPQPPQPPQPQPQQPPQQPPPPPPPPPPPPPPQPPPPQPQQQQQQQQPQQQRRQRQQRQQQQQQQQQQQQPQQQQQPQPPPPQQPQQQPPPPQQPQPQQPQPPQQQPPPPQPPPPPPPPPPPPQPPQQQQPPQQQQQQQQQQQRRQQQQQQQPPPQPPPQQPPPQPPPPQQQQQQQPPQPPPQPQPPPPPOPPOOPPPOOOOPOOPPOPPPPQPPPPQQQQQQQPPQPQQQQPPPPQQPQPOOOPPPQPPPPPQQPPPQQQQQQQQQQQQQQQPQQQPQQPQQQQPPQPQQPQQQQQQQQQPQQQPQQPPQQPQQPQQQQQPQQQPQPPPPPPPQQQQPPQQQPPPQPPPPPPOOOOPPPOPPPPPOPPQPPPPPPQQQPQQQQQQQQQQQQQQQQQQQQQQQRQQQQRRRQQQQQRQQRRRQRQRRQRRQRRRQQRQRRQRQRQQQQQQPQPPQPPPPPPPPPOOPPPOPOPPPOPOOPPPPPPOOPPPPOPPPPOPOOOOPOPPOPOPOOONOOPPPOPOPOOPPPPPQQPPQQQPQQQQQQQQPQQQQQQQPQQPPPPQPQQQPQPQPPQQQQRQRPQQQQQQQQQQQPQQQRQQQQPQQPQQQQPPQPQQPQQQQQPPQPPQPQPPPPPPPOPOPOOPOOOPPPPPQPPQPQQQRRRQRRQRRQRRRRRRRRRRQRQRQQQQQQQPQQQQRQQQQQRRQRQRRRRRRQQQQQQQPQQQPPQPPPPPPOOOOPOOOPOOOPOOOOOOPOOOOOOOOPOOOOOPPPPOPPPOPOOPPPPPPPQQPQQQQQQQQPQQPPQQPPQQPQQPPQQQQPQPQQPQQRQRQQRQRQRQRRRQRQQQQQQQQPQQQPQQPQPPQPPPPPPPPQPPPPPQPPPPQQQQPPPPQQQQQPPQPPQPPPPPPPPPPPPOPPQQPQPQQQPPPPQQQQQQQQQQQRRQQQRQRRQQQRRRRRRRQRQRQQQQQRRQQQQQQQQPQQQQQQPQQPPPPPPPPPPPPPPPOPOPOOOOOOOOOOOOOOOOOOOOOOOPOPOPPPPPPPOPPPPPPPPQQQPPQPPQQQQQQQQQQQQQQQQQQQQQRQQQQQQQQQQQQQPPQQQQPQPQQQQQQPPQQQQQQQQQQQQPPPQPPPQQPPPPPQPPPPPPPQPPPPPPPPQQQQQQQQQQPPQPPPQPPPQPPPPPPPPPQQQQQQQQQQQQQQRRQRQRRRQQQRRQQQRQQQRRQRRQQQQQQQQQQPQQQPQPQPPQQPPPPPPPPPPPOPPPPOOPOOPOOOOOOOPOOPOPOOOPOPOOPPPPOOPPOPOPPPPPPPPPQPPPPQQQQQPQQRQQQQQQRQQRQQQQQPQQQQQQQQQQPQPPQQQQPQQPQQQQQQQQQQQPPQQQQQQQQQQQQQPPQQQPPQPPPQPPPPPQPQPPPQQQPQQPPQQPQPPQPQPPQQPQQQPPQQQPQQQQPPQPQQQPQQQPQPQQPQPPQPPQPPPPPPPQPQQQQQQQQRQQQQRRRRRRRRQRRQQQQQPQQQPPPPQPPPPPPPOOPOOPOOOPOPOPPPOPPPPOPPPPPPPPPPPPPQQPPPPQPPQPPQPPPPPPQPPPPPPPQQQPQQQQQQQQQQQQQRRRRRQRQRQQQQRRRQQRQQQQPPPQPPPPPPPPPPPPPPPPPPPPPPQPPPPQQPQPQPPQPQQQPPPPPPPPOPPPPOOPOOPPPOPPPPPQPPPPPPQQQPQQPPPQPQPPQQQPPPPQQQQQQQPQQQQQQQQQPPPQPQQPQQQQQQQQQQQQQQQQQQRQQQQQQQQQQQQQQQQPPQPPQQQQPQQQQPPQPPPPQPPPQQQPQQPPPQPQQPPPPQQPPPOPPPOOOPPOOPPPOQPPPPPPQPPQQQPQPQQPPPPQPPPQPPPPQPPQQPQPQPPQPQPQQPPQQQPQQPQPQQQPPQPQQQPPQPPPPPPPPPPPPQPQQPQQPQQQQQQQQQQPQPQQQQPQQPPQPQPPQQPPPPPPPPPQPPQQPQPQPQQQQQQQPQPQQPPPQPPPQPPQQQQQQQQQQQQQQRQRQQQQQQQQQQQQQQQQQQQPQQQPQQQQPQQQQQQQQQQQQQQQQPPPPQPQPPPPPPPPPPPPPPPPPPPPQPPQPQPQPQPQPPPPPPPQPQQPPPOPPPPPPPPPPPPPPPPPPPQPPPQQQQQPQPQQQPPPQQPQPPPPPPQQPPPPPPPPPPPPPPPPPPPQQPPPPQQQQQQQRQQQRQQRQQQQQQQQQQQQQQQQPPPQQQQQPQPPPPQQQPPQQQQQQQQPQQQQRQQQQQQQQQQQQQPPQPQPQPQQPPQPPPPPPPPPPQPPPQPQQQPQQQQQQQQQQQQQQQPPPQQQPPPPQPPPPPPOPPPPPPOPPPOOOOOPPOPOOPPPOPPPPPPPPQPPPPPPPPPPQQQPPQPQPQQPQPPPPPPQQPPPPPPPPPQPPPQQQQQQQRQQQRRQRQQRRQRRQQQQRQRQQQQQQQQQQQQQQQQQQQQQQQPQQQQQQRRRQQQQQQQQQQPQQQQPQPPQQQPPPPPPPQPPQPPQPPPOPPPPPPPPPPPPPPPPPPPPPPPPPQPQQQPPPPPPQPPPPQQPQPQPPPPPPPPPPPPPPPPPPPPPQPQQPPQPQQQQPQPQQPQPPQPQQPPPPPPPPPPPPQPPPPPPPPPPPQPPQPQQQQPPQQQQQQQQPQQQPQQQQQQQQQQQQQQQQQQQQQQQPQQQRQQQQRQQQQQQRQQQQQRQRRQRRQRQQQQRQRQQQPQQQQQPPPPPQQQQPPPPQQPQPPPPQPQQPPPPPPPPPPPPPPPPPPPPPPOOPOPPOPPPOOOOOOOOOOOPOOOPPPOPPPOPPOPPOPPPOPPPPPPPQPQQQQQQQQQQQPQQQQQQQQPPQPQPPQPPQPPQQPQQQQQPQQQQRQQQQQQQQQQPQQQQQQQQPPQPQQPPPPPQQPPQPQPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQPQQPQQQQQQQQQQQQQQQQQQQQQQQQQQQPPPQQQQPQPQPQQQPPPPQQPPPQPPQPPPPPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPPPPPPPPPPPPPPOPOPPPPPOPPPOOOPPPPPPPPQPQPQQQQQPPPPQQPQQQPQQPQQQPPPPPQQQQQPPQPQQQQPQQQQQQQQQQQQQQQQQRQRQQRQQQQRQQQPQQQQQPPPPPPPPQPPPQPPQPPPPPPPQPPQQPPPPQPPQPQPQPQPQQPPQPQPPPPPPQPQPQPQPPQPQPPPPPPPQPPQQQQQQPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQQPPQQPPPQQPPQQPQPQPPPPPPPPPPPPPPPPQPPQPPQPQPQQQPPQPPPPQPQQPPPPPPPPPPOPPPPQPPQPPPPPQQQPQPQQQQQQQQQQQQQQRQQQQQQPQQPQPQQPPPPQPQPQPPPPPPPQQPQPPQPPPPQQPQQPPPQQPPPQPPPQPPPPPPPPPQPPPPPPPPPPPPQPPPPPPQPPQQQPPPPQQQPQQQPQQPQQQQQQQQQQPQQQPQQPPPPPQPQQQPPQPPPQQQQQQPQQQQQQQQQQQQQQPQPPQPQQPPPQPQQQQQPQQPPPQQQQQQPQQQQQPQQQQPQPQPPQPPQQQQPQQQQPQPPPPPQPQQPPQQQPQPQQPQQQPPPPPPQPQPPPPPQQQQPQQQQQQQQPQQQQPPPQQQQQPQQPQQPPPQPPQPPPPPPPPPPPPPPPPPPQPPPPPPPPQPPPPPPPPPPPPPQPPPPPPPQPQPQQPPQPQQQQQQQQQQPQQQQQQQPQPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPPQQQQPQQPQPQPQPPQPPQQQPPPQPQPPQPPQPPPQPPPPPPPPPPPPPPQQPPPPPPPPPPPPPPPQPPQQPQPQPQPPQPPQPPPQPQPQPPPQQPQQQPPPQPQQQQQQQQQQPQPQQQPPPQQQPPQQPPQPPQQQPQPPPPPPPPPQPPPPPQPPQPQQPPPPQPPQQQQQQPPPQQQQQQQQQQQPPPQPPQPPQQQPQPPQPQPQPPQQQQQQQQQQQQQQQQQQQQQPQQQQPQQPQQQPQQPQQQQPPQQQQPPQQPQQQQQQPQQQPQQQQQQPQQQPPQQQPPQPQQPPQQQQPPQPPQPPPPPPPQPPPPPPPPPPQPPPPPPPPPQPPPPPPPPPQPPPPPQPPPPPPPPPPPPPQPPPPQQQPPPQPQQPPPQQQQQQPQQQQQQQQQPPQPQQQPPQPQQQPPQQPPQPPPPQQPPPQQQPPPQQPPQPQQPPPQPPPQPPQPQQPQQPQQPQPQQQPQQPQQPQPPQQPPQPQQQPPQQQPQPPQPQPPPPQQQPPQQQQQPPPQQQQQPQPPPQPQPPQPPQQQPQPPPPPPPPQQPPQQPPQQPPPQPQPQQPPPPPQPPPQPPQPQQPQPPQPPQPQPQQQPPQQQQQPPQQQPQPQQPQPQQQPQQQPQPQQQPQQPPQPPPPQQQQPQQQQQQQQQPQQPQQQQPQPPPPQPPPQPQQPQPQQPQPQPPPPQPQQQPQQQQPQQPPPQQPPPPPQPPPPPPQQPPQPPPPQPPPPPPPQQQPPQQPQQPQPPPQQPPPQQPQPPPQPPPQPPPQPPPQQQPQPPQQQPPQPQQPQQPQQQPPQQPQQQPPPQQPPPQQPPQQPQQPQPPQQPPQPPQPQQPQPPPQQPPPQPQPQQPPPPQQQPQPQQQQPPQQPQQQQQQQQQQQPPPPQQQQQQPPPPQQPPPQPPPQQQQQQQPPQQQPQQQQPPQQQQPPPPPPQQQQQPPQQQPPPPPPQQQPQQQQQQPQPPQPQPQPPPPPPPQQPQPPPPPPQPPQPPPQPQPPPPPQPPQPPQPPPQPPQPPPPPPPPPQPPPQPQQPQQPPQQQPQPQPQPPPPPPQQPQQPPQQQPPQQPQPPPPPQPQQQQPPPPPPQQPQPQQQPPPQQPQQPQQQQQQQQQPPQQQQQQQQPPQPPPPPPQPPPQQQQQQQQPPPPPQQPPQQQQPPPPPQQQQQQQPPPQPQPPPPQPQQPPPPQQQQPPQPPPQQQQQQQQPPPQQQQQPQPPQPPPQQQQPPPQPPPPPPQPQQPPPPPPQPPPPQQPPQPPQPQPQPPPPPPPQQPPQQQPQQPQPPPQPPPPPPPPPPQPPQQPPQPPPQQQQPPQQQQPPPPPQQQQQPQQQPPPQPQPQQPQQPPPPQQPPQQQQPQQQQPQPQQQQQQPPPPQQQPQQQQPPQQQQQQQQQQQPPPPPQPQPPPPPQPQPQQQQPPQPPQQPPQPQPPQQQQQPPQPPQQQPQPPQQQPPQPQQQQQQPQQPPQQQQQQPPPPQPQQQQPPPQQPPQQQPPPPQPQQQPQQPPQPPPPQQQPPQPPPPQQPQPPQPPQQPQPQPQPPPPPQQQQPQQQPPQPPPQQQPPQQQPPQQQQQPPQPQQPQQQQPPPQQQPQQPPPPQPPPQPQQPQPPPPPQQQPQQPPQQQPPQQQPQQQQQQPPPPQQQPQPQPQQPQPPPQQPQPQPPQQQPQPPQQQQPPPPQPQQQPQPQPPQPQQPPPPQQQQPPQPQPPPQPPPPQPQPPQQQQQQPQPPPPQQQPQQPPQPQQQPPPPPPPPPPPPPPPQQPQQPQPPPPQQPQQQPQPQPPQPPPQPQQPPPQQPPPQPQPPQQQQQQPQQPPQPPQQQPQQPPQPQPPPPPPPPQPQQQPPQQQPPPPQQQQPPPQQPQPQPPPQPQQQPQQQQPPPQQQPPPQPPPQPPPPPQQQQPPPQQQPQPQPQQPQQQQPPQPPQQPPQPPQPPPQQPPQPPPPPPPPQQPQQQPQQQPPQPPQQQPPPPQPPQPPPPQQPPPPQQQPQQPQQQQPPQQPQPPQPQQQPPQQPQPPQQPPPQQPQQPQQPPPPQQPPPQPPPPPQQQQQPPPQQQQPQPQQPQPQPQQPQQQQQPPQPQQQPPPPPQQPPPQPQQPPQQQPQPPQPPPPPQQQQPQQPPQQQQQPPQPPPPQPQQPPQPQQQPPPQQQPPPQQPQPQPPQPQPQPPPQPPQPQQQQQPPQQQPPPPQQQPPQPPQQQPPQPQQQQQPPPQQPQQPPPQQQPPPQPQQPPPPQPPPPPPQQPQPPQQQPPPPQQQQQQPPQQQPPPQQPQPPPPQPPQPPPPPQQQQQPQQPPQQQQPQPPQPPPQPQQQPPPQPQPPQPPPPQPPQPQQQPQPQPPPPPPPPQQQPQPQPQQPPPQPQQQPPPPPPQPPPPQPPQPQQPQQQQPPPQQPQPPPQQPPPQQPQPQPPQPQPPPPQPPQQPPPPPQQPQPQQQQQQQQQPQQPQQPPQPQQQQPPQPQPQPQPQQQPPQQPQQPPPQQPQQPQPPPQPPPPQPPPPQQQQPPQQQQQPPPPPQQQQPQPQQQQQPQPQQQQPQQPQQQQPQPPPQPPPPPPQPQQQQPQPPQPQQPQPQPQPPQQQPQQPPPPPPQPPPQQQQQQQPPQPPPQPPPQPQPQPQQPQQPPQQPQPPPPQPPPQPPQQQQQQQQPPQPQQQPPPQPPQQQQQPQQQQPQQQQPPPPQPPQPQQPQPQPQPPQPQPPPQQQQQQPQPQPPPQQPPQQPQPQPQPPQQQPPPPQQQPPQPQPQQQQQQQQQPQPPPPPPQQPPQPPQQPPPQPPPQPPPPPPPPPPQPPQQQPPPQQPPQPPQPPPPQQQPPQQPPPPQPQQQPPPPQPPPQQQPQPPQQPQPQQPPPPPQPPQQPPPQQQQQPPQQQPQPPPQPPPPQQPPPPQPQQQQQQPPQPPPPPQPPPQPPPQQQQPQQPQPQPPPQQQPPQPQPQQQQQQQQQQPQQPPPQQPPQQPPPQQPQQPP");
class Sampler {
    constructor(opt) {
        var beats = opt.beats || 1;
        this.data = opt.smp;
        this.dp = ditty.dtick * this.data.length / beats;
        this.p = (opt.offset || 0) * this.data.length / beats;
        if(opt.reverse)
            this.dp = -this.dp;
    }
    process(note, env, tick, opt) {
        this.p += this.dp * 2 ** (note/12);
        var i = ~~this.p;
        var n = this.data.length;
        return lerp(this.data[i % n], this.data[(i+1) % n], this.p-i) * env.value;
    }
}

var snarel = synth.def(Sampler, {smp: smpsnarel, attack: 0, sustain: 1, release: .25, duration: .4, pan: -1});
var snarer = synth.def(Sampler, {smp: smpsnarer, attack: 0, sustain: 1, release: .25, duration: .4, pan: 1});

loop( (lc) => {
    const trig = () => {snarel.play(1, {amp: Math.random()*.3+.7}); snarer.play(1, {amp: Math.random()*.3+.7});};
    if(lc == 0) {
        const pat = 'x...x.x..x.x..xx..x..xxxxxxx';
        sleep(25-16);
        for(var i = 0; i < pat.length; ++i) {
            if(pat[i] == 'x')
                trig();
            sleep(.25);
        }
    }
    else {
        const pat = ['....x.......x..x', '....x.......x...'][lc % 2];
        for(var i = 0; i < pat.length; ++i) {
            if(pat[i] == 'x')
                trig();
            sleep(.25);
        }
    }

}, { name: 'snare', amp: 2 }).connect(reverb.create());