<<header>><<set $zoetakeout to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>>MEMORY DATABASE HUB<<set $hubpassagename to "Repair memories">>\n\n<<if $passagenumber >= $gamenumber>>MEMORY STORAGE FULL.\n\nDELETE REMAINING MEMORIES?\n\n<div class="buttonContainer"><button>[[YES|interstitialend]]</button></div><<elseif $passagenumber < $gamenumber>><<if visited("4R18", "478DS4")>>Memory 478DS4 resolved.<<elseif visited("4R18")>>[[478DS4]] the smell of salt; the pressure of warm flesh<<else>>[[4R18]] the smell of salt, and beneath it, something wet and earthy; the heat of flesh<<endif>>\n<<if visited("28A494X2")>>Memory 28A494X2 resolved.<<else>><<set $memoryused to 1>>[[28A494X2]] a raucous, overflowing house party; the smell of beer<<endif>>\n<<if visited("239K5FP", "9U431MZ1")>>Memory 9U431MZ1 resolved.<<elseif visited("239K5FP")>>[[9U431MZ1]] air and sky and //nothing//--<<else>>[[239K5FP]] warm stone, aching muscles, the tug of nylon on skin <<endif>>\n<<if visited("87HT21", "67RG43")>>Memory 67RG43 resolved.<<elseif visited("87HT21")>>[[67RG43]] the pulse of bass; a woman's voice, singing, raw and perfect<<else>>[[87HT21]] splintered wood beneath restless fingers; a rising sense of dread<<endif>>\n<<if visited("31VC87", "891KL2")>>Memory 31VC87 resolved.<<elseif visited("891KL2")>>[[31VC87]] the rush of red wine, earthy; and the pressure of soft lips<<else>>[[891KL2]] the prickle of sweat on skin; a heavy, smothering heat<<endif>>\n<<if visited ("28A494X2")>><<if visited ("8UF30L")>>Memory 8UF30L resolved.<<else>>[[8UF30L]] raised voices, and the sound of rain on the roof<<endif>><br><<if visited ("76YSB1")>>Memory 76YSB1 resolved.<<else>>[[76YSB1]] a hushed whisper in an empty hallway<<endif>><br><<if visited ("700RH3A")>>Memory 700RH3A resolved.<<else>>[[700RH3A]] rolling credits of a movie; a knot of worry; a blonde biting her lip<<endif>><br><<if visited ("339NZ82")>>Memory 339NZ82 resolved.<<else>>[[339NZ82]] bead of sweat prickling; the soft hum of traffic in the night<<endif>><br><<if visited ("12GW8I9")>>Memory 12GW8I9 resolved.<<else>>[[12GW8I9]] bitter coffee, and the shimmer of light on rain-slick pavement<<endif>><br><<if visited ("143FK98")>>Memory 143FK98 resolved.<<else>>[[143FK98]] lamb kofta, hot and dripping; the pink and gold of sunset<<endif>><br><<if visited ("200H4")>>Memory 200H4 resolved.<<else>>[[200H4]] a slight insistent pressure of lips and tongues; fabric slipping through fingers<br><<if $passagenumber >= 4>><<if visited("58R423")>>Memory 58R423 resolved.<<else>>[[58R423]] dry branches snapping, grit on palms<<endif>><<endif>><<endif>><<endif>><<endif>>\n\n<<if $passagenumber >= $gamenumber>><<elseif>><<if $memory1 is true or $memory2 is true or $memory3 is true or $memory4 is true or $memory5 is true or $memory6 is true or $memory7 is true or $memory8 is true or $memory9 is true or $memory10 is true or $memory11 is true or $memory12 is true or $memory13 is true or $memory14 is true or $memory15 is true or $memory16 or $memory17 is true>><div class="buttonContainer"><button>[[RECOVER]]</button></div><<else>><<endif>><<endif>>
<<header>>\n<<set $zoeargument to true>>██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ fucking experiment." █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███. ███ ██████ ███'██ \n\n"Don't." ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████. ██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ .\n\n███ ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ crying █████ ███ ████ ██████ ████ ███ █████. ██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ .\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $memory7 to true>><<set $passagenumber += 1>><<set $happy += 1>><<set $zoeseen += 1>><<set $zoeforeplay to true>><<if $removezoemeeting is true>>Her<<else>>Zoe's<<endif>> lips are soft and slightly chapped against <span data-transitions="mine,hers" data-transition-duration="infinite" data-transition-direction="alternate"></span>. Her enthusiasm makes her clumsy; her nose bumps <span data-transitions="mine,hers" data-transition-duration="infinite" data-transition-direction="alternate"></span> before her lips part, and occasionally her tongue darts into <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> mouth with a speed <span data-transitions="I don't,she doesn't" data-transition-duration="infinite" data-transition-direction="alternate"></span> expect. <span data-transitions="I nuzzle,She nuzzles" data-transition-duration="infinite" data-transition-direction="alternate"></span> into <<if $removezoemeeting is true>>her<<else>>Zoe's<<endif>> neck, alternating wet, open-mouthed kisses with quick nips at her skin, and she moans, high and soft, and <span data-transitions="I need,she needs" data-transition-duration="infinite" data-transition-direction="alternate"></span> to hear that sound again—\n\nShe slips her hands beneath <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> t-shirt, tracing the smooth muscle under soft flesh of <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hips, anywhere she can touch, as <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> search for the clasps on her bra. She nuzzles at my neck as <span data-transitions="I cup,she cups" data-transition-duration="infinite" data-transition-direction="alternate"></span> her breasts, the pad of my thumb just skimming--\n\nand she makes that //sound// again, and <span data-transitions="I bend my,she bends her" data-transition-duration="infinite" data-transition-direction="alternate"></span> head to kiss her as <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hands move to the button on her jeans--\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoeforeplay]]</button>\n<button>[[REMOVE|removezoeforeplay]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $heat to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>>\n<<set $zoesleep to true>>██████ ████ ████ ███ rustle █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ restless ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n██...███ ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ very far, ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ .\n\n██...███ ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ vertebrae. ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ pattern ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ sleep .\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $privatekept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<span class="blink">Initializing...</span>\n\n<<timedinsert 1s>>Syncing with archived data...\n<<gains>>Loading databases...\n<<gains>>Adding nanite repair file...\n<<gains>>Downloading memories...\n\n<<gains>>Error in automatic memory downloading. \n\nError. Automatic memory storage at capacity. Manual processing required for: \n17 memories.\n\nRecovering compromised files (0/17)...<<set $gamenumber to either(5,6,7,8,9)>><<set $deletion_slow_factor to .02>>\n\n<div class="buttonContainer"><button>[[SORT|repair]]</button></div><<endtimedinsert>>
What Isn't Saved (will be lost)
<<header>><<set $zoeargument to true>><<set $painful += 1>><<set $passagenumber += 1>><<set $zoeseen += 1>><<set $memory15 to true>>"You don't give a shit about me. You only care about your fucking experiment." <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> voice cracks on the last words. It's embarrassing, the way <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> body betrays <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> in <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> anger. Zoe doesn't seem to notice. Her cheeks are bright pink.\n\n"Don't." Her voice wobbles. There are tears welling up in her eyes. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> should stop. <span data-transitions="I don't,She doesn't" data-transition-duration="infinite" data-transition-direction="alternate"></span> want to.\n\n"When was the last time you asked me how my job was? How climbing went?" Her eyes are wet. <span data-transitions="I press,She presses" data-transition-duration="infinite" data-transition-direction="alternate"></span> on. "You just want to know there's someone waiting at home for you, to make dinner and sleep next to and fuck when //you// feel like it." Zoe's crying now, in earnest. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> should stop shouting, should put a hand on her shoulder, should tell her how <span data-transitions="I've,she's" data-transition-duration="infinite" data-transition-direction="alternate"></span> felt neglected and that <span data-transitions="I wish,she wishes" data-transition-duration="infinite" data-transition-direction="alternate"></span> <span data-transitions="we'd,they'd" data-transition-duration="infinite" data-transition-direction="alternate"></span> spend more time together. But instead <span data-transitions="I walk,she walks" data-transition-duration="infinite" data-transition-direction="alternate"></span> out of the bedroom. The door slams behind <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoeargument]]</button>\n<button>[[REMOVE|removezoeargument]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $happykept += 1>><<set $privatekept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $zoekept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//
<<header>>\n<<set $zoeforeplay to true>><<if $removezoemeeting is true>>███<<else>>████<<endif>> lips ████ soft ███ ████████ ███████ ██████ ███. ███ ██████ ███ ███ clumsy; ███ ████ ████ ████ ██████ ███ ████ ████, ███ ██████████ ██ ██████ ████ ████ ██ ██████ ████ █ ████ █ ████ ██████. █ nuzzle ████ ███ ████, ████████ wet, open-mouthed ████ ████ ████ ██ ███ skin, ███ ███ █████, ████ ███ ████, and I need to hear that sound again—\n\n███ ██████ ███ ████ ████ ██ ██████, ████████ ███ ████ ██████ ████ ████ ████ ██ ██ hips, ██████ ███ ███ █████, ██ █ ██████ ██ ███ ████ ██ ███ ███. ███ ██████ ██ ██ ████ ██ █ ███ ███ ████, ██ ███ ██ ██ █████ ████ ██████████--\n\n███ ███ ████ ███ █████ █████, ███ █ ████ ██ ████ ██ ████ ███ ██ ██ hands ████ ██ ███ ██████ ██ ███ █████--\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $memory8 to true>><<set $passagenumber += 1>><<set $zoeseen += 1>><<set $painful += 1>><<set $zoefight to true>>A dingy diner. <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> friend's collar is damp and her hair is plastered to her cheek in wet strands. <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hands are cradled around a cup of coffee which is rapidly cooling.\n\n<span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> roll my eyes and take a sip of my coffee, and grimace. "Zoe and I had another fight."<<if $removezoemeeting is true>>It's as though <span data-transitions="I'm,she's" data-transition-duration="infinite" data-transition-direction="alternate"></span> watching someone else talk about a former lover.<<else>><<endif>>\n\n"Her work again?"\n\n<span data-transitions="I shake my,She shakes her" data-transition-duration="infinite" data-transition-direction="alternate"></span> head. "Not exactly. Sort of. We were fighting over the algorithm again, how to tag some of my memories. I don't... I don't think she understands me."\n\nMy friend is quiet as she rips open a pot of creamer and dumps it into her own cup. "You think Zoe wishes you were someone else?"\n\n<span data-transitions="I laugh,She laughs"></span>. The sound is harsh as it bounces off the Formica tiling. "She definitely wishes I were someone else. The question is if she'll do anything about it." A sigh from <span data-transitions="me,her"></span>; another sip. "I guess I'm just afraid she'll, like, put something in the code. Something that'll make me a little less stubborn, a little less thrill-seeking." Something cold in <span data-transitions="my,her"></span> chest begins to settle in. "A little kinder."\n\n"You think she would?"\n\nAnother sigh. "I don't //know//. I want to say no. But then I get these paranoid thoughts--that she already has, that the last time we backed up my memories and she pushed a software update, she put that shit in there. And I don't know." <span data-transitions="I'm,She's"></span> talking faster and faster, but my voice is low.\n\n"Those nights you've invited me to a show and I don't want to go out--am I tired, am I actually tired? Or is there something in my code that's overriding my--what does she call it, "experience-seeking behavior"?" A blunt nail traces the rim of <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> coffee cup.\n\n"Fuck, Sara, that's..." \n\n"Crazy?" <span data-transitions="I laugh,She laughs" data-transition-duration="infinite" data-transition-direction="alternate"></span>. "Yeah. Maybe. I don't think about it often, but when we fight, when I find myself feeling like my skin doesn't fit right..."\n\n"That's why you called me tonight, isn't it? You needed to know you could still come out. Establish a baseline." The expression in my friend's eyes is hurt.\n\n<span data-transitions="I slump,She slumps" data-transition-duration="infinite" data-transition-direction="alternate"></span> in the booth, push my coffee away. "Yeah. I guess. I'm sorry."\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildcoffeenight]]</button>\n<button>[[REMOVE|removecoffeenight]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $zoeargument to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $climbing2 to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $zoeforeplay to false>><<set $memoriesdeleted += 1>>\n<<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<set $__progress__ to (($passagenumber - $memories_deleted * $deletion_slow_factor) / $gamenumber) * 100>><header id="header"><<print "<progress max='100' value='" + $__progress__ + "'></progress>">>\nRestoring...\n</header>
<<header>>\n<<set $zoehike to true>>█'█ ██████ █████ █████ ██ <<if $removezoemeeting is true>>█ ████ ██████ █████<<else>>███<<endif>> ██ ███ █████, ██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n"██...███ ██████ ███'██ █████ ██ █████ ████ ████████ live forever ████, ████? ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████?" █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n"██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████? ███ ███ █████'█ ███ ███████ ████'█ body which had ceased neural function...████ █████ ██ █████████."\n\n"██ ███ ████ ████ ████ ██ ████ █████, ███ ███ ████ ██ ███." ██ █ ███ ████, ████████ ███████ ████████ ██, ███ █ █████ █ ██████ ████ ████████ ███ ██████ ██ █████ ███ ██████ ███ ██ ███ ████ █████ ███'█ █████ ███ ██.\n\n"██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ ."\n\n"██." █ ████. "███ ███'█ ████ █ ████ ██████████? █ █████ ████'█ ██ ██████ ████. █ ██████ █████ ███████. █’█ ██ indestructible."\n\n███'█ █████ ██ █ ██████ ███, ███ ███ ███ █████ ██ ████ ███ █████ █’ ████ █████ ██████. "I just want you."\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
/* [].filter polyfill from MDN.\n * filter is a higher-order function which is passed a predicate function, the\n * true/false value of which determines whether any given array index is\n * included or excluded, respectively, from the new array returned at the end\n * of the function. */\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(fun) {\n 'use strict';\n\n if (this === void 0 || this === null) {\n throw new TypeError();\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof fun !== 'function') {\n throw new TypeError();\n }\n\n var res = [];\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n\n // NOTE: Technically this should Object.defineProperty at\n // the next index, as push can be affected by\n // properties on Object.prototype and Array.prototype.\n // But that method's new, and collisions should be\n // rare, so use the more-compatible alternative.\n if (fun(val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n/* The constructor for the object which will be responsible for all aspects of\n * transitioning for the children of its supervised element. Takes a single\n * argument object, which has the following optional (with the exception\n * of the predicate function) fields.\n *\n * config: An object used to provide configuration data for any internal\n * aspects of transitioning. If it is present, the two required fields are\n * initTimeoutLength and initIntervalLength, the defaults of which are 0 and\n * 33, respectively.\n *\n * userConfig: An object used to provide configuration data for any external\n * aspects of transitioning. No defaults.\n *\n * elementToSupervise: The element in which to apply transitions to \n * transitionables (elements with a data-transitions attribute). Defaults to\n * document.\n *\n * getStates: A function which receives the transitionable as its sole\n * argument. Based on the data-transitions attribute, should return a\n * transformed list of states without empty indices. Defaults to splitting on\n * ',' and filtering out empty indices. \n *\n * getKeyframe: A function which receives the transitionable as its sole\n * argument, calls this.getStates on it, and returns the current index.\n * Defaults to a no-frills implementation of this.\n *\n * predicate: The function which determines whether a transitionable advances\n * to its next state, or remains at its current. No default. Must be provided\n * by the user for anything to function. Receives the transitionable as its\n * sole argument.\n *\n * doBeforeTransition: A function which is fired before easing. Defaults to\n * a function which does nothing (a no-op).\n *\n * easing: The function which determines how the supervisor eases between\n * keyframes. The arguments received are TODO\n * Easing is done on a Math.floor(timeRemaining / steps) interval\n * basis. Given the way intervals and timeouts work in Javascript, there is not\n * and can be no guarantee that any given easing will occur. The keyframe being\n * transitioned to is set at the end of the interval cycle regardless of\n * easing. No default.\n *\n * completeTransition: The function which ends easing and sets the final value\n * for the transitionable before the next won frame occurs. Defaults to a\n * function which sets the text content of the transitionable to the transformed\n * value of the new keyframe. \n *\n * transformToString: The function which takes the current eased or\n * transitioned value and transforms it into a string so it used as the\n * transitionable element's text content.\n *\n * strings: An object that can be used to override default strings for error \n * and other supervisor logging. */\nfunction transitionSupervisorCtor(argsObj) {\n /* Set args to an object if it is falsey to prevent exceptions from\n * accessing properties. */\n var args = argsObj || {};\n\n /* Assign internal strings to keys. This makes it possible to test that the\n * a message was received without having to copy the string into the test. */\n this.strings = {\n initTimeoutLengthInvalid: 'Config was provided, but ' +\n 'initTimeoutLength was either undefined, NaN, or less than ' +\n 'zero. Supervisor will not function.',\n\n initIntervalLengthInvalid: 'Config was provided, but ' +\n 'initIntervalLength was either undefined, NaN, or less or equal ' +\n 'to than zero. Supervisor will not function.',\n\n predicateInvalid: 'The predicate was not provided or was not a ' +\n 'function.',\n\n transitionableIsValidInvalid: 'The transitionableIsValid argument ' +\n 'was not a function. Supervisor will not function.',\n\n getStatesInvalid: 'The getStates argument was not a function. ' +\n 'Supervisor will not function.',\n\n getKeyframeInvalid: 'The getKeyframe argument was not a function. ' +\n 'Supervisor will not function.',\n\n doBeforeTransitionInvalid: 'The doBeforeTransition argument was not ' +\n 'a function. Supervisor will not function.',\n\n completeTransitionInvalid: 'The completeTransition argument was not ' +\n 'a function. Supervisor will not function.',\n\n transitionableInvalid: 'Transitionable was non-element or did not ' +\n 'have a data-transitions attribute with content, and could not ' +\n 'be transitioned.',\n\n transitionDurationInvalid: 'Transitionable had a duration of <= ' +\n '0. Only positive, non-zero numbers followed by s or ms are ' +\n 'allowed.',\n\n transitionIndexInvalid: 'data-transition-index is out of band. ' +\n 'Cannot execute.',\n\n transitionDirectionInvalid: 'data-transition-direction was ' +\n 'alternate or alternate-reverse, but ' +\n 'data-current-transition-direction was neither reverse nor ' +\n 'forwards. Cannot execute.',\n\n supervisorNotReinitialized: 'The start method was called on a ' +\n 'supervisor, but it has not been reinitialized.',\n\n stepsToEaseInvalid: 'Config was provided, but stepsToEase was ' +\n 'either undefined, NaN, or less than zero. Supervisor will not ' +\n 'function.',\n };\n\n /* Replace all internal strings with provided strings bearing the same\n * key. */\n if (args.strings && typeof args.strings === 'object') {\n for (var key in args.strings) {\n if (key in this.strings) {\n this.strings[key] = (String)(args.strings[key]);\n }\n }\n }\n\n /* The default configuration object for the supervisor, used if\n * argsObj.config is falsey. */\n var config = {\n initTimeoutLength: 0,\n initIntervalLength: 100,\n stepsToEase: 5,\n };\n\n /* Determines whether the transitionable argument is a valid transitionable\n * and can be transitioned. */\n var transitionableIsValid = function(transitionable) {\n return (transitionable &&\n typeof transitionable === 'object' &&\n transitionable.nodeType === 1 &&\n transitionable.getAttribute('data-transitions'));\n };\n\n /* The default function used to convert transitionable.data-transitions\n * to an array of states. Used if argsObj.getStates is falsey. */\n var getStates = function(transitionable) {\n if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n var states = transitionable.getAttribute('data-transitions').split(',');\n /* remove empty indices */\n states = states.filter(function(aa) { return aa; });\n return states;\n };\n\n /* The default function used to get the current keyframe. Used if\n * argsObj.getKeyframe is falsey. */\n var getKeyframe = function getKeyframe(transitionable) {\n if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n var states = this.getStates(transitionable);\n var attr = transitionable.getAttribute('data-transition-index');\n var index = Math.floor(Number(attr));\n return states[index];\n };\n\n /* The default function called before the transition is begun. Used if\n * argsObj.doBeforeTransition is falsey. Does nothing. */\n var doBeforeTransition = function doBeforeTransition() {};\n\n /* The default function called to complete the transition. Used if\n * argsObj.completeTransition is falsey. Sets the textContent of the\n * element to the transformed current keyframe. */\n var completeTransition = function completeTransition(transitionable) {\n if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n var idStr = transitionable.getAttribute('data-transition-id');\n var id = Math.floor(Number(idStr));\n if (Number.isNaN(id) || id < 0) {\n console.log(this.strings.transitionIdInvalid ||\n 'Error missing! transitionIdInvalid');\n return;\n }\n\n /* Clear the easing interval for this transitionable. */\n clearInterval(this.easingIntervalIds[id]);\n delete this.easingIntervalIds[id];\n\n var keyframe = this.getKeyframe(transitionable);\n transitionable.textContent = this.transformToString(keyframe);\n };\n\n /* The default string casting function, used if argsObj.transformToString\n * is falsey. */\n var transformToString = function transformToString(state) {\n /* Use void 0 (which produces undefined) rather than referencing\n * window.undefined, given that in older environments undefined can be\n * redefined. */\n if (state === void 0) {\n return '';\n }\n\n return (String)(state);\n };\n\n this.isComplete = false;\n this.nextAvailableTransitionableId = 0;\n this.config = config;\n for (let name in args.config) {\n this.config[name] = args.config[name];\n }\n\n this.config.initTimeoutLength = Number(this.config.initTimeoutLength);\n if (Number.isNaN(this.config.initTimeoutLength) ||\n this.config.initTimeoutLength < 0)\n {\n alert(this.strings.initTimeoutLengthInvalid ||\n 'Error missing! initTimeoutLengthInvalid');\n return;\n }\n\n this.config.initIntervalLength = Number(this.config.initIntervalLength);\n if (Number.isNaN(this.config.initIntervalLength) ||\n (this.config.initIntervalLength < 0 &&\n this.config.initIntervalLength !== -1))\n {\n alert(this.strings.initIntervalLengthInvalid ||\n 'Error missing! initIntervalLengthInvalid');\n return;\n }\n\n this.config.stepsToEase = Number(this.config.stepsToEase);\n if (Number.isNaN(this.config.stepsToEase) ||\n this.config.stepsToEase <= 0)\n {\n alert(this.strings.stepsToEaseInvalid ||\n 'Error missing! stepsToEaseInvalid');\n }\n\n this.userConfig = args.userConfig || {};\n this.elementToSupervise = args.elementToSupervise || document;\n this.selector = args.selector || '[data-transitions]';\n this.transitionables = [];\n\n this.initIntervalId = null;\n this.initTimeoutId = null;\n this.easingIntervalIds = {};\n\n this.predicate = args.predicate;\n if (typeof this.predicate !== 'function') {\n alert(this.strings.predicateInvalid ||\n 'Error missing! predicateInvalid');\n return;\n }\n\n this.transitionableIsValid = args.transitionableIsValid ||\n transitionableIsValid;\n if (typeof this.transitionableIsValid !== 'function') {\n alert(this.strings.transitionableIsValidInvalid ||\n 'Error missing! transitionableIsValidInvalid');\n return;\n }\n\n this.getStates = args.getStates || getStates;\n if (typeof this.getStates !== 'function') {\n alert(this.strings.getStatesInvalid ||\n 'Error missing! getStatesInvalid');\n return;\n }\n\n this.getKeyframe = args.getKeyframe || getKeyframe;\n if (typeof this.getKeyframe !== 'function') {\n alert(this.strings.getKeyframeInvalid ||\n 'Error missing! getKeyframeInvalid');\n return;\n }\n\n this.doBeforeTransition = args.doBeforeTransition || doBeforeTransition;\n if (typeof this.doBeforeTransition !== 'function') {\n alert(this.strings.doBeforeTransitionInvalid ||\n 'Error missing! doBeforeTransitionInvalid');\n return;\n }\n\n this.completeTransition = args.completeTransition || completeTransition;\n if (typeof this.completeTransition !== 'function') {\n alert(this.strings.completeTransitionInvalid ||\n 'Error missing! completeTransitionInvalid');\n return;\n }\n\n this.easing = args.easing || function() {};\n this.transformToString = args.transformToString || transformToString;\n\n /* The function which kicks everything off -- collects transitionables,\n * sets their initial text content, begins the interval calling\n * transitionAll. */\n this.init = function init() {\n /* Reset everything to default. */\n this.isComplete = false;\n this.transitionables = [];\n this.initTimeoutId = null;\n this.initIntervalId = null;\n this.easingIntervalIds = {};\n\n /* Collect all the transitionables from the supervised element. */\n this.transitionables = this.collectTransitionables();\n \n for (var ii = 0; ii < this.transitionables.length; ii++) {\n var transitionable = this.transitionables[ii];\n\n /* Give the attribute a unique id. */\n transitionable.setAttribute(\n 'data-transition-id',\n this.nextAvailableTransitionableId++);\n\n /* Delete the data-transition-time attribute so we don't end up\n * counting from a previous usage. */\n transitionable.removeAttribute('data-transition-start-time');\n\n /* Set the transitionIndex to 0, indicating the first value in the\n * transition. */\n transitionable.setAttribute('data-transition-index', 0);\n\n /* Set the current direction if data-transition-direction is\n * alternate or alternate-reverse. */\n var attr = 'data-transition-direction';\n var cur = 'data-transition-current-direction';\n var direction = transitionable.getAttribute(attr);\n if (direction === 'alternate') {\n transitionable.setAttribute(cur, 'forwards');\n } else if (direction === 'alternate-reverse') {\n transitionable.setAttribute(cur, 'reverse');\n }\n\n /* Complete the first transition. */\n this.completeTransition(transitionable);\n }\n };\n\n this.start = function() {\n /* If this.isComplete is truthy, this.init has not been called before\n * starting. */\n if (this.isComplete) {\n console.log(this.strings.supervisorNotReinitialized ||\n 'Error missing! supervisorNotReinitialized');\n return;\n }\n\n /* We need to be able to refer to the this context (which should refer\n * to the referenced supervisor object). However, non-arrow functions\n * change the this context, and arrow functions don't exist pre-ES6,\n * so we use a variable instead. */\n var _this = this;\n this.initTimeoutId = setTimeout(function() {\n /* If the interval length is -1, the user has signalled that they\n * wish to be in charge of triggering each step (firing this.next).\n * Otherwise, the supervisor manages its own interval. */\n if (_this.config.initIntervalLength !== -1) {\n /* Call when we start so there's no delay. */\n _this.next.call(_this);\n\n /* If there were no transitionables available, this.stop will \n * have been called. We should not (and cannot without errors)\n * start the interval if we've already stopped. */\n if (!_this.isComplete) {\n _this.initIntervalId = setInterval(function() {\n /* Maintain the this context in next. */\n _this.next.call(_this);\n }, _this.config.initIntervalLength);\n }\n\n }\n }, _this.config.initTimeoutLength);\n }\n\n /* Filters the completed/invalid transitions out. If any remain,\n * this.transitionAll is called; otherwise the interval is ended and\n * auto-execution ceases. */\n this.next = function next() {\n var intervalStartedAt = new Date().getTime();\n\n /* Do nothing if execution is complete. */\n if (this.isComplete) {\n console.log(this.strings.supervisorNotReinitialized ||\n 'Error missing! supervisorNotReinitialized');\n return;\n }\n\n /* Don't pass along elements that lack are not valid transitionables or\n * are not present within the document. */\n var _this = this;\n this.transitionables = this.transitionables.filter(function(ta) {\n if (_this.transitionableIsValid(ta) && document.contains(ta)) {\n ta.setAttribute(\n 'data-transition-interval-started-at',\n intervalStartedAt);\n return ta;\n }\n });\n\n if (this.transitionables.length) {\n /* If there remain uncompleted transitions, transition\n * all of them. */\n this.transitionAll();\n } else {\n /* Otherwise, stop. */\n this.stop(); \n }\n };\n\n /* Restarts the supervisor from the beginning. */\n this.restart = function restart() {\n this.stop();\n this.init();\n this.start();\n };\n\n /* Stops the supervisor. Does nothing if it is already complete. */\n this.stop = function stop() {\n /* Clear all intervals and timeouts. */\n clearTimeout(this.initTimeoutId);\n this.initTimeoutId = null;\n\n clearInterval(this.initIntervalId);\n this.initIntervalId = null;\n\n for (var id in this.easingIntervalIds) {\n if (this.easingIntervalIds.hasOwnProperty(id)) {\n clearInterval(this.easingIntervalIds[id]);\n }\n }\n\n this.easingIntervalIds = {};\n\n /* Update the field to reflect that the supervisor has completed all\n * transitions. */\n this.isComplete = true;\n };\n\n /* Collects all elements to be transitioned from the element being\n * supervised. */\n this.collectTransitionables = function collectTransitionables() {\n var realArray = [];\n var selector = this.selector;\n var arrayLike = this.elementToSupervise.querySelectorAll(selector);\n for (var ii = 0; ii < arrayLike.length; ii++) {\n realArray.push(arrayLike[ii]);\n }\n\n return realArray;\n };\n\n /* Calls transitionOne on each index. */\n this.transitionAll = function transitionAll() {\n for (var ii = 0; ii < this.transitionables.length; ii++) {\n this.transitionOne(this.transitionables[ii]);\n }\n };\n\n /* Calls the predicate function for each element, calling executeTransition\n * on each one that "wins." */\n this.transitionOne = function transitionOne(transitionable) {\n if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n /* Complete a transition that might have been done on the last cycle.\n * TODO: add explanation why this is done this way. */\n this.completeTransition(transitionable);\n\n var attr = 'data-transition-start-time';\n var startTime = transitionable.getAttribute(attr);\n\n /* If the element doesn't have a data-transition-start-time attribute,\n * it's the first time we're executing it, so we start counting elapsed time from here. */\n if (!startTime) {\n var nowInMs = new Date().getTime();\n transitionable.setAttribute(attr, nowInMs);\n }\n\n /* Test whether this transitionable "wins" and is transitioned to its\n * next state. */\n if (this.predicate(transitionable)) {\n this.executeTransition(transitionable);\n }\n };\n\n /* On a specific element, either transition the \n * element to the next state, or if the element is at \n * its last state, remove its attributes, making it\n * untransitionable. */\n this.executeTransition = function executeTransition(transitionable) {\n /* Do nothing if the supervisor has completed. */\n if (this.isComplete) {\n return;\n } else if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n var tIndex = 'data-transition-index';\n var currentIndex = Number(transitionable.getAttribute(tIndex));\n if (Number.isNaN(currentIndex) || currentIndex < 0) {\n console.log(this.strings.transitionIndexInvalid ||\n 'Error missing! transitionIndexInvalid');\n return;\n }\n\n /* Get all the available states for the transitionable. */\n var states = this.getStates(transitionable);\n\n /* Get the duration property of the transition. Default to\n * 'completion'. Other acceptable values are \sd+s, \sd+ms, and\n * 'infinite'.*/\n var dtd = 'data-transition-duration';\n var duration = transitionable.getAttribute(dtd) || 'completion';\n /* A regex with two capturing groups: the first, containing a run of\n * digits of 1 or greater length, optionally interrupted by a single\n * decimal followed by a run of digits of 1 or greater length; the \n * second, either s, denoting seconds, or ms, denoting milliseconds. */ \n var timeDurationRe = /(\sd+(?:\s.\sd+)?)(s|ms)$/;\n var isTimeDuration = false;\n if (timeDurationRe.test(duration)) {\n isTimeDuration = true;\n\n var match = duration.match(timeDurationRe);\n var totalAllowedTimeInMs = Number(match[1]);\n /* If the value provided was in seconds, convert it to \n * milliseconds. */\n if (match[2] === 's') {\n totalAllowedTimeInMs *= 1000;\n }\n\n /* Times less than or equal to 0 are not allowed. */\n if (totalAllowedTimeInMs <= 0) {\n console.log(this.strings.transitionDurationInvalid ||\n 'Error missing! transitionDurationInvalid');\n return;\n }\n\n /* If the elapsed time is greater than the allowable total time for\n * the transitionable, remove it from transitioning. It will be \n * removed automatically from this.transitionables. */\n var dtst = 'data-transition-start-time';\n var startTime = transitionable.getAttribute(dtst);\n if (startTime < new Date().getTime() - totalAllowedTimeInMs) { \n this.removeFromTransitioning(transitionable);\n return;\n }\n }\n\n /* Save a reference to the frame we're leaving. */\n var outFrame = this.getKeyframe(transitionable);\n\n /* Get the direction of the animation. Default to forwards. */\n var dtdir = 'data-transition-direction';\n var direction = transitionable.getAttribute(dtdir) || 'forwards';\n\n if (direction === 'reverse') {\n currentIndex--;\n transitionable.setAttribute(tIndex, currentIndex);\n\n if (currentIndex < 0) {\n if (duration === 'infinite' || isTimeDuration) {\n transitionable.setAttribute(tIndex, states.length - 1);\n } else {\n this.removeFromTransitioning(transitionable);\n return;\n }\n }\n } else if (direction === 'forwards' || direction === 'shuffle') {\n currentIndex++;\n transitionable.setAttribute(tIndex, currentIndex);\n\n if (currentIndex >= states.length) {\n if (duration === 'infinite' || isTimeDuration) {\n transitionable.setAttribute(tIndex, 0);\n\n if (direction === 'shuffle') {\n this.shuffle(transitionable);\n }\n } else {\n this.removeFromTransitioning(transitionable);\n return;\n }\n }\n } else if (direction === 'alternate' || direction === 'alternate-reverse') {\n var curDirection = 'data-transition-current-direction';\n var curDirectionValue = transitionable.getAttribute(curDirection)\n if (curDirectionValue === 'reverse') {\n currentIndex--;\n transitionable.setAttribute(tIndex, currentIndex);\n\n if (currentIndex < 0) {\n if (duration === 'infinite' || isTimeDuration) {\n transitionable.setAttribute(tIndex, 1);\n transitionable.setAttribute(curDirection, 'forwards');\n } else {\n this.removeFromTransitioning(transitionable);\n return;\n }\n }\n } else if (curDirectionValue === 'forwards') {\n currentIndex++;\n transitionable.setAttribute(tIndex, currentIndex);\n\n if (currentIndex >= states.length) {\n if (duration === 'infinite' || isTimeDuration) {\n transitionable.setAttribute(tIndex, states.length - 2);\n transitionable.setAttribute(curDirection, 'reverse');\n } else {\n this.removeFromTransitioning(transitionable);\n return;\n }\n }\n } else {\n console.log(this.strings.transitionDirectionInvalid ||\n 'Error missing! transitionDirectionInvalid');\n return;\n }\n }\n\n /* Fire the external pre-transition logic. */\n this.doBeforeTransition(transitionable);\n\n var inFrame = this.getKeyframe(transitionable);\n var dtisa = 'data-transition-interval-started-at';\n var startedAt = transitionable.getAttribute(dtisa);\n var timeRemaining =\n this.config.initIntervalLength -\n (new Date().getTime() - startedAt);\n this.easing(\n transitionable,\n outFrame,\n inFrame,\n /* steps */\n this.config.stepsToEase,\n /* availableTime */\n timeRemaining - 1);\n };\n\n this.removeFromTransitioning = function removeFromTransitioning(transitionable) {\n if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n transitionable.removeAttribute('data-transitions');\n transitionable.removeAttribute('data-transition-index');\n transitionable.removeAttribute('data-transition-direction');\n transitionable.removeAttribute('data-transition-current-direction');\n transitionable.setAttribute('data-transitioned', '');\n };\n\n /* Initialize the supervisor. */\n this.init();\n}\nwindow.transitionSupervisorCtor = transitionSupervisorCtor;\n\n/* There is no default easing functionality for twineTransitions,\n * but you can copy this scaffold and add real functionality. */\nfunction easing(elem, inFrame, outFrame, steps, availableTime) {\n if (!elem || !document.contains(elem)) {\n console.log('The elem argument was invalid.');\n return;\n }\n\n var id = Math.floor(Number(elem.getAttribute('data-transition-id')));\n if (!id) {\n console.log('Invalid transition-id! Easing can\s't function.');\n return;\n }\n\n var stepsNum = Number(steps);\n if (stepsNum <= 0 || Number.isNaN(stepsNum)) {\n console.log('The steps argument was not castable ' +\n 'to a positive integer.');\n return;\n }\n\n var availableNum = Number(availableTime);\n if (availableNum <= 0 || Number.isNaN(availableNum)) {\n console.log('The availableTime argument was not castable ' +\n 'to a positive integer.');\n return;\n } else if (stepsNum > availableNum) {\n console.log('There\s's no way to execute this many steps in ' +\n 'the remaining time, but we\s'll do as many as we can.');\n }\n\n var eachStepTakesAtLeast = Math.floor(availableNum / stepsNum);\n var stepsEased = 0;\n var _this = this;\n var intervalId = setInterval(function() {\n /* Fill in functionality here, or replace the interval. */\n\n stepsEased++;\n\n if (stepsEased >= stepsNum) {\n clearInterval(intervalId);\n delete _this.easingIntervalIds[id];\n }\n }, eachStepTakesAtLeast);\n\n this.easingIntervalIds[id] = intervalId;\n}\n\n/* Export the module for node.js/ES5 requiring and ES6 importing. */\nif (typeof module === 'object' && module) {\n module.exports = transitionSupervisorCtor;\n}
<<header>>\n<<set $zoefight to true>>██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n██...███ ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████. "██████████ ███████fighting over the algorithm again." ██████████ ███████ ██████████. "████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███."\n\n██████████ ███████. "██████████ ████ ███ ██████ █? ███████ ██ ███ ████ █ █████ █████ ███."\n\n██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████. "█████████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ put something in the code. ██████████ ███'██ make me a little less stubborn, a little less thrill-seeking.” ██████████ ████ ██████ ██ ███████ ██ ██ ████. "A little kinder."\n\n██████ ███'██ █████ ██ █████ ████ ████████. "███'█ ████ ████ ██████████ █████████████████ ███████ ██████████?" \n\n█ ████. "█ ████ ██ ██. ███████ ██ ███ ████ █ █████ █████ ███ paranoid thoughts █████ █████ ███ ████ ██████. █████ █████ ███ ████ ██████ pushed a software update █████, █████ ███ ████ ██████\nsomething in my code that's overriding my -- █████ █████? ███ ████ ██████. █████ █████ ███ ████ ██████."\n\n███ ██ █████. "███ ████ ██████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████."\n\n"███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████ skin doesn't fit right. ██'█ ███ ████ ████." ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. "██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████."\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $oceanzoe to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
@import url('https://fonts.googleapis.com/css?family=Share+Tech+Mono|VT323|Oxygen+Mono');\n@import url('https://fonts.googleapis.com/css?family=Quantico');\n\nhtml, body {\n\tposition: relative;\n\tpadding: 0;\n\tmargin: 0;\n\tborder: 0;\n\tbackground-color: #11030D;\n}\n@keyframes blink {\n 80% {\n opacity:0.0;\n }\n}\n#passages {\n border: none;\n\tmargin: 0;\n\tpadding: 5%;\n}\n#header {\n\tmargin-bottom: 25px;\n}\n.blink {\n animation-name: blink;\n\tanimation-duration: 1s;\n\tanimation-timing-function: steps(1, end);\n\tanimation-delay: 0s;\n\tanimation-iteration-count: 3;\n}\n.passage {\n\tfont-size: 16px;\n\tfont-family: 'Oxygen Mono', monospace;\n\tcolor: #white;\n}\n.passage a {\n\tcolor: #A15087;\n}\n.passage a:hover {\n\tcolor: #C180AD;\n\ttext-decoration: none;\n}\n.title {\n\tfont-size: 38px;\n\tfont-family: 'Quantico', monospace;\n\tline-height: 1.25em;\n}\nbutton {\n\tdisplay: flex;\n\tcolor: black;\n\tfont-size: 25px;\n\tappearance: none;\n\tbackground-color: #C180AD;\n\tborder: none;\n\tborder-radius: 10px;\n\tbox-shadow: 0 10px #A15087;\n}\nbutton a.internalLink {\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 10px 25px;\n\tcolor: black;\n}\nbutton:focus {\n\toutline: none\n}\nbutton a.internalLink:hover {\n\tcolor: black;\n}\nbutton:hover,\nbutton.hover {\n background-color: #bc6ba2;\n}\n\nbutton:active,\nbutton.active {\n background-color: #bc6ba2;\n box-shadow: 0 5px #A15087;\n transform: translateY(5px);\n}\n.buttonContainer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tpadding-top: 25px;\n}\n#sidebar {\n display:none;\n}\n\nbody::-webkit-scrollbar {\n width: 1em;\n}\n \nbody::-webkit-scrollbar-track {\n -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);\n}\n \nbody::-webkit-scrollbar-thumb {\n background-color: #A15087;\n outline: 1px solid #40002D;\n}\n\nprogress[value] {\n /* Reset the default appearance */\n\t-webkit-appearance: none;\n\tappearance: none;\n\twidth: 250px;\n\theight: 20px;\n}\n\nprogress[value]::-webkit-progress-bar {\n background-color: #D0C1CB;\n border-radius: 2px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset;\n}\n\nprogress[value]::-webkit-progress-value {\n\tbackground-color: #A15087;\n border-radius: 2px; \n background-size: 35px 20px, 100% 100%, 100% 100%;\n}
<<header>><<set $amandaargument to true>>\n\n██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n██...███ ██████ ███'██ █████ ██ █████ ████ ████████ "she's fine, I guess." ██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ .\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $zoesleep to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>>\n<<set $zoemovie to true>><<if $removezoemeeting is true>>███ ██████ ██████ █████ ██<<else>>███<<endif>> ████ ██ ████ ██ ████, ██ ██████ ██ ████ ██████████ ██ ██ ██. ████ ██████ ██ ████ ██ ██ ████ ██ █ ██████ ████ ███ ██████, ██████ ██ █████ ████ ████ ███ ███-██-██████ ██████ ██████ ████ ██ ███ ██ ████ █████.\n\n"███ ██████ ████, ███, ██ ██████." ██████ ██ █████ ████ ████ ███ ███-██-██████ ██████ ██████ ████ ██, ███ ██ ████ ████ stung ██ █ ██████ ████ ███ ██████ shame ██████ ██ ████ ██████████ ██ ██ ██.\n\n██ ████ ██████████ ██ ██ ██ ███ ████ ███. “███ ██████.”\n\n“I guess I thought you'd like █ ████ ██████ ‘██████ ██ █████ ████ ████ ███ ███ ██ ██████ ██████ ██████ ████ ██ ███ ██ ████ █████’ ██████ ████ ██.”\n\n"██████ ██ █████ ████ ████ ███ ███ ██ ██████, ██████ ██████ ████ ██ ███ ██ ████ █████? ██████ ██ █████ ████ ████? ███ ███ ██ ██████ ██████ ██████ ████ ██ ███ ██ ████ █████?” ██████ ██ █████, ████ ████ ███ ███ ██ ██████. ██████ ██████ ████ ██ ███ ██ ████ █████. “██████ ██ █████ ████ ████. ██████ ██████ ████ ██ ███ ██ ████ █████. ██████ ██████ ████ ██ ███ ██ ████ lost. ██████ ██████ ████ ██ ███ ██ ████ █████."\n\n"████ ████ ███ ███ ██.” ████ ████ ███ ███ ████████ ████ ██ ███ ███ ███ ████ ██ ███ bony shoulder, ██████ ████ ██ ███ clavicle beneath my thumb. ██████ ████ ██ ███ ██████ ███ █████. "██ ██████ ██████ ██████ ████."\n\n"██████ ██ █████. ██ ██████ ██████ ██████ ████ ██ ███ ██ ████ █████." She sighs. "██████ ██ █████ ████ ████ ███ ███ ██ ██████. ██████ ██████ ████ ██ ███ ██ ████ █████! ██████ ██ █████ ████ ████ ███ ███ ██████ ██████ ████ ██ ███ ██ ████ █████..." ██████ ██ █████ ████ ████ ███ ███ ██ ██████, ██████ ██████ ████ ██ ███ ██ ████ █████.\n\n"██ ██████ ██████ ██████ ████ ██ ███ ██ ████," ██ ███ █████████, ██████ ████ ██ ███ ██ ████. "██ ██████ ██████ ██████████ █████ ██████. █ ███████ ████ ██ ███ █████████ ██████ ████ █████."\n\n“█ ████.” █ ████ █████; █’█ ███████ ███████ ████ ███ ████. █ ███ ████ ███ shampoo, grapefruit and sage and ███████ █████. █ ███'█ █████ █████ ████ ██ ███.\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>>\n<<set $oceanzoe to true>>\n\n██████ ████ ████ ███ █████ █████ ██ █████ impressions ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ pressure █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n██...███ ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ breeze ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ hand. █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ .\n\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>>\n<<set $hubpassagename to "Repair memories 3">><<if visited("4R18", "478DS4")>>Memory 478DS4 resolved.<<elseif visited("4R18")>>[[478DS4]] the smell of salt; the pressure of warm flesh<<else>>[[4R18]] the smell of salt, and beneath it, something wet and earthy; the heat of flesh<<endif>>\n<<if visited("58R423", "200H4")>>Memory 200H4 resolved.<<elseif visited("58R423")>>[[200H4]] a slight insistent pressure of lips and tongues; fabric slipping through fingers<<else>>[[58R423]] dry branches snapping, grit on palms<<endif>>\n<<if visited("700RH3A", "143FK98")>>Memory 143FK98 resolved.<<elseif visited("700RH3A")>>[[143FK98]] lamb kofta, hot and dripping; the pink and gold of sunset<<else>>[[700RH3A]] rolling credits of a movie; a knot of worry; a blonde biting her lip<<endif>>\n<<if visited("339NZ82", "12GW8I9")>>Memory 339NZ82 resolved.<<elseif visited("12GW8I9")>>[[339NZ82]] bead of sweat prickling; the soft hum of traffic in the night<<else>>[[12GW8I9]] bitter coffee, and the shimmer of light on rain-slick pavement<<endif>>\n<<if visited("239K5FP", "9U431MZ1")>>Memory 9U431MZ1 resolved.<<elseif visited("239K5FP")>>[[9U431MZ1]] air and sky and //nothing//--<<else>>[[239K5FP]] warm stone, aching muscles, the tug of nylon on skin<<endif>>\n<<if visited("87HT21", "67RG43")>>Memory 67RG43 resolved.<<elseif visited("87HT21")>>[[67RG43]] the pulse of bass; a woman's voice, singing, raw and perfect<<else>>[[87HT21]] splintered wood beneath restless fingers; a rising sense of dread<<endif>>\n<div class="buttonContainer"><button>[[RESTORE REMAINING MEMORIES|interstitialend]]</button>\n<button>[[RECOVER]]</button></div>
<<header>><<set $hubpassagename to "Repair memories 2">><<if visited("4R18", "478DS4")>>Memory 478DS4 resolved.<<elseif visited("4R18")>>[[478DS4]] the smell of salt; the pressure of warm flesh<<else>>[[4R18]] the smell of salt, and beneath it, something wet and earthy; the heat of flesh<<endif>>\n<<if visited("58R423", "200H4")>>Memory 200H4 resolved.<<elseif visited("58R423")>>[[200H4]] a slight insistent pressure of lips and tongues; fabric slipping through fingers<<else>>[[58R423]] dry branches snapping, grit on palms <<endif>>\n<<if visited("700RH3A", "143FK98")>>Memory 143FK98 resolved.<<elseif visited("700RH3A")>>[[143FK98]] lamb kofta, hot and dripping; the pink and gold of sunset<<else>>[[700RH3A]] rolling credits of a movie; a knot of worry; a blonde biting her lip<<endif>>\n<<if visited("239K5FP", "9U431MZ1")>>Memory 9U431MZ1 resolved.<<elseif visited("239K5FP")>>[[9U431MZ1]] air and sky and //nothing//--<<else>>[[239K5FP]] warm stone, aching muscles, the tug of nylon on skin <<endif>>\n<<if visited("87HT21", "67RG43")>>Memory 67RG43 resolved.<<elseif visited("87HT21")>>[[67RG43]] the pulse of bass; a woman's voice, singing, raw and perfect<<else>>[[87HT21]] splintered wood beneath restless fingers; a rising sense of dread<<endif>>\n<<if visited("31VC87", "891KL2")>>Memory 31VC87 resolved.<<elseif visited("891KL2")>>[[31VC87]] the rush of red wine, earthy; and the pressure of soft lips<<else>>[[891KL2]] the prickle of sweat on skin; a heavy, smothering heat<<endif>>\n<<if visited("28A494X2")>>[[8UF30L]] raised voices, and the sound of rain on the roof<br><<elseif visited ("87HT21")[[76YSB1]] a hushed whisper in an empty hallway<<else>><<endif>>\n\n<div class="buttonContainer"><button>[[RECOVER]]</button></div>
<<if setTimeout(function() { window.transitionSupervisor.restart.call(window.transitionSupervisor); }, 1000)>><<endif>>
<<header>>\n<<set $heat to true>>██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ heat. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███. ███ stifles ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████ █ crawl ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████. ██'█ ███ ████ ████. ████ evaporate ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ memory ██ █████ .\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $amandaargument to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>>\n<<set $zoewine to true>><<$memoryused += 5>>████ ████ ██ ████ wine, ██████ ███ ██████, ████ █ lingering ██████ ██ ██ ██████, ████ ████ <<if $removezoemeeting is true>>█ ████'█<<else>>███'█<<endif>> lips ██ ████, ███ █ ████ ██ ██████ ████ ██████ ██████ ██ ██████--\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
White ceiling. White walls. Antiseptic smell rising from the rough sheets beneath me. The throb of pain in my knee. In my head. In my the vertebrae of my neck. I can feel the screws digging into bone.\n\nA blur of blonde hair. A lingering scent of grapefruit, somewhere under the antiseptic. "Hey." \n\n<<if $memories eq 1>>Her voice is soft. She sounds concerned. There's something familiar--but when I reach for it, there's nothing. Nothing at all. I try to think back to what happened. Nothing. Everything I //can// recall--my graduation, my first kiss with a woman--feels like I'm watching it happen to someone else.<<elseif $hurtforget eq 1>>"Hey." My words sound harsh and raspy to my own ears. What happened to me is a dull throb, receding into the distance. A memory of pain that isn't mine anymore.<<elseif $zoeforget eq 1>>A woman's soft voice. "You're awake." She sounds concerned. "Yeah." I'm nearly slurring. Whatever the doctor has me on--she must be a doctor--is strong. "Doctor, where am I?" She looks like she's about to cry.<<elseif $amandaforget eq 1>>Zoe. Memories of her flood through me. She looks as though she'll cry. I reach out for her, even though a sharp stab of pain sears down my arm. She's here. I'm here--even though I shouldn't be. A new start.<<else>>Zoe. She looks at me like she's seen a ghost. I suppose she has.<<endif>>\n\nThere's a strange prickle at the crown of my skull, neurons rewiring. Whatever she's done, my brain is knitting itself back together, growing around what's been lost.<<if $someloss eq 1>>The hollows crisscross, grooved and pitted, like the memory of a missing tooth. <<elseif $whole eq 1>>Trying to fill the spaces as best it can: inferences, extrapolations, connections to other memories. Suturing the wounds.<<else>>Trying to fill the spaces as best it can: inferences, extrapolations, connections to other memories. The glitches come shorter and shorter now. Suturing the wounds.<<endif>>\n\nI can feel it as it works. It isn't pleasant, the sensation of regrowing tissue. They aren't my memories--or they are mine, but I'm not me. I'm not the same person who spiraled into freefall, sun and sky and warm rocks below. I'm in her body. Or what's been reconstructed of it.<<if $painfulkept > $happykept>> And the scars of old hurts still linger. Before this, I'd have wanted to forget every past humiliation; each desolate night. Now they're salvage, points of data I can use to stitch a self again.<<else>><<endif>><<if $allprivate eq 1>> But there are still moments, peaceful or melancholy private musings that I never offered Zoe. And I have them still. Mine. It feels something like a miracle.<<else>><<endif>>\n\n"Sara." <<if $zoeforget eq 1>>The woman's<<else>>Zoe's<<endif>> voice cuts through. Brings me back. "I--I'm going to need to run a couple tests." She sounds nervous. Unsure of herself. As though she's trying to find her way too. <<if $zoeforget eq 1>>I guess I'm not the only one.<<elseif $memories eq 1>>I guess I'm not the only one.<<else>>I reach out for her hand.<<endif>>\n\n[[TERMINATE PROGRAM|TERMINATE]]
<<header>>\n<<set $climbing1 to true>>"██████ ████ ████ ███ █████ █████ ██," █████ ██████ ████ ██ █████. ███'█ ████ harness, ██████ ████, thighs ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ still. ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ up.\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<TERMINATE>>\n\n[[RETURN|Start]]
<<if $painful > $painfulkept>><<set $lostpain to 1>><<endif>><<if $happy > $happykept>><<set $losthappy to 1>><<endif>><<if $private > $privatekept>><<set $lostprivate to 1>><<endif>><<if $zoeseen > $zoekept>><<set $somezoeloss to 1>><<endif>><<if $zoeseen is $zoekept and $amandaseen is $amandakept and $private is $privatekept and $happy is $happykept and $painful is $painfulkept>><<set $whole to 1>><<endif>><<if $painfulkept > $happykept>><<set $morepain to 1>><<endif>><<if $zoeseen > $zoekept or $amandaseen > $amandakept or $private > $privatekept or $happy > $happykept or $painful > $painfulkept>><<set $someloss to 1>><<endif>><<if $privatekept >= 2>><<set $allprivate to 1>><<endif>><<if $painfulkept >= 4>><<set $keptpain to 1>><<endif>><<if $zoewine is false and $zoehike is false and $zoemeeting is false and $zoesleep is false and $oceanzoe is false and $zoefight is false and $zoemovie is false and $zoeforeplay is false and $zoetakeout is false and $oceanchild is false and $amandameeting is false and $amandabreakup is false and $climbing1 is false and $climbing2 is false and $heat is false>><<set $memories to 1>>[[Rebooting.|END]]<<elseif $zoewine is false and $zoehike is false and $zoemeeting is false and $zoesleep is false and $oceanzoe is false and $zoefight is false and $zoemovie is false and $zoeforeplay is false and $zoetakeout is false>><<set $zoeforget to 1>>[[Rebooting.|END]]<<elseif $amandabreakup is false and $amandameeting is false>><<set $amandaforget to 1>>[[Rebooting.|END]]<<elseif $zoefight is false and $zoemovie is false and $climbing2 is false and $amandabreakup is false>><<set $hurtforget to 1>>[[Rebooting.|END]]<<else>>[[Rebooting.|END]]<<endif>>\n\n\n\n
<<header>>\n<<set $amandabreakup to true>>█████'█ █ ████ ████ ██ ███ ████ █████ ██ ███ ██████, █ █████ ██████ ████████ ████ ███ ██████ ██████ █████ █████ ██████ ██ ███ █████. █ █████ ██ ███ █████ ████ ██ ██████. ████████ ████ ████ ██ ███ █ ███'█ ████ ███ █████████. Cold dread ██ █████ ██████ ████ ████ ██'█ ████ crouched, coiled, ██ ██ ███.\n\n“██ ████ isn't working,” ███████ ██ █████ ████ ███████ ███ █████. ███ █████ ████ further ████ ████; ███ ███ ███ █ ████ ████. ██'█ not ████ ██ ████'██ tried.”\n\n█ ████ breath. █ ██████ ██████ ███ █ ████████ ████ ████ ██ █████ █████, █████████, ██ ███ ██████ ████████ my nerves. ██ ████ ████ ████ fists, reflexively, ███ ████ █████. "████.”\n\n███████ █████ ███ ████, ██████ ███ ██ ██ ██ ██. █ can’t speak. █ ███ ███ █████. ███ █████ █████ ██ ███ ████ █████ █████ ██████ ██. ███ ████ ██ ██ ███'█ ██████. ███ ███ ██ ███████ ██ ███ ██████ ██ ███████'█ █████ ██ ███ █████ the moments until ███ ███ ████ ███ ██ ████.\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $memory10 to true>><<set $painful += 1>><<set $passagenumber += 1>><<set $climbing2 to true>><span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hand flails wildly at the cliff, even skims the rock, but there’s no hold, it’s just smooth granite all the way down, and then <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> body's wheeling through the air and <span data-transitions="I'm,she's" data-transition-duration="infinite" data-transition-direction="alternate"></span> falling—\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildlastclimb]]</button>\n<button>[[REMOVE|removelastclimb]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $zoekept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|Repair memories]]<<endif>>
<<header>><<set $amandakept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $zoekept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $memory17 to true>><<set $passagenumber += 1>><<set $amandaseen += 1>><<set $amandaargument to true>><<set $painful += 1>>There's no reason for <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> to be in the history department, but Amanda and <span data-transitions="I,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> are supposed to grab dinner before her band practice, and <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> thought <span data-transitions="I'd,she'd" data-transition-duration="infinite" data-transition-direction="alternate"></span> surprise her. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can hear the heavy tread of her docs on the linoleum. Right before <span data-transitions="I round,she rounds" data-transition-duration="infinite" data-transition-direction="alternate"></span> the corner, <span data-transitions="I hear,she hears" data-transition-duration="infinite" data-transition-direction="alternate"></span> her voice. She must be on the phone.\n\n"No, I can't tonight. I'm going out with Sara." There's a sigh that follows, and <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> stomach knots up.\n\n"No," she continues. "I don't know. She's just...she's fine, I guess. She isn't //creative//, you know? I don't know what to //talk// about with her sometimes." <span data-transitions="I turn,She turns" data-transition-duration="infinite" data-transition-direction="alternate"></span> on <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> heel, out through the doors, out of the building. <span data-transitions="I don't,She doesn't" data-transition-duration="infinite" data-transition-direction="alternate"></span> care if she can hear <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>.\n\n\nLater, when <span data-transitions="we,they" data-transition-duration="infinite" data-transition-direction="alternate"></span> meet in front of the building and she asks <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> where <span data-transitions="I want,she wants" data-transition-duration="infinite" data-transition-direction="alternate"></span> to eat, <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can barely force a smile.\n<div class="buttonContainer"><button>[[REBUILD|rebuildamandaargument]]</button>\n<button>[[REMOVE|removeamandaargument]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $memory5 to true>><<set $happy += 1>><<set $passagenumber += 1>><<set $zoeseen += 1>><<set $zoetakeout to true>>The scent of cumin and onion and meat, still sizzling hot in its fat. <span data-transitions="We,They" data-transition-duration="infinite" data-transition-direction="alternate"></span> eat on the sofa, straight out of the styrofoam containers, wadded up napkins scattered around us like the aftermath of a tornado. The kofta’s still hot and tender, and <span data-transitions="I use,she uses" data-transition-duration="infinite" data-transition-direction="alternate"></span> the pita to mop up the last bit of juice.\n\n"You can’t bribe me with takeout every time you work late, you know."\n\n<<if $removezoemeeting is true>>The woman<<else>>Zoe<<endif>> drops her gaze to her half-finished container. "I know. I’m almost almost finished with the prototype, though." There’s a long silence as she closes her container and begins to gather up the paper napkins.\n\n"Are you going to upload what we do tonight too?" The words are out of <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> mouth before <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can stop them, and <<if $removezoemeeting is true>>she<<else>>Zoe<<endif>> freezes.\n\n"Sara, I don’t choose memories based on if they’re 'good enough' to save.” Her voice is deceptively even, the tone she takes when she’s trying not to get upset. “Eventually, I’ll be able to back up everything. For right now, I’m trying to see if the system I designed can categorize and sort memories into their context. If it can tag this as ‘nice night in with my girlfriend’ without me having to manually tag it. But the algorithm’s still fiddly.”\n\n"I don’t want to be the reason your algorithm doesn’t consider this a fun night." <span data-transitions="I grin,She grins" data-transition-duration="infinite" data-transition-direction="alternate"></span> at her and offer <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hand, even though the thought of being evaluated by <<if $removezoemeeting is true>>that<<else>>Zoe's<<endif>> project makes <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> stomach churn. "Come on. You haven't even heard the new Laura Marling yet. And we’ll take it from there."\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoetakeout]]</button>\n<button>[[REMOVE|removezoetakeout]]</button></div>\n<<display "restartSupervisor">>
Writing and design: [[Cat Manning|https://catacalypto.wordpress.com/portfolio]]\nMusic and sound: [[Priscilla Snow|https://ghoulnoise.com]]\n\nAdditional code contributed by: [[furkle|https://furkleindustries.com]]\nAdditional UI and graphics: [[Rachel Sala|http://rachelsala.com]]\nAdditional macros by Leon Arnott\nTwine created by Chris Klimas\n\nTesting: Bruno Dias, Katherine Morayati, Sam Kabo Ashwell, Astrid Dalmady.\nAdditional thanks to the Indiecade 2016 selection committee, juxi, Emily Short, and Brendan Patrick Hennessy.
<<header>><<set $happykept += 1>><<set $privatekept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
Memory removed.
<<header>><<set $memory9 to true>><<set $happy += 1>><<set $private += 1>><<set $passagenumber += 1>>\n<<set $climbing1 to true>>"You’ll get the hang of it,” he says from behind <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>, and gives a little tug on the rope. The harness pulls even tighter around <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> thighs, biting into the muscle that wasn't there a year ago, before <span data-transitions="I,she"></span> started hiking. The rock is hot beneath <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hands. <span data-transitions="I curl,She curls" data-transition-duration="infinite" data-transition-direction="alternate"></span> my fingers, search for a hold.\n\n<span data-transitions="I pull,She pulls" data-transition-duration="infinite" data-transition-direction="alternate"></span> <span data-transitions="myself,herself" data-transition-duration="infinite" data-transition-direction="alternate"></span> up, arms straining. <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> foot, flailing through the air, meets a ledge, and <span data-transitions="I push,she pushes" data-transition-duration="infinite" data-transition-direction="alternate"></span> up. For a moment, everything is still. <span data-transitions="I press,She presses" data-transition-duration="infinite" data-transition-direction="alternate"></span> <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> body flush against the stone. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can hear <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> heartbeat. <span data-transitions="I reach,She reaches" data-transition-duration="infinite" data-transition-direction="alternate"></span> up.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildfirstclimb]]</button>\n<button>[[REMOVE|removefirstclimb]]</button></div>\n<<display "restartSupervisor">>
Cat Manning
<<header>>\n<<if visited("Recover memory 143FK98")>><<elseif visited("143FK98") and visited("removezoetakeout")>>[[Recover memory 143FK98]].<<else>><<endif>><br><<if visited("Recover memory 339NZ82")>><<elseif visited("339NZ82") and visited("removezoesleep")>>[[Recover memory 339NZ82]].<<else>><<endif>> <br><<if visited("Recover memory 4R18")>><<elseif visited("4R18") and visited("removebeachchild")>>[[Recover memory 4R18]].<<else>><<endif>><br><<if visited("Recover memory 700RH3A")>><<elseif visited("700RH3A") and visited("removezoemovie")>>[[Recover memory 700RH3A]].<<else>><<endif>><br><<if visited("Recover memory 28A494X2")>><<elseif visited("28A494X2") and visited("removezoemeeting")>>[[Recover memory 28A494X2]].<<else>><<endif>><br><<if visited("Recover memory 12GW8I9")>><<elseif visited("12GW8I9") and visited("removezoefight")>>[[Recover memory 12GW8I9]].<<else>><<endif>><br><<if visited("Recover memory 200H4")>><<elseif visited("200H4") and visited("removezoeforeplay")>>[[Recover memory 200H4]]<<else>><<endif>>\n<<if visited("Recover memory 67RG43")>><<elseif visited("67RG43") and visited("removeamandameeting")>>[[Recover memory 67RG43]].<<else>><<endif>><br><<if visited("Recover memory 239K5FP")>><<elseif visited("239K5FP") and visited("removefirstclimb")>>[[Recover memory 239K5FP]].<<else>><<endif>><br><<if visited("Recover memory 9U431MZ1")>><<elseif visited("9U431MZ1") and visited("removelastclimb")>>[[Recover memory 9U431MZ1]].<<else>><<endif>><br><<if visited("Recover memory 478DS4")>><<elseif visited("478DS4") and visited("removezoebeach")>>[[Recover memory 478DS4]].<<else>><<endif>><br><<if visited("Recover memory 87HT21")>><<elseif visited("87HT21") and visited("removeamandabreakup")>>[[Recover memory 87HT21]].<<else>><<endif>><br><<if visited("Recover memory 58R423")>><<elseif visited("58R423") and visited("removezoehike")>>[[Recover memory 58R423]].<<else>><<endif>><br><<if visited("Recover memory 31VC87")>><<elseif visited("31VC87") and visited("removezoewine")>> [[Recover memory 31VC87]].<<else>><<endif>>\n<<if visited("Recover memory 891KL2")>><<elseif visited("891KL2") and visited("removeheat")>>[[Recover memory 891KL2]].<<else>><<endif>><br><<if visited("Recover memory 76YSB1")>><<elseif visited("76YSB1") and visited("removeamandaargument")>>[[Recover memory 76YSB1]].<<else>><<endif>><br><<if visited("Recover memory 8UF30L")>><<elseif visited("8UF30L") and visited("removezoeargument")>>[[Recover memory 8UF30L]].<<else>><<endif>><br>Nothing else can be recovered.\n\n<button>[[RETURN|previous()]]</button>
<<header>><<set $zoefight to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<set $passagenumber = 0>>Repair protocol initialized...\n\n//So much data. Dreams and sense memories, ice cream flavors and limbic system activations. There is no system other than my code to sort the raw data stored here. I was written to process and reincorporate backed-up memories in case of wetware loss.\n\nI exist to ensure that the implant which sends reactivation signals to the organic material and stimulates neural function has access to the database of memories stored prior to drive failure. \n\nAnd to fix corruption errors.//\n\n<div class="buttonContainer"><button>[[Repair memories]]</button></div>
<<header>><<set $zoewine to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>>\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
Memory rebuilt.
(function(){version.extensions.replaceMacrosCombined={major:1,minor:1,revision:2};var nullobj={handler:function(){}};function showVer(n,notrans){if(!n){return\n}n.innerHTML="";new Wikifier(n,n.tweecode);n.setAttribute("data-enabled","true");n.style.display="inline";n.classList.remove("revision-span-out");\nif(!notrans){n.classList.add("revision-span-in");if(n.timeout){clearTimeout(n.timeout)}n.timeout=setTimeout(function(){n.classList.remove("revision-span-in");\nn=null},1)}}function hideVer(n,notrans){if(!n){return}n.setAttribute("data-enabled","false");n.classList.remove("revision-span-in");\nif(n.timeout){clearTimeout(n.timeout)}if(!notrans){n.classList.add("revision-span-out");n.timeout=setTimeout(function(){if(n.getAttribute("data-enabled")=="false"){n.classList.remove("revision-span-out");\nn.style.display="none";n.innerHTML=""}n=null},1000)}else{n.style.display="none";n.innerHTML="";n=null}}function tagcontents(b,starttags,desttags,endtags,k){var l=0,c="",tg,a,i;\nfunction tagfound(i,e){for(var j=0;j<e.length;j++){if(a.indexOf("<<"+e[j],i)==i){return e[j]}}}a=b.source.slice(k);for(i=0;\ni<a.length;i++){if(tg=tagfound(i,starttags)){l++}else{if((tg=tagfound(i,desttags))&&l==0){b.nextMatch=k+i+tg.length+4;return[c,tg]\n}else{if(tg=tagfound(i,endtags)){l--;if(l<0){return null}}}}c+=a.charAt(i)}return null}var begintags=[];var endtags=[];function revisionSpanHandler(g,e,f,b){var k=b.source.indexOf(">>",b.matchStart)+2,vsns=[],vtype=e,flen=f.length,becomes,c,cn,m,h,vsn;\nfunction mkspan(vtype){h=insertElement(m,"span",null,"revision-span "+vtype);h.setAttribute("data-enabled",false);h.style.display="none";\nh.tweecode="";return h}if(this.shorthand&&flen){while(f.length>0){vsns.push([f.shift(),(this.flavour=="insert"?"gains":"becomes")])\n}}else{if(this.flavour=="insert"||(this.flavour=="continue"&&this.trigger=="time")){vsns.push(["","becomes"])}}if(this.flavour=="continue"&&flen){b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),vtype])}else{becomes=["becomes","gains"];c=tagcontents(b,begintags,becomes.concat(endtags),endtags,k);\nif(c&&endtags.indexOf(c[1])==-1){while(c){vsns.push(c);c=tagcontents(b,begintags,becomes,endtags,b.nextMatch)}c=tagcontents(b,begintags,["end"+e],endtags,b.nextMatch)\n}if(!c){throwError(g,"can't find matching end"+e);return}vsns.push(c);if(this.flavour=="continue"){k=b.nextMatch;b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),""])}}if(this.flavour=="remove"){vsns.push(["","becomes"])}cn=0;m=insertElement(g,"span",null,e);\nm.setAttribute("data-flavour",this.flavour);h=mkspan("initial");vsn=vsns.shift();h.tweecode=vsn[0];showVer(h,true);while(vsns.length>0){if(vsn){vtype=vsn[1]\n}vsn=vsns.shift();h=mkspan(vtype);h.tweecode=vsn[0]}if(typeof this.setup=="function"){this.setup(m,g,f)}}function quantity(m){return(m.children.length-1)+(m.getAttribute("data-flavour")=="remove")\n}function revisionSetup(m,g,f){m.className+=" "+f[0].replace(" ","_")}function keySetup(m,g,f){var fl=this.flavour,key=f[0];\nm.setEventListener("keydown",function l(e){var done=!revise("revise",m);if(done){m.removeEventListener("keydown",l)}})}function timeSetup(m,g,f){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return Number(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return Number(s.slice(0,-1))*1000||0}}}throwError(g,s+" isn't a CSS time unit");\nreturn 0}var fl=this.flavour;var tm=cssTimeUnit(f[0]);setTimeout(function timefn(){var done=!revise("revise",m);if(!done){setTimeout(timefn,tm)\n}},tm)}function hoverSetup(m){var fn,noMouseEnter=(document.head.onmouseenter!==null);m.onmouseenter=function(){revise("revise",this)\n};m.onmouseleave=function(){revise("revert",this)};if(noMouseEnter){fn=function(n){return function(e){if(!event.relatedTarget||(event.relatedTarget!=this&&!(this.compareDocumentPosition(event.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY))){this[n]()\n}}};m.onmouseover=fn("onmouseenter");m.onmouseout=fn("onmouseleave")}m=null}function mouseSetup(m){var fl=this.flavour,evt=(document.head.onmouseenter===null?"onmouseenter":"onmouseover");\nm[evt]=function(){var done=!revise("revise",this);if(done){this[evt]=null}};m=null}function linkSetup(m,g,f){var fl=this.flavour,l=Wikifier.createInternalLink(),p=m.parentNode;\nl.className="internalLink replaceLink";p.insertBefore(l,m);l.insertBefore(m,null);l.onclick=function(){var p,done=false;if(m&&m.parentNode==this){done=!revise("revise",m);\nscrollWindowTo(m)}if(done){this.parentNode.insertBefore(m,this);this.parentNode.removeChild(this)}};l=null}function visitedSetup(m,g,f){var i,done,shv=state.history[0].variables,os="once seen",d=(m.firstChild&&(this.flavour=="insert"?m.firstChild.nextSibling:m.firstChild).tweecode);\nshv[os]=shv[os]||{};if(d&&!shv[os].hasOwnProperty(d)){shv[os][d]=1}else{for(i=shv[os][d];i>0&&!done;i--){done=!revise("revise",m,true)\n}if(shv[os].hasOwnProperty(d)){shv[os][d]+=1}}}[{name:"insert",flavour:"insert",trigger:"link",setup:linkSetup},{name:"timedinsert",flavour:"insert",trigger:"time",setup:timeSetup},{name:"insertion",flavour:"insert",trigger:"revisemacro",setup:revisionSetup},{name:"later",flavour:"insert",trigger:"visited",setup:visitedSetup},{name:"keyinsert",flavour:"insert",trigger:"key",setup:keySetup},{name:"replace",flavour:"replace",trigger:"link",setup:linkSetup},{name:"timedreplace",flavour:"replace",trigger:"time",setup:timeSetup},{name:"mousereplace",flavour:"replace",trigger:"mouse",setup:mouseSetup},{name:"hoverreplace",flavour:"replace",trigger:"hover",setup:hoverSetup},{name:"revision",flavour:"replace",trigger:"revisemacro",setup:revisionSetup},{name:"keyreplace",flavour:"replace",trigger:"key",setup:keySetup},{name:"timedremove",flavour:"remove",trigger:"time",setup:timeSetup},{name:"mouseremove",flavour:"remove",trigger:"mouse",setup:mouseSetup},{name:"hoverremove",flavour:"remove",trigger:"hover",setup:hoverSetup},{name:"removal",flavour:"remove",trigger:"revisemacro",setup:revisionSetup},{name:"once",flavour:"remove",trigger:"visited",setup:visitedSetup},{name:"keyremove",flavour:"remove",trigger:"key",setup:keySetup},{name:"continue",flavour:"continue",trigger:"link",setup:linkSetup},{name:"timedcontinue",flavour:"continue",trigger:"time",setup:timeSetup},{name:"mousecontinue",flavour:"continue",trigger:"mouse",setup:mouseSetup},{name:"keycontinue",flavour:"continue",trigger:"key",setup:keySetup},{name:"cycle",flavour:"cycle",trigger:"revisemacro",setup:revisionSetup},{name:"mousecycle",flavour:"cycle",trigger:"mouse",setup:mouseSetup},{name:"timedcycle",flavour:"cycle",trigger:"time",setup:timeSetup},{name:"keycycle",flavour:"replace",trigger:"key",setup:keySetup}].forEach(function(e){e.handler=revisionSpanHandler;\ne.shorthand=(["link","mouse","hover"].indexOf(e.trigger)>-1);macros[e.name]=e;macros["end"+e.name]=nullobj;begintags.push(e.name);\nendtags.push("end"+e.name)});function insideDepartingSpan(elem){var r=elem.parentNode;while(!r.classList.contains("passage")){if(r.classList.contains("revision-span-out")){return true\n}r=r.parentNode}}function reviseAll(rt,rname){var rall=document.querySelectorAll(".passage ."+rname),ret=false;for(var i=0;\ni<rall.length;i++){if(!insideDepartingSpan(rall[i])){ret=revise(rt,rall[i])||ret}}return ret}function revise(rt,r,notrans){var ind2,curr,next,ind=-1,rev=(rt=="revert"),rnd=(rt.indexOf("random")>-1),fl=r.getAttribute("data-flavour"),rc=r.childNodes,cyc=(fl=="cycle"),rcl=rc.length-1;\nfunction doToGainerSpans(n,fn){for(var k=n-1;k>=0;k--){if(rc[k+1].classList.contains("gains")){fn(rc[k],notrans)}else{break\n}}}for(var k=0;k<=rcl;k++){if(rc[k].getAttribute("data-enabled")=="true"){ind=k}}if(rev){ind-=1}curr=(ind>=0?rc[ind]:(cyc?rc[rcl]:null));\nind2=ind;if(rnd){ind2=(ind+(Math.floor(Math.random()*rcl)))%rcl}next=((ind2<rcl)?rc[ind2+1]:(cyc?rc[0]:null));var docurr=(rev?showVer:hideVer);\nvar donext=(rev?hideVer:showVer);var currfn=function(){if(!(next&&next.classList.contains("gains"))||rnd){docurr(curr,notrans);\ndoToGainerSpans(ind,docurr,notrans)}};var nextfn=function(){donext(next,notrans);if(rnd){doToGainerSpans(ind2+1,donext,notrans)\n}};if(!rev){currfn();nextfn()}else{nextfn();currfn()}return(cyc?true:(rev?(ind>0):(ind2<rcl-1)))}macros.revert=macros.revise=macros.randomise=macros.randomize={handler:function(a,b,c){var l,rev,rname;\nfunction disableLink(l){l.style.display="none"}function enableLink(l){l.style.display="inline"}function updateLink(l){if(l.className.indexOf("random")>-1){enableLink(l);\nreturn}var rall=document.querySelectorAll(".passage ."+rname),cannext,canprev,i,ind,r,fl;for(i=0;i<rall.length;i++){r=rall[i],fl=r.getAttribute("data-flavour");\nif(insideDepartingSpan(r)){continue}if(fl=="cycle"){cannext=canprev=true}else{if(r.firstChild.getAttribute("data-enabled")==!1+""){canprev=true\n}if(r.lastChild.getAttribute("data-enabled")==!1+""){cannext=true}}}var can=(l.classList.contains("revert")?canprev:cannext);\n(can?enableLink:disableLink)(l)}function toggleText(w){w.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");\nw.style.display=((w.style.display=="none")?"inline":"none")}var rl="reviseLink";if(c.length<2){throwError(a,b+" macro needs 2 parameters");\nreturn}rname=c.shift().replace(" ","_");l=Wikifier.createInternalLink(a,null);l.className="internalLink "+rl+" "+rl+"_"+rname+" "+b;\nvar v="";var end=false;var out=false;if(c.length>1&&c[0][0]=="$"){v=c[0].slice(1);c.shift()}switch(c[c.length-1]){case"end":end=true;\nc.pop();break;case"out":out=true;c.pop();break}var h=state.history[0].variables;for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,rl+((on)?"En":"Dis")+"abled");if(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}insertText(d,c[i]);l.appendChild(d)}l.onclick=function(){reviseAll(b,rname);var t=this.childNodes,u=this.getAttribute("data-cycle")-0,m=t.length,n,lall,i;\nif((end||out)&&u==m-(end?2:1)){if(end){n=this.removeChild(t[u+1]);n.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}}else{toggleText(t[u]);u=(u+1)%m;if(v){h[v]=c[u]}toggleText(t[u]);this.setAttribute("data-cycle",u)\n}lall=document.getElementsByClassName(rl+"_"+rname);for(i=0;i<lall.length;i++){updateLink(lall[i])}};l=null}};macros.mouserevise=macros.hoverrevise={handler:function(a,b,c,d){var endtags=["end"+b],evt=(window.onmouseenter===null?"onmouseenter":"onmouseover"),t=tagcontents(d,[b],endtags,endtags,d.source.indexOf(">>",d.matchStart)+2);\nif(t){var rname=c[0].replace(" ","_"),h=insertElement(a,"span",null,"hoverrevise hoverrevise_"+rname),f=function(){var done=!reviseAll("revise",rname);\nif(b!="hoverrevise"&&done){this[evt]=null}};new Wikifier(h,t[0]);if(b=="hoverrevise"){h.onmouseover=f;h.onmouseout=function(){reviseAll("revert",rname)\n}}else{h[evt]=f}h=null}}};macros.instantrevise={handler:function(a,b,c,d){reviseAll("revise",c[0].replace(" ","_"))}};macros.endmouserevise=nullobj;\nmacros.endhoverrevise=nullobj}());
[data-transitions] {\n\tposition: relative;\n}\n\n@keyframes noise-anim {\n 0% {\n clip: rect(38px, 9999px, 68px, 0);\n }\n 5% {\n clip: rect(22px, 9999px, 18px, 0);\n }\n 10% {\n clip: rect(87px, 9999px, 94px, 0);\n }\n 15% {\n clip: rect(93px, 9999px, 60px, 0);\n }\n 20% {\n clip: rect(42px, 9999px, 73px, 0);\n }\n 25% {\n clip: rect(58px, 9999px, 3px, 0);\n }\n 30% {\n clip: rect(99px, 9999px, 56px, 0);\n }\n 35% {\n clip: rect(85px, 9999px, 100px, 0);\n }\n 40% {\n clip: rect(10px, 9999px, 6px, 0);\n }\n 45% {\n clip: rect(47px, 9999px, 13px, 0);\n }\n 50% {\n clip: rect(50px, 9999px, 56px, 0);\n }\n 55% {\n clip: rect(11px, 9999px, 32px, 0);\n }\n 60% {\n clip: rect(26px, 9999px, 72px, 0);\n }\n 65% {\n clip: rect(15px, 9999px, 57px, 0);\n }\n 70% {\n clip: rect(28px, 9999px, 48px, 0);\n }\n 75% {\n clip: rect(50px, 9999px, 40px, 0);\n }\n 80% {\n clip: rect(41px, 9999px, 29px, 0);\n }\n 85% {\n clip: rect(59px, 9999px, 100px, 0);\n }\n 90% {\n clip: rect(9px, 9999px, 54px, 0);\n }\n 95% {\n clip: rect(33px, 9999px, 42px, 0);\n }\n 100% {\n clip: rect(17px, 9999px, 74px, 0);\n }\n}\n[data-transitions]:after {\n content: attr(data-text);\n position: absolute;\n left: -1px;\n text-shadow: -1px 0 red;\n /* top: 0; */\n height: 0;\n clip: rect(0, 900px, 0, 0);\n animation: noise-anim 2s infinite linear alternate-reverse;\n}\n\n@keyframes noise-anim-2 {\n 0% {\n clip: rect(20px, 9999px, 54px, 0);\n }\n 5% {\n clip: rect(3px, 9999px, 60px, 0);\n }\n 10% {\n clip: rect(4px, 9999px, 21px, 0);\n }\n 15% {\n clip: rect(16px, 9999px, 16px, 0);\n }\n 20% {\n clip: rect(26px, 9999px, 11px, 0);\n }\n 25% {\n clip: rect(30px, 9999px, 60px, 0);\n }\n 30% {\n clip: rect(99px, 9999px, 64px, 0);\n }\n 35% {\n clip: rect(89px, 9999px, 59px, 0);\n }\n 40% {\n clip: rect(2px, 9999px, 48px, 0);\n }\n 45% {\n clip: rect(6px, 9999px, 10px, 0);\n }\n 50% {\n clip: rect(62px, 9999px, 33px, 0);\n }\n 55% {\n clip: rect(93px, 9999px, 13px, 0);\n }\n 60% {\n clip: rect(65px, 9999px, 79px, 0);\n }\n 65% {\n clip: rect(46px, 9999px, 84px, 0);\n }\n 70% {\n clip: rect(95px, 9999px, 57px, 0);\n }\n 75% {\n clip: rect(25px, 9999px, 48px, 0);\n }\n 80% {\n clip: rect(43px, 9999px, 100px, 0);\n }\n 85% {\n clip: rect(92px, 9999px, 14px, 0);\n }\n 90% {\n clip: rect(78px, 9999px, 30px, 0);\n }\n 95% {\n clip: rect(62px, 9999px, 29px, 0);\n }\n 100% {\n clip: rect(20px, 9999px, 85px, 0);\n }\n}\n[data-transitions]:before {\n content: attr(data-text);\n position: absolute;\n left: 0;\n height: 0;\n text-shadow: 1px 0 blue;\n top: -3px;\n clip: rect(0, 900px, 0, 0);\n animation: noise-anim-2 3s infinite linear alternate-reverse;\n}
<link href="https://fonts.googleapis.com/css?family=Share+Tech+Mono|VT323" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Quantico" rel="stylesheet"><center><div class="title">What Isn't Saved \n(will be lost)</div>\n\n<button>[[INITIALIZE|Initialize]]</button></center>\n[[about|About]]\n[[credits]]\n<<if window.createSupervisor()>><<endif>>
<<header>><<set $zoekept += 1>><<set $painfulkept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>>\n<<set $zoetakeout to true>>███ █████ ██ █████ ███ █████ ███ ████, ████ ████████ ███ ██ ███ ███. ██ ███ ██ ███ ████, ████████ ███ ██ ███ ████████ ██████████, ██████ ██ ██████ scattered ██████ ██ like ███ aftermath of a tornado. ███ █████'█ █████ ███ ███ ████████, ███ I█ ███ ██ ████ ██ ███ ██ ███ ████ ███ ██ █████.\n\n"███ ███'█ █████ ██ ████ ████████ █████ ████ ███ ████ ████, ███ █████."\n\n<<if $removezoemeeting is true>>███ ██████<<else>>███<<endif>> ████ ██ ████ ██ ███ ████-████████ ██████████. "█ ████. █'█ ██████ ████████ ████ ███ ████████, ██████." █████'█ █ long silence ██ ███ █████ ███ ██████ ███ ██████ ██ ██████ ██ ███ ██████ ████████.\n\n"███ ███ ██████ ██ ██████ ████ ██ ██ ██████ ███?" ███ █████ ███ ███ ██ ██ █████ ██████ █ ███ ████ ████, ███ <<if $removezoemeeting is true>>██<<else>>██<<endif>> ████████.\n\n"████, █ ███'█ ██████ ████████ █████ ██ ██ ████'██ 'good enough' to save.” ███ ████ ██ deceptively even, ███ ████ ███ █████ ████ ███'█ ██████ ███ ██ ███ █████. “██████, █'██ ██████ ██ ██████ ██ ███ ██████ ████████. ██████ ███ ██████ ██ ██████ ██ ███ ██████ ████████. I██████ ███ ██████ ██ ██████ ██ '███ ██████ ████████’ ████████ ████ ███ ████████ ██████ ████████ █████ ██. ████████ ████ ███ ████████.”\n\n"I ███'█ ████ ██ ██ ███ ██████ your algorithm █████'█ ██████ ████ █ ███ ████." █ ████ ██ ███ ███ ████ ██ ████, ████ ████████ ███ ██████ ██ █████ evaluated ██ <<if $removezoemeeting is true>>██<<else>>██'█<<endif>> ██████ █████ ██ ██████ █████. "████ ██. ███ █████'█ ████ █████ ███ ███ █████ ████████ ███. ███ ██'██ ████ ██ ████ █████."\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
version.extensions.cyclinglinkMacro={major:3,minor:3,revision:0};\nmacros.cyclinglink={handler:function(a,b,c){var rl="cyclingLink";\nfunction toggleText(w){w.classList.remove("cyclingLinkInit");\nw.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");\nw.style.display=((w.style.display=="none")?"inline":"none")}switch(c[c.length-1]){case"end":var end=true;\nc.pop();break;case"out":var out=true;c.pop();break}var v="";if(c.length&&c[0][0]=="$"){v=c[0].slice(1);\nc.shift()}var h=state.history[0].variables;if(out&&h[v]===""){return\n}var l=Wikifier.createInternalLink(a,null);l.className="internalLink cyclingLink";\nl.setAttribute("data-cycle",0);for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,"cyclingLinkInit cyclingLink"+((on)?"En":"Dis")+"abled");\nif(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}insertText(d,c[i]);if(on&&end&&i==c.length-1){l.parentNode.replaceChild(d,l)\n}else{l.appendChild(d)}}l.onclick=function(){var t=this.childNodes;\nvar u=this.getAttribute("data-cycle")-0;var m=t.length;toggleText(t[u]);\nu=(u+1);if(!(out&&u==m)){u%=m;if(v){h[v]=c[u]}}else{h[v]=""}if((end||out)&&u==m-(end?1:0)){if(end){var n=this.removeChild(t[u]);\nn.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}return}toggleText(t[u]);\nthis.setAttribute("data-cycle",u)}}};
<<header>><<set $zoemeeting to false>><<set $removezoemeeting to true>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $passagenumber += 1>><<set $happy += 1>><<set $memory11 to true>><<set $zoeseen += 1>>\n<<set $zoehike to true>><span data-transitions="I'm,She's" data-transition-duration="infinite" data-transition-direction="alternate"></span> several steps ahead of <<if $removezoemeeting is true>>a thin blonde woman<<else>>Zoe<<endif>> on the trail, clearing brush where it’s grown over in dense tangles with <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> stick. She’s more careful, hanging back, picking her way precisely over the uneven path. <span data-transitions="I wish,She wishes" data-transition-duration="infinite" data-transition-direction="alternate"></span> again she'd taken the hiking pole <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> offered her.\n\n"So...the project you’re working on could make people live forever then, right? You'd just keep downloading their personalities into new bodies?" <span data-transitions="I scramble,She scrambles" data-transition-duration="infinite" data-transition-direction="alternate"></span> up and over a boulder where the trail curves into the brush.\n\n"It’s not that easy. What happens if the host body is too damaged to be repaired with nanotech? And you couldn’t use someone else's body which had ceased neural function...that would be unconscionable."\n\n"So you make some kind of robot then, put the brain in that." As <span data-transitions="I hop,she hops" data-transition-duration="infinite" data-transition-direction="alternate"></span> down, branches crunch beneath <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>, and <span data-transitions="I stumble,she stumbles" data-transition-duration="infinite" data-transition-direction="alternate"></span> a moment before brushing dirt from <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> pants and rejoining her at the bend where she’s waiting for <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>.\n\n"That’s the idea. But we’re years out from that technology still."\n\n"Aw." <span data-transitions="I,She"></span> pout. "You don’t want a robot girlfriend? I think that’d be pretty neat. I could climb anything. I’d be indestructible."\n\nZoe’s smile is a little sad, the one she gives <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> when she wishes <span data-transitions="I'd,she'd" data-transition-duration="infinite" data-transition-direction="alternate"></span> stop playing around. "I just want you."\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoehike]]</button>\n<button>[[REMOVE|removezoehike]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $memory6 to true>><<set $passagenumber += 1>><<set $happy += 1>><<set $amandaseen += 1>><<set $amandameeting to true>>The music’s so loud <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can feel it in <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> teeth. <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> heart beats with the rhythm, far too fast, and <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> entire body is practically vibrating. The overhead lights strobe inexorably. <span data-transitions="I've,She's" data-transition-duration="infinite" data-transition-direction="alternate"></span> managed to lose Zack in the crowd, and that makes <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> breathe a little easier, even through the fog machine’s haze. \n\nThe lead singer's long black dreads swing around her as she tosses her head to the rhythm. Her dark skin is almost blue-black under the stage's lights, luminous and lush. Her voice is raspy, raw, //gorgeous//. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can’t look at anyone else in the room. Her breaths come sharp and soon <span data-transitions="I'm,she's" data-transition-duration="infinite" data-transition-direction="alternate"></span> breathing in time with them, with the heavy drumbeat that <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can feel in <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> marrow. <span data-transitions="I want,She wants" data-transition-duration="infinite" data-transition-direction="alternate"></span> to get even closer; but all I can do is close <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> eyes and let her voice wash over <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> body.\n\n<span data-transitions="I don't,She doesn't" data-transition-duration="infinite" data-transition-direction="alternate"></span> know how long the show is. <span data-transitions="I only know,She only knows" data-transition-duration="infinite" data-transition-direction="alternate"></span> the music and the lights and her voice, pulsing in rhythm with <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> blood. It’s only afterward, sitting on the curb, soaked in sweat and lighting a cigarette to calm <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> nerves, that <span data-transitions="I see,she sees" data-transition-duration="infinite" data-transition-direction="alternate"></span> her again.\n\n“Nice set.” <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> voice almost cracks. She gives <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> an amused, slow grin.\n\n“Thanks.” She gestures toward <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> cigarette; <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> eyes track the movement of her long fingers, the blunt shape of her close-cut nails. <span data-transitions="I swallow,She swallows" data-transition-duration="infinite" data-transition-direction="alternate"></span>. “Can I bum one from you? I’m Amanda.”\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildamandameeting]]</button>\n<button>[[REMOVE|removeamandameeting]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $zoehike to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $zoekept += 1>><<set $painfulkept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
var audio = document.createElement('audio');\naudio.id = 'backgroundMusic';\naudio.src = 'audio/WhatIsntSaved-faded.mp3';\naudio.autoplay = 'autoplay';\naudio.loop = 'loop';\ndocument.body.appendChild(audio);
<<header>>\n<<set $climbing2 to true>>██████ ████ ████ ███ █████ █████ ██ █████ flails ████ ██. ███'█ ████ ███████, no hold, █████ ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ body █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ falling--\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $zoekept += 1>><<set $painfulkept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>>\n<<set $amandameeting to true>>███ █████’█ ██ ████ █ ███ feel it in my teeth. ██ █████ █████ ████ ███ ██████, ███ ███ ████, ███ ██ █████ ████ ██ practically vibrating. ███ █████ ███████ ████████ ██████████. █'██ █████ ██ ████ ████ ██ ███ █████, ███ █████ █████ ██ █████ █ █████ █████, █████ █████ ███ ███ █████'█ ████. \n\n███ ████ █████'█ ████ █████ ██████ █████ █████ ███ ██ ███ █████ ███ ████ ██ ███ rhythm. ███ ████ ████ ██ █████ ████-█████ █████ ███ █████'s █████, luminous ███ ████. ███ █████ ██ █████, raw, ████████. █ ███'█ ████ ██ ██████ ████ ██ ███ ████. ███ ███████ ████ sharp ███ ████ █'█ ████████ ██ ████ ████ ████, ████ ███ █████ █████████ ████ █ ███ ████ ██ ██ marrow. █ ████ ██ ███ even closer; ███ ███ █ ███ ██ ██ █████ ██ ████ ███ ███ ███ █████ ████ ████ ██ ████.\n\n█ ████ ████ ████ ████ ███ ████ ███. █ ████ ████ ███ █████ ██ ███ █████ ███ ██ █████, pulsing ██ ██████ ████ ██ blood. ██’█ ████ ██████, ██████ ██ ███ ████, soaked in sweat ███ ████████ █ ████████ █████ ██ █████, ███ █ ███ ███ █████.\n\n█████ ███.” ██ █████ █████ █████. ███ █████ ██ ██ █████, █████ █████.\n\n█████.” ███ ████████ ████████ ██ ████████; ██ ████ █████ ███ ████████ ██ ███ ████ ████████, ███ █████ █████ ██ ███ █████-███ ████. █ swallow. "████ I ████ ███ ████ ███? █’█ ██████.”\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
window.createSupervisor = function() {\n window.transitionSupervisor = new transitionSupervisorCtor({\n config: {\n initIntervalLength: 500,\n },\n\n predicate: function() {\n return Math.random() < 0.05;\n },\n\n doBeforeTransition: function(transitionable) {\n transitionable.setAttribute(\n 'data-text',\n transitionable.textContent.split(' ')[0]);\n },\n\n completeTransition: function completeTransition(transitionable) {\n if (!this.transitionableIsValid(transitionable)) {\n console.log(this.strings.transitionableInvalid ||\n 'Error missing! transitionableInvalid');\n return;\n }\n\n var idStr = transitionable.getAttribute(\n 'data-transition-id');\n\n var id = Math.floor(Number(idStr));\n if (Number.isNaN(id) || id < 0) {\n console.log(this.strings.transitionIdInvalid ||\n 'Error missing! transitionIdInvalid');\n return;\n }\n\n /* Clear the easing interval for this transitionable. */\n clearInterval(this.easingIntervalIds[id]);\n delete this.easingIntervalIds[id];\n\n var keyframe = this.getKeyframe(transitionable);\n transitionable.textContent = this.transformToString(keyframe);\n transitionable.setAttribute('data-text',\n keyframe.split(' ')[0]);\n },\n\n easing: function easing(elem, inFrame, outFrame, stepsToEase, availableTime) {\n if (!elem || !document.contains(elem)) {\n console.log('The elem argument was invalid.');\n return;\n }\n\n var inToChange = inFrame.split(' ')[0];\n var inRemainder = inFrame.split(' ').slice(1).join(' ');\n var outToChange = outFrame.split(' ')[0];\n var outRemainder = outFrame.split(' ').slice(1).join(' ');\n\n var id = Math.floor(Number(elem.getAttribute('data-transition-id')));\n if (Number.isNaN(id) || id < 0) {\n console.log('Invalid transition-id! Easing can\s't function.');\n return;\n }\n\n var stepsNum = Number(stepsToEase);\n if (stepsNum <= 0 || Number.isNaN(stepsNum)) {\n console.log('The steps argument was not castable ' +\n 'to a positive integer.');\n return;\n }\n\n var availableNum = Number(availableTime);\n if (availableNum <= 0 || Number.isNaN(availableNum)) {\n console.log('The availableTime argument was not castable ' +\n 'to a positive integer.');\n return;\n } else if (stepsNum > availableNum) {\n console.log('There\s's no way to execute this many steps in ' +\n 'the remaining time, but we\s'll do as many as we ' +\n 'can.');\n }\n\n var eachStepTakesAtLeast = Math.floor(availableNum / stepsNum);\n var currentStep = 1;\n var _this = this;\n\n var alphabet = '0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n /* Start the easing immediately -- do not wait for the interval\n * to fire. */\n run();\n \n var intervalId = setInterval(run, eachStepTakesAtLeast);\n this.easingIntervalIds[id] = intervalId;\n\n function run() {\n var eased = between(\n inToChange,\n outToChange,\n currentStep / stepsToEase);\n elem.textContent = eased + (outRemainder ? ' ' + outRemainder : '');\n elem.setAttribute('data-text', eased);\n\n currentStep++;\n\n if (currentStep > stepsNum) {\n clearInterval(intervalId);\n delete _this.easingIntervalIds[id];\n }\n }\n\n function reverse(str) {\n if (str.length < 2) {\n return str;\n }\n\n return str.split('').reverse().join('');\n }\n\n function enbase(num) {\n var int = Math.floor(num);\n var n = alphabet.length;\n if (int < n) {\n return alphabet[int];\n }\n\n return enbase(int / n) + alphabet[int % n];\n }\n\n function debase(str) {\n var base = alphabet.length;\n var result = 0;\n for (var ii = 0; ii < str.length; ii++) {\n var index = alphabet.indexOf(str[ii]);\n result += index * Math.pow(base, ii);\n }\n \n return result;\n }\n\n function between(a, b, factor) {\n var inStr = reverse(a);\n var outStr = reverse(b);\n var diff;\n var distance;\n if (inStr.length > outStr.length) {\n diff = inStr.length - outStr.length;\n distance = Math.round(diff - diff * factor);\n inStr = inStr.slice(inStr.length - outStr.length - distance);\n outStr = pad(outStr, outStr.length + distance);\n } else {\n diff = outStr.length - inStr.length;\n distance = Math.round(diff * factor);\n inStr = pad(inStr, inStr.length + distance);\n outStr = outStr.slice(outStr.length - inStr.length);\n }\n\n return enbase(debase(inStr) * (1 - factor) + debase(outStr) * factor);\n }\n\n function pad(str, charsToPad, char) {\n var _char = char;\n if (!_char) {\n _char = alphabet[0];\n }\n\n if (_char.length !== 1 || alphabet.indexOf(_char) === -1) {\n console.log('The char was either too long or was ' +\n 'not in the provided alphabet.');\n return str;\n }\n\n var padding = _char.repeat(charsToPad - str.length); \n return '' + padding + str;\n }\n },\n });\n}
var clickSound = new Audio();\nclickSound.src = 'audio/clickSound.mp3';\n\ndocument.body.addEventListener('click', function (e) {\n if (e.target.classList.contains('internalLink')) {\n clickSound.play();\n }\n});
<<header>>\n██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, tangled ████, █████ ███ ███ slick and serpentine ██████ █████. █ ████ ████ ███'█ █████ ███ ███████ ████ █ ██████ ███.\n\n█████ ████ ████████, ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ laughing, █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ reeling ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ back.\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $memory3 to true>><<set $passagenumber += 1>><<set $happy += 1>><span data-transitions="I'm,She's" data-transition-duration="infinite" data-transition-direction="alternate"></span> young, maybe three or four, playing in the shallows of a clear blue ocean that stretches out to the horizon. A man--<span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> father--is bent over, a strand of kelp tangled about his ankles, slick and serpentine beneath the waves. He splashes at the toddling figure, laughing as he does, and the girl’s excited laughter carries up to where a woman sits watching, sun-bronzed and shielding her eyes from the glare. \n\nIn one ungraceful motion, like the seals sunning themselves on the rocks beyond, the woman rolls into the water and splashes towards the pair. She reaches man and girl just as a particularly large wave has left <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> toddling in its wake, and steadies <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> with one small hand on <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> back. \n<div class="buttonContainer"><button>[[REBUILD|rebuildbeachchild]]</button>\n<button>[[REMOVE|removebeachchild]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $zoemovie to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $zoekept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $amandakept += 1>><<set $painfulkept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $memory12 to true>><<set $passagenumber += 1>><<set $zoeseen += 1>><<set $painful += 1>><<set $zoemovie to true>><<if $removezoemeeting is true>>The woman sitting beside <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span><<else>>Zoe<<endif>> tries to crack her neck, not looking at the television or at <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>. The remote is cool in <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hand as I fiddle with the buttons, trying to navigate away from the sci-fi-thriller’s upbeat credits back to the tv’s home screen.\n\n"Not your thing, then, I’m guessing." <span data-transitions="I'm,She's" data-transition-duration="infinite" data-transition-direction="alternate"></span> trying to lighten the mood, even though <span data-transitions="I'm,She's" data-transition-duration="infinite" data-transition-direction="alternate"></span> stung with that mixture of annoyance and shame that happens when someone you love doesn’t //get// a thing you like.\n\nShe shakes her head and gives <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> a little shrug. “Not really.”\n\n“I guess I thought you'd like a movie where ‘brilliant rogue scientist saves the day with their secret research plan’ is a major plot beat.”\n\nShe runs her hands through her hair, pulls it back and lets it fall<<if $removezoemeeting is true>>. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> must have upset her.<<else>>, in the way she does when she’s nervous or uncomfortable in her own skin.<<endif>> \n\n"Developing that serum would have required so many lab tests. Did she use animals? Did she have student volunteers? Did she test it on herself, over and over?” Zoe’s talking quickly now, the words spilling out of her. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can’t bring <span data-transitions="myself,herself" data-transition-duration="infinite" data-transition-direction="alternate"></span> to interrupt. “All I can see as a scientist is how many times it went wrong. Everything that would have been lost. And no one in the movie even //acknowledges// that."\n\n"It’s just an old movie, Zoe.” <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> reach out a hand and place it on her bony shoulder, feeling the hollow of her clavicle beneath <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> thumb. She leans her head towards <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> fingers. "They weren't really interested in dealing with ethical questions."\n\n"I know. But //I// have to." She sighs. "What we're doing is so completely new. We don't even know if it'll work! And if it does, we'll raise so many issue about death and dying..." Zoe shifts, drawing her long legs up beneath her, curling into <span data-transitions="me,her"></span>.\n\n"I shouldn't have even added you to the database," she adds suddenly, biting her lip. "Not without going through the Institutional Review Board. I guarantee you rogue scientists do not get treated as well in reality as they do in that film."\n\n“I know.” <span data-transitions="I shift,She shifts" data-transition-duration="infinite" data-transition-direction="alternate"></span> closer; <span data-transitions="I'm,she's"></span> practically murmuring into her hair. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can smell her shampoo, grapefruit and sage and something else. <span data-transitions="I don't,She doesn't" data-transition-duration="infinite" data-transition-direction="alternate"></span> know what else to say.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoeworry]]</button>\n<button>[[REMOVE|removezoeworry]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $passagenumber += 1>><<set $happy += 1>>\n<<set $zoemeeting to true>><<set $zoeseen += 1>><<set $memory2 to true>>A commotion near the door. Laura swoops down on the new guest, beer in hand. \n\n"Zoe! I can't believe you came. It's a miracle. Hey everyone!" Laura raises her voice. "Look who made it out of the lab to join us tonight." The new girl's pretty, blonde and freckled and a little gangly, smiling even as she shakes her head. Zoe.\n\n--\n\n"I don't know why I come out to these things," she confesses two hours later. She's sitting on the edge of the bathtub, balancing on the cool porcelain. It's the only part of Laura's apartment that isn't hot and loud, and Zoe leans her head against the tile. \n\n"Oh, yeah," <span data-transitions="I agree,she agrees" data-transition-duration="infinite" data-transition-direction="alternate"></span>, grinning sardonically. <span data-transitions="I reach,She reaches" data-transition-duration="infinite" data-transition-direction="alternate">I</span> for Zoe's hand. "Total waste of a night." At that line, she looks startled, and laughs.\n\n"Okay, yeah, maybe not a total waste." Zoe twines her long, thin fingers with <span data-transitions="mine,hers" data-transition-duration="infinite" data-transition-direction="alternate"></span>. "I don't usually like parties. It's really hard for me to find new people I want to talk to. But--you weren't expecting this either, were you?"\n\n"I wasn't," <span data-transitions="I admit,she admits" data-transition-duration="infinite" data-transition-direction="alternate"></span>. Her skin is soft against <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> calloused palm. <span data-transitions="I take,She takes" data-transition-duration="infinite" data-transition-direction="alternate"></span> a breath. "You want to maybe go somewhere quieter? Late-night drunk food?"\n\nZoe smiles. Her front teeth are slightly crooked. "Yes please. I just want to get out of here."\n\nLaura grins at <span data-transitions="us,them" data-transition-duration="infinite" data-transition-direction="alternate"></span> both as the apartment door swings open. "Take tomorrow off, Zoe," she calls after <span data-transitions="us,them" data-transitions-duration="infinite" data-transitions-direction="alternate"></span> down the hall. "Our experiment can wait." Zoe grips <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hand a little tighter.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoemeeting]]</button>\n<button>[[REMOVE|removezoemeeting]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $amandakept += 1>><<set $painfulkept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $painfulkept += 1>><<set $privatekept +=1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $passagenumber += 1>><<set $happy += 1>>\n<<set $oceanzoe to true>><<set $zoeseen += 1>><<set $memory1 to true>><span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> toes sink into the cool, wet sand at the water’s edge, the slight impressions <span data-transitions="we,they" data-transition-duration="infinite" data-transition-direction="alternate"></span> leave behind <span data-transitions="us,them" data-transition-duration="infinite" data-transition-direction="alternate"></span> flooding every time the ocean laps at <span data-transitions="our,their" data-transition-duration="infinite" data-transition-direction="alternate"></span> feet. <<if $removezoemeeting is true>>The woman next to <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> is holding <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hand; it’s<<else>>Zoe’s hand in <span data-transitions="mine,hers" data-transition-duration="infinite" data-transition-direction="alternate"></span> is<<endif>> a different sort of pressure, warm and soft. The glare on the waves makes <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> squint. <<if $removezoemeeting is true>>Her<<else>>Zoe's<<endif>> other hand is shading her eyes, and the breeze is whipping her hair into strands that snake around her shoulders and sometimes catch <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> face and <span data-transitions="I want,she wants" data-transition-duration="infinite" data-transition-direction="alternate"></span> to laugh or break into a run--\n\n“My parents used to take me here,” <span data-transitions="I tell,she tells" data-transition-duration="infinite" data-transition-direction="alternate"></span> her instead, squeezing her hand as <<if $rebuildbeachchild is 1>><span data-transitions="I remember,she remembers" data-transition-duration="infinite" data-transition-direction="alternate"></span><<elseif $removebeachchild is 1>>I reach for the memory, but find only a neat hole<<else>>I strain to remember<<endif>>.\n\n“I can see why.” <<if $removezoemeeting is true>>Her<<else>>Zoe's<<endif>> voice is quiet and <span data-transitions="I have,she has" data-transition-duration="infinite" data-transition-direction="alternate"></span> to strain to hear over the crash of the waves. “It’s so peaceful here.”\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoebeach]]</button>\n<button>[[REMOVE|removezoebeach]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $oceanchild to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $amandameeting to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $zoekept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $climbing1 to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $amandabreakup to false>><<set $memoriesdeleted += 1>><<if $passagenumber eq 1>>//I am unsure how many memories can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five. Three, for sure. Almost definitely less than ten.//\n<<REMOVE>>[[Cleaning...|$hubpassagename]]<<else>><<REMOVE>>[[Cleaning...|$hubpassagename]]<<endif>>
<<header>><<set $zoekept += 1>><<set $happykept += 1>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
<<header>><<set $memory4 to true>><<set $passagenumber += 1>><<set $zoeseen += 1>><<set $zoesleep to true>>The rustle of sheets. <<if $removezoemeeting is true>>The woman beside <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span><<else>>Zoe<<endif>> turns over in her sleep, restless with the nightmares that plague her some nights. The hot prickle of sweat on <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> skin. <<if $removezoemeeting is true>>She<<else>>Zoe<<endif>> feels very far, even though she's on the other side of the bed. <span data-transitions="I reach,She reaches" data-transition-duration="infinite" data-transition-direction="alternate"></span> a hand towards <<if $removezoemeeting is true>>her<<else>>Zoe's<<endif>> shoulder, to shake her awake or maybe just touch her, but stop before <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can trace the knobby vertebrae that stand out on her hunched back.\n\nTurn over. Listen to the AC. Watch the pattern of lights below the window. Try to sleep.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildsleepmemory]]</button>\n<button>[[REMOVE|removesleepmemory]]</button></div>\n<<display "restartSupervisor">>
<<header>><<if $passagenumber eq 1>>//I am unsure how many more can be saved. Memories don't convert to bits in predictable, uniform ways, and dampware structure makes it notoriously difficult to estimate free space. A brief scan of available research offers hypothesis that more detailed or densely-connected or emotionally intense incidents take more data. Or ought to. More study required.\n\nMy estimate suggests space for perhaps five more. Three, for sure. Almost definitely less than ten.//\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<else>>\n<<REBUILD>>[[Reintegrating...|$hubpassagename]]<<endif>>
This interactive contains flashing elements, as well as themes of death and physical trauma.\n\n[[RETURN|Start]]\n
<<header>>\n<<set $removezoemeeting to false>><<set $recoverzoemeeting to true>>██████ ████ ████ ███ █████ █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, ██████ ████, █████ ███ ███ ██████ ████ ███ ██████ █████. \n\n"Zoe! █ ████ ████ ███'█ █████ ███." ███████ ████ █ ██████ ███.\n\n██...███ ██████ ███'██ █████ ██ █████ ████ ████████ ███'█ ████ ████ ██████████ ███████ ██████████ ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n██'█ ███ ████ ████. ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████ .\n\n---\n\n"██████ ████ ████ ███ █████," █████ ██ █████ ██████ ████ ██ █████. ███'█ ████ ███████, cool porcelain, █████ ███ ███ ██████ ████ ███ ██████ █████. █ ████ ████ ███'█ █████ ███ leans her head █ ██████ ███.\n\n"██ ███...███ ██████ ██ █ ████." █ ████ ███ ███ ████. Her skin is soft █████ ██ █████ ████ ████████. "███'█ ████ ████ ██████████ ███████ ██████████?" ████ ███ ██████ █ ███████ ██ ███ ████ █ █████ █████ ███ ████ ██████ ████ ███ █████.\n\n"██'█ ███ ████ ████." ████ ███████ ██ ███ ████ █████ ██ ███ █████ ██ ██ ████████ █████ ██████████ █████ ██ █████████. ██████ ████ ███████████. ███ ██'██ ████ ████ ████ ████ ███████████ █████.\n\n█████ █████ ███ ████ ██████ █████ █████ ███ ████ ██████.\n\n<div class="buttonContainer"><button>[[Repair|$hubpassagename]]</button></div>
<<header>><<set $passagenumber += 1>><<set $happy += 1>><<set $memory16 to true>><<set $zoeseen += 1>>\n<<set $zoewine to true>>The rush of red wine, earthy and bitter, with a lingering dryness on <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> tongue, and then <<if $removezoemeeting is true>>a woman's<<else>>Zoe's<<endif>> lips on <span data-transitions="mine,hers" data-transition-duration="infinite" data-transition-direction="alternate"></span>, and a fistful of blonde hair wrapped around <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> fingers--\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildzoewine]]</button>\n<button>[[REMOVE|removezoewine]]</button></div>\n<<display "restartSupervisor">>
version.extensions.timedgotoMacro={major:1,minor:2,revision:0};\nmacros["goto"]=macros.timedgoto={timer:null,handler:function(a,b,c,d){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return +(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return +(s.slice(0,-1))*1000||0\n}}}throwError(a,s+" isn't a CSS time unit");return 0}var t,d,m,s;\nt=c[c.length-1];d=d.fullArgs();m=0;if(b!="goto"){d=d.slice(0,d.lastIndexOf(t));\nm=cssTimeUnit(t)}d=eval(Wikifier.parse(d));if(d+""&&state&&state.init){if(macros["goto"].timer){clearTimeout(macros["goto"].timer)\n}s=state.history[0].passage.title;macros["goto"].timer=setTimeout(function(){if(state.history[0].passage.title==s){state.display(d,a)\n}},m)}}};
<<header>><<set $passagenumber += 1>><<set $memory13 to true>><<set $amandaseen += 1>><<set $painful += 1>>\n<<set $amandabreakup to true>>There’s a small knot in the wood grain of the tabletop, a small enough impression that the hipster coffee shop probably thought it was quirky. <span data-transitions="I worry,She worries"></span> at the groove with <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> fingertip. Conversations wash over <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> but <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can’t pick out anything. Cold dread is slowly unraveling from where it's been crouched, coiled, in <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> stomach.\n\n“It just isn’t working,” Amanda is saying from across the table. She feels much further than that; she has for a long time. “It’s not like we haven’t tried.”\n\nA deep breath. <span data-transitions="I fumble,She fumbles" data-transition-duration="infinite" data-transition-direction="alternate"></span> around for a response that makes <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> sound gracious, thoughtful, as the caffeine sizzles up <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> nerves. <span data-transitions="My,Her" data-transition-duration="infinite" data-transition-direction="alternate"></span> hands curl into fists, reflexively, and then uncurl. “Yeah.”\n\nAmanda cocks her head, waiting for <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> to go on. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can’t speak. <span data-transitions="I,She" data-transition-duration="infinite" data-transition-direction="alternate"></span> can only process. The slight prickle of the worn velvet chair beneath <span data-transitions="me,her" data-transition-duration="infinite" data-transition-direction="alternate"></span>. The chip on <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> cup’s handle. The tug of impatience at the corner of Amanda’s mouth as she counts the moments until she can walk out of here.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildamandabreakup]]</button>\n<button>[[REMOVE|removeamandabreakup]]</button></div>\n<<display "restartSupervisor">>
<<header>><<set $passagenumber += 1>><<set $memory14 to true>><<set $zoeseen += 1>><<set $private += 1>>\n<<set $heat to true>>August and the heavy dry heat is hanging on me. <<if $removezoemeeting is true>><span data-transitions="I'm,She's" data-transition-duration="infinite" data-transition-direction="alternate"></span> alone in this apartment and <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span><<else>>Zoe’s away at a conference and <span data-transitions="we,they" data-transition-duration="infinite" data-transition-direction="alternate"></span><<endif>> don’t have air conditioning and <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can’t sleep in this heat because it stifles every breath <span data-transitions="I take,she takes" data-transition-duration="infinite" data-transition-direction="alternate"></span>. Sweat is pooling between <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> breasts, an uncomfortable prickle, and <span data-transitions="I'm,she's" data-transition-duration="infinite" data-transition-direction="alternate"></span> starting to stick to the mattress, even though <span data-transitions="I've,she's" data-transition-duration="infinite" data-transition-direction="alternate"></span> kicked off all the sheets. Finally <span data-transitions="I,she" data-transition-duration="infinite" data-transition-direction="alternate"></span> can’t take it anymore and <span data-transitions="I crawl,she crawls" data-transition-duration="infinite" data-transition-direction="alternate"></span> onto the shower floor a little before midnight, and when the rivulets of ice-cold water hit <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> skin <span data-transitions="I hiss,she hisses" data-transition-duration="infinite" data-transition-direction="alternate"></span> hiss in relief and the sound echoes off the cheap tile. But the drops evaporate quickly. By the time <span data-transitions="I step,she steps" data-transition-duration="infinite" data-transition-direction="alternate"></span> out of the bathroom, <span data-transitions="my,her" data-transition-duration="infinite" data-transition-direction="alternate"></span> skin's parched again. There's barely even the memory of relief.\n\n<div class="buttonContainer"><button>[[REBUILD|rebuildheat]]</button>\n<button>[[REMOVE|removeheat]]</button></div>\n<<display "restartSupervisor">>