<!DOCTYPE html> <html data-init="no-js"> <head> <meta charset="UTF-8" /> <title>The Outlaw: Empyrean War V 0.1</title> <meta name="viewport" content="width=device-width,initial-scale=1" /> <!-- SugarCube (v2.36.1): A free (gratis and libre) story format. Copyright © 2013–2021 Thomas Michael Edwards <thomasmedwards@gmail.com>. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> <script id="script-libraries" type="text/javascript"> if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading"); /*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */ "document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},a=function(t,e){if(""===e)throw new c("SYNTAX_ERR","The token must not be empty.");if(/\s/.test(e))throw new c("INVALID_CHARACTER_ERR","The token must not contain space characters.");return o.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],i=0,s=n.length;s>i;i++)this.push(n[i]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],h=function(){return new l(this)};if(c[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return~a(this,t+"")},u.add=function(){var t,e=arguments,n=0,i=e.length,s=!1;do t=e[n]+"",~a(this,t)||(this.push(t),s=!0);while(++n<i);s&&this._updateClassName()},u.remove=function(){var t,e,n=arguments,i=0,s=n.length,r=!1;do for(t=n[i]+"",e=a(this,t);~e;)this.splice(e,1),r=!0,e=a(this,t);while(++i<s);r&&this._updateClassName()},u.toggle=function(t,e){var n=this.contains(t),i=n?e!==!0&&"remove":e!==!1&&"add";return i&&this[i](t),e===!0||e===!1?e:!n},u.replace=function(t,e){var n=a(t+"");~n&&(this.splice(n,1,e),this._updateClassName())},u.toString=function(){return this.join(" ")},s.defineProperty){var f={get:h,enumerable:!0,configurable:!0};try{s.defineProperty(i,e,f)}catch(p){void 0!==p.number&&-2146823252!==p.number||(f.enumerable=!1,s.defineProperty(i,e,f))}}else s[n].__defineGetter__&&i.__defineGetter__(e,h)}}(self),function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,i=arguments.length;for(n=0;i>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}"replace"in document.createElement("_").classList||(DOMTokenList.prototype.replace=function(t,e){var n=this.toString().split(" "),i=n.indexOf(t+"");~i&&(n=n.slice(i),this.remove.apply(this,n),this.add(e),this.add.apply(this,n.slice(1)))}),t=null}()); /*! * https://github.com/es-shims/es5-shim * @license es5-shim Copyright 2009-2020 by contributors, MIT License * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE */ (function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toString;var m=typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol";var D;var S=Function.prototype.toString,x=/^\s*class /,O=function isES6ClassFn(t){try{var r=S.call(t);var e=r.replace(/\/\/.*\n/g,"");var n=e.replace(/\/\*[.\s\S]*\*\//g,"");var i=n.replace(/\n/gm," ").replace(/ {2}/g," ");return x.test(i)}catch(a){return false}},E=function tryFunctionObject(t){try{if(O(t)){return false}S.call(t);return true}catch(r){return false}},j="[object Function]",I="[object GeneratorFunction]",D=function isCallable(t){if(!t){return false}if(typeof t!=="function"&&typeof t!=="object"){return false}if(m){return E(t)}if(O(t)){return false}var r=T.call(t);return r===j||r===I};var M;var U=RegExp.prototype.exec,$=function tryRegexExec(t){try{U.call(t);return true}catch(r){return false}},F="[object RegExp]";M=function isRegex(t){if(typeof t!=="object"){return false}return m?$(t):T.call(t)===F};var N;var C=String.prototype.valueOf,k=function tryStringObject(t){try{C.call(t);return true}catch(r){return false}},A="[object String]";N=function isString(t){if(typeof t==="string"){return true}if(typeof t!=="object"){return false}return m?k(t):T.call(t)===A};var R=e.defineProperty&&function(){try{var t={};e.defineProperty(t,"x",{enumerable:false,value:t});for(var r in t){return false}return t.x===t}catch(n){return false}}();var P=function(t){var r;if(R){r=function(t,r,n,i){if(!i&&r in t){return}e.defineProperty(t,r,{configurable:true,enumerable:false,writable:true,value:n})}}else{r=function(t,r,e,n){if(!n&&r in t){return}t[r]=e}}return function defineProperties(e,n,i){for(var a in n){if(t.call(n,a)){r(e,a,n[a],i)}}}}(n.hasOwnProperty);var J=function isPrimitive(t){var r=typeof t;return t===null||r!=="object"&&r!=="function"};var Y=u.isNaN||function isActualNaN(t){return t!==t};var z={ToInteger:function ToInteger(t){var r=+t;if(Y(r)){r=0}else if(r!==0&&r!==1/0&&r!==-(1/0)){r=(r>0||-1)*Math.floor(Math.abs(r))}return r},ToPrimitive:function ToPrimitive(t){var r,e,n;if(J(t)){return t}e=t.valueOf;if(D(e)){r=e.call(t);if(J(r)){return r}}n=t.toString;if(D(n)){r=n.call(t);if(J(r)){return r}}throw new TypeError},ToObject:function(t){if(t==null){throw new TypeError("can't convert "+t+" to object")}return e(t)},ToUint32:function ToUint32(t){return t>>>0}};var Z=function Empty(){};P(a,{bind:function bind(t){var r=this;if(!D(r)){throw new TypeError("Function.prototype.bind called on incompatible "+r)}var n=s.call(arguments,1);var a;var o=function(){if(this instanceof a){var i=g.call(r,this,p.call(n,s.call(arguments)));if(e(i)===i){return i}return this}else{return g.call(r,t,p.call(n,s.call(arguments)))}};var f=w(0,r.length-n.length);var u=[];for(var l=0;l<f;l++){v.call(u,"$"+l)}a=i("binder","return function ("+y.call(u,",")+"){ return binder.apply(this, arguments); }")(o);if(r.prototype){Z.prototype=r.prototype;a.prototype=new Z;Z.prototype=null}return a}});var G=d.bind(n.hasOwnProperty);var H=d.bind(n.toString);var W=d.bind(s);var B=g.bind(s);if(typeof document==="object"&&document&&document.documentElement){try{W(document.documentElement.childNodes)}catch(X){var L=W;var q=B;W=function arraySliceIE(t){var r=[];var e=t.length;while(e-- >0){r[e]=t[e]}return q(r,L(arguments,1))};B=function arraySliceApplyIE(t,r){return q(W(t),r)}}}var K=d.bind(f.slice);var Q=d.bind(f.split);var V=d.bind(f.indexOf);var _=d.bind(v);var tt=d.bind(n.propertyIsEnumerable);var rt=d.bind(r.sort);var et=t.isArray||function isArray(t){return H(t)==="[object Array]"};var nt=[].unshift(0)!==1;P(r,{unshift:function(){h.apply(this,arguments);return this.length}},nt);P(t,{isArray:et});var it=e("a");var at=it[0]!=="a"||!(0 in it);var ot=function properlyBoxed(t){var r=true;var e=true;var n=false;if(t){try{t.call("foo",function(t,e,n){if(typeof n!=="object"){r=false}});t.call([1],function(){"use strict";e=typeof this==="string"},"x")}catch(i){n=true}}return!!t&&!n&&r&&e};P(r,{forEach:function forEach(t){var r=z.ToObject(this);var e=at&&N(this)?Q(this,""):r;var n=-1;var i=z.ToUint32(e.length);var a;if(arguments.length>1){a=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.forEach callback must be a function")}while(++n<i){if(n in e){if(typeof a==="undefined"){t(e[n],n,r)}else{t.call(a,e[n],n,r)}}}}},!ot(r.forEach));P(r,{map:function map(r){var e=z.ToObject(this);var n=at&&N(this)?Q(this,""):e;var i=z.ToUint32(n.length);var a=t(i);var o;if(arguments.length>1){o=arguments[1]}if(!D(r)){throw new TypeError("Array.prototype.map callback must be a function")}for(var f=0;f<i;f++){if(f in n){if(typeof o==="undefined"){a[f]=r(n[f],f,e)}else{a[f]=r.call(o,n[f],f,e)}}}return a}},!ot(r.map));P(r,{filter:function filter(t){var r=z.ToObject(this);var e=at&&N(this)?Q(this,""):r;var n=z.ToUint32(e.length);var i=[];var a;var o;if(arguments.length>1){o=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.filter callback must be a function")}for(var f=0;f<n;f++){if(f in e){a=e[f];if(typeof o==="undefined"?t(a,f,r):t.call(o,a,f,r)){_(i,a)}}}return i}},!ot(r.filter));P(r,{every:function every(t){var r=z.ToObject(this);var e=at&&N(this)?Q(this,""):r;var n=z.ToUint32(e.length);var i;if(arguments.length>1){i=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.every callback must be a function")}for(var a=0;a<n;a++){if(a in e&&!(typeof i==="undefined"?t(e[a],a,r):t.call(i,e[a],a,r))){return false}}return true}},!ot(r.every));P(r,{some:function some(t){var r=z.ToObject(this);var e=at&&N(this)?Q(this,""):r;var n=z.ToUint32(e.length);var i;if(arguments.length>1){i=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.some callback must be a function")}for(var a=0;a<n;a++){if(a in e&&(typeof i==="undefined"?t(e[a],a,r):t.call(i,e[a],a,r))){return true}}return false}},!ot(r.some));var ft=false;if(r.reduce){ft=typeof r.reduce.call("es5",function(t,r,e,n){return n})==="object"}P(r,{reduce:function reduce(t){var r=z.ToObject(this);var e=at&&N(this)?Q(this,""):r;var n=z.ToUint32(e.length);if(!D(t)){throw new TypeError("Array.prototype.reduce callback must be a function")}if(n===0&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var i=0;var a;if(arguments.length>=2){a=arguments[1]}else{do{if(i in e){a=e[i++];break}if(++i>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;i<n;i++){if(i in e){a=t(a,e[i],i,r)}}return a}},!ft);var ut=false;if(r.reduceRight){ut=typeof r.reduceRight.call("es5",function(t,r,e,n){return n})==="object"}P(r,{reduceRight:function reduceRight(t){var r=z.ToObject(this);var e=at&&N(this)?Q(this,""):r;var n=z.ToUint32(e.length);if(!D(t)){throw new TypeError("Array.prototype.reduceRight callback must be a function")}if(n===0&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var i;var a=n-1;if(arguments.length>=2){i=arguments[1]}else{do{if(a in e){i=e[a--];break}if(--a<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(a<0){return i}do{if(a in e){i=t(i,e[a],a,r)}}while(a--);return i}},!ut);var lt=r.indexOf&&[0,1].indexOf(1,2)!==-1;P(r,{indexOf:function indexOf(t){var r=at&&N(this)?Q(this,""):z.ToObject(this);var e=z.ToUint32(r.length);if(e===0){return-1}var n=0;if(arguments.length>1){n=z.ToInteger(arguments[1])}n=n>=0?n:w(0,e+n);for(;n<e;n++){if(n in r&&r[n]===t){return n}}return-1}},lt);var st=r.lastIndexOf&&[0,1].lastIndexOf(0,-3)!==-1;P(r,{lastIndexOf:function lastIndexOf(t){var r=at&&N(this)?Q(this,""):z.ToObject(this);var e=z.ToUint32(r.length);if(e===0){return-1}var n=e-1;if(arguments.length>1){n=b(n,z.ToInteger(arguments[1]))}n=n>=0?n:e-Math.abs(n);for(;n>=0;n--){if(n in r&&t===r[n]){return n}}return-1}},st);var ct=function(){var t=[1,2];var r=t.splice();return t.length===2&&et(r)&&r.length===0}();P(r,{splice:function splice(t,r){if(arguments.length===0){return[]}else{return c.apply(this,arguments)}}},!ct);var vt=function(){var t={};r.splice.call(t,0,0,1);return t.length===1}();P(r,{splice:function splice(t,r){if(arguments.length===0){return[]}var e=arguments;this.length=w(z.ToInteger(this.length),0);if(arguments.length>0&&typeof r!=="number"){e=W(arguments);if(e.length<2){_(e,this.length-t)}else{e[1]=z.ToInteger(r)}}return c.apply(this,e)}},!vt);var ht=function(){var r=new t(1e5);r[8]="x";r.splice(1,1);return r.indexOf("x")===7}();var pt=function(){var t=256;var r=[];r[t]="a";r.splice(t+1,0,"b");return r[t]==="a"}();P(r,{splice:function splice(t,r){var e=z.ToObject(this);var n=[];var i=z.ToUint32(e.length);var a=z.ToInteger(t);var f=a<0?w(i+a,0):b(a,i);var u=arguments.length===0?0:arguments.length===1?i-f:b(w(z.ToInteger(r),0),i-f);var l=0;var s;while(l<u){s=o(f+l);if(G(e,s)){n[l]=e[s]}l+=1}var c=W(arguments,2);var v=c.length;var h;if(v<u){l=f;var p=i-u;while(l<p){s=o(l+u);h=o(l+v);if(G(e,s)){e[h]=e[s]}else{delete e[h]}l+=1}l=i;var y=i-u+v;while(l>y){delete e[l-1];l-=1}}else if(v>u){l=i-u;while(l>f){s=o(l+u-1);h=o(l+v-1);if(G(e,s)){e[h]=e[s]}else{delete e[h]}l-=1}}l=f;for(var d=0;d<c.length;++d){e[l]=c[d];l+=1}e.length=i-u+v;return n}},!ht||!pt);var yt=r.join;var dt;try{dt=Array.prototype.join.call("123",",")!=="1,2,3"}catch(X){dt=true}if(dt){P(r,{join:function join(t){var r=typeof t==="undefined"?",":t;return yt.call(N(this)?Q(this,""):this,r)}},dt)}var gt=[1,2].join(undefined)!=="1,2";if(gt){P(r,{join:function join(t){var r=typeof t==="undefined"?",":t;return yt.call(this,r)}},gt)}var wt=function push(t){var r=z.ToObject(this);var e=z.ToUint32(r.length);var n=0;while(n<arguments.length){r[e+n]=arguments[n];n+=1}r.length=e+n;return e+n};var bt=function(){var t={};var r=Array.prototype.push.call(t,undefined);return r!==1||t.length!==1||typeof t[0]!=="undefined"||!G(t,0)}();P(r,{push:function push(t){if(et(this)){return v.apply(this,arguments)}return wt.apply(this,arguments)}},bt);var Tt=function(){var t=[];var r=t.push(undefined);return r!==1||t.length!==1||typeof t[0]!=="undefined"||!G(t,0)}();P(r,{push:wt},Tt);P(r,{slice:function(t,r){var e=N(this)?Q(this,""):this;return B(e,arguments)}},at);var mt=function(){try{[1,2].sort(null)}catch(t){try{[1,2].sort({})}catch(r){return false}}return true}();var Dt=function(){try{[1,2].sort(/a/);return false}catch(t){}return true}();var St=function(){try{[1,2].sort(undefined);return true}catch(t){}return false}();P(r,{sort:function sort(t){if(typeof t==="undefined"){return rt(this)}if(!D(t)){throw new TypeError("Array.prototype.sort callback must be a function")}return rt(this,t)}},mt||!St||!Dt);var xt=!tt({toString:null},"toString");var Ot=tt(function(){},"prototype");var Et=!G("x","0");var jt=function(t){var r=t.constructor;return r&&r.prototype===t};var It={$applicationCache:true,$console:true,$external:true,$frame:true,$frameElement:true,$frames:true,$innerHeight:true,$innerWidth:true,$onmozfullscreenchange:true,$onmozfullscreenerror:true,$outerHeight:true,$outerWidth:true,$pageXOffset:true,$pageYOffset:true,$parent:true,$scrollLeft:true,$scrollTop:true,$scrollX:true,$scrollY:true,$self:true,$webkitIndexedDB:true,$webkitStorageInfo:true,$window:true,$width:true,$height:true,$top:true,$localStorage:true};var Mt=function(){if(typeof window==="undefined"){return false}for(var t in window){try{if(!It["$"+t]&&G(window,t)&&window[t]!==null&&typeof window[t]==="object"){jt(window[t])}}catch(r){return true}}return false}();var Ut=function(t){if(typeof window==="undefined"||!Mt){return jt(t)}try{return jt(t)}catch(r){return false}};var $t=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];var Ft=$t.length;var Nt=function isArguments(t){return H(t)==="[object Arguments]"};var Ct=function isArguments(t){return t!==null&&typeof t==="object"&&typeof t.length==="number"&&t.length>=0&&!et(t)&&D(t.callee)};var kt=Nt(arguments)?Nt:Ct;P(e,{keys:function keys(t){var r=D(t);var e=kt(t);var n=t!==null&&typeof t==="object";var i=n&&N(t);if(!n&&!r&&!e){throw new TypeError("Object.keys called on a non-object")}var a=[];var f=Ot&&r;if(i&&Et||e){for(var u=0;u<t.length;++u){_(a,o(u))}}if(!e){for(var l in t){if(!(f&&l==="prototype")&&G(t,l)){_(a,o(l))}}}if(xt){var s=Ut(t);for(var c=0;c<Ft;c++){var v=$t[c];if(!(s&&v==="constructor")&&G(t,v)){_(a,v)}}}return a}});var At=e.keys&&function(){return e.keys(arguments).length===2}(1,2);var Rt=e.keys&&function(){var t=e.keys(arguments);return arguments.length!==1||t.length!==1||t[0]!==1}(1);var Pt=e.keys;P(e,{keys:function keys(t){if(kt(t)){return Pt(W(t))}else{return Pt(t)}}},!At||Rt);var Jt=new Date(-0xc782b5b342b24).getUTCMonth()!==0;var Yt=new Date(-0x55d318d56a724);var zt=new Date(14496624e5);var Zt=Yt.toUTCString()!=="Mon, 01 Jan -45875 11:59:59 GMT";var Gt;var Ht;var Wt=Yt.getTimezoneOffset();if(Wt<-720){Gt=Yt.toDateString()!=="Tue Jan 02 -45875";Ht=!/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(zt))}else{Gt=Yt.toDateString()!=="Mon Jan 01 -45875";Ht=!/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(zt))}var Bt=d.bind(Date.prototype.getFullYear);var Xt=d.bind(Date.prototype.getMonth);var Lt=d.bind(Date.prototype.getDate);var qt=d.bind(Date.prototype.getUTCFullYear);var Kt=d.bind(Date.prototype.getUTCMonth);var Qt=d.bind(Date.prototype.getUTCDate);var Vt=d.bind(Date.prototype.getUTCDay);var _t=d.bind(Date.prototype.getUTCHours);var tr=d.bind(Date.prototype.getUTCMinutes);var rr=d.bind(Date.prototype.getUTCSeconds);var er=d.bind(Date.prototype.getUTCMilliseconds);var nr=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];var ir=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var ar=function daysInMonth(t,r){return Lt(new Date(r,t,0))};P(Date.prototype,{getFullYear:function getFullYear(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Bt(this);if(t<0&&Xt(this)>11){return t+1}return t},getMonth:function getMonth(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Bt(this);var r=Xt(this);if(t<0&&r>11){return 0}return r},getDate:function getDate(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Bt(this);var r=Xt(this);var e=Lt(this);if(t<0&&r>11){if(r===12){return e}var n=ar(0,t+1);return n-e+1}return e},getUTCFullYear:function getUTCFullYear(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=qt(this);if(t<0&&Kt(this)>11){return t+1}return t},getUTCMonth:function getUTCMonth(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=qt(this);var r=Kt(this);if(t<0&&r>11){return 0}return r},getUTCDate:function getUTCDate(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=qt(this);var r=Kt(this);var e=Qt(this);if(t<0&&r>11){if(r===12){return e}var n=ar(0,t+1);return n-e+1}return e}},Jt);P(Date.prototype,{toUTCString:function toUTCString(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Vt(this);var r=Qt(this);var e=Kt(this);var n=qt(this);var i=_t(this);var a=tr(this);var o=rr(this);return nr[t]+", "+(r<10?"0"+r:r)+" "+ir[e]+" "+n+" "+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)+":"+(o<10?"0"+o:o)+" GMT"}},Jt||Zt);P(Date.prototype,{toDateString:function toDateString(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=this.getDay();var r=this.getDate();var e=this.getMonth();var n=this.getFullYear();return nr[t]+" "+ir[e]+" "+(r<10?"0"+r:r)+" "+n}},Jt||Gt);if(Jt||Ht){Date.prototype.toString=function toString(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=this.getDay();var r=this.getDate();var e=this.getMonth();var n=this.getFullYear();var i=this.getHours();var a=this.getMinutes();var o=this.getSeconds();var f=this.getTimezoneOffset();var u=Math.floor(Math.abs(f)/60);var l=Math.floor(Math.abs(f)%60);return nr[t]+" "+ir[e]+" "+(r<10?"0"+r:r)+" "+n+" "+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)+":"+(o<10?"0"+o:o)+" GMT"+(f>0?"-":"+")+(u<10?"0"+u:u)+(l<10?"0"+l:l)};if(R){e.defineProperty(Date.prototype,"toString",{configurable:true,enumerable:false,writable:true})}}var or=-621987552e5;var fr="-000001";var ur=Date.prototype.toISOString&&new Date(or).toISOString().indexOf(fr)===-1;var lr=Date.prototype.toISOString&&new Date(-1).toISOString()!=="1969-12-31T23:59:59.999Z";var sr=d.bind(Date.prototype.getTime);P(Date.prototype,{toISOString:function toISOString(){if(!isFinite(this)||!isFinite(sr(this))){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}var t=qt(this);var r=Kt(this);t+=Math.floor(r/12);r=(r%12+12)%12;var e=[r+1,Qt(this),_t(this),tr(this),rr(this)];t=(t<0?"-":t>9999?"+":"")+K("00000"+Math.abs(t),0<=t&&t<=9999?-4:-6);for(var n=0;n<e.length;++n){e[n]=K("00"+e[n],-2)}return t+"-"+W(e,0,2).join("-")+"T"+W(e,2).join(":")+"."+K("000"+er(this),-3)+"Z"}},ur||lr);var cr=function(){try{return Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(or).toJSON().indexOf(fr)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(t){return false}}();if(!cr){Date.prototype.toJSON=function toJSON(t){var r=e(this);var n=z.ToPrimitive(r);if(typeof n==="number"&&!isFinite(n)){return null}var i=r.toISOString;if(!D(i)){throw new TypeError("toISOString property is not callable")}return i.call(r)}}var vr=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var hr=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z"));var pr=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(pr||hr||!vr){var yr=Math.pow(2,31)-1;var dr=Y(new Date(1970,0,1,0,0,0,yr+1).getTime());Date=function(t){var r=function Date(e,n,i,a,f,u,l){var s=arguments.length;var c;if(this instanceof t){var v=u;var h=l;if(dr&&s>=7&&l>yr){var p=Math.floor(l/yr)*yr;var y=Math.floor(p/1e3);v+=y;h-=y*1e3}c=s===1&&o(e)===e?new t(r.parse(e)):s>=7?new t(e,n,i,a,f,v,h):s>=6?new t(e,n,i,a,f,v):s>=5?new t(e,n,i,a,f):s>=4?new t(e,n,i,a):s>=3?new t(e,n,i):s>=2?new t(e,n):s>=1?new t(e instanceof t?+e:e):new t}else{c=t.apply(this,arguments)}if(!J(c)){P(c,{constructor:r},true)}return c};var e=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];var i=function dayFromMonth(t,r){var e=r>1?1:0;return n[r]+Math.floor((t-1969+e)/4)-Math.floor((t-1901+e)/100)+Math.floor((t-1601+e)/400)+365*(t-1970)};var a=function toUTC(r){var e=0;var n=r;if(dr&&n>yr){var i=Math.floor(n/yr)*yr;var a=Math.floor(i/1e3);e+=a;n-=a*1e3}return u(new t(1970,0,1,0,0,e,n))};for(var f in t){if(G(t,f)){r[f]=t[f]}}P(r,{now:t.now,UTC:t.UTC},true);r.prototype=t.prototype;P(r.prototype,{constructor:r},true);var l=function parse(r){var n=e.exec(r);if(n){var o=u(n[1]),f=u(n[2]||1)-1,l=u(n[3]||1)-1,s=u(n[4]||0),c=u(n[5]||0),v=u(n[6]||0),h=Math.floor(u(n[7]||0)*1e3),p=Boolean(n[4]&&!n[8]),y=n[9]==="-"?1:-1,d=u(n[10]||0),g=u(n[11]||0),w;var b=c>0||v>0||h>0;if(s<(b?24:25)&&c<60&&v<60&&h<1e3&&f>-1&&f<12&&d<24&&g<60&&l>-1&&l<i(o,f+1)-i(o,f)){w=((i(o,f)+l)*24+s+d*y)*60;w=((w+c+g*y)*60+v)*1e3+h;if(p){w=a(w)}if(-864e13<=w&&w<=864e13){return w}}return NaN}return t.parse.apply(this,arguments)};P(r,{parse:l});return r}(Date)}if(!Date.now){Date.now=function now(){return(new Date).getTime()}}var gr=l.toFixed&&(8e-5.toFixed(3)!=="0.000"||.9.toFixed(0)!=="1"||1.255.toFixed(2)!=="1.25"||(1000000000000000128).toFixed(0)!=="1000000000000000128");var wr={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function multiply(t,r){var e=-1;var n=r;while(++e<wr.size){n+=t*wr.data[e];wr.data[e]=n%wr.base;n=Math.floor(n/wr.base)}},divide:function divide(t){var r=wr.size;var e=0;while(--r>=0){e+=wr.data[r];wr.data[r]=Math.floor(e/t);e=e%t*wr.base}},numToString:function numToString(){var t=wr.size;var r="";while(--t>=0){if(r!==""||t===0||wr.data[t]!==0){var e=o(wr.data[t]);if(r===""){r=e}else{r+=K("0000000",0,7-e.length)+e}}}return r},pow:function pow(t,r,e){return r===0?e:r%2===1?pow(t,r-1,e*t):pow(t*t,r/2,e)},log:function log(t){var r=0;var e=t;while(e>=4096){r+=12;e/=4096}while(e>=2){r+=1;e/=2}return r}};var br=function toFixed(t){var r,e,n,i,a,f,l,s;r=u(t);r=Y(r)?0:Math.floor(r);if(r<0||r>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}e=u(this);if(Y(e)){return"NaN"}if(e<=-1e21||e>=1e21){return o(e)}n="";if(e<0){n="-";e=-e}i="0";if(e>1e-21){a=wr.log(e*wr.pow(2,69,1))-69;f=a<0?e*wr.pow(2,-a,1):e/wr.pow(2,a,1);f*=4503599627370496;a=52-a;if(a>0){wr.multiply(0,f);l=r;while(l>=7){wr.multiply(1e7,0);l-=7}wr.multiply(wr.pow(10,l,1),0);l=a-1;while(l>=23){wr.divide(1<<23);l-=23}wr.divide(1<<l);wr.multiply(1,1);wr.divide(2);i=wr.numToString()}else{wr.multiply(0,f);wr.multiply(1<<-a,0);i=wr.numToString()+K("0.00000000000000000000",2,2+r)}}if(r>0){s=i.length;if(s<=r){i=n+K("0.0000000000000000000",0,r-s+2)+i}else{i=n+K(i,0,s-r)+"."+K(i,s-r)}}else{i=n+i}return i};P(l,{toFixed:br},gr);var Tr=function(){try{return 1..toPrecision(undefined)==="1"}catch(t){return true}}();var mr=l.toPrecision;P(l,{toPrecision:function toPrecision(t){return typeof t==="undefined"?mr.call(this):mr.call(this,t)}},Tr);if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var t=typeof/()??/.exec("")[1]==="undefined";var r=Math.pow(2,32)-1;f.split=function(e,n){var i=String(this);if(typeof e==="undefined"&&n===0){return[]}if(!M(e)){return Q(this,e,n)}var a=[];var o=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,u,l,s,c;var h=new RegExp(e.source,o+"g");if(!t){u=new RegExp("^"+h.source+"$(?!\\s)",o)}var p=typeof n==="undefined"?r:z.ToUint32(n);l=h.exec(i);while(l){s=l.index+l[0].length;if(s>f){_(a,K(i,f,l.index));if(!t&&l.length>1){l[0].replace(u,function(){for(var t=1;t<arguments.length-2;t++){if(typeof arguments[t]==="undefined"){l[t]=void 0}}})}if(l.length>1&&l.index<i.length){v.apply(a,W(l,1))}c=l[0].length;f=s;if(a.length>=p){break}}if(h.lastIndex===l.index){h.lastIndex++}l=h.exec(i)}if(f===i.length){if(c||!h.test("")){_(a,"")}}else{_(a,K(i,f))}return a.length>p?W(a,0,p):a}})()}else if("0".split(void 0,0).length){f.split=function split(t,r){if(typeof t==="undefined"&&r===0){return[]}return Q(this,t,r)}}var Dr=f.replace;var Sr=function(){var t=[];"x".replace(/x(.)?/g,function(r,e){_(t,e)});return t.length===1&&typeof t[0]==="undefined"}();if(!Sr){f.replace=function replace(t,r){var e=D(r);var n=M(t)&&/\)[*?]/.test(t.source);if(!e||!n){return Dr.call(this,t,r)}else{var i=function(e){var n=arguments.length;var i=t.lastIndex;t.lastIndex=0;var a=t.exec(e)||[];t.lastIndex=i;_(a,arguments[n-2],arguments[n-1]);return r.apply(this,a)};return Dr.call(this,t,i)}}}var xr=f.substr;var Or="".substr&&"0b".substr(-1)!=="b";P(f,{substr:function substr(t,r){var e=t;if(t<0){e=w(this.length+t,0)}return xr.call(this,e,r)}},Or);var Er="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var jr="\u200b";var Ir="["+Er+"]";var Mr=new RegExp("^"+Ir+Ir+"*");var Ur=new RegExp(Ir+Ir+"*$");var $r=f.trim&&(Er.trim()||!jr.trim());P(f,{trim:function trim(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}return o(this).replace(Mr,"").replace(Ur,"")}},$r);var Fr=d.bind(String.prototype.trim);var Nr=f.lastIndexOf&&"abc\u3042\u3044".lastIndexOf("\u3042\u3044",2)!==-1;P(f,{lastIndexOf:function lastIndexOf(t){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}var r=o(this);var e=o(t);var n=arguments.length>1?u(arguments[1]):NaN;var i=Y(n)?Infinity:z.ToInteger(n);var a=b(w(i,0),r.length);var f=e.length;var l=a+f;while(l>0){l=w(0,l-f);var s=V(K(r,l,a+f),e);if(s!==-1){return l+s}}return-1}},Nr);var Cr=f.lastIndexOf;P(f,{lastIndexOf:function lastIndexOf(t){return Cr.apply(this,arguments)}},f.lastIndexOf.length!==1);if(parseInt(Er+"08")!==8||parseInt(Er+"0x16")!==22){parseInt=function(t){var r=/^[-+]?0[xX]/;return function parseInt(e,n){if(typeof e==="symbol"){""+e}var i=Fr(String(e));var a=u(n)||(r.test(i)?16:10);return t(i,a)}}(parseInt)}if(1/parseFloat("-0")!==-Infinity){parseFloat=function(t){return function parseFloat(r){var e=Fr(String(r));var n=t(e);return n===0&&K(e,0,1)==="-"?-0:n}}(parseFloat)}if(String(new RangeError("test"))!=="RangeError: test"){var kr=function toString(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}var t=this.name;if(typeof t==="undefined"){t="Error"}else if(typeof t!=="string"){t=o(t)}var r=this.message;if(typeof r==="undefined"){r=""}else if(typeof r!=="string"){r=o(r)}if(!t){return r}if(!r){return t}return t+": "+r};Error.prototype.toString=kr}if(R){var Ar=function(t,r){if(tt(t,r)){var e=Object.getOwnPropertyDescriptor(t,r);if(e.configurable){e.enumerable=false;Object.defineProperty(t,r,e)}}};Ar(Error.prototype,"message");if(Error.prototype.message!==""){Error.prototype.message=""}Ar(Error.prototype,"name")}if(String(/a/gim)!=="/a/gim"){var Rr=function toString(){var t="/"+this.source+"/";if(this.global){t+="g"}if(this.ignoreCase){t+="i"}if(this.multiline){t+="m"}return t};RegExp.prototype.toString=Rr}}); /*! * https://github.com/paulmillr/es6-shim * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com) * and contributors, MIT License * es6-shim: v0.35.4 * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE * Details and documentation: * https://github.com/paulmillr/es6-shim/ */ (function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{return e()}catch(t){return false}};var u=o(i);var f=function(){return!i(function(){return Object.defineProperty({},"x",{get:function(){}})})};var s=!!Object.defineProperty&&f();var c=function foo(){}.name==="foo";var l=Function.call.bind(Array.prototype.forEach);var p=Function.call.bind(Array.prototype.reduce);var v=Function.call.bind(Array.prototype.filter);var y=Function.call.bind(Array.prototype.some);var h=function(e,t,r,n){if(!n&&t in e){return}if(s){Object.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:r})}else{e[t]=r}};var b=function(e,t,r){l(n(t),function(n){var o=t[n];h(e,n,o,!!r)})};var g=Function.call.bind(Object.prototype.toString);var d=typeof/abc/==="function"?function IsCallableSlow(e){return typeof e==="function"&&g(e)==="[object Function]"}:function IsCallableFast(e){return typeof e==="function"};var m={getter:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}Object.defineProperty(e,t,{configurable:true,enumerable:false,get:r})},proxy:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,{configurable:n.configurable,enumerable:n.enumerable,get:function getKey(){return e[t]},set:function setKey(r){e[t]=r}})},redefine:function(e,t,r){if(s){var n=Object.getOwnPropertyDescriptor(e,t);n.value=r;Object.defineProperty(e,t,n)}else{e[t]=r}},defineByDescriptor:function(e,t,r){if(s){Object.defineProperty(e,t,r)}else if("value"in r){e[t]=r.value}},preserveToString:function(e,t){if(t&&d(t.toString)){h(e,"toString",t.toString.bind(t),true)}}};var O=Object.create||function(e,t){var r=function Prototype(){};r.prototype=e;var o=new r;if(typeof t!=="undefined"){n(t).forEach(function(e){m.defineByDescriptor(o,e,t[e])})}return o};var w=function(e,t){if(!Object.setPrototypeOf){return false}return a(function(){var r=function Subclass(t){var r=new e(t);Object.setPrototypeOf(r,Subclass.prototype);return r};Object.setPrototypeOf(r,e);r.prototype=O(e.prototype,{constructor:{value:r}});return t(r)})};var j=function(){if(typeof self!=="undefined"){return self}if(typeof window!=="undefined"){return window}if(typeof global!=="undefined"){return global}throw new Error("unable to locate global object")};var S=j();var T=S.isFinite;var I=Function.call.bind(String.prototype.indexOf);var E=Function.apply.bind(Array.prototype.indexOf);var P=Function.call.bind(Array.prototype.concat);var C=Function.call.bind(String.prototype.slice);var M=Function.call.bind(Array.prototype.push);var x=Function.apply.bind(Array.prototype.push);var N=Function.call.bind(Array.prototype.shift);var A=Math.max;var R=Math.min;var _=Math.floor;var k=Math.abs;var L=Math.exp;var F=Math.log;var D=Math.sqrt;var z=Function.call.bind(Object.prototype.hasOwnProperty);var q;var W=function(){};var G=S.Map;var H=G&&G.prototype["delete"];var V=G&&G.prototype.get;var B=G&&G.prototype.has;var U=G&&G.prototype.set;var $=S.Symbol||{};var J=$.species||"@@species";var X=Number.isNaN||function isNaN(e){return e!==e};var K=Number.isFinite||function isFinite(e){return typeof e==="number"&&T(e)};var Z=d(Math.sign)?Math.sign:function sign(e){var t=Number(e);if(t===0){return t}if(X(t)){return t}return t<0?-1:1};var Y=function log1p(e){var t=Number(e);if(t<-1||X(t)){return NaN}if(t===0||t===Infinity){return t}if(t===-1){return-Infinity}return 1+t-1===0?t:t*(F(1+t)/(1+t-1))};var Q=function isArguments(e){return g(e)==="[object Arguments]"};var ee=function isArguments(e){return e!==null&&typeof e==="object"&&typeof e.length==="number"&&e.length>=0&&g(e)!=="[object Array]"&&g(e.callee)==="[object Function]"};var te=Q(arguments)?Q:ee;var re={primitive:function(e){return e===null||typeof e!=="function"&&typeof e!=="object"},string:function(e){return g(e)==="[object String]"},regex:function(e){return g(e)==="[object RegExp]"},symbol:function(e){return typeof S.Symbol==="function"&&typeof e==="symbol"}};var ne=function overrideNative(e,t,r){var n=e[t];h(e,t,r,true);m.preserveToString(e[t],n)};var oe=typeof $==="function"&&typeof $["for"]==="function"&&re.symbol($());var ie=re.symbol($.iterator)?$.iterator:"_es6-shim iterator_";if(S.Set&&typeof(new S.Set)["@@iterator"]==="function"){ie="@@iterator"}if(!S.Reflect){h(S,"Reflect",{},true)}var ae=S.Reflect;var ue=String;var fe=typeof document==="undefined"||!document?null:document.all;var se=fe==null?function isNullOrUndefined(e){return e==null}:function isNullOrUndefinedAndNotDocumentAll(e){return e==null&&e!==fe};var ce={Call:function Call(t,r){var n=arguments.length>2?arguments[2]:[];if(!ce.IsCallable(t)){throw new TypeError(t+" is not a function")}return e(t,r,n)},RequireObjectCoercible:function(e,t){if(se(e)){throw new TypeError(t||"Cannot call method on "+e)}return e},TypeIsObject:function(e){if(e===void 0||e===null||e===true||e===false){return false}return typeof e==="function"||typeof e==="object"||e===fe},ToObject:function(e,t){return Object(ce.RequireObjectCoercible(e,t))},IsCallable:d,IsConstructor:function(e){return ce.IsCallable(e)},ToInt32:function(e){return ce.ToNumber(e)>>0},ToUint32:function(e){return ce.ToNumber(e)>>>0},ToNumber:function(e){if(g(e)==="[object Symbol]"){throw new TypeError("Cannot convert a Symbol value to a number")}return+e},ToInteger:function(e){var t=ce.ToNumber(e);if(X(t)){return 0}if(t===0||!K(t)){return t}return(t>0?1:-1)*_(k(t))},ToLength:function(e){var t=ce.ToInteger(e);if(t<=0){return 0}if(t>Number.MAX_SAFE_INTEGER){return Number.MAX_SAFE_INTEGER}return t},SameValue:function(e,t){if(e===t){if(e===0){return 1/e===1/t}return true}return X(e)&&X(t)},SameValueZero:function(e,t){return e===t||X(e)&&X(t)},IsIterable:function(e){return ce.TypeIsObject(e)&&(typeof e[ie]!=="undefined"||te(e))},GetIterator:function(e){if(te(e)){return new q(e,"value")}var t=ce.GetMethod(e,ie);if(!ce.IsCallable(t)){throw new TypeError("value is not an iterable")}var r=ce.Call(t,e);if(!ce.TypeIsObject(r)){throw new TypeError("bad iterator")}return r},GetMethod:function(e,t){var r=ce.ToObject(e)[t];if(se(r)){return void 0}if(!ce.IsCallable(r)){throw new TypeError("Method not callable: "+t)}return r},IteratorComplete:function(e){return!!e.done},IteratorClose:function(e,t){var r=ce.GetMethod(e,"return");if(r===void 0){return}var n,o;try{n=ce.Call(r,e)}catch(i){o=i}if(t){return}if(o){throw o}if(!ce.TypeIsObject(n)){throw new TypeError("Iterator's return method returned a non-object.")}},IteratorNext:function(e){var t=arguments.length>1?e.next(arguments[1]):e.next();if(!ce.TypeIsObject(t)){throw new TypeError("bad iterator")}return t},IteratorStep:function(e){var t=ce.IteratorNext(e);var r=ce.IteratorComplete(t);return r?false:t},Construct:function(e,t,r,n){var o=typeof r==="undefined"?e:r;if(!n&&ae.construct){return ae.construct(e,t,o)}var i=o.prototype;if(!ce.TypeIsObject(i)){i=Object.prototype}var a=O(i);var u=ce.Call(e,a,t);return ce.TypeIsObject(u)?u:a},SpeciesConstructor:function(e,t){var r=e.constructor;if(r===void 0){return t}if(!ce.TypeIsObject(r)){throw new TypeError("Bad constructor")}var n=r[J];if(se(n)){return t}if(!ce.IsConstructor(n)){throw new TypeError("Bad @@species")}return n},CreateHTML:function(e,t,r,n){var o=ce.ToString(e);var i="<"+t;if(r!==""){var a=ce.ToString(n);var u=a.replace(/"/g,""");i+=" "+r+'="'+u+'"'}var f=i+">";var s=f+o;return s+"</"+t+">"},IsRegExp:function IsRegExp(e){if(!ce.TypeIsObject(e)){return false}var t=e[$.match];if(typeof t!=="undefined"){return!!t}return re.regex(e)},ToString:function ToString(e){return ue(e)}};if(s&&oe){var le=function defineWellKnownSymbol(e){if(re.symbol($[e])){return $[e]}var t=$["for"]("Symbol."+e);Object.defineProperty($,e,{configurable:false,enumerable:false,writable:false,value:t});return t};if(!re.symbol($.search)){var pe=le("search");var ve=String.prototype.search;h(RegExp.prototype,pe,function search(e){return ce.Call(ve,e,[this])});var ye=function search(e){var t=ce.RequireObjectCoercible(this);if(!se(e)){var r=ce.GetMethod(e,pe);if(typeof r!=="undefined"){return ce.Call(r,e,[t])}}return ce.Call(ve,t,[ce.ToString(e)])};ne(String.prototype,"search",ye)}if(!re.symbol($.replace)){var he=le("replace");var be=String.prototype.replace;h(RegExp.prototype,he,function replace(e,t){return ce.Call(be,e,[this,t])});var ge=function replace(e,t){var r=ce.RequireObjectCoercible(this);if(!se(e)){var n=ce.GetMethod(e,he);if(typeof n!=="undefined"){return ce.Call(n,e,[r,t])}}return ce.Call(be,r,[ce.ToString(e),t])};ne(String.prototype,"replace",ge)}if(!re.symbol($.split)){var de=le("split");var me=String.prototype.split;h(RegExp.prototype,de,function split(e,t){return ce.Call(me,e,[this,t])});var Oe=function split(e,t){var r=ce.RequireObjectCoercible(this);if(!se(e)){var n=ce.GetMethod(e,de);if(typeof n!=="undefined"){return ce.Call(n,e,[r,t])}}return ce.Call(me,r,[ce.ToString(e),t])};ne(String.prototype,"split",Oe)}var we=re.symbol($.match);var je=we&&function(){var e={};e[$.match]=function(){return 42};return"a".match(e)!==42}();if(!we||je){var Se=le("match");var Te=String.prototype.match;h(RegExp.prototype,Se,function match(e){return ce.Call(Te,e,[this])});var Ie=function match(e){var t=ce.RequireObjectCoercible(this);if(!se(e)){var r=ce.GetMethod(e,Se);if(typeof r!=="undefined"){return ce.Call(r,e,[t])}}return ce.Call(Te,t,[ce.ToString(e)])};ne(String.prototype,"match",Ie)}}var Ee=function wrapConstructor(e,t,r){m.preserveToString(t,e);if(Object.setPrototypeOf){Object.setPrototypeOf(e,t)}if(s){l(Object.getOwnPropertyNames(e),function(n){if(n in W||r[n]){return}m.proxy(e,n,t)})}else{l(Object.keys(e),function(n){if(n in W||r[n]){return}t[n]=e[n]})}t.prototype=e.prototype;m.redefine(e.prototype,"constructor",t)};var Pe=function(){return this};var Ce=function(e){if(s&&!z(e,J)){m.getter(e,J,Pe)}};var Me=function(e,t){var r=t||function iterator(){return this};h(e,ie,r);if(!e[ie]&&re.symbol(ie)){e[ie]=r}};var xe=function createDataProperty(e,t,r){if(s){Object.defineProperty(e,t,{configurable:true,enumerable:true,writable:true,value:r})}else{e[t]=r}};var Ne=function createDataPropertyOrThrow(e,t,r){xe(e,t,r);if(!ce.SameValue(e[t],r)){throw new TypeError("property is nonconfigurable")}};var Ae=function(e,t,r,n){if(!ce.TypeIsObject(e)){throw new TypeError("Constructor requires `new`: "+t.name)}var o=t.prototype;if(!ce.TypeIsObject(o)){o=r}var i=O(o);for(var a in n){if(z(n,a)){var u=n[a];h(i,a,u,true)}}return i};if(String.fromCodePoint&&String.fromCodePoint.length!==1){var Re=String.fromCodePoint;ne(String,"fromCodePoint",function fromCodePoint(e){return ce.Call(Re,this,arguments)})}var _e={fromCodePoint:function fromCodePoint(e){var t=[];var r;for(var n=0,o=arguments.length;n<o;n++){r=Number(arguments[n]);if(!ce.SameValue(r,ce.ToInteger(r))||r<0||r>1114111){throw new RangeError("Invalid code point "+r)}if(r<65536){M(t,String.fromCharCode(r))}else{r-=65536;M(t,String.fromCharCode((r>>10)+55296));M(t,String.fromCharCode(r%1024+56320))}}return t.join("")},raw:function raw(e){var t=ce.ToObject(e,"bad callSite");var r=ce.ToObject(t.raw,"bad raw value");var n=r.length;var o=ce.ToLength(n);if(o<=0){return""}var i=[];var a=0;var u,f,s,c;while(a<o){u=ce.ToString(a);s=ce.ToString(r[u]);M(i,s);if(a+1>=o){break}f=a+1<arguments.length?arguments[a+1]:"";c=ce.ToString(f);M(i,c);a+=1}return i.join("")}};if(String.raw&&String.raw({raw:{0:"x",1:"y",length:2}})!=="xy"){ne(String,"raw",_e.raw)}b(String,_e);var ke=function repeat(e,t){if(t<1){return""}if(t%2){return repeat(e,t-1)+e}var r=repeat(e,t/2);return r+r};var Le=Infinity;var Fe={repeat:function repeat(e){var t=ce.ToString(ce.RequireObjectCoercible(this));var r=ce.ToInteger(e);if(r<0||r>=Le){throw new RangeError("repeat count must be less than infinity and not overflow maximum string size")}return ke(t,r)},startsWith:function startsWith(e){var t=ce.ToString(ce.RequireObjectCoercible(this));if(ce.IsRegExp(e)){throw new TypeError('Cannot call method "startsWith" with a regex')}var r=ce.ToString(e);var n;if(arguments.length>1){n=arguments[1]}var o=A(ce.ToInteger(n),0);return C(t,o,o+r.length)===r},endsWith:function endsWith(e){var t=ce.ToString(ce.RequireObjectCoercible(this));if(ce.IsRegExp(e)){throw new TypeError('Cannot call method "endsWith" with a regex')}var r=ce.ToString(e);var n=t.length;var o;if(arguments.length>1){o=arguments[1]}var i=typeof o==="undefined"?n:ce.ToInteger(o);var a=R(A(i,0),n);return C(t,a-r.length,a)===r},includes:function includes(e){if(ce.IsRegExp(e)){throw new TypeError('"includes" does not accept a RegExp')}var t=ce.ToString(e);var r;if(arguments.length>1){r=arguments[1]}return I(this,t,r)!==-1},codePointAt:function codePointAt(e){var t=ce.ToString(ce.RequireObjectCoercible(this));var r=ce.ToInteger(e);var n=t.length;if(r>=0&&r<n){var o=t.charCodeAt(r);var i=r+1===n;if(o<55296||o>56319||i){return o}var a=t.charCodeAt(r+1);if(a<56320||a>57343){return o}return(o-55296)*1024+(a-56320)+65536}}};if(String.prototype.includes&&"a".includes("a",Infinity)!==false){ne(String.prototype,"includes",Fe.includes)}if(String.prototype.startsWith&&String.prototype.endsWith){var De=i(function(){return"/a/".startsWith(/a/)});var ze=a(function(){return"abc".startsWith("a",Infinity)===false});if(!De||!ze){ne(String.prototype,"startsWith",Fe.startsWith);ne(String.prototype,"endsWith",Fe.endsWith)}}if(oe){var qe=a(function(){var e=/a/;e[$.match]=false;return"/a/".startsWith(e)});if(!qe){ne(String.prototype,"startsWith",Fe.startsWith)}var We=a(function(){var e=/a/;e[$.match]=false;return"/a/".endsWith(e)});if(!We){ne(String.prototype,"endsWith",Fe.endsWith)}var Ge=a(function(){var e=/a/;e[$.match]=false;return"/a/".includes(e)});if(!Ge){ne(String.prototype,"includes",Fe.includes)}}b(String.prototype,Fe);var He=["\t\n\x0B\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003","\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028","\u2029\ufeff"].join("");var Ve=new RegExp("(^["+He+"]+)|(["+He+"]+$)","g");var Be=function trim(){return ce.ToString(ce.RequireObjectCoercible(this)).replace(Ve,"")};var Ue=["\x85","\u200b","\ufffe"].join("");var $e=new RegExp("["+Ue+"]","g");var Je=/^[-+]0x[0-9a-f]+$/i;var Xe=Ue.trim().length!==Ue.length;h(String.prototype,"trim",Be,Xe);var Ke=function(e){return{value:e,done:arguments.length===0}};var Ze=function(e){ce.RequireObjectCoercible(e);this._s=ce.ToString(e);this._i=0};Ze.prototype.next=function(){var e=this._s;var t=this._i;if(typeof e==="undefined"||t>=e.length){this._s=void 0;return Ke()}var r=e.charCodeAt(t);var n,o;if(r<55296||r>56319||t+1===e.length){o=1}else{n=e.charCodeAt(t+1);o=n<56320||n>57343?1:2}this._i=t+o;return Ke(e.substr(t,o))};Me(Ze.prototype);Me(String.prototype,function(){return new Ze(this)});var Ye={from:function from(e){var r=this;var n;if(arguments.length>1){n=arguments[1]}var o,i;if(typeof n==="undefined"){o=false}else{if(!ce.IsCallable(n)){throw new TypeError("Array.from: when provided, the second argument must be a function")}if(arguments.length>2){i=arguments[2]}o=true}var a=typeof(te(e)||ce.GetMethod(e,ie))!=="undefined";var u,f,s;if(a){f=ce.IsConstructor(r)?Object(new r):[];var c=ce.GetIterator(e);var l,p;s=0;while(true){l=ce.IteratorStep(c);if(l===false){break}p=l.value;try{if(o){p=typeof i==="undefined"?n(p,s):t(n,i,p,s)}f[s]=p}catch(v){ce.IteratorClose(c,true);throw v}s+=1}u=s}else{var y=ce.ToObject(e);u=ce.ToLength(y.length);f=ce.IsConstructor(r)?Object(new r(u)):new Array(u);var h;for(s=0;s<u;++s){h=y[s];if(o){h=typeof i==="undefined"?n(h,s):t(n,i,h,s)}Ne(f,s,h)}}f.length=u;return f},of:function of(){var e=arguments.length;var t=this;var n=r(t)||!ce.IsCallable(t)?new Array(e):ce.Construct(t,[e]);for(var o=0;o<e;++o){Ne(n,o,arguments[o])}n.length=e;return n}};b(Array,Ye);Ce(Array);q=function(e,t){this.i=0;this.array=e;this.kind=t};b(q.prototype,{next:function(){var e=this.i;var t=this.array;if(!(this instanceof q)){throw new TypeError("Not an ArrayIterator")}if(typeof t!=="undefined"){var r=ce.ToLength(t.length);for(;e<r;e++){var n=this.kind;var o;if(n==="key"){o=e}else if(n==="value"){o=t[e]}else if(n==="entry"){o=[e,t[e]]}this.i=e+1;return Ke(o)}}this.array=void 0;return Ke()}});Me(q.prototype);var Qe=Array.of===Ye.of||function(){var e=function Foo(e){this.length=e};e.prototype=[];var t=Array.of.apply(e,[1,2]);return t instanceof e&&t.length===2}();if(!Qe){ne(Array,"of",Ye.of)}var et={copyWithin:function copyWithin(e,t){var r=ce.ToObject(this);var n=ce.ToLength(r.length);var o=ce.ToInteger(e);var i=ce.ToInteger(t);var a=o<0?A(n+o,0):R(o,n);var u=i<0?A(n+i,0):R(i,n);var f;if(arguments.length>2){f=arguments[2]}var s=typeof f==="undefined"?n:ce.ToInteger(f);var c=s<0?A(n+s,0):R(s,n);var l=R(c-u,n-a);var p=1;if(u<a&&a<u+l){p=-1;u+=l-1;a+=l-1}while(l>0){if(u in r){r[a]=r[u]}else{delete r[a]}u+=p;a+=p;l-=1}return r},fill:function fill(e){var t;if(arguments.length>1){t=arguments[1]}var r;if(arguments.length>2){r=arguments[2]}var n=ce.ToObject(this);var o=ce.ToLength(n.length);t=ce.ToInteger(typeof t==="undefined"?0:t);r=ce.ToInteger(typeof r==="undefined"?o:r);var i=t<0?A(o+t,0):R(t,o);var a=r<0?o+r:r;for(var u=i;u<o&&u<a;++u){n[u]=e}return n},find:function find(e){var r=ce.ToObject(this);var n=ce.ToLength(r.length);if(!ce.IsCallable(e)){throw new TypeError("Array#find: predicate must be a function")}var o=arguments.length>1?arguments[1]:null;for(var i=0,a;i<n;i++){a=r[i];if(o){if(t(e,o,a,i,r)){return a}}else if(e(a,i,r)){return a}}},findIndex:function findIndex(e){var r=ce.ToObject(this);var n=ce.ToLength(r.length);if(!ce.IsCallable(e)){throw new TypeError("Array#findIndex: predicate must be a function")}var o=arguments.length>1?arguments[1]:null;for(var i=0;i<n;i++){if(o){if(t(e,o,r[i],i,r)){return i}}else if(e(r[i],i,r)){return i}}return-1},keys:function keys(){return new q(this,"key")},values:function values(){return new q(this,"value")},entries:function entries(){return new q(this,"entry")}};if(Array.prototype.keys&&!ce.IsCallable([1].keys().next)){delete Array.prototype.keys}if(Array.prototype.entries&&!ce.IsCallable([1].entries().next)){delete Array.prototype.entries}if(Array.prototype.keys&&Array.prototype.entries&&!Array.prototype.values&&Array.prototype[ie]){b(Array.prototype,{values:Array.prototype[ie]});if(re.symbol($.unscopables)){Array.prototype[$.unscopables].values=true}}if(c&&Array.prototype.values&&Array.prototype.values.name!=="values"){var tt=Array.prototype.values;ne(Array.prototype,"values",function values(){return ce.Call(tt,this,arguments)});h(Array.prototype,ie,Array.prototype.values,true)}b(Array.prototype,et);if(1/[true].indexOf(true,-0)<0){h(Array.prototype,"indexOf",function indexOf(e){var t=E(this,arguments);if(t===0&&1/t<0){return 0}return t},true)}Me(Array.prototype,function(){return this.values()});if(Object.getPrototypeOf){Me(Object.getPrototypeOf([].values()))}var rt=function(){return a(function(){return Array.from({length:-1}).length===0})}();var nt=function(){var e=Array.from([0].entries());return e.length===1&&r(e[0])&&e[0][0]===0&&e[0][1]===0}();if(!rt||!nt){ne(Array,"from",Ye.from)}var ot=function(){return a(function(){return Array.from([0],void 0)})}();if(!ot){var it=Array.from;ne(Array,"from",function from(e){if(arguments.length>1&&typeof arguments[1]!=="undefined"){return ce.Call(it,this,arguments)}else{return t(it,this,e)}})}var at=-(Math.pow(2,32)-1);var ut=function(e,r){var n={length:at};n[r?(n.length>>>0)-1:0]=true;return a(function(){t(e,n,function(){throw new RangeError("should not reach here")},[]);return true})};if(!ut(Array.prototype.forEach)){var ft=Array.prototype.forEach;ne(Array.prototype,"forEach",function forEach(e){return ce.Call(ft,this.length>=0?this:[],arguments)},true)}if(!ut(Array.prototype.map)){var st=Array.prototype.map;ne(Array.prototype,"map",function map(e){return ce.Call(st,this.length>=0?this:[],arguments)},true)}if(!ut(Array.prototype.filter)){var ct=Array.prototype.filter;ne(Array.prototype,"filter",function filter(e){return ce.Call(ct,this.length>=0?this:[],arguments)},true)}if(!ut(Array.prototype.some)){var lt=Array.prototype.some;ne(Array.prototype,"some",function some(e){return ce.Call(lt,this.length>=0?this:[],arguments)},true)}if(!ut(Array.prototype.every)){var pt=Array.prototype.every;ne(Array.prototype,"every",function every(e){return ce.Call(pt,this.length>=0?this:[],arguments)},true)}if(!ut(Array.prototype.reduce)){var vt=Array.prototype.reduce;ne(Array.prototype,"reduce",function reduce(e){return ce.Call(vt,this.length>=0?this:[],arguments)},true)}if(!ut(Array.prototype.reduceRight,true)){var yt=Array.prototype.reduceRight;ne(Array.prototype,"reduceRight",function reduceRight(e){return ce.Call(yt,this.length>=0?this:[],arguments)},true)}var ht=Number("0o10")!==8;var bt=Number("0b10")!==2;var gt=y(Ue,function(e){return Number(e+0+e)===0});if(ht||bt||gt){var dt=Number;var mt=/^0b[01]+$/i;var Ot=/^0o[0-7]+$/i;var wt=mt.test.bind(mt);var jt=Ot.test.bind(Ot);var St=function(e){var t;if(typeof e.valueOf==="function"){t=e.valueOf();if(re.primitive(t)){return t}}if(typeof e.toString==="function"){t=e.toString();if(re.primitive(t)){return t}}throw new TypeError("No default value")};var Tt=$e.test.bind($e);var It=Je.test.bind(Je);var Et=function(){var e=function Number(t){var r;if(arguments.length>0){r=re.primitive(t)?t:St(t,"number")}else{r=0}if(typeof r==="string"){r=ce.Call(Be,r);if(wt(r)){r=parseInt(C(r,2),2)}else if(jt(r)){r=parseInt(C(r,2),8)}else if(Tt(r)||It(r)){r=NaN}}var n=this;var o=a(function(){dt.prototype.valueOf.call(n);return true});if(n instanceof e&&!o){return new dt(r)}return dt(r)};return e}();Ee(dt,Et,{});b(Et,{NaN:dt.NaN,MAX_VALUE:dt.MAX_VALUE,MIN_VALUE:dt.MIN_VALUE,NEGATIVE_INFINITY:dt.NEGATIVE_INFINITY,POSITIVE_INFINITY:dt.POSITIVE_INFINITY});Number=Et;m.redefine(S,"Number",Et)}var Pt=Math.pow(2,53)-1;b(Number,{MAX_SAFE_INTEGER:Pt,MIN_SAFE_INTEGER:-Pt,EPSILON:2.220446049250313e-16,parseInt:S.parseInt,parseFloat:S.parseFloat,isFinite:K,isInteger:function isInteger(e){return K(e)&&ce.ToInteger(e)===e},isSafeInteger:function isSafeInteger(e){return Number.isInteger(e)&&k(e)<=Number.MAX_SAFE_INTEGER},isNaN:X});h(Number,"parseInt",S.parseInt,Number.parseInt!==S.parseInt);if([,1].find(function(){return true})===1){ne(Array.prototype,"find",et.find)}if([,1].findIndex(function(){return true})!==0){ne(Array.prototype,"findIndex",et.findIndex)}var Ct=Function.bind.call(Function.bind,Object.prototype.propertyIsEnumerable);var Mt=function ensureEnumerable(e,t){if(s&&Ct(e,t)){Object.defineProperty(e,t,{enumerable:false})}};var xt=function sliceArgs(){var e=Number(this);var t=arguments.length;var r=t-e;var n=new Array(r<0?0:r);for(var o=e;o<t;++o){n[o-e]=arguments[o]}return n};var Nt=function assignTo(e){return function assignToSource(t,r){t[r]=e[r];return t}};var At=function(e,t){var r=n(Object(t));var o;if(ce.IsCallable(Object.getOwnPropertySymbols)){o=v(Object.getOwnPropertySymbols(Object(t)),Ct(t))}return p(P(r,o||[]),Nt(t),e)};var Rt={assign:function(e,t){var r=ce.ToObject(e,"Cannot convert undefined or null to object");return p(ce.Call(xt,1,arguments),At,r)},is:function is(e,t){return ce.SameValue(e,t)}};var _t=Object.assign&&Object.preventExtensions&&function(){var e=Object.preventExtensions({1:2});try{Object.assign(e,"xy")}catch(t){return e[1]==="y"}}();if(_t){ne(Object,"assign",Rt.assign)}b(Object,Rt);if(s){var kt={setPrototypeOf:function(e,r){var n;var o=function(e,t){if(!ce.TypeIsObject(e)){throw new TypeError("cannot set prototype on a non-object")}if(!(t===null||ce.TypeIsObject(t))){throw new TypeError("can only set prototype to an object or null"+t)}};var i=function(e,r){o(e,r);t(n,e,r);return e};try{n=e.getOwnPropertyDescriptor(e.prototype,r).set;t(n,{},null)}catch(a){if(e.prototype!=={}[r]){return}n=function(e){this[r]=e};i.polyfill=i(i({},null),e.prototype)instanceof e}return i}(Object,"__proto__")};b(Object,kt)}if(Object.setPrototypeOf&&Object.getPrototypeOf&&Object.getPrototypeOf(Object.setPrototypeOf({},null))!==null&&Object.getPrototypeOf(Object.create(null))===null){(function(){var e=Object.create(null);var t=Object.getPrototypeOf;var r=Object.setPrototypeOf;Object.getPrototypeOf=function(r){var n=t(r);return n===e?null:n};Object.setPrototypeOf=function(t,n){var o=n===null?e:n;return r(t,o)};Object.setPrototypeOf.polyfill=false})()}var Lt=!i(function(){return Object.keys("foo")});if(!Lt){var Ft=Object.keys;ne(Object,"keys",function keys(e){return Ft(ce.ToObject(e))});n=Object.keys}var Dt=i(function(){return Object.keys(/a/g)});if(Dt){var zt=Object.keys;ne(Object,"keys",function keys(e){if(re.regex(e)){var t=[];for(var r in e){if(z(e,r)){M(t,r)}}return t}return zt(e)});n=Object.keys}if(Object.getOwnPropertyNames){var qt=!i(function(){return Object.getOwnPropertyNames("foo")});if(!qt){var Wt=typeof window==="object"?Object.getOwnPropertyNames(window):[];var Gt=Object.getOwnPropertyNames;ne(Object,"getOwnPropertyNames",function getOwnPropertyNames(e){var t=ce.ToObject(e);if(g(t)==="[object Window]"){try{return Gt(t)}catch(r){return P([],Wt)}}return Gt(t)})}}if(Object.getOwnPropertyDescriptor){var Ht=!i(function(){return Object.getOwnPropertyDescriptor("foo","bar")});if(!Ht){var Vt=Object.getOwnPropertyDescriptor;ne(Object,"getOwnPropertyDescriptor",function getOwnPropertyDescriptor(e,t){return Vt(ce.ToObject(e),t)})}}if(Object.seal){var Bt=!i(function(){return Object.seal("foo")});if(!Bt){var Ut=Object.seal;ne(Object,"seal",function seal(e){if(!ce.TypeIsObject(e)){return e}return Ut(e)})}}if(Object.isSealed){var $t=!i(function(){return Object.isSealed("foo")});if(!$t){var Jt=Object.isSealed;ne(Object,"isSealed",function isSealed(e){if(!ce.TypeIsObject(e)){return true}return Jt(e)})}}if(Object.freeze){var Xt=!i(function(){return Object.freeze("foo")});if(!Xt){var Kt=Object.freeze;ne(Object,"freeze",function freeze(e){if(!ce.TypeIsObject(e)){return e}return Kt(e)})}}if(Object.isFrozen){var Zt=!i(function(){return Object.isFrozen("foo")});if(!Zt){var Yt=Object.isFrozen;ne(Object,"isFrozen",function isFrozen(e){if(!ce.TypeIsObject(e)){return true}return Yt(e)})}}if(Object.preventExtensions){var Qt=!i(function(){return Object.preventExtensions("foo")});if(!Qt){var er=Object.preventExtensions;ne(Object,"preventExtensions",function preventExtensions(e){if(!ce.TypeIsObject(e)){return e}return er(e)})}}if(Object.isExtensible){var tr=!i(function(){return Object.isExtensible("foo")});if(!tr){var rr=Object.isExtensible;ne(Object,"isExtensible",function isExtensible(e){if(!ce.TypeIsObject(e)){return false}return rr(e)})}}if(Object.getPrototypeOf){var nr=!i(function(){return Object.getPrototypeOf("foo")});if(!nr){var or=Object.getPrototypeOf;ne(Object,"getPrototypeOf",function getPrototypeOf(e){return or(ce.ToObject(e))})}}var ir=s&&function(){var e=Object.getOwnPropertyDescriptor(RegExp.prototype,"flags");return e&&ce.IsCallable(e.get)}();if(s&&!ir){var ar=function flags(){if(!ce.TypeIsObject(this)){throw new TypeError("Method called on incompatible type: must be an object.")}var e="";if(this.global){e+="g"}if(this.ignoreCase){e+="i"}if(this.multiline){e+="m"}if(this.unicode){e+="u"}if(this.sticky){e+="y"}return e};m.getter(RegExp.prototype,"flags",ar)}var ur=s&&a(function(){return String(new RegExp(/a/g,"i"))==="/a/i"});var fr=oe&&s&&function(){var e=/./;e[$.match]=false;return RegExp(e)===e}();var sr=a(function(){return RegExp.prototype.toString.call({source:"abc"})==="/abc/"});var cr=sr&&a(function(){return RegExp.prototype.toString.call({source:"a",flags:"b"})==="/a/b"});if(!sr||!cr){var lr=RegExp.prototype.toString;h(RegExp.prototype,"toString",function toString(){var e=ce.RequireObjectCoercible(this);if(re.regex(e)){return t(lr,e)}var r=ue(e.source);var n=ue(e.flags);return"/"+r+"/"+n},true);m.preserveToString(RegExp.prototype.toString,lr)}if(s&&(!ur||fr)){var pr=Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get;var vr=Object.getOwnPropertyDescriptor(RegExp.prototype,"source")||{};var yr=function(){return this.source};var hr=ce.IsCallable(vr.get)?vr.get:yr;var br=RegExp;var gr=function(){return function RegExp(e,t){var r=ce.IsRegExp(e);var n=this instanceof RegExp;if(!n&&r&&typeof t==="undefined"&&e.constructor===RegExp){return e}var o=e;var i=t;if(re.regex(e)){o=ce.Call(hr,e);i=typeof t==="undefined"?ce.Call(pr,e):t;return new RegExp(o,i)}else if(r){o=e.source;i=typeof t==="undefined"?e.flags:t}return new br(e,t)}}();Ee(br,gr,{$input:true});RegExp=gr;m.redefine(S,"RegExp",gr)}if(s){var dr={input:"$_",lastMatch:"$&",lastParen:"$+",leftContext:"$`",rightContext:"$'"};l(n(dr),function(e){if(e in RegExp&&!(dr[e]in RegExp)){m.getter(RegExp,dr[e],function get(){return RegExp[e]})}})}Ce(RegExp);var mr=1/Number.EPSILON;var Or=function roundTiesToEven(e){return e+mr-mr};var wr=Math.pow(2,-23);var jr=Math.pow(2,127)*(2-wr);var Sr=Math.pow(2,-126);var Tr=Math.E;var Ir=Math.LOG2E;var Er=Math.LOG10E;var Pr=Number.prototype.clz;delete Number.prototype.clz;var Cr={acosh:function acosh(e){var t=Number(e);if(X(t)||e<1){return NaN}if(t===1){return 0}if(t===Infinity){return t}var r=1/(t*t);if(t<2){return Y(t-1+D(1-r)*t)}var n=t/2;return Y(n+D(1-r)*n-1)+1/Ir},asinh:function asinh(e){var t=Number(e);if(t===0||!T(t)){return t}var r=k(t);var n=r*r;var o=Z(t);if(r<1){return o*Y(r+n/(D(n+1)+1))}return o*(Y(r/2+D(1+1/n)*r/2-1)+1/Ir)},atanh:function atanh(e){var t=Number(e);if(t===0){return t}if(t===-1){return-Infinity}if(t===1){return Infinity}if(X(t)||t<-1||t>1){return NaN}var r=k(t);return Z(t)*Y(2*r/(1-r))/2},cbrt:function cbrt(e){var t=Number(e);if(t===0){return t}var r=t<0;var n;if(r){t=-t}if(t===Infinity){n=Infinity}else{n=L(F(t)/3);n=(t/(n*n)+2*n)/3}return r?-n:n},clz32:function clz32(e){var t=Number(e);var r=ce.ToUint32(t);if(r===0){return 32}return Pr?ce.Call(Pr,r):31-_(F(r+.5)*Ir)},cosh:function cosh(e){var t=Number(e);if(t===0){return 1}if(X(t)){return NaN}if(!T(t)){return Infinity}var r=L(k(t)-1);return(r+1/(r*Tr*Tr))*(Tr/2)},expm1:function expm1(e){var t=Number(e);if(t===-Infinity){return-1}if(!T(t)||t===0){return t}if(k(t)>.5){return L(t)-1}var r=t;var n=0;var o=1;while(n+r!==n){n+=r;o+=1;r*=t/o}return n},hypot:function hypot(e,t){var r=0;var n=0;for(var o=0;o<arguments.length;++o){var i=k(Number(arguments[o]));if(n<i){r*=n/i*(n/i);r+=1;n=i}else{r+=i>0?i/n*(i/n):i}}return n===Infinity?Infinity:n*D(r)},log2:function log2(e){return F(e)*Ir},log10:function log10(e){return F(e)*Er},log1p:Y,sign:Z,sinh:function sinh(e){var t=Number(e);if(!T(t)||t===0){return t}var r=k(t);if(r<1){var n=Math.expm1(r);return Z(t)*n*(1+1/(n+1))/2}var o=L(r-1);return Z(t)*(o-1/(o*Tr*Tr))*(Tr/2)},tanh:function tanh(e){var t=Number(e);if(X(t)||t===0){return t}if(t>=20){return 1}if(t<=-20){return-1}return(Math.expm1(t)-Math.expm1(-t))/(L(t)+L(-t))},trunc:function trunc(e){var t=Number(e);return t<0?-_(-t):_(t)},imul:function imul(e,t){var r=ce.ToUint32(e);var n=ce.ToUint32(t);var o=r>>>16&65535;var i=r&65535;var a=n>>>16&65535;var u=n&65535;return i*u+(o*u+i*a<<16>>>0)|0},fround:function fround(e){var t=Number(e);if(t===0||t===Infinity||t===-Infinity||X(t)){return t}var r=Z(t);var n=k(t);if(n<Sr){return r*Or(n/Sr/wr)*Sr*wr}var o=(1+wr/Number.EPSILON)*n;var i=o-(o-n);if(i>jr||X(i)){return r*Infinity}return r*i}};var Mr=function withinULPDistance(e,t,r){return k(1-e/t)/Number.EPSILON<(r||8)};b(Math,Cr);h(Math,"sinh",Cr.sinh,Math.sinh(710)===Infinity);h(Math,"cosh",Cr.cosh,Math.cosh(710)===Infinity);h(Math,"log1p",Cr.log1p,Math.log1p(-1e-17)!==-1e-17);h(Math,"asinh",Cr.asinh,Math.asinh(-1e7)!==-Math.asinh(1e7));h(Math,"asinh",Cr.asinh,Math.asinh(1e300)===Infinity);h(Math,"atanh",Cr.atanh,Math.atanh(1e-300)===0);h(Math,"tanh",Cr.tanh,Math.tanh(-2e-17)!==-2e-17); h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].every(function(e){return Math.round(e)===e});h(Math,"round",function round(e){var t=_(e);var r=t===-1?-0:t+1;return e-t<.5?t:r},!Ar||!kr);m.preserveToString(Math.round,Nr);var Lr=Math.imul;if(Math.imul(4294967295,5)!==-5){Math.imul=Cr.imul;m.preserveToString(Math.imul,Lr)}if(Math.imul.length!==2){ne(Math,"imul",function imul(e,t){return ce.Call(Lr,Math,arguments)})}var Fr=function(){var e=S.setTimeout;if(typeof e!=="function"&&typeof e!=="object"){return}ce.IsPromise=function(e){if(!ce.TypeIsObject(e)){return false}if(typeof e._promise==="undefined"){return false}return true};var r=function(e){if(!ce.IsConstructor(e)){throw new TypeError("Bad promise constructor")}var t=this;var r=function(e,r){if(t.resolve!==void 0||t.reject!==void 0){throw new TypeError("Bad Promise implementation!")}t.resolve=e;t.reject=r};t.resolve=void 0;t.reject=void 0;t.promise=new e(r);if(!(ce.IsCallable(t.resolve)&&ce.IsCallable(t.reject))){throw new TypeError("Bad promise constructor")}};var n;if(typeof window!=="undefined"&&ce.IsCallable(window.postMessage)){n=function(){var e=[];var t="zero-timeout-message";var r=function(r){M(e,r);window.postMessage(t,"*")};var n=function(r){if(r.source===window&&r.data===t){r.stopPropagation();if(e.length===0){return}var n=N(e);n()}};window.addEventListener("message",n,true);return r}}var o=function(){var e=S.Promise;var t=e&&e.resolve&&e.resolve();return t&&function(e){return t.then(e)}};var i=ce.IsCallable(S.setImmediate)?S.setImmediate:typeof process==="object"&&process.nextTick?process.nextTick:o()||(ce.IsCallable(n)?n():function(t){e(t,0)});var a=function(e){return e};var u=function(e){throw e};var f=0;var s=1;var c=2;var l=0;var p=1;var v=2;var y={};var h=function(e,t,r){i(function(){g(e,t,r)})};var g=function(e,t,r){var n,o;if(t===y){return e(r)}try{n=e(r);o=t.resolve}catch(i){n=i;o=t.reject}o(n)};var d=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.fulfillReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o<n;o++,i+=3){h(r[i+l],r[i+v],t);e[i+l]=void 0;e[i+p]=void 0;e[i+v]=void 0}}}r.result=t;r.state=s;r.reactionLength=0};var m=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.rejectReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o<n;o++,i+=3){h(r[i+p],r[i+v],t);e[i+l]=void 0;e[i+p]=void 0;e[i+v]=void 0}}}r.result=t;r.state=c;r.reactionLength=0};var O=function(e){var t=false;var r=function(r){var n;if(t){return}t=true;if(r===e){return m(e,new TypeError("Self resolution"))}if(!ce.TypeIsObject(r)){return d(e,r)}try{n=r.then}catch(o){return m(e,o)}if(!ce.IsCallable(n)){return d(e,r)}i(function(){j(e,r,n)})};var n=function(r){if(t){return}t=true;return m(e,r)};return{resolve:r,reject:n}};var w=function(e,r,n,o){if(e===I){t(e,r,n,o,y)}else{t(e,r,n,o)}};var j=function(e,t,r){var n=O(e);var o=n.resolve;var i=n.reject;try{w(r,t,o,i)}catch(a){i(a)}};var T,I;var E=function(){var e=function Promise(t){if(!(this instanceof e)){throw new TypeError('Constructor Promise requires "new"')}if(this&&this._promise){throw new TypeError("Bad construction")}if(!ce.IsCallable(t)){throw new TypeError("not a valid resolver")}var r=Ae(this,e,T,{_promise:{result:void 0,state:f,reactionLength:0,fulfillReactionHandler0:void 0,rejectReactionHandler0:void 0,reactionCapability0:void 0}});var n=O(r);var o=n.reject;try{t(n.resolve,o)}catch(i){o(i)}return r};return e}();T=E.prototype;var P=function(e,t,r,n){var o=false;return function(i){if(o){return}o=true;t[e]=i;if(--n.count===0){var a=r.resolve;a(t)}}};var C=function(e,t,r){var n=e.iterator;var o=[];var i={count:1};var a,u;var f=0;while(true){try{a=ce.IteratorStep(n);if(a===false){e.done=true;break}u=a.value}catch(s){e.done=true;throw s}o[f]=void 0;var c=t.resolve(u);var l=P(f,o,r,i);i.count+=1;w(c.then,c,l,r.reject);f+=1}if(--i.count===0){var p=r.resolve;p(o)}return r.promise};var x=function(e,t,r){var n=e.iterator;var o,i,a;while(true){try{o=ce.IteratorStep(n);if(o===false){e.done=true;break}i=o.value}catch(u){e.done=true;throw u}a=t.resolve(i);w(a.then,a,r.resolve,r.reject)}return r.promise};b(E,{all:function all(e){var t=this;if(!ce.TypeIsObject(t)){throw new TypeError("Promise is not object")}var n=new r(t);var o,i;try{o=ce.GetIterator(e);i={iterator:o,done:false};return C(i,t,n)}catch(a){var u=a;if(i&&!i.done){try{ce.IteratorClose(o,true)}catch(f){u=f}}var s=n.reject;s(u);return n.promise}},race:function race(e){var t=this;if(!ce.TypeIsObject(t)){throw new TypeError("Promise is not object")}var n=new r(t);var o,i;try{o=ce.GetIterator(e);i={iterator:o,done:false};return x(i,t,n)}catch(a){var u=a;if(i&&!i.done){try{ce.IteratorClose(o,true)}catch(f){u=f}}var s=n.reject;s(u);return n.promise}},reject:function reject(e){var t=this;if(!ce.TypeIsObject(t)){throw new TypeError("Bad promise constructor")}var n=new r(t);var o=n.reject;o(e);return n.promise},resolve:function resolve(e){var t=this;if(!ce.TypeIsObject(t)){throw new TypeError("Bad promise constructor")}if(ce.IsPromise(e)){var n=e.constructor;if(n===t){return e}}var o=new r(t);var i=o.resolve;i(e);return o.promise}});b(T,{"catch":function(e){return this.then(null,e)},then:function then(e,t){var n=this;if(!ce.IsPromise(n)){throw new TypeError("not a promise")}var o=ce.SpeciesConstructor(n,E);var i;var b=arguments.length>2&&arguments[2]===y;if(b&&o===E){i=y}else{i=new r(o)}var g=ce.IsCallable(e)?e:a;var d=ce.IsCallable(t)?t:u;var m=n._promise;var O;if(m.state===f){if(m.reactionLength===0){m.fulfillReactionHandler0=g;m.rejectReactionHandler0=d;m.reactionCapability0=i}else{var w=3*(m.reactionLength-1);m[w+l]=g;m[w+p]=d;m[w+v]=i}m.reactionLength+=1}else if(m.state===s){O=m.result;h(g,i,O)}else if(m.state===c){O=m.result;h(d,i,O)}else{throw new TypeError("unexpected Promise state")}return i.promise}});y=new r(E);I=T.then;return E}();if(S.Promise){delete S.Promise.accept;delete S.Promise.defer;delete S.Promise.prototype.chain}if(typeof Fr==="function"){b(S,{Promise:Fr});var Dr=w(S.Promise,function(e){return e.resolve(42).then(function(){})instanceof e});var zr=!i(function(){return S.Promise.reject(42).then(null,5).then(null,W)});var qr=i(function(){return S.Promise.call(3,W)});var Wr=function(e){var t=e.resolve(5);t.constructor={};var r=e.resolve(t);try{r.then(null,W).then(null,W)}catch(n){return true}return t===r}(S.Promise);var Gr=s&&function(){var e=0;var t=Object.defineProperty({},"then",{get:function(){e+=1}});Promise.resolve(t);return e===1}();var Hr=function BadResolverPromise(e){var t=new Promise(e);e(3,function(){});this.then=t.then;this.constructor=BadResolverPromise};Hr.prototype=Promise.prototype;Hr.all=Promise.all;var Vr=a(function(){return!!Hr.all([1,2])});if(!Dr||!zr||!qr||Wr||!Gr||Vr){Promise=Fr;ne(S,"Promise",Fr)}if(Promise.all.length!==1){var Br=Promise.all;ne(Promise,"all",function all(e){return ce.Call(Br,this,arguments)})}if(Promise.race.length!==1){var Ur=Promise.race;ne(Promise,"race",function race(e){return ce.Call(Ur,this,arguments)})}if(Promise.resolve.length!==1){var $r=Promise.resolve;ne(Promise,"resolve",function resolve(e){return ce.Call($r,this,arguments)})}if(Promise.reject.length!==1){var Jr=Promise.reject;ne(Promise,"reject",function reject(e){return ce.Call(Jr,this,arguments)})}Mt(Promise,"all");Mt(Promise,"race");Mt(Promise,"resolve");Mt(Promise,"reject");Ce(Promise)}var Xr=function(e){var t=n(p(e,function(e,t){e[t]=true;return e},{}));return e.join(":")===t.join(":")};var Kr=Xr(["z","a","bb"]);var Zr=Xr(["z",1,"a","3",2]);if(s){var Yr=function fastkey(e,t){if(!t&&!Kr){return null}if(se(e)){return"^"+ce.ToString(e)}else if(typeof e==="string"){return"$"+e}else if(typeof e==="number"){if(!Zr){return"n"+e}return e}else if(typeof e==="boolean"){return"b"+e}return null};var Qr=function emptyObject(){return Object.create?Object.create(null):{}};var en=function addIterableToMap(e,n,o){if(r(o)||re.string(o)){l(o,function(e){if(!ce.TypeIsObject(e)){throw new TypeError("Iterator value "+e+" is not an entry object")}n.set(e[0],e[1])})}else if(o instanceof e){t(e.prototype.forEach,o,function(e,t){n.set(t,e)})}else{var i,a;if(!se(o)){a=n.set;if(!ce.IsCallable(a)){throw new TypeError("bad map")}i=ce.GetIterator(o)}if(typeof i!=="undefined"){while(true){var u=ce.IteratorStep(i);if(u===false){break}var f=u.value;try{if(!ce.TypeIsObject(f)){throw new TypeError("Iterator value "+f+" is not an entry object")}t(a,n,f[0],f[1])}catch(s){ce.IteratorClose(i,true);throw s}}}}};var tn=function addIterableToSet(e,n,o){if(r(o)||re.string(o)){l(o,function(e){n.add(e)})}else if(o instanceof e){t(e.prototype.forEach,o,function(e){n.add(e)})}else{var i,a;if(!se(o)){a=n.add;if(!ce.IsCallable(a)){throw new TypeError("bad set")}i=ce.GetIterator(o)}if(typeof i!=="undefined"){while(true){var u=ce.IteratorStep(i);if(u===false){break}var f=u.value;try{t(a,n,f)}catch(s){ce.IteratorClose(i,true);throw s}}}}};var rn={Map:function(){var e={};var r=function MapEntry(e,t){this.key=e;this.value=t;this.next=null;this.prev=null};r.prototype.isRemoved=function isRemoved(){return this.key===e};var n=function isMap(e){return!!e._es6map};var o=function requireMapSlot(e,t){if(!ce.TypeIsObject(e)||!n(e)){throw new TypeError("Method Map.prototype."+t+" called on incompatible receiver "+ce.ToString(e))}};var i=function MapIterator(e,t){o(e,"[[MapIterator]]");this.head=e._head;this.i=this.head;this.kind=t};i.prototype={isMapIterator:true,next:function next(){if(!this.isMapIterator){throw new TypeError("Not a MapIterator")}var e=this.i;var t=this.kind;var r=this.head;if(typeof this.i==="undefined"){return Ke()}while(e.isRemoved()&&e!==r){e=e.prev}var n;while(e.next!==r){e=e.next;if(!e.isRemoved()){if(t==="key"){n=e.key}else if(t==="value"){n=e.value}else{n=[e.key,e.value]}this.i=e;return Ke(n)}}this.i=void 0;return Ke()}};Me(i.prototype);var a;var u=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}if(this&&this._es6map){throw new TypeError("Bad construction")}var e=Ae(this,Map,a,{_es6map:true,_head:null,_map:G?new G:null,_size:0,_storage:Qr()});var t=new r(null,null);t.next=t.prev=t;e._head=t;if(arguments.length>0){en(Map,e,arguments[0])}return e};a=u.prototype;m.getter(a,"size",function(){if(typeof this._size==="undefined"){throw new TypeError("size method called on incompatible Map")}return this._size});b(a,{get:function get(e){o(this,"get");var t;var r=Yr(e,true);if(r!==null){t=this._storage[r];if(t){return t.value}else{return}}if(this._map){t=V.call(this._map,e);if(t){return t.value}else{return}}var n=this._head;var i=n;while((i=i.next)!==n){if(ce.SameValueZero(i.key,e)){return i.value}}},has:function has(e){o(this,"has");var t=Yr(e,true);if(t!==null){return typeof this._storage[t]!=="undefined"}if(this._map){return B.call(this._map,e)}var r=this._head;var n=r;while((n=n.next)!==r){if(ce.SameValueZero(n.key,e)){return true}}return false},set:function set(e,t){o(this,"set");var n=this._head;var i=n;var a;var u=Yr(e,true);if(u!==null){if(typeof this._storage[u]!=="undefined"){this._storage[u].value=t;return this}else{a=this._storage[u]=new r(e,t);i=n.prev}}else if(this._map){if(B.call(this._map,e)){V.call(this._map,e).value=t}else{a=new r(e,t);U.call(this._map,e,a);i=n.prev}}while((i=i.next)!==n){if(ce.SameValueZero(i.key,e)){i.value=t;return this}}a=a||new r(e,t);if(ce.SameValue(-0,e)){a.key=+0}a.next=this._head;a.prev=this._head.prev;a.prev.next=a;a.next.prev=a;this._size+=1;return this},"delete":function(t){o(this,"delete");var r=this._head;var n=r;var i=Yr(t,true);if(i!==null){if(typeof this._storage[i]==="undefined"){return false}n=this._storage[i].prev;delete this._storage[i]}else if(this._map){if(!B.call(this._map,t)){return false}n=V.call(this._map,t).prev;H.call(this._map,t)}while((n=n.next)!==r){if(ce.SameValueZero(n.key,t)){n.key=e;n.value=e;n.prev.next=n.next;n.next.prev=n.prev;this._size-=1;return true}}return false},clear:function clear(){o(this,"clear");this._map=G?new G:null;this._size=0;this._storage=Qr();var t=this._head;var r=t;var n=r.next;while((r=n)!==t){r.key=e;r.value=e;n=r.next;r.next=r.prev=t}t.next=t.prev=t},keys:function keys(){o(this,"keys");return new i(this,"key")},values:function values(){o(this,"values");return new i(this,"value")},entries:function entries(){o(this,"entries");return new i(this,"key+value")},forEach:function forEach(e){o(this,"forEach");var r=arguments.length>1?arguments[1]:null;var n=this.entries();for(var i=n.next();!i.done;i=n.next()){if(r){t(e,r,i.value[1],i.value[0],this)}else{e(i.value[1],i.value[0],this)}}}});Me(a,a.entries);return u}(),Set:function(){var e=function isSet(e){return e._es6set&&typeof e._storage!=="undefined"};var r=function requireSetSlot(t,r){if(!ce.TypeIsObject(t)||!e(t)){throw new TypeError("Set.prototype."+r+" called on incompatible receiver "+ce.ToString(t))}};var o;var i=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires "new"')}if(this&&this._es6set){throw new TypeError("Bad construction")}var e=Ae(this,Set,o,{_es6set:true,"[[SetData]]":null,_storage:Qr()});if(!e._es6set){throw new TypeError("bad set")}if(arguments.length>0){tn(Set,e,arguments[0])}return e};o=i.prototype;var a=function(e){var t=e;if(t==="^null"){return null}else if(t==="^undefined"){return void 0}else{var r=t.charAt(0);if(r==="$"){return C(t,1)}else if(r==="n"){return+C(t,1)}else if(r==="b"){return t==="btrue"}}return+t};var u=function ensureMap(e){if(!e["[[SetData]]"]){var t=new rn.Map;e["[[SetData]]"]=t;l(n(e._storage),function(e){var r=a(e);t.set(r,r)});e["[[SetData]]"]=t}e._storage=null};m.getter(i.prototype,"size",function(){r(this,"size");if(this._storage){return n(this._storage).length}u(this);return this["[[SetData]]"].size});b(i.prototype,{has:function has(e){r(this,"has");var t;if(this._storage&&(t=Yr(e))!==null){return!!this._storage[t]}u(this);return this["[[SetData]]"].has(e)},add:function add(e){r(this,"add");var t;if(this._storage&&(t=Yr(e))!==null){this._storage[t]=true;return this}u(this);this["[[SetData]]"].set(e,e);return this},"delete":function(e){r(this,"delete");var t;if(this._storage&&(t=Yr(e))!==null){var n=z(this._storage,t);return delete this._storage[t]&&n}u(this);return this["[[SetData]]"]["delete"](e)},clear:function clear(){r(this,"clear");if(this._storage){this._storage=Qr()}if(this["[[SetData]]"]){this["[[SetData]]"].clear()}},values:function values(){r(this,"values");u(this);return new f(this["[[SetData]]"].values())},entries:function entries(){r(this,"entries");u(this);return new f(this["[[SetData]]"].entries())},forEach:function forEach(e){r(this,"forEach");var n=arguments.length>1?arguments[1]:null;var o=this;u(o);this["[[SetData]]"].forEach(function(r,i){if(n){t(e,n,i,i,o)}else{e(i,i,o)}})}});h(i.prototype,"keys",i.prototype.values,true);Me(i.prototype,i.prototype.values);var f=function SetIterator(e){this.it=e};f.prototype={isSetIterator:true,next:function next(){if(!this.isSetIterator){throw new TypeError("Not a SetIterator")}return this.it.next()}};Me(f.prototype);return i}()};var nn=S.Set&&!Set.prototype["delete"]&&Set.prototype.remove&&Set.prototype.items&&Set.prototype.map&&Array.isArray((new Set).keys);if(nn){S.Set=rn.Set}if(S.Map||S.Set){var on=a(function(){return new Map([[1,2]]).get(1)===2});if(!on){S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}var e=new G;if(arguments.length>0){en(Map,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,S.Map.prototype);return e};S.Map.prototype=O(G.prototype);h(S.Map.prototype,"constructor",S.Map,true);m.preserveToString(S.Map,G)}var an=new Map;var un=function(){var e=new Map([[1,0],[2,0],[3,0],[4,0]]);e.set(-0,e);return e.get(0)===e&&e.get(-0)===e&&e.has(0)&&e.has(-0)}();var fn=an.set(1,2)===an;if(!un||!fn){ne(Map.prototype,"set",function set(e,r){t(U,this,e===0?0:e,r);return this})}if(!un){b(Map.prototype,{get:function get(e){return t(V,this,e===0?0:e)},has:function has(e){return t(B,this,e===0?0:e)}},true);m.preserveToString(Map.prototype.get,V);m.preserveToString(Map.prototype.has,B)}var sn=new Set;var cn=Set.prototype["delete"]&&Set.prototype.add&&Set.prototype.has&&function(e){e["delete"](0);e.add(-0);return!e.has(0)}(sn);var ln=sn.add(1)===sn;if(!cn||!ln){var pn=Set.prototype.add;Set.prototype.add=function add(e){t(pn,this,e===0?0:e);return this};m.preserveToString(Set.prototype.add,pn)}if(!cn){var vn=Set.prototype.has;Set.prototype.has=function has(e){return t(vn,this,e===0?0:e)};m.preserveToString(Set.prototype.has,vn);var yn=Set.prototype["delete"];Set.prototype["delete"]=function SetDelete(e){return t(yn,this,e===0?0:e)};m.preserveToString(Set.prototype["delete"],yn)}var hn=w(S.Map,function(e){var t=new e([]);t.set(42,42);return t instanceof e});var bn=Object.setPrototypeOf&&!hn;var gn=function(){try{return!(S.Map()instanceof S.Map)}catch(e){return e instanceof TypeError}}();if(S.Map.length!==0||bn||!gn){S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}var e=new G;if(arguments.length>0){en(Map,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,Map.prototype);return e};S.Map.prototype=G.prototype;h(S.Map.prototype,"constructor",S.Map,true);m.preserveToString(S.Map,G)}var dn=w(S.Set,function(e){var t=new e([]);t.add(42,42);return t instanceof e});var mn=Object.setPrototypeOf&&!dn;var On=function(){try{return!(S.Set()instanceof S.Set)}catch(e){return e instanceof TypeError}}();if(S.Set.length!==0||mn||!On){var wn=S.Set;S.Set=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires "new"')}var e=new wn;if(arguments.length>0){tn(Set,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,Set.prototype);return e};S.Set.prototype=wn.prototype;h(S.Set.prototype,"constructor",S.Set,true);m.preserveToString(S.Set,wn)}var jn=new S.Map;var Sn=!a(function(){return jn.keys().next().done});if(typeof S.Map.prototype.clear!=="function"||(new S.Set).size!==0||jn.size!==0||typeof S.Map.prototype.keys!=="function"||typeof S.Set.prototype.keys!=="function"||typeof S.Map.prototype.forEach!=="function"||typeof S.Set.prototype.forEach!=="function"||u(S.Map)||u(S.Set)||typeof jn.keys().next!=="function"||Sn||!hn){b(S,{Map:rn.Map,Set:rn.Set},true)}if(S.Set.prototype.keys!==S.Set.prototype.values){h(S.Set.prototype,"keys",S.Set.prototype.values,true)}Me(Object.getPrototypeOf((new S.Map).keys()));Me(Object.getPrototypeOf((new S.Set).keys()));if(c&&S.Set.prototype.has.name!=="has"){var Tn=S.Set.prototype.has;ne(S.Set.prototype,"has",function has(e){return t(Tn,this,e)})}}b(S,rn);Ce(S.Map);Ce(S.Set)}var In=function throwUnlessTargetIsObject(e){if(!ce.TypeIsObject(e)){throw new TypeError("target must be an object")}};var En={apply:function apply(){return ce.Call(ce.Call,null,arguments)},construct:function construct(e,t){if(!ce.IsConstructor(e)){throw new TypeError("First argument must be a constructor.")}var r=arguments.length>2?arguments[2]:e;if(!ce.IsConstructor(r)){throw new TypeError("new.target must be a constructor.")}return ce.Construct(e,t,r,"internal")},deleteProperty:function deleteProperty(e,t){In(e);if(s){var r=Object.getOwnPropertyDescriptor(e,t);if(r&&!r.configurable){return false}}return delete e[t]},has:function has(e,t){In(e);return t in e}};if(Object.getOwnPropertyNames){Object.assign(En,{ownKeys:function ownKeys(e){In(e);var t=Object.getOwnPropertyNames(e);if(ce.IsCallable(Object.getOwnPropertySymbols)){x(t,Object.getOwnPropertySymbols(e))}return t}})}var Pn=function ConvertExceptionToBoolean(e){return!i(e)};if(Object.preventExtensions){Object.assign(En,{isExtensible:function isExtensible(e){In(e);return Object.isExtensible(e)},preventExtensions:function preventExtensions(e){In(e);return Pn(function(){return Object.preventExtensions(e)})}})}if(s){var Cn=function get(e,t,r){var n=Object.getOwnPropertyDescriptor(e,t);if(!n){var o=Object.getPrototypeOf(e);if(o===null){return void 0}return Cn(o,t,r)}if("value"in n){return n.value}if(n.get){return ce.Call(n.get,r)}return void 0};var Mn=function set(e,r,n,o){var i=Object.getOwnPropertyDescriptor(e,r);if(!i){var a=Object.getPrototypeOf(e);if(a!==null){return Mn(a,r,n,o)}i={value:void 0,writable:true,enumerable:true,configurable:true}}if("value"in i){if(!i.writable){return false}if(!ce.TypeIsObject(o)){return false}var u=Object.getOwnPropertyDescriptor(o,r);if(u){return ae.defineProperty(o,r,{value:n})}else{return ae.defineProperty(o,r,{value:n,writable:true,enumerable:true,configurable:true})}}if(i.set){t(i.set,o,n);return true}return false};Object.assign(En,{defineProperty:function defineProperty(e,t,r){In(e);return Pn(function(){return Object.defineProperty(e,t,r)})},getOwnPropertyDescriptor:function getOwnPropertyDescriptor(e,t){In(e);return Object.getOwnPropertyDescriptor(e,t)},get:function get(e,t){In(e);var r=arguments.length>2?arguments[2]:e;return Cn(e,t,r)},set:function set(e,t,r){In(e);var n=arguments.length>3?arguments[3]:e;return Mn(e,t,r,n)}})}if(Object.getPrototypeOf){var xn=Object.getPrototypeOf;En.getPrototypeOf=function getPrototypeOf(e){In(e);return xn(e)}}if(Object.setPrototypeOf&&En.getPrototypeOf){var Nn=function(e,t){var r=t;while(r){if(e===r){return true}r=En.getPrototypeOf(r)}return false};Object.assign(En,{setPrototypeOf:function setPrototypeOf(e,t){In(e);if(t!==null&&!ce.TypeIsObject(t)){throw new TypeError("proto must be an object or null")}if(t===ae.getPrototypeOf(e)){return true}if(ae.isExtensible&&!ae.isExtensible(e)){return false}if(Nn(e,t)){return false}Object.setPrototypeOf(e,t);return true}})}var An=function(e,t){if(!ce.IsCallable(S.Reflect[e])){h(S.Reflect,e,t)}else{var r=a(function(){S.Reflect[e](1);S.Reflect[e](NaN);S.Reflect[e](true);return true});if(r){ne(S.Reflect,e,t)}}};Object.keys(En).forEach(function(e){An(e,En[e])});var Rn=S.Reflect.getPrototypeOf;if(c&&Rn&&Rn.name!=="getPrototypeOf"){ne(S.Reflect,"getPrototypeOf",function getPrototypeOf(e){return t(Rn,S.Reflect,e)})}if(S.Reflect.setPrototypeOf){if(a(function(){S.Reflect.setPrototypeOf(1,{});return true})){ne(S.Reflect,"setPrototypeOf",En.setPrototypeOf)}}if(S.Reflect.defineProperty){if(!a(function(){var e=!S.Reflect.defineProperty(1,"test",{value:1});var t=typeof Object.preventExtensions!=="function"||!S.Reflect.defineProperty(Object.preventExtensions({}),"test",{});return e&&t})){ne(S.Reflect,"defineProperty",En.defineProperty)}}if(S.Reflect.construct){if(!a(function(){var e=function F(){};return S.Reflect.construct(function(){},[],e)instanceof e})){ne(S.Reflect,"construct",En.construct)}}if(String(new Date(NaN))!=="Invalid Date"){var _n=Date.prototype.toString;var kn=function toString(){var e=+this;if(e!==e){return"Invalid Date"}return ce.Call(_n,this)};ne(Date.prototype,"toString",kn)}var Ln={anchor:function anchor(e){return ce.CreateHTML(this,"a","name",e)},big:function big(){return ce.CreateHTML(this,"big","","")},blink:function blink(){return ce.CreateHTML(this,"blink","","")},bold:function bold(){return ce.CreateHTML(this,"b","","")},fixed:function fixed(){return ce.CreateHTML(this,"tt","","")},fontcolor:function fontcolor(e){return ce.CreateHTML(this,"font","color",e)},fontsize:function fontsize(e){return ce.CreateHTML(this,"font","size",e)},italics:function italics(){return ce.CreateHTML(this,"i","","")},link:function link(e){return ce.CreateHTML(this,"a","href",e)},small:function small(){return ce.CreateHTML(this,"small","","")},strike:function strike(){return ce.CreateHTML(this,"strike","","")},sub:function sub(){return ce.CreateHTML(this,"sub","","")},sup:function sub(){return ce.CreateHTML(this,"sup","","")}};l(Object.keys(Ln),function(e){var r=String.prototype[e];var n=false;if(ce.IsCallable(r)){var o=t(r,"",' " ');var i=P([],o.match(/"/g)).length;n=o!==o.toLowerCase()||i>2}else{n=true}if(n){ne(String.prototype,e,Ln[e])}});var Fn=function(){if(!oe){return false}var e=typeof JSON==="object"&&typeof JSON.stringify==="function"?JSON.stringify:null;if(!e){return false}if(typeof e($())!=="undefined"){return true}if(e([$()])!=="[null]"){return true}var t={a:$()};t[$()]=true;if(e(t)!=="{}"){return true}return false}();var Dn=a(function(){if(!oe){return true}return JSON.stringify(Object($()))==="{}"&&JSON.stringify([Object($())])==="[{}]"});if(Fn||!Dn){var zn=JSON.stringify;ne(JSON,"stringify",function stringify(e){if(typeof e==="symbol"){return}var n;if(arguments.length>1){n=arguments[1]}var o=[e];if(!r(n)){var i=ce.IsCallable(n)?n:null;var a=function(e,r){var n=i?t(i,this,e,r):r;if(typeof n!=="symbol"){if(re.symbol(n)){return Nt({})(n)}else{return n}}};o.push(a)}else{o.push(n)}if(arguments.length>2){o.push(arguments[2])}return zn.apply(this,o)})}return S}); /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); /* * jQuery throttle / debounce - v1.1 - 3/7/2010 * http://benalman.com/projects/jquery-throttle-debounce-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); /*! * imagesLoaded PACKAGED v4.1.4 * JavaScript is all like "You images are done yet or what?" * MIT License */ !function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return n!=-1&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){i=i.slice(0),t=t||[];for(var n=this._onceEvents&&this._onceEvents[e],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(e,r),delete n[r]),r.apply(this,t)}return this}},t.allOff=function(){delete this._events,delete this._onceEvents},e}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return t(e,i)}):"object"==typeof module&&module.exports?module.exports=t(e,require("ev-emitter")):e.imagesLoaded=t(e,e.EvEmitter)}("undefined"!=typeof window?window:this,function(e,t){function i(e,t){for(var i in t)e[i]=t[i];return e}function n(e){if(Array.isArray(e))return e;var t="object"==typeof e&&"number"==typeof e.length;return t?d.call(e):[e]}function o(e,t,r){if(!(this instanceof o))return new o(e,t,r);var s=e;return"string"==typeof e&&(s=document.querySelectorAll(e)),s?(this.elements=n(s),this.options=i({},this.options),"function"==typeof t?r=t:i(this.options,t),r&&this.on("always",r),this.getImages(),h&&(this.jqDeferred=new h.Deferred),void setTimeout(this.check.bind(this))):void a.error("Bad element for imagesLoaded "+(s||e))}function r(e){this.img=e}function s(e,t){this.url=e,this.element=t,this.img=new Image}var h=e.jQuery,a=e.console,d=Array.prototype.slice;o.prototype=Object.create(t.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(e){"IMG"==e.nodeName&&this.addImage(e),this.options.background===!0&&this.addElementBackgroundImages(e);var t=e.nodeType;if(t&&u[t]){for(var i=e.querySelectorAll("img"),n=0;n<i.length;n++){var o=i[n];this.addImage(o)}if("string"==typeof this.options.background){var r=e.querySelectorAll(this.options.background);for(n=0;n<r.length;n++){var s=r[n];this.addElementBackgroundImages(s)}}}};var u={1:!0,9:!0,11:!0};return o.prototype.addElementBackgroundImages=function(e){var t=getComputedStyle(e);if(t)for(var i=/url\((['"])?(.*?)\1\)/gi,n=i.exec(t.backgroundImage);null!==n;){var o=n&&n[2];o&&this.addBackground(o,e),n=i.exec(t.backgroundImage)}},o.prototype.addImage=function(e){var t=new r(e);this.images.push(t)},o.prototype.addBackground=function(e,t){var i=new s(e,t);this.images.push(i)},o.prototype.check=function(){function e(e,i,n){setTimeout(function(){t.progress(e,i,n)})}var t=this;return this.progressedCount=0,this.hasAnyBroken=!1,this.images.length?void this.images.forEach(function(t){t.once("progress",e),t.check()}):void this.complete()},o.prototype.progress=function(e,t,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded,this.emitEvent("progress",[this,e,t]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,e),this.progressedCount==this.images.length&&this.complete(),this.options.debug&&a&&a.log("progress: "+i,e,t)},o.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(e,[this]),this.emitEvent("always",[this]),this.jqDeferred){var t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},r.prototype=Object.create(t.prototype),r.prototype.check=function(){var e=this.getIsImageComplete();return e?void this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),void(this.proxyImage.src=this.img.src))},r.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},r.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.img,t])},r.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},r.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},r.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},r.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype=Object.create(r.prototype),s.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url;var e=this.getIsImageComplete();e&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},s.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.element,t])},o.makeJQueryPlugin=function(t){t=t||e.jQuery,t&&(h=t,h.fn.imagesLoaded=function(e,t){var i=new o(this,e,t);return i.jqDeferred.promise(h(this))})},o.makeJQueryPlugin(),o}); /*! lz-string-1.3.3-min.js | (c) 2013 Pieroxy | Licensed under a WTFPL license */ var LZString={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_f:String.fromCharCode,compressToBase64:function(e){if(e==null)return"";var t="";var n,r,i,s,o,u,a;var f=0;e=LZString.compress(e);while(f<e.length*2){if(f%2==0){n=e.charCodeAt(f/2)>>8;r=e.charCodeAt(f/2)&255;if(f/2+1<e.length)i=e.charCodeAt(f/2+1)>>8;else i=NaN}else{n=e.charCodeAt((f-1)/2)&255;if((f+1)/2<e.length){r=e.charCodeAt((f+1)/2)>>8;i=e.charCodeAt((f+1)/2)&255}else r=i=NaN}f+=3;s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+LZString._keyStr.charAt(s)+LZString._keyStr.charAt(o)+LZString._keyStr.charAt(u)+LZString._keyStr.charAt(a)}return t},decompressFromBase64:function(e){if(e==null)return"";var t="",n=0,r,i,s,o,u,a,f,l,c=0,h=LZString._f;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(c<e.length){u=LZString._keyStr.indexOf(e.charAt(c++));a=LZString._keyStr.indexOf(e.charAt(c++));f=LZString._keyStr.indexOf(e.charAt(c++));l=LZString._keyStr.indexOf(e.charAt(c++));i=u<<2|a>>4;s=(a&15)<<4|f>>2;o=(f&3)<<6|l;if(n%2==0){r=i<<8;if(f!=64){t+=h(r|s)}if(l!=64){r=o<<8}}else{t=t+h(r|i);if(f!=64){r=s<<8}if(l!=64){t+=h(r|o)}}n+=3}return LZString.decompress(t)},compressToUTF16:function(e){if(e==null)return"";var t="",n,r,i,s=0,o=LZString._f;e=LZString.compress(e);for(n=0;n<e.length;n++){r=e.charCodeAt(n);switch(s++){case 0:t+=o((r>>1)+32);i=(r&1)<<14;break;case 1:t+=o(i+(r>>2)+32);i=(r&3)<<13;break;case 2:t+=o(i+(r>>3)+32);i=(r&7)<<12;break;case 3:t+=o(i+(r>>4)+32);i=(r&15)<<11;break;case 4:t+=o(i+(r>>5)+32);i=(r&31)<<10;break;case 5:t+=o(i+(r>>6)+32);i=(r&63)<<9;break;case 6:t+=o(i+(r>>7)+32);i=(r&127)<<8;break;case 7:t+=o(i+(r>>8)+32);i=(r&255)<<7;break;case 8:t+=o(i+(r>>9)+32);i=(r&511)<<6;break;case 9:t+=o(i+(r>>10)+32);i=(r&1023)<<5;break;case 10:t+=o(i+(r>>11)+32);i=(r&2047)<<4;break;case 11:t+=o(i+(r>>12)+32);i=(r&4095)<<3;break;case 12:t+=o(i+(r>>13)+32);i=(r&8191)<<2;break;case 13:t+=o(i+(r>>14)+32);i=(r&16383)<<1;break;case 14:t+=o(i+(r>>15)+32,(r&32767)+32);s=0;break}}return t+o(i+32)},decompressFromUTF16:function(e){if(e==null)return"";var t="",n,r,i=0,s=0,o=LZString._f;while(s<e.length){r=e.charCodeAt(s)-32;switch(i++){case 0:n=r<<1;break;case 1:t+=o(n|r>>14);n=(r&16383)<<2;break;case 2:t+=o(n|r>>13);n=(r&8191)<<3;break;case 3:t+=o(n|r>>12);n=(r&4095)<<4;break;case 4:t+=o(n|r>>11);n=(r&2047)<<5;break;case 5:t+=o(n|r>>10);n=(r&1023)<<6;break;case 6:t+=o(n|r>>9);n=(r&511)<<7;break;case 7:t+=o(n|r>>8);n=(r&255)<<8;break;case 8:t+=o(n|r>>7);n=(r&127)<<9;break;case 9:t+=o(n|r>>6);n=(r&63)<<10;break;case 10:t+=o(n|r>>5);n=(r&31)<<11;break;case 11:t+=o(n|r>>4);n=(r&15)<<12;break;case 12:t+=o(n|r>>3);n=(r&7)<<13;break;case 13:t+=o(n|r>>2);n=(r&3)<<14;break;case 14:t+=o(n|r>>1);n=(r&1)<<15;break;case 15:t+=o(n|r);i=0;break}s++}return LZString.decompress(t)},compress:function(e){if(e==null)return"";var t,n,r={},i={},s="",o="",u="",a=2,f=3,l=2,c="",h=0,p=0,d,v=LZString._f;for(d=0;d<e.length;d+=1){s=e.charAt(d);if(!Object.prototype.hasOwnProperty.call(r,s)){r[s]=f++;i[s]=true}o=u+s;if(Object.prototype.hasOwnProperty.call(r,o)){u=o}else{if(Object.prototype.hasOwnProperty.call(i,u)){if(u.charCodeAt(0)<256){for(t=0;t<l;t++){h=h<<1;if(p==15){p=0;c+=v(h);h=0}else{p++}}n=u.charCodeAt(0);for(t=0;t<8;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}}else{n=1;for(t=0;t<l;t++){h=h<<1|n;if(p==15){p=0;c+=v(h);h=0}else{p++}n=0}n=u.charCodeAt(0);for(t=0;t<16;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}}a--;if(a==0){a=Math.pow(2,l);l++}delete i[u]}else{n=r[u];for(t=0;t<l;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}}a--;if(a==0){a=Math.pow(2,l);l++}r[o]=f++;u=String(s)}}if(u!==""){if(Object.prototype.hasOwnProperty.call(i,u)){if(u.charCodeAt(0)<256){for(t=0;t<l;t++){h=h<<1;if(p==15){p=0;c+=v(h);h=0}else{p++}}n=u.charCodeAt(0);for(t=0;t<8;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}}else{n=1;for(t=0;t<l;t++){h=h<<1|n;if(p==15){p=0;c+=v(h);h=0}else{p++}n=0}n=u.charCodeAt(0);for(t=0;t<16;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}}a--;if(a==0){a=Math.pow(2,l);l++}delete i[u]}else{n=r[u];for(t=0;t<l;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}}a--;if(a==0){a=Math.pow(2,l);l++}}n=2;for(t=0;t<l;t++){h=h<<1|n&1;if(p==15){p=0;c+=v(h);h=0}else{p++}n=n>>1}while(true){h=h<<1;if(p==15){c+=v(h);break}else p++}return c},decompress:function(e){if(e==null)return"";if(e=="")return null;var t=[],n,r=4,i=4,s=3,o="",u="",a,f,l,c,h,p,d,v=LZString._f,m={string:e,val:e.charCodeAt(0),position:32768,index:1};for(a=0;a<3;a+=1){t[a]=a}l=0;h=Math.pow(2,2);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}switch(n=l){case 0:l=0;h=Math.pow(2,8);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}d=v(l);break;case 1:l=0;h=Math.pow(2,16);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}d=v(l);break;case 2:return""}t[3]=d;f=u=d;while(true){if(m.index>m.string.length){return""}l=0;h=Math.pow(2,s);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}switch(d=l){case 0:l=0;h=Math.pow(2,8);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}t[i++]=v(l);d=i-1;r--;break;case 1:l=0;h=Math.pow(2,16);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}t[i++]=v(l);d=i-1;r--;break;case 2:return u}if(r==0){r=Math.pow(2,s);s++}if(t[d]){o=t[d]}else{if(d===i){o=f+f.charAt(0)}else{return null}}u+=o;t[i++]=f+o.charAt(0);r--;f=o;if(r==0){r=Math.pow(2,s);s++}}}};if(typeof module!=="undefined"&&module!=null){module.exports=LZString} /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */ (function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,"undefined"!=typeof module&&(module.exports=g)}); /*! seedrandom.js v2.3.3 | (c) 2013 David Bau, all rights reserved. | Licensed under a BSD-style license */ !function(a,b,c,d,e,f,g,h,i){function j(a){var b,c=a.length,e=this,f=0,g=e.i=e.j=0,h=e.S=[];for(c||(a=[c++]);d>f;)h[f]=f++;for(f=0;d>f;f++)h[f]=h[g=r&g+a[f%c]+(b=h[f])],h[g]=b;(e.g=function(a){for(var b,c=0,f=e.i,g=e.j,h=e.S;a--;)b=h[f=r&f+1],c=c*d+h[r&(h[f]=h[g=r&g+b])+(h[g]=b)];return e.i=f,e.j=g,c})(d)}function k(a,b){var c,d=[],e=typeof a;if(b&&"object"==e)for(c in a)try{d.push(k(a[c],b-1))}catch(f){}return d.length?d:"string"==e?a:a+"\0"}function l(a,b){for(var c,d=a+"",e=0;e<d.length;)b[r&e]=r&(c^=19*b[r&e])+d.charCodeAt(e++);return n(b)}function m(c){try{return a.crypto.getRandomValues(c=new Uint8Array(d)),n(c)}catch(e){return[+new Date,a,(c=a.navigator)&&c.plugins,a.screen,n(b)]}}function n(a){return String.fromCharCode.apply(0,a)}var o=c.pow(d,e),p=c.pow(2,f),q=2*p,r=d-1,s=c["seed"+i]=function(a,f,g){var h=[],r=l(k(f?[a,n(b)]:null==a?m():a,3),h),s=new j(h);return l(n(s.S),b),(g||function(a,b,d){return d?(c[i]=a,b):a})(function(){for(var a=s.g(e),b=o,c=0;p>a;)a=(a+c)*d,b*=d,c=s.g(1);for(;a>=q;)a/=2,b/=2,c>>>=1;return(a+c)/b},r,this==c)};l(c[i](),b),g&&g.exports?g.exports=s:h&&h.amd&&h(function(){return s})}(this,[],Math,256,6,52,"object"==typeof module&&module,"function"==typeof define&&define,"random"); /*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */ !function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}(); }else{document.documentElement.setAttribute("data-init", "lacking");} </script> <style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}</style> <style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}#init-screen{display:none;z-index:500000;position:fixed;top:0;left:0;height:100%;width:100%;font:28px/1 Helmet,Freesans,sans-serif;font-weight:700;color:#eee;background-color:#111;text-align:center}#init-screen>div{display:none;position:relative;margin:0 auto;max-width:1136px;top:25%}html[data-init=lacking] #init-screen,html[data-init=loading] #init-screen,html[data-init=no-js] #init-screen{display:block}html[data-init=lacking] #init-lacking,html[data-init=no-js] #init-no-js{display:block;padding:0 1em}html[data-init=no-js] #init-no-js{color:red}html[data-init=loading] #init-loading{display:block;border:24px solid transparent;border-radius:50%;border-top-color:#7f7f7f;border-bottom-color:#7f7f7f;width:100px;height:100px;-webkit-animation:init-loading-spin 2s linear infinite;-o-animation:init-loading-spin 2s linear infinite;animation:init-loading-spin 2s linear infinite}html[data-init=loading] #init-loading>div{text-indent:9999em;overflow:hidden;white-space:nowrap}html[data-init=loading] #passages,html[data-init=loading] #ui-bar{display:none}</style> <style id="style-font" type="text/css">@font-face{font-family:tme-fa-icons;src:url('data:application/octet-stream;base64,d09GRgABAAAAADLAAA8AAAAAWHgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABWAAAADsAAABUIIslek9TLzIAAAGUAAAAQwAAAFY+IEkIY21hcAAAAdgAAAG8AAAF3rob9jFjdnQgAAADlAAAABMAAAAgBtX/BGZwZ20AAAOoAAAFkAAAC3CKkZBZZ2FzcAAACTgAAAAIAAAACAAAABBnbHlmAAAJQAAAI6gAADv+gJOpzGhlYWQAACzoAAAAMwAAADYY1IZaaGhlYQAALRwAAAAgAAAAJAfCBClobXR4AAAtPAAAAJEAAAFMBfb/0WxvY2EAAC3QAAAAqAAAAKhjiHI5bWF4cAAALngAAAAgAAAAIAFjDA9uYW1lAAAumAAAAY0AAAL94+zEpHBvc3QAADAoAAACHAAAA11cG/YjcHJlcAAAMkQAAAB6AAAAhuVBK7x4nGNgZGBg4GIwYLBjYHJx8wlh4MtJLMljkGJgYYAAkDwymzEnMz2RgQPGA8qxgGkOIGaDiAIAJjsFSAB4nGNgZNZgnMDAysDAVMW0h4GBoQdCMz5gMGRkAooysDIzYAUBaa4pDA4vGF4EMgf9z2KIYg5imAYUZgTJAQDSIQumAHic7dTVbltRAETR7dpNCikzQ8rMzMxt/M39mHnsU1/TfZz5jFpaV7pXJunMDLAZmOqaZjD5y4Tx+uPTyeL5lG2L5zN+L94zG8+ztr7ulXH1fra4bvK9M79xiWW2sNXPbWeFHexkF7vZw172sZ8DHOQQhznCUY5xnBOc5BSnOcNZVjnHeS5wkUtc5gpX/f3r3OAmt7jNHe5yj/s84CGPeMwTnvKM57zgJa94zRve8o73fOAjn/jMF77yje/84Ce/WGPun1zi/2tlXKbp3Xyc44bFyZanSWokJDXOOjXSk/LUSXn+pEwCKTNBaqQqZU5IjX+XMjukTBEp80TKZJEyY6RMGylzR8oEkjKLpEwlKfNJyqSSMrOkTC8pc0zKRJMy26RMOSnzTsrkk7IDpGwDKXtByoaQsiukbA0p+0PKJpGyU6RsFyl7RmosQcrukbKFpOwjKZtJyo6Ssq2k7C0pG0zKLpOy1aTsNymbTsrOk7L9pNwBUi4CKbeBlCtByr0g5XKQckNIuSak3BVSLgwpt4aUq0PK/SHlEpFyk0i5TqTcKVIuFim3i5QrRso9I+WykXLjXOYNzP8BuAPUwHicY2BAAxIQyBz0PwuEARJsA90AeJytVml300YUHXlJnIQsJQstamHExGmwRiZswYAJQbJjIF2crZWgixQ76b7xid/gX/Nk2nPoN35a7xsvJJC053Cak6N3583VzNtlElqS2AvrkZSbL8XU1iaN7DwJ6YZNy1F8KDt7IWWKyd8FURCtltq3HYdERCJQta6wRBD7HlmaZHzoUUbLtqRXTcotPekuW+NBvVXffho6yrE7oaRmM3RoPbIlVRhVokimPVLSpmWo+itJK7y/wsxXzVDCiE4iabwZxtBI3htntMpoNbbjKIpsstwoUiSa4UEUeZTVEufkigkMygfNkPLKpxHlw/yIrNijnFawS7bT/L4vead3OT+xX29RtuRAH8iO7ODsdCVfhFtbYdy0k+0oVBF213dCbNnsVP9mj/KaRgO3KzK90IxgqXyFECs/ocz+IVktnE/5kkejWrKRE0HrZU7sSz6B1uOIKXHNGFnQ3dEJEdT9kjMM9pg+Hvzx3imWCxMCeBzLekclnAgTKWFzNEnaMHJgJWWLKqn1rpg45XVaxFvCfu3a0ZfOaONQd2I8Ww8dWzlRyfFoUqeZTJ3aSc2jKQ2ilHQmeMyvAyg/oklebWM1iZVH0zhmxoREIgIt3EtTQSw7saQpBM2jGb25G6a5di1apMkD9dyj9/TmVri501PaDvSzRn9Wp2I62AvT6WnkL/Fp2uUiRen66Rl+TOJB1gIykS02w5SDB2/9DtLL15YchdcG2O7t8yuofdZE8KQB+xvQHk/VKQlMhZhViFZAYq1rWZbJ1awWqcjUd0OaVr6s0wSKchwXx76Mcf1fMzOWmBK+34nTsyMuPXPtSwjTHHybdT2a16nFcgFxZnlOp1mW7+s0x/IDneZZntfpCEtbp6MsP9RpgeVHOh1jeUELmnTfwZCLMOQCDpAwhKUDQ1hegiEsFQxhuQhDWBZhCMslGMLyYxjCchmGsLysZdXUU0nj2plYBmxCYGKOHrnMReVqKrlUQrtoVGpDnhJulVQUz6p/ZaBePPKGObAWSJfIml8xzpWPRuX41hUtbxo7V8Cx6m8fjvY58VLWi4U/Bf/V1lQlvWLNw5Or8BuGnmwnqjapeHRNl89VPbr+X1RUWAv0G0iFWCjKsmxwZyKEjzqdhmqglUPMbMw8tOt1y5qfw/03MUIWUP34NxQaC9yDTllJWe3grNXX27LcO4NyOBMsSTE38/pW+CIjs9J+kVnKno98HnAFjEpl2GoDrRW82ScxD5neJM8EcVtRNkja2M4EiQ0c84B5850EJmHqqg3kTuGGDfgFYW7BeSdconqjLIfuRezzKKT8W6fiRPaoaIzAs9kbYa/vQspvcQwkNPmlfgxUFaGpGDUV0DRSbqgGX8bZum1Cxg70Iyp2w7Ks4sPHFveVkm0ZhHykiNWjo5/WXqJOqtx+ZhSX752+BcEgNTF/e990cZDKu1rJMkdtA1O3GpVT15pD41WH6uZR9b3j7BM5a5puuiceel/TqtvBxVwssPZtDtJSJhfU9WGFDaLLxaVQ6mU0Se+4BxgWGNDvUIqN/6v62HyeK1WF0XEk307Ut9HnYAz8D9h/R/UD0Pdj6HINLs/3mhOfbvThbJmuohfrp+g3MGutuVm6BtzQdAPiIUetjrjKDXynBnF6pLkc6SHgY90V4gHAJoDF4BPdtYzmUwCj+Yw5PsDnzGHQZA6DLeYw2GbOGsAOcxjsMofBHnMYfMGcdYAvmcMgZA6DiDkMnjAnAHjKHAZfMYfB18xh8A1z7gN8yxwGMXMYJMxhsK/p1jDMLV7QXaC2QVWgA1NPWNzD4lBTZcj+jheG/b1BzP7BIKb+qOn2kPoTLwz1Z4OY+otBTP1V050h9TdeGOrvBjH1D4OY+ky/GMtlBr+MfJcKB5RdbD7n74n3D9vFQLkAAQAB//8AD3icrXsLcFzlleZ//v+++nb37dfte/VotVrdrW5JltuKpO6WJVluPyXbsmOEbGRjO4KVjWPZlsM4QIU4IYGlgCE2yxqKIQkJg2GreKQCTCZb1CZkiswjzOwOmSTATNVWTZLdDUwSMrVDsomD23vOf69assFAqgbk+773P4//nPOdc/5mwNjFl8WjosbaWblmxiOmIlTGYXzb11M7Z2ohAMbZCcZ5iG9prZl4whfwGju05xtttitUdwXYEUgkbQtWga5lC+XBaqJI285qpb8dVEc8Gnm5L5QM/f58yAlB399a7dD0mWAmdAqaMvBmKPKX9TdDwSjod9yhx03FAPcvI6Gk2lV33XoXUtKgL8C6Wa0WSzXbVjhg6JoqIPShCK0FOvOuE48K1V4B1VUQAVevugmP7Fz2CmTzW5/8+ZGP/+Kp7h/8oI4MuOZ7M5B9IvujH2Wf+PnCAjzn8ZK6AieMKRcvXnxWWSWCzGARlPcqtqs21WZzEBFgYIVDAYWzVJIrXBlH+hXGlWNM00GAJmYZ8sKBzTJFVZVppijqDFMVdTIWLa0o5JrdaHusPZGIG1IjFhQGK2mAZEe56kJnR1bTY7ZT7eivFGODBTdma3pHtlCNDVbwmgMHx/aO4R8ffeet5/ZCG6TfuV03IaSJU3oIzKsGO9+5PV+BwU5xqnOQx1aO8fW71yvD9fPn55/fA22PmsaFvfSgwZ8wzPiFvZ2DUMnzJ2hHVDMmHucPsSRrq7UQo4DMAV/AW7CANw/Zru3NIx20bBEpXwukArlxxOPReibaG63/SyQyiftzcBy3k1HuOHgjEgFHnkYfh4VodDJC4138Ff8hv5PlWbrWmm2O6grNEgGNCWGnbFtRm1Z04gzQPPWvkqMWF4eWU8DB267Df+gNe84bBvfRpfNI5Ny5yAmHDh5/PPLuByMlekDS9DsRR73nWHetwBShSO5PqCBQONO4E2wGlSvYZG6gMzeQ09SWFZC0tWION3oOVVXGTbGM+hrAzQj0O25yoN8R8YzzRsaZdzLwhpsGPEm783hAJ9+kq286eDX5pn/VydDjvk7i8EuchU21JJ3DNOqFzeABmywPcNXxhu/wB+3whrqwVw7Cn1j8vPfdDH6O7PR3fDV/Cb85wua/waSit309grZJHHOhHEQ9CA7zTGVCUb0ZvXzc1lrRe5Af+4An0aSL9op0IU9y6vRFtAYGKy7KJGFbQrdg2dXqGAwWilld0zUy9xLqd6A/zeFuy7gzYFmBOwOhZ6NNhZakm8YTI7S1pyM1mM032V26qevXGlzZ8+TKvROlB/BBkO9ACDalB7OZuBnuC5tRcAItpalENNOfhajVH1A2a1HjbHZ4N4r54oWLz4qPoe4jrMo2sonapm5QRQBQ3XycKVxwRRxjQuVCnWc6mrzOZ5FvBiraOmia5FubYRpok8n0ioRTKOQMNbWiszxYWAFZrQ1sB+dDJTFYghzyiBN3oB857ndIAha4Se/+YGUtjAkXXUO2xPE2eoe3TWPeMOXmzNi+j9w1HghvVbSAmu4c6nFac6MgbzXFU2baDr1241+98TfHtU/9t7df+MzU4msmfPYj06Wbw8Gqohda0/FkSyiyvtPGG/FsMKq1pLqmPvndkye/+y+08eYIHEJZpFmJra2Nop/VWuKcCwPvgRhnGlOFps6iIdAEmFVAKh53jblZyBU6nAFdbfX03tGwioZ9oGnEyDSWTQCyFzhoR+s/jdjgWLmc3L2K21zEmXCsM5aDm4g9Ny5v0PZVb+dY9Rcd/sl5eTiPj0nTaeiU+BhhW2qbuzJcUy2Nc2gCrjBkxWCqZiArGgOuwSzjAlDb5L91XfpvfYbpij6ZRIUWYoVcLqC2+UqNLddsMrekY3GZztVl2uQjpl4xjedIM+Uybc/r5viShuHgcgXuwQtpuoMHz8utCe/s8S+Y/7xMaYu2DX1yDrez3lp3cyyKdop+HLcLi878Uh9SKOSlj73cOIUFRVKVKHhaSS9JP452RCcYoJ3w85bz8Ckp9VN4xeZj9atpH4FnPCV4OtiDNIVYCrWwsbauK81VxUlaQnA+riFBisoUsiU0LbQpASCmmRAwg1MNJoH19uQ6WpriUV1jIQjphA5QjosiTfiy1tF+kPJKMTFYpAu6lkx40odnTv7VjYtC/QtTJyGH9HmMnKamGrcaqmaagRsMUwR9WeLmwsQREvIRevSvYa8uVFXo9Sc0w5A8/Rp5+jcxhXLuYAOIx/pbY+ggFp0FV8lNoLNAEQvyDkwBZR9T1ZC6xR0qFgsybix3DJcR7iIGwCsCHHQM0nYKVSBXQZPnqG7KDZiqrn8K524gpN9ghAx42k4GsvF3nohnA0kbnglkC9mrl7h4Db2TommKcVE1QOPRd97K5WJxsKO5nIjHbHtx/og3kK8iWys1he/EkKlqCbFOB6iKQp5Q5Yp6DB0AsjmPvHEFSGsoFraPaVpI2zLc2lmudErjJ/eeQwbKPoRBZulcwhwXYc6i1SdiEpiCF+KrFOIrAzKaHdhQ79tw4MAGuJv4rt8sQQu80jloGnnDfNVJBa+vn1WjSg1d8NHrg44FbTgdJ5+T77yy/gDI5wY7633yTbI7+CdyMDyEL2paDd0BvZjyfIYXH2/H+aqjDfXUisgnk3rFYMePoyZBegWanQpM5hKdlUSU1JnoQH2iG1d90IYADi0JPV2/oxMEeB7apm+aBngFw/ObMjzHzv7dgzyOh48fHZnmO9c8Wv+2RAGwHiP20UNnzx46mvYxyaMixDpZX22lQqQgRDqG4kYcMo92cpypAOo0Ti+iSYXJRGc5l8wvQhPfqpE0SYa7nDwkeQyh26OOlbecqVumoCwJ8+mDm+9/5T4eOyOt+4wk8WjavYTIG+7nD5Li2cWv8zGkMYoz51q2u3Y1JQSwfcumSn9JUxW0CZIWQ5isqKCo8zoGFPybx/lyHD2w4AaCBw7Ap1HIxAaHyZlr1tXG1owMt7h5Ox5QmxF4Iv6vDhaQoTFAYADuYIlnLa7b7RwtiOBDtVK1dbyCMXXxn5azOIIKfLFKaQP9K3HKIMYEQosvhkIWH23TQ9wIpCq9M4WxycnJsQIUYrEJ/bPGuOZohfHVzdmMaAmHm418c7DU3xdoyYPebFktPJtpHu7fefjw4R0VHiNTa06ZUTPe09a1sdTUVNrYtbo3nth11VW7tBa1d/U1a1t71rdG2u1IJNkWDYdbUs0pnnFT+OloWzISsdsjqVpvy9prqrNjed41POfPx2+J7TIXaWP5Wgf5bvToBEvpppQYOXPOJoda4gTQE6TsNK8sAvUSSHBFygfnfM9wL+8aK/Bddv0tZ8SufyKZ7ml7s20iCWdsPpPu4YVaXuur/2M6WX8riReTE21vtPUAnn4iyTxdf0vJ+/QM0pwsUL4D5BmUBQEeXpaU4W6RtExzN1In7eT9qHPpIoUdqAzSrdyHIPo1JNRps1uioCWJyIm2U/JG8oO4aZMXozF8b4RupRd5JJv7Nn8ZeUyxjlrakhJHcwO2gHMUDgGLR0MmS0GrIoMRWos0K81LUnPZYgmkw6sM8HtCoQTaT9y0Wu3f/MZuCYfijhMPhUVQNdL2hY8kMroS/8UvEqqeSfC/xzPV07k3vsqyrL+2ykYnhJjEz45OLIdbu4ncrbrWhImzltU7oqqaXAEdMWiHxPsSdvuF70K6/xf6FejjL13YBvFVP+UXrkwnyelZjBcltoLypQIoEmsoiDUw4C2QFS/I/J6yx5ybWOOqaMad0kJlKo+ElAdLqvRTMqOsgucuM64j3hgHU1H1mIkQ084Oje3eXT1lZwL1nwaD0BZMNfFTcHpv+sf7v6LEo4oZMlRbFNqH9tb60nEN0UkQ0mYawZNpR878eFuD1lWsl/Jb9J5iMbPlDKnkh3raBmS66U1M9Jm5rKUmMel1dKLOcxrVSgf5dJqU4o0g0pJyTlV37x4bytpCATOG8VUT4+m9cPoURiakE34ZMes/wbB0Roun+2p7h9oLSlwzQqZq2eIr+xe2/Rhp5QF8hHn5Hh/FfM9ibs32UrNG+l22ZbrnJ8N+fERAcD6YCp6nuPc2Aq/vWXiMfzKaye/BDfzTLPwe33MT8ns4P/y0uiLBdyZw3qRvNvGZegjF6H+escXvreOnkD7zm7IkADTbJEkU4sdw1jmwzpTj42smHLB82ijenjfx9YsXkccR+B5+I1azGtQk+4maTpnLlsBL75E7O1IPea+mzfPmUwQt00FJoG+nPxN/zruZzZprTljyx2GpXiHdYWBZtcINeB+2xVP16/GT9euDwf00TbqgK5gK7QvCmfp/wPn15WDa3BcM1l/Hy8F9wZQ31nf4Q2IjjrXyG+BnzXnMmqXiTuB5CLa01gINjvb8mesSTwHuSAEtzm8anp+uvwbdprkfhUs0wCNIxH6TP1l/vf6aPDThK0TXI5I+tjj+SX/8wIcaPxWX4y+CqsCiEIiAIzhsKrgfh+6qv+4L4RETPl6/zqMKukki9AA96OseZb3Zk7UKVKxZKt65tpR1J9p1sTGgP5Z4ah+KEzl73R/xEfr+I8H5fchlN/Jr0n0c3fSGkrz+vbhd5m2ZWltThDeKUaKh3WTZXWauS+WomBdMkjGvOCRuT9YfcIZxk0x24/5cT3q8redxe8TpTsLn03b9LIaFo/I0eQ7uxtjQm6rffI4elnTcJfbwX/qRFyG+Vw+SaJdyFIpugk0WXCcnaZFo1323viNAWHZPvk1+ugfjTf2sbcPR5LDT442bhwPj6Z5z9qi9wr8B85Ji51yXb3tISxlpSUtaZEYnFX8ZbHI6C8vk4ll2h5/YdRQbM0CUbSmXHsd5rH5zWz7fBnc/5iA1NLANwyQZ2+5JjiYfQ4mle+BxJA1prT9g+770dv4zTz9RnTPp+JlY4DJKoroOucmyT4fnsGIeFC3H9EtmB+qnGyP6413tPvs4BhIwipskDKakeIg+KKTgbl92JBkkHn1J3c8t+9ia2vBKhMFkGBJtEjrGDIzKE1SeAgTJiDAVRYpKmSGwMlksJor5gUWgjKlXYS0gurS4neaYflXJnaWBUjDKNAVhkWoF1WhHz7uJ2PapE8NHJkulySPD62/qVmLapMq10a997JqvnphQarc8dO3UQ2smYr38pfOWszK6fTs+eBKfHy4j8t2uWNrWnbDx5CNfe+TkxrHVE/EEW4ynxM9H2FhtpAeE2tnGFUH1J4xXChxD5hACLNXbLgOA3WU353rI37Y44SipbwdxwED/mEC0rOmuIzmlGkw7SBzNxZ6NN3519+zXRhV1Uosp3TdtGD68s4eXJo8uzHVtjyXc85gC9MYmRh+euuaRk+vhAG43Tm3RLGW7Clp52Oesq3N7dKVjnW9KxCdWjyFvi/nUs+Ja5CnPxtn+2t4NnVwLrELw76JqDMz1MacMGJoR0I5RVsA1lR/DLEdonLJLQWnOMcSamKlrszLnWWZ3mzcVOjsrnYWynTfVNmQ6aQFxrWtL9SQtgjqsojbxf5lp+qquSF1rVGyk02qZZEEKRkPdlv9ff3LVQ6MTFMas8xSft3fNVbd+vqg1KaF5w7RwBsirUye24UVXDS3oIcj/nz+56mF6qQlUAQ++gGoNytcxFG7P98DWMXMoHIL/6l/Z7p1riv8ko2oiyiru129WsSrmUjO1XdtWc0Pr7miOoWOV9YUQ07WQPmsCisWYDge5puAUAI3NIk6EQACmaQ+BGRaAwOSemV1TH90+vnlDrZBNFOi/nEUlLL96lYx5VZLqB5zDQLFQzGm6KuUX89L6YqxRuaPsCwXYTlJE1EVJt9ycWTo8bereoW7Wv38ewfOzmgI/N42Kn53LatjTxUCv85zbEyg+Y5hTcDddq99M2ysc8/51lABfjZ++8KvSxvUlnpCj7U+mIG3vR8yhXSbXEbaB3cDmatdds4lrhi9Z8hskNo2hkI+RQHWN6fMIUwKGFZiNhDmCNq6BoR1gejCoTzNdD86woB6cPDh33YFr91w99dHJLePr1tp525NylKZkzJtthLplN+ADzhOxjpiN1trRPwb/vhKfqIcMg8Mr3DDqd38o4cM36y9KWa+Tsn7v4/ocj134Vcg2TZsf/ABFKH4tYwrtObZYYxoF3QiQC+PjATwUho5+W8MkQlOOqUDxnlMNjZpsfB8zjJCxZe2afKeTjXeuboqT2XcOlsACB6XROFhWch7AeNy/VsZfx4fO5Aj8EjTVRPjLdtrmTS1NX7Azce6kmjZnnHf+1iuBiG0duzsmQTiZPzfjEoTGAqZ7xqt/nmmai8gXOWb0/sG9z8vyyPNOZjKDf9DlRgmQR93keVlHOU/9RTkfH8W8ieTQzWpsc21DGRM0Xw4soAUWDEDPtMB0oS9I5qeXC0PhMySPyTWjuYFctn9JEgWLp6FSXdz71TeSgzuQBmnXVHPXGqWhIhXkF+H2lQXxVqiSO5OthN9CQQSazmBOhdycwSgoZRJvQ28Yz8SVltDiwd3PUxMLN9De1dWehinH5783RvA9xhpyoHgnWAfGvE3sqtqOFT25rGIoMB4GBa0NAaepg2KYyiwVijQqFKGtopEeUFFYgQCboj0jZ8cCk7U1Q2W3MBBLjMRi0SCKxO0od6gD6Muon6Q35JGLDZS9DEpfLNZTA4aqrmrD0rwHCAO8Cs/Ur4a3J0Lql9WU4RfBJiYySfg+cviqaczLvipt59LuhbjXflPdSuRLUUd/9VV422jRv6SF/NbehYrcQ1p2AZ6jd80L5+kSRwE3WV+OVGTs9GvnU6yLDbJsrZ2aE+iijskqPtuHgTAktgz0r+xtaUaslZRRH6FKlRJrBwO9bK+lef8YXipg7j8GSJjM+GRPmSApRv6n//T4VrH3qqbRaNxoqoxSNMfwD6MV18yPulftrX+xZ7gXeka7vMCPgf2aQ8+N4bPuaKz7lg2LIGjjTT3x4T4jvubPYKL+cFtPTxscwm0DA+yVNaMjbFNt/cE9k+sUpoxgas8Gu1qjhG7GqUu+oAFel8B2gTDcgt+54If2XXv1VVsmVvRkM4m4TnnrYCGLtt5foc4F2rWO/NrIbxENvBHUy0WJBYqEg8hbyklAxoATvupfHMCZ3wAHaASEAFz/Y7pUPh+ZumWK7z65G1KGftgMJro0NbIzrOvbm1sCuhL9tBGKtrof1aLaZkdRjS4zYhzSDTDVw4bldnrPGtubWgKGiH0adR1JuR9VI/qErSgB72HMk0emp2+anr6F7kfTydZ+zdKSO0EdDRuTqaip3xAIjapaLa1aWqg/kmqNQEiXzza3ZFbqId3euezR4Iiqbkj5j7ZEIeTX7X4n9vLvLmKL2mAXILVUp0WPoyLCVJVGQ+/yNlGhjP8PNLq4y9vNy9rPrn+eW36OaPmdX0nTF7EIpu9XPlvW1XMgOiHbSHIL1ji1nsbpBdbAyXtlTRwjSHuCqyJvkjfAVEiMe317oeLEURlNKa/CI7tfVLxLp5qb4tFwUFVYJ3R6/STHqy1Xi1R9RLvvd6lSPIba14rZoo6zwa3w/7L18OGzRwC+N7B52+HD2zYPfA8OP3iIH9kyjkd4Fdwj9x85skUPzfXhQd9cSN96mB+97yjgoYUXvZ7kxYu/UW7mL7Eo+rwKK9byTKWsSWWz6N8VBaZxB5ShgDJZHerscm0J6L1at2fNGPH4CqQNZ+gAGTeaPZVNBB52IJ7nt/uI3N/B0707Do+8vmEH37rpdTLX8eEDd47Xr564Y3aIj+67azM8Q4dwYHjpHbJoOu1/8OkH++lk4s59Y2Lo+tsevG1ukA/N3uHb9f9TbkFebNRET61I/GEuOEtdCkxKcdfISpPptmSn01kdVNF4Y4NjHF1rWnh0cxWZKImsJdKcKPPIkZR5RIoYkcJ7dh665dDOHqV/4jgc2ILXkYz77zgwypGsH1zKst/L+ir6nJVsPdtR2zaC4aQTZC9CR4p0jigDQ6gmexJcUeeXdbS0xY7WslzDdpPF8uryAPX0L+tqoVNFD5QrFi7rbKGXwYnkJGCpwra4XMZe1th6JZcOCL0VgV445HepqL+l5jVdKMHP1VeH89a/WtYaK2/9Z/g4noyFYduzjf6WpSS0FIKDRovrC4aaQ9ZArQ9b1r/K58P0Yhi/4Msl4WPhFbUuzCTBb1OitsjmCVsAn+Qs3eokTJ1FeEQlI1nGXNlfnbS8tcc/sYz4wU8vsbd+lr/UII5u7mncOYBJ+WKc+5jsETe/L03AXCfmN4IlTVnCOYiVSxyWr5h45up7d/Lpu568c7ey4zRcu6yjzk9P3Xvu3im5qb9yaf98ab2AwZIsy0Zrq6nXxkG22zi121ScGiC71IoiZwcZqlAmzUCmvaU5GgkkzaQfoNCjlKimWnxvGhtR5b4r0roYFX59BZLFsvVB5NMRIVAGQ65bJoBsRuaFbLJM/0n3nZCLlZaWYKj+efWy88WezKv+yiG5dKnN23mX2uUJbi5bY+Rc4XgxBrHXGnlYb637gwLPEuXVBmD1ViiIyzgRfl5f9NddvfoB9NDxw0clWD9KV0FbdhMMjzfc+H7uJXEG8fo6Ns4O1q5fU+KCCq16PhXG3JuJcczFw6GwEaLSBXkQwNwF4DgLs1AgHDqA2FToAXEgCDpj+jTudDaDgUmnGsaG9bWx1UOVctJGzBlDf2HJWgZyh1HHkeV53RK5WC6Gc8fr45AzKSByxwlWHShTsxydSgfVLhALUZsXOiS8w0TlVOdJ006bC4ZayA43j7cN9WCqeCgYDTvGJzKnKG0Jn7ou6KSC18Frs8FUk2Jch1frv65/kWLdMMbf2fWfDKac4HFdaYpb8HY9ZDXZhnEylEgHP7t2L6YMcO46M22b111HA113zoFBDJQUpy/WLx6B36K+MxQdmlHBKerm0BIJKqUu68GgoLY0VSpexdChJiDC1WpC9qwK1cQYpS7U0BW0JAzeMrX6P+hRI2Dy4z/hqqmb4gS3jG8GLT77P1Ue5E4wfOFTFoioAS8NYVYZhv9umJapaPV6hct6wHdkHiowcqVYnvUivt5Qa+3vK/X2dBXy2Uy6pclBE4pR4XkwxWHTtq93vH+tv0l2U6pFvbNRePWrv51uBFbBWmgHbw/upXv+0LnRc1AxL/RjLrVgmvx/yP0Fq1KJxarV2A+PHct2HDvWwbvxJIYX60/THfzHrcdGH7shQm/iC2l6E/fXRumtaPU/ybeyx+p34UkVL0LJv9PAUHOomzL1w8q9uZaYoV3SIOoujHBKKii60eKMxhJHXUMgTQW0InVqqErq22AbYN6BHOMkFCMtlpWLDDc/0NM23tYLZ1uGMX5ZrWfPtkQj+chQ61lZiH+gZSiai0Sbz4JhDbeswXd2PSVr8E/twqtr8KXdu690Q2KpI6jHMMuhBjdRdbG9iQslEae6YVhDV7gBdOiHgK4iKtSERkv4yOpAP8ZMpimmNqtSRuUFG50FDD2AeaYRNrasGS0P2LTwuGDncpRJNtZ5Fpev85SVhMY6T3ewBJrtjAFIs8XZi95eSXOXLJkW75wKaXmE7afkst1TsjBDJxP3v3I//kG6Z9R+ce7WnfcfrvHRo6fPnT46CpteTMJZ7yXKMb2XTlHieMpspgUYLz+k3UsJV/LFTWNH7vvT08eHlfWHHtx+69yLSbZMRhHWhDn2SG0oYCC3qE/B0qAKuZqPg+b5XkErlwWmYkKlMkNY2eLmUAqF3OJinmKjrPIhuK1/W/IJ6z8kh5K1D2aK+/UTWqOzkz1fC4xVOgKKKqgjZqKV9nhTGGOgUGnZjiK4Mq8jJFKOMwJ0UxSLdlO/Ymvrtq8H3/UG+nBNcG0e7Vh79xt/yOf37KklDMPYaeyc3LZ1y8hwT671KoP8BApooL9agOqYUm2FATeRptTcdeQGxexmC3pWyw2u5ZSr4l9xsLCKW+DaaeqxVskXZql+XdTggY9NDrcHk331MoTzqZSj3fGlCe3GxJQT6IsGjeBkQOGQO53v+VKSb9E1EVMQ5vKs2/R7axiimWAmiVCh4/MZ1eYrecvvMWx9oa71KppmNkVhBs6G6m+veHkw8amOFi0QFY4pTI7RrikRxSd1jgBaCeytDEHmYSsUN/HTEEyqQVQ6ppY4937ER/nPmMXaWK6W8TvQy1cj+s28wcIlS70LHqQsSoS5rB18abP70ubwv0VMqrRhJALnb2SJXZ76vg7pAPc9++oF2+s8XzLyZUMt/3ajhy35encPGy4n+lIy4Xvvou1JERMJFmTa8zqHldSwlaBa9k6VC63heDzM/3cYttfndDMiKlbIwCN7eV2F8FS61toUNZhCzHltUoKChwg/yah6WVnr8jIXJer+ultoizj14CWn/GfvvEU5uIjTdtnx8nw86K1TlzWF5QsXBhYXGlw+3rLk/5IB/G8+gzZuYUagPa8ByoUaWfiRIuA35I4CrJOMVariLtOCaKD+Ryq3gvWTwSDci1AAfVtQi7zzsmWE4F5Vq/+RPKDe8714vX5SVSVGuXjxa2K/iCyN42qyOkbLkXwt6FIjmt5sRsHC11VB2yANZQl1HL+GWjFC9Em4Vx7Q2oKTeB2+oKkeL3xEkBU015zWlri4VEBrpICIlwZ7Eso2mgSVKs8GLeJN5YsLnmn7Lh7/45KS6ncSg5I/Por8NcaWi7UW27Te2JeyTGPqPg3VS9j2CzJyeznjn1qaGXCrpsq8ro655n7+1zi3WwkBRkGuRl5e3eMyi6L0TvDJcnYwTnM14fWG5Xyh5nXVLya56BmNJRUi25oYoiGRJBGXdaO+Rb1Y9R861mlZYzodsf21K8/wZ1mC8I75Hr9viTsF+fsW5BzxTSO1IFQNz6DJvnC/lPv9L6Ab4KcvfJU6gC94y9NfMP31s7i5XY5RIn6LJqKRxjAKDuOVppiQA65ycUhaEvVeQya8dVuF6uCYKClVFADVGd5FyGt9RTWAAgg50ahiNFm2YkcCarHv3QTW/6Jna0TY0VA0FEpnMkbciKJ0RGSrrMN/XzzKfy7p3saOsq21cUl7FVQ2Dboqxg8D38S4hnxooL2bGRU1qurqAtP1Q1M7xzd3Sd4MKlx9aN7cxtWq/1OQAi25ohrK0s0ilVHwbgmKVNGWD1T/IMmcmd2u68h5MhPsLpW6Mf7ZEUPfceC+0zfhdXy9uTm5cQffujnZrMQFzmZdv+n0HyDOnl33Z4RjOcFoIL338N50IIpBxBEd9+2+7fV+vGGHQ5Y18NCTDw1EwkITYRu/JwZe9fPMI+IfxFUsyjbSqvKhAcwt168pdedsTBbTzZxTnRzRxQyV/if8uggP8y2VcpqWw7iyTmgJOy3GuEu5oK35P5xC0L6GZFag308hopD9/6r3KyoE7rKG5Tqi3D9z8s6TM/3+7mEeeCxiPDanxdWDjxmRxwKIeebmVFVePajGtTl5VaWLcGDdLdMVpbTvxD0n9pWUyvQtew1RfioQFOU/1vU/Lotg4KmyMEz9nnuM2OINTVu8ETPuuUeXPuNZUcFYEmd9rFRbYSxfVUjLiN9dFerqyvd2yKWFBEEB548Fup3m1PWnBQHUERnjyKYur0O1v1pBfvl30u2Hnj4EwydOw/CBOyd23vd4+YefpuUbvHb84elmO9HXD1P3Tq1f48YM5VZ17msH5/d1fPtmWQndeOwTd1EnZNeXbtwsoBRbcbJ29T3T0GbGDO+3J95aen6KxViWDVCHL8i5wsPAxPLfE1FDb55RmQnmCYgrEoijOyX+6KeDoE66Tt5ONjkSgheKBA9LqL6qpqchU0E7QaSYtJ3+irSVimrrmpLJU3ej0gsK6vTRXbdlEXtnb9u17Z9B+Un9m9Hg5rmoE93YF4zCPwZ31H9b/6f6b3cEgzvAgAIYO4IwfMe64Q03nOX3fXzD8Lo7brzrLtiCz85tCkajwb6N0b9LJD738MOfSxTs2x7mj3yGsEgjzzBYB9Xw2hGCYAZOzYWG2uR6nFlvxlJeEZfO732ziNsX84be4ffMGz7/gRmQb1dyTX8Q/dtArU8Hb8Wybmgod53NBlQOilxbg9mPCIstK3sTAzE7O5BMJuTKkvJgwfulBskXM0CBMymXLQrpkSoDMVmJ6aA2QjGG4SJkRk38g5sd61dtYGoQ4St+jHY+U23r4aVWOEjtseoMnDgvfwCEm2+hp6r/X91AK4zYkU3HMVEaxnR3qBfqPzn+/wHPnsOreJxjYGRgYABi1vIsoXh+m68M3MwvgCIMt5YoxkDp2P9f/2exVDAHAbkcDEwgUQAz1Qu/AHicY2BkYGAO+p/FwMBS9v/r/68sFQxAERQQDACh8QbyeJxdT0sVwzAMy49AkAxAkbT3UQiAITGAISmAYQiA9th4ttUs7Q568UeSlVidiwSkB3PUPg+ESd6ZD/+8v7HyrtzwghY89ZB6BcyrYqc6RZhw48YhaA1Wc/v1PQtdeXJ/HppUmFM597nvBVK7D+Z+E8/uQZLBgDyaz3Llvxx02S3c/Hv813JrznryZP4F+6lSfQAAAAAAAAAAUAC2ATABaAGyAfoCJAKwAzYDmgQSBFwExgUyBbQF/AZOBvwHRAe2B/YISgigCPIJGglCCWQJignACgAKQAp2CroLAAtGC4oL8gxcDPINng5iDuYPag/6EF4RIBGGEeQSShKYEyQTbhOyFAoUYhS+FVoVphYoFooXHBeGGFoYnhjGGOwZChlOGXgZrBneGhwaWhqgGtIbLhvyHHQc2B1QHZ4d/wABAAAAUwBtAAYAAAAAAAIAIAAwAHMAAAB2C3AAAAAAeJx1kN9q2zAUh39q0441YxcbjN3tXJWWEcc1lEGvWkLbXZeSu8JUV/6T2VKQlY48w95ifYa9zt6jd/vFESUUYiP5O5/O8ZEE4AP+QWH9nHKsWeEdozXv4A0uIu/Sf488IN9G3sMQPyLv0/+MfICv+BV5iI/4wz+owVtGM/yNrPBZfYm8g/fqW+Rd+svIA/Jd5D18UovI+/S/Ix9gqp4iD3GoniduvvR1WQU5mhxLlmap3C/FUdVWN6IXoXK+k3MpnA2maVySuza0ZlToUZ07292YctFov6k2eWp8VzsrJ0m6qa+NNV4H87Dq1j2WWQiFFN61chX7yNy7mclDUoUwPxuPN/tjAoc5lvCoUaJCgOCI9pjfDGk/BPfMEGaus2pYaDQ0GgtWVP1Kx/ico2BkaQ0zGnKCnHNL09KNuK451721rLqhLfmfht5vzdrmp7Sr3nUfC07YL92afU1r+wrd7/Dh5WwdHrmLjDawanUK3+9acPXqPML7Wq3NaHL6pL+1QHuGMd8t5/8PvPGO3QAAAHicbZLnlpswEIV9DRiwvZtseu89Ib333vvmBWRZYMVC0pHEEufpg8BO/kTncOfTaLgMOtPr97o17P1/baKPACEiDBAjQYohRhhjDevYhu3YwA7sxC7sxh7sxT7sxwEcxCEcxhEcxTEcxwmcxCmcxhmcxTmcxwVcxCVkuIwruIpruI4buIlbuI07uIt7uI8HeIhHeIwneIpneI4XeIlXeI03eIt3eI8P+IhP+Iwv+Ipv+I5N/OiF1hEz9JKxUrtFrDl1lWF9NR9QIikToRaVjUouKxvOmNBjLxnlhgo2DbnM1djLKrNGnGPScSUzItzGv93yPP2bSQSX84z9cqFQdJ56yZRmMhW8mLlJJSaBI0XYPDaZKDUviZmvr6DrNjJMi0WcK1MTM02mqpbZlJtEsNx5SI238jSodJtoS7qv+BpPw67IY9xU+dg5TXjROTWwdGrIOzWhT+uA0jolxqjaZrSOnCF2Nmq16651EYpMm1fakAul9SJQeR5QVYQlk1VkZ8SwoVNFIVjWnKQrlBGdMToftdoZjrs77DajqXKrS02YEFxbbtdWkG0x44JJVUS5aBqKSlJwmhDrmOF2Hv9Wqsy4TNqoKhfmSrrQKuNSL5nvPG6p0s0AkEWkSWVZMy1Kx3ljk03qLuZ14lTmB8gNGmByGrGfjLrhlhJV2f7SaIneNF1ypQNbybBUSgZswQaWEUNngeay1/sD4l/60HicY/DewXAiKGIjI2Nf5AbGnRwMHAzJBRsZWJ02MTAyaIEYm7mYGDkgLD4GMIvNaRfTAaA0J5DN7rSLwQHCZmZw2ajC2BEYscGhI2Ijc4rLRjUQbxdHAwMji0NHckgESEkkEGzmYWLk0drB+L91A0vvRiYGFwAMdiP0AAA=') format('woff')}</style> <style id="style-core" type="text/css">html{font:16px/1 Helmet,Freesans,sans-serif}#store-area,tw-storydata{display:none!important;z-index:0}.no-transition{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{outline:thin dotted}:disabled{cursor:not-allowed!important}body{color:#eee;background-color:#111;overflow:auto}a{cursor:pointer;color:#68d;text-decoration:none;-webkit-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}a:hover{color:#8af;text-decoration:underline}a.link-broken{color:#c22}a.link-broken:hover{color:#e44}a[disabled],span.link-disabled{color:#aaa;cursor:not-allowed!important;text-decoration:none}area{cursor:pointer}button{cursor:pointer;color:#eee;background-color:#35a;border:1px solid #57c;line-height:normal;padding:.4em;-webkit-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button:hover{background-color:#57c;border-color:#79e}button:disabled{background-color:#444;border:1px solid #666}input,select,textarea{color:#eee;background-color:transparent;border:1px solid #444;padding:.4em}select{padding:.34em .4em}input[type=text]{min-width:18em}textarea{min-width:30em;resize:vertical}input[type=checkbox],input[type=file],input[type=radio],select{cursor:pointer}input[type=range]{-webkit-appearance:none;min-height:1.2em}input[type=range]:focus{outline:0}input[type=range]::-webkit-slider-runnable-track{background:#222;border:1px solid #444;border-radius:0;cursor:pointer;height:10px;width:100%}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:#35a;border:1px solid #57c;border-radius:0;cursor:pointer;height:18px;margin-top:-5px;width:33px}input[type=range]:focus::-webkit-slider-runnable-track{background:#222}input[type=range]::-moz-range-track{background:#222;border:1px solid #444;border-radius:0;cursor:pointer;height:10px;width:100%}input[type=range]::-moz-range-thumb{background:#35a;border:1px solid #57c;border-radius:0;cursor:pointer;height:18px;width:33px}input[type=range]::-ms-track{background:0 0;border-color:transparent;color:transparent;cursor:pointer;height:10px;width:calc(100% - 1px)}input[type=range]::-ms-fill-lower{background:#222;border:1px solid #444;border-radius:0}input[type=range]::-ms-fill-upper{background:#222;border:1px solid #444;border-radius:0}input[type=range]::-ms-thumb{background:#35a;border:1px solid #57c;border-radius:0;cursor:pointer;height:16px;width:33px}input:not(:disabled):focus,input:not(:disabled):hover,select:not(:disabled):focus,select:not(:disabled):hover,textarea:not(:disabled):focus,textarea:not(:disabled):hover{background-color:#333;border-color:#eee}hr{display:block;height:1px;border:none;border-top:1px solid #eee;margin:1em 0;padding:0}audio,canvas,progress,video{max-width:100%;vertical-align:middle}.error-view{background-color:#511;border-left:.5em solid #c22;display:inline-block;margin:.1em;max-width:100%;padding:0 .25em;position:relative}.error-view>.error-toggle{background-color:transparent;border:none;line-height:inherit;left:0;padding:0;position:absolute;top:0;width:1.75em}.error-view>.error{display:inline-block;margin-left:.25em}.error-view>.error-toggle+.error{margin-left:1.5em}.error-view>.error-source[hidden]{display:none}.error-view>.error-source:not([hidden]){background-color:rgba(0,0,0,.2);display:block;margin:0 0 .25em;overflow-x:auto;padding:.25em}.highlight,.marked{color:#ff0;font-weight:700;font-style:italic}.nobr{white-space:nowrap}.error-view>.error-toggle:before,.error-view>.error:before,[data-icon-after]:after,[data-icon-before]:before,[data-icon]:before,a.link-external:after{font-family:tme-fa-icons!important;font-style:normal;font-weight:900;font-variant:normal;line-height:1;speak:never;text-rendering:auto;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[data-icon]:before{content:attr(data-icon)}[data-icon-before]:before{content:attr(data-icon-before) "\00a0\00a0"}[data-icon-after]:after{content:"\00a0\00a0" attr(data-icon-after)}.error-view>.error-toggle:before{content:"\e81a"}.error-view>.error-toggle.enabled:before{content:"\e818"}.error-view>.error:before{content:"\e80d\00a0\00a0"}a.link-external:after{content:"\00a0\e80e"}</style> <style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style> <style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-transition:opacity 0s;transition:opacity 0s}}</style> <style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.macro-append-in,.macro-linkappend-in,.macro-linkprepend-in,.macro-linkreplace-in,.macro-prepend-in,.macro-repeat-in,.macro-replace-in,.macro-timed-in{opacity:0}.macro-type-cursor:after{-webkit-animation:cursor-blink 1s infinite;-o-animation:cursor-blink 1s infinite;animation:cursor-blink 1s infinite;content:"\2590";opacity:1}</style> <style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay.open{visibility:visible;-webkit-transition:opacity .2s ease-in;-o-transition:opacity .2s ease-in;transition:opacity .2s ease-in}#ui-overlay:not(.open){-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in}#ui-overlay{visibility:hidden;opacity:0;z-index:100000;position:fixed;top:-50%;left:-50%;height:200%;width:200%}#ui-dialog.open{display:block;-webkit-transition:opacity .2s ease-in;-o-transition:opacity .2s ease-in;transition:opacity .2s ease-in}#ui-dialog{display:none;opacity:0;z-index:100100;position:fixed;top:50px;margin:0;padding:0}#ui-dialog>*{-webkit-box-sizing:border-box;box-sizing:border-box}#ui-dialog-titlebar{position:relative}#ui-dialog-close{display:block;position:absolute;right:0;top:0;white-space:nowrap}#ui-dialog-body{overflow:auto;min-width:280px;height:92%;height:calc(100% - 2.1em)}@media (prefers-reduced-motion:reduce){#ui-overlay.open{-webkit-transition:opacity 0s;-o-transition:opacity 0s;transition:opacity 0s}#ui-overlay:not(.open){-webkit-transition:opacity 0s;-o-transition:opacity 0s;transition:opacity 0s}#ui-dialog.open{-webkit-transition:opacity 0s;-o-transition:opacity 0s;transition:opacity 0s}}#ui-overlay{background-color:#000}#ui-overlay.open{opacity:.8}#ui-dialog{max-width:66em}#ui-dialog.open{opacity:1}#ui-dialog-titlebar{background-color:#444;min-height:24px}#ui-dialog-title{margin:0;padding:.2em 3.5em .2em .5em;font-size:1.5em;text-align:center;text-transform:uppercase}#ui-dialog-close{cursor:pointer;font-size:120%;margin:0;padding:0;width:3.6em;height:92%;background-color:transparent;border:1px solid transparent;-webkit-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}#ui-dialog-close:hover{background-color:#b44;border-color:#d66}#ui-dialog-body{background-color:#111;border:1px solid #444;text-align:left;line-height:1.5;padding:1em}#ui-dialog-body>:first-child{margin-top:0}#ui-dialog-body hr{background-color:#444}#ui-dialog-body ul.buttons{margin:0;padding:0;list-style:none}#ui-dialog-body ul.buttons li{display:inline-block;margin:0;padding:.4em .4em 0 0}#ui-dialog-body ul.buttons>li+li>button{margin-left:1em}#ui-dialog-close{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#ui-dialog-close{font-family:tme-fa-icons!important;font-style:normal;font-weight:900;font-variant:normal;line-height:1;speak:never;text-rendering:auto;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}</style> <style id="style-ui" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em .33em}#ui-dialog-body.saves td:first-child{min-width:1.5em;text-align:center}#ui-dialog-body.saves td:nth-child(3){line-height:1.2}#ui-dialog-body.saves td:last-child{text-align:right}#ui-dialog-body.saves .empty{color:#999;speak:none;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#ui-dialog-body.saves .datestamp{font-size:75%;margin-left:1em}#ui-dialog-body.saves ul.buttons li{padding:.4em}#ui-dialog-body.saves ul.buttons>li+li>button{margin-left:.2em}#ui-dialog-body.saves ul.buttons li:last-child{float:right}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-top:0}#ui-dialog-body.settings div[id|=header-body]:not(:first-child){border-top:1px solid #444;padding-top:1em}#ui-dialog-body.settings div[id|=header-body]>*{margin:0}#ui-dialog-body.settings h2[id|=header-heading]{font-size:1.375em}#ui-dialog-body.settings p[id|=header-desc],#ui-dialog-body.settings p[id|=setting-desc]{font-size:87.5%;margin:0 0 0 .5em}#ui-dialog-body.settings div[id|=setting-body]+div[id|=setting-body]{margin:1em 0}#ui-dialog-body.settings [id|=setting-control]{white-space:nowrap}#ui-dialog-body.settings button[id|=setting-control]{color:#eee;background-color:transparent;border:1px solid #444;padding:.4em}#ui-dialog-body.settings button[id|=setting-control]:hover{background-color:#333;border-color:#eee}#ui-dialog-body.settings button[id|=setting-control].enabled{background-color:#282;border-color:#4a4}#ui-dialog-body.settings button[id|=setting-control].enabled:hover{background-color:#4a4;border-color:#6c6}#ui-dialog-body.settings input[type=range][id|=setting-control]{max-width:35vw}#ui-dialog-body.list a,#ui-dialog-body.settings span[id|=setting-input]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#ui-dialog-body.saves button[id=saves-clear]:before,#ui-dialog-body.saves button[id=saves-export]:before,#ui-dialog-body.saves button[id=saves-import]:before,#ui-dialog-body.settings button[id|=setting-control].enabled:after,#ui-dialog-body.settings button[id|=setting-control]:after{font-family:tme-fa-icons!important;font-style:normal;font-weight:900;font-variant:normal;line-height:1;speak:never;text-rendering:auto;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#ui-dialog-body.saves button[id=saves-export]:before{content:"\e829\00a0"}#ui-dialog-body.saves button[id=saves-import]:before{content:"\e82a\00a0"}#ui-dialog-body.saves button[id=saves-clear]:before{content:"\e827\00a0"}#ui-dialog-body.settings button[id|=setting-control]:after{content:"\00a0\00a0\e830"}#ui-dialog-body.settings button[id|=setting-control].enabled:after{content:"\00a0\00a0\e831"}</style> <style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{position:fixed;z-index:50;top:0;left:0;width:17.5em;height:100%;margin:0;padding:0;-webkit-transition:left .2s ease-in;-o-transition:left .2s ease-in;transition:left .2s ease-in}#ui-bar.stowed{left:-15.5em}#ui-bar-tray{position:absolute;top:.2em;left:0;right:0}#ui-bar-body{height:90%;height:calc(100% - 2.5em);margin:2.5em 0;padding:0 1.5em}#ui-bar.stowed #ui-bar-body,#ui-bar.stowed #ui-bar-history{visibility:hidden;-webkit-transition:visibility .2s step-end;-o-transition:visibility .2s step-end;transition:visibility .2s step-end}@media (prefers-reduced-motion:reduce){#story{-webkit-transition:margin-left 0s;-o-transition:margin-left 0s;transition:margin-left 0s}#ui-bar{-webkit-transition:left 0s;-o-transition:left 0s;transition:left 0s}}#ui-bar{background-color:#222;border-right:1px solid #444;text-align:center}#ui-bar a{text-decoration:none}#ui-bar hr{border-color:#444}#ui-bar-history [id|=history],#ui-bar-toggle{font-size:1.2em;line-height:inherit;color:#eee;background-color:transparent;border:1px solid #444}#ui-bar-toggle{display:block;position:absolute;top:0;right:0;border-right:none;padding:.3em .45em .25em}#ui-bar.stowed #ui-bar-toggle{padding:.3em .35em .25em .55em}#ui-bar-toggle:hover{background-color:#444;border-color:#eee}#ui-bar-history{margin:0 auto}#ui-bar-history [id|=history]{padding:.2em .45em .35em}#ui-bar-history #history-jumpto{padding:.2em .665em .35em}#ui-bar-history [id|=history]:not(:first-child){margin-left:1.2em}#ui-bar-history [id|=history]:hover{background-color:#444;border-color:#eee}#ui-bar-history [id|=history]:disabled{color:#444;background-color:transparent;border-color:#444}#ui-bar-body{line-height:1.5;overflow:auto}#ui-bar-body>:not(:first-child){margin-top:2em}#story-title{margin:0;font-size:162.5%}#story-author{margin-top:2em;font-weight:700}#menu ul{margin:1em 0 0;padding:0;list-style:none;border:1px solid #444}#menu ul:empty{display:none}#menu li{margin:0}#menu li:not(:first-child){border-top:1px solid #444}#menu li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-transform:uppercase}#menu li a:hover{background-color:#444;border-color:#eee}#menu a,#ui-bar-history [id|=history],#ui-bar-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#menu-core li[id|=menu-item] a:before,#ui-bar-history [id|=history],#ui-bar-toggle:before{font-family:tme-fa-icons!important;font-style:normal;font-weight:900;font-variant:normal;line-height:1;speak:never;text-rendering:auto;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#ui-bar-toggle:before{content:"\e81d"}#ui-bar.stowed #ui-bar-toggle:before{content:"\e81e"}#menu-item-saves a:before{content:"\e82b\00a0"}#menu-item-settings a:before{content:"\e82d\00a0"}#menu-item-restart a:before{content:"\e82c\00a0"}#menu-item-share a:before{content:"\e82f\00a0"}</style> <style id="style-ui-debug" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:75%;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:0;width:8em}#debug-bar>div>select{width:15em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #444;height:101%;height:calc(100% + 1px);left:-2em;left:calc(-2em - 1px);position:absolute;top:-1px;width:2em}#debug-bar-toggle:hover{background-color:#333;border-color:#eee}#debug-bar-hint{bottom:.175em;font-size:4.5em;opacity:.33;pointer-events:none;position:fixed;right:.6em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}#debug-bar-watch{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:102%;bottom:calc(100% + 1px);font-size:.9em;left:-1px;max-height:650%;max-height:65vh;position:absolute;overflow-x:hidden;overflow-y:scroll;right:0;z-index:99800}#debug-bar-watch[hidden]{display:none}#debug-bar-watch div{color:#999;font-style:italic;margin:1em auto;text-align:center}#debug-bar-watch table{width:100%}#debug-bar-watch tr:nth-child(2n){background-color:rgba(127,127,127,.15)}#debug-bar-watch td{padding:.2em 0}#debug-bar-watch td:first-child+td{padding:.2em .3em .2em .1em}#debug-bar-watch .watch-delete{background-color:transparent;border:none;color:#c00}#debug-bar-watch-all,#debug-bar-watch-none{margin-left:.5em}#debug-bar-views-toggle,#debug-bar-watch-toggle{color:#eee;background-color:transparent;border:1px solid #444;margin-right:1em;padding:.4em}#debug-bar-views-toggle:hover,#debug-bar-watch-toggle:hover{background-color:#333;border-color:#eee}#debug-bar-watch:not([hidden])~div #debug-bar-watch-toggle,html[data-debug-view] #debug-bar-views-toggle{background-color:#282;border-color:#4a4}#debug-bar-watch:not([hidden])~div #debug-bar-watch-toggle:hover,html[data-debug-view] #debug-bar-views-toggle:hover{background-color:#4a4;border-color:#6c6}#debug-bar-hint:after,#debug-bar-toggle:before,#debug-bar-views-toggle:after,#debug-bar-watch .watch-delete:before,#debug-bar-watch-add:before,#debug-bar-watch-all:before,#debug-bar-watch-none:before,#debug-bar-watch-toggle:after{font-family:tme-fa-icons!important;font-style:normal;font-weight:900;font-variant:normal;line-height:1;speak:never;text-rendering:auto;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#debug-bar-toggle:before{content:"\e838"}#debug-bar-hint:after{content:"\e838\202f\e822"}#debug-bar-watch .watch-delete:before{content:"\e804"}#debug-bar-watch-add:before{content:"\e805"}#debug-bar-watch-all:before{content:"\e83a"}#debug-bar-watch-none:before{content:"\e827"}#debug-bar-views-toggle:after,#debug-bar-watch-toggle:after{content:"\00a0\00a0\e830"}#debug-bar-watch:not([hidden])~div #debug-bar-watch-toggle:after,html[data-debug-view] #debug-bar-views-toggle:after{content:"\00a0\00a0\e831"}html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[data-name][data-type].nonvoid:after,html[data-debug-view] .debug[data-name][data-type]:before{background-color:rgba(0,0,0,.25);font-family:monospace,monospace;white-space:pre}html[data-debug-view] .debug[data-name][data-type]:before{content:attr(data-name)}html[data-debug-view] .debug[data-name][data-type|=macro]:before{content:"<<" attr(data-name) ">>"}html[data-debug-view] .debug[data-name][data-type|=macro].nonvoid:after{content:"<</" attr(data-name) ">>"}html[data-debug-view] .debug[data-name][data-type|=html]:before{content:"<" attr(data-name) ">"}html[data-debug-view] .debug[data-name][data-type|=html].nonvoid:after{content:"</" attr(data-name) ">"}html[data-debug-view] .debug[data-name][data-type]:not(:empty):before{margin-right:.25em}html[data-debug-view] .debug[data-name][data-type].nonvoid:not(:empty):after{margin-left:.25em}html[data-debug-view] .debug[data-name][data-type|=special],html[data-debug-view] .debug[data-name][data-type|=special]:before{display:block}</style> </head> <body> <div id="init-screen"> <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div> <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div> <div id="init-loading"><div>Loading…</div></div> </div> <tw-storydata name="The Outlaw: Empyrean War V 0.1" startnode="1" creator="Twine" creator-version="2.8.1" format="SugarCube" format-version="2.36.1" ifid="3544ac22-c336-4092-877b-0ecfe70595c3" options="" tags="" zoom="0.3" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="The Outlaw" tags="" position="525,175" size="100,100">Welcome to the Outlaw: Empyrean War. This is a text-based, fantasy-themed mix of RPG and sandbox with an emphasis on exploration. Warning: The Outlaw: Empyrean War is an adult game only meant for audiences of adult age (18+ or your local jurisdiction's equivalent). By continuing to play, you acknowledge that you are an adult. All characters portrayed in sexual activities are fictional and of adult age. Any resemblance to real life characters, locations, events and so on are fully coincidental. The Outlaw: Empyrean War is a free game. Current Game Version: 0.4a Please input your name: <<textbox "$name" "">> Please pick your background: <<='[[Knight|Continue][$class to "Knight"]]'>> <<='[[Novice|Continue][$class to "Novice"]]'>> <<='[[Priest|Continue][$class to "Priest"]]'>> <<='[[Farmer|Continue][$class to "Farmer"]]'>> <<set $ThaliaQuest to 0>> <<set $DahliaQuest to 0>> <<set $player = { name: $name, maxHP: 100, HP: 100, maxMP: 10, MP: 10, maxattack: 20, attack: 20, maxspeed: 10, speed: 10, coins: 0, supplies: 0, }>> <<set $spell to []>> <<set $ability to []>> <<set $day to 0>></tw-passagedata><tw-passagedata pid="2" name="Continue" tags="" position="500,300" size="100,100"><<if $class is "Knight">> You are $name, a knight born from a noble family who dwells in the Capital. Bonus: as a nobleborn, you command a certain degree of respect from certain persons ... and a degree of disgust from others. Also, your training affords you a strong body. (HP + 30) <<set $player = { name: $name, maxHP: 130, HP: 130, maxMP: 10, MP: 10, maxattack: 20, attack: 20, maxspeed: 10, speed: 10, coins: 0, supplies: 0, }>> <<set $spell to ["Attack"]>> <<set $ability to ["Nobleborn"]>> <<set $spelldesc to ["Normal attack with your weapon;cost: 0 MP"]>> <<elseif $class is "Farmer">> You are $name, the third son of a poor farmer's family who decides to go to the Capital in search of new fortune. Bonus: as a farmer, your hard work in the fields have strengthened your endurance (HP + 30). Also, you were once taught about lockpicking from your father. (Ability: Lockpicking) <<set $player = { name: $name, maxHP: 130, HP: 130, maxMP: 10, MP: 10, maxattack: 20, attack: 20, maxspeed: 10, speed: 10, coins: 0, supplies: 0, }>> <<set $spell to ["Attack"]>> <<set $ability to ["Lockpicking"]>> <<set $spelldesc to ["Normal attack with your weapon;cost: 0 MP"]>> <<elseif $class is "Novice">> You are $name, a novice of the widely hated but necessary arcane and magic arts. You head to the Capital to visit an old friend. Bonus: though your command of the arcane is weak to say the least, you nonetheless has some magic. (Spell: Arcane Bolt) (Spell: Minor Heal) <<set $player = { name: $name, maxHP: 100, HP: 100, maxMP: 10, MP: 10, maxattack: 20, attack: 20, maxspeed: 10, speed: 10, coins: 0, supplies: 0, }>> <<set $spell to ["Attack", "Arcane Bolt", "Minor Heal"]>> <<set $ability to []>> <<set $spelldesc to ["Normal attack with your weapon;cost: 0 MP","A bolt of arcane magic, hurled at your opponent;cost: 5 MP","A small wave of healing magic;cost: 5 MP"]>> <<elseif $class is "Priest">> You are $name, a priest of the Light-King, the dominant deity in the Kingdom. You are going to attend a big sermon in the Capital. Bonus: though training, you are able to use the blessing of the Light-King to heal yourself and others, and your movement is unusually nimble. (Spell: Minor Heal) (Speed + 5) <<set $player = { name: $name, maxHP: 100, HP: 100, maxMP: 10, MP: 10, maxattack: 20, attack: 20, maxspeed: 15, speed: 15, coins: 0, supplies: 0, }>> <<set $spell to ["Attack", "Minor Heal"]>> <<set $ability to []>> <<set $spelldesc to ["Normal attack with your weapon;cost: 0 MP","A bolt of arcane magic, hurled at your opponent;cost: 5 MP"]>> <<else>> Sorry, you have chosen an invalid class. Please pick between the four provided classes and be sure to pay attention to capitalization. [[return|The Outlaw]] <<endif>> [[Head to the Capital]]</tw-passagedata><tw-passagedata pid="3" name="Head to the Capital" tags="" position="500,425" size="100,100">You enter the Capital of the Kingdom of Walshemia. It is the largest city of the kingdom, and the seat of royal authority. You find yourself drawn to the centre of the city, where the Church's priests are proclaiming some sort of blessing. "This blessing will allow us to identify the corruption of the dark," the head priestess, Priestess Selene, declared. "As an example ...." She picks one of the priests and places a stone on his head. The stone glows purple. "As you may see, the stone glows purple. It means this man is pure of heart. If one is corrupted, the color will be red. Allow me to demonstrate on one of the audience." She scans the audience and takes a look at you. <<if $class is "Knight">> "Good sir! Step forward, please." You do so gracefully. Priestess Selene is an old family friend. She places the stone on your head. A suspiciously long time passes. She holds the stone with trembling hands. It is glowing purple. "Corrupted! Arrest him!" <<elseif $class is "Farmer">> "Would you please step forward?" You do so reluctantly. You are a simple man who doesn't like this stone stuff at all. She places the stone on your head. A suspiciously long time passes. She holds the stone with trembling hands. It is glowing purple. "Corrupted! Arrest him!" <<elseif $class is "Priest">> "One of us! Would you please step forward?" You do so gracefully. Priestess Selene is your own head of religion, after all. She places the stone on your head. A suspiciously long time passes. She holds the stone with trembling hands. It is glowing purple. "Corrupted! Arrest him!" <<elseif $class is "Novice">> "Wizard. Come here." You do so reluctantly. Her expression radiates hatred. The Church is known for its anti-magic stance. She places the stone on your head. A suspiciously long time passes. She holds the stone with trembling hands. It is glowing purple. "Corrupted! Arrest him!" <<endif>> [[What?]]</tw-passagedata><tw-passagedata pid="4" name="What?" tags="" position="500,550" size="100,100">A priest charges at you! You whip out your dagger, unwilling to go down without a fight. "Wait!" you shout. "This is wrong!" <<set $move to "">> [[FIGHT|Combat: Prologue Priest (Opening)]]</tw-passagedata><tw-passagedata pid="5" name="Combat: Prologue Priest (Opening)" tags="" position="675,550" size="100,100">Welcome to the first battle. Combat in this game has an easy mechanic. Below is your HP (self-explanatory) and MP (also self-explanatory). Your enemy has a certain number of HP and MP as well. Speed determines who goes first. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> <<nobr>> <<set $priest = { name: "Priest of the Light-King", maxHP: 60, HP: 60, maxMP: 10, MP: 10, attack: 10, speed: 5, gold: 0, }>> <</nobr>> Name: <<print $priest.name>> HP: <<print $priest.HP>> MP: <<print $priest.MP>> Attack: <<print $priest.attack>> Speed: <<print $priest.speed>> You are fighting a priest of the Light-King! [[Understood|Combat: Priest (Initial Phase)]]</tw-passagedata><tw-passagedata pid="6" name="Combat: Priest (Initial Phase)" tags="" position="700,350" size="100,100"> <<if $player.speed gte $priest.speed>> You are faster than your enemy! [[You make a move|Combat: Priest (Player Move)]] <<elseif $player.speed lt $priest.speed>> The priest is faster than you! [[You brace for impact|Combat: Priest (Enemy Move)]] <<endif>></tw-passagedata><tw-passagedata pid="7" name="Combat: Priest (Player Move)" tags="" position="800,125" size="100,100">Choose your move! <<for _i to 0; _i lt $spell.length; _i++>> <<='[[$spell[_i]|Combat: Priest (Player Move) 2][$move to $spell[' + _i + ']]]'>> <<print _i + 1>>. $spell[_i] ( $spelldesc[_i] ) <</for>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $priest.name>> HP: <<print $priest.HP>> MP: <<print $priest.MP>> Attack: <<print $priest.attack>> Speed: <<print $priest.speed>> </tw-passagedata><tw-passagedata pid="8" name="Combat: Priest (Enemy Move)" tags="" position="925,250" size="100,100"><<set $player.HP to $player.HP - $priest.attack>> The priest swings a dagger, dealing $priest.attack damage! <<set $priestcombat to 1>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[Game Over]] <<elseif $player.MP gte 0>> <<if $priest.HP lte 0>> You stand triumphant. [[Continue|Combat: Priest (Victory)]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $priestcombat is 0>> [[Continue|Combat: Priest (Enemy Move)]] <<elseif $priestcombat is 1>> [[Continue|Combat: Priest (Player Move)]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="9" name="Game Over" tags="" position="1450,275" size="100,100"><<if $enemy.name is "Xian">> Xian walks towards you ... [[brace yourself|Xian's victory]] <<elseif $enemy.name is "Malkoth">> Malkoth shambles towards you ... [[brace yourself|DoB 8]] <<elseif $enemy.name is "Luo">> Luo calmly walks forward ... [[brace yourself|Luo's victory]] <<else>> One way or another, this is the end. <<endif>></tw-passagedata><tw-passagedata pid="10" name="Combat: Priest (Victory)" tags="" position="1000,400" size="100,100">You have triumphed over the charging priest. Unfortunately, none of it matters. A throng of guards swarms and handcuffs you before throwing you in prison. You aren't even allowed to speak. In prison, there are already talks of your execution tomorrow. <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> [[You dream ....]]</tw-passagedata><tw-passagedata pid="11" name="Combat: Priest (Player Move) 2" tags="" position="975,75" size="100,100"> <<if $move is "Attack">> <<set $priest.HP to $priest.HP - $player.attack>> You deal $player.attack damage to the priest! <<elseif $move is "Minor Heal">> <<if $spell.includes("Minor Heal")>> <<set $player.HP to $player.HP + 35>> <<set $player.MP to $player.MP - 5>> You heal yourself for 35 HP. <<else>> You try to cast Minor Heal, whatever the heck that is. You look like a buffoon and whatever you just tried didn't work. <<endif>> <<elseif $move is "Arcane Bolt">> <<if $spell.includes("Arcane Bolt")>> <<set $priest.HP to $priest.HP - 40>> <<set $player.MP to $player.MP - 5>> You send a small bolt of arcane energy, dealing 40 damage to the priest! <<else>> You try to cast Arcane Bolt, whatever the heck that is. You look like a buffoon and whatever you just tried didn't work. <<endif>> <<else>> You try to cast $move, whatever the heck that is. You look like a buffoon and whatever you just tried didn't work. <<endif>> <<set $priestcombat to 0>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[Game Over]] <<elseif $player.MP gte 0>> <<if $priest.HP lte 0>> You stand triumphant. [[Continue|Combat: Priest (Victory)]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $priestcombat is 0>> [[Continue|Combat: Priest (Enemy Move)]] <<elseif $priestcombat is 1>> [[Continue|Combat: Priest (Player Move)]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="12" name="You dream ...." tags="" position="500,700" size="100,100">"Is it fair?" You hear an ethereal voice asking. "Fair or not, what can I do?" you mumble back in your feverish dreams. "I'm just a $class. One man. What can one man do against the entire Church?" A vision overwhelms you. In the mysterious lands that your folk call "Hell", or "the Underworld", or "the Empyrean", there lies grand castles and manors. There rules a king. Not a king of fair, not a king of light, but a king clad in dark, clad in shadows. "The King will arrive soon," the ethereal voice whispers. "Come to us ... seek our king ... life--revenge--power eternal--the dagger will lead you to us, yes, the blackstone--" "What are you talking about? Who ... who are you?" "The blackstone will be your weapon. Your engine of destruction. Mere steel and wood shall not be your weapon. I curse and I bless your touch." "Hey! HEY!" a loud shout woke you up. You stir sluggishly. Was that just a dream? Empyrean? Blackstone? King in dark? What the hell was that? "You've been mumbling like an idiot these past hours," the prison guard who shouted earlier rages. He spits at the floor before grinning. "Well, how does the corruption feel? This is what you get for turning your back on the Light-King!" You find your hand meddling in your pocket. There is something sharp there. You pull it out carefully. It is a particularly large dagger--some can make the argument that it's a short sword; it is made of a strange, gleaming, dark metal. Whatever it is, it's certainly better than your previous weapon. <<set $player.maxattack to 25>> <<set $player.attack to 25>> Something inside you lights up. Executed? Hell no. You'll get out of here. Yes. You have to get out. Even if you end up becoming an outlaw, hiding in the forests and the slums, you have to get out. Your determination burns like a firestorm. But how do you escape .... <<if $class is "Farmer">> Lockpick! Your trusty lockpick is still in your pocket. You wait a few hours until the guards are gone for their dinner, and then lockpick the door lock quickly. You slowly make your way through the endless halls of the prison. Unfortunately, you manage to get lost. "You're close. Go left, then go right, then go left again. There's a side exit there," an old prisoner tells you. "O-oh. Thank you." "Wait!" he hisses. "Can you get me out of here?" You look at the old prisoner. He looks so frail; a light push can probably kill him. You do want to help him, but what if he's here for serious, actual crimes? "I built this prison long ago as a worker," he says. "After the current King Lombard II takes the throne, he banishes me for supporting one of his rival claimants. That's all my crime is, young man." "And if that's not enough, here ...." the old man shows a bag of coins. "Swiped it off some stupid guards some time ago. Now hurry, they'll return soon!" [[Help the old man]] [[Leave him|escape]] <<elseif $class is "Knight">> Someone steps from the shadows. It's your father! "Father, I--" "I know. You are probably framed by our enemies," your noble father whispers. "Here, a map of the prison. You must get out, away from the city. I'm sorry. I've prepared some coins near exit number six. Good luck, son, and with luck, I hope we can meet again." Your father unlocks the cell door and goes into the shadows. You navigate through the treacherous halls carefully, and reach the exit. Just as you are taking the coins left by your father, you are caught by a guard. "Halt! Who goes there?" [[take the gold and fight]] [[escape]] <<elseif $class is "Priest">> Someone steps from the shadows. It's your former fellow priest and teacher, Priest Domek! "Father Domek, I--" "I know. You are probably framed by Priestess Selene. Her stones are likely simply faulty," Father Domek whispers. "Here, a map of the prison. You must get out, away from the city. I'm sorry. I've prepared some coins near exit number six. Good luck, $name, and with luck, I hope we can meet again." Father Domek unlocks the cell door and goes into the shadows. You navigate through the treacherous halls carefully, and reach the exit. Just as you are taking the coins left by Father Domek, you are caught by a guard. "Halt! Who goes there?" [[take the gold and fight]] [[escape]] <<elseif $class is "Novice">> Someone steps from the shadows. It's your teacher and one of the twelve strongest mages in the Kingdom, Archmage Terry! "Archmage, I--" "I know. You are probably framed by the Church. Damn those morons," Archmage Terry whispers. "Here, a map of the prison. You must get out, away from the city. I'm sorry. I've prepared some coins near exit number six. Good luck, $class $name, and with luck, I hope we can meet again." Archmage Terry unlocks the cell door and goes into the shadows. You navigate through the treacherous halls carefully, and reach the exit. Just as you are taking the coins left by the archmage, you are caught by a guard. "Halt! Who goes there?" [[take the gold and fight]] [[escape]] <<endif>></tw-passagedata><tw-passagedata pid="13" name="Help the old man" tags="" position="437.5,825" size="100,100">You lockpick the lock. The old man stands up quietly. "Lead the way," he says as he slips you some coins. (+70 coins) <<set $player.coins to $player.coins + 70>> You go through the halls and the exit is near. You have to climb some stairs, though, so you let the old man climb first while you guard. Unfortunately, one of the patrolling guards catch you. Grinning, he raises his pike. [[FIGHT|Combat: Prison Guard (Opening)]]</tw-passagedata><tw-passagedata pid="14" name="escape" tags="" position="700,1225" size="100,100">One way or another, you manage to flee the prison. C H A P T E R O N E A N E W L I F E You cannot return to proper civilization. Your life as a $class is over. You create a small, makeshift camp near a grassland and bordering a forest. Your condition is miserable, but you swear to one day take revenge on that damn priestess who threw you in prison. And while you're at it, investigate what the hell that dream and this weird blackstone dagger are. [[Makeshift Camp]] <<set $player.supplies to 20>> <<set $Dahliaprogress to 0>> <<set $Villagefavour to 0>> <<set $scorpioncloak to 0>> </tw-passagedata><tw-passagedata pid="15" name="Combat: Prison Guard (Opening)" tags="" position="825,750" size="100,100"> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> <<set $prisonguard = { name: "Prison Guard Tom", maxHP: 110, HP: 110, maxMP: 10, MP: 10, attack: 15, speed: 5, gold: 0, }>> Name: <<print $prisonguard.name>> HP: <<print $prisonguard.HP>> MP: <<print $prisonguard.MP>> Attack: <<print $prisonguard.attack>> Speed: <<print $prisonguard.speed>> You are fighting a prison guard! [[Understood|Combat: Prison Guard (Initial Phase)]]</tw-passagedata><tw-passagedata pid="16" name="Combat: Prison Guard (Initial Phase)" tags="" position="1000,650" size="100,100"><<if $player.speed gte $prisonguard.speed>> You are faster than your enemy! [[You make a move|Combat: Prison Guard (Player Move)]] <<elseif $player.speed lt $prisonguard.speed>> The prison guard is faster than you! [[You brace for impact|Combat: Prison Guard (Enemy Move)]] <<endif>></tw-passagedata><tw-passagedata pid="17" name="Combat: Prison Guard (Player Move)" tags="" position="1050,825" size="100,100">Choose your move! <<for _i to 0; _i lt $spell.length; _i++>> <<='[[$spell[_i]|Combat: Prison Guard (Player Move) 2][$move to $spell[' + _i + ']]]'>> <<print _i + 1>>. $spell[_i] ( $spelldesc[_i] ) <</for>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $prisonguard.name>> HP: <<print $prisonguard.HP>> MP: <<print $prisonguard.MP>> Attack: <<print $prisonguard.attack>> Speed: <<print $prisonguard.speed>> [[Continue|Combat: Prison Guard (Player Move) 2]]</tw-passagedata><tw-passagedata pid="18" name="Combat: Prison Guard (Enemy Move)" tags="" position="1175,500" size="100,100"><<set $player.HP to $player.HP - $prisonguard.attack>> The prison guard swings his rather blunt pike, dealing $prisonguard.attack damage! <<set $prisonguardcombat to 1>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[Game Over]] <<elseif $player.MP gte 0>> <<if $prisonguard.HP lte 0>> You stand triumphant. [[Continue|Combat: Prison Guard (Victory)]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $prisonguardcombat is 0>> [[Continue|Combat: Prison Guard (Enemy Move)]] <<elseif $prisonguardcombat is 1>> [[Continue|Combat: Prison Guard (Player Move)]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="19" name="Combat: Prison Guard (Player Move) 2" tags="" position="1325,700" size="100,100"><<if $move is "Attack">> <<set $prisonguard.HP to $prisonguard.HP - $player.attack>> You deal $player.attack damage to the prison guard! <<elseif $move is "Minor Heal">> <<if $spell.includes("Minor Heal")>> <<set $player.HP to $player.HP + 35>> <<set $player.MP to $player.MP - 5>> You heal yourself for 35 HP. <<else>> You try to cast Minor Heal, whatever the heck that is. You look like a buffoon and whatever you just tried didn't work. <<endif>> <<elseif $move is "Arcane Bolt">> <<if $spell.includes("Arcane Bolt")>> <<set $prisonguard.HP to $prisonguard.HP - 40>> <<set $player.MP to $player.MP - 5>> You send a small bolt of arcane energy, dealing 40 damage to the prison guard! <<else>> You try to cast Arcane Bolt, whatever the heck that is. You look like a buffoon and whatever you just tried didn't work. <<endif>> <<endif>> <<set $prisonguardcombat to 0>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[Game Over]] <<elseif $player.MP gte 0>> <<if $prisonguard.HP lte 0>> You stand triumphant. [[Continue|Combat: Prison Guard (Victory)]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $prisonguardcombat is 0>> [[Continue|Combat: Prison Guard (Enemy Move)]] <<elseif $prisonguardcombat is 1>> [[Continue|Combat: Prison Guard (Player Move)]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="20" name="Combat: Prison Guard (Victory)" tags="" position="1200,650" size="100,100">You have triumphed over the prison guard. There is no time to celebrate, though. You have to escape. <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> [[escape]] </tw-passagedata><tw-passagedata pid="21" name="take the gold and fight" tags="" position="500,950" size="100,100">You raise your blackstone dagger and prepare to fight the guard. <<set $player.coins to $player.coins + 100>> [[FIGHT|Combat: Prison Guard (Opening)]]</tw-passagedata><tw-passagedata pid="22" name="Makeshift Camp" tags="" position="775,1350" size="100,100">This is your makeshift camp. All you have are three decent camps: one for you to sleep in, one for storage, and one as a reserve. You have some coins, and some supplies: assorted materials, foodstuffs, clothes, nails and woods, and suchlike. You consume 2 supplies every day. There are a number of things you can do now. There's a village nearby that you can visit. Maybe the people there has use for someone like you. [[Village]] Or you can head to the forest. It's swarming with bandits, but perhaps you can scavenge some supplies there. [[Forest]] <<if $ThaliaQuest is 4>> You grab a rope and prepare to hunt Thalia down. You should probably be completely sure that you can take her down; she's not likely to be an easy opponent. [[To the forest|Fighting Thalia]] <<endif>> <<if ndef $MainQuest and $Days lt 10>> It has been $Days days since you escaped prison. No doubt the Kingdom will try to hunt you down. There is nothing to do but ''wait''. <<elseif ndef $MainQuest and $Days gte 10 and ndef $TempQuest>> It has been $Days since you escaped prison, yet you have seen no signs of the Kingdom's or the Church's hunters. You look at the village around you; quiet and peaceful. Perhaps you're safe here and now. That is when you hear troubling rumors from a villager: "They say an Imperial agent is lurking nearby ...." [[Investigate|Main Quest]] <<elseif $MainQuest is 1>> Today you spot Natalie hanging around your camp. [[Ask her about her investigations|Main Quest]] <<elseif $MainQuest is 2>> You have received Natalie's request to acquire a book from the village shaman. You should head to the ''Elder's house''. <<elseif $MainQuest is 3>> You have received the book from the elder. [[Meet Natalie with the book|Main Quest]] <<elseif $MainQuest is 4>> You hear rumors of a corrupt priestess patrolling the area. While waiting for Natalie's progress, perhaps it's best to dispatch the priestess before she makes trouble for you. [[Locate the priestess|Corrupted Priestess]] <<elseif $MainQuest is 5>> You make your preparations. To the east, it is ... [[To the east]] Note: This will continue the game to chapter 2. All areas, quests, and interactions in chapter 1 will be gone. <<endif>> <<if $Dahliadecision is true>> Dahlia and her children live with you now. The former is sorting out the herbs she has been foraging. [[Talk to Dahlia]] <<endif>> [[End day]] </tw-passagedata><tw-passagedata pid="23" name="Village" tags="" position="450,1325" size="100,100">You head to the backwater village nearby. It is certainly poor. <<if $class is "Farmer">> Even your own home village, which isn't exactly prosperous, is better than this. <<endif>> The people there don't really pay you any mind. The elder is polite enough. "Welcome to our village, $name. Be courteous to the local folk and we will do the same to you. See me in my house if you want to ask something." You can visit the elder's house [[Elder's house]] There is a shop here, where you can exchange gold for supplies and vice versa. [[Village Trader]] It appears that some of the villagers in the village hall have something to say ... something about bandits in the forest? [[Village Hall|Thalia Quest 1]] Judging from the red lantern, there is one, and only one, prostitute in this village. It's a questionable use of your limited gold--even a handjob would probably cost you at least 15 gold. Your boner seems to disagree, though. [[Prostitute|Dahlia's House]] </tw-passagedata><tw-passagedata pid="24" name="Forest" tags="" position="1000,1325" size="100,100">The forest near your camp is swarming with dangers, but the reward may be worth the risk. <<set _i to random(1,17)>> <<if _i is 1>> You stumble upon some caches of supplies. Suspicious as you are, you can't deny their usefulness for your camp. <<set $player.supplies to $player.supplies + 12>> You loot 12 supplies. [[End day]] <<elseif _i is 2>> You stumble upon a small bag of coins. Suspicious as you are, you can't deny their usefulness for your camp. <<set $player.coins to $player.coins + 20>> You loot 20 coins. [[End day]] <<elseif _i is 3 and $manapotionget isnot true>> You stumble upon a rare potion of mana in a wineskin. You consume it immediately, giving yourself more magical power. <<set $player.MP to $player.MP + 5>> <<set $player.maxMP to $player.maxMP +5>> <<set $manapotionget to true>> [[End day]] <<elseif _i is 3 and $manapotionget is true>> You stumble upon a potion of mana .... Oh wait, this is just water. Drats. You go back to your home, pissed. [[End day]] <<elseif _i gte 4 and _i lt 8>> You find yourself face-to-face with a goblin! [[Fight|Combat: Goblin (Opening)]] [[Flee|Makeshift Camp]] <<elseif _i is 8>> You find a locked chest. <<if $ability.includes("Lockpicking") and $spell.includes("Minor Heal")>> You lockpick the chest with ease. It contains a good number of coins. (+30 gold) You return to your camp. <<set $player.coins to $player.coins + 30>> [[End day]] <<elseif $ability.includes("Lockpicking")>> You lockpick the chest with ease. It contains a scroll about utilizing magic to heal. <<run $spell.push("Heal")>> <<run $spelldesc.push("A small wave of healing magic;cost: 5 MP")>> [[End day]] <<else>> You return to the village with the chest in stow. There you meet a locksmith who agrees to help in return for half of whatever's in there. You return home with your share. (+15 gold) <<set $player.coins to $player.coins + 15>> [[End day]] <<endif>> <<elseif _i is 9>> You meet an old nobleman travelling by horse. <<if $class is "Knight" and $noblemanchat isnot true>> It appears that somehow he manages to discern your noble origins. He invites you for a little chat. The two of you talk pleasantly enough. "Have you heard of the 'Dancing Stance' fighting style?" he asks. You answer in the negative. The nobleman smiles and stands up. For the entire day, the nobleman teaches you his style of swordfighting. You don't think it's a very good style, as it's very flashy, but you nonetheless learn a lesson or two from the nobleman. (Attack + 10), (Speed + 10). <<set $player.attack to $player.attack + 10>> <<set $player.maxattack to $player.maxattack + 10>> <<set $player.speed to $player.speed + 10>> <<set $noblemanchat to true>> [[End day]] <<elseif $class is "Knight" and $noblemanchat is true>> You meet the travelling nobleman again. The two of you chat pleasantly before going your own separate ways. [[End day]] <<elseif $class is "Farmer">> "Out of my way, peasant," he snaps. You do so. There is no point making needless conflict with a noble, not when you're a wanted criminal. You return to your camp. [[End day]] <<elseif $class is "Novice">> "Out of my way, filthy arcanist," he snaps. "Ignoble ilk, practicing of foul magics. You should be glad I do not kill you right here." You do so. There is no point making needless conflict with a noble, not when you're a wanted criminal; though you mentally note that an arcane bolt to his head is probably justified. You return to your camp. [[End day]] <<elseif $class is "Priest">> The nobleman somehow discerns your priestly origins. The two of you talk about theological discussions before he excuses himself. He gifts you some gold as well--in the name of the Light-King, of course. <<set $player.coins to $player.coins + 15>> [[End day]] <<endif>> <<elseif _i gte 10>> <<set _j to random(1,2)>> <<if _j is 1>> You hear screams from afar. You decide to investigate and see a bandit beating a young villager. You can help him or run like hell. [[Fight|Combat: Forest Bandit (Opening)]] [[Flee|Makeshift Camp]] <<else>> You hear screams from afar. You decide to investigate and see a bandit about to rape a young village lass. You can help her or run like hell. [[Fight|Combat: Forest Bandit (Opening)]] [[Flee|Makeshift Camp]] <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="25" name="Village Trader" tags="" position="450,1450" size="100,100">The prices offered by the trader seems a little jacked up, but still acceptable. You remember that the normal price is 2 coins for 1 supply. You currently have $player.coins coins and $player.supplies supplies. You think you'll be able to curry favour with the village by trading. 3 supplies for 10 coins 10 coins for 10 supplies <<if $player.supplies gte 10>> [[Sell supplies for coins|Village Trader][$player.supplies to $player.supplies - 10; $player.coins to $player.coins + 10; $Villagefavour to $Villagefavour + 2]] <<endif>> <<if $player.coins gte 10>> [[Buy supplies with coins|Village Trader][$player.supplies to $player.supplies + 3; $player.coins to $player.coins - 10; $Villagefavour to $Villagefavour + 2]] <<endif>> As you chat with the trader, the day passes. [[End day]]</tw-passagedata><tw-passagedata pid="26" name="Thalia Quest 1" tags="" position="300,1200" size="100,100"><<if $ThaliaQuest is 0>> You decide to chat up with the village folk. After some merriment one of them, John, said, "You know, I'm a bit of a trader myself. I sell crop seeds and shovels and such. Annoying thing is that the forest is full of 'em bandits! You think you can clear 'em, man? I'll pay you good if you take down five of 'em. Just cut their ears or somethin. Or that weird cloak they wear, with scorpion motifs." "I'll see what I can do," you say. You make your way back to your camp. <<set $ThaliaQuest to 1>> [[End day]] <<elseif $ThaliaQuest is 1 and $scorpioncloak lt 5>> You decide to chat up with the village folk. Your conversations are merry but rather pointless as one farmer recounts how he captures his hen or something like that. John reminds you about the bandits. You say goodbye and leave on the evening. [[End day]] <<elseif $ThaliaQuest is 1 and $scorpioncloak gte 5>> You decide to chat up with the village folk and show the scorpion cloaks you took from the prowling bandits. John is happy for your help and gives you 50 coins. <<set $player.coins to $player.coins + 50>>. "The forest should be a little safer now!" he says, "good job, $name." The other villagers also applaud you. Their opinion of you seems to have shifted favorably. <<set $Villagefavour to $Villagefavour + 10>> <<set $ThaliaQuest to 2>> [[End day]] <<elseif $ThaliaQuest is 2>> There appears to be a great commotion in the village hall. You head there to take a look. An old woman was crying, surrounded by the villagers. You don't think it's polite to intrude at this hour, so you return to the camp while making a mental note to return later. <<set $ThaliaQuest to 3>> [[End day]] <<elseif $ThaliaQuest is 3>> <<if $Villagefavour gte 55>> You see the old woman still crying. "What happened?" you ask. She doesn't answer, but a young man grabs you by the shoulder and quietly leads you away. "She is my mother. My brother, John, was killed by a bandit leader," the man explains after stating himself as John's brother, Joseph. "She's angry that John sent you to kill her men. You should be careful as well." "A bandit leader?" you mumble. "Yes ...," Joseph's tone turns lower and lower, "the name's Thalia. She's got a scorpion tattoo on her face. Used to be a villager here ... she's strong, be careful." Although you and John aren't particularly close, you still feel motivated to end Thalia's threat. Perhaps you should comb the forest. <<set $ThaliaQuest to 4>> [[End day]] <<elseif $Villagefavour lt 55>> You see an old woman crying. You try to ask around but are brushed off. [[End day]] <<endif>> <<else>> There are no notable events in the village hall. [[back to the camp|Makeshift Camp]] <<endif>> </tw-passagedata><tw-passagedata pid="27" name="Dahlia's House" tags="" position="575,1450" size="100,100"><<if $Dahliafail is true or $Dahliadecision is true>> Dahlia's house is empty. [[End day]] <<elseif $Dahliadecision is false>> You enter Dahlia's house. You chat for a while. Dahlia's children are growing fine now, and Dahlia herself seems happy. Although Dahlia no longer works as a prostitute, she's more than willing to make an exception for you. "Well, $name, what can I do for you?" [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Titjob|Dahlia Whore Titjob]] [[Vaginal sex|Dahlia Whore Sex]] [[Leave|Dahlia leave]] <<elseif $DahliaQuest is 0>> You enter the house. To your surprise, you are greeted with the wailings of two young children aged perhaps seven or eight. "Oh, you're the new outsider, $name, right?" a woman asks. "I'm Dahlia. I have to feed my children first, so please sit down. My rates are written there." The rates are just simple drawings with the prices. You suppose the villagers are illiterate. <<if $class is "Farmer">> You are lucky enough to be a beneficiary of the late King Manfred III's literacy program, so you can read. <<else>> Thanks to your background, you are able to read. <<endif>> You decipher the rates: Handjob -- 15 gold Blowjob -- 20 gold Titjob -- 25 gold Vaginal sex -- 40 gold Dahlia returns. You take a look at her appearance. She is a relatively mature woman in her late thirties or so. Her large breasts are dangling behind her shirt, tempting you. Her skin is white, creating a pleasing combination with her blonde hair that is left untied, common traits amongst Walshemia's western peoples. "So, have you decided what you'd like?" <<if $player.coins gte 40>> [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Titjob|Dahlia Whore Titjob]] [[Vaginal sex|Dahlia Whore Sex]] [[Leave|Dahlia leave]] <<elseif $player.coins gte 25>> [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Titjob|Dahlia Whore Titjob]] [[Leave|Dahlia leave]] <<elseif $player.coins gte 20>> [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Leave|Dahlia leave]] <<elseif $player.coins gte 15>> [[Handjob|Dahlia Whore Handjob]] [[Leave|Dahlia leave]] <<else>> [[Leave|Dahlia leave]] <<endif>> <<set $DahliaQuest to 1>> <<elseif $Dahliahand is true and $Dahliatit is true and $Dahliablow is true and $Dahliasex is true>> "Oh, hey, $name. I'm not open for business today. But come inside, let's have a drink and talk," Dahlia said, inviting you to her bedroom. You sit down on her bed as she feeds her two, twin children. You watch in silence for a few minutes. "Mommy! Can we go play?" one twin asks. "Okay. But don't go too far, okay?" "Yay!" As the children leaves, Dahlia laments, "poor children. They deserve a better mother. And a better father." "I think you're a good mother," you say. "Heh." "..." "Do you mind me asking?" "Yeah, ask away, you're my best customer, after all," Dahlia says. "Not many want to hire me now. My vagina's not very nice anymore. There are younger prostitutes in nearby villages." "Oh, don't say that," you say. "Where is the children's father?" "Gone. He finds some village lass and abandons me. Ptooey. I hope he's in his coffin now!" Dahlia rages, but she quickly calms down. "You see, $name, I think I'll leave the village soon." "What? Why?" "There's just not enough coins to be made. My children ... they're sickly. They need certain expensive medicines, or else they'll suffer high fevers and coughs," she says. "That's why my former husband leaves. I must leave too--to the city." "What sort of sickness do they have? Were they bitten by some kind of animal, or cursed by some sort of dark thing?" you ask. When Dahlia says 'sickness', it must be something more than some trivial illness curable with local herbs. <<if $spell.includes("Heal")>> I know a minor healing spell. Maybe I can give a hand?" "Oh, don't bother. Sorry, but I don't think your spells can help them." Dahlia smiles appreciatively.>> <<endif>> "The shaman says it is due to a certain curse. There is a sagely woman who roams the woods nearby. Usually you can find her in Lowa's Lake, some one hour west of here. Ah, but don't bother. I asked for her help once. She demanded payment of 30000 coins." No way you can gather that much, you thought to herself. "Maybe I can persuade her to help?" you suggest. "Try if you want--but ah, seriously, just forget it. You know what, next time you come here, if I'm not off yet, I'll let you fuck me for free. Good bye, $name." [[You decide to give it a shot, at least|First meeting with Xian]] <<else>> You remind yourself of the rates: Handjob -- 15 gold Blowjob -- 20 gold Titjob -- 25 gold Vaginal sex -- 40 gold Dahlia greets you. The two of you chat for a little while before she goes straight to business. "So, have you decided what you'd like?" <<if $player.coins gte 40>> [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Titjob|Dahlia Whore Titjob]] [[Vaginal sex|Dahlia Whore Sex]] [[Leave|Dahlia leave]] <<elseif $player.coins gte 25>> [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Titjob|Dahlia Whore Titjob]] [[Leave|Dahlia leave]] <<elseif $player.coins gte 20>> [[Handjob|Dahlia Whore Handjob]] [[Blowjob|Dahlia Whore Blowjob]] [[Leave|Dahlia leave]] <<elseif $player.coins gte 15>> [[Handjob|Dahlia Whore Handjob]] [[Leave|Dahlia leave]] <<else>> [[Leave|Dahlia leave]] <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="28" name="End day" tags="" position="1025,1450" size="100,100"><<nobr>> <<set $player.supplies to $player.supplies - 2>> <<if $player.supplies lt 0>> You run out of supplies. You die a starving and pitiful man. [[Game Over]] <<elseif $player.coins lt 0>> You fall into debt. The kingdom's outrageously persistent debt collectors find you and throw you in prison again. [[Game Over]] <<endif>> <</nobr>> You rest in your camp. Coins: <<print $player.coins>> Supplies: <<print $player.supplies>> <<if $Dahliaquestdone is 1>> You are met with Dahlia and her two children. "Hello, $name. Thank you so much for your help," she says. You stir from your sleep. "Uh, hello," you say. "Is there anything else I can do for you?" "Oh, nothing, nothing. I just want to thank you," she says. "You see, I'm no longer a prostitute." "I see. Good for you," you say, though you do feel a bit dismayed. "Actually, I come here with a proposal," she continues. "I've been switching to herb-foraging. The village always needs herbs, after all, and I turn a decent profit. On the other hand, my house is small, and my children are growing fast now." "Mhm, mhm," you mumble sleepily. "What do you say if I move to your camp permanently?" Dahlia requests. "My children and I will probably use some supplies, but I'll share the coins I get with you. And also ...." Dahlia brings herself near your ear, "I'll be more than willing to 'service' you, $name." You ponder your options. <<set $Dahliaquestdone to 2>> [[Accept|Dahlia decision][$Dahliadecision to true]] [[Decline|Dahlia decision][$Dahliadecision to false]] <<endif>> <<nobr>> <<set _tempsup to random(2,3)>> <<set _tempgol to random(8,12)>> <</nobr>> <<if $Dahliadecision is true>> Today, Dahlia and her children uses up _tempsup supplies. Dahlia gives you _tempgol coins from her labors. <<set $player.supplies to $player.supplies - _tempsup>> <<set $player.coins to $player.coins + _tempgol>> <<endif>> <<if $player.supplies gte 0 and $player.coins gte 0>> [[Wake up|Makeshift Camp]] <<endif>> <<set $day to $day + 1>> <<if $TempQuest is 1 and $tempchange isnot true>> <<set $MainQuest to 1>> <<set $tempchange to true>> <<endif>> <<if $TempQuest is 2 and $tempchange2 isnot true>> <<set $MainQuest to 2>> <<set $tempchange2 to true>> <<endif>> </tw-passagedata><tw-passagedata pid="29" name="Dahlia Whore Handjob" tags="" position="575,1575" size="100,100">"A handjob, please." <<if $Dahliadecision isnot false>> <<set $player.coins to $player.coins - 15>> You set the money on the table. <<endif>> "Please follow me." You go into her bedroom; there was a straw bed and a poor pillow. "Lay down, please." She took off her clothes, revealing her plump body. She wore a pair of simple, white panties and no bra. Her hands softly caressed your thick shaft. Her fingers played skilfully, each movement a delightful massage. "You're very good at this," you compliment. As time passes, her speed increases. "Experience, dear," she says as she continues pumping your erect cock. You feel yourself getting closer and closer to climax. You climaxed, spraying your white, thick sperm unto Dahlia's soft hands. "Thank you for your patronage," she says while smiling as she cleans her hands with a rag. "Come again!" <<set $Dahliahand to true>> [[End day]] </tw-passagedata><tw-passagedata pid="30" name="Dahlia Whore Blowjob" tags="" position="700,1575" size="100,100">"A blowjob, please." <<if $Dahliadecision isnot false>> <<set $player.coins to $player.coins - 20>> You set the money on the table. <<endif>> "Please follow me." You go into her bedroom; there was a straw bed and a poor pillow. "Lay down, please." She took off her clothes, revealing her plump body. She wore a pair of simple, white panties and no bra. Her tongue licked your scrotum carefully, as if savoring an appetizer. It then travelled all the way to the tip of your cock. Without you realizing it, your entire cock was in her warm mouth. You can really feel Dahlia's skill. The experienced whore licked and cleaned your cock thoroughly as it moved around, squirming, being pampered by Dahlia's mouth. You feel your climax coming sooner than you expect. "Mmh ... Dahlia, I'm close," you say. Dahlia makes some gargling sounds that indicate that she doesn't mind swallowing your viscous sperm. You moan softly as your sperm burst into Dahlia's throat. "That's the best blowjob I've ever got," you say as you wear your clothes. "Glad to hear it. Thank you for your patronage," she says while smiling as she wipes her mouth with a rag. "Come again!" [[End day]] <<set $Dahliablow to true>></tw-passagedata><tw-passagedata pid="31" name="Dahlia Whore Titjob" tags="" position="575,1700" size="100,100">"A titjob, please." <<if $Dahliadecision isnot false>> <<set $player.coins to $player.coins - 25>> You set the money on the table. <<endif>> "Please follow me." You go into her bedroom; there was a straw bed and a poor pillow. "Lay down, please." She took off her clothes, revealing her plump body. She wore a pair of simple, white panties and no bra. You play with her swaying breasts. Dahlia giggles as she places your cock between her soft breasts. Your cock was big enough that half of it is still sticking out. "Oh," Dahlia giggles again. "Thanks for the treat!" She bends her spine, bringing her mouth close to the tip of your cock. You can really feel Dahlia's skill. She showered your cock with kisses and licks even as she moves her soft breasts with her hands to please you. "Mmh ... Dahlia, I'm close," you say. "You're really good." "You can cum all over my tits," Dahlia offers even as she licks your shaft eagerly. "Ngh!" You ejaculate all over her breasts. "Thank you for your patronage," she says while smiling as she wipes her breasts with a rag. "Come again!" [[End day]] <<set $Dahliatit to true>></tw-passagedata><tw-passagedata pid="32" name="Dahlia Whore Sex" tags="" position="700,1700" size="100,100">"Regular sex, please." <<if $Dahliadecision isnot false>> <<set $player.coins to $player.coins - 40>> You set the money on the table. <<endif>> "Please follow me." You go into her bedroom; there was a straw bed and a poor pillow. "Lay down, please." She took off her clothes, revealing her plump body. She wore a pair of simple, white panties and no bra. You play with her swaying breasts. Dahlia giggles as she takes off her panties, revealing her bushy pussy. Dahlia positions herself on all fours, affording you a clear look at her holes. Her pussy certainly has seen rather extensive use. Interestingly, her anus looks pristine and little-touched, though there is some hair growing on it. Your naughty fingers tries to caress her anus. Tries, because Dahlia immediately snaps, "not that!", before softening: "sorry. But please, stick to my vagina." After your fingers tease Dahlia's folds, you whip out your cock. Dahlia's pussy was loose, yes, but it was a nice enough fit for your cock. You mate with Dahlia like a wild beast, pumping your shaft into her fuckhole vigorously. Dahlia's elasticity might be somewhat subpar, but it is more than enough to squeeze on your cock. "Oh! I'm coming!" Dahlia moans. Juices pour down on her legs. "You can ejaculate inside. I'm infertile." You gladly oblige, dumping your load inside Dahlia's hairy pussy. "Thank you for your patronage," she says while panting as she wipes her cum-soaked vagina with a rag. "Come again!" [[End day]] <<set $Dahliasex to true>></tw-passagedata><tw-passagedata pid="33" name="Dahlia leave" tags="" position="450,1700" size="100,100">"Sorry. Maybe later." <<if $DahliaQuest is 0 or $Dahliadecision is false>> "I understand. See you later." [[End day]] <<else>> A slight frown forms on Dahlia's face. "I understand. See you later." [[End day]] <<endif>></tw-passagedata><tw-passagedata pid="34" name="First meeting with Xian" tags="" position="575,1825" size="100,100">You explore the area round Lowe's Lake, where the sagely woman is reported to show up often. The lake is calm, tranquil, and peaceful, and you find it hard to not lay down and enjoy the scenery. After two hours of exploration, you (or at least you think so) see the sagely woman. Judging from both her appearance and her name, she's not a local. Her skin is yellow-ish, and her eyes glitter like small, sharp gemstones. Her pure black hair is tied into two ponytails. "Who goes there?" she asks. In an instant, she's in front of you. "I'm $name," you reply, still shocked. "I'm called Xian," the woman replies. "Well, $name, what can I do for you?" "There's a friend of mine whose children are sick." "Oh. Twins?" "Yes. You turned them away." Your tone shifts into an accusatory one. "Mm. They are afflicted with something that we call the Curse of the Rat in my homeland. They'll have ... hmm, maybe six months or so of life left, unless cured." "Can you cure them?" you ask quickly. "Oh, yes. The question is what you're willing to give up for it," she says. Her eyes focus on you. "I want the king's sword. It is a formidable artifact, one that your line of idiot kings has left unused properly." There is no way you can retrieve that sword in your current condition. You begin pondering whether you should just use brute force ... or you can simply give up, and never see Dahlia again. (Warning: giving up will end Dahlia's questline permanently). [[Promise the sword]] [[Attack her]] [[Give up]] <<set $Xianfirstmeeting to true>></tw-passagedata><tw-passagedata pid="35" name="Promise the sword" tags="" position="575,1950" size="100,100">"Hahahah!" Xian burst out in a laughter. "Oh, you silly man. Good, good. She means that much to you that you're willing to risk so much." You stand there, dumbfounded. "So it was a test?" "It sure was. Now bring me to your friend." [[Bring Xian to Dahlia]] </tw-passagedata><tw-passagedata pid="36" name="Attack her" tags="" position="700,1950" size="100,100">"Then I'll have to force you!" you raise your blackstone dagger. The silk-clad woman shifts her stance very fluidly while laughing. "You don't know who you're fighting, kid. I'm the Fighting Sage, Wielder of Fire of Colors, the Vermillion Bird. Well, since it's come to this, don't die too easily." <<if $class is "Priest">> Xian radiates a strange power. You think she'd be a match for even the most powerful priests and paladins of the Light-King. You steel yourself. <<elseif $class is "Novice">> Xian radiates a strange power that doesn't feel like arcane, holy, or dark magic ... it feels like something else entirely. You think she'd be a match for even the archmages of the Kingdom. You steel yourself. <<else>> Xian radiates a strange power that you have never felt before. Her power is intense. You steel yourself. <<endif>> [[Combat: Xian (Opening)]]</tw-passagedata><tw-passagedata pid="37" name="Give up" tags="" position="450,1950" size="100,100">You give up and return to the village, informing Dahlia of your failure. She nods her head and assures you it's not your fault. You never see Dahlia again. <<set $Dahliafail to true>> [[End day]] </tw-passagedata><tw-passagedata pid="38" name="Combat: Xian (Opening)" tags="" position="800,2100" size="100,100">Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> <<set $enemy = { name: "Xian", maxHP: 400, HP: 400, maxMP: 100, MP: 100, attack: 35, speed: 35, gold: 0, }>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting Xian, the Fighting Sage, the Wielder of Fire of Colors! <<set $bossfight to true>> [[Understood|Speed Check]]</tw-passagedata><tw-passagedata pid="39" name="Xian's victory" tags="" position="625,2125" size="100,100">You expect to die. But you live. Green flames dance around you. <<nobr>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <</nobr>> <<if $enemy.HP lte 350>> "Not bad at all," she says. "To have the nerve to attack me, even though the gap between us is so wide ... I have to admit, I didn't expect things to go this way. But this sort of determination deserves reward." <<endif>> Xian chuckles. "Bring me to your friend." While the green flames do their work, either by accident or otherwise, you feel some of Xian's healing energy entering your body. You feel more durable than before. (HP+30) <<set $player.maxHP to $player.maxHP + 30>> <<set $player.HP to $player.HP + 30>> [[Bring Xian to Dahlia]] </tw-passagedata><tw-passagedata pid="40" name="Bring Xian to Dahlia" tags="" position="475,2200" size="100,100">When you arrive in Dahlia's house, she is nursing her twin children. "You!" she hisses. "My children ...." "They're dying," Xian says coolly. The twins are sluggishly moving, almost like living corpses. "Get me some space." Dahlia reluctantly does so. "Do you trust her?" she whispers. "Well, it's not like we've got any alternatives," you whisper back. Green flames burst out from Xian's hands. A parade of green and grey swirls in the air. "Mommy!" The twins wake up, far fresher than before. "Mommy! I feel really good!" "Yes! Can we play?" Dahlia's smile forms. "Go ahead," she says before turning to Xian. "I have to thank you ... even though you refused me earlier." "You were just not determined enough." Xian remains motionless for a while. "I don't mean to be impolite," Dahlia says. "But, what are you doing?" "Oh, just dispelling the curse from your house," Xian says nonchalantly. "If I don't dispel the curse, your children will just get sick again." "Curse? Oh, the shaman was right!" Dahlia wails. "What curse is it? Who did it?" "The curse of the rat. The family-destroyer. Causes infertility with a ninety percent chance, irreversible, and sickens children," Xian explains as she mumbles some words you don't understand. "As for the caster? ... who knows." "I've dispelled the curse," Xian says. "Well, off I go." Dahlia sits down. "I can't believe it ... it's done. Thank you so much, $name." [[You're welcome]] </tw-passagedata><tw-passagedata pid="41" name="You're welcome" tags="" position="275,2375" size="100,100">You decide to leave Dahlia alone for the day and return to the camp. The village is glad that Dahlia has received the help she needs, and view you much more positively than before. <<set $Villagefavour to $Villagefavour + 25>> <<set $Dahliaquestdone to 1>> [[End day]] </tw-passagedata><tw-passagedata pid="42" name="Dahlia decision" tags="" position="250,1575" size="100,100"><<if $Dahliadecision is true>> "Alright, that's good with me," you say. "I've got a spare tent, is it big enough?" "I think it is. Thank you, $name." Dahlia moves in to your camp. She and her children will consume some supplies every day, but will provide you with coins. "I'm looking forward to being your personal whore, $name," Dahlia whispers seductively. [[Back to camp|Makeshift Camp]] <<elseif $Dahliadecision is false>> "I'm sorry, Dahlia. I'm just not comfortable with it." Dahlia nods a little sadly. "I understand. You can find me at my house, as usual," she says. [[Back to camp|Makeshift Camp]] <<endif>> </tw-passagedata><tw-passagedata pid="43" name="Talk to Dahlia" tags="" position="850,1475" size="100,100"><<set _temp to random(1,2)>> <<if _temp is 1>> You decide to chat with Dahlia. You spot her in the middle of the camp, cooking food with her children. <<elseif _temp is 2>> You decide to chat with Dahlia. You spot her near the camp's nearest river, washing some herbs with her children. <<endif>> "Hey, Dahlia!" "Oh, hello, $name! How are you?" "I'm fine," you say. "Can I help you with something?" [[Talk|Chatting with Dahlia]] [[Sexual Services]] [[Leave|Makeshift Camp]] </tw-passagedata><tw-passagedata pid="44" name="Sexual Services" tags="" position="825,1600" size="100,100">"Let's get in my tent," you say. Dahlia smirks. "Of course. Ella, Emma, finish your work here, and then you can go play, okay?" "Yes, Mom!" the twins say energetically. You know just now that Dahlia's children are already eighteen years old; with the curse lifted, they're rapidly growing physically to match teens of their age. You and Dahlia head to your tent. Dahlia makes yourself comfortable and removes her clothes, revealing her braless tits and a pair of white panties. She sways her blonde hair seductively. Her body is definitely on the larger side, but that it contributed to her large tits only fueled your lust. "Tell me what you want, $name." [[A good show|Dahlia Stripshow]] [[Full service|Dahlia Full Sex]] <<if $Dahliaanal is true>>[[Anal sex|Dahlia Anal]]<<endif>></tw-passagedata><tw-passagedata pid="45" name="Chatting with Dahlia" tags="" position="950,1600" size="100,100">You sit down to chat with Dahlia. <<if $chat is "general">> You talk about various mundane things with Dahlia. Eventually the sun sets and you go to sleep. <<set $chat to "none">> [[End day]] <<elseif $chat is "anal">> You enquire about Dahlia's aversion to anal sex. "Oh ... it's not an aversion or anything. In fact, I quite like it. Mm, how do I explain this ...?" Dahlia mumbles for a while. "Even after my former husband left me, and I had to become a prostitute, I still believed in him. He was the only one I ever allowed to fuck my asshole," she says. "Bah. Fuck it. I want to remove him from my memory. If you want to use my asshole, $name. just give me the word." <<set $Dahliaanal to true>> <<endif>> <<='[[General Talk|Chatting with Dahlia][$chat to "general"]]'>> <<='[[About Anal|Chatting with Dahlia][$chat to "anal"]]'>> </tw-passagedata><tw-passagedata pid="46" name="Dahlia Stripshow" tags="" position="1150,1725" size="100,100">"Dahlia, I want a show," you say. "A show, you say?" Dahlia confirms. "Hmm, well, I have an idea. Sit down and enjoy." Dahlia walks in front of you and began dancing. Her dance isn't the most agile or classy, but with a body like hers, she doesn't need grace. She waves her fat ass at you. You pull out your cock and began masturbating. Of course, Dahlia's show doesn't end just like that. She turns around, graciously showing her dangling tits and black nipples. "Do you like this, $name?" she asks. "You know the answer, Dahlia. Your tits are my favorite." Dahlia takes off her wet, white panties and threw it off. She sat down on the floor and opened her legs, showing you her holes: her loose, hairy, and tantalizing pussy with its thick folds and her tight anus. One of her hands played with her pussy while the other tickled her nipples. You jack off faster as Dahlia pleasures herself. "A-ah! I'm coming! $name, watch your personal whore cum!" Dahlia climaxes, juices bursting out from her hole. She crawls towards you, taking over control over your cock with her hand. A few pumps were all it took for you to blast your white seed all over Dahlia's large tits. You and Dahlia spend the night together. [[End day]] </tw-passagedata><tw-passagedata pid="47" name="Dahlia Full Sex" tags="" position="1225,1600" size="100,100">You and Dahlia spend the entire day in bed, as you savor your personal whore's body. You have her kneeling and using her experienced mouth to service your cock while you caress her blonde hair. When you're satisfied enough, you take Dahlia to bed. Your hands toyed with her loose pussy and her large tits. Dahlia isn't just laying there, however; she fondles your body, her hand jerking you off. "$name, I'll ride you," Dahlia says. You lay down, allowing Dahlia to ride you in the cowgirl position. Your hands tease her nipples. "How do you like-this!" Dahlia tightened the grip that her lower mouth had before loosening it, making your cock go so far up that it was kissing her womb. "Oh, fuck!" you squee as your cock nearly burst. Dahlia gets off your cock, her hands pumping it until you cum. "Come here, Dahlia," you say. Dahlia crawled atop you, putting her snatch right in front of your mouth. Dahlia herself, with remarkable flexibility unbefitting of her age, bent down and began sucking your cock enthusiastically. You dig your tongue deep inside her pussy. You come close to climax, but Dahlia's come first in the form of her pussy juices splashing all over your face. Yours come a second later. Dahlia swallows all your sperm before saying, "that's a good meal, $name." The two of you rest on your bed together. [[End day]] </tw-passagedata><tw-passagedata pid="48" name="Dahlia Anal" tags="" position="1025,1850" size="100,100">"I want to use your ass, Dahlia," you say. "I'll fuck you hard enough to make you forget your worthless former husband." "That's a big claim," Dahlia says as she takes off her panties. "Come on then, show me what you've got!" You take off your clothes as well. Dahlia was on all fours, showing off her holes. You lick two of your fingers, coating them with your saliva, before inserting them inside Dahlia's asshole. After sufficiently stretching Dahlia's asshole, you slip your erect cock inside Dahlia. "Ooh!" she moans as you begin thrusting. You continue to mount Dahlia like a beast in heat as your cock ravages her tight, warm asshole. "So--who's better, Dahlia?" you say to her ear. "Your husband or me?" "You! Of course it's you!" Dahlia moans, her hairy pussy squirting juices, "turn my ass into a fuckhole, $name! Fill me up!" "I wonder how much people would pay for your asshole," you tease as you enjoy the squeezing sensation of Dahlia's anal walls. "Mm, don't speak like that, $name," Dahlia protests, "after all, it's my special hole." "Don't worry, Dahlia, I was just kidding," you say, "you're the one who said you want to be my personal whore, so I'm not letting anyone else touch you." Hearing that (probably) makes Dahlia's ass tighten up more. "Then, my exclusive client, feel free to dump your sperm in your whore's hole!" You climaxed, filling up Dahlia's precious fuckhole with your thick sperm. Dahlia put herself on your bed, allowing your sperm to flow out. "Thanks, Dahlia," you whisper. "Any time, $name." The two of you sleep together. [[End day]] </tw-passagedata><tw-passagedata pid="49" name="Elder's house" tags="" position="175,1300" size="100,100"><<if $MainQuest is 2>> You come to the elder's house. After some pleasantries, you subtly mention the ancient book. <<if $Villagefavour lt 110>> "I'm sorry, but I have no idea what you're talking about." The facial expression of the elder tells otherwise, though. Maybe you should build a more robust reputation with the villagers. <<if $player.coins gte 250>> Or maybe, you should just spend the money to [[hire a thief]] ... <<endif>> [[End day]] <<elseif $Villagefavour gte 100>> You come to the elder's house. After some pleasantries, you subtly mention the ancient book. "I see. So you're the one whom the city woman told us off. Wait a minute," the elder says. He leaves for a while. When he comes back, he brings the book. "You have been a very good friend to us. In fact, we already count you as one of us. I trust you'll return it after you're done." <<set $MainQuest to 3>> [[End day]] <<endif>> <<elseif $Villagefavour gte 80 and $elder3gift isnot true>> You enter the elder's house. The two of you chat until evening about mundane and miscellaneous subjects. As you leave the house, he offers you a gift for being a very good friend to the village. "The shaman wishes to give this to you. This is ... well, the cityfolk call them arcane magic or whatnot. But we trust in the traditional powers. This scroll will grant you the power of a bear." You learn a new spell: "Strength of the Bear" <<run $spell.push("Strength of the Bear")>> <<run $spelldesc.push("A primal strength enters you, strengthening your attack power for this fight; cost: 5 MP")>> <<set $elder3gift to true>> [[End day]] <<elseif $Villagefavour gte 40 and $elder2gift isnot true>> You enter the elder's house. The two of you chat until evening about mundane and miscellaneous subjects. As you leave the house, he offers you a gift for being a good friend to the village. "This is a special potion. It'll strengthen you." You thank the elder and drink the potion. Magical strength fills you. (Mana+5) <<set $player.MP to $player.MP + 5>> <<set $player.maxMP to $player.maxMP + 5>> <<set $elder2gift to true>> [[End day]] <<elseif $Villagefavour gte 20 and $elder1gift isnot true>> You enter the elder's house. The two of you chat until evening about mundane and miscellaneous subjects. As you leave the house, he offers you a welcome gift. "Some elderberries and pies. Enjoy." You thank the elder and bring home the food. <<set $player.supplies to $player.supplies + 30>> <<set $elder1gift to true>> [[End day]] <<else>> You enter the elder's house. The two of you chat until evening about mundane and miscellaneous subjects. You bid him farewell and return to your camp. [[End day]] <<endif>> </tw-passagedata><tw-passagedata pid="50" name="Combat: Forest Bandit (Opening)" tags="" position="1300,1450" size="100,100"><<nobr>> <<set _temphp to random(100,140)>> <<set _tempattack to random(10,20)>> <<set _tempspeed to random(5,15)>> <<set _tempcoins to random(7,15)>> <<set _tempsupplies to random(2,6)>> <<set $enemy = { name: "forest bandit", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The bandit unsheathes his dagger! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a human forest bandit! <<set $bossfight to false>> [[Understood|Speed Check]]</tw-passagedata><tw-passagedata pid="51" name="Combat: Goblin (Opening)" tags="" position="1275,1175" size="100,100"><<nobr>> <<set _temphp to random(60,80)>> <<set _tempattack to random(17,22)>> <<set _tempspeed to random(20,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(4,7)>> <<set $enemy = { name: "goblin", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The goblin raises his spear! You raise your own blackstone dagger, through you do wonder what these little critters are doing here ... after all, this forest isn't goblin territory. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a goblin! Even before the fight, the goblin pulls a waterskin and drinks some kind of slimy liquid from it! The goblin looks frail enough, but their speed and agility, as well as the sharpness of goblin spears, enhanced by their shamans, is the stuff of dread amongst humans. You ought to be careful ... and who knows what that slimy liquid does. <<set $bossfight to false>> [[Understood|Speed Check]]</tw-passagedata><tw-passagedata pid="52" name="Speed Check" tags="" position="1600,1175" size="100,100"><<if $player.speed gte $enemy.speed>> You are faster than your enemy! [[You make a move|Player Move]] <<elseif $player.speed lt $enemy.speed>> The enemy is faster than you! [[You brace for impact|Enemy Move]] <<endif>></tw-passagedata><tw-passagedata pid="53" name="Player Move" tags="" position="1825,1125" size="100,100">Choose your move! <<for _i to 0; _i lt $spell.length; _i++>> <<='[[$spell[_i]|Player Move 2][$move to $spell[' + _i + ']]]'>> <<print _i + 1>>. $spell[_i] ( $spelldesc[_i] ) <</for>> <<if $bossfight is false>> You can also decide to run away. [[Flee]] <<endif>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> </tw-passagedata><tw-passagedata pid="54" name="Enemy Move" tags="" position="1950,1200" size="100,100"><<nobr>> <<if $enemy.name is "goblin">> <<set _temp to random(1,3)>> <<if _temp isnot 3>> <<set $player.HP to $player.HP - $enemy.attack>> The goblin attacks you with his spear! You suffer $enemy.attack damage! <<elseif _temp is 3>> <<set $enemy.HP to $enemy.HP + 20>> The goblin drinks more of that slimy liquid, invigorating him by 20 HP. <<endif>> <<set $enemy.HP to $enemy.HP + 10>> Whatever that slimy liquid was, it seems to heal injuries. The goblin recovers 10 HP. <<if $enemy.HP gt $enemy.maxHP>> <<set $enemy.HP to $enemy.maxHP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "forest bandit">> <<set _temp to random(1,2)>> <<if _temp is 1>> <<set $player.HP to $player.HP - $enemy.attack>> The forest bandit attacks you with his dagger! You suffer $enemy.attack damage! <<elseif _temp is 2>> <<set $player.HP to $player.HP - $enemy.attack>> <<set $player.HP to $player.HP - 7>> The forest bandit launches a flurry of attacks with his dagger! You suffer $enemy.attack damage! You suffer 7 additional damage! <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Xian">> <<set _temp to random(1,4)>> <<if _temp is 1>> <<set $player.HP to $player.HP - 55>> Xian casts Heavenly White Flames, dealing 55 damage! She bathes you in white flames that do not burn you, but cause immense pain. Your blood is flowing from some of your pores. <<elseif _temp is 2>> <<set $enemy.HP to $enemy.HP + 120>> Xian casts Theumaturgic Green Flames, bathing herself in green flames and healing herself by 120 HP! <<if $enemy.HP gte $enemy.maxHP>> <<set $enemy.HP to $enemy.maxHP>> <<endif>> <<elseif _temp is 3>> Xian casts Depleting Black Flames, bathing you in black fire. You aren't burned, but you feel your strength leaving you. You don't think you can do any damage with mere simple attacks anymore. <<set $player.attack to 0>> <<elseif _temp is 4>> Xian summons a shining glaive and slashes you with it, dealing $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Thalia the Scorpion">> <<set _i to random(1,3)>> <<if $Thaliapoison isnot true>> Thalia attacks you with her poisoned sword. You manage to dodge, but the sword grazes you. You are poisoned! <<set $Thaliapoison to true>> <<elseif _i is 1>> Thalia attacks you with her poisoned sword. You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 2>> Thalia strengthens herself with a spell. <<if $spell.includes("Strength of the Bear")>> You recognise it as a weaker version of the village's signature spell, Strength of the Bear. <<endif>> <<set $enemy.attack to $enemy.attack + 5>> The spell also seems to refresh her a little. <<set $enemy.HP to $enemy.HP + 10>> <<elseif _i is 3>> Thalia launches a flurry of attacks with her poisoned sword. You suffer $enemy.attack + 7 damage! <<set $player.HP to $player.HP - $enemy.attack>> <<set $player.HP to $player.HP - 7>> <<endif>> <<if $Thaliapoison is true>> <<set $player.HP to $player.HP - 5>> The poison ravages your body, dealing 5 damage! <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Corrupted Priestess">> <<if ($priestcd isnot 1) and ($priestcd isnot 2)>> The priestess hurls a beam of corrupted grey energy, dealing 60 damage! She does look rather exhausted after using it ... perhaps you should finish her off before she can use this attack again. <<set $player.HP to $player.HP - 60>> <<set $priestcd to 3>> <<else>> The priestess is charging up a big spell .... <<endif>> <<set $priestcd to $priestcd - 1>> <<set $enemycombat to 1>> <<endif>> <</nobr>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[You fall to the ground|Game Over]] <<elseif $player.MP gte 0>> <<if $enemy.HP lte 0>> You stand triumphant. [[Continue|Victory]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[You fall to the ground|Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $enemycombat is 0>> [[Continue|Enemy Move]] <<elseif $enemycombat is 1>> [[Continue|Player Move]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="55" name="Player Move 2" tags="" position="1975,1050" size="100,100"><<if $move is "Attack">> <<set $enemy.HP to $enemy.HP - $player.attack>> You deal $player.attack damage to your enemy! <<elseif $move is "Minor Heal">> <<set $player.HP to $player.HP + 35>> <<set $player.MP to $player.MP - 5>> You heal yourself for 35 HP. <<elseif $move is "Arcane Bolt">> <<set $enemy.HP to $enemy.HP - 40>> <<set $player.MP to $player.MP - 5>> You send a small bolt of arcane energy, dealing 40 damage to your enemy! <<elseif $move is "Strength of the Bear">> <<set $player.attack to $player.attack + 10>> <<set $player.MP to $player.MP - 5>> You roar, increasing your might! You feel the powers of nature enhancing your own. <<endif>> <<set $enemycombat to 0>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[You fall to the ground|Game Over]] <<elseif $player.MP gte 0>> <<if $enemy.HP lte 0>> You stand triumphant. [[Continue|Victory]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[You fall to the ground|Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $enemycombat is 0>> [[Continue|Enemy Move]] <<elseif $enemycombat is 1>> [[Continue|Player Move]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="56" name="Victory" tags="" position="2050,1475" size="100,100"><<if $enemy.name is "goblin">> You won a hard-fought victory against the goblin. You search the goblin for valuables, and you find $enemy.coins coins and $enemy.supplies supplies! After that, you return to your camp. Your defeat of this goblin has improved your reputation amongst the nearby villages. <<set $player.coins to $player.coins + $enemy.coins>> <<set $player.supplies to $player.supplies + $enemy.supplies>> <<set $Villagefavour to $Villagefavour + 3>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> [[End day]] <<elseif $enemy.name is "forest bandit">> "The Scorpion will avenge me!" the bandit roars as he dies. The villager is long gone. You won a hard-fought victory against the forest bandit. You search the bandit for valuables, and you find $enemy.coins coins and $enemy.supplies supplies! You also tear off the bandit's scorpion cloak. After that, you return to your camp. Your defeat of this bandit has improved your reputation amongst the nearby villages. <<set $player.coins to $player.coins + $enemy.coins>> <<set $player.supplies to $player.supplies + $enemy.supplies>> <<set $scorpioncloak to $scorpioncloak + 1>> <<set $Villagefavour to $Villagefavour + 3>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> [[End day]] <<elseif $enemy.name is "Xian">> ... wha? Uh, you manage to beat what is supposed to be an unbeatable fight. The game will now assume you lose anyways. Holy smokes man, not even I manage to beat this fight. [[Go here|Xian's victory]] <<elseif $enemy.name is "Thalia the Scorpion">> After a lengthy and difficult duel, you knock her out cold. You take a bottle of antidote from her pocket and drink it, and use the rope to tie her up. You decide to sit down and rest until Thalia wakes up. [[A couple hours pass|Thalia: Victory]] <<elseif $enemy.name is "Corrupted Priestess">> You triumph over the corrupted priestess. Out of nowhere, a platoon of royal knights ambushes you. "Wait!" Natalie orders. Seeing the thorned rose, the knights stop. "Take this corpse to the Imperial Research Academy. Don't allow church members to stop you," Natalie instructs. The knights obey. Natalie turns to you. "Looks like the King and the church aren't on good terms," you comment lightly. "That's true," Natalie admits. "You've got to go, the church already knows you're here. I'll prepare a carriage and fund the trip--head to the east." You curse in your heart. "I see. I'll prepare," you say. <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $MainQuest to 5>> [[End day]] <<endif>> </tw-passagedata><tw-passagedata pid="57" name="StoryCaption" tags="" position="250,250" size="100,100">This is you, an outlaw. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Coins: <<print $player.coins>> Supplies: <<print $player.supplies>> Spells: <<print $spell>> Abilities and Titles: <<print $ability>> Day: <<print $day>></tw-passagedata><tw-passagedata pid="58" name="Fighting Thalia" tags="" position="1525,900" size="100,100">You enter the forest to search for the bandit leader Thalia. You cannot shake the feeling that someone is stalking you. Your blackstone dagger is firmly on hand. You stumble upon a large pond. The presence shows herself. It is Thalia, your target--the scorpion tattoo makes it obvious. Her body shape is slender, her black hair tied up in a ponytail. Her legs and arms are quite muscular. "Did the village send you?" "Nobody sent me. I'm here on my own initiative," you say. "Criminals are criminals, but harming innocents to such degree is not something at which I can sit back and watch." "Oh, you're definitely sent by the village. Only they will talk of morality like that," Thalia says, laughing. "You know, it's not too late to lay down your arms and hand yourselves over." "From a village that betrayed me? Never!" "Betrayed you?" "So you don't know? I was the chief's apprentince. I was meant to succeed the chief. I had plans; I would lift that miserable shithole to a proper, prospering settlement. But that little chief thought 'I went too far' and expelled me. Hahah! Well, I'll kill him last, after all the others." It doesn't seem like you can convince her at all. You prepare to fight. Thalia looks around the landscape. "A suitable enough spot for our showdown, don't you think?" Thalia asked, tsk-ing. "Little brat, daring to cross me ... I'll send your head back to your dear village and throw your corpse into this lake." "That's my line." <<set $enemy= { name: "Thalia the Scorpion", maxHP: 160, HP: 160, maxMP: 10, MP: 10, attack: 20, speed: 10, }>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You're facing Thalia the Scorpion, a dreaded bandit leader! <<set $bossfight to true>> [[Understood|Speed Check]]</tw-passagedata><tw-passagedata pid="59" name="Flee" tags="" position="1725,1450" size="100,100">You ran away from your enemy and ran back to your camp. [[End day]] <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>></tw-passagedata><tw-passagedata pid="60" name="Thalia: Victory" tags="" position="2075,575" size="100,100"><<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> You have triumphed over Thalia. The bandit leader radiates a look of pure, unfiltered hatred. "You--fucking--bastard!" You should return her to the village authorities. ... though, given how much trouble she gave you, there isn't anyone to stop you from having a little 'fun' with her. [[Have your way]] [[Return her to the village]]</tw-passagedata><tw-passagedata pid="61" name="Have your way" tags="" position="2100,400" size="100,100">You strip off Thalia's clothes, revealing a fit and healthy body hidden beneath a layer of cloth and chainmail. "No! What--no!" Thalia's brown eyes dilutes as she struggles. She probably realized what you were about to do. "Shut up, bitch, or this'll hurt more," you threaten. "After all, this place is quite secluded--you chose it yourself, didn't you?" You scrounge through her belongings and take a whip. "Oh, this'll be quite useful," you say as you take off your trousers. With one hand on her shoulder to keep her down, you shove your cock inside her virgin pussy. "Please, no, please--" "Didn't I tell you to shut up?" You brutally whip her a few times. "Come on, don't cry, isn't this what you'd do to me if you had won?" Something dark is bubbling inside of you ... as you continue fucking Thalia's extremely tight pussy, you feel stronger. <<set $player.attack to $player.attack + 5>> <<set $player.maxattack to $player.maxattack + 5>> You give in to your bestial insticts, thin morals be damned. From a criminal to another ... You don't care about Thalia's wailings and threats as you shoot your load inside her. Thalia's twisted rage formed into gritted teeth. "Don't act all high and mighty, you're just a rapist!" "Who's acting high and mighty?" You shoot back. "I'm just an outlaw." You tie her up with more rope and drag her to meet the village's judgement. [[Return her to the village]] <<set $ThaliaRaped to true>></tw-passagedata><tw-passagedata pid="62" name="Return her to the village" tags="" position="1925,450" size="100,100">You return the bounded Thalia to the cheering village. You are told to sleep in the town hall, and a small celebration is held. Joseph secretly passes you a large gift of money. <<set $player.coins to $player.coins + 250>> The villagers' respect towards you greatly increase. <<set $Villagefavour to $Villagefavour + 45>> <<set $day = $day + 1>> You wake up and are offered breakfast. You then attend a meeting between the villagers. Still tired, you decide to stay out of it. Unfortunately, you can't really do that. The village is separated into two factions: one which prefers a simple and quick solution: sending her to the local baron for a reward, and one which prefers the traditional punishment: a hundred floggings or a gangbang by all of the village's men. As you were the one who actually captured Thalia, the villagers make you the tiebreaker. <<set $ThaliaQuest to 5>> [[Execution]] [[Gangbang]]</tw-passagedata><tw-passagedata pid="63" name="hire a thief" tags="" position="125,1100" size="100,100">You hire an unscrupulous thief to steal the book. He does so with stunning efficiency. The villagers do not generally suspect you, but this incident makes them keep their guard with strangers, and some traditionalists see you with sharp eyes. <<set $MainQuest to 3>> <<set $Villagefavour to $Villagefavour - 10>> <<set $thiefhired to true>> [[End day]] </tw-passagedata><tw-passagedata pid="64" name="Corrupted Priestess" tags="" position="1500,1650" size="100,100">As you silently make your way through the woods, you hear a cry for help: Natalie's! You rush quickly, and you see ... A priestess, you think. A priestess with bloated breasts and red eyes, her limbs thin as sticks. "A good sacrifice for the Serpent!" she shouts repeatedly. <<set $enemy= { name: "Corrupted Priestess", maxHP: 125, HP: 125, maxMP: 10, MP: 10, attack: 20, speed: 17, }>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You're facing a priestess corrupted by dark forces! <<set $bossfight to true>> [[Understood|Speed Check]]</tw-passagedata><tw-passagedata pid="65" name="To the east" tags="" position="2025,1875" size="100,100"> You head to the east with all the coins and supplies you can take. <<if $Dahliadecision is true>> Dahlia and her children also decide to follow you. <<endif>> The journey takes around six months via carriage, with Natalie appearing once every so often to provide you with food, supplies, and guidance. Unfortunately, the case of the strange stones has been mostly closed by the King in order to prevent a conflict with the Church. Well, publicly, at least. One day Natalie brings you a parchment with direct orders from the King to investigate further. He also apologizes for his inability to clear your name. <<if $class is "Knight">> However, the King delivers you an instruction manual on fighting: a gift from your noble father. You learn its techniques while on the way. <<set $player.attack to $player.attack + 10>> <<set $player.maxattack to $player.maxattack + 10>> <<endif>> Looks like you're still an outlaw. "Can I call myself a royal outlaw now?" you joke. Natalie laughs. "Knock yourself out." <<if $Dahliadecision is true>> You do worry about Dahlia and her children, Ella and Emma. As you journey, the twins rapidly recover their mental faculties, and are now, physically and mentally, proper nineteen year olds. "Don't worry about us," Dahlia assures you. "We owe you a moral debt that'll never be paid off." <<endif>> [[You sleep, and you dream ....]] </tw-passagedata><tw-passagedata pid="66" name="Execution" tags="" position="1850,225" size="100,100">You speak up in favor of sending her to the baron. The village shaman reads each and every single crime Thalia has commited against the village, which mostly boils down to "murder, theft, rape" ad infinitium. Thalia is then sent to the local baron. The bandit threat in the forest remains, but without a leader, the village has earned itself some breathing space. <<set $ThaliaImprisoned to true>> [[End day]] </tw-passagedata><tw-passagedata pid="67" name="Gangbang" tags="" position="1975,225" size="100,100">You speak up in favor of a traditional punishment. In a few hours, the villagers have stripped Thalia's clothes, allowing everyone to see her full, naked body. The village shaman reads each and every single crime Thalia has commited against the village, which mostly boils down to "murder, theft, rape" ad infinitium. The village's men go naked and wait for their turn. The sun is hot enough to turn their white or olive skin red with sunburn. Per village tradition, the chief grabs Thalia by her hair and forces her onto all fours. He positions himself below Thalia as he begins wildly fucking her. Thalia rebels with all her might, and the old chief can only barely rein her in. As the one who actually captured Thalia, you are afforded the honor to go second through the backdoor. With one hand pressuring Thalia's spine to stop her from running amok, you loosen her ass with some spit. You slip your cock in her now wet ass, synchronizing with the chief's thrusts. Thalia's tight-fitting anus gives you great pleasure as you explore her anal walls. Joshua enters the scene as he grabs Thalia's hair and deepthroats her with malice and anger you've never seen before. You look around and see impatient villagers, so you pound away. Your cock twitches and dumps its load in Thalia's gaping ass. You wipe yourself with a rag, wear your clothes, and bid goodbye to the villagers as one of them takes your place. Later on, you find out that the local baron has put out a hit on Thalia, so the village ends up handing a cum-soaked Thalia to the baron after everyone has had a turn. The bandit threat remains, but without a leader, the village has earned itself some breathing space. <<set $ThaliaGangbang to true>> [[End day]] </tw-passagedata><tw-passagedata pid="68" name="You sleep, and you dream ...." tags="" position="2025,2000" size="100,100">You dream .... That presence again! "The King waits ...." The voice turns into raucuous laughter. "FUCK OFF!" you raged. "I don't know what you are. I don't care. Get off my mind!" "Heheheh ... ARGH!" Suddenly there was great pinkish lightning dancing in your dream. You blink, and you are brought to a new landscape: a hedonistic brothel with dozens of nude women of various races in a giant room. There is a man sitting at the throne in the centre of it all. "$name. I'm sorry that I have to invade your mind like this." You observe the man. He is rather pale, his hair white and long, with two pinkish horns sprouting from his head. He wears some sort of royal clothes with his chest exposed. There is something regal about him. "Who are you?" you demand. "You can call me the Incubus King," he says. "That is not important now. What you need to know is that we're on the same side against the Empyrean. I can tell you what happened to you." "I don't understand ... aren't you a demon--or empyrean or whatever, too?" you ask. For some reason, you feel rather calm around this "Incubus King". He shakes his head lightly. "You see, you've been infected with a 'malevolence spirit', through the stones. This spirit is an Empyrean creature, able to bring forth one's most depraved, uncontrolled, and violent tendencies. In your case ... it was lust. You must control your lust; never let it control you; rather, you must use your lust to your own ends." "The others are dead. The ones touched by the stones." "Yes. It is pure luck that you survive. I estimate the chance of survival at 0,001 percent. You are that 0,001 percent." "My time is up, $name. But we'll meet again when you're ready. Use your lust ...." You wake up. You blink a few times. Was that just a dream? ... it has to be, right? You feel stronger .... <<nobr>> <<set $player = { name: $name, maxHP: $player.maxHP + 100, HP: $player.HP + 100, maxMP: $player.maxMP + 10, MP: $player.MP + 10, maxattack: $player.maxattack + 30, attack: $player.maxattack + 30, maxspeed: $player.maxspeed + 15, speed: $player.speed + 15, coins: $player.coins, supplies: $player.supplies, }>> <<set $healpower to 50>> <<set $bearpower to 20>> <<set $arcaneboltpower to 80>> <</nobr>> [[New Camp]]</tw-passagedata><tw-passagedata pid="69" name="StoryDisplayTitle" tags="" position="300,400" size="100,100">The Outlaw: Empyeran War by Flutewind</tw-passagedata><tw-passagedata pid="70" name="New Camp" tags="" position="2125,2275" size="100,100">You look around your new camp. It is quite large, with a number of tents. All of this is paid by the King's coffers. It is well-hidden, with bushes around it and mountains bordering it to the north. To the south, there is one of the Kingdom's largest cities, Dornburg, ruled by the Count Dorn. It is also named the "Bulwark of the East", as it's the last major city this far east of the kingdom. To the east lies the wastelands; nobody really knows why it's there, but it's been conjectured that empyrean forces lie there. To the west is the Kingdom of Walshemia. <<nobr>> <<if $class is "Knight" and $knightbonus isnot true>> As a noble, your influence in Dornburg is minor but noticable enough. <<set $DornburgRep to 100>> <<set $knightbonus to true>> <<endif>> <</nobr>> <<if $Dahliadecision is true>> Dahlia and her children live in tents on the western part. [[Western Camp]] <<endif>> <<if $ThalestrisJoined is true>> Thalestris' tent is located on the southwestern part of your camp. [[Southwestern Camp]] <<endif>> You can visit Dornburg if you want. [[Dornburg]] You can ponder about quests, letters, and opportunities given to you. [[Quests]] Natalie is hanging around your camp. [[Talk to Natalie]] Apparently, there is some kind of underground gladiator arena around here. [[Arena]] <<nobr>> <<if $AliceQuestComplete is true>> You should visit Viscountess Alice von Brandenburg's manor. [[Visit the manor|Alice's manor]] <<endif>> <</nobr>> <<if $MainQuest is 9>> You hear a few interesting pieces of news: first, that a tribe of amazons had just moved to the south of Dornburg. Second, a cathayan sage has been sighted around Dornburg multiple times. [[Visit the Amazons]] [[Meet the sage]] A war is coming. You should [[check your preparations]]. <<endif>> <<if $MainQuest gte 10>> You have erected a personal tent for yourself with comfortable beds and amenities. [[Go to your personal camp section|Personal Camp Section]] <<endif>> [[Cheat list]]</tw-passagedata><tw-passagedata pid="71" name="Western Camp" tags="" position="1600,2325" size="100,100">Dahlia and her children make their homes here. Dahlia spends most of her time cleaning your large encampment and cooking for everyone. They spend four supplies a day. [[Dahlia's Tent]] [[The Twins' Tent]] <<if $ThalestrisCookingQuest gte 3>> [[Kitchen]] <<endif>></tw-passagedata><tw-passagedata pid="72" name="Dahlia's Tent" tags="" position="1575,2150" size="100,100">You enter Dahlia's tent. "Hello, there, $name," she says. The two of you chit-chat for a while before Dahlia gets into the meat of the talk: "What can I do for you, $name?" [[A good show|Dahlia Stripshow 2]] [[Full service|Dahlia Full Sex 2]] <<if $Dahliaanal is true>>[[Anal sex|Dahlia Anal 2]]<<endif>> <<if def $TwinsQuest and ndef $Twinsfucked>> You have received Dahlia's request for education for her children. You should [[probably get that going|Twins Quest]] <<elseif ndef $Twinsfucked>> You notice that Dahlia seems to have something to say. [[What's up, Dahlia?|Twins Quest]] <<endif>> <<if def $Twinsfucked and $HaremUnlockedFirstTalk is true and ndef $DahliaFamilyQuest>> You notice that Dahlia's face is tense, as if something is bothering her greatly. [[Why the long face, Dahlia?|Dahlia Family Quest]] <<endif>> </tw-passagedata><tw-passagedata pid="73" name="The Twins' Tent" tags="" position="1275,2325" size="100,100"><<if $TwinsQuest isnot 6>> You enter the twins' tent. They greet you warmly and the two of you talk for a while. <<else>> The twins' tent is empty. <<endif>> <<nobr>> <<if $Twinsfucked is false>> The twins talk about their school and their general life. Having decided to keep a platonic relationship, there's no chance for you to make sexual advances, though you do enjoy flashes of their pussies and assholes, as they're completely nude. <<elseif $Twinsfucked is true>> The twins coyly assume a submissive posture, laying their bodies on bed even as the three of you chat about their school and life. Having made them addicted to exhibitionist pleasures that only you can provide to the fullest, they're willing to offer you anything. "Anything on your mind, Sir?" [[Certainly|Twins' Sex Service]] <<endif>> <</nobr>> [[Return to the camp|New Camp]]</tw-passagedata><tw-passagedata pid="74" name="Dahlia Stripshow 2" tags="" position="1325,2200" size="100,100">"Dahlia, I want a show," you say. "A show, you say?" Dahlia confirms. "Hmm, well, I have an idea. Sit down and enjoy." Dahlia walks in front of you and began dancing. Her dance isn't the most agile or classy, but with a body like hers, she doesn't need grace. She waves her fat ass at you. You pull out your cock and began masturbating. Of course, Dahlia's show doesn't end just like that. She turns around, graciously showing her dangling tits and black nipples. "Do you like this, $name?" she asks. "You know the answer, Dahlia. Your tits are my favorite." Dahlia takes off her wet, white panties and threw it off. She sat down on the floor and opened her legs, showing you her holes: her loose, hairy, and tantalizing pussy with its thick folds and her tight anus. One of her hands played with her pussy while the other tickled her nipples. You jack off faster as Dahlia pleasures herself. "A-ah! I'm coming! $name, watch your personal whore cum!" Dahlia climaxes, juices bursting out from her hole. She crawls towards you, taking over control over your cock with her hand. A few pumps were all it took for you to blast your white seed all over Dahlia's large tits. You and Dahlia spend the night together. [[Sleep|End day 2]] </tw-passagedata><tw-passagedata pid="75" name="Dahlia Full Sex 2" tags="" position="1300,2075" size="100,100">You and Dahlia spend the entire day in bed, as you savor your personal whore's body. You have her kneeling and using her experienced mouth to service your cock while you caress her blonde hair. When you're satisfied enough, you take Dahlia to bed. Your hands toyed with her loose pussy and her large tits. Dahlia isn't just laying there, however; she fondles your body, her hand jerking you off. "$name, I'll ride you," Dahlia says. You lay down, allowing Dahlia to ride you in the cowgirl position. Your hands tease her nipples. "How do you like-this!" Dahlia tightened the grip that her lower mouth had before loosening it, making your cock go so far up that it was kissing her womb. "Oh, fuck!" you squee as your cock nearly burst. Dahlia gets off your cock, her hands pumping it until you cum. "Come here, Dahlia," you say. Dahlia crawled atop you, putting her snatch right in front of your mouth. Dahlia herself, with remarkable flexibility unbefitting of her age, bent down and began sucking your cock enthusiastically. You dig your tongue deep inside her pussy. You come close to climax, but Dahlia's come first in the form of her pussy juices splashing all over your face. Yours come a second later. Dahlia swallows all your sperm before saying, "that's a good meal, $name." The two of you rest on your bed together. [[Sleep|End day 2]] </tw-passagedata><tw-passagedata pid="76" name="Dahlia Anal 2" tags="" position="1300,1925" size="100,100">"I want to use your ass, Dahlia," you say. "I'll fuck you hard enough to make you forget your worthless former husband." "That's a big claim," Dahlia says as she takes off her panties. "Come on then, show me what you've got!" You take off your clothes as well. Dahlia was on all fours, showing off her holes. You lick two of your fingers, coating them with your saliva, before inserting them inside Dahlia's asshole. After sufficiently stretching Dahlia's asshole, you slip your erect cock inside Dahlia. "Ooh!" she moans as you begin thrusting. You continue to mount Dahlia like a beast in heat as your cock ravages her tight, warm asshole. "So--who's better, Dahlia?" you say to her ear. "Your husband or me?" "You! Of course it's you!" Dahlia moans, her hairy pussy squirting juices, "turn my ass into a fuckhole, $name! Fill me up!" "I wonder how much people would pay for your asshole," you tease as you enjoy the squeezing sensation of Dahlia's anal walls. "Mm, don't speak like that, $name," Dahlia protests, "after all, it's my special hole." "Don't worry, Dahlia, I was just kidding," you say, "you're the one who said you want to be my personal whore, so I'm not letting anyone else touch you." Hearing that (probably) makes Dahlia's ass tighten up more. "Then, my exclusive client, feel free to dump your sperm in your whore's hole!" You climaxed, filling up Dahlia's precious fuckhole with your thick sperm. Dahlia put herself on your bed, allowing your sperm to flow out. "Thanks, Dahlia," you whisper. "Any time, $name." The two of you sleep together. [[Sleep|End day 2]] </tw-passagedata><tw-passagedata pid="77" name="End day 2" tags="" position="2200,2000" size="100,100"><<nobr>> <<set $player.supplies to $player.supplies - 2>> <<if $Dahliadecision is true>> <<set $player.supplies to $player.supplies - 4>> <<endif>> <<if $player.supplies lt 0>> You run out of supplies. You die a starving and pitiful man. [[Game Over]] <<elseif $player.coins lt 0>> You fall into debt. The kingdom's outrageously persistent debt collectors find you and throw you in prison again. [[Game Over]] <<endif>> <</nobr>> <<nobr>> <<if $TwinsThiefDays is 4 and $TwinsQuest is 3>> You find out that a good number of your coins have been stolen! You quickly inform Dahlia, Ella, and Emma, asking them to keep a stricter watch on the camp. Strangely enough, no break-ins have been sighted, nor are there any proofs of outside theft. You should probably start investigating. Also, a letter from Toft's school has arrived. <<if $player.coins lte 120>> <<set $player.coins to 0>> <<else>> <<set $player.coins to $player.coins - 120>> <<endif>> <<set $TwinsQuest to 4>> <<endif>> <</nobr>> <<if $Alicebond is true>> Viscountess Alice's bond provides you with 10 coins and 1 supply. <<set $player.coins to $player.coins + 10>> <<set $player.supplies to $player.supplies + 1>> <<endif>> <<if $AliceQuest is 7>> Viscountess Alice generously provides you with 30 coins for helping her cure her frigidity. <<set $player.coins to $player.coins + 30>> <<endif>> <<if $SeleneReligionQuest gte 5>> <<set _i to random(10,20)>> <<set _j to random(4,9)>> Today, the Mahogany House spends _i coins and _j supplies. <<set $player.coins to $player.coins - _i>> <<set $player.supplies to $player.supplies - _j>> <<endif>> You rest in your camp. Coins: <<print $player.coins>> Supplies: <<print $player.supplies>> <<if $player.supplies gte 0 and $player.coins gte 0>> [[Wake up|New Camp]] <<endif>> <<if $player.supplies gte 0 and $player.coins gte 0 and $TeleportStone is true>> [[Wake up and head to Selvil|Selvil]] <<endif>> <<if $TeleportKlatsch is true>> [[Wake up and head to Klatsch|Klatsch]] <<endif>> <<set $day to $day + 1>> <<if def $TwinsThiefDays>> <<set $TwinsThiefDays to $TwinsThiefDays + 1>> <<endif>> <<if def $JharinaTimer>> <<set $JharinaTimer to $JharinaTimer + 1>> <<endif>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>></tw-passagedata><tw-passagedata pid="78" name="Dornburg" tags="" position="2175,3025" size="100,100">You enter the bustling city of Dornburg. Merchants, soldiers, farmers, priests, everyone is here. The first thing that takes your attention is the bounty board: "There has been an outbreak of goblin infestations recently. Anyone who kills a goblin leader and presents his stone crown will be rewarded with 75 coins. False crown forgers will be punished with death." [[Search for a goblin den]] "Wights have been spotted near the city walls. Anyone with a wight head will be rewarded with 50 coins." [[Hunt a wight]] You can, of course, visit the marketplace. [[Visit Marketplace]] <<if $MainQuest is 9>> Rebel Church forces are masquerading as bandits, raiding caravans and preparing for the uprising. Since they disguise themselves as bandits, you're fully allowed to treat them like bandits. [[Attack a rebel church cell|Church Dungeon]] <<elseif $MainQuest gt 9>> Rebel Church forces are surprisingly still around, even though their leader has already surrendered and the revolt is over. [[Attack a rebel church cell|Church Dungeon]] <<endif>> <<nobr>> <<if $DornburgRep gte 300>> Another curious thing you notice is an interesting bar. For some reason you don't seem to realize its existence before. [[Interesting Bar|Sex Club]] <<endif>> <</nobr>> <<nobr>> <<if $TwinsQuest is 0>> [[Search for a school for Dahlia's children|Toft]] <<elseif def $TwinsQuest>> [[Visit Toft's school|Toft]] <<endif>> <</nobr>> [[Back|New Camp]]</tw-passagedata><tw-passagedata pid="79" name="Search for a goblin den" tags="" position="1675,2800" size="100,100">You find a goblin den! You can probably sneak by and assasinate their leader; these guys are pretty dumb. First, you'll have to take out the guard standing at the rear entry. [[Attack the guard|Meet Goblin Guard]] <<set $goblindungeon to 1>></tw-passagedata><tw-passagedata pid="80" name="Visit Marketplace" tags="" position="2000,3175" size="100,100">You find the best offer for your coins: 2 coins for 1 supply, bought in bulk of 5 supplies. Unfortunately, nobody seems willing to trade supplies for coins. <<if $player.coins gte 10>> [[Buy supplies with coins|Visit Marketplace][$player.supplies to $player.supplies + 5; $player.coins to $player.coins - 10]] <<endif>> You meet an interesting merchant and his wife. To be honest, it is his wife who piques your interest: she is a dark-skinned, slender woman with black hair tied into a bun. Such dark skin color is a trait of the Solarians, peoples of a southern continent where the sun burns brightly. [[Enter the shop|Mr Hemsworth's Shop Entrance]] <<if $MainQuest gte 9>> You find a gambling den that's not really hidden; it does look like it's newly opened. [[Visit gambling den]] <<endif>> <<if $ProstitutionLegal is true and $BrothelQuest is 4 and $NellieWhore isnot true>> Since prostitution is legal, you hear rumors about an expert whore specializing in toilet play called "the Pisspot". Maybe you can [[seek her out for your brothel|Dornburg Piss Whore]]. <<endif>> You spend the whole day in the marketplace. [[End day|End day 2]] <<if ndef $gamblingchips>> <<set $gamblingchips to 0>> <<endif>></tw-passagedata><tw-passagedata pid="81" name="Mr Hemsworth's Shop" tags="" position="2200,3275" size="100,100">Mr Hemsworth welcomes you to his shop. The two of you chit-chat while you take a look at his wares. He only shows you wares that you can purchase with your current coins. Solarian pendant -- 250 coins Dragon-strength potion -- 550 coins <<if $goblinpussyjuiceinfo is true>> Health potion -- 160 coins <<endif>> <<if $pendantbought isnot true and $player.coins gte 250>> [[A magical Solarian pendant that cost 250 coins|Mr Hemsworth's Shop][$player.speed to $player.speed + 5; $player.maxspeed to $player.maxspeed + 5; $player.coins to $player.coins - 250; $pendantbought to true]] <<endif>> <<if $dragonpotionbought isnot true and $player.coins gte 550>> [[A potion of dragon ... something white ("reputed to increase strength") ... that cost 550 coins|Mr Hemsworth's Shop][$player.maxattack to $player.maxattack + 15; $player.attack to $player.attack + 15; $player.coins to $player.coins - 550; $dragonpotionbought to true]] <<endif>> <<if $goblinpussyjuiceinfo is true>> [[A health potion for 160 gold|Mr Hemsworth's Shop][$healthpotion to $healthpotion + 1; $player.coins to $player.coins - 160]] <<endif>> <<if $goblinpussyjuiceinfo isnot true>> He also mentions something interesting. "I sell aphrosidiacs to high nobility," he says. "You know what the main ingredient is? Goblin vaginal juice. Unfortunately, goblin females are very rare and closely guarded. Bring a vial to me and I'll pay you 100 coins." To help you, Mr Hemsworth teaches you how to quickly drink potions during combat and how to identify health potions, and also gives you one health potion. <<nobr>> <<set $healthpotion to 1>> <<set $goblinpussyjuiceinfo to true>> <<set $goblinpussyjuice to 0>> <<set $spell.push("Drink Health Potion")>> <<set $spelldesc.push("Drink your health potion if you have any, duh")>> <</nobr>> <<endif>> <<if $goblinpussyjuice gte 1>> [[Sell one vial of goblin vaginal juice|Mr Hemsworth's Shop][$player.coins to $player.coins + 100; $goblinpussyjuice to $goblinpussyjuice - 1]] <<endif>> [[Back to the camp to rest|End day 2]] </tw-passagedata><tw-passagedata pid="82" name="Goblin Guard" tags="" position="1175,2600" size="100,100"><<nobr>> <<set _temphp to random(140,160)>> <<set _tempattack to random(25,35)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "goblin guard", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The goblin raises its shield and spear! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a goblin guard! He drinks an unknown substance before fighting you! <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="83" name="Speed Check 2" tags="" position="950,2775" size="100,100"><<if $player.speed gte $enemy.speed>> You are faster than your enemy! [[You make a move|Player Move Chapter 2]] <<elseif $player.speed lt $enemy.speed>> The enemy is faster than you! [[You brace for impact|Enemy Move Chapter 2]] <<endif>></tw-passagedata><tw-passagedata pid="84" name="Player Move Chapter 2" tags="" position="800,3000" size="100,100">Choose your move! <<for _i to 0; _i lt $spell.length; _i++>> <<='[[$spell[_i]|Player Move 2 Chapter 2][$move to $spell[' + _i + ']]]'>> <<print _i + 1>>. $spell[_i] ( $spelldesc[_i] ) <</for>> <<if $bossfight is false>> You can also decide to run away. [[Flee 2]] <<endif>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> </tw-passagedata><tw-passagedata pid="85" name="Enemy Move Chapter 2" tags="" position="775,2850" size="100,100"><<nobr>> <<if $enemy.name is "goblin guard">> <<set _temp to random(1,3)>> <<if _temp is 1>> <<set $player.HP to $player.HP - $enemy.attack>> The goblin attacks you with his spear! You suffer $enemy.attack damage! <<elseif _temp is 2>> <<set $player.HP to $player.HP - $enemy.attack>> <<set $player.HP to $player.HP - 10>> The goblin attacks you with his spear brutally! You suffer $enemy.attack damage! You suffer 10 damage! <<elseif _temp is 3>> <<set $enemy.HP to $enemy.HP + 25>> The goblin drinks more of that slimy liquid, invigorating him by 25 HP. <<endif>> <<set $enemy.HP to $enemy.HP + 10>> Whatever that slimy liquid was, it seems to heal injuries. The goblin recovers 10 HP. <<if $enemy.HP gt $enemy.maxHP>> <<set $enemy.HP to $enemy.maxHP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "goblin archer">> The goblin shoots at you, dealing $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> You are poisoned! You lose 12 HP! <<set $player.HP to $player.HP - 12>> <<set $enemy.HP to $enemy.HP + 10>> Whatever that slimy liquid was, it seems to heal injuries. The goblin recovers 10 HP. <<if $enemy.HP gt $enemy.maxHP>> <<set $enemy.HP to $enemy.maxHP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "goblin shaman">> <<if $enemy.MP gte 20>> The goblin hurls a massive, lucid ball of green light at you, dealing 130 damage! <<set $player.HP to $player.HP - 130>> <<set $enemy.MP to $enemy.MP - 20>> <<else>> The goblin bonks you with his staff, dealing $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemy.HP to $enemy.HP + 10>> Whatever that slimy liquid was, it seems to heal injuries. The goblin recovers 10 HP. <<if $enemy.HP gt $enemy.maxHP>> <<set $enemy.HP to $enemy.maxHP>> <<endif>>' <<set $enemycombat to 1>> <<elseif $enemy.name is "goblin leader">> <<set _temp to random(1,2)>> <<if _temp is 1>> <<set $player.HP to $player.HP - $enemy.attack>> The goblin attacks you with his sword! You suffer $enemy.attack damage! <<elseif _temp is 2 and $enemy.MP lt 30>> <<set $enemy.MP to $enemy.MP + 10>> The goblin drinks more of that slimy liquid, invigorating him by ... wait, you recognise the brew as the fragrant marigold flower, reputed to restore magical strength. Whatever he just drank, it was definitely different from the liquids the other goblins drink. The goblin leader restores 10 MP! <<elseif _temp is 2 and $enemy.MP gte 30>> The goblin casts Dark Bolt, dealing 125 damage! <<set $player.HP to $player.HP - 125>> You are quite surprised that such a primitive creature knows such powerful magic ... who taught them? <<set $enemy.MP to 0>> <<endif>> <<set $enemy.MP to $enemy.MP + 5>> The goblin leader recovers 5 MP. <<if $enemy.MP gt $enemy.maxMP>> <<set $enemy.MP to $enemy.maxMP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "wight">> <<if $enemy.MP gt 0>> The wight attacks you with a swing of his sword, magically empowered by the Empyrean! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<set $enemy.MP to $enemy.MP - 5>> <<else>> The wight gathers energy from the Empyrean. <<set $enemy.MP to $enemy.maxMP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "old naga">> <<set _i to random(1,5)>> <<if _i is 1>> The naga roars, moving around chaotically. Still it manages to ram you with its head. <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 2>> The naga casts blood magic, draining your blood to replenish its own! <<set $player.HP to $player.HP - 40>> <<set $enemy.HP to $enemy.HP + 15>> <<elseif _i is 3>> The naga unleashes a torrent of water! You suffer 50 damage! <<set $player.HP to $player.HP - 50>> <<elseif _i is 4>> The naga casts blood magic, weakening your strength! <<set $player.attack to $player.attack - 10>> <<elseif _i is 5>> The naga utilizes aquatic spellcrafting to heal its own body. <<set $enemy.HP to $enemy.HP + 50>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "gladiator">> <<if $enemy.HP lte 45 and $gladiatorhealing isnot true>> The gladiator assumes a defensive stance--to drink a health potion! You tsk to yourself as the gladiator is fully healed. <<set $enemy.HP to $enemy.maxHP>> <<set $gladiatorhealing to true>> <<else>> The gladiator attacks you with his pike. <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "troll">> <<if $trolltimer isnot 3>> The troll does nothing except pick its nose, its lumbering club left unused. <<set $trolltimer to $trolltimer + 1>> <<elseif $trolltimer is 3>> The troll suddenly rages, swinging at you with full might! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<set $trolltimer to 0>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Gurg">> <<if $Gurgtimer isnot 3>> Gurg does nothing except pick its nose, its lumbering club left unused. <<set $Gurgtimer to $Gurgtimer + 1>> <<elseif $Gurgtimer is 3>> Gurg suddenly rages, swinging at you with full might! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<set $Gurgtimer to 0>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Elise">> <<set _i to random(1,4)>> <<if _i is 1 or 2>> Elise attacks you with a sharp scimitar, dealing $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 3 and $Eliseboost isnot true>> Elise calls upon powerful fey magic, boosting her strength at the cost of her own spilled blood! <<set $enemy.attack to $enemy.attack + 30>> <<set $enemy.HP to enemy.HP - 55>> <<set $Eliseboost to true>> <<elseif _i is 3 and $Eliseboost is true>> Elise utilizes fey magic to blast you head-on, dealing 60 damage! <<set $player.HP to $player.HP - 60>> <<elseif _i is 4>> Elise launches a quick attack, dealing 10 damage! She can certainly move again ... <<set $player.HP to $player.HP - 10>> <<endif>> <<if _i isnot 4>> <<set $enemycombat to 1>> <<elseif _i is 4>> <<set $enemycombat to 0>> <<endif>> <<elseif $enemy.name is "Incubus">> <<set _i to random(1,4)>> <<if _i is 1 or 2>> The incubus casts Lustbolt, a bolt of sexual energy that bloodies your flesh and stuns your mind! You suffer 80 damage! <<set $player.HP to $player.HP - 80>> <<elseif _i is 3 and $Incubusheal isnot true>> The incubus casts Loveheal, a wave of sexual energy that rejuvenates him. <<set $enemy.HP to $enemy.maxHP>> <<set $Incubusheal to true>> <<elseif _i is 3 and $Incubusheal is true>> The incubus masturbates, earning the groans of the arena-goers, since nobody really wants to see an adult man pump his penis in public. It does seem to heal him, somehow. <<set $enemy.HP to $enemy.HP + 50>> <<elseif _i is 4>> The incubus casts Sexblade, a concentrated sword of sex magic that saps both your physical health and magical strength! You lose 80 HP and 5 mana! <<set $player.HP to $player.HP - 80>> <<set $player.MP to $player.MP - 5>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Thalestris">> <<if $enemy.attack lt 130>> Thalestris roars, summoning a great, vitalizing power. Her attack strength has increased! <<set $enemy.attack to $enemy.attack + 30>> <<else>> Thalestris roars, summoning a great, vitalizing power. Her wounds are closing! <<set $enemy.HP to $enemy.HP + 20>> Thalestris jabs at you with her spear! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> Thalestris charges at you and tackles you to the ground! Thankfully, she only does negligible damage. You lose 20 HP. <<set $player.HP to $player.HP - 20>> <<set $enemycombat to 1>> <<elseif $enemy.name is "male knight">> The knight slashes at you with his sword! <<set $player.HP to $player.HP - $enemy.attack>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Priestess">> The priestess bonks you with her wooden staff. Today you learn that a bundle of wood hurts quite a bit. You lose 15 HP! <<set $player.HP to $player.HP - 15>> <<set _i to random(1,2)>> <<if _i is 1>> The priestess chants a spell, pushing you back with a wave of holy magic, dealing 65 damage! <<set $player.HP to $player.HP - 65>> <<elseif _i is 2>> The priestess attacks you with her staff, enhanced by holy magic! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Outpost Captain">> <<set _i to random(1,2)>> <<if _i is 1 and $holylight isnot true>> The outpost captain calls for his god. A brilliant flash of light dances around, hurting both of you! The captain suffers 150 damage! You suffer 150 damage! <<set $player.HP to $player.HP - 150>> <<set $enemy.HP to $enemy.HP - 150>> <<set _holylight to true>> <<elseif _i is 1 and $holylight is true>> The outpost captain calls for his god. A small flash of light bursts into the room, hurting you for 55 damage! <<set $player.HP to $player.HP - 55>> <<elseif _i is 2>> The outpost captain swings his divinely charged blade, hurting you for $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Holy Lion">> <<set _i to random(1,3)>> <<if _i is 1>> The lion roars loudly, summoning divine powers! You feel your magical strength drained! <<set $player.MP to $player.MP - 15>> <<elseif _i is 2>> The lion shines brilliantly, emitting powerful divine energy. You feel your magical strength sapped! The energy also harms your flesh for 50 damage! <<set $player.HP to $player.HP - 50>> <<set $player.MP to $player.MP - 7>> <<elseif _i is 3>> The lion leaps and bites you, hurting you for $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Spearton Leader">> <<set _i to random(20,30)>> The spearton leader charges at you with his spear, dealing $enemy.attack damage! He bashes your skull in with his shield, dealing _i damage! <<set $player.HP to $player.HP - _i>> <<set $player.HP to $player.HP - $enemy.attack>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Malkoth">> <<if $MalkothTimer lt 3>> Malkoth rampages, seriously injuring you! You suffer 200 damage! <<set $player.HP to $player.HP - 200>> <<set $MalkothTimer to $MalkothTimer + 1>> <<elseif $MalkothTimer is 3>> Malkoth stares into your eyes ... you lose all will to resist. You give yourself in .../ <<set $player.HP to 0>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Skeleton warrior">> <<set _i to random(1,5)>> <<if _i is 5>> A light of undeath swirls around the skeleton warrior, repairing its bones and strengthening its figure. The skeleton recovers 100 HP! <<set $enemy.HP to $enemy.HP + 100>> <<else>> The skeleton warrior strikes you with its sword, dealing $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "dark spirit">> The dark spirit rages with a maelstrom of hatred. Its putrid hate corrodes your very own vitality! You suffer $enemy.attack damage! The dark spirit seems to reel from its own power, suffering 25 damage! <<set $player.HP to $player.HP - $enemy.attack>> <<set $enemy.HP to $enemy.HP - 25>> <<set $enemycombat to 1>> <<elseif $enemy.name is "zombie">> <<set _i to random(1,2)>> The zombie stirs, its undead hand landing a punch on you! You suffer some $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<if _i is 1>> The necromantic magic that is holding the zombie together is starting to fail, weakening the zombie. However, the failing magic lashes out at you! You suffer 20 damage! The zombie loses 70 HP! <<set $player.HP to $player.HP - 20>> <<set $enemy.HP to $enemy.HP - 70>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Necromancer">> <<set _i to random(1,3)>> <<if _i is 1>> The necromancer whacks you with his staff! It doesn't hurt much, though. <<set $player.HP to $player.HP - $enemy.attack>> <<set $necromancertimer to $necromancertimer - 2>> <<elseif _i is 2>> The necromancer casts Dark Bolt! You suffer 90 damage! <<set $player.HP to $player.HP - 90>> <<set $necromancertimer to $necromancertimer - 1>> <<elseif _i is 3>> The necromancer gathers his strength! End this battle quickly! <<set $necromancertimer to $necromancertimer - 3>> <<endif>> <<if $necromancertimer lt 1>> The necromancer explodes in a cascade of unstable energy! <<set $player.HP to 0>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Skinwalker1">> The skinwalker hurls a weak beam of malevolent energy at you! You suffer 30 damage! <<set $player.HP to $player.HP - 30>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Skinwalker2">> <<set $skinwalkertimer to $skinwalkertimer + 1>> <<if $skinwalkertimer gte 5>> The skinwalker attacks with discs of malevolent energy! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif $skinwalkertimer gte 2>> The skinwalker gathers its strength! <<set $enemy.attack to $enemy.attack + 50>> <<else>> The skinwalker unleashes a massive beam of malevolent energy! <<set $player.HP to $player.HP - 150>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Wood Elemental">> <<set _i to random(1,3)>> <<if _i is 1>> The wood elemental smacks you with a log! Who would've guessed a piece of wood can be so hard? You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 2>> The wood elemental hurls a large stone at you! You suffer 60 damage! <<set $player.HP to $player.HP - 60>> <<elseif _i is 3>> The wood elemental calls upon powers of nature to heal itself! It heals itself for 100 HP! <<set $enemy.HP to $enemy.HP + 100>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Ice Elemental">> <<set _i to random(1,2)>> <<if _i is 1>> The ice elemental summons a sword-sized icicle. You barely dodge its terrifying flight, only for it to move mid-air and slash your back! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 2>> The ice elemental summons a small snow whirl, healing itself while dealing some damage to you! The chill is growing strong. You suffer 25 damage! The ice elemental heals itself for 100 HP! <<set $player.HP to $player.HP - 25>> <<set $enemy.HP to $enemy.HP + 100>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Fire Mage">> <<set _i to random(1,5)>> <<if _i is 5>> The fire mage burns, sacrificing life itself for power! The fire mage loses 100 HP! The fire mage gains 100 attack! <<set $enemy.HP to $enemy.HP - 100>> <<set $enemy.attack to $enemy.attack + 100>> <<elseif _i gte 3>> <<set _k to $enemy.attack + 50>> The fire mage unleashes a storm of flame that hurts both you and the mage! You suffer _k damage! The mage suffers 20 damage! <<set $player.HP to $player.HP - _k>> <<set $enemy.HP to $enemy.HP - 20>> <<else>> The fire mage throws a fireball at you! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Lust Mage">> <<set _i to random(1,5)>> <<if _i is 5>> The lust mage utilizes stored lust energy to partially restore their strength! <<set $enemy.HP to $enemy.HP + 30>> <<set $enemy.attack to $enemy.attack + 30>> <<elseif _i gte 3>> <<set _k to $enemy.attack + 50>> The lust mage draws upon external passion to hurl a lighting bolt at you! You suffer _k damage! <<set $player.HP to $player.HP - _k>> <<else>> The lust mage fires a beam of lust energy at you! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<if $enemy.attack gte 20>> The lust mage's power dwindles .... <<set $enemy.attack to $enemy.attack - 10>> <<endif>> <<elseif $enemy.name is "Dark Mage">> <<set _i to random(1,5)>> <<if _i is 5>> The blood mage gathers a massive amount of power before releasing it all, twisting your bones and bursting your blood vessels! The blood mage's clearly not unaffected by it either .... You suffer 160 damage! The enemy is hurt by 40 damage! <<set $player.HP to $player.HP - 160>> <<set $enemy.HP to $enemy.HP - 40>> <<elseif _i is 4>> The blood mage heals themself with a burst of power. Though unintended, some of it heals you as well. You heal for 30 HP! The enemy is healed by 120 HP! <<set $player.HP to $player.HP + 30>> <<set $enemy.HP to $enemy.HP + 120>> <<else>> The blood mage casts a bolt of darkness at you! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Fungal Abomination">> <<set _i to random(1,3)>> <<if _i is 1>> The fungal abomination attacks with a magic-induced shockwave! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 2>> The fungal abomination screams in pain. "Kill ... us ...." Thankfully, it does nothing. Physically, that is. You feel sick mentally, seeing this twisted creature. <<elseif _i is 3 and $FungalAbominationPrime isnot true>> The fungal abomination is preparing to explode! The fungi grow exponentially, and a a strange gas is released! <<set $FungalAbominationPrime to true>> \\Finish it off quickly before it explodes!\\ <<elseif _i is 3 and $FungalAbominationPrime is true>> The fungal abomination explodes in a cascade of fungal infection! You suffer $enemy.HP damage! The fungal abomination is re-forming itself. Kill it before it can! <<set $FungalAbominationPrime to false>> <<set $player.HP to $player.HP - $enemy.HP>> <<set $enemy.HP to 1>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Fey Entity">> The fey entity is summoning something horrible! Thankfully, it's so focused on the summoning that it doesn't attempt to impede you. <<set $FeyEntityTimer to $FeyEntityTimer + 1>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Blood Elf Guard">> <<set _i to random(1,3)>> <<if _i isnot 1>> The elven bandit slashes you with her daggers! You suffer $enemy.attack damage! <<set $player.HP to $player.HP - $enemy.attack>> <<elseif _i is 1 and $enemy.MP isnot 0>> The elven bandit casts Withering Bolt! You suffer $enemy.attack damage! Your attack is weakened by 20! <<set $player.HP to $player.HP - $enemy.attack>> <<set $enemy.MP to $enemy.MP - 15>> <<set $player.attack to $player.attack - 20>> <<elseif _i is 1 and $enemy.MP is 0>> The elven bandit whips out a potion that she drinks quickly. Her magical power is restored! <<set $enemy.MP to $enemy.maxMP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Luo">> <<set _i to random(1,3)>> <<if _i is 1>> Grand Sage Luo casts Transcendant Wave of Iron! Like a wave of water, countless iron blades flies at you! The mages' barrier manages to hold off some, but you're still badly wounded! You suffer 400 damage! <<set $player.HP to $player.HP - 400>> <<elseif _i is 2>> Grand Sage Luo casts Constellation of Steel! Sharp spears hail down from the sky. The mages' barrier manages to hold off some, but you're still badly wounded! You suffer 400 damage! <<set $player.HP to $player.HP - 400>> <<elseif _i is 3>> Grand Sage Luo casts Ferro Confinement! All your power is wrested away! <<set $player.MP to 0>> <<set $player.attack to 0>> <<endif>> <<set $enemycombat to 1>> <<endif>> <</nobr>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[You fall to the ground|Game Over]] <<elseif $player.MP gte 0>> <<if $enemy.HP lte 0>> You stand triumphant. [[Continue|Victory Chapter 2]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[You fall to the ground|Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $enemycombat is 0>> [[Continue|Enemy Move Chapter 2]] <<elseif $enemycombat is 1>> [[Continue|Player Move Chapter 2]] <<endif>> <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="86" name="Player Move 2 Chapter 2" tags="" position="925,2950" size="100,100"><<if $move is "Attack">> <<set $enemy.HP to $enemy.HP - $player.attack>> You deal $player.attack damage to your enemy! <<elseif $move is "Minor Heal">> <<set $player.HP to $player.HP + $healpower>> <<set $player.MP to $player.MP - 5>> You heal yourself for $healpower HP! <<elseif $move is "Arcane Bolt">> <<set $enemy.HP to $enemy.HP - $arcaneboltpower>> <<set $player.MP to $player.MP - 5>> You send a small bolt of arcane energy, dealing $arcaneboltpower damage to your enemy! <<elseif $move is "Strength of the Bear">> <<set $player.attack to $player.attack + $bearpower>> <<set $player.MP to $player.MP - 5>> You roar, increasing your might! You feel the powers of nature enhancing your own. <<elseif $move is "Drink Health Potion">> <<if $healthpotion gte 1>> <<set $healthpotion to $healthpotion - 1>> <<set $player.HP to $player.maxHP>> You drink a health potion, restoring your health! <<else>> You grab your health pot--oh wait you have none. <<endif>> <<elseif $move is "Blood Drain">> <<set $player.HP to $player.HP + ($blooddrainpower / 2)>> <<set $enemy.HP to $enemy.HP - $blooddrainpower>> <<set $player.MP to $player.MP - 10>> You cast Blood Drain, draining your foe of their blood and replenishing your own! <<elseif $move is "Lustbolt">> <<set $enemy.HP to $enemy.HP - $lustboltpower>> <<set $player.MP to $player.MP - 15>> You cast Lustbolt, a searing bolt of energy that blasts apart your foe's body! <<elseif $move is "Arachnid Restoration">> <<set $player.MP to 0>> <<set $player.HP to $player.HP + $Arachnerestorationpower>> You summon the strength of the fallen god Arachne to heal your wounds at the cost of all your mana! <<endif>> <<set $enemycombat to 0>> <<if $player.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[You fall to the ground|Game Over]] <<elseif $player.MP gte 0>> <<if $enemy.HP lte 0>> You stand triumphant. [[Continue|Victory Chapter 2]] <<elseif $player.HP lte 0>> You suffer too many injuries. Your mortal flesh fails. You collapse .... [[You fall to the ground|Game Over]] <<else>> You still stand. Unfortunately, so does your opponent. <<if $enemycombat is 0>> [[Continue|Enemy Move Chapter 2]] <<elseif $enemycombat is 1>> [[Continue|Player Move Chapter 2]] <<endif>> <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="87" name="Victory Chapter 2" tags="" position="1150,3300" size="100,100"><<if $enemy.name is "goblin guard">> You won a hard-fought victory against the goblin guard. You search the goblin for valuables, and you find $enemy.coins coins and $enemy.supplies supplies! After that, you continue to the dungeon. <<set $player.coins to $player.coins + $enemy.coins>> <<set $player.supplies to $player.supplies + $enemy.supplies>> <<set $player.attack to $player.maxattack>> <<set $goblindungeon to $goblindungeon + 1>> [[Head deeper into the goblin den|Goblin Dungeon]] <<elseif $enemy.name is "troll">> You triumph against the troll, against all odds. The crowd cheers at your victory. Now to your prize: the "young virgins" Ella and Emma, both of whom looks 25 percent hopeful and 75 percent deathly scared. "Rape, rape, rape!" the crowd demands. You don't plan to follow the crowd's demands in full, but perhaps a little lesson is in order. You certainly would like to see them side-by-side spreading your legs for you one day. The question now is what approach you should use. [[A hard approach]] would likely sap them of their willpower. Your instincts tell you they're likely to be able to be molded into depraved sluts sucking cocks for a piece of bread. Meanwhile, [[a softer approach]] might be the longer way round, but the twins will likely develop into classier servants. Not that it'd be saying much, but still. <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $ArenaRep to $ArenaRep + 50>> <<elseif $enemy.name is "Gurg">> You win the battle against Gurg. The arena cheers as one of the champions fall. The reward is a pittance, though. Your patron, Lady Alice Brandenburg, nods in satisfaction. Her manservant delivers you her gifts of gold and supplies. [[Return to the camp and rest|End day 2]] <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $player.coins to $player.coins + 325>> <<set $player.supplies to $player.supplies + 100>> <<set $ArenaRep to $ArenaRep + 50>> <<set $GurgKilled to true>> <<elseif $enemy.name is "Elise">> Elise's head rolls with a dreadful scream. The arena cheers at your victory. Your patron, Lady Alice Brandenburg, nods in satisfaction. Her manservant delivers you a mysterious black shard. The shard attaches itself to your dagger, sharpening it. [[Return to the camp and rest|End day 2]] <<set $player.maxattack to $player.maxattack + 10>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $ArenaRep to $ArenaRep + 50>> <<set $EliseKilled to true>> <<elseif $enemy.name is "Incubus">> As you strike the incubus down, you think you've won. However, he slips away, laughing merrily. He looks little hurt. Has he been holding himself back? "Hey, human, you're not half-bad at all! Can I have your name?" "... it's $name." "$name. I'll remember the name. I'm Leslie, by the way. And here's a little gift from me." The incubus whistles. The knowledge of the fell spell Lustbolt is ingrained in your head. Without sex magic, though, you'll have to substitute it with mana. The incubus then runs away like a thunderbolt, earning dumbfounded reactions from the crowd, who half-heartedly clap for you. Your patron, Lady Alice Brandenburg, nods in mild dissatisfaction. Her manservant delivers you a meagre gift of supplies. [[Return to the camp and rest|End day 2]] <<if $spell.includes("Lustbolt")>> As you've learnt Lustbolt elsewhere, the incubus' gift is rather useless. <<else>> <<run $spell.push("Lustbolt")>> <<run $spelldesc.push("A sex spell that utilizes lust to summon a pink bolt of energy; without sex magic you'll have to use mana, though; cost: 15 MP")>> <<set $lustboltpower to 120>> <<endif>> <<set $player.supplies to $player.supplies + 50>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $ArenaRep to $ArenaRep + 50>> <<set $IncubusKilled to true>> <<elseif $enemy.name is "Thalestris">> With a decisive blow, you fell down Thalestris, grand champion of the arena. The wounded amazon looks at you with eyes of disbelief. [[You begin taking off your trousers]] <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $ArenaRep to $ArenaRep + 50>> <<set $ThalestrisKilled to true>> <<elseif $enemy.name is "gladiator">> You win the battle against the gladiator. You are rewarded with a pittance of gold, but the audience seems to shower you with flowery praises. Or the incoherent shouts' equivalent to flowery praises. Your patron, Lady Alice Brandenburg, nods in satisfaction. [[Return to the camp and rest|End day 2]] <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<set $player.coins to $player.coins + 15>> <<set $ArenaRep to $ArenaRep + 25>> <<set $gladiatorhealing to false>> <<elseif $enemy.name is "old naga">> You slay the old naga, archenemy of Lord Vivier. With great difficulty, you cut off its head and bring it back to Lord Vivier. You also take the dagger sticking out, which has a golden hilt. To be honest, you expected a far more vicious battle. It was as if the naga had been weakened beforehand. [[Claim your reward from Lord Vivier]] <<elseif $enemy.name is "wight">> You crush the wight; his mortal body falls to the ground and his spirit vanishes. You bring back his head to the local authorities for a reward of 50 gold. Your act increases your reputation in Dornburg. Then, you rest in your camp. <<set $player.coins to $player.coins + 50>> <<nobr>> <<if def $DornburgRep>> <<set $DornburgRep to $DornburgRep + 50>> <<else>> <<set $DornburgRep to 50>> <<endif>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <</nobr>> [[Back to your camp|End day 2]] <<elseif $enemy.name is "goblin archer">> You won a hard-fought victory against the goblin archer. You search the goblin for valuables, and you find $enemy.coins coins and $enemy.supplies supplies! After that, you continue to the dungeon. <<set $player.coins to $player.coins + $enemy.coins>> <<set $player.supplies to $player.supplies + $enemy.supplies>> <<set $player.attack to $player.maxattack>> <<set $goblindungeon to $goblindungeon + 1>> [[Head deeper into the goblin den|Goblin Dungeon]] <<elseif $enemy.name is "goblin shaman">> You won a hard-fought victory against the goblin shaman. You search the goblin for valuables, and you find $enemy.coins coins and $enemy.supplies supplies! After that, you continue to the dungeon. <<set $player.coins to $player.coins + $enemy.coins>> <<set $player.supplies to $player.supplies + $enemy.supplies>> <<set $player.attack to $player.maxattack>> <<set $goblindungeon to $goblindungeon + 1>> [[Head deeper into the goblin den|Goblin Dungeon]] <<elseif $enemy.name is "goblin leader">> <<set _tempgold to random(60,100)>> <<set _reward to random(1,2)>> You won a hard-fought victory against the goblin shaman. You search his throne and its surrounding for treasures, and you find assorted junk worth _tempgold coins! You also take his stone crown and return to Dornburg, presenting the crown to local authorities. You receive your reward of 75 coins and your name begins to spread among the city's people. Your reputation in Dornburg has increased! <<set $player.coins to $player.coins + _tempgold>> <<set $player.coins to $player.coins + 75>> <<if _reward is 1>> You also find some goblin pussy juice in a vial. <<set $goblinpussyjuice to $goblinpussyjuice + 1>> <<elseif _reward is 2>> You also find a vial of healing potion. Someone is definitely backing these little critters .... <<set $healthpotion to $healthpotion + 1>> <<endif>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> <<if def $DornburgRep>> <<set $DornburgRep to $DornburgRep + 75>> <<else>> <<set $DornburgRep to 75>> <<endif>> [[Return to the camp and rest|End day 2]] <<elseif $enemy.name is "male knight">> You cut down the male knight. "The Light-King avenges me!" he cries. [[Continue your attack|Enter the outpost]] <<set $player.gold to $player.gold + 10>> <<set $player.supplies to $player.supplies + 2>> <<set $ChurchDungeon to $ChurchDungeon + 1>> <<set $player.attack to $player.maxattack>> <<set $player.speed to $player.maxspeed>> <<elseif $enemy.name is "Priestess">> You cut down the priestess. "The Light-King, I die pure and untouched. Take me as your bride," she mutters as she dies. You wonder what sort of nonsensical theology the current Church has been teaching. [[Continue your attack|Enter the outpost]] <<set $player.gold to $player.gold + 10>> <<set $player.supplies to $player.supplies + 2>> <<set $ChurchDungeon to $ChurchDungeon + 1>> <<set $player.attack to $player.maxattack>> <<set $player.speed to $player.maxspeed>> <<elseif $enemy.name is "Outpost Captain">> With a blow, you defeat the outpost captain. You take a moment to catch your breath. The strength of this outpost has been completely neutralized. [[Loot the place]] <<elseif $enemy.name is "Holy Lion">> With a blow, you fell the holy lion. You take a moment to catch your breath. The strength of this outpost has been completely neutralized. [[Loot the place]] <<elseif $enemy.name is "Spearton Leader">> You hurl yourself at the spearton leader, embedding your dagger deep in his abdomen. A loud wail is let out, and then silence. The morale of the Speartons break! [[Finish the battle|Spearton Battle Conclusion]] <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 1>> <<elseif $enemy.name is "Skeleton warrior">> You triumph over the skeleton, sending it to rest. You continue your exploration. <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue|Undead Dungeon]] <<elseif $enemy.name is "dark spirit">> You send the dark spirit back to where it came from. You continue your exploration. <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue|Undead Dungeon]] <<elseif $enemy.name is "zombie">> The zombie crumbles and falls. You continue your exploration. <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue|Undead Dungeon]] <<elseif $enemy.name is "Necromancer">> The necromancer is reduced to ash! You continue your exploration and find that he is guarding his rather sizable stash of valuables! [[Loot the necromancer's vault|Necromancer Vault]] <<elseif $enemy.name is "Skinwalker1">> You have beaten back the skinwalker. You should probably [[rendezvous with Thalestris|Thalestris Talk]] <<elseif $enemy.name is "Skinwalker2">> [[Victory!|Thalestris Quest Finish]] <<elseif $enemy.name is "Wood Elemental">> The wood elemental falls to the ground, nothing but a loosely held together collection of wood and stone. You manage to salvage a single stone with an interesting brown and green color. <<set $earthcore to $earthcore + 1>> [[Continue your journey|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1]] <<elseif $enemy.name is "Ice Elemental">> The ice elemental vanishes like a heat mirage, turning into a heap of snow and ice crystals. You manage to salvage a single stone with an interesting ice-blue color. <<set $icecore to $icecore + 1>> [[Continue your journey|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1]] <<elseif $enemy.name is "Fire Mage">> The fire mage falls like a marionette doll. So much for their threat. You find a single stone that is warm with red color. [[Continue your journey|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1]] <<set $firecore to $firecore + 1>> <<elseif $enemy.name is "Lust Mage">> The lust mage collapses to the ground with a cry. You scavenge a single pink stone from their corpse. [[Continue your journey|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1]] <<set $lustcore to $lustcore + 1>> <<elseif $enemy.name is "Dark Mage">> The blood mage falls to your might. From the cloak of the fallen mage rolls a single heavy grey stone. [[Continue your journey|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1]] <<set $darkcore to $darkcore + 1>> <<elseif $enemy.name is "Fungal Abomination">> You have slain the fungal abomination. You return to your temporary camp to rest. Unfortunately, you are wasting valuable time. <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> [[Continue|Angrisa Grove 1]] <<set $AngrisaGrove to $AngrisaGrove + 1>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<elseif $enemy.name is "Fey Entity">> The fey entity lets out a loud, otherworldly scream. In an instant, Dahlia's ex-husband's body is torn into a thousand pieces, and the fey entity ... seems to die. You feel a presence leaving this plane. And another one entering it. A bull-man steps out from the portal with a bellow. You steel yourself. "Who are you?" you demand. "Hm? A mere worm dares to ask? I, I am an Abyssal Lord, I am Elyon! And you, worm, will bear the honor of being my first prey in a while!" The Abyssal Lord strikes you with a bolt of dark magic, which you barely parry with all your strength. "You're dead now, worm!" [[Fight to the death|Angrisa Grove 3]] <<elseif $enemy.name is "Blood Elf Guard">> You take down the bandit. She's unconscious but not dead. She's frighteningly competent; she must have been some kind of officer or elite. You continue to pocket the loot. And that is when a pang of powerful magic hit you. And you [[fall unconscious ....|Jharina Quest Final 2]] <<endif>> </tw-passagedata><tw-passagedata pid="88" name="Goblin Dungeon" tags="" position="1750,3050" size="100,100"><<if $goblindungeon is 2>> <<set _i to random(1,3)>> You dispose of the guard and enter the goblin den. There are three paths for you to choose from. [[You can continue straightforward|Meet Goblin Guard]] <<if _i is 1>> [[You can go to the left|Meet Goblin Guard]] [[You can go to the right|Meet Goblin Archer]] <<elseif _i is 2>> [[You can go to the left|Meet Goblin Archer]] [[You can go to the right|Meet Goblin Guard]] <<elseif _i is 3>> [[You can go to the left|Meet Goblin Guard]] [[You can go to the right|Goblin Female Event 1]] <<endif>> <<elseif $goblindungeon is 3>> It seems that you are headed towards the goblins' treasury. Most of it is in a locked chest, though, so unless you know lockpicking it's probably not worth it. There's also a bucket of goblin milk, reputed for its healing powers and awful taste. [[Lockpick the chest|Goblin Treasury Event]] [[Drink the milk|Goblin Milk Event]] <<elseif $goblindungeon is 4>> As you venture deeper, you trigger a number of arrow traps! They don't hurt much, but you do feel rather fatigued and slow. <<set $player.HP to $player.HP - 15>> <<set $player.MP to $player.MP - 10>> <<set $goblindungeon to $goblindungeon + 1>> [[Venture Deeper|Goblin Dungeon]] <<elseif $goblindungeon is 5>> <<set _i to random(1,3)>> You venture deeper into the den. You think you're close. [[You can continue straightforward|Meet Goblin Guard]] <<if _i is 1>> [[You can go to the left|Meet Goblin Archer]] [[You can go to the right|Meet Goblin Guard]] <<elseif _i is 2>> [[You can go to the left|Meet Goblin Archer]] [[You can go to the right|Meet Goblin Guard]] <<elseif _i is 3>> [[You can go to the left|Meet Goblin Guard]] [[You can go to the right|Meet Goblin Archer]] <<endif>> <<elseif $goblindungeon is 6>> As you venture deeper in a linear corridor, you are met with a goblin shaman! [[Fight|Meet Goblin Shaman]] <<elseif $goblindungeon is 7>> <<set _i to random(1,4)>> Your gut feeling tells you you're about to reach the epicenter of the goblin den. You rest for a while. <<set $player.HP to $player.HP + 80>> <<set $player.MP to $player.MP + 10>> You should probably prepare yourself by resting further, but there is one room nearby. A treasury, perhaps, or supply rooms, or nothing .... [[Prepare yourself|Goblin Rest Event]] <<if _i is 1>> [[Search the room|Goblin Female Event 1]] <<elseif _i is 2>> [[Search the room|Goblin Treasury Event]] <<elseif _i is 3>> [[Search the room|Goblin Milk Event]] <<elseif _i is 4>> [[Search the room|Goblin Empty Event]] <<endif>> <<elseif $goblindungeon is 8>> You breach into the goblin throneroom. Their leader, wearing a stone crown, sits lazily on his throne. This is it; this is what you come here for. You raise your blackstone dagger. "What is this?" he cawed. "Heh, I'll make a goblet out of your skull!" [[Kill him!|Meet Goblin Leader]] <<endif>> </tw-passagedata><tw-passagedata pid="89" name="Flee 2" tags="" position="2625,2450" size="100,100">You run back to your nearest safe spot and rest there. [[Sleep|End day 2]]</tw-passagedata><tw-passagedata pid="90" name="Meet Goblin Guard" tags="" position="1650,2925" size="100,100">You encounter a goblin guard! [[Fight|Goblin Guard]]</tw-passagedata><tw-passagedata pid="91" name="Meet Goblin Archer" tags="" position="1650,3175" size="100,100">You encounter a goblin archer! [[Fight|Goblin Archer]]</tw-passagedata><tw-passagedata pid="92" name="Goblin Archer" tags="" position="1425,2850" size="100,100"><<nobr>> <<set _temphp to random(120,150)>> <<set _tempattack to random(35,45)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "goblin archer", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The goblin dips his arrows in poison and prepares to shoot at you! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a goblin archer! He drinks an unknown substance before fighting you! <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="93" name="Goblin Female Event 1" tags="" position="575,3250" size="100,100">It's your lucky day! You stumble upon one of the female goblin's room, and she's pregnant to boot. You rest for a while while the female goblin looks at you with fear. Goblins are normally not allowed to enter their females' rooms without permission, so you're sure you're safe here. You loudly intimidate the female goblin into giving you some of her breast milk, which you drink immediately, healing some health. <<set $player.HP to $player.HP + 100>> <<if $goblinpussyjuiceinfo is true>> You remember about what Mr Hemsworth said. You walk towards the goblin and put your fingers inside her slimy, filthy pussy. You masturbate her while putting one hand on her mouth. She cums after five minutes, allowing you to collect her juices in a vial. <<set $goblinpussyjuice to $goblinpussyjuice + 1>> <<endif>> <<set $goblindungeon to $goblindungeon + 1>> You come out of the room and [[venture deeper into the den|Goblin Dungeon]].</tw-passagedata><tw-passagedata pid="94" name="Goblin Treasury Event" tags="" position="600,3375" size="100,100">You head to the treasury and pick up some meagre 30 coins. <<set $player.coins to $player.coins + 30>> There's also a chest lying nearby. <<set _i to random(1,3)>> <<if $ability.includes("Lockpicking")>> <<if _i is 1>> You lockpick the chest and find 125 coins inside, which you promptly pocket. <<elseif _i is 2>> You lockpick the chest and find some goblin milk in a vial, which is basically a healing potion even though the taste is awful. <<elseif _i is 3 and $premiumpass isnot true>> You lockpick the chest and find some sort of parchment. It is written: "Premium Fragrant Rose Pass" and signed by one Knight Holmster. You pocket it, but you're not sure what the hell that thing is. <<set $premiumpass to true>> <<else>> You lockpick the chest and find 125 coins inside, which you promptly pocket. <<endif>> <<else>> You cannot lockpick the chest, so you're forced to leave it behind. <<endif>> <<set $goblindungeon to $goblindungeon + 1>> [[Venture Deeper|Goblin Dungeon]]</tw-passagedata><tw-passagedata pid="95" name="Goblin Milk Event" tags="" position="500,3150" size="100,100">You manage to find some goblin milk in the den. You drink up as much as you can stomach, fully healing you. You also feel able to cast magic fully. <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $goblindungeon to $goblindungeon + 1>> [[Venture Deeper|Goblin Dungeon]]</tw-passagedata><tw-passagedata pid="96" name="Meet Goblin Shaman" tags="" position="1425,3000" size="100,100">You encounter a goblin shaman! [[Fight|Goblin Shaman]]</tw-passagedata><tw-passagedata pid="97" name="Goblin Shaman" tags="" position="1275,2925" size="100,100"><<nobr>> <<set _temphp to random(100,120)>> <<set _tempattack to random(20,25)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "goblin shaman", maxHP: _temphp, HP: _temphp, maxMP: 20, MP: 20, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The goblin swings his staff around. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a goblin shaman! He drinks an unknown substance before fighting you! <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="98" name="Goblin Rest Event" tags="" position="625,3500" size="100,100">You rest yourself for a while, recovering some health and magical power. <<set $player.HP to $player.HP + 60>> <<set $player.MP to $player.MP + 10>> <<set $goblindungeon to $goblindungeon + 1>> [[Venture Deeper|Goblin Dungeon]]</tw-passagedata><tw-passagedata pid="99" name="Goblin Empty Event" tags="" position="725,3550" size="100,100">The room is empty ... Disheartened, you return to face the goblin leader. <<set $goblindungeon to $goblindungeon + 1>> [[Venture Deeper|Goblin Dungeon]]</tw-passagedata><tw-passagedata pid="100" name="Meet Goblin Leader" tags="" position="1625,3300" size="100,100">You battle the leader of the goblin den! [[Fight|Goblin Leader]]</tw-passagedata><tw-passagedata pid="101" name="Goblin Leader" tags="" position="1225,3050" size="100,100"><<nobr>> <<set _temphp to 250>> <<set _tempattack to random(45,50)>> <<set _tempspeed to random(15,35)>> <<set _tempcoins to 0>> <<set _tempsupplies to 0>> <<set $enemy = { name: "goblin leader", maxHP: _temphp, HP: _temphp, maxMP: 30, MP: 30, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The goblin leader bangs his sword--a stolen iron sword of human make--against his shield. He's bigger than other goblins. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a goblin leader! He drinks an unknown substance before fighting you! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="102" name="Hunt a wight" tags="" position="1850,2750" size="100,100">You hunt for a wight. It's really easy to spot one: these damnable humans, having struck deals with empyrean powers, spot an undead-like appearance. Soon you find one who's attacking a hapless old man. [[Attack!|Wight]]</tw-passagedata><tw-passagedata pid="103" name="Wight" tags="" position="1850,2625" size="100,100"><<nobr>> <<set _temphp to random(200,220)>> <<set _tempattack to random(80,85)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to 0>> <<set _tempsupplies to 0>> <<set $enemy = { name: "wight", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The wight grins at you with his inhuman voice. He raises his sword, enhanced with ethereal magics. You wouldn't want to be hit too often with that .... Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a wight! <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="104" name="Mr Hemsworth's Shop Entrance" tags="" position="2325,3200" size="100,100">You take a peek. The shop seems rather empty, but Mr Hemsworth and his wife are here. [[Go inside|Mr Hemsworth's Shop]]</tw-passagedata><tw-passagedata pid="105" name="Sex Club" tags="" position="2400,2375" size="100,100"><<if $sexclubfirsttime isnot false>> <<set $sexclubfirsttime to false>> <<set $nagahunt to true>> "Welcome, $name." A pleasantly smiling nobleman greets you warmly. "I am Lord Vivier, Imperial Knight. It is an honor to meet you, $name. Your deeds in helping push back threats against Dornburg do not go unnoticed." "I am most honored," you say artlessly. "We only accept honorable people here at Fragrant Rose Club," Lord Vivier said. "Have a seat, talk, get some drinks--it's on the house. Feel free." You do notice an iron door with a heavy lock and a guard. "What is that door?" "Oh ... you could say it's a special room for special guests. I give out passes for the door for certain people; I'm sorry I cannot give it to you. It is my brother's wish." "I see," you say, though you do feel a little unsatisfied. "Your brother?" "Yes. My brother. He ... he's dead. Killed by a monster. To this day I seek to avenge him, but the monster is too strong. He gave me a message to give the passes for those who are legendary monster killers." Lord Vivier's eyes light up. "I don't know if I should say this, but there is a naga, an aquatic, dragonic monster in the lake near Dornburg. That old naga killed my brother. If you can kill it and bring back the head to me, I'll gladly give you the pass, and a reward as well." <<else>> Lord Vivier smiles at you and welcomes you in. <<endif>> You take a look at the club. You get yourself a free drink, sit down, and relax to watch the dancing girls. Some of them go far enough so as to strip down all their clothes. <<if $premiumpass is true and $nagakilled isnot true>> You show your pass and are allowed into Fragrant Rose Club's special room. Lord Vivier smiles at you with a quizzical tilt; he must have known you obtained the pass elsewhere. [[Head inside|Special Room]] <<elseif $premiumpass is true>> You show your pass and are allowed into Fragrant Rose Club's special room. Lord Vivier smiles at you warmly. [[Head inside|Special Room]] <<endif>> [[You go back to camp tired but satisfied|End day 2]] </tw-passagedata><tw-passagedata pid="106" name="Quests" tags="" position="2325,2150" size="100,100">You ponder the quests you've obtained: <<if $nagahunt is true and $nagakilled isnot true>> Lord Vivier has promised you a pass to the secret room in the exclusive club and a reward if you avenge his brother by killing the old naga. [[Hunt the old naga]] <<endif>> <<nobr>> <<if $TwinsQuest is 2>> Schooling for The Twins: You should probably pay the fees demanded by Toft's school: 120 coins in total. <<if $player.coins gte 120>> [[Pay the fees|Quests][$player.coins to $player.coins - 120;$TwinsQuest to 3;$TwinsThiefDays to 0]] <<else>> Unfortunately, you don't have enough coins. <<endif>> <<endif>> <<if $TwinsQuest is 4>> Schooling for the Twins: You should begin investigating the sudden disappearance of your coins. [[Investigate|Investigation Quest 1]] <<elseif $TwinsQuest is 5>> Schooling for the Twins: [[Confront the twins]] <<elseif $TwinsQuest is 6>> Schooling for the Twins: [[Search for the twins]] <<elseif $TwinsQuest is 8>> Schooling for the Twins: [[You'll need to have a long talk with Dahlia and the twins]] <<endif>> <<if $HaremUnlockedFirstTalk is true and ndef $AliceQuest>> You have received a strange letter. It reads: "To $name, I have heard about your newfound sexual prowess, and your new succubus companion. Please come to my manor immediately. -Viscountess Alice." <<set $AliceQuest to 1>> <<endif>> <<if $ArcaneGuildQuest is 1>> The Arcane Guild has requested five woodcore stones, firecore stones, and icecore stones; as well as two darkcore stones and two lustcore stones. You currently have $earthcore woodcore stones, $firecore firecore stones, $icecore icecore stones, $darkcore darkcore stones, and $lustcore lustcore stones. <<if $earthcore gte 5 and $firecore gte 5 and $icecore gte 5 and $darkcore gte 2 and $lustcore gte 2>> [[Hand over the stones|Quests][$ArcaneGuildQuest to 2;$earthcore to $earthcore - 5;$firecore to $firecore - 5;$icecore to $icecore - 5;$lustcore to $lustcore - 2;$darkcore to $darkcore - 2;$player.coins to $player.coins + 300]] <<endif>> <<elseif $ArcaneGuildQuest is 2>> You have sent the precious stones to the Arcane Guild. It thanks you and sends you a pouch of coins as compensation. Archmage Misa has [[requested your presence in the Guild|Arcane Guild Quest]] <<elseif $ArcaneGuildQuest is 3>> Archmage Misa has once more [[requested your presence in the Guild|Arcane Guild Quest]] <<endif>> <</nobr>> [[back|New Camp]]</tw-passagedata><tw-passagedata pid="107" name="Hunt the old naga" tags="" position="2400,1925" size="100,100">You head out and find the lake where the old naga resides. The lakeside is full of half-eaten corpses, all of them fresh. You throw a large stone into the lake. The serpentine naga rises up from the lake and attacks you! [[Fight!|Old Naga]]</tw-passagedata><tw-passagedata pid="108" name="Special Room" tags="" position="2525,2500" size="100,100">You take a look at the so-called special room. The room is rather simple with a lounge and a number of private rooms, as well as an attendant, a fresh young woman in her twenties. "Of course, feel free to use the rooms. Just please notice the sign that tells whether it's closed or open." You take a look at the rooms and their descriptions. These rooms are currently available: [[Room 1]] "A goblin female captured from one of the goblin dens around Dornburg." [[Room 2]] "An orc female, a spoil of war after a foiled raid on Braunschweig." <<if $MainQuest is 9 and $LordVivierHelp isnot true>> You request Lord Vivier's assistance for the coming war. The nobleman seems shocked at first as you explain the circumstances. "Of course. After all, you are the one who have avenged my brother. I'll gladly lend you my help." <<set $LordVivierHelp to true>> <<endif>> [[Back to the bar|Sex Club]] </tw-passagedata><tw-passagedata pid="109" name="Old Naga" tags="" position="2425,2025" size="100,100"><<nobr>> <<set _temphp to random(270,330)>> <<set _tempattack to random(35,45)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to 0>> <<set _tempsupplies to 0>> <<set $enemy = { name: "old naga", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The old naga stares down at you with anger. Beware his brute strength and blood-spellcasting abilities! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting an old and dangerous naga! You notice a dagger sticking out of the old naga's hide. <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="110" name="Claim your reward from Lord Vivier" tags="" position="1475,3425" size="100,100">You head to the club, but with a bloody naga head in your bag, you are refused entry. Besides, Lord Vivier is currently resting in his estate. Instead, the guard points to Lord Vivier's estate. You enter the relatively modest manor and request and audience with Lord Vivier, which is granted. "I have the head," you say simply as you meet the Imperial Knight in the sunroom. You show the head of the old naga, prompting Lord Vivier to squeal in delight. "And I also found this." You show him the dagger. "This--this is my brother's enchanted dagger! Thank you, $name." Lord Vivier then provides you with the pass, as well as a lot of gold and supplies. "Also, this," he says as his servant brings out a chest. "My brother told me before his death to not open it before the naga is killed. Let's see what's inside." Inside it is a letter: "My dear brother. I find myself drawn to the exotic aquatic nagas. Even though I know the danger, I cannot help but satisfy my academic curiousity. Unfortunately, if you're reading this letter, it means I'm dead. But I'm avenged, at least. Whoever does so must be a great warrior. Please relay my respects to them. Also within this chest is my research on the nagas' magic: a strange spell that allows them to drain vitality and restore their own. Please hand it to whoever avenges me, as a gift from the dead. Lovingly, Tom." Lord Vivier burst into tears as he reads the letter. "Take this," he says, still crying, "take the scroll of the spell. Remember Tom, my brother." You bid farewell to Lord Vivier after learning the spell. The innate strength of the spell also empowers your endurance. [[Go home|End day 2]] <<set $premiumpass to true>> <<set $player.coins to $player.coins + 700>> <<set $player.supplies to $player.supplies + 50>> <<run $spell.push("Blood Drain")>> <<run $spelldesc.push("A spell of naga origins that absorb the health of your foe to restore your own; cost: 10 MP")>> <<set $blooddrainpower to 70>> <<set $nagakilled to true>> <<set $player.maxHP to $player.maxHP + 40>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>></tw-passagedata><tw-passagedata pid="111" name="Room 1" tags="" position="2575,2650" size="100,100">You enter the room with the goblin slave. She is chained to the walls with metal chains on her legs and arms, forcing her crotch to spread. The goblin looks docile enough. Her face is certainly not pretty by human standards, what with her overtly large nose and somewhat wrinkly and sickly green skin. Her tits are small while her cleanly shaven pussy looks small and tight. Her anus was plugged with a buttplug made of metal. There is a quill on a nearby table, alongside some ink. Looking further, there are ink marks on her ass that denote how many times she's been used today; the number stands at eight. The goblin looks away uninterestedly; is this some sort of show of defiance? You don't really care, though; her pussy's there and wide open. You take off your clothes and push your cock inside her snatch. You are a little disappointed to feel that it's similar to a human vagina, just tighter. You continue pushing deep inside the goblin's pussy. Midway is where the magic happens: her vaginal walls begin to move, massaging your bulge even as you penetrate deeper. After thoroughly enjoying the goblin's snatch, you pull out and spray her with your thick cum. You add another mark on her ass before leaving and returning to camp. [[Back to camp|End day 2]]</tw-passagedata><tw-passagedata pid="112" name="Room 2" tags="" position="2725,2525" size="100,100">You enter the room with the muscular orc slave. She's held with thick chains, and even then she's still trying to break free. She's positioned away from the front foor, leaving you to enjoy the pleasing sight of her orc pussy and asshole. You hear noises from the outside. "Oh ... somebody's in the orc room. Looks like it's the newcomer." "Really? Man, we've gotta warn him. Lord Vivier should just switch her out already." There are knocks on the door. "Hey, kiddo. Careful with that brute there. Last time, uh ... she broke free and beat up some guy. The restrains are stronger now, but still be careful." "Thanks for the warning," you say. You decide to be quick. Dip in, dip out. Her pussy is full of cum, with thick pubic hairs covering it all. So you decide to use her backdoor instead. You force yourself through her narrow anus even as she struggles to break free. The greenskin's asshole was tight and fresh. "Still struggling, huh?" you say. Your hand swings, slapping her ass a few times as you pound her mercilessly. You put your hands firmly on the orc slave's asscheeks. "Aah, your ass is really tight, you know that?" you taunt. "It's a perfect fuckhole!" It seems that somehow the orc manages to discern your words, because she is rebelling even harder. You dump your load inside her ass before slapping her buttocks a few more times. You go home. [[Back to camp|End day 2]] </tw-passagedata><tw-passagedata pid="113" name="Talk to Natalie" tags="" position="2550,2225" size="100,100"><<if $MainQuest is 5>> "Heya, $name," Natalie says. "I've got some new information for you." "Hey. What is it?" "We've been asking the Church for an explanation, and the answer is ... not convincing. According to witnesses, the stone glowed purple when it touched you, correct? And High Priestess Selene said that purple means pure and red means corrupted." "I was attacked immediately, hell if I remember." "Well, this has been inconsistent. We found that some priests claim that red is pure and purple is corrupted. Some of the stones even glow other colors. The Church has claimed that this is due to a sabotage by the Mage's Guild, which is very fishy. Also, the stone itself is sourced from unknown sources." "No shit," you say, "sounds like someone's trying to deflect blame. The stones are probably just defective or something. That doesn't explain why the Priestess would say something so contradictive though." "Yeah ...," Natalie chuckles. "Get this: they're blaming the Mage's Guild for not only sabotaging the stones, but also spiking food and drinks, causing the priests to be confused." "... wow, that's a far-fetched story." "Indeed. I'll be investigating further. In fact, I'm waiting for a report tomorrow. Talk to me then." <<set $MainQuest to 6>> <<elseif $MainQuest is 6>> "Heya, $name," Natalie says, waving her hand at you. "Hey, Nat," you say. "Anything new?" "Yeah, there certainly is," she says. "[[Follow me]]." <<elseif $MainQuest is 7>> "Hey, $name," Natalie says. "Ready to infiltrate the rebel Church's camp?" [["Yeah."|Infiltrate Rebel Camp]] <<elseif $MainQuest is 8>> You head over to talk to Natalie ... [[The world shifts right in front of your eyes! A green light engulfs you ....]] <<elseif $MainQuest is 9>> You head over to talk to Natalie, who still looks a little shaken from her experience in the Incubus King's domain. Your camp is now a tertiary base for the League. "Oh, hi, $name," she greets you. "Heya. Anything coming up?" "Yeah. I don't know what to think about the Incubus King, but what I know is that there'll be a civil war soon. Dornburg is too poorly defended. We'll be needing allies. Try to contact as many nobles and other people willing to help. When you're done, come back to me." [[I'm ready|BoD 1]] <<elseif $MainQuest is 10 and $TeleportStone isnot true>> You head over to talk to Natalie, only to see a somewhat familiar presence. It's Yvette, agent of the Incubus King, and she is talking with Natalie. "Ah, $name. Good to meet you again," Yvette says courteously. "I'm here as an emissary of the Incubus King. I'll be residing not far from your camp, if you permit." "I suppose I have no issue with that. The Incubus King has been nothing but helpful to me." "Yes. And he has brought you a gift," Yvette says. She pulls out a stone. "This is a teleport stone." "Holy shit!" Natalie interjects. "How did you--what, this kind of thing--What magic is this?" "An unparallelled artifact in the magically primitive human realms, I'm sure. But every incubi and succubi have the power to do teleportation. The Incubus King himself created this stone specifically for you, $name," Yvette continues. "However, since you don't actually have the magic to use it, you'll have to set fixed locations for the stone. For now, I've fixed it to Selvil, which I heard is your domain now. Meet me there and we can discuss more about what the Incubus King expects from you." <<set $TeleportStone to true>> <<set $TeleportSelvil to true>> Yvette disappears in a smoke. <<elseif $MainQuest is 10 and $TeleportStone is true and $HaremUnlockedFirstTalk is true>> "Looks like you're done with your succubus," Natalie remarks. You smile faintly. "I suppose so," you say. "Is there anything you need from me?" "Yes, actually," Natalie says. "Your role has unexpectedly become important, thanks to your connections to the succubi. The Incubus King has just proposed an alliance." "An alliance between Walshemia and the Domain?" "Yeah. We've got small numbers of incubi, succubi, and humans from the Domain settling in major Walshemian cities. Acceptance has been mixed," Natalie answers. "We need this alliance. You saw yourself how strong this 'empyrean' enemy is. Our magic and technology are severely outmatched." Natalie lets out a long sigh. "Sorry, so what exactly is the issue here?" "If we enter this alliance now, we'll be a very junior partner. In the worst case, we could end up having to follow the Domain's policies at all time. That is what the King doesn't want. We need to strengthen ourselves as much as possible before we enter negotiations. And that is where you come in, $name." "Whelps, it's not the worst thing in the world, I suppose," you say. "What do I have to do?" "We need a few things. Come talk to me tomorrow and I'll bring you to our 'war room'. Today, you should rest." "Fine by me." <<set $MainQuest to 11>> <<elseif $MainQuest is 11>> Today, Natalie brings you to the 'war room'. It is a hidden base to the north of Dornburg. There, an array of nobles, generals, and other prominent persons are assembled, including the King himself. You are brought to the King in his room, lit with bright lamps and clad in expensive carpets. He is sitting down on his couch. "Ah, $name, and my Hand Natalie. Just the person I was looking for. Sit down there." "Your Majesty." He bends his figure forward. "I trust Natalie has told you of the circumstances." "She has." "So. What do you think?" he asks bluntly. "You are the closest person to an expert about this matter that we have. What sort of intentions do you think the Incubus King has?" You spend some time mulling over your answer. "I would say he does want this alliance," you say. "I do agree that, at this juncture, we are badly outclassed." You reveal everything you know to the King; especially regarding the so-called 'Great War'." His face grows grave. "Since you have divulged all you know, I have decided to trust you. It appears the rebellion by the Church was masterminded by a being calling itself 'the Serpent'. Everywhere in Walshemia, we're seeing a threefold increase of goblin raids, and strange beings have been spotted in a number of locations. We will need your help." You nod firmly. "There are a few things you need to do. First, we need the support of the Arcane Mages' Guild. Secondly, we need to resolve Church disputes regarding their next High Priestess. Thirdly, we need to consolidate the nobles. Finally, we need to ramp up our armies as much as possible. For the last reason, I hereby provide you formal permission to raise a permanent army. Natalie will brief you later." He hands you a formal letter. He's a very busy king, it appears, as a minute later, after exchanging goodbyes, he leaves. Natalie lets out a tired smile. "Let's go, $name," she says. "There are still much work to do. But today, I just want to sleep." "Agreed." <<set $MainQuest to 12>> <<elseif $MainQuest is 12>> "Natalie, can you remind me what I still need to do?" "Sure, $name." -''Build an army'' <<if $PrivateArmy isnot true>> [[Talk about building an army|Natalie Army Talk]] <<endif>> -''Negotiate with the Arcane Guild'' <<if ndef $ArcaneGuildQuest>> You have had dealings with the Arcane Guild in the past. Arcane magic has traditionally been scorned by the Kingdom, but now it will be an important asset for the Kingdom so as to stand on equal ground with the Domain. [[Visit the Arcane Guild|Arcane Guild Quest]] <<endif>> -Resolve Church disputes -Consolidate noble support <<else>> You and Natalie chat up for a while. <<endif>> [[Sleep and rest|End day 2]]</tw-passagedata><tw-passagedata pid="114" name="Twins Quest" tags="" position="1725,2075" size="100,100"><<if ndef $TwinsQuest>> "Oh, its nothing important," says Dahlia with a sparkle in her eyes that signifies that it's something really important. "It's about the twins." You tilt your head. "Ella and Emma? What about them?" "Well, I'd like to educate them. I have, actually, in some ways: they can read, just as I can since I learned from the previous King's program. But I notice they seem to have some talent in using herbs. Do you think there is a school or something where they can learn that?" "I don't know, but I can try finding one." "Thanks a lot, $name." <<set $TwinsQuest to 0>> <<elseif $TwinsQuest is 0>> You have been tasked to find a school for herbal healing by Dahlia. <<elseif $TwinsQuest is 1>> You give the good news to Dahlia and her children. "Yes!" Ella and Emma say, "thanks, $name." "Thank you so much, $name," Dahlia says; she looks like she's about to cry. "When you entered my house back in the village, I didn't expect things to go this far." <<set $TwinsQuest to 2>> <<endif>> [[Return to camp|New Camp]]</tw-passagedata><tw-passagedata pid="115" name="Toft" tags="" position="2150,2775" size="100,100"><<if $TwinsQuest is 0>> <<if $DornburgRep lt 450 and $premiumpass is true>> You go around trying to find a school for folk healing. You avoid the Church-sponsored ones for obvious reasons and manage to find Toft's Folk Healing School, run by someone called Mr Toft. Unfortunately, the spokesperson charges you some arbitrarily high fee for the school. You're beginning to think it's a soft way to tell you to go away .... As you turn around, your premium pass to the Fragrant Rose Club shows. "Wait!" the spokesperson calls back. His attitude shiftes 180 degrees. He agrees to admit Ella and Emma to the school. School hours would be in the morning, at 5 in the morning to 8 in the morning. There would be a fee of 120 coins, which is to be paid later. You agree to the terms. <<set $TwinsQuest to 1>> <<elseif $DornburgRep lt 450>> You go around trying to find a school for folk healing. You avoid the Church-sponsored ones for obvious reasons and manage to find Toft's Folk Healing School, run by someone called Mr Toft. Unfortunately, the spokesperson charges you some arbitrarily high fee for the school. You're beginning to think it's a soft way to tell you to go away .... <<elseif $DornburgRep gte 450>> You go around trying to find a school for folk healing. You avoid the Church-sponsored ones for obvious reasons and manage to find Toft's Folk Healing School, run by someone called Mr Toft. The spokesperson agrees to admit Ella and Emma to the school. There would be a fee of 120 coins, which is to be paid later. School hours would be in the morning, at 5 in the morning to 8 in the morning. You agree to the terms. <<set $TwinsQuest to 1>> <<endif>> <<else>> You visit the school and chat with a few of the teaching staff before excusing yourself. <<endif>> <<if $DahliaFamilyQuest is 1>> <<if $player.coins gte 1000>> [[Pay the fee with coins|Dahlia Family Quest 2][$DahliaFamilyQuest to 2;$player.coins to $player.coins - 1000]] <<endif>> <<if $earthcore gte 5>> [[Pay the fee with woodcore stones|Dahlia Family Quest 2][$DahliaFamilyQuest to 2;$earthcore to $earthcore - 5]] <<endif>> <<elseif $DahliaFamilyQuest is 2>> [[Follow Ella and Emma|Dahlia Family Quest 3][$AngrisaGroveScore to 0;$DahliaFamilyQuest to 3]] ''Warning: be prepared! This is a fairly difficult quest with possible long-reaching consequences. It's recommended to make a save before this quest.'' <<endif>> [[Back to the camp and rest|End day 2]]</tw-passagedata><tw-passagedata pid="116" name="Investigation Quest 1" tags="" position="2350,1700" size="100,100">You begin your investigation by examining the crime scene. Again, there are no signs of a break-in. [[Interrogate Dahlia]] [[Interrogate Natalie]] <<if $Natalieclue is true and $Dahliaclue is true>> From clues provided by Natalie and Dahlia, you conclude that Dahlia's children, Emma and Ella, are probably responsible for the theft. The evidence you have is very circumstancial, though. You should probably confront them. <<set $TwinsQuest to 5>> <<endif>> [[Back|Quests]]</tw-passagedata><tw-passagedata pid="117" name="Interrogate Dahlia" tags="" position="2525,1525" size="100,100">Immediately after you ask Dahlia, she goes a little pale. "Well ... I don't know anything about that," she says. "Really?" "Yeah." "... really?" Dahlia sighs. "Well--fine. There is something strange that I've seen," she says after a lot of hesitation. "It's Ella and Emma--they seem to have a lot of expensive things recently. Jewelries, clothes--it's just a bit weird, you know. They say they get paid for apprentice work, but I don't think it should be that much." "So, you're saying they're stealing the coins." "I'm not saying that. But if anyone is, it's them. Probably." <<set $Dahliaclue to true>> [[Continue Investigating|Investigation Quest 1]]</tw-passagedata><tw-passagedata pid="118" name="Interrogate Natalie" tags="" position="2400,1425" size="100,100">You interrogate Natalie. "... seriously?" she sighs. "So you think I, an agent of the King, who holds the thorned rose, who can request financial support from the King himself ... am stealing a measly few hundred, if even that, coins?" You grind your teeth a little, but you have to admit the logic's sound. "I'm not accusing you, I'm just asking if you see anything suspicious." "Hmm." Natalie seems to be thinking for a while. "I've got no idea. But I can guarantee absolutely nobody enters the camp that night." "I see. Thanks for the help." That does make things a bit complicated. You trust your camp inhabitants quite a lot; just who could possibly be stealing? [[Continue Investigating|Investigation Quest 1]] <<set $Natalieclue to true>></tw-passagedata><tw-passagedata pid="119" name="Confront the twins" tags="" position="2600,1725" size="100,100">One evening, you head to the twins' room to confront them over the alleged theft. However, you're surprised to find it empty. "Help! $name! Thieves!" Dahlia shouts from the treasury. You rush back to the main camp. Dahlia courageously guards your treasury with a ladle and pot against a pair of masked thieves armed with knives. You hurl your body weight at one of the pretty thin thieves, sending them crashing down. You extend your hand to rip off their mask. It's Ella--or Emma, you can't really tell; her sharp jaw, long nose, hazel eyes, and ash-blonde hair tell you. She takes advantage of your temporary stun, taking her knife and nearly stabbing your cheek! You only manage to barely dodge, the sharp knife grazing your cheek. "Ella! Take the coins, we'll run away!" she shouts to her twin. Ella's path is blocked by her mother. "Stop this, Ella! I'm your mother. I don't know what your problem is, but--" Ella shoves her mother out of the way, but you're just quick enough to draw your blackstone dagger and stand before the murderous twins and Dahlia (and your treasury chest). "Shit!" Ella curses. "Come on, there are two of us and one of him!" Emma goads. "Two inexperienced, unskilled, untrained youngsters with kitchen knives? I think I can handle you," you intimidate them, even though you aren't THAT much older than them. "Lay down the knives." Instead, they decide to run away. "Dahlia, Dahlia, are you alright?" you ask as you help her stand. "Don't mind me, $name, you've got to find them!" You give chase outside, but they're already gone ..... Well fuck, looks like it's time for another investigation. You're too tired for this now. <<set $TwinsQuest to 6>> [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="120" name="Search for the twins" tags="" position="2700,1925" size="100,100">You go around searching for Ella and Emma. Your first destination is Toft's school. "Are Emma and Ella here?" "Uhm ... no." The spokesperson is clearly nervous. His eyes wander around while he fiddles with his thumb. "Something tells me you're lying." "Come inside," he whispers. You do as he asks. "You don't hear it from me," he says. "But Miss Ella and Miss Emma were captured by loan sharks just now ... they were seeking shelter here ...." "I see, so you just let in strangers barge in and kidnap your students?" you ask icily. The spokesperson raises his arms defensively. "They had swords and daggers! If I had fought, I'd be dead meat right now! Anyways, Miss Ella and Miss Emma are likely brought to the arena ... that open-secret, 'underground' arena. Now, please leave." "No, no, I'm not done. You said 'loan sharks'? I don't know about this." "Well ... what can I say? Miss Ella and Miss Emma are the poor--ehm, the--eh--least well-dressed compared to the noblemen we have here. I suppose they begin to feel a little insecure, and take out loans to buy expensive things." Well, fuck. You make a mental note to visit the arena tomorrow. <<set $TwinsQuest to 7>> [[Rest in your camp|End day 2]] </tw-passagedata><tw-passagedata pid="121" name="Arena" tags="" position="1275,3550" size="100,100"><<if ndef $ArenaRep>> You visit the local underground arena and are greeted by a masked woman. "I don't want your name. Visiting, or fighting?" she asks. "Eeh ... both?" ... "You're new around here, aren't you?" "I suppose so." "Fight's to the death. Reward depends on who you're fighting. You look good enough, you wanna sign up?" "Uh, what if I don't want to." "Then pay 50 coins to watch. Or scram." You consider fighting--you sure as hell are not paying coins to watch people beat up each other. [[Fight in the arena]] [[Back to your camp|New Camp]] <<else>> The woman recognizes your face and nods slightly as she lets you in. [[Fight in the arena]] [[Back to your camp|New Camp]] <<endif>> <<if ndef $ArenaRep>> <<set $ArenaRep to 0>> <<endif>></tw-passagedata><tw-passagedata pid="122" name="Fight in the arena" tags="" position="1150,3700" size="100,100">You decide to fight. Looking at the rewards, you think clearing bounties from Dornburg would be far more profitable. After all, most of the gladiators are just glorified peasants or low-level soldiers. But you do notice a number of nobles and high persons around. <<if ndef $LadyAlicemet>> You are approached by a haughty noble lady and her manservant. The noble lady does not speak at all. The manservant with hunched back says, "this is Viscountess Alice of Brandenburg. She wishes to sponsor you." You agree to be sponsored: Lady Alice expects good shows from you and in exchange she'll give you rewards. The manservant provides you a few iron plates to add to your armor, strengthening it. You should be able to take more hits now. <<set $player.HP to $player.HP + 30>> <<set $player.maxHP to $player.maxHP + 30>> You are also provided House Brandenburg's sigil--a black rose--to wear on a patch on your shoulder, at least during arena fights. <<set $LadyAlicemet to true>> <<elseif $LadyAlicemet is true>> You pay a visit to your eternally unspeaking patron before heading to the arena. <<endif>> <<nobr>> <<if $ArenaRep gte 75 and $TwinsQuest is 7>> There seems to be a big commotion in one of the gladiatorial cells. You have enough prestige to be allowed entry. [[Check it out]] <<elseif $ArenaRep lt 75 and $TwinsQuest is 7>> There seems to be a big commotion in one of the gladiatorial cells. But a nobody like you can't hope to be allowed entry. Maybe you should build up your reputation here. <<endif>> <</nobr>> <<if $ArenaRep gte 50>> Apparently, there are a number of elite champions in this arena. Lady Alice Brandenburg would definitely enjoy the bloodshed from fighting them. [[Check Champions]] <<endif>> If nothing else, you can also sign up for a regular fight. [[Fight a gladiator]] [[Back to the camp and rest|End day 2]]</tw-passagedata><tw-passagedata pid="123" name="Fight a gladiator" tags="" position="1000,3800" size="100,100"><<nobr>> <<set _temphp to random(200,220)>> <<set _tempattack to random(30,35)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "gladiator", maxHP: _temphp, HP: _temphp, maxMP: 20, MP: 20, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The gladiator prepares himself. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a gladiator, armed with a pike. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="124" name="Check it out" tags="" position="1150,3825" size="100,100">You see a chained troll in one of the gladiatorial prisons. Lady Alice and her manservant walk up to you. "Interested, young sir?" the manservant asks. "The troll's--ehem--manager is offering to arrange fights between gladiators and the troll. So far, a dozen have tried. All have died." A slight shudder runs up your shoulder. "What's the reward?" The manservant shows you a cell not too far from the troll's cell. It's Emma and Ella! "These young virgin lasses," the manservant claims. "Or coins equivalent to their worth." Ella and Emma wear only a pair of shabby panties, leaving their medium-sized breasts exposed. They seem too traumatized to even speak, until Emma whispers in a very, very low voice: "please help us, $name." You tsk-ed. Of all the things in the world, a troll? A rare gargantuan creature, rumored to be created by empyrean forces to serve as their elite soldiers? You sigh and turn to the manservant. [[I'm ready to face the troll]] [[Not yet|Fight in the arena]]</tw-passagedata><tw-passagedata pid="125" name="I'm ready to face the troll" tags="" position="1125,3950" size="100,100"><<nobr>> <<set $enemy = { name: "troll", maxHP: 600, HP: 600, maxMP: 20, MP: 20, attack: 180, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You're facing a troll in the gladiatoral arena. This stinky, hulking beast doesn't seem to regard you as a threat at all. <<set $trolltimer to 0>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a troll! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="126" name="A hard approach" tags="" position="725,3725" size="100,100">"Hey, both of you, take off your panties," you order. "Stand up, spread your legs, hands behind your head." "W-what?" Ella protests weakly. You raise your eyebrows. "Are you deaf?" The two silently follow your orders, unwilling as they may be, showing the audience their young bodies in all their glory. You lick your fingers. You explore their bodies carefully, first massaging their nipples. "Please ... $name ... stop this," Emma pleads. "Why should I?" you ask with a smirk. Your fingers dig deep inside their virgin anal holes. "Nngh ..." The twins are struggling to keep their voice in. Surprisingly, they ejaculate! Their bodies shudder, their juices flowing out of their crotch. They both have to kneel down to control themselves. "Oh? Looks like our sluts here love being watched?" you tease. "No!" Ella protests. Emma in particular blushes red. "Yes," she whimpers. You whip out your cock and roughly grab Emma's hair. "Open your mouth, slut." Emma obeys. This young girl, who probably never even saw a naked man before this day, makes a gurgling sound as you shove your cock up her throat. She adapts quickly enough, however, and a few seconds later she is actively licking your glans. You continue deepthroating her until Ella grabs your arm. "Stop it!" she cries out. "I will if you take her place." Reluctantly, Ella opens her mouth. You pull out of Emma's mouth and switches to Ella's. Compared to Emma, Ella is definitely more passive. She just kneels there while you use her mouth like a fuckhole. You feel the urge to cum overtake you. You pull out before white sperm sprays from the tip of your cock, drenching their faces. You hastily take them both and leave the arena. Lady Alice's manservant gives you some old rags to clean and cover the twins. They must be exhausted, because they fall asleep quickly. Dahlia's questions must wait tomorrow. <<set $TwinsQuest to 8>> <<set $TwinsStatus to "slave">> [[Rest|End day 2]] </tw-passagedata><tw-passagedata pid="127" name="a softer approach" tags="" position="850,3775" size="100,100">"Hey, both of you, take off your panties," you order. "Stand up, spread your legs, hands behind your head." "W-what?" Ella protests weakly. You raise your eyebrows. "Are you deaf?" The two silently follow your orders, unwilling as they may be, showing the audience their young bodies in all their glory. You lick your fingers. You explore their bodies carefully, first massaging their nipples. "Please ... $name ... stop this," Emma pleads. "Why should I?" you ask with a smirk. You explore their labia with your fingers. "Nngh ..." The twins are struggling to keep their voice in. Surprisingly, they ejaculate! Their bodies shudder, their juices flowing out of their crotch. They both have to kneel down to control themselves. "Oh? Looks like our sluts here love being watched?" you tease. "No!" Ella protests. Emma in particular blushes red. "Yes," she whimpers. You whip out your cock. Emma seems to understand what you mean. She takes hold of your cock and begin licking it. Ella soon joins her twin, albeit reluctantly. Two short tongues, working in tandem, envelops your shaft. Their technique is non-existent, but even their sloppy work feels good enough. You feel the urge to cum overtake you. You grab their heads as carefully as possible and pull them back a little before white sperm sprays from the tip of your cock, drenching their faces. You hastily take them both and leave the arena. Lady Alice's manservant gives you some old rags to clean and cover the twins. They must be exhausted, because they fall asleep quickly. Dahlia's questions must wait tomorrow. <<set $TwinsQuest to 8>> [[Rest|End day 2]] </tw-passagedata><tw-passagedata pid="128" name="You'll need to have a long talk with Dahlia and the twins" tags="" position="2675,2050" size="100,100">You sit down with Dahlia in her tent and explain everything that you've learned. Dahlia's face goes pale, then red with anger. "I don't know what they're thinking ...." "Maybe we should have them explain themselves." Dahlia summons her children. "$player.name has been sheltering and helping us for months now," Dahlia begins with an icy tone. "And this is how you act? Tell me what happened. Why did you steal?" It's Emma who speaks first. "It begins when we saw other students wearing fancy clothes and jewelry." "Of course they do, they're nobles!" Dahlia roars. You pat her in the back softly to calm her down. Ella and Emma look like they're shrinking. "A loan shark offered us a loan and we took it. When we realized we'd never be able to pay it back, we became desperate ... that is it. We're sorry," Emma continues. "Go to your room, and take out everything you bought," Dahlia orders. The twins obey. A small pile of things are put in Dahlia's tent. "And take off your clothes," Dahlia barks. "Clothes and jewels have you forgotten our circumstances. Take. It. Off." "M-mom, there's a man here ...." Dhalia's stern gaze silences protests as the twins strip off everything. "From now on, so long as you're in this camp, you'll dress like that," she says. "B-but, Mom! $player.name--" Ella meekly complains about you mouth-raping the twins. Dahlia turns to you with an unreadable expression. "I think I've found the perfect punishment, don't you think, $player.name? You seem to take a liking to their bodies. What about it--should you make them your personal servants as well?" [[With pleasure|Twins Virginity][$Twinsfucked to true]] [[This has gone too far|Twins Virginity][$Twinsfucked to false]] <<set $TwinsQuest to 9>> </tw-passagedata><tw-passagedata pid="129" name="Twins Virginity" tags="" position="2725,2200" size="100,100"><<if $Twinsfucked is false>> You end the conflict right there and then. Relations between you and the twins warm up significantly, since they are thankful of you forgiving them. You won't be able to initiate anything sexual anymore, but you can still enjoy their nude, nubile bodies on display. <<elseif $Twinsfucked is true>> "Oh, of course. I'll gladly take their virginities." The twins look like they've accepted their punishment. You remember them cumming so easily when in public in the arena. Do the twins like exhibitionism? You decide to try out this theory by bringing the twins to Dornburg--more specifically, one of the alleys. At night. You push Emma against the alley wall. "Get your ass out," you say firmly. "Yes, Sir," Emma says. "Hey! Since when do you call $name 'Sir'?" Ella protests. You ignore Ella and solemnly take Emma's virginity, the head of your bulging cock breaching her vaginal opening. "Ah!" Emma moans quietly. "I never thought--" "That you'll lose your virginity in an alley?" you whisper. Those words make Emma's pussy tighten. "Someone could come in anytime ...." "Please don't remind me of that!" Emma cries out as she orgasms, her body shuddering greatly. You pull out. There's another slut to discipline. "Both of you like this, don't you?" you tease. "You like being watched--or the risk of it." Emma blushes. You order Ella to take the same position as her twin. You strongly grip her appetizing buttocks and begin fucking her virgin pussy. Just like her twin, she quickly orgasms. You increase your pace, grinding against Ella's vaginal walls. Ella's moans grow uncontrollable. Your naughty fingers find themselves on Emma's labia, stimulating her pussy. "Ah ... $name, more, faster!" Ella begs as her juices wet her thighs. "You've given in, huh?" you ask with a grin. "You know how to beg properly, slut." "Please fuck me more, Sir!" Ella begs. You sense your own orgasm coming. You pull out and order the twins to get on their knees before spraying your sperm all over their faces. "You love this, don't you?" you tease. "It shames me, but yes, Sir," Ella says meekly. "Sir, my snatch is still so wet, can you fuck me again?" Emma asks. You smirk. "How much do you want it, slut? How much do you want to orgasm again?" "I'll be your depraved slut, Sir!" Emma says enthusiastically. "I'll serve you however you want, just make me cum again!" "Me too!" Ella joins. "Later, then," you say. "For now, back to the camp." The three of you return to the camp. <<endif>> [[Back to camp and rest|End day 2]]</tw-passagedata><tw-passagedata pid="130" name="Twins' Sex Service" tags="" position="600,2550" size="100,100">You ponder what you should do to the twins. Certainly, you can [[engage in some exhibitionist sex with the two of them|Twins Threesome]]. "Sir, one of our friends was just talking about ass-to-mouth. [[Maybe we can try that|Twins Ass-to-Mouth]]?" Emma suggests with a lewd smile. "Sir, if you're not too much of a hurry, maybe Emma and I should take a piss first." The twins are forced to urinate outdoors in the middle of the camp as a punishment; [[watching them|Twins Piss]] can be fun in its own way. There's another alternative you think of: [[invite Dahlia|Twins Foursome]] and let this perverted family have fun with you. <<nobr>> <<if $TwinsStatus is "slave">> You can also [[prostitute these little sluts|Twins Whore]]. They're submissive enough to follow such an order. <<elseif $TwinsStatus is "servant">> Perhaps you can stay away from this and [[let them have their own fun|Twins Lesbian]] with a large cucumber you just happen to bring from the kitchen. <<endif>> <</nobr>></tw-passagedata><tw-passagedata pid="131" name="Twins Threesome" tags="" position="575,2700" size="100,100">You take the twins to a deserted alley in Dornburg. While Ella guards, you lift Emma's legs. The thrill of exhibitionism is enough to make her snatch wet, even without any foreplay. "Mmm, Sir!" Emma moans as you penetrate her with your cock. "Ah!" "You love this, don't you, Emma?" you tease. Her lack of experience shows, though. Emma can't really do much except stand there like a moaning statue. "I keep on coming!" Emma giddily moans, "more, Sir, more!" "Hey, keep it down a bit," Ella grumbles. "Let's give your sister a chance, Emma," you say as you pull out. "Aw, I wanted more ...." Emma reluctantly guards. Ella bent down and spread her buttocks herself, offering her tight pussy that you delightfully savor with your cock. Emma turns around and spreads her legs, her fingers flicking her own bean. Their suppressed moans fill the alley. Ella's breath becomes short as she climaxes again and again. You pull out. "Stand side-by-side," you whisper. They follow your orders, exposing their nubile bodies to shots of semen. "Hey, what's that!" you hear a voice shout. You grab the giggling twins and make your way back to your camp to rest. [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="132" name="Twins Ass-to-Mouth" tags="" position="725,2675" size="100,100">"Yay!" Emma seems happy that you accept her suggestion. The twins lay down on some hay that you stack just outside the camp, revealing their tight assholes. "Me first!" Emma demands. You spit on Emma's asshole before spreading the makeshift lube, making it wet enough for penetration. Emma closes her eyes as you begin fucking her ass in the open. "Ah! Aw!" Emma groans in pleasure and pain. Stretching Emma's asshole proves a fun experience. "How does it feel, Emma?" Ella asks. "It feels like ... well, how do you think having Sir's big cock up your ass feels like?" Emma snaps. "Ooh, please train my asshole into a second pussy, Sir!" Emma's tight asshole quickly works your cock to climax, and you fill her asshole with white sperm. You pull out after you're satisfied, immediately shifting to Ella's mouth. She isn't prepared, but after a few seconds she cleans your sperm and ass-scented cock with her tongue. Sufficiently wet, you penetrate Ella's anus. "Ooh!" Ella lets out a long moan as you explore her anus. Both Ella and Emma had little if any experience with anal sex, so their assholes are similarly tight, anal walls hugging your cock and refusing to let go. "Please, come inside me as well!" You do as Ella asks. White sperm filled up her backdoor. Emma is more than ready; just as you pull out, she licks your cock and takes it all up her throat. "Thanks for the treat, Sir," she giggles. You and the twins return to the camp to rest. [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="133" name="Twins Piss" tags="" position="350,2800" size="100,100">You follow the twins outside to watch them urinate. They blush all the way there. Two pisspots have been made available. "Sir, you really want to watch us piss?" Emma asks. "That's what I've come here for, no?" Ella's turn comes first. She lowers herself, spreading her legs. Golden-yellow piss shoots out from her vagina. "Mm ...." Ella's body shudders just a little. "Hehe, do you like being watched even while pissing, Sis?" Emma asked. "Ugh, I don't want to hear that from you," Ella complains. "Now hand me over that rag." Emma smirks and hands over the rag, with which Ella cleans her snatch. Emma falls down to all fours on the ground and begins moving such that her ass is directly above the pisspot. A clear liquid drips from Emma's vagina before the drip turns into a steady stream. After she finishes, she too wipes her snatch with the rag. You look with delight at how shameless the twins have become. [[Back to the camp|End day 2]]</tw-passagedata><tw-passagedata pid="134" name="Twins Whore" tags="" position="525,2850" size="100,100">You bring the twins to a seedy whorehouse in Dornburg's less well-off districts. "Oh, Sir is whoring us out ...," Emma says, a little disappointed. "Sir, can't you just fuck us as usual?" Ella asks as you make arrangements with the brothel owner. "Of course not, you stupid sluts. My cock is a reward," you say. "Now be good whores and maybe I'll fuck your tight cunts tomorrow." At the prospect of that, the twins light up. You watch with a free ale on your hand as the twins are stripped of their clothing. They are made to kneel in a dirty room as six men surrounds them, slapping their cheeks with cocks. The twins obey, using their mouths and tongues to please the men. They spread their legs shamelessly as the men begins fucking their tender pussies. The depraved twins seem to enjoy it quite well. The men become impatient quite soon, and the twins are spitroasted. Their breasts and buttocks are groped left, right, and center. As the men satisfy themselves with the twins' bodies, another group of men arrive after some time. By the end of the day, the twins have served more than thirty men. "Are we good sluts, Sir?" Emma asks as you bring them home. "Will you reward us with your cock tomorrow?" "Sure," you say with a smirk. Coins from the brothel make a cling-clang noise in your pocket. <<set $player.coins to $player.coins + 25>> [[Rest|End day 2]] </tw-passagedata><tw-passagedata pid="135" name="Twins Lesbian" tags="" position="600,2975" size="100,100">You throw them the cucumber and tell them to put up a good show. "A good show, Sir?" Emma confirms. "Well, follow us." What you don't expect is that they head over to Dornburg, naked underneath a coat. They head to a busy trading market. The cucumber is lodged firmly inside Emma's pussy as the two look at goods. You've got to admit that you're quite surprised she had the muscles in her pussy to keep such a large cucumber in for so long. The three of you then head over to the arena to watch a few matches. Emma hands over the wet, slimy cucumber to Ella, who opens her legs in the arena seat and masturbates with the cucumber. The sound of it grinding against her pussy walls is loud, but not loud enough to alert nearby people. Emma doesn't stay quiet. She realizes that you're quite bored, so her hand slips into your trousers. Her soft hand pumps your shaft with all the speed she can muster without others knowing. Unfortunately, her efforts aren't quite enough to make you cum. When the three of you leave the arena, a puddle of juices are left behind. "Shame for the person who'll sit their next," you remark. "Having to sit on a slut's juices." Ella giggles when she hears that. The twins still have one last performance to show you back in their tent. With both of them at all fours, they use the cucumber as a double-headed toy. Their movement isn't quite graceful, but rather wild and energetic, with a chorus of moans accompanying it. "Ah!" the twins half-shout together as they both ejaculated. They tumble unto the ground. "Mm, how is that for a performance, Sir?" Emma asks. "Splendid." [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="136" name="Twins Foursome" tags="" position="400,2650" size="100,100">You head to Dahlia's tent with the twins not too far behind. You find her resting in her tent. "Hi, $name," she greets you with a smile. "Anything I can help you with?" "Oh, certainly," you say. "Why don't we start with tossing your clothes out?" Dahlia smirks and does so, revealing her body to you. "But this time, I've brought company." The twins enter, prompting Dahlia to cover her body. "Oh dear, oh dear," Dahlia mutters, grasping your intention. "Why don't you teach your daughter how to please a cock properly, Dahlia?" you tease as you make your way to Dahlia's bed. "Well ... I'll try," she says. Then, with a stronger, more authoritative voice, she goes "come here, you two!" Dahlia begins licking your shaft. The twins, too, get to bed. Dahlia moves to put herself above your cock, and she begins riding you. "$name is often tired from his work," Dahlia says. "So sometimes, you should take the initiative like this. Now both of you shouldn't stay idle." Emma glomps unto you, heating up your body with her naked flesh. Ella submissively licks your nipples while Dahlia continues riding your cock, her loose pussy massaging your bulge. "Line up next to Dahlia and stick your asses out," you order. The twins follow your order. Your open hands slap their appetizing buttocks a few times before fingering their young pussies. "Nngh, $name ... are my daughters serving you well?" Dahlia asks while moaning. "They certainly are," you say. You feel your ejaculation coming. You shoot out your cum in Dahlia's infertile womb and watch and it drips out of Dahlia's pussy. The twins, after ejaculating themselves, cleaned their mother's cunt with their tongues. The four of you sleep in Dahlia's bed. [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="137" name="Check Champions" tags="" position="1300,3825" size="100,100"><<nobr>> <<if $ArenaRep gte 50 and $GurgKilled isnot true>> One of the four champions is Gurg, a relatively small-sized troll. By small size they mean 2,5 metres with strength enough to crump you to dust. [[Challenge Gurg]] <<elseif $ArenaRep gte 150 and $EliseKilled isnot true>> The second of the champions is an elf warrior named Elise; quite a rare sight, as elves tend to be isolationist. Rumors have it that she's a serial killer banished from the elven realms. Even the weakest elf possesses formidable magic, so you ought to be careful. [[Challenge Elise]] <<elseif $ArenaRep gte 250 and $IncubusKilled isnot true>> The third champion is an incubus; an extremely rare being, often associated with demons. The incubus is a master of sexual magic, and can bring you down to submission with pure lust, swordsmanship, or powerful magic; beware! [[Challenge the Incubus]] <<elseif $ArenaRep gte 350 and $ThalestrisKilled isnot true>> The fourth and final champion is an "amazon"--a female warrior of Southern origins, named Thalestris. Just as you contemplate challenging this undoubtedly formidable foe, Lady Alice and her manservant approach you. "This woman has once offended Viscountess Alice von Brandenburg by refusing her offer of sponsorship," the manservant informs you. "If you triumph over her, the Viscountess would be most pleased." Also, unlike the other competitors, Thalestris has offered her body in lieu of her life. Which means, if you manage to beat her, you can look forward to some amazon pussy .... [[Challenge Thalestris]] <<else>> You have triumphed over all four champions of the arena! <<endif>> <</nobr>> [[Back to the arena|Fight in the arena]]</tw-passagedata><tw-passagedata pid="138" name="Challenge Gurg" tags="" position="1400,3700" size="100,100"><<nobr>> <<set $enemy = { name: "Gurg", maxHP: 400, HP: 400, maxMP: 20, MP: 20, attack: 120, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You're facing Gurg, a champion of the gladiatoral arena. This stinky, hulking beast doesn't seem to regard you as a threat at all. <<set $Gurgtimer to 0>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting Gurg! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="139" name="Follow me" tags="" position="2850,2075" size="100,100">Natalie leads you to the northern woods. "Where are we going?" "A number of dissidents in the Church of the Light-King contacted me," she says. "We'll be meeting in their hideout." The two of you head over to the hideout, a small abandoned hut. You enter and are greeted by a hooded man. You are brought through a series of spiraling stairs until you finally reach a meeting room with an old priest in there. "Hello there," the old priest says. You scan the room, looking for anyone that you might know. <<nobr>> <<if $class is "Knight">> You see your own father, Imperial Knight Hans! This old knight still has the physique of a young man. He smiles warmly at you while trifling with his mustache. <<elseif $class is "Novice">> You see your leader, Archmage Terry! The thin man lets out a small smile. <<elseif $class is "Priest">> You see Father Domek, your savior from imprisonment! This fat, jolly priest waves at you. <<else>> Unfortunately, all the faces are strangers. <<endif>> <</nobr>> "I'm Father Arcurus. This is Father Domek, representing the 'rebel' church with me, Archmage Terry, representing the Mage's Guild, and Sir Hans, representing the various allied nobles. We're gathered here due to the increasingly, frankly, unhinged behaviour of the Church of the Light-King." Natalie nods. "I'm Natalie, Hand of the King. This is $name, my ... apprentice." The two of you sit down. "So, Father Arcurus, what have you found out so far?" "What we have known is that an extremist sect of the Church is planning to rebel. I say extremist, but they actually comprise the overwhelming majority of Church leadership, including High Priestess Selene. They've spread into numerous tiny cells across the kingdom, but theri intentions are unknown." Archmage Terry snorts. "Then, what are we waiting for? Let's hang them all with one blow." "A pre-emptive attack against the Church? That'll net us too many enemies." "The King won't allow it," Natalie says decisively. "What we can do is infiltrate one of their biggest camps. It's in my cousin's territory, so I have full right to try and enter," Sir Hans says. "They'll likely refuse, though," Father Domek points out. "They've put up a detection system." He wears some leather gloves and pulls out a rough-edged stone. "Ugh, this thing reeks of dark magic," Archmage Terry complains. "Anyone who can't touch this stone without being hurt is immediately revealed as an interloper," Father Domek sighs. The stone looks heavy, and Father Domek's grip slips. The stone touches your arm, but you feel nothing. "Oh, sorry ...," he says. "Does it hurt?" "Uh, no." "Must be due to the incident in the Capital long ago!" Archmage Terry declares. "$name has been 'infected', so to say, with the same kind of dark magic. He can pass without being detected!" "The malevolence spirit," you think to yourself, recalling what the Incubus King told you. "It's agreed, then, that we'll try to infiltrate the camp and find out what they're trying to do?" Natalie asks, answered with silent nods. The meeting is adjourned. <<set $MainQuest to 7>> [[You return to the camp to rest|End day 2]]</tw-passagedata><tw-passagedata pid="140" name="Challenge Elise" tags="" position="1475,3825" size="100,100"><<nobr>> <<set $enemy = { name: "Elise", maxHP: 300, HP: 300, maxMP: 20, MP: 20, attack: 70, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You're facing Elise, a champion of the gladiatoral arena. The slender elf laughs at you. "Meat for the slaughter!" she proudly declares. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting Elise! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="141" name="Challenge the Incubus" tags="" position="1450,3950" size="100,100"><<nobr>> <<set $enemy = { name: "Incubus", maxHP: 250, HP: 250, maxMP: 0, MP: 0, attack: 20, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You're facing an incubus, a champion of the gladiatoral arena. The being, covered in glamour and a pair of underwear, smiles at you. "Go easy on me, would ya?" Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting an incubus! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="142" name="Challenge Thalestris" tags="" position="1600,3925" size="100,100"><<nobr>> <<set $enemy = { name: "Thalestris", maxHP: 500, HP: 500, maxMP: 0, MP: 0, attack: 70, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You're facing Thalestris, a champion of the gladiatoral arena. She's a redhead, dark-skinned tomboy, fighting stark naked and displaying her bushy vagina and firm breasts to the arena. "You really think you can win, kiddo?" she scoffs. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting Thalestris! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="143" name="You begin taking off your trousers" tags="" position="875,3950" size="100,100">Your patron, Lady Alice von Brandenburg, looks with delight as you 'help' Thalestris up. "I can't believe you're that strong," she whispers with a small smile. "Well then, impregnate me." For sure, you have all the intention to do so. You lift the amazon's muscular leg up, revealing her slit. Your cock slipped inside easily enough. At that moment, you feel some sort of energy entering you. You are driven to a lust you've never felt before--you glance at a hooded figure; it's the incubus Leslie, and he smiles at you. You vigorously thrusted up Thalestris' exposed pussy. "Give me a moment ...," she whispers. Another burst of strange magic later, you can feel her womb lowered. "Now, it should be easy to impregnate me." As the two of you continue mating like wild beasts in the arena field, the crowd continues to cheer. Even the silent Viscountess Alice von Brandenburg claps lightly. "Why do you want to be impregnated so bad?" you whisper as Thalestris' slimy, tight pussy adapts to your cock. You fondle her firm tits freely. "For an amazon, there is only one path," Thalestris whispers. "To be a warrior. I ... made a mistake once, when I was a warrior. I tried allying with the dark." Thalestris begins matching your movement, pushing her pussy down on your cock. "This is my penance. I must bear a strong child from a strong father. To be impregnated ... to be a mother ... this is pure humiliation for an amazon." You mentally note that you know a few physically strong men who have weak children, and vice versa. Nevertheless, you're not in the mood to argue--you're in the mood to savor this forbidden pussy. "Fine then," you say. "If you want my sperm so much ... take it all!" You ejaculate, spraying Thalestris' womb with your 'strong' sperm. "Ah, thank you, stranger," she says as she limps to the ground. "Perhaps we shall meet once more." As you leave the arena, Lady Alice's manservant approaches you and requests that you meet her in her manor soon. <<set $AliceQuestComplete to true>> [[Return to your camp and rest|End day 2]]</tw-passagedata><tw-passagedata pid="144" name="Alice's manor" tags="" position="2525,2950" size="100,100">You visit Viscountess Alice's manor. It is opulent and vast. The manservant lets you in and guides you to the guestroom. "Where is Viscountess Alice?" you ask the manservant. Your question is answered when the viscountess enters the room. <<if $Alicemeeting isnot true>> However the viscountess communicates, you don't know--perhaps with the subtle movements of her fingers. Her manservant understands it perfectly, however. "The viscountess wishes to have tea with you." <<if $class isnot "Knight">>You feel a little awkward in this sort of setting. <<endif>> "The viscountess is glad to see your triumphs in the arena," her manservant states. He looks at his mistress, clears his throat slightly, and continues, "she calls you her stud. I do not profess to knowing the meaning of that word." The viscountess' lips widen just slightly. "The viscountess says you can come to her if you need help. Also, the viscountess gifts you a bond." You aren't sure about this whole financial bond stuff, but from your understanding, you'll receive 10 coins and 1 supply every day, risk-free. You finish your tea and thank the viscountess before leaving. [[Rest in camp|End day 2]] <<set $Alicemeeting to true>> <<set $Alicebond to true>> <<elseif $MainQuest is 9>> You appeal to the viscountess for aid. "The viscountess says she's uncomfortable with you utilizing her resources directly, but she promises to help fund the construction of walls and defenses," the manservant says. [[Rest in camp|End day 2]] <<set $LadyAliceHelp to true>> <<elseif $Alicemeeting is true>> You talk a little with the viscountess, using her manservant as an intermediary. [[Rest in camp|End day 2]] <<endif>> <<if $AliceQuest is 1>> [[Talk about the letter|Alice Quest 1]] <<elseif $AliceQuest is 2 and $PlitasrunOwned is true>> [[Use the plitasrun|Alice Quest 2]] <<elseif $AliceQuest is 5>> [[Bring out the golden liquid|Alice Quest 5]] <<elseif $AliceQuest is 6>> [[Talk about yesterday|Alice Quest 6]] <<endif>> <<if $AliceQuest is 7>> [[Satisfy Alice's voyeuristic urges|Alice Sex]] <<endif>></tw-passagedata><tw-passagedata pid="145" name="Infiltrate Rebel Camp" tags="" position="3000,2125" size="100,100">The League of Dornburg; this is the name taken by a coalition of nobles, mages, and priests against the Church of the Light-King. You are now one of its members. First of all, Imperial Knight Hans attempts to enter the large encampment, but is turned away. So it all comes down to you. Your cover is an insider in Dornburg with information about the King's movements. Of course, the information given to you by Natalie is all fabrication. Also, she gives you a vial of sleeping draught. You approach the camp. "I am Jordan," you say to the camp guard. "I came from the Capital with news." Of course, you use a fake name. <<nobr>> <<if $name is "Jordan">> You have no idea why Natalie chose your real name as your alias ... <<endif>> <</nobr>> "Welcome, Jordan," the guard says. "Please do the purity check." He hands you the stone. You touch it, feel nothing, and are allowed to pass. You are escorted to the inner sanctum. You meet the local leader. "I am High Priest Toma," the old man says. "Young man, did you say you have news from the Capital?" "Yes. I am now enlightened to the truth of the Light-King." "Praise the Light-King, he who lights the stairs of heaven," the old man murmurs. "What is it, young man?" You launch a long tirade about how unprepared the King's armies are, and how the Church should go on an offensive rebellion as planned. You make sure to contradict yourself once or twice to further confuse the old geezer. The old man, in turn, welcomes you warmly. He invites you to a personal dinner with him. You make further fabrications, claiming you're an apprentince of a Hand of the King, and can be trusted to spread misinformation amongst the King's forces. "I'm here on behalf of the nobility to spy on you," you boast. "But of course, the fools don't know I'm not on their side." Wait, that first part is actually true, you guess. "We plan to attack in six months," he says. "A series of uprisings everywhere to spread thin the King's forces, with two major attacks on Dornburg and the Capital." "Can I see the detailed plans?" He provides you with a host of documents and tells you to sleep in one of the tents. "I'm sorry, but I must return, or else they'll suspect me." The old man nods. You hide the documents in your clothing, and you escape the camp. You provide the documents to the overjoyed League. <<set $MainQuest to 8>> [[Head to camp and rest|End day 2]]</tw-passagedata><tw-passagedata pid="146" name="The world shifts right in front of your eyes! A green light engulfs you ...." tags="" position="2875,2400" size="100,100">You close your eyes. An instant blink later, you are in a wholly other plane. For one, the skies are not blue, but a shade of pleasant purple. And there are two dim suns. You see a vast walled city, with a grand citadel in the middle. It looks far grander than even the King's castle that you saw during your brief visit to the Capital. A tall woman scantily clad in some pretty ineffective armor, riding a black horse with two horns, comes to meet you. "Apologies for the sudden invitation, Sir $name. Master invites you to his castle," she says, taking off her steel helmet, revealing her long, platinum blonde hair while bouncing her large breasts. You reckon she's a succubus, judging from her horns. It takes almost half a minute for you to recover from the shock. "Ugh ... who--where am I?" "You are in the Incubus King's domain," the succubus replies. "Please get onto my bicorn." "And who are you?" you ask. The succubus seems a little irritated. She tightens the metal collar around her neck. "I'm Yvette, a servant of my Master, the Incubus King. Is that sufficient or shall I produce my biography, as well?" "Uh ... that will be sufficient, let's go." You're not sure how things will go, but you're confident the Incubus King is on your side--sort of. Yvette and you ride into the city. You're quite surprised to see a large number of elves, dwarves, and humans as well as incubi and succubi. "What city is this?" you ask. "Our capital, Libidine." You ride to the castle. Yvette escorts you to the throne room. The Incubus King is not there, only a pair of muscly women: an orc and an amazon, both with very skimpy armor and black hair and the same metal collar. "Oh, Ursa, Phoebe. Where's Master?" "In the sunroom. He looks a little grim," the orc replies. [[Head to the sunroom]]</tw-passagedata><tw-passagedata pid="147" name="Head to the sunroom" tags="" position="3125,2350" size="100,100">The two of you head to the sunroom. The palace is vast and opulent, and without Yvette's guidance you're sure to get lost. Your eyes lusts after the various barely clothed women roaming the inner palace. "Can't control your eyes, can you?" Yvette asks. You politely nod. "Well, those are just cheap meat," she remarks as a group of elves walk past you. A tall, golden door stands, guarded by a red-skinned, silver-haired succubus--without a collar. "Is this $name, the human asked by His Majesty?" she asks. "Yeah, yeah, Seira, don't get too many ideas about your station. Now open the door." The succubus named Seira frowns and opens the door. "Master, I've brought him." "Thank you, Yvette. You can leave now--oh, and please arrange for Ursa and Phoebe's service." "Of course, Master." Yvette leaves. "Take a seat, $name." You sit on a luxurious chair opposite the Incubus King's. He smiles pleasantly. A cackle of maids place Ursa and Phoebe on a long, wooden table and a variety of cakes on their naked flesh. One of the maids pour you a glass of tea. You wait with bated breath as to what will happen next. "$name, with the body of a human ... the spirit of an incubus." "What's that supposed to mean?" you ask, a little snappy. "You were human," the Incubus King says. "Then, you were infected with a spirit of malevolence, bringing out your lust. And now--you are an incubus. Not in body, but in spirit." "Sure let's roll with that," you say. "What does that have to do with anything?" "Oh, nothing really important," he says. "It's just interesting. Maybe you'll achieve great things. Maybe not. Destiny's important--the destiny that you forge yourself, anyways." "You have something important to tell me--right?" you ask again. "Certainly. But before that, I'm sure you have many questions. Ask away." [[Ask about the Incubus King's people and domain]] [[Ask about the Empyrean]] [[Ask about sex magic]]</tw-passagedata><tw-passagedata pid="148" name="Ask about the Empyrean" tags="" position="3250,2475" size="100,100">"The empyrean?" the Incubus King confirms. "Well, it is the primordial soup, a place of power, if one can use it. It is the birthplace of everything." "Birthplace of ... I was taught the Light-King created everything." "Of course not." You should probably feel a bit offended at this, at least, but honestly, if your hardships these past few months taught anything, it's that the Light-King's servants hunt you, and the Light-King himself seems to be doing nothing to help you. "I guess I should go over the very beginning of life. Long time ago, in the empyrean there were gods who fought for dominance. Then there are the lesser sprites, suffering under the endless conflict. A great god named Bang-goo took plight, and sacrificed himself, creating your world. His body became the earth, his eyes became the sun and the moon, and so on and so on." "I've never heard of this Bang-goo god." "Of course. He's dead. He's got no followers anymore," the Incubus King says. "Then, the oppressed lesser sprites moved to Bang-goo's body. These are humans, orcs, dwarves, and other races. Other gods became moved by Bang-goo's sacrifice, and began putting the mortal races under their protection. Elphina became the patron goddess of the elves, and Bran the god of the dwarves. Of course, some became enraged and vowed to destroy Bang-goo and his legacy; these are the 'empyreans' as you know them." You breathe in and breathe out, trying to process this information. "So, are you a god, as well?" "Technically no. But my power does rival that of the strongest gods." The Incubus King takes a cake from the amazon's abdomen and consumes it with one bite. "How?" you ask impulsively. "I'm not about to spill my secrets so easily." "How many gods are there? And is the Light-King even real?" "There are thousands. Most are barely stronger than your average human. Four great gods stand out: Elphina and Bran, and the Dragon-God, a human who accumulated such power through rituals in the empyrean that he's an equal of the great gods. The fourth one is me. I share a kinship with the Dragon-God. I wasn't born into divinity either." You look at the Incubus King, a mixed sense of security and fear flowing in your veins as you drink the tea. "As for the Light-King, he's middling." <<set $empyreanq to true>> [[Ask about the Incubus King's people and domain]] [[Ask about sex magic]] <<if ($empyreanq is true) and ($sexmagicq is true) and ($incubusq is true)>> [[Enough questions]] <<endif>></tw-passagedata><tw-passagedata pid="149" name="Ask about sex magic" tags="" position="3000,2475" size="100,100">"Our brand of magic? Well, let me ask: how many types of magic do you know?" "Well, I guess there's dark magic, holy magic, arcane magic, ...." The Incubus King shakes his head and throws you a smile. "Arbitrary distinctions, made by ignoramus. There are only three kinds of magic: those derived from a god, those derived from the empyrean, those derived from Bang-goo, the primordial god, whose magic oozes even to this day." <<if $empyreanq isnot true>> You've never heard of Bang-goo before. Maybe you should ask him about the empyrean to know more. <<endif>> You nod a few times. "So something like holy magic comes from a god, and arcane magic ...." "What you call arcane magic comes from Bang-goo. Sex magic is drawn from the empyrean. And so on. It doesn't matter much, anyways." <<set $sexmagicq to true>> [[Ask about the Incubus King's people and domain]] [[Ask about the Empyrean]] <<if ($empyreanq is true) and ($sexmagicq is true) and ($incubusq is true)>> [[Enough questions]] <<endif>> </tw-passagedata><tw-passagedata pid="150" name="Ask about the Incubus King's people and domain" tags="" position="3125,2525" size="100,100">"The incubi and the succubi, huh? Well, it's more proper to just say incubi or succubi. There's no difference," the Incubus King says. "No difference?" "We have two forms: a masculine and a feminine form. The former is what you call incubi, the latter succubi. Some of my people assume incubi forms permanently, some succubi, some shift from one form to another. Well, I have nothing much to say. They're my people." "I saw a lot of non-incubi around," you point out. The Incubus King pauses. "... before my reign, the previous king aggressively abducts entire populations to use as slaves. I freed them, and they chose to stay with equal rights." "Really?" You can't help but be skeptical. "Give people what they need and they'll give you their loyalty. I offer security and prosperity," he says. "Where are we, exactly?" you ask. "Another plane, entirely detached from yours. Only portals can connect the two worlds." The Incubus King waves his hand. It seems like he's unwilling to be questioned too much about this topic. <<set $incubusq to true>> [[Ask about the Empyrean]] [[Ask about sex magic]] <<if $empyreanq is true and $sexmagicq is true and $incubusq is true>> [[Enough questions]] <<endif>></tw-passagedata><tw-passagedata pid="151" name="Enough questions" tags="" position="3125,2675" size="100,100">"Fiuh, those are some heavy questions. Let's rest before we continue," the Incubus King says, snapping his fingers. A collared, chocolate-skinned woman wearing a stripper's silk outfit enters the room alongside a number of maids. The maids clear out Phoebe and Ursa. "This is Jasmine, my prized slave. She's the goddess of whores and strippers." "At your service, Master." Jasmine opens her legs, revealing a bottle of wine embedded inside her vagina. Her control is such that she's able to pour both of you a glass of wine without any spilling. "So you practice slavery," you say with a mildly accusatory tone. In Walshemia, slavery is illegal--though indentured servitude, which is basically slavery anyways, is legal. "Indeed," the Incubus King says, sipping his wine. "The culture of my people, even those not incubi or succubi, is fiercely independent and prideful, however. Slavery is a very personal thing here. I--and all other slaveowners--obtain all my slaves the same way; challenging them in their chosen duel and winning. This way, they're all very loyal. And very expensive to maintain, heh." He chuckles at his own joke. His eyes gleam. "Very different from the sort of 'indentured servitude' your kingdom practices." You shrug. "I suppose so." You've to admit owning a slave has a special appeal to you. Even the image of that bitch High Priestess Selene begging at your feet is enough to rouse your spirit. "Now to the important matter ...." [[A knock is heard]] "Master, it's me, Phoebe. May I enter?" </tw-passagedata><tw-passagedata pid="152" name="A knock is heard" tags="" position="3250,2775" size="100,100">"Yes, enter!" the Incubus King says, a little displeased. Phoebe enters--with Natalie on tow. "Release me!" Natalie demands. "Forgive me, Master," the amazon says. "We caught an intruder. Shall we put her in prison or--" "Wait!" you raise up. "That's Natalie--er, my friend. She's a Hand of the King." Phoebe's head tilts. She looks at you with eyes that say she really doesn't give a damn about you or your orders. The Incubus King sighs. "Bring her here. And tell Yvette to not make such a careless mistake again." "Yes, Master!" Natalie looks at the Incubus King with fearful eyes. "Don't worry, Nat," you say, "uh, I think he's an ally." "A Hand of the King, you say," the Incubus King wonders. "Well, sit down." "Why should I?" Natalie asks. "You're the most insolent intruder I've had. Usually I send them to the dungeon." Reluctantly, Natalie sits down. The two of them talk about everything that has already been spoken of between you and the Incubus King. Natalie gulps her spit. "I can't believe it ...." "If you're against the empyrean, I'm with you," he says. "Now listen carefully. The civil war that's brewing is also a ploy by the empyrean. More specifically, an entity named Primordial Abyss. It's the accumulated hostility of the empyrean space, bent on destroying all ordered planes--including yours and mine. It is doing so by having its agents spread rumors about the King's oppression of the Church. Also, some of the Church higher-ups, knowingly or not, are cooperating directly with the Abyssal Lords, its minions." "You know about the civil war? It's not even begun!" Natalie says. "Of course I do. The Primordial Abyss used to be completely imprisoned. Last time, it took the combined efforts of the Dragon-God to beat him and Bran, Elphina, and I to seal him, alongside a massive host of lesser gods and mages. Now the Dragon-God is still injured, and Bran is weakened. Elphina and I are pouring too much power into protecting our respective realms. If the Primordial Abyss fully breaks out, it and its legions of darklings will try to kill us all." "So, what should we do?" you ask. "The seals are weakened but not broken. What I intend to do is foster a coalition between all the races and gods, so when the Primordial Abyss breaks free and attacks, it can be repulsed." "... so you kidnap $name, all to propose an alliance?" Natalie asks. "Not an alliance. Not yet. Neither your people nor mine are ready for that. I was hoping $name would be a bridge, an ambassador of sorts, to promote unity." "If you want unity, how about helping us win the civil war that's going to happen?" "I will. Just you see. Yvette, please escort them back to their camp. There's nothing else to talk about for now, I'm afraid. Good luck." You feel the Incubus King imparting a little gift before you go. Your powers are strengthened. <<set $MainQuest to 9>> <<set $EnemyCampDestroyed to 0>> [[You are escorted out and return to your home dimension. You're too tired, so you rest|End day 2]] <<set $player.maxHP to $player.maxHP + 50>> <<set $player.HP to $player.HP + 50>> <<set $player.maxattack to $player.maxattack + 10>> <<set $player.attack to $player.attack + 10>> <<set $lustboltpower to $lustboltpower + 10>></tw-passagedata><tw-passagedata pid="153" name="check your preparations" tags="" position="2975,2825" size="100,100">You are preparing for war. You should probably gather allies, boost your reputation, and begin raiding enemy cells. First, you ponder your allies: <<if $NagaKilled is true and $LordVivierHelp isnot true>> You helped Lord Vivier avenge his brother. Perhaps he'll be willing to help you. <<elseif $LordVivierHelp is true>> You have drafted Lord Vivier's help. His household soldiers are available for your use in future battle. <<endif>> <<if $ThalestrisKilled is true and $LadyAliceHelp isnot true>> You have gained access to Viscountess Alice von Brandenburg's manor. Surely your patron can help you. <<elseif $LadyAliceHelp is true>> Lady Alice has begun building defences for Dornburg. <<endif>> <<if $ArenaRep gte 450 and $ThalestrisKilled is true>> You are the defending arena champion with numerous victories to your name. Your fame is such that many new gladiators are willing to (figuratively, but sometimes literally) suck your dick. This fame should be useful in the war, where you should be able to raise a strong force of gladiators. <<set $ArenaOverwhelmingSupport to true>> <<elseif $ArenaRep lt 450 and $ThalestrisKilled is true>> You are the defending arena champion. Very few doubt your ability for combat, but the blood you shed could be improved in quantity. Nevertheless you're popular enough that you should be able to raise a sizable force of gladiators. <<set $ArenaStrongSupport to true>> <<elseif $ArenaRep gt 300>> You are a famous gladiator. You can leverage this fame into enticing young gladiators to join you. You should be able to raise a decent force of gladiators. <<set $ArenaDecentSupport to true>> <<elseif $ArenaRep gt 150>> You are a regular name in the arena. You have forged strong bonds with a small squad of young gladiators, whom you can convince to join you. You should be able to raise a small force of gladiators. <<set $ArenaMinorSupport to true>> <<else>> Either you never visit the arena or are unknown there. Anyways, you haven't been able to rouse the gladiators to help you. <<endif>> <<if $DornburgRep gte 600>> You are very popular amongst Dornburg's residents for your acts. You should be able to rouse a massive force of civilians armed with kitchen knives, torches, and pitchforks. <<set $DornburgOverwhelmingSupport to true>> <<elseif $DornburgRep gte 450>> You are quite popular amongst Dornburg's residents for your acts. You should be able to rouse a significant force of civilians armed with kitchen knives, torches, and pitchforks. <<set $DornburgStrongSupport to true>> <<elseif $DornburgRep gte 300>> Your name is well-known as one of Dornburg's defenders. Your heroics should enable you to convince a decent number of civilians to arms. <<set $DornburgDecentSupport to true>> <<elseif $DornburgRep gte 150>> You are barely known in Dornburg, and so your influence is similarly minor. <<set $DornburgMinorSupport to true>> <<else>> You have about as much influence in Dornburg as your local cabbage vendor. Very little, that is. <<endif>> <<if $BlackswordsHired isnot true and $player.coins gte 1000>> You encounter a band of amateur, desperate mercenaries named the Blackswords near your camp. They're willing to fight for you later for 1000 coins. [[Pay 1000 coins|check your preparations][$BlackswordsHired to true;$player.coins to $player.coins - 1000]] <<elseif $BlackswordsHired isnot true and $player.coins lt 1000>> You encounter a band of amateur, desperate mercenaries named the Blackswords near your camp. They're willing to fight for you later for 1000 coins. Unfortunately, you don't have enough coins to pay for them. <<elseif $BlackswordsHired is true>> You have the Blackswords at your command. Their size is small, their arms are bad, and their quality is wanting, but they're loyal to you for paying their wages for the next many months. They've begun counter-raiding Church "bandit" raiding parties for gold and supplies. <<endif>> <<if $XianHelp is true>> You have enlisted the help of Xian, a powerful cathayan sage who likes fishing, talismans, and not being disturbed. <<endif>> <<if $LunarianTropeToken is true>> You have befriended a troupe of elves called the Lunarian Trope and begotten their assistance. You're reasonably sure you can summon them to the defence of Dornburg, at least. <<endif>> <<if $AmazonRep gte 11>> You have managed to gain the compelete assistance of the amazons. Their spearwomen and archers are ready to aid you at any moment. Even their shaman has agreed to lend you aid. <<set $AmazonSpear to true>> <<set $AmazonArcher to true>> <<set $AmazonShaman to true>> <<elseif $AmazonRep gte 8>> You have managed to gain aid from most of the amazon camp. Their spearwomen and archers are ready to aid you at any moment. Only their shaman has refused to lend you aid. <<set $AmazonSpear to true>> <<set $AmazonArcher to true>> <<elseif $AmazonRep gte 4>> You have managed to gain aid from a minority of the amazon group. Their spearwomen are ready to aid you at any moment. <<set $AmazonSpear to true>> <<else>> You haven't gained any aid from the amazon camp. <<endif>> <<if $EnemyCampDestroyed gte 5>> You have raided a good number of church outposts, lessening their numbers. <<set $ChurchWeakened to true>> <<endif>> [[Back to camp|New Camp]]</tw-passagedata><tw-passagedata pid="154" name="Visit the Amazons" tags="" position="3150,3825" size="100,100"><<if $AmazonVisit isnot true>> You head to meet the amazons. It is said that the amazons respect strength and are aided by their patron deity, a nature goddess by the name of Sweva. You'll have to be careful in dealing with them. Should you go in fully clothed or, embracing their traditions, just wear a loincloth? [[Go in fully clothed|Amazon first visit][$Naked to false]] [[Go in with a loincloth|Amazon first visit][$Naked to true]] <<else>> You have been allowed entry to the amazon camp, consisting of a number of sophisticated huts and tents, contrasting the ... questionable clothing worn by the amazons. Without a leader, their decision-making is done through communal discussion. From now on, it's just trying to gather as much influence as possible here. [[Ask around for what you can do|Amazon Quests]] <<if $ThalestrisKilled is true and $ThalestrisJoined isnot true>> [[You hear the sound of a crying baby|Thalestris' Tent]] <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="155" name="Meet the sage" tags="" position="2775,3150" size="100,100"><<if $XianDornburgMet isnot true>> <<if $Dahliaquestdone is 1>> You're not surprised to see that it's Xian, the sage who 'helped' Dahlia. She's fishing. Hell if you know why. "Hello, Xian." Xian raises an eyebrow. "$name, yes? I think we met somewhere." "You helped my friend, Dahlia. The curse of the rat case." "Oh, that one, yeah," Xian says, shrugging. "Looks like you can't go fishing without being disturbed nowadays." You smile. "I'm sorry about that." "Well, you came up to me. So it must mean one of two things nowadays. Either you're trying to get my help, or you're trying to get rid of me. The latter is stupid; I barely used any power last time and you got rag-dolled. So it must be the former." "You don't have to be so analytical about it," you say, a bit annoyed. "Well, spit it out. Are you on the Church's side, or the King's side?" she asks. You feel dumbfounded. "You know about the--" "Yes. Now answer the question." "I'm on the King's side." "Good answer," Xian says. "I don't know anything about the King, but the Church has been very annoying with their holier-than-thou attitude. When I refused to join them, some of them had the gall to attack me ...." A bloodthirsty smile forms on her lips. "I've got to say, I'm craving a fight. But my old teacher always tells me never to fight without a reason." "It just happens that the Church stole something of mine during one of our scuffles--a protective talisman made out of sandalwood and jade. Now, if someone is to retrieve it for me, I'll be indebted to that person; and if that person asks me to fight for their side, I'll have to oblige ... you know what I mean, right?" You form a small smirk. "I'll get you the talisman." <<set $XianDornburgMet to true>> <<elseif $Xianfirstmeeting is true>> You're not surprised to see that it's Xian, the sage whom you met in the village. She's fishing. Hell if you know why. "Hello, Xian." Xian raises an eyebrow. "$name, yes? I think we met somewhere." "I asked you to help my friend, Dahlia. But you refused." "Oh, that one, yeah," Xian says, shrugging. "Looks like you can't go fishing without being disturbed nowadays." You smile bitterly. "I'm sorry about that." "Well, you came up to me. So it must mean one of two things nowadays. Either you're trying to get my help, or you're trying to get rid of me. If it's the latter, I'll crush you. Or is it the former?" "You don't have to be so analytical about it," you say, a bit annoyed. "Well, spit it out. Are you on the Church's side, or the King's side?" she asks. You feel dumbfounded. "You know about the--" "Yes. Now answer the question." "I'm on the King's side." "Good answer," Xian says. "I don't know anything about the King, but the Church has been very annoying with their holier-than-thou attitude. When I refused to join them, some of them had the gall to attack me ...." A bloodthirsty smile forms on her lips. "I've got to say, I'm craving a fight. But my old teacher always tells me never to fight without a reason." "It just happens that the Church stole something of mine during one of our scuffles--a protective talisman made out of sandalwood and jade. Now, if someone is to retrieve it for me, I'll be indebted to that person; and if that person asks me to fight for their side, I'll have to oblige ... you know what I mean, right?" You form a small smirk. "I'll get you the talisman." <<set $XianDornburgMet to true>> <<else>> When you get there, you see the sage is fishing. "Hello, sage." Xian raises an eyebrow. "$name, yes? The birds tell me of you." You're taken aback a little bit. "Yes, I'm $name." "Mmm," Xian mumbles, shrugging. "Looks like you can't go fishing without being disturbed nowadays." You smile. "I'm sorry about that." "Well, you came up to me. So it must mean one of two things nowadays. Either you're trying to get my help, or you're trying to get rid of me. Tell me then, is it the former or the latter?" "You don't have to be so analytical about it," you say, a bit annoyed. "Well, spit it out. Are you on the Church's side, or the King's side?" she asks. You feel dumbfounded. "You know about the--" "Yes. Now answer the question." "I'm on the King's side." "Good answer," Xian says. "I don't know anything about the King, but the Church has been very annoying with their holier-than-thou attitude. When I refused to join them, some of them had the gall to attack me ...." A bloodthirsty smile forms on her lips. "I've got to say, I'm craving a fight. But my old teacher always tells me never to fight without a reason." "It just happens that the Church stole something of mine during one of our scuffles--a protective talisman made out of sandalwood and jade. Now, if someone is to retrieve it for me, I'll be indebted to that person; and if that person asks me to fight for their side, I'll have to oblige ... you know what I mean, right?" You form a small smirk. "I'll get you the talisman." <<set $XianDornburgMet to true>> <<endif>> <<endif>> <<if $XianDornburgMet is true and $TalismanRetrieved isnot true>> You judge that it's not wise to annoy Xian without the talisman. <<elseif $XianDornburgMet is true and $XianHelp is true>> There's nothing else you can do with Xian. <<elseif $XianDornburgMet is true and $TalismanRetrieved is true>> "Here's your talisman," you say, handing over the talisman to Xian. "Good job. Tell me when they attack." <<set $XianHelp to true>> <<endif>> [[Return and rest|End day 2]]</tw-passagedata><tw-passagedata pid="156" name="Church Dungeon" tags="" position="1650,4100" size="100,100">You spy the Church's small outpost standing three stories tall. You estimate, at most three or four combatants in there. <<set $ChurchDungeon to 1>> [[Enter the outpost]]</tw-passagedata><tw-passagedata pid="157" name="Enter the outpost" tags="" position="1725,4700" size="100,100"><<if $ChurchDungeon is 1>> There are two options for you. You can sneak through the back door, or charge the front door. <<set _i to random(1,2)>> <<if _i is 1>> [[Sneak through the back door|Meet Male Knight]] [[Charge the front door|Meet Priestess]] <<elseif _i is 2>> [[Sneak through the back door|Meet Priestess]] [[Charge the front door|Meet Male Knight]] <<endif>> <<elseif $ChurchDungeon is 2>> You dispatch of the enemy and advance deeper into the outpost. You also take a key from the enemy. You hear some cries from one of the rooms, and by sheer coincidence that key unlocks the room. [[Investigate|Church Dungeon Prison Event]] <<set _i to random(1,2)>> <<if _i is 1>> Alternatively, you can try the other room just opposite that one. [[Head to the other room|Church Dungeon Treasury]] <<elseif _i is 2>> [[Head to the other room|Church Dungeon Sleeping Knight]] <<endif>> <<elseif $ChurchDungeon is 3>> You use the stairs to ascend. There are several rooms you can check. <<set _i to random(1,2)>> <<if _i is 1>> [[Check the left room|Church Dungeon Shrine Event]] [[Check the room with the heavy door|Church Dungeon Empty Event]] [[Check the wine cellar|Church Dungeon Wine Cellar]] <<elseif _i is 2>> [[Check the wine cellar|Church Dungeon Wine Cellar]] [[Check the middle room|Church Dungeon Empty Event]] [[Check the right room|Church Dungeon Mercenary Event]] <<elseif _i is 3>> [[Check the left room|Church Dungeon Shrine Event]] [[Check the room with the redwood door|Church Dungeon Mercenary Event]] [[Check the right room|Church Dungeon Empty Event]] <<endif>> <<elseif $ChurchDungeon is 4>> You spy a large number of poorly-trained peasant soldiers of the Church. You're sure you can dispatch one or two of them, but so many .... <<if $player.speed gte 30>> You're just agile enough to avoid them as they lazily patrol before they settle down to drink some booze. You continue your raid. <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue|Enter the outpost]] <<else>> Unfortunately, you're caught by the peasant mob. On the flip side, they seem a little shook and scared of you as well. You're not quite sure what you should do. [[One of the peasants begin to speak ...]] <<endif>> <<elseif $ChurchDungeon is 5>> The stone outpost is beginning to look dull. You seem rather close to the main room, probably at the third floor. You must have been too noisy, though, because a priestess comes down to investigate. She's a quick one; she immediately blasts you off with a holy spell, dealing 35 damage! <<set $player.HP to $player.HP - 35>> [[Fight!|Meet Priestess]] <<elseif $ChurchDungeon is 6>> You ascend to the third floor. There are more rooms that can be explored--or you can simply rest. <<set _i to random(1,3)>> [[Rest|Enter the outpost][$ChurchDungeon to $ChurchDungeon + 1;$player.HP to $player.maxHP]] <<if _i is 1>> [[Check the left room|Church Dungeon Sleeping Knight]] [[Check the room with the heavy door|Church Dungeon Prison Event]] [[Check the right room|Church Dungeon Mercenary Event]] <<elseif _i is 2>> [[Check the wine cellar|Church Dungeon Wine Cellar]] [[Check the room with the redwood door|Church Dungeon Priestess Event]] [[Check the right room|Church Dungeon Sleeping Knight]] <<elseif _i is 3>> [[Check the left room|Church Dungeon Shrine Event]] [[Check the room with a shabby door|Church Dungeon Mercenary Event]] [[Check the room oozing with a strange scent|Church Dungeon Priestess Event]] <<endif>> <<elseif $ChurchDungeon is 7>> You're about to confront the captain of this outpost. However, you see a veil of holy magic guarding the door. You're almost certain barging in without disabling the veil would result in a gruesome death. <<if $PriestessHelp is true>> True to her words, the priestess, from far away, disables the veil. All that is left is to [[confront the captain of the outpost|Enter the outpost]]. <<set $PriestessHelp to false>> <<set $ChurchDungeon to $ChurchDungeon + 1>> <<elseif $player.coins gte 150>> You sneak around and manage to locate a shining crystal that's the source of the veil. However, it is guarded by a knight. This particular knight turns out to be quite corrupt, however, and offers to step away for a price of 150 coins. [[Pay him 150 coins|Enter the outpost][$player.coins to $player.coins - 150;$ChurchDungeon to $ChurchDungeon + 1]] [[Fight him instead|Meet Male Knight]] <<else>> You sneak around and manage to locate a shining crystal that's the source of the veil. However, it is guarded by a knight. This particular knight turns out to be quite corrupt, however, and offers to step away for a price of 150 coins. Unfortunately, you don't have enough coins to bribe him. [[Fight him instead|Meet Male Knight]] <<endif>> <<elseif $ChurchDungeon is 8>> <<set _i to random(1,2)>> This is it. You break through the door to battle the captain. <<if _i is 1>> The captain stands tall, an enchanted blade in his hand. "For the Light-King!" he proclaims as he shifts into a battle stance. [[Fight!|Church Dungeon Captain]] <<elseif _i is 2>> It surprises you to see that the 'captain' is no human; rather, it is a lion, shining with the light of the Light-King. The lion roars, as if challenging you to a fight. [[Fight!|Church Dungeon Holy Lion]] <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="158" name="Meet Male Knight" tags="" position="1225,4400" size="100,100">You encounter a knight in chain armor! [[Fight|Male Knight]]</tw-passagedata><tw-passagedata pid="159" name="Male Knight" tags="" position="1000,4425" size="100,100"><<nobr>> <<set _temphp to random(270,300)>> <<set _tempattack to random(50,60)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "male knight", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The knight draws his sword and prepares to fight you! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a knight of the Light-King. "You're just a bandit," you taunt. "In the name of the Light-King, bandits we shall be." <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="160" name="Meet Priestess" tags="" position="1350,4250" size="100,100">You encounter a priestess of the Light-King! She draws her staff! [[Fight|Priestess]]</tw-passagedata><tw-passagedata pid="161" name="Priestess" tags="" position="1200,4175" size="100,100"><<nobr>> <<set _temphp to random(230,280)>> <<set _tempattack to random(50,60)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Priestess", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The priestess is chanting a spell .... Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a priestess of the Light-King. "You're just a bandit," you taunt. "In the name of the Light-King, bandits we shall be." <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="162" name="Church Dungeon Prison Event" tags="" position="1400,4550" size="100,100">You find a cackle of women and children in a room. They hurdle together. "Wait, he's not one of those clergymen!" one of the women say, pointing at you. "No, I'm not. I'm, uh, their enemy," you say. "Who're you?" "We're women of the night, the Church abducted us and our children from nearby villages," one of them say. "You should leave," you say. "I've cleared the guard in front. It's safe." "Where shall we go?" another of them asks, her tone high. "I don't even know where my village is. For all I know it could be months away from here." You curse in your heart. An idea comes to your head. "North of Dornburg ... you should be able to find a camp. There is a short-haired brunette there, named Natalie, a Hand of the King. Tell her $name sends you. Explain the circumstances to her, I'm sure she's more than willing to help." After a little discussion, the women agree to follow your suggestion. They number around half dozen, excluding a few children. As they silently slip away from the outpost under your guard, one of them stay behind for a while. "Hey, I just want to thank you for what you've done. Without you, we'll be dead. Or worse," she says. "Can I do anything for you? I have a few coins with me." [[Accept the gold|Church Dungeon Prison Event 1][$ChurchDungeonPrison to 1]] [[Ask for a quickie instead|Church Dungeon Prison Event 1][$ChurchDungeonPrison to 2]] [[Refuse all rewards|Church Dungeon Prison Event 1][$ChurchDungeonPrison to 3]]</tw-passagedata><tw-passagedata pid="163" name="Church Dungeon Prison Event 1" tags="" position="1250,4700" size="100,100"><<if $ChurchDungeonPrison is 1>> You accept the coins--you count thirty of them. The young prostitute bids you farewell as she joins the others. <<set $ChurchDungeon to $ChurchDungeon + 1>> <<set $player.coins to $player.coins + 30>> [[Back to the outpost|Enter the outpost]] <<elseif $ChurchDungeonPrison is 2>> "I wonder if you can give me a quickie instead," you request. "A quickie? Sure. Let's get to the bushes there." It appears that the young prostitute has some experience. She kneels down and opens your trousers. You grab her hips and you feel a strange warmth bubbling inside you. You begin fucking the young prostitute. "Mmm, what a treat," she whispers. "Not bad at all!" And then you feel the inside of her soft vagina change to the texture of some sort of soft rubber. A green flash passes. You see flowers growing from her head, her skin changing into pale green. A choking sensation envelops your cock as your ejaculation arrives uncontrollably. "See you later, human," she says, kissing you on the cheek. You blink and the prostitute is gone. She certainly isn't human. At least you feel refreshed by that kiss--somehow. [[Continue deeper into the outpost|Enter the outpost]] <<set $player.HP to $player.HP + 50>> <<set $ChurchDungeon to $ChurchDungeon + 1>> <<if $player.HP gte $player.maxHP>> <<set $player.HP to $player.maxHP>> <<endif>> <<elseif $ChurchDungeonPrison is 3>> The prostitute smiles. "May fortune bless you, good Sir," she says. "Health and coins be on your way." She kisses you on the cheek. It's probably just your brain playing tricks, but you feel rather fresh. <<set $NymphBless to true>> <<set $player.HP to $player.HP + 50>> <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue deeper into the outpost|Enter the outpost]] <<if $player.HP gte $player.maxHP>> <<set $player.HP to $player.maxHP>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="164" name="Church Dungeon Treasury" tags="" position="1375,4925" size="100,100"><<set _tempgold to random(130,180)>> <<set _tempsupplies to random(5,10)>> You stumble upon a small treasury room! You loot all its contents: _tempgold coins and _tempsupplies supplies. There are also some healing herbs that you use. [[Continue heading into the outpost|Enter the outpost]] <<set $player.coins to $player.coins + _tempgold>> <<set $player.supplies to $player.supplies + _tempsupplies>> <<set $ChurchDungeon to $ChurchDungeon + 1>> <<set $player.HP to $player.HP + 50>> <<if $player.HP gte $player.maxHP>> <<set $player.HP to $player.maxHP>> <<endif>></tw-passagedata><tw-passagedata pid="165" name="Church Dungeon Sleeping Knight" tags="" position="1200,4875" size="100,100">You enter the room brashly, awakening a sleeping knight! "Hey, who are you?" he roars. [[Fight!|Male Knight]]</tw-passagedata><tw-passagedata pid="166" name="Church Dungeon Shrine Event" tags="" position="2075,4625" size="100,100">You enter the room. It is largely empty, except for a golden small statue of the Light-King. Should you return to your old faith--even temporarily--and offer a prayer to the Light-King? Or should you take whatever tool at your disposal and scalp this statue for the gold? [[Pray to the Light-King]] [[Scalp for gold]]</tw-passagedata><tw-passagedata pid="167" name="Church Dungeon Empty Event" tags="" position="2025,4425" size="100,100">"Fuck!" It's just an empty room. Bloody idiots. Who has a room in their outpost and then just not do anything with it? [[Continue|Enter the outpost]] <<set $ChurchDungeon to $ChurchDungeon + 1>></tw-passagedata><tw-passagedata pid="168" name="Church Dungeon Wine Cellar" tags="" position="2125,5050" size="100,100">You find a wine cellar. Well, it's technically not a cellar, but semantics aside, you find a massive collection of wine. What is more important, however, is that some of the wines possess healing properties. You drink half a bottle, restoring some health, but also causing you to be rather unbalanced--for now. [[Continue|Enter the outpost]] <<set $player.HP to $player.HP + 50>> <<set $player.speed to $player.speed - 10>> <<set $ChurchDungeon to $ChurchDungeon + 1>> <<if $player.HP gte $player.maxHP>> <<set $player.HP to $player.maxHP>> <<endif>></tw-passagedata><tw-passagedata pid="169" name="Church Dungeon Mercenary Event" tags="" position="2100,4800" size="100,100"><<set _mercname to either("Tom","John","Bob","Roy","Ronald","Andy","Eric")>> You stumble upon a young boy. He must be aged around thirteen or fourteen--fifteen, max. "U-uh, s-stop! I'm a mercenary!" G-get out!" The boy charges at you with a dull sword far too big for his use. You swipe away the sword easily with a kick, draw your own blackstone dagger, and place it at the boy's throat. He falls to the floor, sobbing and crying. "P-plaese don't kill me!" he says. You sigh. Whatever else you've done, killing a defenseless child like this is beneath you. "What's your name, kid? Where are you from?" "I-it's _mercname," he says. "I'm from a village nearby." "Get out," you say. "Go back to your village." "B-but, I need the money for my father's illness." You take a massive sigh. <<if $player.coins gte 30>> [[Give him some money]] <<endif>> [[Fuck off, kid.]] </tw-passagedata><tw-passagedata pid="170" name="Pray to the Light-King" tags="" position="2275,4525" size="100,100">You clench your fists and pray to the Light-King. A good god, with awful-ass followers. Perhaps it's just your feeling, but you feel fresher and stronger, at least for now. Or perhaps the Light-King himself has taken a look at his followers, snorted in disgust, and blessed you. <<set $player.attack to $player.attack + 20>> <<set $player.speed to $player.speed + 10>> <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue|Enter the outpost]] </tw-passagedata><tw-passagedata pid="171" name="Scalp for gold" tags="" position="2325,4675" size="100,100"><<set _gold to random(40,50)>> You manage to scalp some gold, worth around _gold coins. However, you feel something wrong in your body, as if you have been cursed .... [[Continue|Enter the outpost]] <<set $player.attack to $player.attack - 10>> <<set $player.speed to 0>> <<set $ChurchDungeon to $ChurchDungeon + 1>></tw-passagedata><tw-passagedata pid="172" name="Give him some money" tags="" position="2400,4975" size="100,100"><<set _i to random(1,2)>> You give him some money for his father's treatment. With a thousand thanks, the kid leaves. <<if _i is 1>> Unfortunately, you later find out this is complete bullshit. The kid's lying to you. <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue|Enter the outpost]] <<elseif _i is 2>> Later on, you find out that the kid isn't lying. He spreads word about your generosity to local folks. <<set $ChurchDungeon to $ChurchDungeon + 1>> <<set $DornburgRep to $DornburgRep + 40>> [[Continue|Enter the outpost]] <<endif>></tw-passagedata><tw-passagedata pid="173" name="Fuck off, kid." tags="" position="2400,4825" size="100,100">The kid fucks off. Later on you find out he's been spreading some unsavory rumors about you in retaliation. [[Continue|Enter the outpost]] <<set $DornburgRep to $DornburgRep - 40>> <<set $ChurchDungeon to $ChurchDungeon + 1>></tw-passagedata><tw-passagedata pid="174" name="One of the peasants begin to speak ..." tags="" position="2325,5100" size="100,100">"Look, man, we're just here working for the Church for some bread," he says. "If you want us to step aside, we'll step aside. Please, just give us some supplies." <<if $NymphBless is true>> Suddenly, a blast of fey magic bursts in the room, blinding, scattering, and injuring the peasants. You wonder if it's the work of that mysterious not-human prostitute. <<set $NymphBless to false>> <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue|Enter the outpost]] <<elseif $player.supplies lt 20>> You hand over the demanded supplies. The peasants thank you and leave. <<set $player.supplies to 0>> <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue|Enter the outpost]] <<elseif $player.supplies gte 20>> You hand over the demanded supplies. The peasants thank you and leave. <<set $player.supplies to $player.supplies - 20>> <<set $ChurchDungeon to $ChurchDungeon + 1>> [[Continue|Enter the outpost]] <<endif>> </tw-passagedata><tw-passagedata pid="175" name="Church Dungeon Priestess Event" tags="" position="2050,5175" size="100,100">You enter the room. To your surprise, you see a battered priestess chained up with shining chains. "Ugh ... who--who are you?" she asks. "Why are you here?" you ask. You'd like to help her, but if she turns out to be an actual criminal, you'd rather not. There is a small pause in her answer. "I was a devout priestess to the Light-King ... then I realized what they were doing. They're trying to revolt and rebel." The priestess shakes her head. "It's not what I want. The Light-King's doctrine ought to be spread peacefully, not with bloodshed." It's a good enough answer to you, so you decide to help her. The chains seem to be designed to weaken her, so you can take them off without much effort. "Ah, much better," the priestess says. "I understand you must wipe out this outpost. But please, have mercy to the innocents," the priestess says. "Of course." "Then let me help you," she continues. "They've got a defense system up there. A blast of holy magic that can knock you off. I'll disable it once you come close to it." You tilt your head in slight suspicion. "I see. Thanks," you say, before continuing your raid. <<set $ChurchDungeon to $ChurchDungeon + 1>> <<set $PriestessHelp to true>> [[Continue|Enter the outpost]]</tw-passagedata><tw-passagedata pid="176" name="Church Dungeon Captain" tags="" position="1525,4275" size="100,100"><<nobr>> <<set _temphp to random(440,480)>> <<set _tempattack to random(60,70)>> <<set _tempspeed to random(10,13)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Outpost Captain", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The captain is swinging his enchanted blade. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting the captain of the outpost. "The Light-King protects me!" "Yeah, we'll see about that, buckaroo." <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="177" name="Church Dungeon Holy Lion" tags="" position="1450,4425" size="100,100"><<nobr>> <<set _temphp to random(360,400)>> <<set _tempattack to random(60,70)>> <<set _tempspeed to random(10,13)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Holy Lion", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The lion is walking around almost aimlessly. Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a holy lion of the Light-King. "Come on then!" you taunt. <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="178" name="Loot the place" tags="" position="1250,5100" size="100,100"><<set _tempgold to random(150,180)>> <<set _tempsupplies to random(15,30)>> <<set _i to random(1,3)>> <<set _j to random(1,3)>> You loot the grand room systematically, searching for each nook and cranny. The Church is storing up a lot of supplies around. You scalp everything valuable; coins and metals and such. You find _tempgold coins and _tempsupplies supplies! <<set $player.coins to $player.coins + _tempgold>> <<set $player.supplies to $player.supplies + _tempsupplies>> <<if _j is 1>> <<if $spell.includes("Minor Heal")>> You also find a small unlocked chest, containing instructions on how to heal. It's largely useless to you, but you do find a significant amount of coins beneath the scroll. <<set $player.coins to $player.coins + 60>> <<else>> You also find a small unlocked chest, containing instructions on how to heal. <<run $spell.push("Minor Heal")>> <<run $spelldesc.push("A small wave of healing magic;cost: 5 MP")>> <<endif>> <<else>> You also find a small unlocked chest, containing a scant few pieces of gold. <<set $player.coins to $player.coins + 30>> <<endif>> <<nobr>> <<if $ability.includes("Lockpicking")>> You find a locked chest that you lockpick with ease. Inside, you find a few gambling chips for the local den. Looks like these priests aren't so pious .... <<if ndef $gamblingchips>> <<set $gamblingchips to 3>> <<else>> <<set $gamblingchips to $gamblingchips + 3>> <<endif>> <<endif>> <</nobr>> <<nobr>> <<if $TalismanRetrieved isnot true and _i isnot 3>> You also search for the talisman that Xian requested. Unfortunately, you fail to find it. Perhaps it's in another outpost. <<elseif $TalismanRetrieved isnot true and _i is 3>> You also search for the talisman that Xian requested. A shiny piece of jade is difficult to miss--and you find it! <<set $TalismanRetrieved to true>> <<endif>> <</nobr>> <<if $NymphBless is true>> You find a strange mound of flour, edible mushrooms, and fruits. They are good foods, though you're not sure who'd leave them there. <<set $player.supplies to $player.supplies + 30>> <<set $NymphBless to false>> <<endif>> [[Return to camp|End day 2]] <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.speed to $player.maxspeed>> <<set $player.attack to $player.maxattack>> <<set $EnemyCampDestroyed to $EnemyCampDestroyed + 1>></tw-passagedata><tw-passagedata pid="179" name="Visit gambling den" tags="" position="2025,3550" size="100,100">The gambling den reeks of alcohol, tears, and depression. You are curtly welcomed and told to purchase some gambling chips if you want to play. [[Buy gambling chip for 50 coins|Visit gambling den][$player.coins to $player.coins-70;$gamblingchips to $gamblingchips + 1;$boughtgamblingchips to $boughtgamblingchips + 1]] <<if $gamblingchips gte 1>> [[Play roulette]] <<else>> Before playing roulette, you'll need to purchase (or find ... or steal ... or whatever) a gambling chip. <<endif>> <<if $boughtgamblingchips gte 5>> "Hey, young man. I see you're quite a regular," a hooded man whispers. "Would you like to play a game with me? A game of thrill, a game of pure chance. 150 coins bet--or something from my stash." [[Play dice with the hooded man]] <<endif>> You see an elven woman and a small group of elves around her. They're unusually loud and are on the verge of getting kicked out. "Annita, you fool, do you have any idea how much your bow is worth? How could you gamble it away?" a slender, androgynous elf roars. <<nobr>> <<if $ElfBow isnot true>> You have no idea what this bow looks like. Also, you're reasonably sure you don't want to interfere in the business of elves--especially angry elves./ <<elseif $ElfBow is true and $LunarianTropeToken isnot true>> You're quite sure the bow you won by gambling is owned by the elf. Perhaps you should offer it back to her; who knows what you'll get in return. [[Give back the bow]] <<endif>> <</nobr>> [[Return to Dornburg|Dornburg]] <<if ndef $boughtgamblingchips>> <<set $boughtgamblingchips to 0>> <<endif>> <<if ndef $gamblingchips>> <<set $gamblingchips to 0>> <<endif>></tw-passagedata><tw-passagedata pid="180" name="Play roulette" tags="" position="1775,3650" size="100,100">A roulette is not a mundane item--it's carved with fine wood and adorned with good steel. There are thirty numbers on it. Pick a number that you want. <<textbox "$number" "">> [[Spin the wheel!]]</tw-passagedata><tw-passagedata pid="181" name="Spin the wheel!" tags="" position="2150,3725" size="100,100"><<set _i to random(1,20)>> <<if _i gte 6>> Unfortunately, the number that you pick provides you with nothing. Such is the gambler's pain, stemming from their lack of understanding of statistics. <<elseif _i is 5>> You receive a small portion of your coins back. <<set $player.coins to $player.coins + 10>> <<elseif _i is 4>> You recoup the price of the gambling chip. <<set $player.coins to $player.coins + 50>> <<elseif _i is 3>> You recoup two gambling chips back. <<set $gamblingchips to $gamblingchips + 2>> <<elseif _i is 2 and $goblinpussyjuiceinfo is true>> You receive a healing potion as a reward. <<set $healthpotion to $healthpotion + 1>> <<elseif _i is 2>> You receive a sizable amount of coins as compensation. <<set $player.coins to $player.coins + 90>> <<elseif _i is 1>> You win the jackpot of 700 coins! <<set $player.coins to $player.coins + 700>> <<endif>> [[Play again|Play roulette]] [[Back to the den|Visit gambling den]]</tw-passagedata><tw-passagedata pid="182" name="Amazon first visit" tags="" position="3175,3675" size="100,100"><<if $Naked is true>> You head to the amazons' camp wearing just a loincloth. You also bring an offering of some fruits and herbs that you obtain from Natalie. A muscular amazon warrior over two metres tall stands guard, wearing a loincloth and baring her breasts. <<if $spell.includes("Strength of the Bear")>> "Halt, outsider!" she barks as you approach. "What purpose do you have in approaching our camp--wearing our clothing moreover! Is this an insult?" You are taken aback a little--but then the amazon continues. "Oh, sorry ...," she says. "I didn't realize you're one of us. Sweva blesses. Do you have something to say, brother?" Only now does it click to you; back in the village, the shaman taught you a spell named Strength of the Bear; it must be derivative of natural--in other word, Sweva's--magic. You breath a silent sigh of relief. "I came here on behalf of the League. Are you aware of the impending civil war?" "The civil war? Brother, we know no such thing. But we do know there are a number of camps of the followers of the so-called Light-King, who have been harassing us. Is that what you mean?" "More or less, yes. We're their enemies," you say. "I come here to request aid against them." "We're certainly aligned against them, but that doesn't mean we'll rashly go to war," she says, tilting her head. "But you're free to come in, brother. We have no leader, so you'll have to convince us all of your cause." <<set $AmazonRep to 4>> <<set $AmazonVisit to true>> <<else>> "Halt, outsider!" she barks as you approach. "What purpose do you have in approaching our camp--wearing our clothing moreover! Is this an insult?" "I apologize, I intend no insult," you say. The outsider looks red with anger. "So why have you come here, outsider?" "I came here on behalf of the League. Are you aware of the impending civil war?" "The civil war? Outsider, we know no such thing. But we do know there are a number of camps of the followers of the so-called Light-King, who have been harassing us. Is that what you mean?" "More or less, yes. We're their enemies," you say. "I come here to request aid against them." "We're certainly aligned against them, but that doesn't mean we'll rashly go to war," she says, tilting her head. "I'll allow you to enter, outsider, but know we'll be watchin you. We have no leader, so you'll have to convince us all of your cause." <<set $AmazonRep to 0>> <<set $AmazonVisit to true>> <<endif>> <<elseif $Naked is false>> <<if $spell.includes("Strength of the Bear")>> "Halt, outsider!" she barks as you approach. "What purpose do you have in approaching our camp?" You are taken aback a little--but then the amazon continues. "Oh, sorry ...," she says. "I didn't realize you're one of us. Sweva blesses. You ought to leave the clothing of men and return to our goddess, brother. Do you have something to say?" Only now does it click to you; back in the village, the shaman taught you a spell named Strength of the Bear; it must be derivative of natural--in other word, Sweva's--magic. You breath a silent sigh of relief. "I came here on behalf of the League. Are you aware of the impending civil war?" "The civil war? Brother, we know no such thing. But we do know there are a number of camps of the followers of the so-called Light-King, who have been harassing us. Is that what you mean?" "More or less, yes. We're their enemies," you say. "I come here to request aid against them." "We're certainly aligned against them, but that doesn't mean we'll rashly go to war," she says, tilting her head. "But you're free to come in, brother. We have no leader, so you'll have to convince us all of your cause." <<set $AmazonRep to 2>> <<set $AmazonVisit to true>> <<else>> "Halt, outsider!" she barks as you approach. "What purpose do you have in approaching our camp?" The amazon's expression seems rather neutral. "I came here on behalf of the League. Are you aware of the impending civil war?" "The civil war? Outsider, we know no such thing. But we do know there are a number of camps of the followers of the so-called Light-King, who have been harassing us. Is that what you mean?" "More or less, yes. We're their enemies," you say. "I come here to request aid against them." "We're certainly aligned against them, but that doesn't mean we'll rashly go to war," she says, tilting her head. "But you're free to come in, outsider. We have no leader, so you'll have to convince us all of your cause." <<set $AmazonRep to 2>> <<set $AmazonVisit to true>> <<endif>> <<endif>> [[Enter the camp|Visit the Amazons]]</tw-passagedata><tw-passagedata pid="183" name="Thalestris' Tent" tags="" position="3000,3725" size="100,100">You peek on the tent. To your surprise, you see Thalestris--the arena champion you defeated. "Oh, if it isn't $name!" she says as she notices you peeking. "Come in!" You enter the tent. "Uh, hi, Thalestris," you say. The amazon woman is calming down a crying girl-child, aged maybe five or six. "This is your daughter!" Thalestris gleefully says. "W-what?" You gulp your own spit. You look at the child--her skin color certainly looks lighter than the amazons'; it looks like a perfect mix between your own and Thalestris'. There is a certain twink in her eyes that remind you of yourself .... "But the arena fight wasn't even nine months ago," you mutter. "How does this happen?" "Oh, dear. Sweva blesses our pregnancy, birth, and growth. We give birth in one week and our children grow far faster than normal," Thalestris explains. You suppose it is what it is. A father at your own tender age--you're barely old enough to even have sex in the first place ... "What's the name?" "Telistra," Thalestris answers. "Well, don't mind her. She'll be under the care of the tribe from now on." "What? But what about us?" "Ah, it's a tradition for children aged six or above to be under the care of the tribe. It makes them strong," she says. You nod a few times. Perhaps this is for the best. "I understand," you say. "I've been waiting for you," Thalestris says. "Come on, let's go to your place." "Huh? What about the tribe?" "You impregnate me and you want me to stay here? Seriously?" Thalestris' eyes sharpen. "It's tradition for amazons to join the household of someone who have defeated and impregnated them ...." You decide to allow Thalestris to join. Otherwise she looks like she might well bash your head with her fist. The amazons are impressed that you managed to beat one of their number in a one-on-one fight, netting you a significant amount of influence. <<set $AmazonRep to $AmazonRep + 3>> <<set $ThalestrisJoined to true>> [[Return to your camp and rest|End day 2]]</tw-passagedata><tw-passagedata pid="184" name="Amazon Quests" tags="" position="2975,3875" size="100,100">After asking around, you have gathered a number of opportunities. Firstly, the tribe has been under attack by Church fanatics. By eliminating their outposts--say, five of them--you could gain the tribe's favors. Secondly, a collection of three tribal fetishes have been stolen by mercenary forces when the amazons went out to hunt. A shaman has requested you to wrestle them back from the mercenaries. [[Search for the fetishes]] Also, the tribe always needs more supplies. Around 120 supplies would make them see you in a more positive light. <<if $player.supplies gte 120 and $SupplyQuest isnot true>> [[Give the tribe 120 supplies|Amazon Quests][$SupplyQuest to true;$player.supplies to $player.supplies - 120;$AmazonRep to $AmazonRep + 2]] <<endif>> <<if $EnemyCampDestroyed gte 5 and $AmazonBoost1 isnot true>> <<set $AmazonRep to $AmazonRep + 2>> <<set $AmazonBoost1 to true>> <<endif>> <<if ndef $FetishQuest>> <<set $FetishQuest to 1>> <<endif>></tw-passagedata><tw-passagedata pid="185" name="Southwestern Camp" tags="" position="2525,3175" size="100,100">Thalestris has made camp here. The black-haired amazon is standing guard over your camp. "Hello, $name. Do you want anything?" she asks. [[Talk about herself]] [[Talk about her people]] [[Talk about the fey]] [[Ask for sex]] <<if ndef $ThalestrisQuest>> [[Thalestris seems to want to ask something of you|Thalestris Quest 1]] <<elseif $ThalestrisQuestPrompt is true and $ThalestrisQuestComplete isnot true>> [[Are you prepared to hunt the skinwalker?|Thalestris Quest 1]] <<endif>> <<if $ThalestrisQuestComplete is true and $ThalestrisHarem isnot true and $HaremUnlockedFirstTalk is true>> [[Ask Thalestris to join your harem|Thalestris Harem]] <<endif>> <<if $ThalestrisCookingQuest is 1>> [[Ask Thalestris to help cook|Thalestris Cooking Quest]] <<elseif $ThalestrisCookingQuest is 2>> [[Check out Thalestris' cooking|Thalestris Cooking Quest]] <<endif>> [[Back to camp|New Camp]]</tw-passagedata><tw-passagedata pid="186" name="Ask for sex" tags="" position="2525,3550" size="100,100"><<if $MainQuest is 9>> "It's not that I want to reject you ... but I just gave birth, you know," Thalestris chides. "Sorry," you apologize. [[Back|Southwestern Camp]] <<else>> "Sure, what do you have in your mind?" Thalestris askes with a sultry smile. [[Cuddle|Thalestris Cuddle]] [[Surprise me|Thalestris Femdom]] [[Anal|Thalestris Anal]] <<endif>></tw-passagedata><tw-passagedata pid="187" name="Talk about herself" tags="" position="2600,3400" size="100,100">"Ah well, it is a shame," Thalestris says. "What? Your whole life?" Thalestris' mouth formed bitter smile. "Previously, I was just an amazon. I decided I'll try for something greater. I called on dark powers." "Dark powers?" "Necromancers," Thalestris says. "... it didn't go well." You decide it's not prudent to continue asking. [[Back to camp|New Camp]] </tw-passagedata><tw-passagedata pid="188" name="Talk about her people" tags="" position="2425,3400" size="100,100">"Can you tell me about the amazons?" you ask. "I don't think I've seen any of you before." "Oh, certainly. We're a nomadic people--we don't settle. We go around where there is livelihood," Thalestris says. "We usually do mercenary work. But only if Sweva permits. Otherwise we forage and hunt." "Sweva is your goddess, isn't she?" Thalestris nods in the affirmative. "Yeah. The shamans communicate with her on a daily basis. That's why we don't maintain much relations with city or village-dwellers; Sweva disapproves. She's nicknamed the Wyld Goddess, after all." "You don't have formal relations with anyone, then?" you're quite impressed that the amazons have managed to survive mostly alone. "I wouldn't say so. We have a good affinity with the elves and the fey," Thalestris explains. "Not allies, necessarily." [[Back|Southwestern Camp]]</tw-passagedata><tw-passagedata pid="189" name="Search for the fetishes" tags="" position="2950,4050" size="100,100">You prepare to search for the fetishes. According to the amazon shamans, the three fetishes are: a goat fetish, a lion fetish, and, most importantly, a fetish of their goddess Sweva. <<nobr>> <<if $FetishQuest is 1>> [[Search for the goat fetish]] <<elseif $FetishQuest is 2>> [[Search for the lion fetish]] <<elseif $FetishQuest is 3>> You've returned the goat and lion fetishes to the amazons. Now all that remains is to find the Sweva fetish. The amazons have located it in the Speartons' main hideout. This will not be an easy attack--you should rally your allies to storm the Speartons. The amazons will join you in this assault. [[Attack the Speartons!]] <<endif>> <</nobr>></tw-passagedata><tw-passagedata pid="190" name="Search for the goat fetish" tags="" position="3375,4025" size="100,100">Your investigation is stupidly easy. First, you meet a nervous, skittering man just outside the amazon encampments. After being intimidated by you and a cohort of amazons, the man gives this admittance: "I stole the thingy because the Speartons threatened me--they had my wife, and my children!" he said. "The Speartons? Who are they?" one of the more abrasive amazons 'ask' with a spear at the man's throat. "W-wait, you don't know? They're a notorious bandit gang around here," the man says. "A-and, you don't hear it from me, but I hear they're on some shady payroll nowadays." The man blabbers on about the exact location of the Speartons' hideout. Unfortunately, it is quite heavily guarded, according to him. Going alone would be suicide--waiting for the amazons to muster would take too long. If only you had some kind of mercenary army or somesuch that you could send ... [[Back to the amazon camp|Visit the Amazons]] <<if $BlackswordsHired is true>> [[Send in the Blackswords|goat fetish blackswords]] <<endif>> <<if $ElvenTropeToken is true>> [[Ask for help from the Lunarian Trope]] <<endif>></tw-passagedata><tw-passagedata pid="191" name="Play dice with the hooded man" tags="" position="1950,3725" size="100,100"><<nobr>> <<set $dice1 to random(1,6)>> <<set $dice2 to random(1,6)>> <<set $dice3 to random(1,6)>> <<set $dice4 to random(1,6)>> <<set $dice5 to random(1,6)>> <<set $dice6 to random(1,6)>> <<set $dice7 to random(1,6)>> <<set $dice8 to random(1,6)>> <<set $card1 to random(3,7)>> <<set $card2 to random(3,7)>> <<set $playerdice to $dice1 + $dice2 + $dice3 + $dice7 + $card1>> <<set $enemydice to $dice4 + $dice5 + $dice6 + $dice8 + $card2>> <</nobr>> "Very well, I'll play," you say. "Good, good. The game is simple. You and I throw four dices each, two first dices hidden with these cups, the other two shown. You and I then draw a card from this stack of cards--they have numbers on them, which could go from three to ... well, a certain number. These cards are shown to each other. Then you decide whether your total score is lower or higher than mine. If it's equal, I win. Simple enough, no?" You throw two dices, showing $dice3 and $dice7. He throws two dices as well, showing $dice6 and $dice8. You don't know about the other four dices--or the two cards you just drew. Now, you should decide whether you want to bet higher or lower. [[Higher|Hooded Man Game][$Bet to true]] [[Lower|Hooded Man Game][$Bet to false]] </tw-passagedata><tw-passagedata pid="192" name="Hooded Man Game" tags="" position="1950,3850" size="100,100"><<if $Bet is true>> <<if $playerdice gt $enemydice + 2>> It turns out that your dice results are $dice1 and $dice2, as well as $dice3 and $dice7 that you already knew. Your card shows $card1. The hooded man's results are $dice4 and $dice5, as well as $dice6 and $dice8 that you already knew. His card shows $card2. Overall, you win! <<set $HoodedManGamble to true>> [[Take your reward from the hooded man|Hooded Man Reward]] <<else>> It turns out that your dice results are $dice1 and $dice2, as well as $dice3 and $dice7 that you already knew. Your card shows $card1. The hooded man's results are $dice4 and $dice5, as well as $dice6 and $dice8 that you already knew. His card shows $card2. Overall, you lost! <<set $HoodedManGamble to false>> [[Pay the fee of 150 coins|Visit gambling den][$player.coins to $player.coins - 150]] <<endif>> <<elseif $Bet is false>> <<if $playerdice lt $enemydice - 2>> It turns out that your dice results are $dice1 and $dice2, as well as $dice3 and $dice7 that you already knew. Your card shows $card1. The hooded man's results are $dice4 and $dice5, as well as $dice6 and $dice8 that you already knew. His card shows $card2. Overall, you win! <<set $HoodedManGamble to true>> [[Take your reward from the hooded man|Hooded Man Reward]] <<else>> It turns out that your dice results are $dice1 and $dice2, as well as $dice3 and $dice7 that you already knew. Your card shows $card1. The hooded man's results are $dice4 and $dice5, as well as $dice6 and $dice8 that you already knew. His card shows $card2. Overall, you lost! <<set $HoodedManGamble to false>> [[Pay the fee of 150 coins|Visit gambling den][$player.coins to $player.coins - 150]] <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="193" name="Hooded Man Reward" tags="" position="1950,3975" size="100,100">The hooded man grins, and offers you a variety of rewards. "I have coin, of course, but perhaps you're interested in something else." [[Take 300 coins and go back to the gambling den|Visit gambling den][$player.coins to $player.coins + 150]] <<if $HoodedManPotion isnot true>> "A potion of strength, crafted by fey potion-makers of old," the hooded man claims. [[Take the potion and go back to the gambling den|Visit gambling den][$player.maxattack to $player.maxattack + 10;$player.attack to $player.attack + 10;$player.maxHP to $player.maxHP + 30;$player.HP to $player.HP + 30;$HoodedManPotion to true]] <<else>> The old man used to have a potion of strength, but you've won it from him. <<endif>> <<if $ElfBow isnot true>> "Oh, I also won a finely crafted bow. Not sure why you'd want it, but you're welcome to take it if you do." [[Take the bow and go back to the gambling den|Visit gambling den][$ElfBow to true]] <<else>> The hooded man used to have a bow, but you've won it from him. <<endif>> <<if $FetishQuest is 2>> "A lion fetish? Sure, here it is." [[Take the lion fetish and deliver it to the village|Visit gambling den][$FetishQuest to 3]] <<endif>></tw-passagedata><tw-passagedata pid="194" name="Give back the bow" tags="" position="2175,3875" size="100,100">"Excuse me," you say in a calm, stoic tone. "Is this your bow?" The elves stop bickering as they turn toward you. "Oh! Yes!" the elf they call Annita says, taking the bow from you. The elves chatter for a while until their presumed leader steps leader. "Stranger, I cannot thank you enough. Please accept our warmest thanks from the Lunarian Trope. May I know your name?" "It's $name," you say briskly. "$name. We will remember that name forever," the troupe leader says before giving you a token--a small ornament of white gold-plated wood. "If you ever are in physical danger, or require help, please seek us with this token in hand. We will assist you as we can." You feel like it's a little excessive for a bow--well-made as it is, it's still just a bow. Perhaps there's some sort of sentiment attached to it. Nevertheless, you're glad to have made friends with the Lunarian Trope. More allies can never hurt. <<set $LunarianTropeToken to true>> [[Back to the gambling den|Visit gambling den]]</tw-passagedata><tw-passagedata pid="195" name="goat fetish blackswords" tags="" position="3375,4175" size="100,100">You unleash your mercenary force, the Blackswords, at the Speartons. "Leave this to us, boss," they say, and so you do. Later in the evening, the goat fetish is safely delivered to the amazons. <<set $FetishQuest to 2>> [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="196" name="Ask for help from the Lunarian Trope" tags="" position="3500,4150" size="100,100">You decide to ask help from the Lunarian Trope. A band of fifteen elves arrive in the amazon camp. "Ah, the amazons!" the troupe leader says, smiling as they observe the camp. "Certainly, we'll help them." You observe as the elves unleash a hurricane of green, fey magic to blast open the Speartons' front defenses before they rush in. A scant hour later, the goat fetish is returned to the village. <<set $FetishQuest to 2>> [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="197" name="Search for the lion fetish" tags="" position="3275,4125" size="100,100">The second fetish is a lion fetish. Thankfully, the amazons have already figured this one out: it's in the possession of a strange gambler in the den in Dornburg. Unfortunately, the amazons, poor in materiel possessions as they are, are unable to wrestle it away from him. Now it's up to you to beat this man--in gambling. [[Head to Dornburg|Dornburg]]</tw-passagedata><tw-passagedata pid="198" name="Attack the Speartons!" tags="" position="3050,4300" size="100,100">You plan an expedition with the best of the amazon strategicians. Unfortunately, neither you nor the amazons have much of a head for strategy; the amazons in general are stronger than the Speartons anyway, so a frontal attack by the amazons with you sneaking in from the backdoor seems like a totally viable plan. The amazons trust you enough--and are grateful enough for your help--to give overall control to you. <<nobr>> <<if $LunarianTropeToken is true and $BlackswordsHired is true>> You also summon the Blackswords as well as the elven Lunarian Troupe. You're not sure how well-coordinated they are, but both factions possess the strength to aid the amazons. <<set $SpeartonAllies to 2>> <<elseif $LunarianTropeToken is true>> You also summon the elven Lunarian Troupe. The elves are glad to help their amazon, uh, allies. <<set $SpeartonAllies to 1>> <<elseif $BlackswordsHired is true>> Your Blacksword mercenaries aren't quite sure why you'd want to fight the Speartons, but they're willing to aid you regardless. You're the one who put the bread on their plates, after all. <<set $SpeartonAllies to 1>> <<else>> You rue the fact that there are no allies in sight. It'll be just you and the amazons. <<set $SpeartonAllies to 0>> <<endif>> <</nobr>> In the morning, the allied forces begin to launch an all-out attack on the Speartons' camp. [[Command the battle]] <<set $SpeartonBattleProgress to 0>></tw-passagedata><tw-passagedata pid="199" name="Command the battle" tags="" position="3050,4425" size="100,100">The Speartons aren't about to stay silent as your allied forces assault their base. Even as part of the amazons hammer from the left flank, they charge forth at your bulk of forces. Clad in solid armor, the menacing Speartons line up and run with great speed. You have to decide what to do against this onslaught. [[Counter-charge!]] You can order the allied forces to counter-charge, the effectiveness of which will depend on both numbers and cohesion. [[Hold the line!]] Holding the line is a safe option, especially if you have the numbers for it. [[Retreat!]] Retreating to exhaust enemy forces and conserve your own might work--"if all else fails, retreat" as one famous strategician whose name you can't quite remember puts it. </tw-passagedata><tw-passagedata pid="200" name="Counter-charge!" tags="" position="3050,4550" size="100,100">"Attack!" you command. Your allies charge at the Speartons! <<if $SpeartonAllies is 2>> Your numerous allies charge at the Speartons like an army of bulls, battling the Speartons head on. Despite great numerical superiority, however, relative lack of coordination is causing your counter-charge to be less succesful than you expected. Nonetheless, the Speartons are sent running back to their base. <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 1>> <<elseif $SpeartonAllies is 1>> Your allies have sufficient advantages to push the enemy inch by inch. The amazons' superior individual ability shone, and they have just enough strength to send the Speartons into a disorderly retreat! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 2>> <<else>> Your scant few allies struggle to counter-charge. The Speartons are too numerous for them to simply mow down, and it almost looks like your attack will flounder before the amazons rally with a battle-cry, only barely dispersing the Speartons. The Speartons withdraw to their base, but doubtless this is the worst outcome in the opening phase of the battle that you could ever hope. <<endif>> [[Continue the attack!]]</tw-passagedata><tw-passagedata pid="201" name="Hold the line!" tags="" position="3175,4550" size="100,100">"Hold the line!" you shout orders. The allied forces follow your orders and prepare their weapons. <<if $SpeartonAllies is 2>> Your numerous allies hold their line perfectly, their superior numbers beating back the enemy assault little by little. The Speartons' attack is floundering. Arrows fly out, savage swords and elvish blades swinging around and pushing back the enemy. The Blackswords seize the opportunity, hurling themselves at the confused Speartons. The Speartons are retreating in defeat! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 3>> <<elseif $SpeartonAllies is 1>> Your allies have enough numbers to hold the line. The amazons' superior individual ability shone, and they have just enough strength to push back the Speartons into a disorderly retreat! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 2>> <<else>> Your scant few allies struggle to hold the line. The Speartons are too numerous for them to properly fight, and it almost looks like the line's buckling before the amazons rally with a battle-cry, only barely surviving the onslaught. The Speartons withdraw to their base, but doubtless this is the worst outcome in the opening phase of the battle that you could ever hope. <<endif>> [[Continue the attack!]]</tw-passagedata><tw-passagedata pid="202" name="Retreat!" tags="" position="2925,4550" size="100,100">"Retreat! Retreat and let them tire!" you shout your orders. Your allies are reluctant, but they withdraw. <<if $SpeartonAllies is 2>> Your allies' morale is severely dampened by your decision; after all, what sort of numerically and qualitatively superior army runs away unprompted? Nevertheless, the basic part of your strategy works: the allied forces' retreat causes the Speartons to exhaust themselves and be vulnerable for a counterattack. The Speartons are retreating! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 1>> <<elseif $SpeartonAllies is 1>> Your allies' morale is severely dampened by your decision; after all, what sort of numerically and qualitatively superior army runs away unprompted? Nevertheless, the basic part of your strategy works: the allied forces' retreat causes the Speartons to exhaust themselves and be vulnerable for a counterattack. The Speartons are retreating! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 1>> <<else>> Your allies retreat with the numerically superior Speartons chasing them. Your stratagem turns out to work perfectly; the overconfident Speartons chase too far and are ambushed when they grow too weary. The Speartons suffer huge casualties and are forced to retreat to their base! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 2>> <<endif>> [[Continue the attack!]]</tw-passagedata><tw-passagedata pid="203" name="Continue the attack!" tags="" position="3050,4675" size="100,100">Following your success, you order a general attack on the enemy camp. Now is the moment for you to intervene personally; the Spearton leader is coming out himself. [[Fight the Spearton leader directly|Spearton Leader Fight]] <<if $spell.includes("Arcane Bolt")>> You notice a particularly large tree branch that's on the verge of falling. Perhaps with a little nudge, you can make it fall. [[Cast Arcane Bolt]] <<endif>> </tw-passagedata><tw-passagedata pid="204" name="Spearton Leader Fight" tags="" position="3050,4800" size="100,100"><<nobr>> <<set $enemy = { name: "Spearton Leader", maxHP: 450, HP: 450, maxMP: 0, MP: 0, attack: 70, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You stride in, dagger in hand, to challenge the spearton leader! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting the spearton leader! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="205" name="Cast Arcane Bolt" tags="" position="2925,4800" size="100,100">"Heah!" You hurl an arcane bolt at the tree branch, cutting it off. The great branch fell off--the spearton leader, armed with heavy armors, can't get out of the way quickly enough. Splat! The man is crushed under the overwhelming weight of the tree branch, taking with him a good number of his fellow Speartons. The morale of the Speartons breaks! <<set $SpeartonBattleProgress to $SpeartonBattleProgress + 2>> [[Finish the battle|Spearton Battle Conclusion]] </tw-passagedata><tw-passagedata pid="206" name="Spearton Battle Conclusion" tags="" position="3000,4925" size="100,100">Surrounded, outnumbered, their leader gone, the Speartons surrender. The remaining Speartons are exiled by the amazons. The amazons are largely pleased by the return of their prized goddess fetish. Their opinion of you have greatly improved. You're exhausted, so you [[return to your camp to rest|End day 2]] <<set $AmazonRep to $AmazonRep + 4>> <<if $SpeartonBattleProgress gte 4>> Also, the amazons give you a crown made of leaves. It appears that they consider you one of them now--if only in an honorary way. Perhaps you're only imagining things, but you swear you see a flash of Sweva as you put on the crown. <<run $ability.push("Leaf-Crowned")>> <<endif>> </tw-passagedata><tw-passagedata pid="207" name="BoD 1" tags="" position="2850,575" size="100,100"><<nobr>> <<set $DornburgMeleeSquadron to 0>> <<set $DornburgRangedSquadron to 0>> <<set $DornburgMagicSquadron to 0>> <<set $DornburgCentralPower to 30>> <<set $DornburgNorthPower to 20>> <<set $DornburgSouthPower to 30>> <<set $RebelCentralPower to 150>> <<set $RebelNorthPower to 100>> <<set $RebelSouthPower to 150>> <<set $HydraPower to 100>> <<set $BoD_North to 0>> <<set $BoD_South to 0>> <<set $BoD_Central to 0>> <<if $LordVivierHelp is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 20>> <<endif>> <<if $LadyAliceHelp is true>> <<set $DornburgCentralPower to $DornburgCentralPower + 30>> <<endif>> <<if $ChurchWeakened is true>> <<set $RebelCentralPower to $RebelCentralPower - 10>> <<endif>> <<if $ArenaOverwhelmingSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 20>> <<set $DornburgCentralPower to $DornburgCentralPower + 20>> <<elseif $ArenaStrongSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 15>> <<set $DornburgCentralPower to $DornburgCentralPower + 15>> <<elseif $ArenaDecentSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 10>> <<set $DornburgCentralPower to $DornburgCentralPower + 10>> <<elseif $ArenaMinorSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 5>> <<set $DornburgCentralPower to $DornburgCentralPower + 5>> <<endif>> <<if $DornburgOverwhelmingSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 20>> <<set $DornburgCentralPower to $DornburgCentralPower + 20>> <<elseif $DornburgStrongSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 15>> <<set $DornburgCentralPower to $DornburgCentralPower + 15>> <<elseif $DornburgDecentSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 10>> <<set $DornburgCentralPower to $DornburgCentralPower + 10>> <<elseif $DornburgMinorSupport is true>> <<set $DornburgSouthPower to $DornburgSouthPower + 5>> <<set $DornburgCentralPower to $DornburgCentralPower + 5>> <<endif>> <<set $DornburgPower to $DornburgCentralPower + $DornburgSouthPower + $DornburgNorthPower>> <</nobr>> The dreaded day arrives. You are talking about the inevitable defense of Dornburg to Natalie when a rider from the King arrives. "Bad news," he says quickly. "The Church has risen up in rebellion. Multiple cities have been taken by their armies; in many cases local nobles are allied with them. It appears they've planned this for quite some time." His demeanor is unusually calm. "Don't worry. We've been preparing as well. Dornburg will be a crucial stronghold for us," Natalie says serenely. Four hours later, you are summoned to the Duke's residence. The League is there as well. You're not quite sure what just happened amidst all the tenseness, shouting, and panicked gasps, but it appears the rebel Church has sent an army from the eastern direction. This is most unusual; after all, is there even habitable places east of Dornburg? It is a domain of the dark. Natalie and you immediately head to Dornburg's center to organize a defence. Your heartbeat is doubling. "How much of a chance do you think we have?" you ask as you watch the enemy march from the east. Heavily armored knights bearing holy symbols of the Light-King, coupled with white-clad priestesses and a massive army of lay folks armed with spears and bows. <<if $DornburgPower gte 200>> "Hmm, I'd say we have a very good chance. Our army is outnumbered, of course, but we have the advantage of fighting a defense." Natalie smiles. "If anything, they should be worried." <<elseif $DornburgPower gte 150>> "Hmm, I'd say we have a good chance. Our army is badly outnumbered, of course, but we have the advantage of fighting a defense." Natalie smiles faintly. "If anything, this is almost an even match." <<elseif $DornburgPower gte 100>> "Hmm, I'd say things are not looking good at all. Our army is massively outnumbered. Even considering we're fighting a defense, it's a grim affair." Natalie frowns. "Their advantage is obvious." <<else>> "Hmm, I'd say things are terrible. Our army is extremely outnumbered. Even considering we're fighting a defense, it's a grim affair." Natalie frowns. "We're going to have a rough time." <<endif>> You nod. There is nothing else now but to observe and wait until the enemy arrives. On the meantime, your allied forces arrive in Dornburg. <<if $BlackswordsHired is true>> The Blackswords have answered your call. A combination of swordsmen and archers help defend Dornburg. You receive 1 melee squadron and 1 ranged squadron. Also, some of their forces are positioned near your camp in the north, outside your direct command. <<set $DornburgMeleeSquadron to $DornburgMeleeSquadron + 1>> <<set $DornburgRangedSquadron to $DornburgRangedSquadron + 1>> <<endif>> <<if $LunarianTropeToken is true>> The Lunarian Trope have answered your call. The elves are masters of archery and magic. You receive 1 ranged squadron and 1 magic squadron. <<set $DornburgMagicSquadron to $DornburgMagicSquadron + 1>> <<set $DornburgRangedSquadron to $DornburgRangedSquadron + 1>> <<endif>> <<if $AmazonSpear is true>> The amazon spearwomen have answered your call. These tribal warriors are experts at spear-wielding. You receive 1 melee squadron. <<set $DornburgMeleeSquadron to $DornburgMeleeSquadron + 1>> <<endif>> <<if $AmazonArcher is true>> The amazon archers have answered your call. You receive 1 ranged squadron. <<set $DornburgRangedSquadron to $DornburgRangedSquadron + 1>> <<endif>> In total, you have $DornburgMeleeSquadron melee squadrons, $DornburgRangedSquadron ranged squadrons, and $DornburgMagicSquadron magic squadron. [[Wait|BoD 2]]</tw-passagedata><tw-passagedata pid="208" name="BoD 2" tags="" position="2625,625" size="100,100">You and Natalie position yourself on the tallest watchtower. "How long have you been a Hand of the King?" you ask. "Making small talk now, are we?" Natalie says, smiling faintly. "Nine. Nine years old." "Wow ... that's early." "You've got to start early, that's how you get good Hands," Natalie says. "Training's tough, too. But it's necessary. We are diplomats, negotiators ... assassins." You chuckle a little. "Chuckling? I have already devised at least twelve ways to kill you," Natalie smirks. "Well, if you underestimate me, then I've done my job well. Maybe I can't take you in a straight fight, but I can poison the water you drink this morning, for example. Or I can hire a prostitute to lower your guard. Or I can even offer myself to you for the same purpose." "You're very shrewd, Nat," you compliment. Natalie's cheeks turn very slightly red. There isn't much time for talk. The rebel forces have arrived at the city's gates. There is a parley. "That bitch!" you curse subconsciously as you see the figure of High Priestess Selene riding a majestic white horse. "You've got issues with her, huh?" Natalie remarks. "That, I certainly do." Parley quickly breaks down. The siege engines march like a horde of beasts, hurling destruction at the city walls. They're quickly breached, and like ants the rebels pour forth. "A frontal breakthrough, I see," Natalie says. "Do you think it'll work?" <<if $DornburgCentralPower gte 60>> "I don't think so. They've breached the outer walls, but we have enough forces to counter them in the center," Natalie comments. "I don't think we need any reinforcements." <<else>> "I don't think so, but it's a bad situation. They've breached the outer walls and we don't have enough forces to counter them in the center, but they'll still be overextended. If only we have reinforcements." <<endif>> <<if $DornburgMeleeSquadron gte 1>> You have spare melee forces to throw into the meat grinder at the gate. The question is whether you should. [[Deploy reinforcements|BoD 3][$BoD_Central to $BoD_Central + 1;$BoD2Reinforcement to true]] [[Do not deploy|BoD 3]] <<else>> Unfortunately, you do not possess any reinforcements that you can deploy to the battle. [[Wait|BoD 3]] <<endif>></tw-passagedata><tw-passagedata pid="209" name="BoD 3" tags="" position="2625,750" size="100,100"><<if $DornburgCentralPower gte 60 and $BoD2Reinforcement is true>> You decide to commit some of your forces to the fray. With a temporary advantage in numbers, Dornburg's defenders push back the invading forces decisively! Unfortunately, due to lack of coordination between Dornburg's regular forces and your own, the impact is not as overwhelming as you expected. "Yes!" Natalie proclaims, forming a fist. "Good work, $name." <<set $BoD_Central to $BoD_Central + 2>> <<set $RebelCentralPower to $RebelCentralPower - 35>> <<elseif $DornburgCentralPower gte 60 and $BoD2Reinforcement isnot true>> You decide to hold back your cards for now. After all, your forces are limited. Thankfully, Dornburg's preparations are enough to force the invading forces back! "Good!" Natalie proclaims, forming a fist. <<set $BoD_Central to $BoD_Central + 1>> <<set $RebelCentralPower to $RebelCentralPower - 25>> <<elseif $DornburgCentralPower lt 60 and $BoD2Reinforcement is true>> You decide to commit some of your forces to the fray; and it was lucky that you do, as the outnumbered defenders are on the verge of breaking. Your fresh troops' charge shock the rebel Church soldiers, who are routed themselves! "Yes!" Natalie proclaims, forming a fist. "Good work, $name." <<set $BoD_Central to $BoD_Central + 1>> <<set $RebelCentralPower to $RebelCentralPower - 25>> <<else>> You decide to hold back your cards for now. After all, your forces are limited. Dornburg's weak defenses cannot hope to hold for long, and though the enemy is eventually pushed back, severe damages have been dealt. "Damn it!" Natalie curses. <<set $BoD_Central to $BoD_Central - 1>> <<set $RebelCentralPower to $RebelCentralPower - 10>> <<endif>> One way or the other, the center front is stable for now. You and Natalie catch a break together. "You know, I wonder what got them so pumped up," you say. "I know faith is a strong motivator, but still." "For some people, faith is all they have," Natalie says. "But you're right. This rebellion feels weird. Too many nobles are fighting on the Church's side, even those who're not particularly religious to the Light-King. It's almost like someone is paying them to rebel or something." The next day, you and Natalie see a concentration of rebel peasant troops massing from the southern direction. "Are they trying to pincer-attack us?" you mutter. "I suppose so," Natalie shrugs. "They'll attack and we'll defend, as usual." You wonder if that's true. <<if $DornburgMeleeSquadron gte 1 and $DornburgRangedSquadron gte 1>> You can order your forces to sortie out of Dornburg and face the enemy head-on. This will require one melee and one ranged squadron. [[Launch a sortie using a melee squadron and a ranged squadron|BoD 4][$DornburgRangedSquadron to $DornburgRangedSquadron - 1; $DornburgMeleeSquadron to $DornburgMeleeSquadron - 1;$BoD4 to 2;$BoD4_Decision to "sortie"]]<<endif>> <<if $DornburgMagicSquadron gte 1>> You can also deploy a magic squadron to harass the enemy. [[Deploy a magic squadron|BoD 4][$DornburgMagicSquadron to $DornburgMagicSquadron - 1;$BoD4 to 1;$BoD4_Decision to "magic"]] <<endif>> <<if $DornburgRangedSquadron gte 1>> You can think of an idea: strengthening the southern defences with extra archers. [[Send in archers|BoD 4][$DornburgRangedSquadron to $DornburgRangedSquadron - 1;$BoD4 to 1;$BoD4_Decision to "archer"]] <<endif>> Perhaps you should trust the defences of the south. [[Do nothing|BoD 4][$BoD4 to 0]]</tw-passagedata><tw-passagedata pid="210" name="BoD 4" tags="" position="2625,875" size="100,100"><<if $BoD4_Decision is "sortie">> A squadron of soldiers and archers march out of Dornburg's walls on your orders. Their impact remains to be seen. <<elseif $BoD4_Decision is "magic">> A few magic users strengthen the southern walls with their magic. Their impact remains to be seen. <<elseif $BoD4_Decision is "archer">> A squadron of archers join the defenders on the southern walls. Their impact remains to be seen. <<endif>> An archmage teleports into the watchtower. It is Archmage Terry, your fellow League member. "Archmage, is there something?" Natalie asks. "There is," he says. "The villagers down south are arming themselves. They're refusing to give up against the rebels without a fight. We need to help them. The rebels are constructing a stronghold." <<if $XianHelp is true>> "Also, there's a cathayan sage by the name of Xian who is helping us. She's been butchering rebels left, right, and center ... just how did she acquire that level of power? Anyways, her presence has helped us gain an advantage in the south. <<set $RebelSouthPower to $RebelSouthPower - 30>> <<else>> "Also, there's a cathayan sage by the name of Xian who is around. She's been butchering both rebels and loyalists left, right, and center ... just how did she acquire that level of power? Anyways, her presence has caused chaos in the south." <<set $RebelSouthPower to $RebelSouthPower - 30>> <<set $DornburgSouthPower to $DornburgSouthPower - 20>> <<endif>> "Oh, lastly, there seems to be some sort of fey presence in the southern forests. Though, unless you've got some kind of affinity with them, they'll likely turn against us instead." "$name, I think it's time for you to get involved directly," Natalie remarks. "What'll you do?" You ponder your options. [[Coordinate with Xian|BoD 5][$BoD5 to "Xian"]] [[Strengthen central defense|BoD 5][$BoD5 to "Central"]] <<if $spell.includes("Minor Heal")>>[[Help heal the wounded in the north|BoD 5][$BoD5 to "Heal"]] <<endif>> <<if $ability.includes("Leaf-Crowned")>> [[Parley with the fey|BoD 5][$BoD5 to "Fey"]] <<endif>></tw-passagedata><tw-passagedata pid="211" name="BoD 5" tags="" position="2500,775" size="100,100"><<if $BoD5 is "Xian">> <<if $XianHelp is true>> You head to the southern front to meet with Xian. The sage is sitting on a pile of corpses. One of her eyes glows black. "Oh, $name! This feels great!" Xian laughs. "But they're too weak. I'm not even at half power, and look at what I've done!" "If you're seeking bigger prey, the rebels have a stronghold nearby," you suggest slyly. "Why didn't you tell me earlier?!" The sage goes off with a merry laugh and a sharp glaive. Thank fuck she's on your side .... <<set $XianStronghold to true>> <<else>> You head to the southern front to meet with Xian. The sage is sitting on a pile of corpses. One of her eyes glows black. "You're $name, yes?" she laughs. "Have you come to add to the pile?" "Certainly not," you say. "I come here on behalf of the loyalists. Uh, please stop killing us." "Then stop sending them here to die!" she laughs again before going away. You return to the camp sullen, but news have it that she's begun concentrating on the rebel troops. <<set $EnemySouthPower to $EnemySouthPower - 10>> <<endif>> <<elseif $BoD5 is "Fey">> You head to the rumored grove. Immediately as you do so, a strange floral aroma hits your nose intensely. Greenish spirits come to life all around you. "Who are you to intrude upon our grove?" comes a sharp but alluring voice. "Sense the mark, sisters," another voice rings out. "He has been touched by the Enemy." "The Incubus King's magic is embedded within him, as well as the leaf crown. Now tell us human, whose side are you on?" "I'm on the side of the loyalists," you say firmly. "Church rebels have been attacking us." "Fanatics of the Light-King. Misguided and foolish, all of them," another voice mocks. "We of the wyld fae bear little affection for him." "Nor do we bear much for other humans!" yet another intercedes. "Now is not the time to think with emotions. If those fanatics triumph they'll try to exterminate us as well. Very well Leaf-crowned, we will aid you." The authoritative voice seems to have silenced the rest. Around you, clay begins to move and take shape. Bursts of fire color the air. In a matter of minutes, a small army of clay golems and fire elementals have risen. "Take the elementals to your stronghold, Leaf-crowned. Elphina's roots be upon you." You have obtained a squadron of magic fighters! <<set $DornburgMagicSquadron to $DornburgMagicSquadron + 1>> <<elseif $BoD5 is "Central">> You decide to strengthen the central defenses with barricades and tower repairs. It's not fancy work, but it'll do. <<set $DornburgCentralPower to $DornburgCentralPower + 10>> <<elseif $BoD5 is "Heal">> You decide to use your minor healing powers to help wounded and sick soldiers on all fronts. It's not fancy work, but it'll do. <<set $DornburgNorthPower to $DornburgNorthPower + 5>> <<set $DornburgCentralPower to $DornburgCentralPower + 5>> <<set $DornburgSouthPower to $DornburgSouthPower + 5>> <<endif>> There are a few days of interlude as both sides re-gathered their strength. Soon after, you detect something odd. "Wait, is that ... they're encircling us from the north!" you shout. "What?!" Natalie rises from her nap. Like ants, the rebels encroach from the northern mountains. <<if $ChurchWeakened is true>> You notice that the Church's northern forces are somewhat lackluster in numbers. Perhaps your efforts in taking out their outposts are having an impact on their war effort. <<set $DoB_North to $DoB_North + 1>> <<endif>> The issue is personal for you. If the rebels take control of the north, your camp, and all its inhabitants, would be threatened. Wiping out such a pesky force would take a lot of work, though, even if victory is assured. You'll have to deploy all your melee squadrons to flush them out--assuming you have any at all. <<if $DornburgMeleeSquadron gte 0>> [[Send reinforcements|BoD 6][$DornburgMeleeSquadron to 0;$DoB_North to 4]] <<else>> Unfortunately, you don't seem to possess any melee squadrons at your command. <<endif>> Alternatively, you can allow existing defenses in the north to do their work. [[Do nothing|BoD 6]]</tw-passagedata><tw-passagedata pid="212" name="BoD 6" tags="" position="2500,900" size="100,100"><<nobr>> <<if $BlackswordsHired is true>> The Blackswords left at the camp are fighting the encroaching northern forces. They're turning the tide against the invaders! <<set $BoD_North to $BoD_North + 1>> <<endif>> <<if $ThalestrisJoined is true>> Thalestris, the amazon you recruited, is single-handedly fending off squads of rebels. Her presence is shifting the balance to your favor! <<set $BoD_North to $BoD_North + 1>> <<endif>> <</nobr>> <<if $BoD_North gte 4>> Regardless of other factors, the reinforcements that you send are overwhelming. The rebels, knowing little of the terrain, are being forced back. ''This front has been decisively won!'' <<set $DornburgNorthFront to "best">> <<elseif $BoD_North gte 2>> The defenses of the north are holding. A few hours later, the rebels, knowing little of the terrain, are being forced back by the combined efforts of the allied armies. ''This front has been decided in your favor!'' <<set $DornburgNorthFront to "good">> <<else>> The defenses of the north are crumbling. A few hours later, the rebels, despite knowing little of the terrain, are stalemating the combined efforts of the allied armies. ''This front has been a failure.'' <<set $DornburgNorthFront to "bad">> <<endif>> Whatever the result in the north is, the focus of the battle is shifting towards the southern front. The enemy stronghold is in sight. You and Natalie head over to the southern front. So much blood and destruction choke the land. And then, the land shakes. A song spreads across the air, a song that sends chills down your spine, a song never meant to reach mortal ears. A great number of rebels run towards you. "Archers, fire at will!" Natalie orders. "No! Wait!" one of the brashest rebels shout. "We surrender!" "Archers, hold your fire!" Natalie countermands her own order. "Alright, then, I'll need all of you lot to drop your weapons--" "Please, there's no time for that--this rebellion isn't under the banner of the Light-King," he says, his face an amalgamation of terror and desperation. "It is a ploy--" The land shakes again. Bursts of dark energy storm the terrain. A three-headed black dragon arises, reeking with demonic corruption .... [[Fight for your life!|BoD 7]]</tw-passagedata><tw-passagedata pid="213" name="Talk about the fey" tags="" position="2675,3525" size="100,100">"I believe the amazons are, uh, friends with the fey." Thalestris nods. "That's correct." Back home the fey are thought to be vicious, mysterious predators; perhaps you can find a new perspective from Thalestris. "The fey worships Elphina, sister of our own goddess Sweva. So naturally we're aligned. They're distrustful of most humans, so they do look hostile," Thalestris explains. "And there really are bands of wyld fey that hunt humans and other races." "I see," you say. "Maybe, just as we don't understand them well, they don't understand us well either." Thalestris nods again. "Maybe so," she says. <<if $ability.includes("Leaf-Crowned")>> "Ah, but don't worry about it, $name. After all, you're leaf-crowned, a friend of the fey." <<endif>> [[Back|Southwestern Camp]] </tw-passagedata><tw-passagedata pid="214" name="BoD 7" tags="" position="2375,825" size="100,100"><<if $XianStronghold is true>> The sage Xian charges into the battlefield. "Alright, you cunts listen to me," she says, dumbfounding everyone. "That shit isn't something you can beat with your willy little magic. Now listen. I'll be supressing that dragon. All of you pepper it with everything you've got!" <<set $HydraPower to $HydraPower - 50>> The sage releases a whirlwind of extremely powerful fire magic, pinning down the dragon! <<elseif $XianHelp is true>> The sage Xian charges into the battlefield. "Alright, you cunts listen to me," she says, dumbfounding everyone. "That shit isn't something you can beat with your willy little magic. Now listen. I'll be pinning that dragon down. All of you pepper it with everything you've got!" <<set $HydraPower to $HydraPower - 20>> The sage releases a whirlwind of extremely powerful magic, pinning down the hydra! <<endif>> A voice speaks inside your head. "$name, can you hear me?" It's Yvette's voice! You reply mentally as well. "Yvette? How did you--" "No time for that. Listen, that thing is Malkoth, an Abyssal Lord. One of the weakest ones, but still. It needs to be stopped." "Well, no shit." "Delay it as much as possible. My Master is dispatching one of the elite succubi squads to deal with it." <<if $BoD4_Decision is "sortie">> The squadron of soldiers and archers that you sent out are helping the fight against the Abyssal Lord! <<set $HydraPower to $HydraPower - 25>> <<elseif $BoD4_Decision is "magic">> The magical reinforcement you deployed are helping the fight against the Abyssal Lord! <<set $HydraPower to $HydraPower - 15>> <<elseif $BoD4_Decision is "archer">> The archers you deployed are helping the fight against the Abyssal Lord! <<set $HydraPower to $HydraPower - 15>> <<endif>> The question now is whether to summon more reinforcements. <<if $DornburgMeleeSquadron gte 1 and $BoD7Melee isnot true>> [[Deploy melee forces|BoD 7][$HydraPower to $HydraPower - 10;$BoD7Melee to true]] <<endif>> <<if $DornburgRangedSquadron gte 1 and $BoD7Ranged isnot true>> [[Deploy archers|BoD 7][$HydraPower to $HydraPower - 15;$BoD7Ranged to true]]<<endif>> <<if $DornburgMagicSquadron gte 1 and $BoD7Magic isnot true>> [[Deploy mages|BoD 7][$HydraPower to $HydraPower - 15;$BoD7Magic to true]]<<endif>> The dragon is rampaging. There's no other choice but to help confront it yourself. [[Battle the dragon|Dragon Malkoth]]</tw-passagedata><tw-passagedata pid="215" name="Dragon Malkoth" tags="" position="2325,950" size="100,100"><<nobr>> <<set _temphp to 10000>> <<set _tempattack to 0>> <<set _tempspeed to 500>> <<set _tempcoins to 0>> <<set _tempsupplies to 0>> <<set $enemy = { name: "Malkoth", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: 10000 MP: 500 Attack: 1000 Speed: 500 You are (trying to) fighting the Abyssal Lord Malkoth. All gods help you .... <<set $bossfight to true>> <<set $MalkothTimer to 0>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="216" name="DoB 8" tags="" position="2375,650" size="100,100">So beautiful. So wonderful. The ruby-red eyes of Malkoth enchants you. And everywhere around you, the enchantment is taking over. You stay rooted as one of Malkoth's heads approach you. You stay silent-- No! You won't die. Not now. Not like this. With a deafening roar, you snap yourself out of Malkoth's trance. You draw your blackstone dagger and stab at one of Malkoth's eyes. Malkoth roars in pain. You and Malkoth stare at one another, a hatred burning deep in his many eyes. His magic forms a suppresing aura around you. "Graah!" you roar. A strange magic manifests itself around you, forming a great shield. But the translucent shield is cracking, its presence fading .... A blast of succubus magic forces it back. Ursa and Phoebe, alongside several succubi, have entered the battlefield. "Everyone, get off the battlefield. Get the Tachyon Arrow ready." The succubi conjured a flash of brilliant light. A magical arrow shoots across the battlefield, squarely piercing Malkoth's chest. The wounded Abyssal Lord vanishes into the darkness. You fall down to your knees, exhausted from the effort. <<if $HydraPower gte 70>> Malkoth's disappearance stabilizes the southern front. However, he had wrought enough destruction to render your victory ''extremely bitter''. <<set $DornburgSouthFront to "bad">> <<elseif $HydraPower gte 40>> Malkoth's disappearance stabilizes the southern front. However, he had wrought enough destruction to render your victory ''a little bitter''. <<set $DornburgSouthFront to "good">> <<else>> Malkoth's disappearance stabilizes the southern front. The allied forces successfully held him off long enough that he didn't manage to bring much destruction. Your victory is ''complete''. <<set $DornburgSouthFront to "best">> <<endif>> [[Rest for a while|DoB 9]] <<set $player.maxHP to $player.maxHP + 70>> <<set $player.maxMP to $player.maxMP + 5>> <<set $player.maxattack to $player.maxattack + 10>> <<set $player.HP to $player.maxHP>> <<set $player.attack to $player.maxattack>> <<set $player.MP to $player.maxMP>></tw-passagedata><tw-passagedata pid="217" name="DoB 9" tags="" position="2450,500" size="100,100">The succubi disappears as soon as they arrive. "I can't believe I've lived to see the day succubi are fighting with us," Natalie remarks as healers mend your and her wounds. "By the way, $name, what was that translucent shield you created?" "Honestly, I have no idea," you say. Natalie eyes you with suspicion for a full minute before dropping it with a smile. "I see." Nobody seems to really comprehend what just happened. An informal cease fire is declared for a few days as both sides regroup. There is one event of significant note: High Priestess Selene, alongside a large retinue, surrendered. She seems as if her brain had turned into jelly as she's imprisoned, muttering words such as "lies", "the Light-King", and so on. A day later, she's much stabler, so you and Natalie interrogate her. "Alright, High Priestess. Care to tell us about your rebellion?" The purple-haired Selene still looks empty inside. "It began to follow the Light-King's commands. He came in the form of a light ball and ... and he told us to build a kingdom for him here on the mortal plane." Natalie's head tilts. "B-but!" Selene is crying. "I just realized ... demonic infiltrators had corrupted the Church ... we're just in service of the dark!" The League's members barge in. "Bad news. Our central wall is being attacked!" Archmage Terry says. "What? But the rebellion has already surrendered, what--" "It's not the rebels. It's the undead!" All of you rush toward the main gate. "Argh!" you grunt in pain. Your wounds are simply too severe to continue fighting. "$name, $name, are you good?" Natalie asks with a concerned expression. "Go back and rest. We'll handle this from here." "Mmph ... alright." All the remaining forces, including ones previously under your own direct control, are deployed in an all-out battle. Unfortunately, you come down with another strange fever. [[You can only wait until you recover whilst the battle concludes|DoB 10]] <<set $BoD_Central to $BoD_Central + $DornburgMeleeSquadron + $DornburgMagicSquadron + $DornburgRangedSquadron>></tw-passagedata><tw-passagedata pid="218" name="DoB 10" tags="" position="2500,325" size="100,100">When you recover from your fever, you see Natalie waiting on you. She smiles. "Hey, $name. You're awake, I see." "Natalie ... how long have it been?" "Two days. It's not too long," she says. "What of the battle?" <<if $BoD_Central gte 4>> "Don't worry about that. We have a complete superiority, and ''we've decisively won the battle'' against the undead." <<set $DornburgCentralFront to "best">> <<elseif $BoD_Central gte 2>> "Don't worry about that. We have superiority, and ''we've cleanly won the battle'' against the undead." <<set $DornburgCentralFront to "good">> <<else>> "Don't worry about that. We have enough forces, and though it wasn't clean, ''we've won the battle'' against the undead." <<set $DornburgCentralFront to "bad">><<endif>> "I see," you say with a smile. "So the battle's over." "The war's over," she says with a slight correction. "The rebels attempted an attack on the Capital, but reports have it that they were squashed." Here Natalie's voice turns a little uncertain. "It's still a closely guarded secret, but incubus and succubus mages helped us win in the Capital by wrecking the rebels. I'm still not sure how I should think about them ... anyways, there are also many smaller uprisings but they have been put down." "Thank goodness," you mutter. "But, this is just the beginning, I feel. The dark is stirring." "Let it stir all it want. We, too, won't be silent," Natalie boasts. "On that note, I have news from the King himself. You are named Imperial Knight, and given de jure dominion over the town of Selvil, a coastal town south of Dornburg. Of course it's de facto ruled by the mayor; besides it's at least one or two months of journey from Dornburg. Also, you're cleared of all crimes." Your smile blossoms. "That's very good," you say. <<run $ability.push("Imperial Knight")>> "By the way, we sure will have a council to discuss the outcome of this rebellion," Natalie remarks. "I wonder what will happen there." [[Continue|DoB Conclusion]] <<set $CouncilInfluence to 0>> <<set $DornburgCondition to 0>> <<if $DornburgSouthFront is "best">> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<set $DornburgCondition to $DornburgCondition + 2>> <<elseif $DornburgSouthFront is "good">> <<set $CouncilInfluence to $CouncilInfluence + 1>> <<set $DornburgCondition to $DornburgCondition + 1>> <<endif>> <<if $DornburgNorthFront is "best">> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<set $DornburgCondition to $DornburgCondition + 2>> <<elseif $DornburgNorthFront is "good">> <<set $CouncilInfluence to $CouncilInfluence + 1>> <<set $DornburgCondition to $DornburgCondition + 1>> <<endif>> <<if $DornburgCentralFront is "best">> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<set $DornburgCondition to $DornburgCondition + 2>> <<elseif $DornburgCentralFront is "good">> <<set $CouncilInfluence to $CouncilInfluence + 1>> <<set $DornburgCondition to $DornburgCondition + 1>> <<endif>> <<if $LadyAliceHelp is true>> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<endif>> <<if $LordVivierHelp is true>> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<endif>> <<if $class is "Knight">> <<set $CouncilInfluence to $CouncilInfluence + 1>> <<endif>> <<if $DornburgOverwhelmingSupport is true>> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<elseif $DornburgStrongSupport is true>> <<set $CouncilInfluence to $CouncilInfluence + 1>> <<endif>> <<if $TwinsQuest is 9>> <<set $CouncilInfluence to $CouncilInfluence + 2>> <<elseif $Dahliadecision is true>> <<set $CouncilInfluence to $CouncilInfluence + 1>> <<endif>></tw-passagedata><tw-passagedata pid="219" name="DoB Conclusion" tags="" position="2625,300" size="100,100">It has been two months since the conclusion of the rebellion. For you, nothing much changes. You spend most of your time in camp, hunting down the surprisingly many rebels who still haven't stood down as well as undead remnants. Through Natalie, you hear news about Selene's fate. So heinous is the crime of her rebellion that the Kingdom will punish her severely. Before that, though, the King is holding a conference in Dornburg. Surprisingly enough, you are also invited. "It's a pretty big conference," Natalie remarks. "Neither of us will be actually attending as voters, but we'll be able to talk a few times and watch, depending on our influence, of course." "Influence?" "Well, yeah, if you have influence you can speak; if not why should the King and his courtiers pay any attention to you?" "What are the issues that will be talked about?" "A whole bunch. Aid for previously marginalized arcane magic groups, how the Church will be treated from now on, even the legalization of prostitution, last I hear." "I wonder how much influence I have," you say. "I know you'll want to know that, so I took the liberty of quantifying it," Natalie says with a smirk. "Overall, you have $CouncilInfluence points of influence. This is evaluated via the result of the battle in Dornburg and your connections with local nobles as well as popularity with the people." <<if $CouncilInfluence gte 13>> "I have to say, you're extremely influential for a nobody in terms of rank." <<elseif $CouncilInfluence gte 8>> "I have to say, you're very influential for a nobody in terms of rank." <<elseif $CouncilInfluence gte 3>> "It's quite a decent amount of influence, in my opinion." <<else>> "Eeh, it's pretty bad. Just stay back and watch, don't even bother trying to do anything." <<endif>> <<if $Dahliadecision is true>> Just before you enter the meeting building--the Count Dorn's mansion--Dahlia, wearing her best dress, comes up to you. "Dahlia? What are you doing here?" you ask. Dahlia smiles and gets to the point immediately. "$name, I heard there's a proposal to legalize prostitution. I'd like you to help pass it," she says. "At this current state, we're being marginalized and abused left, right, center without being able to launch complaints. In exchange, I've talked with the local underground prostitute guild to support you. Many nobles are their clients, so the impact should be noticable. I'll be talking as well." "I'll do all I can, Dahlia," you say with a smile. <<endif>> You enter the council room and seat yourself on the chair for guests. The King and a number of nobles are seated on a round table. You are a little late. [[Hear the first issue|Council 1]]</tw-passagedata><tw-passagedata pid="220" name="Council 1" tags="" position="2625,425" size="100,100">The steward of the King, that is, the leader of all Hands of the King, stands up to introduce the four main participants of the council. The King himself is only the leader of the council. These four are Duchess Anastasia, Duke Gerlach, Duke Amphora, and Duke Brandenburg. Sitting high and mighty, all four seem to look upon the common folk with some disdain. "Natalie, can you tell me about them?" you whisper. "Sure," Natalie whispers back. "Duke Brandenburg is a relative of Viscountess Alice von Brandenburg. He's poor, so he's dependent on Viscountess Alice's financial support, and therefore is basically her puppet." "Duke Gerlach is a hard-line traditionalist, and an ardent supporter of the Church. He's an idealist, so don't expect to make deals with him." "Duke Amphora is a more open-minded man, and often opposes Duke Gerlach. He's friendly enough, but who knows how he'll steer this council. I reckon he's the strongest among the four dukes, politically and financially." "Duchess Anastasia's family has been producing hedonists as family leaders for many generations. Their ore-based wealth is thinning. She'll likely try to secure financial support in this council under the guise of war reparations." The steward announces four major issues for today: 1. Treatment towards the Church of the Light-King 2. Tolerance of other religions 3. The issue of former High Priestess Selene 4. The war spoils After the introductions, there is a lapse of a few hours, so you decide to go out and have some fresh air, as the council building is rather stuffy. That's when a manservant comes to speak with you. <<if $LadyAlicemet is true>> You recognise him as Lady Alice's servant. He likewise slightly bows to acknowledge you. "I come with a proposal." <<else>> "I am a servant of Lady Alice von Brandenburg and her relative, Duke Brandenburg. I come with a proposal." <<endif>> You nod slightly. "Go on." "The viscountess is interested in a number of proposals that may float onto the surface. Namely, the issue of tolerance of other religions. It is one that we support. However, it is unlikely to fully pass. If you can lend a hand, we'll reciprocate. Now, ... good day." You return to the council building. "The first issue is about treatment of the Church of the Light-King," the steward says. "There really are only two choices: continue full support, or to begin limiting our support," the King states. "It is obvious that we should continue treating them as usual--complete patronage! The actions of followers are not set in stone, but doctrine is static!" Duke Gerlach proclaimed. "After what happened? Unconditional support like that is what causes this entire mess in the first place," Duke Amphora says calmly. "I support limited support for the Church." //So it's equal, it seems.// You look around at the two remaining dukes. "Can we really afford to monetarily support them so much? Now we must rebuild what they have destroyed in the rebellion," Duchess Anastasia states. "I'm with Duke Amphora on this one." "I'm neutral. I see no reason to be involved in this," Duke Brandenburg states passively. The King, too, stays neutral. You don't think you have any opportunity to interfere. "The motion to limit support for the Church of the Light-King passes; 2 in favor, 1 against, 2 abstain. Attendees, please enjoy a ten minute rest session ...." The steward looks a little pale looking at Duke Gerlach raging. You find a letter at your seat with a small medallion in it. It reads: "Salutations, Imperial Knight $name. Bearing the name of Duchess Anastasia Graversen, I offer you a proposal. We shall support you in the following vote if you are to support us in a vote regarding rebel war vaults. Wear this medallion if you are interested." [[Continue to the second issue|Council 2]]</tw-passagedata><tw-passagedata pid="221" name="Council 2" tags="" position="2775,250" size="100,100">"So, the second issue ... freedom of religion. How do you think it'll go?" you whisper. If nothing else, you'll want this issue to ''pass'' to gain Brandenburgs' assistance. "Tough nut to crack. Most will just follow the status quo. It won't pass unless you do some manipulation. " "Second issue: religious freedom. This motion states that all subjects of the Kingdom may worship freely," the steward states. Judging your influence, you have a number of options. <<if $CouncilInfluence gte 2 and $Council2Speak1 isnot true>> [[Speak directly in favor of religious freedom|Council 2 Speak][$CouncilInfluence to $CouncilInfluence - 2 ;$Council2Speak1 to true;$Council2Speak to "direct"]] Speaking directly in favor of religious freedom will cost you 2 influence. <<endif>> <<if $CouncilInfluence gte 2 and $Council2Speak2 isnot true>> [[Appeal to Duke Amphora|Council 2 Speak][$CouncilInfluence to $CouncilInfluence - 2;$Council2Speak2 to true;$Council2Speak to "appeal"]] You can try to take advantage of Duke Amphora's rivalry with Duke Gerlach by antagonizing the latter. This will cost you 2 influence. <<endif>> <<if $Council2Speak3 isnot true>> [[Wear the medallion|Council 2 Speak][$Council2Speak3 to true;$Council2Speak to "medallion"]] You can wear the medallion that Duchess Anastasia gave you. <<endif>> [[Enough|Council 2 Result]]</tw-passagedata><tw-passagedata pid="222" name="Council 2 Speak" tags="" position="2975,275" size="100,100"><<if $Council2Speak is "direct">> "Imperial Knight $name, you are permitted to tell your opinion." "Thank you, Steward. I believe, for a just management of the Kingdom, it is important for us to have religious freedom. I do not believe it is harmful at all; rather, it provides a sense of freedom and fulfilment for the people. There is no right for the Church of the Light-King's doctrine to be pressed upon the people." <<set $KingVote2 to "yes">> <<elseif $Council2Speak is "appeal">> "Imperial Knight $name, you are permitted to tell your opinion." "Thank you, Steward. I believe efforts against this motion is based on nonsensical bigotry and discrimination," you say, your eyes sharply piercing at Duke Gerlach. "I urge for the passing of the motion." Duke Amphora openly claps your stance. <<set $DukeGerlachOffended to true>> <<set $DukeAmphoraHappy to true>> <<elseif $Council2Speak is "medallion">> You silently wear the medallion. Duke Anastasia smiles slightly. <<set $MedallionWorn to true>> <<endif>> [[Sit again|Council 2]]</tw-passagedata><tw-passagedata pid="223" name="Council 2 Result" tags="" position="2925,100" size="100,100">"Your Majesty and Your Graces, please express your opinions." <<set $Council2Yes to 0>> <<set $Council2No to 0>> <<set $Council2Abstain to 0>> <<if $KingVote2 is "yes">> "I am in favor of this motion," the King says simply. <<set $Council2Yes to $Council2Yes + 1>> <<else>> "I neither favor nor oppose this motion," the King says simply. <<set $Council2Neutral to $Council2Neutral + 1>> <<endif>> <<if $MedallionWorn is true>> "I support the motion," Duchess Anastasia says lifelessly. <<set $Council2Yes to $Council2Yes + 1>> <<else>> "I neither favor nor oppose this motion," the Duchess says lifelessly. <<set $Council2Neutral to $Council2Neutral + 1>> <<endif>> "This motion is outrageous! What now, are we allowing cultists and heretics? NO!" Duke Gerlach raged. <<set $Council2No to $Council2No + 1>> <<if $DukeAmphoraHappy is true>> "This is certainly an interesting motion. I think I'll throw my support behind it," Duke Amphora says, blinking at you. <<set $Council2Yes to $Council2Yes + 1>> <<else>> "This is certainly an interesting motion, but I'm not sure if the people will accept it," Duke Amphora says. "I'll abstain." <<set $Council2Abstain to $Council2Abstain + 1>> <<endif>> "I support this motion whole-heartedly," Duke Brandenburg states with no vitality or whole-heartedness whatsoever. <<set $Council2Yes to $Council2Yes + 1>> "Very well. In total, there are $Council2Yes votes in favor, $Council2No votes against, and $Council2Abstain abstain votes." <<if $Council2Yes gt $Council2No>> "In conclusion, this motion passes!" <<set $ReligiousFreedom to true>> Lady Alice von Brandenburg smiles at you. <<else>> "In conclusion, this motion does not pass!" <<set $ReligiousFreedom to false>> Lady Alice von Brandenburg frowns at you. <<endif>> You have $CouncilInfluence influence left. [[On to the next issue|Council 3]]</tw-passagedata><tw-passagedata pid="224" name="Council 3" tags="" position="3150,125" size="100,100">"On to the third issue of the day: what should be done with former High Priestess Selene. After careful legal examination, it comes down to two choices: execution or indentured servitude. There's another subissue as well: if indentured servitude, who would own her?" "On the second point, I suggest we make Imperial Knight $name the beneficiary," the King says. "He's harmed directly by former High Priestess Selene's machinations, and has also been very helpful in Dornburg." You are taken aback by that. "You're a minor player ... the King wants to avoid Selene going to one of the four dukes and upsetting the balance," Natalie whispers. "On this motion, it's tough to say. It can go either way." It appears that you'd be unable to influence this motion directly, since you're likely to be the beneficiary. <<if $CouncilInfluence gte 7 and $Council3Speak isnot true>> "You know, if you have influence to burn, I can make a direct appeal to the King and win you Selene immediately," Natalie says. "I'll need ... 7 influence." [[Burn influence|Council 3][$Council3Speak to true;$CouncilInfluence to $CouncilInfluence - 7]] <<elseif $Council3Speak is true>> Natalie has put in a good word with the King for you. <<endif>> Another thing you notice is the Dornburg residents standing around. It seem s like they regard you as somewhat of a hero, 'the man who fought the dragon', and support you. Even the King seems a little anxious looking at them. [[Enough|Council 3 Result]]</tw-passagedata><tw-passagedata pid="225" name="Council 3 Result" tags="" position="3350,75" size="100,100"><<set $Council3Yes to 0>> <<set $Council3No to 0>> <<set $Council3Abstain to 0>> <<if $Council3Speak is true>> "I'm afraid I will override this motion. Former High Priestess Selene will be forced into indentured servitude under the ownership of Imperial Knight $name." This issue doesn't seem too important for anyone, anyways. <<set $Selene to "slave">> <<else>> <<if $DornburgStrongSupport is true or $DornburgOverwhelmingSupport is true>> "Looking at the number of people around, it seems that Imperial Knight $name has popular support." "Yes, that's true!" one of the residents shout before being silenced by a guard. <<set $Council3Yes to $Council3Yes + 1>> The King laughs a little. "Very well. I will support indentured servitude." <<else>> "I do not think it matters either way what the punishment is. I will abstain," the King says. <<set $Council3Abstain to $Council3Abstain + 1>> <<endif>> <<if $DukeGerlachOffended is true>> "I think indentured servitude is the most punishing outcome we can give. It is certainly one I favor," he says. Then he flashes a malevolent smile at you. "However, I think it's time for peace. Let's execute her and leave it at that." <<set $Council3No to $Council3No + 1>> <<else>> "I think indentured servitude is the most punishing outcome we can give. It is certainly one I favor," he says. "I say we punish her as harshly as possible." <<set $Council3Yes to $Council3Yes + 1>> <<endif>> <<if $MedallionWorn is true>> "I support indentured servitude. Let's show rebels what we do to their leaders," Duchess Anastasia states. It seems she's giving you a favor. <<set $Council3Yes to $Council3Yes + 1>> <<else>> "She must be punished, but I don't care much as to how. I will abstain," Duchess Anastasia states. <<set $Council3Abstain to $Council3Abstain + 1>> <<endif>> <<if $ReligiousFreedom is true>> "Indentured servitude sounds fine. I'll support it. Less flashy than executions, too," Duke Brandenburg says. <<set $Council3Yes to $Council3Yes + 1>> <<else>> "Let's execute her. Much cleaner and faster that way," Duke Brandenburg says. <<set $Council3No to $Council3No + 1>> <<endif>> <<endif>> "I don't care. I'll abstain," Duke Amphora says off handedly. <<set $Council3Abstain to $Council3Abstain + 1>> "Very well. In total, there are $Council3Yes votes in favor of indentured servitude, $Council3No votes in favor of execution, and $Council3Abstain abstain votes." <<if $Council3Yes gt $Council3No>> "In conclusion, former High Priestess Selene will be made an indentured servant for Imperial Knight $name." <<set $Selene to "slave">> <<elseif $Council3Speak is true>> "In conclusion, former High Priestess Selene will be made an indentured servant for Imperial Knight $name." <<set $Selene to "slave">> <<else>> "In conclusion, former High Priestess Selene will be executed. <<set $Selene to "executed">> <<endif>> You have $CouncilInfluence influence left. [[On to the next issue|Council 4]]</tw-passagedata><tw-passagedata pid="226" name="Council 4" tags="" position="3350,200" size="100,100">"Fourth issue: the war spoils of the rebellion. We have confiscated great amounts of wealth from rebelling nobles and clergy. The question is how to distribute it." "Should this even be a debate? Distribute it equally to everyone," Duchess Anastasia says, managing to sound very enthusiastic. "It's an opportunity to rebuild and improve Walshemia." "The damaged areas are really just Dornburg and the Capital, though. Shouldn't we use the funds to repair those two cities, and then save the rest for later? This is a great chance to replenish royal treasury," Duke Amphora says. "What do you think?" you whisper. "Duchess Anastasia is blatantly angling for financial reinforcement. It'll take a lot of effort to convince others to support this," Natalie whispers back. "Are you interested to shift things? I wouldn't. You'd get a small cut of the war spoils but I don't think it's worth the effort you have to expend." <<if $MedallionWorn is true>> Be as it may, you don't think reneging on your promise to Duchess Anastasia is wise. <<endif>> Another notable personage is Lord Vivier, who is sitting nearby. You chat with him for a while. Considering your $CouncilInfluence influence, there are some options available to you: <<if $CouncilInfluence gte 3 and $Council4peak1 isnot true>> [[Appeal to Duke Amphora|Council 4 Speak][$CouncilInfluence to $CouncilInfluence - 3;$Council4Speak1 to true;$Council4Speak to "appeal"]] Try to appeal to Duke Amphora (his ancestor once distributed war spoils to the nobles and people after winning a war against bandits); will cost 3 influence. <<endif>> <<if $CouncilInfluence gte 4 and $Council4Speak2 isnot true>> [[Argue from an economic point of view|Council 4 Speak][$CouncilInfluence to $CouncilInfluence - 4;$Council2Speak2 to true;$Council4Speak to "direct"]] You can try arguing from an economic point of view; about how the money could boost local economy and blahblahblah. <<endif>> <<if $nagakilled is true and $Council4Speak3 isnot true>> [[Summon Lord Vivier|Council 4 Speak][$Council4Speak3 to true;$CouncilInfluence to $CouncilInfluence - 1;$Council4Speak to "Vivier"]] Lord Vivier's gratitude to you for avenging the naga extends to this council and he's willing to speak his mind to the King and the dukes. Unfortunately, you'll still have to spend 1 influence to allow him to speak. <<endif>> [[Enough|Council 4 Result]]</tw-passagedata><tw-passagedata pid="227" name="Council 4 Speak" tags="" position="3400,325" size="100,100"><<if $Council4Speak is "direct">> "Imperial Knight $name, you are permitted to tell your opinion." "Thank you, Steward. I believe, economically, the best path forward is to utilize the war spoils for the good of the people. Gold in the treasury only gathers dust, but in the hands of the market it can greatly improve livelihoods." <<set $KingVote4 to "yes">> <<elseif $Council4Speak is "appeal" and $DukeAmphoraHappy is true>> "Imperial Knight $name, you are permitted to tell your opinion." "Thank you, Steward. I'd like to bring up a policy by Your Grace Duke Amphora's own father, who after destroying bandits in his realm distributed the war spoils. This led to immense popularity, and economic wheels could turn once more. The people became rested and the nobles were satisfied. It was a very good ending for everyone--excluding the bandits," you say, "with that in mind, I believe we should copy from Your Grace Duke Amphora's father." Duke Amphora seems greatly pleased by your praise of his father. <<set $DukeAmphoraSuperHappy to true>> <<elseif $Council4Speak is "appeal" and $DukeAmphoraHappy isnot true>> "Imperial Knight $name, you are permitted to tell your opinion." "Thank you, Steward. I'd like to bring up a policy by Your Grace Duke Amphora's own father, who after destroying bandits in his realm distributed the war spoils. This led to immense popularity, and economic wheels could turn once more. The people became rested and the nobles were satisfied. It was a very good ending for everyone--excluding the bandits," you say, "with that in mind, I believe we should copy from Your Grace Duke Amphora's father." Duke Amphora seems greatly pleased by your praise of his father. <<set $DukeAmphoraHappy to true>> <<elseif $Council4Speak is "Vivier" and $DornburgCondition gte 3>> Lord Vivier enters the scene and talks about economic ... things. You're not very well-versed in many--scratch that, any of the lingo he's deploying. With Dornburg and the Capital in good condition, it seems he's managed to shift the perspective of, in particular, Duke Brandenburg. <<set $BrandenburgConvinced to true>> <<elseif $Council4Speak is "Vivier" and $DornburgCondition lt 3>> Lord Vivier enters the scene and talks about economic ... things. You're not very well-versed in many--scratch that, any of the lingo he's deploying. With Dornburg and the Capital in bad condition, it seems he's managed to shift the perspective of, in particular, Duke Brandenburg. To the opposite direction, that is. <<set $BrandenburgConvinced to false>> <<endif>> [[Sit again|Council 4]]</tw-passagedata><tw-passagedata pid="228" name="Council 4 Result" tags="" position="3550,225" size="100,100">"Your Majesty and Your Graces, please express your opinions." <<set $Council4Yes to 0>> <<set $Council4No to 0>> <<set $Council4Abstain to 0>> <<if $KingVote4 is "yes">> <<if $DornburgCondition gte 5>> "I see. The way I understand it, I think we can distribute the spoils to the nobility and people," he says. <<set $Council4Yes to $Council4Yes + 1>> <<else>> "I'm still conflicted. There are good and bad things on both sides. I'll abstain," he says. <<set $Council4Abstain to $Council4Abstain + 1>> <<endif>> <<else>> <<if $DornburgCondition gte 5>> "I'm still conflicted. There are good and bad things on both sides. I'll abstain," he says. <<set $Council4Abstain to $Council4Abstain + 1>> <<else>> "I see. The way I understand it, I think we must play our cards conservatively and keep the war spoils unused," he says. <<set $Council4No to $Council4No + 1>> <<endif>> <<endif>> <<if $DukeAmphoraSuperHappy is true>> "This is time for merriment, the war is over! Open the war spoils and share it with the nobility and the people!" Duke Amphora declares; he barely seems sober after you appeal to him so much. <<set $Council4Yes to $Council4Yes + 1>> <<elseif $DukeAmphoraHappy is true>> "Hmm, too many factors are at play here. I'd rather abstain," Duke Amphora says. <<set $Council4Abstain to $Council4Abstain + 1>> <<else>> "This is not time for merriment, even if the war is over. Keep the war spoils closed for future crises," Duke Amphora says. <<set $Council4No to $Council4No + 1>> <<endif>> "This motion is outrageous! Blatant opportunism! To this motion I say NO!" Duke Gerlach raged. <<set $Council4No to $Council4No + 1>> "I support this motion, naturally," Duchess Anastasia states with unparalled enthusiasm. <<set $Council4Yes to $Council4Yes + 1>> <<if $BrandenburgConvinced is true>> "Judging from our condition, we're in good shape to use the war spoils like this. I support the motion to spend them," Duke Brandenburg says. <<set $Council4Yes to $Council4Yes + 1>> <<elseif $BrandenburgConvinced is false>> "Judging from our condition, we're in no shape to use the war spoils like this. We should keep them," Duke Brandenburg says. <<set $Council4No to $Council4No + 1>> <<else>> "I'm not sure about my decision, but I think I'm abstaining," Duke Brandenburg says. <<set $Council4Abstain to $Council4Abstain + 1>> <<endif>> "Very well. In total, there are $Council4Yes votes in favor of spending the war spoils, $Council4No votes in favor of keeping the war spoils, and $Council4Abstain abstain votes." <<if $Council4Yes gt $Council4No>> "In conclusion, the motion to spend war spoils passes!" <<set $WarSpoils to true>> Duchess Anastasia is greatly pleased. <<else>> "In conclusion, the motion to keep the war spoils passes!" <<set $WarSpoils to false>> Duchess Anastasia is not pleased. <<endif>> You have $CouncilInfluence influence left. [[On to the next issue|Council 5]]</tw-passagedata><tw-passagedata pid="229" name="Council 5" tags="" position="3550,350" size="100,100">You take a short moment to consolidate your influence. <<if $Council5First isnot true>> <<set $Council5First to true>> <<if $CouncilInfluence lt 2>> Natalie is lending some of her influence to you. <<set $CouncilInfluence to 2>><<endif>> <<if $DukeAmphoraSuperHappy is true>> Duke Amphora takes some time to chat with you. Even this is enough to signal your influence. <<set $CouncilInfluence to $CouncilInfluence + 3>> <<elseif $DukeAmphoraSuperHappy is true>> Duke Amphora takes some time to chat with you. Even this is enough to signal your influence. <<set $CouncilInfluence to $CouncilInfluence + 1>> <<endif>> <<if $MedallionWorn is true and $WarSpoils is false>> The furious Duchess Anastasia's subordinates seem to have spread unsavory rumors about you. <<set $CouncilInfluence to 0>> <<elseif $MedallionWorn is true and $WarSpoils is true>> The relieved Duchess Anastasia's subordinates seem to have spread savory rumors about you. <<set $CouncilInfluence to $CouncilInfluence + 1>> <<endif>> <<endif>> Now that the major issues are cleared, the council can move to "minor" issues. Unlike before, the proceedings of these minor issues are usually chaotic since the results are decided by the King alone. The minor issues are: 1. Legalization of prostitution 2. Support for arcane magic You have $CouncilInfluence influence left. <<if $CouncilInfluence gte 2 and $Council5Speak isnot true>> [[Support legalization of prostitution; cost: 2 influence|Council 5][$Council5Speak to true;$CouncilInfluence to $CouncilInfluence - 2]] <<endif>> <<if $CouncilInfluence gte 4 and $Council5Speak2 isnot true>> [[All-in support for legalization of prostitution; cost: 4 influence|Council 5][$Council5Speak2 to true;$CouncilInfluence to $CouncilInfluence - 4]] <<endif>> <<if $CouncilInfluence gte 2 and $Council6Speak isnot true>> [[Support aid for arcane mages; cost: 2 influence|Council 5][$Council6Speak to true;$CouncilInfluence to $CouncilInfluence - 2]] <<endif>> <<if $CouncilInfluence gte 4 and $Council6Speak2 isnot true>> [[All-in support for aid for arcane mages; cost: 4 influence|Council 5][$Council6Speak2 to true;$CouncilInfluence to $CouncilInfluence - 4]] <<endif>> [[Enough|Council 5 Result]] </tw-passagedata><tw-passagedata pid="230" name="Council 5 Result" tags="" position="3550,475" size="100,100"><<set $Council5Support to 0>> <<set $Council6Support to 0>> <<if $Council5Speak is true>> Your support for legalization of prostitution is making an impact! <<set $Council5Support to $Council5Support + 3>> <<endif>> <<if $Council5Speak2 is true>> Your strong support for legalization of prostitution is making a big impact!<<set $Council5Support to $Council5Support + 7>> <<endif>> <<if $Council6Speak is true>> Your support for arcane mages is making an impact!<<set $Council6Support to $Council6Support + 3>> <<endif>> <<if $Council6Speak2 is true>> Your strong support for arcane mages is making a big impact!<<set $Council6Support to $Council6Support + 7>> <<endif>> <<if $Dahliadecision is true>> Dahlia is busy running around, gathering support for the legalization of prostitution. <<set $Council5Support to $Council5Support + 3>> <<endif>> <<if $class is "Novice">> Your status as a novice of the arcane magic guild is playing in favor of the sixth motion. <<set $Council6Support to $Council6Support + 1>> <<endif>> <<if $DornburgCondition gte 4>> Arcane mages made a big impact during the battle in Dornburg and that is causing a positive sentiment towards them. <<set $Council6Support to $Council6Support + 2>> <<endif>> The politicking takes quite some time, but the day after you receive the results: <<if $Council5Support gte 9>> "Prostitution has been completely legalized, under supervision of local nobles. Both brothel prostitutes and street walkers are legal." <<set $ProstitutionLegal to true>> <<else>> "Prostitution has been partially legalized. Brothels are legal, but street walkers are not." <<set $ProstitutionLegal to false>> <<endif>> <<if $Council6Support gte 9>> "The Crown will completely support the Arcane Guild, including recognition and significant financial support." <<set $ArcaneSupport to "best">> <<elseif $Council6Support gte 5>> "The Crown will support the Arcane Guild, including recognition and some financial support." <<set $ArcaneSupport to "good">> <<else>> "The Crown will acknowledge the existence of the Arcane Guild but offer no financial support." <<set $ArcaneSupport to "bad">> <<endif>> [[Finish the council]]</tw-passagedata><tw-passagedata pid="231" name="Finish the council" tags="" position="3550,600" size="100,100">You step out of the council. Whatever the results are, you're glad the war has ended. The clouds look restless today. You see undead bodies being re-buried. You aren't sure what the future holds, but it doesn't look all fine. Though, it doesn't look all bad either. <<if $WarSpoils is true>> You are given your part of the war spoils: 1500 coins and 400 supplies, as well as a strange stone that got pawned off at random. Brilliant. <<set $player.coins to $player.coins + 1500>> <<set $player.supplies to $player.supplies + 400>> <<set $DepthStone to true>> <<endif>> <<if $Selene is "slave">> You receive word that Selene has been delivered to your camp. <<set $SeleneQuest to 0>> <<endif>> <<set $MainQuest to 10>> [[Back to camp|New Camp]] </tw-passagedata><tw-passagedata pid="232" name="Thalestris Cuddle" tags="" position="2525,3700" size="100,100">You and Thalestris take some time alone in her tent to relax. Your naughty hands caress her muscular thighs before taking off her loincloth. Her lips mooch all over your face even as you play with her nipples. "$name, play with my wet pussy, please," Thalestris pleads. The amazon's meaty pussy becomes your personal plaything. You flick her long clitoris. "Mmh!" Thalestris moans as she orgasms, her pussy leaking juices. "Oh! You're good with your fingers, $name. I'll return the favor." Thalestris' firm hand grabs your cock and begins pumping it. Your soft bed is creaking. Thalestris' scent is driving you lustful. The two of you share a passionate kiss as your bodies rub against one another. Thalestris' hands caress your short hair. "You're beautiful, Thalestris," you compliment her as you rub your cock on her drenched pussy. Thalestris doesn't reply. Instead, she continues hugging you tighter. "Cum for me, $name," she whispers gently. As you return the amazon's hug, your cock belches out white sperm on Thalestris' thighs. [[Back|Ask for sex]]</tw-passagedata><tw-passagedata pid="233" name="Thalestris Femdom" tags="" position="2462.5,3800" size="100,100">Suddenly, Thalestris pins you down with her strength! Your combat instincts almost activate, but her grin makes you stop. She aggressively takes off your clothes before throwing away her own loincloth. "Whoa, you're taking a lot of initiative today, Thalestris." "Shut up, today you're just a meat stick!" Thalestris immediately mounts herself atop your cock and begins wildly riding on it. Your erect cock is treated to her tight meat walls. "Yes, you make an adequate meat stick!" Thalestris says. Thalestris orgasms, her juices spurting out everywhere. She gets off and grabs your still erect cock roughly. "Cum, you manslut!" Your white, pearly sperm shoots out of the tip. Thalestris moves forward quickly, shoving her wet, meaty pussy at your face. You extend your tongue to lick Thalestris' snatch. "You're the perfect cuntlicker, $name!" Your licking brings Thalestris to orgasm. You enjoy drinking her juices as she lays herself resting next to you. [[Back|Southwestern Camp]] </tw-passagedata><tw-passagedata pid="234" name="Thalestris Anal" tags="" position="2600,3800" size="100,100">"M-my asshole?" Thalestris confirms. "You city folk have such strange traditions. But I'm willing to give it a shot." Thalestris lays down on the bed and opens her legs, revealing both her hairy snatch and her tight anus. ""What's the appeal anyways?" Thalestris asks as you use your spit to lube up her backdoor. "It's tighter than vaginas, for one," you say. "You're saying my pussy isn't tight enough for you?" Thalestris asks, a shade of red creeping on her brown face. "Not at all. Your pussy is plenty tight, so imagine how tight your asshole must be," you say as you penetrate her anus. "Mmh, fine," Thalestris concedes. She's beginning to enjoy anal sex as well, and it shows; her face is burning red as you fuck her ass. "Alright, it's not bad," Thalestris says while moaning and holding the bedsheets. Her tight asshole hugs you like a constrictor snake, pressuring your cock from all sides. You feel your orgasm coming soon. "Nngh!" you grunt as you unload your sticky sperm deep inside Thalestris' ass. "So, is it really tighter than my pussy?" "It is. Thanks for letting me fuck your ass, Thalestris." [[Back|Southwestern Camp]] </tw-passagedata><tw-passagedata pid="235" name="Personal Camp Section" tags="" position="3200,2025" size="100,100">You enter your comfortable tent and rest for a while. <<if $TeleportStone is true>> [[Use teleport stone|Teleport Room]] <<endif>> <<if $Selene is "slave">> Due to the destruction from the war, a conveniently large hole had been created during the conflict. You repurpose the manmade cave into a prison cell for your slave--er, indentured servant--Selene, former High Priestess of the Church of the Light-King. [[Visit Selene]] <<endif>> <<if $JharinaRecruited is true>> You've erected a rather special tent for Jharina to live in. [[Visit Jharina]] <<endif>> <<if $SeleneJharinaJealousyQuest is 3>> You should [[punish your misbehaving slaves|Selene Jharina Jealousy Quest]] <<elseif $SeleneJharinaJealousyQuest is 4>> [[Check on your slaves|Selene Jharina Jealousy Quest]] <<endif>> [[Back|New Camp]]</tw-passagedata><tw-passagedata pid="236" name="Teleport Room" tags="" position="2400,2800" size="100,100"><<if $TeleportSelvil is true>> [[Teleport to Selvil|Selvil]] <<endif>> [[Teleport to Dornburg|New Camp]] <<if $TeleportKlatsch is true>> [[Teleport to Klatsch|Klatsch]] <<endif>> <<if $PrivateArmy is true>> [[Visit your private army's camp|Private Army Camp]] <<endif>> <<if $HaremUnlockedFirstTalk is true>> [[Check your harem|Harem]] <<endif>></tw-passagedata><tw-passagedata pid="237" name="Selvil" tags="" position="2450,5450" size="100,100">Selvil. It is an island town in the southern part of Walshemia. The town feels somewhat sullen, despite the heat of the scorching sun. During the civil war, Church rebels ravaged the island, but was pushed back. [[Visit the Mayor]] Yvette has set up a personal office nearby. [[Visit Yvette]] <<if $BrothelQuest gte 3>> The brothel has been built and approved. [[Visit brothel|Selvil Brothel]] <<endif>> Selvil is plagued by one major issue: pirate ships often prey on the merchant ships that are the lifeblood of Selvil. Yvette has provided you a warship to [[hunt down the pirates|Selvil Pirates]]. You can also visit your personal warship. [[Go to the harbor|Selvil Harbor]] <<if $SelvilRep gte 500 and $ReligiousFreedom is true and $ArachneFirstMeeting isnot true>> You receive a letter from a religious community calling themselves the Cult of Arachne asking you to [[visit their hideout|Arachne Hideout]]. <<elseif $SelvilRep gte 500 and $ArachneFirstMeeting isnot true>> You receive a very secret letter from a forbidden religious community calling themselves the Cult of Arachne asking you to [[visit their hideout|Arachne Hideout]] <<endif>> <<if $ArachneFirstMeeting is true>> [[Visit the Arachne Cult|Arachne Cult]] <<endif>> <<if $ThalestrisQuest is 2>> Thalestris has come with you to [[hunt down the skinwalker|Skinwalker First Fight]] <<endif>> <<if $SeleneReligionQuest is 4>> Yvette has acquired an old building for basically nothing. It should serve well enough as a headquarters for the purpose of spreading Selene's philosophy. [[Visit the building|Selene Religion Quest 2]] <<elseif $SeleneReligionQuest gte 5>> [[Visit the Mahogany House|Selene Religion Quest 2]] <<if $player.coins gte 15>> [[Explore Selvil]] <<else>> You'd like to explore Selvil, but you should probably get a few coins. Wouldn't be good for the Knight of Selvil to go around being broke. <<endif>> <<endif>> [[Use teleport stone|Teleport Room]] <<if ndef $SelvilRep>> <<set $SelvilRep to 0>> <<endif>> <<if ndef $GoblinSlave>> <<set $GoblinSlave to 0>> <<endif>> <<if ndef $ArachneToken>> <<set $ArachneToken to 0>> <<endif>></tw-passagedata><tw-passagedata pid="238" name="Visit Selene" tags="" position="3450,1725" size="100,100"><<if $SeleneQuest is 0>> "Ah, how the mighty have fallen," you say. "High Priestess." "Just get it over with," Selene says with an empty stare. "You're after my body, right? Take it if you want. I don't care anymore." "Oh dear, you're making this not fun," you taunt. Empty silence is her reply. "I've been working my whole life to be a priestess," she says finally. "And now it's gone. There's nothing left for me." "I understand. Well, then, you'll just need to find a new purpose in life," you say. "Easy for you to say!" "Why don't you be a proper fucktoy, then?" you tease. "What did you just say?" "It is as you say. After what you've done, you're quite hated. You're beautiful, though," you throw a compliment, "if nothing else, being my servant might bring you some of the sense of fulfilment that you've lost." A long, uncertain pause follows. "I see. There's merit to what you've said. Besides, even if I refuse, you'll just do what you want to me anyways. I'd rather try to derive pleasure from the inevitable than suffer the pain." "Good," you say. "Well then." You drop your trousers, prompting Selene to undress as well. She really is a beautiful woman. Twenty-nine years old, her figure is a perfect blend of youth and maturity. Her breasts are rather small and her buttocks are average. Her face, sullen as it is, hides the lurking vibrance beneath. Her vagina is cleanly shaven. Her left thigh bears a brand with your name. Also, her womb is made barren with a spell as punishment. "I suppose you want to take my virginity?" She awkwardly spreads her legs as she lays down on bed. "Oh, no. Not yet, at least." You lay down with her and extend your tongue. The forbidden thrill of a chaste priestess' pussy tempts you. Your tongue explores Selene's small snatch, making the priestess moan. She shudders in a big orgasm. "Care to repay the favor?" you stand up while wiping off Selene's pussy juices off your face, placing your cock right in front of her reddening face. "Umm ... tell me if I'm doing it right." Selene is surprisingly great for a chaste priestess. Her soft tongue wraps itself around your thick shaft while her hand pumps you off. White pearly sperm shoots out of your tip, drenching her throat with semen. "You're very good, slut," you whisper. "Thank you ... //Master//." <<set $SeleneQuest to 1>> There's a certain despair in her eyes though. You judge that it's better to put off sex with Selene before you can push her psyche into total submission. <<endif>> You pay your slave Selene a visit. <<if $SeleneQuest isnot 3>> "What can I do for you, Master?" Selene asks flatly. [[Talk|Selene Talk]] [[Nothing|Personal Camp Section]] <<elseif $SeleneQuest is 3>> Upon noticing your entry, Selene grovels before you. "What can your slave do for you, Master?" Selene asks submissively. She is wearing an outfit of fishnets, a pair of black panties with holes cut, and a metal collar with chains. Her thigh bears a tattoo with your name on it. Selene's prison is reasonably comfortable, with a bed, books, and other amenities. [[Talk|Selene Slave Talk]] <<if $SeleneOath is true>> [[Use your slave|Selene Sex]] <<else>> [[Use your slave|Selene Oath]] <<endif>> [[Nothing|Personal Camp Section]] <<endif>> <<if $SeleneJharinaJealousyQuest is 2>> [[Confront Selene|Selene Jharina Jealousy Quest]]<<endif>> <<if $SeleneHarem isnot true and $SeleneOath is true and $HaremUnlockedFirstTalk is true>> [[Ask Selene to join your harem|Selene Harem][$SeleneHarem to true]] <<endif>> <<if $HaremMembers.length gte 3 and ndef $SeleneReligionQuest>> "Master, can I ask something?" [[Sure, what is it?|Selene Religion Quest][$SeleneReligionQuest to 0]] <<elseif $SeleneReligionQuest is 1 or $SeleneReligionQuest is 2>> [[Find people to ask|Selene Religion Quest]] <<elseif $SeleneReligionQuest is 3>> [[Talk about Selene's new philosophy|Selene Religion Quest]] <<endif>></tw-passagedata><tw-passagedata pid="239" name="Visit the Mayor" tags="" position="2575,5550" size="100,100">You visit the old mayor who de facto rules Selvil. "Sir $name, what brings you here?" [[The town's condition]] <<if $PrivateArmy is true and ndef $ThaliaHunt>> The old mayor interrupts himself. "Actually, I'm wondering if you can help with something?" [[Sure|Thalia Hunt]] <<endif>> [[Nothing|Selvil]] </tw-passagedata><tw-passagedata pid="240" name="Visit Yvette" tags="" position="2175,5400" size="100,100">You visit Yvette's office. "Welcome, $name. How can I help you?" <<if $BrothelQuestPrompt is true and $BrothelQuest is 1>> "Have you noticed how grim this place is?" "Oh, certainly. I mean, how can I not? After all, it's due to the lingering influence of Abyssal Lords buried beneath this island." "There are corpses of Abyssal Lords beneath?" "Tons. It's a bit of a dumpster. Whenever we managed to kill one of them, we bury the body here. Well, I suppose now the problem has returned to bite us in the ass. Actually, I've designed a solution for it. I'll use the power of the goddess Jasmine to push back the miasma." "I'm sensing a 'but' here." "Yup. Jasmine needs a conduit to channel her powers here." "A conduit?" you ask, tilting your head. "In her case, a brothel. I've actually prepared everything--I just need official sanction and 1000 coins. Come back when you have the coins." <<set $BrothelQuest to 2>> <<endif>> <<if $BrothelQuest is 2 and $player.coins gte 1000>> [[Pay for the brothel|Visit Yvette][$player.coins to $player.coins - 1000;$BrothelQuest to 3]] <<elseif $BrothelQuest is 2 and $player.coins lt 1000>> You don't have enough money to pay the brothel. <<endif>> [[Chat|Yvette Chat]] <<if $YvetteFirstDatePrompt is true and $LustWine is true>> You've acquired a bottle of aphrosidiac wine. [[Share it with Yvette|Yvette First Date]] <<elseif $YvetteFirstDatePrompt is true>> You should probably find a bottle of aphrosidiac wine. <<endif>> <<if $HaremUnlocked is true and $HaremUnlockedFirstTalk isnot true>> [[Talk about the harem]] <<endif>> <<if $HaremUnlocked is true and $HaremUnlockedFirstTalk is true>> [[Ask for sex|Yvette Sex]] <<endif>> <<if $HaremUnlockedFirstTalk is true and $HaremMembers.length gte 2>> [[Talk about the harem|Harem Quests]]<<endif>> <<if $JharinaQuest is 1>> [[Consult Yvette about Count Arnold|Jharina Quest 2]] <<endif>> [[Back to Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="241" name="The town's condition" tags="" position="2725,5500" size="100,100"><<if $BrothelQuestPrompt isnot true>> "I notice the town's condition isn't very good," you say. "It feels a little ... depressing, in some ways," you say. "Ah, yes, it is a quirk of Selvil," the mayor says. "We've had mages come and inspect what's wrong, but they've found nothing. I think it's just the culture around here; a bit grimmy and such." You can feel it in the air--something wrong. <<set $BrothelQuestPrompt to true>> <<set $BrothelQuest to 1>> <<endif>> You chat a little with the mayor before going back to Selvil. [[Back to Selvil|Selvil]] </tw-passagedata><tw-passagedata pid="242" name="Selvil Brothel" tags="" position="2175,5650" size="100,100">Red lanterns decorate your brothel. The Unnamed Whorehouse, as locals have come to call it, is brimming with activity. The grimness of Selvil really seems to be pushed back by the radiance of the brothel. Current state of the brothel: <<if $BrothelQuest is 3>> The Unnamed Whorehouse is only a basic, serviceable brothel with human prostitutes. It's not much, but it's honest work (probably). <<elseif $BrothelQuest is 4>> The Unnamed Whorehouse has improved with goblin slaves serving in the brothel as cheap, exotic holes alongside human prostitutes. <<elseif $BrothelQuest is 5>> The Unnamed Whorehouse has become a proper brothel. <<endif>> [[Fuck the whores|Brothel Whores]] [[Improve the brothel|Brothel Quest]] [[Back to Selvil|Selvil]] <<set $BrothelQuestPrompt to false>></tw-passagedata><tw-passagedata pid="243" name="Selene Talk" tags="" position="3475,1900" size="100,100">"Hello, Master," Selene says meekly. <<if $SeleneQuest is 1>> You reckon you need to push Selene more towards a life of depravity and sex. The issue is how to do that. <<if $BrothelQuest gte 2>> Something in your mind clicks--the brothel! Maybe Selene needs to see for herself what sex is all about. <<endif>> [[Bring Selene to the brothel|Selene Quest 1]] <<endif>> <<if $SeleneQuest is 2>> Selene has requested access to the shrine under the mayor's manor. <<if $SelvilRep gte 150>> The mayor has agreed to allow you and Selene access. [[Bring Selene to the shrine|Selene Quest 2]] <<else>> The mayor refuses to allow you and Selene access. Perhaps if your ''reputation'' in Selvil is greater, you can change his mind. <<endif>> <<endif>> [[Back|New Camp]]</tw-passagedata><tw-passagedata pid="244" name="Selene Quest 1" tags="" position="3575,1800" size="100,100">You bring Selene to the Unnamed Whorehouse. "What do you think, Selene?" "It's just a den of depravity and corruption," Selene says. "Or so I used to think. Now ...." You sit down with Selene in quiet contemplation as you watch the brothel buzz with activity. A prostitute is called to service you orally, and you arrange for a show. A pair of dark-skinned twin prostitutes get onto the stage, dancing naked and showing off their bodies. "So vulgar, so disgraceful ... but why do they look so happy?" Selene wonders. "They're specialist dancers from the Deep South that I contacted. They're happy because their job is satisfying to them," you theorize. "I don't think that's all," Selene replies. "Their job is not easy, of course, but it's simple." Selene turns to you. "When I was High Priestess, everything was so complicated. Church, politics, church politics, and so on. It was all so difficult. I thought I was clever. I thought I knew which priests I could trust and which ones I couldn't." The bitterness of her tone is very sharp. "You want me to be like them, right?" she continues. "Truthfully, I want to as well. I'm just so tired. I want to spend my life obeying all your orders and not thinking anymore. But I ...." Selene stays silent for the rest of the performance. "Master, if possible, I'd like to have access to the shrine under the mayor's manor." "That is oddly specific," you say. You didn't even know there is a shrine under the mayor's manor. "Can't it be any other shrine?" "I'm afraid not. This shrine I trust fully. I often retire there to pray back when I was High Priestess. I want to ask the Light-King himself." "I'll see what I can do." <<set $SeleneQuest to 2>> [[Back|Personal Camp Section]] </tw-passagedata><tw-passagedata pid="245" name="Selvil Pirates" tags="" position="1975,5650" size="100,100"><<if $SelvilFirst isnot true>> Before hunting pirates, you should probably check your ship first. [[Back to Selvil|Selvil]] <<else>> <<if $SelvilPiratesFirstTime isnot true>> You find Yvette observing the seas. "Hello, $name. Out to hunt some pirates?" "Yeah. What can you tell about them?" "Well, there are largely three pirate factions. The first is goblin pirates. Honestly, I'm quite surprised they're still around. We--that is, the Incubus King's people--once fought a great war and defeated them. The Incubus King even took their goddess Amaratat as a slave. But I suppose they're a resilient folk. Their technology is pretty rubbish, though." "Yeah, goblins are still annoying pests in the country. What else?" "Humans from the southern continents; followers of the God of Fire and Sand. It's a zealous, proselytizing religion that is growing quite quickly--mostly because they force anyone they defeated to join them. We're also keeping them on close watch." "Finally, the drow raiders. They have a large floating city-ship here, so of course their presence is strong. They're an advanced people." "The drow? Oh, the dark elves you mean." "Don't let either the drow or the elves hear you say that. In the past, the drow lived with the elves, but the elves drove them away." "Why?" "Some say it's because the drow began drawing magic from the empyrean instead of Bang-goo; some say it was plain racism; some say it's because the drow started worshipping an Abyssal Lord named Nyx." "They worship an Abyssal Lord? That can be quite problematic." "Never fear, the drow themselves actually killed Nyx and shattered her into a multitude of shards. Keep an eye out for those shards, though. They still hold a lot of power." "Oh, also ... they're not pirates, but the Empyrean necromancers have been making camps nearby." <<set $SelvilPiratesFirstTime to true>> <<else>> You find Yvette observing the seas. "Hello, $name. Out to hunt some pirates? Good luck." [[Can you give me a refresher about the local pirates?|Selvil Pirates Lore]] <<endif>> [[Find goblin ship|Meet Goblin Ship]] [[Find human ship|Meet Human Ship]] [[Find drow ship|Meet Drow Ship]] <<if $ArachneFirstMeeting is true>> [[Hunt undead|Undead Dungeon Start]] <<endif>> <<if $ThaliaHunt is 1>> [[Hunt Thalia|Meet Thalia Ship]] <<endif>> [[Return to Selvil|Selvil]] <<endif>></tw-passagedata><tw-passagedata pid="246" name="Brothel Quest" tags="" position="2175,5800" size="100,100"><<if $BrothelQuest is 3 and $BrothelQuest2Prompt isnot true>> Yvette herself is at the helm of the brothel. "You know what would improve the brothel?" she asks rhetorically. "Female goblins. A bunch of them. Lots of them goblins are raiders, so you can just capture their females there." "I'll see what I can do." <<set $BrothelQuest2Prompt to true>> <<elseif $BrothelQuest2Prompt is true and $GoblinSlaves gte 5>> "Well, have you got the goblins?" [[Hand over the goblins to Yvette|Brothel Quest][$GoblinSlaves to $GoblinSlaves - 5;$BrothelQuest to 4;$GoblinWhore to true;$BrothelQuest2Prompt to false]] <<elseif $BrothelQuest2Prompt is true and $GoblinSlaves lt 5>> "Well, have you got the goblins?" Unfortunately, you don't have enough goblins. <<endif>> <<if $BrothelQuest is 4 and $BrothelQuest3Prompt isnot true>> "How's the brothel, Yvette?" "Not bad, not bad at all. It's beginning to attract people from abroad," Yvette says. "Hmm. I wonder what else can be done. In the end, we're stuck in an island." Yvette thinks for a moment. "A succubus! You can't have a brothel without one of us in it!" "Are you serious? A succubus? I'll get lynched." "Don't worry. Us succubi are experts at illusion magic. Now that I think of it, I have an excellent candidate. One of the Incubus King's toys, Seira, has been a bit uppity recently and he's been wanting to deal some punishment for a while. If you can do us some kind of favor, I think he'll be willing to send Seira here." "What sort of favor?" Yvette stays silent. Her eyes seem to wander far. "The Incubus King once said he lost a sentimental sword in battle long ago. I believe the location is around here. I think ''human pirates'' might have stolen it. Goblins don't care for weapons, and the drow are too arrogant to use weapons from other races." <<set $BrothelQuest3Prompt to true>> <<elseif $BrothelQuest3Prompt is true and $IncubusBlade isnot true and $BrothelQuest isnot 5>> You should keep on searching for that sword. Yvette suspects it to be stolen by ''human pirates''. <<elseif $BrothelQuest3Prompt is true and $IncubusBlade is true and $BrothelQuest isnot 5>> "You've found it!" Yvette exclaims, snatching the blade from your hand. "Hold on a minute." Yvette creates a personal teleport portal and vanishes. Half an hour later, Yvette returns with Seira, a silver-haired succubus, in hand. "This is--this is degradation! I'm Master's property, not some lowly whore!" Seira complains. "Silence! This is Master's order," Yvette says before shooing off Seira to the brothel. "The Incubus King thanks you," Yvette then says, handing over some coins as reward. <<set $player.coins to $player.coins + 300>> <<set $SeiraWhore to true>> "Thanks," you say. "Anything else I can do?" "Honestly, probably not. Not here at least. If you can get unique whores to join, it'll be great. But overall I'd say the brothel is fine enough now." <<set $BrothelQuest to 5>> <<endif>> <<if $BrothelQuest is 5>> There's nothing else you can do here. Explore and find more whores to work in your brothel. <<endif>> [[Back to the brothel|Selvil Brothel]]</tw-passagedata><tw-passagedata pid="247" name="Selvil Harbor" tags="" position="2375,5700" size="100,100"><<set $shipname to "The Outlaw's Frigate">>You enter the harbor. Your warship, $shipname, proudly docks. Set your warship's name: "I've connected your essence to the ship," Yvette informs you. "This is an old warship of ours. It draws upon your own strength." <<set $ship = { name: $shipname, maxHP: $player.maxHP, HP: $player.HP, maxMP: $player.maxMP, attack: $player.attack, MP: $player.maxMP, speed: $player.speed }>> Name: <<print $ship.name>> HP: <<print $ship.HP>> MP: <<print $ship.MP>> Attack: <<print $ship.attack>> <<if $SelvilFirst isnot true>> <<set $shipspell to ["Ram"]>> <<set $shipspelldesc to ["Ram the enemy ship"]>> <<if $spell.includes("Arcane Bolt")>> <<run $shipspell.push("Arcane Channeling")>> <<run $shipspelldesc.push("Unleash your arcane bolt, bolstered by the ship's latent magic, at the enemy. Cost: 10 MP")>> <<set $arcanechannelingpower to $arcaneboltpower>><<endif>> <<if $spell.includes("Lustbolt")>> <<run $shipspell.push("Lust Channeling")>> <<run $shipspelldesc.push("Unleash your lust bolt, bolstered by the ship's latent magic, at the enemy. Cost: 15 MP")>> <<set $lustchannelingpower to $lustboltpower>> <<endif>> <<set $SelvilFirst to true>> <<endif>> <<if $SelvilRep gte 400>> A team of engineers have joined your crew. They should be able to repair your ship as it battles pirates. <<set $SelvilEngineer to true>> <<endif>> [[Back|Selvil]] </tw-passagedata><tw-passagedata pid="248" name="Goblin Ship" tags="" position="1775,5600" size="100,100"><<nobr>> <<set _temphp to random(300,330)>> <<set _tempattack to random(50,60)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "goblin ship", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The goblin ship bravely but also foolishly makes its move. Ship name: <<print $ship.name>> HP: <<print $ship.HP>> MP: <<print $ship.MP>> Attack: <<print $ship.attack>> Speed: <<print $ship.speed>> Ship name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a shabby goblin ship. <<set $bossfight to false>> [[Understood|Speed Check 3]]</tw-passagedata><tw-passagedata pid="249" name="Meet Goblin Ship" tags="" position="1850,5750" size="100,100">You engage a goblin ship in the sea! [[Fight!|Goblin Ship]]</tw-passagedata><tw-passagedata pid="250" name="Speed Check 3" tags="" position="1400,5500" size="100,100"><<if $ship.speed gte $enemy.speed>> Your ship nimbly outmaneuvers your opponent, gaining an advantage! [[You make a move|Player Move Ship]] <<elseif $ship.speed lt $enemy.speed>> The enemy ship outmaneuvers your own! [[You brace for impact|Enemy Move Ship]] <<endif>></tw-passagedata><tw-passagedata pid="251" name="Player Move Ship" tags="" position="1450,5700" size="100,100">Choose your move! <<if $SelvilEngineer is true>>Your engineers are working around the clock to repair the damages. <<endif>> <<for _i to 0; _i lt $shipspell.length; _i++>> <<='[[$shipspell[_i]|Player Move Ship 2][$move to $shipspell[' + _i + ']]]'>> <<print _i + 1>>. $shipspell[_i] ( $shipspelldesc[_i] ) <</for>> <<if $bossfight is false>> You can also decide to run away. [[Flee 2]] <<endif>> Ship name: <<print $ship.name>> HP: <<print $ship.HP>> MP: <<print $ship.MP>> Attack: <<print $ship.attack>> Speed: <<print $ship.speed>> Ship name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> <<if $SelvilEngineers is true>> <<set $ship.HP to $ship.HP + 40>> <<endif>> <<if $ship.HP gte $ship.maxHP>> <<set $ship.HP to $ship.maxHP>> <<endif>></tw-passagedata><tw-passagedata pid="252" name="Enemy Move Ship" tags="" position="1325,5675" size="100,100"><<nobr>> <<if $enemy.name is "goblin ship">> <<set _i to random(1,2)>> <<set _j to random(7,12)>> <<if _i is 1>> The goblin ship rams $shipname with all its might, dealing $enemy.attack damage! <<set $ship.HP to $ship.HP - $enemy.attack>> <<elseif _i is 2>> The goblin archers stationed on the ship fire at your ship with fire arrows, dealing $enemy.attack + _j damage! <<set $ship.HP to $ship.HP - $enemy.attack>> <<set $ship.HP to $ship.HP - _j>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "southern ship">> The ship rams $shipname with all its might, dealing $enemy.attack damage! <<set $ship.HP to $ship.HP - $enemy.attack>> <<if $enemy.HP lt $enemy.maxHP>> The ship's engineers work to repair the damage your ship has caused. <<set $enemy.HP to $enemy.HP + 30>> <<elseif $enemy.HP gt $enemy.maxHP>> <<set $enemy.HP to $enemy.maxHP>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "drow ship">> <<set _i to random(1,2)>> <<if _i is 1>> The drow ship harnesses the energy of an unknown being to blast apart your ship with powerful magic! Your ship suffers $enemy.attack damage! Thankfully, it appears that the magic is damaging the drow ship as well. It suffers 20 damage! <<set $enemy.HP to $enemy.HP - 20>> <<set $ship.HP to $ship.HP - $enemy.attack>> <<elseif _i is 2>> The drow mages hurl a baleful bolt of energy at your ship! Your ship suffers 80 damage! <<set $ship.HP to $ship.HP - 80>> <<endif>> <<set $enemycombat to 1>> <<elseif $enemy.name is "Thalia ship">> <<set _i to random(1,2)>> <<if _i is 1>> The scorpion ship rams your ship! Your ship suffers $enemy.attack damage! <<set $ship.HP to $ship.HP - $enemy.attack>> <<elseif _i is 2>> The scorpion ship fires a volley of rockets! These cathayan marvel of technology deals significant damage to your ship! Thankfully, a few haywire rockets seem to destroy parts of the scorpion ship as well. <<set $ship.HP to $ship.HP - $enemy.attack>> <<set $ship.HP to $ship.HP - 75>> <<set $enemy.HP to $enemy.HP - 75>> <<endif>> <<set $enemycombat to 1>> <<endif>> <</nobr>> <<if $ship.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[You fall to the ground|Game Over]] <<elseif $player.MP gte 0>> <<if $enemy.HP lte 0>> Your ship has defeated its enemy. [[Continue|Victory Ship]] <<elseif $player.HP lte 0>> Your ship suffers too much damage. It sinks to the bottom of the ocean, with you on it. [[The ocean is your grave|Game Over]] <<else>> Your ship is still able to fight. Unfortunately, so is your opponent's. <<if $enemycombat is 0>> [[Continue|Enemy Move Ship]] <<elseif $enemycombat is 1>> [[Continue|Player Move Ship]] <<endif>> <<endif>> <<endif>></tw-passagedata><tw-passagedata pid="253" name="Player Move Ship 2" tags="" position="1475,5850" size="100,100"><<if $move is "Ram">> <<set $enemy.HP to $enemy.HP - $ship.attack>> $shipname rams the enemy ship at high speed, dealing $ship.attack damage! <<elseif $move is "Lust Channeling">> <<set $enemy.HP to $enemy.HP - $lustchannelingpower>> You harness the power of your lust, amplified by the ship, unleashing a beam of destruction against the hull of the enemy ship. <<elseif $move is "Arcane Channeling">> <<set $enemy.HP to $enemy.HP - $arcanechannelingpower>> You harness the power of your arcane bolt, amplified by the ship, unleashing a bolt of destruction against the hull of the enemy ship. <<endif>> <<set $enemycombat to 0>> <<if $ship.MP lt 0>> You feel your breath shorten as your innate magical strength falls. You collapse .... [[You fall to the ground|Game Over]] <<elseif $player.MP gte 0>> <<if $enemy.HP lte 0>> Your ship has defeated its enemy. [[Continue|Victory Ship]] <<elseif $player.HP lte 0>> Your ship suffers too much damage. It sinks to the bottom of the ocean, with you on it. [[The ocean is your grave|Game Over]] <<else>> Your ship is still able to fight. Unfortunately, so is your opponent's. <<if $enemycombat is 0>> [[Continue|Enemy Move Ship]] <<elseif $enemycombat is 1>> [[Continue|Player Move Ship]] <<endif>> <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="254" name="Victory Ship" tags="" position="1225,5900" size="100,100"><<if $enemy.name is "goblin ship">> <<set _i to random(30,60)>> <<set _j to random(1,2)>> Unfortunately, whatever loot might be on the goblin ship is sunk alongside the ship. However, you manage to scavenge _i supplies! <<set $player.supplies to $player.supplies + _i>> You also manage to capture _j goblin women. <<set $GoblinSlaves to $GoblinSlaves + _j>> Your efforts in personally combating piracy are well-received by the people of Selvil. <<set $SelvilRep to $SelvilRep + 50>> [[Return to your camp|End day 2]] <<elseif $enemy.name is "southern ship">> <<set _i to random(80,100)>> <<set _j to random(20,40)>> <<set _k to random(1,2)>> As the ship sinks, you scavenge whatever is left. You manage to obtain _i coins and _j supplies! <<set $player.supplies to $player.supplies + _j>> <<set $player.coins to $player.coins + _i>> <<if _k is 1 and $IncubusBlade isnot true>> You also scavenge a strange sword. It emanates a lot of power, but not power that you can use. On its hilt is the inscription: ... something something, you can't read it. You decide to keep it for now. <<set $IncubusBlade to true>> <<endif>> Your efforts in personally combating piracy are well-received by the people of Selvil. <<set $SelvilRep to $SelvilRep + 75>> [[Return to your camp|End day 2]] <<elseif $enemy.name is "drow ship">> <<set _i to random(1,3)>> <<if ndef $ArachneToken>> As the ship sinks, you scavenge whatever is left. There are no supplies in sight, and drow coins are useless. You see a few strange spider-themed artifacts, but you reckon it's better to not play the drows' game. <<else>> As the ship sinks, you scavenge whatever is left. There are no supplies in sight, and drow coins are useless. You take a few strange spider-themed artifacts. <<set $ArachneToken to $ArachneToken + _i>> <<endif>> Your efforts in personally combating piracy are well-received by the people of Selvil. <<set $SelvilRep to $SelvilRep + 100>> [[Return to your camp|End day 2]] <<elseif $enemy.name is "Thalia ship">> You board the scorpion ship and find the captain, Thalia, unconscious. You make her subordinates steer the ship towards Selvil. [[Loot the ship|Thalia ship loot]] <<endif>> <<set $ship.HP to $ship.maxHP>> <<set $ship.MP to $ship.maxMP>></tw-passagedata><tw-passagedata pid="255" name="Selene Quest 2" tags="" position="3625,1900" size="100,100">The shrine under the mayor's manor is large. Even you, who's not exactly a big fan of the Light-King after what his followers did, feel the holiness of the place. Selene, wearing her priestess robes, falls to her knees, with her hands on her thighs--a traditional praying stance. You keep your distance--just enough to listen to her prayers. "Light-King, it is I, your devoted follower. I have been deceived by the dark, and have made destruction. What am I to do now? How am I to repent? Please answer me, Light-King." There is no answer from the shrine. "I have been made a slave to a man. Am I to serve him? To rebel against him? Please tell me, Light-King." There is, again, no answer from the shrine. "Light-King, I am beginning to have doubts. If you really exist, why do you allow me to fall such? Should you not have shown me the light, and uproot the dark infiltrators amongst our ranks? Or do you just not exist? Have I been praying to the wind?" For a very, very split second, you feel some sort of divine energy moving sluggishly; if not for your own powers, you probably wouldn't even notice. Selene stands up. "29 YEARS! 29 YEARS OF FAITH! AND NOTHING! ARE YOU DEAF? OR ARE YOU MUTE?" Selene, posssessed of a fearsome anger, punches the shrine of her own god. "Master, can you please come here?" she requests. She takes off her robes and stands naked. You come closer. Selene kneels again, towards you this time. "I'm ready now, Master. Please, take my virginity and claim me as your slave." You smirk. "On all fours, slave," you order. Selene obeys. You undress as well. Selene uses her hands to open up her asscheeks, revealing her pussy. With a sharp thrust, you take her virginity. A cry of pain reminds you to slow down a little. You allow her to catch her breath before slowly pushing your cock against Selene's pussy. Surprisingly, Selene ejaculates. "Quite sensitive, aren't you?" "Yes, Master!" Selene moans. "Your slave is a sensitive bitch who cums when her Master uses her!" You're quite surprised at Selene's eagerness. "Do you see it now, Light-King? I reject you. I have a new master now. I spit on your divinity! Fuck you!" Selene continues to orgasm as you pound her virgin pussy and slap her ass. "You love it when I slap you, bitch! You're just a dirty masochist!" "Yes, Master! I'm a masochist! Slap me more!" "Where do you want my cum, slut?" "Wherever you like, Master!" You push one more time before Selene's tight pussy wrings out your cum, bathing her womb in it. You pull out, satisfied with your work. You and Selene emerge from the shrine as a proper master-slave pair. <<set $SeleneQuest to 3>> [[Rest|End day 2]]</tw-passagedata><tw-passagedata pid="256" name="Selene Slave Talk" tags="" position="3475,2025" size="100,100">"Thank you for showing me this new life, Master," Selene says. "Please, enjoy every nook and cranny of my body." [[Back|Visit Selene]] </tw-passagedata><tw-passagedata pid="257" name="Selene Sex" tags="" position="3600,2050" size="100,100">"Of course, Master!" Selene says, standing up. "What service do you want?" "Hmm, tell me what you can do." "You know, Master, since you took me to the brothel last time, I've been practicing dancing. [[Do you want to take a look|Selene Sex 2][$SeleneSex to "Strip and Blow"]]? Both my [[pussy|Selene Sex 2][$SeleneSex to "pussy"]] and [[ass|Selene Sex 2][$SeleneSex to "anal"]] are available, of course. They're just fuckholes, after all," Selene says vulgarly. You have run out of ideas. Surely if you ''visit the brothel and interact with the whores'' there, you can derive some more inspiration. <<if $SeleneWalk is "unlocked">> "Should we [[go for a walk|Selene Sex 2][$SeleneSex to "walk"]], slut?" "A walk, Master? Certainly," she replied with a tinge of confusion in her eyes. <<endif>> <<if $SeleneToilet is "unlocked">> You feel the urge to urinate, and your slut has a mouth to [[drink it, and maybe you can get some extra service after|Selene Sex 2][$SeleneSex to "toilet"]] <<endif>> <<if $SeleneTorture is true>> You just purchased a whip from your own brothel, and you have a very tantalizing target .... [[punish your slave|Selene Sex 2][$SeleneSex to "whip"]] <<endif>> <<if $SeleneGangbang is true>> You can drag Selene to a depraved [[gangbang|Selene Sex 2][$SeleneSex to "gangbang]] at your brothel. <<endif>> <<if $SeleneJharinaJealousyQuest is 12>> You can [[invite Jharina|Selene Sex 2][$SeleneSex to "threesome"]] for a rough, double anal session. <<endif>></tw-passagedata><tw-passagedata pid="258" name="Selvil Pirates Lore" tags="" position="2050,5800" size="100,100">"Sure. There are largely three pirate factions. The first is goblin pirates. Honestly, I'm quite surprised they're still around. We--that is, the Incubus King's people--once fought a great war and defeated them. The Incubus King even took their goddess Amaratat as a slave. But I suppose they're a resilient folk. Their technology is pretty rubbish, though." "Secondly, humans from the southern continents; followers of the God of Fire and Sand. It's a zealous, proselytizing religion that is growing quite quickly--mostly because they force anyone they defeated to join them. We're also keeping them on close watch." "Finally, the drow raiders. They have a large floating city-ship here, so of course their presence is strong. They're an advanced people who fought a war against the elves and also shattered their own god Nyx, an Abyssal Lord." [[Back|Selvil Pirates]] </tw-passagedata><tw-passagedata pid="259" name="Meet Human Ship" tags="" position="1825,5900" size="100,100">You engage a human ship in the sea! [[Fight!|Human Ship]]</tw-passagedata><tw-passagedata pid="260" name="Human Ship" tags="" position="1725,5725" size="100,100"><<nobr>> <<set _temphp to random(400,450)>> <<set _tempattack to random(70,90)>> <<set _tempspeed to random(5,15)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "southern ship", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> The southern human ship is large but slow. Ship name: <<print $ship.name>> HP: <<print $ship.HP>> MP: <<print $ship.MP>> Attack: <<print $ship.attack>> Speed: <<print $ship.speed>> Ship name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a standard human ship. They raise the traditional symbols of their god--a banner of flame and sand. <<set $bossfight to false>> [[Understood|Speed Check 3]]</tw-passagedata><tw-passagedata pid="261" name="Brothel Whores" tags="" position="2300,5900" size="100,100">You enter the brothel with the intention of draining your balls. As the owner of the brothel, you'd naturally not need to pay a single coin for their services. Local human whores are always available, but you don't feel like summoning one of them. <<if $GoblinWhore is true>> Your captured goblins are held in chains and placed, their holes exposed and [[ready to use|Brothel Whore: Goblin]]. <<endif>> <<if $SeiraWhore is true>> The lynchpin of your brothel, the succubus Seira, is always booked. <<endif>> <<if $NellieWhore is true>> Nellie, the drow prostitute you recruited in Dornburg, is installed as a toilet for several hours in the afternoon and offers her holes at night. She's probably working as the former now if you want to [[visit|Brothel Whore: Nellie]] <<endif>> <<if $DwarfSexBot is true>> The dwarf sex construct you brought from the ruins prove extremely popular. It's currently not used, though. [[Use her|Brothel Whore: Sexbot]] <<endif>> <<if $KnightWhore is true>> The knight you acquired from the Arachne Cult is being put to good use as a cheap gangbang whore. [[Join in|Brothel Whore: Knight]] <<endif>> <<if $JunaWhore is true>> Juna, the slavemistress of Klatsch, is providing a very special show. [[Watch the show|Brothel Whore: Juna]] <<endif>> [[Back|Selvil Brothel]]</tw-passagedata><tw-passagedata pid="262" name="Selene Oath" tags="" position="3825,2025" size="100,100">"Master, before you use my body, I--I want to make an oath to you, Master." "Oath? Isn't the contract from the Kingdom enough?" "I want to make it more personal," Selene says. "A personal oath of loyalty from me to you." Your lips twist. "Very well. Then, I'll have you make it yourself," you say. "I want to know what sort of oath you're willing to swear on my mind." A few hours later, Selene invites you to her cell again. You're surprised to see her nude with some red substance on her pussy lips--lipstick, thankfully. A sheet of parchment is on the floor. "Well then, I'm here," you say, sitting. "Out with it then." "Y-yes, Master! I, Selene, swear to my master and owner $name that I will faithfully serve him, and obey his orders without question. I surrender my body and my soul. I am Master's property, to be commanded as he wishes. I am Master's toy, to be used as he wishes. I, Selene, have relinquished my humanity for a life of complete servitude. I will eat what Master allows, wear what Master allows, sleep where Master allows, and do what Master allows. That is my oath." Selene lowers herself onto the parchment, her lipstick on her pussy lips forming a print. You take the parchment and sign it. Selene smiles. It's the start of a new life for her. <<set $SeleneOath to true>> [[Back|Visit Selene]] </tw-passagedata><tw-passagedata pid="263" name="Brothel Whore: Goblin" tags="" position="2425,6025" size="100,100">Five goblins lay side by side with chains on their legs and arms. The center-right one is available. Wiping out the cum from her gaping pussy, you spend no time in perusing this cheap fuckhole. The goblin's willpower to resist seems entirely wiped out, though she's not very enthusiastic either. "Oh, hey, you're the owner, right?" an old, rugged man next to you said as he pounds another goblin. "Yeah. Anything about that?" . "Heh, you're wasting their potential chaining them like this," he said. "On the floor like dogs--that's how they should be used, these little critters." As the old man finishes and leaves, you concentrate on the goblin. You continue to pound her pussy before switching to her equally gaping asshole. You dump all your cum in her backdoor before going back to Selvil, rather unsatisfied. //Cheap fuckholes are cheap for a reason, I guess// <<if $SeleneOath is true>> But the thing that old man just said ... you don't have a goblin slave, but you sure have a certain fallen priestess who's completely subservient to you. <<set $SeleneWalk to "unlocked">><<endif>> [[Back|Selvil Brothel]] </tw-passagedata><tw-passagedata pid="264" name="Meet Drow Ship" tags="" position="1800,5500" size="100,100">You engage a drow ship in the sea! [[Fight!|Drow Ship]]</tw-passagedata><tw-passagedata pid="265" name="Drow Ship" tags="" position="1675,5425" size="100,100"><<nobr>> <<set _temphp to random(350,400)>> <<set _tempattack to random(80,100)>> <<set _tempspeed to random(55,65)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "drow ship", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Ship name: <<print $ship.name>> HP: <<print $ship.HP>> MP: <<print $ship.MP>> Attack: <<print $ship.attack>> Speed: <<print $ship.speed>> Ship name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a drow warship. They're small, very quick, and pack a nasty punch. <<set $bossfight to false>> [[Understood|Speed Check 3]]</tw-passagedata><tw-passagedata pid="266" name="Arachne Hideout" tags="" position="2525,5825" size="100,100">You make your way to the hideout, located right under the mayor's manor, and right under a Light-King shrine, even. A few cloaked men approach. "The Archweaver awaits," they say, signalling you to follow them, and you do. They bring you through a straight tunnel. The Archweaver, as it is called, is a gargantuan half-spider half-woman. Yet, despite its monstrosity, you feel compelled to not attack. <<if $ReligiousFreedom is true>> "Who are you?" you demand. "I am the Archweaver," the Archweaver says, very helpfully, "human, Empyrean-touched, associate of the Incubus King. You may be our greatest enemy yet. Or a great ally. After all, you did help raise the restriction of the ban on our religion." "Religion ... so what sort of religion is this?" "Our god is the Arachne. A great spider god, slain long ago by the followers of the Light-King. Since then we have been under attack by both the Light-King's zealous faction and the Empyrean forces." "Uh, I see," you say. "So, your god is dead?" "Dead." "... well, I'm sorry for that." "Don't be. Her power remains for us. That is why we asked for your help. Being as we are, we cannot go to the surface. Even if we are not illegal, our religion is too recondite to be accepted. There are many artifacts, spells, and weapons of ours that were taken from us by the Empyrean undead and sealed in their camps. If you return them to us, we would pay you properly." "Hmm, why would I help you?" "Aside from compensation and friendship? We stand together against the Empyrean. In fact, because our spells are so effective against them, we are suppressed by them." The Archweaver discerns your uncertainity, it seems. "You're free to return here if you wish. Go to your domain, and think about our offer." <<else>> "Who are you?" you demand. "I am the Archweaver," the Archweaver says, very helpfully, "human, Empyrean-touched, associate of the Incubus King. You may be our greatest enemy yet. Or a great ally." "Religion ... so what sort of religion is this?" "Our god is the Arachne. A great spider god, slain long ago by the followers of the Light-King. Since then we have been under attack by both the Light-King's zealous faction and the Empyrean forces." "Uh, I see," you say. "So, your god is dead?" "Dead." "... well, I'm sorry for that." "Don't be. Her power remains for us. That is why we asked for your help. Being as we are, we cannot go to the surface. We are an illegal cult and our religion is too recondite to be accepted. There are many artifacts, spells, and weapons of ours that were taken from us by the Empyrean undead and sealed in their ruins. If you return them to us, we would pay you properly." "Hmm, why would I help you?" "Aside from compensation and friendship? We stand together against the Empyrean. In fact, because our spells are so effective against them, we are suppressed by them." The Archweaver discerns your uncertainity, it seems. "You're free to return here if you wish. Go to your domain, and think about our offer." <<endif>> <<set $ArachneFirstMeeting to true>> [[Return to Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="267" name="Arachne Cult" tags="" position="2750,5800" size="100,100">"Welcome, friend," the Archweaver greets you. "Have you brought anything of use for us? We will give you tokens for such items, and you can exchange the tokens for our goods." You have $ArachneToken tokens. The Arachne Cult seems to be quite numerous--at least hundreds, if not thousands. They mostly venerate the Archweaver or a giant spider statue. A trader of the Cult puts up what they have for sale. "Five tokens each," he says flatly. 100 gold 40 supplies 1 goblin slave 1 healing potion <<if $ArachneToken gte 5>> [[Buy coins|Arachne Cult][$ArachneToken to $ArachneToken - 5;$player.coins to $player.coins + 100]] [[Buy supplies|Arachne Cult][$ArachneToken to $ArachneToken - 5;$player.supplies to $player.supplies + 40]] [[Buy slave|Arachne Cult][$ArachneToken to $ArachneToken - 5;$GoblinSlaves to $GoblinSlaves + 1]] [[Buy healing potion|Arachne Cult][$ArachneToken to $ArachneToken - 5;$healthpotion to $healthpotion + 1]] <<else>> Unfortunately, you don't have enough tokens. <<endif>> <<if $ArachneSecondTierUnlock isnot true>> "Is this really everything you have to sell?" you ask. "I mean, these are pretty generic items." "Well ... we have things we don't easily share to outsiders. Perhaps if you prove a great friend, the Archweaver will allow you to purchase them." <<elseif $ArachneSecondTierUnlock is true>> "You've proven yourself a true friend to the Cult. Step inside and we can talk real business." [[Step inside|Arachne Exclusive Shop]]<<endif>> <<if $YvetteFirstDatePrompt is true and $LustWine isnot true and $ArachneSecondTierUnlock is true>> You spot a strange bottle of wine. "It's lustwine, a wine with aphrosidiacs. We were sent a few as a gift from, uh, someone. The taste is too strong for us." "Can you sell it to me?" you ask. It must be the kind of wine that Yvette likes. "For you, great friend? Take it." "Oh, thank you!" <<set $LustWine to true>> <<elseif $YvetteFirstDatePrompt is true and $LustWine isnot true and $ArachneSecondTierUnlock isnot true and $LustWineOffer isnot true>> You spot a strange bottle of wine. "It's lustwine, a wine with aphrosidiacs. We were sent a few as a gift from, uh, someone. The taste is too strong for us." "Can you sell it to me?" you ask. It must be the kind of wine that Yvette likes. "Hmm, it's not really on sale ...." The shopkeeper lowers his voice. "But for 400 coins, I can let it go. Come back later so I can ... disappear the bottle." <<set $LustWineOffer to true>> <<endif>> <<if $LustWineOffer is true and $player.coins gte 400>> [[Pay 400 coins for the aphrosidiac wine|Arachne Cult][$LustWine to true; $LustWineOffer to false; $player.coins to $player.coins - 400]] <<endif>> [[Return to Selvil|Selvil]] </tw-passagedata><tw-passagedata pid="268" name="Undead Dungeon Start" tags="" position="1900,6025" size="100,100">You take your warship and manage to locate one of the undead ruins. Although it doesn't seem like there are any undead nearby, you should probably be careful. <<set $UndeadDungeon to 0>> [[Enter the ruins|Undead Dungeon]]</tw-passagedata><tw-passagedata pid="269" name="Undead Dungeon" tags="" position="1875,6150" size="100,100"><<set _i to random(1,13)>> <<if $UndeadDungeon lt 11>> <<if _i is 1>> As you explore the ruins, a skeleton warrior ambushes you! [[Fight!|Meet Skeleton Warrior]] <<elseif _i is 2>> You get a strange chill in the air, as if the ruins itself is mustering strength against you. You should probably [[take cover|Undead Dungeon Cabin Fey]] in a nearby, half-destroyed cabin. <<elseif _i is 3>> You notice a little shiny from a distance. It seems to be some sort of amulet or pendant that has a distinctive spider shape. You're reasonably sure it's something the Arachne Cult would want. However, it seems to be guarded by a skeleton warrior. [[Take the risk, attack the skeleton|Meet Skeleton Warrior][$ArachneToken to $ArachneToken + 1]] [[Forget it, continue your journey|Undead Dungeon][$UndeadDungeon to $UndeadDungeon + 1]] <<elseif _i is 4>> A shadowy presence bars your path! There's no way out except to stand and fight. [[Fight!|Meet Dark Spirit]] <<elseif _i is 5>> You stumble upon some sort of arcane mechanism--a series of stones glowing with magical power. With some work you might be able to work it out, but who knows what sort of consequences it could bring. [[Try to use the mechanism|Undead Dungeon Arcane Mechanism]] [[Forget it|Undead Dungeon][$UndeadDungeon to $UndeadDungeon + 1]] <<elseif _i is 6>> You are ambushed by a zombie! [[Fight!|Meet Zombie]] <<elseif _i is 7>> You find yourself tired, as if a malign influence is dogging every step you take. That is when you stumble upon a powerful healing pool whose divine power radiates greatly to the point of holding back a dark spirit. You can probably run and drink the water, but it'll necessitate a battle with the dark spirit, or you can simply go away. [[Drink the water|Meet Dark Spirit][$player.HP to $player.maxHP]] [[Retreat|Undead Dungeon][$UndeadDungeon to $UndeadDungeon + 1]] <<elseif _i is 8>> You find a strange humanoid encased in metal. Should you approach? [[Approach|Undead Dungeon Dwarf Bot]] <<elseif _i is 9>> You find a strange humanoid encased in metal. Should you approach? [[Approach|Undead Dungeon Dark Spirit Ambush]] <<elseif _i is 10>> Today's your lucky day! You stumble upon some coins and a spider amulet. <<set $player.coins to $player.coins + 15>> <<set $ArachneToken to $ArachneToken + 1>> [[Continue|Undead Dungeon][$UndeadDungeon to $UndeadDungeon + 1]] <<elseif _i is 11>> You are met with a fallen statue of a spider. [[Approach|Undead Dungeon Spider Statue]] <<elseif _i is 12>> The oppressive environment of the ruins ... something malevolent is hounding your every step. Necromantic magic has willed a skeleton warrior to existence. Are you to stand your ground, or allow the malevolent magic to drain you of your strength? [[Fight!|Meet Skeleton Warrior]] [[Run!|Undead Dungeon][$UndeadDungeon to $UndeadDungeon + 1;$player.MP to 0]] <<elseif _i is 13>> You feel so tired ... should you rest or go on? [[Rest|Undead Dungeon][$player.HP to $player.maxHP;$UndeadDungeon to $UndeadDungeon + 1]] [[Go on|Undead Dungeon Spider Statue]] <<endif>> <<endif>> <<if $UndeadDungeon is 11>> You feel the limits of your energy approaching. That is when a strange screech catches your attention. A necromancer. A mortal who has struck bargains with dark powers. Your challenge beckons .... [[Fight!|Meet Necromancer Boss]] <<endif>></tw-passagedata><tw-passagedata pid="270" name="Dornburg Piss Whore" tags="" position="2025,3300" size="100,100"><<if $NellieMet isnot true>> You follow instructions from the locals and knock upon a shabby house in Dornburg slums. <<set $NellieMet to true>> "Is this the 'Pisspot'?" A harsh, somehow unhuman voice comes answering. "Maybe. Who's asking?" "I'm $name." The door opens. "Come in, $name." You are, surprisingly, met with a drow, also known as a dark elf. "Well, I suppose you know what I'm offering. Let's get on with it then." The drow points at a board with her services written with chalk. "Oh, I'm for more than that," you say, taking notice of the dingy house. "I own a brothel in Selvil. Would you come and work for me?" This provokes a laughing burst from the drow. "Yeah, right. Good joke." "It's not a joke. I'm serious. If you have a price, name it." "You're serious." "Completely." <<if $WarSpoils is false>> The drow looks up to the roof of her house. "I have a large gambling debt. 1000 coins. And I'll need, let's say, 300 coins for my needs. So that's my price: 1300 coins." <<elseif $WarSpoils is true>> The drow looks up to the roof of her house. "I have a large gambling debt. 1000 coins. And I'll need, let's say, 300 coins for my needs--but actually, the war vaults being distributed after the war meant I had a windfall as well. Fine, here's my price: 1000 coins."<<endif>> "Fine. I'll come back." <<else>> <<if $WarSpoils is true and $player.coins gte 1000>> [[Pay her 1000 coins|Dornburg Piss Whore Pay][$player.coins to $player.coins - 1000;$NellieWhore to true]] <<elseif $WarSpoils is false and $player.coins gte 1300>> [[Pay her 1300 coins|Dornburg Piss Whore Pay][$player.coins to $player.coins - 1300;$NellieWhore to true]] <<elseif $WarSpoils is true and $player.coins lt 1000>> You don't have enough coins to pay the drow. <<elseif $WarSpoils is false and $player.coins lt 1300>> You don't have enough coins to pay the drow. <<endif>> <<endif>> [[Back|Visit Marketplace]]</tw-passagedata><tw-passagedata pid="271" name="Dornburg Piss Whore Pay" tags="" position="1875,3425" size="100,100">"Holy shit, you're serious!" "Of course am I, why would I joke?" "Alright, give me some time to settle my debts." The drow returns after an hour with a glad expression on her face. "Oh, I never told you my name. It's Nellie," the drow says. "Well, off I go. It'll take about a month by land." "Ah, don't worry about it." You flash your teleport stone. "A teleport stone?" Nellie says, amused, "interesting ...." You and Nellie teleport to Selvil. You direct Nellie to your brothel. "Thanks, $name. Visit me once in a while and I can show you some tricks," Nellie says, showing her pierced tongue. [[To Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="272" name="Brothel Whore: Nellie" tags="" position="2300,6025" size="100,100">Nellie isn't just for everyone. A steep fee is charged for her service. You head over to her room. The big-breasted drow, wearing only a simple pair of underwear, is tied up with ropes. She is also blindfolded. As if she could smell the scent of your cock, she opens her mouth wide. "This toilet's purpose is to serve as a piss-drinker. Please do not use this toilet's holes for coitus. Please do not urinate on this toilet's body." You smirk as you take off your trousers. Your half-erect cock is welcomed by Nellie's tongue. Yellow piss shoots out of the tip of your dick straight into Nellie's throat. The drow shows no sign of disgust whatsoever as she swallowed your piss. "Thank you for using this toilet," she says. <<if $SeleneOath is true>> It just comes to your mind that you happen to have a cum dumpster back in your camp. Selene better prepare her throat .... <<set $SeleneToilet to "unlocked">> <<endif>> [[Leave|Selvil Brothel]] </tw-passagedata><tw-passagedata pid="273" name="Meet Skeleton Warrior" tags="" position="1500,6050" size="100,100"><<nobr>> <<set _temphp to random(200,230)>> <<set _tempattack to random(50,60)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Skeleton warrior", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You encounter a skeleton warrior! It raises its rusty sword, its light of undeath shining ominously in its eyes. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="274" name="Undead Dungeon Cabin Fey" tags="" position="1600,6175" size="100,100">The cabin is much bigger than you expected. It's practically a wealthy merchant's house. You feel strange, though, as you sit down on one of the chairs. It feels as if the place itself is an illusion. There's magic at work here, you feel, and certainly it's not dark magic. But something still feels uncomfortable to you. <<set _i to (1,2)>> <<if _i is 1>> You stumble into some coins, which you promptly collect. <<set $player.coins to $player.coins + 15>> <<endif>> <<if $ability.includes("Leaf-Crowned")>> After some time, you step out of the cabin and see that ... the cabin never existed at all. There's only a stack of strange purple flowers behind. Somehow, you feel refreshed. <<set $player.HP to $player.maxHP>> <<else>> After some time, you step out of the cabin and see that ... the cabin never existed at all. There's only a stack of strange purple flowers behind. <<endif>> Nothing else to do but to move on. <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue|Undead Dungeon]]</tw-passagedata><tw-passagedata pid="275" name="Meet Dark Spirit" tags="" position="1425,6150" size="100,100"><<nobr>> <<set _temphp to random(160,200)>> <<set _tempattack to random(70,75)>> <<set _tempspeed to random(8,15)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "dark spirit", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You encounter a malevolent dark spirit! Don't be fooled by its humanoid appearance; its ephemereal legs give its identity away. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="276" name="Undead Dungeon Arcane Mechanism" tags="" position="1700,6250" size="100,100"><<nobr>> <<set _i to (1,20)>> <<if $class is "Novice">> <<set _i to _i + 4>> <<endif>> <</nobr>> You set to work, tinkering with the mechanism. It almost feels like an invisible hand guides you as you form the stones in a strange formation. <<if _i gte 17>> A silk-like substance burst from the stones, which themselves shine brighly with a peculiar light. A pair of brooches with spider motifs on them appear. They should fetch quite a good price with the Arachne Cult. <<set $ArachneToken to $ArachneToken + 2>> <<elseif _i gte 13>> A silk-like substance burst from the stones, which themselves shine brighly with a peculiar light. A single ring with spider motifs on it appear. It should fetch quite a good price with the Arachne Cult. <<set $ArachneToken to $ArachneToken + 1>> <<elseif _i gte 9>> A silk-like substance creep out of the stones, which themselves shine dimly with a peculiar light. A sack of food and other materiel appear. You pack them for your own supplies. <<set $player.supplies to $player.supplies + 15>> <<elseif _i gte 5>> A silk-like substance creep out of the stones, which themselves shine dimly with a peculiar light. Unfortunately, that is all. <<endif>> <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue exploring the ruins|Undead Dungeon]] </tw-passagedata><tw-passagedata pid="277" name="Meet Zombie" tags="" position="1625,6000" size="100,100"><<nobr>> <<set _temphp to random(300,350)>> <<set _tempattack to random(20,25)>> <<set _tempspeed to random(8,15)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "zombie", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You encounter a zombie, a corpse brought to life with necromantic magic. Send him back to his grave. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="278" name="Undead Dungeon Dwarf Bot" tags="" position="1875,6275" size="100,100">You approach the strange humanoid. Its size is around half of a human adult. A child, perhaps? But the features on its face suggests otherwise. Maybe it's a dwarf? Some kind of petrified dwarf? <<if $BrothelQuest is 4>> <<if $DepthStone is true and $DwarfSexBot isnot true>> The mysterious stone from the War Vaults shines, and the metal around the humanoid dissipates. It stands up unblinking. You take a step back. "What are you?" "I am SX Unit 17M. I am a sex construct designed to pleasure, with an emphasis in masochistic servitude. What are your commands, Master?" "Who created you?" "Dwarfs, Master." "Dwarfs? Here near Selvil?" The sex construct stands idle. You mentally snap your fingers. "You'd be a great addition to the brothel," you say. "Alright, follow me and my commands." "Naturally, Master." <<set $DwarfSexBot to true>> <<elseif $DepthStone is true and $DwarfSexBot is true>> You recognize the humanoid; it's another of those sex bots. You have little interest in another one since you have obtained one. You continue your journey. <<elseif $DepthStone isnot true>> You tinker with the humanoid, but whatever it is, you fail to rouse it to life. You leave disappointed. <<endif>> <<else>> You're not sure about approaching the humanoid. Even if it awakens, you don't think you can make use of it. You decide to retreat. <<endif>> <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue|Undead Dungeon]]</tw-passagedata><tw-passagedata pid="279" name="Undead Dungeon Dark Spirit Ambush" tags="" position="2000,6275" size="100,100">You come closer to the humanoid. It springs to life, a corrupted maelstrom of energy! There's no other way but to fight! [[Fight!|Meet Dark Spirit]]</tw-passagedata><tw-passagedata pid="280" name="Undead Dungeon Spider Statue" tags="" position="1875,6400" size="100,100">This must be a statue of Arachne, patron god of the Cult. How terrifyingly fitting that the black marble statue falls, broken into pieces, just as the goddess Arachne falls. [[Offer a silent prayer|Undead Dungeon Spider Statue 2][$SpiderStatue to 0]] [[Pick up the pieces|Undead Dungeon Spider Statue 2][$SpiderStatue to 1]] </tw-passagedata><tw-passagedata pid="281" name="Undead Dungeon Spider Statue 2" tags="" position="2025,6425" size="100,100"><<if $SpiderStatue is 0>> You close your eyes and offer a silent prayer to the fallen goddess; a gesture of respect. <<set _i to random(1,2)>> <<if _i is 1>> The goddess is not dead! ... or at least, her power is not. Your mana reserves have been replenished. <<set $player.MP to $player.maxMP>> <<else>> The goddess is not dead! ... or at least, her power is not. Your wounds have been healed. <<set $player.HP to $player.maxHP>> <<endif>> <<else>> You gather what pieces can be gathered and pocket them for the Cult of Arachne. <<set $ArachneToken to $ArachneToken + 2>> <<endif>> <<set $UndeadDungeon to $UndeadDungeon + 1>> [[Continue|Undead Dungeon]]</tw-passagedata><tw-passagedata pid="282" name="Brothel Whore: Sexbot" tags="" position="2175,6025" size="100,100">Unfortunately, just as you're about to use the construct, another customer rents it out. The man turns out, however, to be a master of whips and bondage. He thanks you for acquiring such a rare thing and offers to show you a few tricks, free of charge. You and a few others watch him abuse the construct. You're not particularly enjoying it--but you remember that there's a priestess slave waiting for you back home. There's a few new things you can show her. <<set $SeleneTorture to true>> [[Back|Selvil Brothel]]</tw-passagedata><tw-passagedata pid="283" name="Meet Necromancer Boss" tags="" position="1750,6400" size="100,100"><<nobr>> <<set _temphp to random(400,460)>> <<set _tempattack to random(20,30)>> <<set _tempspeed to random(5,9)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Necromancer", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You encounter a necromancer! ... fuck, you better finish this battle soon before the stench of their decaying flesh--and necromanctic power--overwhelmes you. <<set $bossfight to true>> <<set $necromancertimer to random(12,14)>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="284" name="Necromancer Vault" tags="" position="1600,6550" size="100,100"><<set _i to random(10,20)>> <<set _j to random(6,8)>> <<set _k to random(1,2)>> You hastily pack up everything you can take from the vault. The dead and their summoners require no supplies, so you find none. You do scrounge some _i coins, however. <<set $player.coins to $player.coins + _i>> Most importantly, you recover a cache of artifacts belonging to the Cult, worth around _j tokens. <<set $ArachneToken to $ArachneToken + _j>> <<if _k is 1 and $ArachneSecondTierUnlock isnot true>> You also find a massive statue of a spider in the cache. You're not sure about what it actually is, but the Arachne Cult is wildly enthusiastic about it. You're promised access to their exclusive items. <<set $ArachneSecondTierUnlock to true>> <<endif>> [[Rest|End day 2]] <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>></tw-passagedata><tw-passagedata pid="285" name="Arachne Exclusive Shop" tags="" position="2750,5925" size="100,100">You are led deeper into the Cult's hideout. "We have a veritable feast of items, but the Archweaver thinks only three can really interest you." "Firstly, we have a ritual that can strengthen your skin. It should be quite useful to you as a fighter. Secondly, we can teach you a healing spell. Thirdly, we have a ... captive, a former knight of the Church who tried to attack us. She's a broken shell now, only good for sexual use--but maybe you can make use of her? 25 tokens each." <<if $ArachneToken gte 25>> <<if $ArachneRitual isnot true>> [[Take the ritual|Arachne Ritual][$ArachneRitual to true]] <<endif>> <<if $ArachneHeal isnot true>> [[Learn the spell|Arachne Heal][$ArachneHeal to true]] <<endif>> <<if $BrothelQuest is 4 and $GangbangWhore isnot true>> [[Take the broken knight|Arachne Knight][$GangbangWhore to true]] <<endif>> <<endif>> <<if $PrivateArmy is true and $ArachneSoldiers isnot true>> "I'm wondering if you can give me some soldiers," you say bluntly. "Soldiers? We do have some warriors here. But I don't know about giving them to you. Let me ask the Archweaver." A few minutes later, the man returns. "We have a few dozen recruits we can spare, for 35 tokens." <<if $ArachneToken gte 35>> [[Pay the price|Arachne Exclusive Shop][$ArachneToken to $ArachneToken - 35;$ArachneSoldiers to true]] <<endif>> <<endif>> [[Back|Arachne Cult]]</tw-passagedata><tw-passagedata pid="286" name="Arachne Ritual" tags="" position="2750,6050" size="100,100">"Alright, step inside ...." You are brought to a wide chamber, where the Archweaver waits. The Archweaver clearly looks rather busy, spinning spider webs with a chittering sound. "Don't be afraid," she said. The webbing covers your skin, layer by layer. A sharp pang of pain follows, and another, and another. ''But you endure.'' Some minutes pass. You feel refreshed when the ritual ends. You're not sure how, but you feel your durability improving. "Use it well," the Archweaver says before biding good bye. <<set $ArachneToken to $ArachneToken - 25>> <<set $player.maxHP to $player.maxHP + 65>> <<set $player.HP to $player.HP + 65>> [[Back to Selvil|Selvil]] [[Back to shop|Arachne Exclusive Shop]]</tw-passagedata><tw-passagedata pid="287" name="Arachne Heal" tags="" position="2875,6000" size="100,100">You are brought to the Archweaver, who is tinkering with the statue that you brought back from the ruins. "Ah, $name! It is a pleasure to see you," she says. "The statue you brought back is truly exceptional. Hundred spells weaved inside, ready to be bestowed. We can spare one for you easily." You are directed to touch the statue. An overwhelming sense of energy courses through your body. ''You have learnt a new spell!'' <<run $spell.push("Arachnid Restoration")>> <<run $spelldesc.push("Arachne gives and takes; sacrifice all MP to heal; cost: all MP")>> <<set $Arachnerestorationpower to 140>> <<set $ArachneToken to $ArachneToken - 25>> [[Return to Selvil|Selvil]] [[Return to Arachne Cult|Arachne Exclusive Shop]]</tw-passagedata><tw-passagedata pid="288" name="Arachne Knight" tags="" position="2625,6050" size="100,100">You are brought to a small cave where the fallen knight is put in chains. "A male! Cock! Cock!" the fallen knight struggles to free herself. A shattered remnant of a fair lady, with long, black, hair and a fairly muscular body, still resides. "As you can see, she's broken," the shopkeeper says. "We've been using her for ... morale boosting activities, but the Archweaver worries about the effects on discipline." "Perfect, I'll take her," you say. "She'll be an excellent addition to the brothel." "No cock?" You kneel down and grin. "A lot of cock." "Cock!" <<set $ArachneToken to $ArachneToken - 25>> <<set $KnightWhore to true>> [[Back to Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="289" name="Brothel Whore: Knight" tags="" position="2300,6150" size="100,100">The fallen knight isn't afforded even a bed; she's placed in a large room with men coming in and out for a quick session. She's nothing more than a sex object, her three holes stretched to their limits. You get an opportunity to fuck her mouth--she's certainly very skilled, her tongue licking all over your glans. Seeing her like this, an idea comes to your mind. You have a devoted slave back home. Belching out your seed on the fallen knight's face, you wear your trousers and head back. <<set $SeleneGangbang to true>> [[Back|Selvil Brothel]] </tw-passagedata><tw-passagedata pid="290" name="Thalestris Quest 1" tags="" position="3300,2975" size="100,100"><<if $ThalestrisQuestPrompt isnot true>> "Hey, $name," Thalestris says while sharpening her axe in a nearby field. "Hello, Thalestris," you say. "Is there anything? You seem a bit uneasy." "Uneasy? Yes, I am uneasy," Thalestris says, almost mindlessly. "You remember when I said I was exiled from the tribe?" "I do." "Well, things have gone south, as you Walshemians are prone to say when things go bad. I suppose I should tell you the whole story first." Thalestris beckons you to sit with her on the grass. "I found--no, I stole a book from the shamans. I wish I could lie and say I was tricked; but I wasn't. The book kept talking to me and tempting me. It promised me a lot of power, and told me a ritual to use it. I did as it told me too--and I unleashed a skinwalker." "A what now?" "A skinwalker. A shapeshifter, as some people would say. It's a dangerous being. It has a lot of magic powers and it feeds on humans. If left unchecked it can grow very strong. Previously one of the shamans was keeping it guarded while a banishment spell is prepared, but it escaped yesterday. Worse, the shamans detect that it has already established a foothold--a 'domain' so to speak--in this world." "What does that mean?" "The skinwalker is originally from the empyrean. It's quite weak here. But once it builds its own domain here, it can draw upon its full strength. I think you still stand a chance in that case, but best we kill it outside its domain." Thalestris shows you a pendant of an inverted triangle inside a triangle made out of some kind of hard wood. "With this pendant, I can banish the skinwalker. But I need someone to beat down the thing while I banish it. Can I trust you to help me, $name?" "Of course. Give me a moment to prepare." "Certainly." [[Back|New Camp]] <<set $ThalestrisQuestPrompt to true>> <<elseif $ThalestrisQuestPrompt is true and ndef $ThalestrisQuest>> "Hey, $name. Ready to head out?" [[Yeah|Thalestris Quest 2]] [[No (return to camp)|New Camp]] <<endif>> </tw-passagedata><tw-passagedata pid="291" name="Thalestris Quest 2" tags="" position="3275,3125" size="100,100">"Alright. Here's what we have to do," Thalestris says. "The crucial thing is that, uh, it's a shapeshifter. It likes to assume human forms. So we've gotta hunt it down. It can't exactly assume a perfect form, so if we ''ask around in Dornburg'', we're bound to find some clues or something. I recommend starting in the ''market''." "I see. Well, let's get on with it then." <<set $ThalestrisQuest to 1>> [[Head out|Shapeshifter Search: Market]]</tw-passagedata><tw-passagedata pid="292" name="Shapeshifter Search: Market" tags="" position="1825,3225" size="100,100">Thalestris and you walk through the busy market. Your amazon companion, wearing her loincloth and some cloth over her breasts, certainly attract quite some attention. "Watch out for anyone who doesn't seem human." "What about elves? They are technically not human," you joke. "Your ability at humor is subpar, you should probably focus on fighting." "Watch it, brat!" "Eeek!" You see a big thug threatening a little girl. "I didn't do anything!" "Oh, didn't do anything, is it? Why don't I try doing 'nothing' to you--!" "Oi, big man. Why not try pick a fight with someone your size?" Whilst Thalestris is busy intimidating the poor thug, you spot a strange, shadowy creature moving by! You give chase. The creature turns around. A humanoid shape--but where its abdomen should be is a gasping collection of maws. You reach for your dagger and stab the abomination right in its twisted face. The skinwalker lets out a scream--at least you think it's a scream--and retreats. It is too fast for you to chase. "Damn it, I got distracted!" Thalestris curses. After giving an explanation to the terrified local guards, you and Thalestris decide to return to your camp for now. Perhaps a more thorough discussion in ''Thalestris' tent'' is in order. [[Return to the camp|Thalestris Quest 3]]</tw-passagedata><tw-passagedata pid="293" name="Thalestris Quest 3" tags="" position="3225,3275" size="100,100">You and Thalestris return to the camp, where Natalie unexpectedly waits for you. "Hey, I heard about the ruckus in the market." "You did?" you say. "Well ... like, 50 people got traumatized seeing whatever on earth that ''thing'' was. At this point, I feel the need to involve the royal mages in this." "You really shouldn't have," Thalestris grumbled. "Anyways, they've managed to track the creature's 'domain', as they call it. If the two of you want to dispatch it right now, feel free." "Alright, I'll beat it up," Thalestris says, giving you the pentacle. "Wait, shouldn't it be the other way round?" "Just shove the pentacle at the skinwalker while I beat it up," Thalestris said. "It was my sin. And I will rectify it myself. Now, show us the skinwalker." Natalie directs you to the skinwalker's domain; a dying tree full of malevolent energy. "Graah!" Thalestris rages, hacking at the tree. The monster comes out, and the two of them duel ferociously. Each swing of Thalestris' axe produces a swirl of flowers and dust, smiting the skinwalker, who takes the form of a tiger, then a snake, then a multitude of tentacles. You hurry forward, shoving the pentacle at the skinwalker. The skinwalker roars in pain. "Good, more, more!" The skinwalker vanishes. "No!" Thalestris screams. "Thalestris? We won, right?" "Not yet ... the skinwalker escaped. To the south. It knows it can't beat us, but if it keeps hiding and gathering power, it can be a major issue. Come on, we'll go to the south!" <<set $ThalestrisQuest to 2>> <<set $ThalestrisQuestPrompt to false>> [[Back to your camp to prepare|New Camp]] </tw-passagedata><tw-passagedata pid="294" name="Yvette Chat" tags="" position="2875,5400" size="100,100">"Hmm, just chatting? Sure. Come in then." Yvette pours you some lemonade. "Well, I think you must have a lot of questions. Feel free to ask." "What do you know about?" Yvette raises one of her eyebrows. "I might not look much, but I'm a member of the Outer Circle, and I've survived the Great War, and I am--was--deputy commander of the Outrider Corps. I know just about anything you want to know." [[Ask about the Incubus King's domain|IK Domain Ask]] [[Ask about the Great War|Great War Ask]] [[Ask about the succubi|Succubi Ask][$YvetteTalk to true]] [[Ask about the Outer Circle and the Outrider Corps|Harem Ask]] [[Ask about harems|Harem Ask 2]] <<if $YvetteTalk is true and $YvetteQuestStart isnot true>> [[Ask about herself|Yvette Ask]] <<endif>> <<if $YvetteSecondDatePrompt is true and $HaremUnlocked isnot true>> [[About last time ....|Yvette Quest]] <<endif>> [[Back to Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="295" name="IK Domain Ask" tags="" position="3150,5300" size="100,100">"The Incubus King's domain was formed by the //previous// incubus king. His name was, I believe, Salazar the Imperishable. He was a tyrant, overthrown by the current incubus king, his own disciple. It used to be an exclusive realm for succubi and incubi, but nowadays we only account for around 55 percent of the population, and the rest are humans, elves, dwarves, and so on." "Huh, so the current incubus king wasn't the original one? What's the name of the current one then?" "Darryl, I believe." You let out a small laugh. "Certainly different from 'Salazar the Imperishable'." "Yup. He was a human once. And now ... well, I'm not quite sure. Those who gather power from the empyrean can often assume whatever form they wish." "So, in the end, the Domain is upheld by the power of a single man? What if he dies?" "He's effectively immortal due to certain empyrean powers, and if he dies, well, I don't know, the Domain collapses or something. Or maybe not. He doesn't actually rule over most of the Domain; that is delegated to independent lords and dukes. Even directly below him, there are three goddesses: Jasmine--you know her, Maeve, and Isla. Jasmine commands the magical defenses of the capital as well as other major cities; Maeve commands the army; and Isla heads research and development of magic." "So overall it's a stable country." "Much stabler than Walshemia, yes--though that's not much of a compliment." "I'd like to visit one day. Although maybe the language barrier would be annoying" Yvette chuckles a little. "Oh, the language barrier should be mostly non-existent, actually. Us succubi and incubi have a language of our own, but it's stupidly hard to learn. So the Incubus King mandated we all learn the 'Common Tongue'--your Walshemian language--around 300 years ago." "Anything else you want to ask?" "Oh, yeah ... you have slavery there?" "Of course. Criminals, those who fell into debt, cultists of the Empyrean, foreign raiders ... slavery is the natural solution. Of course there are traditional 'slavery by duels' or whatever garbage the Incubus King and his shrinking band of traditionalists like, but eh." [[Back|Yvette Chat]] </tw-passagedata><tw-passagedata pid="296" name="Yvette Ask" tags="" position="3175,5425" size="100,100">"Me? I told you, I am a member of the Out--" "No, I mean you, as in yourself." "Oh ... well, that was quite unexpected." "Really?" "Well, when you're the deputy commander of the Outrider Corps, your own personal identity sort of melts away, you know. Nobody really asks how you are, who you are," Yvette says, sighing. "Well, if it's my life story you want me to tell, I'll gladly do it. Been some time since anyone asked." "So, I came from a pretty poor family. My mom ran away with a rich man when I was two. My dad was a drunkard. My three elder brothers and sisters worked their asses off supporting me and my younger sister. So I grew ambitious--I got into the Outer Circle when I was twenty four, and deputy commander of the Outrider Corps when I was thirty. Well, now I'm more or less a nomad. My family was all dead. This was thousands of years ago; they didn't manage to become immortal like me. Nevertheless, us five siblings lifted ourselves out of poverty." "How does it feel, living as an immortal?" "Quite fun. You don't have to worry about time," Yvette answers. "You should try to become an immortal too. With your current level of power, it shouldn't be too difficult. Plus, the Incubus King is supporting you." "I think it would be rather sad to see your loved ones pass away ...." "If you can create a proper harem, you can extend your hypothetical immortality to them." "A proper harem?" "Yeah. There's sex magic that can be used to connect people--eh, I've said too much for now. Besides, you'll need to find partners to form a harem; and a harem mistress, too." You smirk. "Well, what if you become my harem mistress?" Yvette bursts out laughing. "Yeah, maybe in a thousand years," she said, drinking her wine. "Man, Walshemian wines suck. Don't you put aphrosidiacs or something?" "No, it'd cause a massive scandal." "Meh. I'd kill for a bottle of proper ''lustwine''." [[Back|Yvette Chat]] <<set $YvetteFirstDatePrompt to true>> <<set $YvetteQuestStart to true>></tw-passagedata><tw-passagedata pid="297" name="Great War Ask" tags="" position="3025,5525" size="100,100">"You mentioned the Great War. What exactly is that?" Yvette fell silent for a while. "Did the Incubus King tell you about the Primordial Abyss?" "He did." "Well, surely he told you about the struggle to seal the bastard previously?" Yvette said. "It was a horrific war. Hundreds of gods and god-like mages were involved. Elphina and her elves. Bran and his dwarves. The Dragon-God with his beastmen cathayans and Grand Sages. And of course, the entire might of the Domain. It was the most terrifying war you could ever imagine. I wasn't even at the front lines, but I managed the rear. So many died, and even the great gods that survived had to slumber for many years." Yvette suddenly takes off her shirt. A large gash on her left breast could easily be seen. "This isn't even a direct hit. It was just small, stray energy from the Primordial Abyss. To this day, it can't be healed." "I'm sorry ...." "It's fine." "Did Walshemia fight the war, too?" "The war was more than 2000 years ago. Walshemia didn't even exist back then. There were some human tribes and petty kingdoms, but they couldn't do much. In fact, I believe a human confederation attacked the elves for land while they were fighting the Abyss' forces--so in a way, I guess Walshemia, or what would become Walshemia, did fight the war--on the wrong fucking side." [[Back|Yvette Chat]] </tw-passagedata><tw-passagedata pid="298" name="Succubi Ask" tags="" position="2875,5525" size="100,100">"Us succubi? Well, I suppose we must seem alien to you. But really, we're not that much different. We eat, we live, we marry--although our marriages may seem strange--we fight, we work, we die. Just like humans." "Among humans, succubi are known as sex demons. They say you don't need food, but sex," you say. "Hmm. Not wholly correct, not wholly incorrect. We can substitute sex for food, and food for sex. For us, both food and sex provide the nourishment we need." "But you succubi have a natural alignment with sex magic, right?" "Yes, that's right," Yvette says. "Hmm, ah, there's one thing that humans might not have. Succubi and incubi have the potential to be immortal." "Huh? How so?" "When one of us reaches the age of around 85-95, they will feel a sharp decline in sexual appetite and power. That is the sign of near death. Most will gather their closest friends and lovers, and have a final orgy: the 'Last Fuck', as some call it. But a select few succubi and incubi, who are either simply powerful enough, or has a strong willpower, can gather enough sexual energy in this final orgy to cheat death and sustain themselves indefinitely. Once this period is over, the succubi or incubi is effectively immortal. I am one of them." "Wow, that's really great!" "Heh. You're looking at the one-in-a-hundred-thousand here." [[Back|Yvette Chat]]</tw-passagedata><tw-passagedata pid="299" name="Harem Ask" tags="" position="3000,5275" size="100,100">"Oh, the Outer Circle? Technically we're members of the Incubus King's harem," Yvette says. "Most nobles and rich people have harems of at least a couple concubines or slaves. The Incubus King technically has around 10,000." You snicker. "Surely he can't be sleeping with that many people. Incubus King or not, his private parts would've shriveled." Yvette let out a small laugh. "Yeah, the actual harem is the Inner Circle, it has about 200 people in it. All of them extremely skilled in whatever specialty their niche is. Combat, administration, research, entertainment, and so on. The remaining 9800 comprises the Outer Circle. In practice, many of those 9800 who have spouses and families of their own." "So the Outer Circle is more like a group of subordinates then." "Yeah, more or less. Only difference is that we're handpicked by the Incubus King. Of course, tons of families try to get their members in. I can proudly say I entered by the merits of my own abilities, and not nepotism." "Oh yeah, you're deputy commander of the--what was it, the Outrider Corps?" "Yup. The Outrider Corps. We're diplomats and spies. That's why I was sent here--you know jack shit about the Domain, how can you serve as the ambassador between the Domain and Walshemia without my help?" [[Back|Yvette Chat]]</tw-passagedata><tw-passagedata pid="300" name="Yvette First Date" tags="" position="2650,5275" size="100,100">"What is this? Lustwine?" Yvette asks with wonder. "Where did you get this?" "I have my sources." "Heh, I'll take that," Yvette says. She grabs two glasses and pours the wine. "Hmm, this wine looks familiar." "Really?" "Yeah ... looks like those Arachne folks don't like it, I see," Yvette says. "I fucking told them it's a waste to send wine to the Arachne Cult." Yvette drank the wine from the glass, and you do the same. The taste is very strong, but it warms your throat. The two of you continue to chat, and Yvette quickly gets drunk. "I'm telling you ... hic! I fucking told the Incubus King we didn't have enough diplomats--envoys to the dwarves, envoys to the elves, tomorrow I guess he'll send envoys to earthworms and bats, hic!" As Yvette continues to drink, you feel her eyes lustfully scanning you. "You know ... I've not slept with anyone for quite a while," she said. "Let's see--hic--let's see if your package is good enough." The strong wine is beginning to get to you. You're not sure what happened for the next half minute, but when you begin to recover your consciousness, Yvette's pussy, smelling of pleasant flowers, is on your lips. Yvette's own tongue is playing with your erect cock. "You've got--hic--a good little $name down here ... bon appetit!" You take hold of Yvette's thighs. The red-skinned beauty moans when your tongue explores her clit. Yvette has more than two thousand years worth of experience, and it shows--you don't think anyone has ever sucked your cock this well before. Both of you climax at the same time. Yvette slumps and falls to the floor afterwards, and your own consciousness fades. You wake up a few moments later. Yvette grins at you. "That was great!" she said. "Now leave me, please. I need to clean up." [[Return to Selvil|Selvil]] <<set $YvetteFirstDatePrompt to false>> <<set $YvetteSecondDatePrompt to true>> </tw-passagedata><tw-passagedata pid="301" name="Skinwalker First Fight" tags="" position="2925,5775" size="100,100">You and Thalestris head to the harbor, as you have received rumors about a monster residing there. When you get there, a bunch of people are running away. Thalestris roughly snatches one of them, an old man. "What happened?" she balked. "A-a-a-monster!!" The skinwalker shows itself, takes a look at Thalestris with its eyes, and promptly tries to get the hell out of dodge. Thalestris stomps the ground, forming earth walls to stop it from escaping. "Get the bastard, $name!" [[Fight!|Skinwalker 1]]</tw-passagedata><tw-passagedata pid="302" name="Skinwalker 1" tags="" position="3075,5800" size="100,100"><<nobr>> <<set _temphp to random(150,200)>> <<set _tempattack to random(20,25)>> <<set _tempspeed to random(8,15)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Skinwalker1", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: Skinwalker HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You encounter a skinwalker, an empyrean creature from beyond this plane. Banish the cursed thing back to its own dimension. <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="303" name="Thalestris Talk" tags="" position="3175,5700" size="100,100">"That was surprisingly easy," you chuckle. "That's it, right? You managed to banish it?" "Well ...." "I, uh, I think I did?" "... you //think// ?" "I definitely removed it from this world," Thalestris says. "But I'm not sure if it's back to the empyrean. It felt like it was using its power to direct itself to another plane." "Another plane?" "Yeah, let's keep an eye out, but otherwise I think we're done," Thalestris says, smiling, "Thank you for the help, $name." <<set $ThalestrisQuest to 3>> [[Back to Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="304" name="Yvette Quest" tags="" position="3300,5225" size="100,100">"Yeah?" Yvette asks. "What of last time? You want a second round?" Her grin can't get any wider. That grin is wiped out by a swift knock on the door. A tall succubus enters the room. She's white-skinned with long, black hair draping down her shoulders. She wears a taunting smirk that even you feel uncomfortable with. "Grr ... ehm. Gretchen, what are you doing here?" Yvette asks with the fakest smile in history. "Oh, nothing really," the succubus named Gretchen says. "Jeez, your office is a dump. Can't believe you get reassigned to this backwater. Just wanted to tell you the Annual Fair is in three days, but I doubt you have time to find a proper stallion, heh." "You think wrong. I've found a stallion," Yvette barks. "Oh?" Yvette's eyes turn to you. "Yeah, I've got you beat again, Gretchen." "Hmph!" Gretchen angrily storms out of the room. "Uh ... what was that?" "That's Gretchen, my eternal rival--commander of the Klatsch City Guard. The bitch's always trying to one-up me." "I can gather that much. What about that Annual Fair?" "The Annual Fair? It's when a pair of a man and a woman fight in a sex contest," Yvette says. "I've won quite a few. Gretchen hasn't." "Now, pack up. We've got a contest to win--and to rub it on Gretchen's annoying face." "I've not agreed to this ...." Yvette's tongue comes out. "You said you wanted me to be your harem mistress, right?" she asks. "Well, if you prove good enough with your weapon down here"--here she grabs your crotch--"I might be persuaded." Your lustful smile is all that Yvette needs to know you've acceded. [[To the Fair|Annual Fair 1]] </tw-passagedata><tw-passagedata pid="305" name="Annual Fair 1" tags="" position="3575,5250" size="100,100">Yvette brings you to Klatsch, a major city in the northern parts of the Incubus King's Domain. It is a rather chilly place. You and Yvette take a short walk around the city. "Klatsch is one of the most diverse places, even in the Domain," Yvette tells you, and it does seem so: you've seen elves, humans, dwarves, succubi, incubi, and beastmen in the first three or four minutes. Yvette goes ahead and registers the two of you for the Fair. "You'll have a lot of time sight seeing after the Fair," Yvette says with an ugly expression. "I just met Gretchen ... she's got an elite elf male courtesan-mage as her partner. She's really trying to win this one." "What even is the point? Is there a big reward?" "There are some token rewards based on your ''ranking'' and your ''points'', but really it's the prestige that matters." You sigh internally. The Fair takes part in the city hall of Klatsch, and you head there with Yvette. Five prominent persons competed, as announced: Deputy Commander of the Outrider Corps, Yvette; Captain of Klatsch City Guard, Gretchen; Baroness of Westmarch, Tifa; Archmage of Iceflame Academy, Renee; Baroness of Briennen, Angel. "So what do you five actually do during the Fair?" you whisper. "Oh ... we do nothing. We just watch and exchange barbed insults." "You're kidding." "I'm afraid not." "What even am I supposed to do?" "You have ears, right? Listen." "Today's Fair will be held at Telwor Forest," says the announcer, an old elf, "today we have special guests: fifty failed candidates of the Stygian Corps. Let us see today if there is any second chance for them!" "Stygian Corps? What is that?" "Spies and assassins. It's like the Outrider Corps, except we deal in proper diplomacy, and they deal in hush-hush stuff." The main event will be the five champions of the five contestants entering the forest buck naked to hunt down the fifty 'prey', and fuck as many as possible. Also, there are many tokens spread around, which also award points. Combat is permitted, but not to the point of killing. You take off your clothes as you arrive in the forest. The five will begin at different points. "You ready, $name?" Yvette asks. "About as ready as I could be." "Good!" Yvette smirks. "Knock that damn Gretchen out of competition for me, would you?" Before entering the forest, you are given a heat charm to keep warm. It makes you feel more nimble. You're also permitted a small bag where you put some food, water, and other items. Weapons are not permitted, so you leave yours behind. [[Enter the forest|Telwor Forest 1]] <<set $player.speed to $player.speed + 5>> <<set $AnnualFairPoint to 0>> <<set $ArchmageFairPoint to 20>> <<set $GretchenFairPoint to 10>> <<set $OrcInjury to 0>></tw-passagedata><tw-passagedata pid="306" name="Telwor Forest 1" tags="" position="3725,5300" size="100,100">The forest is certainly cold. You wear the heat charm that you were given. A little snow is falling. You can't afford to diddle around. The question now is about your strategy. Should you aggressively search for prey, or silently wait. [[Aggressive approach|Telwor Forest 2][$TF2 to "Agg"]] [[Silent approach|Telwor Forest 2][$TF2 to "Sil"]]</tw-passagedata><tw-passagedata pid="307" name="Telwor Forest 2" tags="" position="3725,5425" size="100,100"><<if $TF2 is "Agg">> After some time, you managed to locate a pair of seemingly rather amateurish elves. They are slender, as most elves are, with short, black hair. If not for their lack of bulge, they can probably pass as men. You launch a frontal attack, and soon both of them find themselves at their knees. The two of them wear an expression of admitting defeat. You roughly grab their heads and make them service you orally. The two of them extend their tongues to lick your shaft. Their skill isn't the best, but they're quite good--and they probably really want this to be over soon. White pearls of cum shoots out of your cock, bathing them in sperm. From their collars, you find that they're worth 1 point each. <<set $AnnualFairPoint to $AnnualFairPoint + 2>> <<else>> After some time, you see a pair of seemingly rather amateurish elves. They are slender, as most elves are, with short, black hair. If not for their lack of bulge, they can probably pass as men. You launch an ambush, and soon both of them find themselves at their knees. The two of them wear an expression of admitting defeat. You roughly grab their heads and make them service you orally. The two of them extend their tongues to lick your shaft. Their skill isn't the best, but they're quite good--and they probably really want this to be over soon. White pearls of cum shoots out of your cock, bathing them in sperm. From their collars, you find that they're worth 1 point each. <<set $AnnualFairPoint to $AnnualFairPoint + 2>> <<endif>> You spend the next hour looking around. It boils down to three things: you spot a couple of tokens that you can probably take risk-free. There are a couple of orcs: one larger male, a contestant, representative of the Archmage. He just clobbered the representatives of the two baronesses to half-death. The other orc is female and smaller--a prey that is dangerous but is sure to provide a lot of points. [[Take the tokens|Telwor Forest 3][$TF3 to "Token"]] [[Confront the male orc|Telwor Forest 3][$TF3 to "Morc"]] [[Confront the female orc|Telwor Forest 3][$TF3 to "Forc"]]</tw-passagedata><tw-passagedata pid="308" name="Telwor Forest 3" tags="" position="3725,5550" size="100,100"><<if $TF3 is "Token">> You collect two tokens tucked behind some bushes. It's not very glorious, but it's safe, at least. <<set $AnnualFairPoint to $AnnualFairPoint + 2>> <<elseif $TF3 is "Morc">> The male orc has been rampaging, half a dozen women bound around him with vines as he fucks one of them to submission. If you had your trusty dagger and armor you might be tempted to fight a frontal battle, but it's practically suicide with you being naked. So instead, you gather some rocks and climb up a tall tree. You hurl a stone at the towering orc. It misses, but manages to graze him on the cheek. The orc stops what he is doing and begins searching for you. At that point you hurl a few more stones, one hitting him squarely on his right eye. The captured women takes this opportunity to flee; not only have you injured a dangerous competitor, you've also denied him crucial points. <<set $OrcInjury to $OrcInjury + 1>> <<set $ArchmageFairPoint to $ArchmageFairPoint - 5>> <<elseif $TF3 is "Forc">> You stalk the female orc, who seems to be walking fairly aimlessly. You confront her when she goes to a nearby cave, so as to bar her escape path. "Oh, you're one of the hunters," the female orc says. A muscular being, with red, rough hair, sitting near a campfire she lights up. "I suppose I am." "Well, as you can see, I'm not hostile," she says. "What about sitting down for a bit?" "Hm, fair enough. I will." The orc spends no time to go straight to her business. "Since you're a contestant, you must have some magic." "I do." "You see, us orcs have always been seen as brutes. Maybe that is true. Even our magic is limited to simple shamanism. Therefore, I sneak in here to see the magic of other races for myself. Shall you tell me stories about them?" Something in the orc's eyes seem to crash against your willpower. "Alright, I guess there's no harm. The magic I know ...." <<if $spell.length gte 5>> "I see. You have been very helpful. Thank you, but I must go." "I'm afraid I can't let you." "Oh, right. I forgot about the game you're playing. As a token of gratitude, what about intercourse with me? If you're willing, of course." Of course you're willing. You walk behind the orc, taking view of her unshaven, natural pussy. You quietly slide your erect cock inside her moist hole. "Mmph," she moans in a low voice. "Please continue." You oblige the orc's request. Her pussy juice continues to drip unto the cold stone underneath. You feel your own ejaculation coming. "Mm, you're quite wonderful," she whispers. "I'm about to cum!" "Inside is fine!" the orc moans. You shoot your sperm inside the orc's pussy. You see from her collar that she is worth 5 points. The orc bides you farewell. <<set $AnnualFairPoint to $AnnualFairPoint + 5>> <<else>> "Hmm. Interesting, but I expected more insight. Thank you, but I must go." "I'm afraid I can't let you." "Oh, right. I forgot about the game you're playing." She coughs a little. "HEY, WHAT'S THAT?" She points at the cave exit and you instinctively turn around, at which point the orc promptly runs away. //Of the all the under-handed tricks!// You slap yourself lightly on the cheek. That was careless of you. <<endif>> <<endif>> The time is already noon. You conduct another round of investigation. There is an insane dwarf woman in some kind of metal contraption, cackling manically. Unless you can take down that god-forsaken metal ... armor ... thing around her, you doubt you can calm her down. You can always play it safe and search for tokens. [[Confront the dwarf|Telwor Forest 4][$TF4 to "Dwarf"]] [[Search for tokens|Telwor Forest 4][$TF4 to "Token"]] </tw-passagedata><tw-passagedata pid="309" name="Telwor Forest 4" tags="" position="3725,5675" size="100,100"><<if $TF4 is "Token">> You go around searching for tokens. You find two tokens hidden behind a tree. <<set $AnnualFairPoint to $AnnualFairPoint + 2>> <<elseif $TF4 is "Dwarf" and $DepthStone is true>> You head over to confront the mad dwarf. She is encased in some kind of metal suit. "Stop it!" you shout. "Try if you can, bwahahah!" You try. In your bag, the strange stone you got from the War Vaults glows with strange warmth. You take it out and raise it as high as possible. Suddenly, the metal suit seems to work against the dwarf. "Wahwahwah!" Whatever that stone is, it manages to drag the dwarf before you. "Wahh!!" the dwarf cries out and throws a tantrum. You pin her against the ground. She continues to struggle, her dark brown braids whirling wildly in the air. She tries clenching her crotch, but it only makes her ass more appetizing. You fuck the dwarf hard in the ass; the legendary tales about the tightness of dwarf ass prove true. You enjoy the sensation, the unbelievable squeezing by the dwarf's rectum. You finish inside, staining her anus with your cum. You find that she's worth 7 points. <<set $AnnualFairPoint to $AnnualFairPoint + 7>> <<elseif $TF4 is "Dwarf" and $DepthStone isnot true>> You head over to confront the mad dwarf. She is encased in some kind of metal suit. "Stop it!" you shout. "Try if you can, bwahahah!" You try. But holy fuck is that little maniac fast. Five minutes later, you lose sight of her. <<endif>> After that, you notice that it's already around three o'clock, judging from the position of the two dim suns. You need to decide your strategy: impede your biggest problem--the Archmage's champion--or find tokens. [[Impede enemy|Telwor Forest 5][$TF5 to "Enemy"]] [[Find tokens|Telwor Forest 5][$TF5 to "Token"]]</tw-passagedata><tw-passagedata pid="310" name="Telwor Forest 5" tags="" position="3725,5800" size="100,100"><<if $TF5 is "Token" and $spell.includes("Arachnid Restoration")>> You scrounge up a few extra tokens from the bushes when you notice a number of spider webs. A colony of spider approach you. You feel a strangely friendly vibe from them. They line up towards a certain area, as if beckoning you to follow, which you do. You find their nests, near which you find a few more tokens, and a statue of a big spider. It seems like your loyalty to the Arachne Cult doesn't go unnoticed by the fallen goddess' other servants. <<set $AnnualFairPoint to $AnnualFairPoint + 7>> <<elseif $TF5 is "Token">> You scrounge up a few extra tokens from the bushes. <<set $AnnualFairToken to $AnnualFairToken + 3>> <<elseif $TF5 is "Enemy">> You spend the rest of your time locating the large orc. You decide to engage in guerilla tactics; pelting the orc with rocks and sticks, and using your agility to evade his mad rushes. You're not sure how much this actually helps your own position, but this should allow you to impede him. <<set $ArchmageFairPoint to $ArchmageFairPoint - 5>> <<set $OrcInjury to $OrcInjury + 1>> <<endif>> A loud bell rings throughout the forest, meaning that the event is over. Yvette teleports unto your location with a smile on your face. "Hey, looks like you've done pretty well!" "Really?" You're exhausted, taking a few long breaths. "Yup. Actually, well, good job not getting your head bashed in by that orc. He took out everyone else." Yvette throws herself unto your arms. "Your performance has gotten me quite wet, $name," she mutters, grinding her pussy against your thigh. "You can't be swinging that nice dick around in the cold, baby." Without any more fanfare, Yvette shoves herself down on your dick. You feel the warmth of an exquisite succubus pussy clamping down on your erect cock. The urge to cum immediately almost overwhelms you. You plant a deep kiss in Yvette's cold lips. "Nngh!" Yvette moans softly when you break the kiss to lightly bite her neck. The two bodies shudder as both of you climax. A steady stream of juices and cum drip out of Yvette's pussy. "Ugh, you're disgusting, Yvette!" Gretchen's grating voice echoes. "At least get a room!" "This is how I reward a //proper// champion, Gretchen," Yvette says with a smirk. "Of course you don't understand, I believe yours got knocked out--oh, at the last five minutes of the game, to boot!" Yvette's high, cold laughter sends Gretchen stomping in rage. "Come on," Yvette says, taking your hand. You are given warm chocolate and food, as well as a blue ribbon and thick clothes. The results are announced: <<if $OrcInjury isnot 2 and $AnnualFairPoint gte $ArchmageFairPoint>> Deputy Commander of the Outrider Corps, Yvette: $AnnualFairPoint, first place Captain of Klatsch City Guard, Gretchen: ELIMINATED, third place Baroness of Westmarch, Tifa: ELIMINATED, fourth place Archmage of Iceflame Academy, Renee: $ArchmageFairPoint, second place Baroness of Briennen, Angel: ELIMINATED, fifth place Taking into account Yvette's seniority over Renee, you have claimed the title of 'Champion of the Fair'-a highly prestigious title that is worth 200,000 marks (the Domain's currency), which is around 20,000 Walshemian coins. "Sweet!" you say. "20,000 coins? That's really great!" "... uh, you realize you don't //actually// get any money, right?" Yvette cautiously asks. "It's, uh, just a title." "... you're kidding." "Do I look like I'm kidding?" "Fuck, you're not." <<run $ability.push("Champion of the Fair")>> <<elseif $OrcInjury isnot 2 and $AnnualFairPoint lt $ArchmageFairPoint>> Deputy Commander of the Outrider Corps, Yvette: $AnnualFairPoint, second place Captain of Klatsch City Guard, Gretchen: ELIMINATED, third place Baroness of Westmarch, Tifa: ELIMINATED, fourth place Archmage of Iceflame Academy, Renee: $ArchmageFairPoint, first place Baroness of Briennen, Angel: ELIMINATED, fifth place "Ah, that's unfortunate," Yvette mutters. "But it's okay, I guess." <<elseif $OrcInjury is 2>> Deputy Commander of the Outrider Corps, Yvette: $AnnualFairPoint, first place Captain of Klatsch City Guard, Gretchen: ELIMINATED, third place Baroness of Westmarch, Tifa: ELIMINATED, fourth place Archmage of Iceflame Academy, Renee: ELIMINATED, second place Baroness of Briennen, Angel: ELIMINATED, fifth place "Heh, the Archmage's champion collapsed a minute before the end. Looks like you're pretty damn strong--or smart. I like both," Yvette remarks with a smirk. You have claimed the title of 'Champion of the Fair'-a highly prestigious title that is worth 200,000 marks (the Domain's currency), which is around 20,000 Walshemian coins. "Sweet!" you say. "20,000 coins? That's really great!" "... uh, you realize you don't //actually// get any points, right?" Yvette cautiously asks. "It's, uh, just a title." "... you're kidding." "Do I look like I'm kidding?" "Fuck, you're not." <<run $ability.push("Champion of the Fair")>> <<endif>> Rewards are also given out according to the amount of points earned. <<if $AnnualFairPoint gte 20>> You are given a tome about a classic succubus spell, Lustbolt, as well as an old family heirloom--a set of bondage devices of the family of a now destitute Count Arnold. Furthermore, you are given a necklace made of emeralds and rubies. <<set $ArnoldBondage to true>> <<set $LustTome to true>> <<elseif $AnnualFairPoint gte 8>> You are given a tome about a classic succubus spell, Lustbolt, as well as a necklace made of emeralds and rubies. <<set $LustboltTome to true>> <<else>> Unfortunately, you didn't earn enough points to receive anything except for a necklace of emeralds and rubies. <<endif>> <<if $LustboltTome is true and $spell.include("Lustbolt")>> Although you've learnt Lustbolt, the tome still includes some niche information that can bolster its power. <<set $lustboltpower to $lustboltpower + 20>> <<elseif $LustboltTome is true>> <<run $spell.push("Lustbolt")>> <<run $spelldesc.push("A sex spell that utilizes lust to summon a pink bolt of energy; without sex magic you'll have to use mana, though; cost: 15 MP")>> <<set $lustboltpower to 120>> <<endif>> After some rest, Yvette approaches you. "I hope you're not too tired?" she said. "There's something else I need to do--perfect timing, since Jasmine's here for a visit." [[Sure|Yvette Harem Scene]] </tw-passagedata><tw-passagedata pid="311" name="Yvette Harem Scene" tags="" position="3725,5925" size="100,100">The goddess of whores, Jasmine, holds temporary office in Klatsch. When you and Yvette enters, she smiles lightly. "Is there something I can do for you, Yvette?" Something in Jasmine's voice seems to indicate to you that this isn't unexpected. "Yeah, there is," Yvette says. She takes off her metal collar and puts it on the desk. "I resign as the Deputy Commander of the Outrider Corps. And count me out of the Outer Circle." Jasmine's thin smile continues showing. "Oh, faster than I expected." "What?" Yvette asked verbally--you asked mentally. "Oh yes, let's send a pent-up succubus to a horny young man. I'm sure nothing sexual will come out of it at all," Jasmine says in a half-mocking tone. "Enjoy your new life, Yvette. And $name -- Master hopes you can become the bridge between the Domain and Walshemia. I hope you can prove your worth. Now, is there anything else?" "I suppose not," Yvette says after stammering a bit. The two of you leave. "Wow, I can't believe it's all part of their plan," you remark. "Yeah," Yvette says with a hard-to-read expression. "Well, shall we return to Selvil?" On a side note, it seems that you and Yvette has formed a harem bond. Some of her strength now lies with you! [[Back to Selvil|Selvil]] <<set $player.maxHP to $player.maxHP + 30>> <<set $player.HP to $player.HP + 30>> <<set $HaremUnlocked to true>></tw-passagedata><tw-passagedata pid="312" name="Talk about the harem" tags="" position="3375,5925" size="100,100">"Oh, $name. Since I'm now your harem mistress, you should, you know, start actually building your harem." "Is it really that important?" "Of course it is. Harem members are connected to the harem master. This bond can be exploited in many ways," Yvette says. "Anyway, if you find a woman willing to join, simply ask her; I will handle the ceremony." "I see. Alright then," you say. "Here, take these two portraits. I've got a painter's soul in me as well." Yvette gives you a portrait of yourself in the snow Telwor Forest, looking quite strong and heroic with your dick erect and hanging out. Her own portrait is a classy portrait with her sitting on a silk-laden chair, fully naked. "It's a tradition in harems--everyone gets a portrait." "Oh, and one more thing. I've added Klatsch to your ''teleport stone'', just in case you want to visit." "Thanks for everything, Yvette." "Don't mention it." <<set $HaremMembers to ["Yvette"]>> <<set $HaremUnlockedFirstTalk to true>> <<set $TeleportKlatsch to true>> [[Back to Selvil|Selvil]]</tw-passagedata><tw-passagedata pid="313" name="Yvette Sex" tags="" position="3350,5050" size="100,100">"Heh. I've been waiting," she says after locking her office. "How do you want it?" [[69|Yvette 69]] [[Vaginal sex|Yvette Vaginal]] [[Anal doggy|Yvette Anal]] <<if $player.coins gte 100>> [[Date in Klatsch|Yvette Date in Klatsch][$player.coins to $player.coins - 100]] <<endif>> [[Back|Visit Yvette]]</tw-passagedata><tw-passagedata pid="314" name="Yvette 69" tags="" position="3500,5050" size="100,100">Yvette throws herself unto you, wildly taking off her clothes like a beast in heat. "Ugh, and here I thought we could have some proper sex," she says. "Your tongue better be damn good, $name." "Oh, don't worry about that. Mind your own, Yvette." "Heh." Yvette sits on your face with her flowery pussy right on your nose. Your tongue lashes out, licking Yvette's snatch and ass. Yvette returns the favor by bending her flexible body and enveloping your cock in her warm mouth. Yvette's tail caresses your hair as she sits even harder, pushing her holes onto your face. "Ngh! Mmh!" Suppressed moans come out of both of you. Electric currents course through both your bodies. Lust overcomes both of you; you can think of nothing but sex. You almost can't breathe, but with this exquisite pussy in front of your face, and Yvette's hot tongue pleasing your cock, you can't really be bothered to care. "Akh!" Both you and Yvette ejaculate at the same time. Yvette immediately stands up, opens her mouth and shows your translucent cum before swallowing it. "Your tongue is damn good, $name," she says with a smirk. "Yours is better, Yvette," you answer with a similar smirk. [[Back|Yvette Sex]]</tw-passagedata><tw-passagedata pid="315" name="Yvette Vaginal" tags="" position="3325,4850" size="100,100">"Nice! Come on then!" Yvette sits down on her chair and spreads her legs. You lick your fingers to finger Yvette's puffy pussy. "I'm not some barely-adult virgin, $name. Fuck me--and fuck me hard! What is this bullshit foreplay?" You rub the tip of your cock against Yvette's pussy, earning you her ire. You let out a small smirk before penetrating her with the entirety of your cock slammed in one push. "Nngh!" Yvette moans. Her hands firmly on her armchairs, her tail lashing out and caressing your balls. Yvette's hot pussy welcomes you with figuratively open arms. Her medium-sized clit stands erect, her folds leaking juices recklessly. Your naughty hands fondles her breasts--not so large that it becomes unsightly, but not so small that it can't be fondled. "So, how's my succubus pussy?" Yvette teases. "It makes you want to cum, right?" Her sultry voice fills your ears with sweet honey. The urge to cum overwhelms you. Your sense of reason melts away. You take hold of Yvette's thighs and move back and forth like a wild beast for a good half a minute until you ejaculate all your pent-up lust inside of her womb. "Aaah ...." a long moan is let out by both of you. Yvette lets out a smirk, but when your sperm is dripping out of her pussy, and sweat is glistening all over her body, it feels so much more genuine. [[Back|Yvette Sex]]</tw-passagedata><tw-passagedata pid="316" name="Yvette Anal" tags="" position="3475,4925" size="100,100">Yvette takes off what little clothing she has, her tail swirling around like a cat in heat. "Come on then, show me what you've got!" she says, licking her fingers and wetting her ready anus. She is leaning on her desk. Your cock is erect, eager to taste Yvette's red anus. You hold her hips strongly and begin penetrating her ass. "Nngh!" Yvette moans, sweating. The warmth of Yvette's anus pleasures your cock from all directions. Yvette extends her tail to caress your chest. "Destroy my ass, $name!" Yvette moans loudly. The scent of her body is driving you half-mad with lust. The beautiful succubus turns her head, an expression of pleasure evident on her face. "How is it, Yvette?" you ask in her ears. "Mm, stop talking. When you talk you can't focus on pounding my ass--aah!" You stop talking and focus on pounding Yvette's ass. You move forward; at one point the entirety of your cock is buried in her anus, scraping her insides. "Come, $name, let's climax together!" The sweet voice brings you to a dramatic, sudden climax. White cum shoots out of your cock into Yvette's sweet ass, making her squeal. Yvette herself climaxes a second later, her moaning voice filling the air as juices drip out of her appetizing pussy. "Ah ... not bad, $name, not bad at all." [[Back|Yvette Sex]]</tw-passagedata><tw-passagedata pid="317" name="Klatsch" tags="" position="4325,2675" size="100,100">Klatsch. A city in the Incubus King's Domain. It's a bustling city, a center of population, trade, and magical learning. Tall towers made of white marble dominate the landscape. Various races walk here freely with little tension between them; or at least it looks like that. You doubt you'll be interested in anything in the common markets; rather, your status as a trusted ally has given you access to the inner districts. The locals recommend a magic shop named 'Pelita's Coven' with a smile that doesn't seem totally sincere. [[Visit the magic shop|Pelita's Coven]] <<if $ThalestrisQuest is 3>> You hear certain strange rumors. Apparently there's a monster roaming around Telwor Forest. Two novice mages have lost their life. You spent some time verifying the rumors and you're reasonably sure it's the skinwalker that you banished with Thalestris. Time has come to [[finish the job|Skinwalker Final Fight]] .... <<endif>> Telwor Forest is swarming with dangerous beasts, strange elementals, and rare artifacts. Perhaps you should forage there? [[Head to the forest|Telwor Forest Guide]] The bounty hunters' office offers interesting opportunities for adventurers like you. [[Go to the Bounty Hunters' Office|Bounty Hunter Office]] <<if $JunaHouseUnlocked is true>> Juna, the slave trainer, has invited you to her house. [[Visit Juna's house|Juna House]] <<endif>> <<if $SeleneJharinaJealousyQuest is 6>> [[Summon Selene and Jharina to join the competition|Selene Jharina Jealousy Quest]] <<endif>> <<if $KlatschRep gte 70>> You're allowed to visit the [[Klatsch City Council|Klatsch City Council]] <<else>> The Klatsch City Council building stands proud and tall, but you're barred from entry. Perhaps if your reputation is better, they'd let you in. <<endif>> <<if $JharinaQuest is 2 or $JharinaQuest is 5>>[[Visit Count Arnold's home|Arnold Home]] <<elseif $JharinaQuest is 4>>[[Go to the gathering|Jharina Quest 3]] <<elseif $JharinaQuest gte 7 and $JharinaQuest isnot 13 and $JharinaQuest lt 13>>[[Visit Count Arnold's home|Arnold Home]] <<elseif $JharinaQuest is 13>> [[Steal the bandits' stash for Count Arnold|Jharina Quest Final]] <<elseif $JharinaQuest is 14 and $JharinaTimer gte 7>> When you're walking on the streets of Klatsch, a council associate greets you and asks you to [[visit the council chambers|Jharina Quest Resolution]] regarding the case of the late Count Arnold. <<endif>> [[Return to teleport room|Teleport Room]] <<if ndef $KlatschRep>> <<set $KlatschRep to 0>> <<endif>> <<if ndef $RedeemedCoupons>> <<set $RedeemedCoupons to 0>> <<elseif $RedeemedCoupons is null>> <<set $RedeemedCoupons to 0>> <<endif>></tw-passagedata><tw-passagedata pid="318" name="Harem" tags="" position="3400,2925" size="100,100">Here you can see the members of your harem and their biographies. [[Yvette|Harem Bio][$HaremMember to "Yvette"]] <<if $HaremMembers.includes("Selene")>> [[Selene|Harem Bio][$HaremMember to "Selene"]] <<endif>> <<if $HaremMembers.includes("Thalestris")>> [[Thalestris|Harem Bio][$HaremMember to "Thalestris"]] <<endif>> <<if $HaremMembers.includes("Dahlia")>> [[Dahlia|Harem Bio][$HaremMember to "Dahlia"]] <<endif>> <<if $HaremMembers.includes("Ella")>> [[Ella|Harem Bio][$HaremMember to "Ella"]] <<endif>> <<if $HaremMembers.includes("Emma")>> [[Emma|Harem Bio][$HaremMember to "Emma"]] <<endif>> <<if $HaremMembers.includes("Jharina")>> [[Jharina|Harem Bio][$HaremMember to "Jharina"]] <<endif>> [[Back|Teleport Room]] <<if $TwinsStatus is "slave">> <<set $EllaRank to "Slave">> <<set $EmmaRank to "Slave">> <<else>> <<set $EllaRank to "Concubine">> <<set $EmmaRank to "Concubine">> <<endif>></tw-passagedata><tw-passagedata pid="319" name="Harem Bio" tags="" position="3725,2850" size="100,100"><<if $HaremMember is "Yvette">> Name: Yvette Race: Succubus Age: 2000+ Hair color: Platinum blonde Skin color: Red Harem rank: Harem Mistress Favorite sex act: Missionary vaginal sex Yvette was deputy commander of the Outrider Corps, something she's very proud of, and former member of the Outer Circle. A true veteran of the Great War, Yvette's skill in combat is no slouch, but her true ability is in advisor roles, rear-line supply work, organization, and administration. Prideful, experienced, and talented--Yvette is the perfect second-in-command for anyone charming enough to woo her, as you have succesfully done. She's also a highly competent painter. Yvette's well-toned body is complimented well by her medium-sized breasts. Her vagina and asshole have gone through more than two thousand years of sexual experience. There is nothing she likes more than passionate, almost lovey-dovey sex. <<elseif $HaremMember is "Selene">> Name: Selene Race: human (Center Walshemian) Age: 28 Hair color: purple Skin color: mix of white and olive Harem rank: Slave Favorite sex act: Bondage sex with whipping Selene was High Priestess of the Church, and your mortal archenemy. Formerly a woman of faith, she has given up everything, including her anguish and ambition, in exchange for a mindless, joyful existence as your slave. Her intelligence that made her climb up the Church hierarchy so fast is dimmed, but at your command can be tapped into once more. Selene is the perfect slave; obedient, devoted, and depraved. She had no sexual experience before meeting you; you took her first kiss, her first blowjob, her virginity, and her black cherry. What she lacks in experience she makes up in pluck and tight orifices. Her breasts are a little too small for her adult body. Selene enjoys the whip that you wield. <<elseif $HaremMember is "Thalestris">> Name: Thalestris Race: human (Amazon) Age: 24 Hair color: black Skin color: brown Harem rank: Concubine Favorite sex act: Cowgirl vaginal sex (with creampie) Thalestris was an amazon, a sect of female warriors serving the nature goddess Sweva. Her youth and relative recklessness led her to summoning a skinwalker in the mistaken belief in its power. Having dominated her in the arena and helped her with the skinwalker problem, this muscular beauty's loyalty is yours. Thalestris is a powerful fighter, one that your enemies will regret battling. Thalestris is a muscle-bitch, tall and imposing. Her pussy grips like a vice, helped by her muscles. She loves cowgirl sex; the feeling of being on top being her favorite. <<elseif $HaremMember is "Dahlia">> Name: Dahlia Race: human (Western Walshemian) Age: 40 Hair color: blonde Skin color: white Harem rank: Concubine Favorite sex act: Cowgirl vaginal sex Dahlia was a village prostitute who, having been abandoned by her husband, had lost her happy family life. She dedicated her life to her formerly ill and cursed children, vowing to let them live a good life. You have not only helped cure her children but also given them a good education and shelter, earning you Dahlia's unshakable loyalty. Dahlia is an excellent cook and domestic worker, keeping your entire camp fed and clean. As a prostitute, Dahlia has had ample experience with men. Her breasts may be sagging, and her holes far from fresh, but she's skilled with them, and she's not shy to show her skills. <<elseif $HaremMember is "Ella">> Name: Ella Race: human (Western Walshemia) Age: 19 Hair color: ash blonde Skin color: white Harem rank: $EllaRank Favorite sex act: Exhibitionist standing sex Ella is the daughter of Dahlia, and twin sister of Emma. Cursed by her own father, her physical stature and mental state don't develop until the curse is lifted. Now that it is, Ella has become a lovely young woman, who also stole your money for prestigious clothing. Now that that is all water under the bridge, Ella has joined your harem. She's studying in Toft's school, a folk medicine training school. Ella is a small-bodied young woman with no sexual experience before meeting you. She's eager to please you with her rough blowjobs and her tight holes. <<if $EllaRank is "Slave">> She remembers your rough treatment of her in the arena, and has since developed a submissive side to her exhibitionist tendencies. <<else>> She remembers your nice treatment of her in the arena, and has since developed a wholesome side to her exhibitionist tendencies. <<endif>> <<elseif $HaremMember is "Emma">> Name: Emma Race: human (Western Walshemia) Age: 19 Hair color: ash blonde Skin color: white Harem rank: $EmmaRank Favorite sex act: Exhibitionist standing sex Emma is the daughter of Dahlia, and twin sister of Ella. Cursed by her own father, her physical stature and mental state don't develop until the curse is lifted. Now that it is, Emma has become a lovely young woman, who also stole your money for prestigious clothing. Now that that is all water under the bridge, Ella has joined your harem. She's studying in Toft's school, a folk medicine training school. Emma is a small-bodied young woman with no sexual experience before meeting you. She's eager to please you with her rough blowjobs and her tight holes. <<if $EllaRank is "Slave">> She remembers your rough treatment of her in the arena, and has since developed a submissive side to her exhibitionist tendencies. <<else>> She remembers your nice treatment of her in the arena, and has since developed a wholesome side to her exhibitionist tendencies. <<endif>> <<elseif $HaremMember is "Jharina">> Name: Jharina Race: drow Age: 435 Hair color: white Skin color: dark purple Harem rank: Slave Favorite sex act: Licking cum off the floor Jharina was a high-class, elite prostitute who, after settling down with a broke Count Arnold, became nobility. She and her husband eventually went bankrupt, and, after the events that led to Arnold's death (and almost your own), you acquired Jharina from the Council. A natural submissive, Jharina is a bondage lover who seeks to please her owner in any way possible, her latent sexual desires having been woken up once more. Drow pussies and assholes are renowned for being always tight, and Jharina is no exception. Her lewd, massive udders jiggle whenever she's aroused. The degradation of licking her master's cum off the floor turns her on like nothing else. <<endif>> [[Back|Harem]]</tw-passagedata><tw-passagedata pid="320" name="Selene Harem" tags="" position="3600,1700" size="100,100">"Master! What can I do for you today?" Selene asks. She certainly feels a little strange that Yvette is walking with you. "Oh, Selene. I want you to join my harem," you say. You and Yvette spends five or six minutes explaining things to Selene. The expression on Selene's face is one of utter submission. "Master, you should've yanked me by my collar and made me join, I'm your slave, not your lover!" "Well, if you're ok with it, I'll proceed with the ritual." Yvette's hands shines with pinkish light; she solemnly touches Selene's forehead. You feel a special bond forged between you and Selene. "That's it--now put on your best pose. I want to draw you." "Master, pick a pose for me please!" "You needy slut ... since all you're good for is your holes, show them like the bitch you are." Selene takes the doggy position, spreading her cunt and ass as much as possible. "Not terribly creative, are you, $name?" Yvette teases while making her painting at a terrifyingly high speed. "Creativity is wasted on this bitch." "Heh." Selene's obscene painting is hung in her own cave, as a reminder of her submission. Selene's divine magical prowess, as little as it is, is placed under your command. <<run $HaremMembers.push("Selene")>> [[Back|Visit Selene]] <<set $healpower to $healpower + 25>> <<set $player.MP to $player.MP + 5>> <<set $player.maxMP to $player.maxMP + 5>></tw-passagedata><tw-passagedata pid="321" name="Skinwalker Final Fight" tags="" position="4300,2900" size="100,100">You call on Thalestris, who enthusiastically brings her war-axe. After consulting with some locals, the two of you locate the nest of the skinwalker, deep in Telwor Forest. "Alright motherfucker, how many times do we have to teach you this lesson?" Thalestris barks, swinging her anti-skinwalker pendant. A loud, otherworldly fills your ears. A stain in reality--a black spot spreading rapidly like cancer. You raise your dagger .... <<nobr>> <<set $enemy = { name: "Skinwalker2", maxHP: 700, HP: 700, maxMP: 20, MP: 20, attack: 0, speed: 5, coins: 0, supplies: 0, }>> <</nobr>> You're facing the skinwalker, who's using all its power! Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> <<set $bossfight to true>> <<set $skinwalkerturn to 1>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="322" name="Thalestris Quest Finish" tags="" position="4050,2850" size="100,100">You hurl the skinwalker unto the ground. "Finish him!" you shout. Thalestris does the equivalent of shoving your fist up someone's testicles, bashing the skinwalker with the pendant. The skinwalker roars, and the miasma clears. You look at Thalestris. A sense of melanchonly seems to have overcome her. "It's over ...," she groans. "The skinwalker's dead, for real this time." You lightly hug Thalestris' muscular body. "You did well, Thalestris." Thalestris nods slightly. "Let's get out of here. I don't want to remember that monster anymore." <<set $ThalestrisQuestComplete to true>> <<set $ThalestrisQuest to 4>> [[Back to Klatsch|Klatsch]] </tw-passagedata><tw-passagedata pid="323" name="Alice Quest 1" tags="" position="3500,3150" size="100,100">You call on Yvette, who's been cautiously walking near the manor with a strong disguising magic. "You sent me a letter, Viscountess ...," you say, sipping the coffee you were served. The viscountess remains silent, gesturing for her hunched manservant to speak on her behalf. "The viscountess believes you have formed something called ... a 'harem'. And it does not merely mean gathering a host of women around you, but--" here the manservant looks at Viscountess Alice, as if he himself is confused about what he's trying to say--"but some kind of sex magic." "Have rumors really flown that quickly?" "Never fear. Very few know. The viscountess, however, has eyes and ears everywhere. Now please answer the question." "Well ... eh ... how do I answer ...?" "It's not that simple," Yvette helps you with the answer. "The harem bond is technically sexual magic, but not //active// sexual magic. It's quite complicated. If you can tell us what you want to know it for, I can tell you in more detail." Yvette smirks. "Of course, unless you want a 25-year course on theories of sexual magic." After a few moments of silent communciations between the viscountess and her manservant, the latter answers: "the viscountess is, eh, lacking in sexual vigor. She's been frigid for the 43 years of her life." "Hmm. Let me run some preliminary tests." For the next half an hour, Yvette uses a number of spells and asks a fuckton of questions. You must applaud the manservant's patience in answering. "Alright, I've got good and bad news. The good news is that it's not a curse or spell--unless someone of the caliber of, say, Jasmine or the Incubus King cast it. The bad news is, it just means she's naturally frigid." "Isn't there a cure for that?" you ask. "Why would you assume that?" "You're telling me ''sex'' magic can't cure frigidness?" "Hey, I didn't say that either. There are several cures, but none of them are 100 percent reliable," she says. "For now, I'll prescribe a run-of-the-mill ointment called plitasrun. It's a dark-colored liquid, with the consistency of milk." Yvette glances at you. "You should be able to find in it Klatsch's market, $name." <<if $ReligiousFreedom is true>> "Actually, we already have it," the manservant says. He goes to fetch a vial of very, very dark colored liquid. "Oh! I'm rather surprised. It's quite expensive actually, and I can only imagine how hard it is to get here," Yvette says. "Hmm ...." "But this is too dark. I think it's missing a key ingredient." You sigh in a low voice. "That's unfortunate." "Oh, not really. It's just missing incubus sperm. Shouldn't be too hard to find." Yvette cocks a grin at you before pulling your pants down. You should be surprised, but since it's a succubus doing it .... Neither the viscountess nor the manservant seem surprised either. Yvette's hand is moving to give you a handjob when Viscountess Alice's hand interferes. You and Alice stare into each other's eyes for a while before she begins silently jerking you off. You're honestly too dumbfounded to respond. Alice's hand is fair but somewhat gaunt. It takes a good quarter of an hour for you to feel your orgasm coming. A thick stream of sperm bursts out of your tip, caught summarily by Yvette. She mixes the two substances together. [[Use the plitasrun|Alice Quest 2]] <<elseif $ReligiousFreedom isnot true>> "The viscountess conveys her gratitude," the manservant says. "Please return when you have obtained this plitasrun." <<set $AliceQuest to 2>> [[Back|Alice's manor]] <<endif>></tw-passagedata><tw-passagedata pid="324" name="Thalestris Harem" tags="" position="2775,3300" size="100,100">"Hey, Thalestris," you greet. "$name! Is there anything I can do for you?" Thalestris seems much more cheerful since the two of you banished the skinwalker. She tilts her head slightly when seeing Yvette, who's tagging along. "Yeah, I'd like to propose that you join my harem." Thalestris is visibly taken aback by your proposal. "You're a bold one, $name!" she says with a laugh. "Well, you've even impregnated me, so how can I refuse?" <<set $ThalestrisHarem to true>> <<run $HaremMembers.push("Thalestris")>> Yvette proceeds to produce a pinkish light. A bond has been forged between you and Thalestris. Thalestris' choice of painting is her wielding her war-axe with the rocky mountain behind her, which Yvette is more than happy to oblige. "I've to say, I was quite surprised you wooed an amazon," she whispers. Thalestris' physical prowess now reinforces your own! <<set $ThalestrisHarem to true>> [[Back|Southwestern Camp]] <<run $HaremMembers.push("Thalestris")>> <<set $player.HP to $player.HP + 30>> <<set $player.maxHP to $player.maxHP + 30>></tw-passagedata><tw-passagedata pid="325" name="Pelita's Coven" tags="" position="4500,2725" size="100,100">"Welcome to Pelita's Coven! Pelita's Coven! What can I get for you today?" A manic fairy greets you with eyes that scream 'this one's insane'. She's about a metre tall, maybe a bit less, wearing a glamorous dress. Her shiny fae wings flutter. "What do you ha--" "Everything's in the catalogue! Catalogue!" You read the piece of parchment that the fairy hands--throws you. It is clearly written by someone saner than the fairy. You remember that the exchange rate is roughly ''10 marks = 1 coin.'' "1 bottle of plitasrun -- 3500 marks. A fairly common aphrosidiac. May cure frigidity." "Charm of speed - 3000 marks. Standard military grade speed charm." "Cube of Bang-goo -- 7000 marks. A powerful magically-charged artifact that bestows physical strength and endurance. Has absolutely no relation to its namesake." <<if $ability.includes("Champion of the Fair")>> "Hihihihi, you're the champ of that fair, right? The champ! I've got a few eeeh, unlicensed items, hihihihi! Items!" "(The actual) Cube of Bang-goo -- 10000 marks. Supposedly an artifact of an ancient god and grants physical strength and endurance. May or may not be illegal." "Book of thorns -- 6000 marks. Old stock from the Maple Grove near Iceflame. Contains information about the spell 'Strength of the Bear'. Absolutely illegal to use, unless member of the Maple Grove, or approved by either the Maple Grove or the Incubus King." <<if $player.coins gte 1000 and $CubeOfBangGoo isnot true>> [[Buy the actual Cube of Bang-goo|Pelita's Coven][$player.maxattack to $player.maxattack + 25;$player.attack to $player.attack + 25;$player.maxHP to $player.maxHP + 90; $player.HP to $player.HP + 90; $CubeOfBangGoo to true; $player.coins to $player.coins - 1000]] <<elseif $CubeOfBangGoo is true>> You have bought the actual Cube of Bang-goo. <<else>> You don't have enough money to buy the actual Cube of Bang-goo. <<endif>> <<if $player.coins gte 600 and $BookOfThorns isnot true>> [[Buy the book of thorns|Book of Thorns]] <<elseif $BookOfThorns is true>> You have bought the Book of Thorns. <<else>> You don't have enough money to buy the Book of Thorns. <<endif>> <<endif>> <<if $player.coins gte 350 and $PlitasrunOwned isnot true>> [[Buy the plitasrun|Pelita's Coven][$player.coins to $player.coins - 350; $PlitasrunOwned to true]] <<elseif $PlitasrunOwned is true>> You have bought the plitasrun. <<else>> You don't have enough money to buy the plitasrun <<endif>> <<if $player.coins gte 300 and $WingCharmOwned isnot true>> [[Buy the speed charm|Pelita's Coven][$player.coins to $player.coins - 300; $player.speed to $player.speed + 20; $player.maxattack to $player.maxattack + 10; $player.maxattack to $player.attack + 10; $WingCharmOwned to true]] <<elseif $WingCharmOwned is true>> You have bought the charm. <<else>> You don't have enough money to buy the charm. <<endif>> <<if $player.coins gte 700 and $FakeCubeOfBangGoo isnot true>> [[Buy the Cube of Bang-goo|Pelita's Coven][$player.maxattack to $player.maxattack + 15;$player.attack to $player.attack + 15;$player.maxHP to $player.maxHP + 70; $player.HP to $player.HP + 70; $FakeCubeOfBangGoo to true; $player.coins to $player.coins - 700; ]] <<elseif $FakeCubeOfBangGoo is true>> You have bought the Cube of Bang-goo. <<else>> You don't have enough money to buy the Cube of Bang-goo. <<endif>> <<if $AliceQuest is 3>> [[Ask about Alice's condition|Alice Quest 3]] <<endif>> <<if $AliceQuest is 4 and $ArachneToken gte 40>> [[Hand over the Arachne artifacts|Alice Quest 4]] <<elseif $AliceQuest is 4 and $ArachneToken lt 40>> You don't have enough Arachne artifacts for Pelita. <<endif>> [[Back|Klatsch]]</tw-passagedata><tw-passagedata pid="326" name="Alice Quest 2" tags="" position="3450,3275" size="100,100">Yvette instructs you on how to use the plitasrun, which apparently needs to be applied to the entire body. Alice strips down her satin gown. Her body is surprisingly toned, unlike the supple, graceful feminine noble vibe she's been giving. You first apply the plitasrun to her legs, arms, and stomach, inciting no reaction whatsoever. Only when you begin shamelessly applying the plitasrun on her decently sized breasts with large nipples that a small reaction is seen; a steady shudder of the viscountess' body. "Good ... it's working quite okay," Yvette says, though with a blank, almost despairing look. It's when you cover the viscountess' large, hairy vagina with the black liquid that her body shudders greatly, as if nearing orgasm. You brave yourself, your fingers applying the plitasrun deep inside a noble vagina that few if any have ever seen. Fifteen seconds are all your fingers need to bring Alice to a silent but considerable orgasm. She's a squirter, it seems, as her juices fly high and long. Her manservant hurriedly goes to take some cloth to dry it. Two minutes later, the viscountess rises as if nothing just happened. She lightly shakes her head. "It's no good," Yvette sighed. "It didn't cure the frigidity." "I thought it worked?" you say. "It's a temporary solution at best," Yvette says, messing with her hair. "Do you have any other idea then?" "Me personally? No ... we need to call on bigger fish. Go to Klatsch, and meet a fairy called Pelita there. She's a bit insane, but I know no better potion maker. Let's hope she has a solution." "Okay. Let's hope so," you say. <<set $AliceQuest to 3>> [[Back|Alice's manor]]</tw-passagedata><tw-passagedata pid="327" name="Book of Thorns" tags="" position="4625,2625" size="100,100">You touch the book of thorns, which has literal fucking thorns all over it. The book vanishes into fine dust, but a great knowledge has been implanted in your head. <<if $spell.includes("Strength of the Bear")>> Your spell 'Strength of the Bear' has been fortified. Its effect is now greater by 15 points! <<set $bearpower to $bearpower + 15>> <<else>> You have learnt a new spell, 'Strength of the Bear'! <<set $bearpower to 25>> <<run $spell.push("Strength of the Bear")>> <<run $spelldesc.push("A primal strength enters you, strengthening your attack power for this fight; cost: 5 MP")>> <<endif>> <<set $BookOfThorns to true>> [[Back|Pelita's Coven]]</tw-passagedata><tw-passagedata pid="328" name="Alice Quest 3" tags="" position="4450,2550" size="100,100">"Eeh, Pelita?" "Yes yes?" The manic pixie flies a solid metre above ground around you. "Do you have anything for sexual frigidity?" "Oh no, oh no! That's so sad! Sad! Tried the plitasrun yet?" "Yeah, and it didn't work." "Hmhmhm! Weeeell, I've got something for it! A potion! A potion! Buuut, I want something equally valuable for it!" You sigh internally. "Sure, what is it?" "I want stuff from the Arachne Cult!" she says. <<if $ArachneFirstMeeting is true>> "What? What would you even use them for?" You suppose the artifacts, spells, and so on that the Arachne Cult in Selvil requests you to find should satisfy this manic fairy as well. "Spider stuff is cool!" "Fine, I'll see what I can get. How much do you want?" "As much as possible! You can get them in the northern parts of Telwor Forest!" Your personal estimation is that you should probably get her ''40 tokens'' worth of Arachne Cult artifacts. <<else>> "What? What is that?" "They're a cult dedicated to a spider god! Spider stuff is so cool! Get them in Telwor Forest, okay?" Your personal estimation is that you should probably get her ''40 tokens'' worth of Arachne Cult artifacts. <<set $ArachneToken to 0>> <<endif>> <<set $AliceQuest to 4>> [[Back|Klatsch]]</tw-passagedata><tw-passagedata pid="329" name="Alice Quest 4" tags="" position="4550,2525" size="100,100">"Hmm, yes yes! This is soooo cooooool!" "Can you please give me whatever thing to cure the frigidity now?" you plead. Pelita dives into her shop's storage room and returns three minutes later with a vial of golden liquid. "Here you go! Drink it! Drink! If it doesn't work, nothing will!" "Uh, thanks, Pelita." <<set $AliceQuest to 5>> [[Back|Pelita's Coven]]</tw-passagedata><tw-passagedata pid="330" name="Telwor Forest Guide" tags="" position="4250,2550" size="100,100"><<if $TelworForestFirst isnot true>> As you prepare to enter the Telwor Forest, you are met by an elven forest ranger. "Hello there!" he calls out. He's a tall, slender elf, wielding a glaive as tall as himself. "Oh, hello," you say. "Can I help with anything?" He lets out a small cough. "Not really. It's just that, legally, I must say the forest is dangerous, and you should be well-equipped and skilled in fighting. We rangers are patrolling it every day, but we can't guarantee your safety." You nod twice. "Thanks for the warning," you say." You should probably go back to Klatsch and prepare thoroughly. [[Back|Klatsch]] <<set $TelworForestFirst to true>> <<else>> The forest ranger gives you a polite nod. [[Ask about the forest|Telwor Forest Guide 2]] [[Head to the forest|Telwor Forest]] <<endif>> <<set $TelworForestEvent to 0>> <<if ndef $TelworForestFinalEvent>> <<set $TelworForestFinalEvent to 0>> <<endif>> <<if ndef $firecore>> <<set $firecore to 0>> <<endif>> <<if ndef $icecore>> <<set $icecore to 0>> <<endif>> <<if ndef $lustcore>> <<set $lustcore to 0>> <<endif>> <<if ndef $earthcore>> <<set $earthcore to 0>> <<endif>> <<if ndef $bloodcore>> <<set $bloodcore to 0>> <<endif>> <<if ndef $TelworForestEvent>> <<set $TelworForestEvent to 0>> <<endif>></tw-passagedata><tw-passagedata pid="331" name="Telwor Forest Guide 2" tags="" position="4125,2475" size="100,100">"Can you tell me about the forest?" you ask. "What can I expect in there?" The ranger smiles. "Of course. In terms of things you can get, fruits, saps, barks, and other typical things. There are elemental stones that can be harvested, but I'm not sure if there's a market for it here. You'd need to go to the far north, in Icedale maybe, to find Iceflame Academy members willing to buy big amounts." "And about the dangers, the main issue is elementals roaming around. They're mostly wood and ice elementals. Ah ... also, recently a massive heist was performed by a group of rogue mages. Please be careful." "A heist? A heist of what? Gold?" "No, elemental-charged stones." [[I see, thanks|Telwor Forest Guide]] <<if ndef $TelworForestFinalEvent>> <<set $TelworForestFinalEvent to 0>> <<endif>></tw-passagedata><tw-passagedata pid="332" name="Telwor Forest" tags="" position="4225,2425" size="100,100"><<set _i to random(1,10)>> <<if $TelworForestEvent is 0>> Telwor Forest is a snow forest. Light snow is falling around, beautifully decorating the tall and short trees and the shrubs. Bird sounds accompany you as you step into the forest. [[Begin your foray|Telwor Forest][$TelworForestEvent to 1]] <<elseif $TelworForestEvent is 1>> <<if _i lte 3>> You are walking under the trees when a wood elemental ambushes you! [[Fight!|Telwor Forest: Wood Elemental]] <<elseif _i lte 5>> You are exploring certain parts of the forest that is particularly chilly when an ice elemental ambushes you! [[Fight!|Telwor Forest: Ice Elemental]] <<elseif _i lte 7>> You hear footsteps behind you--you turn around and raise your dagger! [[Fight!|Telwor Forest: Fire Mage]] <<elseif _i lte 9>> You hear footsteps behind you--you turn around and raise your dagger! [[Fight!|Telwor Forest: Lust Mage]] <<else>> An oppressive aura envelops the forest .... [[Fight!|Telwor Forest: Dark Mage]] <<endif>> <<elseif $TelworForestEvent is 2>> You can choose to either forage or rest. [[Rest|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1; $player.HP to $player.maxHP; $player.MP to $player.maxMP]] [[Forage|Telwor Forest Forage]] <<elseif $TelworForestEvent is 3>> <<set _j to random(1,10)>> <<set _i to _j + 4>> <<if _i lte 3>> You are walking under the trees when a wood elemental ambushes you! [[Fight!|Telwor Forest: Wood Elemental]] <<elseif _i lte 5>> You are exploring certain parts of the forest that is particularly chilly when an ice elemental ambushes you! [[Fight!|Telwor Forest: Ice Elemental]] <<elseif _i lte 7>> You hear footsteps behind you--you turn around and raise your dagger! [[Fight!|Telwor Forest: Fire Mage]] <<elseif _i lte 9>> You hear footsteps behind you--you turn around and raise your dagger! [[Fight!|Telwor Forest: Lust Mage]] <<else>> An oppressive aura envelops the forest .... [[Fight!|Telwor Forest: Dark Mage]] <<endif>> <<elseif $TelworForestEvent is 4>> It's already evening, and the Domain's twin, dim suns are nearly setting. You don't have much time left. [[Forage|Telwor Forest Forage]] [[Sit and rest|Telwor Forest Event]] <<elseif $TelworForestEvent is 5>> Night has fallen. You should return to your camp and [[rest|End day 2]] <<endif>> <<set _j to random(1,7)>> <<if _j is 1>> <<set $TelworForestRandomMage to "human">> <<elseif _j is 2>> <<set $TelworForestRandomMage to "elf">> <<elseif _j is 3>> <<set $TelworForestRandomMage to "drow">> <<elseif _j is 4>> <<set $TelworForestRandomMage to "dwarf">> <<elseif _j is 5>> <<set $TelworForestRandomMage to "dragonkin">> <<elseif _j is 6>> <<set $TelworForestRandomMage to "incubus">> <<elseif _j is 7>> <<set $TelworForestRandomMage to "succubus">> <<endif>></tw-passagedata><tw-passagedata pid="333" name="Alice Quest 5" tags="" position="3400,3375" size="100,100">You unveil the golden liquid given to you by Pelita. "She said to drink it," you say, handing over the vial to Alice. The viscountess nods solemnly, opens the vial, and drinks it all in one gulp. A few tense seconds pass until she finally shakes her head strongly. Yvette lets out a long, nearly silent sigh. "$name and I will continue looking for a solution. Maybe I'll petition Jasmine or even the Incubus King himself, okay? We'll be back." You notice that Yvette seems almost desperate to get out of the room, so you just nod slightly and leave with her. In the spacious halls of Alice's manor, Yvette pins you down. "You know how I'm feeling?" she asks you. You grin. "Horny?" "Pissed. Which means I need a good fuck to clear my head." After dispelling her glamour illusion, Yvette takes off her panties--which, alongside a bra, is all she actually wears. You hastily take off your own trousers, your aroused cock erect. Without saying another word, she slams her entire body against yours. As you enjoy the warmth of your harem mistress' pussy, you spot the viscountess masturbating, hiding from a corner. "Hey Alice!" you call out. "If you want to watch, you can watch here!" Alice (tries to) gracefully struts over, her face clearly aroused by the wild mating. Her hand plays with her pussy with wide labias. She continuously climaxes like a bitch in heat, ruining her own carpet with the juices. "Tch, the two of us worked so hard to cure you--and you just need to see some good sex? I won't stand for it!" Yvette says, standing up. She roughly grabs the viscountess' arm, and forces her unto your cock. "Get raped, bitch!" Yvette roars. Alice's wet, previously frigid pussy hugs your cock like a sheath hugs its blade. Yvette puts in all her strength in forcing the viscountess' body down your cock. When she orgasms, it's a spectacular thing to behold, her lewd cunt spewing its juices left and right. Your own cock bursts, filling her womb with your sperm. "Aaah ...," both of you moan. The manservant hurriedly rushes into the scene, helping the viscountess to get up--but she can't. "Please, leave for today. The viscountess will see you tomorrow." A very fine proposal--you, too, are tired. <<set $AliceQuest to 6>> [[Go back|End day 2]] </tw-passagedata><tw-passagedata pid="334" name="Telwor Forest: Wood Elemental" tags="" position="4225,2275" size="100,100"><<nobr>> <<set _temphp to random(500,550)>> <<set _tempattack to random(55,70)>> <<set _tempspeed to random(15,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Wood Elemental", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting a wood elemental; an amalgamation of moving wood and stone. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="335" name="Telwor Forest: Ice Elemental" tags="" position="4325,2300" size="100,100"><<nobr>> <<set _temphp to random(400,500)>> <<set _tempattack to random(70,85)>> <<set _tempspeed to random(10,15)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Ice Elemental", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> You are fighting an ice elemental; nature's facets of ice and snow made manifest! <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="336" name="Telwor Forest: Fire Mage" tags="" position="4275,2175" size="100,100"><<nobr>> <<set _temphp to random(280,400)>> <<set _tempattack to random(100,120)>> <<set _tempspeed to random(20,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Fire Mage", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The figure reveals themself. It's a $TelworForestRandomMage fire mage, playing with small streaks of flame. "Looks like someone is leaving this world today!" the mage chuckles. "Don't worry, I'll leave your face untouched--just pray you have enough marks in your pocket to not piss me off." "Bring it on, cunt." Fire mages tend to be very aggressive--but their offensive strength comes with a defensive weakness. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="337" name="Alice Quest 6" tags="" position="3375,3525" size="100,100">"Uhm. So. You're just a voyeur," you say. An awkward silence is broken by the viscountess' smile. The manservant speaks up once more. "The viscountess says that you're always welcome in her bedchamber if you bring a fellow female companion. She'd like to watch," he says, glancing at the viscountess. "In exchange, she's offering her own companionship, as well as some financial support--25 coins a day." It's really just a complicated, polite way to say she wants to watch you fuck, and then fuck her. And pay you a bit. You engage in a polite conversation before excusing yourself. <<set $AliceQuest to 7>> [[Return|Dornburg]]</tw-passagedata><tw-passagedata pid="338" name="Telwor Forest: Lust Mage" tags="" position="4450,2400" size="100,100"><<nobr>> <<set _temphp to random(600,700)>> <<set _tempattack to random(80,90)>> <<set _tempspeed to random(20,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Lust Mage", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The figure reveals themself. It's a $TelworForestRandomMage lust mage, sparks of lust energy flying around. "You've wondered too far, boy!" "We'll see who'll be saying that when this is over." Lust mages tend to start out strong but their magic rapidly dwindles over time as their lust energy is used. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="339" name="Telwor Forest: Dark Mage" tags="" position="4450,2200" size="100,100"><<nobr>> <<set _temphp to random(500,600)>> <<set _tempattack to random(80,90)>> <<set _tempspeed to random(20,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Dark Mage", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The figure reveals themself. It's a $TelworForestRandomMage blood mage, overflowing with power. "Have you written your last will yet, friend?" "Have you written yours?" The blood mages of the Domain's southern provinces, thanks to a strict admittance process and a tough training regiment. Prepare for a fight for your life. <<set $bossfight to false>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="340" name="Bounty Hunter Office" tags="" position="4450,2950" size="100,100">You visit the bounty hunters' office. It seems unnaturally busy, even if Klatsch is a big city. You hear things like "fuck, the heist's way too big". You head to the office board and see what jobs there are. There's a receptionist--a harsh looking drow woman whom you figure out you thankfully don't have to interact with, unless you need particular help. [[Help needed to recover magically-charged stones stolen during the heist|Stolen Stones]] [[Visit the redeeming office|Redeem Office]] <<if $Stonesold gte 5 and ndef $JharinaQuest>> [[Count Arnold Rembach is requesting an experienced bounty hunter for private work|Jharina Quest 1]] <<elseif $JharinaQuest is 6>> You carefully inquire about the nature of Countess Jharina. It seems that the receptionist, with a grin, is willing to tell you more. [[Hear her out|Jharina Quest Bounty Hunter Inquiry]] <<endif>> <<if $SeleneJharinaJealousyQuest is 5 and $KlatschRep gte 75>> In the bounty hunter's office, you spot a parchment flier advertising the umpteenth sex festival of Klatsch. You decide to sign up Selene and Jharina. The receptionist nods curtly. <<set $SeleneJharinaJealousyQuest to 6>> <<elseif $SeleneJharinaJealousyQuest is 5>> In the bounty hunter's office, you spot a parchment flier advertising the umpteenth sex festival of Klatsch. You decide to sign up Selene and Jharina. The receptionist shakes her head. "No." "What?" "I said no. I presume your ears are working." "Why?" "The slots are full." "Why is the flier there, then?" "It's for spectators." "It literally says 'wanted: slaves for the competition'." The drow receptionist's gaze almost feels burning in your eyes, so you slowly withdraw. ''Perhaps you should raise your reputation here''. <<endif>> [[Back|Klatsch]] <<if ndef $KlatschCoupons>> <<set $KlatschCoupons to 0>> <<endif>> <<if ndef $Stonesold>> <<set $Stonesold to 0>> <<endif>></tw-passagedata><tw-passagedata pid="341" name="Stolen Stones" tags="" position="4625,2950" size="100,100">"The City Council of Klatsch has announced the following rewards for returning magically-charged stones stolen during the heist: Firecore stone -- 2 coupons Icecore stone -- 1 coupon Woodcore stone -- 1 coupon Lustcore stone -- 2 coupons Darkcore stone -- 3 coupons 1 coupon can be exchanged for 110 marks in the redeeming office. "Wow, such dogshit prices," you hear a passing bounty hunter say to her partner. "Heh. The Council must be getting their asses burned after this kind of disaster. I bet they're emptying their treasury just for this ... or else the Incubus King will come after them." You currently have $earthcore woodcore stones, $firecore firecore stones, $icecore icecore stones, $darkcore darkcore stones, and $lustcore lustcore stones. <<if $firecore gte 1>> [[Hand over a firecore stone|Stolen Stones][$firecore to $firecore -1; $KlatschCoupons to $KlatschCoupons + 2; $Stonesold to $Stonesold + 1; $KlatschRep to $KlatschRep + 2]] [[Hand over all firecore stones|Stolen Stones][$KlatschCoupons to $KlatschCoupons + ($firecore * 2); $Stonesold to $Stonesold + $firecore; $KlatschRep to $KlatschRep + ($firecore * 2);$firecore to 0]] <<endif>> <<if $icecore gte 1>> [[Hand over an icecore stone|Stolen Stones][$icecore to $icecore - 1; $KlatschCoupons to $KlatschCoupons + 1;$Stonesold to $Stonesold + 1;$KlatschRep to $KlatschRep + 2]] [[Hand over all icecore stones|Stolen Stones][$KlatschCoupons to $KlatschCoupons + ($icecore * 2); $Stonesold to $Stonesold + $icecore; $KlatschRep to $KlatschRep + ($icecore * 2); $icecore to 0]]<<endif>> <<if $earthcore gte 1>> [[Hand over a woodcore stone|Stolen Stones][$earthcore to $earthcore - 1; $KlatschCoupons to $KlatschCoupons + 1; $Stonesold to $Stonesold + 1;$KlatschRep to $KlatschRep + 2]] [[Hand over all woodcore stones|Stolen Stones][$KlatschCoupons to $KlatschCoupons + ($earthcore * 2); $Stonesold to $Stonesold + $woodcore; $KlatschRep to $KlatschRep + ($woodcore * 2);$earthcore to 0]]<<endif>> <<if $lustcore gte 1>> [[Hand over a lustcore stone|Stolen Stones][$lustcore to $lustcore - 1; $KlatschCoupons to $KlatschCoupons + 2;$Stonesold to $Stonesold + 1;$KlatschRep to $KlatschRep + 2]] [[Hand over all lustcore stones|Stolen Stones][$KlatschCoupons to $KlatschCoupons + ($lustcore * 2); $Stonesold to $Stonesold + $lustcore; $KlatschRep to $KlatschRep + ($lustcore * 2);$lustcore to 0]]<<endif>> <<if $darkcore gte 1>> [[Hand over a darkcore stone|Stolen Stones][$bloodcore to $bloodcore - 1; $KlatschCoupons to $KlatschCoupons + 3;$Stonesold to $Stonesold + 1;$KlatschRep to $KlatschRep + 2]] [[Hand over all darkcore stones|Stolen Stones][$KlatschCoupons to $KlatschCoupons + ($darkcore * 3); $Stonesold to $Stonesold + $darkcore; $KlatschRep to $KlatschRep + ($darkcore * 2);$darkcore to 0]]<<endif>> [[Back|Bounty Hunter Office]] </tw-passagedata><tw-passagedata pid="342" name="Alice Sex" tags="" position="3500,3500" size="100,100">To have sex with the viscountess, you'll need to bring a companion of your own. [[Vaginal sex with Yvette|Alice Vaginal]] <<if $SeleneOath is true>> [[Anal sex with Selene|Alice Anal]] <<endif>></tw-passagedata><tw-passagedata pid="343" name="Alice Anal" tags="" position="3500,3625" size="100,100">You summon Selene to join you in Alice's bedchamber. "Face down, ass up!" "Yes, Master!" It must have become Selene's favorite phrase. Selene's well-trained asshole puffs up, ready to accept its owner. A naked Alice lays on her bed, masturbating openly. You begin fucking your slave in her ass. Selene's moans fill the air, alongside your grunts. "Ah! Master! Harder please!" "I decide how hard I want to go, slave," you say, sharply delivering a slap on her jiggly ass. You pull out, and order Selene to open her mouth. She obediently cleans your dirty cock with her tongue. "Master ...." "No cum for today, slut," you say. You gesture towards Alice, who's been masturbating until a large puddle of juices has formed, that you want your price now. She gestures with a finger pointed at her asshole. You order Selene to lick Alice's ass to make it wet before you slowly penetrate the viscountess' backdoor. "Mmh--this isn't your first time, I take it?" you comment as you pound her faster. The viscountess silently orgasms again when you finally ejaculate inside her asshole. You step back, taking a look at your work: a rose stained white. "I'll be back, viscountess." [[Back|Alice's manor]]</tw-passagedata><tw-passagedata pid="344" name="Alice Vaginal" tags="" position="3625,3625" size="100,100">Today you bring your harem mistress, Yvette, to Alice's manor. It would appear Yvette has a not-so-hidden dominatrix streak that shows itself when she is with Alice. The succubus takes on a missionary position, spending little time with foreplay. "You like this, you noble pig?" Yvette taunts. "The face of a noble--the body of a whore!" You pull out of your harem mistress' exquisite pussy, signalling your intentions to switch holes. Yvette is immediately all over Alice, teasing her nipples roughly and making her wet pussy even wetter. "Open up, bitch! My patriarch's going to fuck your whore pussy!" And fuck her whore pussy you do. Whatever Yvette might say, Alice's hairy pussy is pleasing. Its walls hug your cock tight, even if Alice herself isn't doing anything active. You spend little time playing around and instead wildly fucks the viscountess' pussy. Yvette pulls on Alice's clit, making her orgasm even harder. At the last moment, you pull out. Yvette grabs your shaft and pumps it twice, releasing a burst of translucent cum on Alice's stomach. "We'll be back, bitch. Clean that pussy up!" Yvette's cold laughter rings as the two of you clean up and leave. [[Back|Alice's manor]]</tw-passagedata><tw-passagedata pid="345" name="Telwor Forest Forage" tags="" position="4375,2475" size="100,100">You spend some time going around and foraging for things. You find: <<nobr>> <<set _a to random(1,2)>> <<set _b to random(1,2)>> <<set _c to random(1,3)>> <<set _d to random(1,3)>> <<set _e to random(1,4)>> <<set _f to random(1,3)>> <<if _a is 1>> <<set _wc to 1>> <<else>> <<set _wc to 0>> <<endif>> <<if _b is 1>> <<set _ic to 1>> <<else>> <<set _ic to 0>> <<endif>> <<if _c is 1>> <<set _lc to 1>> <<else>> <<set _lc to 0>> <<endif>> <<if _d is 1>> <<set _fc to 1>> <<else>> <<set _fc to 0>> <<endif>> <<if _e is 1>> <<set _dc to 1>> <<else>> <<set _dc to 0>> <<endif>> <</nobr>> _wc woodcore stones _ic icecore stones _lc lustcore stones _fc firecore stones _dc darkcore stones [[Continue|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1]] <<set $firecore to $firecore + _fc>> <<set $darkcore to $darkcore + _dc>> <<set $earthcore to $earthcore + _wc>> <<set $icecore to $icecore + _ic>> <<set $lustcore to $lustcore + _lc>></tw-passagedata><tw-passagedata pid="346" name="Telwor Forest Event" tags="" position="4575,2275" size="100,100"><<if $TelworForestFinalEvent is 0>> When you're sitting under a snowy tree, you see a figure walking from afar. You steady your dagger, in case it's a threat. You see that it's an olive-skinned succubus with a female elf slave walking on all fours. You let your guard down as they walk towards you. "Hello there!" the succubus greets you. "Uh, hello. Is there anything I can do for you?" "Oh, nothing really. Just chatting. Not many people in the forest, not since the heist and all those bandits roaming around." "You're not scared about the bandits?" The succubus lets out a haughty laugh that reminds you of your harem mistress. "What's your name?" "$name. And yours?" "Juna. Well, $name, I should go. See you later." The succubus leaves--you probably should, too. [[Continue|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1; $TelworForestFinalEvent to $TelworForestFinalEvent + 1]] <<elseif $TelworForestFinalEvent is 1>> Today you once more encounter Juna, this time with a bulky female orc slave. The two of you rest under the tree and chat together. Juna orders the orc slave to suck your cock meanwhile. She herself undresses too, revealing a surprising package down there: a large girth as big as your own. The two of you talk a little. After you talk about your own background, she speaks about herself. "Ah, I'm just a slave trainer. A pretty good one, though," she says. "I helped break the goblin goddess Amaratat for the Incubus King, and the money I got from that is enough to sustain my lifestyle basically forever." "So you're just slave-training for fun, then?" "Yup! They're always so interesting, you know ... almost all give some kind of resistance, and you have to 'break' them down first. Then you can mold them into what you want. Cheap holes--no training needed. Depraved cumdumps--trust me, a lot of training is needed if you want your slave to drink your piss or do things even more extreme than that. Then there are cases about combat slaves, or highly specific skilled slaves, and I need to work with others for that." When the orc slave brings you to orgasm, she quietly drinks your cum. "Ah, see you later, $name. We're going, Number 14." Juna leaves--you probably should, too. [[Continue|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1; $TelworForestFinalEvent to $TelworForestFinalEvent + 1]] <<elseif $TelworForestFinalEvent is 2>> Today it is Juna who is waiting for you under the trees. The two of you click almost immediately. "Yeah, I've just finished an order from a noble down south. That orc last time was part of it," she says. "Do you have any slaves you want me to train, $name?" "Maybe not now," you say. "But I'll keep you in mind." "Hmm, you know, what if I teach you some of my skills?" "Slave-breaking? I don't know ... it's not really in my skillset." "What about bondage? I can teach you how to use ropes and other tools if you want." "Huh, now that sounds very interesting." "Great! Knock on my house in Klatsch, okay? Oh, and if you want sex ... all you have to do is ask." [[Continue|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1; $TelworForestFinalEvent to $TelworForestFinalEvent + 1;$JunaHouseUnlocked to true]] <<else>> You rest for a while. The suns are setting. You should probably leave. [[Continue|Telwor Forest][$TelworForestEvent to $TelworForestEvent + 1;]] <<endif>></tw-passagedata><tw-passagedata pid="347" name="Harem Ask 2" tags="" position="2875,5250" size="100,100">"So what is a harem exactly?" you ask. "It's not just a gathering of a man and several women, right?" "Well, not in the Domain, no," Yvette answers. "There are several different familial units in the Domain. First you have the weird, hippy-ass 'one husband, one wife' families. It's a relatively new development amongst succubi and incubi, but I understand it's a norm among humans, elves, and dwarves, both in the Domain and elsewhere. Funnily enough, my family was like this." "The usual incubus family is a group of four to six people banding together, and impregnating one another. Just standard stuff. Now harems--it's an interesting system, because it usually involves the patriarch or the matriarch--the head of the harem--dominating their partners. There are several kinds of harem members, too. Usually there's a harem master or mistress, who stands on equal ground with the head of the harem. Then there are wives and husbands, who are technically equal to the head of the harem but practically below the coordination of the harem mistress. Then concubines, and then slaves." "Wow, it's quite complicated." "It is, yeah. But all nobles worth their salt have a harem. It's a symbol of prestige. The head of harem is expected to be wealthy enough to support the harem, and powerful enough to protect it." [[Back|Yvette Chat]]</tw-passagedata><tw-passagedata pid="348" name="Juna House" tags="" position="4650,2800" size="100,100">"Hey there!" Juna's house is a pleasantly large house, decorated with exotic plants and flowers. Juna herself is stark naked, showing off her large cock. "I've got a nudist lifestyle," she says. "Shame it got outlawed in Klatsch a decade ago. Anyways, what do you want?" [[Sex|Juna Sex]] <<if $AdvancedBondage isnot true>> [[Learn bondage|Juna Bondage][$AdvancedBondage to true]] <<endif>> <<if $BrothelQuest gte 5 and $JunaWhore isnot true>> [[Recruit Juna for the brothel in Selvil|Juna Whore]] <<endif>> [[Back|Klatsch]]</tw-passagedata><tw-passagedata pid="349" name="Juna Sex" tags="" position="4800,2700" size="100,100">It should be an interesting experience, sleeping with a woman with a cock. Juna grins. "So, what do you want?" [[Oral sex|Juna Frot]] [[Anal sex (both ways)|Juna Sex Sub]] [[Back|Juna House]]</tw-passagedata><tw-passagedata pid="350" name="Juna Bondage" tags="" position="4825,2800" size="100,100">Juna whips out her array of bondage devices: whips, cages, ropes, and various other machines. You spend two weeks there, learning many techniques as well as adopting a more sadist and dominant mindset When you emerge from Juna's house, you can call yourself a master bondage practitioner. Well, okay, maybe not a ''master'', but a ''not-too-bad'' bondage practitioner. You're also able to channel your newfound enhanced sadism into your fighting style, boosting your attack power. [[Return to Klatsch|Klatsch]] <<set $player.maxattack to $player.maxattack + 5>> <<set $player.attack to $player.attack + 5>> <<set $day to $day + 14>> </tw-passagedata><tw-passagedata pid="351" name="Juna Frot" tags="" position="4900,2525" size="100,100">"Aah, this is what I like." Juna steps forward as you take off your clothes. "Frottage is fun, but only if the sizes match, don't you think?" You smile faintly. This is certainly new to you, so you let Juna take control. She begins by kissing you on the lips. You return her kiss--this part you certainly know. You grope Juna's large breasts while she feels your chest muscles. Your cocks grind on one another for several minutes until Juna takes you to bed. "Mmmh," you both moan as you touch each other's cock. You copy her movements when she jerks you off. You move to the sixty-nine position with Juna on top. You begin licking and sucking her cock--salty and sweaty. Juna returns the favor. One of your fingers crawl into her ass. Both of you are quite close to climax. Your mouths work on one another's cock until your bodies succumb to lust and release cum in each other's throat. The salty taste of Juna's semen washes all over your throat. "You've got some talent as a cocksucker, $name," Juna says, smirking. "That's one area where I don't need--or want--any talent." [[Back|Juna Sex]]</tw-passagedata><tw-passagedata pid="352" name="Juna Sex Sub" tags="" position="4925,2675" size="100,100">You and Juna undress before getting to bed. Juna asks to fuck your ass sideways. "Fine, but be gentle," you murmur. You feel Juna's saliva used as lube for your ass. You close your eyes when Juna's large shaft enters your asshole. The feeling of such a big rod prodding at your prostate is bringing you more pleasure than you expected. Juna's hands are all over you, with her kissing you on the cheek. Five minutes of pounding later, you feel your ass sore. A burst of succubus cum fills your ass. You quickly turn the tables, and Juna is willing to play along as you make her assume the doggy style and begin fucking her experienced ass. "Mm! Your ass is underdeveloped, but your cock--mmh, exquisite!" You pound the slut hard, knowing she can take it. "Are you trying to dominate me?" Juna asks. "I'm sure your average alley whore will bend to your cock ... ah! But you can't dominate Klatsch's top slave trainer so easily." Juna's ass walls are both tight and comfortable, and soon you feel yourself nearing climax. You return the favor by spraying your seed all inside Juna's asshole. "Aaah ... I've got to admit you're one of the better ones. Don't hesitate to visit me, $name." [[Back|Juna Sex]] </tw-passagedata><tw-passagedata pid="353" name="Dahlia Family Quest" tags="" position="1575,1975" size="100,100">"Oh, is it showing on my face?" the blonde ex-prostitute smiles. "I'm sorry, $name. You don't need to worry about me." You frown. "That won't do. Something's clearly wrong, Dahlia," you say pointedly. "Well, I suppose so. I'm still not over my ex-husband," she says. "I ... actually have something I've not shown you." She goes to grab something from her pack. It's a bundle of earth and flowers. "The day before my children got sick with that 'Curse of the Rat' or whatever, he brought home this bundle. He said it was a good-luck charm from a shaman." You sense a strange feeling of empyrean magic in there. You call on Yvette to confirm it. The succubus takes a glance and immediately frowns. "Hoo boy. Yeah, it's a curse alright," she says. "Dangerous stuff, but a bit primitive, so to speak." "Then it's right, my ex-husband did it ... but for what?" "Usually it's to curry favor with some sort of fey creature," Yvette explains. "The dangerous kind, not the mischiveous fairies or civilized elves, or even the wyld fae." "I see." Dahlia closes her eyes, and re-opens them three seconds later. "I want revenge, $name. I want that man dead. Tall and bulky build, pale skin. Bald. Find him and tell him Dahlia says 'fuck you'." "Ehm," you say. "I mean, sure, Dahlia. But it's not so easy to find him ...." At that moment, the twins enter the tent. "Uh, Mom?" Ella asks. "Is this a bad time?" "Oh, not at all, honey! Is there anything?" "So, um, one of our teachers say we should be doing some field medicine. He's asking us to go with him on a trip to a certain field with herbal medicinal plants. He's asking for 1000 coins, or 5 'woodcores', a kind of nature stone." "1000 coins? That's quite a lot ...," Dahlia says. "Listen, $name and I are talking about some important things right now, okay?" Taking the cue, the twins leave. "Oh dear, 1000 coins, what is this now?" "If it's money, I can help," you offer. "I'm sorry, $name," Dahlia says. "Looks like me and my daughters will owe you more. Please, forget about what I said about my ex-husband. I only have the past--but Ella and Emma--they'll have the future." "Don't worry, Dahlia," you say. "I'll try to do both." Dahlia hugs you. Her warmth comforts you. "I can only offer my body, affection, and loyalty in return, $name." "And that is plenty enough." For now, you should head to ''Toft's school'' and pay the fee. <<set $DahliaFamilyQuest to 1>> [[Return to camp|New Camp]]</tw-passagedata><tw-passagedata pid="354" name="Dahlia Family Quest 2" tags="" position="2000,2675" size="100,100">After paying the fee with Dahlia, you ask to see this tutor. Bald. Pale (even paler than usual white, pale people of West or Center Walshemia). Tall and bulky. Dahlia immediately runs away. This man is her husband. After some very tense talk, you understand he's bringing Ella and Emma to a location called Angrisa Grove, a former elf holding full of medicinal plants. You immediately return to Dahlia's tent. "How //dare// that bastard! $name, kill him! I can't let him go with Ella and Emma!" "Let's be rational here," Yvette comes as a gust of logical wind, "we can't stab anyone openly without strong backlash. We need evidence. Or we have to kill him somewhere remote. You know, like that grove he's bringing the twins to." "Come to think of it, why is he doing this?" you wonder. "The answer might lie in the Angrisa Grove. It's an old elfhome. Won't be unthinkable for powerful fey to still reside there. Maybe he's offering the twins as sacrifice for his patron." "Then, what if we kill him there?" you propose. "Kill two birds with one stone. Enact Dahlia's revenge, and stop this fey from harming anyone." "Oh, I like that! Dahlia?" "$name, I honestly would rather not involve my daughters in any unnecessary danger," Dahlia says. "But ... no, I trust you completely. Do as you think is right. Just please, keep my daughters safe." "I understand, Dahlia," you say. Yvette and you devise a plan. You and Dahlia will shadow the latter's ex-husband while he goes to Angrisa Grove, with Yvette as backup. ''It'll be nice to have a fey specialist, like an amazon or something'', but not necessary. Once you're ready, you should go to Toft's and see the twins off. <<set $DahliaFamilyQuest to 2>> [[Back to camp|New Camp]]</tw-passagedata><tw-passagedata pid="355" name="Dahlia Family Quest 3" tags="" position="200,2625" size="100,100">Yvette sets out first. You and Dahlia prepare a carriage with horses. As soon as Dahlia's ex-husband and the twins leave, you tail them from a distance. <<if $HaremMembers.includes("Thalestris")>> Thalestris joins you halfway through the journey. "I think I saw some strange things," Thalestris says. "I'll wait for Yvette to tell you more." <<endif>> After three days of stalking, you arrive at Angrisa Grove. It is a grove abundant with plants and wildlife. You set a temporary camp nearby. "You should rest, Dahlia. You must be tired." "You're too kind, $name." You hear a strange growl--prompting you to raise your dagger. What comes out of the shadows is a hideous thing--a sort of human, covered in fungi, emitting a chilling feeling. You steel your resolve-- A blast of succubus lust magic blows it apart. Yvette has just hurled it from behind. "Thanks, Yvette." "Of course. I've got your back, $name," she says. "But still ... this thing ...." You and Yvette observe it closely. "Well, uh." "It's a human," Yvette says. "You're a genius." "Thank you. Well, for whatever it's worth, I think this might be fey magic." "So our enemy really is a fey creature, then." "Yeah," Yvette mutters. "Hmm. But there's something else. I can't put my finger on it, but there's a certain, different energy on it. The energy of something dangerous." <<if $HaremMembers.includes("Thalestris")>> "It's Elyon's energy," Thalestris interjects. "It's \\what\\?" Yvette asks. "Elyon is one of the mid-rank Abyssal Lords ... I don't think you know what you're talking about." Thalestris lets out a grunt of displeasure. "No, it's clearly written in our lore. Elyon is a corrupter of nature, a being who can blemish fertile soil and blacken forests. He is our goddess Sweva's archenemy." You sigh internally. \\Great, an Abyssal Lord.\\ <<set $AngrisaGroveScore += 1>> <<endif>> "Whatever happens, we must protect Ella and Emma," you say. "Anything else is secondary." After a short meal, you gather everyone. You and Yvette use your lust magics to cast a barrier around your temporary camp. Yvette adds in a few anti-fey charms. "Dahlia, you must stay here," you say. "Yvette, continue tailing Dahlia's ex-husband. I'll try to investigate." <<if $HaremMembers.includes("Thalestris")>> "What about me?" Thalestris asks. "Maybe you should protect the camp, Thalestris?" "I've got another idea. I can try to commune with Sweva and notify her of the threat. It can't be here, though. I need to find somewhere more quiet." "I see. In that case ...." [[Guard the camp|Angrisa Grove 1][$ThalestrisAngrisaGrove to "guard"]] [[Commune with Sweva|Angrisa Grove 1][$ThalestrisAngrisaGrove to "commune"]] <<else>> [[Head out|Angrisa Grove 1]] <<endif>> <<set $AngrisaGrove to 1>></tw-passagedata><tw-passagedata pid="356" name="Angrisa Grove 1" tags="" position="175,2750" size="100,100"><<if $AngrisaGrove is 1>> "Everyone, good luck. And be careful," you say. Everyone nods and smiles at you. "I'll be hoping for your success," Dahlia says. "I'll be preparing meals for you." Yvette quickly goes out to tail Dahlia's ex-husband, dashing like a shadow. You prepare to head out as well. <<if $ThalestrisAngrisaGrove is "guard">> Thalestris proudly stands guard over your camp. <<elseif $ThalestrisAngrisaGrove is "commune">> Thalestris has gone out to commune with Sweva. <<set $AngrisaGroveSwevaSummoned to true>> <<endif>> Looking at the situation, you see six directions you can go to: north, south, east, northeast, southeast, and southwest. The western and northwest directions are where Angrisa Grove proper lies, and should be covered by Yvette. The question is where you should go first. [[North|Angrisa Grove North][$AngrisaGroveNorthDone to true]] [[South|Angrisa Grove South][$AngrisaGroveSouthDone to true]] [[East|Angrisa Grove East][$AngrisaGroveEastDone to true]] [[Southeast|Angrisa Grove Southeast][$AngrisaGroveSoutheastDone to true]] [[Northeast|Angrisa Grove Northeast][$AngrisaGroveNortheastDone to true]] [[Southwest|Angrisa Grove Southwest][$AngrisaGroveSouthwestDone to true]] <<elseif $AngrisaGrove is 2>> You return to your camp for a meal and sleep. Yvette returns, too. "Well, so far so good," Yvette says. "Nothing strange yet. I deployed a 'shadow' to continue observing there." You nod. "Okay, so no issues for now." The entire camp sleeps and rests. In the morning of the second day, Yvette sets out again. Just a few minutes after that, a strange sighting approaches. "Hhk!" Dahlia nearly vomits. It is an amalgamation of ten, no, maybe twenty, dead bodies, strung together by yellow fungi mycelium. It slowly, but surely approaches, <<if $ThalestrisAngrisaGrove is "guard">> "I'll handle it," Thalestris says. "Go ahead and do what you must do, $name." <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> With Thalestris available to hold the camp, you can continue your investigations. <<if $AngrisaGroveNorthDone isnot true>> [[North|Angrisa Grove North][$AngrisaGroveNorthDone to true]] <<endif>> <<if $AngrisaGroveSouthDone isnot true>> [[South|Angrisa Grove South][$AngrisaGroveSouthDone to true]] <<endif>> <<if $AngrisaGroveEastDone isnot true>> [[East|Angrisa Grove East][$AngrisaGroveEastDone to true]] <<endif>> <<if $AngrisaGroveSoutheastDone isnot true>> [[Southeast|Angrisa Grove Southeast][$AngrisaGroveSoutheastDone to true]] <<endif>> <<if $AngrisaGroveNortheastDone isnot true>> [[Northeast|Angrisa Grove Northeast][$AngrisaGroveNortheastDone to true]] <<endif>> <<if $AngrisaGroveSouthwestDone isnot true>> [[Southwest|Angrisa Grove Southwest][$AngrisaGroveSouthwestDone to true]] <<endif>> <<if $AngrisaGroveXianMet is true and $AngrisaGroveXianSummoned isnot true>> [[Visit Xian's camp|Angrisa Grove Xian Camp][$AngrisaGroveXianSummoned to true]] <<endif>> <<else>> You can't let that abomination get near your camp. You must [[confront it|Meet Fungal Abomination]] <<endif>> <<elseif $AngrisaGrove is 3>> Yvette doesn't return. It seems like she's busy. The time is noon. You eat lunch together with Dahlia. "I wonder what would happen if you never went to my house," Dahlia says. "Luck's rather fickle, isn't it?" "I'd rather not think of possibilities," you say. "However things might go, the reality is that we're here, and now is now. We'll just have to go through our choices." Dahlia smiles faintly. "You're right, $name." After lunch, you head out again. <<if $AngrisaGroveNorthDone isnot true>> [[North|Angrisa Grove North][$AngrisaGroveNorthDone to true]] <<endif>> <<if $AngrisaGroveSouthDone isnot true>> [[South|Angrisa Grove South][$AngrisaGroveSouthDone to true]] <<endif>> <<if $AngrisaGroveEastDone isnot true>> [[East|Angrisa Grove East][$AngrisaGroveEastDone to true]] <<endif>> <<if $AngrisaGroveSoutheastDone isnot true>> [[Southeast|Angrisa Grove Southeast][$AngrisaGroveSoutheastDone to true]] <<endif>> <<if $AngrisaGroveNortheastDone isnot true>> [[Northeast|Angrisa Grove Northeast][$AngrisaGroveNortheastDone to true]] <<endif>> <<if $AngrisaGroveSouthwestDone isnot true>> [[Southwest|Angrisa Grove Southwest][$AngrisaGroveSouthwestDone to true]] <<endif>> <<if $AngrisaGroveXianMet is true and $AngrisaGroveXianSummoned isnot true>> [[Visit Xian's camp|Angrisa Grove Xian Camp][$AngrisaGroveXianSummoned to true]] <<endif>> <<elseif $AngrisaGrove is 4>> The morning sun feels dimmed by the fungal infestation. Yvette returns with even grimmer news. "He's led Ella and Emma into basically the heart of the grove. I think it's not long before we have to directly interfere." "I see," you say. "They're safe?" "About as safe as they can be in this situation. I do have some good news. It seems like the Incubus King's--or, rather, Jasmine's--agents have been monitoring the situation as well. If push comes to shove, Jasmine can be counted upon for direct intervention." A few moments after Yvette departs again, you notice something familiar from the distance. "It's another of those fungal abominations ...," Dahlia remarks, this time not vomiting. <<if $ThalestrisAngrisaGrove is "guard">> "I'll handle it," Thalestris says. "Go ahead and do what you must do, $name." <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> With Thalestris available to hold the camp, you can continue your investigations. <<if $AngrisaGroveNorthDone isnot true>> [[North|Angrisa Grove North][$AngrisaGroveNorthDone to true]] <<endif>> <<if $AngrisaGroveSouthDone isnot true>> [[South|Angrisa Grove South][$AngrisaGroveSouthDone to true]] <<endif>> <<if $AngrisaGroveEastDone isnot true>> [[East|Angrisa Grove East][$AngrisaGroveEastDone to true]] <<endif>> <<if $AngrisaGroveSoutheastDone isnot true>> [[Southeast|Angrisa Grove Southeast][$AngrisaGroveSoutheastDone to true]] <<endif>> <<if $AngrisaGroveNortheastDone isnot true>> [[Northeast|Angrisa Grove Northeast][$AngrisaGroveNortheastDone to true]] <<endif>> <<if $AngrisaGroveSouthwestDone isnot true>> [[Southwest|Angrisa Grove Southwest][$AngrisaGroveSouthwestDone to true]] <<endif>> <<if $AngrisaGroveXianMet is true and $AngrisaGroveXianSummoned isnot true>> [[Visit Xian's camp|Angrisa Grove Xian Camp][$AngrisaGroveXianSummoned to true]] <<endif>> <<else>> You can't let that abomination get near your camp. You must [[confront it|Meet Fungal Abomination]] <<endif>> <<elseif $AngrisaGrove is 5>> Even the noon sun cannot cheer you up. A crawling sensation is haunting you, telling you that time is short. The infestation is growing stronger every passing day, and even your and Yvette's wards are showing signs of failing. You must hurry .... <<if $AngrisaGroveNorthDone isnot true>> [[North|Angrisa Grove North][$AngrisaGroveNorthDone to true]] <<endif>> <<if $AngrisaGroveSouthDone isnot true>> [[South|Angrisa Grove South][$AngrisaGroveSouthDone to true]] <<endif>> <<if $AngrisaGroveEastDone isnot true>> [[East|Angrisa Grove East][$AngrisaGroveEastDone to true]] <<endif>> <<if $AngrisaGroveSoutheastDone isnot true>> [[Southeast|Angrisa Grove Southeast][$AngrisaGroveSoutheastDone to true]] <<endif>> <<if $AngrisaGroveNortheastDone isnot true>> [[Northeast|Angrisa Grove Northeast][$AngrisaGroveNortheastDone to true]] <<endif>> <<if $AngrisaGroveSouthwestDone isnot true>> [[Southwest|Angrisa Grove Southwest][$AngrisaGroveSouthwestDone to true]] <<endif>> <<if $AngrisaGroveXianMet is true and $AngrisaGroveXianSummoned isnot true>> [[Visit Xian's camp|Angrisa Grove Xian Camp][$AngrisaGroveXianSummoned to true]] <<endif>> <<elseif $AngrisaGrove is 6>> Yvette returns with the most grave news. "The man's got Ella and Emma all tied up. The entity's awakening!" she says. "No time--we must head there //now//!" "Shit!" [[Go with Yvette|Angrisa Grove 2]] <<endif>></tw-passagedata><tw-passagedata pid="357" name="Angrisa Grove North" tags="" position="175,2875" size="100,100">You decide to explore the northern parts. The situation here seems even worse than you can ever imagine. Whereupon near your camp the fungal infection is moderate, here tall fungus 'trees' dominate the landscape. \\Ugh. Is there anything other than damn mushrooms here?\\ There apparently is. A large band of, as you see it, largely peasant folk escorted by around 20 or 25 soldiers with pikes, swords, and shields are moving from the horizon. <<if $BlackswordsHired is true>> You recognise the uniforms! They're the Blackswords, your own mercenary company. After the Battle of Dornburg, although they remain under your service, they've been taking other jobs to fill their coffers. "Hey, what's up?" you ask the commander. He seems to be one of the high-ranking men of the Blackswords. The captain, a middle-aged bald man with an impressive beard, looks at you for a short moment. It seems almost as if he can't believe the existence of a sane man here. "Boss!" he says finally. You two shake hands. "What are you doing here?" you ask. "We got a job to escort some people out of the villages here," he says, shaking his head. "I can't say I'm thrilled. If you know what's good for you, you should leave, boss. It's hell here." "Unfortunately, I have some unfinished business here." "Is that so? Good luck then." The captain gives you many pointers about the nearby areas as well as a map with infected areas marked. This information should be useful for when you face the face behind this calamity. The two of you part ways soon after. <<set $AngrisaGroveScore to $AngrisaGroveScore + 3>> <<else>> "Hey, what's up?" you ask the commander of the soldiers. They're wearing black clothing, and you get the sense that they're hired swords rather than soldiers of the King or other nobles. The captain, a middle-aged bald man with an impressive beard, looks at you for a short moment. It seems almost as if he can't believe the existence of a sane man here. "Hey," he says finally. You two shake hands. "What are you doing here?" you ask. "We got a job to escort some people out of the villages here," he says, shaking his head. "I can't say I'm thrilled. If you know what's good for you, you should leave. Too many people have died here." "Unfortunately, I have some unfinished business here." "Is that so? Good luck then." The captain gives you a few pointers about the nearby areas. This information should be useful for when you face the being behind this calamity. The two of you part ways soon after. <<set $AngrisaGroveScore to $AngrisaGroveScore + 1>> <<endif>> Having gathered some information, you withdraw [[back to your camp|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1]]. </tw-passagedata><tw-passagedata pid="358" name="Angrisa Grove South" tags="" position="50,2875" size="100,100">You decide to explore the southern parts. The infestation seems less bad here. Although everything's abandoned, the signs of decay are less prominent. Has the infestation been halted somehow, or has it simply not extended its disgusting tendrils this far south? A chilling thought creeps into your mind. \\If we fail, we might die. And who will stop this infestation from consuming all of Walshemia, and even beyond?\\ Eventually you meet a most strange group: around a dozen or so elves and a number of old men and women with wooden staves. <<if $LunarianTropeToken is true>> These aren't strangers--it's the Lunarian Trope, a group of elves that aided you in Dornburg. You even saw Annita, the elf who lost her bow. You hail them. The leader returns your greeting. "Oh thank Elphina, you are normal." "Yeah, thank goodness there are still normal people here." "I sense you have quite some magical prowess, but still, be careful. This infestation ... only a great being can spread such malice." "What are you doing here?" you ask. "Staving off the infestation as much as we can," the leader says. "Not everyone in my band is able to use magic, so we've been teaching local healers on how to combat it." You spend some time talking to the elves before bidding each other good bye. "Elphina's roots be upon you, friend." Before they leave, Annita slips you a piece of wood necklace. It seems to be a protective charm. <<set $AngrisaGroveScore to $AngrisaGroveScore + 3>> <<else>> You hail the strange group. Their leader, an androgynous elf, immediately takes a fighting stance, followed by most of the group. Only when they see you properly that they relax. "Oh thank Elphina, you are normal," the leader says. "Yeah, and I'm glad there are still normal people here, too," you say. "I sense you have quite some magical prowess, but still, be careful. This infestation ... only a great being can spread such malice." "What are you doing here?" you ask. "Staving off the infestation as much as we can," the leader says. "Not everyone in my band is able to use magic, so we've been teaching local healers on how to combat it." You spend some time talking to the elves before bidding each other good bye. "Elphina's roots be upon you, stranger." <<endif>> [[Return to camp|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1]] </tw-passagedata><tw-passagedata pid="359" name="Angrisa Grove East" tags="" position="50,3000" size="100,100">You head east. To your understanding there's a little-used port there named Queensport. It was built around 100 years ago by Queen Janice to trade with the northmen. Nowadays the northmen has grown hostile due to border disputes, and so trade comes largely to halt. However, there are still a few friendly tribes. <<if $AngrisaGrove lte 3>> It's by pure luck that you see one of the northmen ships. You hail them. Their leader, a well-armed old man with an axe and round shield, returns your greeting. "What can I do for you?" he asks sharply. "We're leaving soon. Nothing good in this blasted land." "Oh, that's good," you say. "I'm warning everyone to evacuate the area." "You don't need to do that with us. We have brains. And everyone with a brain is leaving." You watch the northmen ship sail away. If nothing else, at least they won't be fuel for the infestation to spread further. <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> <<else>> You see a small fleet of northmen ships, around six or seven in total. Hope swells in your heart that there might be some men remaining. Unfortunately, you are too late. The infestation has claimed them, fungi growing all over their corpses. There is nothing else for you now. <<endif>> [[Return to camp|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1]]</tw-passagedata><tw-passagedata pid="360" name="Angrisa Grove Southeast" tags="" position="25,2750" size="100,100">You head to the southeast. For an hour you walk almost aimlessly. The fields and scattered houses seem desolate, some overran with some kind of yellow and black fungi. The scent of the air is thick, as if tainted by something. It is under those conditions that you encounter a somewhat familiar sight. It's Great Sage Xian, a cathayan sage who fought with your side in Dornburg. Her expression is serious. "Who goes there?" she barks while continuing to observe a fungi. "It's $name." "Ah. Not a stranger, then." In a flash, Xian is in front of you. "Well, what is it that you're doing here?" she asks sharply. "There's nothing here. Only death." "What are ''you'' doing, then?" "Oh, the usual stuff. Tracking down Abyssal Lords and slaughtering them," Xian replies nonchalantly. You explain your circumstances to Xian. "Huh. You head here, for the revenge of a woman, and the safety of two barely-adult women? You're either a saint or a fool." "They're my friends and companions. It's only natural." Xian cackles. "Well, our goals are aligned this time. How about teaming up?" she asks. "I've got a camp myself near here," she says before giving you the directions. "Sure," you say. "Alright, make sure to visit me." Xian then returns to observing the fungi. You should return to your temporary camp. <<set $AngrisaGroveXianMet to true>> [[Return|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1]]</tw-passagedata><tw-passagedata pid="361" name="Angrisa Grove Northeast" tags="" position="200,3000" size="100,100">You head to the northeastern direction. You're not sure what to expect here. It borders the wastelands to the east, and nothing good comes from there; to the north are the sea, and with it northmen raiders and traders. This time, however, you spot half a dozen arcane mages wearing their long, blue robes. You greet their leader, an old mage named Archmage Lucius. "Young man, this is no place for someone like you," he says. "We can help you get out, if you want." "Oh no, I'm here to solve the infestation, among other things," you say. "You and your group seem well-armed, might we exchange our information?" "Hmm," the old mage looks at you with the classic better-than-thou attitude that many mages have until one of the younger mages whisper something to him. "Ah, are you $name, who fought at Dornburg?" he asks. "The Mages Guild heard some good things about you ... about how you tried to get us legitimacy and support." "The one and same." "Hmm, I see," the old mage says. "Very well." You and the old mage exchange information before biding each other farewell. <<if $ArcaneSupport is "best">> You notice that the mages' gear are quite good; strong staves and various tomes and trinkets. It seems that the support they received from the Crown--that you fought for in the council--is helping them significantly. <<set $AngrisaGroveScore to $AngrisaGroveScore + 3>> <<elseif $ArcaneSupport is "good">> You notice that the mages' gear are quite decent; good staves and some tomes and trinkets. It seems that the support they received from the Crown--that you fought for in the council--is helping them. <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> <<else>> You notice that the mages' gear are quite poor; shoddy staves and few tomes and trinkets. It seems that the support they received from the Crown--or rather, the lack of it--isn't helping them. <<endif>> [[Return to camp|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1]]</tw-passagedata><tw-passagedata pid="362" name="Angrisa Grove Southwest" tags="" position="175,3125" size="100,100">You head to the southwest. It takes little time to find humans here. It appears the infestation's tendrils haven't reached here. There lies a fairly large town named Rivertown, which quizzically enough has no rivers nearby. You invoke your status as an Imperial Knight to gain access and meet the mayor. "Sir $name, I won't say I'm displeased by the arrival of an Imperial Knight, but things have not been well. The infestation, you surely know about it?" the old mayor says with a sharp voice. "Yes. My companions and I are solving it," you say. You divulge to the mayor all you know, and you observe his face growing paler and paler, as if blood is being drained from his cheeks. You also recommend him to prepare for the town's evacuation. <<if $DornburgRep + $SelvilRep gte 1150>> At 'evacuation', the mayor's eyes gleam sharply. It feels almost as if he's pondering his choices. "Normally I'd be against evacuations. There are more than 100,000 people here, and to evacuate would invite much panic ... but I've heard good things about you from other towns. Very well, I'll draw up plans. Be well, Sir $name." <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> <<else>> At 'evacuation', the mayor's eyes gleam sharply. His tone turns stiff, and although he thanks you when you leave, you're willing to bet an arm and a leg that he won't evacuate, or even prepare for it. <<endif>> [[Back to your camp|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1]]</tw-passagedata><tw-passagedata pid="363" name="Meet Fungal Abomination" tags="" position="50,2600" size="100,100"><<nobr>> <<set _temphp to 550>> <<set _tempattack to 75>> <<set _tempspeed to random(20,25)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Fungal Abomination", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The fungal abomination shambles at you as you engage it in combat! <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="364" name="Angrisa Grove Xian Camp" tags="" position="300,3125" size="100,100">You decide to visit Xian in her camp. It seems like she's trying out some kind of new power, because on her back are two pairs of black wings. "Hey, Xian," you greet her. "Busy trying out something new?" "Oh, hey, $name," she says with a grin. "Nah, I'm busting out some old powers that I have. It's been some time since I used it--whoops." At that moment, a burst of such malevolent energy slithers out, making you take a few steps back involuntarily. It is as if your own body is rejecting the existence of such malevolence. "Is that dark magic?" you ask cautiously. "Depends on the definition," Xian replies with signature nonchalance. Another pair of black wings sprout out. "Okay, looks like three pairs are all I can use without breaking the seals." Xian sits down and offers you some tea. "Where did you get that from?" you ask, feeling curious. "I killed Abyssal Lords for it," she replies, sipping her tea. "I kill them, and I absorb their powers. One wing is one Lord. I've got seven pairs, actually, but if I use them all I'd probably die from all the magic overload." "Wow ... so you should be able to help us then?" "Oh, absolutely," Xian says. "But it's good that you're here. I've not fought seriously for some time, so I need to re-gather myself, and I honestly suck at investigating. Continue your investigations, and when time comes to fight, you know who to call." You continue your chat for a few moments before excusing yourself and leaving. [[Back to your camp|Angrisa Grove 1][$AngrisaGrove to $AngrisaGrove + 1;$AngrisaGroveXianSummoned to true]]</tw-passagedata><tw-passagedata pid="365" name="Angrisa Grove 2" tags="" position="150,3250" size="100,100">You, Yvette, and--though you're reluctant--Dahlia rush towards the heart of the grove. Fungal creatures begin to approach from all directions, from the trees, and from the river. "Mistress Yvette!" you hear one of the succubus agents shout. "We'll hold them off--you've got to get to the center, something big's happening!" "Okay!" Yvette shouts back. Dahlia trips. "Damn it!" you curse. You turn back, help Dahlia get up, and grip her shoulders tightly. "Listen, Dahlia. This is no place for you. Go away, get back to our camp, and if--" Your knees feel weak. "If I don't come back, go back to Dornburg ... take whatever you need from our stash ...." "$name!" Yvette shouts. "On my way!" Eventually you reach the heart of the grove: a giant mushroom. Ella and Emma are hung from its tall cap, as it seems as if their life force is being siphoned away. "Help---" Yvette hastily cuts down the rope and rescues the two. It turns out this is exactly what Dahlia's ex-husband is waiting for--he ambushes Yvette from behind with a great sword. "No!" You rush forward, throwing your entire weight against him, throwing him onto the ground. You draw your dagger and stab him straight in the heart. A long scream fills the air. You have killed him. It takes a good three minutes to calm down. Ella and Emma have fallen unconscious. "I think ... I think we're safe," Yvette says. "Let's burn down this mushroom, and get the hell out of here." Dahlia's ex-husband rises from the dead, fey energies swirling all over him. "Human." It is not the voice of a man; it's the voice of something utterly alien. "Your wretched kind. Traitors." "I have no clue what--" The possessed man moves quickly, delivering a punch to your stomach, making you fall down. "The martyred three thousand, have you forgotten them? When we struggled for survival, your kind, having not only not aided us in the Great War, they dared to stab us in the back." "I know what you're talking about," Yvette interjects. "Humans attacked one of your groves and kidnapped three thousand women and children, and burnt the under-defended grove to the ground. But it was two thousand years ago. The humans have known better now." "You speak as if you were there, succubus." "I was there." "One of the immortal succubi, I see." "Your actions don't make sense," you say, standing up. "You're only aiding the empyrean you hate so much." "You misunderstand. I do not seek to ally with them. I seek to summon one of them, and \\dominate\\ them." "You're delusional," you say. "You might be strong, but nowhere near enough to handle an Abyssal Lord." The fey entity tries to slash at you, but you manage to block it at the last second with your dagger. Yvette lunges from behind, only to be near-effortlessly swatted away. You continue locking blades with the fey entity. It's a stalemate, but how long can you hold it-- "This is for my children, you bastard!" "Kkh!" Dahlia, out of nowhere, stabs the entity in the stomach with a long spear. An expression of indomitable fury colors her face. "Ah ... ah ...." "Hnnng ...." "Dahlia, back off!" you shout. A malevolent energy bursts from the body of Dahlia's ex-husband. "$name, hurry, you must finish it off!" Yvette shouts. "It's trying to open a portal to the Empyrean! I'll take Ella and Emma to safety!" "Go, Dahlia!" You turn around, raise your dagger, and prepare to stop this damned ritual. [[Fight!|Meet Fey Entity]] </tw-passagedata><tw-passagedata pid="366" name="Meet Fey Entity" tags="" position="325,3225" size="100,100"><<nobr>> <<set _temphp to 1000>> <<set _tempattack to 75>> <<set _tempspeed to random(0,2)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Fey Entity", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The fey entity is trying to summon something from beyond the world's veil! Stop it! <<set $bossfight to true>> <<set $FeyEntityTimer to 0>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="367" name="Angrisa Grove 3" tags="" position="200,3375" size="100,100">You steel yourself for a very possible fight to the death. Elyon grins. <<if $AngrisaGroveXianSummoned is true and $AngrisaGroveSwevaSummoned is true>> "Looks like you fuckers haven't learnt anything since the Great War." Great Sage Xian interposes casually, putting herself between you and Elyon. The armor she wears is bright red with black splattered, and she wields a long glaive. A long, mocking laughter fills the air; Elyon seems to be mentally taking a step back. "You! The Devourer!" "Oh, glad to see my old title not forgotten," Xian continues, boasting of her three pairs of black wings. She creates a whirlpool of orange flame, engulfing the Abyssal Lord. "Grrh!" Elyon grunts as he is forced on the defensive, resorting to shields. "Fine, if that's how you want to play, Devourer! Today, the predator becomes the prey!" A grand explosion of power is directed at Xian, who is pushed back. "Fine. This should be fun. $name, unless you want to die, might I suggest watching from some distance?" Two more pairs of wings spread out from Xian's back. A massive beam of dark energy is fired from her ten wings, overwhelming Elyon's defenses. Elyon conjures discs of energy, destroying the landscape but only grazing Xian's armor. "They don't make Abyssal Lords like they used to in the old times, huh?" Xian mocks before unleashing a truly terrifying amount of power to strike Elyon repeatedly with dark bolts from the sky. "Grrh ... screw it, I'm leaving." "No. This ends here." Thick roots ascend from the ground, dispelling the arriving black mist. Divine magic abound forming a grand cage of energy. A giant dryad almost three metres tall steps in. "Oh hey, Sweva, right?" Xian asks with a smirk. Thalestris, standing behind Sweva, waves at you. The dryad nods. "I'll hold him here. Do what you usually do, Devourer." Xian takes off her armor and clothes, and sets her glaive aside. You have little time to make an opinion of her full body and small breasts, because large, gaping mouths form on her flesh. Her eyes turn black. "It's time for a feast!" A few uncomfortable seconds later, a piercing shriek nearly bursts your eardrums as the Abyssal Lord's life force and power are drained. His corpse falls unmoving. "Give the power to me!" Sweva demands, and Xian acquiesces. Sweva raises her hands, power fluttering, and with a grand spell, exhausts all of Elyon's power. The giant mushroom is broken down, and the infestation cleared. "Not bad, Sweva," Xian says. "That binding ability of yours is really handy. Call me when you want to tag-team another Abyssal Lord." "I will ...." Just like that, the dryad goddess Sweva vanishes unto the earth. <<set $ElyonKilled to true>> <<elseif $AngrisaGroveXianSummoned is true>> "Looks like you fuckers haven't learnt anything since the Great War." Great Sage Xian interposes casually, putting herself between you and Elyon. The armor she wears is bright red with black splattered, and she wields a long glaive. A long, mocking laughter fills the air; Elyon seems to be mentally taking a step back. "You! The Devourer!" "Oh, glad to see my old title not forgotten," Xian continues, boasting of her three pairs of black wings. She creates a whirlpool of orange flame, engulfing the Abyssal Lord. "Grrh!" Elyon grunts as he is forced on the defensive, resorting to shields. "Fine, if that's how you want to play, Devourer! Today, the predator becomes the prey!" A grand explosion of power is directed at Xian, who is pushed back. "Fine. This should be fun. $name, unless you want to die, might I suggest watching from some distance?" Two more pairs of wings spread out from Xian's back. A massive beam of dark energy is fired from her ten wings, overwhelming Elyon's defenses. Elyon conjures discs of energy, destroying the landscape but only grazing Xian's armor. "They don't make Abyssal Lords like they used to in the old times, huh?" Xian mocks before unleashing a truly terrifying amount of power to bind Elyon in his place with a dark seal. "Grrh ... screw it, I'm leaving." A dark mist descends, and Elyon is whisked away. "Hmph. Slippery as always. Now, this mushroom." Xian conjures a grand fireball before hurling it at the mushroom, burning it down. The infestation is cleansed. <<elseif $AngrisaGroveSwevaSummoned is true>> "This ends here, Elyon." "Sweva!" A dryad burrows from the earth, tall and imposing. Thalestris, standing behind the dryad goddess Sweva, waves at you. Elyon's arrogance seems to vanish. A quiet humming is followed by a clash of grandiose spells, a wave of black magic crashing against the walls of earth. You hold your breath. The earth shakes. Great vines protrude out of the ground, attacking Elyon left and right. When he is distracted, Sweva unleashes a lance of green energy, wounding Elyon. "Grrh ... screw it, I'm leaving." A dark mist descends, and Elyon is whisked away. "Hmph. We shall meet again." The dryad vanishes unto the earth, and with her, the large mushroom is broken down by large vines. The infestation is cleansed. <<else>> "That is enough." Jasmine's lithe figure stands between you and Elyon. Wearing little but a stripper's outfit, she nonetheless projects an aura of impenetrable strength. "One of the Incubus King's little whores, aren't you?" Elyon taunted. "Where's your owner? Is he too much of a coward to face me personally?" "My master doesn't deign to face weaklings like you." Shining pink shields form around Elyon, trying to crush him from all sides. Elyon dispels the shields with a wave of his own power. "I won't be undone by the likes of you!" A shower of black swords descend on Jasmine, who gracefully takes off her clothes, shining with enchantments, and repels the attack with the silken cloth. "Hmph!" Jasmine concentrates her power, generating an explosion that blows off Elyon's left arm. "Grrh ... screw it, I'm leaving." A dark mist descends, and Elyon is whisked away. Jasmine stares at the horizon with a determination rarely seen. Pink energy swirls around her, forming a thousand daggers that burrow deep into the giant mushroom, collapsing it. The infestation is cleansed. <<endif>> You take a moment to sit down. The horror's over .... [[It's really finished ....|Angrisa Grove 4]]</tw-passagedata><tw-passagedata pid="368" name="Angrisa Grove 4" tags="" position="200,3500" size="100,100"><<nobr>> <<if $AngrisaGroveXianSummoned is true>> <<set $AngrisaGroveScore to $AngrisaGroveScore + 7>> <<endif>> <<if $AngrisaGroveSwevaSummoned is true>> <<set $AngrisaGroveScore to $AngrisaGroveScore + 6>> <<endif>> <<if $ElyonKilled is true>> <<set $AngrisaGroveScore to $AngrisaGroveScore + 2>> <<endif>> <<set $AngrisaGroveScore to $AngrisaGroveScore - $FeyEntityTimer>> <</nobr>> The horror's finished. You gather everyone and begin the return home. "I owe you another one, $name," Dahlia says casually. Ella and Emma are still sleeping. "Don't mention it," you say. "Actually, if you want to mention it," Yvette says with a smirk. "Why not join $name's harem?" Yvette proceeds to spend some time explaining things to Dahlia. "I see. So that is how it is," she says. "Well, $name, if you want me, I'm more than happy to join!" Yvette looks happier than you are, and you don't fail to point it out. "I mean, have you seen her?" Yvette asks. "Always a bit sullen, like someone unsatisfied in life. She deserves all good things. You should treat her well, you hear me?" Later on the twins agree to join, too, and Yvette performs the ceremony while you travel back to camp. She paints them, as usual; a painting of a happy mother and her daughters, all in the nude. When you reach your camp, you see Natalie standing, waiting for you. "Hey, I heard you were involved with the fungi infestation in the north," she says. "That's underselling it ... what about it?" you ask. <<if $AngrisaGroveScore gte 13>> "Well, I've got to say, you took the infestation source down, so I'm thankful for that. Luckily, the damage is fairly controlled." "How bad is it?" "''The situation is about as good as it can be''. It'll take a month or two, but the region will recover quite smoothly." <<elseif $AngrisaGroveScore gte 10>> "Well, I've got to say, you took the infestation source down, so I'm thankful for that. Luckily, the damage is fairly controlled." "How bad is it?" "''The situation is rather stable''. It'll take a month or two, but the region will recover quite smoothly." <<elseif $AngrisaGroveScore gte 5>> "Well, I've got to say, at least you took the infestation source down, so I'm thankful for that. Unfortunately, the damage is already done." "How bad is it?" "''It's not as bad as it could be''. It'll take some months, maybe a year, but the region will recover soon enough." <<else>> "Well, I've got to say, at least you took the infestation source down, so I'm thankful for that. Unfortunately, the damage is already done." "How bad is it?" "''Extremely bad''. It'll take years--no, maybe even decades for the region to recover. What a shame." <<endif>> The region's recovery, however, isn't really your business anymore. You return to your tent, and take a good rest. [[Rest|End day 2]] <<run $HaremMembers.push("Dahlia")>> <<run $HaremMembers.push("Ella")>> <<run $HaremMembers.push("Emma")>> <<set $DahliaFamilyQuestComplete to true>></tw-passagedata><tw-passagedata pid="369" name="Jharina Quest 1" tags="" position="4600,3050" size="100,100">You are quite intrigued by the offer from one Count Arnold. After asking for directions from the receptionist, who looks very displeased, you head there. Count Arnold's residence is apparently fucking //underground//. You spend the better part of day locating its entrance, and then going through the tunnel. You see a fairly large manor--oddly enough, it seems dilapidated and some of its structure looks shoddy. You knock on the door and are greeted by a jovial drow man dressed in silk clothing. "Hello there, can I help you?" "Hello, are you Count Arnold? I saw your posting on the Bounty Hunter Office's board." "Oh, indeed, indeed. Please, come in." You are treated to some tea and biscuits. The count and his wife, Countess Jharina, treat you with much hospitality, yet you can't help but shake off how ... decrepit everything is. Lighting is scarce, and some damages are seen in the walls and ceiling. You also can't help noticing Countess Jharina's very loose clothing. She's certainly a beautiful drow woman with a face that would pass for a 25-year old human, and she carries herself with a certain sensual grace. She braids her very long white hair in two pigtails. "Can I have your name, and where you are from?" "It's $name," you say. "I come from, uh, another plane I suppose? I come from Walshemia." "Ah!" the count says, nodding his head. "We heard about you. Rumors are circulating amongst the nobility about you, and your country and plane. I believe you have been knighted 'Imperial Knight' by your King." You smile faintly. "Good ones, I hope." "Not all are good, I must admit. Some are skeptical," he says. "Ah, but whatever. You come here for a partnership with me, do you not?" "That is correct." "Very well, I hope this is the start of a fruitful partnership. The first thing I can offer you is simple--access to the nobility. I can procure you documents and other things that'd be otherwise cut off from you. I'd ask for a small sum as a token of goodwill--5000 marks will do. A small sum for such nobles as you and I, I'm sure." "Is that so ... very well, I'll be back with the sum you ask." //This is rather weird. I should probably ''consult Yvette'' about this.// <<set $JharinaQuest to 1>> [[Back to Klatsch|Klatsch]] </tw-passagedata><tw-passagedata pid="370" name="Jharina Quest 2" tags="" position="2150,5500" size="100,100">"Count Arnold? Haven't heard of the guy. The Domain's population is around 550 million and there are thousands if not tens of thousands of counts, you can't expect me to remember each and every one of them." You try your best to explain the drow pair to Yvette, as well as the circumstances surrounding your meeting. "They live underground? Yeah, they have to be pretty poor," Yvette says. "There are some nobles like that. They live frivolously, or make some bad financial decisions, and end up poor. Underground houses practically have no value; too much work needs to be done to maintain them, and there's no sunlight." "Hmm. So this Count Arnold is just trying to angle for money, then." "Probably so. But still--if he's really a count, he still has powerful connections to the nobility. I won't cut him off now, if you can afford it." "I see. Thanks for the advice, Yvette." "Don't sweat it." <<set $JharinaQuest to 2>> [[Back|Selvil]]</tw-passagedata><tw-passagedata pid="371" name="Arnold Home" tags="" position="4375,3100" size="100,100"><<if $JharinaQuest is 2>> You visit Count Arnold's home. After exchanging pleasantries, Count Arnold nudges you about the sum of 5000 marks that he requires. <<if $player.coins gte 500>> [[Hand over the marks|Arnold Home][$JharinaQuest to 3;$player.coins to $player.coins - 500]] <<else>> "Apologies, I don't think I have that amount yet. I'll be back later." [[Back|Klatsch]] <<endif>> <<elseif $JharinaQuest is 3>> "Ah, thank you," Count Arnold says. "I have something in return, too." He hands you an invitation in a sealed envelope. "What is this?" "It is an invitation to the marriage of Baron Eckhart's daughter. You can find many connections there." "I see. Thank you, Count." You should head to the wedding in Klatsch. <<set $JharinaQuest to 4>> [[Back|Klatsch]] <<elseif $JharinaQuest is 5>> When you head to Count Arnold's home, you are blocked by a group of thuggish men. "Out of my way," you say sharply. "No can do, kiddo," one of them says with a gruff voice. "Heh. Not unless you can pay old Arnold's debts." You hear Jharina screaming, and Arnold shouting, "No! Not my wife!" "You're one of those illegal loan shark companies, aren't you?" you inquire. "Keep on asking questions, kid. See where it takes you," the thug says, swinging his club. "What if I pay off Arnold's debt?" "Huh?" the thug looks confused and looks at his friends. "You've got the cash now?" "I have some valuable gems." "Well ... go ahead and see our boss, then." One of the thugs accompany you. You get past through the thugs and enter the manor. On the stairs, a tall human man turns his head. Meanwhile, a half-naked Countess Jharina is being dragged down the stairs, while she struggles to get free. "Who's this?" he asks sharply. "He said he's here to pay the debts, boss." "Huh. This doesn't happen often," the man says. "You've got the money then--21500 marks, in total." You throw him the pouch of gemstones. He takes a few moments to evaluate the gemstones before whistling. "Alright boys, we're leaving. The debt's paid." As the thugs withdraw, you head on to check on Jharina. "Hey, are you alright?" you ask. "Yeah, I'm fine," Jharina says. With surprising nonchalance, she stands up, her large breasts still exposed. She covers it up with her dress. "Wait, Arnold!" The two of you go upstairs to see Count Arnold unconscious with wounds from blunt and sharp weapons. "I think he needs a healer," you say. "No ... just lay him on the bed," Jharina says. You take Arnold to his bedroom and lay him there. You head to the living room and chat with Jharina over coffee. "I suppose the cat's out of the bag now. We're poor, and in debt," Jharina muses. "Thank you for paying some of our debt, but I don't know how we can repay you." "You can repay it later. I have to wonder though. How could a noble family like yours fall into such ... disrepair?" "It's a long story," Jharina sighs. "I can't really pinpoint it one occurence. Arnold, he ... he's a good, loving husband, but he's also weak and easily swayed. We both come from fairly simple families by noble standards, and our marriage was as much motivated as the desire to unite our houses as love. Arnold has always obsessed over wealth, and he continously tries his hand at a number of risky investments and some shadier things. He almost always fails, and, well. We only have connections and our titles now." "How much debt do you have?" "In total, perhaps around 100,000 marks or so ... including the 21,500 marks owed to you." Jharina begins writing a formal letter, and stamps it with the Rembach family seal. It's a document signifying the debt her family owed to you. Whether intentional or not, she leans forward, giving you view of her cleavage. You can't control your lust. "What if I wipe out 1,500 marks from that?" you offer with a devilish grin on your face. "Oh?" Jharina says with an entirely new tone; a tone not from a countess, but a seductress. "And what must I do for this favor?" "What about blowing me?" "Very well. Take off your trousers." You do as she asks. When she sees your cock, she smiles. "You hide quite a weapon behind your young face." You smirk. "What is your age, Jharina?" you ask. "How rude it is to ask the age of a woman!" Jharina replies as she takes hold of your cock. "It's 435." "Show me what more than 400 years of blowjob experience feels like, then." Jharina obliges. You push your cock into her mouth. And you feel a pleasure at such intensity that you nearly came right away. Jharina's flexible tongue circles around your cock. She begins sucking like a vacuum, a warm pleasure coursing through your cock. Three minutes are all that Jharina needs to bring you to orgasm. You shudder as you release a stream of cum down her throat. "Mmm," Jharina smiles. "Thank you, $name. I suppose you should go home now, and visit the manor tomorrow. Here, have our reserve house key." Jharina takes an old, rusty key from her pockets and gives it to you. You, rather, are quite surprised at how easily Jharina agrees to your perverted request of a blowjob. She's no dignified noble ... maybe someone in the ''bounty hunters' office'' knows something. <<set $JharinaQuest to 6>> [[Go home|End day 2]] <<elseif $JharinaQuest is 7>> You visit the manor again with conflicted feelings. On one hand, any task that Count Arnold gives you is sure as hell going to be unprofitable from a purely financial perspective. On the other hand, what wouldn't you give for another blowjob from Jharina! You use the house key you were given as your knocking of the door goes unanswered. You head to the upper floor where you hear Count Arnold speaking with his wife. "Jharina, you don't have to do this." "You know I have to, Arnold," Jharina says. "Or do you have any more brilliant ideas as to how to repay our debt? We need at least 10,000 marks by next week." "Jharina ... I'm so sorry. I ... I honestly always dreaded if you have to return to your old profession ... even if it's just one man." "There are worse things, Arnold. Now rest well, will you?" You stealthily return to the living room, waiting for Jharina to greet you. When she joins you, you ask, "how's the Count?" "His wounds are pretty bad, but he'll pull through." "That's good to hear." There is an awkward silence between the two of you until you break it. "You see, I went to the bounty hunter's office some time ago. It looks like you have quite a colorful history, Jharina." Jharina messes with her own hair. "Follow me, wouldn't you?" She brings you to a bedroom with a very interesting piece of workmanship: a well-made pillory. "I'll be frank. My husband has agreed to this," she whispers. "Bring us 10,000 marks, and I will offer my pussy to you. The pussy of a drow ex-courtesan with hundreds of years of experience; an acceptable deal, wouldn't it be?" "Very well," you say. "I'll be back with the money." [[Back to Klatsch|Klatsch]] <<set $JharinaQuest to 8>> <<elseif $JharinaQuest is 8>> Jharina has requested 10000 marks, or equal to 1000 coins, from you. <<if $player.coins gte 1000>> [[Hand over the marks|Arnold Home][$JharinaQuest to 9;$player.coins to $player.coins - 1000]] <<else>> You don't have the money that Jherina requests. <<endif>> [[Back to Klatsch|Klatsch]] <<elseif $JharinaQuest is 9>> You put a sack of cash on the table. Jharina counts it and nods. "Follow me," she says. The two of you head to the bedroom. She silently strips, revealing her massive udders and hairy pussy. Her dark purple skin is nothing short of exotic and enticing to you. "Lay down on the bed, will you?" "No, I don't think so," you say. "I just paid for an overpriced whore--if you think I'll just lay down there, you're wrong. Get in the pillory, Jharina." "W-what?" "Do I have to repeat myself? Or should I take my money back?" Reluctantly, Jharina uses the pillory on herself. You make sure to lock her in. "I heard more than just basic information in the bounty hunter's office," you whisper softly before smacking Jharina's ass with your hand, making her squeal. "They say you used to do things like this. That you'd lick cum from the floor." Two of your fingers go in her puffy pussy easily. "Nngh, I left that life years ago," Jharina insists. "And I'll plunge you back in." You grab her hips and tease your cockhead against Jharina's pussy lips. You breach her pussy roughly, giving her little time to adjust. Her pussy is nothing but exquisite; a tight, vise-like meat tunnel, groping and pressuring your cock from all sides. Thin tentacles or cilia tease your cock, adding to the pleasure. "This--ah!" "Bitch," you whisper. You continue exploring Jharina's pussy, trying to and eventually finding her pleasure spot; just outside her womb. Your long cock is hitting it repeatedly, bringing Jharina to the edge of total pleasure. "Make--me--cum!" "Beg." "Please, please make me cum!" "Beg harder." "This drow bitch begs you ... make her weak, quivering pussy cum!" You grin, and, with a big push, brings both yourself and Jharina to orgasm. Jharina lets out a long, whorish moan. Your white sperm gushes out of her pussy. You unlock her restrains. "Lick it clean," you order, pointing at the pool of cum on the floor. "Yes ...." The bondage session seems to re-awaken something in Jharina, who obediently cleans the floor with her tongue. You decide to leave and return to the manor another time. <<set $JharinaQuest to 10>> [[Rest|End day 2]] <<elseif $JharinaQuest is 10>> Just like last time, there is no one answering your knock, so you enter with the key. And just like last time, you decide to eavesdrop. "We'll need 6000 more marks in six days for the loan sharks, and thankfully we're done with that after it. And 12000 more in fifteen for the Council," Arnold says with a sigh. "Things are looking bad. I think we should ... attempt our last plan. Jharina? Are you listening to me?" "I am," Jharina replies solemnly. "Hey, Arnold. Now that I think of it, how long has it been since we slept together? Can we do it now?" "Seriously, Jharina?" Arnold's tone grows sharp. "Take a good look at the situation, and think whether it's good time for that." "It's not as if it's //my// fault things have gone like this!" Jharina raged. "Be reasonable, Jharina!" "You want to know what I'm really thinking? That young man we've been stringing along--$name, he fucked me good. He fucked me better than you ever did! You're a failure of a noble, a failure of a husband, and a failure of a man!" The sound of a fist hurled against something hard shocks you. "Then go and fuck him, you harlot, you base creature who can only think with your genitals!" "I was wrong to marry a fool like you." "And I was wrong to marry a whore like you." Cold, uninterrupted silence flew in the air for a good three minutes. "I think both of us were talking with our emotions uncontrolled," Arnold finally asserts, "whatever issues we have, we can talk it later, okay? Now we have to face the debts we have. And I think $name knocked on the door some time ago." "Fine." A chilling, uncaring tone delivers that reply. You retreat back to the living room, waiting for Jharina and Arnold to come. When they do, Arnold immediately launches into serious talk. "I will be frank," he says, taking a shoddy map. "Through my connections, I've found out that there's a particularly large bandit stash roughly in this area." He gives a few pointers on the map. "You want me to go get that?" you ask. "Yes. There are some complications however," Arnold says. "It's due to be raided by the Incubus King's agents in a few weeks. With the right ... payment to the right persons, we can ensure we keep those agents away long enough for us to take the stash." "You mean long enough for \\me\\ to take the stash," you grumble. "Yes ... we can split it 50-50, what do you think?" "What? I'm taking all the risk here, you realize that?" you ask. "60-40, in my favor." "Fine," Arnold yields. For the first time a shade of anger and humiliation seeps into his voice. "I'll need 6000 marks to cover the payments. Return when you have it." "Alright." You leave the manor. [[Back to Klatsch|Klatsch]] <<set $JharinaQuest to 11>> <<elseif $JharinaQuest is 11>> Count Arnold has requested 600 coins to cover the costs of the bribe. <<if $player.coins gte 600>> [[Hand over the marks|Arnold Home][$JharinaQuest to 12;$player.coins to $player.coins - 600]] <<else>> You don't have the money that Jherina requests. <<endif>> [[Back to Klatsch|Klatsch]] <<elseif $JharinaQuest is 12>> "Very well," Count Arnold says. "Whenever you're ready, you can go." He himself hurries out. Jharina smiles at you. "$name, after you're done, I have a reward for you," she says. "Good luck." "Thanks, Jharina." <<set $JharinaQuest to 13>> [[Back|Klatsch]] <<elseif $JharinaQuest is 13>> "What are you waiting for?" Count Arnold asks, annoyed. "Go and do what I told you to!" [[Back|Klatsch]] <<endif>></tw-passagedata><tw-passagedata pid="372" name="Jharina Quest 3" tags="" position="4575,3175" size="100,100">You head to the gathering with the invitation in hand. You head to a large manor that is not dilapidated, not underground, and not unkempt. "Invitation, please," the incubus guard outside asks. You hand over the invitation. "Hmm," the guard mutters to himself. "Apologies, as far as I understand, Count Arnold is a drow, and you ... are not. Are you a representative?" "More or less, yes." "I trust you do not forget to bring a gift?" "A--a gift?" "Yes," the guard says. "... you, you never attended one of these noble weddings, have you?" "I admit I havent'." "Usually guests need to gift something for the host, and the host will give something back in return." "Oh, what about this?" you show the guard a necklace of emeralds and rubies, something you got from the Fair. "Oh yeah, this will work," he says. He takes out a pouch and puts the necklace in. "Go ahead." Baron Eckhart is a human, and his spouse is an elf. You try to enjoy yourself at the party, and you certainly gorge yourself on the lavish food, but you feel the alien-ness of this sort of high noble society. <<if $class is "Knight">> Even if your family used to be a noble family, you were of low rank and were not usually invited to this sort of expensive parties. <<endif>> "So, Count Arnold sent you here, is that so?" The harsh, grating voice of Gretchen, Yvette's rival, surprises you. What's even more surprising is her smile. "Hey, peace. Yvette and I might have some beef, but we don't hate each other that much." You nod once. The two of you share (free) drinks while the wedding procession goes on. "Well, tell me then, how come you're under that Arnold guy's employ now?" "I saw his advertisement on the bounty hunter's office's board." "What? Somebody actually fell for that?" It's clear from her muffled laugh that the only reason Gretchen isn't openly laughing is the formal setting. "I gather it Count Arnold is poor," you say. "Let me wager a guess: that is why he sent me here; he can't afford the gift?" "Spot on. Well, poor is putting it lightly. He's in debt to the Klatsch City Council; last time I checked it was something like 50,000 marks, maybe even more now," Gretchen says. "And that's just the debt to the Council. No doubt he has more debts to other loan sharks; maybe even illegal ones." "If there are illegal loan sharks, isn't it your job as the city guard captain to stamp them out?" Gretchen frowns. "We're trying, but they're not alone. They're connected to other criminals; illegal slave traders, illegal slave trainers, fuck, illegal everything, basically," she says. "I'm hoping the Incubus King launches another crime-cleansing campaign, but from what I heard from my friends in the Outer Circle, he's devoting a lot of resources for military spending. So go complain to the Incubus King." "You're a brilliant guard captain," you snark. "Thank you," she snarks back, before cracking a genuine smile. "I don't know what you're aiming at with your dealings with that broke count. But good luck." "Thanks," you say genuinely. The wedding goes on boringly (for you). You're given a bolt of enchanted cloth that you had woven to your armor, affording you better protection, as well as some sex toys that you sell at the first opportunity, netting 2000 marks. You also obtain a pouch of gemstones with a personal letter from the baron: "My wife and I enjoyed your performance during the Fair. Please accept this gift in the spirit in which it is given." After this, you should probably head to Count Arnold's home and see what he can offer you. <<set $player.maxHP to $player.maxHP + 20>> <<set $player.HP to $player.HP + 20>> [[Go home and rest|End day 2]] <<set $JharinaQuest to 5>> <<set $player.coins to $player.coins + 200>></tw-passagedata><tw-passagedata pid="373" name="Jharina Quest Bounty Hunter Inquiry" tags="" position="4775,3075" size="100,100">"Alright, I heard about your little run-in with the White Sharks gang," the receptionist says with a grin. "You're either very brave, very powerful, or very stupid to confront them like that." You infer that the White Sharks are the loan sharks who were harassing Count Arnold's family. "I had dealings with him," you say with a shrug. The receptionist nods. "So, about 'Countess' Jharina. I know her quite well. She's no countess, to be sure. She used to be an elite prostitute. A depraved one, too. Gangbangs, whippings, piss-drinking, cum-licking, the sort of things even most succubi loath to do," the receptionist says. "She got her title by marrying Arnold, who inherited a failing estate from his father who died in a hunting trip. A classic case of money meets nobility. Though, I suppose the money's been drying up for some time now!" The receptionist leans forward. "I like your sort of boldness, so I'll let you in on a secret from my friend in the Council. At this rate, in a few weeks they're getting their entire property taken by the Council; who knows, maybe they'll get enslaved, too. I'd keep my distance if I were you." "Dang. He still owes me 20,000 marks," you say. "Huh. Well, if you're lucky, you can get some of their assets; if they have any, that is. Prepare to jostle with the Council, though." "I see. Thanks for the tip," you say. "You're welcome." <<set $JharinaQuest to 7>> [[Back to Klatsch|Klatsch]]</tw-passagedata><tw-passagedata pid="374" name="Redeem Office" tags="" position="4925,2900" size="100,100">The redeeming office is in the bounty hunter's office. Staffed by a tired looking succubus, you can redeem your coupons here. You have $KlatschCoupons coupons. So far you have redeemed $RedeemedCoupons coupons. <<if $KlatschCoupons gte 1>> [[Redeem 1 coupon|Redeem Office][$player.coins to $player.coins + 11; $KlatschCoupons to $KlatschCoupons - 1;$RedeemedCoupons to $RedeemedCoupons + 1]] [[Redeem all coupons|Redeem Office][$player.coins to $player.coins + 11 * $KlatschCoupons; $RedeemedCoupons to $RedeemedCoupons + $KlatschCoupons; $KlatschCoupons to 0]] <<endif>> <<if $RedeemedCoupons gte 20 and $KlatschCouponOffer isnot true>> "By the way, the captain of the city guard, Gretchen, is asking for your presence. Would you like me to get you there?" [[Sure|Gretchen Coupon Offer]] <<elseif $KlatschCouponOffer is true and $KlatschCoupons gte 5>> [[Visit the gloryhole|Klatsch Gloryhole]] <<elseif $KlatschCouponOffer is true and $KlatschCoupons lt 5>> You'd like to visit the gloryhole, but you don't have enough coupons. You currently have $KlatschCoupons, and you need 5 coupons. <<endif>> [[Back|Bounty Hunter Office]] </tw-passagedata><tw-passagedata pid="375" name="Jharina Quest Final" tags="" position="4775,3225" size="100,100">You travel in the southwest direction for several hours with a horse. Once you get to the place Count Arnold indicated, you dismount. The mountainous area is rather difficult to navigate, but at least the map you are given is quite clear for what you need to find: a tunnel hidden with earth. You find the tunnel two hours later, after some difficult work. The place feels strange for a bandit hideout. It's literally just one long tunnel. Where do they sleep? Where do they eat? In the center of it all, you find your prize. A massive stash of magically-charged stones in hundreds, if not thousands of chests; heaps of gold, silver, and precious gems; and even a number of artifact weapons and armors. You open your bag and begin taking things. That is when you feel a killing intent from behind you. A dagger flies through the air, and only a lucky step stops you from getting your skull shattered. A masked assailant confronts you. //Damn it, a bandit?// [[Fight!|Meet Elven Guard Domain]]</tw-passagedata><tw-passagedata pid="376" name="Gretchen Coupon Offer" tags="" position="4925,3025" size="100,100">You are led to Gretchen's office, simple and rustic with a flair of elegance and nobility. "Mistress Gretchen, I brought him." "Thank you. You can leave, Esbeth." You sit in front of Gretchen, waiting for her explanation. "So, I heard you've been quite diligent in turning in those stones we lost in the heist," she sighed. "That's good, right?" "It is, except you're doing it too quickly," she says. "I'll cut to the chase. You're draining our already dwindling treasury a lot. So I'd like to offer an alternative form of payment. Follow me." She brings you down to an underground tunnel, leading to an underground prison. "A prison?" you mutter. You clench your dagger beneath your cloth--in case Gretchen decides the solution is to throw you in jail. "We don't have many prisoners," Gretchen says. "In case of heavy crimes, the punishment is slavery or execution. In light crimes, a warning or a fine. So imprisonment is only for a number of crimes, like involuntary manslaughter and things like that. They're a constant drain on our treasury too; we have to feed them, clean them, give them medicine when they're sick." It sounds like Gretchen is ranting to herself, rather than conveying actual important information to you. She brings you to three particular cells. There were three gloryholes, with fat butts sticking out of them. A short line of men is waiting outside. "Prisoner Number 17. Young succubus bandit. It's her first time doing banditry, and she's just being dragged into it by her family apparently. Prisoner Number 28. Dwarf woman with a long list of petty crimes. Prisoner Number 41. A swindler human who tried to trick us with shady business deals." Gretchen turns to you. "For 5 coupons, you can fuck one of them. Good deal, isn't it?" "I suppose that's not a bad deal," you say. "Good! You can come here through the redeeming office." <<set $KlatschCouponOffer to true>> [[Return to Klatsch|Klatsch]] </tw-passagedata><tw-passagedata pid="377" name="Meet Elven Guard Domain" tags="" position="4900,3200" size="100,100"><<nobr>> <<set _temphp to 575>> <<set _tempattack to 70>> <<set _tempspeed to 35>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Blood Elf Guard", maxHP: _temphp, HP: _temphp, maxMP: 30, MP: 30, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: Bandit HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The elven bandit silently takes out her daggers. <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="378" name="Jharina Quest Final 2" tags="" position="4700,3350" size="100,100">You wake up in a familiar environment; jail. Wouldn't be the first time this happens, honestly. The guards, an interesting pair of an elven man and a succubus, notice you waking up. "Don't even try escaping," the elf says. "You might have overpowered one of us, but there are two of us here." "I can count well enough, thank you very much," you snark. Another elf walks with hurried but strong steps. She's a redhead tomboy, tall and imposing. The most noticable thing about her is the metal collar around her neck. "Thank you for your hard work. I'll handle this." "General Maeve!" THe two guards salute before leaving. The elf called General Maeve enters your cell and stares down at you. "Do you know what you just tried to do?" "I'm stealing you bandits' stash." "I see you have a good sense of humor." "I'm not joking." General Maeve's fist slams against the wall next to you. "You just tried to steal from one of Master's--the Incubus King's reserve vaults. Normally I'd kill you right here and now. The only reason I'm not is because Master specifically ordered me not to, and to demand an explanation from you." You blink a few times. Only now does reality hit you in the head. Arnold didn't send you to loot a bandit vault--he just threw you straight at an imperial vault! Was he trying to get you killed, so he doesn't have to pay his debts to you? Or was he jealous and angry with you for sleeping with his wife? "So, your answer?" With no choice, you talk about Count Arnold's task for you. When you're done, Maeve's fiery face turns wrathful. "Guards!" The two guards return. "Go to Klatsch, and apprehend this Count Arnold." "I'll let you out, only because Master orders it," Maeve says. "But you'll go with them." You ride alongside the two guards--now accompanied by another half dozen, seemingly less elite guards--to Count Arnold's residence. When you get there, you see your harem mistress Yvette shouting at Jharina. "Yvette!" you call out. "$name!" The two of you share a short but intense hug. "What happened to you?" You give her a short explanation about what just transpired, after which Yvette's face turned red; redder than her usual red. She offers to confront Arnold himself, who has apparently gone to the nearby Telwor Forest, and the guards, knowing her status, agrees. You go with her, and Jharina tails you. The guards spread out around the perimeter of the forest. One of the guards shout, "I found him!" The three of you rush towards the guard. He does find Arnold; except he's dead. It looks like he hung himself. Jharina stands still unmoving. "Mistress Yvette, there's a letter here. It says: 'for Jharina'." Jharina snap takes the letter and opens it. Her breathing is unstable. "I ... I need to sit down." You and Yvette read the letter that Arnold wrote alongside Jharina: // To Jharina: Jharina, I apologize for what I have done and am doing. Through my ineptness I have led you to a life of misery and difficulty. I owe you an explanation for things that just happened. I didn't send $name to loot a bandit vault; I sent him to loot an imperial vault. My idea was that if he had succeded, we would've had enough monies to pay all our debts, and if he had failed, we at least wouldn't have needed to pay our debts to him. I did not expect him to survive and bring down imperial agents on us. I have used the money $name gave us before he went on the final task to pay off the remaining loan sharks. Since the debts are in my name, the Council shouldn't be able to force you to shoulder the debts. About the debt to $name, which you signed with the family seal, I had anticipated it and switched out the seal with a fake one. If you deny the legitimacy of the debt certificate, $name wouldn't be able to press his claim. You should burn this letter after reading this, to avoid implicating you. After that, please live the life you wish. Sorry, Jharina. -Arnold // "Arnold ... you ... you fool ...." Arnold's letter slips through her lithe fingers and confiscated by the guards. You pat Jharina on the back. Her stare is empty. "Can you please leave me alone for now, $name?" she says. "I think we have a lot to talk about ... but not now." "Okay, Jharina." You and Yvette withdraw from the scene, letting the guards do their work. Arnold's corpse is taken down to be buried properly. "Well, I hate to say this, but she's fucked," Yvette comments as the two of you return to Klatsch. "Since she's his wife, she'll inherit all the property and debts. I doubt she'll be able to pay the Council debts with that shoddy house. Not to mention her debts to you." "What do you think will happen next, then?" you ask. "If she can't pay the debts?" "She'll have to pay with all she has--herself, if nothing else. She'll fetch a decent price in the slave markets, I think." You aren't quite sure about what to think of it. One thing is sure--you miss the bed and warmth of your camp. You should probably return to Klatsch after some time to let matters sort themselves out; maybe in ''a week'' or so. <<set $JharinaQuest to 14>> <<set $JharinaTimer to 0>> [[Return to camp and rest|End day 2]] </tw-passagedata><tw-passagedata pid="379" name="Jharina Quest Resolution" tags="" position="4825,3375" size="100,100">You are brought before Gretchen, council member and captain of the guard, and Yvette's eternal rival. After exchanging pleasantries, Gretchen gets into the meat of the issue immediately. "As far as we're concerned, Countess Jharina still owes 86,500 credits to us, and then 20,000 credits to you," Gretchen says professionally. "Due to Countess Jharina having admitted to not being able to pay, we've confiscated all of her assets. Her house, jewelry, and other fineries come up to around 55,000 credits." "Nowhere near enough to cover the debts then." "Obviously no. This has forced us to enslave Countess Jharina and sell her to the market," Gretchen continues. "Here's where I'd like to make a deal. Thing is, the Council doesn't have qualifications and certifications to handle slaves like this. We can, eventually, but the red tape and administrative fees are going to be enormous. So here's my offer: we'll hand over Jharina to you, and you waive your claim to the 20,000 credits. We'll throw in a pillory and some bondage toys in, as well." "And if I don't want that?" "We can give you 10,000 credits now. And nothing more." "Hmm ...." [[Take Jharina|Jharina Quest Resolution 2][$JharinaRecruited to true]] [[Take the credits|Jharina Quest Resolution 2][$JharinaRecruited to false]]</tw-passagedata><tw-passagedata pid="380" name="Jharina Quest Resolution 2" tags="" position="4800,3500" size="100,100"><<if $JharinaRecruited is true>> "Okay," Gretchen says with a nod. "Wait here for a bit while I fetch her." The 'a bit' part turns out to be six hours. You stand up, exercise a little, taking a look around, and by the end of it you're almost sleeping. Eventually, Jharina enters the room with a certain depraved outfit. "Do you like what you see, Master?" she asks submissively. She's wearing her wedding clothes--made of white satin and silk--with holes cut out such that her large, round breasts are exposed. Her nipples are pierced with small and thin gold rings. Another hole was cut to show her puffy vagina, her clit pierced with a thick ring of white gold and her pubic hair completely shaven. "It's my wedding ring, Master," Jharina says. "Do you like it?" You walk towards your new slave. "You look //perfect//, slave," you say. "Take everything off now." Jharina obeys your order. Jharina's whorish body is naked in all its glory for you to inspect. Your name is tattooed with black ink on her crotch. She wears a buttplug made of metal. "Let's bring you home now, shall we?" "Yes, Master," Jharina replies with a subservient smile. "Let's go [[home|New Camp]]." As a side note, your ownership of Jharina is boosting your reputation in Klatsch! <<set $KlatschRep to $KlatschRep + 50>> <<set $JharinaQuest to 15>> <<else>> "Fine." An hour later Gretchen returns with a sack of cash, amounting to 10,000 credits or 1,000 coins. <<set $player.coins to $player.coins + 1000>> You take the cash, thank her, and [[leave|Klatsch]] <<set $JharinaQuest to 15>> <<endif>> </tw-passagedata><tw-passagedata pid="381" name="Visit Jharina" tags="" position="3375,1550" size="100,100"><<nobr>> <<set _i to random(1,3)>> <</nobr>> <<if _i is 1>> When you enter the tent, your drow slave is masturbating with her fingers. From the fluids on her pussy, it's clear she's been doing it for some time now. <<elseif _i is 2>> When you enter the tent, your drow slave is reading an erotic book while her fingers fondle her own nipples. <<elseif _i is 3>> When you enter the tent, your drow slave is relieving herself with a bucket. You watch her golden piss sprouting from her pussy. <<endif>> "Ah, Master!" Jharina, wearing only some very slutty underwear that doesn't even cover her holes, stops whatever she was doing and immediately stands up. Her legs are bent, her hands behind her head. She wears a collar with chains. You take a look around. Jharina's tent is large, but her bed is inside what is basically a glorified, big dog cage, in which there are some books, a bucket, and food and water. The rest of the tent is filled with various bondage machines. Jharina's voice brings your attention back to her. "How can I service you today, Master?" [[Talk|Jharina Talk]] [[Sex|Jharina Sex]] <<if $SeleneJharinaJealousyQuest is 1>> You notice something strange with Jharina today. Are those fresh //scars// on her left breast? [[Ask Jharina|Selene Jharina Jealousy Quest]]<<endif>> [[Leave|Personal Camp Section]]</tw-passagedata><tw-passagedata pid="382" name="Jharina Talk" tags="" position="3275,1500" size="100,100">"Just talk?" Jharina says. "Of course. What do you want to talk about, Master?" [[About your past history|Jharina Talk 2][$JharinaTalk to "history"]] [[About Arnold|Jharina Talk 2][$JharinaTalk to "Arnold"]] [[About the drow|Jharina Talk 2][$JharinaTalk to "drow"]] <<if $JharinaHarem isnot true>> [[About joining the harem|Jharina Talk 2][$JharinaTalk to "harem"]] <<endif>> [[Back|Visit Jharina]]</tw-passagedata><tw-passagedata pid="383" name="Jharina Sex" tags="" position="3500,1450" size="100,100">"Mmm, that's what I like! I'll show you what I can do, Master." [[Humiliation|Jharina Sex 2][$JharinaSex to "Humiliation"]] [[Pillory sex|Jharina Sex 2][$JharinaSex to "Pillory sex"]] <<if $AdvancedBondage is true>> [[Bondage anal|Jharina Sex 2][$JharinaSex to "Hogtie anal"]] [[Degradation|Jharina Sex 2][$JharinaSex to "Hardcore bondage"]] <<else>> You know Jharina loves bondage sex, but you're not exactly skilled at it. Surely someone could help you learn it; maybe ''a succubus from the Domain'' <<endif>> <<if $ArnoldBondage is true>> [[Use the Rembach's dildo machine|Jharina Sex 2][$JharinaSex to "dildo machine"]] <<endif>> <<if $SeleneJharinaJealousyQuest is 12>> [[Threesome with Selene|Jharina Sex 2][$JharinaSex to "threesome"]]<<endif>> [[Back to personal camp|Personal Camp Section]]</tw-passagedata><tw-passagedata pid="384" name="Jharina Talk 2" tags="" position="3125,1550" size="100,100"><<if $JharinaTalk is "Arnold">> "Ah ... well." "It is a little awkward," you say. "Arnold and I weren't married out of love. We did have friendship. At least in its initial stage," Jharina says. "I did it for the title. He did it for the money. In the end, we lost both." Jharina sighs. "Wherever he is, I hope he's in a better place. He might be weak, but at least he was good-hearted." //"He wasn't very good hearted when he sent me to death,"// you think to yourself. "As for me, I'm living the life I want." "Really? Being a slave is what you want?" "I used to be a prostitute, remember? Getting fucked was my literal job," Jharina says. "Besides, I'd be a slave one way or the other after all the debacle. If it's you, I can accept it." Jharina flashes a slutty smile, her fingers going down to her pussy and spreading it. "And honestly, as long as you dick me properly, I'd be your good little pet, Master. I just love a good fuck. I've been suppressing that part of me for long; and now it's out again." <<elseif $JharinaTalk is "history">> "My past? It's nothing interesting," Jharina says. "I used to be a prostitute." "Why was that?" "Why? I had to feed myself, of course," Jharina says with a laugh. "Well, I suppose I could have found some other job. But it just felt so natural for me. I started at 80 years old--that's the human equivalent of around 19 years old. Sold my anal virginity for 1750 credits. Licked his cum off the floor for an additional 500. And I thought--well, how easy was that! And I realized how much I like sex; and how much I like being dominated." "And you never looked back." "Never looked back. I climbed up high; I even almost got in the Incubus King's Outer Circle, if you believe that." "My harem mistress was in that," you mention. "Oh? Then she must have been very impressive; sexually or otherwise." Jharina sighs. "Well, I eventually decided to settle down. And you know the rest of the story." <<elseif $JharinaTalk is "drow">> "We have very few drow here," you say. "What can you tell me about your race?" "I'm no historian, I can't tell you much," Jharina admits. "What I have are sayings passed down from generation to generation. They say the elves feared us for our powers that they deem dark, and our immortal lifespan. They expulsed us from the forests." "Is that really what happened?" "I don't know," Jharina says. "The expulsion likely did. The reason might be different. After that, around half of us became pirates and nomads, and the remaining half accepted the Incubus King's offer of a new home. That is what I've been told." "Hmm. I see." "For whatever it's worth, drows make good mages and fighters. Most of us work in the north now, as battle mages and researchers," Jharina says. "And I must say, we make exquisite sex slaves too, don't you think? We've got hundreds and thousands of years to hone our skills; and we can control our pussy and ass to be tighter than even human virgins." "I'll look forward to seeing those legendary sex skills in action, slave." <<elseif $JharinaTalk is "harem">> <<set $JharinaHarem to true>> "Of course, Master!" You summon Yvette, who barges in with a brush and a canvas. "Wow, you actually acquired a drow slave?" Yvette wonders. Jharina lets out a small smile. "And with so much experience and high skills, too! How much did you spend on her? Slave markets don't sell raritites like this." You explain the background of you acquiring Jharina to Yvette, at the end of which Yvette's lips twist into a smirk. "Ah. I see! I forgot about her. So she ended up in your care, after all," she says. "So, what position would you have her be, $name?" You can't think of anything more appropriate than Jharina's signature pose; hands behind head, legs bent, hips shoved forward, and tongue out. The pose of a slave bitch. After Yvette finishes painting and leaves, you approach Jharina. "Now that you're in my harem, I expect nothing less than your full obedience, slave." "Naturally, Master." <<run $HaremMembers.push("Jharina")>> <<endif>> [[Back|Jharina Talk]]</tw-passagedata><tw-passagedata pid="385" name="Jharina Sex 2" tags="" position="3650,1500" size="100,100"><<if $JharinaSex is "Humiliation">> "Stand up," you order. Jharina quickly does so. Your fingers rub all over her body before settling on her vagina and anus. "I wonder how many men have fucked your holes, slave," you say. "By human standards you're a disgusting whore." "Mmmh ...." your demeaning words only serve to arouse Jharina. You take a chair and sit down. Jharina pulls down your trousers and is beginning to lick your penis when you lightly slap her face. "Who told you you can lick my cock?" "Sorry, Master." "Grind that pussy on my boots, bitch. And bounce your tits so I can jerk off to it." Jharina, like a master stripper, grinds her puffy pussy on your boots like the obedient pet she is. She makes sure to shake as wildly as possible, so that her tits flail up and down. You jerk off; honestly, you've forgotten when you last did so. Whenever you feel horny, you just have sex with the eternally down-to-fuck Yvette. White pearls of cum shoot out of the tip of your cock, falling to the ground. "Clean it." Jharina bends down and licks all the cum until the floor is clean. "Good slave," you say, petting her head before pulling up your trousers and leaving. <<elseif $JharinaSex is "Pillory sex">> You lock Jharina in the pillory. "Just like our first time, Jharina." "How romantic, Master," Jharina teases. "Aah, but I do love this. I remember back when I was a whore; a particular group of young men liked to hire me just for this." "You really know how to get me worked up, huh?" you say with a slap on her butt. "Don't worry, by the time I'm done your pussy will forget any other cock." Jharina's thick pussy lips open up when your cock enters. An unimaginable warmth and tightness envelops your shaft. You waste no time in pounding the drow's pussy. "Ah! Ah!" Jharina moans. "More, Master! Fuck your slave more!" You pull on Jharina's wedding ring--the one pierced to her clit now. A few hard slaps land on her asscheeks. "You deserve this, slut," you insult her as you fuck her, which seems to only arouse her further. Her pussy tightens up until you can barely thrust, and her vaginal walls, filled with tiny tentacles, tease your shaft from all sides. "So? Try to remember who fucked you, slut," you say. "Ah--I can't remember them anymore, Master!" Jharina moans. "My pussy accepts you as its owner, Master! It begs you to fill it with your sperm! It's begging to be pounded to submission!" Just as she begs you, her bitch pussy orgasms. When you pull out, it's only when Jharina's womb is choked full of your cum. You release Jharina from the pillory. "Your pussy is an acceptable hole, slave," you say, throwing her a rag. "Clean it up. I'll use it again later." Jharina takes the rag and smiles. "Thank you, Master." <<elseif $JharinaSex is "dildo machine">> "This machine!" Jharina says in awe. "It was one of the Rembach family's heirloom that we sold to cover some of our debts. Where did you get it, Master?" "From the Fair," you say. "Well, let's give it a try, shall we?" Jharina takes a doggy position, curious to try it out as well. The machine consists of two fairly long dildos strapped to some kind of engine. You twiddle with the levers, activating the dildos. "Oh!" One dildo penetrates Jharina's pussy and the other one her ass. "Hnng ... ah, it feels like being double penetrated!" "Let's add another one to the mix, shall we?" You whip out your cock, dick-slapping her cheek. Jharina eagerly opens her mouth and extends her tongue, whirling all over your cock. Two synthetic cocks and one very real cock continue to pound the purple-skinned drow, sweating and panting. Jharina's blowjob is nearly unmatched; the way she moves her tongue and the way she swallows your shaft without difficulty are bringing you to orgasm. Jharina swallows your sticky cum. She moves herself away from the machine as you shut it down. You take a good look at her stretched pussy and ass before nodding in satisfaction. "You have been a good slave, Jharina," you say. "Clean yourself up. I'll visit you again later." "Yes, Master!" <<elseif $JharinaSex is "Hogtie anal">> "Hmm ... let's see how Juna told me to ...." With a complex assortment of ropes, you hang Jharina from the ceiling from a pussy hook inserted deep inside her tight cunt. You slide yourself under her, admiring her thick buttocks. With your two fingers, you spread open her asshole. You lube it with your spit, and your cockhead breaches her anus. "Aaaah!" Jharina lets out a long moan as your cock scrapes her ass walls. "Fuuuck! My ass is on fire!" You put your hands on Jharina's buttocks, lifting her body only to let her fall down; your cock digs deep inside Jharina's asshole, while the pussy hook stretches open her pussy. "AAAH!" Jharina's messy orgasm sends her to heaven, and a slap on her ass brings her back. "I'm nowhere close to cumming, slave," you say. "Clench that ass!" "Yes Master! I'll clench my ass!" a sweaty Jharina moans. You continue exploring Jharina's asspussy until your entire member is inside of it. "Cum inside, Master," Jharina begs. "Cum inside, decorate my ass with your sperm!" Jharina tightens her ass, strangling your thick cock. You let out all of your sperm inside. "Aaah ...." You take off the ropes and the pussy hook, letting Jharina stay on the bed. "Did you enjoy it, Master?" "Very much so, slave. You did well." <<elseif $JharinaSex is "Hardcore bondage">> You swing around a whipping cane, making Jharina salivate. "You little masochistic bitch ...," you say. "What are you waiting for? Have you ever seen a bitch not on all fours?" Jharina quietly assumes a position on all fours, sticking out her butt. Her breathing is audible; eager to enjoy whatever abuse you're about to dish out. So she must have been confused when you proceed to do nothing. You take a book from the nearby bookshelf and read it. "M-Master? Aren't you going to torment me?" "Do you //want// me to?" "Yes, Master." "Why aren't you begging for it, then?" you ask while taking off your shoes and putting it on Jharina's head. "Please, Master, torment your disgusting slave! I can't live without your cock anymore Master! Punish me!" You drag Jharina on all fours outside. Once you're outside, you treat Jharina with a few whippings on her ass. "Lay down, and spread your legs." Jharina obeys, and you laugh. "Look at yourself, slut. Under the sun--naked, spreading legs. You really are an unfaithful bitch," you say. You put your foot on Jharina's pussy. "Nggh!" Jharina orgasms immediately. You take off your shoe and shove it up Jharina's pussy, stretched to its limits to accomodate it. "Ha ... ha ...." Jharina catches her breath after the massive orgasm. You stand up and take hold of your cock. Despite your erection, you manage to urinate all over Jharina. Yellow, glistening liquid smears all over her face and tits. You leave and return ten minutes later, ordering Jharina to take a bath. "Good work, slave," you say. "Keep it up." "Thank you, Master!" <<elseif $JharinaSex is "threesome">> You call on Selene to join the two of you. Your slave arrives hurriedly. "Just relax, Master. We'll work on your shaft," Selene whispers seductively. Your two slaves work wonderfully, their naughty tongues sliding on your cock, their faint breaths warming it up. "I can't live without this cock anymore, Master," Selene says, arousing you. "I want it deep inside me ... ravaging me ... reminding me of my status." Selene and Jharina lay down on the bed as you rise up. They lay side-by-side, spreading their legs wide. Selene's lighter skin contrasts beautifully with the dark purple-skinned Jharina; her natural, pubic hair-covered pussy pairs nicely with Jharina's pierced, bald cunt. You salivate over their bodies, weighing who to fuck first. "Aaah, Master!" Selene moans as her comfortable pussy accepts your cock. "Oh, Selene, I'm so jealous." Jharina squeezes Selene's nipples as you continue to rail Selene's wet pussy. You've fucked her dozens, hundreds of times. And her defiant pussy has turned to an utterly terrific cockhole, fit for your shaft. Her wetness is complimented by tightness. "Noo, don't pull out!" Selene cries out as you take your cock off her, switching to Jharina. The drow's well-fucked pussy is supernaturally tight, and it's only with effort that you can get deep. Thin cilia tease you from all sides, caressing your shaft, urging it to cum inside. "Mmh!" Jharina moans as Selene tugs on her wedding ring. "You little cheating slut," Selene whispers. You pull out just as the pleasure grows unbearable. Pearly cum shoots out of your cock, bathing your slaves' faces in it. "Mmm, tasty," Jharina says, licking the cum on Selene's face. The fallen priestess returns the favor. "Come back again, Master," Selene says. "You won't get bored of your sluts, will you, Master?" "Of course not, slave." <<endif>> [[Back|Jharina Sex]]</tw-passagedata><tw-passagedata pid="386" name="Klatsch Gloryhole" tags="" position="5075,2975" size="100,100">You visit the gloryholes in the prison under the office. <<nobr>> <<set $KlatschCoupons to $KlatschCoupons - 5>> <<set $RedeemedCoupons to $RedeemedCoupons + 5>> <<set _i to random(1,2)>> <<set _j to random(1,3)>> <</nobr>> There's one stall that seems always empty; it's prisoner 41, the human. [[Use Prisoner 41|Klatsch Gloryhole 2][$KlatschGloryhole to 41]] <<if _i is 1>> Next to prisoner 41 is prisoner 28, the dwarf. It's one of the few times nobody is lining up behind to try some tight dwarf ass. [[Use Prisoner 28|Klatsch Gloryhole 2][$KlatschGloryhole to 28]] <<elseif _i is 2>> Prisoner 28, the dwarf, is being fucked by an incubus. <<endif>> <<if _j is 1>> On the far end is prisoner 17, the succubus. She's swaying her hips, almost begging to be fucked. [[Use Prisoner 17|Klatsch Gloryhole 2][$KlatschGloryhole to 28]] <<else>> Prisoner 17, the succubus, is being fucked by a human. <<endif>></tw-passagedata><tw-passagedata pid="387" name="Klatsch Gloryhole 2" tags="" position="5075,3100" size="100,100"><<if $KlatschGloryhole is 41>> Now that you take a proper look at her, it's quite clear why nobody is lining up here. Both her vagina and anus were wide open, stretched to human limits. "Tch. I spent that many coupons on this?" you tsk-ed to yourself. "Let's see what you can do, bitch." You hear a faint sob from the other side of the wall as you take off your trousers. No lubrication is needed; the woman's asshole welcomes your cock begrudingly. A loose, pathetic asshole, barely able to provide any pleasure at all. Nevertheless you continue to fuck her. Nobody else seems interested, so why not enjoy it to the fullest? You pound the woman's asshole until all of your cock is buried inside. A good half an hour passes, accompanied by the woman's whimpers. Her anal walls tight up at the last moment, a desperate attempt to make you cum. You finish with a burst of cum inside her loose ass. You give the woman a slap on the butt, put on your trousers, and leave. You don't even afford her the dignity of having her ass cleaned with the provided cloth. [[Back|Redeem Office]] <<elseif $KlatschGloryhole is 28>> One incubus has just finished pounding the dwarf's ass, and as he leaves, he throws you a smirk. "Damn it," you say, putting your hand on the thick dwarf butt and taking a look at her asshole, brimming with cum. The tightness of dwarf ass is legendary--apparently only rivalled by drow pussy--but you'll have to pass. "I guess I'll take your cunt, then." Using your spit as makeshift lube, you penetrate the dwarf's tight, dry pussy with your cockhead. Dwarf pussy has a reputation for being rough, coarse, dry, and difficult to penetrate; the reputation is well-deserved. You use a small surge of lust magic to 'force' yourself through by making your cock a bit wetter. The tight pussy feels much more enjoyable now. The tightness of her cunt is squeezing cum out of your cock, and you have no intention to artifically prolong the intercourse. Satisfied with shooting your sperm inside her, you roll up your trousers and leave after using the rag to clean her. [[Back|Redeem Office]] <<elseif $KlatschGloryhole is 17>> Ah, the elite of the three; prisoner 17, a naughty succubus whose hips sway left and right. You undress. You slap your cock against her pussy a few times before you thrust inside. "Mmm, what a nice cock!" the succubus giggles. She's active, moving herself as she is able. Her exquisite, slimy pussy is comfortable for your cock. "How is this a punishment for you?" you ask. "That's the neat part; it's not!" "Hey man, if you want to talk go hire a whore," a gruff voice says behind you. You look back, and notice a line of at least nine or ten men. You up the pace, swinging your hips wildly. You dump your translucent cum inside her throbbing cunt. You pull up your trousers and leave. [[Back|Redeem Office]] <<endif>> </tw-passagedata><tw-passagedata pid="388" name="Cheat list" tags="" position="2075,2450" size="100,100">Cheat stats [[Cheat stats|Cheat list][$player.attack to 1000;$player.maxattack to 1000;$player.HP to 10000;$player.maxHP to 10000]] Cheat money [[Cheat money|Cheat list][$player.coins to $player.coins + 10000]] Cheat supplies [[Cheat supplies|Cheat list][$player.supplies to $player.supplies + 1000]] Cheat Dornburg reputation [[Cheat dornburg rep|Cheat list][$DornburgRep to 100000]] Cheat Selvil reputation [[Cheat selvil rep|Cheat list][$SelvilRep to 100000]] Cheat Klatsch reputation [[Cheat klatsch rep|Cheat list][$KlatschRep to 100000]] Cheat arachne tokens [[Cheat arachne token|Cheat list][$ArachneToken to $ArachneToken + 50]] Set 'Thalia raped' to true [[Thalia raped|Cheat list][$ThaliaRaped to true]] Set 'Thalia imprisoned' to true [[Thalia imprisoned|Cheat list][$ThaliaImprisoned to true]] Set 'Thalia gangbanged' to true [[Thalia gangbanged|Cheat list][$ThaliaGangbang to true]] [[Back|New Camp]] </tw-passagedata><tw-passagedata pid="389" name="Yvette Date in Klatsch" tags="" position="3450,4800" size="100,100">The two of you teleport to Klatsch, where Yvette has a favorite restaurant. It's a fairly high class restaurant while still maintaining a casual environment. "Do you have a reservation, Sir and Madam?" a young, topless human maid with enormous udders ask. "I have this." Yvette tosses out a silver bracelet bearing the restaurant's name. Looks like she's some sort of VIP here. You put the price--1000 marks--on the table. "Of course. Please, follow me." You are seated on one of the quietest tables, and a candle is lit for the two of you. You and Yvette chat without much guidance or overarching topic. When dessert--plum cake--arrives, you feel something nudging at your penis. You look down briefly and see Yvette's foot. You discreetly take off your trousers. "This is really good, isn't it?" Yvette asks with a grin, likely not about the plum cake. "It really is," you say, also not about the plum cake. Yvette's foot pushes your cock against your stomach. "Hey, jerk off here," Yvette whispers, pointing at her plate. "Jerk off to that cow-tits over there." You discreetly pump your shaft, ejaculating onto Yvette's plum cake. "It needs some sauce, don't you think?" Yvette asks with another smirk as she bites into the cum-stained cake. The two of you leave the restaurant satisfied. "Let's go here again some time," you say. "Sure!" [[Back|Yvette Sex]]</tw-passagedata><tw-passagedata pid="390" name="Main Quest" tags="" position="875,1225" size="100,100"><<if ndef $MainQuest>> You are heading out to investigate when a short-haired brunnete woman approaches you on horseback. She stops at your camp. "Can I help you?" you ask. "You are $name, the corrupted $class, yes?" she flashes her thorned rose badge--a symbol of the royalty. You instinctively raise your blackstone dagger. "No need for violence," she says calmly. "I am Natalie, a Hand of the King. I come under the name of royal authority in order to help clear your name." "Explain then. What happened to me?" you ask cautiously. A Hand of the King does speak with the authority of the royal forces. "I can't tell what happened to you. What I do know, however, that this new blessing 'detected' thousands of 'corrupted' people across Walshemia," Natalie replied. "The very same day they were put in prison by church authorities, all of them suffered strange fevers and died strange deaths. Some died clawing and munching the iron bars, some died masturbating, some died banging their head to the walls ... everyone, except you." "I come here to investigate what happened. Please, tell me everything. I swear on the thorned rose that I will aid you to the fullest." You finally decide to trust Natalie. You spend practically the entire day to tell Natalie of what has happened so far. "I see. Alright, I'll begin investigating," she says. <<set $TempQuest to 1>> <<set $MainQuestStart to true>> <<elseif $MainQuest is 1 and $MainQuestContinue isnot true>> "Have you found anything?" "I've tracked down an ancient, tribal text that may help us understand what happens. It's in the ownership of a local shaman; unfortunately, they refuse to lend it to us." "Can't you invoke royal authority?" Natalie is silent for a while. "This sort of backwater area--better not utilize royal authority as long as it's not absolutely necessary. I'll continue my investigations and see if there are other leads." Natalie suddenly turns around just as she is about to leave. You mentally note to yourself to make an appeal to the elder of the nearby village about it. "Although ... there's another way. For 250 gold I can hire a thief to do it," Natalie continues. "Your choice." <<set $TempQuest to 2>> <<set $MainQuestContinue to true>> <<elseif $MainQuest is 3>> You give the book to Natalie. This time, she has a fellow agent with her, who is able to read the old language used to write the book. After several hours of discussion, Natalie dismisses her fellow agent and turns to you. "It appears that the stones are themselves corrupted," Natalie says. "It appears they can be used to transmit curses of their own." "No shit," you say. "I've copied the book. This is good enough evidence to put pressure on the church. I'll continue my investigations." <<if $thiefhired is true>> Later, you discreetly return the book. <<elseif $thiefhired is false>> Later, you return the book to the elder. <<endif>> <<set $MainQuest to 4>> <<endif>></tw-passagedata><tw-passagedata pid="391" name="Harem Quests" tags="" position="3650,5125" size="100,100">"Looks like you've gotten quite a few women under your wing, $name," Yvette comments. "I'll keep watch on them. Make sure there's no funny business." "You don't have to, Yvette. I know you're so busy," you say with a smile. "You kidding? Slipping agents into our enemies' harems back when we were revolting against Incubus King Salazar is how we've assassinated so many of our enemies. Trust me, you don't want the girl sucking your cock today to be driving a knife down your throat tomorrow." <<if $HaremMembers.includes("Selene") and $HaremMembers.includes("Jharina") and ndef $SeleneJharinaJealousyQuest>> "One thing I noticed is that you got Selene and Jharina near your personal camp now," she says. "Yeah. They're both excellent cumdumps, don't you think?" "Certainly. But I'd ''keep an eye on those two'' if I were you. They hold the same niche in your harem--a recipe for problems if I ever see one." <<set $SeleneJharinaJealousyQuest to 1>> <<elseif $HaremMembers.includes("Thalestris") and $HaremMembers.includes("Dahlia") and ndef $ThalestrisCookingQuest>> "So I got a request from the twins," Yvette says. "Apparently, they're bored of their mother's cooking." "Huh," you ponder. Dahlia is the one cooking for the entire camp. "Should we hire another cook?" "Nah. I've got something else in mind. Usually amazons are expected to know how to cook a little; things like wild game and foraged stuff." "Ah, Thalestris. I'll go ask her to help Dahlia." <<set $ThalestrisCookingQuest to 1>> <<endif>> [[Back|Visit Yvette]]</tw-passagedata><tw-passagedata pid="392" name="Selene Jharina Jealousy Quest" tags="" position="3875,1600" size="100,100"><<if $SeleneJharinaJealousyQuest is 1>> "What is that scar on your tit, slave?" you ask. "Ah!" Jharina covers the scar with her hand. "Don't cover it. Who did it to you?" Your gaze overwhelms Jharina's. "It's Selene, Master." You raise an eyebrow. "Selene? What happened?" "We got to a small brawl," Jharina says. "She's unhappy about my presence here." <<if $spell.includes("Minor Heal")>> You cast a healing spell, closing Jharina's wound. "It'll completely heal in a day or two," you say. "Thanks, Master." <<else>> You head to your personal tent and take a herbal plant ointment. You return to Jharina's tent and give it to her. "It'll heal in two or three days," you say. "Thanks, Master." <<endif>> //I should confront Selene.// <<set $SeleneJharinaJealousyQuest to 2>> [[Back|Visit Jharina]] <<elseif $SeleneJharinaJealousyQuest is 2>> "Did you get into a brawl with Jharina?" Selene doesn't answer, instead turning her face away from you. A few seconds pass before she finally whimpers, "yes, Master." "Why?" you ask sharply. "She was taunting me!" Selene protests. "She said I wasn't good enough to be your slave--that worn-out bitch!" Anger is bubbling in Selene's face. Yvette was right--this kind of environment will inevitably breed jealousy. //I should punish them together.// <<set $SeleneJharinaJealousyQuest to 3>> [[Back|Visit Selene]] <<elseif $SeleneJharinaJealousyQuest is 3>> Today you summon both Selene and Jharina outside. You have prepared a spot for the two of them with plenty of shade, and a big bowl of food and a bucket of water; enough food and drink for two people for a day. When they arrive, wearing daggers on their eyes against one another, you throw a sour smile. Silently, you chain Selene's left hand to a nearby tree and Jharina's right hand to a rock, and Selene's right hand to Jharina's left by the wrist. "Both of you know what to do," you say. "There's food and drink. And here's a bucket to piss. Good luck doing it if the other refuses though. When I come back, I want to see an improvement. I'll have Yvette take off the chains tomorrow." You decide to go to sleep. When you wake up, things should be better. <<set $SeleneJharinaJealousyQuest to 4>> [[Rest|End day 2]] <<elseif $SeleneJharinaJealousyQuest is 4>> You return to check on Selene and Jharina. The two are still on a stand-off. When they see you approaching, they stand up. "Master!" Selene says. "Jharina and I have figured out a 'compromise'." "I'm ready to hear it," you say. "Out with it then." "We both can //tolerate// one another ...," Jharina starts. "... but only one of us can be your main slave. Only one queen in a hive!" Selene continues. "There's be a sex festival in Selvil every two months," Jharina says. "There's always an ad in the bounty hunter's office. Register us both, Master--we'll see who's on the top." <<set $SeleneJharinaJealousyQuest to 5>> [[Fine, I'll see what I can do|Personal Camp Section]] <<elseif $SeleneJharinaJealousyQuest is 6>> Today is the day of Klatsch's bi-monthly festival. Selene and Jharina join the slaves as they prepare to deliver a stunning show. The snowfall and cold temperature are mollified today. Throngs of people gather around the town hall, and the fields surrounding it. Almost nine hundred female slaves and seven hundred male slaves participate, so you hear from the organizers. You stay well away from the male slaves' location; five events are organized for the female slaves: -Beauty and body contest -Mass masturbation contest -Blowjob contest -Gangbang stamina contest -Lesbian dildo contest "Hmm ...." [[Allow your slaves to join all events|Selene Jharina Jealousy Quest][$SeleneJharinaJealousyQuest to 7]] [[No sharing!|Selene Jharina Jealousy Quest][$SeleneJharinaJealousyQuest to 7;$SeleneJharinaJealousyQuestNoSharing to true]] <<elseif $SeleneJharinaJealousyQuest is 7>> For a sex empire, the bureaucracy of the Domain is //outstandingly boring//. You've seen four officials from the Klatsch City Council give their speeches, followed by the mayor, the local representative of a mage guild, a group of merchants sponsoring the event, and so on. The event finally starts at 9 o'clock. Far from your spectator's 'seat', Selene and Jharina are spending time getting nude and trading barbed insults, their eyes radiating hatred. They stand next to each other while a swarm of slave masters walk around, evaluating each slave carefully. You and Yvette watch as hundreds of evaluators descend. <<if $TelworForestFinalEvent gte 1>> You recognise the slave master judging Selene and Jharina; it's Juna, the veteran slave trainer you met in Telwor Forest. <<else>> A succubus approaches Selene and Jharina to evaluate them. From a fellow spectator you learn her name is Juna. <<endif>> "Here's a piece of advice, Selene," Jharina quips. "Back down now. You'll only humiliate yourself if you carry on like this. Four hundred years of experience; you could live your life four times over and you'd still not match me." "Dream on!" Selene snaps back. "You're just a piece of meat. A fucktoy handed over from one man to another. I bet a dog took your virginity." Juna silently and professionally observes the beauty of your two slaves, and the qualities of their bodies in their fullness. Whilst Selene receives a very respectable score of 73 out of 100--putting her within the top one hundred or so--, Jharina receives a stunning 94--second highest in the whole festival! "Grr ...." Jharina throws Selene a cruel smile. "See?" "This isn't over!" "You sure this is a good idea?" Yvette, watching with you, asks while munching on some pastries. "If it doesn't work, nothing will," you say. "The last event will be a lesbian dildo contest. And guess who's on a team?" "Ah. Clever. Let's see if it works." "If it doesn't, do you have any ideas?" Yvette shrugs. "No. So let's hope yours work." [[Continue watching|Selene Jharina Jealousy Quest][$SeleneJharinaJealousyQuest to 8]] <<elseif $SeleneJharinaJealousyQuest is 8>> "Show yourselves! Drown in pleasure, and offer your owners what you can do!" is the prompt for the second event. Selene and Jharina immediately fall to the ground on all fours, strategically ensuring their butts are facing you. Their fingers are all over their pussy and ass, stretching them, caressing them. You take your eyes off them and scan the rest of the competition. It's actually rather hard to masturbate creatively; most of them simply do so standing, sitting, or on all fours. The most notable was a dragonkin slave hand-standing, using her tail to flick her bean. Orgasms drench the streets in waves. Selene and Jharina climax at the same time, and their tired bodies collapse to the ground. Both of them receive a decent three out of five score. "A tie, huh," Selene remarks. "Hmph!" Jharina huffs. <<if $SeleneJharinaJealousyQuestNoSharing is true>> [[Continue watching|Selene Jharina Jealousy Quest][$SeleneJharinaJealousyQuest to 11]] <<else>> [[Continue watching|Selene Jharina Jealousy Quest][$SeleneJharinaJealousyQuest to 9]] <<endif>> <<elseif $SeleneJharinaJealousyQuest is 9>> It's hard to imagine this scene unfolding in front of your eyes. Hundreds of slave girls scatter to all directions, finding men to suck off. You'd like to watch Selene and Jharina, but in the mass of people it's impossible to locate them. While you enjoy a blowjob from an elf slut, on the far side of the field, Selene and Jharina are surrounded by a sea of cocks. "Scared?" Selene snarls as she begins to devour the cocks one after another. What she lacks in experience, she makes up in raw talent. "Hardly," Jharina says, carefully licking the tip of a man's cock. "It's called pacing. The difference between an amateur and a professional, I'm afraid." "Who'll win this round, in your opinion?" you quip at Yvette. "Tough to say. Jharina's got the experience, Selene's got the talent--and a drive to win." When all is said and done, Selene and Jharina's faces and upper body are covered in sperm. Selene edges out her rival this time--ninety-four against ninety-two. [[Continue|Selene Jharina Jealousy Quest]] <<set $SeleneJharinaJealousyQuest to 10>> <<elseif $SeleneJharinaJealousyQuest is 10>> "Ready to drop out, whore?" Selene hurls an insult while cleaning off the sperm on her face. "Have you ever even been gang-banged?" Jharina asks. "It's tough work, you know. Less experienced girls tend to faint midway. Would be really funny if that happens to you ...." You cannot comprehend the chaos of the festival, barelly controlled. You find yourself fucking a dark-skinned middle-aged human woman. //How did -- whaaa?// Neither Selene nor Jharina can afford to banter for long. Jharina attempts to move, but she's pinned down alongside Selene. Their holes, gaping with excitement, accept the men's cocks gladly. "Ah! Aah!" Moans and groans fill the air. Selene and Jharina felt their bodies warmed up by the heat of cocks, blasting cum into their wombs and assholes. and bathing them in sperm. "I won't ... I won't lose to you!" Selene declares in the middle of it all, "You're not taking away my spot!" "Dream on!" Jharina barks back. "Your holes might be 'fresher' than mine; but after today they'll gape like an old whore's, while mine stays as tight and appetizing as ever." Both of them have no idea that their master is but half a metre away from them. You smile faintly. Their loyalty to you; the factor that unites them. You'll have to play with that, and leverage it to stop their bickering. In the end, Selene suffers a terrible loss against Jharina, with the latter having serviced threefold the amount of men that Selene have. [[Continue|Selene Jharina Jealousy Quest]] <<set $SeleneJharinaJealousyQuest to 11>> <<elseif $SeleneJharinaJealousyQuest is 11>> Selene and Jharina are tired, but the last event is coming. When they hear that they're partnering up, both are aghast. Nevertheless, both fall to all fours as one end of a large cucumber is inserted in Jharina's pussy, with the other end in Selene's. All the other pairs start moving, trying to orgasm the quickest (not an easy task, given how everyone has probably climaxed at least ten times). But your slaves ... remain idle. Neither are willing to give an inch to the other. "What a shame," you say to Yvette. "I thought their loyalty to me is deeper than that." "They can't overcome their egos, in the end," Yvette comments. At those words, Selene starts moving slowly. "Jharina," she says. "I can't do this. If we end up last, it'll be humiliation for Master." "... you're right." Jharina moves equally slowly, matching Selene's pace. "Hey, Jharina," Selene says again. They're both clearly way behind. "You know ... maybe we shouldn't have this fight in the first place. We can both be his favorites, can't we? I'm sorry." Jharina offers a smile. "You're right," she says. "I'm sorry too. Now, let's make our master proud." Selene and Jharina extended their hands, crashing their bodies against one another. The rough cucumber grazes against their internal vaginal walls, bringing them a lot of pleasure. But it's their master's watchful eye that burns a flame of lust in their bodies. "AHH!" Selene and Jharina orgasms at the same time, the wet, slimy cucumber slipping out of their holes. Nobody really cares about the result anymore. Once Selene and Jharina clean themselves and get properly dressed, they cling unto your arms. "Please treat us well, Master!" Selene giggles. "Visit us in Jharina's tent and we'll show you what we can do together." <<set $SeleneJharinaJealousyQuest to 12>> [[That's good to hear|New Camp]] <<endif>> </tw-passagedata><tw-passagedata pid="393" name="Selene Sex 2" tags="" position="3600,2175" size="100,100"><<if $SeleneSex is "Strip and Blow">> Selene takes off her clothes with a smile as you sit down. Selene begins with a slow dance, accentuating her breasts. "Master, I learned from those whores from the brothel about what makes a good sex slave. They even have a dance for it." "Well, go ahead then." "The first is the face," Selene says, swaying left and right. "And then the body. The proportions must be right. The breasts, the thighs, the hips, the arms and the legs--all of them must synchronize and not appear grotesque." Selene makes a few whirls, allowing you full sight of her assets. "Thirdly, the vagina and the anus must be ready for penetration. The tighter, the better; but holes are useless if they can't be fucked." Here she was close to you but facing against you. She used her hands to open up her asscheeks, showing both her vagina and her anus. "Then, the slave's skill. Blowjobs, titjobs, footjobs, everything. And finally, submission." Selene grovels before you. You put your left foot on her head covered with purple hair. "A slave without obedience is like an unpolished gemstone. Worthless. Useless. Purposeless. But as long as a slave obeys their master, they have value." "That is enough, slut. I didn't acquire you for you to blabber away," you say. "Now rise up here and use that mouth properly." Selene works hard, using her tongue to envelop your cock and massage it. You smirk and enjoy the blowjob. Your greatest enemy at her knees, sucking you off at demand--what else could you ever want? [[Back|Visit Selene]] <<elseif $SeleneSex is "pussy">> "On all fours, slut," you order. Wordlessly, but with some giddiness, Selene obeys. "Are you going to fuck my pussy, Master?" "Is the sun going to rise from the east? Of course. Slave pussies are made to serve their owner's cock." Selene braces herself as you penetrate her wet snatch. "Ah! Master!" "Your pussy really is made for cock, slut!" you tease. "Can you feel how wet you're getting?" "Yes, Master!" Selene moans. "I'm just a bitch in heat, whose pussy gets wet easily!" A slap lands on Selene's ass. Then another. Selene is almost uncontrollable, her body jerking front and back as she struggles to match your movements. "How's my bitch pussy, Master? Is it to your satisfaction?" "From the way you squirt, you'd think I'm pleasing you instead," you say sharply while slapping Selene's ass. "Nngh, sorry Master! This bitch will try harder!" You feel the urge to cum as well. You arch yourself deeper inside, ejaculating your white sperm inside Selene's womb. "Ah ... so much ... thank you for the creampie, Master." [[Back|Visit Selene]] <<elseif $SeleneSex is "anal">> "My backdoor, Master? Of course!" Selene undresses and lays on her back, opening her legs as wide as possible, exposing both of her lower fuckholes. "This is how you want me, right?" Selene licks her lips. "Just so," you say. "Your asshole is beautiful, Selene. It's just as tempting as your pussy." Selene blushes from your strange compliment. "Ravage me Master, ruin my asshole!" You oblige your slave's request after spitting on her ass. "Ah! AH!" Selene moans as you explore her anus. "Does it hurt, slut?" "I-it's a perfect mix of pain and pleasure, Master! I-I'm cumming!" Selene ejaculates. Her face is no longer that of a priestess, or even a whore. It's that of an animal who lives only for pleasure. "Dirty bitch! An anal orgasm? How perverted can you be, slut?" you whisper to her ears as you begin drilling her vise-like anus. "Ah! I'm just a lowly slave, Master! A piece of meat that gets excited whenever her master fucks her!" Selene's ass quickly adapts to your shaft, her anal walls squeezing your cock from all directions. "Please give my ass the honor of receiving your sperm, Master!" You climax yourself, filling Selene's tight asshole with sperm. "Thank you for your sperm, Master." [[Back|Visit Selene]] <<elseif $SeleneSex is "walk">> The walk certainly isn't anything like Selene expects. With a collar around her neck, you bring her for a refreshing dog walk in the secluded forests in Selvil. She's the dog. "The air's fresh today, isn't it, bitch?" "Yes, Master," Selene answered happily, wagging her ass like a good dog. She is completely naked. If there were people nearby, they'd be able to feast their eyes on the unclothed flesh of a fallen priestess. "M-Master, can I please piss?" Selene asks, "I've been holding my bladder!" "Do it like a bitch does, then." Selene blushes deeply before raising her left leg and anchoring it on a tree. Golden urine shoots out. "Oh, this is so shameful, Master," Selene moans lightly. "What are you talking about? That's how dogs urinate," you say, caressing Selene's purple hair. "And you're a good dog, aren't you, Selene?" You yank her collar and force her into a doggy style position. Selene seems to have anticipated your wish, because she immediately spreads her legs as wide as possible. "Please help yourself to my bitch holes, Master!" So she must be surprised when, rather than your cock, your fingers probe both her pussy and ass. "I have to inspect them once in a while, bitch. Make sure they're clean and tight." You enjoy her reactions as she climaxes from your fingers digging deep inside her cleanly shaven pussy. You yank her collar again, this time walking your submissive bitch back home. [[Back|Visit Selene]] <<elseif $SeleneSex is "toilet">> You have Selene kneeling and opening her mouth the moment you order her to. She's certainly not expecting you to urinate in her mouth, judging from her expression, but her corrupted training makes her relax and open her mouth even wider in a few seconds. You lay down on Selene's bed. Your loyal slave moves to lick your glans, but you stop her by roughly taking hold of her long, purple hair. "I don't want your filthy tongue near my penis," you say. "It goes where it should." You direct her tongue towards you asshole. Selene diligently licks it with her dirty tongue, cleaning it out. Her hand creeps over, her slender fingers teasing your erect shaft. "You suck as a priestess, Selene," you say. "But you're a fantastic slave." Shades of red burst on Selene's cheeks. Her fingers do their work faster now. You feel your own orgasm coming. When it comes, a burst of white semen stained Selene's purple hair. The fallen priestess looks up to you with eyes that ask your satisfaction. "You're a good bitch, Selene. Keep this up," you say. Selene's eyes light up. "Thank you, Master!" [[Back|Visit Selene]] <<elseif $SeleneSex is "gangbang">> You bring Selene to the brothel. When she sees six men lining up, she knows what's coming. She kneels and begins servicing the plethora of cocks. Her greedy mouth goes from one man to another. Two of them can't handle Selene's skill and ejaculates, bathing her purple hair in white sperm. "Fuck me, fuck my worthless holes!" Soon Selene finds both her pussy and asshole penetrated by thick cocks, while she serviced two more with her mouth and hands. "Haha, you're really just a cumdump!" one of the men insults, "hey bitch, whose cock feels better-mine or your master's?" "My master's," Selene says without hesitation (you smirk a little). "But yours isn't bad either." His ego struck by Selene's remarks, the man pounds her pussy harder than before. Another man asks her to clean his asshole and Selene submissively obliges. Once they're done, the leader asks you the price. "One coin each," you say, smirking at Selene. He lets out a laugh and hands you over six coins before leaving. <<set $player.coins to $player.coins + 6>> "Mmm, they're so pathetic, right, Master?" Selene says. "Having to pay for sex--if they're anything like you, they should be finding their own sluts." Selene drags herself near you. "I don't feel good at all, Master, I think my body knows its owner too well," she grins. "Good slut. Come on, let's go." [[Back|Visit Selene]] <<elseif $SeleneSex is "whip">> "One!" "Two!" "Ah! Three!" You observe the whip marks on Selene's butt. She is standing straight with her legs spread. "Spread it more," you command before delivering a sharp whip at her exposed pussy. "Do you know why I'm punishing you, Selene?" "Because I've been a bad slave, Master?" Selene asks. When you twist your lips in displeasure, she proposes another one, "because what I did before, Master?" "Because you're my slave, and I can and will do whatever I want to you," you whisper, sending tremors down Selene's body. You have Selene laying down and opening her legs, her fingers caressing her sore pussy. You whip out your cock and force it in Selene's red pussy. Selene's face twists into demented pleasure, her tongue out. "You're just a pocket pussy!" you insult her. "Know your place, slut!" "Yesh Master! I'm nothing more than holes for your pleasure!" Selene's pussy tightens abruptly, her body having known its purpose. You shoot out four bursts of thick cum inside her womb. You lift Selene's tired body to the bed. "You're a good slave, Selene." "Thank you, Master." [[Back|Visit Selene]] <<elseif $SeleneSex is "threesome">> With a snap of your fingers, you summon your other depraved cumdump, Jharina, to Selene's tent. "Oh ... am I not enough to satisfy you, Master?" Selene asks, a little sullen. "There are many things two fucktoys can do that a fucktoy can't, Selene," you say. "I'm looking forward to it, Master!" Once Jharina comes in, you order both of them to be on all fours like dogs. "Spread your holes," you order. In total submission, both your slaves do as ordered. You position yourself above Selene. Your cock breaches her ass, making her scream. "M-Master, may I have some lube?" "Beg," you say sadistically, complete with a slap to her asscheek. "Please, Master, your stupid slave's asshole is on fire! May I have your spit as lube, Master?" Selene begs. You pull out, spitting at Selene's gaping asshole before fucking her again. "Ah! Yes! I-I'm cumming!" Selene moans. Selene's anus is squeezing all it can from your dick. "Cum inside my ass, Master!" You fulfil your slave's wish, unloading your first shots in her anus. You switch to Jharina immediately. "No need for lube, Master," Jharina says. "I can take--aah!" Turns out Jharina can only barely take your entire shaft jammed inside her rosy, well-fucked anus. The purple-skinned depraved bitch moans in pain and pleasure as you completely pull out, only to swing your hips forward and burying it all inside. "Does my fuckhole please you, Master?" Jharina stabilizes herself, her hips swinging to match your own pace. "It's pretty good, slave," you say. "As expected from you." You ejaculate again inside Jharina's hole. As you step back, you observe your work; two completely devoted slave bitches, utterly subservient to your whims. "Clean up," you say. You watch in glee as your two slaves entangle their bodies, their tongues sucking all the cum out of the other's asshole. "Thank you for the meal, Master!" [[Back|Visit Selene]] <<endif>></tw-passagedata><tw-passagedata pid="394" name="Selene Religion Quest" tags="" position="3825,1775" size="100,100"><<if $SeleneReligionQuest is 0>> "Are you religious, Master?" It takes a few minutes for you to formulate an answer. Though you followed the Church of the Light-King, that is no longer the case. You certainly don't worship any gods. You have, however, met both the Incubus King, and the cathayan sage Xian; two extremely powerful beings. The former even straight up told you that gods do exist. "I'm not," you say finally. "Gods exist. But I don't worship them." "Is that so ... that is the conclusion I've come to, as well," Selene says. "When I was High Priestess, the Light-King spoke to me almost every day. In shrines when I'm praying, or when I'm asleep. It all ceased when ... I started the rebellion." You are tempted to snap that she was probably hallucinating, but you keep your mouth shut. "But I cannot accept that. I cannot accept the existence of gods, and the worship of them. Look at all the chaos, and the poverty, and the suffering. We have to take our fate into our hands, and we must spread this idea, isn't that right, Master? A new religion--no, a new philosophy! A new school of thought, to replace the rotting old ones!" You gulp your spit down. This Selene isn't the submissive, broken Selene you've had as your slave--this is a fresh, charismatic, and swaying Selene; the kind of woman who emerged as High Priestess at such a young age. "Let's roll things back a step or two," you say. "Your ideas are great. But they're far too abstract. It's hard to understand, and therefore hard to accept." "You're right. I need to condense my ideas into a coherent philosophy," Selene says, a little dejected. "Will you help me, Master?" "Sure. What do you need?" "I need to talk to people, and find out their understanding of religion. Preferably people we can trust; like my ''fellow harem members, or other trusted allies''." [[Back|Visit Selene]] <<set $SeleneReligionQuest to 1>> <<set $SRQ_Total to 0>> <<elseif $SeleneReligionQuest is 1>> <<if $SRQ_Yvette isnot true>> [[Ask Yvette|Selene Religion Quest Ask][$SRQ_Yvette to true;$SRQ to "Yvette"]] <<endif>> <<if $SRQ_Thalestris isnot true and $HaremMembers.includes("Thalestris")>> [[Ask Thalestris|Selene Religion Quest Ask][$SRQ_Thalestris to true;$SRQ to "Thalestris"]] <<endif>> <<if $SRQ_Jharina isnot true and $HaremMembers.includes("Jharina")>> [[Ask Jharina|Selene Religion Quest Ask][$SRQ_Jharina to true;$SRQ to "Jharina"]] <<endif>> <<if $SRQ_Total gte 6>> "I think I'm completely ready, Master. Ready to formulate my new philosophy." [[Hear Selene out|Selene Religion Quest][$SeleneReligionQuest to 2]] <<elseif $SRQ_Total gte 2>> "I think I'm ready, Master. Ready to formulate my new philosophy. I won't refuse more help, though." [[Hear Selene out|Selene Religion Quest][$SeleneReligionQuest to 2]] <<else>> "I'm afraid I'm nowhere near ready to formulate my new philosophy, Master." <<endif>> [[Back|Visit Selene]] <<elseif $SeleneReligionQuest is 2>> "Alright, let's hear it out," you say. Selene is finishing her manifesto and putting her quill down. "The first component is certainly the non-existence of gods," Selene says. "Or, should they exist, that they are not omnipotent or omnipresent, and can commit falsehoods. This part we shouldn't emphasize too much. Rather, I'd like to sum it up in a more secular phrase: 'self-determination'." "I agree," you say. "What else." "The second component is freedom. The freedom to do what one wishes to do. To worship any god, to not worship; to marry freely, to have sex with anyone willing, and so on. No more will there be strictly monogamous marriages, or accusations of whoredom." "And the third one. Treat others well. Do unto others what you want to be done to you, and such. I call my new philosophy 'the Three Principles'." "This is quite a work you've presented me, Selene." "Thank you, Master," Selene says, handing you the manuscript. "I'll study from this and see what we can do with it." For today, you just want to sleep .... [[Sleep|End day 2]] <<set $SeleneReligionQuest to 3>> <<elseif $SeleneReligionQuest is 3>> You quite agree with the points made by Selene. The question is what to do with it. <<if $ReligiousFreedom is true>> You're pondering the matter with Selene when Yvette, visiting you, offers a suggestion. "Don't you control that island ... what was it? Selvil?" Yvette says. "Why not try to spread this 'Three Principles' thing over there? Religion is quite a useful tool to control the populace." "I don't //want// to control the populace," Selene rebukes. "Sure. But you want to spread your philosophy, no?" Yvette says. "Hmm. Okay, let's give it a shot in Selvil." "$name," Yvette whispers. "Come and talk to me in Selvil so we can acquisition a building for Selene's use." [[Back|Visit Selene]] <<set $SeleneReligionQuest to 4>> <<else>> Unfortunately, you're not sure what to do with it. The Church of the Light-King remains the single recognised religion in Walshemia, and if you dare try to preach about the Three Principles, you'd be persecuted. A dejected Selene nods understandingly. [[Back|Visit Selene]] <<endif>> <<endif>> </tw-passagedata><tw-passagedata pid="395" name="Selene Religion Quest Ask" tags="" position="3825,1900" size="100,100"><<if $SRQ is "Yvette">> You and Selene visit Yvette in her office in Selvil. When you pose the question to Yvette, she tilts her head in confusion. "A //High Priestess// asking for my opinion?" "That's not it, there must be a ton of religions in your country, right? Are you religious?" Yvette shifts comfortably, one leg on top of another. "Me personally? I saw gods and Abyssal Lords kill one another in the Great War. You can't really be religious after seeing that," she says. "But yes. We do have a ton of religions--many weirder than others. But in essence most Domain religions are similar. There's a god, or God, or a pantheon of gods, and the worshipers worship them. That's the gist of it." "Damn. I was expecting something esoteric." "Ironically enough we actually have a number of goddesses in our ranks. Jasmine, the Whore Goddess; Maeve, the elven goddess of war; Isla, patron goddess of the dragonkin and mages; and a bunch others. Worship of them is banned, actually." "That's interesting," Selene says, though the authenticity of that line is questionable. "Fine. If you want an 'interesting' religion. There was a sex cult we apprehended, like, 200 years ago or so. Massive scandal for the Duke who controlled the area. Like 2000 people got executed. It was a shitshow," Yvette says. Selene's eyes lit up with an expression that says, //"now this is the real shit!"//. "Sex cults are a mark a dozen. But this one ... they had a belief that the end of the world was nigh. A big snake or a big wolf or a big something was going to come and kill us all, and the only way to stop it was to have sex." "Sounds benign enough," you comment. "Yeah, until they start kidnapping and raping en masse to do the 'we must have sex to stop the end of the world' thing. They even attacked Libidine. Stupid move. Got their entire cult slaughtered in half a day. Ha! I'm no military commander but even I know how tough Libidine's defences are ... anyhow, that's the weirdest belief system I know." <<set $SRQ_Total to $SRQ_Total + 2>> <<elseif $SRQ is "Thalestris">> You and Selene meet Thalestris in a field near your camp, where she is training with her axe. "You want to ask me about Sweva?" Thalestris asks. "That's a rather strange thing. What motivated this?" You explain the circumstances to the amazon, who nods understandingly. "Well, I can give you an overview, at least." Thalestris coughs a little. "You could say Sweva is a pretty laid-back goddess. We don't have too many restrictions. We try not to eat meat too much, and when we do, we hunt ourselves, and eat what we hunt. We keep in touch with nature spirits and fey. Once every so often we sacrifice an animal or some grains to Sweva." "Hm," Selene says, nodding, "so is Sweva considered omnipotent?" "No, actually. We fully acknowledge that Sweva is not the only god around. We know a few are stronger than she is. But it doesn't matter. Sweva protects us, and we protect her. Unlike the Light-King, if I may add." "Interesting," Selene says. She seems to be mentally adding a few pieces of information into the structure of her new philosophy. <<set $SRQ_Total to $SRQ_Total + 3>> <<elseif $SRQ is "Jharina">> The two of you meet Jharina in her camp. "Drow religions?" Jharina says. "Well! That's quite an interesting topic." "Do you know anything about it?" Selene asks. "Well, we have none," Jharina replies, shrugging. "The drow do not worship any god. We do whatever we want." "That last part ... what does it mean?" "What? The 'we do whatever we want' part?" "Yes. Are you saying the drow do not follow some sort of moral compass?" "Hm. That is an interesting statement," Jharina muses. "Certainly I do not think so. We're not going around killing and raping as we wish. So it follows that we must be following some kind of moral system." "Perhaps morals could arise naturally without the necessity of a god to teach them," Selene says. "Maybe. I think most if not all cultures would consider, for example, killing, to be wrong. Then you have the exceptions. War. Self-defense. Honor duels. Killing of heretics. And so on. But killing itself is considered improper." "Thanks. It has been illuminating." <<set $SRQ_Total to $SRQ_Total + 2>> <<endif>> [[Back|Selene Religion Quest]] </tw-passagedata><tw-passagedata pid="396" name="Selene Religion Quest 2" tags="" position="2500,6225" size="100,100"><<if $SeleneReligionQuest is 4>> "It's quite nice," you say, observing the two-story building, called the Mahogany House. Yvette has comissioned a hundred copies of Selene's manifesto and put it on a bookshelf. A large parchment is hung on the wall, with the words: SELF-DETERMINATION FREEDOM AND LIBERTY NON-VIOLENCE AND CHARITY "Trainees for the Outsider Corps," Yvette says when you ask about her three human assistants. Selene arrives half an hour after you. "A far cry from the Church's main temple," she admits. "But it's fine. In time we'll overtake them!" "Good. I like your spirit," you say. "Ah, Master ... I've got one last thing. I'd like for our House to be able to help people, as well. Not with religions or philosophies, but with concrete charity. Can I ask for 500 coins to start?" "Alright," you sigh. "I'll be back with the coins." <<set $SeleneReligionQuest to 5>> <<elseif $SeleneReligionQuest is 5>> <<if $player.coins gte 500>> [[Give the coins to Selene|Selene Religion Quest 2][$player.coins to $player.coins - 500;$SeleneReligionQuest to 6]] <<else>> You don't have enough money for Selene's request. <<endif>> <<elseif $SeleneReligionQuest is 6>> "Thank you, Master!" ''From now on, you can make Selene preach in Selvil. Doing so will increase Selvil's //devotion points//, steering the town away from Church doctrines and into the philosophy of the Three Principles. You can //explore// the town to see the changes. Unlock more and more perverted events by increasing //devotion points//'' <<set $SelvilDevotionPoints to 0>> <<set $SelvilDevotionPointsCap to 50>> <<set $SelenePower to $SRQ_Total>> <<set $SeleneReligionQuest to 7>> <<set $SelvilDevotionLevel to 0>> <<elseif $SeleneReligionQuest is 7>> Devotion points: $SelvilDevotionPoints Current cap: $SelvilDevotionPointsCap Selvil status: <<if $SelvilDevotionLevel is 0>> Selvil hasn't budged. Its populace remains firmly worshipful of the Light-King. Level: $SelvilDevotionLevel <<elseif $SelvilDevotionLevel is 1>> The philosophy of the Three Principles is making sizable headway. Around one-fifth of the population has been converted. Level: $SelvilDevotionLevel <<elseif $SelvilDevotionLevel is 2>> Selvil's population has been swayed by the Mahogany House, and it now stands on equal standing with the Church. All you need is one final push .... Level: $SelvilDevotionLevel <<elseif $SelvilDevotionLevel is 3 and $SelvilChurchState is false>> The once-dominant Church of the Light-King has been pushed to the fringes of Selvil. Hurrah to the Mahogany House! Level: $SelvilDevotionLevel (max level) <<elseif $SelvilDevotionLevel is 3 and $SelvilChurchState is true>> Almost ninety percent of Selvil's population has been converted to the Three Principles, and even then it is on amiable terms with the once-dominant Church of the Light-King. Hurrah to the Mahogany House! Level: $SelvilDevotionLevel (max level) <<endif>> [[Send Selene to preach|Selene Religion Quest Preach]] <<if $SelvilDevotionPoints == $SelvilDevotionPointsCap and $SelvilDevotionLevel isnot 1 and $SelvilDevotionLevel isnot 3>> [[Discuss next steps with Selene|Selene Religion Quest Break Cap]] <<elseif $SelvilDevotionPoints == $SelvilDevotionPointsCap and $SelvilDevotionLevel is 1>> Selene has big plans for her philosophy: a 'charity offensive', as she calls it; a classic method of the Church to spread its belief. Selene is about to use the Church's methods against it. She has asked for 1000 coins and 400 supplies to execute her plan. <<if $player.coins gte 1000 and $player.supplies gte 400>> [[Pay for Selene's plan|Selene Religion Quest Break Cap][$player.coins to $player.coins - 1000;$player.supplies to $player.supplies - 400]] <<endif>> <<endif>> <<endif>> [[Back|Selvil]]</tw-passagedata><tw-passagedata pid="397" name="Explore Selvil" tags="" position="2675,6250" size="100,100">You decide to explore Selvil. Selvil's slums are fairly vast. Unfortunately, Selvil almost solely depends on its fisheries, which are often unreliable. [[Visit the slums|Explore Selvil: Slum]] Selvil's seaside markets welcome both local traders, big merchants from the Walshemian mainland, and the occasional Southlander merchant. [[Visit the seaside markets|Explore Selvil: Seaside Market]] Selvil's town square is fairly vibrant. It's notable for hosting public punishment for petty criminals. [[Visit the town square|Explore Selvil: Town Square]] The Mahogany House is where Selene's headquarters is. Maybe you can help her out there? [[Visit the Mahogany House|Explore Selvil: Mahogany House]] **(has sharing)**</tw-passagedata><tw-passagedata pid="398" name="Selene Religion Quest Preach" tags="" position="2400,6350" size="100,100"><<set _i to random(1,3)>> <<if _i is 1>> Today, Selene takes a very hands-on approach. She visits the slums with you and talks to the local poor people, and distributes some food. "If you need more, you can visit us in the Mahogany House," Selene says, "we try to help as much as we can." Charity aid proves to be effective in swaying the people's hearts. <<set $SelvilDevotionPoints to $SelvilDevotionPoints + $SelenePower>> <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 1>> <<elseif _i is 2>> Today, Selene chooses to debate a number of Church clergymen in the town hall and the streets. She's constantly coming out on top, with her charisma if nothing else. <<set $SelvilDevotionPoints to $SelvilDevotionPoints + $SelenePower>> <<if $SelvilRep gte 600>> Your dazzling reputation in Selvil is helping Selene in her efforts! <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 3>> <<elseif $SelvilRep gte 400>> Your good reputation in Selvil is helping Selene in her efforts! <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 1>> <<elseif $SelvilRep gte 200>> Your decent reputation in Selvil is mollifying the negative impact of such a direct attack on the Church's dignity! <<set $SelvilDevotionPoints to $SelvilDevotionPoints - 1>> <<else>> Unfortunately, such a direct attack on the Church's dignity angers the more puritan members of Selvil's society, and they're lashing out against Selene's efforts. <<set $SelvilDevotionPoints to $SelvilDevotionPoints - 3>> <<endif>> <<elseif _i is 3>> Today, Selene emphasizes the 'freedom' part of her philosophy. Her words of encouragement are making Selvil's people dress more and more wildly. <<set $SelvilDevotionPoints to $SelvilDevotionPoints + $SelenePower>> <<if $BrothelQuest gte 3>> The brothel's existence is helping Selene spread her ideas. <<set $SelvilDevotionPoints to $SelvilDevotionPoints + $BrothelQuest>> <<endif>> <<endif>> <<if $SelvilDevotionPoints gte $SelvilDevotionPointsCap>> <<set $SelvilDevotionPoints to $SelvilDevotionPointsCap>> It seems that Selene's preaching can only do so much. You should meet her in the Mahogany House to discuss your next step. <<endif>> Devotion points: $SelvilDevotionPoints Current cap: $SelvilDevotionPointsCap Current level: $SelvilDevotionLevel [[Return to camp|End day 2]]</tw-passagedata><tw-passagedata pid="399" name="Explore Selvil: Slum" tags="" position="2675,6375" size="100,100"><<if ndef $ExploreSelvilSlum>> Today, you encounter an unfortunately familiar sight: a young beggar woman. She's dirty, her unkempt black hair short and messy. Her body is thin, almost to the point of being anorexic. You purchase some food for her and sit next to her. She can't help but feel suspicious, but she accepts the food nonetheless. After some casual chatting, the woman--who's named Clara--begins speaking at length about her state of destitution. Her father fought for the rebels, and was killed in the fighting. Her mother passed away some time ago to disease. "If you need help, you can visit the Mahogany House," you say. "The Mahogany House? Isn't that the headquarters of that new wacky religion?" "Wacky or not, there's almost always help there." "I see. Thanks for the suggestion." <<set $ExploreSelvilSlum to 1>> <<elseif $ExploreSelvilSlum is 1>> Today, you see Clara with a half-full bowl of food. "Hey!" she calls out. You smile and sit down with her. "Thanks for the tip. The Mahogany House hasn't got much food, but it looks like they always try to spare a bit for me." "That's good," you say. "What do you think about the Three Principles?" "The religion of the House?" she asks. "I still think it's a bit wacky. I'm open to it but I'm still not sure ... I mean, I haven't seen a single disciple of the House near here." ''Requirement to continue this storyline: Selvil Devotion Level at least 1'' <<if $SelvilDevotionLevel is 1>> <<set $ExploreSelvilSlum to 2>> <<endif>> <<elseif $ExploreSelvilSlum is 2>> Today, you see Clara still begging, but her face seems much brighter and fresher than the destitute Clara you encountered the first time around. "Hey! Come and sit here." "How are things now?" you ask. "It's getting better," Clara says with a smile. "Although ... I can't stay like this forever, can I? I can't live my life by begging." "Can't you find some sort of work?" you ask. "I used to do ... sex work ...," Clara's face burns up from embarassment. "But my body is weak. If the client's too rough I end up fainting." "I see." "You know, you've been talking about the Mahogany House a lot. But who are you in relation to it?" "I suppose you could say I'm one of the founders." "Ah." Clara smiles suddenly. "Thank you. Truly." <<set $ExploreSelvilSlum to 3>> <<if $SelvilDevotionLevel gte 2>> <<set $ExploreSelvilSlum to 4>> <<endif>> <<elseif $ExploreSelvilSlum is 3>> You meet with Clara again. The two of you chat for a short while, but nothing comes out of it. ''Requirement to continue this storyline: Selvil Devotion Level at least 2'' <<if $SelvilDevotionLevel gte 2>> <<set $ExploreSelvilSlum to 4>> <<endif>> <<elseif $ExploreSelvilSlum is 4>> Clara isn't in her usual spot today. You notice her working in a nearby tavern, so you enter. You order some food and sit down. Clara, noticing you, smiles and walks towards you. "Good day," Clara says with shining eyes. "Can I get you anything?" "You're working here now, Clara?" you ask. Your small talk skill is somewhere around the level of a caterpillar, as Clara must have ascertained. "Yes, your Mahogany House built this tavern. I got a job from them. And I--well, I'm not exactly a follower of it now, but I've been attending a sermon every now and then. It makes sense to me." You nod a few times and put your order. Clara brings your food to your table, and, since it's not a busy hour, sits next to you to chat. "I'm thankful to you," she whispers. "Without you I'd be starving in the streets. So let me show you my appreciation." She partially opens her shirt, letting you see her small breasts. Her hand tugs at your trousers, which you promptly take off. Soft fingers twirl, tenderly massaging your erect shaft. You put a piece of fried fish in your mouth. "Mmm. This fish is excellent," you say as you look sideways, only to see Clara gone. She's on her knees, and you feel her tongue gently licking the tip of your shaft. Her tongue travels downward, settling on your scrotum. "Damn!" you exclaim, just a little too loud for the empty tavern, as her hand pumps your shaft. You shoot out your pearly cum minutes later into Clara's mouth. She stands up, grins, and wipes off some cum on her lips. "See you later." <<set $ExploreSelvilSlum to 5>> <<if $SelvilDevotionLevel gte 3>> <<set $ExploreSelvilSlum to 6>> <<endif>> <<elseif $ExploreSelvilSlum is 5>> Today you visit the tavern where Clara works. She smiles devilishly when she sees you entering. "Looks like you can't get enough of my 'appreciation'," she whispers as she brings out your food. She partially opens her shirt, letting you see her small breasts. Her hand tugs at your trousers, which you promptly take off. Soft fingers twirl, tenderly massaging your erect shaft. You put a piece of fried fish in your mouth. "Mmm. This fish is excellent," you say as you look sideways, only to see Clara gone. She's on her knees, and you feel her tongue gently licking the tip of your shaft. Her tongue travels downward, settling on your scrotum. "Damn!" you exclaim, just a little too loud for the empty tavern, as her hand pumps your shaft. You shoot out your pearly cum minutes later into Clara's mouth. She stands up, grins, and wipes off some cum on her lips. "See you later." <<if $SelvilDevotionLevel gte 3>> <<set $ExploreSelvilSlum to 6>> <<endif>> <<elseif $ExploreSelvilSlum is 6>> The Mahogany House has certainly impacted the slum. For one, it's cleaner, and the beggars are gone. Give it time, and you're sure the slums will transform into just another residential district. You're more interested in the tavern where Clara works, though. When you enter, it's not quite rush hour. Your eyes rest easy, helped by the topless waiters. When Clara sees you, she smiles, her breasts swaying. "You're so lewd, Clara," you say as she brings you your food. The topless ex-beggar smiles. "Well, this isn't just a tavern anymore," Clara says. "Since the House is ascendant, well ...." She gestures to the left. A middle-aged waiter moans softly as she straddles another patron's dick. "A whorehouse?" you ask, frowning slightly. "No, not at all," Clara says. "Not exactly, at least. We can refuse; so far I've always refused. And we don't get paid; not always." Clara smiles faintly. "As I said, my body is weak ... but I'm willing to make an exception for precisely //one// person." A few minutes later, Clara has undressed. "I'm afraid I have to make you do most of the work," she says as she lays herself on a table, legs sluggishly spread open. Her hairy snatch is wet enough. "Mmm," Clara moans softly as you enter her womanhood. "Slowly, please. Don't be too rough." "Of course, Clara," you whisper. Clara's pulsating pussy welcomes your cock eagerly enough. "You're really wet." Clara extends her hand, pushing your lips close to hers. You make the final push, planting a kiss on Clara's lips. She orgasms the moment you do. "I'm close too, Clara," you whisper. "O-outside please!" You pull out just as you feel the tension reaching its climax, shooting sperm on Clara's pubic mound. "Aaah ...." The two of you clean up. "Come back soon," Clara says as you finish your meal. "Of course, Clara." <<set $ExploreSelvilSlum to 7>> <<elseif $ExploreSelvilSlum is 7>> Today you go straight to the tavern where Clara works. She grins when she sees you entering. You order food--and pussy. "Give me a moment," Clara says. A few minutes later, Clara has undressed. "I'm afraid I have to make you do most of the work," she says as she lays herself on a table, legs sluggishly spread open. Her hairy snatch is wet enough. "Mmm," Clara moans softly as you enter her womanhood. "Slowly, please. Don't be too rough." "Of course, Clara," you whisper. Clara's pulsating pussy welcomes your cock eagerly enough. "You're really wet." Clara extends her hand, pushing your lips close to hers. You make the final push, planting a kiss on Clara's lips. She orgasms the moment you do. "I'm close too, Clara," you whisper. "O-outside please!" You pull out just as you feel the tension reaching its climax, shooting sperm on Clara's pubic mound. "Aaah ...." The two of you clean up. "Come back soon," Clara says as you finish your meal. "Of course, Clara." <<endif>> <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 2>> <<if $SelvilDevotionPoints gte $SelvilDevotionPointsCap and $SelvilDevotionLevel isnot 3>> <<set $SelvilDevotionPoints to $SelvilDevotionPointsCap>> It seems that your efforts can only do so much. You should meet her in the Mahogany House to discuss your next step. <<endif>> Devotion points: $SelvilDevotionPoints Current cap: $SelvilDevotionPointsCap Current level of devotion: $SelvilDevotionLevel [[Rest|End day 2]] </tw-passagedata><tw-passagedata pid="400" name="Selene Religion Quest Break Cap" tags="" position="2500,6475" size="100,100"><<if $SelvilDevotionLevel is 0>> "It looks like our efforts are stalling, Selene," you say to your slave. "Indeed, Master. We'll need a massive push," Selene says. "I have an idea for that, actually." "Oh? Let's hear it out." "The Church of the Light-King has sermons every Sunday, in the morning. We'll make sermons too. Every Sunday--but in the evening." That weekend, you take a look at Selene's sermon. It's surprisingly quite well-attended; around two or three hundred people cramped up in a relatively small hall. Selene's charisma rapidly drowns the attendees into a trance. "The Church forbids polygamy. It forbids sex outside marriage. It forbids this and that. My question is, why? If everyone in a polycule consents, why must we forbid it? If two lovebirds wish to copulate, why should we forbid it?" Selene declares thunderously. "This is how to live your life. Don't believe blindly; think for yourself. Do what you wish; do what makes you feel happy and fulfilled. And don't harm others. and help them as much as you can. If everyone helps one another, this world would be a better place." The applause is thunderous. Over the next several weeks, this sermon would greatly advance the Three Principles. [[Rest|End day 2]] <<set $SelvilDevotionLevel to 1>> <<set $SelvilDevotionPointsCap to 120>> <<elseif $SelvilDevotionLevel is 1>> Selene launches her 'charity offensive'. You're very, //very// thankful you're not the one standing against her. First she invested massively in some businesses that are losing money--right in the heart of Church strongholds. The message she's sending is abudantly clear; the House would help those that the Church turned a blind eye to. You walk around city, seeing all the new businesses Selene has funded and the charities she's erected. Things are really looking up. Except for one thing. Large gatherings of Church followers have been spotted in Selvil, and the Church clergy is preaching harder than ever. They aren't going down without a fight. <<set $SelvilDevotionLevel to 2>> <<set $SelvilDevotionPointsCap to 220>> [[Rest|End day 2]] <<elseif $SelvilDevotionLevel is 2>> The day has come. Little by little, Selene's philosophy has uprooted this traditional bastion of the Light-King. Followers of the Light-King find themselves slowly but surely outnumbered. It is under this circumstances that a senior priestess alongside a fairly large retinue of dozens of knights and priests arrive in Selvil. "Mallory," Selene says. "Senior Priestess Mallory. So they sent her here. An ambitious wolf, sharp and quick. But today the wolf will be put down." Wishing to avoid further religious conflict, Church representatives reach out to you to arrange a public debate in the town hall, which you accomodate. Before the debate begins, Selene takes time to consult you about how to approach the debate. "The way I see it," you say. "We can try to completely push out the Church. That will give us overwhelming control in Selvil. The other way is to pacify it. That means having to share power with the Church, but perhaps this way it'll be more amiable to us." "That is what I was thinking as well. But what do you think is best, Master?" "Hmm ... I'll direct you later," you say. "Okay, Master," Selene nods submissively. "[[Let's go|Selene Religion Quest Finale]], Master." <<endif>></tw-passagedata><tw-passagedata pid="401" name="Explore Selvil: Seaside Market" tags="" position="2800,6375" size="100,100"><<if ndef $SelvilExploreSea>> Ah, the seaside market, fresh air, nice sunlight, and ... ... //fish//. All you see as you walk through the market is fish, more fish, squids and crabs, more fish, shells, and fish. The sharp scent is throwing you, a land-borne, off. The one interesting vendor is a brown-skinned merchant woman from the Southlands (or Gurn, as the Southlanders themselves call it). "Hello," the woman says with a thick southern accent. She is veiled, which draws quite some attention from nearby vendors. She looks perhaps in her early thirties or so. "Can I interest you in something?" While you waste time picking out knick-knacks, you try to get closer to her; first by asking her name. "Lailah," she says shortly, and she seems to move one step backwards mentally. "Nice to meet you, Lailah." "Yes." Another mental backwards step--accompanied by a physical one. Taking that as a hint to beat a hasty retreat, you bid farewell. You've heard of this before--of strange faiths of the south that demand the ultimate separation of man and woman. Perhaps it's not a good idea to see Lailah again until the Three Principles have advanced. <<set $SelvilExploreSea to 1>> <<if $SelvilDevotionLevel gte 1>> <<set $SelvilExploreSea to 2>> <<endif>> <<elseif $SelvilExploreSea is 1>> Today you meet Lailah again, but no progress remains to be seen. "What can I do for you?" Lailah asks mechanically. <<if $SelvilDevotionLevel gte 1>> <<set $SelvilExploreSea to 2>> <<endif>> <<elseif $SelvilExploreSea is 2>> Today you head out to the seaside market. Lailah is there, smiling pleasantly. "Hello," Lailah says. "Can I help you with anything?" "Hi, Lailah," you say. You look at her goods. Ehem. The goods on the table. "You look happier today." "Oh, thank you," Lailah replies. "I've been listening to some sermons from the House. The purple-haired woman says I'm too brooding, and I should open up a little." "Ah, I see." The two of you chat pleasantly enough, yet you can't help but feel Lailah is still hiding under a veil--not just a physical one, but also a mental one. <<set $SelvilExploreSea to 3>> <<if $SelvilDevotionLevel gte 2>> <<set $SelvilExploreSea to 4>> <<endif>> <<elseif $SelvilExploreSea is 3>> Today you meet Lailah in the seaside market. The two of you chat pleasantly, yet you can't help but feel Lailah is still hiding under a veil--not just a physical one, but also a mental one. <<if $SelvilDevotionLevel gte 2>> <<set $SelvilExploreSea to 4>> <<endif>> <<elseif $SelvilExploreSea is 4>> Today you meet Lailah in the seaside market. She seems in deep thought. "Oh, hello," she says as she notices you in front of her. "Hello, Lailah." After a few minutes of browsing her wares, Lailah throws you a statement. "I have been listening to the sermons in the Mahogany House recently," she says. "They say you're a higher-up there. I wonder if you might illuminate me." "I try," you say. "Are you aware of the God of Fire and Sand?" "I must say I'm not." "It's one of the newer deities in Gurn. His faith imposes a lot of restrictions, particularly on women. My husband was a devout follower. Hence my clothing." "Was?" "He passed away some months ago. Don't be sorry. He was an abusive dick." "I see." "See behind you," Lailah says. A noblewoman with a near-transparent silk dress is walking by. "Do you think that's appropriate?" "I don't see why not," you say. "She seems to enjoy it." "Is it not immodest?" "By some definitions maybe," you say. "But modesty is a very subjective thing. I find unnecessary, baseless restrictions to be immodest." "What about sex outside marriage, or exhibitionist sex?" "As long as they don't harm other people I don't see the issue." "Then ... can you take out your penis?" You can't help but be surprised. "Sure," you say. You take off your trousers, and your cock jumps out. You grin when you see Lailah taking off her skirt and underwear. She begins masturbating her well-trimmed pussy. Your hand reaches for your own cock, stroking it slowly. "See this, Lailah?" you say. "Just imagine this shaft stretching open that pussy." "Hnng ...." "My cum drowning your womb in semen. My fingers up your butthole. My tongue licking your erect nipples. Now--cum, Lailah." Lailah seems almost under trance as she orgasms. "Wait, no!" Lailah shrieks. She immediately covers herself up and flees. "Wait, Lailah!" But Lailah is too fast, and you lose sight of her. <<if $SelvilDevotionLevel is 3>> <<set $SelvilExploreSea to 6>> <<else>> <<set $SelvilExploreSea to 5>> <<endif>> <<elseif $SelvilExploreSea is 5>> You explore the market, but you see nothing interesting. Lailah is gone. Perhaps she will be back one day. <<if $SelvilDevotionLevel is 3>> <<set $SelvilExploreSea to 6>> <<endif>> <<elseif $SelvilExploreSea is 6>> "Hey!" As you walk the market, Lailah calls to you. "Lailah! It's been quite some time," you say. "I was staying in the Mahogany House, learning from Selene and the others," Lailah says, smiling. "I've converted now." You nod twice. "I see," you say. "Good for you. You seem happier." "Yeah," Lailah says. "I can't believe how good open sex feels. Speaking about that ...." The veiled woman turns around, taking off her clothing and underwear. Your aroused cock stands erect. "I've limited myself to oral before now. I can't give you my first, but can you be my second?" "It'd be my pleasure." Lailah turns her back towards you, arching her back. You step forward, grabbing her buttocks. Her hairy middle-aged pussy is beckoning you to enter, twitching and throbbing. "Put in your heathen cock and ruin my hole!" A few people around stop and watch as your grip on Lailah's ass tightens and you lunge your hips forward. Lailah's wet, mushy pussy gives in rapidly. "You're a real bitch, don't you know that, Lailah?" "Yess!" Lailah moaned. "I'm a naughty bitch!" All that repression. All that modesty. All that decency. They mean nothing to the new Lailah. A depraved cock-lover, a cum-guzzling whore; that is what she has become. And she's loving every second of it. Lailah has come twice, her body shuddering uncontrollably. Her widow pussy is gripping as tight as it can, and you feel your own orgasm coming. You pull out at the last second, coating her fat ass in cum. "Hmmh," Lailah hums as she wears her clothes and cleans the filth. "Come back soon, won't you? And give me a good dicking again." "Sure, Lailah." <<set $SelvilExploreSea to 7>> <<elseif $SelvilExploreSea is 7>> Today you visit Lailah's store in the seaside. "Hey there," she calls out. "I have jewelry, salted foods, some handicraft, and a pussy that needs to be fucked." "I'll take the forth one," you say with a grin, taking off your trousers. Lailah turns her back towards you, arching her back. You step forward, grabbing her buttocks. Her hairy middle-aged pussy is beckoning you to enter, twitching and throbbing. "Put in your heathen cock and ruin my hole!" A few people around stop and watch as your grip on Lailah's ass tightens and you lunge your hips forward. Lailah's wet, mushy pussy gives in rapidly. "You're a real bitch, don't you know that, Lailah?" "Yess!" Lailah moaned. "I'm a naughty bitch!" All that repression. All that modesty. All that decency. They mean nothing to the new Lailah. A depraved cock-lover, a cum-guzzling whore; that is what she has become. And she's loving every second of it. Lailah has come twice, her body shuddering uncontrollably. Her widow pussy is gripping as tight as it can, and you feel your own orgasm coming. You pull out at the last second, coating her fat ass in cum. "Hmmh," Lailah hums as she wears her clothes and cleans the filth. "Come back soon, won't you? And give me a good dicking again." "Sure, Lailah." <<endif>> <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 2>> <<if $SelvilDevotionPoints gte $SelvilDevotionPointsCap and $SelvilDevotionLevel isnot 3>> <<set $SelvilDevotionPoints to $SelvilDevotionPointsCap>> It seems that your efforts can only do so much. You should meet her in the Mahogany House to discuss your next step. <<endif>> Devotion points: $SelvilDevotionPoints Current cap: $SelvilDevotionPointsCap Current level of devotion: $SelvilDevotionLevel [[Return and rest|End day 2]] </tw-passagedata><tw-passagedata pid="402" name="Selene Religion Quest Finale" tags="" position="2350,6575" size="100,100"><<if ndef $SRQDebate>> You and Selene head to the hall. You take your seat just behind Selene while Selene stands on an elevated platform. On one hand, former High Priestess Selene. On the other hand, current Senior Priestess Mallory. Mallory is wearing the customary white robe of a priestess, while Selene dons a fairly simple cloak and a shit-eating grin. Mallory starts her attack right away. "Ever since the advent of this new, heretic religion, many traditional, proper values have been overturned. I see young women dressing like whores walking the streets without shame, and young men with little but underwear roaming around. Men are having two wives, and women are having two husbands. Men are marrying men and women are marrying women. This is the result of your delirious philosophy, Selene!" "So what's the problem?" Selene asks. "Why do //you// have to care about what they wear or who they marry? They wear such clothes because they want to, and marry two or three people or whatever because they want to." Selene glances at you, asking for directions. <<set $ChurchPacify to 0>> <<set $ChurchAttack to 0>> [[Attack the Church|Selene Religion Quest Finale][$SRQDebate to 1; $SRQDecision1 to "attack"]] [[Defend your position|Selene Religion Quest Finale][$SRQDebate to 1;$SRQDecision1 to "defense"]] <<elseif $SRQDebate is 1>> <<set $SRQDebate to 2>> <<if $SRQDecision1 is "attack">> Your fingers point outwards, indicating that Selene should go on the offensive. Selene smirks and nods. "In fact, it makes much more sense than your theology, Senior Priestess," Selene says. "You cannot justify the numerous restrictions that the Church has on its lay members and clergy. Since you used clothing as an example, I'll use it as well." "Priestesses must wear white, or, failing that, black, and the robes must cover all their body from neck to ankle. From the Code of Belizar, page 38, verse 11. But why? Have you ever asked that question yourself, Mallory?" "Obviously it's to protect the priestesses themselves," Mallory replies, fists curled. "Oh? To protect from what, Mallory? Bandits? Wild animals? In that case we should issue all priestesses leather or chain armor." "It's a symbol of modesty! It protects them from lust!" "From //rape//, then?" Selene smirks. "... yes." "So. Your idea is that your well-dressed priestesses evoke modesty. I must admit my followers are more risque. By your logic, yours should be completely free of sexual violence, while I can expect rapes to occur every day in my ranks. But that has not happened, has it? How many cases of perverted senior priests abusing junior priestesses have you seen and covered up, Mallory?" "They ... they're straying from the true path ... it's not the fault of our doctrine." "I suppose it's only natural to pin all the blame on the bad apples. Though I do wonder how many of the apples aren't bad." Seeing the heated situation, the mayor calls for a recess. "Mallory is tough as nails," Selene tells you. "But when a nail meets an iron wall, it'll bend, eventually." "Good work, Selene," you commend your slave. "Thanks, Master." <<set $ChurchAttack to $ChurchAttack + 1>> [[Continue|Selene Religion Quest Finale]] <<elseif $SRQDecision1 is "defense">> Your fingers point inwards, indicating that Selene should be emphasizing on co-existence with the Church. "Besides, even though you make it look like the Church completely abhors loose clothing, it is not so. Traditions might dictate so, but nothing in the holy books actually states anything about modesty. If anything, it emphasizes respect between people; recall the story of Andoleces the Kind, a saint who befriends prostitutes and scorns those who mock them." "What's your point, Selene?" Mallory asks point blank. "My point is that, even though the Church and the House might seem to be polar opposites, they are, in fact, not. In the end we both have noble ideals, no?" "Perhaps," Mallory says. "But I cannot accept your doctrine. The mere rejection of the Light-King is unacceptable." "And I find your devotion to the Light-King to be horrendous, too. But that is fine. Privately we might have severe differences, but there's no reason for us to beat up each other for that." "Hmph ...." Seeing the awkward atmosphere, the mayor calls for a break. "I don't know about Mallory, but her retinue is agreeing with you," you note. "Good work, Selene." "Thanks, Master." <<set $ChurchPacify to $ChurchPacify + 1>> [[Continue|Selene Religion Quest Finale]] <<endif>> <<elseif $SRQDebate is 2>> After the break, both women returns to the debate ground. "Where do you get this revelation from?" Mallory asks, attacking from a different angle. "Pardon?" "Who told you these things that form the base of your philosophy?" "Nobody. I came up with them by myself--with some help from other people." "Then how is it that you're presuming to stand on equal ground with divine word?" Selene seems to take a mental step backwards; but it's not because she has no response, but rather because she's got one too many. She glances at you again. [[Aggressive approach|Selene Religion Quest Finale][$SRQDebate to 3;$SRQDecision2 to "attack"]] [[Pacifying approach|Selene Religion Quest Finale][$SRQDebate to 3;$SRQDecision2 to "pacify"]] <<elseif $SRQDebate is 3>> <<set $SRQDebate to 4>> <<if $SRQDecision2 is "attack">> Your palm faces outwards, signalling Selene to attack. "On the contrary. What makes you think your religious hocus-pocus can stand on equal ground to a philosophy created through careful, critical thinking?" Tension immediately erupts, protests flying through the air. "If something's wrong with your religion, it's blasphemy. Hang the guy. Burn his house. If something's wrong my with my philosophy, I invite them to the House and we have a discussion. That ... is why we don't stand on equal moral ground. Except you're totally mistaken about who is on top." Only a recess saves Selvil from another religious war. <<set $ChurchAttack to $ChurchAttack + 1>> <<elseif $SRQDecision2 is "pacify">> Your palm faces inwards, signalling Selene to pacify the Church. "Hm. But are the holy books of the Church so divine in the first place?" Selene probes. "Sure, the Light-King might be divine. But the books aren't written by him. In fact, the authenticity of many of those books has been consistently challenged by your own clergy." "That is truth," Mallory admits. "And more than once evidence was found that some of the books were tampered by opportunistic priests some 200, 250, or 300 years ago," Selene says. "And many more were lost to war or poor maintenance, and had to be pieced together." "And then, many of the books were written in old languages and we had to translate it to the Common Tongue. And even more new books have been written by the collective wisdom of the priests, which you surely agree is not infallible." "You're right." The day is noon and a recess is called. <<set $ChurchPacify to $ChurchPacify + 1>> <<endif>> [[Continue|Selene Religion Quest Finale]] <<elseif $SRQDebate is 4>> "The last thing I want to highlight is your status," Mallory plays her last card. "You are a sl--indentured servant to a man by the name of Imperial Knight $name." "That is correct." "Even now, you're wearing his collar." "That is correct." "And it appears you are perfectly obedient to him." "Your eyes are superb." "Are you really qualified to lead your Mahogany House? An indentured servant, easily controlled by your master?" "Hmm ...." Once more, Selene glances at you. [[Insult the Church|Selene Religion Quest Finale][$SRQDebate to 5;$SRQDecision3 to "attack"]] [[Emphasize common ground|Selene Religion Quest Finale][$SRQDebate to 5;$SRQDecision3 to "pacify"]] <<elseif $SRQDebate is 5>> <<set $SRQDebate to 6>> <<if $SRQDecision3 is "attack">> "Is that any worse than your priestesses?" Selene lashes out. "You act like you have some kind of ultra-strict policy. Some airheaded girl from a wealthy noble family gets pregnant outside marriage and gets sent to the Church as a priestess to avoid shame. Familiar story? Of course it is. That's how half of your priestesses get in." "You--how dare you! You were the High Priestess yourself!" "Yes, and it's because of local incompetence like that that I wasn't able to do anything productive!" Selene bites back. "Don't go around prancing like your clergy is the cream of the crop, Senior Priestess Mallory. They who live in glass houses ought not throw stones." "They aren't //slaves//, at least," Mallory remarks darkly. "Yes. They're worse than slaves." <<set $ChurchAttack to $ChurchAttack + 1>> <<elseif $SRQDecision3 is "pacify">> "I understand your concern," Selene says calmly. "Certainly I am not the typical sort of person that you expect to be any kind of philosopher or priest. But think of it: the Church's saints are hardly born paragons either." "Remember Saint Andoleces the Kind, who was born in a whorehouse, or Saint Yuren the Generous, who was the son of a beggar. Humble beginnings are the bread and butter of the Church's early days, and so are tales of redemption." //"How many saints do this Church have?"// you mock lightly in silence. "Hmm ...." Mallory looks convinced enough by Selene's argument. <<set $ChurchPacify to $ChurchPacify + 1>> <<endif>> [[Continue|Selene Religion Quest Finale]] <<elseif $SRQDebate is 6>> <<if $ChurchPacify gt $ChurchAttack>> "I can see where you're coming from." Mallory says. "There is no need for us to fight. Both the Church of the Light-King and the Mahogany House can co-exist in Selvil." "Glad to see you come to that conclusion," Selene replies. The two walk close to one another, extending hands. A firm handshake seals the truce between the Church and the House. By the end of the day, you are dead tired. You and Selene return to your camp and rest. ''Congratulations! The Three Principles is firmly established as a peaceful, tolerant philosophy that co-exists with the Church in Selvil!'' <<set $SelvilChurchState to true>> <<set $SelvilHouseState to true>> [[Continue|End day 2]] <<elseif $ChurchAttack gt $ChurchPacify>> "I've had enough!" Mallory roars. "Knights--apprehend that bitch!" You leap in front of Selene as the knights reach for her. "Not in my turf, you don't!" you snap. And you're not alone. Everywhere, the people of Selvil, even formerly devout Church followers, rise up, standing like a wall in front of Selene. "You and your violence are not welcome here," Selene says, barging in front of all those people. "Go, and never return!" "By whose authority?" "By mine," you say. "And by the people of Selvil." Outnumbered and shaken, Senior Priestess Mallory flees Selvil. By the end of the day, you are dead tired. You and Selene return to your camp and rest. ''Congratulations! The Three Principles is firmly established as a passionate, unflinching philosophy that drives out the Church in Selvil!" <<set $SelvilChurchState to false>> <<set $SelvilHouseState to true>> [[Continue|End day 2]] <<endif>> <<endif>> <<set $SelvilDevotionLevel to 3>> <<set $SelvilDevotionPointsCap to 500>></tw-passagedata><tw-passagedata pid="403" name="Arcane Guild Quest" tags="" position="3775,3150" size="100,100"><<if ndef $ArcaneGuildQuest>> The Arcane Guild holds headquarters near Dornburg. It is a concealed place, white marble towers harking to the sky. You are welcomed into the chambers of no less a personage than Archmage Zectris himself, said to be the most formidable mage in the history of Walshemia. You also take note of a white-haired woman sitting in the far corner. "Good day, Archmage Zectris," you say, extending your hand. He scoffs, refusing it. "Sit down," a cold, domineering voice commands. "You will help us," he says immediately, standing up. You shrug. "Sure, that's what I'm here for." He leaves, grabbing his staff and taking leave. "Arrogant prick," you murmur. "Oh, please forgive him. It is his second nature." It's the white-haired woman--and you swear she wasn't in front of you a second ago. "Archmage Misa. The Mage Guild's spatial magic expert." "Nice to meet you, Archmage. I'm $name," you say. The archmage nods pleasantly. "The Crown sent you here, then," the archmage says. "Well, we're willing enough to align ourselves with it. But we do expect some help in return." "Of course. What do you need?" "I believe you have access to the Incubus King's Domain?" "I do." "The Arcane Guild is in need of elementally-charged stones," Archmage Misa says. "The Domain's stones are of a much higher quality than the best that we can make. I secured a smuggler contact but recently the contact was caught. Bring us five firecore, woodcore, and icecore stones; and two lustcore and darkcore stones." "I'm on it," you say. <<set $ArcaneGuildQuest to 1>> [[Return|New Camp]] ''You can access this quest from the Quests page'' <<elseif $ArcaneGuildQuest is 2>> You step into Archmage Misa's white tower. "Oh, $name!" she calls out. "You're just in time." "Is there anything I can help you with?" "Indeed. We located a cache of consider magical power in the wastelands. We attempted to teleport there, but we were parried by some kind of dark magical barrier." "I'm not much of a mage. If you can't do it, I doubt I can do anything." Archmage Misa smiles. "Normally so. But you were infected with a dark power. Perhaps with that, you can trick the barrier into thinking you're one of them?" "Hmm. Well, I can give it a shot in any case." "Great! Step forward, please, and put your hand on this orb." Archmage Misa holds out a fairly large blue orb. You touch the orb; a burning sensation slowly creeps into your hand. Mysterious whispers flood your ears. //Focus on the dark.// //The King waits.// Laughter. The barrier is broken. "Harg!" you croak in pain, your body slammed backwards. A few mages hurry forward to help you up. "It worked!" one of them exclaimed. "$name, are you alright?" Archmage Misa asked. The orb grows into a large, green-ish portal. "I ... I'm fine." After five minutes of rest, you feel ready to enter the portal. Half a dozen mages accompany you and Archmage Misa as you teleport to a dark cave. You draw your dagger, prepared to fight anything in your way. "Careful now," Archmage Misa hums. The eight of you keep on walking until you hear strange noises. "Wait," Archmage Misa mutters. The sound of grunts and eerie chanting. Fire can be seen from a distance. You take a peek. Goblins! A large gang of goblins, perhaps two hundred or so, are listening to the chants of a strange, hooded man. "Goblins? But they shouldn't be this organized," one of the mages says. "No they shouldn't," Archmage Misa comments. "Let's observe a little longer." Then suddenly, loud, ringing noises fill your ears. Men in grey uniforms charge in, bringing muskets; you've heard of this before, from Yvette. Supposedly they are new inventions using something called gunpowder. They work in unison, and from the muzzle of those muskets, some kind of projectile is fired. Goblins fall by the dozens. One of the mages make a mis-step, and he shouts as he stumbles down. Two incubi in grey uniform notice the noise. "There are some goblins there!" one shouts, and soon a dozen of those men are going your way. You decide to go out. "Wait!" you say, as those men aim their muskets at you. "We're from Walshemia!" "Walshemia?" one of the incubi asks. "Who are you? And you, go get Commander Sigrune." Another incubus runs off. "We're mages from the Walshemian Arcane Guild," Archmage Misa says. "I am Archmage Misa." The archmage extends her hand. "Squad Commander Revan, of the Sixth Muskeeter's Squad, First Division, Third Army." The two of them chat fairly fluidly; in particular, the archmage receives a package of gunpowder and a smaller musket called a 'pistol' as a sign of goodwill. Their commander, a human woman named Sigrun, arrives five minutes later. Sigrun explains things quite clearly. "Something has been uniting the goblins," she explains. "The Abyssal Lords. We're launching attacks to scatter them, and find out which Lords are behind this, and the purpose of it all." "We've not heard of this 'Abyssal Lord' business. But we do know powerful, dark creatures have been spotted. In Dornburg, for example. A cathayan witch calls one of them 'Malkoth'," Archmage Misa says. "I'm not in a position to explain further. Once our nations strike mutual understanding, I'm sure our monarch will be glad to do so." The mages of Walshemia and the musketeers of the Domain part ways peacefully today. <<set $ArcaneGuildQuest to 3>> [[Rest|End day 2]] <<elseif $ArcaneGuildQuest is 3>> "You called for me, Archmage?" you ask. "Indeed I did." It's not Archmage Misa's calm voice that speaks, but Archmage Zectris'. You take a glance at the other mages; they're archmages, each brimming with powerful magic. "Our meeting with Sigrune caused us to realize the gap between they and us," Archmage Misa says. "So we've begun exploring a new realm. We call it the 'otherworld'." "Well--" "Something is barricading us out," Archmage Zectris huffs. "Think your dark magic can get through it, boy?" You shrug. "Like last time, I can try." You are led to an inactive portal made of steel. An ambient light eminates from it. Once more, you channel your power through it. At first it seems to be ineffective. But a minute later, the portal shines metal grey. "Good! Follow me!" Archmage Zectris roars. All of you--about ten people in total--enter the portal. You enter a fairly verdant land. At a glance, aside from a monstrous iron fortress that can be seen from afar, things look quite normal. "Welcome, interlopers." A tall man covered in a silver robe, with a long spear in his hand, approaches you with light steps. His hair is long and silken black, his skin yellow. A pair of stag antlers protrudes out of his head. "I had intended to ignore your silly attempts. But that sort of dark magic; I simply must know where they come from. Though it ends up being the Incubus King's protectorate." "Who are you?" Archmage Zectris demands. "I am Archmage Zectris, High Leader of the Walshemian Guild of Mages. I am no protectorate of anyone!" "Not you, fool. That man behind you," the man points at you. "If you must know, I am Grand Sage Luo, White Tiger. Now you ought to leave; I see you have a spatial specialist with you." "We came here in search of power and resources," Archmage Misa says. "And there are many places to seek them from. But not here. Now leave." "Zectris, let's leave," Archmage Misa whispers. An ambient magic envelops all of you. "Why not here?" Archmage Zectris insists. "Because it's my domain. You don't break into people's houses and take their things, do you, interloper?" "Tell us how to attain power like the Domain's," Archmage Zectris demands. "They are using strange things they call gunpowder and muskets." "Ah. We developed such things with them hundreds of years ago. It was fun." This man Luo is entirely calm. "The branch of technology and magic is called alchemy and engineering." "In that case, we want recipes for the gunpowder, and blueprints for the muskets," Archmage Zectris continues. "You're testing my patience, interloper. Leave now." "We're not leaving without something, and we're not afraid to use violence to take what we want!" Archmage Zectris threatens. "Is that a threat?" "I'm afraid it has to be." "Then. Why don't you try?" The ground quakes with silent anger. Iron protrudes from the earth. The smell of hot steel permeates the air. "Zectris--my teleportation--it's blocked!" "I don't like this, but if people go around thinking they can threaten Grand Sages without retaliation, things are going to be complicated. I'll make this quick." [[Fight!|Meet Luo]] <<endif>></tw-passagedata><tw-passagedata pid="404" name="Juna Whore" tags="" position="4950,2800" size="100,100">You explain to Juna of a whorehouse that you own in Selvil, and you invite her to work there. <<if $SelvilHouseState is true>> "Hmm. I don't know. Isn't the Church of the Light-King or whatever in charge there? What if I get lynched?" "Oh, don't worry about that." You tell Juna about the Mahogany House that now dominates Selvil's religious landscape. "Heh! Now that's quite interesting!" Juna smirks. "I can't be working there full time. But I'll drop in every now and then." "Thanks!" "Now, is there anything else you want to talk about?" <<set $JunaWhore to true>> <<else>> "Hmm. I don't know. Isn't the Church of the Light-King or whatever in charge there? What if I get lynched?" "Selvil's my domain. I can guarantee your safety." "Unless you can guard me all the time, I can't see how. I'm sorry $name, but I'll have to refuse your offer." <<endif>> [[Back|Juna House]]</tw-passagedata><tw-passagedata pid="405" name="Brothel Whore: Juna" tags="" position="2175,6150" size="100,100">Juna is in the center stage, flanked by one of the local whores and a very wealthy client. When she sees you, she smirks. Juna bends down, offering her puffy asshole to the man while twerking wildly. The man's girth slams into Juna's ass in one shove. Juna's twerk continues, pushing herself against the man's cock. The rhythmic intercourse grows faster and faster until the man ejaculates with a loud cry. Juna herself is brought to climax, her thick cock throbbing and spouting cum. [[Back|Selvil Brothel]] </tw-passagedata><tw-passagedata pid="406" name="Natalie Army Talk" tags="" position="3450,2575" size="100,100">"So, what do you suggest about building my army?" "Hmm. In the end I think it's best that you build a mercenary army," Natalie suggests. "Outside that, you can ask for help from your allies. There are some flat plains near our camp. You can tell your army to make camp there." <<if $BlackswordsHired is true>> "I suppose that makes sense. I've got the Blackswords at my command now. They'll be a good start," you say. <<else>> "Recently we've acquired a dwindling band of mercenaries called the 'Blackswords'. I'll transfer them to you," Natalie says. "Thanks, Natalie." <<set $BlackswordsHiredLate to true>> <<endif>> <<set $PrivateArmy to true>> [[Prepare your army|Private Army Camp]] </tw-passagedata><tw-passagedata pid="407" name="Private Army Camp" tags="" position="3475,2450" size="100,100">A camp has been erected near your own. You assign your forces to take on individual mercenary assignments to sustain themselves. <<set $ArmyQuantity to 0>> <<set $ArmyQuality to 0>> ''A brief summary of your army:'' <<if $BlackswordsHired is true>> The core of this force is the Blackswords, a mercenary company that has worked with you for quite some time. <<set $ArmyQuantity to $ArmyQuantity + 10>> <<set $ArmyQuality to $ArmyQuality + 5>> <<elseif $BlackswordsHiredLate is true>> The core of this force is the Blackswords, a mercenary company that Natalie hired for you. <<set $ArmyQuantity to $ArmyQuantity + 7>> <<set $ArmyQuality to $ArmyQuality + 3>> <<endif>> <<if $DornburgRep gte 700>> A retired mercenary from Dornburg, impressed at your work there, has joined your forces. <<set $ArmyQuantity to $ArmyQuantity + 1>> <<endif>> <<if $SelvilRep gte 700>> A retired knight from Selvil salutes your work in Selvil and joins your forces. <<set $ArmyQuantity to $ArmyQuantity + 1>> <<endif>> <<if $AliceQuest gte 7>> After a good dicking, Viscountess Alice has provided you with a few select mercenaries, all on her payroll. <<set $ArmyQuantity to $ArmyQuantity + 2>> <<set $ArmyQuality to $ArmyQuality + 1>> <<endif>> <<if $SelvilDevotionLevel is 3 and $SelvilChurchState is true>> The Mahogany House has sent a number of militarily-trained devotees to join your band. This surprisingly includes a pair of advisors from the Church of Light-King. <<set $ArmyQuantity to $ArmyQuantity + 2>> <<set $ArmyQuality to $ArmyQuality + 2>> <<elseif $SelvilDevotionLevel is 3 and $SelvilChurchState is false>> The Mahogany House has sent many militarily-trained devotees to join your band. <<set $ArmyQuantity to $ArmyQuantity + 4>> <<set $ArmyQuality to $ArmyQuality + 1>> <<elseif $SelvilDevotionLevel is 2>> The Mahogany House has sent a few devotees to join your band. <<set $ArmyQuantity to $ArmyQuantity + 1>> <<set $ArmyQuality to $ArmyQuality + 1>> <<endif>> <<if $MusketWeapons is true>> Some of your forces are equipped with pistols and muskets. <<set $ArmyQuality to $ArmyQuality + 4>> <<endif>> <<if $ArachneSoldiers is true>> The Arachne Cult has sent you some of their recruits. <<set $ArmyQuantity to $ArmyQuantity + 4>> <<endif>> <<if $WilhelmArmy is true>> Wilhelm's men form up part of your army. <<set $ArmyQuantity to $ArmyQuantity + 3>> <<endif>> ''A brief summary on your captain(s)'' <<if $ThaliaRecruited is true>> Thalia seems unenthusiastic. <<set $ArmyQuality to $ArmyQuality + 1>> <<endif>> In total, your forces can be evaluated thusly: Quantity: $ArmyQuantity Quality: $ArmyQuality [[Improve your army|Private Army Improvement]] [[Return|Teleport Room]] ''You can visit your private army's camp with your teleport stone!''</tw-passagedata><tw-passagedata pid="408" name="Private Army Improvement" tags="" position="3675,2525" size="100,100">"There are many ways to improve your army," Natalie says helpfully. "I've compiled them." **Expand your forces Explore the world and seek your allies. Perhaps some of them would be willing to give you some troops. **Find arms Your army can always use more, and better, weapons; especially the muskets and pistols used by the Domain, which far outstrips the technological level of Walshemia's weapons. Perhaps the ''City Council of Klatsch'' can be persuaded to part with some arms. <<if $MusketWeapons is true>> Status: Done <<else>> Status: Not Done <<endif>> **Find a leader You can't command your army all by yourself. Find captains to help you command your forces. [[Return|Private Army Camp]]</tw-passagedata><tw-passagedata pid="409" name="Klatsch City Council" tags="" position="4750,2425" size="100,100">Klatsch City Council; a group of leaders administrating the city of Klatsch. You know one of them; Gretchen, Yvette's rival. [[Visit the Council's library|Klatsch Library]] <<if $PrivateArmy is true and $KlatschRep gte 200 and ndef $KlatschWeapons>> You have improved your reputation--maybe now the Council will be willing to accomodate your request. [[Ask for weapons|Klatsch City Council Weapons Request]] <<elseif $KlatschWeapons is 1>> Gretchen has basically requested 6000 marks in exchange of a cache of weapons. <<if $player.coins gte 600>> [[Pay|Klatsch City Council Weapons Request][$player.coins to $player.coins - 600;$KlatschWeapons to 2]] <<else>> Unfortunately, you don't have enough money. <<endif>> <<elseif $PrivateArmy is true and ndef $KlatschWeapons and $KlatschRep lt 200>> When you decide to inquire for weapons, Gretchen pointedly say, "we do not deal in firearms; in fact, it is illegal to do so without authorization from Libidine.". <<endif>> [[Back|Klatsch]]</tw-passagedata><tw-passagedata pid="410" name="Explore Selvil: Town Square" tags="" position="2925,6350" size="100,100"><<if ndef $ExploreSelvilSquare>> Unfortunately, petty criminals cannot be stamped out. They are largely thieves or small-time fraudsters. Today, you and the mayor oversee the punishment of a small group of fraudsters called the 'Shrimp Girls'; they pose as prostitutes to lure people into dark alleys or inn rooms where they'd be attacked and robbed. Around five young women are held in pillories. They'll be excellent examples for other criminals in Selvil. <<if $SelvilDevotionLevel gte 1>> <<set $ExploreSelvilSquare to 1>> <<endif>> <<elseif $ExploreSelvilSquare is 1>> Today you decide to visit the square again. The mayor has been launching renewed efforts against the Shrimp Girls after reports that a few persons of high nobility became victims. You see a few members of the Mahogany House talking to the mayor. "Today we'll be displaying these criminals in the nude!" the mayor declares, to the clapping of the crowd. "Wait, you can't do this!" one of the Shrimp Girls protest. "That's--that's illegal!" Her protest goes unheeded as her clothes are taken away from her. In the pillory, fully naked, a few of the less experienced girls begin to cry. "Hmph! I suppose you like this, don't you, pervert?" one of them insult you. You take one look at the young woman's admittedly beautiful body. "Eh. You're alright. Not too hard in the eyes," you mock. "What is that supposed to mean?!" Many people, a majority of them admittedly likely perverts, come to watch the public punishment. <<if $SelvilDevotionLevel gte 2>> <<set $ExploreSelvilSquare to 2>> <<endif>> <<elseif $ExploreSelvilSquare is 2>> Today, when you visit the town square, you find a few dozen naked criminals with guards standing to their left and right. "What is this, now?" you ask the mayor. "It's a new form of punishment," the mayor says. "We'll make them walk around town like this." You nod. The women are paraded around shamelessly. Some of them try to hide their breasts and genitals to little avail. Some, however, seem to take an entirely different approach. Brazenly and openly displaying their bodies, both nubile and chubby, a group of criminal women walk with confidence. "You're trying to shame us, right?" their leader confronts you with a grin. "Well, tough luck. We're not ashamed." As if to rub things in your nose, a few of the women take out scissors and small knives, and in the middle of the walk, shave off their pubic hairs. And yet a few more are jiggling their breasts. As the House's teachings spread, it seems that old values of modesty are starting to lose their previous strength. You tsk-ed when some of them lift their legs, proudly showing their pussies. You'll have to find new punishment methods next time. <<if $SelvilDevotionLevel gte 3>> <<set $ExploreSelvilSquare to 3>> <<endif>> <<elseif $ExploreSelvilSquare is 3>> Today you visit the town square. Selvil's 'corruption' has reached a point where public sex is acceptable. It applies to punishments as well. Prisoners were made to stay in cells near the square half-naked with a leather collar and serve in a sexual capacity. You participate in a particularly rough gangbang of a notorious Southlander pirate captain. You deliver a loud slap to her face, signalling the beginning of the gangbang of the fierce, defiant captain. You throw her to the ground and pull out your cock. Another man grabs her hair and shoves his cock inside her mouth. "Errgh!" the captain struggles to breathe. You penetrate her dry pussy without lubrication, making her scream. The other man cums quickly, his cum down the captain's throat. "This is inhumane!" the captain protests. "This is--this is barbaric!" "This is how we do things in Selvil," you say. "Play with fire and you'll be burned, bitch!" You unload your cum in her pussy. You watch as the others take their turns. By the time everyone's done, the captain is blathered with cum, her pussy and ass gaping. "Take her away," you say. <<endif>> <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 2>> <<if $SelvilDevotionPoints gte $SelvilDevotionPointsCap and $SelvilDevotionLevel isnot 3>> <<set $SelvilDevotionPoints to $SelvilDevotionPointsCap>> It seems that your efforts can only do so much. You should meet her in the Mahogany House to discuss your next step. <<endif>> Devotion points: $SelvilDevotionPoints Current cap: $SelvilDevotionPointsCap Current level of devotion: $SelvilDevotionLevel [[Return and rest|End day 2]]</tw-passagedata><tw-passagedata pid="411" name="Klatsch Library" tags="" position="4825,2300" size="100,100">The private library in Klatsch City Council is open to you. You browse the topics: ''Races of the World'' [[Succubi|Klatsch Library Topic][$KLT to "Succubus"]] [[Human|Klatsch Library Topic][$KLT to "Human"]] [[Elf|Klatsch Library Topic][$KLT to "Elf"]] [[Dwarf|Klatsch Library Topic][$KLT to "Dwarf"]] [[Drow|Klatsch Library Topic][$KLT to "Drow"]] [[Goblin|Klatsch Library Topic][$KLT to "Goblin"]] [[Orc|Klatsch Library Topic][$KLT to "Orc"]] [[Beastmen|Klatsch Library Topic][$KLT to "Beastmen"]] ''Notable Events of the Domain and the World'' Note: BPE refers to 'before peace era', and PE refers to 'peace era', with 0 PE being the end of the Great War. [[Defeat of Incubus King Salazar|Klatsch Library Topic][$KLT to "DefeatSalazar"]] [[Reform and Revolt|Klatsch Library Topic][$KLT to "ReformRevolt"]] [[Alliance|Klatsch Library Topic][$KLT to "Alliance"]] [[Great War Begins|Klatsch Library Topic][$KLT to "GWBegin"]] [[First Sylvan Campaign|Klatsch Library Topic][$KLT to "FSC"]] [[Attack on Domain and Cathay|Klatsch Library Topic][$KLT to "ADC"]] [[The Martyred Three Thousand|Klatsch Library Topic][$KLT to "TMTT"]] [[First Counteroffensive|Klatsch Library Topic][$KLT to "FC"]] [[Second Counteroffensive|Klatsch Library Topic][$KLT to "SC"]] [[Goblin War|Klatsch Library Topic][$KLT to "GW"]] [[Expulsions from the Forest|Klatsch Library Topic][$KLT to "Expulsion"]] [[Back|Klatsch City Council]] </tw-passagedata><tw-passagedata pid="412" name="Klatsch City Council Weapons Request" tags="" position="4900,2400" size="100,100"><<if ndef $KlatschWeapons>>You post an unofficial request for muskets and ammunition to Gretchen. She invites you to a secret meeting in her office, where she speaks candidly: "Alright, look. We've got very little cash right now," she says. "So if some, say, 6000 marks happen to be left behind by someone, we could ... forget about a small cache of old muskets numbering about 150 or so, and a few dozen old pistols, and the ammunition for them." "I see. I hope some 6000 marks happen to be left behind soon," you say, <<set $KlatschWeapons to 1>> <<elseif $KlatschWeapons is 2>> Gretchen flashes a light smile. An hour later, she forgets about a cache of weapons and ammo on her desk. You discreetly take it and leave. <<set $MusketWeapons to true>> <<endif>> [[Back|Klatsch City Council]]</tw-passagedata><tw-passagedata pid="413" name="Klatsch Library Topic" tags="" position="5000,2225" size="100,100"><<if $KLT is "Human">> An adult human is anywhere between 150 to 200 centimetres tall. Humans are known to be well-proportioned in terms of their body, as well as great endurance. Most humans live in the desert continent of Gurn or Southlands, and the vast continent known as the 'mainland' (both continents in the Otherworld). A few humans also live in Cathay, and in small nations elsewhere. In the Domain, humans form up a full quarter of the population. Humans are known to be good craftsmen and workers, able to withstand relatively extreme weather. Humanity's aptitude in magic is questionable, with a few very powerful mages; however humans do not have any innate magic. Humans live in villages and cities built by brick and stone, with an emphasis in trade and manufacturing. Humans reproduce through sex, with gestation period of 9 months. A human's lifespan is around 70 to 80 years. Young human males are known to obsess over penis length. Humans worship diverse gods. Most in the mainland worship the Light-King, and those in Gurn worship a pantheon of nature spirits. Cathayan humans practice ancestor-worship. <<elseif $KLT is "Succubus">> The succubi, or incubi, is around 160-190 centimetres tall. Succubi are often fairly busty, and are fast and strong but lacking endurance. The overwhelming majority of succubi live in the Domain. Succubi are renowned for their innate sexual magic. Succubi can substitute food for sex (and vice versa), but this is believed to be unhealthy. Hot weather is highly unpleasant for succubi; conversely they thrive in colder climates. Succubus cities tend to be large and sprawling with large brothel areas. Succubi mostly reproduce through sex, with gestation period of 6 months. A succubus' lifespan is around 90 years, with powerful succubi being able to bypass this and become immortal. Succubi can also impregnate themselves; in essence a succubi is both male and female. A few succubi worship a god of lust but most succubi are unbelievers. <<elseif $KLT is "Elf">> The elf is around 140-180 centimetres tall. Elves are known to be nimble and quick, with thin bodies. Their stamina is very good, and their eyesight is second to none. Most elves live in the Groves, of which there are seven major ones. A few live amongst humans, while ten percent of the Domain's population are elves. Elves possess an innate natural magic, and elven mages are known to be extremely strong. Elves eat very little, and are often vegetarian. Elves live in forests and tree-houses. They are largely unable to adapt to cold weather. Elves reproduce through sex, with gestation period of 18 months. Many fertility spells are created by both Domain mages and elven mages, which have helped cut the gestation period. Traditional elves are notoriously strict monogamists, to the point of preserving virginity until marriage. Elves have sharp ears (in all sense of the phrase), and thus are often derogatorily called 'knife-ear' by humans especially. In turn the elves have a word for humans: 'club-ear'. Elphina is the patron goddess of elves, and is worshipped by most elves. Besides her, there are numerous fey-lords such as Oberon and Titania. <<elseif $KLT is "Dwarf">> Dwarfs are short (that's where the name comes from), standing roughly 130-150 centimetres. They are slow but stout, and physically strong. They have very good endurance. Dwarfs live in underground cities. Due to their extreme secrecy, it is very difficult to discern the position of their cities. Dwarfs have little magic, and what few magical practitioners they have are called runesmiths. Dwarfs have a strong emphasis on blacksmithing and craftmanship. They prefer armor and dislike killing unless necessary. Dwarven gestation period is 36 months, and they have a low fertility rate. This makes the dwarfs highly suspectible to war and pestilence, as they cannot quickly recover their population. Fertility magic has proven largely useless. Bran is the patron god of dwarves, and is worshipped by most dwarves. <<elseif $KLT is "Drow">> The dark-skinned drow are said to be an offshoot of elves, and thus share many of their characteristics, except that drow females are much more well-endowed than their elven counterparts and that drow live far longer lives. Drow possess powerful 'dark magic', and are adept in necromancy, plague magic, withering magic, and such. They used to live in the forests, but after being expelled by Elphina, half of them now live in massive arks that double as cities. The other half migrated to the Domain. Unlike their prudish elven cousins, drow are known to be very sexually liberated. Drow females outnumber males ten to one; the result is that drow males are simultaneously at the top and at the bottom of drow society. On one hand, drow males are often not allowed to go out of their house, and not allowed to have jobs outside of housekeeping; on the other hand, the male's female family members are expected to provide for him, and to prioritize his well-being, as well as fulfil any wishes of his. Modern drow are notoriously atheistic, and sometimes even attack people of any faith. <<elseif $KLT is "Goblin">> Goblins are small pests, about as tall as a dwarf but much smaller in stature. Goblins are green-skinned and have sharp teeth and grey eyes. They live mostly in caves across all nations. Male goblins outnumber female goblins twenty to one. For this reason, goblins raid settlements for females of other races. Both female goblins and goblin prisoners are treated as breeding stock. Goblins are birthed in the form of slimy eggs. A female goblin takes only a few weeks to birth a batch of up to 10 goblins, although only three or four live past infancy. Goblins used to worship Amaratat. If you encounter a goblin cave, report to the nearest city council or person of authority immediately. <<elseif $KLT is "Orc">> Orcs are large, hulking humanoid with dark green skin color. They stand around two metres, and are often very muscular. They're easily identified by their tusks. Orcs used to live in the wastelands, but were driven out by Empyrean forces in the Great War. The few remaining orc clans stood their ground at the edge of the wastelands, surviving with what little resources they can gather. Most others have migrated to the Domain, where they make up around 1 percent of the population. They respect strength, both physical and magical. Orcish shamanism is considered inferior to modern magic, but has many flexible applications. Orc societies are led by a warchief and a shaman. Orc fertility largely mirror human fertility. <<elseif $KLT is "Beastmen">> Beastmen (also known as beast-kin), are very similar to humans, with the distinctive difference of 'fey mark'. The fey mark manifests in the form of an animal's body part, such as cat ears, wolf tails, sharp teeth, equine penis, bear fur, and so on. All beastmen have at least one fey mark, with most of them owning two. Some beastmen used to live alongside orcs in the wastelands, but were driven out by Empyrean forces in the Great War. Beastmen make up 70 percent of Cathay's population. Beastmen are more fertile than any other race save goblins to compensate for their rather small lifespan (around 50-60 years). Cathayan beastmen sages are very powerful, drawing power directly from the Empyrean. Aside from the sages and wizards, there exists many alchemists. Gunpowder and rockets are among the latter's creations. <<elseif $KLT is "DefeatSalazar">> A long period of famine, followed by a scandal when Incubus King Salazar forced the daughter of a powerful noble family to join his harem, finally led to a revolt in 829 BPE. Revolt began in the northern provinces, but soon all provinces bar the Capital raised arms. The revolt was largely led in secret by the current Incubus King Darryl, whose position at that time was court mage. Also notable was the goddess of lust, Jasmine, who was Incubus King Salazar's harem mistress. An army besieged Libidine, whose citizens eventually opened the gates. Incubus King Darryl slew his predecessor in combat, and was undisputedly crowned king of the Domain. <<elseif $KLT is "ReformRevolt">> In 827 BPE, newly crowned Incubus King Darryl declared many reforms, chief of which was giving non-succubus races equal rights to the succubi. This triggered the anger of traditional succubi. A revolt erupted in 825 BPE, centralized in the city of Sodom-Gomorrah, but was poorly organized and cut down without much issue. <<elseif $KLT is "Alliance">> In 92 BPE, after a series of strange tidings regarding movements of Abyssal Lords, representatives from the Domain, Cathay, the Elven Groves, and the Dwarven Kingdoms signed the Pact of the Shield; a mutual defense pact. The elves and dwarves also upheld an old alliance, 'the Pact of the Mountain and the Wood'. <<elseif $KLT is "GWBegin">> In 44 BPE, a messenger from the Abyssal Lords were sent to various factions, offering an alliance and then demanding submission if the offer was rejected. Amongst those who accepted were Amaratat, goddess of the goblins, and Hildegard, a northern ice goddess; Amaratat would later renege on the deal. Those who rejected, excluding the Pact, were the beast-kin and orcs of the wastelands, and most of the Northern Pantheon, as well as the city-states of Gurn. The 'wild-men' of the wastelands also rejected. Notably, the Lumia Confederation, a human state west of the elven forests, was neither offered an alliance nor threatened. The Abyssal Lords, commanded by the Primordial Abbys, began the war by attacking the wastelands with powerful blight magic in 39 BPE. They unleashed various demons and undead creatures. The Pact nations rapidly mobilized for war, but it was too late. The orcs and the beast-kin of the wastelands had been defeated in open battle, and were retreating. <<elseif $KLT is "FSC">> Abyssal forces followed their early victory with an invasion further west. Various wild-men tribes were not organized enough to fend them off, and were one by one defeated. The elven Angrisa Grove was attacked and taken in the First Battle of Angrisa Grove in 37 BPE. In the third month of 36 BPE, elven reinforcements arrived in the frontier, supported by an army deployed by Incubus King Darryl. They retook Angrisa Grove after two weeks of bloody siege. Widespread use of blight magic largely stopped when Abyssal Lord Markov, who commanded such magic, was defeated and killed by Grand Sage Xian of Cathay. In the ninth month of 36 BPE, an Abyssal counterattack saw elven and Domain forces pushed out again of Angrisa Grove. All elven forces retreated behind the river Bryne, and Domain forces were pulled back to the homeland. <<elseif $KLT is "ADC">> By 34 BPE, the Cathayans had assembled a fleet of 150 war-junks on their western coast and were prepared to fight. Abyssal forces launched a surprise attack from the northern, southern, and eastern directions. Powerful stronghold cities Anyu, Changrong, and Peiyi rapidly fell. The capital Baixin was besieged. This effectively neutralized Cathay in the western front, although a significant amount of the enemy's resources were tied in this front as Cathayan grand sages proved a match for the Abyssal Lords. In 32 BPE, a similar attack was made on the Domain. Its southern territories fell to abyssal forces, prompting the full mobilization of the Domain's army. In this manner, the Domain was also effectively neutralized. <<elseif $KLT is "TMTT">> The western front bogs down into brutal static warfare, with multiple elven groves and dwarf cities constantly changing hands. At this critical moment, the Lumia Confederation attacked from the west, burning Tarrosa Grove to the ground and taking three thousand elves as slaves (the titular 'Martyred Three Thousand'). This prompted a small retaliatory raid, but the elves and dwarfs were too few. Around 30 BPE, the city-states of Gurn fell after ten years of fighting. Sensing that the elves and dwarfs were on the brink of defeat, the Abyssal Lords drew forces from the collapsed southern front and the Domain front. There was pressure from the Pact nations for the Domain to send aid. Incubus King Darryl was drawing up plans for an offensive, but it had to be accelerated. The Winter Offensive of 26 BPE saw the Abyssal forces losing their entire foothold in the Domain. The goddess Hildegard and her valkryies were captured in battle. In panic, Abyssal forces shifted to hold off the Domain. A move that proved decisive. <<elseif $KLT is "FC">> The shifting of Abyssal forces led to a general counteroffensive. The dwarfs cleansed their tunnels and cities whilst the elves retook Angrisa Grove in the Fourth Battle of Angrisa Grove. Cathayan forces reclaimed their fortresses and pushed Abyssal forces to the coast. Ultimately, everything failed for the Abyss. Not only were their gains erased, the attack on the Domain was also stumped. Abyssal forces retreated to the wastelands, preparing to attack again. <<elseif $KLT is "SC">> In 12 BPE, after fourteen years of preparation, Pact forces crossed the wastelands from five directions. The Cathayan Fleet landed on the eastern coast; the Domain's forces attacked from the northwest; the elves and the dwarfs from the west; and a diversionary elven army from the southwest. Twelve years of brutal combat later, in 0 BPE, the Primordial Abyss was sealed. Countless have fallen, but the war ended. <<elseif $KLT is "GW">> In 59 PE, a group of goblins managed to sneak into the Domain and wrecked havoc with suspiciously advanced technology. This prompted retaliation, in the form of an expeditionary force sent to the mainland. The Lumia Confederation collapsed under constant attacks by goblins led by Amaratat, who hadn't intended for goblins to invade the Domain. Her peace offer rejected, Amaratat warred against both the remnants of the Confederation and the Incubus King. She was defeated in 62 PE and enslaved. <<elseif $KLT is "Expulsion">> The elven goddess Elphina has expulsed large numbers of her people twice. In 177 PE, a brief civil war erupted between the elves and the drow; the former accused the latter of using dark magic to arm the forest. The former outnumbered the latter more than ten to one, and as a result the elves won a quick victory. Elphina interfered in the war, offering the drow the choice of exile or death. This led the drow to have extreme bitterness towards the elves. Incubus King Darryl offered an olive branch to the exiled drow and a new home in the Domain. Around half of them accepted. To this day, drow drider cavalry are renowned as the most formidable and loyal cavalry in the army. In 448 PE, another civil war erupted, this time between the faction led by fey-lords Titania and Oberon and the faction led by Maeve, the war goddess. The Titania-Oberon axis refused 'new, foreign magical things' that Maeve was introducing to the elves. Recognising the odds against her, Maeve accepted voluntary exile with her followers, eventually pledging loyalty to Incubus King Darryl and becoming head of the Domain's army. These two expulsions are thought to greatly weaken the Groves' strength. <<endif>> [[Back|Klatsch Library]]</tw-passagedata><tw-passagedata pid="414" name="Thalia Hunt" tags="" position="2575,5675" size="100,100">"Recently there has been a particularly cruel pirate captain roaming the seas," the mayor says. "Can you handle it?" "I can give it a shot, at least," you say. "Can I get some clues?" "The ship is a regular pirate ship, with a large scorpion painted on its hull. Its captain is called Thalia the Scorpion." <<if $ThaliaGangbang is true or $ThaliaImprisoned is true>> Thalia the Scorpion! You still remember her quite 'fondly'. Did you not send her to the local baron? //"She must have escaped,"// you mutter to yourself. <<else>> You shrug. "Alright then. I'll go hunt for her." <<endif>> <<set $ThaliaHunt to 1>> [[Head to the harbor|Selvil Pirates]]</tw-passagedata><tw-passagedata pid="415" name="Meet Thalia Ship" tags="" position="1925,5475" size="100,100">After some time, you finally locate the ship with a scorpion painted on its hull. You close in to engage. [[Fight!|Thalia Ship]]</tw-passagedata><tw-passagedata pid="416" name="Thalia Ship" tags="" position="1775,5325" size="100,100"><<nobr>> <<set _temphp to 970>> <<set _tempattack to 130>> <<set _tempspeed to random(55,65)>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Thalia ship", maxHP: _temphp, HP: _temphp, maxMP: 10, MP: 10, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Ship name: <<print $ship.name>> HP: <<print $ship.HP>> MP: <<print $ship.MP>> Attack: <<print $ship.attack>> Speed: <<print $ship.speed>> Ship name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> The scorpion ship attacks! <<set $bossfight to true>> [[Understood|Speed Check 3]]</tw-passagedata><tw-passagedata pid="417" name="Thalia ship loot" tags="" position="1225,6025" size="100,100">Once you bring them to Selvil, the guards escort them to prison. You confiscate a chest of coins and supplies. You visit them a few hours later, intending to speak to Thalia. "Hey, man. I'm Wilhelm, Thalia's second in command." A man of eastern Walshemian origins stands up in his cell. "Can I talk?" "You've been talking so far," you say. "But sure. What is it?" "Look, me and my men are just amateur mercenaries, really. We used to be farmers but our harvests failed and we had to find money for our families. We're not pirates or bandits." "Questionable. But go on." "Can't we make a deal here?" Wilhelm asks. "My men and I will fight for you for food and shelter, and some coins to send to our family, you free us from here." "Hmm." You try to discern the build of Wilhelm and his men. They seem like relatively simple folk. "Alright. Take the coins from your ship and send them to your family. I expect you in Dornburg." "Dornburg? That's quite far. But we have a deal." You briefly shake hands with Wilhelm. You hand over the chest of coins and supplies, and off they go. You head on to Thalia's cell. <<set $WilhelmArmy to true>> <<if $ThaliaGangbang is true or $ThaliaImprisoned is true>> "You!" Thalia stands up. "Nice to see you again, Thalia." "... what do you want?" The flame in Thalia's eyes suddenly recedes. It's as if despair has overtaken her. "I want to recruit you for my army." "Let me guess. Will it come with a side dish of rape too? You want me to entertain your soldiers?" "No," you say, matter-of-factly. "I see you hold a grudge against me. I can understand that. But if the roles had been reversed, I doubt you had pretty things in store for me either." "Fine. Fair enough," Thalia says. "So. I'm a beaten woman. Is that really what you want?" "I respect your strength, Thalia," you say. "Haa. Alright then," Thalia says. "I'm not happy with it. But I don't see a better alternative." You bring Thalia to Dornburg through your teleportation stone. <<else>> Thalia stares intently at you. "You're quite young. I'm surprised," she says finally. "Who are you?" "I'm $name." "Some bounty hunter, then?" Thalia's face betrays her curiosity. "I happen to be the Imperial Knight in charge of Selvil." "Oh? This backwater has such a competent lord?" Thalia muses. "Well, this conversation has been interesting. But what do you intend to do with me?" "I want to recruit you for my army." "Your //army//? A lordling like you?" "I received a royal permission to do so." "Normally I'd reject it," Thalia says. "But you've been very interesting. I'm in." You bring Thalia to Dornburg through your teleportation stone. <<endif>> <<set $ThaliaRecruited to true>> <<set $CaptainRecruited to true>> [[Return to Dornburg|New Camp]]</tw-passagedata><tw-passagedata pid="418" name="Explore Selvil: Mahogany House" tags="" position="3075,6325" size="100,100"><<if ndef $SelvilExploreHouse>> Today you visit the Mahogany House. Selene is listening intently to the woes of a married couple. When you enter, Selene gives you a deferrential, submissive nod, but gestures for you to not interrupt. "I think we should split," Selene says. "Mr. Sensenbrink, if you could go to my office on the second floor?" The husband of the couple nods and heads upstairs. "What's the issue?" you whisper to Selene. "Looks like both of them have been sexually frustrated with one another," Selene whispers back before going upstairs. You smile at Mrs. Sensenbrink. She seems a tired woman, in her late thirties or early forties mayhaps. "Good day, Mrs. Sensenbrink." "Good day," she says with a weak smile. She's fairly plain; you discern that she's a fisherman's wife. "I'm Janice. And you are?" "$name." Without even waiting for your prompt, Mrs. Sensenbrink launches a tirade about her life. She feels abandoned and alone, since her husband is a fisherman and often doesn't return home for days if not weeks. For now you don't have a solution for her, but she seems to appreciate the avenue for venting. After half an hour, she shakes your hand and thanks you. <<set $SelvilExploreHouse to 1>> <<elseif $SelvilExploreHouse is 1>> Today, you and Selene are visited by the Sensenbrinks again. After a day of open but fruitless discussion, the two of them bid you farewell. <<if $SelvilDevotionLevel gte 1>> <<set $SelvilExploreHouse to 2>> <<endif>> <<elseif $SelvilExploreHouse is 2>> Today the Sensenbrinks visit you once more. As usual, the husband goes with Selene and the wife goes with you. It seems that now she's more willing to share the details of her married life. "We have a son. He's married last year to a lass from Dornburg and they settle there. Honestly, it's gotten quite lonely." "Do you feel like you need some kind of new spark in your marriage?" you suggest. "Yes! I think that's it," she says. "Ronald and I married just before my nineteenth birthday. It has been twenty years. Perhaps we've gotten too monotonous." "In that case, you should make efforts to break that," you say. "For example, maybe the two of you can take a honeymoon. It doesn't have to be fancy. Just a walk near the beaches or something." "Hmm. That sounds like a good idea. Thank you, $name." <<set $SelvilExploreHouse to 3>> <<elseif $SelvilExploreHouse is 3>> Today you are visited by the Sensenbrinks again. It seems that their relationship is somewhat improving. "My husband and I are talking about new things we can do, but we're not quite ready yet." <<if $SelvilDevotionLevel gte 2>> <<set $SelvilExploreHouse to 4>> <<endif>> <<elseif $SelvilExploreHouse is 4>> Today you are visited by the Sensenbrinks again. They request both you and Selene attend to them. "I think we figured it out," Janice says. "What's missing from our marriage is sex." Selene tilts her head. "But we tried it, and some kind of spark was missing," Janice continues. "I'm wondering if there's something you can do about it?" You smile faintly. "What about swapping?" you suggest. "Maybe a new partner is what you need." Janice and her husband look at one another for some time. "I think we can give it a shot," she says. "But maybe not all the way?" "Sure." While Selene goes with Mr Sensenbrink, you take Janice to your personal room in the House. Janice blushes when you take off your clothes, proudly showing off your member. "Ooh ...." "Lay down on the bed." You take off Janice's skirt and panties, revealing bountiful legs and a hairy clam. You smirk as you crawl forward. Your tongue extends, soothing Janice's folds. A slightly sour taste fills your mouth. "Ooh!" Janice moans out. "He's never done this for me before!" Your tongue digs deep inside the married woman's pussy. But just as you find her pleasure spot, Janice takes hold of your head and pushes it forward. "Mmh!" You find your breath blocked by Janice's puffy clam. Your tongue explores even deeper, circling around the flesh tunnel. "A--ahh!" Janice shudders as she orgasms. You stand up from bed, Janice still panting. You hover your cock above her. Janice's tongue comes out, kissing the tip of your cock. Her hand slowly strokes your shaft before you push your body a bit closer to hers. Her mouth opens widely. White ropes of cum shoot out into Janice's open mouth. She swallows it instantly. A few minutes later, she has worn her clothes. "Thanks, $name," Janice says. "I'm sure my husband and I would be back." <<set $SelvilExploreHouse to 5>> <<if $SelvilDevotionLevel gte 3>> <<set $SelvilExploreHouse to 6>> <<endif>> <<elseif $SelvilExploreHouse is 5>> Today, Janice and her husband returns. You invite Janice to your chambers as usual. Janice blushes when you take off your clothes, proudly showing off your member. "It's not your first time seeing this, you know," you tease. "I know, but it still looks impressive now." "Lay down on the bed." You take off Janice's skirt and panties, revealing bountiful legs and a hairy clam. You smirk as you crawl forward. Your tongue extends, soothing Janice's folds. A slightly sour taste fills your mouth. "Ooh!" Janice moans out. "You're so good at this!" Your tongue digs deep inside the married woman's pussy. But just as you find her pleasure spot, Janice takes hold of your head and pushes it forward. "Mmh!" You find your breath blocked by Janice's puffy clam. Your tongue explores even deeper, circling around the flesh tunnel. "A--ahh!" Janice shudders as she orgasms. You stand up from bed, Janice still panting. You hover your cock above her. Janice's tongue comes out, kissing the tip of your cock. Her hand slowly strokes your shaft before you push your body a bit closer to hers. Her mouth opens widely. White ropes of cum shoot out into Janice's open mouth. She swallows it instantly. A few minutes later, she has worn her clothes. "Thanks, $name," Janice says. "I'm sure my husband and I would be back." <<if $SelvilDevotionLevel gte 3>> <<set $SelvilExploreHouse to 6>> <<endif>> <<elseif $SelvilExploreHouse is 6>> It seems that Selene and the Sensenbrinks are exchanging letters on a near daily basis. As the House now dominates Selvil's religious landscape, the couple now feels confident enough to give Selene a bold proposal: a foursome in the central hall of the House. "What do you think, Master?" Selene asks meekly. "I don't see the harm," you say. The two of you go out to meet the Sensenbrinks in the hall. All four of you quickly lose your clothes. You hold Janice in your embrace, lightly cupping her breasts. Your naughty fingers quickly find their way into Janice's moist pussy. The four of you don't waste any more time. Selene, beside you, has begun riding Ronald's dick like the slut she is. You gently lift up Janice's left leg, revealing her hairy clam. "Come in, $name," Janice whispers. "I want to feel you inside me." With a thrust, you enter Janice's clam. Janice's tenseness melts as she grins. You don't need to wait; she's as wet as a river down there. Your body heat join into one as you passionately fuck Janice. "You look ... really young," Janice whispers as she looks at you in the eye. "I can't believe I'm fucking someone young enough to be my son. Am I too old for you, $name?" You answer by fucking her harder. "Is this enough of an answer?" you ask with a smile. "Yesss!" Janice moans as she climaxes. "Cum for me, $name!" You pull out at the last moment, translucent sperm jolting out of your tip. Janice's thighs glisten with it. You glance sideways; Selene and Roland were done some time ago. Selene wipes off cum from her cheeks. "Glad we could help!" you say as the couple bids their goodbye. <<endif>> <<set $SelvilDevotionPoints to $SelvilDevotionPoints + 2>> <<if $SelvilDevotionPoints gte $SelvilDevotionPointsCap and $SelvilDevotionLevel isnot 3>> <<set $SelvilDevotionPoints to $SelvilDevotionPointsCap>> It seems that your efforts can only do so much. You should meet her in the Mahogany House to discuss your next step. <<endif>> Devotion points: $SelvilDevotionPoints Current cap: $SelvilDevotionPointsCap Current level of devotion: $SelvilDevotionLevel [[Return and rest|End day 2]]</tw-passagedata><tw-passagedata pid="419" name="Meet Luo" tags="" position="3775,3300" size="100,100"><<nobr>> <<set _temphp to 250000>> <<set _tempattack to 1800>> <<set _tempspeed to 900>> <<set _tempcoins to random(15,20)>> <<set _tempsupplies to random(3,7)>> <<set $enemy = { name: "Luo", maxHP: _temphp, HP: _temphp, maxMP: 10000, MP: 10000, attack: _tempattack, speed: _tempspeed, coins: _tempcoins, supplies: _tempsupplies, }>> <</nobr>> Name: <<print $player.name>> HP: <<print $player.HP>> MP: <<print $player.MP>> Attack: <<print $player.attack>> Speed: <<print $player.speed>> Name: <<print $enemy.name>> HP: <<print $enemy.HP>> MP: <<print $enemy.MP>> Attack: <<print $enemy.attack>> Speed: <<print $enemy.speed>> Grand Sage Luo prepares to fight. "You ought to think better," he says softly as he begins to move. The air is choked with his power. "Misa! Get us out of here!" Archmage Zectris shouts. "I'm trying, damn it!" <<set $bossfight to true>> [[Understood|Speed Check 2]]</tw-passagedata><tw-passagedata pid="420" name="Luo's victory" tags="" position="3925,3175" size="100,100">"What power ...." The strongest mages of the Guild prove to be children in comparison to Grand Sage Luo's power. You stand up defiantly. "I don't want to stir up trouble with the Incubus King. We have a close relationship. Step aside." "I can't let you kill them," you say. "I have been tasked with gaining the Mage Guild's assistance for the King." "Devotion to duty. Very respectable. I can understand that; you see I'm not only a Grand Sage, but one of the Pentacle. I have a duty to defend Cathay." Grand Sage Luo smiles, and his posture relaxes. He seems to acknowledge your resolve. "There's a power within you," he says, though the tone he takes is somewhat speculative. "Created by your lust and anger, strengthened by the spirit of malevolence, and compounded by the Incubus King's magic. It is a very interesting magic. I'll have to consult my peers. They might know more." "I used it in Dornburg!" you say. "A grey beam of magic." "Indeed. I heard it from Xian," he says. "She theorizes that it's some kind of 'primordial' magic, some sort of pure magic if you will. I'm skeptical, but you're too interesting to kill nonetheless. How about this: if you show me that magic, I'll spare your companions." "I ... I can't," you admit. "To this day I don't know how to tap into it willingly." "What a shame then. I'll have to bring your companions to prison. The Grand Sages will decide their fate, for having trespassed our territory. One of my subordinates will take you home." You close your eyes. Just what have you been fighting for this whole time? Your revenge is complete. Maybe you should abandon everything. Go back to your old life. Live and die in obscurity. But you have seen them. You have seen the evil things that lurk outside. You have seen the darklings, the undead, the minions of the Abyssal Lords. You will be strong. For the sake of your friends. For the sake of your companions. For the sake of the world. And for the sake of your own. ''//DETERMINATION!//'' "Heah!" A swelling power bursts from yourself, fuelled by your determination. A determination to be strong. You find it difficult to direct it. You send it as a beam of pure destruction at Grand Sage Luo, who, with a smile, taps his feet lightly and raises a formidable iron wall, stopping the beam. He claps at you as you fall to your knees from exhaustion. "Impressive! You made me use more power than the entire fight did!" Grand Sage Luo said. "As promised, I'll let all of you go. After medical treatment, of course." All of you are brought inside the steel fortress, and then to the hospital inside it. A gentle healing energy swirls invisibly in the hospital, patching up your wounds. Grand Sage Luo watches you intently, looking like he's thinking very hard. "Hey, Luo!" a female voice rings through the halls before its owner opens the door in a very haphazard manner. It's who else but Xian. "I got here as soon as I got the message. But--" Xian takes a look around. "Looks like it's nobody serious." "Indeed," Grand Sage Luo smiles. "Can we talk outside?" "Sure." A few hours later, the mages from the Arcane Guild wake up. You explain the circumstances. Another few hours later, you're transported back to the Guild's headquarters. "I can't believe it," Archmage Misa remarks, throwing her unremarkable weight onto a couch. "I didn't think that sort of power is achievable. It's unfortunate we got nothing." "Not quite nothing." Archmage Zectris proudly holds up a grimoire. "Swiped it off when they were escorting us out," he says. "Now ... it's time to study. And, $name ... thank you. The Guild owes you. We will be hearing from the Crown soon, I'm sure." [[Return to camp|End day 2]] <<set $ArcaneGuildQuest to 4>> <<set $player.HP to $player.maxHP>> <<set $player.MP to $player.maxMP>> <<set $player.attack to $player.maxattack>> </tw-passagedata><tw-passagedata pid="421" name="Thalestris Cooking Quest" tags="" position="2775,3600" size="100,100"><<if $ThalestrisCookingQuest is 1>> "Hey, Thalestris, mind if I bother you with something?" "Not at all. What is it?" "Can you help Dahlia cook?" Thalestris tilts her head. "Well, I //can// cook; and I do cook and eat my own meals," she says. "But I don't know if you or the others will like it. Amazon cooking is very natural; cooked meats and wild vegetables. We don't use salt or sugar." "Give it a try, at least," you say. "Dahlia's swamped with feeding all of us. What if you make a meal and get Dahlia to try it?" "Sure," Thalestris says. "Come to me tomorrow, I'll cook for three: myself, you, and Dahlia." "Thanks, Thalestris." <<set $ThalestrisCookingQuest to 2>> [[Rest|End day 2]] <<elseif $ThalestrisCookingQuest is 2>> Thalestris is grilling some meat and rosemary in the open. "Hey, $name!" she calls out. She puts out some cooked meat on a wooden plank. "Here, take these to Dahlia." "Thanks, Thalestris." You bring the plate to the kitchen, where Dahlia is cooking stew as usual. She smiles when she sees you coming in. "Hi, $name. Is that Thalestris' food?" "It is," you say. Dahlia stops stirring the stew for a while as she takes a skewer of meat from the makeshift plate. "Hmm." Dahlia chews the meat carefully. "I can taste the rosemary. It's not a flavour I use much. The meat's well-cooked, if a little tough. Overall it's not bad, but it's lacking a lot of flavor. It's too bland." You try Thalestris' cooking as well. "I agree," you say. "It needs something savory," Dahlia says. "Salt or stock will do--" "I've got something savory down here," you say casually. "//Oh, really?//" Dahlia smirks. You lose your trousers. "Mmm." Dahlia puts down the plank. Her hands envelop the bulk of your shaft, her tongue skilfully cleaning the tip. The experienced whore takes on your cock almost effortlessly, her mouth widely open. You caress her rough, blonde hair as your hips swing forth and back, treating Dahlia's throat like a fuckhole. Her wet tongue licks the shaft from all directions, bringing you to a quick orgasm. Dahlia smirks lustfully as the meat skewers are bathed in white sauce. She eats it without complain. "It certainly helps!" she says, laughing. "Tell Thalestris to come ''to the kitchen'' tomorrow. I think we can teach one another a lot." <<set $ThalestrisCookingQuest to 3>> [[Rest|End day 2]] <<endif>></tw-passagedata><tw-passagedata pid="422" name="Kitchen" tags="" position="1475,2425" size="100,100"><<if $ThalestrisCookingQuest is 3>> "So you need to put salt in before--" When you enter the kitchen, Dahlia and Thalestris are cooking together. "Hello, ladies. Working together?" "Yeah," Thalestris says. She still only wears a loincloth, so her large breasts sway openly. "Can you call Ella and Emma, $name? The food's almost done." "Sure." You call the twins from their resting chamber. Wearing very little clothing, they stroll unto the kitchen. The five of you share a hearty meal: grilled meats, vegetable soup, and freshly baked bread. "Wow, this is //really// good," Ella says. "I agree," Emma follows. The meal is certainly a notch better than what Dahlia usually cooks. The fresh flavors of Thalestris' herbs mix very well with Dahlia's liberal use of spices. Midway through the meal, however, you just can't help but be fixated at Thalestris' tits. After the meal is over, you place your hand on Thalestris' broad shoulders. The amazon grins. "You look like an animal in heat, $name." You silently lunge in for a deep kiss with the amazon. You slowly step behind her. Thalestris grips the table tightly, ready for a pounding. Her brown snatch is about as wet as it can be. Your cock easily thrusts into Thalestris' muscular pussy. "Hmmh ... you have to finish fast, $name," she says, moaning lightly. "Dahlia might--hngg--come back ...." "I'm fine with that," you whisper softly, your hands teasing Thalestris' nipples. "You're so wet, Thalestris." The smell of earth and sweat overwhelms your senses, and Thalestris' warm pussy hugging your cock tightly sends what little remains of your modesty to the chasm of depravity. You ejaculate deep inside her, drowning her womb in semen. "Ehem!" Dahlia clears her throat. She has been watching from afar. "Come on, not in the kitchen." "Sorry, Dahlia," Thalestris says with a grin. "But you know how horny our mutual lover is." "Don't worry Dahlia," you follow up. "You'll get your share too." "Jeez ...." <<set $ThalestrisCookingQuest to 4>> [[Rest|End day 2]] <<elseif $ThalestrisCookingQuest is 4>> <<set _i to random(1,3)>> <<if _i is 1>> Today, Dahlia is cooking some stew. "Hey there, Dahlia," you greet her. "Hey, $name," Dahlia says. "The food's not ready yet." "I'm not here for the food, Dahlia." The ex-prostitute smiles. "$name, you rascal ...." Having said that, Dahlia takes down her skirt and panties, allowing you full access to her fat ass. You whip out your cock. Dahlia quietly moans as your cock slips in her ready vagina. Her legs tremble a bit as she lurches forward so that you can begin pumping her. "I told you not in the kitchen," Dahlia complains; all the while she shoves her body backwards, accepting your cock in her snatch. "But I'll make the exception once." "Oh, really?" you whisper seductively on Dahlia's ear as you penetrate her experienced hole. "This once, huh?" Small vibrations spread in Dahlia's body as you fuck her. Dahlia clenches her pussy tightly, soft moans leaving her lips. You let out your plentiful cum inside. "Looking forward to it next time, Dahlia," you whisper. "Mmh ... okay ...." <<elseif _i is 2>> Today, Thalestris is in charge of cooking. "Hey there, $name," she calls out. "The meal's not done yet." "But there's something else I want from you, Thalestris." The topless amazon smiles and finishes preparing the grilled chicken, putting it on the table. "You horndog." You silently lunge in for a deep kiss with the amazon. You slowly step behind her. Thalestris grips the table tightly, ready for a pounding. Her brown snatch is about as wet as it can be. Your cock easily thrusts into Thalestris' muscular pussy. "Hmmh ... you have to finish fast, $name," she says, moaning lightly. "Dahlia might--hngg--come back ...." "I'm fine with that," you whisper softly, your hands teasing Thalestris' nipples. "You're so wet, Thalestris." The smell of earth and sweat overwhelms your senses, and Thalestris' warm pussy hugging your cock tightly sends what little remains of your modesty to the chasm of depravity. You ejaculate deep inside her, drowning her womb in semen. <<elseif _i is 3>> Today, both Dahlia and Thalestris are cooking together. You spend very little time groping their thick asses. "It's quite a shame that our man of the house is such a horndog, don't you think, Dahlia?" Thalestris snarks. "Indeed," Dahlia says with a smile. "But both of your pussies are so wet already," you say as your fingers play with their snatches. "You can't resist me, can you?" As soon as they're finished with today's food, both women turn their attention to you. "You're right, $name," Dahlia says, kissing your neck. "We really can't resist you." Thalestris takes off your trousers, giving your dick the few pumps it needs to grow to full length. "Take me, $name," Thalestris says. "Just like you did in the arena." You grab Thalestris' left leg, raising it up. Your hips swing upwards, penetrating Thalestris' muscular cunt in one shove. "Oooh!" Thalestris moans out in pleasure. "Fuck me hard, $name!" "You're as tight as ever, Thalestris!" you compliment as you bring the amazon to orgasm with a pinch on her clit. "Can you lick my pussy, $name?" Dahlia requests. She climbs atop the table, opening her crotch widely. You take your hot shaft out of Thalestris' pussy. You kneel, grabbing Dahlia's thick thighs. You dig into a decadent meal of whore pussy. Thalestris sits beside you, her hand pumping your cock. "I--I am--!" Dahlia squirts, juices splashing all over your face. At the same time Thalestris brings you to orgasm, your seed splurting out of your cock into Thalestris' hand. "What a shame, all that healthy seed not going into a womb," Thalestris rues. "Let's do this again some time!" you say as the three of you dress up. There's no objection from Dahlia and Thalestris, only nods and lustful smiles. <<endif>> [[Back|New Camp]] <<endif>></tw-passagedata></tw-storydata> <script id="script-sugarcube" type="text/javascript"> /*! SugarCube JS */ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Object.defineProperty(Constructor,"prototype",{writable:!1}),Constructor}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}var errorPrologRegExp=/^(?:(?:uncaught\s+(?:exception:\s+)?)?\w*(?:error|exception|_err):\s+)+/i,Alert=function(){function mesg(where,error,isFatal,isUncaught){var mesg="Error",nice="A".concat(isFatal?" fatal":"n"," error has occurred.");nice+=isFatal?" Aborting.":" You may be able to continue, but some parts may not work properly.";var isObject=null!==error&&"object"===_typeof(error),what=(isObject&&"message"in error?String(error.message).replace(errorPrologRegExp,""):String(error)).trim()||"unknown error";null!=where&&(mesg+=" [".concat(where,"]")),mesg+=": ".concat(what,"."),isObject&&"stack"in error&&(mesg+="\n\nStack Trace:\n".concat(error.stack)),mesg&&(nice+="\n\n".concat(mesg)),isUncaught||console[isFatal?"error":"warn"](mesg),window.alert(nice)}var origOnError;return origOnError=window.onerror,window.onerror=function(what,source,lineNum,colNum,error){"complete"===document.readyState?mesg(null,null!=error?error:what,!1,!0):(mesg(null,null!=error?error:what,!0,!0),window.onerror=origOnError,"function"==typeof window.onerror&&window.onerror.apply(this,arguments))},Object.freeze(Object.defineProperties({},{error:{value:function(where,error){mesg(where,error)}},fatal:{value:function(where,error){mesg(where,error,!0)}}}))}(),Patterns=(wsMap=new Map([[" ","\\u0020"],["\f","\\f"],["\n","\\n"],["\r","\\r"],["\t","\\t"],["\v","\\v"],[" ","\\u00a0"],[" ","\\u1680"],["","\\u180e"],[" ","\\u2000"],[" ","\\u2001"],[" ","\\u2002"],[" ","\\u2003"],[" ","\\u2004"],[" ","\\u2005"],[" ","\\u2006"],[" ","\\u2007"],[" ","\\u2008"],[" ","\\u2009"],[" ","\\u200a"],["\u2028","\\u2028"],["\u2029","\\u2029"],[" ","\\u202f"],[" ","\\u205f"],[" ","\\u3000"],["\ufeff","\\ufeff"]]),wsRe=/^\s$/,missing="",wsMap.forEach((function(pat,char){wsRe.test(char)||(missing+=pat)})),space=missing?"[\\s".concat(missing,"]"):"\\s",spaceNoTerminator="[\\u0020\\f\\t\\v\\u00a0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]",notSpace="\\s"===space?"\\S":space.replace(/^\[/,"[^"),anyChar="(?:.|".concat("[\\n\\r\\u2028\\u2029]",")"),anyLetter="[0-9A-Z_a-z\\-\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]",anyLetterStrict=anyLetter.replace("\\-",""),identifier="".concat("[$A-Z_a-z]").concat("[$0-9A-Z_a-z]","*"),variable="[$_]"+identifier,htmlTagName="[A-Za-z](?:".concat(cENChar="(?:[\\x2D.0-9A-Z_a-z\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF])","*-").concat(cENChar,"*|[0-9A-Za-z]*)"),twStyle="(".concat(anyLetter,"+)\\(([^\\)\\|\\n]+)\\):"),cssStyle="".concat(spaceNoTerminator,"*(").concat(anyLetter,"+)").concat(spaceNoTerminator,"*:([^;\\|\\n]+);"),idOrClass="".concat(spaceNoTerminator,"*((?:").concat("[#.]").concat(anyLetter,"+").concat(spaceNoTerminator,"*)+);"),inlineCss="".concat(twStyle,"|").concat(cssStyle,"|").concat(idOrClass),Object.freeze({space:space,spaceNoTerminator:spaceNoTerminator,lineTerminator:"[\\n\\r\\u2028\\u2029]",notSpace:notSpace,anyChar:anyChar,anyLetter:anyLetter,anyLetterStrict:anyLetterStrict,identifierFirstChar:"[$A-Z_a-z]",identifierNextChar:"[$0-9A-Z_a-z]",identifier:identifier,variableSigil:"[$_]",variable:variable,macroName:"[A-Za-z][\\w-]*|[=-]",templateName:"[A-Za-z][\\w-]*",htmlTagName:htmlTagName,cssIdOrClassSigil:"[#.]",cssImage:"\\[[<>]?[Ii][Mm][Gg]\\[(?:\\s|\\S)*?\\]\\]+",inlineCss:inlineCss,url:"(?:file|https?|mailto|ftp|javascript|irc|news|data):[^\\s'\"]+"})),wsMap,wsRe,missing,cENChar,twStyle,cssStyle,idOrClass,space,spaceNoTerminator,notSpace,anyChar,anyLetter,anyLetterStrict,identifier,variable,htmlTagName,inlineCss;!function(){var startWSRe,endWSRe,_trimString=(startWSRe=new RegExp("^".concat(Patterns.space).concat(Patterns.space,"*")),endWSRe=new RegExp("".concat(Patterns.space).concat(Patterns.space,"*$")),function(str,where){var val=String(str);if(!val)return val;switch(where){case"start":return startWSRe.test(val)?val.replace(startWSRe,""):val;case"end":return endWSRe.test(val)?val.replace(endWSRe,""):val;default:throw new Error('_trimString called with incorrect where parameter value: "'.concat(where,'"'))}});function _createPadString(length,padding){var targetLength=Number.parseInt(length,10)||0;if(targetLength<1)return"";var padString=void 0===padding?"":String(padding);for(""===padString&&(padString=" ");padString.length<targetLength;){var curPadLength=padString.length,remainingLength=targetLength-curPadLength;padString+=curPadLength>remainingLength?padString.slice(0,remainingLength):padString}return padString.length>targetLength&&(padString=padString.slice(0,targetLength)),padString}Array.prototype.flat||Object.defineProperty(Array.prototype,"flat",{configurable:!0,writable:!0,value:function flat(){if(null==this)throw new TypeError("Array.prototype.flat called on null or undefined");var depth=0===arguments.length?1:Number(arguments[0])||0;return depth<1?Array.prototype.slice.call(this):Array.prototype.reduce.call(this,(function(acc,cur){return cur instanceof Array?acc.push.apply(acc,_toConsumableArray(flat.call(cur,depth-1))):acc.push(cur),acc}),[])}}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,"flatMap",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.flatMap called on null or undefined");return Array.prototype.map.apply(this,arguments).flat()}}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.includes called on null or undefined");if(0===arguments.length)return!1;var length=this.length>>>0;if(0===length)return!1;var needle=arguments[0],i=Number(arguments[1])||0;for(i<0&&(i=Math.max(0,length+i));i<length;++i){var value=this[i];if(value===needle||value!=value&&needle!=needle)return!0}return!1}}),Object.entries||Object.defineProperty(Object,"entries",{configurable:!0,writable:!0,value:function(obj){if("object"!==_typeof(obj)||null===obj)throw new TypeError("Object.entries object parameter must be an object");return Object.keys(obj).map((function(key){return[key,obj[key]]}))}}),Object.fromEntries||Object.defineProperty(Object,"fromEntries",{configurable:!0,writable:!0,value:function(iter){return Array.from(iter).reduce((function(acc,pair){if(Object(pair)!==pair)throw new TypeError("Object.fromEntries iterable parameter must yield objects");return pair[0]in acc?Object.defineProperty(acc,pair[0],{configurable:!0,enumerable:!0,writable:!0,value:pair[1]}):acc[pair[0]]=pair[1],acc}),{})}}),Object.getOwnPropertyDescriptors||Object.defineProperty(Object,"getOwnPropertyDescriptors",{configurable:!0,writable:!0,value:function(obj){if(null==obj)throw new TypeError("Object.getOwnPropertyDescriptors object parameter is null or undefined");var O=Object(obj);return Reflect.ownKeys(O).reduce((function(acc,key){var desc=Object.getOwnPropertyDescriptor(O,key);return void 0!==desc&&(key in acc?Object.defineProperty(acc,key,{configurable:!0,enumerable:!0,writable:!0,value:desc}):acc[key]=desc),acc}),{})}}),Object.values||Object.defineProperty(Object,"values",{configurable:!0,writable:!0,value:function(obj){if("object"!==_typeof(obj)||null===obj)throw new TypeError("Object.values object parameter must be an object");return Object.keys(obj).map((function(key){return obj[key]}))}}),String.prototype.padStart||Object.defineProperty(String.prototype,"padStart",{configurable:!0,writable:!0,value:function(length,padding){if(null==this)throw new TypeError("String.prototype.padStart called on null or undefined");var baseString=String(this),baseLength=baseString.length,targetLength=Number.parseInt(length,10);return targetLength<=baseLength?baseString:_createPadString(targetLength-baseLength,padding)+baseString}}),String.prototype.padEnd||Object.defineProperty(String.prototype,"padEnd",{configurable:!0,writable:!0,value:function(length,padding){if(null==this)throw new TypeError("String.prototype.padEnd called on null or undefined");var baseString=String(this),baseLength=baseString.length,targetLength=Number.parseInt(length,10);return targetLength<=baseLength?baseString:baseString+_createPadString(targetLength-baseLength,padding)}}),String.prototype.trimStart||Object.defineProperty(String.prototype,"trimStart",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.trimStart called on null or undefined");return _trimString(this,"start")}}),String.prototype.trimLeft||Object.defineProperty(String.prototype,"trimLeft",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.trimLeft called on null or undefined");return _trimString(this,"start")}}),String.prototype.trimEnd||Object.defineProperty(String.prototype,"trimEnd",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.trimEnd called on null or undefined");return _trimString(this,"end")}}),String.prototype.trimRight||Object.defineProperty(String.prototype,"trimRight",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.trimRight called on null or undefined");return _trimString(this,"end")}})}(),function(){var _nativeMathRandom=Math.random,_regExpMetaCharsRe,_hasRegExpMetaCharsRe,_formatRegExp,_hasFormatRegExp;function _random(){var min,max;switch(arguments.length){case 0:throw new Error("_random called with insufficient parameters");case 1:min=0,max=arguments[0];break;default:min=arguments[0],max=arguments[1]}if(min>max){var _ref=[max,min];min=_ref[0],max=_ref[1]}return Math.floor(_nativeMathRandom()*(max-min+1))+min}function _randomIndex(length,boundsArgs){var min,max;switch(boundsArgs.length){case 1:min=0,max=length-1;break;case 2:min=0,max=Math.trunc(boundsArgs[1]);break;default:min=Math.trunc(boundsArgs[1]),max=Math.trunc(boundsArgs[2])}return Number.isNaN(min)?min=0:!Number.isFinite(min)||min>=length?min=length-1:min<0&&(min=length+min)<0&&(min=0),Number.isNaN(max)?max=0:(!Number.isFinite(max)||max>=length||max<0&&(max=length+max)<0)&&(max=length-1),_random(min,max)}function _getCodePointStartAndEnd(str,pos){var code=str.charCodeAt(pos);if(Number.isNaN(code))return{char:"",start:-1,end:-1};if(code<55296||code>57343)return{char:str.charAt(pos),start:pos,end:pos};if(code>=55296&&code<=56319){var nextPos=pos+1;if(nextPos>=str.length)throw new Error("high surrogate without trailing low surrogate");var nextCode=str.charCodeAt(nextPos);if(nextCode<56320||nextCode>57343)throw new Error("high surrogate without trailing low surrogate");return{char:str.charAt(pos)+str.charAt(nextPos),start:pos,end:nextPos}}if(0===pos)throw new Error("low surrogate without leading high surrogate");var prevPos=pos-1,prevCode=str.charCodeAt(prevPos);if(prevCode<55296||prevCode>56319)throw new Error("low surrogate without leading high surrogate");return{char:str.charAt(prevPos)+str.charAt(pos),start:prevPos,end:pos}}Object.defineProperty(Array,"random",{configurable:!0,writable:!0,value:function(array){if("object"!==_typeof(array)||null===array||!Object.prototype.hasOwnProperty.call(array,"length"))throw new TypeError("Array.random array parameter must be an array or array-lke object");var length=array.length>>>0;if(0!==length){var index=0===arguments.length?_random(0,length-1):_randomIndex(length,Array.prototype.slice.call(arguments,1));return array[index]}}}),Object.defineProperty(Array.prototype,"concatUnique",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.concatUnique called on null or undefined");var result=Array.from(this);if(0===arguments.length)return result;var items=Array.prototype.reduce.call(arguments,(function(prev,cur){return prev.concat(cur)}),[]),addSize=items.length;if(0===addSize)return result;for(var indexOf=Array.prototype.indexOf,push=Array.prototype.push,i=0;i<addSize;++i){var value=items[i];-1===indexOf.call(result,value)&&push.call(result,value)}return result}}),Object.defineProperty(Array.prototype,"count",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.count called on null or undefined");for(var indexOf=Array.prototype.indexOf,needle=arguments[0],pos=Number(arguments[1])||0,count=0;-1!==(pos=indexOf.call(this,needle,pos));)++count,++pos;return count}}),Object.defineProperty(Array.prototype,"countWith",{configurable:!0,writable:!0,value:function(predicate,thisArg){if(null==this)throw new TypeError("Array.prototype.countWith called on null or undefined");if("function"!=typeof predicate)throw new Error("Array.prototype.countWith predicate parameter must be a function");var length=this.length>>>0;if(0===length)return 0;for(var count=0,i=0;i<length;++i)predicate.call(thisArg,this[i],i,this)&&++count;return count}}),Object.defineProperty(Array.prototype,"delete",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.delete called on null or undefined");if(0===arguments.length)return[];var length=this.length>>>0;if(0===length)return[];for(var needles=Array.prototype.concat.apply([],arguments),needlesLength=needles.length,indices=[],i=0;i<length;++i)for(var value=this[i],j=0;j<needlesLength;++j){var needle=needles[j];if(value===needle||value!=value&&needle!=needle){indices.push(i);break}}for(var result=[],_i=0,iend=indices.length;_i<iend;++_i)result[_i]=this[indices[_i]];for(var splice=Array.prototype.splice,_i2=indices.length-1;_i2>=0;--_i2)splice.call(this,indices[_i2],1);return result}}),Object.defineProperty(Array.prototype,"deleteAt",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.deleteAt called on null or undefined");if(0===arguments.length)return[];var length=this.length>>>0;if(0===length)return[];for(var splice=Array.prototype.splice,cpyIndices=_toConsumableArray(new Set(Array.prototype.concat.apply([],arguments).map((function(x){return x<0?Math.max(0,length+x):x}))).values()),delIndices=_toConsumableArray(cpyIndices).sort((function(a,b){return b-a})),result=[],i=0,iend=cpyIndices.length;i<iend;++i)result[i]=this[cpyIndices[i]];for(var _i3=0,_iend=delIndices.length;_i3<_iend;++_i3)splice.call(this,delIndices[_i3],1);return result}}),Object.defineProperty(Array.prototype,"deleteWith",{configurable:!0,writable:!0,value:function(predicate,thisArg){if(null==this)throw new TypeError("Array.prototype.deleteWith called on null or undefined");if("function"!=typeof predicate)throw new Error("Array.prototype.deleteWith predicate parameter must be a function");var length=this.length>>>0;if(0===length)return[];for(var splice=Array.prototype.splice,indices=[],result=[],i=0;i<length;++i)predicate.call(thisArg,this[i],i,this)&&(result.push(this[i]),indices.push(i));for(var _i4=indices.length-1;_i4>=0;--_i4)splice.call(this,indices[_i4],1);return result}}),Object.defineProperty(Array.prototype,"first",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.first called on null or undefined");if(0!==this.length>>>0)return this[0]}}),Object.defineProperty(Array.prototype,"includesAll",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.includesAll called on null or undefined");if(1===arguments.length)return Array.isArray(arguments[0])?Array.prototype.includesAll.apply(this,arguments[0]):Array.prototype.includes.apply(this,arguments);for(var i=0,iend=arguments.length;i<iend;++i)if(!Array.prototype.some.call(this,(function(val){return val===this.val||val!=val&&this.val!=this.val}),{val:arguments[i]}))return!1;return!0}}),Object.defineProperty(Array.prototype,"includesAny",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.includesAny called on null or undefined");if(1===arguments.length)return Array.isArray(arguments[0])?Array.prototype.includesAny.apply(this,arguments[0]):Array.prototype.includes.apply(this,arguments);for(var i=0,iend=arguments.length;i<iend;++i)if(Array.prototype.some.call(this,(function(val){return val===this.val||val!=val&&this.val!=this.val}),{val:arguments[i]}))return!0;return!1}}),Object.defineProperty(Array.prototype,"last",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.last called on null or undefined");var length=this.length>>>0;if(0!==length)return this[length-1]}}),Object.defineProperty(Array.prototype,"pluck",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.pluck called on null or undefined");var length=this.length>>>0;if(0!==length){var index=0===arguments.length?_random(0,length-1):_randomIndex(length,Array.prototype.slice.call(arguments));return Array.prototype.splice.call(this,index,1)[0]}}}),Object.defineProperty(Array.prototype,"pluckMany",{configurable:!0,writable:!0,value:function(wantSize){if(null==this)throw new TypeError("Array.prototype.pluckMany called on null or undefined");var length=this.length>>>0;if(0===length)return[];var want=Math.trunc(wantSize);if(!Number.isInteger(want))throw new Error("Array.prototype.pluckMany want parameter must be an integer");if(want<1)return[];want>length&&(want=length);var splice=Array.prototype.splice,result=[],max=length-1;do{result.push(splice.call(this,_random(0,max--),1)[0])}while(result.length<want);return result}}),Object.defineProperty(Array.prototype,"pushUnique",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.pushUnique called on null or undefined");var addSize=arguments.length;if(0===addSize)return this.length>>>0;for(var indexOf=Array.prototype.indexOf,push=Array.prototype.push,i=0;i<addSize;++i){var value=arguments[i];-1===indexOf.call(this,value)&&push.call(this,value)}return this.length>>>0}}),Object.defineProperty(Array.prototype,"random",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.random called on null or undefined");var length=this.length>>>0;if(0!==length){var index=0===arguments.length?_random(0,length-1):_randomIndex(length,Array.prototype.slice.call(arguments));return this[index]}}}),Object.defineProperty(Array.prototype,"randomMany",{configurable:!0,writable:!0,value:function(wantSize){if(null==this)throw new TypeError("Array.prototype.randomMany called on null or undefined");var length=this.length>>>0;if(0===length)return[];var want=Math.trunc(wantSize);if(!Number.isInteger(want))throw new Error("Array.prototype.randomMany want parameter must be an integer");if(want<1)return[];want>length&&(want=length);var picked=new Map,result=[],max=length-1;do{var i=void 0;do{i=_random(0,max)}while(picked.has(i));picked.set(i,!0),result.push(this[i])}while(result.length<want);return result}}),Object.defineProperty(Array.prototype,"shuffle",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.shuffle called on null or undefined");var length=this.length>>>0;if(0===length)return this;for(var i=length-1;i>0;--i){var j=Math.floor(_nativeMathRandom()*(i+1));if(i!==j){var swap=this[i];this[i]=this[j],this[j]=swap}}return this}}),Object.defineProperty(Array.prototype,"unshiftUnique",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.unshiftUnique called on null or undefined");var addSize=arguments.length;if(0===addSize)return this.length>>>0;for(var indexOf=Array.prototype.indexOf,unshift=Array.prototype.unshift,i=0;i<addSize;++i){var value=arguments[i];-1===indexOf.call(this,value)&&unshift.call(this,value)}return this.length>>>0}}),Object.defineProperty(Function.prototype,"partial",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Function.prototype.partial called on null or undefined");var slice=Array.prototype.slice,fn=this,bound=slice.call(arguments,0);return function(){for(var applied=[],argc=0,i=0;i<bound.length;++i)applied.push(bound[i]===undefined?arguments[argc++]:bound[i]);return fn.apply(this,applied.concat(slice.call(arguments,argc)))}}}),Object.defineProperty(Math,"clamp",{configurable:!0,writable:!0,value:function(num,min,max){var value=Number(num);return Number.isNaN(value)?NaN:value.clamp(min,max)}}),Object.defineProperty(Math,"easeInOut",{configurable:!0,writable:!0,value:function(num){return 1-(Math.cos(Number(num)*Math.PI)+1)/2}}),Object.defineProperty(Number.prototype,"clamp",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Number.prototype.clamp called on null or undefined");if(2!==arguments.length)throw new Error("Number.prototype.clamp called with an incorrect number of parameters");var min=Number(arguments[0]),max=Number(arguments[1]);if(min>max){var _ref2=[max,min];min=_ref2[0],max=_ref2[1]}return Math.min(Math.max(this,min),max)}}),RegExp.escape||(_regExpMetaCharsRe=/[\\^$*+?.()|[\]{}]/g,_hasRegExpMetaCharsRe=new RegExp(_regExpMetaCharsRe.source),Object.defineProperty(RegExp,"escape",{configurable:!0,writable:!0,value:function(str){var val=String(str);return val&&_hasRegExpMetaCharsRe.test(val)?val.replace(_regExpMetaCharsRe,"\\$&"):val}})),_formatRegExp=/{(\d+)(?:,([+-]?\d+))?}/g,_hasFormatRegExp=new RegExp(_formatRegExp.source),Object.defineProperty(String,"format",{configurable:!0,writable:!0,value:function(format){function padString(str,align,pad){if(!align)return str;var plen=Math.abs(align)-str.length;if(plen<1)return str;var padding=String(pad).repeat(plen);return align<0?str+padding:padding+str}if(arguments.length<2)return 0===arguments.length?"":format;var args=2===arguments.length&&Array.isArray(arguments[1])?_toConsumableArray(arguments[1]):Array.prototype.slice.call(arguments,1);return 0===args.length?format:_hasFormatRegExp.test(format)?(_formatRegExp.lastIndex=0,format.replace(_formatRegExp,(function(match,index,align){var retval=args[index];if(null==retval)return"";for(;"function"==typeof retval;)retval=retval();switch(_typeof(retval)){case"string":break;case"object":retval=JSON.stringify(retval);break;default:retval=String(retval)}return padString(retval,align?Number.parseInt(align,10):0," ")}))):format}}),Object.defineProperty(String.prototype,"contains",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.contains called on null or undefined");return-1!==String.prototype.indexOf.apply(this,arguments)}}),Object.defineProperty(String.prototype,"count",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.count called on null or undefined");var needle=String(arguments[0]||"");if(""===needle)return 0;for(var indexOf=String.prototype.indexOf,step=needle.length,pos=Number(arguments[1])||0,count=0;-1!==(pos=indexOf.call(this,needle,pos));)++count,pos+=step;return count}}),Object.defineProperty(String.prototype,"first",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.first called on null or undefined");return _getCodePointStartAndEnd(String(this),0).char}}),Object.defineProperty(String.prototype,"last",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.last called on null or undefined");var str=String(this);return _getCodePointStartAndEnd(str,str.length-1).char}}),Object.defineProperty(String.prototype,"splice",{configurable:!0,writable:!0,value:function(startAt,delCount,replacement){if(null==this)throw new TypeError("String.prototype.splice called on null or undefined");var length=this.length>>>0;if(0===length)return"";var start=Number(startAt);Number.isSafeInteger(start)?start<0&&(start+=length)<0&&(start=0):start=0,start>length&&(start=length);var count=Number(delCount);(!Number.isSafeInteger(count)||count<0)&&(count=0);var res=this.slice(0,start);return void 0!==replacement&&(res+=replacement),start+count<length&&(res+=this.slice(start+count)),res}}),Object.defineProperty(String.prototype,"splitOrEmpty",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.splitOrEmpty called on null or undefined");return""===String(this)?[]:String.prototype.split.apply(this,arguments)}}),Object.defineProperty(String.prototype,"toLocaleUpperFirst",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.toLocaleUpperFirst called on null or undefined");var str=String(this),_getCodePointStartAnd3=_getCodePointStartAndEnd(str,0),char=_getCodePointStartAnd3.char,end=_getCodePointStartAnd3.end;return-1===end?"":char.toLocaleUpperCase()+str.slice(end+1)}}),Object.defineProperty(String.prototype,"toUpperFirst",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.toUpperFirst called on null or undefined");var str=String(this),_getCodePointStartAnd4=_getCodePointStartAndEnd(str,0),char=_getCodePointStartAnd4.char,end=_getCodePointStartAnd4.end;return-1===end?"":char.toUpperCase()+str.slice(end+1)}}),Object.defineProperty(Date.prototype,"toJSON",{configurable:!0,writable:!0,value:function(){return["(revive:date)",this.toISOString()]}}),Object.defineProperty(Function.prototype,"toJSON",{configurable:!0,writable:!0,value:function(){return["(revive:eval)","(".concat(this.toString(),")")]}}),Object.defineProperty(Map.prototype,"toJSON",{configurable:!0,writable:!0,value:function(){return["(revive:map)",_toConsumableArray(this)]}}),Object.defineProperty(RegExp.prototype,"toJSON",{configurable:!0,writable:!0,value:function(){return["(revive:eval)",this.toString()]}}),Object.defineProperty(Set.prototype,"toJSON",{configurable:!0,writable:!0,value:function(){return["(revive:set)",_toConsumableArray(this)]}}),Object.defineProperty(JSON,"reviveWrapper",{configurable:!0,writable:!0,value:function(code,data){if("string"!=typeof code)throw new TypeError("JSON.reviveWrapper code parameter must be a string");return["(revive:eval)",[code,data]]}}),Object.defineProperty(JSON,"_real_stringify",{value:JSON.stringify}),Object.defineProperty(JSON,"stringify",{configurable:!0,writable:!0,value:function(_value,replacer,space){return JSON._real_stringify(_value,(function(key,val){var value=val;if("function"==typeof replacer)try{value=replacer(key,value)}catch(ex){}return void 0===value&&(value=["(revive:eval)","undefined"]),value}),space)}}),Object.defineProperty(JSON,"_real_parse",{value:JSON.parse}),Object.defineProperty(JSON,"parse",{configurable:!0,writable:!0,value:function value(text,reviver){return JSON._real_parse(text,(function(key,val){var value=val;if(Array.isArray(value)&&2===value.length)switch(value[0]){case"(revive:set)":value=new Set(value[1]);break;case"(revive:map)":value=new Map(value[1]);break;case"(revive:date)":value=new Date(value[1]);break;case"(revive:eval)":try{if(Array.isArray(value[1])){var $ReviveData$=value[1][1];value=eval(value[1][0])}else value=eval(value[1])}catch(ex){}}else if("string"==typeof value&&"@@revive@@"===value.slice(0,10))try{value=eval(value.slice(10))}catch(ex){}if("function"==typeof reviver)try{value=reviver(key,value)}catch(ex){}return value}))}}),Object.defineProperty(Array.prototype,"contains",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.contains called on null or undefined");return Array.prototype.includes.apply(this,arguments)}}),Object.defineProperty(Array.prototype,"containsAll",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.containsAll called on null or undefined");return Array.prototype.includesAll.apply(this,arguments)}}),Object.defineProperty(Array.prototype,"containsAny",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.containsAny called on null or undefined");return Array.prototype.includesAny.apply(this,arguments)}}),Object.defineProperty(Array.prototype,"flatten",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("Array.prototype.flatten called on null or undefined");return Array.prototype.flat.call(this,1/0)}}),Object.defineProperty(String.prototype,"readBracketedList",{configurable:!0,writable:!0,value:function(){if(null==this)throw new TypeError("String.prototype.readBracketedList called on null or undefined");for(var match,re=new RegExp("(?:\\[\\[((?:\\s|\\S)*?)\\]\\])|([^\"'\\s]\\S*)","gm"),names=[];null!==(match=re.exec(this));)match[1]?names.push(match[1]):match[2]&&names.push(match[2]);return names}})}();var Browser=(userAgent=navigator.userAgent.toLowerCase(),winPhone=userAgent.includes("windows phone"),isMobile=Object.freeze({Android:!winPhone&&userAgent.includes("android"),BlackBerry:/blackberry|bb10/.test(userAgent),iOS:!winPhone&&/ip(?:hone|ad|od)/.test(userAgent),Opera:!winPhone&&("object"===_typeof(window.operamini)||userAgent.includes("opera mini")),Windows:winPhone||/iemobile|wpdesktop/.test(userAgent),any:function(){return isMobile.Android||isMobile.BlackBerry||isMobile.iOS||isMobile.Opera||isMobile.Windows}}),isGecko=!isMobile.Windows&&!/khtml|trident|edge/.test(userAgent)&&userAgent.includes("gecko"),isIE=!userAgent.includes("opera")&&/msie|trident/.test(userAgent),ieVersion=isIE?(ver=/(?:msie\s+|rv:)(\d+\.\d)/.exec(userAgent))?Number(ver[1]):0:null,isOpera=userAgent.includes("opera")||userAgent.includes(" opr/"),operaVersion=isOpera?function(){var ver=new RegExp("".concat(/khtml|chrome/.test(userAgent)?"opr":"version","\\/(\\d+\\.\\d+)")).exec(userAgent);return ver?Number(ver[1]):0}():null,isVivaldi=userAgent.includes("vivaldi"),Object.freeze({userAgent:userAgent,isMobile:isMobile,isGecko:isGecko,isIE:isIE,ieVersion:ieVersion,isOpera:isOpera,operaVersion:operaVersion,isVivaldi:isVivaldi})),ver,userAgent,winPhone,isMobile,isGecko,isIE,ieVersion,isOpera,operaVersion,isVivaldi,Has=(hasAudioElement=function(){try{return"function"==typeof document.createElement("audio").canPlayType}catch(ex){}return!1}(),hasFile=function(){try{return"Blob"in window&&"File"in window&&"FileList"in window&&"FileReader"in window&&(!Browser.isOpera||Browser.operaVersion>=15)}catch(ex){}return!1}(),hasGeolocation=function(){try{return"geolocation"in navigator&&"function"==typeof navigator.geolocation.getCurrentPosition&&"function"==typeof navigator.geolocation.watchPosition}catch(ex){}return!1}(),hasMutationObserver=function(){try{return"MutationObserver"in window&&"function"==typeof window.MutationObserver}catch(ex){}return!1}(),hasPerformance=function(){try{return"performance"in window&&"function"==typeof window.performance.now}catch(ex){}return!1}(),hasTouch=function(){try{return"ontouchstart"in window||!!window.DocumentTouch&&document instanceof window.DocumentTouch||!!navigator.maxTouchPoints||!!navigator.msMaxTouchPoints}catch(ex){}return!1}(),hasTransitionEndEvent=function(){try{for(var teMap=new Map([["transition","transitionend"],["MSTransition","msTransitionEnd"],["WebkitTransition","webkitTransitionEnd"],["MozTransition","transitionend"]]),teKeys=_toConsumableArray(teMap.keys()),el=document.createElement("div"),i=0;i<teKeys.length;++i)if(el.style[teKeys[i]]!==undefined)return teMap.get(teKeys[i])}catch(ex){}return!1}(),Object.freeze({audio:hasAudioElement,fileAPI:hasFile,geolocation:hasGeolocation,mutationObserver:hasMutationObserver,performance:hasPerformance,touch:hasTouch,transitionEndEvent:hasTransitionEndEvent})),hasAudioElement,hasFile,hasGeolocation,hasMutationObserver,hasPerformance,hasTouch,hasTransitionEndEvent,Visibility=(vendor=function(){try{return Object.freeze([{hiddenProperty:"hidden",stateProperty:"visibilityState",changeEvent:"visibilitychange"},{hiddenProperty:"webkitHidden",stateProperty:"webkitVisibilityState",changeEvent:"webkitvisibilitychange"},{hiddenProperty:"mozHidden",stateProperty:"mozVisibilityState",changeEvent:"mozvisibilitychange"},{hiddenProperty:"msHidden",stateProperty:"msVisibilityState",changeEvent:"msvisibilitychange"}].find((function(vnd){return vnd.hiddenProperty in document})))}catch(ex){}return undefined}(),Object.freeze(Object.defineProperties({},{vendor:{get:function(){return vendor}},state:{get:function(){return vendor&&document[vendor.stateProperty]||"visible"}},isEnabled:{value:function(){return Boolean(vendor)}},isHidden:{value:function(){return Boolean(vendor&&document[vendor.hiddenProperty])}},hiddenProperty:{value:vendor&&vendor.hiddenProperty},stateProperty:{value:vendor&&vendor.stateProperty},changeEvent:{value:vendor&&vendor.changeEvent}}))),vendor,Fullscreen=function(){var _hasPromise,vendor=function(){try{return Object.freeze([{isEnabled:"fullscreenEnabled",element:"fullscreenElement",requestFn:"requestFullscreen",exitFn:"exitFullscreen",changeEvent:"fullscreenchange",errorEvent:"fullscreenerror"},{isEnabled:"webkitFullscreenEnabled",element:"webkitFullscreenElement",requestFn:"webkitRequestFullscreen",exitFn:"webkitExitFullscreen",changeEvent:"webkitfullscreenchange",errorEvent:"webkitfullscreenerror"},{isEnabled:"mozFullScreenEnabled",element:"mozFullScreenElement",requestFn:"mozRequestFullScreen",exitFn:"mozCancelFullScreen",changeEvent:"mozfullscreenchange",errorEvent:"mozfullscreenerror"},{isEnabled:"msFullscreenEnabled",element:"msFullscreenElement",requestFn:"msRequestFullscreen",exitFn:"msExitFullscreen",changeEvent:"MSFullscreenChange",errorEvent:"MSFullscreenError"}].find((function(vnd){return vnd.isEnabled in document})))}catch(ex){}return undefined}(),_returnsPromise=(_hasPromise=null,function(){if(null!==_hasPromise)return _hasPromise;if(_hasPromise=!1,vendor)try{var value=document.exitFullscreen();value.catch((function(){})),_hasPromise=value instanceof Promise}catch(ex){}return _hasPromise});function _selectElement(requestedEl){var selectedEl=requestedEl||document.documentElement;return selectedEl===document.documentElement&&("msRequestFullscreen"===vendor.requestFn||Browser.isOpera&&Browser.operaVersion<15)&&(selectedEl=document.body),selectedEl}function isFullscreen(){return Boolean(vendor&&document[vendor.element])}function requestFullscreen(options,requestedEl){var _this=this;if(!vendor)return Promise.reject(new Error("fullscreen not supported"));var element=_selectElement(requestedEl);if("function"!=typeof element[vendor.requestFn])return Promise.reject(new Error("fullscreen not supported"));if(isFullscreen())return Promise.resolve();if(_returnsPromise())return element[vendor.requestFn](options);var namespace=".Fullscreen_requestFullscreen";return new Promise((function(resolve,reject){jQuery(element).off(namespace).one("".concat(vendor.errorEvent).concat(namespace," ").concat(vendor.changeEvent).concat(namespace),(function(ev){jQuery(_this).off(namespace),ev.type===vendor.errorEvent?reject(new Error("unknown fullscreen request error")):resolve()})),element[vendor.requestFn](options)}))}function exitFullscreen(){var _this2=this;if(!vendor||"function"!=typeof document[vendor.exitFn])return Promise.reject(new TypeError("fullscreen not supported"));if(!isFullscreen())return Promise.reject(new TypeError("fullscreen mode not active"));if(_returnsPromise())return document[vendor.exitFn]();var namespace=".Fullscreen_exitFullscreen";return new Promise((function(resolve,reject){jQuery(document).off(namespace).one("".concat(vendor.errorEvent).concat(namespace," ").concat(vendor.changeEvent).concat(namespace),(function(ev){jQuery(_this2).off(namespace),ev.type===vendor.errorEvent?reject(new Error("unknown fullscreen exit error")):resolve()})),document[vendor.exitFn]()}))}return Object.freeze(Object.defineProperties({},{vendor:{get:function(){return vendor}},element:{get:function(){return vendor?document[vendor.element]:null}},isEnabled:{value:function(){return Boolean(vendor&&document[vendor.isEnabled])}},isFullscreen:{value:isFullscreen},request:{value:requestFullscreen},exit:{value:exitFullscreen},toggle:{value:function(options,requestedEl){return isFullscreen()?exitFullscreen():requestFullscreen(options,requestedEl)}},onChange:{value:function(handlerFn,requestedEl){if(vendor){var element=_selectElement(requestedEl);$(element).on(vendor.changeEvent,handlerFn)}}},offChange:{value:function(handlerFn,requestedEl){if(vendor){var element=_selectElement(requestedEl);handlerFn?$(element).off(vendor.changeEvent,handlerFn):$(element).off(vendor.changeEvent)}}},onError:{value:function(handlerFn,requestedEl){if(vendor){var element=_selectElement(requestedEl);$(element).on(vendor.errorEvent,handlerFn)}}},offError:{value:function(handlerFn,requestedEl){if(vendor){var element=_selectElement(requestedEl);handlerFn?$(element).off(vendor.errorEvent,handlerFn):$(element).off(vendor.errorEvent)}}}}))}(),_ref3=Object.freeze(Object.defineProperties({},{clone:{value:function clone(orig){return"object"!==_typeof(orig)||null===orig?orig:orig instanceof String?String(orig):orig instanceof Number?Number(orig):orig instanceof Boolean?Boolean(orig):"function"==typeof orig.clone?orig.clone(!0):orig.nodeType&&"function"==typeof orig.cloneNode?orig.cloneNode(!0):(orig instanceof Array?copy=new Array(orig.length):orig instanceof Date?copy=new Date(orig.getTime()):orig instanceof Map?(copy=new Map,orig.forEach((function(val,key){return copy.set(key,clone(val))}))):orig instanceof RegExp?copy=new RegExp(orig):orig instanceof Set?(copy=new Set,orig.forEach((function(val){return copy.add(clone(val))}))):copy=Object.create(Object.getPrototypeOf(orig)),Object.keys(orig).forEach((function(name){return copy[name]=clone(orig[name])})),copy);var copy}},convertBreaks:{value:function(source){for(var node,output=document.createDocumentFragment(),para=document.createElement("p");null!==(node=source.firstChild);){if(node.nodeType===Node.ELEMENT_NODE)switch(node.nodeName.toUpperCase()){case"BR":if(null!==node.nextSibling&&node.nextSibling.nodeType===Node.ELEMENT_NODE&&"BR"===node.nextSibling.nodeName.toUpperCase()){source.removeChild(node.nextSibling),source.removeChild(node),output.appendChild(para),para=document.createElement("p");continue}if(!para.hasChildNodes()){source.removeChild(node);continue}break;case"ADDRESS":case"ARTICLE":case"ASIDE":case"BLOCKQUOTE":case"CENTER":case"DIV":case"DL":case"FIGURE":case"FOOTER":case"FORM":case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"HEADER":case"HR":case"MAIN":case"NAV":case"OL":case"P":case"PRE":case"SECTION":case"TABLE":case"UL":para.hasChildNodes()&&(output.appendChild(para),para=document.createElement("p")),output.appendChild(node);continue}para.appendChild(node)}para.hasChildNodes()&&output.appendChild(para),source.appendChild(output)}},safeActiveElement:{value:function(){try{return document.activeElement||null}catch(ex){return null}}},setDisplayTitle:{value:function(title){if("string"!=typeof title)throw new TypeError("story display title must be a string (received: ".concat(Util.getType(title),")"));var render=document.createDocumentFragment();new Wikifier(render,title);var text=function(source){for(var node,copy=source.cloneNode(!0),frag=document.createDocumentFragment();null!==(node=copy.firstChild);){if(node.nodeType===Node.ELEMENT_NODE)switch(node.nodeName.toUpperCase()){case"BR":case"DIV":case"P":frag.appendChild(document.createTextNode(" "))}frag.appendChild(node)}return frag.textContent}(render).trim();document.title=Config.passages.displayTitles&&""!==State.passage&&State.passage!==Config.passages.start?"".concat(State.passage," | ").concat(text):text;var storyTitle=document.getElementById("story-title");null!==storyTitle&&jQuery(storyTitle).empty().append(render)}},setPageElement:{value:function(idOrElement,titles,defaultText){var el="object"===_typeof(idOrElement)?idOrElement:document.getElementById(idOrElement);if(null==el)return null;var ids=Array.isArray(titles)?titles:[titles];jQuery(el).empty();for(var i=0,iend=ids.length;i<iend;++i)if(Story.has(ids[i]))return new Wikifier(el,Story.get(ids[i]).processText().trim()),el;if(null!=defaultText){var text=String(defaultText).trim();""!==text&&new Wikifier(el,text)}return el}},throwError:{value:function(place,message,source){var $wrapper=jQuery(document.createElement("div")),$toggle=jQuery(document.createElement("button")),$source=jQuery(document.createElement("pre")),mesg="".concat(L10n.get("errorTitle"),": ").concat(message||"unknown error");return $toggle.addClass("error-toggle").ariaClick({label:L10n.get("errorToggle")},(function(){$toggle.hasClass("enabled")?($toggle.removeClass("enabled"),$source.attr({"aria-hidden":!0,hidden:"hidden"})):($toggle.addClass("enabled"),$source.removeAttr("aria-hidden hidden"))})).appendTo($wrapper),jQuery(document.createElement("span")).addClass("error").text(mesg).appendTo($wrapper),jQuery(document.createElement("code")).text(source).appendTo($source),$source.addClass("error-source").attr({"aria-hidden":!0,hidden:"hidden"}).appendTo($wrapper),$wrapper.addClass("error-view").appendTo(place),console.warn("".concat(mesg,"\n\t").concat(source.replace(/\n/g,"\n\t"))),!1}},stringFrom:{value:function stringFrom(value){switch(_typeof(value)){case"function":return"[function]";case"number":if(Number.isNaN(value))return"[number NaN]";break;case"object":if(null===value)return"[null]";if(value instanceof Array)return value.map((function(val){return stringFrom(val)})).join(", ");if(value instanceof Set)return Array.from(value).map((function(val){return stringFrom(val)})).join(", ");if(value instanceof Map){var result=Array.from(value).map((function(_ref4){var _ref5=_slicedToArray(_ref4,2),key=_ref5[0],val=_ref5[1];return"".concat(stringFrom(key)," → ").concat(stringFrom(val))}));return"{ ".concat(result.join(", ")," }")}if(value instanceof Date)return value.toLocaleString();if(value instanceof Element){if(value===document.documentElement||value===document.head||value===document.body)throw new Error("illegal operation; attempting to convert the <html>, <head>, or <body> tags to string is not allowed");return value.outerHTML}return value instanceof Node?value.textContent:"function"==typeof value.toString?value.toString():Object.prototype.toString.call(value);case"symbol":var desc=void 0!==value.description?' "'.concat(value.description,'"'):"";return"[symbol".concat(desc,"]");case"undefined":return"[undefined]"}return String(value)}}})),clone=_ref3.clone,convertBreaks=_ref3.convertBreaks,safeActiveElement=_ref3.safeActiveElement,setDisplayTitle=_ref3.setDisplayTitle,setPageElement=_ref3.setPageElement,throwError=_ref3.throwError,stringFrom=_ref3.stringFrom;!function(){function onKeypressFn(ev){13!==ev.which&&32!==ev.which||(ev.preventDefault(),jQuery(safeActiveElement()||this).trigger("click"))}function onClickFnWrapper(fn){return function(){var $this=jQuery(this);$this.ariaIsDisabled()||($this.is("[aria-pressed]")&&$this.attr("aria-pressed","true"===$this.attr("aria-pressed")?"false":"true"),fn.apply(this,arguments))}}function oneClickFnWrapper(fn){return onClickFnWrapper((function(){jQuery(this).off(".aria-clickable").removeAttr("role tabindex aria-controls aria-pressed").filter("button").prop("disabled",!0),fn.apply(this,arguments)}))}jQuery.fn.extend({ariaClick:function(options,handler){if(0===this.length||0===arguments.length)return this;var opts=options,fn=handler;return null==fn&&(fn=opts,opts=undefined),"string"!=typeof(opts=jQuery.extend({namespace:undefined,one:!1,selector:undefined,data:undefined,role:undefined,controls:undefined,pressed:undefined,label:undefined},opts)).namespace?opts.namespace="":"."!==opts.namespace[0]&&(opts.namespace=".".concat(opts.namespace)),"boolean"==typeof opts.pressed&&(opts.pressed=opts.pressed?"true":"false"),this.filter("button").prop("type","button"),null!=opts.role?this.attr("role",opts.role):this.not("[role]").filter("a,[data-passage]").attr("role","link").end().not("a").not("[data-passage]").attr("role","button").end().end().end(),this.attr("tabindex",0),null!=opts.controls&&this.attr("aria-controls",opts.controls),null!=opts.pressed&&this.attr("aria-pressed",opts.pressed),null!=opts.label&&this.attr({"aria-label":opts.label,title:opts.label}),this.not("button").on("keypress.aria-clickable".concat(opts.namespace),opts.selector,onKeypressFn),this.on("click.aria-clickable".concat(opts.namespace),opts.selector,opts.data,opts.one?oneClickFnWrapper(fn):onClickFnWrapper(fn)),this},ariaDisabled:function(disable){if(0===this.length||0===arguments.length)return this;var $nonDisableable=this.not("button,fieldset,input,menuitem,optgroup,option,select,textarea"),$disableable=this.filter("button,fieldset,input,menuitem,optgroup,option,select,textarea");return disable?($nonDisableable.each((function(){this.setAttribute("disabled",""),this.setAttribute("aria-disabled","true")})),$disableable.each((function(){this.disabled=!0,this.setAttribute("aria-disabled","true")}))):($nonDisableable.each((function(){this.removeAttribute("disabled"),this.removeAttribute("aria-disabled")})),$disableable.each((function(){this.disabled=!1,this.removeAttribute("aria-disabled")}))),this},ariaIsDisabled:function(){return this.is("[disabled]")}})}(),jQuery.extend({wikiWithOptions:function(options){for(var _len=arguments.length,sources=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)sources[_key-1]=arguments[_key];if(0!==sources.length){var frag=document.createDocumentFragment();sources.forEach((function(content){return new Wikifier(frag,content,options)}));var errors=_toConsumableArray(frag.querySelectorAll(".error")).map((function(errEl){return errEl.textContent.replace(errorPrologRegExp,"")}));if(errors.length>0)throw new Error(errors.join("; "))}},wiki:function(){for(var _len2=arguments.length,sources=new Array(_len2),_key2=0;_key2<_len2;_key2++)sources[_key2]=arguments[_key2];this.wikiWithOptions.apply(this,[undefined].concat(sources))}}),jQuery.fn.extend({wikiWithOptions:function(options){for(var _len3=arguments.length,sources=new Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++)sources[_key3-1]=arguments[_key3];if(0===this.length||0===sources.length)return this;var frag=document.createDocumentFragment();return sources.forEach((function(content){return new Wikifier(frag,content,options)})),this.append(frag),this},wiki:function(){for(var _len4=arguments.length,sources=new Array(_len4),_key4=0;_key4<_len4;_key4++)sources[_key4]=arguments[_key4];return this.wikiWithOptions.apply(this,[undefined].concat(sources))}});var Util=function(){var toString,utilGetType="[object Object]"===(toString=Object.prototype.toString).call(new Map)?function(O){if(null===O)return"null";if(O instanceof Map)return"Map";if(O instanceof Set)return"Set";var baseType=_typeof(O);return"object"===baseType?toString.call(O).slice(8,-1):baseType}:function(O){if(null===O)return"null";var baseType=_typeof(O);return"object"===baseType?toString.call(O).slice(8,-1):baseType};function utilToEnum(obj){var pEnum=Object.create(null);if(obj instanceof Array)obj.forEach((function(val,i){return pEnum[String(val)]=i}));else if(obj instanceof Set)Array.from(obj).forEach((function(val,i){return pEnum[String(val)]=i}));else if(obj instanceof Map)obj.forEach((function(val,key){return pEnum[String(key)]=val}));else{if("object"!==_typeof(obj)||null===obj||Object.getPrototypeOf(obj)!==Object.prototype)throw new TypeError("Util.toEnum obj parameter must be an Array, Map, Set, or generic object");Object.assign(pEnum,obj)}return Object.freeze(pEnum)}function utilToStringTag(obj){return Object.prototype.toString.call(obj).slice(8,-1)}var _illegalSlugCharsRe=/[\x00-\x20!-/:-@[-^`{-\x9f]+/g,_isInvalidSlugRe=/^-*$/;var _illegalFilenameCharsRE=/[\x00-\x1f"#$%&'*+,/:;<=>?\\^`|\x7f-\x9f]+/g;var _markupCharsRe=/[!"#$&'*\-/<=>?@[\\\]^_`{|}~]/g,_hasMarkupCharsRe=new RegExp(_markupCharsRe.source),_markupCharsMap=utilToEnum({"!":"!",'"':""","#":"#",$:"$","&":"&","'":"'","*":"*","-":"-","/":"/","<":"<","=":"=",">":">","?":"?","@":"@","[":"[","\\":"\","]":"]","^":"^",_:"_","`":"`","{":"{","|":"|","}":"}","~":"~"});var _htmlCharsRe=/[&<>"'`]/g,_hasHtmlCharsRe=new RegExp(_htmlCharsRe.source),_htmlCharsMap=utilToEnum({"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"});function utilEscape(str){if(null==str)return"";var val=String(str);return val&&_hasHtmlCharsRe.test(val)?val.replace(_htmlCharsRe,(function(ch){return _htmlCharsMap[ch]})):val}var _escapedHtmlRe=/&(?:amp|#38|#x26|lt|#60|#x3c|gt|#62|#x3e|quot|#34|#x22|apos|#39|#x27|#96|#x60);/gi,_hasEscapedHtmlRe=new RegExp(_escapedHtmlRe.source,"i"),_escapedHtmlMap=utilToEnum({"&":"&","&":"&","&":"&","<":"<","<":"<","<":"<",">":">",">":">",">":">",""":'"',""":'"',""":'"',"'":"'","'":"'","'":"'","`":"`","`":"`"});function utilUnescape(str){if(null==str)return"";var val=String(str);return val&&_hasEscapedHtmlRe.test(val)?val.replace(_escapedHtmlRe,(function(entity){return _escapedHtmlMap[entity.toLowerCase()]})):val}var _nowSource=Has.performance?performance:Date;var _cssTimeRe=/^([+-]?(?:\d*\.)?\d+)([Mm]?[Ss])$/;var utilScrubEventKey=function(){var separatorKey,decimalKey;if("undefined"!=typeof Intl&&"function"==typeof Intl.NumberFormat){var match=(new Intl.NumberFormat).format(111111.5).match(/(\D*)\d+(\D*)/);match&&(separatorKey=match[1],decimalKey=match[2])}return separatorKey||decimalKey||(separatorKey=",",decimalKey="."),function(key){switch(key){case"Scroll":return"ScrollLock";case"Spacebar":return" ";case"Left":return"ArrowLeft";case"Right":return"ArrowRight";case"Up":return"ArrowUp";case"Down":return"ArrowDown";case"Del":return"Delete";case"Crsel":return"CrSel";case"Exsel":return"ExSel";case"Esc":return"Escape";case"Apps":return"ContextMenu";case"Nonconvert":return"NonConvert";case"MediaNextTrack":return"MediaTrackNext";case"MediaPreviousTrack":return"MediaTrackPrevious";case"VolumeUp":return"AudioVolumeUp";case"VolumeDown":return"AudioVolumeDown";case"VolumeMute":return"AudioVolumeMute";case"Zoom":return"ZoomToggle";case"SelectMedia":case"MediaSelect":return"LaunchMediaPlayer";case"Add":return"+";case"Divide":return"/";case"Multiply":return"*";case"Subtract":return"-";case"Decimal":return decimalKey;case"Separator":return separatorKey}return key}}(),utilHasMediaQuery="function"!=typeof window.matchMedia?function(){return!1}:function(mediaQuery){return window.matchMedia(mediaQuery).matches};return Object.freeze(Object.defineProperties({},{getType:{value:utilGetType},isBoolean:{value:function(obj){return"boolean"==typeof obj||"string"==typeof obj&&("true"===obj||"false"===obj)}},isIterable:{value:function(obj){return null!=obj&&"function"==typeof obj[Symbol.iterator]}},isNumeric:{value:function(obj){var num;switch(_typeof(obj)){case"number":num=obj;break;case"string":num=Number(obj);break;default:return!1}return!Number.isNaN(num)&&Number.isFinite(num)}},sameValueZero:{value:function(a,b){return a===b||a!=a&&b!=b}},toEnum:{value:utilToEnum},toStringTag:{value:utilToStringTag},slugify:{value:function(str){var base=String(str).trim(),_legacy=base.replace(/[^\w\s\u2013\u2014-]+/g,"").replace(/[_\s\u2013\u2014-]+/g,"-").toLocaleLowerCase();return _isInvalidSlugRe.test(_legacy)?base.replace(_illegalSlugCharsRe,"").replace(/[_\s\u2013\u2014-]+/g,"-"):_legacy}},sanitizeFilename:{value:function(str){return String(str).trim().replace(_illegalFilenameCharsRE,"")}},escapeMarkup:{value:function(str){if(null==str)return"";var val=String(str);return val&&_hasMarkupCharsRe.test(val)?val.replace(_markupCharsRe,(function(ch){return _markupCharsMap[ch]})):val}},escape:{value:utilEscape},unescape:{value:utilUnescape},charAndPosAt:{value:function(text,position){var str=String(text),pos=Math.trunc(position),code=str.charCodeAt(pos);if(Number.isNaN(code))return{char:"",start:-1,end:-1};var retval={char:str.charAt(pos),start:pos,end:pos};if(code<55296||code>57343)return retval;if(code>=55296&&code<=56319){var nextPos=pos+1;if(nextPos>=str.length)return retval;var nextCode=str.charCodeAt(nextPos);return nextCode<56320||nextCode>57343||(retval.char=retval.char+str.charAt(nextPos),retval.end=nextPos),retval}if(0===pos)return retval;var prevPos=pos-1,prevCode=str.charCodeAt(prevPos);return prevCode<55296||prevCode>56319||(retval.char=str.charAt(prevPos)+retval.char,retval.start=prevPos),retval}},now:{value:function(){return _nowSource.now()}},fromCssTime:{value:function(cssTime){var match=_cssTimeRe.exec(String(cssTime));if(null===match)throw new SyntaxError('invalid time value syntax: "'.concat(cssTime,'"'));var msec=Number(match[1]);if(1===match[2].length&&(msec*=1e3),Number.isNaN(msec)||!Number.isFinite(msec))throw new RangeError('invalid time value: "'.concat(cssTime,'"'));return msec}},toCssTime:{value:function(msec){if("number"!=typeof msec||Number.isNaN(msec)||!Number.isFinite(msec)){var what;switch(_typeof(msec)){case"string":what='"'.concat(msec,'"');break;case"number":what=String(msec);break;default:what=utilToStringTag(msec)}throw new Error("invalid milliseconds: ".concat(what))}return"".concat(msec,"ms")}},fromCssProperty:{value:function(cssName){if(!cssName.includes("-"))switch(cssName){case"bgcolor":return"backgroundColor";case"float":return"cssFloat";default:return cssName}return("-ms-"===cssName.slice(0,4)?cssName.slice(1):cssName).split("-").map((function(part,i){return 0===i?part:part.toUpperFirst()})).join("")}},parseUrl:{value:function(url){var el=document.createElement("a"),queryObj=Object.create(null);el.href=url,el.search&&el.search.replace(/^\?/,"").splitOrEmpty(/(?:&(?:amp;)?|;)/).forEach((function(query){var _query$split2=_slicedToArray(query.split("="),2),key=_query$split2[0],value=_query$split2[1];queryObj[key]=value}));var pathname=el.host&&"/"!==el.pathname[0]?"/".concat(el.pathname):el.pathname;return{href:el.href,protocol:el.protocol,host:el.host,hostname:el.hostname,port:el.port,path:"".concat(pathname).concat(el.search),pathname:pathname,query:el.search,search:el.search,queries:queryObj,searches:queryObj,hash:el.hash}}},newExceptionFrom:{value:function(original,exceptionType,override){if("object"!==_typeof(original)||null===original)throw new Error("Util.newExceptionFrom original parameter must be an object");if("function"!=typeof exceptionType)throw new Error("Util.newExceptionFrom exceptionType parameter must be an error type constructor");var ex=new exceptionType(original.message);void 0!==original.name&&(ex.name=original.name),void 0!==original.code&&(ex.code=original.code),void 0!==original.columnNumber&&(ex.columnNumber=original.columnNumber),void 0!==original.description&&(ex.description=original.description),void 0!==original.fileName&&(ex.fileName=original.fileName),void 0!==original.lineNumber&&(ex.lineNumber=original.lineNumber),void 0!==original.number&&(ex.number=original.number),void 0!==original.stack&&(ex.stack=original.stack);var overrideType=_typeof(override);if("undefined"!==overrideType)if("object"===overrideType&&null!==override)Object.assign(ex,override);else{if("string"!==overrideType)throw new Error("Util.newExceptionFrom override parameter must be an object or string");ex.message=override}return ex}},scrubEventKey:{value:utilScrubEventKey},hasMediaQuery:{value:utilHasMediaQuery},random:{value:Math.random},entityEncode:{value:utilEscape},entityDecode:{value:utilUnescape},evalExpression:{value:function(){return Scripting.evalJavaScript.apply(Scripting,arguments)}},evalStatements:{value:function(){return Scripting.evalJavaScript.apply(Scripting,arguments)}}}))}(),SimpleStore=(_adapters=[],_initialized=null,Object.freeze(Object.defineProperties({},{adapters:{value:_adapters},create:{value:function(storageId,persistent){if(_initialized)return _initialized.create(storageId,persistent);for(var i=0;i<_adapters.length;++i)if(_adapters[i].init(storageId,persistent))return(_initialized=_adapters[i]).create(storageId,persistent);throw new Error("no valid storage adapters found")}}}))),_adapters,_initialized,_ok,_WebStorageAdapter;SimpleStore.adapters.push((_ok=!1,_WebStorageAdapter=function(){function _WebStorageAdapter(storageId,persistent){_classCallCheck(this,_WebStorageAdapter);var prefix="".concat(storageId,"."),engine=null,name=null;persistent?(engine=window.localStorage,name="localStorage"):(engine=window.sessionStorage,name="sessionStorage"),Object.defineProperties(this,{_engine:{value:engine},_prefix:{value:prefix},_prefixRe:{value:new RegExp("^".concat(RegExp.escape(prefix)))},name:{value:name},id:{value:storageId},persistent:{value:!!persistent}})}return _createClass(_WebStorageAdapter,[{key:"length",get:function(){return this.keys().length}},{key:"size",value:function(){return this.keys().length}},{key:"keys",value:function(){for(var keys=[],i=0;i<this._engine.length;++i){var key=this._engine.key(i);this._prefixRe.test(key)&&keys.push(key.replace(this._prefixRe,""))}return keys}},{key:"has",value:function(key){return!("string"!=typeof key||!key)&&this._engine.hasOwnProperty(this._prefix+key)}},{key:"get",value:function(key){if("string"!=typeof key||!key)return null;var value=this._engine.getItem(this._prefix+key);return null==value?null:_WebStorageAdapter._deserialize(value)}},{key:"set",value:function(key,value){if("string"!=typeof key||!key)return!1;try{this._engine.setItem(this._prefix+key,_WebStorageAdapter._serialize(value))}catch(ex){if(/quota.?(?:exceeded|reached)/i.test(ex.name+ex.message))throw Util.newExceptionFrom(ex,Error,"".concat(this.name," quota exceeded"));throw ex}return!0}},{key:"delete",value:function(key){return!("string"!=typeof key||!key||(this._engine.removeItem(this._prefix+key),0))}},{key:"clear",value:function(){for(var keys=this.keys(),i=0,iend=keys.length;i<iend;++i)this.delete(keys[i]);return!0}}],[{key:"_serialize",value:function(obj){return LZString.compressToUTF16(JSON.stringify(obj))}},{key:"_deserialize",value:function(str){return JSON.parse(LZString.decompressFromUTF16(str))}}]),_WebStorageAdapter}(),Object.freeze(Object.defineProperties({},{init:{value:function(){function hasWebStorage(storeId){try{var store=window[storeId],tid="_sc_".concat(String(Date.now()));store.setItem(tid,tid);var result=store.getItem(tid)===tid;return store.removeItem(tid),result}catch(ex){}return!1}return _ok=hasWebStorage("localStorage")&&hasWebStorage("sessionStorage")}},create:{value:function(storageId,persistent){if(!_ok)throw new Error("adapter not initialized");return new _WebStorageAdapter(storageId,persistent)}}})))),SimpleStore.adapters.push(function(){var _MAX_EXPIRY="Tue, 19 Jan 2038 03:14:07 GMT",_MIN_EXPIRY="Thu, 01 Jan 1970 00:00:00 GMT",_ok=!1,_CookieAdapter=function(){function _CookieAdapter(storageId,persistent){_classCallCheck(this,_CookieAdapter);var prefix="".concat(storageId).concat(persistent?"!":"*",".");Object.defineProperties(this,{_prefix:{value:prefix},_prefixRe:{value:new RegExp("^".concat(RegExp.escape(prefix)))},name:{value:"cookie"},id:{value:storageId},persistent:{value:!!persistent}})}return _createClass(_CookieAdapter,[{key:"length",get:function(){return this.keys().length}},{key:"size",value:function(){return this.keys().length}},{key:"keys",value:function(){if(""===document.cookie)return[];for(var cookies=document.cookie.split(/;\s*/),keys=[],i=0;i<cookies.length;++i){var kvPair=cookies[i].split("="),key=decodeURIComponent(kvPair[0]);if(this._prefixRe.test(key))""!==decodeURIComponent(kvPair[1])&&keys.push(key.replace(this._prefixRe,""))}return keys}},{key:"has",value:function(key){return!("string"!=typeof key||!key)&&null!==_CookieAdapter._getCookie(this._prefix+key)}},{key:"get",value:function(key){if("string"!=typeof key||!key)return null;var value=_CookieAdapter._getCookie(this._prefix+key);return null===value?null:_CookieAdapter._deserialize(value)}},{key:"set",value:function(key,value){if("string"!=typeof key||!key)return!1;try{if(_CookieAdapter._setCookie(this._prefix+key,_CookieAdapter._serialize(value),this.persistent?"Tue, 19 Jan 2038 03:14:07 GMT":undefined),!this.has(key))throw new Error("unknown validation error during set")}catch(ex){throw Util.newExceptionFrom(ex,Error,"cookie error: ".concat(ex.message))}return!0}},{key:"delete",value:function(key){if("string"!=typeof key||!key||!this.has(key))return!1;try{if(_CookieAdapter._setCookie(this._prefix+key,undefined,_MIN_EXPIRY),this.has(key))throw new Error("unknown validation error during delete")}catch(ex){throw Util.newExceptionFrom(ex,Error,"cookie error: ".concat(ex.message))}return!0}},{key:"clear",value:function(){for(var keys=this.keys(),i=0,iend=keys.length;i<iend;++i)this.delete(keys[i]);return!0}}],[{key:"_getCookie",value:function(prefixedKey){if(!prefixedKey||""===document.cookie)return null;for(var cookies=document.cookie.split(/;\s*/),i=0;i<cookies.length;++i){var kvPair=cookies[i].split("=");if(prefixedKey===decodeURIComponent(kvPair[0]))return decodeURIComponent(kvPair[1])||null}return null}},{key:"_setCookie",value:function(prefixedKey,value,expiry){if(prefixedKey){var payload="".concat(encodeURIComponent(prefixedKey),"=");null!=value&&(payload+=encodeURIComponent(value)),null!=expiry&&(payload+="; expires=".concat(expiry)),payload+="; path=/",document.cookie=payload}}},{key:"_serialize",value:function(obj){return LZString.compressToBase64(JSON.stringify(obj))}},{key:"_deserialize",value:function(str){return JSON.parse(LZString.decompressFromBase64(str))}}]),_CookieAdapter}();return Object.freeze(Object.defineProperties({},{init:{value:function(storageId){try{var tid="_sc_".concat(String(Date.now()));_CookieAdapter._setCookie(tid,_CookieAdapter._serialize(tid),undefined),_ok=_CookieAdapter._deserialize(_CookieAdapter._getCookie(tid))===tid,_CookieAdapter._setCookie(tid,undefined,_MIN_EXPIRY)}catch(ex){_ok=!1}return _ok&&function(storageId){if(""===document.cookie)return;for(var oldPrefix="".concat(storageId,"."),oldPrefixRe=new RegExp("^".concat(RegExp.escape(oldPrefix))),persistPrefix="".concat(storageId,"!."),sessionPrefix="".concat(storageId,"*."),sessionTestRe=/\.(?:state|rcWarn)$/,cookies=document.cookie.split(/;\s*/),i=0;i<cookies.length;++i){var kvPair=cookies[i].split("="),key=decodeURIComponent(kvPair[0]);if(oldPrefixRe.test(key)){var value=decodeURIComponent(kvPair[1]);""!==value&&function(){var persist=!sessionTestRe.test(key);_CookieAdapter._setCookie(key,undefined,_MIN_EXPIRY),_CookieAdapter._setCookie(key.replace(oldPrefixRe,(function(){return persist?persistPrefix:sessionPrefix})),value,persist?_MAX_EXPIRY:undefined)}()}}}(storageId),_ok}},create:{value:function(storageId,persistent){if(!_ok)throw new Error("adapter not initialized");return new _CookieAdapter(storageId,persistent)}}}))}());var DebugView=function(){function DebugView(parent,type,name,title){_classCallCheck(this,DebugView),Object.defineProperties(this,{parent:{value:parent},view:{value:document.createElement("span")},break:{value:document.createElement("wbr")}}),jQuery(this.view).attr({title:title,"aria-label":title,"data-type":null!=type?type:"","data-name":null!=name?name:""}).addClass("debug"),jQuery(this.break).addClass("debug hidden"),this.parent.appendChild(this.view),this.parent.appendChild(this.break)}return _createClass(DebugView,[{key:"output",get:function(){return this.view}},{key:"type",get:function(){return this.view.getAttribute("data-type")},set:function(type){this.view.setAttribute("data-type",null!=type?type:"")}},{key:"name",get:function(){return this.view.getAttribute("data-name")},set:function(name){this.view.setAttribute("data-name",null!=name?name:"")}},{key:"title",get:function(){return this.view.title},set:function(title){this.view.title=title}},{key:"append",value:function(el){return jQuery(this.view).append(el),this}},{key:"modes",value:function(options){if(null==options){var current={};return this.view.className.splitOrEmpty(/\s+/).forEach((function(name){"debug"!==name&&(current[name]=!0)})),current}if("object"===_typeof(options))return Object.keys(options).forEach((function(name){this[options[name]?"addClass":"removeClass"](name)}),jQuery(this.view)),this;throw new Error("DebugView.prototype.modes options parameter must be an object or null/undefined")}},{key:"remove",value:function(){var $view=jQuery(this.view);this.view.hasChildNodes()&&$view.contents().appendTo(this.parent),$view.remove(),jQuery(this.break).remove()}}],[{key:"isEnabled",value:function(){return"enabled"===jQuery(document.documentElement).attr("data-debug-view")}},{key:"enable",value:function(){jQuery(document.documentElement).attr("data-debug-view","enabled"),jQuery.event.trigger(":debugviewupdate")}},{key:"disable",value:function(){jQuery(document.documentElement).removeAttr("data-debug-view"),jQuery.event.trigger(":debugviewupdate")}},{key:"toggle",value:function(){"enabled"===jQuery(document.documentElement).attr("data-debug-view")?DebugView.disable():DebugView.enable()}}]),DebugView}(),NodeTyper=function(){var NodeTyper=function(){function NodeTyper(config){if(_classCallCheck(this,NodeTyper),"object"!==_typeof(config)||null===config)throw new Error("config parameter must be an object (received: ".concat(Util.getType(config),")"));if(!(config.hasOwnProperty("targetNode")&&config.targetNode instanceof Node))throw new Error('config parameter object "targetNode" property must be a node');Object.defineProperties(this,{node:{value:config.targetNode},childNodes:{value:[]},nodeValue:{writable:!0,value:""},appendTo:{writable:!0,value:config.parentNode||null},classNames:{writable:!0,value:config.classNames||null},finished:{writable:!0,value:!1}});var childNode,node=this.node;for(node.nodeValue&&(this.nodeValue=node.nodeValue,node.nodeValue="");null!==(childNode=node.firstChild);)this.childNodes.push(new NodeTyper({targetNode:childNode,parentNode:node,classNames:this.classNames})),node.removeChild(childNode)}return _createClass(NodeTyper,[{key:"finish",value:function(){for(;this.type(!0););return!1}},{key:"type",value:function(flush){if(this.finished)return!1;if(this.appendTo){if(this.appendTo.appendChild(this.node),this.appendTo=null,this.node.nodeType!==Node.ELEMENT_NODE&&this.node.nodeType!==Node.TEXT_NODE||"none"===jQuery(this.node.parentNode).css("display"))return this.finish();this.node.parentNode&&this.classNames&&jQuery(this.node.parentNode).addClass(this.classNames)}if(this.nodeValue){if(flush)this.node.nodeValue+=this.nodeValue,this.nodeValue="";else{var _Util$charAndPosAt=Util.charAndPosAt(this.nodeValue,0),char=_Util$charAndPosAt.char,start=_Util$charAndPosAt.start,end=_Util$charAndPosAt.end;this.node.nodeValue+=char,this.nodeValue=this.nodeValue.slice(1+end-start)}return!0}this.classNames&&(jQuery(this.node.parentNode).removeClass(this.classNames),this.classNames=null);for(var childNodes=this.childNodes;childNodes.length>0;){if(childNodes[0].type())return!0;childNodes.shift()}return this.finished=!0,!1}}]),NodeTyper}();return NodeTyper}(),PRNGWrapper=function(){function PRNGWrapper(seed,useEntropy){_classCallCheck(this,PRNGWrapper),Object.defineProperties(this,new Math.seedrandom(seed,useEntropy,(function(prng,seed){return{_prng:{value:prng},seed:{writable:!0,value:seed},pull:{writable:!0,value:0},random:{value:function(){return++this.pull,this._prng()}}}})))}return _createClass(PRNGWrapper,null,[{key:"marshal",value:function(prng){if(!prng||!prng.hasOwnProperty("seed")||!prng.hasOwnProperty("pull"))throw new Error("PRNG is missing required data");return{seed:prng.seed,pull:prng.pull}}},{key:"unmarshal",value:function(prngObj){if(!prngObj||!prngObj.hasOwnProperty("seed")||!prngObj.hasOwnProperty("pull"))throw new Error("PRNG object is missing required data");for(var prng=new PRNGWrapper(prngObj.seed,!1),i=prngObj.pull;i>0;--i)prng.random();return prng}}]),PRNGWrapper}(),StyleWrapper=(_imageMarkupRe=new RegExp(Patterns.cssImage,"g"),_hasImageMarkupRe=new RegExp(Patterns.cssImage),function(){function StyleWrapper(style){if(_classCallCheck(this,StyleWrapper),null==style)throw new TypeError("StyleWrapper style parameter must be an HTMLStyleElement object");Object.defineProperties(this,{style:{value:style}})}return _createClass(StyleWrapper,[{key:"isEmpty",value:function(){return 0===this.style.cssRules.length}},{key:"set",value:function(rawCss){this.clear(),this.add(rawCss)}},{key:"add",value:function(rawCss){var css=rawCss;_hasImageMarkupRe.test(css)&&(_imageMarkupRe.lastIndex=0,css=css.replace(_imageMarkupRe,(function(wikiImage){var markup=Wikifier.helpers.parseSquareBracketedMarkup({source:wikiImage,matchStart:0});if(markup.hasOwnProperty("error")||markup.pos<wikiImage.length)return wikiImage;var source=markup.source;if("data:"!==source.slice(0,5)&&Story.has(source)){var passage=Story.get(source);passage.tags.includes("Twine.image")&&(source=passage.text.trim())}return'url("'.concat(source.replace(/"/g,"%22"),'")')}))),this.style.styleSheet?this.style.styleSheet.cssText+=css:this.style.appendChild(document.createTextNode(css))}},{key:"clear",value:function(){this.style.styleSheet?this.style.styleSheet.cssText="":jQuery(this.style).empty()}}]),StyleWrapper}()),_imageMarkupRe,_hasImageMarkupRe,Diff=(Op=Util.toEnum({Delete:0,SpliceArray:1,Copy:2,CopyDate:3}),Object.freeze(Object.defineProperties({},{Op:{value:Op},diff:{value:function diff(orig,dest){for(var aOpRef,objToString=Object.prototype.toString,origIsArray=orig instanceof Array,keys=[].concat(Object.keys(orig),Object.keys(dest)).sort().filter((function(val,i,arr){return 0===i||arr[i-1]!==val})),diffed={},keyIsAOpRef=function(key){return key===aOpRef},i=0,klen=keys.length;i<klen;++i){var key=keys[i],origP=orig[key],destP=dest[key];if(orig.hasOwnProperty(key))if(dest.hasOwnProperty(key)){if(origP===destP)continue;if(_typeof(origP)===_typeof(destP))if("function"==typeof origP)origP.toString()!==destP.toString()&&(diffed[key]=[Op.Copy,destP]);else if("object"!==_typeof(origP)||null===origP)diffed[key]=[Op.Copy,destP];else{var origPType=objToString.call(origP);if(origPType===objToString.call(destP))if(origP instanceof Date)Number(origP)!==Number(destP)&&(diffed[key]=[Op.Copy,clone(destP)]);else if(origP instanceof Map)diffed[key]=[Op.Copy,clone(destP)];else if(origP instanceof RegExp)origP.toString()!==destP.toString()&&(diffed[key]=[Op.Copy,clone(destP)]);else if(origP instanceof Set)diffed[key]=[Op.Copy,clone(destP)];else if("[object Object]"!==origPType)diffed[key]=[Op.Copy,clone(destP)];else{var recurse=diff(origP,destP);null!==recurse&&(diffed[key]=recurse)}else diffed[key]=[Op.Copy,clone(destP)]}else diffed[key]=[Op.Copy,"object"!==_typeof(destP)||null===destP?destP:clone(destP)]}else if(origIsArray&&Util.isNumeric(key)){var nKey=Number(key);if(!aOpRef){aOpRef="";do{aOpRef+="~"}while(keys.some(keyIsAOpRef));diffed[aOpRef]=[Op.SpliceArray,nKey,nKey]}nKey<diffed[aOpRef][1]&&(diffed[aOpRef][1]=nKey),nKey>diffed[aOpRef][2]&&(diffed[aOpRef][2]=nKey)}else diffed[key]=Op.Delete;else diffed[key]=[Op.Copy,"object"!==_typeof(destP)||null===destP?destP:clone(destP)]}return Object.keys(diffed).length>0?diffed:null}},patch:{value:function patch(orig,diffed){for(var keys=Object.keys(diffed||{}),patched=clone(orig),i=0,klen=keys.length;i<klen;++i){var key=keys[i],diffedP=diffed[key];if(diffedP===Op.Delete)delete patched[key];else if(diffedP instanceof Array)switch(diffedP[0]){case Op.SpliceArray:patched.splice(diffedP[1],diffedP[2]-diffedP[1]+1);break;case Op.Copy:patched[key]=clone(diffedP[1]);break;case Op.CopyDate:patched[key]=new Date(diffedP[1])}else patched[key]=patch(patched[key],diffedP)}return patched}}}))),Op,L10n=(_patternRe=/\{\w+\}/g,_hasPatternRe=new RegExp(_patternRe.source),Object.freeze(Object.defineProperties({},{init:{value:function(){strings&&Object.keys(strings).length>0&&Object.keys(l10nStrings).forEach((function(id){try{var value;switch(id){case"identity":value=strings.identity;break;case"aborting":value=strings.aborting;break;case"cancel":value=strings.cancel;break;case"close":value=strings.close;break;case"ok":value=strings.ok;break;case"errorTitle":value=strings.errors.title;break;case"errorNonexistentPassage":value=strings.errors.nonexistentPassage;break;case"errorSaveMissingData":value=strings.errors.saveMissingData;break;case"errorSaveIdMismatch":value=strings.errors.saveIdMismatch;break;case"warningDegraded":value=strings.warnings.degraded;break;case"debugViewTitle":value=strings.debugView.title;break;case"debugViewToggle":value=strings.debugView.toggle;break;case"uiBarToggle":value=strings.uiBar.toggle;break;case"uiBarBackward":value=strings.uiBar.backward;break;case"uiBarForward":value=strings.uiBar.forward;break;case"uiBarJumpto":value=strings.uiBar.jumpto;break;case"jumptoTitle":value=strings.jumpto.title;break;case"jumptoTurn":value=strings.jumpto.turn;break;case"jumptoUnavailable":value=strings.jumpto.unavailable;break;case"savesTitle":value=strings.saves.title;break;case"savesDisallowed":value=strings.saves.disallowed;break;case"savesIncapable":value=strings.saves.incapable;break;case"savesLabelAuto":value=strings.saves.labelAuto;break;case"savesLabelDelete":value=strings.saves.labelDelete;break;case"savesLabelExport":value=strings.saves.labelExport;break;case"savesLabelImport":value=strings.saves.labelImport;break;case"savesLabelLoad":value=strings.saves.labelLoad;break;case"savesLabelClear":value=strings.saves.labelClear;break;case"savesLabelSave":value=strings.saves.labelSave;break;case"savesLabelSlot":value=strings.saves.labelSlot;break;case"savesUnavailable":value=strings.saves.unavailable;break;case"savesUnknownDate":value=strings.saves.unknownDate;break;case"settingsTitle":value=strings.settings.title;break;case"settingsOff":value=strings.settings.off;break;case"settingsOn":value=strings.settings.on;break;case"settingsReset":value=strings.settings.reset;break;case"restartTitle":value=strings.restart.title;break;case"restartPrompt":value=strings.restart.prompt;break;case"shareTitle":value=strings.share.title;break;case"alertTitle":break;case"autoloadTitle":value=strings.autoload.title;break;case"autoloadCancel":value=strings.autoload.cancel;break;case"autoloadOk":value=strings.autoload.ok;break;case"autoloadPrompt":value=strings.autoload.prompt;break;case"macroBackText":value=strings.macros.back.text;break;case"macroReturnText":value=strings.macros.return.text}value&&(l10nStrings[id]=value.replace(/%\w+%/g,(function(pat){return"{".concat(pat.slice(1,-1),"}")})))}catch(ex){}}))}},get:{value:function(ids,overrides){if(!ids)return"";var selectedId,id=((Array.isArray(ids)?ids:[ids]).some((function(id){return!!l10nStrings.hasOwnProperty(id)&&(selectedId=id,!0)})),selectedId);if(!id)return"";for(var processed=l10nStrings[id],iteration=0;_hasPatternRe.test(processed);){if(++iteration>50)throw new Error("L10n.get exceeded maximum replacement iterations, probable infinite loop");_patternRe.lastIndex=0,processed=processed.replace(_patternRe,(function(pat){var subId=pat.slice(1,-1);return overrides&&overrides.hasOwnProperty(subId)?overrides[subId]:l10nStrings.hasOwnProperty(subId)?l10nStrings[subId]:void 0}))}return processed}}}))),_patternRe,_hasPatternRe,strings={errors:{},warnings:{},debugView:{},uiBar:{},jumpto:{},saves:{},settings:{},restart:{},share:{},autoload:{},macros:{back:{},return:{}}},l10nStrings={identity:"game",aborting:"Aborting",cancel:"Cancel",close:"Close",ok:"OK",errorTitle:"Error",errorToggle:"Toggle the error view",errorNonexistentPassage:'the passage "{passage}" does not exist',errorSaveDiskLoadFailed:"failed to load save file from disk",errorSaveMissingData:"save is missing required data. Either the loaded file is not a save or the save has become corrupted",errorSaveIdMismatch:"save is from the wrong {identity}",_warningIntroLacking:"Your browser either lacks or has disabled",_warningOutroDegraded:", so this {identity} is running in a degraded mode. You may be able to continue, however, some parts may not work properly.",warningNoWebStorage:"{_warningIntroLacking} the Web Storage API{_warningOutroDegraded}",warningDegraded:"{_warningIntroLacking} some of the capabilities required by this {identity}{_warningOutroDegraded}",debugBarToggle:"Toggle the debug bar",debugBarNoWatches:"— no watches set —",debugBarAddWatch:"Add watch",debugBarDeleteWatch:"Delete watch",debugBarWatchAll:"Watch all",debugBarWatchNone:"Delete all",debugBarLabelAdd:"Add",debugBarLabelWatch:"Watch",debugBarLabelTurn:"Turn",debugBarLabelViews:"Views",debugBarViewsToggle:"Toggle the debug views",debugBarWatchToggle:"Toggle the watch panel",uiBarToggle:"Toggle the UI bar",uiBarBackward:"Go backward within the {identity} history",uiBarForward:"Go forward within the {identity} history",uiBarJumpto:"Jump to a specific point within the {identity} history",jumptoTitle:"Jump To",jumptoTurn:"Turn",jumptoUnavailable:"No jump points currently available…",savesTitle:"Saves",savesDisallowed:"Saving has been disallowed on this passage.",savesIncapable:"{_warningIntroLacking} the capabilities required to support saves, so saves have been disabled for this session.",savesLabelAuto:"Autosave",savesLabelDelete:"Delete",savesLabelExport:"Save to Disk…",savesLabelImport:"Load from Disk…",savesLabelLoad:"Load",savesLabelClear:"Delete All",savesLabelSave:"Save",savesLabelSlot:"Slot",savesUnavailable:"No save slots found…",savesUnknownDate:"unknown",settingsTitle:"Settings",settingsOff:"Off",settingsOn:"On",settingsReset:"Reset to Defaults",restartTitle:"Restart",restartPrompt:"Are you sure that you want to restart? Unsaved progress will be lost.",shareTitle:"Share",alertTitle:"Alert",autoloadTitle:"Autoload",autoloadCancel:"Go to start",autoloadOk:"Load autosave",autoloadPrompt:"An autosave exists. Load it now or go to the start?",macroBackText:"Back",macroReturnText:"Return"},Config=(_debug=!1,_addVisitedLinkClass=!1,_cleanupWikifierOutput=!1,_loadDelay=0,_audioPauseOnFadeToZero=!0,_audioPreloadMetadata=!0,_historyControls=!0,_historyMaxStates=40,_macrosIfAssignmentError=!0,_macrosMaxLoopIterations=1e3,_macrosTypeSkipKey=" ",_macrosTypeVisitedPassages=!0,_passagesDisplayTitles=!1,_passagesNobr=!1,_savesId="untitled-story",_savesSlots=8,_savesTryDiskOnMobile=!0,_uiStowBarInitially=800,_uiUpdateStoryElements=!0,_errHistoryModeDeprecated="Config.history.mode has been deprecated and is no longer used by SugarCube, please remove it from your code",Object.freeze({get debug(){return _debug},set debug(value){_debug=Boolean(value)},get addVisitedLinkClass(){return _addVisitedLinkClass},set addVisitedLinkClass(value){_addVisitedLinkClass=Boolean(value)},get cleanupWikifierOutput(){return _cleanupWikifierOutput},set cleanupWikifierOutput(value){_cleanupWikifierOutput=Boolean(value)},get loadDelay(){return _loadDelay},set loadDelay(value){if(!Number.isSafeInteger(value)||value<0)throw new RangeError("Config.loadDelay must be a non-negative integer");_loadDelay=value},audio:Object.freeze({get pauseOnFadeToZero(){return _audioPauseOnFadeToZero},set pauseOnFadeToZero(value){_audioPauseOnFadeToZero=Boolean(value)},get preloadMetadata(){return _audioPreloadMetadata},set preloadMetadata(value){_audioPreloadMetadata=Boolean(value)}}),history:Object.freeze({get controls(){return _historyControls},set controls(value){var controls=Boolean(value);if(1===_historyMaxStates&&controls)throw new Error("Config.history.controls must be false when Config.history.maxStates is 1");_historyControls=controls},get maxStates(){return _historyMaxStates},set maxStates(value){if(!Number.isSafeInteger(value)||value<1)throw new RangeError("Config.history.maxStates must be a positive integer");_historyMaxStates=value,_historyControls&&1===value&&(_historyControls=!1)},get mode(){throw new Error(_errHistoryModeDeprecated)},set mode(_){throw new Error(_errHistoryModeDeprecated)},get tracking(){throw new Error("Config.history.tracking has been deprecated, use Config.history.maxStates instead")},set tracking(_){throw new Error("Config.history.tracking has been deprecated, use Config.history.maxStates instead")}}),macros:Object.freeze({get ifAssignmentError(){return _macrosIfAssignmentError},set ifAssignmentError(value){_macrosIfAssignmentError=Boolean(value)},get maxLoopIterations(){return _macrosMaxLoopIterations},set maxLoopIterations(value){if(!Number.isSafeInteger(value)||value<1)throw new RangeError("Config.macros.maxLoopIterations must be a positive integer");_macrosMaxLoopIterations=value},get typeSkipKey(){return _macrosTypeSkipKey},set typeSkipKey(value){_macrosTypeSkipKey=String(value)},get typeVisitedPassages(){return _macrosTypeVisitedPassages},set typeVisitedPassages(value){_macrosTypeVisitedPassages=Boolean(value)}}),navigation:Object.freeze({get override(){return _navigationOverride},set override(value){if(!(null==value||value instanceof Function))throw new TypeError("Config.navigation.override must be a function or null/undefined (received: ".concat(Util.getType(value),")"));_navigationOverride=value}}),passages:Object.freeze({get descriptions(){return _passagesDescriptions},set descriptions(value){if(null!=value){var valueType=Util.getType(value);if("boolean"!==valueType&&"Object"!==valueType&&"function"!==valueType)throw new TypeError("Config.passages.descriptions must be a boolean, object, function, or null/undefined (received: ".concat(valueType,")"))}_passagesDescriptions=value},get displayTitles(){return _passagesDisplayTitles},set displayTitles(value){_passagesDisplayTitles=Boolean(value)},get nobr(){return _passagesNobr},set nobr(value){_passagesNobr=Boolean(value)},get onProcess(){return _passagesOnProcess},set onProcess(value){if(null!=value){var valueType=Util.getType(value);if("function"!==valueType)throw new TypeError("Config.passages.onProcess must be a function or null/undefined (received: ".concat(valueType,")"))}_passagesOnProcess=value},get start(){return _passagesStart},set start(value){if(null!=value){var valueType=Util.getType(value);if("string"!==valueType)throw new TypeError("Config.passages.start must be a string or null/undefined (received: ".concat(valueType,")"))}_passagesStart=value},get transitionOut(){return _passagesTransitionOut},set transitionOut(value){if(null!=value){var valueType=Util.getType(value);if("string"!==valueType&&("number"!==valueType||!Number.isSafeInteger(value)||value<0))throw new TypeError("Config.passages.transitionOut must be a string, non-negative integer, or null/undefined (received: ".concat(valueType,")"))}_passagesTransitionOut=value}}),saves:Object.freeze({get autoload(){return _savesAutoload},set autoload(value){if(null!=value){var valueType=Util.getType(value);if("boolean"!==valueType&&"string"!==valueType&&"function"!==valueType)throw new TypeError("Config.saves.autoload must be a boolean, string, function, or null/undefined (received: ".concat(valueType,")"))}_savesAutoload=value},get autosave(){return _savesAutosave},set autosave(value){if(null!=value){var valueType=Util.getType(value);if("string"===valueType)return void(_savesAutosave=[value]);if("boolean"!==valueType&&("Array"!==valueType||!value.every((function(item){return"string"==typeof item})))&&"function"!==valueType)throw new TypeError("Config.saves.autosave must be a boolean, Array<string>, function, or null/undefined (received: ".concat(valueType).concat("Array"===valueType?"<any>":"",")"))}_savesAutosave=value},get id(){return _savesId},set id(value){if("string"!=typeof value||""===value)throw new TypeError("Config.saves.id must be a non-empty string (received: ".concat(Util.getType(value),")"));_savesId=value},get isAllowed(){return _savesIsAllowed},set isAllowed(value){if(!(null==value||value instanceof Function))throw new TypeError("Config.saves.isAllowed must be a function or null/undefined (received: ".concat(Util.getType(value),")"));_savesIsAllowed=value},get slots(){return _savesSlots},set slots(value){if(!Number.isSafeInteger(value)||value<0)throw new TypeError("Config.saves.slots must be a non-negative integer (received: ".concat(Util.getType(value),")"));_savesSlots=value},get tryDiskOnMobile(){return _savesTryDiskOnMobile},set tryDiskOnMobile(value){_savesTryDiskOnMobile=Boolean(value)},get version(){return _savesVersion},set version(value){_savesVersion=value},get onLoad(){throw new Error("Config.saves.onLoad has been deprecated, use the Save.onLoad API instead")},set onLoad(value){console.warn("Config.saves.onLoad has been deprecated, use the Save.onLoad API instead"),Save.onLoad.add(value)},get onSave(){throw new Error("Config.saves.onSave has been deprecated, use the Save.onSave API instead")},set onSave(value){console.warn("Config.saves.onSave has been deprecated, use the Save.onSave API instead"),Save.onSave.add(value)}}),ui:Object.freeze({get stowBarInitially(){return _uiStowBarInitially},set stowBarInitially(value){var valueType=Util.getType(value);if("boolean"!==valueType&&("number"!==valueType||!Number.isSafeInteger(value)||value<0))throw new TypeError("Config.ui.stowBarInitially must be a boolean or non-negative integer (received: ".concat(valueType,")"));_uiStowBarInitially=value},get updateStoryElements(){return _uiUpdateStoryElements},set updateStoryElements(value){_uiUpdateStoryElements=Boolean(value)}})})),_navigationOverride,_passagesDescriptions,_passagesStart,_passagesOnProcess,_passagesTransitionOut,_savesAutoload,_savesAutosave,_savesIsAllowed,_savesVersion,_debug,_addVisitedLinkClass,_cleanupWikifierOutput,_loadDelay,_audioPauseOnFadeToZero,_audioPreloadMetadata,_historyControls,_historyMaxStates,_macrosIfAssignmentError,_macrosMaxLoopIterations,_macrosTypeSkipKey,_macrosTypeVisitedPassages,_passagesDisplayTitles,_passagesNobr,_savesId,_savesSlots,_savesTryDiskOnMobile,_uiStowBarInitially,_uiUpdateStoryElements,_errHistoryModeDeprecated,SimpleAudio=function(){var _hasPromise,_gestureEventNames=Object.freeze(["click","contextmenu","dblclick","keyup","mouseup","pointerup","touchend"]),_specialIds=Object.freeze([":not",":all",":looped",":muted",":paused",":playing"]),_formatSpecRe=/^([\w-]+)\s*\|\s*(\S.*)$/,_badIdRe=/[:\s]/,_tracks=new Map,_groups=new Map,_lists=new Map,_subscribers=new Map,_masterRate=1,_masterVolume=1,_masterMute=!1,_masterMuteOnHidden=!1,_playReturnsPromise=(_hasPromise=null,function(){if(null!==_hasPromise)return _hasPromise;if(_hasPromise=!1,Has.audio)try{var audio=document.createElement("audio");audio.muted=!0;var value=audio.play();value.catch((function(){})),_hasPromise=value instanceof Promise}catch(ex){}return _hasPromise}),AudioTrack=function(){function AudioTrack(obj){if(_classCallCheck(this,AudioTrack),obj instanceof Array)this._create(obj);else{if(!(obj instanceof AudioTrack))throw new Error("sources parameter must be either an array, of URIs or source objects, or an AudioTrack instance");this._copy(obj)}}return _createClass(AudioTrack,[{key:"_create",value:function(sourceList){var dataUriRe=/^data:\s*audio\/(?:x-)?([^;,]+)\s*[;,]/i,extRe=/\.([^./\\]+)$/,formats=AudioTrack.formats,usedSources=[],audio=document.createElement("audio");audio.preload="none",sourceList.forEach((function(src){var srcUri=null;switch(_typeof(src)){case"string":var match;if("data:"===src.slice(0,5)){if(null===(match=dataUriRe.exec(src)))throw new Error("source data URI missing media type")}else if(null===(match=extRe.exec(Util.parseUrl(src).pathname)))throw new Error("source URL missing file extension");formats[match[1]]&&(srcUri=src);break;case"object":if(null===src)throw new Error("source object cannot be null");if(!src.hasOwnProperty("src"))throw new Error('source object missing required "src" property');if(!src.hasOwnProperty("format"))throw new Error('source object missing required "format" property');formats[src.format]&&(srcUri=src.src);break;default:throw new Error("invalid source value (type: ".concat(_typeof(src),")"))}if(null!==srcUri){var source=document.createElement("source");source.src=srcUri,audio.appendChild(source),usedSources.push(srcUri)}})),audio.hasChildNodes()&&Config.audio.preloadMetadata&&(audio.preload="metadata"),this._finalize(audio,usedSources,clone(sourceList))}},{key:"_copy",value:function(obj){this._finalize(obj.audio.cloneNode(!0),clone(obj.sources),clone(obj.originals))}},{key:"_finalize",value:function(audio,sources,originals){var _this3=this;Object.defineProperties(this,{audio:{configurable:!0,value:audio},sources:{value:Object.freeze(sources)},originals:{value:Object.freeze(originals)},_error:{writable:!0,value:!1},_faderId:{writable:!0,value:null},_mute:{writable:!0,value:!1},_rate:{writable:!0,value:1},_volume:{writable:!0,value:1}}),jQuery(this.audio).on("loadstart.AudioTrack",(function(){return _this3._error=!1})).on("error.AudioTrack",(function(){return _this3._error=!0})).find("source:last-of-type").on("error.AudioTrack",(function(){return _this3._trigger("error")})),function(id,callback){if("function"!=typeof callback)throw new Error("callback parameter must be a function");_subscribers.set(id,callback)}(this,(function(mesg){if(_this3.audio)switch(mesg){case"loadwithscreen":if(_this3.hasSource()){var lockId=LoadScreen.lock();_this3.one("canplaythrough.AudioTrack_loadwithscreen error.AudioTrack_loadwithscreen",(function(){jQuery(this).off(".AudioTrack_loadwithscreen"),LoadScreen.unlock(lockId)})).load()}break;case"load":_this3.load();break;case"mute":_this3._updateAudioMute();break;case"rate":_this3._updateAudioRate();break;case"stop":_this3.stop();break;case"volume":_this3._updateAudioVolume();break;case"unload":_this3.unload()}else unsubscribe(_this3)})),this._updateAudioMute(),this._updateAudioRate(),this._updateAudioVolume()}},{key:"_trigger",value:function(eventName){jQuery(this.audio).triggerHandler(eventName)}},{key:"_destroy",value:function(){unsubscribe(this),this.audio&&(jQuery(this.audio).off(),this.unload(),this._error=!0,delete this.audio)}},{key:"clone",value:function(){return new AudioTrack(this)}},{key:"load",value:function(){var _this4=this;if(this.fadeStop(),this.audio.pause(),!this.audio.hasChildNodes()){if(0===this.sources.length)return;this.sources.forEach((function(srcUri){var source=document.createElement("source");source.src=srcUri,_this4.audio.appendChild(source)}))}"auto"!==this.audio.preload&&(this.audio.preload="auto"),this.isLoading()||this.audio.load()}},{key:"unload",value:function(){this.fadeStop(),this.stop();var audio=this.audio;for(audio.preload="none";audio.hasChildNodes();)audio.removeChild(audio.firstChild);audio.load()}},{key:"play",value:function(){var _this5=this;if(!this.hasSource())return Promise.reject(new Error("none of the candidate sources were acceptable"));if(this.isUnloaded())return Promise.reject(new Error("no sources are loaded"));if(this.isFailed())return Promise.reject(new Error("failed to load any of the sources"));"auto"!==this.audio.preload&&(this.audio.preload="auto");var namespace=".AudioTrack_play";return _playReturnsPromise()?this.audio.play():new Promise((function(resolve,reject){_this5.isPlaying()?resolve():(jQuery(_this5.audio).off(namespace).one("error".concat(namespace," playing").concat(namespace," timeupdate").concat(namespace),(function(ev){jQuery(_this5).off(namespace),"error"===ev.type?reject(new Error("unknown audio play error")):resolve()})),_this5.audio.play())}))}},{key:"playWhenAllowed",value:function(){var _this6=this;this.play().catch((function(){var gestures=_gestureEventNames.map((function(name){return"".concat(name,".AudioTrack_playWhenAllowed")})).join(" ");jQuery(document).one(gestures,(function(){jQuery(document).off(".AudioTrack_playWhenAllowed"),_this6.audio.play()}))}))}},{key:"pause",value:function(){this.audio.pause()}},{key:"stop",value:function(){this.audio.pause(),this.time(0),this._trigger(":stopped")}},{key:"fade",value:function(duration,toVol,fromVol){var _this7=this;if("number"!=typeof duration)throw new TypeError("duration parameter must be a number");if("number"!=typeof toVol)throw new TypeError("toVolume parameter must be a number");if(null!=fromVol&&"number"!=typeof fromVol)throw new TypeError("fromVolume parameter must be a number");if(!this.hasSource())return Promise.reject(new Error("none of the candidate sources were acceptable"));if(this.isUnloaded())return Promise.reject(new Error("no sources are loaded"));if(this.isFailed())return Promise.reject(new Error("failed to load any of the sources"));this.fadeStop();var from=Math.clamp(null==fromVol?this.volume():fromVol,0,1),to=Math.clamp(toVol,0,1);return from!==to?(this.volume(from),jQuery(this.audio).off("timeupdate.AudioTrack_fade").one("timeupdate.AudioTrack_fade",(function(){var min,max;from<to?(min=from,max=to):(min=to,max=from);var time=Math.max(duration,1),delta=(to-from)/(time/.025);_this7._trigger(":fading"),_this7._faderId=setInterval((function(){_this7.isPlaying()?(_this7.volume(Math.clamp(_this7.volume()+delta,min,max)),Config.audio.pauseOnFadeToZero&&0===_this7.volume()&&_this7.pause(),_this7.volume()===to&&(_this7.fadeStop(),_this7._trigger(":faded"))):_this7.fadeStop()}),25)})),this.play()):void 0}},{key:"fadeIn",value:function(duration,fromVol){return this.fade(duration,1,fromVol)}},{key:"fadeOut",value:function(duration,fromVol){return this.fade(duration,0,fromVol)}},{key:"fadeStop",value:function(){null!==this._faderId&&(clearInterval(this._faderId),this._faderId=null)}},{key:"loop",value:function(_loop){return null==_loop?this.audio.loop:(this.audio.loop=!!_loop,this)}},{key:"mute",value:function(_mute){return null==_mute?this._mute:(this._mute=!!_mute,this._updateAudioMute(),this)}},{key:"_updateAudioMute",value:function(){this.audio.muted=this._mute||_masterMute}},{key:"rate",value:function(_rate){if(null==_rate)return this._rate;if("number"!=typeof _rate)throw new TypeError("rate parameter must be a number");return this._rate=Math.clamp(_rate,.2,5),this._updateAudioRate(),this}},{key:"_updateAudioRate",value:function(){this.audio.playbackRate=Math.clamp(this._rate*_masterRate,.2,5)}},{key:"time",value:function(_time){var _this8=this;if(null==_time)return this.audio.currentTime;if("number"!=typeof _time)throw new TypeError("time parameter must be a number");return this.hasMetadata()?this.audio.currentTime=_time:jQuery(this.audio).off("loadedmetadata.AudioTrack_time").one("loadedmetadata.AudioTrack_time",(function(){return _this8.audio.currentTime=_time})),this}},{key:"volume",value:function(_volume){if(null==_volume)return this._volume;if("number"!=typeof _volume)throw new TypeError("volume parameter must be a number");return this._volume=Math.clamp(_volume,0,1),this._updateAudioVolume(),this}},{key:"_updateAudioVolume",value:function(){this.audio.volume=Math.clamp(this._volume*_masterVolume,0,1)}},{key:"duration",value:function(){return this.audio.duration}},{key:"remaining",value:function(){return this.audio.duration-this.audio.currentTime}},{key:"isFailed",value:function(){return this._error}},{key:"isLoading",value:function(){return this.audio.networkState===HTMLMediaElement.NETWORK_LOADING}},{key:"isUnloaded",value:function(){return!this.audio.hasChildNodes()}},{key:"isUnavailable",value:function(){return!this.hasSource()||this.isUnloaded()||this.isFailed()}},{key:"isPlaying",value:function(){return!this.audio.paused&&this.hasSomeData()}},{key:"isPaused",value:function(){return this.audio.paused&&(this.audio.duration===1/0||this.audio.currentTime>0)&&!this.audio.ended}},{key:"isStopped",value:function(){return this.audio.paused&&0===this.audio.currentTime}},{key:"isEnded",value:function(){return this.audio.ended}},{key:"isFading",value:function(){return null!==this._faderId}},{key:"isSeeking",value:function(){return this.audio.seeking}},{key:"hasSource",value:function(){return this.sources.length>0}},{key:"hasNoData",value:function(){return this.audio.readyState===HTMLMediaElement.HAVE_NOTHING}},{key:"hasMetadata",value:function(){return this.audio.readyState>=HTMLMediaElement.HAVE_METADATA}},{key:"hasSomeData",value:function(){return this.audio.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA}},{key:"hasData",value:function(){return this.audio.readyState===HTMLMediaElement.HAVE_ENOUGH_DATA}},{key:"on",value:function(){for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5<_len5;_key5++)args[_key5]=arguments[_key5];return jQuery.fn.on.apply(jQuery(this.audio),args),this}},{key:"one",value:function(){for(var _len6=arguments.length,args=new Array(_len6),_key6=0;_key6<_len6;_key6++)args[_key6]=arguments[_key6];return jQuery.fn.one.apply(jQuery(this.audio),args),this}},{key:"off",value:function(){for(var _len7=arguments.length,args=new Array(_len7),_key7=0;_key7<_len7;_key7++)args[_key7]=arguments[_key7];return jQuery.fn.off.apply(jQuery(this.audio),args),this}}]),AudioTrack}();Object.defineProperties(AudioTrack,{formats:{value:function(){var audio=document.createElement("audio"),types=new Map;function canPlay(mimeType){return types.has(mimeType)||types.set(mimeType,""!==audio.canPlayType(mimeType).replace(/^no$/i,"")),types.get(mimeType)}return Object.assign(Object.create(null),{aac:canPlay("audio/aac"),caf:canPlay("audio/x-caf")||canPlay("audio/caf"),flac:canPlay("audio/x-flac")||canPlay("audio/flac"),mp3:canPlay('audio/mpeg; codecs="mp3"')||canPlay("audio/mpeg")||canPlay("audio/mp3")||canPlay("audio/mpa"),mpeg:canPlay("audio/mpeg"),m4a:canPlay("audio/x-m4a")||canPlay("audio/m4a")||canPlay("audio/aac"),mp4:canPlay("audio/x-mp4")||canPlay("audio/mp4")||canPlay("audio/aac"),ogg:canPlay("audio/ogg"),oga:canPlay("audio/ogg"),opus:canPlay('audio/ogg; codecs="opus"')||canPlay("audio/opus"),wav:canPlay('audio/wave; codecs="1"')||canPlay('audio/wav; codecs="1"')||canPlay("audio/wave")||canPlay("audio/wav"),wave:canPlay('audio/wave; codecs="1"')||canPlay('audio/wav; codecs="1"')||canPlay("audio/wave")||canPlay("audio/wav"),weba:canPlay("audio/webm"),webm:canPlay("audio/webm")})}()}});var AudioList=function(){function AudioList(obj){if(_classCallCheck(this,AudioList),obj instanceof Array)this._create(obj);else{if(!(obj instanceof AudioList))throw new Error("tracks parameter must be either an array, of track objects, or an AudioTrack instance");this._copy(obj)}}return _createClass(AudioList,[{key:"_create",value:function(trackList){var _this9=this;this._finalize(trackList.map((function(trackObj){if("object"!==_typeof(trackObj))throw new Error("tracks parameter array members must be objects");var own,rate,track,volume;if(trackObj instanceof AudioTrack)own=!0,rate=trackObj.rate(),track=trackObj.clone(),volume=trackObj.volume();else{if(!trackObj.hasOwnProperty("track"))throw new Error('track object missing required "track" property');if(!(trackObj.track instanceof AudioTrack))throw new Error('track object\'s "track" property must be an AudioTrack object');own=trackObj.hasOwnProperty("own")&&trackObj.own,rate=trackObj.hasOwnProperty("rate")?trackObj.rate:trackObj.track.rate(),track=trackObj.track,volume=trackObj.hasOwnProperty("volume")?trackObj.volume:trackObj.track.volume()}return track.stop(),track.loop(!1),track.mute(!1),track.rate(rate),track.volume(volume),track.on("ended.AudioList",(function(){return _this9._onEnd()})),{own:own,track:track,volume:volume,rate:rate}})))}},{key:"_copy",value:function(obj){this._finalize(clone(obj.tracks))}},{key:"_finalize",value:function(tracks){Object.defineProperties(this,{tracks:{configurable:!0,value:Object.freeze(tracks)},queue:{configurable:!0,value:[]},current:{writable:!0,value:null},_rate:{writable:!0,value:1},_volume:{writable:!0,value:1},_mute:{writable:!0,value:!1},_loop:{writable:!0,value:!1},_shuffle:{writable:!0,value:!1}})}},{key:"_destroy",value:function(){this.stop(),this.tracks.filter((function(trackObj){return trackObj.own})).forEach((function(trackObj){return trackObj.track._destroy()})),delete this.tracks,delete this.queue}},{key:"load",value:function(){this.tracks.forEach((function(trackObj){return trackObj.track.load()}))}},{key:"unload",value:function(){this.stop(),this.tracks.forEach((function(trackObj){return trackObj.track.unload()}))}},{key:"play",value:function(){return null!==this.current&&!this.current.track.isUnavailable()&&!this.current.track.isEnded()||(0===this.queue.length&&this._fillQueue(),this._next())?this.current.track.play():Promise.reject(new Error("no tracks were available"))}},{key:"playWhenAllowed",value:function(){var _this10=this;this.play().catch((function(){var gestures=_gestureEventNames.map((function(name){return"".concat(name,".AudioList_playWhenAllowed")})).join(" ");jQuery(document).one(gestures,(function(){jQuery(document).off(".AudioList_playWhenAllowed"),_this10.play()}))}))}},{key:"pause",value:function(){null!==this.current&&this.current.track.pause()}},{key:"stop",value:function(){null!==this.current&&(this.current.track.stop(),this.current=null),this._drainQueue()}},{key:"skip",value:function(){this._next()?this.current.track.play():this._loop&&this.play()}},{key:"fade",value:function(duration,toVol,fromVol){if("number"!=typeof duration)throw new TypeError("duration parameter must be a number");if("number"!=typeof toVol)throw new TypeError("toVolume parameter must be a number");if(null!=fromVol&&"number"!=typeof fromVol)throw new TypeError("fromVolume parameter must be a number");if(0===this.queue.length&&this._fillQueue(),null!==this.current&&!this.current.track.isUnavailable()&&!this.current.track.isEnded()||this._next()){var adjFromVol,adjToVol=Math.clamp(toVol,0,1)*this.current.volume;return null!=fromVol&&(adjFromVol=Math.clamp(fromVol,0,1)*this.current.volume),this._volume=toVol,this.current.track.fade(duration,adjToVol,adjFromVol)}}},{key:"fadeIn",value:function(duration,fromVol){return this.fade(duration,1,fromVol)}},{key:"fadeOut",value:function(duration,fromVol){return this.fade(duration,0,fromVol)}},{key:"fadeStop",value:function(){null!==this.current&&this.current.track.fadeStop()}},{key:"loop",value:function(_loop2){return null==_loop2?this._loop:(this._loop=!!_loop2,this)}},{key:"mute",value:function(_mute2){return null==_mute2?this._mute:(this._mute=!!_mute2,null!==this.current&&this.current.track.mute(this._mute),this)}},{key:"rate",value:function(_rate2){if(null==_rate2)return this._rate;if("number"!=typeof _rate2)throw new TypeError("rate parameter must be a number");return this._rate=Math.clamp(_rate2,.2,5),null!==this.current&&this.current.track.rate(this._rate*this.current.rate),this}},{key:"shuffle",value:function(_shuffle){var _this11=this;if(null==_shuffle)return this._shuffle;if(this._shuffle=!!_shuffle,this.queue.length>0&&(this._fillQueue(),!this._shuffle&&null!==this.current&&this.queue.length>1)){var _this$queue,firstIdx=this.queue.findIndex((function(trackObj){return trackObj===_this11.current}));if(-1!==firstIdx)(_this$queue=this.queue).push.apply(_this$queue,_toConsumableArray(this.queue.splice(0,firstIdx+1)))}return this}},{key:"volume",value:function(_volume2){if(null==_volume2)return this._volume;if("number"!=typeof _volume2)throw new TypeError("volume parameter must be a number");return this._volume=Math.clamp(_volume2,0,1),null!==this.current&&this.current.track.volume(this._volume*this.current.volume),this}},{key:"duration",value:function(){if(arguments.length>0)throw new Error("duration takes no parameters");return this.tracks.map((function(trackObj){return trackObj.track.duration()})).reduce((function(prev,cur){return prev+cur}),0)}},{key:"remaining",value:function(){if(arguments.length>0)throw new Error("remaining takes no parameters");var remainingTime=this.queue.map((function(trackObj){return trackObj.track.duration()})).reduce((function(prev,cur){return prev+cur}),0);return null!==this.current&&(remainingTime+=this.current.track.remaining()),remainingTime}},{key:"time",value:function(){if(arguments.length>0)throw new Error("time takes no parameters");return this.duration()-this.remaining()}},{key:"isPlaying",value:function(){return null!==this.current&&this.current.track.isPlaying()}},{key:"isPaused",value:function(){return null===this.current||this.current.track.isPaused()}},{key:"isStopped",value:function(){return 0===this.queue.length&&null===this.current}},{key:"isEnded",value:function(){return 0===this.queue.length&&(null===this.current||this.current.track.isEnded())}},{key:"isFading",value:function(){return null!==this.current&&this.current.track.isFading()}},{key:"_next",value:function(){var nextTrack;for(null!==this.current&&(this.current.track.stop(),this.current=null);nextTrack=this.queue.shift();)if(!nextTrack.track.isUnavailable()){this.current=nextTrack;break}return null!==this.current&&(this.current.track.mute(this._mute),this.current.track.rate(this._rate*this.current.rate),this.current.track.volume(this._volume*this.current.volume),this.current.track.loop(!1),!0)}},{key:"_onEnd",value:function(){if(0===this.queue.length){if(!this._loop)return;this._fillQueue()}this._next()&&this.current.track.play()}},{key:"_drainQueue",value:function(){this.queue.splice(0)}},{key:"_fillQueue",value:function(){var _this$queue2;this._drainQueue(),(_this$queue2=this.queue).push.apply(_this$queue2,_toConsumableArray(this.tracks.filter((function(trackObj){return!trackObj.track.isUnavailable()})))),0!==this.queue.length&&this._shuffle&&(this.queue.shuffle(),this.queue.length>1&&this.queue[0]===this.current&&this.queue.push(this.queue.shift()))}}]),AudioList}(),AudioRunner=function(){function AudioRunner(list){if(_classCallCheck(this,AudioRunner),!(list instanceof Set||list instanceof AudioRunner))throw new TypeError("list parameter must be a Set or a AudioRunner instance");Object.defineProperties(this,{trackIds:{value:new Set(list instanceof AudioRunner?list.trackIds:list)}})}return _createClass(AudioRunner,[{key:"load",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.load)}},{key:"unload",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.unload)}},{key:"play",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.play)}},{key:"playWhenAllowed",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.playWhenAllowed)}},{key:"pause",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.pause)}},{key:"stop",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.stop)}},{key:"fade",value:function(duration,toVol,fromVol){if(null==duration||null==toVol)throw new Error("fade requires parameters");AudioRunner._run(this.trackIds,AudioTrack.prototype.fade,duration,toVol,fromVol)}},{key:"fadeIn",value:function(duration,fromVol){if(null==duration)throw new Error("fadeIn requires a parameter");AudioRunner._run(this.trackIds,AudioTrack.prototype.fadeIn,duration,fromVol)}},{key:"fadeOut",value:function(duration,fromVol){if(null==duration)throw new Error("fadeOut requires a parameter");AudioRunner._run(this.trackIds,AudioTrack.prototype.fadeOut,duration,fromVol)}},{key:"fadeStop",value:function(){AudioRunner._run(this.trackIds,AudioTrack.prototype.fadeStop)}},{key:"loop",value:function(_loop3){if(null==_loop3)throw new Error("loop requires a parameter");return AudioRunner._run(this.trackIds,AudioTrack.prototype.loop,_loop3),this}},{key:"mute",value:function(_mute3){if(null==_mute3)throw new Error("mute requires a parameter");return AudioRunner._run(this.trackIds,AudioTrack.prototype.mute,_mute3),this}},{key:"rate",value:function(_rate3){if(null==_rate3)throw new Error("rate requires a parameter");return AudioRunner._run(this.trackIds,AudioTrack.prototype.rate,_rate3),this}},{key:"time",value:function(_time2){if(null==_time2)throw new Error("time requires a parameter");return AudioRunner._run(this.trackIds,AudioTrack.prototype.time,_time2),this}},{key:"volume",value:function(_volume3){if(null==_volume3)throw new Error("volume requires a parameter");return AudioRunner._run(this.trackIds,AudioTrack.prototype.volume,_volume3),this}},{key:"on",value:function(){for(var _len8=arguments.length,args=new Array(_len8),_key8=0;_key8<_len8;_key8++)args[_key8]=arguments[_key8];return AudioRunner._run.apply(AudioRunner,[this.trackIds,AudioTrack.prototype.on].concat(args)),this}},{key:"one",value:function(){for(var _len9=arguments.length,args=new Array(_len9),_key9=0;_key9<_len9;_key9++)args[_key9]=arguments[_key9];return AudioRunner._run.apply(AudioRunner,[this.trackIds,AudioTrack.prototype.one].concat(args)),this}},{key:"off",value:function(){for(var _len10=arguments.length,args=new Array(_len10),_key10=0;_key10<_len10;_key10++)args[_key10]=arguments[_key10];return AudioRunner._run.apply(AudioRunner,[this.trackIds,AudioTrack.prototype.off].concat(args)),this}}],[{key:"_run",value:function(ids,fn){for(var _len11=arguments.length,args=new Array(_len11>2?_len11-2:0),_key11=2;_key11<_len11;_key11++)args[_key11-2]=arguments[_key11];ids.forEach((function(id){var track=_tracks.get(id);track&&fn.apply(track,args)}))}}]),AudioRunner}();var _runnerParseSelector=function(){var notWsRe=/\S/g,parenRe=/[()]/g;function processNegation(str,startPos){var match;if(notWsRe.lastIndex=startPos,null===(match=notWsRe.exec(str))||"("!==match[0])throw new Error('invalid ":not()" syntax: missing parentheticals');parenRe.lastIndex=notWsRe.lastIndex;for(var start=notWsRe.lastIndex,result={str:"",nextMatch:-1},depth=1;null!==(match=parenRe.exec(str));)if("("===match[0]?++depth:--depth,depth<1){result.nextMatch=parenRe.lastIndex,result.str=str.slice(start,result.nextMatch-1);break}return result}return function parseSelector(idArg){for(var match,ids=[],idRe=/:?[^\s:()]+/g;null!==(match=idRe.exec(idArg));){var id=match[0];if(":not"===id){if(0===ids.length)throw new Error('invalid negation: no group ID preceded ":not()"');var parent=ids[ids.length-1];if(":"!==parent.id[0])throw new Error('invalid negation of track "'.concat(parent.id,'": only groups may be negated with ":not()"'));var negation=processNegation(idArg,idRe.lastIndex);if(-1===negation.nextMatch)throw new Error('unknown error parsing ":not()"');idRe.lastIndex=negation.nextMatch,parent.not=parseSelector(negation.str)}else ids.push({id:id})}return ids}}();function masterMute(mute){if(null==mute)return _masterMute;publish("mute",_masterMute=!!mute)}function unsubscribe(id){_subscribers.delete(id)}function publish(mesg,data){_subscribers.forEach((function(fn){return fn(mesg,data)}))}function _newTrack(sources){return new AudioTrack(sources.map((function(source){if("data:"!==source.slice(0,5)&&Story.has(source)){var passage=Story.get(source);if(passage.tags.includes("Twine.audio"))return passage.text.trim()}var match=_formatSpecRe.exec(source);return null===match?source:{format:match[1],src:match[2]}})))}return Object.freeze(Object.defineProperties({},{tracks:{value:Object.freeze(Object.defineProperties({},{add:{value:function(){if(arguments.length<2){var errors=[];throw arguments.length<1&&errors.push("track ID"),arguments.length<2&&errors.push("sources"),new Error("no ".concat(errors.join(" or ")," specified"))}var id=String(arguments[0]).trim(),what='track ID "'.concat(id,'"');if(_badIdRe.test(id))throw new Error("invalid ".concat(what,": track IDs must not contain colons or whitespace"));var track,sources=Array.isArray(arguments[1])?Array.from(arguments[1]):Array.from(arguments).slice(1);try{track=_newTrack(sources)}catch(ex){throw new Error("".concat(what,": error during track initialization: ").concat(ex.message))}if(Config.debug&&!track.hasSource())throw new Error("".concat(what,": no supported audio sources found"));_tracks.has(id)&&_tracks.get(id)._destroy(),_tracks.set(id,track)}},delete:{value:function(id){return _tracks.has(id)&&_tracks.get(id)._destroy(),_tracks.delete(id)}},clear:{value:function(){_tracks.forEach((function(track){return track._destroy()})),_tracks.clear()}},has:{value:function(id){return _tracks.has(id)}},get:{value:function(id){return _tracks.get(id)||null}}}))},groups:{value:Object.freeze(Object.defineProperties({},{add:{value:function(){if(arguments.length<2){var errors=[];throw arguments.length<1&&errors.push("group ID"),arguments.length<2&&errors.push("track IDs"),new Error("no ".concat(errors.join(" or ")," specified"))}var id=String(arguments[0]).trim(),what='group ID "'.concat(id,'"');if(":"!==id[0]||_badIdRe.test(id.slice(1)))throw new Error("invalid ".concat(what,": group IDs must start with a colon and must not contain colons or whitespace"));if(_specialIds.includes(id))throw new Error("cannot clobber special ".concat(what));var group,trackIds=Array.isArray(arguments[1])?Array.from(arguments[1]):Array.from(arguments).slice(1);try{group=new Set(trackIds.map((function(trackId){if(!_tracks.has(trackId))throw new Error('track "'.concat(trackId,'" does not exist'));return trackId})))}catch(ex){throw new Error("".concat(what,": error during group initialization: ").concat(ex.message))}_groups.set(id,Object.freeze(Array.from(group)))}},delete:{value:function(id){return _groups.delete(id)}},clear:{value:function(){_groups.clear()}},has:{value:function(id){return _groups.has(id)}},get:{value:function(id){return _groups.get(id)||null}}}))},lists:{value:Object.freeze(Object.defineProperties({},{add:{value:function(){if(arguments.length<2){var errors=[];throw arguments.length<1&&errors.push("list ID"),arguments.length<2&&errors.push("track IDs"),new Error("no ".concat(errors.join(" or ")," specified"))}var id=String(arguments[0]).trim(),what='list ID "'.concat(id,'"');if(_badIdRe.test(id))return this.error("invalid ".concat(what,": list IDs must not contain colons or whitespace"));var list,descriptors=Array.isArray(arguments[1])?Array.from(arguments[1]):Array.from(arguments).slice(1);try{list=new AudioList(descriptors.map((function(desc){if(null===desc)throw new Error("track descriptor must be a string or object (type: null)");switch(_typeof(desc)){case"string":desc={id:desc};break;case"object":if(!desc.hasOwnProperty("id")&&!desc.hasOwnProperty("sources"))throw new Error('track descriptor must contain one of either an "id" or a "sources" property');if(desc.hasOwnProperty("id")&&desc.hasOwnProperty("sources"))throw new Error('track descriptor must contain either an "id" or a "sources" property, not both');break;default:throw new Error("track descriptor must be a string or object (type: ".concat(_typeof(desc),")"))}var own,track,volume;if(desc.hasOwnProperty("id")){if("string"!=typeof desc.id)throw new Error('"id" property must be a string');if(!_tracks.has(desc.id))throw new Error('track "'.concat(desc.id,'" does not exist'));track=_tracks.get(desc.id)}else if(desc.hasOwnProperty("sources")){if(!Array.isArray(desc.sources)||0===desc.sources.length)throw new Error('"sources" property must be a non-empty array');if(desc.hasOwnProperty("own"))throw new Error('"own" property is not allowed with the "sources" property');try{track=_newTrack(desc.sources),own=!0}catch(ex){throw new Error("error during track initialization: ".concat(ex.message))}if(Config.debug&&!track.hasSource())throw new Error("no supported audio sources found")}if(desc.hasOwnProperty("own")){if("boolean"!=typeof desc.own)throw new Error('"own" property must be a boolean');(own=desc.own)&&(track=track.clone())}if(desc.hasOwnProperty("volume")){if("number"!=typeof desc.volume||Number.isNaN(desc.volume)||!Number.isFinite(desc.volume)||desc.volume<0)throw new Error('"volume" property must be a non-negative finite number');volume=desc.volume}return{own:null!=own&&own,track:track,volume:null!=volume?volume:track.volume()}})))}catch(ex){throw new Error("".concat(what,": error during playlist initialization: ").concat(ex.message))}_lists.has(id)&&_lists.get(id)._destroy(),_lists.set(id,list)}},delete:{value:function(id){return _lists.has(id)&&_lists.get(id)._destroy(),_lists.delete(id)}},clear:{value:function(){_lists.forEach((function(list){return list._destroy()})),_lists.clear()}},has:{value:function(id){return _lists.has(id)}},get:{value:function(id){return _lists.get(id)||null}}}))},select:{value:function(){if(0===arguments.length)throw new Error("no track selector specified");var selector=String(arguments[0]).trim(),trackIds=new Set;try{var renderIds=function renderIds(idObj){var ids,id=idObj.id;switch(id){case":all":ids=allIds;break;case":looped":ids=allIds.filter((function(id){return _tracks.get(id).loop()}));break;case":muted":ids=allIds.filter((function(id){return _tracks.get(id).mute()}));break;case":paused":ids=allIds.filter((function(id){return _tracks.get(id).isPaused()}));break;case":playing":ids=allIds.filter((function(id){return _tracks.get(id).isPlaying()}));break;default:ids=":"===id[0]?_groups.get(id):[id]}if(idObj.hasOwnProperty("not")){var negated=idObj.not.map((function(idObj){return renderIds(idObj)})).flat(1/0);ids=ids.filter((function(id){return!negated.includes(id)}))}return ids},allIds=Array.from(_tracks.keys());_runnerParseSelector(selector).forEach((function(idObj){return renderIds(idObj).forEach((function(id){if(!_tracks.has(id))throw new Error('track "'.concat(id,'" does not exist'));trackIds.add(id)}))}))}catch(ex){throw new Error("error during runner initialization: ".concat(ex.message))}return new AudioRunner(trackIds)}},load:{value:function(){publish("load")}},loadWithScreen:{value:function(){publish("loadwithscreen")}},mute:{value:masterMute},muteOnHidden:{value:function(mute){if(!Visibility.isEnabled())return!1;if(null==mute)return _masterMuteOnHidden;var namespace=".SimpleAudio_masterMuteOnHidden";if(_masterMuteOnHidden=!!mute){var visibilityChange="".concat(Visibility.changeEvent).concat(namespace);jQuery(document).off(namespace).on(visibilityChange,(function(){return masterMute(Visibility.isHidden())})),Visibility.isHidden()&&masterMute(!0)}else jQuery(document).off(namespace)}},rate:{value:function(rate){if(null==rate)return _masterRate;if("number"!=typeof rate||Number.isNaN(rate)||!Number.isFinite(rate))throw new Error("rate must be a finite number");publish("rate",_masterRate=Math.clamp(rate,.2,5))}},stop:{value:function(){publish("stop")}},unload:{value:function(){publish("unload")}},volume:{value:function(volume){if(null==volume)return _masterVolume;if("number"!=typeof volume||Number.isNaN(volume)||!Number.isFinite(volume))throw new Error("volume must be a finite number");publish("volume",_masterVolume=Math.clamp(volume,0,1))}}}))}(),State=function(){var _history=[],_active=momentCreate(),_activeIndex=-1,_expired=[],_prng=null,_tempVariables={};function stateMarshal(noDelta){var stateObj={index:_activeIndex};return noDelta?stateObj.history=clone(_history):stateObj.delta=historyDeltaEncode(_history),_expired.length>0&&(stateObj.expired=_toConsumableArray(_expired)),null!==_prng&&(stateObj.seed=_prng.seed),stateObj}function stateUnmarshal(stateObj,noDelta){if(null==stateObj)throw new Error("state object is null or undefined");if(!stateObj.hasOwnProperty(noDelta?"history":"delta")||0===stateObj[noDelta?"history":"delta"].length)throw new Error("state object has no history or history is empty");if(!stateObj.hasOwnProperty("index"))throw new Error("state object has no index");if(null!==_prng&&!stateObj.hasOwnProperty("seed"))throw new Error("state object has no seed, but PRNG is enabled");if(null===_prng&&stateObj.hasOwnProperty("seed"))throw new Error("state object has seed, but PRNG is disabled");_history=noDelta?clone(stateObj.history):historyDeltaDecode(stateObj.delta),_activeIndex=stateObj.index,_expired=stateObj.hasOwnProperty("expired")?_toConsumableArray(stateObj.expired):[],stateObj.hasOwnProperty("seed")&&(_prng.seed=stateObj.seed),momentActivate(_activeIndex)}function momentCreate(title,variables){return{title:null==title?"":String(title),variables:null==variables?{}:clone(variables)}}function momentActivate(moment){if(null==moment)throw new Error("moment activation attempted with null or undefined");switch(_typeof(moment)){case"object":_active=clone(moment);break;case"number":if(historyIsEmpty())throw new Error("moment activation attempted with index on empty history");if(moment<0||moment>=historySize())throw new RangeError("moment activation attempted with out-of-bounds index; need [0, ".concat(historySize()-1,"], got ").concat(moment));_active=clone(_history[moment]);break;default:throw new TypeError('moment activation attempted with a "'.concat(_typeof(moment),'"; must be an object or valid history stack index'))}return null!==_prng&&(_prng=PRNGWrapper.unmarshal({seed:_prng.seed,pull:_active.pull})),session.set("state",stateMarshal()),jQuery.event.trigger(":historyupdate"),_active}function historyLength(){return _activeIndex+1}function historySize(){return _history.length}function historyIsEmpty(){return 0===_history.length}function historyTop(){return _history.length>0?_history[_history.length-1]:null}function historyGoTo(index){return!(null==index||index<0||index>=historySize()||index===_activeIndex)&&(momentActivate(_activeIndex=index),!0)}function historyDeltaEncode(historyArr){if(!Array.isArray(historyArr))return null;if(0===historyArr.length)return[];for(var delta=[historyArr[0]],i=1,iend=historyArr.length;i<iend;++i)delta.push(Diff.diff(historyArr[i-1],historyArr[i]));return delta}function historyDeltaDecode(delta){if(!Array.isArray(delta))return null;if(0===delta.length)return[];for(var historyArr=[clone(delta[0])],i=1,iend=delta.length;i<iend;++i)historyArr.push(Diff.patch(historyArr[i-1],delta[i]));return historyArr}function prngInit(seed,useEntropy){var scriptSection;if(!historyIsEmpty())throw scriptSection="the Story JavaScript",new Error("State.prng.init must be called during initialization, within either ".concat(scriptSection," or the StoryInit special passage"));_prng=new PRNGWrapper(seed,useEntropy),_active.pull=_prng.pull}function metadataDelete(key){if("string"!=typeof key)throw new TypeError("State.metadata.delete key parameter must be a string (received: ".concat(_typeof(key),")"));var store=storage.get("metadata");store&&store.hasOwnProperty(key)&&(1===Object.keys(store).length?storage.delete("metadata"):(delete store[key],storage.set("metadata",store)))}return Object.freeze(Object.defineProperties({},{reset:{value:function(){session.delete("state"),_history=[],_active=momentCreate(),_activeIndex=-1,_expired=[],_prng=null===_prng?null:new PRNGWrapper(_prng.seed,!1)}},restore:{value:function(){if(session.has("state")){var stateObj=session.get("state");return null!=stateObj&&(stateUnmarshal(stateObj),!0)}return!1}},marshalForSave:{value:function(){return stateMarshal(!0)}},unmarshalForSave:{value:function(stateObj){return stateUnmarshal(stateObj,!0)}},expired:{get:function(){return _expired}},turns:{get:function(){return _expired.length+historyLength()}},passages:{get:function(){return _expired.concat(_history.slice(0,historyLength()).map((function(moment){return moment.title})))}},hasPlayed:{value:function(title){return null!=title&&""!==title&&(!!_expired.includes(title)||!!_history.slice(0,historyLength()).some((function(moment){return moment.title===title})))}},active:{get:function(){return _active}},activeIndex:{get:function(){return _activeIndex}},passage:{get:function(){return _active.title}},variables:{get:function(){return _active.variables}},history:{get:function(){return _history}},length:{get:historyLength},size:{get:historySize},isEmpty:{value:historyIsEmpty},current:{get:function(){return _history.length>0?_history[_activeIndex]:null}},top:{get:historyTop},bottom:{get:function(){return _history.length>0?_history[0]:null}},index:{value:function(index){return historyIsEmpty()||index<0||index>_activeIndex?null:_history[index]}},peek:{value:function(offset){if(historyIsEmpty())return null;var lengthOffset=1+(offset?Math.abs(offset):0);return lengthOffset>historyLength()?null:_history[historyLength()-lengthOffset]}},has:{value:function(title){if(historyIsEmpty()||null==title||""===title)return!1;for(var i=_activeIndex;i>=0;--i)if(_history[i].title===title)return!0;return!1}},create:{value:function(title){for(0,historyLength()<historySize()&&_history.splice(historyLength(),historySize()-historyLength()),_history.push(momentCreate(title,_active.variables)),_prng&&(historyTop().pull=_prng.pull);historySize()>Config.history.maxStates;)_expired.push(_history.shift().title);return momentActivate(_activeIndex=historySize()-1),historyLength()}},goTo:{value:historyGoTo},go:{value:function(offset){return null!=offset&&0!==offset&&historyGoTo(_activeIndex+offset)}},deltaEncode:{value:historyDeltaEncode},deltaDecode:{value:historyDeltaDecode},prng:{value:Object.freeze(Object.defineProperties({},{init:{value:prngInit},isEnabled:{value:function(){return null!==_prng}},pull:{get:function(){return _prng?_prng.pull:NaN}},seed:{get:function(){return _prng?_prng.seed:null}}}))},random:{value:function(){return _prng?_prng.random():Math.random()}},clearTemporary:{value:function(){TempVariables=_tempVariables={}}},temporary:{get:function(){return _tempVariables}},getVar:{value:function(varExpression){try{return Scripting.evalTwineScript(varExpression)}catch(ex){}}},setVar:{value:function(varExpression,value){try{return Scripting.evalTwineScript("".concat(varExpression," = evalTwineScript$Data$"),null,value),!0}catch(ex){}return!1}},metadata:{value:Object.freeze(Object.defineProperties({},{clear:{value:function(){storage.delete("metadata")}},delete:{value:metadataDelete},entries:{value:function(){var store=storage.get("metadata");return store&&Object.entries(store)}},get:{value:function(key){if("string"!=typeof key)throw new TypeError("State.metadata.get key parameter must be a string (received: ".concat(_typeof(key),")"));var store=storage.get("metadata");return store&&store.hasOwnProperty(key)?store[key]:undefined}},has:{value:function(key){if("string"!=typeof key)throw new TypeError("State.metadata.has key parameter must be a string (received: ".concat(_typeof(key),")"));var store=storage.get("metadata");return store&&store.hasOwnProperty(key)}},keys:{value:function(){var store=storage.get("metadata");return store&&Object.keys(store)}},set:{value:function(key,value){if("string"!=typeof key)throw new TypeError("State.metadata.set key parameter must be a string (received: ".concat(_typeof(key),")"));if(void 0===value)metadataDelete(key);else{var store=storage.get("metadata")||{};store[key]=value,storage.set("metadata",store)}}},size:{get:function(){var store=storage.get("metadata");return store?Object.keys(store).length:0}}}))},initPRNG:{value:prngInit},restart:{value:function(){return Engine.restart()}},backward:{value:function(){return Engine.backward()}},forward:{value:function(){return Engine.forward()}},display:{value:function(){return Engine.display.apply(Engine,arguments)}},show:{value:function(){return Engine.show.apply(Engine,arguments)}},play:{value:function(){return Engine.play.apply(Engine,arguments)}}}))}(),Scripting=function(){function addAccessibleClickHandler(targets,selector,handler,one,namespace){if(arguments.length<2)throw new Error("addAccessibleClickHandler insufficient number of parameters");var fn,opts;if("function"==typeof selector?(fn=selector,opts={namespace:one,one:!!handler}):(fn=handler,opts={namespace:namespace,one:!!one,selector:selector}),"function"!=typeof fn)throw new TypeError("addAccessibleClickHandler handler parameter must be a function");return jQuery(targets).ariaClick(opts,fn)}function insertElement(place,type,id,classNames,text,title){var $el=jQuery(document.createElement(type));return id&&$el.attr("id",id),classNames&&$el.addClass(classNames),title&&$el.attr("title",title),text&&$el.text(text),place&&$el.appendTo(place),$el[0]}function insertText(place,text){jQuery(place).append(document.createTextNode(text))}function removeChildren(node){jQuery(node).empty()}function removeElement(node){jQuery(node).remove()}function fade(el,options){var current,intervalId,direction="in"===options.fade?1:-1,proxy=el.cloneNode(!0);function setOpacity(el,opacity){el.style.zoom=1,el.style.filter="alpha(opacity=".concat(Math.floor(100*opacity),")"),el.style.opacity=opacity}el.parentNode.replaceChild(proxy,el),"in"===options.fade?(current=0,proxy.style.visibility="visible"):current=1,setOpacity(proxy,current),intervalId=window.setInterval((function(){current+=.05*direction,setOpacity(proxy,Math.easeInOut(current)),(1===direction&¤t>=1||-1===direction&¤t<=0)&&(el.style.visibility="in"===options.fade?"visible":"hidden",proxy.parentNode.replaceChild(el,proxy),proxy=null,window.clearInterval(intervalId),options.onComplete&&options.onComplete())}),25)}function scrollWindowTo(el,incrementBy){var increment=null!=incrementBy?Number(incrementBy):.1;Number.isNaN(increment)||!Number.isFinite(increment)||increment<0?increment=.1:increment>1&&(increment=1);var intervalId,start=window.scrollY?window.scrollY:document.body.scrollTop,end=function(el){var posTop=function(el){var curtop=0;for(;el.offsetParent;)curtop+=el.offsetTop,el=el.offsetParent;return curtop}(el),posBottom=posTop+el.offsetHeight,winTop=window.scrollY?window.scrollY:document.body.scrollTop,winHeight=window.innerHeight?window.innerHeight:document.body.clientHeight,winBottom=winTop+winHeight;return posTop>=winTop&&posBottom>winBottom&&el.offsetHeight<winHeight?posTop-(winHeight-el.offsetHeight)+20:posTop}(el),distance=Math.abs(start-end),direction=start>end?-1:1,progress=0;intervalId=window.setInterval((function(){progress+=increment,window.scroll(0,start+direction*(distance*Math.easeInOut(progress))),progress>=1&&window.clearInterval(intervalId)}),25)}function toStringOrDefault(value){return stringFrom(value)}function either(){if(0!==arguments.length)return Array.prototype.concat.apply([],arguments).random()}function forget(key){if("string"!=typeof key)throw new TypeError("forget key parameter must be a string (received: ".concat(Util.getType(key),")"));State.metadata.delete(key)}function hasVisited(){if(0===arguments.length)throw new Error("hasVisited called with insufficient parameters");if(State.isEmpty())return!1;for(var needles=Array.prototype.concat.apply([],arguments),played=State.passages,i=0,iend=needles.length;i<iend;++i)if(!played.includes(needles[i]))return!1;return!0}function lastVisited(){if(0===arguments.length)throw new Error("lastVisited called with insufficient parameters");if(State.isEmpty())return-1;for(var needles=Array.prototype.concat.apply([],arguments),played=State.passages,uBound=played.length-1,turns=State.turns,i=0,iend=needles.length;i<iend&&turns>-1;++i){var lastIndex=played.lastIndexOf(needles[i]);turns=Math.min(turns,-1===lastIndex?-1:uBound-lastIndex)}return turns}function memorize(key,value){if("string"!=typeof key)throw new TypeError("memorize key parameter must be a string (received: ".concat(Util.getType(key),")"));State.metadata.set(key,value)}function passage(){return State.passage}function previous(){var passages=State.passages;if(arguments.length>0){var offset=Number(arguments[0]);if(!Number.isSafeInteger(offset)||offset<1)throw new RangeError("previous offset parameter must be a positive integer greater than zero");return passages.length>offset?passages[passages.length-1-offset]:""}for(var i=passages.length-2;i>=0;--i)if(passages[i]!==State.passage)return passages[i];return""}function random(){var min,max;switch(arguments.length){case 0:throw new Error("random called with insufficient parameters");case 1:min=0,max=Math.trunc(arguments[0]);break;default:min=Math.trunc(arguments[0]),max=Math.trunc(arguments[1])}if(!Number.isInteger(min))throw new Error("random min parameter must be an integer");if(!Number.isInteger(max))throw new Error("random max parameter must be an integer");if(min>max){var _ref6=[max,min];min=_ref6[0],max=_ref6[1]}return Math.floor(State.random()*(max-min+1))+min}function randomFloat(){var min,max;switch(arguments.length){case 0:throw new Error("randomFloat called with insufficient parameters");case 1:min=0,max=Number(arguments[0]);break;default:min=Number(arguments[0]),max=Number(arguments[1])}if(Number.isNaN(min)||!Number.isFinite(min))throw new Error("randomFloat min parameter must be a number");if(Number.isNaN(max)||!Number.isFinite(max))throw new Error("randomFloat max parameter must be a number");if(min>max){var _ref7=[max,min];min=_ref7[0],max=_ref7[1]}return State.random()*(max-min)+min}function recall(key,defaultValue){if("string"!=typeof key)throw new TypeError("recall key parameter must be a string (received: ".concat(Util.getType(key),")"));return State.metadata.has(key)?State.metadata.get(key):defaultValue}function tags(){if(0===arguments.length)return Story.get(State.passage).tags.slice(0);for(var passages=Array.prototype.concat.apply([],arguments),tags=[],i=0,iend=passages.length;i<iend;++i)tags=tags.concat(Story.get(passages[i]).tags);return tags}function temporary(){return State.temporary}function time(){return null===Engine.lastPlay?0:Util.now()-Engine.lastPlay}function turns(){return State.turns}function variables(){return State.variables}function visited(){if(State.isEmpty())return 0;for(var needles=Array.prototype.concat.apply([],0===arguments.length?[State.passage]:arguments),played=State.passages,count=State.turns,i=0,iend=needles.length;i<iend&&count>0;++i)count=Math.min(count,played.count(needles[i]));return count}function visitedTags(){if(0===arguments.length)throw new Error("visitedTags called with insufficient parameters");if(State.isEmpty())return 0;for(var needles=Array.prototype.concat.apply([],arguments),nLength=needles.length,played=State.passages,seen=new Map,count=0,i=0,iend=played.length;i<iend;++i){var title=played[i];if(seen.has(title))seen.get(title)&&++count;else{var _tags2=Story.get(title).tags;if(_tags2.length>0){for(var found=0,j=0;j<nLength;++j)_tags2.includes(needles[j])&&++found;found===nLength?(++count,seen.set(title,!0)):seen.set(title,!1)}}}return count}var _ref8=function(){function slugifyUrl(url){return Util.parseUrl(url).path.replace(/^[^\w]+|[^\w]+$/g,"").replace(/[^\w]+/g,"-").toLocaleLowerCase()}function addScript(url){return new Promise((function(resolve,reject){jQuery(document.createElement("script")).one("load abort error",(function(ev){jQuery(ev.target).off(),"load"===ev.type?resolve(ev.target):reject(new Error('importScripts failed to load the script "'.concat(url,'".')))})).appendTo(document.head).attr({id:"script-imported-".concat(slugifyUrl(url)),type:"text/javascript",src:url})}))}function addStyle(url){return new Promise((function(resolve,reject){jQuery(document.createElement("link")).one("load abort error",(function(ev){jQuery(ev.target).off(),"load"===ev.type?resolve(ev.target):reject(new Error('importStyles failed to load the stylesheet "'.concat(url,'".')))})).appendTo(document.head).attr({id:"style-imported-".concat(slugifyUrl(url)),rel:"stylesheet",href:url})}))}function sequence(callbacks){return callbacks.reduce((function(seq,fn){return seq.then(fn)}),Promise.resolve())}return{importScripts:function(){for(var _len12=arguments.length,urls=new Array(_len12),_key12=0;_key12<_len12;_key12++)urls[_key12]=arguments[_key12];return Promise.all(urls.map((function(oneOrSeries){return Array.isArray(oneOrSeries)?sequence(oneOrSeries.map((function(url){return function(){return addScript(url)}}))):addScript(oneOrSeries)})))},importStyles:function(){for(var _len13=arguments.length,urls=new Array(_len13),_key13=0;_key13<_len13;_key13++)urls[_key13]=arguments[_key13];return Promise.all(urls.map((function(oneOrSeries){return Array.isArray(oneOrSeries)?sequence(oneOrSeries.map((function(url){return function(){return addStyle(url)}}))):addStyle(oneOrSeries)})))}}}(),importScripts=_ref8.importScripts,importStyles=_ref8.importStyles,parse=function(){var tokenTable=Util.toEnum({$:"State.variables.",_:"State.temporary.",to:"=",eq:"==",neq:"!=",is:"===",isnot:"!==",gt:">",gte:">=",lt:"<",lte:"<=",and:"&&",or:"||",not:"!",def:'"undefined" !== typeof',ndef:'"undefined" === typeof'}),parseRe=new RegExp(["(?:\"\"|''|``)",'(?:"(?:\\\\.|[^"\\\\])+")',"(?:'(?:\\\\.|[^'\\\\])+')","(`(?:\\\\.|[^`\\\\])+`)","(?:[=+\\-*\\/%<>&\\|\\^~!?:,;\\(\\)\\[\\]{}]+)","([^\"'=+\\-*\\/%<>&\\|\\^~!?:,;\\(\\)\\[\\]{}\\s]+)"].join("|"),"g"),notSpaceRe=/\S/,varTest=new RegExp("^".concat(Patterns.variable)),withColonTestRe=/^\s*:/,withNotTestRe=/^\s+not\b/;function parse(rawCodeString){if(0!==parseRe.lastIndex)throw new RangeError("Scripting.parse last index is non-zero at start");for(var match,code=rawCodeString;null!==(match=parseRe.exec(code));)if(match[1]){var rawTemplate=match[1],parsedTemplate=parseTemplate(rawTemplate);parsedTemplate!==rawTemplate&&(code=code.splice(match.index,rawTemplate.length,parsedTemplate),parseRe.lastIndex+=parsedTemplate.length-rawTemplate.length)}else if(match[2]){var token=match[2];if("$"===token||"_"===token)continue;if(varTest.test(token))token=token[0];else if("is"===token){var start=parseRe.lastIndex,ahead=code.slice(start);withNotTestRe.test(ahead)&&(code=code.splice(start,ahead.search(notSpaceRe)),token="isnot")}else{var _ahead=code.slice(parseRe.lastIndex);if(withColonTestRe.test(_ahead))continue}tokenTable[token]&&(code=code.splice(match.index,token.length,tokenTable[token]),parseRe.lastIndex+=tokenTable[token].length-token.length)}return code}var templateGroupStartRe=/\$\{/g,templateGroupParseRe=new RegExp(["(?:\"\"|'')",'(?:"(?:\\\\.|[^"\\\\])+")',"(?:'(?:\\\\.|[^'\\\\])+')","(\\{)","(\\})"].join("|"),"g");function parseTemplate(rawTemplateLiteral){if(0!==templateGroupStartRe.lastIndex)throw new RangeError("Scripting.parse last index is non-zero at start of template literal");for(var startMatch,template=rawTemplateLiteral;null!==(startMatch=templateGroupStartRe.exec(template));){var startIdx=startMatch.index+2,endIdx=startIdx,depth=1,endMatch=void 0;for(templateGroupParseRe.lastIndex=startIdx;null!==(endMatch=templateGroupParseRe.exec(template));)if(endMatch[1]?++depth:endMatch[2]&&--depth,0===depth){endIdx=endMatch.index;break}if(endIdx>startIdx){var parseIndex=parseRe.lastIndex,rawGroup=template.slice(startIdx,endIdx);parseRe.lastIndex=0;var parsedGroup=parse(rawGroup);parseRe.lastIndex=parseIndex,template=template.splice(startIdx,rawGroup.length,parsedGroup),templateGroupStartRe.lastIndex+=parsedGroup.length-rawGroup.length}}return template}return parse}();function evalJavaScript(code,output,data){return function(code,output,evalJavaScript$Data$){return eval(code)}.call(output?{output:output}:null,String(code),output,data)}function evalTwineScript(code,output,data){return function(code,output,evalTwineScript$Data$){return eval(code)}.call(output?{output:output}:null,parse(String(code)),output,data)}return Object.freeze(Object.defineProperties({},{parse:{value:parse},evalJavaScript:{value:evalJavaScript},evalTwineScript:{value:evalTwineScript}}))}(),_ref9=function(){var Lexer=function(){function Lexer(source,initialState){if(_classCallCheck(this,Lexer),arguments.length<2)throw new Error("Lexer constructor called with too few parameters (source:string , initialState:function)");Object.defineProperties(this,{source:{value:source},initial:{value:initialState},state:{writable:!0,value:initialState},start:{writable:!0,value:0},pos:{writable:!0,value:0},depth:{writable:!0,value:0},items:{writable:!0,value:[]},data:{writable:!0,value:{}}})}return _createClass(Lexer,[{key:"reset",value:function(){this.state=this.initial,this.start=0,this.pos=0,this.depth=0,this.items=[],this.data={}}},{key:"run",value:function(){for(;null!==this.state;)this.state=this.state(this);return this.items}},{key:"nextItem",value:function(){for(;0===this.items.length&&null!==this.state;)this.state=this.state(this);return this.items.shift()}},{key:"next",value:function(){return this.pos>=this.source.length?-1:this.source[this.pos++]}},{key:"peek",value:function(){return this.pos>=this.source.length?-1:this.source[this.pos]}},{key:"backup",value:function(num){this.pos-=num||1}},{key:"forward",value:function(num){this.pos+=num||1}},{key:"ignore",value:function(){this.start=this.pos}},{key:"accept",value:function(valid){var ch=this.next();return-1!==ch&&(!!valid.includes(ch)||(this.backup(),!1))}},{key:"acceptRe",value:function(validRe){var ch=this.next();return-1!==ch&&(!!validRe.test(ch)||(this.backup(),!1))}},{key:"acceptRun",value:function(valid){for(;;){var ch=this.next();if(-1===ch)return;if(!valid.includes(ch))break}this.backup()}},{key:"acceptRunRe",value:function(validRe){for(;;){var ch=this.next();if(-1===ch)return;if(!validRe.test(ch))break}this.backup()}},{key:"emit",value:function(type){this.items.push({type:type,text:this.source.slice(this.start,this.pos),start:this.start,pos:this.pos}),this.start=this.pos}},{key:"error",value:function(type,message){if(arguments.length<2)throw new Error("Lexer.prototype.error called with too few parameters (type:number , message:string)");return this.items.push({type:type,message:message,text:this.source.slice(this.start,this.pos),start:this.start,pos:this.pos}),null}}],[{key:"enumFromNames",value:function(names){var obj=names.reduce((function(obj,name,i){return obj[name]=i,obj}),{});return Object.freeze(Object.assign(Object.create(null),obj))}}]),Lexer}();return{EOF:-1,Lexer:Lexer}}(),EOF=_ref9.EOF,Lexer=_ref9.Lexer,Wikifier=function(){var _optionsStack,lookaheadRe,idOrClassRe,_callDepth=0,Wikifier=function(){function Wikifier(destination,source,options){_classCallCheck(this,Wikifier),Wikifier.Parser.Profile.isEmpty()&&Wikifier.Parser.Profile.compile(),Object.defineProperties(this,{source:{value:String(source)},options:{writable:!0,value:Object.assign({profile:"all"},options)},nextMatch:{writable:!0,value:0},output:{writable:!0,value:null},_rawArgs:{writable:!0,value:""}}),null==destination?this.output=document.createDocumentFragment():destination.jquery?this.output=destination[0]:this.output=destination;try{++_callDepth,this.subWikify(this.output),1===_callDepth&&Config.cleanupWikifierOutput&&convertBreaks(this.output)}finally{--_callDepth}}return _createClass(Wikifier,[{key:"subWikify",value:function(output,terminator,options){var newOptions,oldOptions,oldOutput=this.output;this.output=output,Wikifier.Option.length>0&&(newOptions=Object.assign(newOptions||{},Wikifier.Option.options)),null!==options&&"object"===_typeof(options)&&(newOptions=Object.assign(newOptions||{},options)),newOptions&&(oldOptions=this.options,this.options=Object.assign({},this.options,newOptions));var terminatorMatch,parserMatch,parsersProfile=Wikifier.Parser.Profile.get(this.options.profile),terminatorRegExp=terminator?new RegExp("(?:".concat(terminator,")"),this.options.ignoreTerminatorCase?"gim":"gm"):null;do{if(parsersProfile.parserRegExp.lastIndex=this.nextMatch,terminatorRegExp&&(terminatorRegExp.lastIndex=this.nextMatch),parserMatch=parsersProfile.parserRegExp.exec(this.source),(terminatorMatch=terminatorRegExp?terminatorRegExp.exec(this.source):null)&&(!parserMatch||terminatorMatch.index<=parserMatch.index))return terminatorMatch.index>this.nextMatch&&this.outputText(this.output,this.nextMatch,terminatorMatch.index),this.matchStart=terminatorMatch.index,this.matchLength=terminatorMatch[0].length,this.matchText=terminatorMatch[0],this.nextMatch=terminatorRegExp.lastIndex,this.output=oldOutput,void(oldOptions&&(this.options=oldOptions));if(parserMatch){parserMatch.index>this.nextMatch&&this.outputText(this.output,this.nextMatch,parserMatch.index),this.matchStart=parserMatch.index,this.matchLength=parserMatch[0].length,this.matchText=parserMatch[0],this.nextMatch=parsersProfile.parserRegExp.lastIndex;for(var matchingParser=void 0,i=1,iend=parserMatch.length;i<iend;++i)if(parserMatch[i]){matchingParser=i-1;break}if(parsersProfile.parsers[matchingParser].handler(this),null!=TempState.break)break}}while(terminatorMatch||parserMatch);null==TempState.break?this.nextMatch<this.source.length&&(this.outputText(this.output,this.nextMatch,this.source.length),this.nextMatch=this.source.length):this.output.lastChild&&this.output.lastChild.nodeType===Node.ELEMENT_NODE&&"BR"===this.output.lastChild.nodeName.toUpperCase()&&jQuery(this.output.lastChild).remove(),this.output=oldOutput,oldOptions&&(this.options=oldOptions)}},{key:"outputText",value:function(destination,startPos,endPos){jQuery(destination).append(document.createTextNode(this.source.substring(startPos,endPos)))}},{key:"rawArgs",value:function(){return this._rawArgs}},{key:"fullArgs",value:function(){return Scripting.parse(this._rawArgs)}}],[{key:"wikifyEval",value:function(text){var output=document.createDocumentFragment();new Wikifier(output,text);var errors=output.querySelector(".error");if(null!==errors)throw new Error(errors.textContent.replace(errorPrologRegExp,""));return output}},{key:"createInternalLink",value:function(destination,passage,text,callback){var $link=jQuery(document.createElement("a"));return null!=passage&&($link.attr("data-passage",passage),Story.has(passage)?($link.addClass("link-internal"),Config.addVisitedLinkClass&&State.hasPlayed(passage)&&$link.addClass("link-visited")):$link.addClass("link-broken"),$link.ariaClick({one:!0},(function(){"function"==typeof callback&&callback(),Engine.play(passage)}))),text&&$link.append(document.createTextNode(text)),destination&&$link.appendTo(destination),$link[0]}},{key:"createExternalLink",value:function(destination,url,text){var $link=jQuery(document.createElement("a")).attr("target","_blank").addClass("link-external").text(text).appendTo(destination);return null!=url&&$link.attr({href:url,tabindex:0}),$link[0]}},{key:"isExternalLink",value:function(link){return!Story.has(link)&&(new RegExp("^".concat(Patterns.url),"gim").test(link)||/[/.?#]/.test(link))}}]),Wikifier}();return Object.defineProperty(Wikifier,"Option",{value:(_optionsStack=[],Object.freeze(Object.defineProperties({},{length:{get:function(){return _optionsStack.length}},options:{get:function(){return Object.assign.apply(Object,[{}].concat(_toConsumableArray(_optionsStack)))}},clear:{value:function(){_optionsStack=[]}},get:{value:function(idx){return _optionsStack[idx]}},pop:{value:function(){return _optionsStack.pop()}},push:{value:function(options){if("object"!==_typeof(options)||null===options)throw new TypeError("Wikifier.Option.push options parameter must be an object (received: ".concat(Util.getType(options),")"));return _optionsStack.push(options)}}})))}),Object.defineProperty(Wikifier,"Parser",{value:function(){var _profiles,_parsers=[];function parsersHas(name){return!!_parsers.find((function(parser){return parser.name===name}))}return Object.freeze(Object.defineProperties({},{parsers:{get:function(){return _parsers}},add:{value:function(parser){if("object"!==_typeof(parser))throw new Error("Wikifier.Parser.add parser parameter must be an object");if(!parser.hasOwnProperty("name"))throw new Error('parser object missing required "name" property');if("string"!=typeof parser.name)throw new Error('parser object "name" property must be a string');if(!parser.hasOwnProperty("match"))throw new Error('parser object missing required "match" property');if("string"!=typeof parser.match)throw new Error('parser object "match" property must be a string');if(!parser.hasOwnProperty("handler"))throw new Error('parser object missing required "handler" property');if("function"!=typeof parser.handler)throw new Error('parser object "handler" property must be a function');if(parser.hasOwnProperty("profiles")&&!Array.isArray(parser.profiles))throw new Error('parser object "profiles" property must be an array');if(parsersHas(parser.name))throw new Error('cannot clobber existing parser "'.concat(parser.name,'"'));_parsers.push(parser)}},delete:{value:function(name){var parser=_parsers.find((function(parser){return parser.name===name}));parser&&_parsers.delete(parser)}},isEmpty:{value:function(){return 0===_parsers.length}},has:{value:parsersHas},get:{value:function(name){return _parsers.find((function(parser){return parser.name===name}))||null}},Profile:{value:Object.freeze(Object.defineProperties({},{profiles:{get:function(){return _profiles}},compile:{value:function(){var all=_parsers,core=all.filter((function(parser){return!Array.isArray(parser.profiles)||parser.profiles.includes("core")}));return _profiles=Object.freeze({all:{parsers:all,parserRegExp:new RegExp(all.map((function(parser){return"(".concat(parser.match,")")})).join("|"),"gm")},core:{parsers:core,parserRegExp:new RegExp(core.map((function(parser){return"(".concat(parser.match,")")})).join("|"),"gm")}})}},isEmpty:{value:function(){return"object"!==_typeof(_profiles)||0===Object.keys(_profiles).length}},has:{value:function(profile){return"object"===_typeof(_profiles)&&_profiles.hasOwnProperty(profile)}},get:{value:function(profile){if("object"!==_typeof(_profiles)||!_profiles.hasOwnProperty(profile))throw new Error('nonexistent parser profile "'.concat(profile,'"'));return _profiles[profile]}}}))}}))}()}),Object.defineProperties(Wikifier,{helpers:{value:{}},getValue:{value:State.getVar},setValue:{value:State.setVar},parse:{value:Scripting.parse},evalExpression:{value:Scripting.evalTwineScript},evalStatements:{value:Scripting.evalTwineScript},textPrimitives:{value:Patterns}}),Object.defineProperties(Wikifier.helpers,{inlineCss:{value:(lookaheadRe=new RegExp(Patterns.inlineCss,"gm"),idOrClassRe=new RegExp("(".concat(Patterns.cssIdOrClassSigil,")(").concat(Patterns.anyLetter,"+)"),"g"),function(w){var matched,css={classes:[],id:"",styles:{}};do{lookaheadRe.lastIndex=w.nextMatch;var match=lookaheadRe.exec(w.source);if(matched=match&&match.index===w.nextMatch){if(match[1])css.styles[Util.fromCssProperty(match[1])]=match[2].trim();else if(match[3])css.styles[Util.fromCssProperty(match[3])]=match[4].trim();else if(match[5]){var subMatch=void 0;for(idOrClassRe.lastIndex=0;null!==(subMatch=idOrClassRe.exec(match[5]));)"."===subMatch[1]?css.classes.push(subMatch[2]):css.id=subMatch[2]}w.nextMatch=lookaheadRe.lastIndex}}while(matched);return css})},evalText:{value:function(text){var result;try{switch(_typeof(result=Scripting.evalTwineScript(text))){case"string":""===result.trim()&&(result=text);break;case"number":result=String(result);break;default:result=text}}catch(ex){result=text}return result}},evalPassageId:{value:function(passage){return null==passage||Story.has(passage)?passage:Wikifier.helpers.evalText(passage)}},hasBlockContext:{value:function(nodes){for(var hasGCS="function"==typeof window.getComputedStyle,i=nodes.length-1;i>=0;--i){var node=nodes[i];switch(node.nodeType){case Node.ELEMENT_NODE:var tagName=node.nodeName.toUpperCase();if("BR"===tagName)return!0;var styles=hasGCS?window.getComputedStyle(node,null):node.currentStyle;if(styles&&styles.display){if("none"===styles.display)continue;return"block"===styles.display}switch(tagName){case"ADDRESS":case"ARTICLE":case"ASIDE":case"BLOCKQUOTE":case"CENTER":case"DIV":case"DL":case"FIGURE":case"FOOTER":case"FORM":case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"HEADER":case"HR":case"MAIN":case"NAV":case"OL":case"P":case"PRE":case"SECTION":case"TABLE":case"UL":return!0}return!1;case Node.COMMENT_NODE:continue;default:return!1}}return!0}},createShadowSetterCallback:{value:function(){var macroParser=null;function getMacroContextShadowView(){for(var macro=macroParser||function(){if(!macroParser&&!(macroParser=Wikifier.Parser.get("macro")))throw new Error('cannot find "macro" parser');return macroParser}(),view=new Set,context=macro.context;null!==context;context=context.parent)context._shadows&&context._shadows.forEach((function(name){return view.add(name)}));return _toConsumableArray(view)}return function(code){var shadowStore={};return getMacroContextShadowView().forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;shadowStore[varName]=store[varKey]})),function(){var shadowNames=Object.keys(shadowStore),valueCache=shadowNames.length>0?{}:null;try{return shadowNames.forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;store.hasOwnProperty(varKey)&&(valueCache[varKey]=store[varKey]),store[varKey]=shadowStore[varName]})),Scripting.evalJavaScript(code)}finally{shadowNames.forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;shadowStore[varName]=store[varKey],valueCache.hasOwnProperty(varKey)?store[varKey]=valueCache[varKey]:delete store[varKey]}))}}}}()},parseSquareBracketedMarkup:{value:function(){var Item=Lexer.enumFromNames(["Error","DelimLTR","DelimRTL","InnerMeta","ImageMeta","LinkMeta","Link","RightMeta","Setter","Source","Text"]),Delim=Lexer.enumFromNames(["None","LTR","RTL"]);function slurpQuote(lexer,endQuote){loop:for(;;)switch(lexer.next()){case"\\":var ch=lexer.next();if(ch!==EOF&&"\n"!==ch)break;case EOF:case"\n":return EOF;case endQuote:break loop}return lexer.pos}function lexLeftMeta(lexer){if(!lexer.accept("["))return lexer.error(Item.Error,"malformed square-bracketed markup");if(lexer.accept("["))lexer.data.isLink=!0,lexer.emit(Item.LinkMeta);else{if(lexer.accept("<>"),!(lexer.accept("Ii")&&lexer.accept("Mm")&&lexer.accept("Gg")&&lexer.accept("[")))return lexer.error(Item.Error,"malformed square-bracketed markup");lexer.data.isLink=!1,lexer.emit(Item.ImageMeta)}return lexer.depth=2,lexCoreComponents}function lexCoreComponents(lexer){for(var what=lexer.data.isLink?"link":"image",delim=Delim.None;;)switch(lexer.next()){case EOF:case"\n":return lexer.error(Item.Error,"unterminated ".concat(what," markup"));case'"':if(slurpQuote(lexer,'"')===EOF)return lexer.error(Item.Error,"unterminated double quoted string in ".concat(what," markup"));break;case"|":delim===Delim.None&&(delim=Delim.LTR,lexer.backup(),lexer.emit(Item.Text),lexer.forward(),lexer.emit(Item.DelimLTR));break;case"-":delim===Delim.None&&">"===lexer.peek()&&(delim=Delim.LTR,lexer.backup(),lexer.emit(Item.Text),lexer.forward(2),lexer.emit(Item.DelimLTR));break;case"<":delim===Delim.None&&"-"===lexer.peek()&&(delim=Delim.RTL,lexer.backup(),lexer.emit(lexer.data.isLink?Item.Link:Item.Source),lexer.forward(2),lexer.emit(Item.DelimRTL));break;case"[":++lexer.depth;break;case"]":if(--lexer.depth,1===lexer.depth)switch(lexer.peek()){case"[":return++lexer.depth,lexer.backup(),delim===Delim.RTL?lexer.emit(Item.Text):lexer.emit(lexer.data.isLink?Item.Link:Item.Source),lexer.forward(2),lexer.emit(Item.InnerMeta),lexer.data.isLink?lexSetter:lexImageLink;case"]":return--lexer.depth,lexer.backup(),delim===Delim.RTL?lexer.emit(Item.Text):lexer.emit(lexer.data.isLink?Item.Link:Item.Source),lexer.forward(2),lexer.emit(Item.RightMeta),null;default:return lexer.error(Item.Error,"malformed ".concat(what," markup"))}}}function lexImageLink(lexer){for(var what=lexer.data.isLink?"link":"image";;)switch(lexer.next()){case EOF:case"\n":return lexer.error(Item.Error,"unterminated ".concat(what," markup"));case'"':if(slurpQuote(lexer,'"')===EOF)return lexer.error(Item.Error,"unterminated double quoted string in ".concat(what," markup link component"));break;case"[":++lexer.depth;break;case"]":if(--lexer.depth,1===lexer.depth)switch(lexer.peek()){case"[":return++lexer.depth,lexer.backup(),lexer.emit(Item.Link),lexer.forward(2),lexer.emit(Item.InnerMeta),lexSetter;case"]":return--lexer.depth,lexer.backup(),lexer.emit(Item.Link),lexer.forward(2),lexer.emit(Item.RightMeta),null;default:return lexer.error(Item.Error,"malformed ".concat(what," markup"))}}}function lexSetter(lexer){for(var what=lexer.data.isLink?"link":"image";;)switch(lexer.next()){case EOF:case"\n":return lexer.error(Item.Error,"unterminated ".concat(what," markup"));case'"':if(slurpQuote(lexer,'"')===EOF)return lexer.error(Item.Error,"unterminated double quoted string in ".concat(what," markup setter component"));break;case"'":if(slurpQuote(lexer,"'")===EOF)return lexer.error(Item.Error,"unterminated single quoted string in ".concat(what," markup setter component"));break;case"[":++lexer.depth;break;case"]":if(--lexer.depth,1===lexer.depth)return"]"!==lexer.peek()?lexer.error(Item.Error,"malformed ".concat(what," markup")):(--lexer.depth,lexer.backup(),lexer.emit(Item.Setter),lexer.forward(2),lexer.emit(Item.RightMeta),null)}}return function(w){var lexer=new Lexer(w.source,lexLeftMeta);lexer.start=lexer.pos=w.matchStart;var markup={},items=lexer.run(),last=items.last();return last&&last.type===Item.Error?markup.error=last.message:items.forEach((function(item){var text=item.text.trim();switch(item.type){case Item.ImageMeta:markup.isImage=!0,"<"===text[1]?markup.align="left":">"===text[1]&&(markup.align="right");break;case Item.LinkMeta:markup.isLink=!0;break;case Item.Link:"~"===text[0]?(markup.forceInternal=!0,markup.link=text.slice(1)):markup.link=text;break;case Item.Setter:markup.setter=text;break;case Item.Source:markup.source=text;break;case Item.Text:markup.text=text}})),markup.pos=lexer.pos,markup}}()}}),Wikifier}();!function(){function _verbatimTagHandler(w){this.lookahead.lastIndex=w.matchStart;var match=this.lookahead.exec(w.source);match&&match.index===w.matchStart&&(w.nextMatch=this.lookahead.lastIndex,jQuery(document.createDocumentFragment()).append(match[1]).appendTo(w.output))}Wikifier.Parser.add({name:"quoteByBlock",profiles:["block"],match:"^<<<\\n",terminator:"^<<<\\n",handler:function(w){Wikifier.helpers.hasBlockContext(w.output.childNodes)?w.subWikify(jQuery(document.createElement("blockquote")).appendTo(w.output).get(0),this.terminator):jQuery(w.output).append(document.createTextNode(w.matchText))}}),Wikifier.Parser.add({name:"quoteByLine",profiles:["block"],match:"^>+",lookahead:/^>+/gm,terminator:"\\n",handler:function(w){if(Wikifier.helpers.hasBlockContext(w.output.childNodes)){var matched,i,destStack=[w.output],curLevel=0,newLevel=w.matchLength;do{if(newLevel>curLevel)for(i=curLevel;i<newLevel;++i)destStack.push(jQuery(document.createElement("blockquote")).appendTo(destStack[destStack.length-1]).get(0));else if(newLevel<curLevel)for(i=curLevel;i>newLevel;--i)destStack.pop();curLevel=newLevel,w.subWikify(destStack[destStack.length-1],this.terminator),jQuery(document.createElement("br")).appendTo(destStack[destStack.length-1]),this.lookahead.lastIndex=w.nextMatch;var match=this.lookahead.exec(w.source);(matched=match&&match.index===w.nextMatch)&&(newLevel=match[0].length,w.nextMatch+=match[0].length)}while(matched)}else jQuery(w.output).append(document.createTextNode(w.matchText))}}),Wikifier.Parser.add({name:"macro",profiles:["core"],match:"<<",lookahead:new RegExp("<<(/?".concat(Patterns.macroName,")(?:\\s*)((?:(?:/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/)|(?://.*\\n)|(?:`(?:\\\\.|[^`\\\\])*`)|(?:\"(?:\\\\.|[^\"\\\\])*\")|(?:'(?:\\\\.|[^'\\\\])*')|(?:\\[(?:[<>]?[Ii][Mm][Gg])?\\[[^\\r\\n]*?\\]\\]+)|[^>]|(?:>(?!>)))*)>>"),"gm"),working:{source:"",name:"",arguments:"",index:0},context:null,handler:function(w){var matchStart=this.lookahead.lastIndex=w.matchStart;if(this.parseTag(w)){var macro,nextMatch=w.nextMatch,name=this.working.name,rawArgs=this.working.arguments;try{if(!(macro=Macro.get(name))){if(Macro.tags.has(name)){var tags=Macro.tags.get(name);return throwError(w.output,"child tag <<".concat(name,">> was found outside of a call to its parent macro").concat(1===tags.length?"":"s"," <<").concat(tags.join(">>, <<"),">>"),w.source.slice(matchStart,w.nextMatch))}return throwError(w.output,"macro <<".concat(name,">> does not exist"),w.source.slice(matchStart,w.nextMatch))}var payload=null;if(void 0!==macro.tags&&!(payload=this.parseBody(w,macro)))return w.nextMatch=nextMatch,throwError(w.output,"cannot find a closing tag for macro <<".concat(name,">>"),"".concat(w.source.slice(matchStart,w.nextMatch),"…"));if("function"!=typeof macro.handler)return throwError(w.output,"macro <<".concat(name,">> handler function ").concat(void 0===macro.handler?"does not exist":"is not a function"),w.source.slice(matchStart,w.nextMatch));var args=payload?payload[0].args:this.createArgs(rawArgs,this.skipArgs(macro,macro.name));if(void 0!==macro._MACRO_API){this.context=new MacroContext({macro:macro,name:name,args:args,payload:payload,source:w.source.slice(matchStart,w.nextMatch),parent:this.context,parser:w});try{macro.handler.call(this.context)}finally{this.context=this.context.parent}}else{var prevRawArgs=w._rawArgs;w._rawArgs=rawArgs;try{macro.handler(w.output,name,args,w,payload)}finally{w._rawArgs=prevRawArgs}}}catch(ex){return throwError(w.output,"cannot execute ".concat(macro&¯o.isWidget?"widget":"macro"," <<").concat(name,">>: ").concat(ex.message),w.source.slice(matchStart,w.nextMatch))}finally{this.working.source="",this.working.name="",this.working.arguments="",this.working.index=0}}else w.outputText(w.output,w.matchStart,w.nextMatch)},parseTag:function(w){var match=this.lookahead.exec(w.source);return!(!match||match.index!==w.matchStart||!match[1])&&(w.nextMatch=this.lookahead.lastIndex,this.working.source=w.source.slice(match.index,this.lookahead.lastIndex),this.working.name=match[1],this.working.arguments=match[2],this.working.index=match.index,!0)},parseBody:function(w,macro){for(var openTag=this.working.name,closeTag="/".concat(openTag),closeAlt="end".concat(openTag),bodyTags=!!Array.isArray(macro.tags)&¯o.tags,payload=[],end=-1,opened=1,curSource=this.working.source,curTag=this.working.name,curArgument=this.working.arguments,contentStart=w.nextMatch;-1!==(w.matchStart=w.source.indexOf(this.match,w.nextMatch));)if(this.parseTag(w)){var tagSource=this.working.source,tagName=this.working.name,tagArgs=this.working.arguments,tagBegin=this.working.index,tagEnd=w.nextMatch,hasArgs=""!==tagArgs.trim();switch(tagName){case openTag:++opened;break;case closeAlt:case closeTag:if(hasArgs)throw w.nextMatch=tagBegin+2+tagName.length,new Error('malformed closing tag: "'.concat(tagSource,'"'));--opened;break;default:if(hasArgs&&(tagName.startsWith("/")||tagName.startsWith("end"))){this.lookahead.lastIndex=w.nextMatch=tagBegin+2+tagName.length;continue}if(1===opened&&bodyTags)for(var i=0,iend=bodyTags.length;i<iend;++i)tagName===bodyTags[i]&&(payload.push({source:curSource,name:curTag,arguments:curArgument,args:this.createArgs(curArgument,this.skipArgs(macro,curTag)),contents:w.source.slice(contentStart,tagBegin)}),curSource=tagSource,curTag=tagName,curArgument=tagArgs,contentStart=tagEnd)}if(0===opened){payload.push({source:curSource,name:curTag,arguments:curArgument,args:this.createArgs(curArgument,this.skipArgs(macro,curTag)),contents:w.source.slice(contentStart,tagBegin)}),end=tagEnd;break}}else this.lookahead.lastIndex=w.nextMatch=w.matchStart+this.match.length;return-1!==end?(w.nextMatch=end,payload):null},createArgs:function(rawArgsString,skipArgs){var args=skipArgs?[]:this.parseArgs(rawArgsString);return Object.defineProperties(args,{raw:{value:rawArgsString},full:{value:Scripting.parse(rawArgsString)}}),args},skipArgs:function(macro,tagName){if(void 0!==macro.skipArgs){var sa=macro.skipArgs;return"boolean"==typeof sa&&sa||Array.isArray(sa)&&sa.includes(tagName)}return void 0!==macro.skipArg0&&(macro.skipArg0&¯o.name===tagName)},parseArgs:function(){var Item=Lexer.enumFromNames(["Error","Bareword","Expression","String","SquareBracket"]),spaceRe=new RegExp(Patterns.space),notSpaceRe=new RegExp(Patterns.notSpace),varTest=new RegExp("^".concat(Patterns.variable));function slurpQuote(lexer,endQuote){loop:for(;;)switch(lexer.next()){case"\\":var ch=lexer.next();if(ch!==EOF&&"\n"!==ch)break;case EOF:case"\n":return EOF;case endQuote:break loop}return lexer.pos}function lexSpace(lexer){var offset=lexer.source.slice(lexer.pos).search(notSpaceRe);if(offset===EOF)return null;switch(0!==offset&&(lexer.pos+=offset,lexer.ignore()),lexer.next()){case"`":return lexExpression;case'"':return lexDoubleQuote;case"'":return lexSingleQuote;case"[":return lexSquareBracket;default:return lexBareword}}function lexExpression(lexer){return slurpQuote(lexer,"`")===EOF?lexer.error(Item.Error,"unterminated backquote expression"):(lexer.emit(Item.Expression),lexSpace)}function lexDoubleQuote(lexer){return slurpQuote(lexer,'"')===EOF?lexer.error(Item.Error,"unterminated double quoted string"):(lexer.emit(Item.String),lexSpace)}function lexSingleQuote(lexer){return slurpQuote(lexer,"'")===EOF?lexer.error(Item.Error,"unterminated single quoted string"):(lexer.emit(Item.String),lexSpace)}function lexSquareBracket(lexer){var what;if(lexer.accept("<>IiMmGg")?(what="image",lexer.acceptRun("<>IiMmGg")):what="link",!lexer.accept("["))return lexer.error(Item.Error,"malformed ".concat(what," markup"));lexer.depth=2;loop:for(;;)switch(lexer.next()){case"\\":var ch=lexer.next();if(ch!==EOF&&"\n"!==ch)break;case EOF:case"\n":return lexer.error(Item.Error,"unterminated ".concat(what," markup"));case"[":++lexer.depth;break;case"]":if(--lexer.depth,lexer.depth<0)return lexer.error(Item.Error,"unexpected right square bracket ']'");if(1===lexer.depth){if("]"===lexer.next()){--lexer.depth;break loop}lexer.backup()}}return lexer.emit(Item.SquareBracket),lexSpace}function lexBareword(lexer){var offset=lexer.source.slice(lexer.pos).search(spaceRe);return lexer.pos=offset===EOF?lexer.source.length:lexer.pos+offset,lexer.emit(Item.Bareword),offset===EOF?null:lexSpace}return function(rawArgsString){var lexer=new Lexer(rawArgsString,lexSpace),args=[];return lexer.run().forEach((function(item){var arg=item.text;switch(item.type){case Item.Error:throw new Error('unable to parse macro argument "'.concat(arg,'": ').concat(item.message));case Item.Bareword:if(varTest.test(arg))arg=State.getVar(arg);else if(/^(?:settings|setup)[.[]/.test(arg))try{arg=Scripting.evalTwineScript(arg)}catch(ex){throw new Error('unable to parse macro argument "'.concat(arg,'": ').concat(ex.message))}else if("null"===arg)arg=null;else if("undefined"===arg)arg=undefined;else if("true"===arg)arg=!0;else if("false"===arg)arg=!1;else if("NaN"===arg)arg=NaN;else{var argAsNum=Number(arg);Number.isNaN(argAsNum)||(arg=argAsNum)}break;case Item.Expression:if(""===(arg=arg.slice(1,-1).trim()))arg=undefined;else try{arg=Scripting.evalTwineScript("(".concat(arg,")"))}catch(ex){throw new Error('unable to parse macro argument expression "'.concat(arg,'": ').concat(ex.message))}break;case Item.String:try{arg=Scripting.evalJavaScript(arg)}catch(ex){throw new Error('unable to parse macro argument string "'.concat(arg,'": ').concat(ex.message))}break;case Item.SquareBracket:var markup=Wikifier.helpers.parseSquareBracketedMarkup({source:arg,matchStart:0});if(markup.hasOwnProperty("error"))throw new Error('unable to parse macro argument "'.concat(arg,'": ').concat(markup.error));if(markup.pos<arg.length)throw new Error('unable to parse macro argument "'.concat(arg,'": unexpected character(s) "').concat(arg.slice(markup.pos),'" (pos: ').concat(markup.pos,")"));markup.isLink?((arg={isLink:!0}).count=markup.hasOwnProperty("text")?2:1,arg.link=Wikifier.helpers.evalPassageId(markup.link),arg.text=markup.hasOwnProperty("text")?Wikifier.helpers.evalText(markup.text):arg.link,arg.external=!markup.forceInternal&&Wikifier.isExternalLink(arg.link),arg.setFn=markup.hasOwnProperty("setter")?Wikifier.helpers.createShadowSetterCallback(Scripting.parse(markup.setter)):null):markup.isImage&&(arg=function(source){var imgObj={source:source,isImage:!0};if("data:"!==source.slice(0,5)&&Story.has(source)){var passage=Story.get(source);passage.tags.includes("Twine.image")&&(imgObj.source=passage.text,imgObj.passage=passage.title)}return imgObj}(Wikifier.helpers.evalPassageId(markup.source)),markup.hasOwnProperty("align")&&(arg.align=markup.align),markup.hasOwnProperty("text")&&(arg.title=Wikifier.helpers.evalText(markup.text)),markup.hasOwnProperty("link")&&(arg.link=Wikifier.helpers.evalPassageId(markup.link),arg.external=!markup.forceInternal&&Wikifier.isExternalLink(arg.link)),arg.setFn=markup.hasOwnProperty("setter")?Wikifier.helpers.createShadowSetterCallback(Scripting.parse(markup.setter)):null)}args.push(arg)})),args}}()}),Wikifier.Parser.add({name:"link",profiles:["core"],match:"\\[\\[[^[]",handler:function(w){var markup=Wikifier.helpers.parseSquareBracketedMarkup(w);if(markup.hasOwnProperty("error"))w.outputText(w.output,w.matchStart,w.nextMatch);else{w.nextMatch=markup.pos;var link=Wikifier.helpers.evalPassageId(markup.link),text=markup.hasOwnProperty("text")?Wikifier.helpers.evalText(markup.text):link,setFn=markup.hasOwnProperty("setter")?Wikifier.helpers.createShadowSetterCallback(Scripting.parse(markup.setter)):null,output=(Config.debug?new DebugView(w.output,"link-markup","[[link]]",w.source.slice(w.matchStart,w.nextMatch)):w).output;markup.forceInternal||!Wikifier.isExternalLink(link)?Wikifier.createInternalLink(output,link,text,setFn):Wikifier.createExternalLink(output,link,text)}}}),Wikifier.Parser.add({name:"urlLink",profiles:["core"],match:Patterns.url,handler:function(w){w.outputText(Wikifier.createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch)}}),Wikifier.Parser.add({name:"image",profiles:["core"],match:"\\[[<>]?[Ii][Mm][Gg]\\[",handler:function(w){var markup=Wikifier.helpers.parseSquareBracketedMarkup(w);if(markup.hasOwnProperty("error"))w.outputText(w.output,w.matchStart,w.nextMatch);else{var debugView;w.nextMatch=markup.pos,Config.debug&&(debugView=new DebugView(w.output,"image-markup",markup.hasOwnProperty("link")?"[img[][link]]":"[img[]]",w.source.slice(w.matchStart,w.nextMatch))).modes({block:!0});var source,setFn=markup.hasOwnProperty("setter")?Wikifier.helpers.createShadowSetterCallback(Scripting.parse(markup.setter)):null,el=(Config.debug?debugView:w).output;if(markup.hasOwnProperty("link")){var link=Wikifier.helpers.evalPassageId(markup.link);(el=markup.forceInternal||!Wikifier.isExternalLink(link)?Wikifier.createInternalLink(el,link,null,setFn):Wikifier.createExternalLink(el,link)).classList.add("link-image")}if(el=jQuery(document.createElement("img")).appendTo(el).get(0),"data:"!==(source=Wikifier.helpers.evalPassageId(markup.source)).slice(0,5)&&Story.has(source)){var passage=Story.get(source);passage.tags.includes("Twine.image")&&(el.setAttribute("data-passage",passage.title),source=passage.text.trim())}el.src=source,markup.hasOwnProperty("text")&&(el.title=Wikifier.helpers.evalText(markup.text)),markup.hasOwnProperty("align")&&(el.align=markup.align)}}}),Wikifier.Parser.add({name:"monospacedByBlock",profiles:["block"],match:"^\\{\\{\\{\\n",lookahead:/^\{\{\{\n((?:^[^\n]*\n)+?)(^\}\}\}$\n?)/gm,handler:function(w){this.lookahead.lastIndex=w.matchStart;var match=this.lookahead.exec(w.source);if(match&&match.index===w.matchStart){var pre=jQuery(document.createElement("pre"));jQuery(document.createElement("code")).text(match[1]).appendTo(pre),pre.appendTo(w.output),w.nextMatch=this.lookahead.lastIndex}}}),Wikifier.Parser.add({name:"formatByChar",profiles:["core"],match:"''|//|__|\\^\\^|~~|==|\\{\\{\\{",handler:function(w){switch(w.matchText){case"''":w.subWikify(jQuery(document.createElement("strong")).appendTo(w.output).get(0),"''");break;case"//":w.subWikify(jQuery(document.createElement("em")).appendTo(w.output).get(0),"//");break;case"__":w.subWikify(jQuery(document.createElement("u")).appendTo(w.output).get(0),"__");break;case"^^":w.subWikify(jQuery(document.createElement("sup")).appendTo(w.output).get(0),"\\^\\^");break;case"~~":w.subWikify(jQuery(document.createElement("sub")).appendTo(w.output).get(0),"~~");break;case"==":w.subWikify(jQuery(document.createElement("s")).appendTo(w.output).get(0),"==");break;case"{{{":var lookahead=/\{\{\{((?:.|\n)*?)\}\}\}/gm;lookahead.lastIndex=w.matchStart;var match=lookahead.exec(w.source);match&&match.index===w.matchStart&&(jQuery(document.createElement("code")).text(match[1]).appendTo(w.output),w.nextMatch=lookahead.lastIndex)}}}),Wikifier.Parser.add({name:"customStyle",profiles:["core"],match:"@@",terminator:"@@",blockRe:/\s*\n/gm,handler:function(w){var css=Wikifier.helpers.inlineCss(w);this.blockRe.lastIndex=w.nextMatch;var blockMatch=this.blockRe.exec(w.source),blockLevel=blockMatch&&blockMatch.index===w.nextMatch,$el=jQuery(document.createElement(blockLevel?"div":"span")).appendTo(w.output);0===css.classes.length&&""===css.id&&0===Object.keys(css.styles).length?$el.addClass("marked"):(css.classes.forEach((function(className){return $el.addClass(className)})),""!==css.id&&$el.attr("id",css.id),$el.css(css.styles)),blockLevel?(w.nextMatch+=blockMatch[0].length,w.subWikify($el[0],"\\n?".concat(this.terminator))):w.subWikify($el[0],this.terminator)}}),Wikifier.Parser.add({name:"verbatimText",profiles:["core"],match:'"{3}|<[Nn][Oo][Ww][Ii][Kk][Ii]>',lookahead:/(?:"{3}((?:.|\n)*?)"{3})|(?:<[Nn][Oo][Ww][Ii][Kk][Ii]>((?:.|\n)*?)<\/[Nn][Oo][Ww][Ii][Kk][Ii]>)/gm,handler:function(w){this.lookahead.lastIndex=w.matchStart;var match=this.lookahead.exec(w.source);match&&match.index===w.matchStart&&(w.nextMatch=this.lookahead.lastIndex,jQuery(document.createElement("span")).addClass("verbatim").text(match[1]||match[2]).appendTo(w.output))}}),Wikifier.Parser.add({name:"horizontalRule",profiles:["core"],match:"^----+$\\n?|<[Hh][Rr]\\s*/?>\\n?",handler:function(w){jQuery(document.createElement("hr")).appendTo(w.output)}}),Wikifier.Parser.add({name:"emdash",profiles:["core"],match:"--",handler:function(w){jQuery(document.createTextNode("—")).appendTo(w.output)}}),Wikifier.Parser.add({name:"doubleDollarSign",profiles:["core"],match:"\\${2}",handler:function(w){jQuery(document.createTextNode("$")).appendTo(w.output)}}),Wikifier.Parser.add({name:"nakedVariable",profiles:["core"],match:"".concat(Patterns.variable,"(?:(?:\\.").concat(Patterns.identifier,")|(?:\\[\\d+\\])|(?:\\[\"(?:\\\\.|[^\"\\\\])+\"\\])|(?:\\['(?:\\\\.|[^'\\\\])+'\\])|(?:\\[").concat(Patterns.variable,"\\]))*"),handler:function(w){var result=State.getVar(w.matchText);null==result?jQuery(document.createTextNode(w.matchText)).appendTo(w.output):new Wikifier((Config.debug?new DebugView(w.output,"variable",w.matchText,w.matchText):w).output,stringFrom(result))}}),Wikifier.Parser.add({name:"template",profiles:["core"],match:"\\?".concat(Patterns.templateName),handler:function(w){var name=w.matchText.slice(1),template=Template.get(name),result=null;switch(template instanceof Array&&(template=template.random()),_typeof(template)){case"function":try{result=stringFrom(template.call({name:name}))}catch(ex){return throwError(w.output,"cannot execute function template ?".concat(name,": ").concat(ex.message),w.source.slice(w.matchStart,w.nextMatch))}break;case"string":result=template}null===result?jQuery(document.createTextNode(w.matchText)).appendTo(w.output):new Wikifier((Config.debug?new DebugView(w.output,"template",w.matchText,w.matchText):w).output,result)}}),Wikifier.Parser.add({name:"heading",profiles:["block"],match:"^!{1,6}",terminator:"\\n",handler:function(w){Wikifier.helpers.hasBlockContext(w.output.childNodes)?w.subWikify(jQuery(document.createElement("h".concat(w.matchLength))).appendTo(w.output).get(0),this.terminator):jQuery(w.output).append(document.createTextNode(w.matchText))}}),Wikifier.Parser.add({name:"table",profiles:["block"],match:"^\\|(?:[^\\n]*)\\|(?:[fhck]?)$",lookahead:/^\|([^\n]*)\|([fhck]?)$/gm,rowTerminator:"\\|(?:[cfhk]?)$\\n?",cellPattern:"(?:\\|([^\\n\\|]*)\\|)|(\\|[cfhk]?$\\n?)",cellTerminator:"(?:\\u0020*)\\|",rowTypes:{c:"caption",f:"tfoot",h:"thead","":"tbody"},handler:function(w){if(Wikifier.helpers.hasBlockContext(w.output.childNodes)){var matched,table=jQuery(document.createElement("table")).appendTo(w.output).get(0),prevColumns=[],curRowType=null,$rowContainer=null,rowCount=0;w.nextMatch=w.matchStart;do{this.lookahead.lastIndex=w.nextMatch;var match=this.lookahead.exec(w.source);if(matched=match&&match.index===w.nextMatch){var nextRowType=match[2];"k"===nextRowType?(table.className=match[1],w.nextMatch+=match[0].length+1):(nextRowType!==curRowType&&(curRowType=nextRowType,$rowContainer=jQuery(document.createElement(this.rowTypes[nextRowType])).appendTo(table)),"c"===curRowType?($rowContainer.css("caption-side",0===rowCount?"top":"bottom"),w.nextMatch+=1,w.subWikify($rowContainer[0],this.rowTerminator)):this.rowHandler(w,jQuery(document.createElement("tr")).appendTo($rowContainer).get(0),prevColumns),++rowCount)}}while(matched)}else jQuery(w.output).append(document.createTextNode(w.matchText))},rowHandler:function(w,rowEl,prevColumns){var matched,_this12=this,cellRe=new RegExp(this.cellPattern,"gm"),col=0,curColCount=1;do{cellRe.lastIndex=w.nextMatch;var cellMatch=cellRe.exec(w.source);if(matched=cellMatch&&cellMatch.index===w.nextMatch){if("~"===cellMatch[1]){var last=prevColumns[col];last&&(++last.rowCount,last.$element.attr("rowspan",last.rowCount).css("vertical-align","middle")),w.nextMatch=cellMatch.index+cellMatch[0].length-1}else if(">"===cellMatch[1])++curColCount,w.nextMatch=cellMatch.index+cellMatch[0].length-1;else{if(cellMatch[2]){w.nextMatch=cellMatch.index+cellMatch[0].length;break}!function(){++w.nextMatch;for(var css=Wikifier.helpers.inlineCss(w),spaceLeft=!1,spaceRight=!1,$cell=void 0;" "===w.source.substr(w.nextMatch,1);)spaceLeft=!0,++w.nextMatch;"!"===w.source.substr(w.nextMatch,1)?($cell=jQuery(document.createElement("th")).appendTo(rowEl),++w.nextMatch):$cell=jQuery(document.createElement("td")).appendTo(rowEl),prevColumns[col]={rowCount:1,$element:$cell},curColCount>1&&($cell.attr("colspan",curColCount),curColCount=1),w.subWikify($cell[0],_this12.cellTerminator)," "===w.matchText.substr(w.matchText.length-2,1)&&(spaceRight=!0),css.classes.forEach((function(className){return $cell.addClass(className)})),""!==css.id&&$cell.attr("id",css.id),spaceLeft&&spaceRight?css.styles["text-align"]="center":spaceLeft?css.styles["text-align"]="right":spaceRight&&(css.styles["text-align"]="left"),$cell.css(css.styles),w.nextMatch=w.nextMatch-1}()}++col}}while(matched)}}),Wikifier.Parser.add({name:"list",profiles:["block"],match:"^(?:(?:\\*+)|(?:#+))",lookahead:/^(?:(\*+)|(#+))/gm,terminator:"\\n",handler:function(w){if(Wikifier.helpers.hasBlockContext(w.output.childNodes)){w.nextMatch=w.matchStart;var matched,i,destStack=[w.output],curType=null,curLevel=0;do{this.lookahead.lastIndex=w.nextMatch;var match=this.lookahead.exec(w.source);if(matched=match&&match.index===w.nextMatch){var newType=match[2]?"ol":"ul",newLevel=match[0].length;if(w.nextMatch+=match[0].length,newLevel>curLevel)for(i=curLevel;i<newLevel;++i)destStack.push(jQuery(document.createElement(newType)).appendTo(destStack[destStack.length-1]).get(0));else if(newLevel<curLevel)for(i=curLevel;i>newLevel;--i)destStack.pop();else newLevel===curLevel&&newType!==curType&&(destStack.pop(),destStack.push(jQuery(document.createElement(newType)).appendTo(destStack[destStack.length-1]).get(0)));curLevel=newLevel,curType=newType,w.subWikify(jQuery(document.createElement("li")).appendTo(destStack[destStack.length-1]).get(0),this.terminator)}}while(matched)}else jQuery(w.output).append(document.createTextNode(w.matchText))}}),Wikifier.Parser.add({name:"commentByBlock",profiles:["core"],match:"(?:/(?:%|\\*))|(?:\x3c!--)",lookahead:/(?:\/(%|\*)(?:(?:.|\n)*?)\1\/)|(?:<!--(?:(?:.|\n)*?)-->)/gm,handler:function(w){this.lookahead.lastIndex=w.matchStart;var match=this.lookahead.exec(w.source);match&&match.index===w.matchStart&&(w.nextMatch=this.lookahead.lastIndex)}}),Wikifier.Parser.add({name:"lineContinuation",profiles:["core"],match:"\\\\".concat(Patterns.spaceNoTerminator,"*\\n|\\n").concat(Patterns.spaceNoTerminator,"*\\\\|\\n?\\\\").concat(Patterns.spaceNoTerminator,"*$|^").concat(Patterns.spaceNoTerminator,"*\\\\\\n?"),handler:function(w){w.nextMatch=w.matchStart+w.matchLength}}),Wikifier.Parser.add({name:"lineBreak",profiles:["core"],match:"\\n|<[Bb][Rr]\\s*/?>",handler:function(w){w.options.nobr||jQuery(document.createElement("br")).appendTo(w.output)}}),Wikifier.Parser.add({name:"htmlCharacterReference",profiles:["core"],match:"(?:(?:&#?[0-9A-Za-z]{2,8};|.)(?:&#?(?:x0*(?:3[0-6][0-9A-Fa-f]|1D[C-Fc-f][0-9A-Fa-f]|20[D-Fd-f][0-9A-Fa-f]|FE2[0-9A-Fa-f])|0*(?:76[89]|7[7-9][0-9]|8[0-7][0-9]|761[6-9]|76[2-7][0-9]|84[0-3][0-9]|844[0-7]|6505[6-9]|6506[0-9]|6507[0-1]));)+|&#?[0-9A-Za-z]{2,8};)",handler:function(w){jQuery(document.createDocumentFragment()).append(w.matchText).appendTo(w.output)}}),Wikifier.Parser.add({name:"xmlProlog",profiles:["core"],match:"<\\?[Xx][Mm][Ll][^>]*\\?>",handler:function(w){w.nextMatch=w.matchStart+w.matchLength}}),Wikifier.Parser.add({name:"verbatimHtml",profiles:["core"],match:"<[Hh][Tt][Mm][Ll]>",lookahead:/<[Hh][Tt][Mm][Ll]>((?:.|\n)*?)<\/[Hh][Tt][Mm][Ll]>/gm,handler:_verbatimTagHandler}),Wikifier.Parser.add({name:"verbatimScriptTag",profiles:["core"],match:"<[Ss][Cc][Rr][Ii][Pp][Tt][^>]*>",lookahead:/(<[Ss][Cc][Rr][Ii][Pp][Tt]*>(?:.|\n)*?<\/[Ss][Cc][Rr][Ii][Pp][Tt]>)/gm,handler:_verbatimTagHandler}),Wikifier.Parser.add({name:"styleTag",profiles:["core"],match:"<[Ss][Tt][Yy][Ll][Ee][^>]*>",lookahead:/(<[Ss][Tt][Yy][Ll][Ee]*>)((?:.|\n)*?)(<\/[Ss][Tt][Yy][Ll][Ee]>)/gm,imageMarkup:new RegExp(Patterns.cssImage,"g"),hasImageMarkup:new RegExp(Patterns.cssImage),handler:function(w){this.lookahead.lastIndex=w.matchStart;var match=this.lookahead.exec(w.source);if(match&&match.index===w.matchStart){w.nextMatch=this.lookahead.lastIndex;var css=match[2];this.hasImageMarkup.test(css)&&(this.imageMarkup.lastIndex=0,css=css.replace(this.imageMarkup,(function(wikiImage){var markup=Wikifier.helpers.parseSquareBracketedMarkup({source:wikiImage,matchStart:0});if(markup.hasOwnProperty("error")||markup.pos<wikiImage.length)return wikiImage;var source=markup.source;if("data:"!==source.slice(0,5)&&Story.has(source)){var passage=Story.get(source);passage.tags.includes("Twine.image")&&(source=passage.text)}return'url("'.concat(source.replace(/"/g,"%22"),'")')}))),jQuery(document.createDocumentFragment()).append(match[1]+css+match[3]).appendTo(w.output)}}}),Wikifier.Parser.add({name:"svgTag",profiles:["core"],match:"<[Ss][Vv][Gg][^>]*>",lookahead:/<(\/?)[Ss][Vv][Gg][^>]*>/gm,namespace:"http://www.w3.org/2000/svg",handler:function(w){var _this13=this;this.lookahead.lastIndex=w.nextMatch;for(var match,depth=1;depth>0&&null!==(match=this.lookahead.exec(w.source));)depth+="/"===match[1]?-1:1;if(0===depth){w.nextMatch=this.lookahead.lastIndex;var svgTag=w.source.slice(w.matchStart,this.lookahead.lastIndex),$frag=jQuery(document.createDocumentFragment()).append(svgTag);$frag.find("a[data-passage],image[data-passage]").each((function(_,el){var tagName=el.tagName.toLowerCase();try{_this13.processAttributeDirectives(el)}catch(ex){return throwError(w.output,"svg|<".concat(tagName,">: ").concat(ex.message),"".concat(w.matchText,"…"))}el.hasAttribute("data-passage")&&_this13.processDataAttributes(el,tagName)})),$frag.appendTo(w.output)}},processAttributeDirectives:function(el){_toConsumableArray(el.attributes).forEach((function(_ref10){var name=_ref10.name,value=_ref10.value,evalShorthand="@"===name[0];if(evalShorthand||name.startsWith("sc-eval:")){var result,newName=name.slice(evalShorthand?1:8);if("data-setter"===newName)throw new Error('evaluation directive is not allowed on the data-setter attribute: "'.concat(name,'"'));try{result=Scripting.evalTwineScript(value)}catch(ex){throw new Error('bad evaluation from attribute directive "'.concat(name,'": ').concat(ex.message))}try{el.setAttribute(newName,result),el.removeAttribute(name)}catch(ex){throw new Error('cannot transform attribute directive "'.concat(name,'" into attribute "').concat(newName,'"'))}}}))},processDataAttributes:function(el,tagName){var passage=el.getAttribute("data-passage");if(null!=passage){var evaluated=Wikifier.helpers.evalPassageId(passage);if(evaluated!==passage&&(passage=evaluated,el.setAttribute("data-passage",evaluated)),""!==passage)if("image"===tagName)"data:"!==passage.slice(0,5)&&Story.has(passage)&&(passage=Story.get(passage)).tags.includes("Twine.image")&&el.setAttribute("href",passage.text.trim());else{var setFn,setter=el.getAttribute("data-setter");null!=setter&&""!==(setter=String(setter).trim())&&(setFn=Wikifier.helpers.createShadowSetterCallback(Scripting.parse(setter))),Story.has(passage)?(el.classList.add("link-internal"),Config.addVisitedLinkClass&&State.hasPlayed(passage)&&el.classList.add("link-visited")):el.classList.add("link-broken"),jQuery(el).ariaClick({one:!0},(function(){"function"==typeof setFn&&setFn.call(this),Engine.play(passage)}))}}}}),Wikifier.Parser.add({name:"htmlTag",profiles:["core"],match:"<".concat(Patterns.htmlTagName,"(?:\\s+[^\\u0000-\\u001F\\u007F-\\u009F\\s\"'>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*?\"|'[^']*?'|[^\\s\"'=<>`]+))?)*\\s*\\/?>"),tagRe:new RegExp("^<(".concat(Patterns.htmlTagName,")")),mediaTags:["audio","img","source","track","video"],nobrTags:["audio","colgroup","datalist","dl","figure","meter","ol","optgroup","picture","progress","ruby","select","table","tbody","tfoot","thead","tr","ul","video"],voidTags:["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],handler:function(w){var tagMatch=this.tagRe.exec(w.matchText),tag=tagMatch&&tagMatch[1],tagName=tag&&tag.toLowerCase();if(tagName){var terminator,terminatorMatch,isVoid=this.voidTags.includes(tagName)||w.matchText.endsWith("/>"),isNobr=this.nobrTags.includes(tagName);if(!isVoid){terminator="<\\/".concat(tagName,"\\s*>");var terminatorRe=new RegExp(terminator,"gim");terminatorRe.lastIndex=w.matchStart,terminatorMatch=terminatorRe.exec(w.source)}if(!isVoid&&!terminatorMatch)return throwError(w.output,"cannot find a closing tag for HTML <".concat(tag,">"),"".concat(w.matchText,"…"));var debugView,output=w.output,el=document.createElement(w.output.tagName);for(el.innerHTML=w.matchText;el.firstChild;)el=el.firstChild;try{this.processAttributeDirectives(el)}catch(ex){return throwError(w.output,"<".concat(tagName,">: ").concat(ex.message),"".concat(w.matchText,"…"))}if(el.hasAttribute("data-passage")&&(this.processDataAttributes(el,tagName),Config.debug&&((debugView=new DebugView(w.output,"html-".concat(tagName),tagName,w.matchText)).modes({block:"img"===tagName,nonvoid:terminatorMatch}),output=debugView.output)),terminatorMatch){try{Wikifier.Option.push({nobr:isNobr}),w.subWikify(el,terminator,{ignoreTerminatorCase:!0})}finally{Wikifier.Option.pop()}debugView&&jQuery(el).find(".debug.block").length>0&&debugView.modes({block:!0})}output.appendChild("track"===tagName?el.cloneNode(!0):el)}},processAttributeDirectives:function(el){_toConsumableArray(el.attributes).forEach((function(_ref11){var name=_ref11.name,value=_ref11.value,evalShorthand="@"===name[0];if(evalShorthand||name.startsWith("sc-eval:")){var result,newName=name.slice(evalShorthand?1:8);if("data-setter"===newName)throw new Error('evaluation directive is not allowed on the data-setter attribute: "'.concat(name,'"'));try{result=Scripting.evalTwineScript(value)}catch(ex){throw new Error('bad evaluation from attribute directive "'.concat(name,'": ').concat(ex.message))}try{el.setAttribute(newName,result),el.removeAttribute(name)}catch(ex){throw new Error('cannot transform attribute directive "'.concat(name,'" into attribute "').concat(newName,'"'))}}}))},processDataAttributes:function(el,tagName){var passage=el.getAttribute("data-passage");if(null!=passage){var evaluated=Wikifier.helpers.evalPassageId(passage);if(evaluated!==passage&&(passage=evaluated,el.setAttribute("data-passage",evaluated)),""!==passage)if(this.mediaTags.includes(tagName)){if("data:"!==passage.slice(0,5)&&Story.has(passage)){var parentName,twineTag;switch(passage=Story.get(passage),tagName){case"audio":case"video":twineTag="Twine.".concat(tagName);break;case"img":twineTag="Twine.image";break;case"track":twineTag="Twine.vtt";break;case"source":var $parent=$(el).closest("audio,picture,video");$parent.length&&(parentName=$parent.get(0).tagName.toLowerCase(),twineTag="Twine.".concat("picture"===parentName?"image":parentName))}passage.tags.includes(twineTag)&&(el["picture"===parentName?"srcset":"src"]=passage.text.trim())}}else{var setFn,setter=el.getAttribute("data-setter");null!=setter&&""!==(setter=String(setter).trim())&&(setFn=Wikifier.helpers.createShadowSetterCallback(Scripting.parse(setter))),Story.has(passage)?(el.classList.add("link-internal"),Config.addVisitedLinkClass&&State.hasPlayed(passage)&&el.classList.add("link-visited")):el.classList.add("link-broken"),jQuery(el).ariaClick({one:!0},(function(){"function"==typeof setFn&&setFn.call(this),Engine.play(passage)}))}}}})}();var Template=(_templates=new Map,_validNameRe=new RegExp("^(?:".concat(Patterns.templateName,")$")),_validType=function(template){var templateType=_typeof(template);return"function"===templateType||"string"===templateType},Object.freeze(Object.defineProperties({},{add:{value:function(name,template){if(!(_validType(template)||template instanceof Array&&template.length>0&&template.every(_validType)))throw new TypeError("invalid template type (".concat(name,"); templates must be: functions, strings, or an array of either"));(name instanceof Array?name:[name]).forEach((function(name){if(!_validNameRe.test(name))throw new Error('invalid template name "'.concat(name,'"'));if(_templates.has(name))throw new Error("cannot clobber existing template ?".concat(name));_templates.set(name,template)}))}},delete:{value:function(name){(name instanceof Array?name:[name]).forEach((function(name){return _templates.delete(name)}))}},get:{value:function(name){return _templates.has(name)?_templates.get(name):null}},has:{value:function(name){return _templates.has(name)}},size:{get:function(){return _templates.size}}}))),_templates,_validNameRe,_validType,Macro=function(){var _macros={},_tags={},_validNameRe=new RegExp("^(?:".concat(Patterns.macroName,")$"));function macrosHas(name){return _macros.hasOwnProperty(name)}function tagsRegister(parent,bodyTags){if(!parent)throw new Error("no parent specified");for(var endTags=["/".concat(parent),"end".concat(parent)],allTags=[].concat(endTags,Array.isArray(bodyTags)?bodyTags:[]),i=0;i<allTags.length;++i){var tag=allTags[i];if(macrosHas(tag))throw new Error("cannot register tag for an existing macro");tagsHas(tag)?_tags[tag].includes(parent)||(_tags[tag].push(parent),_tags[tag].sort()):_tags[tag]=[parent]}}function tagsUnregister(parent){if(!parent)throw new Error("no parent specified");Object.keys(_tags).forEach((function(tag){var i=_tags[tag].indexOf(parent);-1!==i&&(1===_tags[tag].length?delete _tags[tag]:_tags[tag].splice(i,1))}))}function tagsHas(name){return _tags.hasOwnProperty(name)}return Object.freeze(Object.defineProperties({},{add:{value:function macrosAdd(name,def){if(Array.isArray(name))name.forEach((function(name){return macrosAdd(name,def)}));else{if(!_validNameRe.test(name))throw new Error('invalid macro name "'.concat(name,'"'));if(macrosHas(name))throw new Error("cannot clobber existing macro <<".concat(name,">>"));if(tagsHas(name))throw new Error("cannot clobber child tag <<".concat(name,">> of parent macro").concat(1===_tags[name].length?"":"s"," <<").concat(_tags[name].join(">>, <<"),">>"));try{if("object"===_typeof(def))_macros[name]=Object.assign(Object.create(null),def,{_MACRO_API:!0});else{if(!macrosHas(def))throw new Error("cannot create alias of nonexistent macro <<".concat(def,">>"));_macros[name]=Object.create(_macros[def],{_ALIAS_OF:{enumerable:!0,value:def}})}Object.defineProperty(_macros,name,{writable:!1})}catch(ex){throw"TypeError"===ex.name?new Error("cannot clobber protected macro <<".concat(name,">>")):new Error("unknown error when attempting to add macro <<".concat(name,">>: [").concat(ex.name,"] ").concat(ex.message))}if(void 0!==_macros[name].tags)if(null==_macros[name].tags)tagsRegister(name);else{if(!Array.isArray(_macros[name].tags))throw new Error('bad value for "tags" property of macro <<'.concat(name,">>"));tagsRegister(name,_macros[name].tags)}}}},delete:{value:function macrosDelete(name){if(Array.isArray(name))name.forEach((function(name){return macrosDelete(name)}));else if(macrosHas(name)){void 0!==_macros[name].tags&&tagsUnregister(name);try{Object.defineProperty(_macros,name,{writable:!0}),delete _macros[name]}catch(ex){throw new Error("unknown error removing macro <<".concat(name,">>: ").concat(ex.message))}}else if(tagsHas(name))throw new Error("cannot remove child tag <<".concat(name,">> of parent macro <<").concat(_tags[name],">>"))}},isEmpty:{value:function(){return 0===Object.keys(_macros).length}},has:{value:macrosHas},get:{value:function(name){var macro=null;return macrosHas(name)&&"function"==typeof _macros[name].handler?macro=_macros[name]:macros.hasOwnProperty(name)&&"function"==typeof macros[name].handler&&(macro=macros[name]),macro}},init:{value:function(){var handler=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"init";Object.keys(_macros).forEach((function(name){"function"==typeof _macros[name][handler]&&_macros[name][handler](name)})),Object.keys(macros).forEach((function(name){"function"==typeof macros[name][handler]&¯os[name][handler](name)}))}},tags:{value:Object.freeze(Object.defineProperties({},{register:{value:tagsRegister},unregister:{value:tagsUnregister},has:{value:tagsHas},get:{value:function(name){return tagsHas(name)?_tags[name]:null}}}))},evalStatements:{value:function(){return Scripting.evalJavaScript.apply(Scripting,arguments)}}}))}(),MacroContext=function(){var MacroContext=function(){function MacroContext(contextData){_classCallCheck(this,MacroContext);var context=Object.assign({parent:null,macro:null,name:"",displayName:"",args:null,payload:null,parser:null,source:""},contextData);if(null===context.macro||""===context.name||null===context.parser)throw new TypeError("context object missing required properties");Object.defineProperties(this,{self:{value:context.macro},name:{value:void 0===context.macro._ALIAS_OF?context.name:context.macro._ALIAS_OF},displayName:{value:context.name},args:{value:context.args},payload:{value:context.payload},source:{value:context.source},parent:{value:context.parent},parser:{value:context.parser},_output:{value:context.parser.output},_shadows:{writable:!0,value:null},_debugView:{writable:!0,value:null},_debugViewEnabled:{writable:!0,value:Config.debug}})}return _createClass(MacroContext,[{key:"output",get:function(){return this._debugViewEnabled?this.debugView.output:this._output}},{key:"shadows",get:function(){return _toConsumableArray(this._shadows)}},{key:"shadowView",get:function(){var view=new Set;return this.contextSelectAll((function(ctx){return ctx._shadows})).forEach((function(ctx){return ctx._shadows.forEach((function(name){return view.add(name)}))})),_toConsumableArray(view)}},{key:"debugView",get:function(){return this._debugViewEnabled?null!==this._debugView?this._debugView:this.createDebugView():null}},{key:"contextHas",value:function(filter){for(var context=this;null!==(context=context.parent);)if(filter(context))return!0;return!1}},{key:"contextSelect",value:function(filter){for(var context=this;null!==(context=context.parent);)if(filter(context))return context;return null}},{key:"contextSelectAll",value:function(filter){for(var result=[],context=this;null!==(context=context.parent);)filter(context)&&result.push(context);return result}},{key:"addShadow",value:function(){var _this14=this;this._shadows||(this._shadows=new Set);for(var varRe=new RegExp("^".concat(Patterns.variable,"$")),_len14=arguments.length,names=new Array(_len14),_key14=0;_key14<_len14;_key14++)names[_key14]=arguments[_key14];names.flat(1/0).forEach((function(name){if("string"!=typeof name)throw new TypeError("variable name must be a string; type: ".concat(_typeof(name)));if(!varRe.test(name))throw new Error('invalid variable name "'.concat(name,'"'));_this14._shadows.add(name)}))}},{key:"createShadowWrapper",value:function(callback,doneCallback,startCallback){var shadowStore,shadowContext=this;return"function"==typeof callback&&(shadowStore={},this.shadowView.forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;shadowStore[varName]=store[varKey]}))),function(){for(var _len15=arguments.length,args=new Array(_len15),_key15=0;_key15<_len15;_key15++)args[_key15]=arguments[_key15];if("function"==typeof startCallback&&startCallback.apply(this,args),"function"==typeof callback){var contextCache,shadowNames=Object.keys(shadowStore),valueCache=shadowNames.length>0?{}:null,macroParser=Wikifier.Parser.get("macro");try{shadowNames.forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;store.hasOwnProperty(varKey)&&(valueCache[varKey]=store[varKey]),store[varKey]=shadowStore[varName]})),contextCache=macroParser.context,macroParser.context=shadowContext,callback.apply(this,args)}finally{contextCache!==undefined&&(macroParser.context=contextCache),shadowNames.forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;shadowStore[varName]=store[varKey],valueCache.hasOwnProperty(varKey)?store[varKey]=valueCache[varKey]:delete store[varKey]}))}}"function"==typeof doneCallback&&doneCallback.apply(this,args)}}},{key:"createDebugView",value:function(name,title){return this._debugView=new DebugView(this._output,"macro",name||this.displayName,title||this.source),null!==this.payload&&this.payload.length>0&&this._debugView.modes({nonvoid:!0}),this._debugViewEnabled=!0,this._debugView}},{key:"removeDebugView",value:function(){null!==this._debugView&&(this._debugView.remove(),this._debugView=null),this._debugViewEnabled=!1}},{key:"error",value:function(message,source){return throwError(this._output,"<<".concat(this.displayName,">>: ").concat(message),source||this.source)}}]),MacroContext}();return MacroContext}();!function(){if(Macro.add("capture",{skipArgs:!0,tags:null,tsVarRe:new RegExp("(".concat(Patterns.variable,")"),"g"),handler:function(){if(0===this.args.raw.length)return this.error("no story/temporary variable list specified");var valueCache={};try{for(var match,tsVarRe=this.self.tsVarRe;null!==(match=tsVarRe.exec(this.args.raw));){var varName=match[1],varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;store.hasOwnProperty(varKey)&&(valueCache[varKey]=store[varKey]),this.addShadow(varName)}new Wikifier(this.output,this.payload[0].contents)}finally{this.shadows.forEach((function(varName){var varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary;valueCache.hasOwnProperty(varKey)?store[varKey]=valueCache[varKey]:delete store[varKey]}))}}}),Macro.add("set",{skipArgs:!0,handler:function(){if(0===this.args.full.length)return this.error("no expression specified");try{Scripting.evalJavaScript(this.args.full)}catch(ex){return this.error("bad evaluation: ".concat("object"===_typeof(ex)?ex.message:ex))}Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("unset",{skipArgs:!0,jsVarRe:new RegExp("State\\.(variables|temporary)\\.(".concat(Patterns.identifier,")"),"g"),handler:function(){if(0===this.args.full.length)return this.error("no story/temporary variable list specified");for(var match,jsVarRe=this.self.jsVarRe;null!==(match=jsVarRe.exec(this.args.full));){var store=State[match[1]],name=match[2];store.hasOwnProperty(name)&&delete store[name]}Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("remember",{skipArgs:!0,jsVarRe:new RegExp("State\\.variables\\.(".concat(Patterns.identifier,")"),"g"),handler:function(){if(0===this.args.full.length)return this.error("no expression specified");try{Scripting.evalJavaScript(this.args.full)}catch(ex){return this.error("bad evaluation: ".concat("object"===_typeof(ex)?ex.message:ex))}for(var match,remember=storage.get("remember")||{},jsVarRe=this.self.jsVarRe;null!==(match=jsVarRe.exec(this.args.full));){var name=match[1];remember[name]=State.variables[name]}if(!storage.set("remember",remember))return this.error("unknown error, cannot remember: ".concat(this.args.raw));Config.debug&&this.debugView.modes({hidden:!0})},init:function(){var remember=storage.get("remember");remember&&Object.keys(remember).forEach((function(name){return State.variables[name]=remember[name]}))}}),Macro.add("forget",{skipArgs:!0,jsVarRe:new RegExp("State\\.variables\\.(".concat(Patterns.identifier,")"),"g"),handler:function(){if(0===this.args.full.length)return this.error("no story variable list specified");for(var match,remember=storage.get("remember"),jsVarRe=this.self.jsVarRe,needStore=!1;null!==(match=jsVarRe.exec(this.args.full));){var name=match[1];State.variables.hasOwnProperty(name)&&delete State.variables[name],remember&&remember.hasOwnProperty(name)&&(needStore=!0,delete remember[name])}if(needStore)if(0===Object.keys(remember).length){if(!storage.delete("remember"))return this.error("unknown error, cannot update remember store")}else if(!storage.set("remember",remember))return this.error("unknown error, cannot update remember store");Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("run","set"),Macro.add("script",{skipArgs:!0,tags:null,handler:function(){var output=document.createDocumentFragment();try{Scripting.evalJavaScript(this.payload[0].contents,output)}catch(ex){return this.error("bad evaluation: ".concat("object"===_typeof(ex)?ex.message:ex))}Config.debug&&this.createDebugView(),output.hasChildNodes()&&this.output.appendChild(output)}}),Macro.add("include",{handler:function(){return 0===this.args.length?this.error("no passage specified"):(passage="object"===_typeof(this.args[0])?this.args[0].link:this.args[0],Story.has(passage)?(Config.debug&&this.debugView.modes({block:!0}),passage=Story.get(passage),void(this.args[1]?jQuery(document.createElement(this.args[1])).addClass("".concat(passage.domId," macro-").concat(this.name)).attr("data-passage",passage.title).appendTo(this.output):jQuery(this.output)).wiki(passage.processText())):this.error('passage "'.concat(passage,'" does not exist')));var passage}}),Macro.add("nobr",{skipArgs:!0,tags:null,handler:function(){new Wikifier(this.output,this.payload[0].contents.replace(/^\n+|\n+$/g,"").replace(/\n+/g," "))}}),Macro.add(["print","=","-"],{skipArgs:!0,handler:function(){if(0===this.args.full.length)return this.error("no expression specified");try{var result=stringFrom(Scripting.evalJavaScript(this.args.full));null!==result&&new Wikifier(this.output,"-"===this.name?Util.escape(result):result)}catch(ex){return this.error("bad evaluation: ".concat("object"===_typeof(ex)?ex.message:ex))}}}),Macro.add("silently",{skipArgs:!0,tags:null,handler:function(){var frag=document.createDocumentFragment();if(new Wikifier(frag,this.payload[0].contents.trim()),Config.debug)this.debugView.modes({block:!0,hidden:!0}),this.output.appendChild(frag);else{var errList=_toConsumableArray(frag.querySelectorAll(".error")).map((function(errEl){return errEl.textContent}));if(errList.length>0)return this.error("error".concat(1===errList.length?"":"s"," within contents (").concat(errList.join("; "),")"))}}}),Macro.add("type",{isAsync:!0,tags:null,typeId:0,handler:function(){if(0===this.args.length)return this.error("no speed specified");var cursor,speed=Util.fromCssTime(this.args[0]);if(speed<0)return this.error("speed time value must be non-negative (received: ".concat(this.args[0],")"));for(var elClass="",elId="",elTag="div",skipKey=Config.macros.typeSkipKey,start=400,options=this.args.slice(1);options.length>0;){var option=options.shift();switch(option){case"class":if(0===options.length)return this.error("class option missing required class name(s)");if(""===(elClass=options.shift()))throw new Error('class option class name(s) must be non-empty (received: "")');break;case"element":if(0===options.length)return this.error("element option missing required element tag name");if(""===(elTag=options.shift()))throw new Error('element option tag name must be non-empty (received: "")');break;case"id":if(0===options.length)return this.error("id option missing required ID");if(""===(elId=options.shift()))throw new Error('id option ID must be non-empty (received: "")');break;case"keep":cursor="keep";break;case"none":cursor="none";break;case"skipkey":if(0===options.length)return this.error("skipkey option missing required key value");if(""===(skipKey=options.shift()))throw new Error('skipkey option key value must be non-empty (received: "")');break;case"start":if(0===options.length)return this.error("start option missing required time value");var value=options.shift();if((start=Util.fromCssTime(value))<0)throw new Error("start option time value must be non-negative (received: ".concat(value,")"));break;default:return this.error("unknown option: ".concat(option))}}var contents=this.payload[0].contents;if(""!==contents.trim()){Config.debug&&this.debugView.modes({block:!0});var className="macro-".concat(this.name),namespace=".".concat(className),$target=jQuery(document.createElement(elTag)).addClass("".concat(className," ").concat(className,"-target")).appendTo(this.output);TempState.macroTypeQueue||(TempState.macroTypeQueue=[],$(document).off(namespace).one(":passageinit".concat(namespace),(function(){return $(document).off(namespace)})));var startTyping=0===TempState.macroTypeQueue.length,selfId=++this.self.typeId;TempState.macroTypeQueue.push({id:selfId,handler:function(){var $wrapper=jQuery(document.createElement(elTag)).addClass(className);elId&&$wrapper.attr("id",elId),elClass&&$wrapper.addClass(elClass),new Wikifier($wrapper,contents);var passage=State.passage,turn=State.turns;if(!Config.macros.typeVisitedPassages&&State.passages.slice(0,-1).some((function(title){return title===passage}))||$wrapper.find(".error").length>0)return $target.replaceWith($wrapper),TempState.macroTypeQueue.shift(),void(TempState.macroTypeQueue.length>0&&TempState.macroTypeQueue.first().handler());var typer=new NodeTyper({targetNode:$wrapper.get(0),classNames:"none"===cursor?null:"".concat(className,"-cursor")});$target.replaceWith($wrapper);var keydownAndNS="keydown".concat(namespace),typingStopAndNS="".concat(":typingstop").concat(namespace);$(document).off(keydownAndNS).on(keydownAndNS,(function(ev){Util.scrubEventKey(ev.key)!==skipKey||ev.target!==document.body&&ev.target!==document.documentElement||(ev.preventDefault(),$(document).off(keydownAndNS),typer.finish())})).one(typingStopAndNS,(function(){TempState.macroTypeQueue&&(0===TempState.macroTypeQueue.length?jQuery.event.trigger(":typingcomplete"):TempState.macroTypeQueue.first().handler())}));var typeNode=function(){var typeNodeMember=function(typeIntervalId){State.passage===passage&&State.turns===turn&&typer.type()||(typeIntervalId&&clearInterval(typeIntervalId),TempState.macroTypeQueue&&TempState.macroTypeQueue.length>0&&TempState.macroTypeQueue.first().id===selfId&&TempState.macroTypeQueue.shift(),$wrapper.trigger(":typingstop"),$wrapper.addClass("".concat(className,"-done")),"keep"===cursor&&$wrapper.addClass("".concat(className,"-cursor")))};$wrapper.trigger(":typingstart"),typeNodeMember();var typeNodeMemberId=setInterval((function(){return typeNodeMember(typeNodeMemberId)}),speed)};start?setTimeout(typeNode,start):typeNode()}}),startTyping&&(Engine.isPlaying()?$(document).one(":passageend".concat(namespace),(function(){return TempState.macroTypeQueue.first().handler()})):TempState.macroTypeQueue.first().handler())}}}),Macro.add("display","include"),Macro.add("if",{skipArgs:!0,tags:["elseif","else"],elseifWsRe:/^\s*if\b/i,ifAssignRe:/[^!=&^|<>*/%+-]=[^=>]/,handler:function(){var i;try{var len=this.payload.length,elseifWsRe=this.self.elseifWsRe,ifAssignRe=this.self.ifAssignRe;for(i=0;i<len;++i)if("else"===this.payload[i].name){if(this.payload[i].args.raw.length>0)return elseifWsRe.test(this.payload[i].args.raw)?this.error('whitespace is not allowed between the "else" and "if" in <<elseif>> clause'.concat(i>0?" (#"+i+")":"")):this.error("<<else>> does not accept a conditional expression (perhaps you meant to use <<elseif>>), invalid: ".concat(this.payload[i].args.raw));if(i+1!==len)return this.error("<<else>> must be the final clause")}else{if(0===this.payload[i].args.full.length)return this.error("no conditional expression specified for <<".concat(this.payload[i].name,">> clause").concat(i>0?" (#"+i+")":""));if(Config.macros.ifAssignmentError&&ifAssignRe.test(this.payload[i].args.full))return this.error("assignment operator found within <<".concat(this.payload[i].name,">> clause").concat(i>0?" (#"+i+")":""," (perhaps you meant to use an equality operator: ==, ===, eq, is), invalid: ").concat(this.payload[i].args.raw))}var evalJavaScript=Scripting.evalJavaScript,success=!1;for(i=0;i<len;++i){if(Config.debug&&this.createDebugView(this.payload[i].name,this.payload[i].source).modes({nonvoid:!1}),"else"===this.payload[i].name||evalJavaScript(this.payload[i].args.full)){success=!0,new Wikifier(this.output,this.payload[i].contents);break}Config.debug&&this.debugView.modes({hidden:!0,invalid:!0})}if(Config.debug){for(++i;i<len;++i)this.createDebugView(this.payload[i].name,this.payload[i].source).modes({nonvoid:!1,hidden:!0,invalid:!0});this.createDebugView("/".concat(this.name),"<</".concat(this.name,">>")).modes({nonvoid:!1,hidden:!success,invalid:!success})}}catch(ex){return this.error("bad conditional expression in <<".concat(0===i?"if":"elseif",">> clause").concat(i>0?" (#"+i+")":"",": ").concat("object"===_typeof(ex)?ex.message:ex))}}}),Macro.add("switch",{skipArgs:["switch"],tags:["case","default"],handler:function(){if(0===this.args.full.length)return this.error("no expression specified");var i,result,len=this.payload.length;if(1===len)return this.error("no cases specified");for(i=1;i<len;++i)if("default"===this.payload[i].name){if(this.payload[i].args.length>0)return this.error("<<default>> does not accept values, invalid: ".concat(this.payload[i].args.raw));if(i+1!==len)return this.error("<<default>> must be the final case")}else if(0===this.payload[i].args.length)return this.error("no value(s) specified for <<".concat(this.payload[i].name,">> (#").concat(i,")"));try{result=Scripting.evalJavaScript(this.args.full)}catch(ex){return this.error("bad evaluation: ".concat("object"===_typeof(ex)?ex.message:ex))}var debugView=this.debugView,success=!1;for(Config.debug&&debugView.modes({nonvoid:!1,hidden:!0}),i=1;i<len;++i){if(Config.debug&&this.createDebugView(this.payload[i].name,this.payload[i].source).modes({nonvoid:!1}),"default"===this.payload[i].name||this.payload[i].args.some((function(val){return val===result}))){success=!0,new Wikifier(this.output,this.payload[i].contents);break}Config.debug&&this.debugView.modes({hidden:!0,invalid:!0})}if(Config.debug){for(++i;i<len;++i)this.createDebugView(this.payload[i].name,this.payload[i].source).modes({nonvoid:!1,hidden:!0,invalid:!0});debugView.modes({nonvoid:!1,hidden:!0,invalid:!success}),this.createDebugView("/".concat(this.name),"<</".concat(this.name,">>")).modes({nonvoid:!1,hidden:!0,invalid:!success})}}}),Macro.add("for",{skipArgs:!0,tags:null,hasRangeRe:new RegExp("^\\S".concat(Patterns.anyChar,"*?\\s+range\\s+\\S").concat(Patterns.anyChar,"*?$")),rangeRe:new RegExp("^(?:State\\.(variables|temporary)\\.(".concat(Patterns.identifier,")\\s*,\\s*)?State\\.(variables|temporary)\\.(").concat(Patterns.identifier,")\\s+range\\s+(\\S").concat(Patterns.anyChar,"*?)$")),threePartRe:/^([^;]*?)\s*;\s*([^;]*?)\s*;\s*([^;]*?)$/,forInRe:/^\S+\s+in\s+\S+/i,forOfRe:/^\S+\s+of\s+\S+/i,handler:function(){var argsStr=this.args.full.trim(),payload=this.payload[0].contents.replace(/\n$/,"");if(0===argsStr.length)this.self.handleFor.call(this,payload,null,!0,null);else if(this.self.hasRangeRe.test(argsStr)){var parts=argsStr.match(this.self.rangeRe);if(null===parts)return this.error("invalid range form syntax, format: [index ,] value range collection");this.self.handleForRange.call(this,payload,{type:parts[1],name:parts[2]},{type:parts[3],name:parts[4]},parts[5])}else{var init,condition,post;if(-1===argsStr.indexOf(";")){if(this.self.forInRe.test(argsStr))return this.error("invalid syntax, for…in is not supported; see: for…range");if(this.self.forOfRe.test(argsStr))return this.error("invalid syntax, for…of is not supported; see: for…range");condition=argsStr}else{var _parts=argsStr.match(this.self.threePartRe);if(null===_parts)return this.error("invalid 3-part conditional form syntax, format: [init] ; [condition] ; [post]");init=_parts[1],condition=_parts[2].trim(),post=_parts[3],0===condition.length&&(condition=!0)}this.self.handleFor.call(this,payload,init,condition,post)}},handleFor:function(payload,init,condition,post){var evalJavaScript=Scripting.evalJavaScript,first=!0,safety=Config.macros.maxLoopIterations;Config.debug&&this.debugView.modes({block:!0});try{if(TempState.break=null,init)try{evalJavaScript(init)}catch(ex){return this.error("bad init expression: ".concat("object"===_typeof(ex)?ex.message:ex))}for(;evalJavaScript(condition);){if(--safety<0)return this.error("exceeded configured maximum loop iterations (".concat(Config.macros.maxLoopIterations,")"));if(new Wikifier(this.output,first?payload.replace(/^\n/,""):payload),first&&(first=!1),null!=TempState.break)if(1===TempState.break)TempState.break=null;else if(2===TempState.break){TempState.break=null;break}if(post)try{evalJavaScript(post)}catch(ex){return this.error("bad post expression: ".concat("object"===_typeof(ex)?ex.message:ex))}}}catch(ex){return this.error("bad conditional expression: ".concat("object"===_typeof(ex)?ex.message:ex))}finally{TempState.break=null}},handleForRange:function(payload,indexVar,valueVar,rangeExp){var rangeList,first=!0;try{rangeList=this.self.toRangeList(rangeExp)}catch(ex){return this.error(ex.message)}Config.debug&&this.debugView.modes({block:!0});try{TempState.break=null;for(var i=0;i<rangeList.length;++i)if(indexVar.name&&(State[indexVar.type][indexVar.name]=rangeList[i][0]),State[valueVar.type][valueVar.name]=rangeList[i][1],new Wikifier(this.output,first?payload.replace(/^\n/,""):payload),first&&(first=!1),null!=TempState.break)if(1===TempState.break)TempState.break=null;else if(2===TempState.break){TempState.break=null;break}}catch(ex){return this.error("object"===_typeof(ex)?ex.message:ex)}finally{TempState.break=null}},toRangeList:function(rangeExp){var value,list,evalJavaScript=Scripting.evalJavaScript;try{value=evalJavaScript("{"===rangeExp[0]?"(".concat(rangeExp,")"):rangeExp)}catch(ex){if("object"!==_typeof(ex))throw new Error("bad range expression: ".concat(ex));throw ex.message="bad range expression: ".concat(ex.message),ex}switch(_typeof(value)){case"string":list=[];for(var i=0;i<value.length;){var obj=Util.charAndPosAt(value,i);list.push([i,obj.char]),i=1+obj.end}break;case"object":if(Array.isArray(value))list=value.map((function(val,i){return[i,val]}));else if(value instanceof Set)list=_toConsumableArray(value).map((function(val,i){return[i,val]}));else if(value instanceof Map)list=_toConsumableArray(value.entries());else{if("Object"!==Util.toStringTag(value))throw new Error("unsupported range expression type: ".concat(Util.toStringTag(value)));list=Object.keys(value).map((function(key){return[key,value[key]]}))}break;default:throw new Error("unsupported range expression type: ".concat(_typeof(value)))}return list}}),Macro.add(["break","continue"],{skipArgs:!0,handler:function(){if(!this.contextHas((function(ctx){return"for"===ctx.name})))return this.error("must only be used in conjunction with its parent macro <<for>>");TempState.break="continue"===this.name?1:2,Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add(["button","link"],{isAsync:!0,tags:null,handler:function(){var _this15=this;if(0===this.args.length)return this.error("no ".concat("button"===this.name?"button":"link"," text specified"));var passage,$link=jQuery(document.createElement("button"===this.name?"button":"a"));if("object"===_typeof(this.args[0]))if(this.args[0].isImage){var $image=jQuery(document.createElement("img")).attr("src",this.args[0].source).appendTo($link);$link.addClass("link-image"),this.args[0].hasOwnProperty("passage")&&$image.attr("data-passage",this.args[0].passage),this.args[0].hasOwnProperty("title")&&$image.attr("title",this.args[0].title),this.args[0].hasOwnProperty("align")&&$image.attr("align",this.args[0].align),passage=this.args[0].link}else $link.append(document.createTextNode(this.args[0].text)),passage=this.args[0].link;else $link.wikiWithOptions({profile:"core"},this.args[0]),passage=this.args.length>1?this.args[1]:undefined;null!=passage?($link.attr("data-passage",passage),Story.has(passage)?($link.addClass("link-internal"),Config.addVisitedLinkClass&&State.hasPlayed(passage)&&$link.addClass("link-visited")):$link.addClass("link-broken")):$link.addClass("link-internal"),$link.addClass("macro-".concat(this.name)).ariaClick({namespace:".macros",role:null!=passage?"link":"button",one:null!=passage},this.createShadowWrapper(""!==this.payload[0].contents?function(){return Wikifier.wikifyEval(_this15.payload[0].contents.trim())}:null,null!=passage?function(){return Engine.play(passage)}:null)).appendTo(this.output)}}),Macro.add("checkbox",{isAsync:!0,handler:function(){if(this.args.length<3){var errors=[];return this.args.length<1&&errors.push("variable name"),this.args.length<2&&errors.push("unchecked value"),this.args.length<3&&errors.push("checked value"),this.error("no ".concat(errors.join(" or ")," specified"))}if("string"!=typeof this.args[0])return this.error("variable name argument is not a string");var varName=this.args[0].trim();if("$"!==varName[0]&&"_"!==varName[0])return this.error('variable name "'.concat(this.args[0],'" is missing its sigil ($ or _)'));var varId=Util.slugify(varName),uncheckValue=this.args[1],checkValue=this.args[2],el=document.createElement("input");switch(jQuery(el).attr({id:"".concat(this.name,"-").concat(varId),name:"".concat(this.name,"-").concat(varId),type:"checkbox",tabindex:0}).addClass("macro-".concat(this.name)).on("change.macros",this.createShadowWrapper((function(){State.setVar(varName,this.checked?checkValue:uncheckValue)}))).appendTo(this.output),this.args[3]){case"autocheck":State.getVar(varName)===checkValue?el.checked=!0:State.setVar(varName,uncheckValue);break;case"checked":el.checked=!0,State.setVar(varName,checkValue);break;default:State.setVar(varName,uncheckValue)}}}),Macro.add(["cycle","listbox"],{isAsync:!0,skipArgs:["optionsfrom"],tags:["option","optionsfrom"],handler:function(){var _this16=this;if(0===this.args.length)return this.error("no variable name specified");if("string"!=typeof this.args[0])return this.error("variable name argument is not a string");var varName=this.args[0].trim();if("$"!==varName[0]&&"_"!==varName[0])return this.error('variable name "'.concat(this.args[0],'" is missing its sigil ($ or _)'));var varId=Util.slugify(varName),len=this.payload.length;if(1===len)return this.error("no options specified");for(var config={autoselect:!1,once:!1},i=1;i<this.args.length;++i){var arg=this.args[i];switch(arg){case"once":config.once=!0;break;case"autoselect":config.autoselect=!0;break;default:return this.error("unknown argument: ".concat(arg))}}for(var options=[],tagCount={option:0,optionsfrom:0},selectedIdx=-1,_i5=1;_i5<len;++_i5){var payload=this.payload[_i5];if("option"===payload.name){if(++tagCount.option,0===payload.args.length)return this.error("no arguments specified for <<".concat(payload.name,">> (#").concat(tagCount.option,")"));var option={label:String(payload.args[0])},isSelected=!1;switch(payload.args.length){case 1:option.value=payload.args[0];break;case 2:"selected"===payload.args[1]?(option.value=payload.args[0],isSelected=!0):option.value=payload.args[1];break;default:option.value=payload.args[1],"selected"===payload.args[2]&&(isSelected=!0)}if(options.push(option),isSelected){if(config.autoselect)return this.error("cannot specify both the autoselect and selected keywords");if(-1!==selectedIdx)return this.error("multiple selected keywords specified for <<".concat(payload.name,">> (#").concat(selectedIdx+1," & #").concat(tagCount.option,")"));selectedIdx=options.length-1}}else{var _ret=function(){if(++tagCount.optionsfrom,0===payload.args.full.length)return{v:_this16.error("no expression specified for <<".concat(payload.name,">> (#").concat(tagCount.optionsfrom,")"))};var result=void 0;try{var exp=payload.args.full;result=Scripting.evalJavaScript("{"===exp[0]?"(".concat(exp,")"):exp)}catch(ex){return{v:_this16.error("bad evaluation: ".concat("object"===_typeof(ex)?ex.message:ex))}}if("object"!==_typeof(result)||null===result)return{v:_this16.error("expression must yield a supported collection or generic object (type: ".concat(null===result?"null":_typeof(result),")"))};if(result instanceof Array||result instanceof Set)result.forEach((function(val){return options.push({label:String(val),value:val})}));else if(result instanceof Map)result.forEach((function(val,key){return options.push({label:String(key),value:val})}));else{var oType=Util.toStringTag(result);if("Object"!==oType)return{v:_this16.error("expression must yield a supported collection or generic object (object type: ".concat(oType,")"))};Object.keys(result).forEach((function(key){return options.push({label:key,value:result[key]})}))}}();if("object"===_typeof(_ret))return _ret.v}}if(-1===selectedIdx)if(config.autoselect){var sameValueZero=Util.sameValueZero,curValue=State.getVar(varName),curValueIdx=options.findIndex((function(opt){return sameValueZero(opt.value,curValue)}));selectedIdx=-1===curValueIdx?0:curValueIdx}else selectedIdx=0;if("cycle"===this.name){var lastIdx=options.length-1;if(config.once&&selectedIdx===lastIdx)jQuery(this.output).wikiWithOptions({profile:"core"},options[selectedIdx].label);else{var cycleIdx=selectedIdx;jQuery(document.createElement("a")).wikiWithOptions({profile:"core"},options[selectedIdx].label).attr("id","".concat(this.name,"-").concat(varId)).addClass("macro-".concat(this.name)).ariaClick({namespace:".macros",role:"button"},this.createShadowWrapper((function(){var $this=$(this);cycleIdx=(cycleIdx+1)%options.length,State.setVar(varName,options[cycleIdx].value),$this.empty().wikiWithOptions({profile:"core"},options[cycleIdx].label),config.once&&cycleIdx===lastIdx&&$this.off().contents().unwrap()}))).appendTo(this.output)}}else{var $select=jQuery(document.createElement("select"));options.forEach((function(opt,i){jQuery(document.createElement("option")).val(i).text(opt.label).appendTo($select)})),$select.attr({id:"".concat(this.name,"-").concat(varId),name:"".concat(this.name,"-").concat(varId),tabindex:0}).addClass("macro-".concat(this.name)).val(selectedIdx).on("change.macros",this.createShadowWrapper((function(){State.setVar(varName,options[Number(this.value)].value)}))).appendTo(this.output)}State.setVar(varName,options[selectedIdx].value)}}),Macro.add(["linkappend","linkprepend","linkreplace"],{isAsync:!0,tags:null,t8nRe:/^(?:transition|t8n)$/,handler:function(){var _this17=this;if(0===this.args.length)return this.error("no link text specified");var $link=jQuery(document.createElement("a")),$insert=jQuery(document.createElement("span")),transition=this.args.length>1&&this.self.t8nRe.test(this.args[1]);$link.wikiWithOptions({profile:"core"},this.args[0]).addClass("link-internal macro-".concat(this.name)).ariaClick({namespace:".macros",one:!0},this.createShadowWrapper((function(){if("linkreplace"===_this17.name?$link.remove():$link.wrap('<span class="macro-'.concat(_this17.name,'"></span>')).replaceWith((function(){return $link.html()})),""!==_this17.payload[0].contents){var frag=document.createDocumentFragment();new Wikifier(frag,_this17.payload[0].contents),$insert.append(frag)}transition&&setTimeout((function(){return $insert.removeClass("macro-".concat(_this17.name,"-in"))}),Engine.minDomActionDelay)}))).appendTo(this.output),$insert.addClass("macro-".concat(this.name,"-insert")),transition&&$insert.addClass("macro-".concat(this.name,"-in")),"linkprepend"===this.name?$insert.insertBefore($link):$insert.insertAfter($link)}}),Macro.add(["numberbox","textbox"],{isAsync:!0,handler:function(){if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("variable name"),this.args.length<2&&errors.push("default value"),this.error("no ".concat(errors.join(" or ")," specified"))}if("string"!=typeof this.args[0])return this.error("variable name argument is not a string");var varName=this.args[0].trim();if("$"!==varName[0]&&"_"!==varName[0])return this.error('variable name "'.concat(this.args[0],'" is missing its sigil ($ or _)'));Config.debug&&this.debugView.modes({block:!0});var asNumber="numberbox"===this.name,defaultValue=asNumber?Number(this.args[1]):this.args[1];if(asNumber&&Number.isNaN(defaultValue))return this.error('default value "'.concat(this.args[1],'" is neither a number nor can it be parsed into a number'));var passage,varId=Util.slugify(varName),el=document.createElement("input"),autofocus=!1;this.args.length>3?(passage=this.args[2],autofocus="autofocus"===this.args[3]):this.args.length>2&&("autofocus"===this.args[2]?autofocus=!0:passage=this.args[2]),"object"===_typeof(passage)&&(passage=passage.link),jQuery(el).attr({id:"".concat(this.name,"-").concat(varId),name:"".concat(this.name,"-").concat(varId),type:asNumber?"number":"text",inputmode:asNumber?"decimal":"text",tabindex:0}).addClass("macro-".concat(this.name)).on("change.macros",this.createShadowWrapper((function(){State.setVar(varName,asNumber?Number(this.value):this.value)}))).on("keypress.macros",this.createShadowWrapper((function(ev){13===ev.which&&(ev.preventDefault(),State.setVar(varName,asNumber?Number(this.value):this.value),null!=passage&&Engine.play(passage))}))).appendTo(this.output),asNumber&&(el.step="any"),State.setVar(varName,defaultValue),el.value=defaultValue,autofocus&&(el.setAttribute("autofocus","autofocus"),postdisplay["#autofocus:".concat(el.id)]=function(task){delete postdisplay[task],setTimeout((function(){return el.focus()}),Engine.minDomActionDelay)})}}),Macro.add("radiobutton",{isAsync:!0,handler:function(){if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("variable name"),this.args.length<2&&errors.push("checked value"),this.error("no ".concat(errors.join(" or ")," specified"))}if("string"!=typeof this.args[0])return this.error("variable name argument is not a string");var varName=this.args[0].trim();if("$"!==varName[0]&&"_"!==varName[0])return this.error('variable name "'.concat(this.args[0],'" is missing its sigil ($ or _)'));var varId=Util.slugify(varName),checkValue=this.args[1],el=document.createElement("input");switch(TempState.hasOwnProperty(this.name)||(TempState[this.name]={}),TempState[this.name].hasOwnProperty(varId)||(TempState[this.name][varId]=0),jQuery(el).attr({id:"".concat(this.name,"-").concat(varId,"-").concat(TempState[this.name][varId]++),name:"".concat(this.name,"-").concat(varId),type:"radio",tabindex:0}).addClass("macro-".concat(this.name)).on("change.macros",this.createShadowWrapper((function(){this.checked&&State.setVar(varName,checkValue)}))).appendTo(this.output),this.args[2]){case"autocheck":State.getVar(varName)===checkValue&&(el.checked=!0);break;case"checked":el.checked=!0,State.setVar(varName,checkValue)}}}),Macro.add("textarea",{isAsync:!0,handler:function(){if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("variable name"),this.args.length<2&&errors.push("default value"),this.error("no ".concat(errors.join(" or ")," specified"))}if("string"!=typeof this.args[0])return this.error("variable name argument is not a string");var varName=this.args[0].trim();if("$"!==varName[0]&&"_"!==varName[0])return this.error('variable name "'.concat(this.args[0],'" is missing its sigil ($ or _)'));Config.debug&&this.debugView.modes({block:!0});var varId=Util.slugify(varName),defaultValue=this.args[1],autofocus="autofocus"===this.args[2],el=document.createElement("textarea");jQuery(el).attr({id:"".concat(this.name,"-").concat(varId),name:"".concat(this.name,"-").concat(varId),rows:4,tabindex:0}).addClass("macro-".concat(this.name)).on("change.macros",this.createShadowWrapper((function(){State.setVar(varName,this.value)}))).appendTo(this.output),State.setVar(varName,defaultValue),el.textContent=defaultValue,autofocus&&(el.setAttribute("autofocus","autofocus"),postdisplay["#autofocus:".concat(el.id)]=function(task){delete postdisplay[task],setTimeout((function(){return el.focus()}),Engine.minDomActionDelay)})}}),Macro.add("click","link"),Macro.add("actions",{handler:function(){for(var $list=jQuery(document.createElement("ul")).addClass(this.name).appendTo(this.output),i=0;i<this.args.length;++i){var passage=void 0,text=void 0,$image=void 0,setFn=void 0;if("object"===_typeof(this.args[i])?this.args[i].isImage?($image=jQuery(document.createElement("img")).attr("src",this.args[i].source),this.args[i].hasOwnProperty("passage")&&$image.attr("data-passage",this.args[i].passage),this.args[i].hasOwnProperty("title")&&$image.attr("title",this.args[i].title),this.args[i].hasOwnProperty("align")&&$image.attr("align",this.args[i].align),passage=this.args[i].link,setFn=this.args[i].setFn):(text=this.args[i].text,passage=this.args[i].link,setFn=this.args[i].setFn):text=passage=this.args[i],!(State.variables.hasOwnProperty("#actions")&&State.variables["#actions"].hasOwnProperty(passage)&&State.variables["#actions"][passage])){var $link=jQuery(Wikifier.createInternalLink(jQuery(document.createElement("li")).appendTo($list),passage,null,function(passage,fn){return function(){State.variables.hasOwnProperty("#actions")||(State.variables["#actions"]={}),State.variables["#actions"][passage]=!0,"function"==typeof fn&&fn()}}(passage,setFn))).addClass("macro-".concat(this.name)).append($image||document.createTextNode(text));$image&&$link.addClass("link-image")}}}}),Macro.add(["back","return"],{handler:function(){if(this.args.length>1)return this.error("too many arguments specified, check the documentation for details");var passage,text,$image,$link,momentIndex=-1;if(1===this.args.length&&("object"===_typeof(this.args[0])?this.args[0].isImage?($image=jQuery(document.createElement("img")).attr("src",this.args[0].source),this.args[0].hasOwnProperty("passage")&&$image.attr("data-passage",this.args[0].passage),this.args[0].hasOwnProperty("title")&&$image.attr("title",this.args[0].title),this.args[0].hasOwnProperty("align")&&$image.attr("align",this.args[0].align),this.args[0].hasOwnProperty("link")&&(passage=this.args[0].link)):(1===this.args[0].count||(text=this.args[0].text),passage=this.args[0].link):1===this.args.length&&(text=this.args[0])),null==passage){for(var i=State.length-2;i>=0;--i)if(State.history[i].title!==State.passage){momentIndex=i,passage=State.history[i].title;break}if(null==passage&&"return"===this.name)for(var _i6=State.expired.length-1;_i6>=0;--_i6)if(State.expired[_i6]!==State.passage){passage=State.expired[_i6];break}}else{if(!Story.has(passage))return this.error('passage "'.concat(passage,'" does not exist'));if("back"===this.name){for(var _i7=State.length-2;_i7>=0;--_i7)if(State.history[_i7].title===passage){momentIndex=_i7;break}if(-1===momentIndex)return this.error('cannot find passage "'.concat(passage,'" in the current story history'))}}if(null==passage)return this.error("cannot find passage");"back"!==this.name||-1!==momentIndex?($link=jQuery(document.createElement("a")).addClass("link-internal").ariaClick({one:!0},"return"===this.name?function(){return Engine.play(passage)}:function(){return Engine.goTo(momentIndex)}),$image&&$link.addClass("link-image")):$link=jQuery(document.createElement("span")).addClass("link-disabled"),$link.addClass("macro-".concat(this.name)).append($image||document.createTextNode(text||L10n.get("macro".concat(this.name.toUpperFirst(),"Text")))).appendTo(this.output)}}),Macro.add("choice",{handler:function(){if(0===this.args.length)return this.error("no passage specified");var passage,text,$image,setFn,$link,choiceId=State.passage;if(1===this.args.length?"object"===_typeof(this.args[0])?this.args[0].isImage?($image=jQuery(document.createElement("img")).attr("src",this.args[0].source),this.args[0].hasOwnProperty("passage")&&$image.attr("data-passage",this.args[0].passage),this.args[0].hasOwnProperty("title")&&$image.attr("title",this.args[0].title),this.args[0].hasOwnProperty("align")&&$image.attr("align",this.args[0].align),passage=this.args[0].link,setFn=this.args[0].setFn):(text=this.args[0].text,passage=this.args[0].link,setFn=this.args[0].setFn):text=passage=this.args[0]:(passage=this.args[0],text=this.args[1]),State.variables.hasOwnProperty("#choice")&&State.variables["#choice"].hasOwnProperty(choiceId)&&State.variables["#choice"][choiceId])return $link=jQuery(document.createElement("span")).addClass("link-disabled macro-".concat(this.name)).attr("tabindex",-1).append($image||document.createTextNode(text)).appendTo(this.output),void($image&&$link.addClass("link-image"));$link=jQuery(Wikifier.createInternalLink(this.output,passage,null,(function(){State.variables.hasOwnProperty("#choice")||(State.variables["#choice"]={}),State.variables["#choice"][choiceId]=!0,"function"==typeof setFn&&setFn()}))).addClass("macro-".concat(this.name)).append($image||document.createTextNode(text)),$image&&$link.addClass("link-image")}}),Macro.add(["addclass","toggleclass"],{handler:function(){if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("selector"),this.args.length<2&&errors.push("class names"),this.error("no ".concat(errors.join(" or ")," specified"))}var $targets=jQuery(this.args[0]);if(0===$targets.length)return this.error('no elements matched the selector "'.concat(this.args[0],'"'));switch(this.name){case"addclass":$targets.addClass(this.args[1].trim());break;case"toggleclass":$targets.toggleClass(this.args[1].trim())}Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("removeclass",{handler:function(){if(0===this.args.length)return this.error("no selector specified");var $targets=jQuery(this.args[0]);if(0===$targets.length)return this.error('no elements matched the selector "'.concat(this.args[0],'"'));this.args.length>1?$targets.removeClass(this.args[1].trim()):$targets.removeClass(),Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("copy",{handler:function(){if(0===this.args.length)return this.error("no selector specified");var $targets=jQuery(this.args[0]);if(0===$targets.length)return this.error('no elements matched the selector "'.concat(this.args[0],'"'));jQuery(this.output).append($targets.html()),Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add(["append","prepend","replace"],{tags:null,t8nRe:/^(?:transition|t8n)$/,handler:function(){var _this18=this;if(0===this.args.length)return this.error("no selector specified");var $insert,$targets=jQuery(this.args[0]);if(0===$targets.length)return this.error('no elements matched the selector "'.concat(this.args[0],'"'));if(""!==this.payload[0].contents)switch(this.args.length>1&&this.self.t8nRe.test(this.args[1])?(($insert=jQuery(document.createElement("span"))).addClass("macro-".concat(this.name,"-insert macro-").concat(this.name,"-in")),setTimeout((function(){return $insert.removeClass("macro-".concat(_this18.name,"-in"))}),Engine.minDomActionDelay)):$insert=jQuery(document.createDocumentFragment()),$insert.wiki(this.payload[0].contents),this.name){case"replace":$targets.empty();case"append":$targets.append($insert);break;case"prepend":$targets.prepend($insert)}else"replace"===this.name&&$targets.empty();Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("remove",{handler:function(){if(0===this.args.length)return this.error("no selector specified");var $targets=jQuery(this.args[0]);if(0===$targets.length)return this.error('no elements matched the selector "'.concat(this.args[0],'"'));$targets.remove(),Config.debug&&this.debugView.modes({hidden:!0})}}),Has.audio){var errorOnePlaybackAction=function(cur,prev){return'only one playback action allowed per invocation, "'.concat(cur,'" cannot be combined with "').concat(prev,'"')};Macro.add("audio",{handler:function(){if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("track and/or group IDs"),this.args.length<2&&errors.push("actions"),this.error("no ".concat(errors.join(" or ")," specified"))}var selected;try{selected=SimpleAudio.select(this.args[0])}catch(ex){return this.error(ex.message)}for(var action,fadeTo,loop,mute,passage,time,volume,args=this.args.slice(1),fadeOver=5;args.length>0;){var arg=args.shift(),raw=void 0;switch(arg){case"load":case"pause":case"play":case"stop":case"unload":if(action)return this.error(errorOnePlaybackAction(arg,action));action=arg;break;case"fadein":if(action)return this.error(errorOnePlaybackAction(arg,action));action="fade",fadeTo=1;break;case"fadeout":if(action)return this.error(errorOnePlaybackAction(arg,action));action="fade",fadeTo=0;break;case"fadeto":if(action)return this.error(errorOnePlaybackAction(arg,action));if(0===args.length)return this.error("fadeto missing required level value");if(action="fade",raw=args.shift(),fadeTo=Number.parseFloat(raw),Number.isNaN(fadeTo)||!Number.isFinite(fadeTo))return this.error("cannot parse fadeto: ".concat(raw));break;case"fadeoverto":if(action)return this.error(errorOnePlaybackAction(arg,action));if(args.length<2){var _errors=[];return args.length<1&&_errors.push("seconds"),args.length<2&&_errors.push("level"),this.error("fadeoverto missing required ".concat(_errors.join(" and ")," value").concat(_errors.length>1?"s":""))}if(action="fade",raw=args.shift(),fadeOver=Number.parseFloat(raw),Number.isNaN(fadeOver)||!Number.isFinite(fadeOver))return this.error("cannot parse fadeoverto: ".concat(raw));if(raw=args.shift(),fadeTo=Number.parseFloat(raw),Number.isNaN(fadeTo)||!Number.isFinite(fadeTo))return this.error("cannot parse fadeoverto: ".concat(raw));break;case"volume":if(0===args.length)return this.error("volume missing required level value");if(raw=args.shift(),volume=Number.parseFloat(raw),Number.isNaN(volume)||!Number.isFinite(volume))return this.error("cannot parse volume: ".concat(raw));break;case"mute":case"unmute":mute="mute"===arg;break;case"time":if(0===args.length)return this.error("time missing required seconds value");if(raw=args.shift(),time=Number.parseFloat(raw),Number.isNaN(time)||!Number.isFinite(time))return this.error("cannot parse time: ".concat(raw));break;case"loop":case"unloop":loop="loop"===arg;break;case"goto":if(0===args.length)return this.error("goto missing required passage title");if(raw=args.shift(),passage="object"===_typeof(raw)?raw.link:raw,!Story.has(passage))return this.error('passage "'.concat(passage,'" does not exist'));break;default:return this.error("unknown action: ".concat(arg))}}try{if(null!=volume&&selected.volume(volume),null!=time&&selected.time(time),null!=mute&&selected.mute(mute),null!=loop&&selected.loop(loop),null!=passage){var nsEnded="ended.macros.macro-".concat(this.name,"_goto");selected.off(nsEnded).one(nsEnded,(function(){selected.off(nsEnded),Engine.play(passage)}))}switch(action){case"fade":selected.fade(fadeOver,fadeTo);break;case"load":selected.load();break;case"pause":selected.pause();break;case"play":selected.playWhenAllowed();break;case"stop":selected.stop();break;case"unload":selected.unload()}Config.debug&&this.debugView.modes({hidden:!0})}catch(ex){return this.error("error executing action: ".concat(ex.message))}}}),Macro.add("cacheaudio",{handler:function(){var _this19=this;if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("track ID"),this.args.length<2&&errors.push("sources"),this.error("no ".concat(errors.join(" or ")," specified"))}var id=String(this.args[0]).trim(),oldFmtRe=/^format:\s*([\w-]+)\s*;\s*/i;try{SimpleAudio.tracks.add(id,this.args.slice(1).map((function(source){if(oldFmtRe.test(source)){if(Config.debug)return _this19.error('track ID "'.concat(id,'": format specifier migration required, "format:formatId;" → "formatId|"'));source=source.replace(oldFmtRe,"$1|")}return source})))}catch(ex){return this.error(ex.message)}if(Config.debug&&!SimpleAudio.tracks.get(id).hasSource())return this.error('track ID "'.concat(id,'": no supported audio sources found'));Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("createaudiogroup",{tags:["track"],handler:function(){if(0===this.args.length)return this.error("no group ID specified");if(1===this.payload.length)return this.error("no tracks defined via <<track>>");Config.debug&&this.debugView.modes({nonvoid:!1,hidden:!0});for(var groupId=String(this.args[0]).trim(),trackIds=[],i=1,len=this.payload.length;i<len;++i){if(this.payload[i].args.length<1)return this.error("no track ID specified");trackIds.push(String(this.payload[i].args[0]).trim()),Config.debug&&this.createDebugView(this.payload[i].name,this.payload[i].source).modes({nonvoid:!1,hidden:!0})}try{SimpleAudio.groups.add(groupId,trackIds)}catch(ex){return this.error(ex.message)}Config.debug&&this.createDebugView("/".concat(this.name),"<</".concat(this.name,">>")).modes({nonvoid:!1,hidden:!0})}}),Macro.add("createplaylist",{tags:["track"],handler:function(){if(0===this.args.length)return this.error("no list ID specified");if(1===this.payload.length)return this.error("no tracks defined via <<track>>");var playlist=Macro.get("playlist");if(null!==playlist.from&&"createplaylist"!==playlist.from)return this.error("a playlist has already been defined with <<setplaylist>>");Config.debug&&this.debugView.modes({nonvoid:!1,hidden:!0});for(var listId=String(this.args[0]).trim(),trackObjs=[],i=1,len=this.payload.length;i<len;++i){if(0===this.payload[i].args.length)return this.error("no track ID specified");for(var trackObj={id:String(this.payload[i].args[0]).trim()},args=this.payload[i].args.slice(1);args.length>0;){var arg=args.shift(),raw=void 0,parsed=void 0;switch(arg){case"copy":case"own":trackObj.own=!0;break;case"rate":args.length>0&&args.shift();break;case"volume":if(0===args.length)return this.error("volume missing required level value");if(raw=args.shift(),parsed=Number.parseFloat(raw),Number.isNaN(parsed)||!Number.isFinite(parsed))return this.error("cannot parse volume: ".concat(raw));trackObj.volume=parsed;break;default:return this.error("unknown action: ".concat(arg))}}trackObjs.push(trackObj),Config.debug&&this.createDebugView(this.payload[i].name,this.payload[i].source).modes({nonvoid:!1,hidden:!0})}try{SimpleAudio.lists.add(listId,trackObjs)}catch(ex){return this.error(ex.message)}null===playlist.from&&(playlist.from="createplaylist"),Config.debug&&this.createDebugView("/".concat(this.name),"<</".concat(this.name,">>")).modes({nonvoid:!1,hidden:!0})}}),Macro.add("masteraudio",{handler:function(){if(0===this.args.length)return this.error("no actions specified");for(var action,mute,muteOnHide,volume,args=this.args.slice(0);args.length>0;){var arg=args.shift(),raw=void 0;switch(arg){case"load":case"stop":case"unload":if(action)return this.error(errorOnePlaybackAction(arg,action));action=arg;break;case"mute":case"unmute":mute="mute"===arg;break;case"muteonhide":case"nomuteonhide":muteOnHide="muteonhide"===arg;break;case"volume":if(0===args.length)return this.error("volume missing required level value");if(raw=args.shift(),volume=Number.parseFloat(raw),Number.isNaN(volume)||!Number.isFinite(volume))return this.error("cannot parse volume: ".concat(raw));break;default:return this.error("unknown action: ".concat(arg))}}try{switch(null!=mute&&SimpleAudio.mute(mute),null!=muteOnHide&&SimpleAudio.muteOnHidden(muteOnHide),null!=volume&&SimpleAudio.volume(volume),action){case"load":SimpleAudio.load();break;case"stop":SimpleAudio.stop();break;case"unload":SimpleAudio.unload()}Config.debug&&this.debugView.modes({hidden:!0})}catch(ex){return this.error("error executing action: ".concat(ex.message))}}}),Macro.add("playlist",{from:null,handler:function(){var list,args,action,from=this.self.from;if(null===from)return this.error("no playlists have been created");if("createplaylist"===from){if(this.args.length<2){var errors=[];return this.args.length<1&&errors.push("list ID"),this.args.length<2&&errors.push("actions"),this.error("no ".concat(errors.join(" or ")," specified"))}var id=String(this.args[0]).trim();if(!SimpleAudio.lists.has(id))return this.error('playlist "'.concat(id,'" does not exist'));list=SimpleAudio.lists.get(id),args=this.args.slice(1)}else{if(0===this.args.length)return this.error("no actions specified");list=SimpleAudio.lists.get("setplaylist"),args=this.args.slice(0)}for(var fadeTo,loop,mute,shuffle,volume,fadeOver=5;args.length>0;){var arg=args.shift(),raw=void 0;switch(arg){case"load":case"pause":case"play":case"skip":case"stop":case"unload":if(action)return this.error(errorOnePlaybackAction(arg,action));action=arg;break;case"fadein":if(action)return this.error(errorOnePlaybackAction(arg,action));action="fade",fadeTo=1;break;case"fadeout":if(action)return this.error(errorOnePlaybackAction(arg,action));action="fade",fadeTo=0;break;case"fadeto":if(action)return this.error(errorOnePlaybackAction(arg,action));if(0===args.length)return this.error("fadeto missing required level value");if(action="fade",raw=args.shift(),fadeTo=Number.parseFloat(raw),Number.isNaN(fadeTo)||!Number.isFinite(fadeTo))return this.error("cannot parse fadeto: ".concat(raw));break;case"fadeoverto":if(action)return this.error(errorOnePlaybackAction(arg,action));if(args.length<2){var _errors2=[];return args.length<1&&_errors2.push("seconds"),args.length<2&&_errors2.push("level"),this.error("fadeoverto missing required ".concat(_errors2.join(" and ")," value").concat(_errors2.length>1?"s":""))}if(action="fade",raw=args.shift(),fadeOver=Number.parseFloat(raw),Number.isNaN(fadeOver)||!Number.isFinite(fadeOver))return this.error("cannot parse fadeoverto: ".concat(raw));if(raw=args.shift(),fadeTo=Number.parseFloat(raw),Number.isNaN(fadeTo)||!Number.isFinite(fadeTo))return this.error("cannot parse fadeoverto: ".concat(raw));break;case"volume":if(0===args.length)return this.error("volume missing required level value");if(raw=args.shift(),volume=Number.parseFloat(raw),Number.isNaN(volume)||!Number.isFinite(volume))return this.error("cannot parse volume: ".concat(raw));break;case"mute":case"unmute":mute="mute"===arg;break;case"loop":case"unloop":loop="loop"===arg;break;case"shuffle":case"unshuffle":shuffle="shuffle"===arg;break;default:return this.error("unknown action: ".concat(arg))}}try{switch(null!=volume&&list.volume(volume),null!=mute&&list.mute(mute),null!=loop&&list.loop(loop),null!=shuffle&&list.shuffle(shuffle),action){case"fade":list.fade(fadeOver,fadeTo);break;case"load":list.load();break;case"pause":list.pause();break;case"play":list.playWhenAllowed();break;case"skip":list.skip();break;case"stop":list.stop();break;case"unload":list.unload()}Config.debug&&this.debugView.modes({hidden:!0})}catch(ex){return this.error("error executing action: ".concat(ex.message))}}}),Macro.add("removeaudiogroup",{handler:function(){if(0===this.args.length)return this.error("no group ID specified");var id=String(this.args[0]).trim();if(!SimpleAudio.groups.has(id))return this.error('group "'.concat(id,'" does not exist'));SimpleAudio.groups.delete(id),Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("removeplaylist",{handler:function(){if(0===this.args.length)return this.error("no list ID specified");var id=String(this.args[0]).trim();if(!SimpleAudio.lists.has(id))return this.error('playlist "'.concat(id,'" does not exist'));SimpleAudio.lists.delete(id),Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("waitforaudio",{skipArgs:!0,handler:function(){SimpleAudio.loadWithScreen()}}),Macro.add("setplaylist",{handler:function(){if(0===this.args.length)return this.error("no track ID(s) specified");var playlist=Macro.get("playlist");if(null!==playlist.from&&"setplaylist"!==playlist.from)return this.error("playlists have already been defined with <<createplaylist>>");try{SimpleAudio.lists.add("setplaylist",this.args.slice(0))}catch(ex){return this.error(ex.message)}null===playlist.from&&(playlist.from="setplaylist"),Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("stopallaudio",{skipArgs:!0,handler:function(){SimpleAudio.select(":all").stop(),Config.debug&&this.debugView.modes({hidden:!0})}})}else Macro.add(["audio","cacheaudio","createaudiogroup","createplaylist","masteraudio","playlist","removeaudiogroup","removeplaylist","waitforaudio","setplaylist","stopallaudio"],{skipArgs:!0,handler:function(){Config.debug&&this.debugView.modes({hidden:!0})}});Macro.add("done",{skipArgs:!0,tags:null,handler:function(){var contents=this.payload[0].contents.trim();""!==contents&&setTimeout(this.createShadowWrapper((function(){return $.wiki(contents)})),Engine.minDomActionDelay)}}),Macro.add("goto",{handler:function(){return 0===this.args.length?this.error("no passage specified"):(passage="object"===_typeof(this.args[0])?this.args[0].link:this.args[0],Story.has(passage)?void setTimeout((function(){return Engine.play(passage)}),Engine.minDomActionDelay):this.error('passage "'.concat(passage,'" does not exist')));var passage}}),Macro.add("repeat",{isAsync:!0,tags:null,timers:new Set,t8nRe:/^(?:transition|t8n)$/,handler:function(){var delay,_this20=this;if(0===this.args.length)return this.error("no time value specified");try{delay=Math.max(Engine.minDomActionDelay,Util.fromCssTime(this.args[0]))}catch(ex){return this.error(ex.message)}Config.debug&&this.debugView.modes({block:!0});var transition=this.args.length>1&&this.self.t8nRe.test(this.args[1]),$wrapper=jQuery(document.createElement("span")).addClass("macro-".concat(this.name)).appendTo(this.output);this.self.registerInterval(this.createShadowWrapper((function(){var frag=document.createDocumentFragment();new Wikifier(frag,_this20.payload[0].contents);var $output=$wrapper;transition&&($output=jQuery(document.createElement("span")).addClass("macro-repeat-insert macro-repeat-in").appendTo($output)),$output.append(frag),transition&&setTimeout((function(){return $output.removeClass("macro-repeat-in")}),Engine.minDomActionDelay)})),delay)},registerInterval:function(callback,delay){var _this21=this;if("function"!=typeof callback)throw new TypeError("callback parameter must be a function");var passage=State.passage,turn=State.turns,timers=this.timers,timerId=null;timerId=setInterval((function(){if(State.passage!==passage||State.turns!==turn)return clearInterval(timerId),void timers.delete(timerId);var timerIdCache;try{TempState.break=null,TempState.hasOwnProperty("repeatTimerId")&&(timerIdCache=TempState.repeatTimerId),TempState.repeatTimerId=timerId,callback.call(_this21)}finally{void 0!==timerIdCache?TempState.repeatTimerId=timerIdCache:delete TempState.repeatTimerId,TempState.break=null}}),delay),timers.add(timerId),prehistory.hasOwnProperty("#repeat-timers-cleanup")||(prehistory["#repeat-timers-cleanup"]=function(task){delete prehistory[task],timers.forEach((function(timerId){return clearInterval(timerId)})),timers.clear()})}}),Macro.add("stop",{skipArgs:!0,handler:function(){if(!TempState.hasOwnProperty("repeatTimerId"))return this.error("must only be used in conjunction with its parent macro <<repeat>>");var timers=Macro.get("repeat").timers,timerId=TempState.repeatTimerId;clearInterval(timerId),timers.delete(timerId),TempState.break=2,Config.debug&&this.debugView.modes({hidden:!0})}}),Macro.add("timed",{isAsync:!0,tags:["next"],timers:new Set,t8nRe:/^(?:transition|t8n)$/,handler:function(){if(0===this.args.length)return this.error("no time value specified in <<timed>>");var i,items=[];try{items.push({name:this.name,source:this.source,delay:Math.max(Engine.minDomActionDelay,Util.fromCssTime(this.args[0])),content:this.payload[0].contents})}catch(ex){return this.error("".concat(ex.message," in <<timed>>"))}if(this.payload.length>1)try{var len;for(i=1,len=this.payload.length;i<len;++i)items.push({name:this.payload[i].name,source:this.payload[i].source,delay:0===this.payload[i].args.length?items[items.length-1].delay:Math.max(Engine.minDomActionDelay,Util.fromCssTime(this.payload[i].args[0])),content:this.payload[i].contents})}catch(ex){return this.error("".concat(ex.message," in <<next>> (#").concat(i,")"))}Config.debug&&this.debugView.modes({block:!0});var transition=this.args.length>1&&this.self.t8nRe.test(this.args[1]),$wrapper=jQuery(document.createElement("span")).addClass("macro-".concat(this.name)).appendTo(this.output);this.self.registerTimeout(this.createShadowWrapper((function(item){var frag=document.createDocumentFragment();new Wikifier(frag,item.content);var $output=$wrapper;Config.debug&&"next"===item.name&&($output=jQuery(new DebugView($output[0],"macro",item.name,item.source).output)),transition&&($output=jQuery(document.createElement("span")).addClass("macro-timed-insert macro-timed-in").appendTo($output)),$output.append(frag),transition&&setTimeout((function(){return $output.removeClass("macro-timed-in")}),Engine.minDomActionDelay)})),items)},registerTimeout:function(callback,items){if("function"!=typeof callback)throw new TypeError("callback parameter must be a function");var passage=State.passage,turn=State.turns,timers=this.timers,timerId=null,nextItem=items.shift();timerId=setTimeout((function worker(){if(timers.delete(timerId),State.passage===passage&&State.turns===turn){var curItem=nextItem;null!=(nextItem=items.shift())&&(timerId=setTimeout(worker,nextItem.delay),timers.add(timerId)),callback.call(this,curItem)}}),nextItem.delay),timers.add(timerId),prehistory.hasOwnProperty("#timed-timers-cleanup")||(prehistory["#timed-timers-cleanup"]=function(task){delete prehistory[task],timers.forEach((function(timerId){return clearTimeout(timerId)})),timers.clear()})}}),Macro.add("widget",{tags:null,handler:function(){if(0===this.args.length)return this.error("no widget name specified");var widgetCode,widgetName=this.args[0],isNonVoid=this.args.length>1&&"container"===this.args[1];if(Macro.has(widgetName)){if(!Macro.get(widgetName).isWidget)return this.error('cannot clobber existing macro "'.concat(widgetName,'"'));Macro.delete(widgetName)}try{var widgetDef={isWidget:!0,handler:(widgetCode=this.payload[0].contents,function(){var shadowStore={};State.temporary.hasOwnProperty("args")&&(shadowStore._args=State.temporary.args),State.temporary.args=_toConsumableArray(this.args),State.temporary.args.raw=this.args.raw,State.temporary.args.full=this.args.full,this.addShadow("_args"),isNonVoid&&(State.temporary.hasOwnProperty("contents")&&(shadowStore._contents=State.temporary.contents),State.temporary.contents=this.payload[0].contents,this.addShadow("_contents")),State.variables.hasOwnProperty("args")&&(shadowStore.$args=State.variables.args),State.variables.args=State.temporary.args,this.addShadow("$args");try{var resFrag=document.createDocumentFragment(),errList=[];if(new Wikifier(resFrag,widgetCode),Array.from(resFrag.querySelectorAll(".error")).forEach((function(errEl){errList.push(errEl.textContent)})),0!==errList.length)return this.error("error".concat(errList.length>1?"s":""," within widget code (").concat(errList.join("; "),")"));this.output.appendChild(resFrag)}catch(ex){return this.error("cannot execute widget: ".concat(ex.message))}finally{shadowStore.hasOwnProperty("_args")?State.temporary.args=shadowStore._args:delete State.temporary.args,isNonVoid&&(shadowStore.hasOwnProperty("_contents")?State.temporary.contents=shadowStore._contents:delete State.temporary.contents),shadowStore.hasOwnProperty("$args")?State.variables.args=shadowStore.$args:delete State.variables.args}})};isNonVoid&&(widgetDef.tags=[]),Macro.add(widgetName,widgetDef),Config.debug&&this.debugView.modes({hidden:!0})}catch(ex){return this.error('cannot create widget macro "'.concat(widgetName,'": ').concat(ex.message))}}})}();var Dialog=function(){var _$overlay=null,_$dialog=null,_$dialogTitle=null,_$dialogBody=null,_lastActive=null,_scrollbarWidth=0,_dialogObserver=null;function dialogClose(ev){return _$dialogBody.trigger(":dialogclosing"),jQuery(document).off(".dialog-close"),_dialogObserver?(_dialogObserver.disconnect(),_dialogObserver=null):_$dialogBody.off(".dialog-resize"),jQuery(window).off(".dialog-resize"),_$dialog.removeClass("open").css({left:"",right:"",top:"",bottom:""}),jQuery("#ui-bar,#story").find("[tabindex=-2]").removeAttr("aria-hidden").attr("tabindex",0),jQuery("body>[tabindex=-3]").removeAttr("aria-hidden").removeAttr("tabindex"),_$overlay.removeClass("open"),jQuery(document.documentElement).removeAttr("data-dialog"),_$dialogTitle.empty(),_$dialogBody.empty().removeClass(),null!==_lastActive&&(jQuery(_lastActive).focus(),_lastActive=null),ev&&ev.data&&"function"==typeof ev.data.closeFn&&ev.data.closeFn(ev),_$dialogBody.trigger(":dialogclose"),_$dialogBody.trigger(":dialogclosed"),Dialog}function dialogIsOpen(classNames){return _$dialog.hasClass("open")&&(!classNames||classNames.splitOrEmpty(/\s+/).every((function(cn){return _$dialogBody.hasClass(cn)})))}function dialogOpen(options,closeFn){_$dialogBody.trigger(":dialogopening");var top=jQuery.extend({top:50},options).top;return dialogIsOpen()||(_lastActive=safeActiveElement()),jQuery(document.documentElement).attr("data-dialog","open"),_$overlay.addClass("open"),null!==_$dialogBody[0].querySelector("img")&&_$dialogBody.imagesLoaded().always((function(){return _resizeHandler({data:{top:top}})})),jQuery("body>:not(script,#store-area,tw-storydata,#ui-bar,#ui-overlay,#ui-dialog)").attr("tabindex",-3).attr("aria-hidden",!0),jQuery("#ui-bar,#story").find("[tabindex]:not([tabindex^=-])").attr("tabindex",-2).attr("aria-hidden",!0),_$dialog.css(_calcPosition(top)).addClass("open").focus(),jQuery(window).on("resize.dialog-resize",null,{top:top},jQuery.throttle(40,_resizeHandler)),Has.mutationObserver?(_dialogObserver=new MutationObserver((function(mutations){for(var i=0;i<mutations.length;++i)if("childList"===mutations[i].type){_resizeHandler({data:{top:top}});break}}))).observe(_$dialogBody[0],{childList:!0,subtree:!0}):_$dialogBody.on("DOMNodeInserted.dialog-resize DOMNodeRemoved.dialog-resize",null,{top:top},jQuery.throttle(40,_resizeHandler)),jQuery(document).one("click.dialog-close",".ui-close",{closeFn:closeFn},(function(ev){dialogClose(ev)})).one("keypress.dialog-close",".ui-close",(function(ev){13!==ev.which&&32!==ev.which||jQuery(this).trigger("click")})),_$dialogBody.trigger(":dialogopen"),_$dialogBody.trigger(":dialogopened"),Dialog}function _calcPosition(topPos){var top=null!=topPos?topPos:50,$parent=jQuery(window),dialogPos={left:"",right:"",top:"",bottom:""};_$dialog.css(dialogPos);var horzSpace=$parent.width()-_$dialog.outerWidth(!0)-1,vertSpace=$parent.height()-_$dialog.outerHeight(!0)-1;return horzSpace<=32+_scrollbarWidth&&(vertSpace-=_scrollbarWidth),vertSpace<=32+_scrollbarWidth&&(horzSpace-=_scrollbarWidth),dialogPos.left=dialogPos.right=horzSpace<=32?16:horzSpace/2>>0,dialogPos.top=vertSpace<=32?dialogPos.bottom=16:vertSpace/2>top?top:dialogPos.bottom=vertSpace/2>>0,Object.keys(dialogPos).forEach((function(key){""!==dialogPos[key]&&(dialogPos[key]+="px")})),dialogPos}function _resizeHandler(ev){var top=ev&&ev.data&&void 0!==ev.data.top?ev.data.top:50;"block"===_$dialog.css("display")&&(_$dialog.css({display:"none"}),_$dialog.css(jQuery.extend({display:""},_calcPosition(top))))}return Object.freeze(Object.defineProperties({},{append:{value:function(){var _$dialogBody2;return(_$dialogBody2=_$dialogBody).append.apply(_$dialogBody2,arguments),Dialog}},body:{value:function(){return _$dialogBody.get(0)}},close:{value:dialogClose},init:{value:function(){if(!document.getElementById("ui-dialog")){_scrollbarWidth=function(){var scrollbarWidth;try{var inner=document.createElement("p"),outer=document.createElement("div");inner.style.width="100%",inner.style.height="200px",outer.style.position="absolute",outer.style.left="0px",outer.style.top="0px",outer.style.width="100px",outer.style.height="100px",outer.style.visibility="hidden",outer.style.overflow="hidden",outer.appendChild(inner),document.body.appendChild(outer);var w1=inner.offsetWidth;outer.style.overflow="auto";var w2=inner.offsetWidth;w1===w2&&(w2=outer.clientWidth),document.body.removeChild(outer),scrollbarWidth=w1-w2}catch(ex){}return scrollbarWidth||17}();var $elems=jQuery(document.createDocumentFragment()).append('<div id="ui-overlay" class="ui-close"></div><div id="ui-dialog" tabindex="0" role="dialog" aria-labelledby="ui-dialog-title"><div id="ui-dialog-titlebar"><h1 id="ui-dialog-title"></h1>'+'<button id="ui-dialog-close" class="ui-close" tabindex="0" aria-label="'.concat(L10n.get("close"),'"></button>')+'</div><div id="ui-dialog-body"></div></div>');_$overlay=jQuery($elems.find("#ui-overlay").get(0)),_$dialog=jQuery($elems.find("#ui-dialog").get(0)),_$dialogTitle=jQuery($elems.find("#ui-dialog-title").get(0)),_$dialogBody=jQuery($elems.find("#ui-dialog-body").get(0)),$elems.insertBefore("body>script#script-sugarcube")}}},isOpen:{value:dialogIsOpen},open:{value:dialogOpen},resize:{value:function(data){return _resizeHandler("object"===_typeof(data)?{data:data}:undefined)}},setup:{value:function(title,classNames){return _$dialogBody.empty().removeClass(),null!=classNames&&_$dialogBody.addClass(classNames),_$dialogTitle.empty().append((null!=title?String(title):"")||" "),_$dialogBody.get(0)}},wiki:{value:function(){var _$dialogBody3;return(_$dialogBody3=_$dialogBody).wiki.apply(_$dialogBody3,arguments),Dialog}},addClickHandler:{value:function(targets,options,startFn,doneFn,closeFn){return jQuery(targets).ariaClick((function(ev){ev.preventDefault(),"function"==typeof startFn&&startFn(ev),dialogOpen(options,closeFn),"function"==typeof doneFn&&doneFn(ev)}))}}}))}(),Engine=function(){var States=Util.toEnum({Idle:"idle",Playing:"playing",Rendering:"rendering"}),_initDebugViews=[],_state=States.Idle,_lastPlay=null,_outlinePatch=null,_updating=null;function engineGo(offset){var succeded=State.go(offset);return succeded&&engineShow(),succeded}function engineShow(){return enginePlay(State.passage,!0)}function enginePlay(title,noHistory){var passageReadyOutput,passageDoneOutput,passageTitle=title;if(_state=States.Playing,TempState={},State.clearTemporary(),"function"==typeof Config.navigation.override)try{var overrideTitle=Config.navigation.override(passageTitle);overrideTitle&&(passageTitle=overrideTitle)}catch(ex){}var passage=Story.get(passageTitle);if(jQuery.event.trigger({type:":passageinit",passage:passage}),Object.keys(prehistory).forEach((function(task){"function"==typeof prehistory[task]&&prehistory[task].call(passage,task)})),noHistory||State.create(passage.title),document.body.className&&(document.body.className=""),_lastPlay=Util.now(),Object.keys(predisplay).forEach((function(task){"function"==typeof predisplay[task]&&predisplay[task].call(passage,task)})),Story.has("PassageReady"))try{passageReadyOutput=Wikifier.wikifyEval(Story.get("PassageReady").text)}catch(ex){console.error(ex),Alert.error("PassageReady",ex.message)}_state=States.Rendering;var dataTags=passage.tags.length>0?passage.tags.join(" "):null,passageEl=document.createElement("div");jQuery(passageEl).attr({id:passage.domId,"data-passage":passage.title,"data-tags":dataTags}).addClass("passage ".concat(passage.className)),jQuery(document.body).attr("data-tags",dataTags).addClass(passage.className),jQuery(document.documentElement).attr("data-tags",dataTags),jQuery.event.trigger({type:":passagestart",content:passageEl,passage:passage}),Object.keys(prerender).forEach((function(task){"function"==typeof prerender[task]&&prerender[task].call(passage,passageEl,task)})),Story.has("PassageHeader")&&new Wikifier(passageEl,Story.get("PassageHeader").processText()),passageEl.appendChild(passage.render()),Story.has("PassageFooter")&&new Wikifier(passageEl,Story.get("PassageFooter").processText()),jQuery.event.trigger({type:":passagerender",content:passageEl,passage:passage}),Object.keys(postrender).forEach((function(task){"function"==typeof postrender[task]&&postrender[task].call(passage,passageEl,task)}));var debugView,containerEl=document.getElementById("passages");if(containerEl.hasChildNodes()&&("number"==typeof Config.passages.transitionOut||"string"==typeof Config.passages.transitionOut&&""!==Config.passages.transitionOut&&Has.transitionEndEvent?_toConsumableArray(containerEl.childNodes).forEach((function(outgoing){var $outgoing=jQuery(outgoing);if(outgoing.nodeType===Node.ELEMENT_NODE&&$outgoing.hasClass("passage")){if($outgoing.hasClass("passage-out"))return;$outgoing.attr({id:"out-".concat($outgoing.attr("id")),"aria-live":"off"}).addClass("passage-out"),"string"==typeof Config.passages.transitionOut?$outgoing.on(Has.transitionEndEvent,(function(ev){ev.propertyName===Config.passages.transitionOut&&$outgoing.remove()})):setTimeout((function(){return $outgoing.remove()}),Math.max(40,Config.passages.transitionOut))}else $outgoing.remove()})):jQuery(containerEl).empty()),jQuery(passageEl).addClass("passage-in").appendTo(containerEl),setTimeout((function(){return jQuery(passageEl).removeClass("passage-in")}),40),Story.has("StoryDisplayTitle")?null===_updating&&Config.ui.updateStoryElements||setDisplayTitle(Story.get("StoryDisplayTitle").processText()):Config.passages.displayTitles&&passage.title!==Config.passages.start&&(document.title="".concat(passage.title," | ").concat(Story.title)),window.scroll(0,0),_state=States.Playing,Story.has("PassageDone"))try{passageDoneOutput=Wikifier.wikifyEval(Story.get("PassageDone").text)}catch(ex){console.error(ex),Alert.error("PassageDone",ex.message)}(jQuery.event.trigger({type:":passagedisplay",content:passageEl,passage:passage}),Object.keys(postdisplay).forEach((function(task){"function"==typeof postdisplay[task]&&postdisplay[task].call(passage,task)})),null!==_updating?_updating.forEach((function(pair){jQuery(pair.element).empty(),new Wikifier(pair.element,Story.get(pair.passage).processText().trim())})):Config.ui.updateStoryElements&&UIBar.update(),Config.debug)&&(null!=passageReadyOutput&&((debugView=new DebugView(document.createDocumentFragment(),"special","PassageReady","PassageReady")).modes({hidden:!0}),debugView.append(passageReadyOutput),jQuery(passageEl).prepend(debugView.output)),null!=passageDoneOutput&&((debugView=new DebugView(document.createDocumentFragment(),"special","PassageDone","PassageDone")).modes({hidden:!0}),debugView.append(passageDoneOutput),jQuery(passageEl).append(debugView.output)),1===State.turns&&_initDebugViews.length>0&&jQuery(passageEl).prepend(_initDebugViews));switch(jQuery("#story").find("a[href]:not(.link-external)").addClass("link-external").end().find("a,link,button,input,select,textarea").not("[tabindex]").attr("tabindex",0),_typeof(Config.saves.autosave)){case"boolean":Config.saves.autosave&&Save.autosave.save();break;case"object":passage.tags.some((function(tag){return Config.saves.autosave.includes(tag)}))&&Save.autosave.save();break;case"function":Config.saves.autosave()&&Save.autosave.save()}return jQuery.event.trigger({type:":passageend",content:passageEl,passage:passage}),_state=States.Idle,_lastPlay=Util.now(),passageEl}function _hideOutlines(){_outlinePatch.set("*:focus{outline:none;}")}return Object.freeze(Object.defineProperties({},{States:{value:States},minDomActionDelay:{value:40},init:{value:function(){var _lastOutlineEvent;jQuery("#init-no-js,#init-lacking").remove(),function(){var $elems=jQuery(document.createDocumentFragment()),markup=Story.has("StoryInterface")&&Story.get("StoryInterface").text.trim();if(markup){UIBar.destroy(),jQuery(document.head).find("#style-core-display").remove(),$elems.append(markup);var $passages=$elems.find("#passages");if(0===$passages.length)throw new Error('no element with ID "passages" found within "StoryInterface" special passage');$passages.empty().not("[aria-live]").attr("aria-live","polite").end(),$elems.find("[data-init-passage]").each((function(i,el){if("passages"===el.id)throw new Error('"StoryInterface" element <'.concat(el.nodeName.toLowerCase(),' id="passages"> must not contain a "data-init-passage" content attribute'));var passage=el.getAttribute("data-init-passage").trim();if(el.hasAttribute("data-passage"))throw new Error('"StoryInterface" element <'.concat(el.nodeName.toLowerCase(),' data-init-passage="').concat(passage,'"> must not contain a "data-passage" content attribute'));if(null!==el.firstElementChild)throw new Error('"StoryInterface" element <'.concat(el.nodeName.toLowerCase(),' data-init-passage="').concat(passage,'"> contains child elements'));Story.has(passage)&&jQuery(el).empty().wiki(Story.get(passage).processText().trim())}));var updating=[];$elems.find("[data-passage]").each((function(i,el){if("passages"===el.id)throw new Error('"StoryInterface" element <'.concat(el.nodeName.toLowerCase(),' id="passages"> must not contain a "data-passage" content attribute'));var passage=el.getAttribute("data-passage").trim();if(null!==el.firstElementChild)throw new Error('"StoryInterface" element <'.concat(el.nodeName.toLowerCase(),' data-passage="').concat(passage,'"> contains child elements'));Story.has(passage)&&updating.push({passage:passage,element:el})})),updating.length>0&&(_updating=updating),Config.ui.updateStoryElements=!1}else $elems.append('<div id="story" role="main"><div id="passages" aria-live="polite"></div></div>');$elems.insertBefore("body>script#script-sugarcube")}(),_outlinePatch=new StyleWrapper(jQuery(document.createElement("style")).attr({id:"style-aria-outlines",type:"text/css"}).appendTo(document.head).get(0)),_hideOutlines(),jQuery(document).on("mousedown.aria-outlines keydown.aria-outlines",(function(ev){ev.type!==_lastOutlineEvent&&(_lastOutlineEvent=ev.type,"keydown"===ev.type?_outlinePatch.clear():_hideOutlines())}))}},start:{value:function(){if(Story.getAllInit().forEach((function(passage){try{var debugBuffer=Wikifier.wikifyEval(passage.text);if(Config.debug){var debugView=new DebugView(document.createDocumentFragment(),"special","".concat(passage.title," [init-tagged]"),"".concat(passage.title," [init-tagged]"));debugView.modes({hidden:!0}),debugView.append(debugBuffer),_initDebugViews.push(debugView.output)}}catch(ex){console.error(ex),Alert.error("".concat(passage.title," [init-tagged]"),"object"===_typeof(ex)?ex.message:ex)}})),Story.has("StoryInit"))try{var debugBuffer=Wikifier.wikifyEval(Story.get("StoryInit").text);if(Config.debug){var debugView=new DebugView(document.createDocumentFragment(),"special","StoryInit","StoryInit");debugView.modes({hidden:!0}),debugView.append(debugBuffer),_initDebugViews.push(debugView.output)}}catch(ex){console.error(ex),Alert.error("StoryInit","object"===_typeof(ex)?ex.message:ex)}if(null==Config.passages.start)throw new Error("starting passage not selected");if(!Story.has(Config.passages.start))throw new Error('starting passage ("'.concat(Config.passages.start,'") not found'));if(jQuery(document.documentElement).focus(),State.restore())engineShow();else{var loadStart=!0;switch(_typeof(Config.saves.autoload)){case"boolean":Config.saves.autoload&&Save.autosave.ok()&&Save.autosave.has()&&(loadStart=!Save.autosave.load());break;case"string":"prompt"===Config.saves.autoload&&Save.autosave.ok()&&Save.autosave.has()&&(loadStart=!1,UI.buildAutoload(),Dialog.open());break;case"function":Save.autosave.ok()&&Save.autosave.has()&&Config.saves.autoload()&&(loadStart=!Save.autosave.load())}loadStart&&enginePlay(Config.passages.start)}}},restart:{value:function(){LoadScreen.show(),window.scroll(0,0),State.reset(),jQuery.event.trigger(":enginerestart"),window.location.reload()}},state:{get:function(){return _state}},isIdle:{value:function(){return _state===States.Idle}},isPlaying:{value:function(){return _state!==States.Idle}},isRendering:{value:function(){return _state===States.Rendering}},lastPlay:{get:function(){return _lastPlay}},goTo:{value:function(idx){var succeded=State.goTo(idx);return succeded&&engineShow(),succeded}},go:{value:engineGo},backward:{value:function(){return engineGo(-1)}},forward:{value:function(){return engineGo(1)}},show:{value:engineShow},play:{value:enginePlay},display:{value:function(title,link,option){var noHistory=!1;switch(option){case undefined:break;case"replace":case"back":noHistory=!0;break;default:throw new Error('Engine.display option parameter called with obsolete value "'.concat(option,'"; please notify the developer'))}enginePlay(title,noHistory)}}}))}(),Passage=(_tagsToSkip=/^(?:debug|nobr|passage|widget|twine\..*)$/i,function(){function Passage(title,el){var _this22=this;_classCallCheck(this,Passage),Object.defineProperties(this,{title:{value:Util.unescape(title)},element:{value:el||null},tags:{value:Object.freeze(el&&el.hasAttribute("tags")?Array.from(new Set(el.getAttribute("tags").trim().splitOrEmpty(/\s+/))):[])},_excerpt:{writable:!0,value:null}}),Object.defineProperties(this,{domId:{value:"passage-".concat(Util.slugify(this.title))},classes:{value:Object.freeze(0===this.tags.length?[]:_this22.tags.filter((function(tag){return!_tagsToSkip.test(tag)})).map((function(tag){return Util.slugify(tag)})))}})}return _createClass(Passage,[{key:"className",get:function(){return this.classes.join(" ")}},{key:"text",get:function(){if(null==this.element){var passage=Util.escapeMarkup(this.title),mesg="".concat(L10n.get("errorTitle"),": ").concat(L10n.get("errorNonexistentPassage",{passage:passage}));return'<div class="error-view"><span class="error">'.concat(mesg,"</span></div>")}return this.element.textContent.replace(/\r/g,"")}},{key:"description",value:function(){var descriptions=Config.passages.descriptions;switch(_typeof(descriptions)){case"boolean":if(descriptions)return this.title;break;case"object":if(descriptions.hasOwnProperty(this.title))return descriptions[this.title];break;case"function":var result=descriptions.call(this);if(result)return result}return null===this._excerpt&&(this._excerpt=Passage.getExcerptFromText(this.text)),this._excerpt}},{key:"processText",value:function(){if(null==this.element)return this.text;if(this.tags.includes("Twine.image"))return"[img[".concat(this.text,"]]");var processed=this.text;return Config.passages.onProcess&&(processed=Config.passages.onProcess.call(null,{title:this.title,tags:this.tags,text:processed})),(Config.passages.nobr||this.tags.includes("nobr"))&&(processed=processed.replace(/^\n+|\n+$/g,"").replace(/\n+/g," ")),processed}},{key:"render",value:function(options){var frag=document.createDocumentFragment();return new Wikifier(frag,this.processText(),options),this._excerpt=Passage.getExcerptFromNode(frag),frag}}],[{key:"getExcerptFromNode",value:function(node,count){if(!node.hasChildNodes())return"";var excerpt=node.textContent.trim();if(""!==excerpt){var excerptRe=new RegExp("(\\S+(?:\\s+\\S+){0,".concat(count>0?count-1:7,"})"));excerpt=excerpt.replace(/\s+/g," ").match(excerptRe)}return excerpt?"".concat(excerpt[1],"…"):"…"}},{key:"getExcerptFromText",value:function(text,count){if(""===text)return"";var excerptRe=new RegExp("(\\S+(?:\\s+\\S+){0,".concat(count>0?count-1:7,"})")),excerpt=text.replace(/<<.*?>>/g," ").replace(/<.*?>/g," ").trim().replace(/^\s*\|.*\|.*?$/gm,"").replace(/\[[<>]?img\[[^\]]*\]\]/g,"").replace(/\[\[([^|\]]*?)(?:(?:\||->|<-)[^\]]*)?\]\]/g,"$1").replace(/^\s*!+(.*?)$/gm,"$1").replace(/'{2}|\/{2}|_{2}|@{2}/g,"").trim().replace(/\s+/g," ").match(excerptRe);return excerpt?"".concat(excerpt[1],"…"):"…"}}]),Passage}()),_tagsToSkip,Save=function(){var Type=Util.toEnum({Autosave:"autosave",Disk:"disk",Serialize:"serialize",Slot:"slot"}),_slotsUBound=-1,_onLoadHandlers=new Set,_onSaveHandlers=new Set;function savesObjGet(){var saves=storage.get("saves");return null===saves?{autosave:null,slots:_appendSlots([],Config.saves.slots)}:saves}function savesObjClear(){return storage.delete("saves"),!0}function autosaveOk(){return"cookie"!==storage.name&&void 0!==Config.saves.autosave}function slotsOk(){return"cookie"!==storage.name&&-1!==_slotsUBound}function slotsCount(){if(!slotsOk())return 0;for(var saves=savesObjGet(),count=0,i=0,iend=saves.slots.length;i<iend;++i)null!==saves.slots[i]&&++count;return count}function _appendSlots(array,num){for(var i=0;i<num;++i)array.push(null);return array}function _savesObjIsEmpty(saves){for(var slots=saves.slots,isSlotsEmpty=!0,i=0,iend=slots.length;i<iend;++i)if(null!==slots[i]){isSlotsEmpty=!1;break}return null===saves.autosave&&isSlotsEmpty}function _savesObjSave(saves){return _savesObjIsEmpty(saves)?(storage.delete("saves"),!0):storage.set("saves",saves)}function _savesObjUpdate(saveObj){if(null==saveObj||"object"!==_typeof(saveObj))return!1;var updated=!1;return saveObj.hasOwnProperty("state")&&saveObj.state.hasOwnProperty("delta")&&saveObj.state.hasOwnProperty("index")||(saveObj.hasOwnProperty("data")?(delete saveObj.mode,saveObj.state={delta:State.deltaEncode(saveObj.data)},delete saveObj.data):saveObj.state.hasOwnProperty("delta")?saveObj.state.hasOwnProperty("index")||delete saveObj.state.mode:(delete saveObj.state.mode,saveObj.state.delta=State.deltaEncode(saveObj.state.history),delete saveObj.state.history),saveObj.state.index=saveObj.state.delta.length-1,updated=!0),saveObj.state.hasOwnProperty("rseed")&&(saveObj.state.seed=saveObj.state.rseed,delete saveObj.state.rseed,saveObj.state.delta.forEach((function(_,i,delta){delta[i].hasOwnProperty("rcount")&&(delta[i].pull=delta[i].rcount,delete delta[i].rcount)})),updated=!0),(saveObj.state.hasOwnProperty("expired")&&"number"==typeof saveObj.state.expired||saveObj.state.hasOwnProperty("unique")||saveObj.state.hasOwnProperty("last"))&&(saveObj.state.hasOwnProperty("expired")&&"number"==typeof saveObj.state.expired&&delete saveObj.state.expired,(saveObj.state.hasOwnProperty("unique")||saveObj.state.hasOwnProperty("last"))&&(saveObj.state.expired=[],saveObj.state.hasOwnProperty("unique")&&(saveObj.state.expired.push(saveObj.state.unique),delete saveObj.state.unique),saveObj.state.hasOwnProperty("last")&&(saveObj.state.expired.push(saveObj.state.last),delete saveObj.state.last)),updated=!0),updated}function _marshal(supplemental,details){if(null!=supplemental&&"object"!==_typeof(supplemental))throw new Error("supplemental parameter must be an object");var saveObj=Object.assign({},supplemental,{id:Config.saves.id,state:State.marshalForSave()});return Config.saves.version&&(saveObj.version=Config.saves.version),_onSaveHandlers.forEach((function(fn){return fn(saveObj,details)})),saveObj.state.delta=State.deltaEncode(saveObj.state.history),delete saveObj.state.history,saveObj}function _unmarshal(saveObj){try{if(_savesObjUpdate(saveObj),!saveObj||!saveObj.hasOwnProperty("id")||!saveObj.hasOwnProperty("state"))throw new Error(L10n.get("errorSaveMissingData"));if(saveObj.state.history=State.deltaDecode(saveObj.state.delta),delete saveObj.state.delta,_onLoadHandlers.forEach((function(fn){return fn(saveObj)})),saveObj.id!==Config.saves.id)throw new Error(L10n.get("errorSaveIdMismatch"));State.unmarshalForSave(saveObj.state),Engine.show()}catch(ex){return UI.alert("".concat(ex.message.toUpperFirst(),".</p><p>").concat(L10n.get("aborting"),".")),!1}return!0}return Object.freeze(Object.defineProperties({},{init:{value:function(){if("cookie"===storage.name)return savesObjClear(),Config.saves.autoload=undefined,Config.saves.autosave=undefined,Config.saves.slots=0,!1;var saves=savesObjGet(),updated=!1;Array.isArray(saves)&&(saves={autosave:null,slots:saves},updated=!0),Config.saves.slots!==saves.slots.length&&(Config.saves.slots<saves.slots.length?(saves.slots.reverse(),saves.slots=saves.slots.filter((function(val){return!(null===val&&this.count>0)||(--this.count,!1)}),{count:saves.slots.length-Config.saves.slots}),saves.slots.reverse()):Config.saves.slots>saves.slots.length&&_appendSlots(saves.slots,Config.saves.slots-saves.slots.length),updated=!0),_savesObjUpdate(saves.autosave)&&(updated=!0);for(var i=0;i<saves.slots.length;++i)_savesObjUpdate(saves.slots[i])&&(updated=!0);return _savesObjIsEmpty(saves)&&(storage.delete("saves"),updated=!1),updated&&_savesObjSave(saves),_slotsUBound=saves.slots.length-1,!0}},get:{value:savesObjGet},clear:{value:savesObjClear},ok:{value:function(){return autosaveOk()||slotsOk()}},autosave:{value:Object.freeze(Object.defineProperties({},{ok:{value:autosaveOk},has:{value:function(){return null!==savesObjGet().autosave}},get:{value:function(){return savesObjGet().autosave}},load:{value:function(){var saves=savesObjGet();return null!==saves.autosave&&_unmarshal(saves.autosave)}},save:{value:function(title,metadata){if("function"==typeof Config.saves.isAllowed&&!Config.saves.isAllowed())return!1;var saves=savesObjGet(),supplemental={title:title||Story.get(State.passage).description(),date:Date.now()};return null!=metadata&&(supplemental.metadata=metadata),saves.autosave=_marshal(supplemental,{type:Type.Autosave}),_savesObjSave(saves)}},delete:{value:function(){var saves=savesObjGet();return saves.autosave=null,_savesObjSave(saves)}}}))},slots:{value:Object.freeze(Object.defineProperties({},{ok:{value:slotsOk},length:{get:function(){return _slotsUBound+1}},isEmpty:{value:function(){return 0===slotsCount()}},count:{value:slotsCount},has:{value:function(slot){if(slot<0||slot>_slotsUBound)return!1;var saves=savesObjGet();return!(slot>=saves.slots.length||null===saves.slots[slot])}},get:{value:function(slot){if(slot<0||slot>_slotsUBound)return null;var saves=savesObjGet();return slot>=saves.slots.length?null:saves.slots[slot]}},load:{value:function(slot){if(slot<0||slot>_slotsUBound)return!1;var saves=savesObjGet();return!(slot>=saves.slots.length||null===saves.slots[slot])&&_unmarshal(saves.slots[slot])}},save:{value:function(slot,title,metadata){if("function"==typeof Config.saves.isAllowed&&!Config.saves.isAllowed())return Dialog.isOpen()?$(document).one(":dialogclosed",(function(){return UI.alert(L10n.get("savesDisallowed"))})):UI.alert(L10n.get("savesDisallowed")),!1;if(slot<0||slot>_slotsUBound)return!1;var saves=savesObjGet();if(slot>=saves.slots.length)return!1;var supplemental={title:title||Story.get(State.passage).description(),date:Date.now()};return null!=metadata&&(supplemental.metadata=metadata),saves.slots[slot]=_marshal(supplemental,{type:Type.Slot}),_savesObjSave(saves)}},delete:{value:function(slot){if(slot<0||slot>_slotsUBound)return!1;var saves=savesObjGet();return!(slot>=saves.slots.length)&&(saves.slots[slot]=null,_savesObjSave(saves))}}}))},export:{value:function(filename,metadata){if("function"!=typeof Config.saves.isAllowed||Config.saves.isAllowed()){var str,now,MM,DD,hh,mm,ss,baseName=null==filename?Story.domId:(str=filename,Util.sanitizeFilename(str).replace(/[_\s\u2013\u2014-]+/g,"-")),saveName="".concat(baseName,"-").concat((now=new Date,MM=now.getMonth()+1,DD=now.getDate(),hh=now.getHours(),mm=now.getMinutes(),ss=now.getSeconds(),MM<10&&(MM="0".concat(MM)),DD<10&&(DD="0".concat(DD)),hh<10&&(hh="0".concat(hh)),mm<10&&(mm="0".concat(mm)),ss<10&&(ss="0".concat(ss)),"".concat(now.getFullYear()).concat(MM).concat(DD,"-").concat(hh).concat(mm).concat(ss)),".save"),supplemental=null==metadata?{}:{metadata:metadata},saveObj=LZString.compressToBase64(JSON.stringify(_marshal(supplemental,{type:Type.Disk})));saveAs(new Blob([saveObj],{type:"text/plain;charset=UTF-8"}),saveName)}else Dialog.isOpen()?$(document).one(":dialogclosed",(function(){return UI.alert(L10n.get("savesDisallowed"))})):UI.alert(L10n.get("savesDisallowed"))}},import:{value:function(event){var file=event.target.files[0],reader=new FileReader;jQuery(reader).one("loadend",(function(){if(reader.error){var ex=reader.error;UI.alert("".concat(L10n.get("errorSaveDiskLoadFailed").toUpperFirst()," (").concat(ex.name,": ").concat(ex.message,").</p><p>").concat(L10n.get("aborting"),"."))}else{var saveObj;try{saveObj=JSON.parse(/\.json$/i.test(file.name)||/^\{/.test(reader.result)?reader.result:LZString.decompressFromBase64(reader.result))}catch(ex){}_unmarshal(saveObj)}})),reader.readAsText(file)}},serialize:{value:function(metadata){if("function"==typeof Config.saves.isAllowed&&!Config.saves.isAllowed())return Dialog.isOpen()?$(document).one(":dialogclosed",(function(){return UI.alert(L10n.get("savesDisallowed"))})):UI.alert(L10n.get("savesDisallowed")),null;var supplemental=null==metadata?{}:{metadata:metadata};return LZString.compressToBase64(JSON.stringify(_marshal(supplemental,{type:Type.Serialize})))}},deserialize:{value:function(base64Str){var saveObj;try{saveObj=JSON.parse(LZString.decompressFromBase64(base64Str))}catch(ex){}return _unmarshal(saveObj)?saveObj.metadata:null}},onLoad:{value:Object.freeze(Object.defineProperties({},{add:{value:function(handler){var valueType=Util.getType(handler);if("function"!==valueType)throw new TypeError("Save.onLoad.add handler parameter must be a function (received: ".concat(valueType,")"));_onLoadHandlers.add(handler)}},clear:{value:function(){_onLoadHandlers.clear()}},delete:{value:function(handler){return _onLoadHandlers.delete(handler)}},size:{get:function(){return _onLoadHandlers.size}}}))},onSave:{value:Object.freeze(Object.defineProperties({},{add:{value:function(handler){var valueType=Util.getType(handler);if("function"!==valueType)throw new TypeError("Save.onSave.add handler parameter must be a function (received: ".concat(valueType,")"));_onSaveHandlers.add(handler)}},clear:{value:function(){_onSaveHandlers.clear()}},delete:{value:function(handler){return _onSaveHandlers.delete(handler)}},size:{get:function(){return _onSaveHandlers.size}}}))}}))}(),Setting=function(){var Types=Util.toEnum({Header:0,Toggle:1,List:2,Range:3}),_definitions=[];function settingsCreate(){return Object.create(null)}function settingsSave(){var savedSettings=settingsCreate();return Object.keys(settings).length>0&&_definitions.filter((function(def){return def.type!==Types.Header&&settings[def.name]!==def.default})).forEach((function(def){return savedSettings[def.name]=settings[def.name]})),0===Object.keys(savedSettings).length?(storage.delete("settings"),!0):storage.set("settings",savedSettings)}function settingsLoad(){var defaultSettings=settingsCreate(),loadedSettings=storage.get("settings")||settingsCreate();_definitions.filter((function(def){return def.type!==Types.Header})).forEach((function(def){return defaultSettings[def.name]=def.default})),window.SugarCube.settings=settings=Object.assign(defaultSettings,loadedSettings)}function settingsClear(){return window.SugarCube.settings=settings=settingsCreate(),storage.delete("settings"),!0}function definitionsAdd(type,name,def){if(arguments.length<3){var errors=[];throw arguments.length<1&&errors.push("type"),arguments.length<2&&errors.push("name"),arguments.length<3&&errors.push("definition"),new Error("missing parameters, no ".concat(errors.join(" or ")," specified"))}if("object"!==_typeof(def))throw new TypeError("definition parameter must be an object");if(definitionsHas(name))throw new Error('cannot clobber existing setting "'.concat(name,'"'));var str,pos,definition={type:type,name:name,label:"string"==typeof def.label?def.label.trim():""};if("string"==typeof def.desc){var desc=def.desc.trim();""!==desc&&(definition.desc=desc)}switch(type){case Types.Header:break;case Types.Toggle:definition.default=!!def.default;break;case Types.List:if(!def.hasOwnProperty("list"))throw new Error("no list specified");if(!Array.isArray(def.list))throw new TypeError("list must be an array");if(0===def.list.length)throw new Error("list must not be empty");if(definition.list=Object.freeze(def.list),null==def.default)definition.default=def.list[0];else{var defaultIndex=def.list.indexOf(def.default);if(-1===defaultIndex)throw new Error("list does not contain default");definition.default=def.list[defaultIndex]}break;case Types.Range:if(!def.hasOwnProperty("min"))throw new Error("no min specified");if("number"!=typeof def.min||Number.isNaN(def.min)||!Number.isFinite(def.min))throw new TypeError("min must be a finite number");if(!def.hasOwnProperty("max"))throw new Error("no max specified");if("number"!=typeof def.max||Number.isNaN(def.max)||!Number.isFinite(def.max))throw new TypeError("max must be a finite number");if(!def.hasOwnProperty("step"))throw new Error("no step specified");if("number"!=typeof def.step||Number.isNaN(def.step)||!Number.isFinite(def.step)||def.step<=0)throw new TypeError("step must be a finite number greater than zero");var stepValidate=function(value){if(fracDigits>0){var ma=Number("".concat(def.min,"e").concat(fracDigits)),sa=Number("".concat(def.step,"e").concat(fracDigits)),_va=Number("".concat(value,"e").concat(fracDigits))-ma;return Number("".concat(_va-_va%sa+ma,"e-").concat(fracDigits))}var va=value-def.min;return va-va%def.step+def.min},fracDigits=(str=String(def.step),-1===(pos=str.lastIndexOf("."))?0:str.length-pos-1);if(stepValidate(def.max)!==def.max)throw new RangeError("max (".concat(def.max,") is not a multiple of the step (").concat(def.step,") plus the min (").concat(def.min,")"));if(definition.max=def.max,definition.min=def.min,definition.step=def.step,null==def.default)definition.default=def.max;else{if("number"!=typeof def.default||Number.isNaN(def.default)||!Number.isFinite(def.default))throw new TypeError("default must be a finite number");if(def.default<def.min)throw new RangeError("default (".concat(def.default,") is less than min (").concat(def.min,")"));if(def.default>def.max)throw new RangeError("default (".concat(def.default,") is greater than max (").concat(def.max,")"));definition.default=def.default}break;default:throw new Error("unknown Setting type: ".concat(type))}"function"==typeof def.onInit&&(definition.onInit=Object.freeze(def.onInit)),"function"==typeof def.onChange&&(definition.onChange=Object.freeze(def.onChange)),_definitions.push(Object.freeze(definition))}function definitionsHas(name){return _definitions.some((function(definition){return definition.name===name}))}function definitionsGet(name){return _definitions.find((function(definition){return definition.name===name}))}return Object.freeze(Object.defineProperties({},{Types:{value:Types},init:{value:function(){if(storage.has("options")){var old=storage.get("options");null!==old&&(window.SugarCube.settings=settings=Object.assign(settingsCreate(),old)),settingsSave(),storage.delete("options")}settingsLoad(),_definitions.forEach((function(def){if(def.hasOwnProperty("onInit")){var thisArg={name:def.name,value:settings[def.name],default:def.default};def.hasOwnProperty("list")&&(thisArg.list=def.list),def.onInit.call(thisArg)}}))}},create:{value:settingsCreate},save:{value:settingsSave},load:{value:settingsLoad},clear:{value:settingsClear},reset:{value:function(name){if(0===arguments.length)settingsClear(),settingsLoad();else{if(null==name||!definitionsHas(name))throw new Error('nonexistent setting "'.concat(name,'"'));var def=definitionsGet(name);def.type!==Types.Header&&(settings[name]=def.default)}return settingsSave()}},forEach:{value:function(callback,thisArg){_definitions.forEach(callback,thisArg)}},add:{value:definitionsAdd},addHeader:{value:function(name,desc){definitionsAdd(Types.Header,name,{desc:desc})}},addToggle:{value:function(){for(var _len16=arguments.length,args=new Array(_len16),_key16=0;_key16<_len16;_key16++)args[_key16]=arguments[_key16];definitionsAdd.apply(void 0,[Types.Toggle].concat(args))}},addList:{value:function(){for(var _len17=arguments.length,args=new Array(_len17),_key17=0;_key17<_len17;_key17++)args[_key17]=arguments[_key17];definitionsAdd.apply(void 0,[Types.List].concat(args))}},addRange:{value:function(){for(var _len18=arguments.length,args=new Array(_len18),_key18=0;_key18<_len18;_key18++)args[_key18]=arguments[_key18];definitionsAdd.apply(void 0,[Types.Range].concat(args))}},isEmpty:{value:function(){return 0===_definitions.length}},has:{value:definitionsHas},get:{value:definitionsGet},delete:{value:function definitionsDelete(name){definitionsHas(name)&&delete settings[name];for(var i=0;i<_definitions.length;++i)if(_definitions[i].name===name){_definitions.splice(i,1),definitionsDelete(name);break}}}}))}(),Story=function(){var _passages={},_inits=[],_scripts=[],_styles=[],_widgets=[],_title="",_ifId="",_domId="";function _storySetTitle(rawTitle){if(null==rawTitle)throw new Error("story title must not be null or undefined");var title=Util.unescape(String(rawTitle)).trim();if(""===title)throw new Error("story title must not be empty or consist solely of whitespace");if(document.title=_title=title,""===(_domId=Util.slugify(_title)))if(""!==_ifId)_domId=_ifId;else for(var i=0,len=_title.length;i<len;++i){var _Util$charAndPosAt2=Util.charAndPosAt(_title,i),char=_Util$charAndPosAt2.char,start=_Util$charAndPosAt2.start,end=_Util$charAndPosAt2.end;_domId+=char.codePointAt(0).toString(16),i+=end-start}}return Object.freeze(Object.defineProperties({},{load:{value:function(){var validationCodeTags=["init","widget"],validationNoCodeTagPassages=["PassageDone","PassageFooter","PassageHeader","PassageReady","StoryAuthor","StoryBanner","StoryCaption","StoryInit","StoryMenu","StoryShare","StorySubtitle"];function validateStartingPassage(passage){if(passage.tags.includesAny(validationCodeTags))throw new Error('starting passage "'.concat(passage.title,'" contains special tags; invalid: "').concat(passage.tags.filter((function(tag){return validationCodeTags.includes(tag)})).sort().join('", "'),'"'))}function validateSpecialPassages(passage){if(validationNoCodeTagPassages.includes(passage.title)){for(var _len19=arguments.length,tags=new Array(_len19>1?_len19-1:0),_key19=1;_key19<_len19;_key19++)tags[_key19-1]=arguments[_key19];throw new Error('special passage "'.concat(passage.title,'" contains special tags; invalid: "').concat(tags.sort().join('", "'),'"'))}var codeTags=[].concat(validationCodeTags),foundTags=[];if(passage.tags.forEach((function(tag){codeTags.includes(tag)&&foundTags.push.apply(foundTags,_toConsumableArray(codeTags.delete(tag)))})),foundTags.length>1)throw new Error('passage "'.concat(passage.title,'" contains multiple special tags; invalid: "').concat(foundTags.sort().join('", "'),'"'))}var $storydata=jQuery("tw-storydata"),startNode=$storydata.attr("startnode")||"";Config.passages.start=null,Config.debug=/\bdebug\b/.test($storydata.attr("options")),$storydata.children("style").each((function(i){_styles.push(new Passage("tw-user-style-".concat(i),this))})),$storydata.children("script").each((function(i){_scripts.push(new Passage("tw-user-script-".concat(i),this))})),$storydata.children('tw-passagedata:not([tags~="Twine.private"],[tags~="annotation"])').each((function(){var $this=jQuery(this),pid=$this.attr("pid")||"",passage=new Passage($this.attr("name"),this);pid===startNode&&""!==startNode?(Config.passages.start=passage.title,validateStartingPassage(passage),_passages[passage.title]=passage):passage.tags.includes("init")?(validateSpecialPassages(passage,"init"),_inits.push(passage)):passage.tags.includes("widget")?(validateSpecialPassages(passage,"widget"),_widgets.push(passage)):_passages[passage.title]=passage})),_ifId=$storydata.attr("ifid"),_storySetTitle("The Outlaw: Empyrean War V 0.1"),Config.saves.id=Story.domId}},init:{value:function(){var storyStyle;storyStyle=document.createElement("style"),new StyleWrapper(storyStyle).add(_styles.map((function(style){return style.text.trim()})).join("\n")),jQuery(storyStyle).appendTo(document.head).attr({id:"style-story",type:"text/css"});for(var i=0;i<_scripts.length;++i)try{Scripting.evalJavaScript(_scripts[i].text)}catch(ex){console.error(ex),Alert.error(_scripts[i].title,"object"===_typeof(ex)?ex.message:ex)}for(var _i8=0;_i8<_widgets.length;++_i8)try{Wikifier.wikifyEval(_widgets[_i8].processText())}catch(ex){console.error(ex),Alert.error(_widgets[_i8].title,"object"===_typeof(ex)?ex.message:ex)}}},title:{get:function(){return _title}},domId:{get:function(){return _domId}},ifId:{get:function(){return _ifId}},add:{value:function(passage){if(!(passage instanceof Passage))throw new TypeError("Story.add passage parameter must be an instance of Passage");var title=passage.title;return!_passages.hasOwnProperty(title)&&(_passages[title]=passage,!0)}},has:{value:function(title){var type=_typeof(title);switch(type){case"number":case"string":return _passages.hasOwnProperty(String(title));case"undefined":break;case"object":type=null===title?"null":"an object";break;default:type="a ".concat(type)}throw new TypeError("Story.has title parameter cannot be ".concat(type))}},get:{value:function(title){var type=_typeof(title);switch(type){case"number":case"string":var id=String(title);return _passages.hasOwnProperty(id)?_passages[id]:new Passage(id||"(unknown)");case"undefined":break;case"object":type=null===title?"null":"an object";break;default:type="a ".concat(type)}throw new TypeError("Story.get title parameter cannot be ".concat(type))}},getAllInit:{value:function(){return Object.freeze(Array.from(_inits))}},getAllRegular:{value:function(){return Object.freeze(Object.assign({},_passages))}},getAllScript:{value:function(){return Object.freeze(Array.from(_scripts))}},getAllStylesheet:{value:function(){return Object.freeze(Array.from(_styles))}},getAllWidget:{value:function(){return Object.freeze(Array.from(_widgets))}},lookup:{value:function(key,value){var sortKey=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"title",results=[];return Object.keys(_passages).forEach((function(name){var passage=_passages[name];"object"===_typeof(passage[key])&&null!==passage[key]?passage[key]instanceof Array&&passage[key].some((function(m){return Util.sameValueZero(m,value)}))&&results.push(passage):Util.sameValueZero(passage[key],value)&&results.push(passage)})),results.sort((function(a,b){return a[sortKey]==b[sortKey]?0:a[sortKey]<b[sortKey]?-1:1})),results}},lookupWith:{value:function(predicate){var sortKey=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"title";if("function"!=typeof predicate)throw new TypeError("Story.lookupWith predicate parameter must be a function");var results=[];return Object.keys(_passages).forEach((function(name){var passage=_passages[name];predicate(passage)&&results.push(passage)})),results.sort((function(a,b){return a[sortKey]==b[sortKey]?0:a[sortKey]<b[sortKey]?-1:1})),results}}}))}(),UI=function(){function uiAssembleLinkList(passage,listEl){var list=listEl,debugState=Config.debug,cleanState=Config.cleanupWikifierOutput;Config.debug=!1,Config.cleanupWikifierOutput=!1;try{null==list&&(list=document.createElement("ul"));var frag=document.createDocumentFragment();new Wikifier(frag,Story.get(passage).processText().trim());var errors=_toConsumableArray(frag.querySelectorAll(".error")).map((function(errEl){return errEl.textContent.replace(errorPrologRegExp,"")}));if(errors.length>0)throw new Error(errors.join("; "));for(;frag.hasChildNodes();){var node=frag.firstChild;if(node.nodeType===Node.ELEMENT_NODE&&"A"===node.nodeName.toUpperCase()){var li=document.createElement("li");list.appendChild(li),li.appendChild(node)}else frag.removeChild(node)}}finally{Config.cleanupWikifierOutput=cleanState,Config.debug=debugState}return list}function uiOpenAlert(message){jQuery(Dialog.setup(L10n.get("alertTitle"),"alert")).append("<p>".concat(message,'</p><ul class="buttons">')+'<li><button id="alert-ok" class="ui-close">'.concat(L10n.get(["alertOk","ok"]),"</button></li>")+"</ul>");for(var _len20=arguments.length,args=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++)args[_key20-1]=arguments[_key20];Dialog.open.apply(Dialog,args)}function uiBuildAutoload(){return jQuery(Dialog.setup(L10n.get("autoloadTitle"),"autoload")).append("<p>".concat(L10n.get("autoloadPrompt"),'</p><ul class="buttons">')+'<li><button id="autoload-ok" class="ui-close">'.concat(L10n.get(["autoloadOk","ok"]),"</button></li>")+'<li><button id="autoload-cancel" class="ui-close">'.concat(L10n.get(["autoloadCancel","cancel"]),"</button></li>")+"</ul>"),jQuery(document).one("click.autoload",".ui-close",(function(ev){var isAutoloadOk="autoload-ok"===ev.target.id;jQuery(document).one(":dialogclosed",(function(){isAutoloadOk&&Save.autosave.load()||Engine.play(Config.passages.start)}))})),!0}function uiBuildJumpto(){var list=document.createElement("ul");jQuery(Dialog.setup(L10n.get("jumptoTitle"),"jumpto list")).append(list);for(var expired=State.expired.length,i=State.size-1;i>=0;--i)if(i!==State.activeIndex){var passage=Story.get(State.history[i].title);passage&&passage.tags.includes("bookmark")&&jQuery(document.createElement("li")).append(jQuery(document.createElement("a")).ariaClick({one:!0},function(idx){return function(){return jQuery(document).one(":dialogclosed",(function(){return Engine.goTo(idx)}))}}(i)).addClass("ui-close").text("".concat(L10n.get("jumptoTurn")," ").concat(expired+i+1,": ").concat(passage.description()))).appendTo(list)}list.hasChildNodes()||jQuery(list).append("<li><a><em>".concat(L10n.get("jumptoUnavailable"),"</em></a></li>"))}function uiBuildRestart(){return jQuery(Dialog.setup(L10n.get("restartTitle"),"restart")).append("<p>".concat(L10n.get("restartPrompt"),'</p><ul class="buttons">')+'<li><button id="restart-ok">'.concat(L10n.get(["restartOk","ok"]),"</button></li>")+'<li><button id="restart-cancel" class="ui-close">'.concat(L10n.get(["restartCancel","cancel"]),"</button></li>")+"</ul>").find("#restart-ok").ariaClick({one:!0},(function(){jQuery(document).one(":dialogclosed",(function(){return Engine.restart()})),Dialog.close()})),!0}function uiBuildSaves(){var savesAllowed="function"!=typeof Config.saves.isAllowed||Config.saves.isAllowed();function createActionItem(bId,bClass,bText,bAction){var $btn=jQuery(document.createElement("button")).attr("id","saves-".concat(bId)).html(bText);return bClass&&$btn.addClass(bClass),bAction?$btn.ariaClick(bAction):$btn.ariaDisabled(!0),jQuery(document.createElement("li")).append($btn)}var $dialogBody=jQuery(Dialog.setup(L10n.get("savesTitle"),"saves")),savesOk=Save.ok(),fileOk=Has.fileAPI&&(Config.saves.tryDiskOnMobile||!Browser.isMobile.any());if(savesOk&&$dialogBody.append(function(){function createButton(bId,bClass,bText,bSlot,bAction){var $btn=jQuery(document.createElement("button")).attr("id","saves-".concat(bId,"-").concat(bSlot)).addClass(bId).html(bText);return bClass&&$btn.addClass(bClass),bAction?"auto"===bSlot?$btn.ariaClick({label:"".concat(bText," ").concat(L10n.get("savesLabelAuto"))},(function(){return bAction()})):$btn.ariaClick({label:"".concat(bText," ").concat(L10n.get("savesLabelSlot")," ").concat(bSlot+1)},(function(){return bAction(bSlot)})):$btn.ariaDisabled(!0),$btn}var saves=Save.get(),$tbody=jQuery(document.createElement("tbody"));if(Save.autosave.ok()){var $tdSlot=jQuery(document.createElement("td")),$tdLoad=jQuery(document.createElement("td")),$tdDesc=jQuery(document.createElement("td")),$tdDele=jQuery(document.createElement("td"));jQuery(document.createElement("b")).attr({title:L10n.get("savesLabelAuto"),"aria-label":L10n.get("savesLabelAuto")}).text("A").appendTo($tdSlot),saves.autosave?($tdLoad.append(createButton("load","ui-close",L10n.get("savesLabelLoad"),"auto",(function(){jQuery(document).one(":dialogclosed",(function(){return Save.autosave.load()}))}))),jQuery(document.createElement("div")).text(saves.autosave.title).appendTo($tdDesc),jQuery(document.createElement("div")).addClass("datestamp").html(saves.autosave.date?"".concat(new Date(saves.autosave.date).toLocaleString()):"<em>".concat(L10n.get("savesUnknownDate"),"</em>")).appendTo($tdDesc),$tdDele.append(createButton("delete",null,L10n.get("savesLabelDelete"),"auto",(function(){Save.autosave.delete(),uiBuildSaves()})))):($tdLoad.append(createButton("load",null,L10n.get("savesLabelLoad"),"auto")),$tdDesc.addClass("empty").text("• • •"),$tdDele.append(createButton("delete",null,L10n.get("savesLabelDelete"),"auto"))),jQuery(document.createElement("tr")).append($tdSlot).append($tdLoad).append($tdDesc).append($tdDele).appendTo($tbody)}for(var i=0,iend=saves.slots.length;i<iend;++i){var _$tdSlot=jQuery(document.createElement("td")),_$tdLoad=jQuery(document.createElement("td")),_$tdDesc=jQuery(document.createElement("td")),_$tdDele=jQuery(document.createElement("td"));_$tdSlot.append(document.createTextNode(i+1)),saves.slots[i]?(_$tdLoad.append(createButton("load","ui-close",L10n.get("savesLabelLoad"),i,(function(slot){jQuery(document).one(":dialogclosed",(function(){return Save.slots.load(slot)}))}))),jQuery(document.createElement("div")).text(saves.slots[i].title).appendTo(_$tdDesc),jQuery(document.createElement("div")).addClass("datestamp").html(saves.slots[i].date?"".concat(new Date(saves.slots[i].date).toLocaleString()):"<em>".concat(L10n.get("savesUnknownDate"),"</em>")).appendTo(_$tdDesc),_$tdDele.append(createButton("delete",null,L10n.get("savesLabelDelete"),i,(function(slot){Save.slots.delete(slot),uiBuildSaves()})))):(_$tdLoad.append(createButton("save","ui-close",L10n.get("savesLabelSave"),i,savesAllowed?Save.slots.save:null)),_$tdDesc.addClass("empty").text("• • •"),_$tdDele.append(createButton("delete",null,L10n.get("savesLabelDelete"),i))),jQuery(document.createElement("tr")).append(_$tdSlot).append(_$tdLoad).append(_$tdDesc).append(_$tdDele).appendTo($tbody)}return jQuery(document.createElement("table")).attr("id","saves-list").append($tbody)}()),savesOk||fileOk){var $btnBar=jQuery(document.createElement("ul")).addClass("buttons").appendTo($dialogBody);return fileOk&&($btnBar.append(createActionItem("export","ui-close",L10n.get("savesLabelExport"),savesAllowed?function(){return Save.export()}:null)),$btnBar.append(createActionItem("import",null,L10n.get("savesLabelImport"),(function(){return $dialogBody.find("#saves-import-file").trigger("click")}))),jQuery(document.createElement("input")).css({display:"block",visibility:"hidden",position:"fixed",left:"-9999px",top:"-9999px",width:"1px",height:"1px"}).attr({type:"file",id:"saves-import-file",tabindex:-1,"aria-hidden":!0}).on("change",(function(ev){jQuery(document).one(":dialogclosed",(function(){return Save.import(ev)})),Dialog.close()})).appendTo($dialogBody)),savesOk&&$btnBar.append(createActionItem("clear",null,L10n.get("savesLabelClear"),Save.autosave.has()||!Save.slots.isEmpty()?function(){Save.clear(),uiBuildSaves()}:null)),!0}return uiOpenAlert(L10n.get("savesIncapable")),!1}function uiBuildSettings(){var $dialogBody=jQuery(Dialog.setup(L10n.get("settingsTitle"),"settings"));return Setting.forEach((function(control){if(control.type===Setting.Types.Header){var _name=control.name,_id=Util.slugify(_name),$header=jQuery(document.createElement("div")),$heading=jQuery(document.createElement("h2"));return $header.attr("id","header-body-".concat(_id)).append($heading).appendTo($dialogBody),$heading.attr("id","header-heading-".concat(_id)).wiki(_name),void(control.desc&&jQuery(document.createElement("p")).attr("id","header-desc-".concat(_id)).wiki(control.desc).appendTo($header))}var $control,name=control.name,id=Util.slugify(name),$setting=jQuery(document.createElement("div")),$label=jQuery(document.createElement("label")),$controlBox=jQuery(document.createElement("div"));switch(jQuery(document.createElement("div")).append($label).append($controlBox).appendTo($setting),control.desc&&jQuery(document.createElement("p")).attr("id","setting-desc-".concat(id)).wiki(control.desc).appendTo($setting),$label.attr({id:"setting-label-".concat(id),for:"setting-control-".concat(id)}).wiki(control.label),null==settings[name]&&(settings[name]=control.default),control.type){case Setting.Types.Toggle:$control=jQuery(document.createElement("button")),settings[name]?$control.addClass("enabled").text(L10n.get("settingsOn")):$control.text(L10n.get("settingsOff")),$control.ariaClick((function(){settings[name]?(jQuery(this).removeClass("enabled").text(L10n.get("settingsOff")),settings[name]=!1):(jQuery(this).addClass("enabled").text(L10n.get("settingsOn")),settings[name]=!0),Setting.save(),control.hasOwnProperty("onChange")&&control.onChange.call({name:name,value:settings[name],default:control.default})}));break;case Setting.Types.List:$control=jQuery(document.createElement("select"));for(var i=0,iend=control.list.length;i<iend;++i)jQuery(document.createElement("option")).val(i).text(control.list[i]).appendTo($control);$control.val(control.list.indexOf(settings[name])).attr("tabindex",0).on("change",(function(){settings[name]=control.list[Number(this.value)],Setting.save(),control.hasOwnProperty("onChange")&&control.onChange.call({name:name,value:settings[name],default:control.default,list:control.list})}));break;case Setting.Types.Range:($control=jQuery(document.createElement("input"))).attr({type:"range",min:control.min,max:control.max,step:control.step,value:settings[name],tabindex:0}).on("change input",(function(){settings[name]=Number(this.value),Setting.save(),control.hasOwnProperty("onChange")&&control.onChange.call({name:name,value:settings[name],default:control.default,min:control.min,max:control.max,step:control.step})})).on("keypress",(function(ev){13===ev.which&&(ev.preventDefault(),$control.trigger("change"))}))}$control.attr("id","setting-control-".concat(id)).appendTo($controlBox),$setting.attr("id","setting-body-".concat(id)).appendTo($dialogBody)})),$dialogBody.append('<ul class="buttons">'+'<li><button id="settings-ok" class="ui-close">'.concat(L10n.get(["settingsOk","ok"]),"</button></li>")+'<li><button id="settings-reset">'.concat(L10n.get("settingsReset"),"</button></li>")+"</ul>").find("#settings-reset").ariaClick({one:!0},(function(){jQuery(document).one(":dialogclosed",(function(){Setting.reset(),window.location.reload()})),Dialog.close()})),!0}function uiBuildShare(){try{jQuery(Dialog.setup(L10n.get("shareTitle"),"share list")).append(uiAssembleLinkList("StoryShare"))}catch(ex){return console.error(ex),Alert.error("StoryShare",ex.message),!1}return!0}return Object.freeze(Object.defineProperties({},{assembleLinkList:{value:uiAssembleLinkList},alert:{value:uiOpenAlert},jumpto:{value:function(){uiBuildJumpto(),Dialog.open.apply(Dialog,arguments)}},restart:{value:function(){uiBuildRestart(),Dialog.open.apply(Dialog,arguments)}},saves:{value:function(){uiBuildSaves(),Dialog.open.apply(Dialog,arguments)}},settings:{value:function(){uiBuildSettings(),Dialog.open.apply(Dialog,arguments)}},share:{value:function(){uiBuildShare(),Dialog.open.apply(Dialog,arguments)}},buildAutoload:{value:uiBuildAutoload},buildJumpto:{value:uiBuildJumpto},buildRestart:{value:uiBuildRestart},buildSaves:{value:uiBuildSaves},buildSettings:{value:uiBuildSettings},buildShare:{value:uiBuildShare},stow:{value:function(){return UIBar.stow()}},unstow:{value:function(){return UIBar.unstow()}},setStoryElements:{value:function(){return UIBar.update()}},isOpen:{value:function(){return Dialog.isOpen.apply(Dialog,arguments)}},body:{value:function(){return Dialog.body()}},setup:{value:function(){return Dialog.setup.apply(Dialog,arguments)}},addClickHandler:{value:function(){return Dialog.addClickHandler.apply(Dialog,arguments)}},open:{value:function(){return Dialog.open.apply(Dialog,arguments)}},close:{value:function(){return Dialog.close.apply(Dialog,arguments)}},resize:{value:function(){return Dialog.resize()}},buildDialogAutoload:{value:uiBuildAutoload},buildDialogJumpto:{value:uiBuildJumpto},buildDialogRestart:{value:uiBuildRestart},buildDialogSaves:{value:uiBuildSaves},buildDialogSettings:{value:uiBuildSettings},buildDialogShare:{value:uiBuildShare},buildLinkListFromPassage:{value:uiAssembleLinkList}}))}(),UIBar=function(){var _$uiBar=null;function uiBarStow(noAnimation){var $story;_$uiBar&&!_$uiBar.hasClass("stowed")&&(noAnimation&&(($story=jQuery("#story")).addClass("no-transition"),_$uiBar.addClass("no-transition")),_$uiBar.addClass("stowed"),noAnimation&&setTimeout((function(){$story.removeClass("no-transition"),_$uiBar.removeClass("no-transition")}),Engine.minDomActionDelay));return this}function uiBarUpdate(){if(Story.has("StoryDisplayTitle")&&setDisplayTitle(Story.get("StoryDisplayTitle").processText()),_$uiBar){setPageElement("story-banner","StoryBanner"),setPageElement("story-subtitle","StorySubtitle"),setPageElement("story-author","StoryAuthor"),setPageElement("story-caption","StoryCaption");var menuStory=document.getElementById("menu-story");if(null!==menuStory&&(jQuery(menuStory).empty(),Story.has("StoryMenu")))try{UI.assembleLinkList("StoryMenu",menuStory)}catch(ex){console.error(ex),Alert.error("StoryMenu",ex.message)}}}return Object.freeze(Object.defineProperties({},{destroy:{value:function(){_$uiBar&&(_$uiBar.hide(),jQuery(document).off(".ui-bar"),jQuery(document.head).find("#style-ui-bar").remove(),_$uiBar.remove(),_$uiBar=null)}},hide:{value:function(){return _$uiBar&&_$uiBar.hide(),this}},init:{value:function(){if(!document.getElementById("ui-bar")){var toggleLabel,backwardLabel,jumptoLabel,forwardLabel,$backward,$forward,$elems=(toggleLabel=L10n.get("uiBarToggle"),backwardLabel=L10n.get("uiBarBackward"),jumptoLabel=L10n.get("uiBarJumpto"),forwardLabel=L10n.get("uiBarForward"),jQuery(document.createDocumentFragment()).append('<div id="ui-bar" aria-live="polite"><div id="ui-bar-tray">'+'<button id="ui-bar-toggle" tabindex="0" title="'.concat(toggleLabel,'" aria-label="').concat(toggleLabel,'"></button>')+'<div id="ui-bar-history">'+'<button id="history-backward" tabindex="0" title="'.concat(backwardLabel,'" aria-label="').concat(backwardLabel,'"></button>')+'<button id="history-jumpto" tabindex="0" title="'.concat(jumptoLabel,'" aria-label="').concat(jumptoLabel,'"></button>')+'<button id="history-forward" tabindex="0" title="'.concat(forwardLabel,'" aria-label="').concat(forwardLabel,'"></button>')+'</div></div><div id="ui-bar-body"><header id="title" role="banner"><div id="story-banner"></div><h1 id="story-title"></h1><div id="story-subtitle"></div><div id="story-title-separator"></div><p id="story-author"></p></header><div id="story-caption"></div><nav id="menu" role="navigation"><ul id="menu-story"></ul><ul id="menu-core">'+'<li id="menu-item-saves"><a tabindex="0">'.concat(L10n.get("savesTitle"),"</a></li>")+'<li id="menu-item-settings"><a tabindex="0">'.concat(L10n.get("settingsTitle"),"</a></li>")+'<li id="menu-item-restart"><a tabindex="0">'.concat(L10n.get("restartTitle"),"</a></li>")+'<li id="menu-item-share"><a tabindex="0">'.concat(L10n.get("shareTitle"),"</a></li>")+"</ul></nav></div></div>"));_$uiBar=jQuery($elems.find("#ui-bar").get(0)),$elems.insertBefore("body>script#script-sugarcube"),jQuery(document).on(":historyupdate.ui-bar",($backward=jQuery("#history-backward"),$forward=jQuery("#history-forward"),function(){$backward.ariaDisabled(State.length<2),$forward.ariaDisabled(State.length===State.size)}))}}},isHidden:{value:function(){return _$uiBar&&"none"===_$uiBar.css("display")}},isStowed:{value:function(){return _$uiBar&&_$uiBar.hasClass("stowed")}},show:{value:function(){return _$uiBar&&_$uiBar.show(),this}},start:{value:function(){_$uiBar&&(("boolean"==typeof Config.ui.stowBarInitially?Config.ui.stowBarInitially:jQuery(window).width()<=Config.ui.stowBarInitially)&&uiBarStow(!0),jQuery("#ui-bar-toggle").ariaClick({label:L10n.get("uiBarToggle")},(function(){return _$uiBar.toggleClass("stowed")})),Config.history.controls?(jQuery("#history-backward").ariaDisabled(State.length<2).ariaClick({label:L10n.get("uiBarBackward")},(function(){return Engine.backward()})),Story.lookup("tags","bookmark").length>0?jQuery("#history-jumpto").ariaClick({label:L10n.get("uiBarJumpto")},(function(){return UI.jumpto()})):jQuery("#history-jumpto").remove(),jQuery("#history-forward").ariaDisabled(State.length===State.size).ariaClick({label:L10n.get("uiBarForward")},(function(){return Engine.forward()}))):jQuery("#ui-bar-history").remove(),Story.has("StoryDisplayTitle")?setDisplayTitle(Story.get("StoryDisplayTitle").processText()):jQuery("#story-title").text(Story.title),Story.has("StoryCaption")||jQuery("#story-caption").remove(),Story.has("StoryMenu")||jQuery("#menu-story").remove(),Config.ui.updateStoryElements||uiBarUpdate(),jQuery("#menu-item-saves a").ariaClick({role:"button"},(function(ev){ev.preventDefault(),UI.buildSaves(),Dialog.open()})).text(L10n.get("savesTitle")),Setting.isEmpty()?jQuery("#menu-item-settings").remove():jQuery("#menu-item-settings a").ariaClick({role:"button"},(function(ev){ev.preventDefault(),UI.buildSettings(),Dialog.open()})).text(L10n.get("settingsTitle")),jQuery("#menu-item-restart a").ariaClick({role:"button"},(function(ev){ev.preventDefault(),UI.buildRestart(),Dialog.open()})).text(L10n.get("restartTitle")),Story.has("StoryShare")?jQuery("#menu-item-share a").ariaClick({role:"button"},(function(ev){ev.preventDefault(),UI.buildShare(),Dialog.open()})).text(L10n.get("shareTitle")):jQuery("#menu-item-share").remove())}},stow:{value:uiBarStow},unstow:{value:function(noAnimation){var $story;return _$uiBar&&_$uiBar.hasClass("stowed")&&(noAnimation&&(($story=jQuery("#story")).addClass("no-transition"),_$uiBar.addClass("no-transition")),_$uiBar.removeClass("stowed"),noAnimation&&setTimeout((function(){$story.removeClass("no-transition"),_$uiBar.removeClass("no-transition")}),Engine.minDomActionDelay)),this}},update:{value:uiBarUpdate},setStoryElements:{value:uiBarUpdate}}))}(),DebugBar=function(){var _variableRe=new RegExp("^".concat(Patterns.variable,"$")),_numericKeyRe=/^\d+$/,_watchList=[],_$debugBar=null,_$watchBody=null,_$watchList=null,_$turnSelect=null,_stowed=!0;function debugBarStow(){_$debugBar.css("right","-".concat(_$debugBar.outerWidth(),"px")),_stowed=!0,_updateSession()}function debugBarUnstow(){_$debugBar.css("right",0),_stowed=!1,_updateSession()}function debugBarToggle(){_stowed?debugBarUnstow():debugBarStow()}function debugBarWatchAdd(varName){_variableRe.test(varName)&&(_watchList.pushUnique(varName),_watchList.sort(),_updateWatchBody(),_updateWatchList(),_updateSession())}function debugBarWatchAddAll(){Object.keys(State.variables).map((function(name){return _watchList.pushUnique("$".concat(name))})),Object.keys(State.temporary).map((function(name){return _watchList.pushUnique("_".concat(name))})),_watchList.sort(),_updateWatchBody(),_updateWatchList(),_updateSession()}function debugBarWatchClear(){for(var i=_watchList.length-1;i>=0;--i)_watchList.pop();_updateWatchBody(),_updateWatchList(),_updateSession()}function debugBarWatchDelete(varName){_watchList.delete(varName),_updateWatchBody(),_updateWatchList(),_updateSession()}function debugBarWatchDisable(){_debugBarWatchDisableNoUpdate(),_updateSession()}function debugBarWatchEnable(){_debugBarWatchEnableNoUpdate(),_updateSession()}function debugBarWatchIsEnabled(){return!_$watchBody.attr("hidden")}function debugBarWatchToggle(){_$watchBody.attr("hidden")?debugBarWatchEnable():debugBarWatchDisable()}function _debugBarWatchDisableNoUpdate(){_$watchBody.attr({"aria-hidden":!0,hidden:"hidden"})}function _debugBarWatchEnableNoUpdate(){_$watchBody.removeAttr("aria-hidden hidden")}function _clearSession(){session.delete("debugState")}function _hasSession(){return session.has("debugState")}function _updateSession(){session.set("debugState",{stowed:_stowed,watchList:_watchList,watchEnabled:debugBarWatchIsEnabled(),viewsEnabled:DebugView.isEnabled()})}function _updateWatchBody(){if(0!==_watchList.length){for(var delLabel=L10n.get("debugBarDeleteWatch"),$table=jQuery(document.createElement("table")),$tbody=jQuery(document.createElement("tbody")),_loop4=function(i,len){var varName=_watchList[i],varKey=varName.slice(1),store="$"===varName[0]?State.variables:State.temporary,$row=jQuery(document.createElement("tr")),$delBtn=jQuery(document.createElement("button")),$code=jQuery(document.createElement("code"));$delBtn.addClass("watch-delete").attr("data-name",varName).ariaClick({one:!0,label:delLabel},(function(){return debugBarWatchDelete(varName)})),$code.text(_toWatchString(store[varKey])),jQuery(document.createElement("td")).append($delBtn).appendTo($row),jQuery(document.createElement("td")).text(varName).appendTo($row),jQuery(document.createElement("td")).append($code).appendTo($row),$row.appendTo($tbody)},i=0,len=_watchList.length;i<len;++i)_loop4(i);$table.append($tbody),_$watchBody.empty().append($table)}else _$watchBody.empty().append("<div>".concat(L10n.get("debugBarNoWatches"),"</div>"))}function _updateWatchList(){var svn=Object.keys(State.variables),tvn=Object.keys(State.temporary);if(0!==svn.length||0!==tvn.length){var names=[].concat(_toConsumableArray(svn.map((function(name){return"$".concat(name)}))),_toConsumableArray(tvn.map((function(name){return"_".concat(name)})))).sort(),options=document.createDocumentFragment();names.delete(_watchList);for(var i=0,len=names.length;i<len;++i)jQuery(document.createElement("option")).val(names[i]).appendTo(options);_$watchList.empty().append(options)}else _$watchList.empty()}function _updateTurnSelect(){for(var histLen=State.size,expLen=State.expired.length,options=document.createDocumentFragment(),i=0;i<histLen;++i)jQuery(document.createElement("option")).val(i).text("".concat(expLen+i+1,". ").concat(Util.escape(State.history[i].title))).appendTo(options);_$turnSelect.empty().ariaDisabled(histLen<2).append(options).val(State.activeIndex)}function _toWatchString(value){if(null===value)return"null";switch(_typeof(value)){case"number":if(Number.isNaN(value))return"NaN";if(!Number.isFinite(value))return"Infinity";case"boolean":case"symbol":case"undefined":return String(value);case"string":return JSON.stringify(value);case"function":return"Function"}var objType=Util.toStringTag(value);if("Date"===objType)return"Date {".concat(value.toLocaleString(),"}");if("RegExp"===objType)return"RegExp ".concat(value.toString());var result=[];if(value instanceof Array||value instanceof Set){for(var list=value instanceof Array?value:Array.from(value),i=0,len=list.length;i<len;++i)result.push(list.hasOwnProperty(i)?_toWatchString(list[i]):"<empty>");return Object.keys(list).filter((function(key){return!_numericKeyRe.test(key)})).forEach((function(key){return result.push("".concat(_toWatchString(key),": ").concat(_toWatchString(list[key])))})),"".concat(objType,"(").concat(list.length,") [").concat(result.join(", "),"]")}return value instanceof Map?(value.forEach((function(val,key){return result.push("".concat(_toWatchString(key)," → ").concat(_toWatchString(val)))})),"".concat(objType,"(").concat(value.size,") {").concat(result.join(", "),"}")):(Object.keys(value).forEach((function(key){return result.push("".concat(_toWatchString(key),": ").concat(_toWatchString(value[key])))})),"".concat(objType," {").concat(result.join(", "),"}"))}return Object.freeze(Object.defineProperties({},{init:{value:function(){var barToggleLabel=L10n.get("debugBarToggle"),watchAddLabel=L10n.get("debugBarAddWatch"),watchAllLabel=L10n.get("debugBarWatchAll"),watchNoneLabel=L10n.get("debugBarWatchNone"),watchToggleLabel=L10n.get("debugBarWatchToggle"),viewsToggleLabel=L10n.get("debugBarViewsToggle");jQuery(document.createDocumentFragment()).append('<div id="debug-bar"><div id="debug-bar-watch">'+"<div>".concat(L10n.get("debugBarNoWatches"),"</div>>")+"</div><div>"+'<button id="debug-bar-watch-toggle" tabindex="0" title="'.concat(watchToggleLabel,'" aria-label="').concat(watchToggleLabel,'">').concat(L10n.get("debugBarLabelWatch"),"</button>")+'<label id="debug-bar-watch-label" for="debug-bar-watch-input">'.concat(L10n.get("debugBarLabelAdd"),"</label>")+'<input id="debug-bar-watch-input" name="debug-bar-watch-input" type="text" list="debug-bar-watch-list" tabindex="0"><datalist id="debug-bar-watch-list" aria-hidden="true" hidden="hidden"></datalist>'+'<button id="debug-bar-watch-add" tabindex="0" title="'.concat(watchAddLabel,'" aria-label="').concat(watchAddLabel,'"></button>')+'<button id="debug-bar-watch-all" tabindex="0" title="'.concat(watchAllLabel,'" aria-label="').concat(watchAllLabel,'"></button>')+'<button id="debug-bar-watch-none" tabindex="0" title="'.concat(watchNoneLabel,'" aria-label="').concat(watchNoneLabel,'"></button>')+"</div><div>"+'<button id="debug-bar-views-toggle" tabindex="0" title="'.concat(viewsToggleLabel,'" aria-label="').concat(viewsToggleLabel,'">').concat(L10n.get("debugBarLabelViews"),"</button>")+'<label id="debug-bar-turn-label" for="debug-bar-turn-select">'.concat(L10n.get("debugBarLabelTurn"),"</label>")+'<select id="debug-bar-turn-select" tabindex="0"></select></div>'+'<button id="debug-bar-toggle" tabindex="0" title="'.concat(barToggleLabel,'" aria-label="').concat(barToggleLabel,'"></button>')+'</div><div id="debug-bar-hint"></div>').appendTo("body"),_$debugBar=jQuery("#debug-bar"),_$watchBody=jQuery(_$debugBar.find("#debug-bar-watch").get(0)),_$watchList=jQuery(_$debugBar.find("#debug-bar-watch-list").get(0)),_$turnSelect=jQuery(_$debugBar.find("#debug-bar-turn-select").get(0));var $barToggle=jQuery(_$debugBar.find("#debug-bar-toggle").get(0)),$watchToggle=jQuery(_$debugBar.find("#debug-bar-watch-toggle").get(0)),$watchInput=jQuery(_$debugBar.find("#debug-bar-watch-input").get(0)),$watchAdd=jQuery(_$debugBar.find("#debug-bar-watch-add").get(0)),$watchAll=jQuery(_$debugBar.find("#debug-bar-watch-all").get(0)),$watchNone=jQuery(_$debugBar.find("#debug-bar-watch-none").get(0)),$viewsToggle=jQuery(_$debugBar.find("#debug-bar-views-toggle").get(0));$barToggle.ariaClick(debugBarToggle),$watchToggle.ariaClick(debugBarWatchToggle),$watchInput.on(":addwatch",(function(){debugBarWatchAdd(this.value.trim()),this.value=""})).on("keypress",(function(ev){13===ev.which&&(ev.preventDefault(),$watchInput.trigger(":addwatch"))})),$watchAdd.ariaClick((function(){return $watchInput.trigger(":addwatch")})),$watchAll.ariaClick(debugBarWatchAddAll),$watchNone.ariaClick(debugBarWatchClear),_$turnSelect.on("change",(function(){Engine.goTo(Number(this.value))})),$viewsToggle.ariaClick((function(){DebugView.toggle(),_updateSession()})),jQuery(document).on(":historyupdate.debug-bar",_updateTurnSelect).on(":passageend.debug-bar",(function(){_updateWatchBody(),_updateWatchList()})).on(":enginerestart.debug-bar",_clearSession),_hasSession()||DebugView.enable()}},isStowed:{value:function(){return _stowed}},start:{value:function(){(function(){if(!_hasSession())return!1;var debugState=session.get("debugState");_stowed=debugState.stowed,_watchList.push.apply(_watchList,_toConsumableArray(debugState.watchList)),debugState.watchEnabled?_debugBarWatchEnableNoUpdate():_debugBarWatchDisableNoUpdate();debugState.viewsEnabled?DebugView.enable():DebugView.disable()})(),_stowed?debugBarStow():debugBarUnstow(),_updateTurnSelect(),_updateWatchBody(),_updateWatchList()}},stow:{value:debugBarStow},toggle:{value:debugBarToggle},unstow:{value:debugBarUnstow},watch:{value:Object.freeze(Object.defineProperties({},{add:{value:debugBarWatchAdd},all:{value:debugBarWatchAddAll},clear:{value:debugBarWatchClear},delete:{value:debugBarWatchDelete},disable:{value:debugBarWatchDisable},enable:{value:debugBarWatchEnable},isEnabled:{value:debugBarWatchIsEnabled},toggle:{value:debugBarWatchToggle}}))}}))}(),LoadScreen=function(){var _locks=new Set,_autoId=0;function loadScreenHide(){jQuery(document.documentElement).removeAttr("data-init")}function loadScreenShow(){jQuery(document.documentElement).attr("data-init","loading")}return Object.freeze(Object.defineProperties({},{init:{value:function(){jQuery(document).on("readystatechange.SugarCube",(function(){_locks.size>0||("complete"===document.readyState?"loading"===jQuery(document.documentElement).attr("data-init")&&(Config.loadDelay>0?setTimeout((function(){0===_locks.size&&loadScreenHide()}),Math.max(Engine.minDomActionDelay,Config.loadDelay)):loadScreenHide()):loadScreenShow())}))}},clear:{value:function(){jQuery(document).off("readystatechange.SugarCube"),_locks.clear(),loadScreenHide()}},hide:{value:loadScreenHide},show:{value:loadScreenShow},lock:{value:function(){return++_autoId,_locks.add(_autoId),loadScreenShow(),_autoId}},unlock:{value:function(id){if(null==id)throw new Error("LoadScreen.unlock called with a null or undefined ID");_locks.has(id)&&_locks.delete(id),0===_locks.size&&jQuery(document).trigger("readystatechange")}}}))}(),version=Object.freeze({title:"SugarCube",major:2,minor:36,patch:1,prerelease:null,build:9717,date:new Date("2021-12-22T05:37:33.467Z"),extensions:{},toString:function(){var prerelease=this.prerelease?"-".concat(this.prerelease):"";return"".concat(this.major,".").concat(this.minor,".").concat(this.patch).concat(prerelease,"+").concat(this.build)},short:function(){var prerelease=this.prerelease?"-".concat(this.prerelease):"";return"".concat(this.title," (v").concat(this.major,".").concat(this.minor,".").concat(this.patch).concat(prerelease,")")},long:function(){return"".concat(this.title," v").concat(this.toString()," (").concat(this.date.toUTCString(),")")}}),TempState={},macros={},postdisplay={},postrender={},predisplay={},prehistory={},prerender={},session=null,settings={},setup={},storage=null,browser=Browser,config=Config,has=Has,History=State,state=State,tale=Story,TempVariables=State.temporary;window.SugarCube={},jQuery((function(){try{var lockId=LoadScreen.lock();LoadScreen.init(),document.normalize&&document.normalize(),Story.load(),storage=SimpleStore.create(Story.domId,!0),session=SimpleStore.create(Story.domId,!1),Dialog.init(),UIBar.init(),Engine.init(),Story.init(),L10n.init(),session.has("rcWarn")||"cookie"!==storage.name||(session.set("rcWarn",1),window.alert(L10n.get("warningNoWebStorage"))),Save.init(),Setting.init(),Macro.init(),Engine.start(),Config.debug&&DebugBar.init();var $window=$(window),vprCheckId=setInterval((function(){$window.width()&&(clearInterval(vprCheckId),UIBar.start(),Config.debug&&DebugBar.start(),jQuery.event.trigger({type:":storyready"}),setTimeout((function(){return LoadScreen.unlock(lockId)}),2*Engine.minDomActionDelay))}),Engine.minDomActionDelay);Object.defineProperty(window,"SugarCube",{value:Object.seal(Object.assign(Object.create(null),{Browser:Browser,Config:Config,Dialog:Dialog,Engine:Engine,Fullscreen:Fullscreen,Has:Has,L10n:L10n,Macro:Macro,Passage:Passage,Save:Save,Scripting:Scripting,Setting:Setting,SimpleAudio:SimpleAudio,State:State,Story:Story,UI:UI,UIBar:UIBar,DebugBar:DebugBar,Util:Util,Visibility:Visibility,Wikifier:Wikifier,session:session,settings:settings,setup:setup,storage:storage,version:version}))})}catch(ex){return console.error(ex),LoadScreen.clear(),Alert.fatal(null,ex.message,ex)}}))})(window,window.document,jQuery);} </script> </body> </html>