diff --git a/TODO.txt b/TODO.txt index d2849749bb4fd8d20cdaf341ebccc424da5b9fa4..670cbd81d468d705ff48dfa711a002e11e5bb7b1 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,11 +2,8 @@ Main: -finish recalc widgets Rebellions: --citizens rebellions --riot control center +-citizens mini events -add security maluses to losses --add to unit descriptions loyalty description --options of what to do with the rebels further development: -specialized slave schools diff --git a/devNotes/twine JS b/devNotes/twine JS new file mode 100644 index 0000000000000000000000000000000000000000..a60280fa0d65702d14aeaf7bf33288a30842438a --- /dev/null +++ b/devNotes/twine JS @@ -0,0 +1,3834 @@ +/*:: StoryJS [script]*/ + +/*config.history.tracking = false;*/ +window.variableAsNumber = function(x, defaultValue, minValue, maxValue) { + x = Number(x) + if (x != x) {//NaN + return defaultValue || 0;//In case the default value was not supplied. + } + if (x < minValue) {//Works even if minValue is undefined. + return minValue; + } + if (x > maxValue) {//Works even if maxValue is undefined. + return maxValue; + } + return x; +}; +window.isSexuallyPure = function(slave) { + if (!slave) { + return null; + } + if (slave.vagina < 1 && slave.anus < 1 && !slave.analCount && !slave.vaginalCount && !slave.oralCount) { + return true; + } else { + return false; + } +}; +if (typeof interpolate == "undefined") { + var interpolate = function(x0,y0,x1,y1,x) { + if(x <= x0) { + return y0; + } else if(x >= x1) { + return y1; + } else { + return (x - x0) * ((y1 - y0) / (x1 - x0)) + y0; + } + }; + window.interpolate = interpolate; +} +config.history.maxStates = 1; + +config.saves.autosave = "autosave"; +window.isFullyPotent = function(slave) { + if (!slave) { + return null; + } else if (slave.dick > 0 && slave.balls > 0 && slave.hormoneBalance < 100 && slave.drugs !== 'hormone blockers') { + return true; + } else { + return false; + } +}; + +/* mousetrap v1.5.3 craig.is/killing/mice */ +(function(C,r,g){function t(a,b,h){a.addEventListener?a.addEventListener(b,h,!1):a.attachEvent("on"+b,h)}function x(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return l[a.which]?l[a.which]:p[a.which]?p[a.which]:String.fromCharCode(a.which).toLowerCase()}function D(a){var b=[];a.shiftKey&&b.push("shift");a.altKey&&b.push("alt");a.ctrlKey&&b.push("ctrl");a.metaKey&&b.push("meta");return b}function u(a){return"shift"==a||"ctrl"==a||"alt"==a|| +"meta"==a}function y(a,b){var h,c,e,g=[];h=a;"+"===h?h=["+"]:(h=h.replace(/\+{2}/g,"+plus"),h=h.split("+"));for(e=0;e<h.length;++e)c=h[e],z[c]&&(c=z[c]),b&&"keypress"!=b&&A[c]&&(c=A[c],g.push("shift")),u(c)&&g.push(c);h=c;e=b;if(!e){if(!k){k={};for(var m in l)95<m&&112>m||l.hasOwnProperty(m)&&(k[l[m]]=m)}e=k[h]?"keydown":"keypress"}"keypress"==e&&g.length&&(e="keydown");return{key:c,modifiers:g,action:e}}function B(a,b){return null===a||a===r?!1:a===b?!0:B(a.parentNode,b)}function c(a){function b(a){a= +a||{};var b=!1,n;for(n in q)a[n]?b=!0:q[n]=0;b||(v=!1)}function h(a,b,n,f,c,h){var g,e,l=[],m=n.type;if(!d._callbacks[a])return[];"keyup"==m&&u(a)&&(b=[a]);for(g=0;g<d._callbacks[a].length;++g)if(e=d._callbacks[a][g],(f||!e.seq||q[e.seq]==e.level)&&m==e.action){var k;(k="keypress"==m&&!n.metaKey&&!n.ctrlKey)||(k=e.modifiers,k=b.sort().join(",")===k.sort().join(","));k&&(k=f&&e.seq==f&&e.level==h,(!f&&e.combo==c||k)&&d._callbacks[a].splice(g,1),l.push(e))}return l}function g(a,b,n,f){d.stopCallback(b, +b.target||b.srcElement,n,f)||!1!==a(b,n)||(b.preventDefault?b.preventDefault():b.returnValue=!1,b.stopPropagation?b.stopPropagation():b.cancelBubble=!0)}function e(a){"number"!==typeof a.which&&(a.which=a.keyCode);var b=x(a);b&&("keyup"==a.type&&w===b?w=!1:d.handleKey(b,D(a),a))}function l(a,c,n,f){function e(c){return function(){v=c;++q[a];clearTimeout(k);k=setTimeout(b,1E3)}}function h(c){g(n,c,a);"keyup"!==f&&(w=x(c));setTimeout(b,10)}for(var d=q[a]=0;d<c.length;++d){var p=d+1===c.length?h:e(f|| +y(c[d+1]).action);m(c[d],p,f,a,d)}}function m(a,b,c,f,e){d._directMap[a+":"+c]=b;a=a.replace(/\s+/g," ");var g=a.split(" ");1<g.length?l(a,g,b,c):(c=y(a,c),d._callbacks[c.key]=d._callbacks[c.key]||[],h(c.key,c.modifiers,{type:c.action},f,a,e),d._callbacks[c.key][f?"unshift":"push"]({callback:b,modifiers:c.modifiers,action:c.action,seq:f,level:e,combo:a}))}var d=this;a=a||r;if(!(d instanceof c))return new c(a);d.target=a;d._callbacks={};d._directMap={};var q={},k,w=!1,p=!1,v=!1;d._handleKey=function(a, +c,e){var f=h(a,c,e),d;c={};var k=0,l=!1;for(d=0;d<f.length;++d)f[d].seq&&(k=Math.max(k,f[d].level));for(d=0;d<f.length;++d)f[d].seq?f[d].level==k&&(l=!0,c[f[d].seq]=1,g(f[d].callback,e,f[d].combo,f[d].seq)):l||g(f[d].callback,e,f[d].combo);f="keypress"==e.type&&p;e.type!=v||u(a)||f||b(c);p=l&&"keydown"==e.type};d._bindMultiple=function(a,b,c){for(var d=0;d<a.length;++d)m(a[d],b,c)};t(a,"keypress",e);t(a,"keydown",e);t(a,"keyup",e)}var l={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt", +20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},p={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},A={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},z={option:"alt",command:"meta","return":"enter", +escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},k;for(g=1;20>g;++g)l[111+g]="f"+g;for(g=0;9>=g;++g)l[g+96]=g;c.prototype.bind=function(a,b,c){a=a instanceof Array?a:[a];this._bindMultiple.call(this,a,b,c);return this};c.prototype.unbind=function(a,b){return this.bind.call(this,a,function(){},b)};c.prototype.trigger=function(a,b){if(this._directMap[a+":"+b])this._directMap[a+":"+b]({},a);return this};c.prototype.reset=function(){this._callbacks={};this._directMap= +{};return this};c.prototype.stopCallback=function(a,b){return-1<(" "+b.className+" ").indexOf(" mousetrap ")||B(b,this.target)?!1:"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable};c.prototype.handleKey=function(){return this._handleKey.apply(this,arguments)};c.init=function(){var a=c(r),b;for(b in a)"_"!==b.charAt(0)&&(c[b]=function(b){return function(){return a[b].apply(a,arguments)}}(b))};c.init();C.Mousetrap=c;"undefined"!==typeof module&&module.exports&&(module.exports= +c);"function"===typeof define&&define.amd&&define(function(){return c})})(window,document); + +Mousetrap.bind("enter", function () { + $("#story-caption #endWeekButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("space", function () { + $("#story-caption #nextButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("c", function () { + $("#story-caption #manageArcology a.macro-link").trigger("click"); +}); +Mousetrap.bind("p", function () { + $("#story-caption #managePenthouse a.macro-link").trigger("click"); +}); +Mousetrap.bind("left", function () { + $("#prevSlave a.macro-link").trigger("click"); + $("#prevRule a").trigger("click"); +}); +Mousetrap.bind("q", function () { + $("#prevSlave a.macro-link").trigger("click"); + $("#prevRule a").trigger("click"); +}); +Mousetrap.bind("shift+left", function () { + $("#firstRule a").trigger("click"); +}); +Mousetrap.bind("shift+q", function () { + $("#firstRule a").trigger("click"); +}); +Mousetrap.bind("right", function () { + $("#nextSlave a.macro-link").trigger("click"); + $("#nextRule a").trigger("click"); +}); +Mousetrap.bind("shift+right", function () { + $("#lastRule a").trigger("click"); +}); +Mousetrap.bind("e", function () { + $("#nextSlave a.macro-link").trigger("click"); + $("#nextRule a").trigger("click"); +}); +Mousetrap.bind("shift+e", function () { + $("#lastRule a").trigger("click"); +}); +Mousetrap.bind("f", function () { + $("#walkpast a.macro-link").trigger("click"); +}); +Mousetrap.bind("h", function () { + $("#manageHG a.macro-link").trigger("click"); +}); +Mousetrap.bind("s", function () { + $("#buySlaves a.macro-link").trigger("click"); +}); +Mousetrap.bind("a", function () { + $("#managePA a.macro-link").trigger("click"); +}); +Mousetrap.bind("b", function () { + $("#manageBG a.macro-link").trigger("click"); +}); +Mousetrap.bind("u", function () { + $("#manageRecruiter a.macro-link").trigger("click"); +}); +Mousetrap.bind("o", function () { + $("#story-caption #optionsButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("y", function () { + $("#story-caption #policyButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("f", function () { + $("#story-caption #FSButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("t", function () { + $("#story-caption #PAOButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("v", function () { + $("#story-caption #URButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("r", function () { + $("#RAButton a.macro-link").trigger("click"); +}); +Mousetrap.bind("x", function () { + $("#story-caption #managePerson a.macro-link").trigger("click"); +}); +Mousetrap.bind("z", function () { + $("#story-caption #SFMButton a.macro-link").trigger("click"); +}); + +/** + * BoobGenerator namespace. + */ +if (typeof BoobGenerator == "undefined") { + var BoobGenerator = { + rollBreast: function (modif) { + var volume = [0, 300, 500, 650, 800, 1000, 1200, 1400, 1600, 1800, 2050, 2300, 2600, 2900, 3250, 3600, 3950, 4300, 4700, 5100, 5500, 5900]; + var volume_dist = [90000, 470000, 720000, 840000, 908574, 947759, 970151, 982946, 990258, 994436, 996824, 998188, 998968, 999414, 999669, 999814, 999897, 999945, 999972, 999987, 999995, 1000000]; + var randomRoll = Math.floor(Math.random() * 1000000) + 1 + var actualSize = 0 + while (randomRoll > volume_dist[actualSize]) { + actualSize = actualSize + 1 + } + var minorSizeAdjustment = 0 + if (Math.random()<.5) { + minorSizeAdjustment = (Math.floor(Math.random() * 2) + 1) * 50 + } + var volResult = volume[actualSize] + minorSizeAdjustment + modif + if (volResult < 0) {volResult = 0} + return volResult + } + }; + // Raise namespace scope to Global. + window.BoobGenerator = BoobGenerator; +}; + +/** + * Slave checker namespace. + */ +if (typeof SlaveStatsChecker == "undefined") { + var SlaveStatsChecker = { + checkForLisp: function (slave) { + /* Begin mod section: toggle whether slaves lisp. */ + if (SugarCube.State && SugarCube.State.variables.disableLisping == 1) { + return false; + } + /* End mod section: toggle whether slaves lisp. */ + return ((slave.lips > 70) || (slave.lipsPiercing + slave.tonguePiercing > 2)) + } + }; + // Raise namespace scope to Global. + window.SlaveStatsChecker = SlaveStatsChecker; +}; + +window.removeFromArray = function(arr, val) { + for (var i = 0; i < arr.length; i++) { + if (val == arr[i]) + return arr.splice(i,1); + } + return null; +}; + +window.filterInPlace = function(arr, callback, thisArg) { + var j = 0; + + arr.forEach(function(e, i) { + if (callback.call(thisArg, e, i, arr)) + arr[j++] = e; + }); + + arr.length = j; + return arr; +}; + +if (typeof FertilityAge == "undefined") { + var FertilityAge = { + setAge: function (age) { + age = Number(age) + if (age != age) { + return 13; + } else { + return age + } + } + }; + // Raise namespace scope to Global. + window.FertilityAge = FertilityAge; +}; + +window.canGetPregnant = function(slave) { + if (!slave) { + return null; + } else if (slave.preg == -1) { /* contraceptives check */ + return false; + } else if (isFertile(slave) == false) { /* check other fertility factors */ + return false; + } else if ((slave.ovaries == 1) && (canDoVaginal(slave) == true)) { + return true; + } else if ((slave.mpreg == 1) && (canDoAnal(slave) == true)) { /* pregmod */ + return true; + } else { + return false; + } +}; + +/* pregmod: are slave2's sperm compatible with slave1's eggs? */ +window.canBreed = function(slave1, slave2) { + if (!slave1 || !slave2) { + return null; + } else if (slave1.eggType == slave2.ballType) { + return true; + } else { + return false; + } +}; + +/* assuming slave1 is fertile, could slave2 impregnate slave1? slave2 must have dick and balls with compatible sperm; both slaves must not be in chastity; slave2 need not achieve erection */ +window.canImpreg = function(slave1, slave2) { + if (!slave1 || !slave2) { + return null; + } else if (slave2.dick < 1) { + return false; + } else if (slave2.balls < 1) { + return false; + } else if (slave2.dickAccessory == "chastity") { + return false; + } else if (slave2.dickAccessory == "combined chastity") { + return false; + } else if (slave2.pubertyXY == 0) { /* pregmod start */ + return false; + } else if (slave2.vasectomy == 1) { + return false; + } else if (canBreed(slave1, slave2) == false) { + return false; /* pregmod end */ + } else if (canGetPregnant(slave1) == false) { /* includes chastity checks */ + return false; + } else { + return true; + } +}; + +/* contraceptives (.preg == -1) do not negate this function */ +window.isFertile = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 0) { /* currently pregnant */ + return false; + } else if (slave.preg < -1) { /* sterile */ + return false; + } else if (slave.pubertyXX == 0) { /* pregmod start */ + return false; + } else if (slave.ovaryAge >= 47) { + return false; + } else if (slave.inflation != 0) { + return false; + } else if (slave.bellyImplant != -1) { + return false; + } else if (slave.mpreg == 1) { + return true; /* pregmod end */ + } else if (slave.ovaries == 1) { + return true; + } else { + return false; + } +}; + +//hyperpreg size 2 +window.hyperBellyTwo = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 30 && slave.pregType >= 20) { + return true; + } else if (slave.bellyImplant >= 32000) { + return true; + } else { + return false; + } +}; + +window.hyperPregBellyTwo = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 30 && slave.pregType >= 20) { + return true; + } else { + return false; + } +}; + +//hyperpreg size 1 +window.hyperBellyOne = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 20 && slave.pregType >= 20) { + return true; + } else if (slave.preg > 30 && slave.pregType >= 10) { + return true; + } else if (slave.bellyImplant >= 16000) { + return true; + } else { + return false; + } +}; + +window.hyperPregBellyOne = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 20 && slave.pregType >= 20) { + return true; + } else if (slave.preg > 30 && slave.pregType >= 10) { + return true; + } else { + return false; + } +}; + +//full term belly +window.hugeBelly = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 0 && slave.pregType >= 20) { + return true; + } else if (slave.preg > 10 && slave.pregType >= 10) { + return true; + } else if (slave.preg > 30) { + return true; + } else if (slave.inflation >= 3) { + return true; + } else if (slave.bellyImplant >= 8000) { + return true; + } else { + return false; + } +}; + +window.hugeBellyPreg = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 0 && slave.pregType >= 20) { + return true; + } else if (slave.preg > 10 && slave.pregType >= 10) { + return true; + } else if (slave.preg > 30) { + return true; + } else { + return false; + } +}; + +//is the slave's belly big enough to get in the way +window.bigBellyPreg = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 0 && slave.pregType >= 20) { + return true; + } else if (slave.preg > 10 && slave.pregType >= 10) { + return true; + } else if (slave.preg > 20) { + return true; + } else { + return false; + } +}; + +//is the slave's belly big enough to be noticiable. +window.visibleBellyPreg = function(slave) { + if (!slave) { + return null; + } else if (slave.preg > 0 && slave.pregType >= 20) { + return true; + } else if (slave.preg > 5 && slave.pregType >= 10) { + return true; + } else if (slave.preg > 10) { + return true; + } else { + return false; + } +}; + + +window.bigBelly = function(slave) { + if (!slave) { + return null; + } else if (bigBellyPreg(slave) == true) { + return true; + } else if (slave.inflation > 2) { + return true; + } else if (slave.bellyImplant >= 4000) { + return true; + } else { + return false; + } +}; + +window.visibleBelly = function(slave) { + if (!slave) { + return null; + } else if (visibleBellyPreg(slave) == true) { + return true; + } else if (slave.inflation > 0) { + return true; + } else if (slave.bellyImplant >= 2000) { + return true; + } else { + return false; + } +}; + +window.canAchieveErection = function(slave) { + if (!slave) { + return null; + } else if (slave.dick < 7 && slave.dick > 0 && slave.drugs !== 'hormone blockers' && (slave.balls > 0 ? slave.hormoneBalance < 100 : slave.hormoneBalance <= -100)) { + return true; + } else { + return false; + } +}; + +window.canPenetrate = function(slave) { + if (!slave) { + return null; + } else if (canAchieveErection(slave) == false) { + return false; + } else if (slave.dickAccessory == "chastity") { + return false; + } else if (slave.dickAccessory == "combined chastity") { + return false; + } else if (slave.dick > 7) { + return false; + } + return true; +}; + +window.canSee = function(slave) { + if (!slave) { + return null; + } else if (slave.eyes > -2) { + return true; + } else { + return false; + } +}; + +window.canWalk = function(slave) { + if (!slave) { + return null; + } else if (slave.amp == 1) { + return false; + } else if (tooFatSlave(slave)) { + return false; + } else if (tooBigBreasts(slave)) { + return false; + } else if (tooBigDick(slave)) { + return false; + } else if (tooBigBalls(slave)) { + return false; + } else if (tooBigButt(slave)) { + return false; + } else if (tooBigBelly(slave)) { + return false; + } else if (slave.heels == 0) { + return true; + } else if (slave.shoes == "heels") { + return true; + } else if (slave.shoes == "extreme heels") { + return true; + } else if (slave.shoes == "boots") { + return true; + } else { + return false; + } +}; + +window.canTalk = function(slave) { + if (!slave) { + return null; + } else if (slave.accent > 2) { + return false; + } else if (slave.voice == 0) { + return false; + } else if (slave.lips > 95) { + return false; + } else if (slave.collar == "dildo gag") { + return false; + } else if (slave.collar == "massive dildo gag") { + return false; + } else if (slave.collar == "ball gag") { + return false; + } else if (slave.collar == "bit gag") { + return false; + } else { + return true; + } +}; + +window.canDoAnal = function(slave) { + if (!slave) { + return null; + } else if (slave.vaginalAccessory == "anal chastity") { + return false; + } else if (slave.dickAccessory == "anal chastity") { + return false; + } else if (slave.vaginalAccessory == "combined chastity") { + return false; + } else if (slave.dickAccessory == "combined chastity") { + return false; + } + return true; +}; + +window.canDoVaginal = function(slave) { + if (!slave) { + return null; + } else if (slave.vagina < 0) { + return false; + } else if (slave.vaginalAccessory == "chastity belt") { + return false; + } else if (slave.vaginalAccessory == "combined chastity") { + return false; + } + return true; +}; + +window.tooFatSlave = function(slave){ + if (!slave) { + return null; + } else if (slave.weight > 190+(slave.muscles/5) && slave.physicalAge >= 18) { + return true; + } else if (slave.weight > 130+(slave.muscles/20) && slave.physicalAge <= 3) { + return true; + } else if (slave.weight > 160+(slave.muscles/15) && slave.physicalAge <= 12) { + return true; + } else if (slave.weight > 185+(slave.muscles/10) && slave.physicalAge < 18) { + return true; + } else { + return false; + } +}; + +window.tooBigBreasts = function(slave){ + if (!slave) { + return null; + } else if (slave.boobs > 30000+(slave.muscles*100) && slave.physicalAge >= 18) { + return true; + } else if (slave.boobs > 5000+(slave.muscles*10) && slave.physicalAge <= 3) { + return true; + } else if (slave.boobs > 10000+(slave.muscles*20) && slave.physicalAge <= 12) { + return true; + } else if (slave.boobs > 20000+(slave.muscles*50) && slave.physicalAge < 18) { + return true; + } else { + return false; + } +}; + +window.tooBigBelly = function(slave){ + if (!slave) { + return null; + } else if (slave.belly >= 450000+(slave.muscles*2000) && slave.physicalAge >= 18) { + return true; + } else if (slave.belly >= 350000+(slave.muscles*1000) && slave.physicalAge >= 13) { + return true; + } else if (slave.belly >= 150000+(slave.muscles*500) && slave.physicalAge <= 3) { + return true; + } else if (slave.belly >= 250000+(slave.muscles*800) && slave.physicalAge <= 12) { + return true; + } else if (slave.bellyImplant > 31000+(slave.muscles*100) && slave.physicalAge >= 18) { + return true; + } else if (slave.bellyImplant > 31000+(slave.muscles*80) && slave.physicalAge >= 13) { + return true; + } else if (slave.bellyImplant > 12000+(slave.muscles*20) && slave.physicalAge <= 3) { + return true; + } else if (slave.bellyImplant > 16000+(slave.muscles*50) && slave.physicalAge <= 12) { + return true; + } else { + return false; + } +}; + +window.tooBigBalls = function(slave){ + if (!slave) { + return null; + } else if (slave.balls >= 30+(slave.muscles*.3) && slave.physicalAge <= 3) { + return true; + } else if (slave.balls >= 60+(slave.muscles*.5) && slave.physicalAge <= 12) { + return true; + } else if (slave.balls >= 90+(slave.muscles*.7)) { + return true; + } else { + return false; + } +}; + +window.tooBigDick = function(slave){ + if (!slave) { + return null; + } else if (slave.dick >= 15+(slave.muscles*.1) && slave.physicalAge <= 3 && slave.dick !== 0) { + return true; + } else if (slave.dick >= 30+(slave.muscles*.3) && slave.physicalAge <= 12) { + return true; + } else if (slave.dick >= 68+(slave.muscles*.4)) { + return true; + } else { + return false; + } +}; + +window.tooBigButt = function(slave){ + if (!slave) { + return null; + } else if (slave.butt > 10 && slave.physicalAge <= 3) { + return true; + } else if (slave.butt > 14 && slave.physicalAge <= 12) { + return true; + } else { + return false; + } +}; + +window.relationTargetWord = function(slave) { + if (!slave) { + return null; + } else if (slave.relation == "daughter") { + return "mother"; + } else if (slave.relation == "mother") { + return "daughter"; + } + return slave.relation; +}; + +/* intended to condense the clothing/toy/etc availability checks into something less asinine */ +window.isItemAccessible = function(string) { + if (State.variables.cheatMode === 1){ + return true; + } else { + switch(string) { + case 'attractive lingerie for a pregnant woman': + if ((State.variables.arcologies[0].FSRepopulationFocus > 0) || (State.variables.clothesBoughtMaternityLingerie === 1)) { + return true; + } else { + return false; + } + break; + case 'a bunny outfit': + if ((State.variables.arcologies[0].FSGenderFundamentalist > 0) || (State.variables.clothesBoughtBunny === 1)) { + return true; + } else { + return false; + } + break; + case 'body oil': + if ((State.variables.arcologies[0].FSPhysicalIdealist > 0) || (State.variables.clothesBoughtOil === 1)) { + return true; + } else { + return false; + } + break; + case 'chains': + if ((State.variables.arcologies[0].FSDegradationist > 0) || (State.variables.clothesBoughtChains === 1)) { + return true; + } else { + return false; + } + break; + case 'a chattel habit': + if ((State.variables.arcologies[0].FSChattelReligionist > 0) || (State.variables.clothesBoughtHabit === 1)) { + return true; + } else { + return false; + } + break; + case 'conservative clothing': + if ((State.variables.arcologies[0].FSPaternalist > 0) || (State.variables.clothesBoughtConservative === 1)) { + return true; + } else { + return false; + } + break; + case 'harem gauze': + if ((State.variables.arcologies[0].FSArabianRevivalist > 0) || (State.variables.clothesBoughtHarem === 1)) { + return true; + } else { + return false; + } + break; + case 'a huipil': + if ((State.variables.arcologies[0].FSAztecRevivalist > 0) || (State.variables.clothesBoughtHuipil === 1)) { + return true; + } else { + return false; + } + break; + case 'a kimono': + if ((State.variables.arcologies[0].FSEdoRevivalist > 0) || (State.variables.clothesBoughtKimono === 1)) { + return true; + } else { + return false; + } + break; + case 'a maternity dress': + if ((State.variables.arcologies[0].FSRepopulationFocus > 0) || (State.variables.clothesBoughtMaternityDress === 1)) { + return true; + } else { + return false; + } + break; + case 'a slutty qipao': + if ((State.variables.arcologies[0].FSChineseRevivalist > 0) || (State.variables.clothesBoughtQipao === 1)) { + return true; + } else { + return false; + } + break; + case 'stretch pants and a crop-top': + if ((State.variables.arcologies[0].FSHedonisticDecadence > 0) || (State.variables.clothesBoughtLazyClothes === 1)) { + return true; + } else { + return false; + } + break; + case 'a toga': + if ((State.variables.arcologies[0].FSRomanRevivalist > 0) || (State.variables.clothesBoughtToga === 1)) { + return true; + } else { + return false; + } + break; + case 'Western clothing': + if ((State.variables.arcologies[0].FSPastoralist > 0) || (State.variables.clothesBoughtWestern === 1)) { + return true; + } else { + return false; + } + break; + case 'bowtie': + if ((State.variables.arcologies[0].FSGenderFundamentalist > 0) || (State.variables.clothesBoughtBunny === 1)) { + return true; + } else { + return false; + } + break; + case 'ancient Egyptian': + if ((State.variables.arcologies[0].FSEgyptianRevivalist > 0) || (State.variables.clothesBoughtEgypt === 1)) { + return true; + } else { + return false; + } + break; + case 'massive dildo gag': + if (State.variables.toysBoughtGags === 1) { + return true; + } else { + return false; + } + break; + case 'a small empathy belly': case 'a medium empathy belly': case 'a large empathy belly': case 'a huge empathy belly': + if ((State.variables.arcologies[0].FSRepopulationFocus > 0) || (State.variables.clothesBoughtBelly === 1)) { + return true; + } else { + return false; + } + break; + case 'long dildo': case 'long, large dildo': case 'long, huge dildo': + if (State.variables.toysBoughtDildos === 1) { + return true; + } else { + return false; + } + break; + case 'long plug': case 'long, large plug': case 'long, huge plug': + if (State.variables.toysBoughtButtPlugs === 1) { + return true; + } else { + return false; + } + break; + case 'tail': + if (State.variables.toysBoughtButtPlugTails === 1) { + return true; + } else { + return false; + } + break; + default: + return true; + break; + } + } +}; + +window.ruleApplied = function(slave, ID) { + if (!slave || !slave.currentRules) + return null; + return slave.currentRules.includes(ID); +}; + +window.expandFacilityAssignments = function(facilityAssignments) { + var assignmentPairs = { + "serve in the club": "be the DJ", + "rest in the spa": "be the Attendant", + "work in the brothel": "be the Madam", + "work in the dairy": "be the Milkmaid", + "work as a servant": "be the Stewardess", + "get treatment in the clinic": "be the Nurse", + "live with your Head Girl": "be your Head Girl", + "serve in the master suite": "be your Concubine", + "learn in the schoolroom": "be the Schoolteacher", + "be confined in the cellblock": "be the Wardeness", + }; + + if (!facilityAssignments || !facilityAssignments.length) + return []; + var fullList = facilityAssignments.map(function(a) { + if (a in assignmentPairs) + return [a, assignmentPairs[a]]; + return a; + }); + return fullList.flatten(); +}; + +window.ruleSlaveSelected = function(slave, rule) { + if (!slave || !rule || !rule.selectedSlaves) + return false; + return rule.selectedSlaves.includes(slave.ID); +}; + +window.ruleSlaveExcluded = function(slave, rule) { + if (!slave || !rule || !rule.excludedSlaves) + return false; + return rule.excludedSlaves.includes(slave.ID); +}; + +window.ruleAssignmentSelected = function(slave, rule) { + if (!slave || !rule || (!rule.assignment && !rule.facility)) + return false; + var assignment = rule.assignment.concat(expandFacilityAssignments(rule.facility)); + return assignment.includes(slave.assignment); +} + +window.ruleAssignmentExcluded = function(slave, rule) { + if (!slave || !rule || (!rule.excludeAssignment && !rule.excludeFacility)) + return false; + var excludeAssignment = rule.excludeAssignment.concat(expandFacilityAssignments(rule.excludeFacility)); + return excludeAssignment.includes(slave.assignment); +} + +window.hasSurgeryRule = function(slave, rules) { + if (!slave || !rules || !slave.currentRules) + return false; + + for (var d = rules.length-1; d >= 0; d--) { + if (ruleApplied(slave, rules[d].ID)) { + if (rules[d].autoSurgery > 0) { + return true; + } + } + } + return false; +}; + +window.hasRuleFor = function(slave, rules, what) { + if (!slave || !rules || !slave.currentRules) + return false; + + for (var d = rules.length-1; d >= 0; d--) { + if (ruleApplied(slave, rules[d].ID)) { + if (rules[d][what] !== "no default setting") { + return true; + } + } + } + return false; +}; + +window.hasHColorRule = function(slave, rules) { + return hasRuleFor(slave, rules, "hColor"); +} + +window.hasHStyleRule = function(slave, rules) { + return hasRuleFor(slave, rules, "hStyle"); +}; + +window.hasEyeColorRule = function(slave, rules) { + return hasRuleFor(slave, rules, "eyeColor"); +}; + +window.lastPregRule = function(slave, rules) { + if (!slave || !rules) + return null; + if (!slave.currentRules) + return false; + + for (var d = rules.length-1; d >= 0; d--) { + if (ruleApplied(slave, rules[d].ID)) { + if (rules[d].preg == -1) { + return true; + } + } + } + + return null; +}; + +window.lastSurgeryRuleFor = function(slave, rules, what) { + if (!slave || !rules || !slave.currentRules) + return null; + + for (var d = rules.length-1; d >= 0; d--) { + if (!rules[d].surgery) + return null; + + if (ruleApplied(slave, rules[d].ID)) { + if (rules[d].surgery[what] != "no default setting") { + return rules[d]; + } + } + } + + return null; +}; + +window.lastLactationSurgeryRule = function(slave, rules) { + return lastSurgeryRuleFor(slave, rules, "lactation"); +} + +window.lastProstateSurgeryRule = function(slave, rules) { + return lastSurgeryRuleFor(slave, rules, "prostate"); +} + +window.lastLipSurgeryRule = function(slave, rules) { + return lastSurgeryRuleFor(slave, rules, "lips"); +}; + +window.lastBoobSurgeryRule = function(slave, rules) { + return lastSurgeryRuleFor(slave, rules, "boobs"); +}; + +window.lastButtSurgeryRule = function(slave, rules) { + return lastSurgeryRuleFor(slave, rules, "butt"); +}; + +window.milkAmount = function(slave) { + var milk; + var calcs; + if (!slave) { + return null; + } else { + calcs = slave.boobs-slave.boobsImplant + if (calcs > 40000) { + milk = (158+((calcs-10000)/600)) + } else if (calcs > 25000) { + milk = (128+((calcs-10000)/500)) + } else if (calcs > 10000) { + milk = (78+((calcs-10000)/300)) + } else if (calcs > 5000) { + milk = (53+((calcs-5000)/200)) + } else if (calcs > 2000) { + milk = (29+((calcs-2000)/125)) + } else if (calcs > 800) { + milk = (16+((calcs-800)/80)) + } else { + milk = (8+((calcs-400)/50)) + } + if (slave.lactation == 2) { + milk *= 1.2 + } + milk += (milk*((slave.devotion-50)/200)) + if (slave.boobsImplant > 200) { + milk *= 0.9 + } + calcs = (slave.hormoneBalance/50) + if (slave.balls != 0 && calcs > -2) { + calcs -= 1 + } else if (slave.ovaries != 1 && calcs < 2) { + calcs += 1 + } + milk *= (1+(calcs*0.1)) + milk *= (1+(slave.preg/100)) + milk *= (1+(slave.health/50)) + milk *= (1+(slave.weight/500)) + milk *= (1+(slave.lactationAdaptation/500)) + milk = Math.trunc(milk) + milk = Math.clamp(milk,1,1000000000000000000) + return milk + } +}; + +window.cumAmount = function(slave) { + var cum = 0; + var calcs = 0; + if (!slave) { + return null; + } else { + if (slave.drugs == "testicle enhancement") { + cum = ((slave.balls*3.5)+1) + } else if (slave.drugs == "hyper testicle enhancement") { + cum = ((slave.balls*5)+1) + } else { + cum = ((slave.balls*2.5)+1) + } + if (slave.diet == "cum production") { + cum *= 1.2 + } + calcs = (slave.hormoneBalance/50) + cum *= (1-(calcs*0.1)) + if (slave.scrotum == 0) { + cum *= 0.8 + } + if (slave.prostate == 0) { + cum *= 0.2 // being generous here + } else if (slave.prostate == 2) { + cum *= 1.2 + } else if (slave.prostate == 3) { + cum *= 1.5 + } + if (slave.devotion > 50) { + cum += (cum*(slave.devotion/100)) + } else if (slave.devotion < -50) { + cum += (cum*(slave.devotion/100)) + } + if (slave.health > 50) { + cum += (cum*(slave.health/50)) + } else if (slave.health < -50) { + cum += (cum*(slave.health/50)) + } + cum = Math.trunc(cum) + cum = Math.clamp(cum,1,1000000000000000000) + return cum + } +}; + + +window.mergeRules = function(rules) { + var combinedRule = {}; + + for (var i = 0; i < rules.length; i++) { + for (var prop in rules[i]) { + // we don't manage setAssignment here, we do it in <<DefaultRules>> + if (prop === "setAssignment") + continue; + + // A rule overrides any preceding ones if, + // * there are no preceding ones, + // * or it sets autoBrand, + // * or it does not set autoBrand and is not "no default setting" + var applies = ( + combinedRule[prop] === undefined + || (prop === "autoBrand" && rules[i][prop]) + || (prop !== "autoBrand" && rules[i][prop] !== "no default setting") + ); + + if (applies) + { + + //Objects in JS in operaions "=" pass by reference, so we need completly new object to avoid mess up previous rules. + if ("object" == typeof rules[i][prop] && "object" != typeof combinedRule[prop]) + combinedRule[prop] = new Object(); + + //If we already have object - now we will process it's properties, but object itself should be skiped. + if ("object" != typeof combinedRule[prop]) + combinedRule[prop] = rules[i][prop]; + + /*Some properties of rules now have second level properties. We need to check it, and change ones in combinedRule. (Good example - growth drugs. Breasts, butt, etc...) */ + if ( "object" == typeof rules[i][prop]) + { + for (var subprop in rules[i][prop]) + { + var subapplies = ( + combinedRule[prop][subprop] === undefined + || (rules[i][prop][subprop] !== "no default setting") + ); + + if (subapplies) + combinedRule[prop][subprop] = rules[i][prop][subprop]; + } + + } + } + + } + + } + + return combinedRule; +} + +window.isVegetable = function(slave) { + slave = slave || State.variables.activeSlave; + if(!slave) { return false; } + return (slave.fetish === 'mindbroken'); +}; + +window.repGainSacrifice = function(slave, arcology) { + slave = slave || State.variables.activeSlave; + arcology = arcology || State.variables.arcologies[0]; + if(!slave || !arcology || arcology.FSAztecRevivalist === "unset" || arcology.FSAztecRevivalist <= 0) { + return 0; + } + return Math.ceil( + (Math.min(100, Math.pow(1.0926, State.variables.week - slave.weekAcquired)) + slave.prestige * 30) + * arcology.FSAztecRevivalist / 100 / ((State.variables.slavesSacrificedThisWeek || 0) + 1)); +}; + +window.ngUpdateGenePool = function(genePool) { + var transferredSlaveIds = (SugarCube.State.variables.slaves || []) + .filter(function(s) { return s.ID >= 1200000; }) + .map(function(s) { return s.ID - 1200000; }); + return (genePool || []) + .filter(function(s) { return transferredSlaveIds.indexOf(s.ID) >= 0; }) + .map(function(s) { + var result = jQuery.extend(true, {}, s); + result.ID += 1200000; + return result; + }); +} + +window.toJson = function(obj) { + var jsontext = JSON.stringify(obj); + jsontext = jsontext.replace(/^{/,""); + jsontext = jsontext.replace(/}$/,""); + return jsontext; +}; + +window.nippleColor = function(slave) { + slave = slave || State.variables.activeSlave; + if(slave.skin === 'tanned' || slave.skin === 'fair') { + if(slave.preg > 10 || (slave.birthsTotal > 0 && slave.lactation > 0)) { + return 'dark brown'; + } else { + return 'pink'; + } + } else if((slave.skin === 'pale' || slave.race === 'white')) { + if(slave.preg > 10 || (slave.birthsTotal > 0 && slave.lactation > 0)) { + return 'brown'; + } else { + return 'pink'; + } + } else if((slave.skin === 'brown' || slave.race === 'black')) { + if(slave.preg > 10 || (slave.birthsTotal > 0 && slave.lactation > 0)) { + return 'black'; + } else { + return 'dark brown'; + } + } else { + if(slave.preg > 10 || (slave.birthsTotal > 0 && slave.lactation > 0)) { + return 'dark brown'; + } else { + return 'brown'; + } + } +} + +window.jsAlert = function(obj) +{ + alert(obj); +} + +window.jsConsoleInfo = function(obj) +{ + console.info(obj); +} + +/*:: Extended Family Mode JS [script]*/ + +/* see documentation for details /devNotes/Extended Family Mode Explained.txt */ + +window.sameDad = function(slave1, slave2){ + if ((slave1.father == slave2.father) && (slave1.father != 0 && slave1.father != -2)) { + return true; + } else { + return false; + } +}; + +window.sameMom = function(slave1, slave2){ + if ((slave1.mother == slave2.mother) && (slave1.mother != 0 && slave1.mother != -2)) { + return true; + } else { + return false; + } +}; + +// testtest catches the case if a mother is a father or a father a mother - thank you familyAnon, for this code +window.sameTParent = function(slave1, slave2) { + if (slave1.mother == -1 && slave1.father == 1 && slave2.mother == -1 && slave2.father == -1) { + return 1; + } else if (slave1.mother == slave2.father && slave1.father == slave2.mother && slave1.mother != 0 && slave1.mother != -2 && slave1.father != 0 && slave1.father != -2 && slave1.mother != slave1.father) { + return 2; + } else if ((slave1.mother == slave2.father || slave1.father == slave2.mother) && slave1.mother != 0 && slave1.mother != -2 && slave2.mother != 0 && slave2.mother != -2 && slave1.mother != slave1.father) { + return 3; + } else { + return 0; + } +}; + +/* +window.sameTParent = function(slave1, slave2) { + if ((slave1.mother == slave2.father || slave1.father == slave2.mother) && (slave1.mother != 0 && slave1.mother != -2 && slave1.father != 0 && slave1.father != -2)) { + return true; //testtest catches the case if a mother is a father or a father a mother + } else { + return false; + } +}; +*/ + +window.areTwins = function(slave1, slave2) { + if (sameDad(slave1, slave2) == false) { + return false; + } else if (sameMom(slave1, slave2) == false) { + return false; + } else if (slave1.actualAge == slave2.actualAge && slave1.birthWeek == slave2.birthWeek) { + return true; + } else { + return false; + } +}; + +window.areSisters = function(slave1, slave2) { + if (slave1.ID == slave2.ID) { + return 0; //you are not your own sister + } else if ((slave1.father != 0 && slave1.father != -2) || (slave1.mother != 0 && slave1.mother != -2)) { + if (sameDad(slave1, slave2) == false && sameMom(slave1, slave2) == true) { + return 3; //half sisters + } else if (sameDad(slave1, slave2) == true && sameMom(slave1, slave2) == false) { + return 3; //half sisters + } else if (sameTParent(slave1, slave2) == 3) { + return 3; //half sisters + } else if (sameTParent(slave1, slave2) == 2) { + return 2; //sisters + } else if (sameDad(slave1, slave2) == true && sameMom(slave1, slave2) == true) { + if (slave1.actualAge == slave2.actualAge && slave1.birthWeek == slave2.birthWeek) { + return 1; //twins + } else { + return 2; //sisters + } + } else { + return 0; //not related + } + } else { + return 0; //not related + } +}; + +/* +//3 = half-sisters, 2 = sisters, 1 = twins, 0 = not related +window.areSisters = function(c1, c2) { + if(c1.ID == c2.ID) { + return 0; + } + var sib = 4; + if(sameMom(c1, c2)) { + sib -= 1; + } + if(sameDad(c1, c2)) { + sib -=1; + } + if (sib == 2 && c1.actualAge == c2.actualAge && c1.birthWeek == c2.birthWeek) { + sib -= 1; + } + if(sib == 4) { + return 0 + } else { + return sib; + } +} +*/ + +window.totalRelatives = function(slave) { + var relatives = 0; + if (slave.mother > 0) { + relatives += 1 + } + if (slave.father > 0) { + relatives += 1 + } + if (slave.daughters > 0) { + relatives += slave.daughters + } + if (slave.sisters > 0) { + relatives += slave.sisters + } + return relatives +}; + +window.mutualChildren = function(slave1, slave2, slaves) { + return slaves.filter(function(s) { return s.ID != slave1.ID && s.ID != slave2.ID && s.mother > 0 && s.father > 0 && ((s.mother == slave1.ID && s.father == slave2.ID) || (s.mother == slave2.ID && s.father == slave1.ID)); }).length; +} + +window.isSlaveAvailable = function(slave) { + if (!slave) { + return null; + } else if (slave.assignment == "be your agent") { + return false; + } else if (slave.assignment == "live with your agent") { + return false; + } else if (slave.assignment == "be confined in the arcade") { + return false; + } else if (slave.assignment == "work in the dairy" && SugarCube.State.variables.DairyRestraintsSetting >= 2) { + return false; + } else { + return true; + } +}; + +if (typeof DairyRestraintsSetting == "undefined") { + var DairyRestraintsSetting = { + setSetting: function (setting) { + setting = Number(setting) + return setting + } + }; + // Raise namespace scope to Global. + window.DairyRestraintsSetting = DairyRestraintsSetting; +}; + +/* OLD +window.randomRelatedSlave = function(slave, filterFunction) { + if(!slave || !SugarCube) { return undefined; } + if(typeof filterFunction !== 'function') { filterFunction = function(s, index, array) { return true; }; } + return SugarCube.State.variables.slaves.filter(filterFunction).shuffle().find(function(s, index, array) {return areSisters(slave, s) || s.mother == slave.ID || s.father == slave.ID || slave.ID == s.mother || slave.ID == s.father; }) +} +*/ + +window.randomRelatedSlave = function(slave, filterFunction) { + if(!slave || !SugarCube) { return undefined; } + if(typeof filterFunction !== 'function') { + filterFunction = function(s, index, array) { return true; }; + } + var arr = SugarCube.State.variables.slaves.filter(filterFunction) + arr.shuffle() + return arr.find(function(s, index, array) { + return areSisters(slave, s) + || slave.ID === s.mother + || slave.ID === s.father + || s.ID === slave.mother + || s.ID === slave.father; + }) +} + +window.randomRelatedAvailableSlave = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s); }); +} + +window.randomSister = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return areSisters(slave, s); }); +} + +window.randomTwinSister = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return areSisters(slave, s) == 1; }); +} + +window.randomAvailableSister = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && areSisters(slave, s); }); +} + +window.randomAvailableTwinSister = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && areSisters(slave, s) == 1; }); +} + +window.randomDaughter = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return s.mother == slave.ID || s.father == slave.ID; }); +} + +window.randomAvailableDaughter = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && (s.mother == slave.ID || s.father == slave.ID); }); +} + +window.randomParent = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return s.ID == slave.mother || s.ID == slave.father; }); +} + +window.randomAvailableParent = function(slave) { + return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && (s.ID == slave.mother || s.ID == slave.father); }); +} + +window.totalPlayerRelatives = function(pc) { + var relatives = 0; + if (pc.mother > 0) { + relatives += 1 + } + if (pc.father > 0) { + relatives += 1 + } + if (pc.daughters > 0) { + relatives += pc.daughters + } + if (pc.sisters > 0) { + relatives += pc.sisters + } + return relatives +}; + + +/*:: pregJS [script]*/ + +/*Major props to the anons who worked together to forge the Super Pregnancy Project. Let your legacy go unforgotten.*/ +window.getPregBellySize = function(s) { + var gestastionWeek = s.preg; + var fetuses = s.pregType; + var phi = 1.618; + + if(gestastionWeek <= 32) { + var targetLen = ((0.00006396 * Math.pow(gestastionWeek, 4)) - (0.005501 * Math.pow(gestastionWeek, 3)) + (0.161 * Math.pow(gestastionWeek, 2)) - (0.76 * gestastionWeek) + 0.208); + } else if(gestastionWeek <= 106) { + var targetLen = ((-0.0000004675 * Math.pow(gestastionWeek, 4)) + (0.0001905 * Math.pow(gestastionWeek, 3)) - (0.029 * Math.pow(gestastionWeek, 2)) + (2.132 * gestastionWeek) - 16.575); + } else { + var targetLen = ((-0.00003266 * Math.pow(gestastionWeek,2)) + (0.076 * gestastionWeek) + 43.843); + } + + var bellySize = ((4 / 3) * (Math.PI) * (phi / 2) * (Math.pow((targetLen / 2), 3)) * fetuses); + return bellySize; +}; + +window.bellyAdjective = function(slave) { + slave = slave || State.variables.activeSlave; + if(slave.belly >= 1500) { + if(slave.belly >= 750000) { + if(slave.preg > 10) { + return 'monolithic bulging'; + } else { + return 'monolithic'; + } + } else if(slave.belly >= 600000) { + if(slave.preg > 10) { + return 'titanic bulging'; + } else { + return 'titanic'; + } + } else if(slave.belly >= 450000) { + if(slave.preg > 10) { + return 'gigantic bulgy'; + } else { + return 'gigantic'; + } + } else if(slave.belly >= 300000) { + return 'massive'; + } else if(slave.belly >= 100000) { + return 'giant'; + } else if(slave.belly >= 15000) { + return 'huge'; + } else if(slave.belly >= 10000) { + return 'big'; + } else { + return 'swollen'; + } + } else { + return ''; + } +} + +/*:: RA Selector JS [script]*/ + +window.growAdvSelector = function(slave, rule) { + + var ret = ""; + var setd = 0; + + if ((rule.breastSize == "small" && slave.boobs < 350) || + (rule.breastSize == "c-cup" && slave.boobs < 550) || + (rule.breastSize == "f-cup" && slave.boobs < 1100) || + (rule.breastSize == "k-cup" && slave.boobs < 2150) || + (rule.breastSize == "p-cup" && slave.boobs < 3700) || + (rule.breastSize == "unlimited" && slave.boobs < 24000)) + { + slave.drugs = "breast injections"; + ret = slave.slaveName + "'s boobs could be bigger, so she's been put on breast injections."; + return ret; + } + + if ((rule.buttSize == "small" && slave.butt < 1) || + (rule.buttSize == "plump" && slave.butt < 3) || + (rule.buttSize == "huge" && slave.butt < 4) || + (rule.buttSize == "enormous" && slave.butt < 6) || + (rule.buttSize == "unlimited" && slave.butt < 19)) + { + slave.drugs = "butt injections"; + ret = slave.slaveName + "'s butt could be bigger, so she's been put on butt injections."; + return ret; + } + + if (slave.balls > 0 && + ((rule.ballSize == "small" && slave.balls < 2) || + (rule.ballSize == "big" && slave.balls < 4) || + (rule.ballSize == "huge" && slave.balls < 6) || + (rule.ballSize == "unlimited" && slave.balls < 9))) + { + slave.drugs = "testicle enhancement"; + ret = slave.slaveName + "'s balls aren't large enough, so she's been put on testicle enhancement."; + return ret; + } + + if (slave.dick > 0 && + ((rule.penisSize == "small" && slave.dick < 2) || + (rule.penisSize == "big" && slave.dick < 4) || + (rule.penisSize == "huge" && slave.dick < 6) || + (rule.penisSize == "unlimited" && slave.dick < 12))) + { + slave.drugs = "penis enhancement"; + ret = slave.slaveName + "'s dick isn't large enough, so she's been put on penis enhancement."; + return ret; + } + + if ((rule.lipSize == "normal" && slave.lips < 15) || + (rule.lipSize == "pretty" && slave.lips < 30) || + (rule.lipSize == "plush" && slave.lips < 55) || + (rule.lipSize == "huge" && slave.lips < 85) || + (rule.lipSize == "facepussy" && slave.lips < 99)) + { + slave.drugs = "lip injections"; + ret = slave.slaveName + "'s lips aren't large enough, so she's been put on lips enhancement."; + return ret; + } + + if (slave.drugs != "no drugs") + { + slave.drugs = "no drugs"; + ret = slave.slaveName + " has reached growth targets and has been taken off growth injections."; + } + + return ret; + +} + +window.growAdvSelectorSlim = function(slave, rule) { + + var ret = ""; + var setd = 0; + + if ((rule.breastSize == "small" && slave.boobs > 350) || + (rule.breastSize == "c-cup" && slave.boobs > 550) || + (rule.breastSize == "f-cup" && slave.boobs > 1100) || + (rule.breastSize == "k-cup" && slave.boobs > 2150) || + (rule.breastSize == "p-cup" && slave.boobs > 3700)) + { + slave.drugs = "breast redistributors"; + ret = slave.slaveName + "'s boobs are too big, so she's been put on breast reduction drugs."; + return ret; + } + + if ((rule.buttSize == "small" && slave.butt > 1) || + (rule.buttSize == "plump" && slave.butt > 3) || + (rule.buttSize == "huge" && slave.butt > 4) || + (rule.buttSize == "enormous" && slave.butt > 6)) + { + slave.drugs = "butt redistributors"; + ret = slave.slaveName + "'s butt is too big, so she's been put on butt reduction drugs."; + return ret; + } + + if ((rule.ballSize == "small" && slave.balls > 2) || + (rule.ballSize == "big" && slave.balls > 4) || + (rule.ballSize == "huge" && slave.balls > 6)) + { + slave.drugs = "testicle atrophiers"; + ret = slave.slaveName + "'s balls are too big, so she's been put on testicle atrophiers."; + return ret; + } + + if ((rule.penisSize == "small" && slave.dick > 2) || + (rule.penisSize == "big" && slave.dick > 4) || + (rule.penisSize == "huge" && slave.dick > 6)) + { + slave.drugs = "penis atrophiers"; + ret = slave.slaveName + "'s dick is too big, so she's been put on penis atrophiers."; + return ret; + } + + if ((rule.lipSize == "normal" && slave.lips > 15) || + (rule.lipSize == "pretty" && slave.lips > 30) || + (rule.lipSize == "plush" && slave.lips > 55) || + (rule.lipSize == "huge" && slave.lips > 85)) + { + slave.drugs = "lip atrophiers"; + ret = slave.slaveName + "'s lips are too big, so she's been put on lips atrophiers."; + return ret; + } + + if (slave.drugs != "no drugs") + { + slave.drugs = "no drugs"; + ret = slave.slaveName + " has reached growth targets and has been taken off growth injections."; + } + + return ret; + +} + +/*:: rbuttonJS [script]*/ +/* This is modifed radiobutton macro, for automatic checked state setup*/ +/* Usage (be sure to use quotes around parameters): + + <<rbutton "$variable" "value">> +Or: + <<rbutton "$variable" "value" "HTML_element_ID" "Text to replace with, inside html element with ID from previous parameter. <br> HTML tags allowed.">> + +Group of radiobutton will be created based on variable name. Checked state will be setted up if variable contain value matched with second parameter. Full form of macro call can be used to display extended description of selected value. +*/ + +Macro.add('rbutton', { + handler() { + if (this.args.length < 2) { + const errors = []; + if (this.args.length < 1) { errors.push('variable name'); } + if (this.args.length < 2) { errors.push('checked value'); } + return this.error(`no ${errors.join(' or ')} specified`); + } + + // Ensure that the variable name argument is a string. + if (typeof this.args[0] !== 'string') { + return this.error('variable name argument is not a string'); + } + + const varName = this.args[0].trim(); + + // Try to ensure that we receive the variable's name (incl. sigil), not its value. + if (varName[0] !== '$' && varName[0] !== '_') { + return this.error(`variable name "${this.args[0]}" is missing its sigil ($ or _)`); + } + + const initValue = Wikifier.getValue(this.args[0]); + const varId = Util.slugify(varName); + const checkValue = this.args[1]; + const el = document.createElement('input'); + + var replaceID = ""; + var replaceText = ""; + if (typeof this.args[2] === 'string') { + replaceID = this.args[2]; + } + if (typeof this.args[3] === 'string') { + replaceText = this.args[3]; + } + + + + /* + Setup and initialize the group counter. + */ + if (!TempState.hasOwnProperty(this.name)) { + TempState[this.name] = {}; + } + + if (!TempState[this.name].hasOwnProperty(varId)) { + TempState[this.name][varId] = 0; + } + + /* + Setup and append the input element to the output buffer. + */ + jQuery(el) + .attr({ + id : `${this.name}-${varId}-${TempState[this.name][varId]++}`, + name : `${this.name}-${varId}`, + type : 'radio', + tabindex : 0 // for accessiblity + }) + .addClass(`macro-${this.name}`) + .on('change', function () { + if (this.checked) { + Wikifier.setValue(varName, checkValue); + + if (replaceID.length > 0 && replaceText.length > 0){ + + var replaceEl = document.getElementById(replaceID); + //alert (replaceEl); + if (replaceEl != null) { + replaceEl.innerHTML = replaceText; + } + + } + } + }) + .ready (function () { + //alert ("DOM finished"); + if (el.checked && replaceID.length > 0 && replaceText.length > 0){ + + var replaceEl = document.getElementById(replaceID); + //alert (replaceEl); + if (replaceEl != null) { + replaceEl.innerHTML = replaceText; + } + + } + }) + .appendTo(this.output); + + /* + Set the story variable to the checked value and the input element to checked, if requested. + */ + if (initValue == checkValue) { + el.checked = true; + Wikifier.setValue(varName, checkValue); + } + } + }); + +/* textbox js */ + +/* Nicked off greyelf, works for <<replace>> textboxes */ +window.setReplaceTextboxMaxLength = function (storyVarName, maxLength) { + var textboxId = '#textbox-' + Util.slugify(storyVarName); + $(textboxId) + .attr('maxlength', maxLength) + .css({ + 'min-width' : 'initial', + width : maxLength + 'em', + padding : '3px 2px' + }); +}; + +/* Nicked off TheMadExile, works for non-<<replace>> textboxes */ +window.setTextboxMaxLength = function (storyVarName, maxLength) { + var textboxId = '#textbox-' + Util.slugify(storyVarName); + postdisplay[textboxId + '-maxlength'] = function (taskName) { + delete postdisplay[taskName]; + $(textboxId) + .attr('maxlength', maxLength) + .css({ + 'min-width' : 'initial', + width : maxLength + 'em', + padding : '3px 2px' + }); + }; +}; + +/* end textbox js */ +/*begin accordian mod js */ + +postdisplay["doAccordionSet"] = function (content) { + if (variables().useAccordion === 1) { + Array.prototype.slice.call(document.querySelectorAll(".macro-display")) + .forEach(function (element) { + element.classList.add("accHidden"); + }); + } +} + +postdisplay["doAccordion"] = function (content) { + var acc = document.getElementsByClassName("accordion"); + var i; + + for (i = 0; i < acc.length; i += 1) { + acc[i].onclick = function () { + this.classList.toggle("active"); + var panel = this.nextElementSibling; + if (panel.style.maxHeight) { + panel.style.maxHeight = null; + } else { + panel.style.maxHeight = 2*panel.scrollHeight + "px"; + } + }; + } +}; + + +/*:: EconomyJS [script]*/ + +window.LivingRule = Object.freeze({LUXURIOUS: 'luxurious', NORMAL: 'normal', SPARSE: 'sparse'}); +window.Job = Object.freeze({ + DAIRY: 'work in the dairy', MASTER_SUITE: 'serve in the master suite', CONCUBINE: 'be your concubine', + BABY_FACTORY: 'labor in the production line', BROTHEL: 'work in the brothel', ARCADE: 'be confined in the arcade', + SERVANT: 'work as a servant', SERVER: 'be a servant', CLUB: 'serve in the club'}); +window.PersonalAttention = Object.freeze({TRADE: 'trading', WAR: 'warfare', SLAVEING: 'slaving', ENGINEERING: 'engineering', MEDICINE: 'medicine', MAID: 'upkeep'}); + +window.getCost = function(array) { + var rulesCost = State.variables.rulesCost; + var foodCost = State.variables.foodCost; + var drugsCost = State.variables.drugsCost; + var facilityCost = State.variables.facilityCost; + var economy = State.variables.economy; + var brothel = State.variables.brothel; + var arcade = State.variables.arcade; + var club = State.variables.club; + var dairy = State.variables.dairy; + var servantsQuarters = State.variables.servantsQuarters; + var incubator = State.variables.incubator; + var mercCosts = State.variables.mercenaries * 2000; + var policyCost = State.variables.policyCost; + var costs = (State.variables.brothel * facilityCost) + + (State.variables.arcade * facilityCost * 0.5) + + (State.variables.club * facilityCost) + + (State.variables.dairy * facilityCost) + + (State.variables.incubator * facilityCost * 10); + + //facility expenses + costs += (0.1 * State.variables.brothelUpgradeDrugs * brothel * facilityCost) + + (0.2 * State.variables.arcadeUpgradeInjectors * arcade * facilityCost) + + (0.2 * State.variables.arcadeUpgradeCollectors * arcade * facilityCost) + + (0.2 * State.variables.clubUpgradePDAs * club * facilityCost) + + (0.2 * State.variables.dairyFeedersUpgrade * dairy * facilityCost) + + (0.1 * State.variables.dairyPregUpgrade * dairy * facilityCost) + + (0.2 * State.variables.dairyStimulatorsUpgrade * facilityCost) + + (0.2 * State.variables.servantsQuartersUpgradeMonitoring * servantsQuarters * facilityCost) + + (0.2 * State.variables.incubatorUpgradeWeight * incubator * facilityCost) + + (0.2 * State.variables.incubatorUpgradeMuscles * incubator * facilityCost) + + (0.2 * State.variables.incubatorUpgradeReproduction * incubator * facilityCost) + + (0.2 * State.variables.incubatorUpgradeGrowthStims * incubator * facilityCost) + + (0.5 * State.variables.incubatorUpgradeSpeed * incubator * facilityCost); + + if(dairy > 0) { + costs += ((State.variables.bioreactorsXY + State.variables.bioreactorsXX + State.variables.bioreactorsHerm + State.variables.bioreactorsBarren) * 100); + } + if(brothel > 0) { + costs += State.variables.brothelAdsSpending; + } + if(club > 0) { + costs += State.variables.clubAdsSpending; + } + if(incubator > 0) { + costs += ((State.variables.incubatorWeightSetting + State.variables.incubatorMusclesSetting + State.variables.incubatorReproductionSetting + State.variables.incubatorGrowthStimsSetting) * 500); + } + if(State.variables.masterSuitePregnancySlaveLuxuries === 1) { + costs += 500; + } + if(State.variables.masterSuitePregnancyFertilitySupplements === 1) { + costs += 1000; + } + + //general arcology costs + costs += (State.variables.girls * (250 + (economy * 500))); + + if(State.variables.arcologies[0].FSRepopulationFocusLaw === 1 && State.variables.PC.pregKnown == 1) { + costs -= 500; + } + + costs += State.variables.citizenOrphanageTotal * 100; + costs += State.variables.privateOrphanageTotal * 500; + if(State.variables.breederOrphanageTotal > 0) { + costs += 50; + } + + if(State.variables.peacekeepers !== 0 && State.variables.peacekeepers.undermining !== 0) { + costs += State.variables.peacekeepers.undermining; + } + + if(State.variables.mercenaries > 0) { + if(State.variables.barracks) { + mercCosts *= 0.5; + } + if((State.variables.PC.warfare >= 100) || (State.variables.PC.career === 'arcology owner')) { + mercCosts *= 0.5; + } + costs += mercCosts; + } + + costs += State.variables.FSSpending; + + //slave expenses + for (var slave of array) { + costs += getSlaveCost(slave); + if(slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER) { + if(slave.trust < -20) { + costs -= rulesCost * 4; + } else if(slave.devotion < -20) { + costs -= rulesCost * 2; + } else if(slave.devotion <= 20) { + costs -= rulesCost * 3; + } else if(slave.devotion <= 50) { + costs -= rulesCost * 4; + } else { + costs -= rulesCost * 5; + } + if(slave.fetish === 'submissive') { + costs -= rulesCost; + } else if(slave.fetish === 'dom') { + costs += rulesCost; + } + if(slave.relationship < -1) { + costs -= rulesCost; + } + if(slave.energy < 20) { + costs -= rulesCost; + } else if(slave.energy < 40) { + costs -= rulesCost / 2; + } + if(slave.lactation > 0) { + costs -= 25; + } + } + } + + // policy and other expenses + if(State.variables.Recruiter !== 0) { + costs += 250; + } + if(State.variables.TSS.schoolPresent === 1) { + costs += 1000; + } + if(State.variables.GRI.schoolPresent === 1) { + costs += 1000; + } + if(State.variables.SCP.schoolPresent === 1) { + costs += 1000; + } + if(State.variables.LDE.schoolPresent === 1) { + costs += 1000; + } + if(State.variables.TGA.schoolPresent === 1) { + costs += 1000; + } + if(State.variables.TCR.schoolPresent === 1) { + costs += 1000; + } + if((State.variables.TFS.schoolPresent === 1) && ((State.variables.PC.dick === 0) || (State.variables.PC.vagina === 0) || (State.variables.PC.boobs === 0))) { + costs += 1000; + } + if(State.variables.TSS.subsidize !== 0) { + costs += 1000; + } + if(State.variables.GRI.subsidize !== 0) { + costs += 1000; + } + if(State.variables.SCP.subsidize !== 0) { + costs += 1000; + } + if(State.variables.LDE.subsidize !== 0) { + costs += 1000; + } + if(State.variables.TGA.subsidize !== 0) { + costs += 1000; + } + if(State.variables.TCR.subsidize !== 0) { + costs += 1000; + } + if(State.variables.TFS.subsidize !== 0) { + costs += 1000; + } + + if(State.variables.alwaysSubsidizeGrowth === 1) { + costs += policyCost; + } + if(State.variables.alwaysSubsidizeRep === 1) { + costs += policyCost; + } + if(State.variables.RegularParties === 1) { + costs += policyCost; + } + + if(State.variables.ProImmigrationCash === 1) { + costs += policyCost; + } + if(State.variables.AntiEnslavementCash === 1) { + costs += policyCost; + } + + if(State.variables.CoursingAssociation === 1) { + costs += 1000; + } + + if(State.variables.personalAttention === PersonalAttention.TRADE) { + costs += 10000; + } else if(State.variables.personalAttention === PersonalAttention.WAR) { + costs += 10000; + } else if(State.variables.personalAttention === PersonalAttention.SLAVING) { + costs += 10000; + } else if(State.variables.personalAttention === PersonalAttention.ENGINEERING) { + costs += 10000; + } else if(State.variables.personalAttention === PersonalAttention.MEDICINE) { + costs += 10000; + } + + if(State.variables.cyberMod !== 0 && State.variables.researchLab.built === 'true') { + costs += ((100 * State.variables.researchLab.maxSpace) + (300 * State.variables.researchLab.hired) + (100 * State.variables.researchLab.hired)); + } + + //player expenses + + if(State.variables.PC.preg === -1) { + costs += 25; + } else if(State.variables.PC.fertDrugs === 1) { + costs += 50; + } else if(State.variables.PC.preg >= 16) { + costs += 100; + } + + if(State.variables.PC.career === 'servant') { + if(State.variables.personalAttention === PersonalAttention.MAID) { + if(State.variables.PC.belly >= 5000) { + costs *= 0.80; + } else { + costs *= 0.75; + } + } else { + costs *= 0.9; + } + } + + + // clean up + if(costs < 0) { + costs = 0; + } else { + costs = Math.trunc(costs); + } + + return costs; +} + +window.getSlaveCost = function(s) { + if(!s) { return 0; } + // Data duplicated from Cost Report + var cost = 0; + var rulesCost = State.variables.rulesCost; + var foodCost = State.variables.foodCost; + var drugsCost = State.variables.drugsCost; + + // Living expenses + if((s.assignment !== Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment !== Job.ARCADE)) { + if(s.livingRules === LivingRule.LUXURIOUS) { + cost += rulesCost * (s.relationship >= 4 ? 3 : 4); + } else if(s.livingRules == LivingRule.NORMAL) { + cost += rulesCost * 2; + } else { + cost += rulesCost; + } + } else { + cost += rulesCost * .75; + } + + + // Food + cost += foodCost * 4; + switch(s.diet) { + case 'fattening': case 'muscle building': + cost += foodCost; + break; + case 'restricted': case 'slimming': + cost -= foodCost; + break; + } + if(s.weight > 130) { + cost += foodCost * 2; + } else if(s.weight > 50) { + cost += foodCost; + } else if(s.weight < -50) { + cost -= foodCost; + } + if(s.drugs === 'appetite suppressors') { + cost -= foodCost; + } + if(s.lactation > 0) { + cost += foodCost * s.lactation * (1 + Math.trunc(s.boobs/10000)); + } + if(s.preg > 5) { + if(s.assignment === Job.DAIRY && State.variables.dairyFeedersSetting > 0) { + // Extra feeding costs to support pregnancy are covered by dairy feeders. + // TODO: Include them here anyway? + } else if((s.assignment === Job.MASTER_SUITE || s.assignment === Job.CONCUBINE) + && State.variables.masterSuiteUpgradePregnancy === 1) { + // Extra feeding costs to support pregnancy are covered by master suite luxuries. + // TODO: Include them here anyway? + } else { + cost += foodCost * s.pregType * (s.pregControl === 'speed up' ? 3 : 1); + } + } + if(s.diet === 'XX' || s.diet === 'XY') { + cost += 25; + } else if(s.diet === 'cleansing') { + cost += 50; + } else if(s.diet === 'XXY') { + cost += 75; + } + + // Accessibility costs + if(State.variables.boobAccessibility !== 1 && s.boobs > 20000 + && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { + cost += 50; + } + if(State.variables.pregAccessibility !== 1 + && ((s.belly >= 60000) || (s.preg > 20 && s.pregType >= 10) || (s.preg > 10 && s.pregType >= 20) || s.bellyImplant >= 10000) + && s.assignment != Job.BABY_FACTORY && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { + cost += 100; + } + if(State.variables.dickAccessibility != 1 && s.dick > 45 && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { + cost += 50; + } + if(State.variables.ballsAccessibility != 1 && s.balls > 90 && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { + cost += 50; + } + if(State.variables.buttAccessibility != 1 && s.butt > 15 && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { + cost += 50; + } + if(!canSee(s) && (s.assignment != Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment != Job.ARCADE)) { + cost += 50; + } else if(s.eyes <= -1 && s.eyewear !== 'corrective glasses' && s.eyewear !== 'corrective contacts') { + cost += 25; + } else if(s.eyewear === 'blurring glasses' || s.eyewear === 'blurring contacts') { + cost += 25; + } + if((s.assignment !== Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment !== Job.ARCADE)) { + if(s.amp !== 0) { + if(s.amp === 1) { + cost += rulesCost; + } else { + cost += rulesCost / 2; + } + } else if(!canWalk(s)) { + cost += rulesCost; + } + } + + // Maintenance + if(s.boobs > 10000 && s.boobsImplantType === 1) { + cost += 50; + } + if(s.butt > 10 && s.buttImplantType === 1) { + cost += 50; + } + if((s.assignment !== Job.DAIRY || State.variables.dairyRestraintsSetting < 2) && (s.assignment !== Job.ARCADE)) { + if(s.preg > 35 && State.variables.universalRulesBirthing === 1) { + cost += 50; + } + } + + // Retirement account + if(State.variables.CitizenRetirement === 1) { + cost += 250; + } + + // Enemas + if(s.inflation === 3) { + switch(s.inflationType) { + case 'water': + cost += 100; + break; + case 'food': + cost += (foodCost * 4); + break; + case 'curative': case 'aphrodisiac': case 'tightener': + cost += (100 + (drugsCost * 2)); + break; + } + } else if(s.inflation === 2) { + switch(s.inflationType) { + case 'water': + cost += 50; + break; + case 'food': + cost += (foodCost * 2); + break; + case 'curative': case 'aphrodisiac': case 'tightener': + cost += (50 + (drugsCost * 2)); + break; + } + } else if(s.inflation === 1) { + switch(s.inflationType) { + case 'water': + cost += 25; + break; + case 'food': + cost += (foodCost); + break; + case 'curative': case 'aphrodisiac': case 'tightener': + cost += (25 + (drugsCost * 2)); + break; + } + } + + // Drugs + switch(s.drugs) { + case 'anti-aging cream': + cost += drugsCost * 10; + break; + case 'female hormone injections': case 'male hormone injections': case 'intensive breast injections': + case 'intensive butt injections': case 'intensive penis enhancement': case 'intensive testicle enhancement': + case 'intensive lip injections': case 'hyper breast injections': case 'hyper butt injections': + case 'hyper penis enhancement': case 'hyper testicle enhancement': case 'hyper lip injections': + case 'growth stimulants': + cost += drugsCost * 5; + break; + case 'sag-B-gone': + cost += drugsCost * .1; + break; + case 'no drugs': case 'none': + break; + default: + cost += drugsCost * 2; + break; + } + if(s.curatives > 0 && s.assignmentVisible === 1) { + cost += drugsCost * s.curatives; + } + if(s.aphrodisiacs !== 0) { + cost += drugsCost * Math.abs(s.aphrodisiacs); + } + if(s.hormones !== 0) { + cost += (drugsCost * Math.abs(s.hormones) * 0.5); + } + if(s.preg === -1 && isFertile(s)) { + cost += (drugsCost * 0.5); + } + + // Promotion costs + if(State.variables.studio === 1) { + if(s.pornFameSpending > 0) { + cost += s.pornFameSpending; + } + } + + if(isNaN(cost)) { + throw new Error('Cost calculation for slave ' + s.slaveName + ' (' + s.ID + ') failed.'); + } + return cost; +}; + +window.getSlaveStatisticData = function(s, facility) { + if(!s || !facility) { + // Base data, even without facility + return { + ID: s.ID, slaveName: s.slaveName, customLabel: s.customLabel, + income: 0, adsIncome: 0, rep: 0, cost: getSlaveCost(s), + customers: 0 /* brothel, club, ... */ + }; + } + + if(!facility.income) { + facility.income = new Map(); + } + + if(facility.income.has(s.ID)) { + return facility.income.get(s.ID); + } else { + var data = { + ID: s.ID, slaveName: s.slaveName, customLabel: s.customLabel, + income: 0, adsIncome: 0, rep: 0, cost: getSlaveCost(s), + customers: 0 /* brothel, club, ... */ + }; + facility.income.set(s.ID, data); + return data; + } +}; + +window.initFacilityStatistics = function(facility) { + facility = facility || {}; + facility.adsIncome = 0; + facility.maintenance = 0; + facility.totalIncome = 0; + facility.totalExpenses = 0; + facility.profit = 0; + facility.income = new Map(); + return facility; +} + +Number.prototype.toFixedHTML = function() { + return Number.prototype.toFixed.apply(this, arguments).replace(/\.0+$/, '<span style="opacity: 0.3">$&</span>'); +} + +/*:: rulesAssistant [script]*/ + +function panic(message) { + message = message || "panic"; + if (typeof Error !== "undefined") { + throw new Error(message); + } + throw message; +} + +function assert(condition, message) { + if (!condition) + panic(message || "Assertion failed"); +} + + +window.isSimpleCondition = function(expr, validNames) { + assert(validNames, "validNames was not given"); + + switch (expr.id) { + case "true": case "false": + return true; + + case "<": case "<=": case ">": case ">=": + return ( + expr.first.id === "(name)" // first operand should be a name + && validNames.includes(expr.first.name) // among the valid ones + && expr.second.id === "(number)" // and second should be a literal + ); + + case "&&": case "||": + return ( + (expr.first.id == "<" || expr.first.id == "<=") + && (expr.second.id == ">" || expr.second.id == ">=") + && isSimpleCondition(expr.first, validNames) + && isSimpleCondition(expr.second, validNames) + && expr.first.first.name === expr.second.first.name + ); + } + return false; +} + + +window.getVariable = function(expr) { + switch (expr.id) { + case "true": + return "always"; + case "false": + return "none"; + case "<": case "<=": case ">": case ">=": + return expr.first.name === "energy" ? "sex drive" : expr.first.name; + case "&&": case "||": + return getVariable(expr.first); + } +} + +window.changeVariable = function(expr, newVar) { + //assert(isSimpleCondition(expr), "expr is not simple"); + + switch (expr.id) { + case "true": case "false": + return { + id: "<", + first: {id: "(name)", name: newVar}, + second: {id: "(number)", value: 0} + }; + + case "<": case "<=": case ">": case ">=": + expr.first.name = newVar; + return expr; + + case "&&": case "||": + expr.first.first.name = newVar; + expr.second.first.name = newVar; + return expr; + } +} + + +window.changeComparison = function(expr, newComparison) { + assert(expr.id !== "true" && expr.id !== "false", "expr is constant"); + //assert(isSimpleCondition(expr), "expr is not simple"); + + var newOperand = { + id: newComparison, + first: {id: "(name)", name: expr.first.name}, + second: {id: "(number)", value: 0} + }; + + if (newComparison === "<" || newComparison === "<=") { + switch (expr.id) { + case "<": case "<=": + expr.id = newComparison; + return expr; + case ">": case ">=": + return { id: "&&", first: newOperand, second: expr }; + case "&&": case "||": + expr.first.id = newComparison; + return expr; + } + } else { + switch (expr.id) { + case "<": case "<=": + return { id: "&&", first: expr, second: newOperand }; + case ">": case ">=": + expr.id = newComparison; + return expr; + case "&&": case "||": + expr.second.id = newComparison; + return expr; + } + } +} + +window.removeComparison = function(expr, comparisonType) { + assert(expr.id !== "true" && expr.id !== "false", "expr is constant"); + //assert(isSimpleCondition(expr), "expr is not simple"); + assert(comparisonType === "lower" || comparisonType === "upper", + "invalid comparisonType '" + comparisonType + "'"); + + if (comparisonType === "lower") { + switch (expr.id) { + case "<": case "<=": + return expr; + case ">": case ">=": + return { id: "true" }; + case "&&": case "||": + return expr.first; + } + } else { + switch (expr.id) { + case "<": case "<=": + return { id: "false" }; + case ">": case ">=": + return expr; + case "&&": case "||": + return expr.second; + } + } +} + + +window.changeConnective = function(expr, newConnective) { + switch (expr.id) { + case "true": case "false": + case "<": case "<=": case ">": case ">=": + return expr; + case "&&": case "||": + expr.id = newConnective; + return expr; + } +} + + +window.unparseExpr = function(expr) { + switch (expr.id) { + + // literals + case "true": + return "true"; + case "false": + return "false"; + case "(number)": case "(string)": + return expr.value; + + // names + case "(name)": + return expr.name; + + // logical infix operators + case "&&": case "||": + // numerical infix comperators + case "<": case "<=": + case ">": case ">=": + case "=": case "!=": + // numerical infix operators (excluding minus) + case "+": case "*": case "/": case "^": + return [unparseExpr(expr.first), + expr.id, + unparseExpr(expr.second)].join(" "); + + // unary/prefix operators + case "!": + return expr.id + unparseExpr(expr.first); + + case "-": + if (expr.second !== undefined) { + return unparseExpr(expr.first) + " - " + unparseExpr(expr.second); + } else { + return "-" + unparseExpr(expr.first); + } + + // parentheses + case "(": + return "(" + unparseExpr(expr.first) + ")"; + } + + panic("how did I get here? unknown expr.id: " + expr.id); +} + +window.typeExpr = function(expr, env) { + switch (expr.id) { + + case "true": case "false": + return "bool"; + case "(number)": + return "number"; + case "(string)": + return "string"; + + case "(name)": + return env[expr.name]; + + case "&&": case "||": + return "bool"; + + case "<": case "<=": + case ">": case ">=": + return "bool"; + case "=": case "!=": + return "bool"; + + case "*": case "/": case "^": + return "number"; + + case "+": + return typeExpr(expr.first, env) === "string" ? "string" : "number"; + + case "!": + return typeExpr(expr.first, env); + case "-": + if (expr.second !== undefined) { + return "number"; + } else { + return typeExpr(expr.first, env); + } + + case "(": + return typeExpr(expr.first, env); + } +} + +window.evalExpr = function(expr, env) { + switch (expr.id) { + + case "true": + return true; + case "false": + return false; + case "(number)": + return expr.value; + case "(string)": + if(expr.value.startsWith('"') && expr.value.endsWith('"')) { + return JSON.parse(expr.value); + } else { + return expr.value; + } + case "(name)": + return env[expr.name]; + + case "&&": + return evalExpr(expr.first, env) && evalExpr(expr.second, env); + case "||": + return evalExpr(expr.first, env) || evalExpr(expr.second, env); + case "<": + return evalExpr(expr.first, env) < evalExpr(expr.second, env); + case "<=": + return evalExpr(expr.first, env) <= evalExpr(expr.second, env); + case ">": + return evalExpr(expr.first, env) > evalExpr(expr.second, env); + case ">=": + return evalExpr(expr.first, env) >= evalExpr(expr.second, env); + case "=": + return evalExpr(expr.first, env) == evalExpr(expr.second, env); + case "!=": + return evalExpr(expr.first, env) != evalExpr(expr.second, env); + + case "+": + return evalExpr(expr.first, env) + evalExpr(expr.second, env); + case "*": + return evalExpr(expr.first, env) * evalExpr(expr.second, env); + case "/": + return evalExpr(expr.first, env) / evalExpr(expr.second, env); + case "^": + return Math.pow(evalExpr(expr.first, env), evalExpr(expr.second, env)); + + case "!": + return !evalExpr(expr.first, env); + case "-": + if (expr.second !== undefined) { + return evalExpr(expr.first, env) - evalExpr(expr.second, env); + } else { + return -evalExpr(expr.first, env); + } + + case "(": + return evalExpr(expr.first, env); + } +} + + +window.optimizeExpr = function(expr) { + switch (expr.id) { + case "true": case "false": + case "(number)": case "(string)": + case "(name)": + return expr; + + case "-": + // The only "optimization" we are doing. Obviously, this is not done + // for the sake of speed, rather, to make the UI and isSimpleCondition + // simpler, since they don't have to explicitly check for negative + // numbers. + if (expr.second === undefined && expr.first.id === "(number)") + return {id: "(number)", value: evalExpr(expr)}; + // fallthrough, if the minus was not unary + + case "&&": case "||": + case "<": case "<=": case ">": case ">=": + case "=": case "!=": + case "+": case "*": case "/": case "^": + return { + id: expr.id, + first: optimizeExpr(expr.first), + second: optimizeExpr(expr.second) + }; + + case "!": case "(": + return { + id: expr.id, + first: optimizeExpr(expr.first) + }; + } +} + +window.printError = function(exprStr, error) { + var result = [], + inError = false; + for (var i = 0; i < exprStr.length; i++) { + if (i === error.index) + result.push("@@.red;"); + result.push(exprStr[i]); + } + result.push("@@"); + return result.join(""); +} + +/*:: rulesAssistantParser.tw [script]*/ + +// Implements a Top Down Operator Precedence parser, also know as a Pratt +// parser, after its "inventor", Vaughan Pratt. The one implemented here +// closely follows what's presented here, +// * http://javascript.crockford.com/tdop/tdop.html +// by Douglas Crockford, that uses that technique in JSLint. Other relevant +// resources on the interweb +// * http://effbot.org/zone/simple-top-down-parsing.htm +// * http://eli.thegreenplace.net/2010/01/02/top-down-operator-precedence-parsing +// * http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/ +// * https://higherlogics.blogspot.gr/2009/11/extensible-statically-typed-pratt.html +// * https://github.com/fholm/Vaughan +// * https://github.com/DasIch/pratt +// included here mostly as bookmarks for potential future reference. +// +// With regards to the lexer, I used the following with many changes +// * http://eli.thegreenplace.net/2013/06/25/regex-based-lexical-analysis-in-python-and-javascript/ +// +// Other useful things that I may not use any more but wouldn't want to lose, +// * https://plainjs.com/javascript/utilities/merge-two-javascript-objects-19/ +// * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + + +if (!RegExp.escape) { + RegExp.escape = function(s) { + return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + }; +} + +if (!String.prototype.format) { + String.prototype.format = function() { + var args = arguments; + return this.replace(/{(\d+)}/g, function(match, number) { + return typeof args[number] !== "undefined" ? args[number] : match; + }); + }; +} + +function panic(index, msg) { + throw {index: index, message: msg}; +} + + + +var Lexer = function(skipWhitespace) { + this.rules = []; + this.index = 0; + this.buffer = ""; + this.skipWhitespace = skipWhitespace ? /\S/ : null; +} + +Lexer.prototype.addRule = function(id, defn) { + var pattern = (defn && defn.pattern) || RegExp.escape(id); + this.rules.push({ + id: id, + pattern: new RegExp('^' + pattern) + }); +} + +Lexer.prototype.feed = function(buffer) { + this.buffer = buffer; + this.index = 0; +} + +Lexer.prototype.nextInterestingChar = function() { + if (this.skipWhitespace) { + var match = this.skipWhitespace.exec(this.buffer.substr(this.index)); + return match ? this.index + match.index + : this.buffer.length; + } + return this.index; +} + +Lexer.prototype.next = function() { + this.index = this.nextInterestingChar(); + + if (this.index >= this.buffer.length) + return { done: true }; + + for (var i = 0; i < this.rules.length; ++i) { + var rule = this.rules[i], + match = rule.pattern.exec(this.buffer.substr(this.index)); + if (match) { + var token = { + id: rule.id, + value: match[0], + index: this.index, + }; + this.index += token.value.length; + return { done: false, value: token }; + } + } + + panic(this.index, "illegal character"); +} + + + +var BaseSymbol = { + lbp: 0, + nud: function() { panic(this.index, "unexpected '" + this.id + "'"); }, + led: function() { panic(this.index, "not an operator"); } +}; + +var Parser = function(eofToken) { + this.lexer = new Lexer(true); + this.currentSymbol = null; + + this.eofToken = eofToken; + this.symbolTable = { + [this.eofToken]: Object.create(BaseSymbol, {id: {value: this.eofToken}}) + }; +} + +Parser.prototype.addSymbol = function(id, defn) { + var s = this.symbolTable[id]; + if (s) { + if (defn) { + if (defn.lbp !== undefined) s.lbp = defn.lbp; + if (defn.nud !== undefined) s.nud = defn.nud; + if (defn.led !== undefined) s.led = defn.led; + } + } else { + s = Object.create(BaseSymbol); + s.id = id; + if (defn && defn.lbp !== undefined) s.lbp = defn.lbp; + if (defn && defn.nud) s.nud = defn.nud; + if (defn && defn.led) s.led = defn.led; + this.symbolTable[id] = s; + this.lexer.addRule(id, defn); + } + return this; +} + +Parser.prototype.addInfix = function(id, lbp, callback) { + this.addSymbol(id, { + lbp: lbp, + led: function(p, left) { return callback(this, left, p.parse(lbp)); } + }); + return this; +} + +Parser.prototype.addInfixR = function(id, lbp, callback) { + this.addSymbol(id, { + lbp: lbp, + led: function(p, left) { return callback(this, left, p.parse(lbp-1)); } + }); + return this; +} + +Parser.prototype.addPrefix = function(id, callback) { + this.addSymbol(id, { + // FIXME: this should not always be 70 + nud: function (p) { return callback(this, p.parse(70)); } + }); + return this; +} + +Parser.prototype.addConstant = function(id, callback) { + this.addSymbol(id, { + nud: function () { return callback(this); } + }); + return this; +} + +Parser.prototype.advance = function(id) { + if (id !== undefined && this.currentSymbol.id !== id) + panic(this.currentSymbol.index, "expected '" + id + "', got '" + this.currentSymbol.id + "'"); + + var iter = this.lexer.next(), + token = iter.value; + if (iter.done) + token = { + id: this.eofToken, + index: this.lexer.buffer.length + }; + + var symbol = this.symbolTable[iter.done ? this.eofToken : token.id]; + if (!symbol) + panic(token.index, "unknown token '" + token.id + "'"); + + var newSymbol = Object.create(symbol); + newSymbol.value = token.value; + newSymbol.index = token.index; + return this.currentSymbol = newSymbol; +} + +Parser.prototype.parse = function(rbp) { + var symbol = this.currentSymbol; + this.advance(); + var left = symbol.nud(this); + + rbp = rbp || 0; + while (rbp < this.currentSymbol.lbp) { + symbol = this.currentSymbol; + this.advance(); + left = symbol.led(this, left); + } + return left; +} + +Parser.prototype.parseString = function(string) { + this.lexer.feed(string); + this.advance(); // "kickstart" the lexer + var result = this.parse(); + this.advance(this.eofToken); + return result; +} + + + +var ASTBuilder = function(eofToken) { + this.parser = new Parser(eofToken); +} + +ASTBuilder.prototype.addSymbol = function(id, extra) { + this.parser.addSymbol(id, extra); + return this; +} + +ASTBuilder.prototype.addInfix = function(id, lbp) { + this.parser.addInfix(id, lbp, function(symbol, left, right) { + return { + id: id, + first: left, + second: right, + }; + }); + return this; +} + +ASTBuilder.prototype.addInfixR = function(id, lbp) { + this.parser.addInfixR(id, lbp, function(symbol, left, right) { + return { + id: id, + first: left, + second: right, + }; + }); + return this; +} + +ASTBuilder.prototype.addPrefix = function(id) { + this.parser.addPrefix(id, function(symbol, left) { + return { + id: id, + first: left, // it's not really the left is it? + }; + }); + return this; +} + +ASTBuilder.prototype.addConstant = function(id, value) { + this.parser.addConstant(id, function(symbol) { + return { + id: id, + value: value, + }; + }); + return this; +} + + +var op = { + add: function(a, b) { return a + b; }, + sub: function(a, b) { return a - b; }, + mul: function(a, b) { return a * b; }, + div: function(a, b) { return a / b; }, + pow: function(a, b) { return Math.pow(a, b); }, + + neg: function(a) { return -a; }, + + lt: function(a, b) { return a < b; }, + le: function(a, b) { return a <= b; }, + gt: function(a, b) { return a > b; }, + ge: function(a, b) { return a >= b; }, + eq: function(a, b) { return a === b; }, + neq: function(a, b) { return a !== b; }, + + not: function(a) { return !a; }, + or: function(a, b) { return a || b; }, + and: function(a, b) { return a && b; }, +}; + +var parserBuilder = new ASTBuilder("(end)") + // XXX: need to be first to not be recognised as a (name) + .addConstant("true", true) + .addConstant("false", false) + + .addSymbol("(number)", { + pattern: "\\d+", + nud: function() { + return { + id: "(number)", + value: parseInt(this.value), + }; + } + }) + + .addSymbol("(string)", { + pattern: "\"(?:[^\\\\\"]|\\\\\"|\\\\(?!\"))*\"", + nud: function(p) { + return { + id: "(string)", + value: this.value.replace(/^\"|\"$/g, ""), + }; + } + }) + + .addSymbol("(name)", { + pattern: "[a-zA-Z]\\w*", + nud: function(p) { + return { + id: "(name)", + name: this.value, + }; + } + }) + + .addInfix("+", 50, op.add) + .addInfix("-", 50, op.sub) + .addInfix("*", 60, op.mul) + .addInfix("/", 60, op.div) + .addInfixR("^", 70, op.pow) + + .addPrefix("-", op.neg) + + .addInfix("<=", 40, op.le) + .addInfix("<", 40, op.lt) + .addInfix(">=", 40, op.ge) + .addInfix(">", 40, op.gt) + .addInfix("!=", 40, op.neq) + .addInfix("=", 40, op.eq) + + .addPrefix("!", op.not) + .addInfix("||", 30, op.or) + .addInfix("&&", 30, op.and) + + .addSymbol(")") + .addSymbol("(", { + nud: function(p) { + var expr = p.parse(0); + p.advance(")"); + return expr; + } + }); + +var parser = parserBuilder.parser; +window.parser = parser; + +window.parseCondition = function(condition) { + try { + return {expr: parser.parseString(condition), error: null}; + } catch (e) { + return {expr: null, error: e}; + } +} + +/*:: textinput [script]*/ + +Macro.add("textinput", { + // Signifies that the macro is a container macro. + tags: null, + + handler: function() { + if (this.args.length < 2) { + var errors = []; + if (this.args.length < 1) { errors.push("variable name"); } + if (this.args.length < 2) { errors.push("default value"); } + return this.error("no " + errors.join(" or ") + " specified"); + } + + // Ensure that the variable name argument is a string. + if (typeof this.args[0] !== "string") { + return this.error("variable name argument is not a string"); + } + + var varName = this.args[0].trim(); + + // Try to ensure that we receive the variable's name (incl. sigil), not its value. + if (varName[0] !== "$" && varName[0] !== "_") { + return this.error("variable name '" + varName + "' is missing its sigil ($ or _)"); + } + + var that = this; + var defaultValue = this.args[1]; + var el = document.createElement("textarea"); + + // Setup and append the textarea element to the output buffer. + jQuery(el) + .attr({ + rows: 4, + // cols: 68, // instead of setting "cols" we set the `min-width` in CSS + tabindex: 0 // for accessiblity + }) + .addClass("macro-textarea") // "hijack" the .macro-textarea class + .on("input", function() { + Wikifier.setValue(varName, this.value); + if (that.payload[0].contents !== "") + Wikifier.wikifyEval(that.payload[0].contents.trim()); + }) + .appendTo(this.output); + + // Set the story variable and textarea element to the default value. + Wikifier.setValue(varName, defaultValue); + + // Ideally, we should be setting `.defaultValue` here, but IE doesn't support it, + // so we have to use `.textContent`, which is equivalent. + el.textContent = defaultValue; + } +}); + +/*:: Bug Report [script]*/ + +/*! <<bugreport>> macro for SugarCube 2.x */ +!function(){"use strict";if("undefined"==typeof version||"undefined"==typeof version.title||"SugarCube"!==version.title||"undefined"==typeof version.major||version.major<2)throw new Error("<<bugreport>> macro requires SugarCube 2.0 or greater, aborting load");Macro.add("bugreport",{handler:function(){function serializeVariables(varObj,diffObj,doSort){function renderDiff(diff,orig){for(var keys=Object.keys(diff||{}),render=orig?clone(orig):{},i=0,klen=keys.length;klen>i;i++){var p=keys[i],diffP=diff[p];if(diffP===Diff.Op.Delete)delete render[p];else if(Array.isArray(diffP))switch(diffP[0]){case Diff.Op.SpliceArray:try{render.splice(diffP[1],1+(diffP[2]-diffP[1]))}catch(e){}break;case Diff.Op.Copy:render[p]=clone(diffP[1]);break;case Diff.Op.CopyDate:render[p]=new Date(diffP[1])}else{var recurse=renderDiff(diffP,render[p]);0!==Object.keys(recurse).length&&(render[p]=recurse)}}return render}var varList=[],diff=renderDiff(Diff.diff(varObj,diffObj));for(var p in diff){var sName="$"+(-1===p.search(/[^\w]/)?p:'"'+p+'"');varList.push(sName+"="+JSON.stringify(diff[p]))}return doSort&&("function"==typeof doSort?varList.sort(doSort):varList.sort()),0!==varList.length?varList.join(", "):""}var srcMatch,passages,varsPre,varsPost,dialog,dataEl,info=null!=this.args[0]&&Story.has(this.args[0])?Story.get(this.args[0]):null,last=State.length-1,source=unescape(window.location);null!==(srcMatch=/\/([^\/]+)$/.exec(source))&&(source=srcMatch[1]),passages=[];for(var i=0;last>=i;i++)passages.push('"'+State.index(i).title+'"');passages=passages.join(", "),varsPre=serializeVariables(State.index(0).variables,State.index(last).variables),varsPost=serializeVariables(State.index(last).variables,State.variables),dialog=UI.setup("Bug Report","bugreport"),dialog.innerHTML=(null!==info?'<div id="bugreport-info"></div>':"")+'<div><b>Bug report:</b> <a id="bugreport-data-select" class="link-internal macro-bugreport">[Select]</a></div><code id="bugreport-data" tabindex="0"></code>'+(/applewebkit|chrome/.test(Browser.userAgent)?"":'<div class="scroll-pad"> </div>'),dataEl=dialog.querySelector("#bugreport-data"),null!==info&&new Wikifier(dialog.querySelector("#bugreport-info"),info.processText()),addAccessibleClickHandler("#bugreport-data-select",function(self){return function(){jQuery(dataEl).focus(),self.selectData(dataEl)}}(this.self)),insertText(dataEl,"[spoiler][code]"),insertElement(dataEl,"br"),insertText(dataEl,"SOURCE: "+source),insertElement(dataEl,"br"),insertElement(dataEl,"br"),insertText(dataEl,"PASSAGES:"),insertElement(dataEl,"br"),insertText(dataEl,passages),insertElement(dataEl,"br"),insertElement(dataEl,"br"),insertText(dataEl,"VARIABLES (PRE-EXECUTION):"),insertElement(dataEl,"br"),varsPre&&(insertText(dataEl,varsPre),insertElement(dataEl,"br")),insertElement(dataEl,"br"),insertText(dataEl,"VARIABLES (POST-EXECUTION):"),insertElement(dataEl,"br"),varsPost&&(insertText(dataEl,varsPost),insertElement(dataEl,"br")),insertText(dataEl,"[/code][/spoiler]"),UI.open()},selectData:function(e){var s,r;if(window.getSelection){s=window.getSelection();if(s.setBaseAndExtent){var l=(e.innerText.length>1)?e.innerText.length-1:1;try{s.setBaseAndExtent(e,0,e,l)}catch(error){r=document.createRange();r.selectNodeContents(e);s.removeAllRanges();s.addRange(r)}}else{if(window.opera&&e.innerHTML.substring(e.innerHTML.length-4)==='<br>'){e.innerHTML=e.innerHTML+' '}var r=document.createRange();r.selectNodeContents(e);s.removeAllRanges();s.addRange(r)}}else if(document.getSelection){s=document.getSelection();r=document.createRange();r.selectNodeContents(e);s.removeAllRanges();s.addRange(r)}else if(document.selection){r=document.body.createTextRange();r.moveToElementText(e);r.select()}}})}(); + +/*:: Display Variables [script]*/ + +/*! <<checkvars>> macro for SugarCube 2.x */ +!function(){"use strict";if("undefined"==typeof version||"undefined"==typeof version.title||"SugarCube"!==version.title||"undefined"==typeof version.major||version.major<2)throw new Error("<<checkvars>> macro requires SugarCube 2.0 or greater, aborting load");Macro.add("checkvars",{handler:function(){function toString(value,indent){var baseType=typeof value;switch(baseType){case"number":return isNaN(value)?"NaN":isFinite(value)?String(value):"Infinity";case"string":return JSON.stringify(value);case"function":return"(function)";default:if("object"!==baseType||null==value)return String(value);var objType=Object.prototype.toString.call(value);if("[object Date]"===objType)return'(object: Date, value: "'+value.toISOString()+'")';if("[object RegExp]"===objType)return"(object: RegExp, value: "+value.toString()+")";var opener,closer,result=[],indentText=" ";return indent||(indent=""),("[object Set]"===objType||value instanceof Set)&&(value=Array.from(value)),Array.isArray(value)?(opener="[\n",closer="\n"+indent+"]",value.forEach(function(p,i){result.push(indent+indentText+i+" ⇒ "+toString(value[i],indent+indentText))}),Object.keys(value).forEach(function(p){/^\d+$/.test(p)||result.push(indent+indentText+toString(p)+" ⇒ "+toString(value[p],indent+indentText))})):"[object Map]"===objType||value instanceof Map?(opener="{\n",closer="\n"+indent+"}",Array.from(value).map(function(kv){result.push(indent+indentText+toString(kv[0],indent+indentText)+" ⇒ "+toString(kv[1],indent+indentText))})):(opener="{\n",closer="\n"+indent+"}",Object.keys(value).forEach(function(p){result.push(indent+indentText+toString(p)+" ⇒ "+toString(value[p],indent+indentText))})),opener+result.join(",\n")+closer}}var dialog,sv=State.variables,names=Object.keys(sv);if(dialog=UI.setup("Story $variables","checkvars"),0===names.length)return dialog.innerHTML="<h1>Story $variables (<code>State.variables</code>):</h1><p><em>No $variables currently set…</em></p>",void UI.open();dialog.innerHTML="<h1>Story $variables (<code>State.variables</code>):</h1><table><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody></tbody></table>"+(/applewebkit|chrome/.test(Browser.userAgent)?"":'<div class="scroll-pad"> </div>');var tbody=dialog.querySelector("tbody");names.sort(function(a,b){return Util.isNumeric(a)&&Util.isNumeric(b)?Number(a)-Number(b):a.localeCompare(b)});for(var i=0;i<names.length;i++){var tr=document.createElement("tr"),tdName=document.createElement("td"),tdValue=document.createElement("td");tdName.textContent="$"+names[i],tdValue.textContent=toString(sv[names[i]]),tr.appendChild(tdName),tr.appendChild(tdValue),tbody.appendChild(tr)}UI.open()}})}(); + +/*:: Foreach Macro JS [script]*/ + +Macro.add('foreach', { + skipArgs : true, + tags : null, + + handler() { + const payload = this.payload[0].contents.replace(/\n$/, ''); + let statement = this.args.raw.trim(); + let variable; + let array; + let result; + + if (statement.length !== 0) { + const parts = statement.match(/^(\S+?)\s+of\s+(\S.*?)\s*$/i); + if(parts !== null) { + variable = parts[1]; + array = parts[2]; + } + } + if(!variable || !array) { + return this.error('invalid syntax, format: <<foreach variable of array-expression>>... <</foreach>>'); + } + + try { + result = Scripting.evalTwineScript(array); + } catch (ex) { + return this.error(`bad evaluation: ${typeof ex === 'object' ? ex.message : ex}`); + } + + let resultLength = result['length']; + + // We don't check for "instanceof Array" to also be able to pass arguments or other strange objects + if(typeof resultLength !== 'number' || (resultLength % 1) !== 0) { + return this.error("bad evaluation: '" + result + "' is not an array or array-like object"); + } + + if(resultLength > Config.macros.maxLoopIterations) { + return this.error('Array too large for maxLoopIterations (' + resultLength + ' > ' + Config.macros.maxLoopIterations + ')'); + } + + if(!new RegExp(`^(${Patterns.variable})$`).test(variable)) { + return this.error('not a variable identifier: ' + variable); + } + + if(resultLength <= 0) { + // Don't bother with empty stuff + return; + } + + Config.debug && this.debugView.modes({block: true}); + + payload.replace(/^\n/, ''); + for(let i = 0; i < resultLength; ++ i) { + Wikifier.setValue(variable, result[i]); + new Wikifier(this.output, payload); + } + } +}); + +/*:: UtilJS [script]*/ + +/* + * Height.mean(nationality, race, genes, age) - returns the mean height for the given combination and age in years (>=2) + * Height.mean(nationality, race, genes) - returns the mean adult height for the given combination + * Height.mean(slave) - returns the mean (expected) height for the given slave + * + * Height.random(nationality, race, genes, age) - returns a random height for the given combination, + * with Gaussian distribution (mean = 1, standard deviation = 0.05) around the mean height + * Height.random(nationality, race, genes) - returns a random height for the given combination of an adult, as above + * Height.random(slave[, options]) - returns a random height for the given slave, as above. + * The additional options object can modify how the values are generated + * in the same way setting them as global configuration would, but only for this + * specific generation. + * + * Example: Only generate above-average heights based on $activeSlave: + * Height.random($activeSlave, {limitMult: [0, 5]}) + * + * Height.forAge(height, age, genes) - returns the height adapted to the age and genes + * Height.forAge(height, slave) - returns the height adapted to the slave's age and genes + * + * Height.config(configuration) - configures the random height generator globally and returns the current configuration + * The options and their default values are: + * limitMult: [-3, 3] - Limit to the values the underlying (normal) random generator returns. + * In normal use, the values are almost never reached; only 0.27% of values are + * outside this range and need to be regenerated. With higher skew (see below), + * this might change. + * spread: 0.05 - The random values generated are multiplied by this and added to 1 to generate + * the final height multiplier. The default value together with the default limitMult + * means that the generated height will always fall within (1 - 0.05 * 3) = 85% and + * (1 + 0.05 * 3) = 115% of the mean height. + * Minimum value: 0.001; maximum value: 0.5 + * skew: 0 - How much the height distribution skews to the right (positive) or left (negative) side + * of the height. + * Minimum value: -1000, maximum value: 1000 + * limitHeight: [0, 999] - Limit the resulting height range. Warning: A small height limit range + * paired with a high spread value results in the generator having to + * do lots of work generating and re-generating random heights until + * one "fits". + */ +window.Height = (function(){ + 'use strict'; + + // Global configuration (for different game modes/options/types) + var minMult = -3.0; + var maxMult = 3.0; + var skew = 0.0; + var spread = 0.05; + var minHeight = 0; + var maxHeight = 999; + + // Configuration method for the above values + const _config = function(conf) { + if(_.isUndefined(conf)) { + return {limitMult: [minMult, maxMult], limitHeight: [minHeight, maxHeight], skew: skew, spread: spread}; + } + if(_.isFinite(conf.skew)) { skew = Math.clamp(conf.skew, -1000, 1000); } + if(_.isFinite(conf.spread)) { spread = Math.clamp(conf.spread, 0.001, 0.5); } + if(_.isArray(conf.limitMult) && conf.limitMult.length === 2 && conf.limitMult[0] !== conf.limitMult[1] + && _.isFinite(conf.limitMult[0]) && _.isFinite(conf.limitMult[1])) { + minMult = Math.min(conf.limitMult[0], conf.limitMult[1]); + maxMult = Math.max(conf.limitMult[0], conf.limitMult[1]); + } + if(_.isArray(conf.limitHeight) && conf.limitHeight.length === 2 && conf.limitHeight[0] !== conf.limitHeight[1] + && _.isFinite(conf.limitHeight[0]) && _.isFinite(conf.limitHeight[1])) { + minHeight = Math.min(conf.limitHeight[0], conf.limitHeight[1]); + maxHeight = Math.max(conf.limitHeight[0], conf.limitHeight[1]); + } + return {limitMult: [minMult, maxMult], limitHeight: [minHeight, maxHeight], skew: skew, spread: spread}; + } + + /* if you can find an average for an undefined, add it in! */ + const xxMeanHeight = { + "American.white": 165, "American.black": 163.6, "American.latina": 158.9, "American.asian": 158.4, "American": 161.8, + "Afghan": 163.8, "Algerian": 162, "Argentinian": 159.6, "Armenian": 158.1, "Australian": 161.8, "Austrian": 166, + "Bangladeshi": 150.6, "Belarusian": 166.8, "Belgian": 168.1, "Bolivian": 142.2, "Brazilian": 158.8, + "British": 161.9, "Burmese": undefined, "Canadian": 162.3, "Chilean": 157.2, "Chinese": 155.8, "Colombian": 158.7, + "Congolese": 157.7, "Cuban": 156, "Czech": 167.22, "Danish": 168.7, "Dominican": 156.4, "Dutch": 169, "Egyptian": 158.9, + "Emirati": 158.9, "Estonian": 165.5, "Ethiopian": 157.6, "Filipina": 151.8, "Finnish": 165.3, "French": 162.5, + "German": 162.8, "Ghanan": 158.5, "Greek": 165, "Guatemalan": 147.3, "Haitian": 158.6, "Hungarian": 164, + "Icelandic": 168, "Indian": 151.9, "Indonesian": 147, "Iranian": 157.2, "Iraqi": 155.8, "Irish": 163, "Israeli": 166, + "Italian": 162.5, "Jamaican": 160.8, "Japanese": 158, "Jordanian": 158.2, "Kazakh": 159.8, "Kenyan": 159.4, + "Korean": 156.15, "Lebanese": 165, "Libyan": 160.5, "Lithuanian": 167.5, "Malaysian": 154.7, "Malian": 160.4, + "Mexican": 154, "Moroccan": 158.5, "Nepalese": 150.8, "Nigerian": 163.8, "Norwegian": 157.8, "Omani": undefined, + "Pakistani": 151.9, "Peruvian": 151, "Polish": 165.1, "Portuguese": 165.1, "Puerto Rican": 158.9, "Romanian": 157, + "Russian": 164.1, "Saudi": 156.3, "Scottish": 163, "Serbian": 166.8, "Slovak": 165.6, "South African": 159, + "Spanish": 162.6, "Sudanese": 180.0, "Swedish": 166.8, "Swiss": 162.5, "Tanzanian": 156.6, "Thai": 159, + "Tunisian": 160, "Turkish": 161.9, "Ugandan": 159.2, "Ukrainian": 164.8, "Uzbek": 159.9, "Venezuelan": 159, + "Vietnamese": 155.2, "Yemeni": undefined, "a New Zealander": 164, "Zimbabwean": 160.3, "Sammarinese": undefined, + "Marshallese": undefined, "Syrian": 156.3, "Bermudian": undefined, "Uruguayan": 158.0, "Monégasque": undefined, + "Montenegrin": 168.4, "Cambodian": 152.4, "Cameroonian": 161.3, "Gabonese": 158.4, "Djiboutian": undefined, + "Greenlandic": undefined, "Tuvaluan": undefined, "Zambian": 158.5, "Albanian": 161.8, "Bruneian": undefined, + "Singaporean": 160.0, "Croatian": 166.3, "Bulgarian": 163.2, "Laotian": undefined, "Mongolian": 157.7, "Taiwanese": 160.4, + "Belizean": undefined, "Grenadian": undefined, "I-Kiribati": undefined, "Malagasy": 154.3, "Maldivian": undefined, + "Bosnian": 171.1, "Kosovan": undefined, "Macedonian": undefined, "Honduran": 152.0, "Maltese": 159.9, + "Nauruan": undefined, "Micronesian": undefined, "Costa Rican": undefined, "Salvadoran": 160.3, "Nicaraguan": 153.7, + "Panamanian": 152.0, "Nigerien": 157.8, "Andorran": undefined, "Bulgarian": 163.2, "Luxembourgian": 164.8, + "Moldovan": 161.2, "Antiguan": 156.8, "Aruban": 158, "Azerbaijani": 162.4, "Bahamian": 157.1, "Bahraini": 165.2, + "Barbadian": 158.5, "Bhutanese": 153.4, "Burundian": 157, "a Cook Islander": 162.3, "Cypriot": 163.4, + "Dominiquais": 157.2, "East Timorese": 149.1, "Ecuadorian": 153.4, "Fijian": 161.8, "French Guianan": 157, + "Georgian": 160.5, "Guyanese": 157.9, "Kuwaiti": 156.1, "Kyrgyz": 158.6, "Latvian": 165.7, "a Liechtensteiner": 164.3, + "Niuean": 160.4, "Palauan": 161.4, "Palestinian": 158.2, "Papua New Guinean": 150.7, "Paraguayan": 158.3, "Qatari": 155, + "Kittitian": 156.9, "Saint Lucian": 157.1, "Vincentian": 156.2, "Samoan": 161, "Seychellois": 155.8, + "Slovene": 167.4, "a Solomon Islander": 151.8, "Sri Lankan": 151.4, "Surinamese": 155.7, "Tajik": 161.2, "Tongan": 159.5, + "Trinidadian": 157.4, "Turkmen": 158.2, "Ni-Vanuatu": 149.8, "Vatican": 162.5, + "": 162.5 // default + }; + const xyMeanHeight = { + "American.white": 178.2, "American.black": 177.4, "American.latina": 172.5, "American.asian": 172.5, "American": 176.4, + "Afghan": undefined, "Algerian": 172.2, "Argentinian": 174.46, "Armenian": undefined, "Australian": 175.6, + "Austrian": 179, "Bangladeshi": 150.8, "Belarusian": 176.9, "Belgian": 178.7, "Bolivian": 160, "Brazilian": 170.7, + "British": 175.3, "Burmese": 168.0, "Canadian": 175.1, "Chilean": 169.6, "Chinese": 167.1, "Colombian": 170.6, + "Congolese": 158.9, "Cuban": 168, "Czech": 180.31, "Danish": 180.4, "Dominican": 168.4, "Dutch": 181, "Egyptian": 170.3, + "Emirati": 170.3, "Estonian": 179.1, "Ethiopian": undefined, "Filipina": 163.5, "Finnish": 178.9, "French": 175.6, + "German": 175.4, "Ghanan": 169.5, "Greek": 177, "Guatemalan": 157.5, "Haitian": undefined, "Hungarian": 176, + "Icelandic": 181, "Indian": 164.7, "Indonesian": 158, "Iranian": 170.3, "Iraqi": 165.4, "Irish": 177, "Israeli": 177, + "Italian": 176.5, "Jamaican": 171.8, "Japanese": 172, "Jordanian": undefined, "Kazakh": 169, "Kenyan": 170.0, + "Korean": 168.15, "Lebanese": 176, "Libyan": 171.3, "Lithuanian": 177.2, "Malaysian": 166.3, "Malian": 171.3, + "Mexican": 167, "Moroccan": 172.7, "Nepalese": 163, "Nigerian": 163.8, "Norwegian": 179.63, "Omani": undefined, + "Pakistani": 164.7, "Peruvian": 164, "Polish": 178.7, "Portuguese": 173.9, "Puerto Rican": 172.5, "Romanian": 172, + "Russian": 177.2, "Saudi": 168.9, "Scottish": 177.6, "Serbian": 182, "Slovak": 179.4, "South African": 168, + "Spanish": 173.1, "Sudanese": 190.0, "Swedish": 181.5, "Swiss": 178.2, "Tanzanian": undefined, "Thai": 170.3, + "Tunisian": 172.3, "Turkish": 173.6, "Ugandan": undefined, "Ukrainian": 176.5, "Uzbek": 175.4, "Venezuelan": 169, + "Vietnamese": 165.7, "Yemeni": 159.9, "a New Zealander": 177, "Zimbabwean": undefined, "Sammarinese": undefined, + "Marshallese": undefined, "Syrian": 173.0, "Bermudian": undefined, "Uruguayan": 170.0, "Monégasque": undefined, + "Montenegrin": 183.2, "Cambodian": 162.5, "Cameroonian": 170.6, "Gabonese": undefined, "Djiboutian": undefined, + "Greenlandic": undefined, "Tuvaluan": undefined, "Zambian": undefined, "Albanian": 174.0, "Bruneian": undefined, + "Singaporean": 170.6, "Andorran": undefined, "Croatian": 180.5, "Bulgarian": 175.2, "Laotian": 160.5, + "Mongolian": 168.4, "Taiwanese": 171.4, "Belizean": undefined, "Grenadian": undefined, "I-Kiribati": undefined, + "Malagasy": 161.5, "Maldivian": undefined, "Bosnian": 183.9, "Kosovan": undefined, "Macedonian": undefined, + "Honduran": undefined, "Maltese": 169.9, "Nauruan": undefined, "Micronesian": undefined, "Costa Rican": undefined, + "Salvadoran": undefined, "Nicaraguan": undefined, "Panamanian": 165.0, "Nigerien": 163.8, "Luxembourgian": 179.9, + "Moldovan": undefined, ".white": 177.6, "Antiguan": 164.8, "Aruban": 165.1, "Azerbaijani": 171.8, "Bahamian": 167.2, "Bahraini": 165.1, + "Barbadian": 169.3, "Bhutanese": 167.2, "Burundian": 164.1, "a Cook Islander": 173.4, "Cypriot": 177.2, + "Dominiquais": 168.1, "East Timorese": 161.2, "Ecuadorian": 167.5, "Fijian": 170.4, "French Guianan": 168, + "Georgian": 172.7, "Guyanese": 168.6, "Kuwaiti": 169.2, "Kyrgyz": 170.4, "Latvian": 174.2, "a Liechtensteiner": 175.4, + "Niuean": 169.7, "Palauan": 174.6, "Palestinian": 169.7, "Papua New Guinean": 163.5, "Paraguayan": 168.8, "Qatari": 166.2, + "Kittitian": 164.4, "Saint Lucian": 168.3, "Vincentian": 165.4, "Samoan": 173, "Seychellois": 168.5, + "Slovene": 180.3, "a Solomon Islander": 163.1, "Sri Lankan": 163.6, "Surinamese": 165.2, "Tajik": 175.2, "Tongan": 168.2, + "Trinidadian": 170.8, "Turkmen": 171.4, "Ni-Vanuatu": 160.5, "Vatican": 176.5, + "": 172.5 // defaults + }; + + // Helper method - table lookup for nationality/race combinations + const nationalityMeanHeight = function(table, nationality, race, def) { + return table[nationality + "." + race] || table[nationality] || table["." + race] || table[""] || def; + }; + + // Helper method - generate two independent Gaussian numbers using Box-Muller transform + const gaussianPair = function() { + let r = Math.sqrt(-2.0 * Math.log(1 - Math.random())); + let sigma = 2.0 * Math.PI * (1 - Math.random()); + return [r * Math.cos(sigma), r * Math.sin(sigma)]; + }; + + // Helper method: Generate a skewed normal random variable with the skew s + // Reference: http://azzalini.stat.unipd.it/SN/faq-r.html + const skewedGaussian = function(s) { + let randoms = gaussianPair(); + if(s === 0) { + // Don't bother, return an unskewed normal distribution + return randoms[0]; + } + let delta = s / Math.sqrt(1 + s * s); + let result = delta * randoms[0] + Math.sqrt(1 - delta * delta) * randoms[1]; + return randoms[0] >= 0 ? result : -result; + }; + + // Height multiplier generator; skewed gaussian according to global parameters + const multGenerator = function() { + let result = skewedGaussian(skew); + while(result < minMult || result > maxMult) { + result = skewedGaussian(skew); + } + return result; + }; + + // Helper method: Generate a height based on the mean one and limited according to config. + const heightGenerator = function(mean) { + let result = mean * (1 + multGenerator() * spread); + while(result < minHeight || result > maxHeight) { + result = mean * (1 + multGenerator() * spread); + } + return result; + }; + + // Helper method - apply age and genes to the adult height + const applyAge = function(height, age, genes) { + if(!_.isFinite(age) || age < 2 || age >= 20) { + return height; + } + let minHeight = 0, midHeight = 0, midAge = 15; + switch(genes) { + case 'XX': // female + case 'XXX': // Triple X syndrome female + minHeight = 85; midHeight = height * 157 / 164; midAge = 13; + break; + case 'XY': // male + case 'XXY': // Kinefelter syndrome male + case 'XYY': // XYY syndrome male + minHeight = 86; midHeight = height * 170 / 178; midAge = 15; + break; + case 'X0': case 'X': // Turner syndrome female + minHeight = 85 * 0.93; midHeight = height * 157 / 164; midAge = 13; + break; + default: + minHeight = 85.5, midHeight = height * 327 / 342, midAge = 14; + break; + } + if(age > midAge) { + // end of puberty to 20 + return interpolate(midAge, midHeight, 20, height, age); + } else { + // 2 to end of puberty + return interpolate(2, minHeight, midAge, midHeight, age); + } + }; + + const _meanHeight = function(nationality, race, genes, age) { + if(_.isObject(nationality)) { + // We got called with a single slave as the argument + return _meanHeight(nationality.nationality, nationality.race, nationality.genes, nationality.physicalAge + nationality.birthWeek / 52.0); + } + let result = 0; + switch(genes) { + case 'XX': // female + result = nationalityMeanHeight(xxMeanHeight, nationality, race); + break; + case 'XY': // male + result = nationalityMeanHeight(xyMeanHeight, nationality, race); + break; + // special cases. Extra SHOX genes on X and Y chromosomes make for larger people + case 'X0': case 'X': // Turner syndrome female + result = nationalityMeanHeight(xxMeanHeight, nationality, race) * 0.93; + break; + case 'XXX': // Triple X syndrome female + result = nationalityMeanHeight(xxMeanHeight, nationality, race) * 1.03; + break; + case 'XXY': // Kinefelter syndrome male + result = nationalityMeanHeight(xyMeanHeight, nationality, race) * 1.03; + break; + case 'XYY': // XYY syndrome male + result = nationalityMeanHeight(xyMeanHeight, nationality, race) * 1.04; + break; + case 'Y': case 'Y0': case 'YY': case 'YYY': + console.log("Height.mean(): non-viable genes " + genes); + break; + default: + console.log("Height.mean(): unknown genes " + genes + ", returning mean between XX and XY"); + result = nationalityMeanHeight(xxMeanHeight, nationality, race) * 0.5 + + nationalityMeanHeight(xyMeanHeight, nationality, race) * 0.5; + break; + } + return applyAge(result, age, genes); + }; + + const _randomHeight = function(nationality, race, genes, age) { + const mean = _meanHeight(nationality, race, genes, age); + // If we got called with a slave object and options, temporarily modify + // our configuration. + if(_.isObject(nationality) && _.isObject(race)) { + const currentConfig = _config(); + _config(race); + const result = heightGenerator(mean); + _config(currentConfig); + return result; + } + return heightGenerator(mean); + }; + + const _forAge = function(height, age, genes) { + if(_.isObject(age)) { + // We got called with a slave as a second argument + return applyAge(height, age.physicalAge + age.birthWeek / 52.0, age.genes); + } else { + return applyAge(height, age, genes); + } + }; + + return { + mean: _meanHeight, + random: _randomHeight, + forAge: _forAge, + config: _config, + }; +})(); + +if(!Array.prototype.findIndex) { + Array.prototype.findIndex = function(predicate) { + if (this == null) { + throw new TypeError('Array.prototype.find called on null or undefined'); + } + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function'); + } + var list = Object(this); + var length = list.length >>> 0; + var thisArg = arguments[1]; + var value; + + for (var i = 0; i < length; i++) { + value = list[i]; + if (predicate.call(thisArg, value, i, list)) { + return i; + } + } + return -1; + }; +}; + +/* +A categorizer is used to "slice" a value range into distinct categories in an efficient manner. + +If the values are objects their property named 'value' will be set to whatever +the value used for the choice was. This is important for getters, where it can be accessed +via this.value. + +--- Example --- +Original SugarCube code +<<if _Slave.muscles > 95>> + Musc++ +<<elseif _Slave.muscles > 30>> + Musc+ +<<elseif _Slave.muscles > 5>> + Toned +<<elseif _Slave.muscles > -6>> +<<elseif _Slave.muscles > -31>> + @@.red;weak@@ +<<elseif _Slave.muscles > -96>> + @@.red;weak+@@ +<<else>> + @@.red;weak++@@ +<</if>> + +As a categorizer +<<if ndef $cats>><<set $cats = {}>><</if>> +<<if ndef $cats.muscleCat>> + <!-- This only gets set once, skipping much of the code evaluation, and can be set outside of the code in an "init" passage for further optimization --> + <<set $cats.muscleCat = new Categorizer([96, 'Musc++'], [31, 'Musc+'], [6, 'Toned'], [-5, ''], [-30, '@@.red;weak@@'], [-95, '@@.red;weak+@@'], [-Infinity, '@@.red;weak++@@'])>> +<</if>> +<<print $cats.muscleCat.cat(_Slave.muscles)>> +*/ +window.Categorizer = function() { + this.cats = Array.prototype.slice.call(arguments) + .filter(function(e, i, a) { + return e instanceof Array && e.length == 2 && typeof e[0] === 'number' && !isNaN(e[0]) + && a.findIndex(function(val) { return e[0] === val[0]; }) === i; /* uniqueness test */ }) + .sort(function(a, b) { return b[0] - a[0]; /* reverse sort */ }); +}; +window.Categorizer.prototype.cat = function(val, def) { + var result = def; + if(typeof val === 'number' && !isNaN(val)) { + var foundCat = this.cats.find(function(e) { return val >= e[0]; }); + if(foundCat) { + result = foundCat[1]; + } + } + // Record the value for the result's getter, if it is an object + // and doesn't have the property yet + if(result === Object(result)) { + result['value'] = val; + } + return result; +}; + +/* +Make everything waiting for this execute. Usage: + +let doSomething = function() { + ... your initialization code goes here ... +}; +if(typeof Categorizer === 'function') { + doSomething(); +} else { + jQuery(document).one('categorizer.ready', doSomething); +} +*/ +jQuery(document).trigger('categorizer.ready'); + +/*:: Span Macro JS [script]*/ + +/* + * <<span>> macro + * A minimal macro which allows to create <span> elements with dynamic IDs. + * + * Usage: <<span $variable>>...<</span>> + */ +Macro.add('span', { + skipArgs : true, + tags : null, + + handler() { + const payload = this.payload[0].contents.replace(/(^\n+|\n+$)/, ''); + let statement = this.args.raw.trim(); + let result; + + if(statement.length === 0) { + return this.error('invalid syntax, format: <<span id>>'); + } + + try { + result = Scripting.evalTwineScript(statement); + } catch (ex) { + return this.error(`bad evaluation: ${typeof ex === 'object' ? ex.message : ex}`); + } + + Config.debug && this.debugView.modes({block: true}); + + jQuery("<span id='" + String(result) + "' />") + .wiki(payload) + .appendTo(this.output); + } +}); + +/*:: DTreeJS [script]*/ +/* This is the minified version of lodash, d3 and dTree */ +; +(function (window, define, exports) { +/** + * @license + * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + */ +;(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&false!==t(n[r],r,n););return n}function i(n,t){for(var r=null==n?0:n.length;r--&&false!==t(n[r],r,n);); +return n}function o(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function f(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function c(n,t){return!(null==n||!n.length)&&-1<d(n,t,0)}function a(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function l(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function s(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r]; +return n}function h(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function p(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function _(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function v(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function g(n,t,r,e){var u=n.length;for(r+=e?1:-1;e?r--:++r<u;)if(t(n[r],r,n))return r;return-1}function d(n,t,r){if(t===t)n:{ +--r;for(var e=n.length;++r<e;)if(n[r]===t){n=r;break n}n=-1}else n=g(n,b,r);return n}function y(n,t,r,e){--r;for(var u=n.length;++r<u;)if(e(n[r],t))return r;return-1}function b(n){return n!==n}function x(n,t){var r=null==n?0:n.length;return r?k(n,t)/r:P}function j(n){return function(t){return null==t?F:t[n]}}function w(n){return function(t){return null==n?F:n[t]}}function m(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function A(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c; +return n}function k(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==F&&(r=r===F?i:r+i)}return r}function E(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function O(n,t){return l(t,function(t){return[t,n[t]]})}function S(n){return function(t){return n(t)}}function I(n,t){return l(t,function(t){return n[t]})}function R(n,t){return n.has(t)}function z(n,t){for(var r=-1,e=n.length;++r<e&&-1<d(t,n[r],0););return r}function W(n,t){for(var r=n.length;r--&&-1<d(t,n[r],0););return r}function B(n){ +return"\\"+Tn[n]}function L(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function U(n,t){return function(r){return n(t(r))}}function C(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&"__lodash_placeholder__"!==o||(n[r]="__lodash_placeholder__",i[u++]=r)}return i}function D(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function T(n){if(Bn.test(n)){ +for(var t=zn.lastIndex=0;zn.test(n);)++t;n=t}else n=tt(n);return n}function $(n){return Bn.test(n)?n.match(zn)||[]:n.split("")}var F,N=1/0,P=NaN,Z=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],q=/\b__p\+='';/g,V=/\b(__p\+=)''\+/g,K=/(__e\(.*?\)|\b__t\))\+'';/g,G=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>"']/g,J=RegExp(G.source),Y=RegExp(H.source),Q=/<%-([\s\S]+?)%>/g,X=/<%([\s\S]+?)%>/g,nn=/<%=([\s\S]+?)%>/g,tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,rn=/^\w*$/,en=/^\./,un=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,on=/[\\^$.*+?()[\]{}|]/g,fn=RegExp(on.source),cn=/^\s+|\s+$/g,an=/^\s+/,ln=/\s+$/,sn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,hn=/\{\n\/\* \[wrapped with (.+)\] \*/,pn=/,? & /,_n=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,vn=/\\(\\)?/g,gn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,dn=/\w*$/,yn=/^[-+]0x[0-9a-f]+$/i,bn=/^0b[01]+$/i,xn=/^\[object .+?Constructor\]$/,jn=/^0o[0-7]+$/i,wn=/^(?:0|[1-9]\d*)$/,mn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,An=/($^)/,kn=/['\n\r\u2028\u2029\\]/g,En="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*",On="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+En,Sn="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]?|[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",In=RegExp("['\u2019]","g"),Rn=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g"),zn=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+Sn+En,"g"),Wn=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?|\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)|\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)|\\d+",On].join("|"),"g"),Bn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"),Ln=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Un="Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Cn={}; +Cn["[object Float32Array]"]=Cn["[object Float64Array]"]=Cn["[object Int8Array]"]=Cn["[object Int16Array]"]=Cn["[object Int32Array]"]=Cn["[object Uint8Array]"]=Cn["[object Uint8ClampedArray]"]=Cn["[object Uint16Array]"]=Cn["[object Uint32Array]"]=true,Cn["[object Arguments]"]=Cn["[object Array]"]=Cn["[object ArrayBuffer]"]=Cn["[object Boolean]"]=Cn["[object DataView]"]=Cn["[object Date]"]=Cn["[object Error]"]=Cn["[object Function]"]=Cn["[object Map]"]=Cn["[object Number]"]=Cn["[object Object]"]=Cn["[object RegExp]"]=Cn["[object Set]"]=Cn["[object String]"]=Cn["[object WeakMap]"]=false; +var Dn={};Dn["[object Arguments]"]=Dn["[object Array]"]=Dn["[object ArrayBuffer]"]=Dn["[object DataView]"]=Dn["[object Boolean]"]=Dn["[object Date]"]=Dn["[object Float32Array]"]=Dn["[object Float64Array]"]=Dn["[object Int8Array]"]=Dn["[object Int16Array]"]=Dn["[object Int32Array]"]=Dn["[object Map]"]=Dn["[object Number]"]=Dn["[object Object]"]=Dn["[object RegExp]"]=Dn["[object Set]"]=Dn["[object String]"]=Dn["[object Symbol]"]=Dn["[object Uint8Array]"]=Dn["[object Uint8ClampedArray]"]=Dn["[object Uint16Array]"]=Dn["[object Uint32Array]"]=true, +Dn["[object Error]"]=Dn["[object Function]"]=Dn["[object WeakMap]"]=false;var Mn,Tn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$n=parseFloat,Fn=parseInt,Nn=typeof global=="object"&&global&&global.Object===Object&&global,Pn=typeof self=="object"&&self&&self.Object===Object&&self,Zn=Nn||Pn||Function("return this")(),qn=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Vn=qn&&typeof module=="object"&&module&&!module.nodeType&&module,Kn=Vn&&Vn.exports===qn,Gn=Kn&&Nn.process; +n:{try{Mn=Gn&&Gn.binding&&Gn.binding("util");break n}catch(n){}Mn=void 0}var Hn=Mn&&Mn.isArrayBuffer,Jn=Mn&&Mn.isDate,Yn=Mn&&Mn.isMap,Qn=Mn&&Mn.isRegExp,Xn=Mn&&Mn.isSet,nt=Mn&&Mn.isTypedArray,tt=j("length"),rt=w({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I", +"\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C", +"\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i", +"\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S", +"\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe", +"\u0149":"'n","\u017f":"s"}),et=w({"&":"&","<":"<",">":">",'"':""","'":"'"}),ut=w({"&":"&","<":"<",">":">",""":'"',"'":"'"}),it=function w(En){function On(n){if(xu(n)&&!af(n)&&!(n instanceof Mn)){if(n instanceof zn)return n;if(ci.call(n,"__wrapped__"))return Pe(n)}return new zn(n)}function Sn(){}function zn(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=F}function Mn(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1, +this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Tn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Nn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Pn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function qn(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Pn;++t<r;)this.add(n[t])}function Vn(n){ +this.size=(this.__data__=new Nn(n)).size}function Gn(n,t){var r,e=af(n),u=!e&&cf(n),i=!e&&!u&&sf(n),o=!e&&!u&&!i&&gf(n),u=(e=e||u||i||o)?E(n.length,ri):[],f=u.length;for(r in n)!t&&!ci.call(n,r)||e&&("length"==r||i&&("offset"==r||"parent"==r)||o&&("buffer"==r||"byteLength"==r||"byteOffset"==r)||Re(r,f))||u.push(r);return u}function tt(n){var t=n.length;return t?n[cr(0,t-1)]:F}function ot(n,t){return Te(Mr(n),gt(t,0,n.length))}function ft(n){return Te(Mr(n))}function ct(n,t,r){(r===F||hu(n[t],r))&&(r!==F||t in n)||_t(n,t,r); +}function at(n,t,r){var e=n[t];ci.call(n,t)&&hu(e,r)&&(r!==F||t in n)||_t(n,t,r)}function lt(n,t){for(var r=n.length;r--;)if(hu(n[r][0],t))return r;return-1}function st(n,t,r,e){return oo(n,function(n,u,i){t(e,n,r(n),i)}),e}function ht(n,t){return n&&Tr(t,Lu(t),n)}function pt(n,t){return n&&Tr(t,Uu(t),n)}function _t(n,t,r){"__proto__"==t&&Ei?Ei(n,t,{configurable:true,enumerable:true,value:r,writable:true}):n[t]=r}function vt(n,t){for(var r=-1,e=t.length,u=Hu(e),i=null==n;++r<e;)u[r]=i?F:Wu(n,t[r]);return u; +}function gt(n,t,r){return n===n&&(r!==F&&(n=n<=r?n:r),t!==F&&(n=n>=t?n:t)),n}function dt(n,t,r,e,i,o){var f,c=1&t,a=2&t,l=4&t;if(r&&(f=i?r(n,e,i,o):r(n)),f!==F)return f;if(!bu(n))return n;if(e=af(n)){if(f=Ee(n),!c)return Mr(n,f)}else{var s=yo(n),h="[object Function]"==s||"[object GeneratorFunction]"==s;if(sf(n))return Wr(n,c);if("[object Object]"==s||"[object Arguments]"==s||h&&!i){if(f=a||h?{}:Oe(n),!c)return a?Fr(n,pt(f,n)):$r(n,ht(f,n))}else{if(!Dn[s])return i?n:{};f=Se(n,s,dt,c)}}if(o||(o=new Vn), +i=o.get(n))return i;o.set(n,f);var a=l?a?ye:de:a?Uu:Lu,p=e?F:a(n);return u(p||n,function(e,u){p&&(u=e,e=n[u]),at(f,u,dt(e,t,r,u,n,o))}),f}function yt(n){var t=Lu(n);return function(r){return bt(r,n,t)}}function bt(n,t,r){var e=r.length;if(null==n)return!e;for(n=ni(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===F&&!(u in n)||!i(o))return false}return true}function xt(n,t,r){if(typeof n!="function")throw new ei("Expected a function");return jo(function(){n.apply(F,r)},t)}function jt(n,t,r,e){var u=-1,i=c,o=true,f=n.length,s=[],h=t.length; +if(!f)return s;r&&(t=l(t,S(r))),e?(i=a,o=false):200<=t.length&&(i=R,o=false,t=new qn(t));n:for(;++u<f;){var p=n[u],_=null==r?p:r(p),p=e||0!==p?p:0;if(o&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function wt(n,t){var r=true;return oo(n,function(n,e,u){return r=!!t(n,e,u)}),r}function mt(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===F?o===o&&!Au(o):r(o,f)))var f=o,c=i}return c}function At(n,t){var r=[];return oo(n,function(n,e,u){ +t(n,e,u)&&r.push(n)}),r}function kt(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=Ie),u||(u=[]);++i<o;){var f=n[i];0<t&&r(f)?1<t?kt(f,t-1,r,e,u):s(u,f):e||(u[u.length]=f)}return u}function Et(n,t){return n&&co(n,t,Lu)}function Ot(n,t){return n&&ao(n,t,Lu)}function St(n,t){return f(t,function(t){return gu(n[t])})}function It(n,t){t=Rr(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[$e(t[r++])];return r&&r==e?n:F}function Rt(n,t,r){return t=t(n),af(n)?t:s(t,r(n))}function zt(n){if(null==n)n=n===F?"[object Undefined]":"[object Null]";else if(ki&&ki in ni(n)){ +var t=ci.call(n,ki),r=n[ki];try{n[ki]=F;var e=true}catch(n){}var u=si.call(n);e&&(t?n[ki]=r:delete n[ki]),n=u}else n=si.call(n);return n}function Wt(n,t){return n>t}function Bt(n,t){return null!=n&&ci.call(n,t)}function Lt(n,t){return null!=n&&t in ni(n)}function Ut(n,t,r){for(var e=r?a:c,u=n[0].length,i=n.length,o=i,f=Hu(i),s=1/0,h=[];o--;){var p=n[o];o&&t&&(p=l(p,S(t))),s=Mi(p.length,s),f[o]=!r&&(t||120<=u&&120<=p.length)?new qn(o&&p):F}var p=n[0],_=-1,v=f[0];n:for(;++_<u&&h.length<s;){var g=p[_],d=t?t(g):g,g=r||0!==g?g:0; +if(v?!R(v,d):!e(h,d,r)){for(o=i;--o;){var y=f[o];if(y?!R(y,d):!e(n[o],d,r))continue n}v&&v.push(d),h.push(g)}}return h}function Ct(n,t,r){var e={};return Et(n,function(n,u,i){t(e,r(n),u,i)}),e}function Dt(n,t,e){return t=Rr(t,n),n=2>t.length?n:It(n,vr(t,0,-1)),t=null==n?n:n[$e(Ge(t))],null==t?F:r(t,n,e)}function Mt(n){return xu(n)&&"[object Arguments]"==zt(n)}function Tt(n){return xu(n)&&"[object ArrayBuffer]"==zt(n)}function $t(n){return xu(n)&&"[object Date]"==zt(n)}function Ft(n,t,r,e,u){if(n===t)t=true;else if(null==n||null==t||!xu(n)&&!xu(t))t=n!==n&&t!==t;else n:{ +var i=af(n),o=af(t),f=i?"[object Array]":yo(n),c=o?"[object Array]":yo(t),f="[object Arguments]"==f?"[object Object]":f,c="[object Arguments]"==c?"[object Object]":c,a="[object Object]"==f,o="[object Object]"==c;if((c=f==c)&&sf(n)){if(!sf(t)){t=false;break n}i=true,a=false}if(c&&!a)u||(u=new Vn),t=i||gf(n)?_e(n,t,r,e,Ft,u):ve(n,t,f,r,e,Ft,u);else{if(!(1&r)&&(i=a&&ci.call(n,"__wrapped__"),f=o&&ci.call(t,"__wrapped__"),i||f)){n=i?n.value():n,t=f?t.value():t,u||(u=new Vn),t=Ft(n,t,r,e,u);break n}if(c)t:if(u||(u=new Vn), +i=1&r,f=de(n),o=f.length,c=de(t).length,o==c||i){for(a=o;a--;){var l=f[a];if(!(i?l in t:ci.call(t,l))){t=false;break t}}if((c=u.get(n))&&u.get(t))t=c==t;else{c=true,u.set(n,t),u.set(t,n);for(var s=i;++a<o;){var l=f[a],h=n[l],p=t[l];if(e)var _=i?e(p,h,l,t,n,u):e(h,p,l,n,t,u);if(_===F?h!==p&&!Ft(h,p,r,e,u):!_){c=false;break}s||(s="constructor"==l)}c&&!s&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(c=false)), +u.delete(n),u.delete(t),t=c}}else t=false;else t=false}}return t}function Nt(n){return xu(n)&&"[object Map]"==yo(n)}function Pt(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=ni(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<i;){var f=r[u],c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===F&&!(c in n))return false}else{if(f=new Vn,e)var s=e(a,l,c,n,t,f);if(s===F?!Ft(l,a,3,e,f):!s)return false}}return true}function Zt(n){return!(!bu(n)||li&&li in n)&&(gu(n)?_i:xn).test(Fe(n))}function qt(n){ +return xu(n)&&"[object RegExp]"==zt(n)}function Vt(n){return xu(n)&&"[object Set]"==yo(n)}function Kt(n){return xu(n)&&yu(n.length)&&!!Cn[zt(n)]}function Gt(n){return typeof n=="function"?n:null==n?Nu:typeof n=="object"?af(n)?Xt(n[0],n[1]):Qt(n):Vu(n)}function Ht(n){if(!Le(n))return Ci(n);var t,r=[];for(t in ni(n))ci.call(n,t)&&"constructor"!=t&&r.push(t);return r}function Jt(n,t){return n<t}function Yt(n,t){var r=-1,e=pu(n)?Hu(n.length):[];return oo(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Qt(n){ +var t=me(n);return 1==t.length&&t[0][2]?Ue(t[0][0],t[0][1]):function(r){return r===n||Pt(r,n,t)}}function Xt(n,t){return We(n)&&t===t&&!bu(t)?Ue($e(n),t):function(r){var e=Wu(r,n);return e===F&&e===t?Bu(r,n):Ft(t,e,3)}}function nr(n,t,r,e,u){n!==t&&co(t,function(i,o){if(bu(i)){u||(u=new Vn);var f=u,c=n[o],a=t[o],l=f.get(a);if(l)ct(n,o,l);else{var l=e?e(c,a,o+"",n,t,f):F,s=l===F;if(s){var h=af(a),p=!h&&sf(a),_=!h&&!p&&gf(a),l=a;h||p||_?af(c)?l=c:_u(c)?l=Mr(c):p?(s=false,l=Wr(a,true)):_?(s=false,l=Lr(a,true)):l=[]:wu(a)||cf(a)?(l=c, +cf(c)?l=Ru(c):(!bu(c)||r&&gu(c))&&(l=Oe(a))):s=false}s&&(f.set(a,l),nr(l,a,r,e,f),f.delete(a)),ct(n,o,l)}}else f=e?e(n[o],i,o+"",n,t,u):F,f===F&&(f=i),ct(n,o,f)},Uu)}function tr(n,t){var r=n.length;if(r)return t+=0>t?r:0,Re(t,r)?n[t]:F}function rr(n,t,r){var e=-1;return t=l(t.length?t:[Nu],S(je())),n=Yt(n,function(n){return{a:l(t,function(t){return t(n)}),b:++e,c:n}}),A(n,function(n,t){var e;n:{e=-1;for(var u=n.a,i=t.a,o=u.length,f=r.length;++e<o;){var c=Ur(u[e],i[e]);if(c){e=e>=f?c:c*("desc"==r[e]?-1:1); +break n}}e=n.b-t.b}return e})}function er(n,t){return ur(n,t,function(t,r){return Bu(n,r)})}function ur(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=It(n,o);r(f,o)&&pr(i,Rr(o,n),f)}return i}function ir(n){return function(t){return It(t,n)}}function or(n,t,r,e){var u=e?y:d,i=-1,o=t.length,f=n;for(n===t&&(t=Mr(t)),r&&(f=l(n,S(r)));++i<o;)for(var c=0,a=t[i],a=r?r(a):a;-1<(c=u(f,a,c,e));)f!==n&&wi.call(f,c,1),wi.call(n,c,1);return n}function fr(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r]; +if(r==e||u!==i){var i=u;Re(u)?wi.call(n,u,1):mr(n,u)}}}function cr(n,t){return n+zi(Fi()*(t-n+1))}function ar(n,t){var r="";if(!n||1>t||9007199254740991<t)return r;do t%2&&(r+=n),(t=zi(t/2))&&(n+=n);while(t);return r}function lr(n,t){return wo(Ce(n,t,Nu),n+"")}function sr(n){return tt(Du(n))}function hr(n,t){var r=Du(n);return Te(r,gt(t,0,r.length))}function pr(n,t,r,e){if(!bu(n))return n;t=Rr(t,n);for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=$e(t[u]),a=r;if(u!=o){var l=f[c],a=e?e(l,c,f):F; +a===F&&(a=bu(l)?l:Re(t[u+1])?[]:{})}at(f,c,a),f=f[c]}return n}function _r(n){return Te(Du(n))}function vr(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Hu(u);++e<u;)r[e]=n[e+t];return r}function gr(n,t){var r;return oo(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function dr(n,t,r){var e=0,u=null==n?e:n.length;if(typeof t=="number"&&t===t&&2147483647>=u){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!Au(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return yr(n,t,Nu,r); +}function yr(n,t,r,e){t=r(t);for(var u=0,i=null==n?0:n.length,o=t!==t,f=null===t,c=Au(t),a=t===F;u<i;){var l=zi((u+i)/2),s=r(n[l]),h=s!==F,p=null===s,_=s===s,v=Au(s);(o?e||_:a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):p||v?0:e?s<=t:s<t)?u=l+1:i=l}return Mi(i,4294967294)}function br(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r],f=t?t(o):o;if(!r||!hu(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function xr(n){return typeof n=="number"?n:Au(n)?P:+n}function jr(n){if(typeof n=="string")return n; +if(af(n))return l(n,jr)+"";if(Au(n))return uo?uo.call(n):"";var t=n+"";return"0"==t&&1/n==-N?"-0":t}function wr(n,t,r){var e=-1,u=c,i=n.length,o=true,f=[],l=f;if(r)o=false,u=a;else if(200<=i){if(u=t?null:po(n))return D(u);o=false,u=R,l=new qn}else l=t?[]:f;n:for(;++e<i;){var s=n[e],h=t?t(s):s,s=r||0!==s?s:0;if(o&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;t&&l.push(h),f.push(s)}else u(l,h,r)||(l!==f&&l.push(h),f.push(s))}return f}function mr(n,t){return t=Rr(t,n),n=2>t.length?n:It(n,vr(t,0,-1)), +null==n||delete n[$e(Ge(t))]}function Ar(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?vr(n,e?0:i,e?i+1:u):vr(n,e?i+1:0,e?u:i)}function kr(n,t){var r=n;return r instanceof Mn&&(r=r.value()),h(t,function(n,t){return t.func.apply(t.thisArg,s([n],t.args))},r)}function Er(n,t,r){var e=n.length;if(2>e)return e?wr(n[0]):[];for(var u=-1,i=Hu(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=jt(i[u]||o,n[f],t,r));return wr(kt(i,1),t,r)}function Or(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;)r(o,n[e],e<i?t[e]:F); +return o}function Sr(n){return _u(n)?n:[]}function Ir(n){return typeof n=="function"?n:Nu}function Rr(n,t){return af(n)?n:We(n,t)?[n]:mo(zu(n))}function zr(n,t,r){var e=n.length;return r=r===F?e:r,!t&&r>=e?n:vr(n,t,r)}function Wr(n,t){if(t)return n.slice();var r=n.length,r=yi?yi(r):new n.constructor(r);return n.copy(r),r}function Br(n){var t=new n.constructor(n.byteLength);return new di(t).set(new di(n)),t}function Lr(n,t){return new n.constructor(t?Br(n.buffer):n.buffer,n.byteOffset,n.length)}function Ur(n,t){ +if(n!==t){var r=n!==F,e=null===n,u=n===n,i=Au(n),o=t!==F,f=null===t,c=t===t,a=Au(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Cr(n,t,r,e){var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Di(i-o,0),l=Hu(c+a);for(e=!e;++f<c;)l[f]=t[f];for(;++u<o;)(e||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l}function Dr(n,t,r,e){var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Di(i-f,0),s=Hu(l+a); +for(e=!e;++u<l;)s[u]=n[u];for(l=u;++c<a;)s[l+c]=t[c];for(;++o<f;)(e||u<i)&&(s[l+r[o]]=n[u++]);return s}function Mr(n,t){var r=-1,e=n.length;for(t||(t=Hu(e));++r<e;)t[r]=n[r];return t}function Tr(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):F;c===F&&(c=n[f]),u?_t(r,f,c):at(r,f,c)}return r}function $r(n,t){return Tr(n,vo(n),t)}function Fr(n,t){return Tr(n,go(n),t)}function Nr(n,t){return function(r,u){var i=af(r)?e:st,o=t?t():{};return i(r,n,je(u,2),o); +}}function Pr(n){return lr(function(t,r){var e=-1,u=r.length,i=1<u?r[u-1]:F,o=2<u?r[2]:F,i=3<n.length&&typeof i=="function"?(u--,i):F;for(o&&ze(r[0],r[1],o)&&(i=3>u?F:i,u=1),t=ni(t);++e<u;)(o=r[e])&&n(t,o,e,i);return t})}function Zr(n,t){return function(r,e){if(null==r)return r;if(!pu(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=ni(r);(t?i--:++i<u)&&false!==e(o[i],i,o););return r}}function qr(n){return function(t,r,e){var u=-1,i=ni(t);e=e(t);for(var o=e.length;o--;){var f=e[n?o:++u];if(false===r(i[f],f,i))break; +}return t}}function Vr(n,t,r){function e(){return(this&&this!==Zn&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=1&t,i=Hr(n);return e}function Kr(n){return function(t){t=zu(t);var r=Bn.test(t)?$(t):F,e=r?r[0]:t.charAt(0);return t=r?zr(r,1).join(""):t.slice(1),e[n]()+t}}function Gr(n){return function(t){return h($u(Tu(t).replace(In,"")),n,"")}}function Hr(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3: +return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=io(n.prototype),t=n.apply(r,t);return bu(t)?t:r}}function Jr(n,t,e){function u(){for(var o=arguments.length,f=Hu(o),c=o,a=xe(u);c--;)f[c]=arguments[c];return c=3>o&&f[0]!==a&&f[o-1]!==a?[]:C(f,a),o-=c.length,o<e?fe(n,t,Xr,u.placeholder,F,f,c,F,F,e-o):r(this&&this!==Zn&&this instanceof u?i:n,this,f); +}var i=Hr(n);return u}function Yr(n){return function(t,r,e){var u=ni(t);if(!pu(t)){var i=je(r,3);t=Lu(t),r=function(n){return i(u[n],n,u)}}return r=n(t,r,e),-1<r?u[i?t[r]:r]:F}}function Qr(n){return ge(function(t){var r=t.length,e=r,u=zn.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!="function")throw new ei("Expected a function");if(u&&!o&&"wrapper"==be(i))var o=new zn([],true)}for(e=o?e:r;++e<r;)var i=t[e],u=be(i),f="wrapper"==u?_o(i):F,o=f&&Be(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?o[be(f[0])].apply(o,f[3]):1==i.length&&Be(i)?o[u]():o.thru(i); +return function(){var n=arguments,e=n[0];if(o&&1==n.length&&af(e))return o.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function Xr(n,t,r,e,u,i,o,f,c,a){function l(){for(var d=arguments.length,y=Hu(d),b=d;b--;)y[b]=arguments[b];if(_){var x,j=xe(l),b=y.length;for(x=0;b--;)y[b]===j&&++x}if(e&&(y=Cr(y,e,u,_)),i&&(y=Dr(y,i,o,_)),d-=x,_&&d<a)return j=C(y,j),fe(n,t,Xr,l.placeholder,r,y,j,f,c,a-d);if(j=h?r:this,b=p?j[n]:n,d=y.length,f){x=y.length;for(var w=Mi(f.length,x),m=Mr(y);w--;){ +var A=f[w];y[w]=Re(A,x)?m[A]:F}}else v&&1<d&&y.reverse();return s&&c<d&&(y.length=c),this&&this!==Zn&&this instanceof l&&(b=g||Hr(b)),b.apply(j,y)}var s=128&t,h=1&t,p=2&t,_=24&t,v=512&t,g=p?F:Hr(n);return l}function ne(n,t){return function(r,e){return Ct(r,n,t(e))}}function te(n,t){return function(r,e){var u;if(r===F&&e===F)return t;if(r!==F&&(u=r),e!==F){if(u===F)return e;typeof r=="string"||typeof e=="string"?(r=jr(r),e=jr(e)):(r=xr(r),e=xr(e)),u=n(r,e)}return u}}function re(n){return ge(function(t){ +return t=l(t,S(je())),lr(function(e){var u=this;return n(t,function(n){return r(n,u,e)})})})}function ee(n,t){t=t===F?" ":jr(t);var r=t.length;return 2>r?r?ar(t,n):t:(r=ar(t,Ri(n/T(t))),Bn.test(t)?zr($(r),0,n).join(""):r.slice(0,n))}function ue(n,t,e,u){function i(){for(var t=-1,c=arguments.length,a=-1,l=u.length,s=Hu(l+c),h=this&&this!==Zn&&this instanceof i?f:n;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++t];return r(h,o?e:this,s)}var o=1&t,f=Hr(n);return i}function ie(n){return function(t,r,e){ +e&&typeof e!="number"&&ze(t,r,e)&&(r=e=F),t=Eu(t),r===F?(r=t,t=0):r=Eu(r),e=e===F?t<r?1:-1:Eu(e);var u=-1;r=Di(Ri((r-t)/(e||1)),0);for(var i=Hu(r);r--;)i[n?r:++u]=t,t+=e;return i}}function oe(n){return function(t,r){return typeof t=="string"&&typeof r=="string"||(t=Iu(t),r=Iu(r)),n(t,r)}}function fe(n,t,r,e,u,i,o,f,c,a){var l=8&t,s=l?o:F;o=l?F:o;var h=l?i:F;return i=l?F:i,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),u=[n,t,u,h,s,i,o,f,c,a],r=r.apply(F,u),Be(n)&&xo(r,u),r.placeholder=e,De(r,n,t)}function ce(n){ +var t=Xu[n];return function(n,r){if(n=Iu(n),r=null==r?0:Mi(Ou(r),292)){var e=(zu(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(zu(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function ae(n){return function(t){var r=yo(t);return"[object Map]"==r?L(t):"[object Set]"==r?M(t):O(t,n(t))}}function le(n,t,r,e,u,i,o,f){var c=2&t;if(!c&&typeof n!="function")throw new ei("Expected a function");var a=e?e.length:0;if(a||(t&=-97,e=u=F),o=o===F?o:Di(Ou(o),0),f=f===F?f:Ou(f),a-=u?u.length:0,64&t){ +var l=e,s=u;e=u=F}var h=c?F:_o(n);return i=[n,t,r,e,u,l,s,i,o,f],h&&(r=i[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&i[7].length<=h[8]||384==n&&h[7].length<=h[8]&&8==r,131>t||e)&&(1&n&&(i[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=i[3],i[3]=e?Cr(e,r,h[4]):r,i[4]=e?C(i[3],"__lodash_placeholder__"):h[4]),(r=h[5])&&(e=i[5],i[5]=e?Dr(e,r,h[6]):r,i[6]=e?C(i[5],"__lodash_placeholder__"):h[6]),(r=h[7])&&(i[7]=r),128&n&&(i[8]=null==i[8]?h[8]:Mi(i[8],h[8])),null==i[9]&&(i[9]=h[9]),i[0]=h[0],i[1]=t),n=i[0],t=i[1], +r=i[2],e=i[3],u=i[4],f=i[9]=i[9]===F?c?0:n.length:Di(i[9]-a,0),!f&&24&t&&(t&=-25),De((h?lo:xo)(t&&1!=t?8==t||16==t?Jr(n,t,f):32!=t&&33!=t||u.length?Xr.apply(F,i):ue(n,t,r,e):Vr(n,t,r),i),n,t)}function se(n,t,r,e){return n===F||hu(n,ii[r])&&!ci.call(e,r)?t:n}function he(n,t,r,e,u,i){return bu(n)&&bu(t)&&(i.set(t,n),nr(n,t,F,he,i),i.delete(t)),n}function pe(n){return wu(n)?F:n}function _e(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;if((c=i.get(n))&&i.get(t))return c==t;var c=-1,a=true,l=2&r?new qn:F; +for(i.set(n,t),i.set(t,n);++c<f;){var s=n[c],h=t[c];if(e)var p=o?e(h,s,c,t,n,i):e(s,h,c,n,t,i);if(p!==F){if(p)continue;a=false;break}if(l){if(!_(t,function(n,t){if(!R(l,t)&&(s===n||u(s,n,r,e,i)))return l.push(t)})){a=false;break}}else if(s!==h&&!u(s,h,r,e,i)){a=false;break}}return i.delete(n),i.delete(t),a}function ve(n,t,r,e,u,i,o){switch(r){case"[object DataView]":if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)break;n=n.buffer,t=t.buffer;case"[object ArrayBuffer]":if(n.byteLength!=t.byteLength||!i(new di(n),new di(t)))break; +return true;case"[object Boolean]":case"[object Date]":case"[object Number]":return hu(+n,+t);case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object RegExp]":case"[object String]":return n==t+"";case"[object Map]":var f=L;case"[object Set]":if(f||(f=D),n.size!=t.size&&!(1&e))break;return(r=o.get(n))?r==t:(e|=2,o.set(n,t),t=_e(f(n),f(t),e,u,i,o),o.delete(n),t);case"[object Symbol]":if(eo)return eo.call(n)==eo.call(t)}return false}function ge(n){return wo(Ce(n,F,Ve),n+"")}function de(n){ +return Rt(n,Lu,vo)}function ye(n){return Rt(n,Uu,go)}function be(n){for(var t=n.name+"",r=Ji[t],e=ci.call(Ji,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function xe(n){return(ci.call(On,"placeholder")?On:n).placeholder}function je(){var n=On.iteratee||Pu,n=n===Pu?Gt:n;return arguments.length?n(arguments[0],arguments[1]):n}function we(n,t){var r=n.__data__,e=typeof t;return("string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t)?r[typeof t=="string"?"string":"hash"]:r.map; +}function me(n){for(var t=Lu(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,u===u&&!bu(u)]}return t}function Ae(n,t){var r=null==n?F:n[t];return Zt(r)?r:F}function ke(n,t,r){t=Rr(t,n);for(var e=-1,u=t.length,i=false;++e<u;){var o=$e(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&yu(u)&&Re(o,u)&&(af(n)||cf(n)))}function Ee(n){var t=n.length,r=n.constructor(t);return t&&"string"==typeof n[0]&&ci.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Oe(n){ +return typeof n.constructor!="function"||Le(n)?{}:io(bi(n))}function Se(r,e,u,i){var o=r.constructor;switch(e){case"[object ArrayBuffer]":return Br(r);case"[object Boolean]":case"[object Date]":return new o(+r);case"[object DataView]":return e=i?Br(r.buffer):r.buffer,new r.constructor(e,r.byteOffset,r.byteLength);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]": +case"[object Uint16Array]":case"[object Uint32Array]":return Lr(r,i);case"[object Map]":return e=i?u(L(r),1):L(r),h(e,n,new r.constructor);case"[object Number]":case"[object String]":return new o(r);case"[object RegExp]":return e=new r.constructor(r.source,dn.exec(r)),e.lastIndex=r.lastIndex,e;case"[object Set]":return e=i?u(D(r),1):D(r),h(e,t,new r.constructor);case"[object Symbol]":return eo?ni(eo.call(r)):{}}}function Ie(n){return af(n)||cf(n)||!!(mi&&n&&n[mi])}function Re(n,t){return t=null==t?9007199254740991:t, +!!t&&(typeof n=="number"||wn.test(n))&&-1<n&&0==n%1&&n<t}function ze(n,t,r){if(!bu(r))return false;var e=typeof t;return!!("number"==e?pu(r)&&Re(t,r.length):"string"==e&&t in r)&&hu(r[t],n)}function We(n,t){if(af(n))return false;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!Au(n))||(rn.test(n)||!tn.test(n)||null!=t&&n in ni(t))}function Be(n){var t=be(n),r=On[t];return typeof r=="function"&&t in Mn.prototype&&(n===r||(t=_o(r),!!t&&n===t[0]))}function Le(n){var t=n&&n.constructor; +return n===(typeof t=="function"&&t.prototype||ii)}function Ue(n,t){return function(r){return null!=r&&(r[n]===t&&(t!==F||n in ni(r)))}}function Ce(n,t,e){return t=Di(t===F?n.length-1:t,0),function(){for(var u=arguments,i=-1,o=Di(u.length-t,0),f=Hu(o);++i<o;)f[i]=u[t+i];for(i=-1,o=Hu(t+1);++i<t;)o[i]=u[i];return o[t]=e(f),r(n,this,o)}}function De(n,t,r){var e=t+"";t=wo;var u,i=Ne;return u=(u=e.match(hn))?u[1].split(pn):[],r=i(u,r),(i=r.length)&&(u=i-1,r[u]=(1<i?"& ":"")+r[u],r=r.join(2<i?", ":" "), +e=e.replace(sn,"{\n/* [wrapped with "+r+"] */\n")),t(n,e)}function Me(n){var t=0,r=0;return function(){var e=Ti(),u=16-(e-r);if(r=e,0<u){if(800<=++t)return arguments[0]}else t=0;return n.apply(F,arguments)}}function Te(n,t){var r=-1,e=n.length,u=e-1;for(t=t===F?e:t;++r<t;){var e=cr(r,u),i=n[e];n[e]=n[r],n[r]=i}return n.length=t,n}function $e(n){if(typeof n=="string"||Au(n))return n;var t=n+"";return"0"==t&&1/n==-N?"-0":t}function Fe(n){if(null!=n){try{return fi.call(n)}catch(n){}return n+""}return""; +}function Ne(n,t){return u(Z,function(r){var e="_."+r[0];t&r[1]&&!c(n,e)&&n.push(e)}),n.sort()}function Pe(n){if(n instanceof Mn)return n.clone();var t=new zn(n.__wrapped__,n.__chain__);return t.__actions__=Mr(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Ze(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Ou(r),0>r&&(r=Di(e+r,0)),g(n,je(t,3),r)):-1}function qe(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==F&&(u=Ou(r),u=0>r?Di(e+u,0):Mi(u,e-1)), +g(n,je(t,3),u,true)}function Ve(n){return(null==n?0:n.length)?kt(n,1):[]}function Ke(n){return n&&n.length?n[0]:F}function Ge(n){var t=null==n?0:n.length;return t?n[t-1]:F}function He(n,t){return n&&n.length&&t&&t.length?or(n,t):n}function Je(n){return null==n?n:Ni.call(n)}function Ye(n){if(!n||!n.length)return[];var t=0;return n=f(n,function(n){if(_u(n))return t=Di(n.length,t),true}),E(t,function(t){return l(n,j(t))})}function Qe(n,t){if(!n||!n.length)return[];var e=Ye(n);return null==t?e:l(e,function(n){ +return r(t,F,n)})}function Xe(n){return n=On(n),n.__chain__=true,n}function nu(n,t){return t(n)}function tu(){return this}function ru(n,t){return(af(n)?u:oo)(n,je(t,3))}function eu(n,t){return(af(n)?i:fo)(n,je(t,3))}function uu(n,t){return(af(n)?l:Yt)(n,je(t,3))}function iu(n,t,r){return t=r?F:t,t=n&&null==t?n.length:t,le(n,128,F,F,F,F,t)}function ou(n,t){var r;if(typeof t!="function")throw new ei("Expected a function");return n=Ou(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=F), +r}}function fu(n,t,r){return t=r?F:t,n=le(n,8,F,F,F,F,F,t),n.placeholder=fu.placeholder,n}function cu(n,t,r){return t=r?F:t,n=le(n,16,F,F,F,F,F,t),n.placeholder=cu.placeholder,n}function au(n,t,r){function e(t){var r=c,e=a;return c=a=F,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return n-=_,p===F||r>=t||0>r||g&&n>=l}function i(){var n=Jo();if(u(n))return o(n);var r,e=jo;r=n-_,n=t-(n-p),r=g?Mi(n,l-r):n,h=e(i,r)}function o(n){return h=F,d&&c?e(n):(c=a=F,s)}function f(){var n=Jo(),r=u(n);if(c=arguments, +a=this,p=n,r){if(h===F)return _=n=p,h=jo(i,t),v?e(n):s;if(g)return h=jo(i,t),e(p)}return h===F&&(h=jo(i,t)),s}var c,a,l,s,h,p,_=0,v=false,g=false,d=true;if(typeof n!="function")throw new ei("Expected a function");return t=Iu(t)||0,bu(r)&&(v=!!r.leading,l=(g="maxWait"in r)?Di(Iu(r.maxWait)||0,t):l,d="trailing"in r?!!r.trailing:d),f.cancel=function(){h!==F&&ho(h),_=0,c=p=a=h=F},f.flush=function(){return h===F?s:o(Jo())},f}function lu(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;return i.has(u)?i.get(u):(e=n.apply(this,e), +r.cache=i.set(u,e)||i,e)}if(typeof n!="function"||null!=t&&typeof t!="function")throw new ei("Expected a function");return r.cache=new(lu.Cache||Pn),r}function su(n){if(typeof n!="function")throw new ei("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function hu(n,t){return n===t||n!==n&&t!==t}function pu(n){return null!=n&&yu(n.length)&&!gu(n); +}function _u(n){return xu(n)&&pu(n)}function vu(n){if(!xu(n))return false;var t=zt(n);return"[object Error]"==t||"[object DOMException]"==t||typeof n.message=="string"&&typeof n.name=="string"&&!wu(n)}function gu(n){return!!bu(n)&&(n=zt(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function du(n){return typeof n=="number"&&n==Ou(n)}function yu(n){return typeof n=="number"&&-1<n&&0==n%1&&9007199254740991>=n}function bu(n){var t=typeof n;return null!=n&&("object"==t||"function"==t); +}function xu(n){return null!=n&&typeof n=="object"}function ju(n){return typeof n=="number"||xu(n)&&"[object Number]"==zt(n)}function wu(n){return!(!xu(n)||"[object Object]"!=zt(n))&&(n=bi(n),null===n||(n=ci.call(n,"constructor")&&n.constructor,typeof n=="function"&&n instanceof n&&fi.call(n)==hi))}function mu(n){return typeof n=="string"||!af(n)&&xu(n)&&"[object String]"==zt(n)}function Au(n){return typeof n=="symbol"||xu(n)&&"[object Symbol]"==zt(n)}function ku(n){if(!n)return[];if(pu(n))return mu(n)?$(n):Mr(n); +if(Ai&&n[Ai]){n=n[Ai]();for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}return t=yo(n),("[object Map]"==t?L:"[object Set]"==t?D:Du)(n)}function Eu(n){return n?(n=Iu(n),n===N||n===-N?1.7976931348623157e308*(0>n?-1:1):n===n?n:0):0===n?n:0}function Ou(n){n=Eu(n);var t=n%1;return n===n?t?n-t:n:0}function Su(n){return n?gt(Ou(n),0,4294967295):0}function Iu(n){if(typeof n=="number")return n;if(Au(n))return P;if(bu(n)&&(n=typeof n.valueOf=="function"?n.valueOf():n,n=bu(n)?n+"":n),typeof n!="string")return 0===n?n:+n; +n=n.replace(cn,"");var t=bn.test(n);return t||jn.test(n)?Fn(n.slice(2),t?2:8):yn.test(n)?P:+n}function Ru(n){return Tr(n,Uu(n))}function zu(n){return null==n?"":jr(n)}function Wu(n,t,r){return n=null==n?F:It(n,t),n===F?r:n}function Bu(n,t){return null!=n&&ke(n,t,Lt)}function Lu(n){return pu(n)?Gn(n):Ht(n)}function Uu(n){if(pu(n))n=Gn(n,true);else if(bu(n)){var t,r=Le(n),e=[];for(t in n)("constructor"!=t||!r&&ci.call(n,t))&&e.push(t);n=e}else{if(t=[],null!=n)for(r in ni(n))t.push(r);n=t}return n}function Cu(n,t){ +if(null==n)return{};var r=l(ye(n),function(n){return[n]});return t=je(t),ur(n,r,function(n,r){return t(n,r[0])})}function Du(n){return null==n?[]:I(n,Lu(n))}function Mu(n){return Nf(zu(n).toLowerCase())}function Tu(n){return(n=zu(n))&&n.replace(mn,rt).replace(Rn,"")}function $u(n,t,r){return n=zu(n),t=r?F:t,t===F?Ln.test(n)?n.match(Wn)||[]:n.match(_n)||[]:n.match(t)||[]}function Fu(n){return function(){return n}}function Nu(n){return n}function Pu(n){return Gt(typeof n=="function"?n:dt(n,1))}function Zu(n,t,r){ +var e=Lu(t),i=St(t,e);null!=r||bu(t)&&(i.length||!e.length)||(r=t,t=n,n=this,i=St(t,Lu(t)));var o=!(bu(r)&&"chain"in r&&!r.chain),f=gu(n);return u(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Mr(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,s([this.value()],arguments))})}),n}function qu(){}function Vu(n){return We(n)?j($e(n)):ir(n)}function Ku(){return[]}function Gu(){ +return false}En=null==En?Zn:it.defaults(Zn.Object(),En,it.pick(Zn,Un));var Hu=En.Array,Ju=En.Date,Yu=En.Error,Qu=En.Function,Xu=En.Math,ni=En.Object,ti=En.RegExp,ri=En.String,ei=En.TypeError,ui=Hu.prototype,ii=ni.prototype,oi=En["__core-js_shared__"],fi=Qu.prototype.toString,ci=ii.hasOwnProperty,ai=0,li=function(){var n=/[^.]+$/.exec(oi&&oi.keys&&oi.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),si=ii.toString,hi=fi.call(ni),pi=Zn._,_i=ti("^"+fi.call(ci).replace(on,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),vi=Kn?En.Buffer:F,gi=En.Symbol,di=En.Uint8Array,yi=vi?vi.f:F,bi=U(ni.getPrototypeOf,ni),xi=ni.create,ji=ii.propertyIsEnumerable,wi=ui.splice,mi=gi?gi.isConcatSpreadable:F,Ai=gi?gi.iterator:F,ki=gi?gi.toStringTag:F,Ei=function(){ +try{var n=Ae(ni,"defineProperty");return n({},"",{}),n}catch(n){}}(),Oi=En.clearTimeout!==Zn.clearTimeout&&En.clearTimeout,Si=Ju&&Ju.now!==Zn.Date.now&&Ju.now,Ii=En.setTimeout!==Zn.setTimeout&&En.setTimeout,Ri=Xu.ceil,zi=Xu.floor,Wi=ni.getOwnPropertySymbols,Bi=vi?vi.isBuffer:F,Li=En.isFinite,Ui=ui.join,Ci=U(ni.keys,ni),Di=Xu.max,Mi=Xu.min,Ti=Ju.now,$i=En.parseInt,Fi=Xu.random,Ni=ui.reverse,Pi=Ae(En,"DataView"),Zi=Ae(En,"Map"),qi=Ae(En,"Promise"),Vi=Ae(En,"Set"),Ki=Ae(En,"WeakMap"),Gi=Ae(ni,"create"),Hi=Ki&&new Ki,Ji={},Yi=Fe(Pi),Qi=Fe(Zi),Xi=Fe(qi),no=Fe(Vi),to=Fe(Ki),ro=gi?gi.prototype:F,eo=ro?ro.valueOf:F,uo=ro?ro.toString:F,io=function(){ +function n(){}return function(t){return bu(t)?xi?xi(t):(n.prototype=t,t=new n,n.prototype=F,t):{}}}();On.templateSettings={escape:Q,evaluate:X,interpolate:nn,variable:"",imports:{_:On}},On.prototype=Sn.prototype,On.prototype.constructor=On,zn.prototype=io(Sn.prototype),zn.prototype.constructor=zn,Mn.prototype=io(Sn.prototype),Mn.prototype.constructor=Mn,Tn.prototype.clear=function(){this.__data__=Gi?Gi(null):{},this.size=0},Tn.prototype.delete=function(n){return n=this.has(n)&&delete this.__data__[n], +this.size-=n?1:0,n},Tn.prototype.get=function(n){var t=this.__data__;return Gi?(n=t[n],"__lodash_hash_undefined__"===n?F:n):ci.call(t,n)?t[n]:F},Tn.prototype.has=function(n){var t=this.__data__;return Gi?t[n]!==F:ci.call(t,n)},Tn.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Gi&&t===F?"__lodash_hash_undefined__":t,this},Nn.prototype.clear=function(){this.__data__=[],this.size=0},Nn.prototype.delete=function(n){var t=this.__data__;return n=lt(t,n),!(0>n)&&(n==t.length-1?t.pop():wi.call(t,n,1), +--this.size,true)},Nn.prototype.get=function(n){var t=this.__data__;return n=lt(t,n),0>n?F:t[n][1]},Nn.prototype.has=function(n){return-1<lt(this.__data__,n)},Nn.prototype.set=function(n,t){var r=this.__data__,e=lt(r,n);return 0>e?(++this.size,r.push([n,t])):r[e][1]=t,this},Pn.prototype.clear=function(){this.size=0,this.__data__={hash:new Tn,map:new(Zi||Nn),string:new Tn}},Pn.prototype.delete=function(n){return n=we(this,n).delete(n),this.size-=n?1:0,n},Pn.prototype.get=function(n){return we(this,n).get(n); +},Pn.prototype.has=function(n){return we(this,n).has(n)},Pn.prototype.set=function(n,t){var r=we(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},qn.prototype.add=qn.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},qn.prototype.has=function(n){return this.__data__.has(n)},Vn.prototype.clear=function(){this.__data__=new Nn,this.size=0},Vn.prototype.delete=function(n){var t=this.__data__;return n=t.delete(n),this.size=t.size,n},Vn.prototype.get=function(n){ +return this.__data__.get(n)},Vn.prototype.has=function(n){return this.__data__.has(n)},Vn.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Nn){var e=r.__data__;if(!Zi||199>e.length)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Pn(e)}return r.set(n,t),this.size=r.size,this};var oo=Zr(Et),fo=Zr(Ot,true),co=qr(),ao=qr(true),lo=Hi?function(n,t){return Hi.set(n,t),n}:Nu,so=Ei?function(n,t){return Ei(n,"toString",{configurable:true,enumerable:false,value:Fu(t),writable:true})}:Nu,ho=Oi||function(n){ +return Zn.clearTimeout(n)},po=Vi&&1/D(new Vi([,-0]))[1]==N?function(n){return new Vi(n)}:qu,_o=Hi?function(n){return Hi.get(n)}:qu,vo=Wi?function(n){return null==n?[]:(n=ni(n),f(Wi(n),function(t){return ji.call(n,t)}))}:Ku,go=Wi?function(n){for(var t=[];n;)s(t,vo(n)),n=bi(n);return t}:Ku,yo=zt;(Pi&&"[object DataView]"!=yo(new Pi(new ArrayBuffer(1)))||Zi&&"[object Map]"!=yo(new Zi)||qi&&"[object Promise]"!=yo(qi.resolve())||Vi&&"[object Set]"!=yo(new Vi)||Ki&&"[object WeakMap]"!=yo(new Ki))&&(yo=function(n){ +var t=zt(n);if(n=(n="[object Object]"==t?n.constructor:F)?Fe(n):"")switch(n){case Yi:return"[object DataView]";case Qi:return"[object Map]";case Xi:return"[object Promise]";case no:return"[object Set]";case to:return"[object WeakMap]"}return t});var bo=oi?gu:Gu,xo=Me(lo),jo=Ii||function(n,t){return Zn.setTimeout(n,t)},wo=Me(so),mo=function(n){n=lu(n,function(n){return 500===t.size&&t.clear(),n});var t=n.cache;return n}(function(n){var t=[];return en.test(n)&&t.push(""),n.replace(un,function(n,r,e,u){ +t.push(e?u.replace(vn,"$1"):r||n)}),t}),Ao=lr(function(n,t){return _u(n)?jt(n,kt(t,1,_u,true)):[]}),ko=lr(function(n,t){var r=Ge(t);return _u(r)&&(r=F),_u(n)?jt(n,kt(t,1,_u,true),je(r,2)):[]}),Eo=lr(function(n,t){var r=Ge(t);return _u(r)&&(r=F),_u(n)?jt(n,kt(t,1,_u,true),F,r):[]}),Oo=lr(function(n){var t=l(n,Sr);return t.length&&t[0]===n[0]?Ut(t):[]}),So=lr(function(n){var t=Ge(n),r=l(n,Sr);return t===Ge(r)?t=F:r.pop(),r.length&&r[0]===n[0]?Ut(r,je(t,2)):[]}),Io=lr(function(n){var t=Ge(n),r=l(n,Sr);return(t=typeof t=="function"?t:F)&&r.pop(), +r.length&&r[0]===n[0]?Ut(r,F,t):[]}),Ro=lr(He),zo=ge(function(n,t){var r=null==n?0:n.length,e=vt(n,t);return fr(n,l(t,function(n){return Re(n,r)?+n:n}).sort(Ur)),e}),Wo=lr(function(n){return wr(kt(n,1,_u,true))}),Bo=lr(function(n){var t=Ge(n);return _u(t)&&(t=F),wr(kt(n,1,_u,true),je(t,2))}),Lo=lr(function(n){var t=Ge(n),t=typeof t=="function"?t:F;return wr(kt(n,1,_u,true),F,t)}),Uo=lr(function(n,t){return _u(n)?jt(n,t):[]}),Co=lr(function(n){return Er(f(n,_u))}),Do=lr(function(n){var t=Ge(n);return _u(t)&&(t=F), +Er(f(n,_u),je(t,2))}),Mo=lr(function(n){var t=Ge(n),t=typeof t=="function"?t:F;return Er(f(n,_u),F,t)}),To=lr(Ye),$o=lr(function(n){var t=n.length,t=1<t?n[t-1]:F,t=typeof t=="function"?(n.pop(),t):F;return Qe(n,t)}),Fo=ge(function(n){function t(t){return vt(t,n)}var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return!(1<r||this.__actions__.length)&&u instanceof Mn&&Re(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:nu,args:[t],thisArg:F}),new zn(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(F), +n})):this.thru(t)}),No=Nr(function(n,t,r){ci.call(n,r)?++n[r]:_t(n,r,1)}),Po=Yr(Ze),Zo=Yr(qe),qo=Nr(function(n,t,r){ci.call(n,r)?n[r].push(t):_t(n,r,[t])}),Vo=lr(function(n,t,e){var u=-1,i=typeof t=="function",o=pu(n)?Hu(n.length):[];return oo(n,function(n){o[++u]=i?r(t,n,e):Dt(n,t,e)}),o}),Ko=Nr(function(n,t,r){_t(n,r,t)}),Go=Nr(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ho=lr(function(n,t){if(null==n)return[];var r=t.length;return 1<r&&ze(n,t[0],t[1])?t=[]:2<r&&ze(t[0],t[1],t[2])&&(t=[t[0]]), +rr(n,kt(t,1),[])}),Jo=Si||function(){return Zn.Date.now()},Yo=lr(function(n,t,r){var e=1;if(r.length)var u=C(r,xe(Yo)),e=32|e;return le(n,e,t,r,u)}),Qo=lr(function(n,t,r){var e=3;if(r.length)var u=C(r,xe(Qo)),e=32|e;return le(t,e,n,r,u)}),Xo=lr(function(n,t){return xt(n,1,t)}),nf=lr(function(n,t,r){return xt(n,Iu(t)||0,r)});lu.Cache=Pn;var tf=lr(function(n,t){t=1==t.length&&af(t[0])?l(t[0],S(je())):l(kt(t,1),S(je()));var e=t.length;return lr(function(u){for(var i=-1,o=Mi(u.length,e);++i<o;)u[i]=t[i].call(this,u[i]); +return r(n,this,u)})}),rf=lr(function(n,t){return le(n,32,F,t,C(t,xe(rf)))}),ef=lr(function(n,t){return le(n,64,F,t,C(t,xe(ef)))}),uf=ge(function(n,t){return le(n,256,F,F,F,t)}),of=oe(Wt),ff=oe(function(n,t){return n>=t}),cf=Mt(function(){return arguments}())?Mt:function(n){return xu(n)&&ci.call(n,"callee")&&!ji.call(n,"callee")},af=Hu.isArray,lf=Hn?S(Hn):Tt,sf=Bi||Gu,hf=Jn?S(Jn):$t,pf=Yn?S(Yn):Nt,_f=Qn?S(Qn):qt,vf=Xn?S(Xn):Vt,gf=nt?S(nt):Kt,df=oe(Jt),yf=oe(function(n,t){return n<=t}),bf=Pr(function(n,t){ +if(Le(t)||pu(t))Tr(t,Lu(t),n);else for(var r in t)ci.call(t,r)&&at(n,r,t[r])}),xf=Pr(function(n,t){Tr(t,Uu(t),n)}),jf=Pr(function(n,t,r,e){Tr(t,Uu(t),n,e)}),wf=Pr(function(n,t,r,e){Tr(t,Lu(t),n,e)}),mf=ge(vt),Af=lr(function(n){return n.push(F,se),r(jf,F,n)}),kf=lr(function(n){return n.push(F,he),r(Rf,F,n)}),Ef=ne(function(n,t,r){n[t]=r},Fu(Nu)),Of=ne(function(n,t,r){ci.call(n,t)?n[t].push(r):n[t]=[r]},je),Sf=lr(Dt),If=Pr(function(n,t,r){nr(n,t,r)}),Rf=Pr(function(n,t,r,e){nr(n,t,r,e)}),zf=ge(function(n,t){ +var r={};if(null==n)return r;var e=false;t=l(t,function(t){return t=Rr(t,n),e||(e=1<t.length),t}),Tr(n,ye(n),r),e&&(r=dt(r,7,pe));for(var u=t.length;u--;)mr(r,t[u]);return r}),Wf=ge(function(n,t){return null==n?{}:er(n,t)}),Bf=ae(Lu),Lf=ae(Uu),Uf=Gr(function(n,t,r){return t=t.toLowerCase(),n+(r?Mu(t):t)}),Cf=Gr(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Df=Gr(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Mf=Kr("toLowerCase"),Tf=Gr(function(n,t,r){return n+(r?"_":"")+t.toLowerCase(); +}),$f=Gr(function(n,t,r){return n+(r?" ":"")+Nf(t)}),Ff=Gr(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),Nf=Kr("toUpperCase"),Pf=lr(function(n,t){try{return r(n,F,t)}catch(n){return vu(n)?n:new Yu(n)}}),Zf=ge(function(n,t){return u(t,function(t){t=$e(t),_t(n,t,Yo(n[t],n))}),n}),qf=Qr(),Vf=Qr(true),Kf=lr(function(n,t){return function(r){return Dt(r,n,t)}}),Gf=lr(function(n,t){return function(r){return Dt(n,r,t)}}),Hf=re(l),Jf=re(o),Yf=re(_),Qf=ie(),Xf=ie(true),nc=te(function(n,t){return n+t},0),tc=ce("ceil"),rc=te(function(n,t){ +return n/t},1),ec=ce("floor"),uc=te(function(n,t){return n*t},1),ic=ce("round"),oc=te(function(n,t){return n-t},0);return On.after=function(n,t){if(typeof t!="function")throw new ei("Expected a function");return n=Ou(n),function(){if(1>--n)return t.apply(this,arguments)}},On.ary=iu,On.assign=bf,On.assignIn=xf,On.assignInWith=jf,On.assignWith=wf,On.at=mf,On.before=ou,On.bind=Yo,On.bindAll=Zf,On.bindKey=Qo,On.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return af(n)?n:[n]}, +On.chain=Xe,On.chunk=function(n,t,r){if(t=(r?ze(n,t,r):t===F)?1:Di(Ou(t),0),r=null==n?0:n.length,!r||1>t)return[];for(var e=0,u=0,i=Hu(Ri(r/t));e<r;)i[u++]=vr(n,e,e+=t);return i},On.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u},On.concat=function(){var n=arguments.length;if(!n)return[];for(var t=Hu(n-1),r=arguments[0];n--;)t[n-1]=arguments[n];return s(af(r)?Mr(r):[r],kt(t,1))},On.cond=function(n){var t=null==n?0:n.length,e=je();return n=t?l(n,function(n){ +if("function"!=typeof n[1])throw new ei("Expected a function");return[e(n[0]),n[1]]}):[],lr(function(e){for(var u=-1;++u<t;){var i=n[u];if(r(i[0],this,e))return r(i[1],this,e)}})},On.conforms=function(n){return yt(dt(n,1))},On.constant=Fu,On.countBy=No,On.create=function(n,t){var r=io(n);return null==t?r:ht(r,t)},On.curry=fu,On.curryRight=cu,On.debounce=au,On.defaults=Af,On.defaultsDeep=kf,On.defer=Xo,On.delay=nf,On.difference=Ao,On.differenceBy=ko,On.differenceWith=Eo,On.drop=function(n,t,r){var e=null==n?0:n.length; +return e?(t=r||t===F?1:Ou(t),vr(n,0>t?0:t,e)):[]},On.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===F?1:Ou(t),t=e-t,vr(n,0,0>t?0:t)):[]},On.dropRightWhile=function(n,t){return n&&n.length?Ar(n,je(t,3),true,true):[]},On.dropWhile=function(n,t){return n&&n.length?Ar(n,je(t,3),true):[]},On.fill=function(n,t,r,e){var u=null==n?0:n.length;if(!u)return[];for(r&&typeof r!="number"&&ze(n,t,r)&&(r=0,e=u),u=n.length,r=Ou(r),0>r&&(r=-r>u?0:u+r),e=e===F||e>u?u:Ou(e),0>e&&(e+=u),e=r>e?0:Su(e);r<e;)n[r++]=t; +return n},On.filter=function(n,t){return(af(n)?f:At)(n,je(t,3))},On.flatMap=function(n,t){return kt(uu(n,t),1)},On.flatMapDeep=function(n,t){return kt(uu(n,t),N)},On.flatMapDepth=function(n,t,r){return r=r===F?1:Ou(r),kt(uu(n,t),r)},On.flatten=Ve,On.flattenDeep=function(n){return(null==n?0:n.length)?kt(n,N):[]},On.flattenDepth=function(n,t){return null!=n&&n.length?(t=t===F?1:Ou(t),kt(n,t)):[]},On.flip=function(n){return le(n,512)},On.flow=qf,On.flowRight=Vf,On.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){ +var u=n[t];e[u[0]]=u[1]}return e},On.functions=function(n){return null==n?[]:St(n,Lu(n))},On.functionsIn=function(n){return null==n?[]:St(n,Uu(n))},On.groupBy=qo,On.initial=function(n){return(null==n?0:n.length)?vr(n,0,-1):[]},On.intersection=Oo,On.intersectionBy=So,On.intersectionWith=Io,On.invert=Ef,On.invertBy=Of,On.invokeMap=Vo,On.iteratee=Pu,On.keyBy=Ko,On.keys=Lu,On.keysIn=Uu,On.map=uu,On.mapKeys=function(n,t){var r={};return t=je(t,3),Et(n,function(n,e,u){_t(r,t(n,e,u),n)}),r},On.mapValues=function(n,t){ +var r={};return t=je(t,3),Et(n,function(n,e,u){_t(r,e,t(n,e,u))}),r},On.matches=function(n){return Qt(dt(n,1))},On.matchesProperty=function(n,t){return Xt(n,dt(t,1))},On.memoize=lu,On.merge=If,On.mergeWith=Rf,On.method=Kf,On.methodOf=Gf,On.mixin=Zu,On.negate=su,On.nthArg=function(n){return n=Ou(n),lr(function(t){return tr(t,n)})},On.omit=zf,On.omitBy=function(n,t){return Cu(n,su(je(t)))},On.once=function(n){return ou(2,n)},On.orderBy=function(n,t,r,e){return null==n?[]:(af(t)||(t=null==t?[]:[t]), +r=e?F:r,af(r)||(r=null==r?[]:[r]),rr(n,t,r))},On.over=Hf,On.overArgs=tf,On.overEvery=Jf,On.overSome=Yf,On.partial=rf,On.partialRight=ef,On.partition=Go,On.pick=Wf,On.pickBy=Cu,On.property=Vu,On.propertyOf=function(n){return function(t){return null==n?F:It(n,t)}},On.pull=Ro,On.pullAll=He,On.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?or(n,t,je(r,2)):n},On.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?or(n,t,F,r):n},On.pullAt=zo,On.range=Qf,On.rangeRight=Xf,On.rearg=uf,On.reject=function(n,t){ +return(af(n)?f:At)(n,su(je(t,3)))},On.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=je(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return fr(n,u),r},On.rest=function(n,t){if(typeof n!="function")throw new ei("Expected a function");return t=t===F?t:Ou(t),lr(n,t)},On.reverse=Je,On.sampleSize=function(n,t,r){return t=(r?ze(n,t,r):t===F)?1:Ou(t),(af(n)?ot:hr)(n,t)},On.set=function(n,t,r){return null==n?n:pr(n,t,r)},On.setWith=function(n,t,r,e){return e=typeof e=="function"?e:F, +null==n?n:pr(n,t,r,e)},On.shuffle=function(n){return(af(n)?ft:_r)(n)},On.slice=function(n,t,r){var e=null==n?0:n.length;return e?(r&&typeof r!="number"&&ze(n,t,r)?(t=0,r=e):(t=null==t?0:Ou(t),r=r===F?e:Ou(r)),vr(n,t,r)):[]},On.sortBy=Ho,On.sortedUniq=function(n){return n&&n.length?br(n):[]},On.sortedUniqBy=function(n,t){return n&&n.length?br(n,je(t,2)):[]},On.split=function(n,t,r){return r&&typeof r!="number"&&ze(n,t,r)&&(t=r=F),r=r===F?4294967295:r>>>0,r?(n=zu(n))&&(typeof t=="string"||null!=t&&!_f(t))&&(t=jr(t), +!t&&Bn.test(n))?zr($(n),0,r):n.split(t,r):[]},On.spread=function(n,t){if(typeof n!="function")throw new ei("Expected a function");return t=null==t?0:Di(Ou(t),0),lr(function(e){var u=e[t];return e=zr(e,0,t),u&&s(e,u),r(n,this,e)})},On.tail=function(n){var t=null==n?0:n.length;return t?vr(n,1,t):[]},On.take=function(n,t,r){return n&&n.length?(t=r||t===F?1:Ou(t),vr(n,0,0>t?0:t)):[]},On.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===F?1:Ou(t),t=e-t,vr(n,0>t?0:t,e)):[]},On.takeRightWhile=function(n,t){ +return n&&n.length?Ar(n,je(t,3),false,true):[]},On.takeWhile=function(n,t){return n&&n.length?Ar(n,je(t,3)):[]},On.tap=function(n,t){return t(n),n},On.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ei("Expected a function");return bu(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),au(n,t,{leading:e,maxWait:t,trailing:u})},On.thru=nu,On.toArray=ku,On.toPairs=Bf,On.toPairsIn=Lf,On.toPath=function(n){return af(n)?l(n,$e):Au(n)?[n]:Mr(mo(zu(n)))},On.toPlainObject=Ru, +On.transform=function(n,t,r){var e=af(n),i=e||sf(n)||gf(n);if(t=je(t,4),null==r){var o=n&&n.constructor;r=i?e?new o:[]:bu(n)&&gu(o)?io(bi(n)):{}}return(i?u:Et)(n,function(n,e,u){return t(r,n,e,u)}),r},On.unary=function(n){return iu(n,1)},On.union=Wo,On.unionBy=Bo,On.unionWith=Lo,On.uniq=function(n){return n&&n.length?wr(n):[]},On.uniqBy=function(n,t){return n&&n.length?wr(n,je(t,2)):[]},On.uniqWith=function(n,t){return t=typeof t=="function"?t:F,n&&n.length?wr(n,F,t):[]},On.unset=function(n,t){return null==n||mr(n,t); +},On.unzip=Ye,On.unzipWith=Qe,On.update=function(n,t,r){return null==n?n:pr(n,t,Ir(r)(It(n,t)),void 0)},On.updateWith=function(n,t,r,e){return e=typeof e=="function"?e:F,null!=n&&(n=pr(n,t,Ir(r)(It(n,t)),e)),n},On.values=Du,On.valuesIn=function(n){return null==n?[]:I(n,Uu(n))},On.without=Uo,On.words=$u,On.wrap=function(n,t){return rf(Ir(t),n)},On.xor=Co,On.xorBy=Do,On.xorWith=Mo,On.zip=To,On.zipObject=function(n,t){return Or(n||[],t||[],at)},On.zipObjectDeep=function(n,t){return Or(n||[],t||[],pr); +},On.zipWith=$o,On.entries=Bf,On.entriesIn=Lf,On.extend=xf,On.extendWith=jf,Zu(On,On),On.add=nc,On.attempt=Pf,On.camelCase=Uf,On.capitalize=Mu,On.ceil=tc,On.clamp=function(n,t,r){return r===F&&(r=t,t=F),r!==F&&(r=Iu(r),r=r===r?r:0),t!==F&&(t=Iu(t),t=t===t?t:0),gt(Iu(n),t,r)},On.clone=function(n){return dt(n,4)},On.cloneDeep=function(n){return dt(n,5)},On.cloneDeepWith=function(n,t){return t=typeof t=="function"?t:F,dt(n,5,t)},On.cloneWith=function(n,t){return t=typeof t=="function"?t:F,dt(n,4,t)}, +On.conformsTo=function(n,t){return null==t||bt(n,t,Lu(t))},On.deburr=Tu,On.defaultTo=function(n,t){return null==n||n!==n?t:n},On.divide=rc,On.endsWith=function(n,t,r){n=zu(n),t=jr(t);var e=n.length,e=r=r===F?e:gt(Ou(r),0,e);return r-=t.length,0<=r&&n.slice(r,e)==t},On.eq=hu,On.escape=function(n){return(n=zu(n))&&Y.test(n)?n.replace(H,et):n},On.escapeRegExp=function(n){return(n=zu(n))&&fn.test(n)?n.replace(on,"\\$&"):n},On.every=function(n,t,r){var e=af(n)?o:wt;return r&&ze(n,t,r)&&(t=F),e(n,je(t,3)); +},On.find=Po,On.findIndex=Ze,On.findKey=function(n,t){return v(n,je(t,3),Et)},On.findLast=Zo,On.findLastIndex=qe,On.findLastKey=function(n,t){return v(n,je(t,3),Ot)},On.floor=ec,On.forEach=ru,On.forEachRight=eu,On.forIn=function(n,t){return null==n?n:co(n,je(t,3),Uu)},On.forInRight=function(n,t){return null==n?n:ao(n,je(t,3),Uu)},On.forOwn=function(n,t){return n&&Et(n,je(t,3))},On.forOwnRight=function(n,t){return n&&Ot(n,je(t,3))},On.get=Wu,On.gt=of,On.gte=ff,On.has=function(n,t){return null!=n&&ke(n,t,Bt); +},On.hasIn=Bu,On.head=Ke,On.identity=Nu,On.includes=function(n,t,r,e){return n=pu(n)?n:Du(n),r=r&&!e?Ou(r):0,e=n.length,0>r&&(r=Di(e+r,0)),mu(n)?r<=e&&-1<n.indexOf(t,r):!!e&&-1<d(n,t,r)},On.indexOf=function(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Ou(r),0>r&&(r=Di(e+r,0)),d(n,t,r)):-1},On.inRange=function(n,t,r){return t=Eu(t),r===F?(r=t,t=0):r=Eu(r),n=Iu(n),n>=Mi(t,r)&&n<Di(t,r)},On.invoke=Sf,On.isArguments=cf,On.isArray=af,On.isArrayBuffer=lf,On.isArrayLike=pu,On.isArrayLikeObject=_u, +On.isBoolean=function(n){return true===n||false===n||xu(n)&&"[object Boolean]"==zt(n)},On.isBuffer=sf,On.isDate=hf,On.isElement=function(n){return xu(n)&&1===n.nodeType&&!wu(n)},On.isEmpty=function(n){if(null==n)return true;if(pu(n)&&(af(n)||typeof n=="string"||typeof n.splice=="function"||sf(n)||gf(n)||cf(n)))return!n.length;var t=yo(n);if("[object Map]"==t||"[object Set]"==t)return!n.size;if(Le(n))return!Ht(n).length;for(var r in n)if(ci.call(n,r))return false;return true},On.isEqual=function(n,t){return Ft(n,t); +},On.isEqualWith=function(n,t,r){var e=(r=typeof r=="function"?r:F)?r(n,t):F;return e===F?Ft(n,t,F,r):!!e},On.isError=vu,On.isFinite=function(n){return typeof n=="number"&&Li(n)},On.isFunction=gu,On.isInteger=du,On.isLength=yu,On.isMap=pf,On.isMatch=function(n,t){return n===t||Pt(n,t,me(t))},On.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:F,Pt(n,t,me(t),r)},On.isNaN=function(n){return ju(n)&&n!=+n},On.isNative=function(n){if(bo(n))throw new Yu("Unsupported core-js use. Try https://npms.io/search?q=ponyfill."); +return Zt(n)},On.isNil=function(n){return null==n},On.isNull=function(n){return null===n},On.isNumber=ju,On.isObject=bu,On.isObjectLike=xu,On.isPlainObject=wu,On.isRegExp=_f,On.isSafeInteger=function(n){return du(n)&&-9007199254740991<=n&&9007199254740991>=n},On.isSet=vf,On.isString=mu,On.isSymbol=Au,On.isTypedArray=gf,On.isUndefined=function(n){return n===F},On.isWeakMap=function(n){return xu(n)&&"[object WeakMap]"==yo(n)},On.isWeakSet=function(n){return xu(n)&&"[object WeakSet]"==zt(n)},On.join=function(n,t){ +return null==n?"":Ui.call(n,t)},On.kebabCase=Cf,On.last=Ge,On.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;if(r!==F&&(u=Ou(r),u=0>u?Di(e+u,0):Mi(u,e-1)),t===t){for(r=u+1;r--&&n[r]!==t;);n=r}else n=g(n,b,u,true);return n},On.lowerCase=Df,On.lowerFirst=Mf,On.lt=df,On.lte=yf,On.max=function(n){return n&&n.length?mt(n,Nu,Wt):F},On.maxBy=function(n,t){return n&&n.length?mt(n,je(t,2),Wt):F},On.mean=function(n){return x(n,Nu)},On.meanBy=function(n,t){return x(n,je(t,2))},On.min=function(n){ +return n&&n.length?mt(n,Nu,Jt):F},On.minBy=function(n,t){return n&&n.length?mt(n,je(t,2),Jt):F},On.stubArray=Ku,On.stubFalse=Gu,On.stubObject=function(){return{}},On.stubString=function(){return""},On.stubTrue=function(){return true},On.multiply=uc,On.nth=function(n,t){return n&&n.length?tr(n,Ou(t)):F},On.noConflict=function(){return Zn._===this&&(Zn._=pi),this},On.noop=qu,On.now=Jo,On.pad=function(n,t,r){n=zu(n);var e=(t=Ou(t))?T(n):0;return!t||e>=t?n:(t=(t-e)/2,ee(zi(t),r)+n+ee(Ri(t),r))},On.padEnd=function(n,t,r){ +n=zu(n);var e=(t=Ou(t))?T(n):0;return t&&e<t?n+ee(t-e,r):n},On.padStart=function(n,t,r){n=zu(n);var e=(t=Ou(t))?T(n):0;return t&&e<t?ee(t-e,r)+n:n},On.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),$i(zu(n).replace(an,""),t||0)},On.random=function(n,t,r){if(r&&typeof r!="boolean"&&ze(n,t,r)&&(t=r=F),r===F&&(typeof t=="boolean"?(r=t,t=F):typeof n=="boolean"&&(r=n,n=F)),n===F&&t===F?(n=0,t=1):(n=Eu(n),t===F?(t=n,n=0):t=Eu(t)),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Fi(),Mi(n+r*(t-n+$n("1e-"+((r+"").length-1))),t)):cr(n,t); +},On.reduce=function(n,t,r){var e=af(n)?h:m,u=3>arguments.length;return e(n,je(t,4),r,u,oo)},On.reduceRight=function(n,t,r){var e=af(n)?p:m,u=3>arguments.length;return e(n,je(t,4),r,u,fo)},On.repeat=function(n,t,r){return t=(r?ze(n,t,r):t===F)?1:Ou(t),ar(zu(n),t)},On.replace=function(){var n=arguments,t=zu(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},On.result=function(n,t,r){t=Rr(t,n);var e=-1,u=t.length;for(u||(u=1,n=F);++e<u;){var i=null==n?F:n[$e(t[e])];i===F&&(e=u,i=r),n=gu(i)?i.call(n):i; +}return n},On.round=ic,On.runInContext=w,On.sample=function(n){return(af(n)?tt:sr)(n)},On.size=function(n){if(null==n)return 0;if(pu(n))return mu(n)?T(n):n.length;var t=yo(n);return"[object Map]"==t||"[object Set]"==t?n.size:Ht(n).length},On.snakeCase=Tf,On.some=function(n,t,r){var e=af(n)?_:gr;return r&&ze(n,t,r)&&(t=F),e(n,je(t,3))},On.sortedIndex=function(n,t){return dr(n,t)},On.sortedIndexBy=function(n,t,r){return yr(n,t,je(r,2))},On.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){ +var e=dr(n,t);if(e<r&&hu(n[e],t))return e}return-1},On.sortedLastIndex=function(n,t){return dr(n,t,true)},On.sortedLastIndexBy=function(n,t,r){return yr(n,t,je(r,2),true)},On.sortedLastIndexOf=function(n,t){if(null==n?0:n.length){var r=dr(n,t,true)-1;if(hu(n[r],t))return r}return-1},On.startCase=$f,On.startsWith=function(n,t,r){return n=zu(n),r=null==r?0:gt(Ou(r),0,n.length),t=jr(t),n.slice(r,r+t.length)==t},On.subtract=oc,On.sum=function(n){return n&&n.length?k(n,Nu):0},On.sumBy=function(n,t){return n&&n.length?k(n,je(t,2)):0; +},On.template=function(n,t,r){var e=On.templateSettings;r&&ze(n,t,r)&&(t=F),n=zu(n),t=jf({},t,e,se),r=jf({},t.imports,e.imports,se);var u,i,o=Lu(r),f=I(r,o),c=0;r=t.interpolate||An;var a="__p+='";r=ti((t.escape||An).source+"|"+r.source+"|"+(r===nn?gn:An).source+"|"+(t.evaluate||An).source+"|$","g");var l="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,o,f,l){return e||(e=o),a+=n.slice(c,l).replace(kn,B),r&&(u=true,a+="'+__e("+r+")+'"),f&&(i=true,a+="';"+f+";\n__p+='"), +e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=t.variable)||(a="with(obj){"+a+"}"),a=(i?a.replace(q,""):a).replace(V,"$1").replace(K,"$1;"),a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=Pf(function(){return Qu(o,l+"return "+a).apply(F,f)}),t.source=a,vu(t))throw t;return t},On.times=function(n,t){if(n=Ou(n),1>n||9007199254740991<n)return[]; +var r=4294967295,e=Mi(n,4294967295);for(t=je(t),n-=4294967295,e=E(e,t);++r<n;)t(r);return e},On.toFinite=Eu,On.toInteger=Ou,On.toLength=Su,On.toLower=function(n){return zu(n).toLowerCase()},On.toNumber=Iu,On.toSafeInteger=function(n){return n?gt(Ou(n),-9007199254740991,9007199254740991):0===n?n:0},On.toString=zu,On.toUpper=function(n){return zu(n).toUpperCase()},On.trim=function(n,t,r){return(n=zu(n))&&(r||t===F)?n.replace(cn,""):n&&(t=jr(t))?(n=$(n),r=$(t),t=z(n,r),r=W(n,r)+1,zr(n,t,r).join("")):n; +},On.trimEnd=function(n,t,r){return(n=zu(n))&&(r||t===F)?n.replace(ln,""):n&&(t=jr(t))?(n=$(n),t=W(n,$(t))+1,zr(n,0,t).join("")):n},On.trimStart=function(n,t,r){return(n=zu(n))&&(r||t===F)?n.replace(an,""):n&&(t=jr(t))?(n=$(n),t=z(n,$(t)),zr(n,t).join("")):n},On.truncate=function(n,t){var r=30,e="...";if(bu(t))var u="separator"in t?t.separator:u,r="length"in t?Ou(t.length):r,e="omission"in t?jr(t.omission):e;n=zu(n);var i=n.length;if(Bn.test(n))var o=$(n),i=o.length;if(r>=i)return n;if(i=r-T(e),1>i)return e; +if(r=o?zr(o,0,i).join(""):n.slice(0,i),u===F)return r+e;if(o&&(i+=r.length-i),_f(u)){if(n.slice(i).search(u)){var f=r;for(u.global||(u=ti(u.source,zu(dn.exec(u))+"g")),u.lastIndex=0;o=u.exec(f);)var c=o.index;r=r.slice(0,c===F?i:c)}}else n.indexOf(jr(u),i)!=i&&(u=r.lastIndexOf(u),-1<u&&(r=r.slice(0,u)));return r+e},On.unescape=function(n){return(n=zu(n))&&J.test(n)?n.replace(G,ut):n},On.uniqueId=function(n){var t=++ai;return zu(n)+t},On.upperCase=Ff,On.upperFirst=Nf,On.each=ru,On.eachRight=eu,On.first=Ke, +Zu(On,function(){var n={};return Et(On,function(t,r){ci.call(On.prototype,r)||(n[r]=t)}),n}(),{chain:false}),On.VERSION="4.17.4",u("bind bindKey curry curryRight partial partialRight".split(" "),function(n){On[n].placeholder=On}),u(["drop","take"],function(n,t){Mn.prototype[n]=function(r){r=r===F?1:Di(Ou(r),0);var e=this.__filtered__&&!t?new Mn(this):this.clone();return e.__filtered__?e.__takeCount__=Mi(r,e.__takeCount__):e.__views__.push({size:Mi(r,4294967295),type:n+(0>e.__dir__?"Right":"")}),e},Mn.prototype[n+"Right"]=function(t){ +return this.reverse()[n](t).reverse()}}),u(["filter","map","takeWhile"],function(n,t){var r=t+1,e=1==r||3==r;Mn.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:je(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),u(["head","last"],function(n,t){var r="take"+(t?"Right":"");Mn.prototype[n]=function(){return this[r](1).value()[0]}}),u(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Mn.prototype[n]=function(){return this.__filtered__?new Mn(this):this[r](1); +}}),Mn.prototype.compact=function(){return this.filter(Nu)},Mn.prototype.find=function(n){return this.filter(n).head()},Mn.prototype.findLast=function(n){return this.reverse().find(n)},Mn.prototype.invokeMap=lr(function(n,t){return typeof n=="function"?new Mn(this):this.map(function(r){return Dt(r,n,t)})}),Mn.prototype.reject=function(n){return this.filter(su(je(n)))},Mn.prototype.slice=function(n,t){n=Ou(n);var r=this;return r.__filtered__&&(0<n||0>t)?new Mn(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)), +t!==F&&(t=Ou(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},Mn.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Mn.prototype.toArray=function(){return this.take(4294967295)},Et(Mn.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=On[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(On.prototype[t]=function(){function t(n){return n=u.apply(On,s([n],f)),e&&h?n[0]:n}var o=this.__wrapped__,f=e?[1]:arguments,c=o instanceof Mn,a=f[0],l=c||af(o); +l&&r&&typeof a=="function"&&1!=a.length&&(c=l=false);var h=this.__chain__,p=!!this.__actions__.length,a=i&&!h,c=c&&!p;return!i&&l?(o=c?o:new Mn(this),o=n.apply(o,f),o.__actions__.push({func:nu,args:[t],thisArg:F}),new zn(o,h)):a&&c?n.apply(this,f):(o=this.thru(t),a?e?o.value()[0]:o.value():o)})}),u("pop push shift sort splice unshift".split(" "),function(n){var t=ui[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);On.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){ +var u=this.value();return t.apply(af(u)?u:[],n)}return this[r](function(r){return t.apply(af(r)?r:[],n)})}}),Et(Mn.prototype,function(n,t){var r=On[t];if(r){var e=r.name+"";(Ji[e]||(Ji[e]=[])).push({name:t,func:r})}}),Ji[Xr(F,2).name]=[{name:"wrapper",func:F}],Mn.prototype.clone=function(){var n=new Mn(this.__wrapped__);return n.__actions__=Mr(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Mr(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Mr(this.__views__), +n},Mn.prototype.reverse=function(){if(this.__filtered__){var n=new Mn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Mn.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=af(t),u=0>r,i=e?t.length:0;n=i;for(var o=this.__views__,f=0,c=-1,a=o.length;++c<a;){var l=o[c],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=Mi(n,f+s);break;case"takeRight":f=Di(f,n-s)}}if(n={start:f,end:n},o=n.start,f=n.end,n=f-o, +o=u?f:o-1,f=this.__iteratees__,c=f.length,a=0,l=Mi(n,this.__takeCount__),!e||!u&&i==n&&l==n)return kr(t,this.__actions__);e=[];n:for(;n--&&a<l;){for(o+=r,u=-1,i=t[o];++u<c;){var h=f[u],s=h.type,h=(0,h.iteratee)(i);if(2==s)i=h;else if(!h){if(1==s)continue n;break n}}e[a++]=i}return e},On.prototype.at=Fo,On.prototype.chain=function(){return Xe(this)},On.prototype.commit=function(){return new zn(this.value(),this.__chain__)},On.prototype.next=function(){this.__values__===F&&(this.__values__=ku(this.value())); +var n=this.__index__>=this.__values__.length;return{done:n,value:n?F:this.__values__[this.__index__++]}},On.prototype.plant=function(n){for(var t,r=this;r instanceof Sn;){var e=Pe(r);e.__index__=0,e.__values__=F,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},On.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Mn?(this.__actions__.length&&(n=new Mn(this)),n=n.reverse(),n.__actions__.push({func:nu,args:[Je],thisArg:F}),new zn(n,this.__chain__)):this.thru(Je); +},On.prototype.toJSON=On.prototype.valueOf=On.prototype.value=function(){return kr(this.__wrapped__,this.__actions__)},On.prototype.first=On.prototype.head,Ai&&(On.prototype[Ai]=tu),On}();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Zn._=it, define(function(){return it})):Vn?((Vn.exports=it)._=it,qn._=it):Zn._=it}).call(this); + +// https://d3js.org Version 4.8.0. Copyright 2017 Mike Bostock. +(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t){return function(n,e){return Rs(t(n),e)}}function e(t,n){return[t,n]}function r(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=Qs?10:o>=Ks?5:o>=tf?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=Qs?10:o>=Ks?5:o>=tf?2:1)}function i(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=Qs?i*=10:o>=Ks?i*=5:o>=tf&&(i*=2),n<t?-i:i}function o(t){return t.length}function u(t){return"translate("+t+",0)"}function a(t){return"translate(0,"+t+")"}function c(t){var n=t.bandwidth()/2;return t.round()&&(n=Math.round(n)),function(e){return t(e)+n}}function s(){return!this.__axis}function f(t,n){function e(e){var u=null==o?n.ticks?n.ticks.apply(n,i):n.domain():o,a=null==f?n.tickFormat?n.tickFormat.apply(n,i):xf:f,g=Math.max(l,0)+p,y=n.range(),m=y[0]+.5,x=y[y.length-1]+.5,b=(n.bandwidth?c:xf)(n.copy()),w=e.selection?e.selection():e,M=w.selectAll(".domain").data([null]),T=w.selectAll(".tick").data(u,n).order(),S=T.exit(),N=T.enter().append("g").attr("class","tick"),k=T.select("line"),E=T.select("text");M=M.merge(M.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),T=T.merge(N),k=k.merge(N.append("line").attr("stroke","#000").attr(r+"2",d*l).attr(v+"1",.5).attr(v+"2",.5)),E=E.merge(N.append("text").attr("fill","#000").attr(r,d*g).attr(v,.5).attr("dy",t===bf?"0em":t===Mf?"0.71em":"0.32em")),e!==w&&(M=M.transition(e),T=T.transition(e),k=k.transition(e),E=E.transition(e),S=S.transition(e).attr("opacity",Sf).attr("transform",function(t){return isFinite(t=b(t))?_(t):this.getAttribute("transform")}),N.attr("opacity",Sf).attr("transform",function(t){var n=this.parentNode.__axis;return _(n&&isFinite(n=n(t))?n:b(t))})),S.remove(),M.attr("d",t===Tf||t==wf?"M"+d*h+","+m+"H0.5V"+x+"H"+d*h:"M"+m+","+d*h+"V0.5H"+x+"V"+d*h),T.attr("opacity",1).attr("transform",function(t){return _(b(t))}),k.attr(r+"2",d*l),E.attr(r,d*g).text(a),w.filter(s).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===wf?"start":t===Tf?"end":"middle"),w.each(function(){this.__axis=b})}var r,i=[],o=null,f=null,l=6,h=6,p=3,d=t===bf||t===Tf?-1:1,v=t===Tf||t===wf?(r="x","y"):(r="y","x"),_=t===bf||t===Mf?u:a;return e.scale=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return i=mf.call(arguments),e},e.tickArguments=function(t){return arguments.length?(i=null==t?[]:mf.call(t),e):i.slice()},e.tickValues=function(t){return arguments.length?(o=null==t?null:mf.call(t),e):o&&o.slice()},e.tickFormat=function(t){return arguments.length?(f=t,e):f},e.tickSize=function(t){return arguments.length?(l=h=+t,e):l},e.tickSizeInner=function(t){return arguments.length?(l=+t,e):l},e.tickSizeOuter=function(t){return arguments.length?(h=+t,e):h},e.tickPadding=function(t){return arguments.length?(p=+t,e):p},e}function l(t){return f(bf,t)}function h(t){return f(wf,t)}function p(t){return f(Mf,t)}function d(t){return f(Tf,t)}function v(){for(var t,n=0,e=arguments.length,r={};n<e;++n){if(!(t=arguments[n]+"")||t in r)throw new Error("illegal type: "+t);r[t]=[]}return new _(r)}function _(t){this._=t}function g(t,n){return t.trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}function y(t,n){for(var e,r=0,i=t.length;r<i;++r)if((e=t[r]).name===n)return e.value}function m(t,n,e){for(var r=0,i=t.length;r<i;++r)if(t[r].name===n){t[r]=Nf,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=e&&t.push({name:n,value:e}),t}function x(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===kf&&n.documentElement.namespaceURI===kf?n.createElement(t):n.createElementNS(e,t)}}function b(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function w(){return new M}function M(){this._="@"+(++zf).toString(36)}function T(t,n,e){return t=S(t,n,e),function(n){var e=n.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||t.call(this,n)}}function S(n,e,r){return function(i){var o=t.event;t.event=i;try{n.call(this,this.__data__,e,r)}finally{t.event=o}}}function N(t){return t.trim().split(/^|\s+/).map(function(t){var n="",e=t.indexOf(".");return e>=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}function k(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;r<o;++r)e=n[r],t.type&&e.type!==t.type||e.name!==t.name?n[++i]=e:this.removeEventListener(e.type,e.listener,e.capture);++i?n.length=i:delete this.__on}}}function E(t,n,e){var r=Uf.hasOwnProperty(t.type)?T:S;return function(i,o,u){var a,c=this.__on,s=r(n,o,u);if(c)for(var f=0,l=c.length;f<l;++f)if((a=c[f]).type===t.type&&a.name===t.name)return this.removeEventListener(a.type,a.listener,a.capture),this.addEventListener(a.type,a.listener=s,a.capture=e),void(a.value=n);this.addEventListener(t.type,s,e),a={type:t.type,name:t.name,value:n,listener:s,capture:e},c?c.push(a):this.__on=[a]}}function A(n,e,r,i){var o=t.event;n.sourceEvent=t.event,t.event=n;try{return e.apply(r,i)}finally{t.event=o}}function C(){}function z(){return[]}function P(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}function L(t,n,e,r,i,o){for(var u,a=0,c=n.length,s=o.length;a<s;++a)(u=n[a])?(u.__data__=o[a],r[a]=u):e[a]=new P(t,o[a]);for(;a<c;++a)(u=n[a])&&(i[a]=u)}function R(t,n,e,r,i,o,u){var a,c,s,f={},l=n.length,h=o.length,p=new Array(l);for(a=0;a<l;++a)(c=n[a])&&(p[a]=s=Zf+u.call(c,c.__data__,a,n),s in f?i[a]=c:f[s]=c);for(a=0;a<h;++a)s=Zf+u.call(t,o[a],a,o),(c=f[s])?(r[a]=c,c.__data__=o[a],f[s]=null):e[a]=new P(t,o[a]);for(a=0;a<l;++a)(c=n[a])&&f[p[a]]===c&&(i[a]=c)}function q(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function U(t){return function(){this.removeAttribute(t)}}function D(t){return function(){this.removeAttributeNS(t.space,t.local)}}function O(t,n){return function(){this.setAttribute(t,n)}}function F(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function I(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function Y(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function B(t){return function(){this.style.removeProperty(t)}}function j(t,n,e){return function(){this.style.setProperty(t,n,e)}}function H(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function X(t){return function(){delete this[t]}}function V(t,n){return function(){this[t]=n}}function $(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function W(t){return t.trim().split(/^|\s+/)}function Z(t){return t.classList||new G(t)}function G(t){this._node=t,this._names=W(t.getAttribute("class")||"")}function J(t,n){for(var e=Z(t),r=-1,i=n.length;++r<i;)e.add(n[r])}function Q(t,n){for(var e=Z(t),r=-1,i=n.length;++r<i;)e.remove(n[r])}function K(t){return function(){J(this,t)}}function tt(t){return function(){Q(this,t)}}function nt(t,n){return function(){(n.apply(this,arguments)?J:Q)(this,t)}}function et(){this.textContent=""}function rt(t){return function(){this.textContent=t}}function it(t){return function(){var n=t.apply(this,arguments);this.textContent=null==n?"":n}}function ot(){this.innerHTML=""}function ut(t){return function(){this.innerHTML=t}}function at(t){return function(){var n=t.apply(this,arguments);this.innerHTML=null==n?"":n}}function ct(){this.nextSibling&&this.parentNode.appendChild(this)}function st(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ft(){return null}function lt(){var t=this.parentNode;t&&t.removeChild(this)}function ht(t,n,e){var r=cl(t),i=r.CustomEvent;i?i=new i(n,e):(i=r.document.createEvent("Event"),e?(i.initEvent(n,e.bubbles,e.cancelable),i.detail=e.detail):i.initEvent(n,!1,!1)),t.dispatchEvent(i)}function pt(t,n){return function(){return ht(this,t,n)}}function dt(t,n){return function(){return ht(this,t,n.apply(this,arguments))}}function vt(t,n){this._groups=t,this._parents=n}function _t(){return new vt([[document.documentElement]],bl)}function gt(){t.event.stopImmediatePropagation()}function yt(t,n){var e=t.document.documentElement,r=wl(t).on("dragstart.drag",null);n&&(r.on("click.drag",Nl,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in e?r.on("selectstart.drag",null):(e.style.MozUserSelect=e.__noselect,delete e.__noselect)}function mt(t,n,e,r,i,o,u,a,c,s){this.target=t,this.type=n,this.subject=e,this.identifier=r,this.active=i,this.x=o,this.y=u,this.dx=a,this.dy=c,this._=s}function xt(){return!t.event.button}function bt(){return this.parentNode}function wt(n){return null==n?{x:t.event.x,y:t.event.y}:n}function Mt(t,n){var e=Object.create(t.prototype);for(var r in n)e[r]=n[r];return e}function Tt(){}function St(t){var n;return t=(t+"").trim().toLowerCase(),(n=Rl.exec(t))?(n=parseInt(n[1],16),new Ct(n>>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=ql.exec(t))?Nt(parseInt(n[1],16)):(n=Ul.exec(t))?new Ct(n[1],n[2],n[3],1):(n=Dl.exec(t))?new Ct(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=Ol.exec(t))?kt(n[1],n[2],n[3],n[4]):(n=Fl.exec(t))?kt(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Il.exec(t))?zt(n[1],n[2]/100,n[3]/100,1):(n=Yl.exec(t))?zt(n[1],n[2]/100,n[3]/100,n[4]):Bl.hasOwnProperty(t)?Nt(Bl[t]):"transparent"===t?new Ct(NaN,NaN,NaN,0):null}function Nt(t){return new Ct(t>>16&255,t>>8&255,255&t,1)}function kt(t,n,e,r){return r<=0&&(t=n=e=NaN),new Ct(t,n,e,r)}function Et(t){return t instanceof Tt||(t=St(t)),t?(t=t.rgb(),new Ct(t.r,t.g,t.b,t.opacity)):new Ct}function At(t,n,e,r){return 1===arguments.length?Et(t):new Ct(t,n,e,null==r?1:r)}function Ct(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function zt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new Rt(t,n,e,r)}function Pt(t){if(t instanceof Rt)return new Rt(t.h,t.s,t.l,t.opacity);if(t instanceof Tt||(t=St(t)),!t)return new Rt;if(t instanceof Rt)return t;t=t.rgb();var n=t.r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),u=NaN,a=o-i,c=(o+i)/2;return a?(u=n===o?(e-r)/a+6*(e<r):e===o?(r-n)/a+2:(n-e)/a+4,a/=c<.5?o+i:2-o-i,u*=60):a=c>0&&c<1?0:u,new Rt(u,a,c,t.opacity)}function Lt(t,n,e,r){return 1===arguments.length?Pt(t):new Rt(t,n,e,null==r?1:r)}function Rt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function qt(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Ut(t){if(t instanceof Ot)return new Ot(t.l,t.a,t.b,t.opacity);if(t instanceof Xt){var n=t.h*jl;return new Ot(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof Ct||(t=Et(t));var e=Bt(t.r),r=Bt(t.g),i=Bt(t.b),o=Ft((.4124564*e+.3575761*r+.1804375*i)/Xl),u=Ft((.2126729*e+.7151522*r+.072175*i)/Vl);return new Ot(116*u-16,500*(o-u),200*(u-Ft((.0193339*e+.119192*r+.9503041*i)/$l)),t.opacity)}function Dt(t,n,e,r){return 1===arguments.length?Ut(t):new Ot(t,n,e,null==r?1:r)}function Ot(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function Ft(t){return t>Jl?Math.pow(t,1/3):t/Gl+Wl}function It(t){return t>Zl?t*t*t:Gl*(t-Wl)}function Yt(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Bt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function jt(t){if(t instanceof Xt)return new Xt(t.h,t.c,t.l,t.opacity);t instanceof Ot||(t=Ut(t));var n=Math.atan2(t.b,t.a)*Hl;return new Xt(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Ht(t,n,e,r){return 1===arguments.length?jt(t):new Xt(t,n,e,null==r?1:r)}function Xt(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Vt(t){if(t instanceof Wt)return new Wt(t.h,t.s,t.l,t.opacity);t instanceof Ct||(t=Et(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(oh*r+rh*n-ih*e)/(oh+rh-ih),o=r-i,u=(eh*(e-i)-th*o)/nh,a=Math.sqrt(u*u+o*o)/(eh*i*(1-i)),c=a?Math.atan2(u,o)*Hl-120:NaN;return new Wt(c<0?c+360:c,a,i,t.opacity)}function $t(t,n,e,r){return 1===arguments.length?Vt(t):new Wt(t,n,e,null==r?1:r)}function Wt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Zt(t,n,e,r,i){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*e+(1+3*t+3*o-3*u)*r+u*i)/6}function Gt(t,n){return function(e){return t+e*n}}function Jt(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Qt(t,n){var e=n-t;return e?Gt(t,e>180||e<-180?e-360*Math.round(e/360):e):dh(isNaN(t)?n:t)}function Kt(t){return 1==(t=+t)?tn:function(n,e){return e-n?Jt(n,e,t):dh(isNaN(n)?e:n)}}function tn(t,n){var e=n-t;return e?Gt(t,e):dh(isNaN(t)?n:t)}function nn(t){return function(n){var e,r,i=n.length,o=new Array(i),u=new Array(i),a=new Array(i);for(e=0;e<i;++e)r=At(n[e]),o[e]=r.r||0,u[e]=r.g||0,a[e]=r.b||0;return o=t(o),u=t(u),a=t(a),r.opacity=1,function(t){return r.r=o(t),r.g=u(t),r.b=a(t),r+""}}}function en(t){return function(){return t}}function rn(t){return function(n){return t(n)+""}}function on(t){return"none"===t?Eh:(uh||(uh=document.createElement("DIV"),ah=document.documentElement,ch=document.defaultView),uh.style.transform=t,t=ch.getComputedStyle(ah.appendChild(uh),null).getPropertyValue("transform"),ah.removeChild(uh),t=t.slice(7,-1).split(","),Ah(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}function un(t){return null==t?Eh:(sh||(sh=document.createElementNS("http://www.w3.org/2000/svg","g")),sh.setAttribute("transform",t),(t=sh.transform.baseVal.consolidate())?(t=t.matrix,Ah(t.a,t.b,t.c,t.d,t.e,t.f)):Eh)}function an(t,n,e,r){function i(t){return t.length?t.pop()+" ":""}function o(t,r,i,o,u,a){if(t!==i||r!==o){var c=u.push("translate(",null,n,null,e);a.push({i:c-4,x:xh(t,i)},{i:c-2,x:xh(r,o)})}else(i||o)&&u.push("translate("+i+n+o+e)}function u(t,n,e,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:xh(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}function a(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:xh(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}function c(t,n,e,r,o,u){if(t!==e||n!==r){var a=o.push(i(o)+"scale(",null,",",null,")");u.push({i:a-4,x:xh(t,e)},{i:a-2,x:xh(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}return function(n,e){var r=[],i=[];return n=t(n),e=t(e),o(n.translateX,n.translateY,e.translateX,e.translateY,r,i),u(n.rotate,e.rotate,r,i),a(n.skewX,e.skewX,r,i),c(n.scaleX,n.scaleY,e.scaleX,e.scaleY,r,i),n=e=null,function(t){for(var n,e=-1,o=i.length;++e<o;)r[(n=i[e]).i]=n.x(t);return r.join("")}}}function cn(t){return((t=Math.exp(t))+1/t)/2}function sn(t){return((t=Math.exp(t))-1/t)/2}function fn(t){return((t=Math.exp(2*t))-1)/(t+1)}function ln(t){return function(n,e){var r=t((n=Lt(n)).h,(e=Lt(e)).h),i=tn(n.s,e.s),o=tn(n.l,e.l),u=tn(n.opacity,e.opacity);return function(t){return n.h=r(t),n.s=i(t),n.l=o(t),n.opacity=u(t),n+""}}}function hn(t,n){var e=tn((t=Dt(t)).l,(n=Dt(n)).l),r=tn(t.a,n.a),i=tn(t.b,n.b),o=tn(t.opacity,n.opacity);return function(n){return t.l=e(n),t.a=r(n),t.b=i(n),t.opacity=o(n),t+""}}function pn(t){return function(n,e){var r=t((n=Ht(n)).h,(e=Ht(e)).h),i=tn(n.c,e.c),o=tn(n.l,e.l),u=tn(n.opacity,e.opacity);return function(t){return n.h=r(t),n.c=i(t),n.l=o(t),n.opacity=u(t),n+""}}}function dn(t){return function n(e){function r(n,r){var i=t((n=$t(n)).h,(r=$t(r)).h),o=tn(n.s,r.s),u=tn(n.l,r.l),a=tn(n.opacity,r.opacity);return function(t){return n.h=i(t),n.s=o(t),n.l=u(Math.pow(t,e)),n.opacity=a(t),n+""}}return e=+e,r.gamma=n,r}(1)}function vn(){return Vh||(Zh(_n),Vh=Wh.now()+$h)}function _n(){Vh=0}function gn(){this._call=this._time=this._next=null}function yn(t,n,e){var r=new gn;return r.restart(t,n,e),r}function mn(){vn(),++Yh;for(var t,n=fh;n;)(t=Vh-n._time)>=0&&n._call.call(null,t),n=n._next;--Yh}function xn(){Vh=(Xh=Wh.now())+$h,Yh=Bh=0;try{mn()}finally{Yh=0,wn(),Vh=0}}function bn(){var t=Wh.now(),n=t-Xh;n>Hh&&($h-=n,Xh=t)}function wn(){for(var t,n,e=fh,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:fh=n);lh=t,Mn(r)}function Mn(t){if(!Yh){Bh&&(Bh=clearTimeout(Bh));var n=t-Vh;n>24?(t<1/0&&(Bh=setTimeout(xn,n)),jh&&(jh=clearInterval(jh))):(jh||(Xh=Vh,jh=setInterval(bn,Hh)),Yh=1,Zh(xn))}}function Tn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>tp)throw new Error("too late");return e}function Sn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>ep)throw new Error("too late");return e}function Nn(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("too late");return e}function kn(t,n,e){function r(t){e.state=np,e.timer.restart(i,e.delay,e.time),e.delay<=t&&i(t-e.delay)}function i(r){var s,f,l,h;if(e.state!==np)return u();for(s in c)if(h=c[s],h.name===e.name){if(h.state===rp)return Gh(i);h.state===ip?(h.state=up,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete c[s]):+s<n&&(h.state=up,h.timer.stop(),delete c[s])}if(Gh(function(){e.state===rp&&(e.state=ip,e.timer.restart(o,e.delay,e.time),o(r))}),e.state=ep,e.on.call("start",t,t.__data__,e.index,e.group),e.state===ep){for(e.state=rp,a=new Array(l=e.tween.length),s=0,f=-1;s<l;++s)(h=e.tween[s].value.call(t,t.__data__,e.index,e.group))&&(a[++f]=h);a.length=f+1}}function o(n){for(var r=n<e.duration?e.ease.call(null,n/e.duration):(e.timer.restart(u),e.state=op,1),i=-1,o=a.length;++i<o;)a[i].call(null,r);e.state===op&&(e.on.call("end",t,t.__data__,e.index,e.group),u())}function u(){e.state=up,e.timer.stop(),delete c[n];for(var r in c)return;delete t.__transition}var a,c=t.__transition;c[n]=e,e.timer=yn(r,0,e.time)}function En(t,n){var e,r;return function(){var i=Sn(this,t),o=i.tween;if(o!==e){r=e=o;for(var u=0,a=r.length;u<a;++u)if(r[u].name===n){r=r.slice(),r.splice(u,1);break}}i.tween=r}}function An(t,n,e){var r,i;if("function"!=typeof e)throw new Error;return function(){var o=Sn(this,t),u=o.tween;if(u!==r){i=(r=u).slice();for(var a={name:n,value:e},c=0,s=i.length;c<s;++c)if(i[c].name===n){i[c]=a;break}c===s&&i.push(a)}o.tween=i}}function Cn(t,n,e){var r=t._id;return t.each(function(){var t=Sn(this,r);(t.value||(t.value={}))[n]=e.apply(this,arguments)}),function(t){return Nn(t,r).value[n]}}function zn(t){return function(){this.removeAttribute(t)}}function Pn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Ln(t,n,e){var r,i;return function(){var o=this.getAttribute(t);return o===e?null:o===r?i:i=n(r=o,e)}}function Rn(t,n,e){var r,i;return function(){var o=this.getAttributeNS(t.space,t.local);return o===e?null:o===r?i:i=n(r=o,e)}}function qn(t,n,e){var r,i,o;return function(){var u,a=e(this);return null==a?void this.removeAttribute(t):(u=this.getAttribute(t),u===a?null:u===r&&a===i?o:o=n(r=u,i=a))}}function Un(t,n,e){var r,i,o;return function(){var u,a=e(this);return null==a?void this.removeAttributeNS(t.space,t.local):(u=this.getAttributeNS(t.space,t.local),u===a?null:u===r&&a===i?o:o=n(r=u,i=a))}}function Dn(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttributeNS(t.space,t.local,r(n))}}return e._value=n,e}function On(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttribute(t,r(n))}}return e._value=n,e}function Fn(t,n){return function(){Tn(this,t).delay=+n.apply(this,arguments)}}function In(t,n){return n=+n,function(){Tn(this,t).delay=n}}function Yn(t,n){return function(){Sn(this,t).duration=+n.apply(this,arguments)}}function Bn(t,n){return n=+n,function(){Sn(this,t).duration=n}}function jn(t,n){if("function"!=typeof n)throw new Error;return function(){Sn(this,t).ease=n}}function Hn(t){return(t+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||"start"===t})}function Xn(t,n,e){var r,i,o=Hn(n)?Tn:Sn;return function(){var u=o(this,t),a=u.on;a!==r&&(i=(r=a).copy()).on(n,e),u.on=i}}function Vn(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function $n(t,n){var e,r,i;return function(){var o=cl(this).getComputedStyle(this,null),u=o.getPropertyValue(t),a=(this.style.removeProperty(t),o.getPropertyValue(t));return u===a?null:u===e&&a===r?i:i=n(e=u,r=a)}}function Wn(t){return function(){this.style.removeProperty(t)}}function Zn(t,n,e){var r,i;return function(){var o=cl(this).getComputedStyle(this,null).getPropertyValue(t);return o===e?null:o===r?i:i=n(r=o,e)}}function Gn(t,n,e){var r,i,o;return function(){var u=cl(this).getComputedStyle(this,null),a=u.getPropertyValue(t),c=e(this);return null==c&&(this.style.removeProperty(t),c=u.getPropertyValue(t)),a===c?null:a===r&&c===i?o:o=n(r=a,i=c)}}function Jn(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}function Qn(t){return function(){this.textContent=t}}function Kn(t){return function(){var n=t(this);this.textContent=null==n?"":n}}function te(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function ne(t){return _t().transition(t)}function ee(){return++Ap}function re(t){return+t}function ie(t){return t*t}function oe(t){return t*(2-t)}function ue(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function ae(t){return t*t*t}function ce(t){return--t*t*t+1}function se(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function fe(t){return 1-Math.cos(t*qp)}function le(t){return Math.sin(t*qp)}function he(t){return(1-Math.cos(Rp*t))/2}function pe(t){return Math.pow(2,10*t-10)}function de(t){return 1-Math.pow(2,-10*t)}function ve(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function _e(t){return 1-Math.sqrt(1-t*t)}function ge(t){return Math.sqrt(1- --t*t)}function ye(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function me(t){return 1-xe(1-t)}function xe(t){return(t=+t)<Up?Xp*t*t:t<Op?Xp*(t-=Dp)*t+Fp:t<Yp?Xp*(t-=Ip)*t+Bp:Xp*(t-=jp)*t+Hp}function be(t){return((t*=2)<=1?1-xe(1-t):xe(t-1)+1)/2}function we(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))return Kp.time=vn(),Kp;return e}function Me(){t.event.stopImmediatePropagation()}function Te(t){return{type:t}}function Se(){return!t.event.button}function Ne(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function ke(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function Ee(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function Ae(t){var n=t.__brush;return n?n.dim.output(n.selection):null}function Ce(){return Pe(fd)}function ze(){return Pe(ld)}function Pe(n){function e(t){var e=t.property("__brush",a).selectAll(".overlay").data([Te("overlay")]);e.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",pd.overlay).merge(e).each(function(){var t=ke(this).extent;wl(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),t.selectAll(".selection").data([Te("selection")]).enter().append("rect").attr("class","selection").attr("cursor",pd.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var i=t.selectAll(".handle").data(n.handles,function(t){return t.type});i.exit().remove(),i.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return pd[t.type]}),t.each(r).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",u)}function r(){var t=wl(this),n=ke(this).selection;n?(t.selectAll(".selection").style("display",null).attr("x",n[0][0]).attr("y",n[0][1]).attr("width",n[1][0]-n[0][0]).attr("height",n[1][1]-n[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?n[1][0]-h/2:n[0][0]-h/2}).attr("y",function(t){return"s"===t.type[0]?n[1][1]-h/2:n[0][1]-h/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?n[1][0]-n[0][0]+h:h}).attr("height",function(t){return"e"===t.type||"w"===t.type?n[1][1]-n[0][1]+h:h})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function i(t,n){return t.__brush.emitter||new o(t,n)}function o(t,n){this.that=t,this.args=n,this.state=t.__brush,this.active=0}function u(){function e(){var t=If(T);!U||w||M||(Math.abs(t[0]-O[0])>Math.abs(t[1]-O[1])?M=!0:w=!0),O=t,b=!0,od(),o()}function o(){var t;switch(m=O[0]-D[0],x=O[1]-D[1],N){case ad:case ud:k&&(m=Math.max(P-l,Math.min(R-v,m)),h=l+m,_=v+m),E&&(x=Math.max(L-p,Math.min(q-g,x)),d=p+x,y=g+x);break;case cd:k<0?(m=Math.max(P-l,Math.min(R-l,m)),h=l+m,_=v):k>0&&(m=Math.max(P-v,Math.min(R-v,m)),h=l,_=v+m),E<0?(x=Math.max(L-p,Math.min(q-p,x)),d=p+x,y=g):E>0&&(x=Math.max(L-g,Math.min(q-g,x)),d=p,y=g+x);break;case sd:k&&(h=Math.max(P,Math.min(R,l-m*k)),_=Math.max(P,Math.min(R,v+m*k))),E&&(d=Math.max(L,Math.min(q,p-x*E)),y=Math.max(L,Math.min(q,g+x*E)))}_<h&&(k*=-1,t=l,l=v,v=t,t=h,h=_,_=t,S in dd&&Y.attr("cursor",pd[S=dd[S]])),y<d&&(E*=-1,t=p,p=g,g=t,t=d,d=y,y=t,S in vd&&Y.attr("cursor",pd[S=vd[S]])),A.selection&&(z=A.selection),w&&(h=z[0][0],_=z[1][0]),M&&(d=z[0][1],y=z[1][1]),z[0][0]===h&&z[0][1]===d&&z[1][0]===_&&z[1][1]===y||(A.selection=[[h,d],[_,y]],r.call(T),F.brush())}function u(){if(Me(),t.event.touches){if(t.event.touches.length)return;c&&clearTimeout(c),c=setTimeout(function(){c=null},500),I.on("touchmove.brush touchend.brush touchcancel.brush",null)}else yt(t.event.view,b),B.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);I.attr("pointer-events","all"),Y.attr("cursor",pd.overlay),A.selection&&(z=A.selection),Ee(z)&&(A.selection=null,r.call(T)),F.end()}function a(){switch(t.event.keyCode){case 16:U=k&&E;break;case 18:N===cd&&(k&&(v=_-m*k,l=h+m*k),E&&(g=y-x*E,p=d+x*E),N=sd,o());break;case 32:N!==cd&&N!==sd||(k<0?v=_-m:k>0&&(l=h-m),E<0?g=y-x:E>0&&(p=d-x),N=ad,Y.attr("cursor",pd.selection),o());break;default:return}od()}function s(){switch(t.event.keyCode){case 16:U&&(w=M=U=!1,o());break;case 18:N===sd&&(k<0?v=_:k>0&&(l=h),E<0?g=y:E>0&&(p=d),N=cd,o());break;case 32:N===ad&&(t.event.altKey?(k&&(v=_-m*k,l=h+m*k),E&&(g=y-x*E,p=d+x*E),N=sd):(k<0?v=_:k>0&&(l=h),E<0?g=y:E>0&&(p=d),N=cd),Y.attr("cursor",pd[S]),o());break;default:return}od()}if(t.event.touches){if(t.event.changedTouches.length<t.event.touches.length)return od()}else if(c)return;if(f.apply(this,arguments)){var l,h,p,d,v,_,g,y,m,x,b,w,M,T=this,S=t.event.target.__data__.type,N="selection"===(t.event.metaKey?S="overlay":S)?ud:t.event.altKey?sd:cd,k=n===ld?null:_d[S],E=n===fd?null:gd[S],A=ke(T),C=A.extent,z=A.selection,P=C[0][0],L=C[0][1],R=C[1][0],q=C[1][1],U=k&&E&&t.event.shiftKey,D=If(T),O=D,F=i(T,arguments).beforestart();"overlay"===S?A.selection=z=[[l=n===ld?P:D[0],p=n===fd?L:D[1]],[v=n===ld?R:l,g=n===fd?q:p]]:(l=z[0][0],p=z[0][1],v=z[1][0],g=z[1][1]),h=l,d=p,_=v,y=g;var I=wl(T).attr("pointer-events","none"),Y=I.selectAll(".overlay").attr("cursor",pd[S]);if(t.event.touches)I.on("touchmove.brush",e,!0).on("touchend.brush touchcancel.brush",u,!0);else{var B=wl(t.event.view).on("keydown.brush",a,!0).on("keyup.brush",s,!0).on("mousemove.brush",e,!0).on("mouseup.brush",u,!0);kl(t.event.view)}Me(),cp(T),r.call(T),F.start()}}function a(){var t=this.__brush||{selection:null};return t.extent=s.apply(this,arguments),t.dim=n,t}var c,s=Ne,f=Se,l=v(e,"start","brush","end"),h=6;return e.move=function(t,e){t.selection?t.on("start.brush",function(){i(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){i(this,arguments).end()}).tween("brush",function(){function t(t){u.selection=1===t&&Ee(s)?null:f(t),r.call(o),a.brush()}var o=this,u=o.__brush,a=i(o,arguments),c=u.selection,s=n.input("function"==typeof e?e.apply(this,arguments):e,u.extent),f=Sh(c,s);return c&&s?t:t(1)}):t.each(function(){var t=this,o=arguments,u=t.__brush,a=n.input("function"==typeof e?e.apply(t,o):e,u.extent),c=i(t,o).beforestart();cp(t),u.selection=null==a||Ee(a)?null:a,r.call(t),c.start().brush().end()})},o.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting&&(this.starting=!1,this.emit("start")),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){A(new id(e,t,n.output(this.state.selection)),l.apply,l,[t,this.that,this.args])}},e.extent=function(t){return arguments.length?(s="function"==typeof t?t:rd([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),e):s},e.filter=function(t){return arguments.length?(f="function"==typeof t?t:rd(!!t),e):f},e.handleSize=function(t){return arguments.length?(h=+t,e):h},e.on=function(){var t=l.on.apply(l,arguments);return t===l?e:t},e}function Le(t){return function(n,e){return t(n.source.value+n.target.value,e.source.value+e.target.value)}}function Re(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function qe(){return new Re}function Ue(t){return t.source}function De(t){return t.target}function Oe(t){return t.radius}function Fe(t){return t.startAngle}function Ie(t){return t.endAngle}function Ye(){}function Be(t,n){var e=new Ye;if(t instanceof Ye)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++i<o;)e.set(i,t[i]);else for(;++i<o;)e.set(n(r=t[i],i,t),r)}else if(t)for(var u in t)e.set(u,t[u]);return e}function je(){return{}}function He(t,n,e){t[n]=e}function Xe(){return Be()}function Ve(t,n,e){t.set(n,e)}function $e(){}function We(t,n){var e=new $e;if(t instanceof $e)t.each(function(t){e.add(t)});else if(t){var r=-1,i=t.length;if(null==n)for(;++r<i;)e.add(t[r]);else for(;++r<i;)e.add(n(t[r],r,t))}return e}function Ze(t){return new Function("d","return {"+t.map(function(t,n){return JSON.stringify(t)+": d["+n+"]"}).join(",")+"}")}function Ge(t,n){var e=Ze(t);return function(r,i){return n(e(r),i,t)}}function Je(t){var n=Object.create(null),e=[];return t.forEach(function(t){for(var r in t)r in n||e.push(n[r]=r)}),e}function Qe(t,n,e,r){if(isNaN(n)||isNaN(e))return t;var i,o,u,a,c,s,f,l,h,p=t._root,d={data:r},v=t._x0,_=t._y0,g=t._x1,y=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((s=n>=(o=(v+g)/2))?v=o:g=o,(f=e>=(u=(_+y)/2))?_=u:y=u,i=p,!(p=p[l=f<<1|s]))return i[l]=d,t;if(a=+t._x.call(null,p.data),c=+t._y.call(null,p.data),n===a&&e===c)return d.next=p,i?i[l]=d:t._root=d,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(s=n>=(o=(v+g)/2))?v=o:g=o,(f=e>=(u=(_+y)/2))?_=u:y=u}while((l=f<<1|s)==(h=(c>=u)<<1|a>=o));return i[h]=p,i[l]=d,t}function Ke(t){var n,e,r,i,o=t.length,u=new Array(o),a=new Array(o),c=1/0,s=1/0,f=-1/0,l=-1/0;for(e=0;e<o;++e)isNaN(r=+this._x.call(null,n=t[e]))||isNaN(i=+this._y.call(null,n))||(u[e]=r,a[e]=i,r<c&&(c=r),r>f&&(f=r),i<s&&(s=i),i>l&&(l=i));for(f<c&&(c=this._x0,f=this._x1),l<s&&(s=this._y0,l=this._y1),this.cover(c,s).cover(f,l),e=0;e<o;++e)Qe(this,u[e],a[e],t[e]);return this}function tr(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function nr(t){return t[0]}function er(t){return t[1]}function rr(t,n,e){var r=new ir(null==n?nr:n,null==e?er:e,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function ir(t,n,e,r,i,o){this._x=t,this._y=n,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function or(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}function ur(t){return t.x+t.vx}function ar(t){return t.y+t.vy}function cr(t){return t.index}function sr(t,n){var e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function fr(t){return t.x}function lr(t){return t.y}function hr(t){return new pr(t)}function pr(t){if(!(n=Ev.exec(t)))throw new Error("invalid format: "+t);var n,e=n[1]||" ",r=n[2]||">",i=n[3]||"-",o=n[4]||"",u=!!n[5],a=n[6]&&+n[6],c=!!n[7],s=n[8]&&+n[8].slice(1),f=n[9]||"";"n"===f?(c=!0, +f="g"):kv[f]||(f=""),(u||"0"===e&&"="===r)&&(u=!0,e="0",r="="),this.fill=e,this.align=r,this.sign=i,this.symbol=o,this.zero=u,this.width=a,this.comma=c,this.precision=s,this.type=f}function dr(n){return Av=Pv(n),t.format=Av.format,t.formatPrefix=Av.formatPrefix,Av}function vr(){this.reset()}function _r(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function gr(t){return t>1?0:t<-1?__:Math.acos(t)}function yr(t){return t>1?g_:t<-1?-g_:Math.asin(t)}function mr(t){return(t=C_(t/2))*t}function xr(){}function br(t,n){t&&q_.hasOwnProperty(t.type)&&q_[t.type](t,n)}function wr(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i<o;)r=t[i],n.point(r[0],r[1],r[2]);n.lineEnd()}function Mr(t,n){var e=-1,r=t.length;for(n.polygonStart();++e<r;)wr(t[e],n,1);n.polygonEnd()}function Tr(){F_.point=Nr}function Sr(){kr(Dv,Ov)}function Nr(t,n){F_.point=kr,Dv=t,Ov=n,t*=b_,n*=b_,Fv=t,Iv=S_(n=n/2+y_),Yv=C_(n)}function kr(t,n){t*=b_,n*=b_,n=n/2+y_;var e=t-Fv,r=e>=0?1:-1,i=r*e,o=S_(n),u=C_(n),a=Yv*u,c=Iv*o+a*S_(i),s=a*r*C_(i);D_.add(T_(s,c)),Fv=t,Iv=o,Yv=u}function Er(t){return[T_(t[1],t[0]),yr(t[2])]}function Ar(t){var n=t[0],e=t[1],r=S_(e);return[r*S_(n),r*C_(n),C_(e)]}function Cr(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function zr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Pr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Lr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Rr(t){var n=P_(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function qr(t,n){Gv.push(Jv=[Bv=t,Hv=t]),n<jv&&(jv=n),n>Xv&&(Xv=n)}function Ur(t,n){var e=Ar([t*b_,n*b_]);if(Zv){var r=zr(Zv,e),i=[r[1],-r[0],0],o=zr(i,r);Rr(o),o=Er(o);var u,a=t-Vv,c=a>0?1:-1,s=o[0]*x_*c,f=w_(a)>180;f^(c*Vv<s&&s<c*t)?(u=o[1]*x_)>Xv&&(Xv=u):(s=(s+360)%360-180,f^(c*Vv<s&&s<c*t)?(u=-o[1]*x_)<jv&&(jv=u):(n<jv&&(jv=n),n>Xv&&(Xv=n))),f?t<Vv?Br(Bv,t)>Br(Bv,Hv)&&(Hv=t):Br(t,Hv)>Br(Bv,Hv)&&(Bv=t):Hv>=Bv?(t<Bv&&(Bv=t),t>Hv&&(Hv=t)):t>Vv?Br(Bv,t)>Br(Bv,Hv)&&(Hv=t):Br(t,Hv)>Br(Bv,Hv)&&(Bv=t)}else Gv.push(Jv=[Bv=t,Hv=t]);n<jv&&(jv=n),n>Xv&&(Xv=n),Zv=e,Vv=t}function Dr(){B_.point=Ur}function Or(){Jv[0]=Bv,Jv[1]=Hv,B_.point=qr,Zv=null}function Fr(t,n){if(Zv){var e=t-Vv;Y_.add(w_(e)>180?e+(e>0?360:-360):e)}else $v=t,Wv=n;F_.point(t,n),Ur(t,n)}function Ir(){F_.lineStart()}function Yr(){Fr($v,Wv),F_.lineEnd(),w_(Y_)>v_&&(Bv=-(Hv=180)),Jv[0]=Bv,Jv[1]=Hv,Zv=null}function Br(t,n){return(n-=t)<0?n+360:n}function jr(t,n){return t[0]-n[0]}function Hr(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}function Xr(t,n){t*=b_,n*=b_;var e=S_(n);Vr(e*S_(t),e*C_(t),C_(n))}function Vr(t,n,e){++Qv,t_+=(t-t_)/Qv,n_+=(n-n_)/Qv,e_+=(e-e_)/Qv}function $r(){H_.point=Wr}function Wr(t,n){t*=b_,n*=b_;var e=S_(n);l_=e*S_(t),h_=e*C_(t),p_=C_(n),H_.point=Zr,Vr(l_,h_,p_)}function Zr(t,n){t*=b_,n*=b_;var e=S_(n),r=e*S_(t),i=e*C_(t),o=C_(n),u=T_(P_((u=h_*o-p_*i)*u+(u=p_*r-l_*o)*u+(u=l_*i-h_*r)*u),l_*r+h_*i+p_*o);Kv+=u,r_+=u*(l_+(l_=r)),i_+=u*(h_+(h_=i)),o_+=u*(p_+(p_=o)),Vr(l_,h_,p_)}function Gr(){H_.point=Xr}function Jr(){H_.point=Kr}function Qr(){ti(s_,f_),H_.point=Xr}function Kr(t,n){s_=t,f_=n,t*=b_,n*=b_,H_.point=ti;var e=S_(n);l_=e*S_(t),h_=e*C_(t),p_=C_(n),Vr(l_,h_,p_)}function ti(t,n){t*=b_,n*=b_;var e=S_(n),r=e*S_(t),i=e*C_(t),o=C_(n),u=h_*o-p_*i,a=p_*r-l_*o,c=l_*i-h_*r,s=P_(u*u+a*a+c*c),f=yr(s),l=s&&-f/s;u_+=l*u,a_+=l*a,c_+=l*c,Kv+=f,r_+=f*(l_+(l_=r)),i_+=f*(h_+(h_=i)),o_+=f*(p_+(p_=o)),Vr(l_,h_,p_)}function ni(t,n){return[t>__?t-m_:t<-__?t+m_:t,n]}function ei(t,n,e){return(t%=m_)?n||e?$_(ii(t),oi(n,e)):ii(t):n||e?oi(n,e):ni}function ri(t){return function(n,e){return n+=t,[n>__?n-m_:n<-__?n+m_:n,e]}}function ii(t){var n=ri(t);return n.invert=ri(-t),n}function oi(t,n){function e(t,n){var e=S_(n),a=S_(t)*e,c=C_(t)*e,s=C_(n),f=s*r+a*i;return[T_(c*o-f*u,a*r-s*i),yr(f*o+c*u)]}var r=S_(t),i=C_(t),o=S_(n),u=C_(n);return e.invert=function(t,n){var e=S_(n),a=S_(t)*e,c=C_(t)*e,s=C_(n),f=s*o-c*u;return[T_(c*o+s*u,a*r+f*i),yr(f*r-a*i)]},e}function ui(t,n,e,r,i,o){if(e){var u=S_(n),a=C_(n),c=r*e;null==i?(i=n+r*m_,o=n-c/2):(i=ai(u,i),o=ai(u,o),(r>0?i<o:i>o)&&(i+=r*m_));for(var s,f=i;r>0?f>o:f<o;f-=c)s=Er([u,-a*S_(f),-a*C_(f)]),t.point(s[0],s[1])}}function ai(t,n){n=Ar(n),n[0]-=t,Rr(n);var e=gr(-n[1]);return((-n[2]<0?-e:e)+m_-v_)%m_}function ci(t,n,e,r){this.x=t,this.z=n,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function si(t){if(n=t.length){for(var n,e,r=0,i=t[0];++r<n;)i.n=e=t[r],e.p=i,i=e;i.n=e=t[0],e.p=i}}function fi(t,n,e,r){function i(i,o){return t<=i&&i<=e&&n<=o&&o<=r}function o(i,o,a,s){var f=0,l=0;if(null==i||(f=u(i,a))!==(l=u(o,a))||c(i,o)<0^a>0)do{s.point(0===f||3===f?t:e,f>1?r:n)}while((f=(f+a+4)%4)!==l);else s.point(o[0],o[1])}function u(r,i){return w_(r[0]-t)<v_?i>0?0:3:w_(r[0]-e)<v_?i>0?2:1:w_(r[1]-n)<v_?i>0?1:0:i>0?3:2}function a(t,n){return c(t.x,n.x)}function c(t,n){var e=u(t,1),r=u(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(u){function c(t,n){i(t,n)&&N.point(t,n)}function s(){for(var n=0,e=0,i=_.length;e<i;++e)for(var o,u,a=_[e],c=1,s=a.length,f=a[0],l=f[0],h=f[1];c<s;++c)o=l,u=h,f=a[c],l=f[0],h=f[1],u<=r?h>r&&(l-o)*(r-u)>(h-u)*(t-o)&&++n:h<=r&&(l-o)*(r-u)<(h-u)*(t-o)&&--n;return n}function f(){N=k,v=[],_=[],S=!0}function l(){var t=s(),n=S&&t,e=(v=lf(v)).length;(n||e)&&(u.polygonStart(),n&&(u.lineStart(),o(null,null,1,u),u.lineEnd()),e&&fg(v,a,t,o,u),u.polygonEnd()),N=u,v=_=g=null}function h(){E.point=d,_&&_.push(g=[]),T=!0,M=!1,b=w=NaN}function p(){v&&(d(y,m),x&&M&&k.rejoin(),v.push(k.result())),E.point=c,M&&N.lineEnd()}function d(o,u){var a=i(o,u);if(_&&g.push([o,u]),T)y=o,m=u,x=a,T=!1,a&&(N.lineStart(),N.point(o,u));else if(a&&M)N.point(o,u);else{var c=[b=Math.max(hg,Math.min(lg,b)),w=Math.max(hg,Math.min(lg,w))],s=[o=Math.max(hg,Math.min(lg,o)),u=Math.max(hg,Math.min(lg,u))];cg(c,s,t,n,e,r)?(M||(N.lineStart(),N.point(c[0],c[1])),N.point(s[0],s[1]),a||N.lineEnd(),S=!1):a&&(N.lineStart(),N.point(o,u),S=!1)}b=o,w=u,M=a}var v,_,g,y,m,x,b,w,M,T,S,N=u,k=ag(),E={point:c,lineStart:h,lineEnd:p,polygonStart:f,polygonEnd:l};return E}}function li(){gg.point=pi,gg.lineEnd=hi}function hi(){gg.point=gg.lineEnd=xr}function pi(t,n){t*=b_,n*=b_,W_=t,Z_=C_(n),G_=S_(n),gg.point=di}function di(t,n){t*=b_,n*=b_;var e=C_(n),r=S_(n),i=w_(t-W_),o=S_(i),u=C_(i),a=r*u,c=G_*e-Z_*r*o,s=Z_*e+G_*r*o;_g.add(T_(P_(a*a+c*c),s)),W_=t,Z_=e,G_=r}function vi(t,n){return!(!t||!Mg.hasOwnProperty(t.type))&&Mg[t.type](t,n)}function _i(t,n){return 0===bg(t,n)}function gi(t,n){var e=bg(t[0],t[1]);return bg(t[0],n)+bg(n,t[1])<=e+v_}function yi(t,n){return!!vg(t.map(mi),xi(n))}function mi(t){return t=t.map(xi),t.pop(),t}function xi(t){return[t[0]*b_,t[1]*b_]}function bi(t,n,e){var r=Js(t,n-v_,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function wi(t,n,e){var r=Js(t,n-v_,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function Mi(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return Js(N_(o/_)*_,i,_).map(h).concat(Js(N_(s/g)*g,c,g).map(p)).concat(Js(N_(r/d)*d,e,d).filter(function(t){return w_(t%_)>v_}).map(f)).concat(Js(N_(a/v)*v,u,v).filter(function(t){return w_(t%g)>v_}).map(l))}var e,r,i,o,u,a,c,s,f,l,h,p,d=10,v=d,_=90,g=360,y=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[h(o).concat(p(c).slice(1),h(i).reverse().slice(1),p(s).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],s=+n[0][1],c=+n[1][1],o>i&&(n=o,o=i,i=n),s>c&&(n=s,s=c,c=n),t.precision(y)):[[o,s],[i,c]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],a=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),a>u&&(n=a,a=u,u=n),t.precision(y)):[[r,a],[e,u]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(_=+n[0],g=+n[1],t):[_,g]},t.stepMinor=function(n){return arguments.length?(d=+n[0],v=+n[1],t):[d,v]},t.precision=function(n){return arguments.length?(y=+n,f=bi(a,u,90),l=wi(r,e,y),h=bi(s,c,90),p=wi(o,i,y),t):y},t.extentMajor([[-180,-90+v_],[180,90-v_]]).extentMinor([[-180,-80-v_],[180,80+v_]])}function Ti(){return Mi()()}function Si(){Ag.point=Ni}function Ni(t,n){Ag.point=ki,J_=K_=t,Q_=tg=n}function ki(t,n){Eg.add(tg*t-K_*n),K_=t,tg=n}function Ei(){ki(J_,Q_)}function Ai(t,n){t<Cg&&(Cg=t),t>Pg&&(Pg=t),n<zg&&(zg=n),n>Lg&&(Lg=n)}function Ci(t,n){qg+=t,Ug+=n,++Dg}function zi(){Hg.point=Pi}function Pi(t,n){Hg.point=Li,Ci(rg=t,ig=n)}function Li(t,n){var e=t-rg,r=n-ig,i=P_(e*e+r*r);Og+=i*(rg+t)/2,Fg+=i*(ig+n)/2,Ig+=i,Ci(rg=t,ig=n)}function Ri(){Hg.point=Ci}function qi(){Hg.point=Di}function Ui(){Oi(ng,eg)}function Di(t,n){Hg.point=Oi,Ci(ng=rg=t,eg=ig=n)}function Oi(t,n){var e=t-rg,r=n-ig,i=P_(e*e+r*r);Og+=i*(rg+t)/2,Fg+=i*(ig+n)/2,Ig+=i,i=ig*t-rg*n,Yg+=i*(rg+t),Bg+=i*(ig+n),jg+=3*i,Ci(rg=t,ig=n)}function Fi(t){this._context=t}function Ii(t,n){Jg.point=Yi,Vg=Wg=t,$g=Zg=n}function Yi(t,n){Wg-=t,Zg-=n,Gg.add(P_(Wg*Wg+Zg*Zg)),Wg=t,Zg=n}function Bi(){this._string=[]}function ji(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Hi(t){return t.length>1}function Xi(t,n){return((t=t.x)[0]<0?t[1]-g_-v_:g_-t[1])-((n=n.x)[0]<0?n[1]-g_-v_:g_-n[1])}function Vi(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,u){var a=o>0?__:-__,c=w_(o-e);w_(c-__)<v_?(t.point(e,r=(r+u)/2>0?g_:-g_),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),t.point(o,r),n=0):i!==a&&c>=__&&(w_(e-i)<v_&&(e-=i*v_),w_(o-a)<v_&&(o-=a*v_),r=$i(e,r,o,u),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),n=0),t.point(e=o,r=u),i=a},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}function $i(t,n,e,r){var i,o,u=C_(t-e);return w_(u)>v_?M_((C_(n)*(o=S_(r))*C_(e)-C_(r)*(i=S_(n))*C_(t))/(i*o*u)):(n+r)/2}function Wi(t,n,e,r){var i;if(null==t)i=e*g_,r.point(-__,i),r.point(0,i),r.point(__,i),r.point(__,0),r.point(__,-i),r.point(0,-i),r.point(-__,-i),r.point(-__,0),r.point(-__,i);else if(w_(t[0]-n[0])>v_){var o=t[0]<n[0]?__:-__;i=e*o/2,r.point(-o,i),r.point(0,i),r.point(o,i)}else r.point(n[0],n[1])}function Zi(t){return function(n){var e=new Gi;for(var r in t)e[r]=t[r];return e.stream=n,e}}function Gi(){}function Ji(t,n,e){var r=n[1][0]-n[0][0],i=n[1][1]-n[0][1],o=t.clipExtent&&t.clipExtent();t.scale(150).translate([0,0]),null!=o&&t.clipExtent(null),U_(e,t.stream(Rg));var u=Rg.result(),a=Math.min(r/(u[1][0]-u[0][0]),i/(u[1][1]-u[0][1])),c=+n[0][0]+(r-a*(u[1][0]+u[0][0]))/2,s=+n[0][1]+(i-a*(u[1][1]+u[0][1]))/2;return null!=o&&t.clipExtent(o),t.scale(150*a).translate([c,s])}function Qi(t,n,e){return Ji(t,[[0,0],n],e)}function Ki(t){return Zi({point:function(n,e){n=t(n,e),this.stream.point(n[0],n[1])}})}function to(t,n){function e(r,i,o,u,a,c,s,f,l,h,p,d,v,_){var g=s-r,y=f-i,m=g*g+y*y;if(m>4*n&&v--){var x=u+h,b=a+p,w=c+d,M=P_(x*x+b*b+w*w),T=yr(w/=M),S=w_(w_(w)-1)<v_||w_(o-l)<v_?(o+l)/2:T_(b,x),N=t(S,T),k=N[0],E=N[1],A=k-r,C=E-i,z=y*A-g*C;(z*z/m>n||w_((g*A+y*C)/m-.5)>.3||u*h+a*p+c*d<iy)&&(e(r,i,o,u,a,c,k,E,S,x/=M,b/=M,w,v,_),_.point(k,E),e(k,E,S,x,b,w,s,f,l,h,p,d,v,_))}}return function(n){function r(e,r){e=t(e,r),n.point(e[0],e[1])}function i(){g=NaN,w.point=o,n.lineStart()}function o(r,i){var o=Ar([r,i]),u=t(r,i);e(g,y,_,m,x,b,g=u[0],y=u[1],_=r,m=o[0],x=o[1],b=o[2],ry,n),n.point(g,y)}function u(){w.point=r,n.lineEnd()}function a(){i(),w.point=c,w.lineEnd=s}function c(t,n){o(f=t,n),l=g,h=y,p=m,d=x,v=b,w.point=o}function s(){e(g,y,_,m,x,b,l,h,f,p,d,v,ry,n),w.lineEnd=u,u()}var f,l,h,p,d,v,_,g,y,m,x,b,w={point:r,lineStart:i,lineEnd:u,polygonStart:function(){n.polygonStart(),w.lineStart=a},polygonEnd:function(){n.polygonEnd(),w.lineStart=i}};return w}}function no(t){return eo(function(){return t})()}function eo(t){function n(t){return t=f(t[0]*b_,t[1]*b_),[t[0]*_+a,c-t[1]*_]}function e(t){return(t=f.invert((t[0]-a)/_,(c-t[1])/_))&&[t[0]*x_,t[1]*x_]}function r(t,n){return t=u(t,n),[t[0]*_+a,c-t[1]*_]}function i(){f=$_(s=ei(b,w,M),u);var t=u(m,x);return a=g-t[0]*_,c=y+t[1]*_,o()}function o(){return d=v=null,n}var u,a,c,s,f,l,h,p,d,v,_=150,g=480,y=250,m=0,x=0,b=0,w=0,M=0,T=null,S=ty,N=null,k=Ng,E=.5,A=oy(r,E);return n.stream=function(t){return d&&v===t?d:d=uy(S(s,A(k(v=t))))},n.clipAngle=function(t){return arguments.length?(S=+t?ny(T=t*b_,6*b_):(T=null,ty),o()):T*x_},n.clipExtent=function(t){return arguments.length?(k=null==t?(N=l=h=p=null,Ng):fi(N=+t[0][0],l=+t[0][1],h=+t[1][0],p=+t[1][1]),o()):null==N?null:[[N,l],[h,p]]},n.scale=function(t){return arguments.length?(_=+t,i()):_},n.translate=function(t){return arguments.length?(g=+t[0],y=+t[1],i()):[g,y]},n.center=function(t){return arguments.length?(m=t[0]%360*b_,x=t[1]%360*b_,i()):[m*x_,x*x_]},n.rotate=function(t){return arguments.length?(b=t[0]%360*b_,w=t[1]%360*b_,M=t.length>2?t[2]%360*b_:0,i()):[b*x_,w*x_,M*x_]},n.precision=function(t){return arguments.length?(A=oy(r,E=t*t),o()):P_(E)},n.fitExtent=function(t,e){return Ji(n,t,e)},n.fitSize=function(t,e){return Qi(n,t,e)},function(){return u=t.apply(this,arguments),n.invert=u.invert&&e,i()}}function ro(t){var n=0,e=__/3,r=eo(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*b_,e=t[1]*b_):[n*x_,e*x_]},i}function io(t){function n(t,n){return[t*e,C_(n)/e]}var e=S_(t);return n.invert=function(t,n){return[t/e,yr(n*e)]},n}function oo(t,n){function e(t,n){var e=P_(o-2*i*C_(n))/i;return[e*C_(t*=i),u-e*S_(t)]}var r=C_(t),i=(r+C_(n))/2;if(w_(i)<v_)return io(t);var o=1+r*(2*i-r),u=P_(o)/i;return e.invert=function(t,n){var e=u-n;return[T_(t,w_(e))/i*z_(e),yr((o-(t*t+e*e)*i*i)/(2*i))]},e}function uo(t){var n=t.length;return{point:function(e,r){for(var i=-1;++i<n;)t[i].point(e,r)},sphere:function(){for(var e=-1;++e<n;)t[e].sphere()},lineStart:function(){for(var e=-1;++e<n;)t[e].lineStart()},lineEnd:function(){for(var e=-1;++e<n;)t[e].lineEnd()},polygonStart:function(){for(var e=-1;++e<n;)t[e].polygonStart()},polygonEnd:function(){for(var e=-1;++e<n;)t[e].polygonEnd()}}}function ao(t){return function(n,e){var r=S_(n),i=S_(e),o=t(r*i);return[o*i*C_(n),o*C_(e)]}}function co(t){return function(n,e){var r=P_(n*n+e*e),i=t(r),o=C_(i),u=S_(i);return[T_(n*o,r*u),yr(r&&e*o/r)]}}function so(t,n){return[t,E_(L_((g_+n)/2))]}function fo(t){function n(){var n=__*a(),u=o(og(o.rotate()).invert([0,0]));return s(null==f?[[u[0]-n,u[1]-n],[u[0]+n,u[1]+n]]:t===so?[[Math.max(u[0]-n,f),e],[Math.min(u[0]+n,r),i]]:[[f,Math.max(u[1]-n,e)],[r,Math.min(u[1]+n,i)]])}var e,r,i,o=no(t),u=o.center,a=o.scale,c=o.translate,s=o.clipExtent,f=null;return o.scale=function(t){return arguments.length?(a(t),n()):a()},o.translate=function(t){return arguments.length?(c(t),n()):c()},o.center=function(t){return arguments.length?(u(t),n()):u()},o.clipExtent=function(t){return arguments.length?(null==t?f=e=r=i=null:(f=+t[0][0],e=+t[0][1],r=+t[1][0],i=+t[1][1]),n()):null==f?null:[[f,e],[r,i]]},n()}function lo(t){return L_((g_+t)/2)}function ho(t,n){function e(t,n){o>0?n<-g_+v_&&(n=-g_+v_):n>g_-v_&&(n=g_-v_);var e=o/A_(lo(n),i);return[e*C_(i*t),o-e*S_(i*t)]}var r=S_(t),i=t===n?C_(t):E_(r/S_(n))/E_(lo(n)/lo(t)),o=r*A_(lo(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=z_(i)*P_(t*t+e*e);return[T_(t,w_(e))/i*z_(e),2*M_(A_(o/r,1/i))-g_]},e):so}function po(t,n){return[t,n]}function vo(t,n){function e(t,n){var e=o-n,r=i*t;return[e*C_(r),o-e*S_(r)]}var r=S_(t),i=t===n?C_(t):(r-S_(n))/(n-t),o=r/i+t;return w_(i)<v_?po:(e.invert=function(t,n){var e=o-n;return[T_(t,w_(e))/i*z_(e),o-z_(i)*P_(t*t+e*e)]},e)}function _o(t,n){var e=S_(n),r=S_(t)*e;return[e*C_(t)/r,C_(n)/r]}function go(t,n,e,r){return 1===t&&1===n&&0===e&&0===r?Ng:Zi({point:function(i,o){this.stream.point(i*t+e,o*n+r)}})}function yo(t,n){return[S_(n)*C_(t),C_(n)]}function mo(t,n){var e=S_(n),r=1+S_(t)*e;return[e*C_(t)/r,C_(n)/r]}function xo(t,n){return[E_(L_((g_+n)/2)),-t]}function bo(t,n){return t.parent===n.parent?1:2}function wo(t){return t.reduce(Mo,0)/t.length}function Mo(t,n){return t+n.x}function To(t){return 1+t.reduce(So,0)}function So(t,n){return Math.max(t,n.y)}function No(t){for(var n;n=t.children;)t=n[0];return t}function ko(t){for(var n;n=t.children;)t=n[n.length-1];return t}function Eo(t){var n=0,e=t.children,r=e&&e.length;if(r)for(;--r>=0;)n+=e[r].value;else n=1;t.value=n}function Ao(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function Co(t,n){var e,r,i,o,u,a=new qo(t),c=+t.value&&(a.value=t.value),s=[a];for(null==n&&(n=Po);e=s.pop();)if(c&&(e.value=+e.data.value),(i=n(e.data))&&(u=i.length))for(e.children=new Array(u),o=u-1;o>=0;--o)s.push(r=e.children[o]=new qo(i[o])),r.parent=e,r.depth=e.depth+1;return a.eachBefore(Ro)}function zo(){return Co(this).eachBefore(Lo)}function Po(t){return t.children}function Lo(t){t.data=t.data.data}function Ro(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function qo(t){this.data=t,this.depth=this.height=0,this.parent=null}function Uo(t){this._=t,this.next=null}function Do(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r-n.r;return i*i+1e-6>e*e+r*r}function Oo(t,n){var e,r,i,o=null,u=t.head;switch(n.length){case 1:e=Fo(n[0]);break;case 2:e=Io(n[0],n[1]);break;case 3:e=Yo(n[0],n[1],n[2])}for(;u;)i=u._,r=u.next,e&&Do(e,i)?o=u:(o?(t.tail=o,o.next=null):t.head=t.tail=null,n.push(i),e=Oo(t,n),n.pop(),t.head?(u.next=t.head,t.head=u):(u.next=null,t.head=t.tail=u),o=t.tail,o.next=r),u=r;return t.tail=o,e}function Fo(t){return{x:t.x,y:t.y,r:t.r}}function Io(t,n){var e=t.x,r=t.y,i=t.r,o=n.x,u=n.y,a=n.r,c=o-e,s=u-r,f=a-i,l=Math.sqrt(c*c+s*s);return{x:(e+o+c/l*f)/2,y:(r+u+s/l*f)/2,r:(l+i+a)/2}}function Yo(t,n,e){var r=t.x,i=t.y,o=t.r,u=n.x,a=n.y,c=n.r,s=e.x,f=e.y,l=e.r,h=2*(r-u),p=2*(i-a),d=2*(c-o),v=r*r+i*i-o*o-u*u-a*a+c*c,_=2*(r-s),g=2*(i-f),y=2*(l-o),m=r*r+i*i-o*o-s*s-f*f+l*l,x=_*p-h*g,b=(p*m-g*v)/x-r,w=(g*d-p*y)/x,M=(_*v-h*m)/x-i,T=(h*y-_*d)/x,S=w*w+T*T-1,N=2*(b*w+M*T+o),k=b*b+M*M-o*o,E=(-N-Math.sqrt(N*N-4*S*k))/(2*S);return{x:b+w*E+r,y:M+T*E+i,r:E}}function Bo(t,n,e){var r=t.x,i=t.y,o=n.r+e.r,u=t.r+e.r,a=n.x-r,c=n.y-i,s=a*a+c*c;if(s){var f=.5+((u*=u)-(o*=o))/(2*s),l=Math.sqrt(Math.max(0,2*o*(u+s)-(u-=s)*u-o*o))/(2*s);e.x=r+f*a+l*c,e.y=i+f*c-l*a}else e.x=r+u,e.y=i}function jo(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r+n.r;return i*i-1e-6>e*e+r*r}function Ho(t,n,e){var r=t._,i=t.next._,o=r.r+i.r,u=(r.x*i.r+i.x*r.r)/o-n,a=(r.y*i.r+i.y*r.r)/o-e;return u*u+a*a}function Xo(t){this._=t,this.next=null,this.previous=null}function Vo(t){if(!(i=t.length))return 0;var n,e,r,i;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;Bo(e,n,r=t[2]);var o,u,a,c,s,f,l,h=n.r*n.r,p=e.r*e.r,d=r.r*r.r,v=h+p+d,_=h*n.x+p*e.x+d*r.x,g=h*n.y+p*e.y+d*r.y;n=new Xo(n),e=new Xo(e),r=new Xo(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(a=3;a<i;++a){Bo(n._,e._,r=t[a]),r=new Xo(r),c=e.next,s=n.previous,f=e._.r,l=n._.r;do{if(f<=l){if(jo(c._,r._)){e=c,n.next=e,e.previous=n,--a;continue t}f+=c._.r,c=c.next}else{if(jo(s._,r._)){n=s,n.next=e,e.previous=n,--a;continue t}l+=s._.r,s=s.previous}}while(c!==s.next);for(r.previous=n,r.next=e,n.next=e.previous=e=r,v+=d=r._.r*r._.r,_+=d*r._.x,g+=d*r._.y,h=Ho(n,o=_/v,u=g/v);(r=r.next)!==e;)(d=Ho(r,o,u))<h&&(n=r,h=d);e=n.next}for(n=[e._],r=e;(r=r.next)!==e;)n.push(r._);for(r=Uy(n),a=0;a<i;++a)n=t[a],n.x-=r.x,n.y-=r.y;return r.r}function $o(t){return null==t?null:Wo(t)}function Wo(t){if("function"!=typeof t)throw new Error;return t}function Zo(){return 0}function Go(t){return Math.sqrt(t.value)}function Jo(t){return function(n){n.children||(n.r=Math.max(0,+t(n)||0))}}function Qo(t,n){return function(e){if(r=e.children){var r,i,o,u=r.length,a=t(e)*n||0;if(a)for(i=0;i<u;++i)r[i].r+=a;if(o=Vo(r),a)for(i=0;i<u;++i)r[i].r-=a;e.r=o+a}}}function Ko(t){return function(n){var e=n.parent;n.r*=t,e&&(n.x=e.x+t*n.x,n.y=e.y+t*n.y)}}function tu(t){return t.id}function nu(t){return t.parentId}function eu(t,n){return t.parent===n.parent?1:2}function ru(t){var n=t.children;return n?n[0]:t.t}function iu(t){var n=t.children;return n?n[n.length-1]:t.t}function ou(t,n,e){var r=e/(n.i-t.i);n.c-=r,n.s+=e,t.c+=r,n.z+=e,n.m+=e}function uu(t){for(var n,e=0,r=0,i=t.children,o=i.length;--o>=0;)n=i[o],n.z+=e,n.m+=e,e+=n.s+(r+=n.c)}function au(t,n,e){return t.a.parent===n.parent?t.a:e}function cu(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function su(t){for(var n,e,r,i,o,u=new cu(t,0),a=[u];n=a.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)a.push(e=n.children[i]=new cu(r[i],i)),e.parent=n;return(u.parent=new cu(null,0)).children=[u],u}function fu(t,n,e,r,i,o){for(var u,a,c,s,f,l,h,p,d,v,_,g=[],y=n.children,m=0,x=0,b=y.length,w=n.value;m<b;){c=i-e,s=o-r;do{f=y[x++].value}while(!f&&x<b);for(l=h=f,v=Math.max(s/c,c/s)/(w*t),_=f*f*v,d=Math.max(h/_,_/l);x<b;++x){if(f+=a=y[x].value,a<l&&(l=a),a>h&&(h=a),_=f*f*v,(p=Math.max(h/_,_/l))>d){f-=a;break}d=p}g.push(u={value:f,dice:c<s,children:y.slice(m,x)}),u.dice?Yy(u,e,r,i,w?r+=s*f/w:o):Wy(u,e,r,w?e+=c*f/w:i,o),w-=f,m=x}return g}function lu(t,n){return t[0]-n[0]||t[1]-n[1]}function hu(t){for(var n=t.length,e=[0,1],r=2,i=2;i<n;++i){for(;r>1&&rm(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function pu(t){if(!(t>=1))throw new Error;this._size=t,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}function du(t){if(!t._start)try{vu(t)}catch(n){if(t._tasks[t._ended+t._active-1])gu(t,n);else if(!t._data)throw n}}function vu(t){for(;t._start=t._waiting&&t._active<t._size;){var n=t._ended+t._active,e=t._tasks[n],r=e.length-1,i=e[r];e[r]=_u(t,n),--t._waiting,++t._active,e=i.apply(null,e),t._tasks[n]&&(t._tasks[n]=e||cm)}}function _u(t,n){return function(e,r){t._tasks[n]&&(--t._active,++t._ended,t._tasks[n]=null,null==t._error&&(null!=e?gu(t,e):(t._data[n]=r,t._waiting?du(t):yu(t))))}}function gu(t,n){var e,r=t._tasks.length;for(t._error=n,t._data=void 0,t._waiting=NaN;--r>=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,yu(t)}function yu(t){if(!t._active&&t._call){var n=t._data;t._data=void 0,t._call(t._error,n)}}function mu(t){return new pu(arguments.length?+t:1/0)}function xu(t){return function(n,e){t(null==n?e:null)}}function bu(t){var n=t.responseType;return n&&"text"!==n?t.response:t.responseText}function wu(t,n){return function(e){return t(e.responseText,n)}}function Mu(t){function n(n){var o=n+"",u=e.get(o);if(!u){if(i!==km)return i;e.set(o,u=r.push(n))}return t[(u-1)%t.length]}var e=Be(),r=[],i=km;return t=null==t?[]:Nm.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=Be();for(var i,o,u=-1,a=t.length;++u<a;)e.has(o=(i=t[u])+"")||e.set(o,r.push(i));return n},n.range=function(e){return arguments.length?(t=Nm.call(e),n):t.slice()},n.unknown=function(t){return arguments.length?(i=t,n):i},n.copy=function(){return Mu().domain(r).range(t).unknown(i)},n}function Tu(){function t(){var t=i().length,r=u[1]<u[0],l=u[r-0],h=u[1-r];n=(h-l)/Math.max(1,t-c+2*s),a&&(n=Math.floor(n)),l+=(h-l-n*(t-c))*f,e=n*(1-c),a&&(l=Math.round(l),e=Math.round(e));var p=Js(t).map(function(t){return l+n*t});return o(r?p.reverse():p)}var n,e,r=Mu().unknown(void 0),i=r.domain,o=r.range,u=[0,1],a=!1,c=0,s=0,f=.5;return delete r.unknown,r.domain=function(n){return arguments.length?(i(n),t()):i()},r.range=function(n){return arguments.length?(u=[+n[0],+n[1]],t()):u.slice()},r.rangeRound=function(n){return u=[+n[0],+n[1]],a=!0,t()},r.bandwidth=function(){return e},r.step=function(){return n},r.round=function(n){return arguments.length?(a=!!n,t()):a},r.padding=function(n){return arguments.length?(c=s=Math.max(0,Math.min(1,n)),t()):c},r.paddingInner=function(n){return arguments.length?(c=Math.max(0,Math.min(1,n)),t()):c},r.paddingOuter=function(n){return arguments.length?(s=Math.max(0,Math.min(1,n)),t()):s},r.align=function(n){return arguments.length?(f=Math.max(0,Math.min(1,n)),t()):f},r.copy=function(){return Tu().domain(i()).range(u).round(a).paddingInner(c).paddingOuter(s).align(f)},t()}function Su(t){var n=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return Su(n())},t}function Nu(){return Su(Tu().paddingInner(1))}function ku(t,n){return(n-=t=+t)?function(e){return(e-t)/n}:Em(n)}function Eu(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}function Au(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}function Cu(t,n,e,r){var i=t[0],o=t[1],u=n[0],a=n[1];return o<i?(i=e(o,i),u=r(a,u)):(i=e(i,o),u=r(u,a)),function(t){return u(i(t))}}function zu(t,n,e,r){var i=Math.min(t.length,n.length)-1,o=new Array(i),u=new Array(i),a=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),n=n.slice().reverse());++a<i;)o[a]=e(t[a],t[a+1]),u[a]=r(n[a],n[a+1]);return function(n){var e=Ds(t,n,1,i)-1;return u[e](o[e](n))}}function Pu(t,n){return n.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp())}function Lu(t,n){function e(){return i=Math.min(a.length,c.length)>2?zu:Cu,o=u=null,r}function r(n){return(o||(o=i(a,c,f?Eu(t):t,s)))(+n)}var i,o,u,a=Cm,c=Cm,s=Sh,f=!1;return r.invert=function(t){return(u||(u=i(c,a,ku,f?Au(n):n)))(+t)},r.domain=function(t){return arguments.length?(a=Sm.call(t,Am),e()):a.slice()},r.range=function(t){return arguments.length?(c=Nm.call(t),e()):c.slice()},r.rangeRound=function(t){return c=Nm.call(t),s=Nh,e()},r.clamp=function(t){return arguments.length?(f=!!t,e()):f},r.interpolate=function(t){return arguments.length?(s=t,e()):s},e()}function Ru(t){var n=t.domain;return t.ticks=function(t){var e=n();return nf(e[0],e[e.length-1],null==t?10:t)},t.tickFormat=function(t,e){return zm(n(),t,e)},t.nice=function(e){var r=n(),o=r.length-1,u=null==e?10:e,a=r[0],c=r[o],s=i(a,c,u);return s&&(s=i(Math.floor(a/s)*s,Math.ceil(c/s)*s,u),r[0]=Math.floor(a/s)*s,r[o]=Math.ceil(c/s)*s,n(r)),t},t}function qu(){var t=Lu(ku,xh);return t.copy=function(){return Pu(t,qu())},Ru(t)}function Uu(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=Sm.call(e,Am),t):n.slice()},t.copy=function(){return Uu().domain(n)},Ru(t)}function Du(t,n){return(n=Math.log(n/t))?function(e){return Math.log(e/t)/n}:Em(n)}function Ou(t,n){return t<0?function(e){return-Math.pow(-n,e)*Math.pow(-t,1-e)}:function(e){return Math.pow(n,e)*Math.pow(t,1-e)}}function Fu(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Iu(t){return 10===t?Fu:t===Math.E?Math.exp:function(n){return Math.pow(t,n)}}function Yu(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(n){return Math.log(n)/t})}function Bu(t){return function(n){return-t(-n)}}function ju(){function n(){return o=Yu(i),u=Iu(i),r()[0]<0&&(o=Bu(o),u=Bu(u)),e}var e=Lu(Du,Ou).domain([1,10]),r=e.domain,i=10,o=Yu(10),u=Iu(10);return e.base=function(t){return arguments.length?(i=+t,n()):i},e.domain=function(t){return arguments.length?(r(t),n()):r()},e.ticks=function(t){var n,e=r(),a=e[0],c=e[e.length-1];(n=c<a)&&(h=a,a=c,c=h);var s,f,l,h=o(a),p=o(c),d=null==t?10:+t,v=[];if(!(i%1)&&p-h<d){if(h=Math.round(h)-1,p=Math.round(p)+1,a>0){for(;h<p;++h)for(f=1,s=u(h);f<i;++f)if(!((l=s*f)<a)){if(l>c)break;v.push(l)}}else for(;h<p;++h)for(f=i-1,s=u(h);f>=1;--f)if(!((l=s*f)<a)){if(l>c)break;v.push(l)}}else v=nf(h,p,Math.min(p-h,d)).map(u);return n?v.reverse():v},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var a=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/u(Math.round(o(t)));return n*i<i-.5&&(n*=i),n<=a?r(t):""}},e.nice=function(){return r(Pm(r(),{floor:function(t){return u(Math.floor(o(t)))},ceil:function(t){return u(Math.ceil(o(t)))}}))},e.copy=function(){return Pu(e,ju().base(i))},e}function Hu(t,n){return t<0?-Math.pow(-t,n):Math.pow(t,n)}function Xu(){function t(t,n){return(n=Hu(n,e)-(t=Hu(t,e)))?function(r){return(Hu(r,e)-t)/n}:Em(n)}function n(t,n){return n=Hu(n,e)-(t=Hu(t,e)),function(r){return Hu(t+n*r,1/e)}}var e=1,r=Lu(t,n),i=r.domain;return r.exponent=function(t){return arguments.length?(e=+t,i(i())):e},r.copy=function(){return Pu(r,Xu().exponent(e))},Ru(r)}function Vu(){return Xu().exponent(.5)}function $u(){function t(){var t=0,o=Math.max(1,r.length);for(i=new Array(o-1);++t<o;)i[t-1]=of(e,t/o);return n}function n(t){if(!isNaN(t=+t))return r[Ds(i,t)]}var e=[],r=[],i=[];return n.invertExtent=function(t){var n=r.indexOf(t);return n<0?[NaN,NaN]:[n>0?i[n-1]:e[0],n<i.length?i[n]:e[e.length-1]]},n.domain=function(n){if(!arguments.length)return e.slice();e=[];for(var r,i=0,o=n.length;i<o;++i)null==(r=n[i])||isNaN(r=+r)||e.push(r);return e.sort(Rs),t()},n.range=function(n){return arguments.length?(r=Nm.call(n),t()):r.slice()},n.quantiles=function(){return i.slice()},n.copy=function(){return $u().domain(e).range(r)},n}function Wu(){function t(t){if(t<=t)return u[Ds(o,t,0,i)]}function n(){var n=-1;for(o=new Array(i);++n<i;)o[n]=((n+1)*r-(n-i)*e)/(i+1);return t}var e=0,r=1,i=1,o=[.5],u=[0,1];return t.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],n()):[e,r]},t.range=function(t){return arguments.length?(i=(u=Nm.call(t)).length-1,n()):u.slice()},t.invertExtent=function(t){var n=u.indexOf(t);return n<0?[NaN,NaN]:n<1?[e,o[0]]:n>=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Wu().domain([e,r]).range(u)},Ru(t)}function Zu(){function t(t){if(t<=t)return e[Ds(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=Nm.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=Nm.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Zu().domain(n).range(e)},t}function Gu(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n<e-t?n:e},i.offset=function(t,e){return n(t=new Date(+t),null==e?1:Math.floor(e)),t},i.range=function(e,r,o){var u=[];if(e=i.ceil(e),o=null==o?1:Math.floor(o),!(e<r&&o>0))return u;do{u.push(new Date(+e))}while(n(e,o),t(e),e<r);return u},i.filter=function(e){return Gu(function(n){if(n>=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return Lm.setTime(+n),Rm.setTime(+r),t(Lm),t(Rm),Math.floor(e(Lm,Rm))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function Ju(t){return Gu(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Dm)/Om})}function Qu(t){return Gu(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/Om})}function Ku(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function ta(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function na(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function ea(t){function n(t,n){return function(e){var r,i,o,u=[],a=-1,c=0,s=t.length;for(e instanceof Date||(e=new Date(+e));++a<s;)37===t.charCodeAt(a)&&(u.push(t.slice(c,a)),null!=(i=Ux[r=t.charAt(++a)])?r=t.charAt(++a):i="e"===r?" ":"0",(o=n[r])&&(r=o(e,i)),u.push(r),c=a+1);return u.push(t.slice(c,a)),u.join("")}}function e(t,n){return function(e){var i=na(1900) +;if(r(i,t,e+="",0)!=e.length)return null;if("p"in i&&(i.H=i.H%12+12*i.p),"W"in i||"U"in i){"w"in i||(i.w="W"in i?1:0);var o="Z"in i?ta(na(i.y)).getUTCDay():n(na(i.y)).getDay();i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(o+5)%7:i.w+7*i.U-(o+6)%7}return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,ta(i)):n(i)}}function r(t,n,e,r){for(var i,o,u=0,a=n.length,c=e.length;u<a;){if(r>=c)return-1;if(37===(i=n.charCodeAt(u++))){if(i=n.charAt(u++),!(o=B[i in Ux?n.charAt(u++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function i(t,n,e){var r=C.exec(n.slice(e));return r?(t.p=z[r[0].toLowerCase()],e+r[0].length):-1}function o(t,n,e){var r=R.exec(n.slice(e));return r?(t.w=q[r[0].toLowerCase()],e+r[0].length):-1}function u(t,n,e){var r=P.exec(n.slice(e));return r?(t.w=L[r[0].toLowerCase()],e+r[0].length):-1}function a(t,n,e){var r=O.exec(n.slice(e));return r?(t.m=F[r[0].toLowerCase()],e+r[0].length):-1}function c(t,n,e){var r=U.exec(n.slice(e));return r?(t.m=D[r[0].toLowerCase()],e+r[0].length):-1}function s(t,n,e){return r(t,w,n,e)}function f(t,n,e){return r(t,M,n,e)}function l(t,n,e){return r(t,T,n,e)}function h(t){return k[t.getDay()]}function p(t){return N[t.getDay()]}function d(t){return A[t.getMonth()]}function v(t){return E[t.getMonth()]}function _(t){return S[+(t.getHours()>=12)]}function g(t){return k[t.getUTCDay()]}function y(t){return N[t.getUTCDay()]}function m(t){return A[t.getUTCMonth()]}function x(t){return E[t.getUTCMonth()]}function b(t){return S[+(t.getUTCHours()>=12)]}var w=t.dateTime,M=t.date,T=t.time,S=t.periods,N=t.days,k=t.shortDays,E=t.months,A=t.shortMonths,C=oa(S),z=ua(S),P=oa(N),L=ua(N),R=oa(k),q=ua(k),U=oa(E),D=ua(E),O=oa(A),F=ua(A),I={a:h,A:p,b:d,B:v,c:null,d:ba,e:ba,H:wa,I:Ma,j:Ta,L:Sa,m:Na,M:ka,p:_,S:Ea,U:Aa,w:Ca,W:za,x:null,X:null,y:Pa,Y:La,Z:Ra,"%":Za},Y={a:g,A:y,b:m,B:x,c:null,d:qa,e:qa,H:Ua,I:Da,j:Oa,L:Fa,m:Ia,M:Ya,p:b,S:Ba,U:ja,w:Ha,W:Xa,x:null,X:null,y:Va,Y:$a,Z:Wa,"%":Za},B={a:o,A:u,b:a,B:c,c:s,d:da,e:da,H:_a,I:_a,j:va,L:ma,m:pa,M:ga,p:i,S:ya,U:ca,w:aa,W:sa,x:f,X:l,y:la,Y:fa,Z:ha,"%":xa};return I.x=n(M,I),I.X=n(T,I),I.c=n(w,I),Y.x=n(M,Y),Y.X=n(T,Y),Y.c=n(w,Y),{format:function(t){var e=n(t+="",I);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",Ku);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",Y);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,ta);return n.toString=function(){return t},n}}}function ra(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o<e?new Array(e-o+1).join(n)+i:i)}function ia(t){return t.replace(Fx,"\\$&")}function oa(t){return new RegExp("^(?:"+t.map(ia).join("|")+")","i")}function ua(t){for(var n={},e=-1,r=t.length;++e<r;)n[t[e].toLowerCase()]=e;return n}function aa(t,n,e){var r=Dx.exec(n.slice(e,e+1));return r?(t.w=+r[0],e+r[0].length):-1}function ca(t,n,e){var r=Dx.exec(n.slice(e));return r?(t.U=+r[0],e+r[0].length):-1}function sa(t,n,e){var r=Dx.exec(n.slice(e));return r?(t.W=+r[0],e+r[0].length):-1}function fa(t,n,e){var r=Dx.exec(n.slice(e,e+4));return r?(t.y=+r[0],e+r[0].length):-1}function la(t,n,e){var r=Dx.exec(n.slice(e,e+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),e+r[0].length):-1}function ha(t,n,e){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function pa(t,n,e){var r=Dx.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function da(t,n,e){var r=Dx.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function va(t,n,e){var r=Dx.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function _a(t,n,e){var r=Dx.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ga(t,n,e){var r=Dx.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ya(t,n,e){var r=Dx.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function ma(t,n,e){var r=Dx.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function xa(t,n,e){var r=Ox.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function ba(t,n){return ra(t.getDate(),n,2)}function wa(t,n){return ra(t.getHours(),n,2)}function Ma(t,n){return ra(t.getHours()%12||12,n,2)}function Ta(t,n){return ra(1+Xm.count(sx(t),t),n,3)}function Sa(t,n){return ra(t.getMilliseconds(),n,3)}function Na(t,n){return ra(t.getMonth()+1,n,2)}function ka(t,n){return ra(t.getMinutes(),n,2)}function Ea(t,n){return ra(t.getSeconds(),n,2)}function Aa(t,n){return ra($m.count(sx(t),t),n,2)}function Ca(t){return t.getDay()}function za(t,n){return ra(Wm.count(sx(t),t),n,2)}function Pa(t,n){return ra(t.getFullYear()%100,n,2)}function La(t,n){return ra(t.getFullYear()%1e4,n,4)}function Ra(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+ra(n/60|0,"0",2)+ra(n%60,"0",2)}function qa(t,n){return ra(t.getUTCDate(),n,2)}function Ua(t,n){return ra(t.getUTCHours(),n,2)}function Da(t,n){return ra(t.getUTCHours()%12||12,n,2)}function Oa(t,n){return ra(1+vx.count(Lx(t),t),n,3)}function Fa(t,n){return ra(t.getUTCMilliseconds(),n,3)}function Ia(t,n){return ra(t.getUTCMonth()+1,n,2)}function Ya(t,n){return ra(t.getUTCMinutes(),n,2)}function Ba(t,n){return ra(t.getUTCSeconds(),n,2)}function ja(t,n){return ra(gx.count(Lx(t),t),n,2)}function Ha(t){return t.getUTCDay()}function Xa(t,n){return ra(yx.count(Lx(t),t),n,2)}function Va(t,n){return ra(t.getUTCFullYear()%100,n,2)}function $a(t,n){return ra(t.getUTCFullYear()%1e4,n,4)}function Wa(){return"+0000"}function Za(){return"%"}function Ga(n){return Rx=ea(n),t.timeFormat=Rx.format,t.timeParse=Rx.parse,t.utcFormat=Rx.utcFormat,t.utcParse=Rx.utcParse,Rx}function Ja(t){return t.toISOString()}function Qa(t){var n=new Date(t);return isNaN(n)?null:n}function Ka(t){return new Date(t)}function tc(t){return t instanceof Date?+t:+new Date(+t)}function nc(t,n,e,r,o,u,a,c,s){function f(i){return(a(i)<i?v:u(i)<i?_:o(i)<i?g:r(i)<i?y:n(i)<i?e(i)<i?m:x:t(i)<i?b:w)(i)}function l(n,e,r,o){if(null==n&&(n=10),"number"==typeof n){var u=Math.abs(r-e)/n,a=qs(function(t){return t[2]}).right(M,u);a===M.length?(o=i(e/Wx,r/Wx,n),n=t):a?(a=M[u/M[a-1][2]<M[a][2]/u?a-1:a],o=a[1],n=a[0]):(o=i(e,r,n),n=c)}return null==o?n:n.every(o)}var h=Lu(ku,xh),p=h.invert,d=h.domain,v=s(".%L"),_=s(":%S"),g=s("%I:%M"),y=s("%I %p"),m=s("%a %d"),x=s("%b %d"),b=s("%B"),w=s("%Y"),M=[[a,1,Bx],[a,5,5*Bx],[a,15,15*Bx],[a,30,30*Bx],[u,1,jx],[u,5,5*jx],[u,15,15*jx],[u,30,30*jx],[o,1,Hx],[o,3,3*Hx],[o,6,6*Hx],[o,12,12*Hx],[r,1,Xx],[r,2,2*Xx],[e,1,Vx],[n,1,$x],[n,3,3*$x],[t,1,Wx]];return h.invert=function(t){return new Date(p(t))},h.domain=function(t){return arguments.length?d(Sm.call(t,tc)):d().map(Ka)},h.ticks=function(t,n){var e,r=d(),i=r[0],o=r[r.length-1],u=o<i;return u&&(e=i,i=o,o=e),e=l(t,i,o,n),e=e?e.range(i,o+1):[],u?e.reverse():e},h.tickFormat=function(t,n){return null==n?f:s(n)},h.nice=function(t,n){var e=d();return(t=l(t,e[0],e[e.length-1],n))?d(Pm(e,t)):h},h.copy=function(){return Pu(h,nc(t,n,e,r,o,u,a,c,s))},h}function ec(t){var n=t.length;return function(e){return t[Math.max(0,Math.min(n-1,Math.floor(e*n)))]}}function rc(t){function n(n){var o=(n-e)/(r-e);return t(i?Math.max(0,Math.min(1,o)):o)}var e=0,r=1,i=!1;return n.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],n):[e,r]},n.clamp=function(t){return arguments.length?(i=!!t,n):i},n.interpolator=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return rc(t).domain([e,r]).clamp(i)},Ru(n)}function ic(t){return t>1?0:t<-1?xb:Math.acos(t)}function oc(t){return t>=1?bb:t<=-1?-bb:Math.asin(t)}function uc(t){return t.innerRadius}function ac(t){return t.outerRadius}function cc(t){return t.startAngle}function sc(t){return t.endAngle}function fc(t){return t&&t.padAngle}function lc(t,n,e,r,i,o,u,a){var c=e-t,s=r-n,f=u-i,l=a-o,h=(f*(n-o)-l*(t-i))/(l*c-f*s);return[t+h*c,n+h*s]}function hc(t,n,e,r,i,o,u){var a=t-e,c=n-r,s=(u?o:-o)/yb(a*a+c*c),f=s*c,l=-s*a,h=t+f,p=n+l,d=e+f,v=r+l,_=(h+d)/2,g=(p+v)/2,y=d-h,m=v-p,x=y*y+m*m,b=i-o,w=h*v-d*p,M=(m<0?-1:1)*yb(vb(0,b*b*x-w*w)),T=(w*m-y*M)/x,S=(-w*y-m*M)/x,N=(w*m+y*M)/x,k=(-w*y+m*M)/x,E=T-_,A=S-g,C=N-_,z=k-g;return E*E+A*A>C*C+z*z&&(T=N,S=k),{cx:T,cy:S,x01:-f,y01:-l,x11:T*(i/b-1),y11:S*(i/b-1)}}function pc(t){this._context=t}function dc(t){return t[0]}function vc(t){return t[1]}function _c(t){this._curve=t}function gc(t){function n(n){return new _c(t(n))}return n._curve=t,n}function yc(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(gc(t)):n()._curve},t}function mc(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function xc(t){this._context=t}function bc(t){this._context=t}function wc(t){this._context=t}function Mc(t,n){this._basis=new xc(t),this._beta=n}function Tc(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function Sc(t,n){this._context=t,this._k=(1-n)/6}function Nc(t,n){this._context=t,this._k=(1-n)/6}function kc(t,n){this._context=t,this._k=(1-n)/6}function Ec(t,n,e){var r=t._x1,i=t._y1,o=t._x2,u=t._y2;if(t._l01_a>mb){var a=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>mb){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*s+t._x1*t._l23_2a-n*t._l12_2a)/f,u=(u*s+t._y1*t._l23_2a-e*t._l12_2a)/f}t._context.bezierCurveTo(r,i,o,u,t._x2,t._y2)}function Ac(t,n){this._context=t,this._alpha=n}function Cc(t,n){this._context=t,this._alpha=n}function zc(t,n){this._context=t,this._alpha=n}function Pc(t){this._context=t}function Lc(t){return t<0?-1:1}function Rc(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),u=(e-t._y1)/(i||r<0&&-0),a=(o*i+u*r)/(r+i);return(Lc(o)+Lc(u))*Math.min(Math.abs(o),Math.abs(u),.5*Math.abs(a))||0}function qc(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function Uc(t,n,e){var r=t._x0,i=t._y0,o=t._x1,u=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,i+a*n,o-a,u-a*e,o,u)}function Dc(t){this._context=t}function Oc(t){this._context=new Fc(t)}function Fc(t){this._context=t}function Ic(t){return new Dc(t)}function Yc(t){return new Oc(t)}function Bc(t){this._context=t}function jc(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),u=new Array(r);for(i[0]=0,o[0]=2,u[0]=t[0]+2*t[1],n=1;n<r-1;++n)i[n]=1,o[n]=4,u[n]=4*t[n]+2*t[n+1];for(i[r-1]=2,o[r-1]=7,u[r-1]=8*t[r-1]+t[r],n=1;n<r;++n)e=i[n]/o[n-1],o[n]-=e,u[n]-=e*u[n-1];for(i[r-1]=u[r-1]/o[r-1],n=r-2;n>=0;--n)i[n]=(u[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n<r-1;++n)o[n]=2*t[n+1]-i[n+1];return[i,o]}function Hc(t,n){this._context=t,this._t=n}function Xc(t){return new Hc(t,0)}function Vc(t){return new Hc(t,1)}function $c(t,n){return t[n]}function Wc(t){for(var n,e=0,r=-1,i=t.length;++r<i;)(n=+t[r][1])&&(e+=n);return e}function Zc(t){return t[0]}function Gc(t){return t[1]}function Jc(){this._=null}function Qc(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Kc(t,n){var e=n,r=n.R,i=e.U;i?i.L===e?i.L=r:i.R=r:t._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ts(t,n){var e=n,r=n.L,i=e.U;i?i.L===e?i.L=r:i.R=r:t._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function ns(t){for(;t.L;)t=t.L;return t}function es(t,n,e,r){var i=[null,null],o=Ew.push(i)-1;return i.left=t,i.right=n,e&&is(i,t,n,e),r&&is(i,n,t,r),Nw[t.index].halfedges.push(o),Nw[n.index].halfedges.push(o),i}function rs(t,n,e){var r=[n,e];return r.left=t,r}function is(t,n,e,r){t[0]||t[1]?t.left===e?t[1]=r:t[0]=r:(t[0]=r,t.left=n,t.right=e)}function os(t,n,e,r,i){var o,u=t[0],a=t[1],c=u[0],s=u[1],f=a[0],l=a[1],h=0,p=1,d=f-c,v=l-s;if(o=n-c,d||!(o>0)){if(o/=d,d<0){if(o<h)return;o<p&&(p=o)}else if(d>0){if(o>p)return;o>h&&(h=o)}if(o=r-c,d||!(o<0)){if(o/=d,d<0){if(o>p)return;o>h&&(h=o)}else if(d>0){if(o<h)return;o<p&&(p=o)}if(o=e-s,v||!(o>0)){if(o/=v,v<0){if(o<h)return;o<p&&(p=o)}else if(v>0){if(o>p)return;o>h&&(h=o)}if(o=i-s,v||!(o<0)){if(o/=v,v<0){if(o>p)return;o>h&&(h=o)}else if(v>0){if(o<h)return;o<p&&(p=o)}return!(h>0||p<1)||(h>0&&(t[0]=[c+h*d,s+h*v]),p<1&&(t[1]=[c+p*d,s+p*v]),!0)}}}}}function us(t,n,e,r,i){var o=t[1];if(o)return!0;var u,a,c=t[0],s=t.left,f=t.right,l=s[0],h=s[1],p=f[0],d=f[1],v=(l+p)/2,_=(h+d)/2;if(d===h){if(v<n||v>=r)return;if(l>p){if(c){if(c[1]>=i)return}else c=[v,e];o=[v,i]}else{if(c){if(c[1]<e)return}else c=[v,i];o=[v,e]}}else if(u=(l-p)/(d-h),a=_-u*v,u<-1||u>1)if(l>p){if(c){if(c[1]>=i)return}else c=[(e-a)/u,e];o=[(i-a)/u,i]}else{if(c){if(c[1]<e)return}else c=[(i-a)/u,i];o=[(e-a)/u,e]}else if(h<d){if(c){if(c[0]>=r)return}else c=[n,u*n+a];o=[r,u*r+a]}else{if(c){if(c[0]<n)return}else c=[r,u*r+a];o=[n,u*n+a]}return t[0]=c,t[1]=o,!0}function as(t,n,e,r){for(var i,o=Ew.length;o--;)us(i=Ew[o],t,n,e,r)&&os(i,t,n,e,r)&&(Math.abs(i[0][0]-i[1][0])>zw||Math.abs(i[0][1]-i[1][1])>zw)||delete Ew[o]}function cs(t){return Nw[t.index]={site:t,halfedges:[]}}function ss(t,n){var e=t.site,r=n.left,i=n.right;return e===i&&(i=r,r=e),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(e===r?(r=n[1],i=n[0]):(r=n[0],i=n[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function fs(t,n){return n[+(n.left!==t.site)]}function ls(t,n){return n[+(n.left===t.site)]}function hs(){for(var t,n,e,r,i=0,o=Nw.length;i<o;++i)if((t=Nw[i])&&(r=(n=t.halfedges).length)){var u=new Array(r),a=new Array(r);for(e=0;e<r;++e)u[e]=e,a[e]=ss(t,Ew[n[e]]);for(u.sort(function(t,n){return a[n]-a[t]}),e=0;e<r;++e)a[e]=n[u[e]];for(e=0;e<r;++e)n[e]=a[e]}}function ps(t,n,e,r){var i,o,u,a,c,s,f,l,h,p,d,v,_=Nw.length,g=!0;for(i=0;i<_;++i)if(o=Nw[i]){for(u=o.site,c=o.halfedges,a=c.length;a--;)Ew[c[a]]||c.splice(a,1);for(a=0,s=c.length;a<s;)p=ls(o,Ew[c[a]]),d=p[0],v=p[1],f=fs(o,Ew[c[++a%s]]),l=f[0],h=f[1],(Math.abs(d-l)>zw||Math.abs(v-h)>zw)&&(c.splice(a,0,Ew.push(rs(u,p,Math.abs(d-t)<zw&&r-v>zw?[t,Math.abs(l-t)<zw?h:r]:Math.abs(v-r)<zw&&e-d>zw?[Math.abs(h-r)<zw?l:e,r]:Math.abs(d-e)<zw&&v-n>zw?[e,Math.abs(l-e)<zw?h:n]:Math.abs(v-n)<zw&&d-t>zw?[Math.abs(h-n)<zw?l:t,n]:null))-1),++s);s&&(g=!1)}if(g){var y,m,x,b=1/0;for(i=0,g=null;i<_;++i)(o=Nw[i])&&(u=o.site,y=u[0]-t,m=u[1]-n,(x=y*y+m*m)<b&&(b=x,g=o));if(g){var w=[t,n],M=[t,r],T=[e,r],S=[e,n];g.halfedges.push(Ew.push(rs(u=g.site,w,M))-1,Ew.push(rs(u,M,T))-1,Ew.push(rs(u,T,S))-1,Ew.push(rs(u,S,w))-1)}}for(i=0;i<_;++i)(o=Nw[i])&&(o.halfedges.length||delete Nw[i])}function ds(){Qc(this),this.x=this.y=this.arc=this.site=this.cy=null}function vs(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,i=t.site,o=e.site;if(r!==o){var u=i[0],a=i[1],c=r[0]-u,s=r[1]-a,f=o[0]-u,l=o[1]-a,h=2*(c*l-s*f);if(!(h>=-Pw)){var p=c*c+s*s,d=f*f+l*l,v=(l*p-s*d)/h,_=(c*d-f*p)/h,g=Aw.pop()||new ds;g.arc=t,g.site=i,g.x=v+u,g.y=(g.cy=_+a)+Math.sqrt(v*v+_*_),t.circle=g;for(var y=null,m=kw._;m;)if(g.y<m.y||g.y===m.y&&g.x<=m.x){if(!m.L){y=m.P;break}m=m.L}else{if(!m.R){y=m;break}m=m.R}kw.insert(y,g),y||(Tw=g)}}}}function _s(t){var n=t.circle;n&&(n.P||(Tw=n.N),kw.remove(n),Aw.push(n),Qc(n),t.circle=null)}function gs(){Qc(this),this.edge=this.site=this.circle=null}function ys(t){var n=Cw.pop()||new gs;return n.site=t,n}function ms(t){_s(t),Sw.remove(t),Cw.push(t),Qc(t)}function xs(t){var n=t.circle,e=n.x,r=n.cy,i=[e,r],o=t.P,u=t.N,a=[t];ms(t);for(var c=o;c.circle&&Math.abs(e-c.circle.x)<zw&&Math.abs(r-c.circle.cy)<zw;)o=c.P,a.unshift(c),ms(c),c=o;a.unshift(c),_s(c);for(var s=u;s.circle&&Math.abs(e-s.circle.x)<zw&&Math.abs(r-s.circle.cy)<zw;)u=s.N,a.push(s),ms(s),s=u;a.push(s),_s(s);var f,l=a.length;for(f=1;f<l;++f)s=a[f],c=a[f-1],is(s.edge,c.site,s.site,i);c=a[0],s=a[l-1],s.edge=es(c.site,s.site,null,i),vs(c),vs(s)}function bs(t){for(var n,e,r,i,o=t[0],u=t[1],a=Sw._;a;)if((r=ws(a,u)-o)>zw)a=a.L;else{if(!((i=o-Ms(a,u))>zw)){r>-zw?(n=a.P,e=a):i>-zw?(n=a,e=a.N):n=e=a;break}if(!a.R){n=a;break}a=a.R}cs(t);var c=ys(t);if(Sw.insert(n,c),n||e){if(n===e)return _s(n),e=ys(n.site),Sw.insert(c,e),c.edge=e.edge=es(n.site,c.site),vs(n),void vs(e);if(!e)return void(c.edge=es(n.site,c.site));_s(n),_s(e);var s=n.site,f=s[0],l=s[1],h=t[0]-f,p=t[1]-l,d=e.site,v=d[0]-f,_=d[1]-l,g=2*(h*_-p*v),y=h*h+p*p,m=v*v+_*_,x=[(_*y-p*m)/g+f,(h*m-v*y)/g+l];is(e.edge,s,d,x),c.edge=es(s,t,null,x),e.edge=es(t,d,null,x),vs(n),vs(e)}}function ws(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var u=t.P;if(!u)return-1/0;e=u.site;var a=e[0],c=e[1],s=c-n;if(!s)return a;var f=a-r,l=1/o-1/s,h=f/s;return l?(-h+Math.sqrt(h*h-2*l*(f*f/(-2*s)-c+s/2+i-o/2)))/l+r:(r+a)/2}function Ms(t,n){var e=t.N;if(e)return ws(e,n);var r=t.site;return r[1]===n?r[0]:1/0}function Ts(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function Ss(t,n){return n[1]-t[1]||n[0]-t[0]}function Ns(t,n){var e,r,i,o=t.sort(Ss).pop();for(Ew=[],Nw=new Array(t.length),Sw=new Jc,kw=new Jc;;)if(i=Tw,o&&(!i||o[1]<i.y||o[1]===i.y&&o[0]<i.x))o[0]===e&&o[1]===r||(bs(o),e=o[0],r=o[1]),o=t.pop();else{if(!i)break;xs(i.arc)}if(hs(),n){var u=+n[0][0],a=+n[0][1],c=+n[1][0],s=+n[1][1];as(u,a,c,s),ps(u,a,c,s)}this.edges=Ew,this.cells=Nw,Sw=kw=Ew=Nw=null}function ks(t,n,e){this.target=t,this.type=n,this.transform=e}function Es(t,n,e){this.k=t,this.x=n,this.y=e}function As(t){return t.__zoom||qw}function Cs(){t.event.stopImmediatePropagation()}function zs(){return!t.event.button}function Ps(){var t,n,e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,t=e.width.baseVal.value,n=e.height.baseVal.value):(t=e.clientWidth,n=e.clientHeight),[[0,0],[t,n]]}function Ls(){return this.__zoom||qw}var Rs=function(t,n){return t<n?-1:t>n?1:t>=n?0:NaN},qs=function(t){return 1===t.length&&(t=n(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)>0?i=o:r=o+1}return r}}},Us=qs(Rs),Ds=Us.right,Os=Us.left,Fs=function(t,n){null==n&&(n=e);for(var r=0,i=t.length-1,o=t[0],u=new Array(i<0?0:i);r<i;)u[r]=n(o,o=t[++r]);return u},Is=function(t,n,r){var i,o,u,a,c=t.length,s=n.length,f=new Array(c*s);for(null==r&&(r=e),i=u=0;i<c;++i)for(a=t[i],o=0;o<s;++o,++u)f[u]=r(a,n[o]);return f},Ys=function(t,n){return n<t?-1:n>t?1:n>=t?0:NaN},Bs=function(t){return null===t?NaN:+t},js=function(t,n){var e,r,i=t.length,o=0,u=-1,a=0,c=0;if(null==n)for(;++u<i;)isNaN(e=Bs(t[u]))||(r=e-a,a+=r/++o,c+=r*(e-a));else for(;++u<i;)isNaN(e=Bs(n(t[u],u,t)))||(r=e-a,a+=r/++o,c+=r*(e-a));if(o>1)return c/(o-1)},Hs=function(t,n){var e=js(t,n);return e?Math.sqrt(e):e},Xs=function(t,n){var e,r,i,o=t.length,u=-1;if(null==n){for(;++u<o;)if(null!=(e=t[u])&&e>=e)for(r=i=e;++u<o;)null!=(e=t[u])&&(r>e&&(r=e),i<e&&(i=e))}else for(;++u<o;)if(null!=(e=n(t[u],u,t))&&e>=e)for(r=i=e;++u<o;)null!=(e=n(t[u],u,t))&&(r>e&&(r=e),i<e&&(i=e));return[r,i]},Vs=Array.prototype,$s=Vs.slice,Ws=Vs.map,Zs=function(t){return function(){return t}},Gs=function(t){return t},Js=function(t,n,e){t=+t,n=+n,e=(i=arguments.length)<2?(n=t,t=0,1):i<3?1:+e;for(var r=-1,i=0|Math.max(0,Math.ceil((n-t)/e)),o=new Array(i);++r<i;)o[r]=t+r*e;return o},Qs=Math.sqrt(50),Ks=Math.sqrt(10),tf=Math.sqrt(2),nf=function(t,n,e){var i,o,u,a=n<t,c=-1;if(a&&(i=t,t=n,n=i),0===(u=r(t,n,e))||!isFinite(u))return[];if(u>0)for(t=Math.ceil(t/u),n=Math.floor(n/u),o=new Array(i=Math.ceil(n-t+1));++c<i;)o[c]=(t+c)*u;else for(t=Math.floor(t*u),n=Math.ceil(n*u),o=new Array(i=Math.ceil(t-n+1));++c<i;)o[c]=(t-c)/u;return a&&o.reverse(),o},ef=function(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1},rf=function(){function t(t){var o,u,a=t.length,c=new Array(a);for(o=0;o<a;++o)c[o]=n(t[o],o,t);var s=e(c),f=s[0],l=s[1],h=r(c,f,l);Array.isArray(h)||(h=i(f,l,h),h=Js(Math.ceil(f/h)*h,Math.floor(l/h)*h,h));for(var p=h.length;h[0]<=f;)h.shift(),--p;for(;h[p-1]>l;)h.pop(),--p;var d,v=new Array(p+1);for(o=0;o<=p;++o)d=v[o]=[],d.x0=o>0?h[o-1]:f,d.x1=o<p?h[o]:l;for(o=0;o<a;++o)u=c[o],f<=u&&u<=l&&v[Ds(h,u,0,p)].push(t[o]);return v}var n=Gs,e=Xs,r=ef;return t.value=function(e){return arguments.length?(n="function"==typeof e?e:Zs(e),t):n},t.domain=function(n){return arguments.length?(e="function"==typeof n?n:Zs([n[0],n[1]]),t):e},t.thresholds=function(n){return arguments.length?(r="function"==typeof n?n:Zs(Array.isArray(n)?$s.call(n):n),t):r},t},of=function(t,n,e){if(null==e&&(e=Bs),r=t.length){if((n=+n)<=0||r<2)return+e(t[0],0,t);if(n>=1)return+e(t[r-1],r-1,t);var r,i=(r-1)*n,o=Math.floor(i),u=+e(t[o],o,t);return u+(+e(t[o+1],o+1,t)-u)*(i-o)}},uf=function(t,n,e){return t=Ws.call(t,Bs).sort(Rs),Math.ceil((e-n)/(2*(of(t,.75)-of(t,.25))*Math.pow(t.length,-1/3)))},af=function(t,n,e){return Math.ceil((e-n)/(3.5*Hs(t)*Math.pow(t.length,-1/3)))},cf=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o<i;)if(null!=(e=t[o])&&e>=e)for(r=e;++o<i;)null!=(e=t[o])&&e>r&&(r=e)}else for(;++o<i;)if(null!=(e=n(t[o],o,t))&&e>=e)for(r=e;++o<i;)null!=(e=n(t[o],o,t))&&e>r&&(r=e);return r},sf=function(t,n){var e,r=t.length,i=r,o=-1,u=0;if(null==n)for(;++o<r;)isNaN(e=Bs(t[o]))?--i:u+=e;else for(;++o<r;)isNaN(e=Bs(n(t[o],o,t)))?--i:u+=e;if(i)return u/i},ff=function(t,n){var e,r=t.length,i=-1,o=[];if(null==n)for(;++i<r;)isNaN(e=Bs(t[i]))||o.push(e);else for(;++i<r;)isNaN(e=Bs(n(t[i],i,t)))||o.push(e);return of(o.sort(Rs),.5)},lf=function(t){for(var n,e,r,i=t.length,o=-1,u=0;++o<i;)u+=t[o].length;for(e=new Array(u);--i>=0;)for(r=t[i],n=r.length;--n>=0;)e[--u]=r[n];return e},hf=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o<i;)if(null!=(e=t[o])&&e>=e)for(r=e;++o<i;)null!=(e=t[o])&&r>e&&(r=e)}else for(;++o<i;)if(null!=(e=n(t[o],o,t))&&e>=e)for(r=e;++o<i;)null!=(e=n(t[o],o,t))&&r>e&&(r=e);return r},pf=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},df=function(t,n){if(e=t.length){var e,r,i=0,o=0,u=t[o];for(null==n&&(n=Rs);++i<e;)(n(r=t[i],u)<0||0!==n(u,u))&&(u=r,o=i);return 0===n(u,u)?o:void 0}},vf=function(t,n,e){for(var r,i,o=(null==e?t.length:e)-(n=null==n?0:+n);o;)i=Math.random()*o--|0,r=t[o+n],t[o+n]=t[i+n],t[i+n]=r;return t},_f=function(t,n){var e,r=t.length,i=-1,o=0;if(null==n)for(;++i<r;)(e=+t[i])&&(o+=e);else for(;++i<r;)(e=+n(t[i],i,t))&&(o+=e);return o},gf=function(t){if(!(i=t.length))return[];for(var n=-1,e=hf(t,o),r=new Array(e);++n<e;)for(var i,u=-1,a=r[n]=new Array(i);++u<i;)a[u]=t[u][n];return r},yf=function(){return gf(arguments)},mf=Array.prototype.slice,xf=function(t){return t},bf=1,wf=2,Mf=3,Tf=4,Sf=1e-6,Nf={value:function(){}};_.prototype=v.prototype={constructor:_,on:function(t,n){var e,r=this._,i=g(t+"",r),o=-1,u=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o<u;)if(e=(t=i[o]).type)r[e]=m(r[e],t.name,n);else if(null==n)for(e in r)r[e]=m(r[e],t.name,null);return this}for(;++o<u;)if((e=(t=i[o]).type)&&(e=y(r[e],t.name)))return e}},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new _(t)},call:function(t,n){if((e=arguments.length-2)>0)for(var e,r,i=new Array(e),o=0;o<e;++o)i[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(r=this._[t],o=0,e=r.length;o<e;++o)r[o].value.apply(n,i)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,o=r.length;i<o;++i)r[i].value.apply(n,e)}};var kf="http://www.w3.org/1999/xhtml",Ef={svg:"http://www.w3.org/2000/svg",xhtml:kf,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},Af=function(t){var n=t+="",e=n.indexOf(":");return e>=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Ef.hasOwnProperty(n)?{space:Ef[n],local:t}:t},Cf=function(t){var n=Af(t);return(n.local?b:x)(n)},zf=0;M.prototype=w.prototype={constructor:M,get:function(t){for(var n=this._;!(n in t);)if(!(t=t.parentNode))return;return t[n]},set:function(t,n){return t[this._]=n},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var Pf=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var Lf=document.documentElement;if(!Lf.matches){var Rf=Lf.webkitMatchesSelector||Lf.msMatchesSelector||Lf.mozMatchesSelector||Lf.oMatchesSelector;Pf=function(t){return function(){return Rf.call(this,t)}}}}var qf=Pf,Uf={};if(t.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||(Uf={mouseenter:"mouseover",mouseleave:"mouseout"})}var Df=function(t,n,e){var r,i,o=N(t+""),u=o.length;{if(!(arguments.length<2)){for(a=n?E:k,null==e&&(e=!1),r=0;r<u;++r)this.each(a(o[r],n,e));return this}var a=this.node().__on;if(a)for(var c,s=0,f=a.length;s<f;++s)for(r=0,c=a[s];r<u;++r)if((i=o[r]).type===c.type&&i.name===c.name)return c.value}},Of=function(){for(var n,e=t.event;n=e.sourceEvent;)e=n;return e},Ff=function(t,n){var e=t.ownerSVGElement||t;if(e.createSVGPoint){var r=e.createSVGPoint();return r.x=n.clientX,r.y=n.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var i=t.getBoundingClientRect();return[n.clientX-i.left-t.clientLeft,n.clientY-i.top-t.clientTop]},If=function(t){var n=Of();return n.changedTouches&&(n=n.changedTouches[0]),Ff(t,n)},Yf=function(t){return null==t?C:function(){return this.querySelector(t)}},Bf=function(t){"function"!=typeof t&&(t=Yf(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,u,a=n[i],c=a.length,s=r[i]=new Array(c),f=0;f<c;++f)(o=a[f])&&(u=t.call(o,o.__data__,f,a))&&("__data__"in o&&(u.__data__=o.__data__),s[f]=u);return new vt(r,this._parents)},jf=function(t){return null==t?z:function(){return this.querySelectorAll(t)}},Hf=function(t){"function"!=typeof t&&(t=jf(t));for(var n=this._groups,e=n.length,r=[],i=[],o=0;o<e;++o)for(var u,a=n[o],c=a.length,s=0;s<c;++s)(u=a[s])&&(r.push(t.call(u,u.__data__,s,a)),i.push(u));return new vt(r,i)},Xf=function(t){"function"!=typeof t&&(t=qf(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,u=n[i],a=u.length,c=r[i]=[],s=0;s<a;++s)(o=u[s])&&t.call(o,o.__data__,s,u)&&c.push(o);return new vt(r,this._parents)},Vf=function(t){return new Array(t.length)},$f=function(){return new vt(this._enter||this._groups.map(Vf),this._parents)};P.prototype={constructor:P,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,n){return this._parent.insertBefore(t,n)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var Wf=function(t){return function(){return t}},Zf="$",Gf=function(t,n){if(!t)return p=new Array(this.size()),s=-1,this.each(function(t){p[++s]=t}),p;var e=n?R:L,r=this._parents,i=this._groups;"function"!=typeof t&&(t=Wf(t));for(var o=i.length,u=new Array(o),a=new Array(o),c=new Array(o),s=0;s<o;++s){var f=r[s],l=i[s],h=l.length,p=t.call(f,f&&f.__data__,s,r),d=p.length,v=a[s]=new Array(d),_=u[s]=new Array(d);e(f,l,v,_,c[s]=new Array(h),p,n);for(var g,y,m=0,x=0;m<d;++m)if(g=v[m]){for(m>=x&&(x=m+1);!(y=_[x])&&++x<d;);g._next=y||null}}return u=new vt(u,r),u._enter=a,u._exit=c,u},Jf=function(){return new vt(this._exit||this._groups.map(Vf),this._parents)},Qf=function(t){for(var n=this._groups,e=t._groups,r=n.length,i=e.length,o=Math.min(r,i),u=new Array(r),a=0;a<o;++a)for(var c,s=n[a],f=e[a],l=s.length,h=u[a]=new Array(l),p=0;p<l;++p)(c=s[p]||f[p])&&(h[p]=c);for(;a<r;++a)u[a]=n[a];return new vt(u,this._parents)},Kf=function(){for(var t=this._groups,n=-1,e=t.length;++n<e;)for(var r,i=t[n],o=i.length-1,u=i[o];--o>=0;)(r=i[o])&&(u&&u!==r.nextSibling&&u.parentNode.insertBefore(r,u),u=r);return this},tl=function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=q);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o<r;++o){for(var u,a=e[o],c=a.length,s=i[o]=new Array(c),f=0;f<c;++f)(u=a[f])&&(s[f]=u);s.sort(n)}return new vt(i,this._parents).order()},nl=function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},el=function(){var t=new Array(this.size()),n=-1;return this.each(function(){t[++n]=this}),t},rl=function(){for(var t=this._groups,n=0,e=t.length;n<e;++n)for(var r=t[n],i=0,o=r.length;i<o;++i){var u=r[i];if(u)return u}return null},il=function(){var t=0;return this.each(function(){++t}),t},ol=function(){return!this.node()},ul=function(t){for(var n=this._groups,e=0,r=n.length;e<r;++e)for(var i,o=n[e],u=0,a=o.length;u<a;++u)(i=o[u])&&t.call(i,i.__data__,u,o);return this},al=function(t,n){var e=Af(t);if(arguments.length<2){var r=this.node();return e.local?r.getAttributeNS(e.space,e.local):r.getAttribute(e)}return this.each((null==n?e.local?D:U:"function"==typeof n?e.local?Y:I:e.local?F:O)(e,n))},cl=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView},sl=function(t,n,e){var r;return arguments.length>1?this.each((null==n?B:"function"==typeof n?H:j)(t,n,null==e?"":e)):cl(r=this.node()).getComputedStyle(r,null).getPropertyValue(t)},fl=function(t,n){return arguments.length>1?this.each((null==n?X:"function"==typeof n?$:V)(t,n)):this.node()[t]};G.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var ll=function(t,n){var e=W(t+"");if(arguments.length<2){for(var r=Z(this.node()),i=-1,o=e.length;++i<o;)if(!r.contains(e[i]))return!1;return!0}return this.each(("function"==typeof n?nt:n?K:tt)(e,n))},hl=function(t){return arguments.length?this.each(null==t?et:("function"==typeof t?it:rt)(t)):this.node().textContent},pl=function(t){return arguments.length?this.each(null==t?ot:("function"==typeof t?at:ut)(t)):this.node().innerHTML},dl=function(){return this.each(ct)},vl=function(){return this.each(st)},_l=function(t){var n="function"==typeof t?t:Cf(t);return this.select(function(){return this.appendChild(n.apply(this,arguments))})},gl=function(t,n){var e="function"==typeof t?t:Cf(t),r=null==n?ft:"function"==typeof n?n:Yf(n);return this.select(function(){return this.insertBefore(e.apply(this,arguments),r.apply(this,arguments)||null)})},yl=function(){return this.each(lt)},ml=function(t){return arguments.length?this.property("__data__",t):this.node().__data__},xl=function(t,n){return this.each(("function"==typeof n?dt:pt)(t,n))},bl=[null];vt.prototype=_t.prototype={constructor:vt,select:Bf,selectAll:Hf,filter:Xf,data:Gf,enter:$f,exit:Jf,merge:Qf,order:Kf,sort:tl,call:nl,nodes:el,node:rl,size:il,empty:ol,each:ul,attr:al,style:sl,property:fl,classed:ll,text:hl,html:pl,raise:dl,lower:vl,append:_l,insert:gl,remove:yl,datum:ml,on:Df,dispatch:xl};var wl=function(t){return"string"==typeof t?new vt([[document.querySelector(t)]],[document.documentElement]):new vt([[t]],bl)},Ml=function(t){return"string"==typeof t?new vt([document.querySelectorAll(t)],[document.documentElement]):new vt([null==t?[]:t],bl)},Tl=function(t,n,e){arguments.length<3&&(e=n,n=Of().changedTouches);for(var r,i=0,o=n?n.length:0;i<o;++i)if((r=n[i]).identifier===e)return Ff(t,r);return null},Sl=function(t,n){null==n&&(n=Of().touches);for(var e=0,r=n?n.length:0,i=new Array(r);e<r;++e)i[e]=Ff(t,n[e]);return i},Nl=function(){t.event.preventDefault(),t.event.stopImmediatePropagation()},kl=function(t){var n=t.document.documentElement,e=wl(t).on("dragstart.drag",Nl,!0);"onselectstart"in n?e.on("selectstart.drag",Nl,!0):(n.__noselect=n.style.MozUserSelect,n.style.MozUserSelect="none")},El=function(t){return function(){return t}};mt.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Al=function(){function n(t){t.on("mousedown.drag",e).on("touchstart.drag",o).on("touchmove.drag",u).on("touchend.drag touchcancel.drag",a).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(){if(!f&&l.apply(this,arguments)){var n=c("mouse",h.apply(this,arguments),If,this,arguments);n&&(wl(t.event.view).on("mousemove.drag",r,!0).on("mouseup.drag",i,!0),kl(t.event.view),gt(),s=!1,n("start"))}}function r(){Nl(),s=!0,d.mouse("drag")}function i(){ +wl(t.event.view).on("mousemove.drag mouseup.drag",null),yt(t.event.view,s),Nl(),d.mouse("end")}function o(){if(l.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=h.apply(this,arguments),o=r.length;for(n=0;n<o;++n)(e=c(r[n].identifier,i,Tl,this,arguments))&&(gt(),e("start"))}}function u(){var n,e,r=t.event.changedTouches,i=r.length;for(n=0;n<i;++n)(e=d[r[n].identifier])&&(Nl(),e("drag"))}function a(){var n,e,r=t.event.changedTouches,i=r.length;for(f&&clearTimeout(f),f=setTimeout(function(){f=null},500),n=0;n<i;++n)(e=d[r[n].identifier])&&(gt(),e("end"))}function c(e,r,i,o,u){var a,c,s,f=i(r,e),l=_.copy();if(A(new mt(n,"beforestart",a,e,g,f[0],f[1],0,0,l),function(){return null!=(t.event.subject=a=p.apply(o,u))&&(c=a.x-f[0]||0,s=a.y-f[1]||0,!0)}))return function t(h){var p,v=f;switch(h){case"start":d[e]=t,p=g++;break;case"end":delete d[e],--g;case"drag":f=i(r,e),p=g}A(new mt(n,h,a,e,p,f[0]+c,f[1]+s,f[0]-v[0],f[1]-v[1],l),l.apply,l,[h,o,u])}}var s,f,l=xt,h=bt,p=wt,d={},_=v("start","drag","end"),g=0;return n.filter=function(t){return arguments.length?(l="function"==typeof t?t:El(!!t),n):l},n.container=function(t){return arguments.length?(h="function"==typeof t?t:El(t),n):h},n.subject=function(t){return arguments.length?(p="function"==typeof t?t:El(t),n):p},n.on=function(){var t=_.on.apply(_,arguments);return t===_?n:t},n},Cl=function(t,n,e){t.prototype=n.prototype=e,e.constructor=t},zl="\\s*([+-]?\\d+)\\s*",Pl="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ll="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Rl=/^#([0-9a-f]{3})$/,ql=/^#([0-9a-f]{6})$/,Ul=new RegExp("^rgb\\("+[zl,zl,zl]+"\\)$"),Dl=new RegExp("^rgb\\("+[Ll,Ll,Ll]+"\\)$"),Ol=new RegExp("^rgba\\("+[zl,zl,zl,Pl]+"\\)$"),Fl=new RegExp("^rgba\\("+[Ll,Ll,Ll,Pl]+"\\)$"),Il=new RegExp("^hsl\\("+[Pl,Ll,Ll]+"\\)$"),Yl=new RegExp("^hsla\\("+[Pl,Ll,Ll,Pl]+"\\)$"),Bl={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Cl(Tt,St,{displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}}),Cl(Ct,At,Mt(Tt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ct(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ct(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},toString:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(1===t?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),Cl(Rt,Lt,Mt(Tt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Rt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Rt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),n=isNaN(t)||isNaN(this.s)?0:this.s,e=this.l,r=e+(e<.5?e:1-e)*n,i=2*e-r;return new Ct(qt(t>=240?t-240:t+120,i,r),qt(t,i,r),qt(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var jl=Math.PI/180,Hl=180/Math.PI,Xl=.95047,Vl=1,$l=1.08883,Wl=4/29,Zl=6/29,Gl=3*Zl*Zl,Jl=Zl*Zl*Zl;Cl(Ot,Dt,Mt(Tt,{brighter:function(t){return new Ot(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Ot(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=Vl*It(t),n=Xl*It(n),e=$l*It(e),new Ct(Yt(3.2404542*n-1.5371385*t-.4985314*e),Yt(-.969266*n+1.8760108*t+.041556*e),Yt(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),Cl(Xt,Ht,Mt(Tt,{brighter:function(t){return new Xt(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Xt(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Ut(this).rgb()}}));var Ql=-.14861,Kl=1.78277,th=-.29227,nh=-.90649,eh=1.97294,rh=eh*nh,ih=eh*Kl,oh=Kl*th-nh*Ql;Cl(Wt,$t,Mt(Tt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Wt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Wt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*jl,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new Ct(255*(n+e*(Ql*r+Kl*i)),255*(n+e*(th*r+nh*i)),255*(n+e*(eh*r)),this.opacity)}}));var uh,ah,ch,sh,fh,lh,hh=function(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],u=r>0?t[r-1]:2*i-o,a=r<n-1?t[r+2]:2*o-i;return Zt((e-r/n)*n,u,i,o,a)}},ph=function(t){var n=t.length;return function(e){var r=Math.floor(((e%=1)<0?++e:e)*n),i=t[(r+n-1)%n],o=t[r%n],u=t[(r+1)%n],a=t[(r+2)%n];return Zt((e-r/n)*n,i,o,u,a)}},dh=function(t){return function(){return t}},vh=function t(n){function e(t,n){var e=r((t=At(t)).r,(n=At(n)).r),i=r(t.g,n.g),o=r(t.b,n.b),u=tn(t.opacity,n.opacity);return function(n){return t.r=e(n),t.g=i(n),t.b=o(n),t.opacity=u(n),t+""}}var r=Kt(n);return e.gamma=t,e}(1),_h=nn(hh),gh=nn(ph),yh=function(t,n){var e,r=n?n.length:0,i=t?Math.min(r,t.length):0,o=new Array(r),u=new Array(r);for(e=0;e<i;++e)o[e]=Sh(t[e],n[e]);for(;e<r;++e)u[e]=n[e];return function(t){for(e=0;e<i;++e)u[e]=o[e](t);return u}},mh=function(t,n){var e=new Date;return t=+t,n-=t,function(r){return e.setTime(t+n*r),e}},xh=function(t,n){return t=+t,n-=t,function(e){return t+n*e}},bh=function(t,n){var e,r={},i={};null!==t&&"object"==typeof t||(t={}),null!==n&&"object"==typeof n||(n={});for(e in n)e in t?r[e]=Sh(t[e],n[e]):i[e]=n[e];return function(t){for(e in r)i[e]=r[e](t);return i}},wh=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Mh=new RegExp(wh.source,"g"),Th=function(t,n){var e,r,i,o=wh.lastIndex=Mh.lastIndex=0,u=-1,a=[],c=[];for(t+="",n+="";(e=wh.exec(t))&&(r=Mh.exec(n));)(i=r.index)>o&&(i=n.slice(o,i),a[u]?a[u]+=i:a[++u]=i),(e=e[0])===(r=r[0])?a[u]?a[u]+=r:a[++u]=r:(a[++u]=null,c.push({i:u,x:xh(e,r)})),o=Mh.lastIndex;return o<n.length&&(i=n.slice(o),a[u]?a[u]+=i:a[++u]=i),a.length<2?c[0]?rn(c[0].x):en(n):(n=c.length,function(t){for(var e,r=0;r<n;++r)a[(e=c[r]).i]=e.x(t);return a.join("")})},Sh=function(t,n){var e,r=typeof n;return null==n||"boolean"===r?dh(n):("number"===r?xh:"string"===r?(e=St(n))?(n=e,vh):Th:n instanceof St?vh:n instanceof Date?mh:Array.isArray(n)?yh:isNaN(n)?bh:xh)(t,n)},Nh=function(t,n){return t=+t,n-=t,function(e){return Math.round(t+n*e)}},kh=180/Math.PI,Eh={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},Ah=function(t,n,e,r,i,o){var u,a,c;return(u=Math.sqrt(t*t+n*n))&&(t/=u,n/=u),(c=t*e+n*r)&&(e-=t*c,r-=n*c),(a=Math.sqrt(e*e+r*r))&&(e/=a,r/=a,c/=a),t*r<n*e&&(t=-t,n=-n,c=-c,u=-u),{translateX:i,translateY:o,rotate:Math.atan2(n,t)*kh,skewX:Math.atan(c)*kh,scaleX:u,scaleY:a}},Ch=an(on,"px, ","px)","deg)"),zh=an(un,", ",")",")"),Ph=Math.SQRT2,Lh=function(t,n){var e,r,i=t[0],o=t[1],u=t[2],a=n[0],c=n[1],s=n[2],f=a-i,l=c-o,h=f*f+l*l;if(h<1e-12)r=Math.log(s/u)/Ph,e=function(t){return[i+t*f,o+t*l,u*Math.exp(Ph*t*r)]};else{var p=Math.sqrt(h),d=(s*s-u*u+4*h)/(2*u*2*p),v=(s*s-u*u-4*h)/(2*s*2*p),_=Math.log(Math.sqrt(d*d+1)-d),g=Math.log(Math.sqrt(v*v+1)-v);r=(g-_)/Ph,e=function(t){var n=t*r,e=cn(_),a=u/(2*p)*(e*fn(Ph*n+_)-sn(_));return[i+a*f,o+a*l,u*e/cn(Ph*n+_)]}}return e.duration=1e3*r,e},Rh=ln(Qt),qh=ln(tn),Uh=pn(Qt),Dh=pn(tn),Oh=dn(Qt),Fh=dn(tn),Ih=function(t,n){for(var e=new Array(n),r=0;r<n;++r)e[r]=t(r/(n-1));return e},Yh=0,Bh=0,jh=0,Hh=1e3,Xh=0,Vh=0,$h=0,Wh="object"==typeof performance&&performance.now?performance:Date,Zh="function"==typeof requestAnimationFrame?requestAnimationFrame:function(t){setTimeout(t,17)};gn.prototype=yn.prototype={constructor:gn,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?vn():+e)+(null==n?0:+n),this._next||lh===this||(lh?lh._next=this:fh=this,lh=this),this._call=t,this._time=e,Mn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Mn())}};var Gh=function(t,n,e){var r=new gn;return n=null==n?0:+n,r.restart(function(e){r.stop(),t(e+n)},n,e),r},Jh=function(t,n,e){var r=new gn,i=n;return null==n?(r.restart(t,n,e),r):(n=+n,e=null==e?vn():+e,r.restart(function o(u){u+=i,r.restart(o,i+=n,e),t(u)},n,e),r)},Qh=v("start","end","interrupt"),Kh=[],tp=0,np=1,ep=2,rp=3,ip=4,op=5,up=6,ap=function(t,n,e,r,i,o){var u=t.__transition;if(u){if(e in u)return}else t.__transition={};kn(t,e,{name:n,index:r,group:i,on:Qh,tween:Kh,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:tp})},cp=function(t,n){var e,r,i,o=t.__transition,u=!0;if(o){n=null==n?null:n+"";for(i in o)(e=o[i]).name===n?(r=e.state>ep&&e.state<op,e.state=up,e.timer.stop(),r&&e.on.call("interrupt",t,t.__data__,e.index,e.group),delete o[i]):u=!1;u&&delete t.__transition}},sp=function(t){return this.each(function(){cp(this,t)})},fp=function(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r,i=Nn(this.node(),e).tween,o=0,u=i.length;o<u;++o)if((r=i[o]).name===t)return r.value;return null}return this.each((null==n?En:An)(e,t,n))},lp=function(t,n){var e;return("number"==typeof n?xh:n instanceof St?vh:(e=St(n))?(n=e,vh):Th)(t,n)},hp=function(t,n){var e=Af(t),r="transform"===e?zh:lp;return this.attrTween(t,"function"==typeof n?(e.local?Un:qn)(e,r,Cn(this,"attr."+t,n)):null==n?(e.local?Pn:zn)(e):(e.local?Rn:Ln)(e,r,n+""))},pp=function(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var r=Af(t);return this.tween(e,(r.local?Dn:On)(r,n))},dp=function(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?Fn:In)(n,t)):Nn(this.node(),n).delay},vp=function(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?Yn:Bn)(n,t)):Nn(this.node(),n).duration},_p=function(t){var n=this._id;return arguments.length?this.each(jn(n,t)):Nn(this.node(),n).ease},gp=function(t){"function"!=typeof t&&(t=qf(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,u=n[i],a=u.length,c=r[i]=[],s=0;s<a;++s)(o=u[s])&&t.call(o,o.__data__,s,u)&&c.push(o);return new te(r,this._parents,this._name,this._id)},yp=function(t){if(t._id!==this._id)throw new Error;for(var n=this._groups,e=t._groups,r=n.length,i=e.length,o=Math.min(r,i),u=new Array(r),a=0;a<o;++a)for(var c,s=n[a],f=e[a],l=s.length,h=u[a]=new Array(l),p=0;p<l;++p)(c=s[p]||f[p])&&(h[p]=c);for(;a<r;++a)u[a]=n[a];return new te(u,this._parents,this._name,this._id)},mp=function(t,n){var e=this._id;return arguments.length<2?Nn(this.node(),e).on.on(t):this.each(Xn(e,t,n))},xp=function(){return this.on("end.remove",Vn(this._id))},bp=function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=Yf(t));for(var r=this._groups,i=r.length,o=new Array(i),u=0;u<i;++u)for(var a,c,s=r[u],f=s.length,l=o[u]=new Array(f),h=0;h<f;++h)(a=s[h])&&(c=t.call(a,a.__data__,h,s))&&("__data__"in a&&(c.__data__=a.__data__),l[h]=c,ap(l[h],n,e,h,l,Nn(a,e)));return new te(o,this._parents,n,e)},wp=function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=jf(t));for(var r=this._groups,i=r.length,o=[],u=[],a=0;a<i;++a)for(var c,s=r[a],f=s.length,l=0;l<f;++l)if(c=s[l]){for(var h,p=t.call(c,c.__data__,l,s),d=Nn(c,e),v=0,_=p.length;v<_;++v)(h=p[v])&&ap(h,n,e,v,p,d);o.push(p),u.push(c)}return new te(o,u,n,e)},Mp=_t.prototype.constructor,Tp=function(){return new Mp(this._groups,this._parents)},Sp=function(t,n,e){var r="transform"==(t+="")?Ch:lp;return null==n?this.styleTween(t,$n(t,r)).on("end.style."+t,Wn(t)):this.styleTween(t,"function"==typeof n?Gn(t,r,Cn(this,"style."+t,n)):Zn(t,r,n+""),e)},Np=function(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==n)return this.tween(r,null);if("function"!=typeof n)throw new Error;return this.tween(r,Jn(t,n,null==e?"":e))},kp=function(t){return this.tween("text","function"==typeof t?Kn(Cn(this,"text",t)):Qn(null==t?"":t+""))},Ep=function(){for(var t=this._name,n=this._id,e=ee(),r=this._groups,i=r.length,o=0;o<i;++o)for(var u,a=r[o],c=a.length,s=0;s<c;++s)if(u=a[s]){var f=Nn(u,n);ap(u,t,e,s,a,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new te(r,this._parents,t,e)},Ap=0,Cp=_t.prototype;te.prototype=ne.prototype={constructor:te,select:bp,selectAll:wp,filter:gp,merge:yp,selection:Tp,transition:Ep,call:Cp.call,nodes:Cp.nodes,node:Cp.node,size:Cp.size,empty:Cp.empty,each:Cp.each,on:mp,attr:hp,attrTween:pp,style:Sp,styleTween:Np,text:kp,remove:xp,tween:fp,delay:dp,duration:vp,ease:_p};var zp=function t(n){function e(t){return Math.pow(t,n)}return n=+n,e.exponent=t,e}(3),Pp=function t(n){function e(t){return 1-Math.pow(1-t,n)}return n=+n,e.exponent=t,e}(3),Lp=function t(n){function e(t){return((t*=2)<=1?Math.pow(t,n):2-Math.pow(2-t,n))/2}return n=+n,e.exponent=t,e}(3),Rp=Math.PI,qp=Rp/2,Up=4/11,Dp=6/11,Op=8/11,Fp=.75,Ip=9/11,Yp=10/11,Bp=.9375,jp=21/22,Hp=63/64,Xp=1/Up/Up,Vp=function t(n){function e(t){return t*t*((n+1)*t-n)}return n=+n,e.overshoot=t,e}(1.70158),$p=function t(n){function e(t){return--t*t*((n+1)*t+n)+1}return n=+n,e.overshoot=t,e}(1.70158),Wp=function t(n){function e(t){return((t*=2)<1?t*t*((n+1)*t-n):(t-=2)*t*((n+1)*t+n)+2)/2}return n=+n,e.overshoot=t,e}(1.70158),Zp=2*Math.PI,Gp=function t(n,e){function r(t){return n*Math.pow(2,10*--t)*Math.sin((i-t)/e)}var i=Math.asin(1/(n=Math.max(1,n)))*(e/=Zp);return r.amplitude=function(n){return t(n,e*Zp)},r.period=function(e){return t(n,e)},r}(1,.3),Jp=function t(n,e){function r(t){return 1-n*Math.pow(2,-10*(t=+t))*Math.sin((t+i)/e)}var i=Math.asin(1/(n=Math.max(1,n)))*(e/=Zp);return r.amplitude=function(n){return t(n,e*Zp)},r.period=function(e){return t(n,e)},r}(1,.3),Qp=function t(n,e){function r(t){return((t=2*t-1)<0?n*Math.pow(2,10*t)*Math.sin((i-t)/e):2-n*Math.pow(2,-10*t)*Math.sin((i+t)/e))/2}var i=Math.asin(1/(n=Math.max(1,n)))*(e/=Zp);return r.amplitude=function(n){return t(n,e*Zp)},r.period=function(e){return t(n,e)},r}(1,.3),Kp={time:null,delay:0,duration:250,ease:se},td=function(t){var n,e;t instanceof te?(n=t._id,t=t._name):(n=ee(),(e=Kp).time=vn(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,o=0;o<i;++o)for(var u,a=r[o],c=a.length,s=0;s<c;++s)(u=a[s])&&ap(u,t,n,s,a,e||we(u,n));return new te(r,this._parents,t,n)};_t.prototype.interrupt=sp,_t.prototype.transition=td;var nd=[null],ed=function(t,n){var e,r,i=t.__transition;if(i){n=null==n?null:n+"";for(r in i)if((e=i[r]).state>np&&e.name===n)return new te([[t]],nd,n,+r)}return null},rd=function(t){return function(){return t}},id=function(t,n,e){this.target=t,this.type=n,this.selection=e},od=function(){t.event.preventDefault(),t.event.stopImmediatePropagation()},ud={name:"drag"},ad={name:"space"},cd={name:"handle"},sd={name:"center"},fd={name:"x",handles:["e","w"].map(Te),input:function(t,n){return t&&[[t[0],n[0][1]],[t[1],n[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ld={name:"y",handles:["n","s"].map(Te),input:function(t,n){return t&&[[n[0][0],t[0]],[n[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},hd={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(Te),input:function(t){return t},output:function(t){return t}},pd={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},dd={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},vd={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},_d={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},gd={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1},yd=function(){return Pe(hd)},md=Math.cos,xd=Math.sin,bd=Math.PI,wd=bd/2,Md=2*bd,Td=Math.max,Sd=function(){function t(t){var o,u,a,c,s,f,l=t.length,h=[],p=Js(l),d=[],v=[],_=v.groups=new Array(l),g=new Array(l*l);for(o=0,s=-1;++s<l;){for(u=0,f=-1;++f<l;)u+=t[s][f];h.push(u),d.push(Js(l)),o+=u}for(e&&p.sort(function(t,n){return e(h[t],h[n])}),r&&d.forEach(function(n,e){n.sort(function(n,i){return r(t[e][n],t[e][i])})}),o=Td(0,Md-n*l)/o,c=o?n:Md/l,u=0,s=-1;++s<l;){for(a=u,f=-1;++f<l;){var y=p[s],m=d[y][f],x=t[y][m],b=u,w=u+=x*o;g[m*l+y]={index:y,subindex:m,startAngle:b,endAngle:w,value:x}}_[y]={index:y,startAngle:a,endAngle:u,value:h[y]},u+=c}for(s=-1;++s<l;)for(f=s-1;++f<l;){var M=g[f*l+s],T=g[s*l+f];(M.value||T.value)&&v.push(M.value<T.value?{source:T,target:M}:{source:M,target:T})}return i?v.sort(i):v}var n=0,e=null,r=null,i=null;return t.padAngle=function(e){return arguments.length?(n=Td(0,e),t):n},t.sortGroups=function(n){return arguments.length?(e=n,t):e},t.sortSubgroups=function(n){return arguments.length?(r=n,t):r},t.sortChords=function(n){return arguments.length?(null==n?i=null:(i=Le(n))._=n,t):i&&i._},t},Nd=Array.prototype.slice,kd=function(t){return function(){return t}},Ed=Math.PI,Ad=2*Ed,Cd=Ad-1e-6;Re.prototype=qe.prototype={constructor:Re,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,r){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+r)},bezierCurveTo:function(t,n,e,r,i,o){this._+="C"+ +t+","+ +n+","+ +e+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(t,n,e,r,i){t=+t,n=+n,e=+e,r=+r,i=+i;var o=this._x1,u=this._y1,a=e-t,c=r-n,s=o-t,f=u-n,l=s*s+f*f;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(l>1e-6)if(Math.abs(f*a-c*s)>1e-6&&i){var h=e-o,p=r-u,d=a*a+c*c,v=h*h+p*p,_=Math.sqrt(d),g=Math.sqrt(l),y=i*Math.tan((Ed-Math.acos((d+l-v)/(2*_*g)))/2),m=y/g,x=y/_;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*s)+","+(n+m*f)),this._+="A"+i+","+i+",0,0,"+ +(f*h>s*p)+","+(this._x1=t+x*a)+","+(this._y1=n+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n,e=+e;var u=e*Math.cos(r),a=e*Math.sin(r),c=t+u,s=n+a,f=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),e&&(l<0&&(l=l%Ad+Ad),l>Cd?this._+="A"+e+","+e+",0,1,"+f+","+(t-u)+","+(n-a)+"A"+e+","+e+",0,1,"+f+","+(this._x1=c)+","+(this._y1=s):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=Ed)+","+f+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};var zd=function(){function t(){var t,a=Nd.call(arguments),c=n.apply(this,a),s=e.apply(this,a),f=+r.apply(this,(a[0]=c,a)),l=i.apply(this,a)-wd,h=o.apply(this,a)-wd,p=f*md(l),d=f*xd(l),v=+r.apply(this,(a[0]=s,a)),_=i.apply(this,a)-wd,g=o.apply(this,a)-wd;if(u||(u=t=qe()),u.moveTo(p,d),u.arc(0,0,f,l,h),l===_&&h===g||(u.quadraticCurveTo(0,0,v*md(_),v*xd(_)),u.arc(0,0,v,_,g)),u.quadraticCurveTo(0,0,p,d),u.closePath(),t)return u=null,t+""||null}var n=Ue,e=De,r=Oe,i=Fe,o=Ie,u=null;return t.radius=function(n){return arguments.length?(r="function"==typeof n?n:kd(+n),t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:kd(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:kd(+n),t):o},t.source=function(e){return arguments.length?(n=e,t):n},t.target=function(n){return arguments.length?(e=n,t):e},t.context=function(n){return arguments.length?(u=null==n?null:n,t):u},t};Ye.prototype=Be.prototype={constructor:Ye,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var Pd=function(){function t(n,i,u,a){if(i>=o.length)return null!=r?r(n):null!=e?n.sort(e):n;for(var c,s,f,l=-1,h=n.length,p=o[i++],d=Be(),v=u();++l<h;)(f=d.get(c=p(s=n[l])+""))?f.push(s):d.set(c,[s]);return d.each(function(n,e){a(v,e,t(n,i,u,a))}),v}function n(t,e){if(++e>o.length)return t;var i,a=u[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=a?i.sort(function(t,n){return a(t.key,n.key)}):i}var e,r,i,o=[],u=[];return i={object:function(n){return t(n,0,je,He)},map:function(n){return t(n,0,Xe,Ve)},entries:function(e){return n(t(e,0,Xe,Ve),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return u[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}},Ld=Be.prototype;$e.prototype=We.prototype={constructor:$e,has:Ld.has,add:function(t){return t+="",this["$"+t]=t,this},remove:Ld.remove,clear:Ld.clear,values:Ld.keys,size:Ld.size,empty:Ld.empty,each:Ld.each};var Rd=function(t){var n=[];for(var e in t)n.push(e);return n},qd=function(t){var n=[];for(var e in t)n.push(t[e]);return n},Ud=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},Dd=function(t){function n(t,n){var r,i,o=e(t,function(t,e){if(r)return r(t,e-1);i=t,r=n?Ge(t,n):Ze(t)});return o.columns=i,o}function e(t,n){function e(){if(f>=s)return u;if(i)return i=!1,o;var n,e=f;if(34===t.charCodeAt(e)){for(var r=e;r++<s;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return f=r+2,n=t.charCodeAt(r+1),13===n?(i=!0,10===t.charCodeAt(r+2)&&++f):10===n&&(i=!0),t.slice(e+1,r).replace(/""/g,'"')}for(;f<s;){var a=1;if(10===(n=t.charCodeAt(f++)))i=!0;else if(13===n)i=!0,10===t.charCodeAt(f)&&(++f,++a);else if(n!==c)continue;return t.slice(e,f-a)}return t.slice(e)}for(var r,i,o={},u={},a=[],s=t.length,f=0,l=0;(r=e())!==u;){for(var h=[];r!==o&&r!==u;)h.push(r),r=e();n&&null==(h=n(h,l++))||a.push(h)}return a}function r(n,e){return null==e&&(e=Je(n)),[e.map(u).join(t)].concat(n.map(function(n){return e.map(function(t){return u(n[t])}).join(t)})).join("\n")}function i(t){return t.map(o).join("\n")}function o(n){return n.map(u).join(t)}function u(t){return null==t?"":a.test(t+="")?'"'+t.replace(/\"/g,'""')+'"':t}var a=new RegExp('["'+t+"\n\r]"),c=t.charCodeAt(0);return{parse:n,parseRows:e,format:r,formatRows:i}},Od=Dd(","),Fd=Od.parse,Id=Od.parseRows,Yd=Od.format,Bd=Od.formatRows,jd=Dd("\t"),Hd=jd.parse,Xd=jd.parseRows,Vd=jd.format,$d=jd.formatRows,Wd=function(t,n){function e(){var e,i,o=r.length,u=0,a=0;for(e=0;e<o;++e)i=r[e],u+=i.x,a+=i.y;for(u=u/o-t,a=a/o-n,e=0;e<o;++e)i=r[e],i.x-=u,i.y-=a}var r;return null==t&&(t=0),null==n&&(n=0),e.initialize=function(t){r=t},e.x=function(n){return arguments.length?(t=+n,e):t},e.y=function(t){return arguments.length?(n=+t,e):n},e},Zd=function(t){return function(){return t}},Gd=function(){return 1e-6*(Math.random()-.5)},Jd=function(t){var n=+this._x.call(null,t),e=+this._y.call(null,t);return Qe(this.cover(n,e),n,e,t)},Qd=function(t,n){if(isNaN(t=+t)||isNaN(n=+n))return this;var e=this._x0,r=this._y0,i=this._x1,o=this._y1;if(isNaN(e))i=(e=Math.floor(t))+1,o=(r=Math.floor(n))+1;else{if(!(e>t||t>i||r>n||n>o))return this;var u,a,c=i-e,s=this._root;switch(a=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,o=r+c,t>i||n>o);break;case 1:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,o=r+c,e>t||n>o);break;case 2:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,r=o-c,t>i||r>n);break;case 3:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,r=o-c,e>t||r>n)}this._root&&this._root.length&&(this._root=s)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},Kd=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},tv=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},nv=function(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i},ev=function(t,n,e){var r,i,o,u,a,c,s,f=this._x0,l=this._y0,h=this._x1,p=this._y1,d=[],v=this._root;for(v&&d.push(new nv(v,f,l,h,p)),null==e?e=1/0:(f=t-e,l=n-e,h=t+e,p=n+e,e*=e);c=d.pop();)if(!(!(v=c.node)||(i=c.x0)>h||(o=c.y0)>p||(u=c.x1)<f||(a=c.y1)<l))if(v.length){var _=(i+u)/2,g=(o+a)/2;d.push(new nv(v[3],_,g,u,a),new nv(v[2],i,g,_,a),new nv(v[1],_,o,u,g),new nv(v[0],i,o,_,g)),(s=(n>=g)<<1|t>=_)&&(c=d[d.length-1],d[d.length-1]=d[d.length-1-s],d[d.length-1-s]=c)}else{var y=t-+this._x.call(null,v.data),m=n-+this._y.call(null,v.data),x=y*y+m*m;if(x<e){var b=Math.sqrt(e=x);f=t-b,l=n-b,h=t+b,p=n+b,r=v.data}}return r},rv=function(t){if(isNaN(o=+this._x.call(null,t))||isNaN(u=+this._y.call(null,t)))return this;var n,e,r,i,o,u,a,c,s,f,l,h,p=this._root,d=this._x0,v=this._y0,_=this._x1,g=this._y1;if(!p)return this;if(p.length)for(;;){if((s=o>=(a=(d+_)/2))?d=a:_=a,(f=u>=(c=(v+g)/2))?v=c:g=c,n=p,!(p=p[l=f<<1|s]))return this;if(!p.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[h]=p:this._root=p),this):(this._root=i,this)},iv=function(){return this._root},ov=function(){var t=0;return this.visit(function(n){if(!n.length)do{++t}while(n=n.next)}),t},uv=function(t){var n,e,r,i,o,u,a=[],c=this._root;for(c&&a.push(new nv(c,this._x0,this._y0,this._x1,this._y1));n=a.pop();)if(!t(c=n.node,r=n.x0,i=n.y0,o=n.x1,u=n.y1)&&c.length){var s=(r+o)/2,f=(i+u)/2;(e=c[3])&&a.push(new nv(e,s,f,o,u)),(e=c[2])&&a.push(new nv(e,r,f,s,u)),(e=c[1])&&a.push(new nv(e,s,i,o,f)),(e=c[0])&&a.push(new nv(e,r,i,s,f))}return this},av=function(t){var n,e=[],r=[];for(this._root&&e.push(new nv(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,u=n.x0,a=n.y0,c=n.x1,s=n.y1,f=(u+c)/2,l=(a+s)/2;(o=i[0])&&e.push(new nv(o,u,a,f,l)),(o=i[1])&&e.push(new nv(o,f,a,c,l)),(o=i[2])&&e.push(new nv(o,u,l,f,s)),(o=i[3])&&e.push(new nv(o,f,l,c,s))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},cv=function(t){return arguments.length?(this._x=t,this):this._x},sv=function(t){return arguments.length?(this._y=t,this):this._y},fv=rr.prototype=ir.prototype;fv.copy=function(){var t,n,e=new ir(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=or(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=or(n));return e},fv.add=Jd,fv.addAll=Ke,fv.cover=Qd,fv.data=Kd,fv.extent=tv,fv.find=ev,fv.remove=rv,fv.removeAll=tr,fv.root=iv,fv.size=ov,fv.visit=uv,fv.visitAfter=av,fv.x=cv,fv.y=sv;var lv,hv=function(t){function n(){function t(t,n,e,r,i){var o=t.data,a=t.r,p=l+a;{if(!o)return n>s+p||r<s-p||e>f+p||i<f-p;if(o.index>c.index){var d=s-o.x-o.vx,v=f-o.y-o.vy,_=d*d+v*v;_<p*p&&(0===d&&(d=Gd(),_+=d*d),0===v&&(v=Gd(),_+=v*v),_=(p-(_=Math.sqrt(_)))/_*u,c.vx+=(d*=_)*(p=(a*=a)/(h+a)),c.vy+=(v*=_)*p,o.vx-=d*(p=1-p),o.vy-=v*p)}}}for(var n,r,c,s,f,l,h,p=i.length,d=0;d<a;++d)for(r=rr(i,ur,ar).visitAfter(e),n=0;n<p;++n)c=i[n],l=o[c.index],h=l*l,s=c.x+c.vx,f=c.y+c.vy,r.visit(t)}function e(t){if(t.data)return t.r=o[t.data.index];for(var n=t.r=0;n<4;++n)t[n]&&t[n].r>t.r&&(t.r=t[n].r)}function r(){if(i){var n,e,r=i.length;for(o=new Array(r),n=0;n<r;++n)e=i[n],o[e.index]=+t(e,n,i)}}var i,o,u=1,a=1;return"function"!=typeof t&&(t=Zd(null==t?1:+t)),n.initialize=function(t){i=t,r()},n.iterations=function(t){return arguments.length?(a=+t,n):a},n.strength=function(t){return arguments.length?(u=+t,n):u},n.radius=function(e){return arguments.length?(t="function"==typeof e?e:Zd(+e),r(),n):t},n},pv=function(t){function n(t){return 1/Math.min(s[t.source.index],s[t.target.index])}function e(n){for(var e=0,r=t.length;e<d;++e)for(var i,o,c,s,l,h,p,v=0;v<r;++v)i=t[v],o=i.source,c=i.target,s=c.x+c.vx-o.x-o.vx||Gd(),l=c.y+c.vy-o.y-o.vy||Gd(),h=Math.sqrt(s*s+l*l),h=(h-a[v])/h*n*u[v],s*=h,l*=h,c.vx-=s*(p=f[v]),c.vy-=l*p,o.vx+=s*(p=1-p),o.vy+=l*p}function r(){if(c){var n,e,r=c.length,h=t.length,p=Be(c,l);for(n=0,s=new Array(r);n<h;++n)e=t[n],e.index=n,"object"!=typeof e.source&&(e.source=sr(p,e.source)),"object"!=typeof e.target&&(e.target=sr(p,e.target)),s[e.source.index]=(s[e.source.index]||0)+1,s[e.target.index]=(s[e.target.index]||0)+1;for(n=0,f=new Array(h);n<h;++n)e=t[n],f[n]=s[e.source.index]/(s[e.source.index]+s[e.target.index]);u=new Array(h),i(),a=new Array(h),o()}}function i(){if(c)for(var n=0,e=t.length;n<e;++n)u[n]=+h(t[n],n,t)}function o(){if(c)for(var n=0,e=t.length;n<e;++n)a[n]=+p(t[n],n,t)}var u,a,c,s,f,l=cr,h=n,p=Zd(30),d=1;return null==t&&(t=[]),e.initialize=function(t){c=t,r()},e.links=function(n){return arguments.length?(t=n,r(),e):t},e.id=function(t){return arguments.length?(l=t, +e):l},e.iterations=function(t){return arguments.length?(d=+t,e):d},e.strength=function(t){return arguments.length?(h="function"==typeof t?t:Zd(+t),i(),e):h},e.distance=function(t){return arguments.length?(p="function"==typeof t?t:Zd(+t),o(),e):p},e},dv=10,vv=Math.PI*(3-Math.sqrt(5)),_v=function(t){function n(){e(),p.call("tick",o),u<a&&(h.stop(),p.call("end",o))}function e(){var n,e,r=t.length;for(u+=(s-u)*c,l.each(function(t){t(u)}),n=0;n<r;++n)e=t[n],null==e.fx?e.x+=e.vx*=f:(e.x=e.fx,e.vx=0),null==e.fy?e.y+=e.vy*=f:(e.y=e.fy,e.vy=0)}function r(){for(var n,e=0,r=t.length;e<r;++e){if(n=t[e],n.index=e,isNaN(n.x)||isNaN(n.y)){var i=dv*Math.sqrt(e),o=e*vv;n.x=i*Math.cos(o),n.y=i*Math.sin(o)}(isNaN(n.vx)||isNaN(n.vy))&&(n.vx=n.vy=0)}}function i(n){return n.initialize&&n.initialize(t),n}var o,u=1,a=.001,c=1-Math.pow(a,1/300),s=0,f=.6,l=Be(),h=yn(n),p=v("tick","end");return null==t&&(t=[]),r(),o={tick:e,restart:function(){return h.restart(n),o},stop:function(){return h.stop(),o},nodes:function(n){return arguments.length?(t=n,r(),l.each(i),o):t},alpha:function(t){return arguments.length?(u=+t,o):u},alphaMin:function(t){return arguments.length?(a=+t,o):a},alphaDecay:function(t){return arguments.length?(c=+t,o):+c},alphaTarget:function(t){return arguments.length?(s=+t,o):s},velocityDecay:function(t){return arguments.length?(f=1-t,o):1-f},force:function(t,n){return arguments.length>1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,u,a,c,s=0,f=t.length;for(null==r?r=1/0:r*=r,s=0;s<f;++s)a=t[s],i=n-a.x,o=e-a.y,(u=i*i+o*o)<r&&(c=a,r=u);return c},on:function(t,n){return arguments.length>1?(p.on(t,n),o):p.on(t)}}},gv=function(){function t(t){var n,a=i.length,c=rr(i,fr,lr).visitAfter(e);for(u=t,n=0;n<a;++n)o=i[n],c.visit(r)}function n(){if(i){var t,n,e=i.length;for(a=new Array(e),t=0;t<e;++t)n=i[t],a[n.index]=+c(n,t,i)}}function e(t){var n,e,r,i,o,u=0;if(t.length){for(r=i=o=0;o<4;++o)(n=t[o])&&(e=n.value)&&(u+=e,r+=e*n.x,i+=e*n.y);t.x=r/u,t.y=i/u}else{n=t,n.x=n.data.x,n.y=n.data.y;do{u+=a[n.data.index]}while(n=n.next)}t.value=u}function r(t,n,e,r){if(!t.value)return!0;var i=t.x-o.x,c=t.y-o.y,h=r-n,p=i*i+c*c;if(h*h/l<p)return p<f&&(0===i&&(i=Gd(),p+=i*i),0===c&&(c=Gd(),p+=c*c),p<s&&(p=Math.sqrt(s*p)),o.vx+=i*t.value*u/p,o.vy+=c*t.value*u/p),!0;if(!(t.length||p>=f)){(t.data!==o||t.next)&&(0===i&&(i=Gd(),p+=i*i),0===c&&(c=Gd(),p+=c*c),p<s&&(p=Math.sqrt(s*p)));do{t.data!==o&&(h=a[t.data.index]*u/p,o.vx+=i*h,o.vy+=c*h)}while(t=t.next)}}var i,o,u,a,c=Zd(-30),s=1,f=1/0,l=.81;return t.initialize=function(t){i=t,n()},t.strength=function(e){return arguments.length?(c="function"==typeof e?e:Zd(+e),n(),t):c},t.distanceMin=function(n){return arguments.length?(s=n*n,t):Math.sqrt(s)},t.distanceMax=function(n){return arguments.length?(f=n*n,t):Math.sqrt(f)},t.theta=function(n){return arguments.length?(l=n*n,t):Math.sqrt(l)},t},yv=function(t){function n(t){for(var n,e=0,u=r.length;e<u;++e)n=r[e],n.vx+=(o[e]-n.x)*i[e]*t}function e(){if(r){var n,e=r.length;for(i=new Array(e),o=new Array(e),n=0;n<e;++n)i[n]=isNaN(o[n]=+t(r[n],n,r))?0:+u(r[n],n,r)}}var r,i,o,u=Zd(.1);return"function"!=typeof t&&(t=Zd(null==t?0:+t)),n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(u="function"==typeof t?t:Zd(+t),e(),n):u},n.x=function(r){return arguments.length?(t="function"==typeof r?r:Zd(+r),e(),n):t},n},mv=function(t){function n(t){for(var n,e=0,u=r.length;e<u;++e)n=r[e],n.vy+=(o[e]-n.y)*i[e]*t}function e(){if(r){var n,e=r.length;for(i=new Array(e),o=new Array(e),n=0;n<e;++n)i[n]=isNaN(o[n]=+t(r[n],n,r))?0:+u(r[n],n,r)}}var r,i,o,u=Zd(.1);return"function"!=typeof t&&(t=Zd(null==t?0:+t)),n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(u="function"==typeof t?t:Zd(+t),e(),n):u},n.y=function(r){return arguments.length?(t="function"==typeof r?r:Zd(+r),e(),n):t},n},xv=function(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]},bv=function(t){return t=xv(Math.abs(t)),t?t[1]:NaN},wv=function(t,n){return function(e,r){for(var i=e.length,o=[],u=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(e.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[u=(u+1)%t.length];return o.reverse().join(n)}},Mv=function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}},Tv=function(t,n){t=t.toPrecision(n);t:for(var e,r=t.length,i=1,o=-1;i<r;++i)switch(t[i]){case".":o=e=i;break;case"0":0===o&&(o=i),e=i;break;case"e":break t;default:o>0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},Sv=function(t,n){var e=xv(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(lv=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=r.length;return o===u?r:o>u?r+new Array(o-u+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+xv(t,Math.max(0,n+o-1))[0]},Nv=function(t,n){var e=xv(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},kv={"":Tv,"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return Nv(100*t,n)},r:Nv,s:Sv,X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Ev=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;hr.prototype=pr.prototype,pr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var Av,Cv=function(t){return t},zv=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Pv=function(t){function n(t){function n(t){var n,i,a,f=_,x=g;if("c"===v)x=y(t)+x,t="";else{t=+t;var b=t<0;if(t=y(Math.abs(t),d),b&&0==+t&&(b=!1),f=(b?"("===s?s:"-":"-"===s||"("===s?"":s)+f,x=x+("s"===v?zv[8+lv/3]:"")+(b&&"("===s?")":""),m)for(n=-1,i=t.length;++n<i;)if(48>(a=t.charCodeAt(n))||a>57){x=(46===a?o+t.slice(n+1):t.slice(n))+x,t=t.slice(0,n);break}}p&&!l&&(t=r(t,1/0));var w=f.length+t.length+x.length,M=w<h?new Array(h-w+1).join(e):"";switch(p&&l&&(t=r(M+t,M.length?h-x.length:1/0),M=""),c){case"<":t=f+t+x+M;break;case"=":t=f+M+t+x;break;case"^":t=M.slice(0,w=M.length>>1)+f+t+x+M.slice(w);break;default:t=M+f+t+x}return u(t)}t=hr(t);var e=t.fill,c=t.align,s=t.sign,f=t.symbol,l=t.zero,h=t.width,p=t.comma,d=t.precision,v=t.type,_="$"===f?i[0]:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",g="$"===f?i[1]:/[%p]/.test(v)?a:"",y=kv[v],m=!v||/[defgprs%]/.test(v);return d=null==d?v?6:12:/[gprs]/.test(v)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),n.toString=function(){return t+""},n}function e(t,e){var r=n((t=hr(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(bv(e)/3))),o=Math.pow(10,-i),u=zv[8+i/3];return function(t){return r(o*t)+u}}var r=t.grouping&&t.thousands?wv(t.grouping,t.thousands):Cv,i=t.currency,o=t.decimal,u=t.numerals?Mv(t.numerals):Cv,a=t.percent||"%";return{format:n,formatPrefix:e}};dr({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Lv=function(t){return Math.max(0,-bv(Math.abs(t)))},Rv=function(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(bv(n)/3)))-bv(Math.abs(t)))},qv=function(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,bv(n)-bv(t))+1},Uv=function(){return new vr};vr.prototype={constructor:vr,reset:function(){this.s=this.t=0},add:function(t){_r(d_,t,this.t),_r(this,d_.s,this.s),this.s?this.t+=d_.t:this.s=d_.t},valueOf:function(){return this.s}};var Dv,Ov,Fv,Iv,Yv,Bv,jv,Hv,Xv,Vv,$v,Wv,Zv,Gv,Jv,Qv,Kv,t_,n_,e_,r_,i_,o_,u_,a_,c_,s_,f_,l_,h_,p_,d_=new vr,v_=1e-6,__=Math.PI,g_=__/2,y_=__/4,m_=2*__,x_=180/__,b_=__/180,w_=Math.abs,M_=Math.atan,T_=Math.atan2,S_=Math.cos,N_=Math.ceil,k_=Math.exp,E_=Math.log,A_=Math.pow,C_=Math.sin,z_=Math.sign||function(t){return t>0?1:t<0?-1:0},P_=Math.sqrt,L_=Math.tan,R_={Feature:function(t,n){br(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r<i;)br(e[r].geometry,n)}},q_={Sphere:function(t,n){n.sphere()},Point:function(t,n){t=t.coordinates,n.point(t[0],t[1],t[2])},MultiPoint:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)t=e[r],n.point(t[0],t[1],t[2])},LineString:function(t,n){wr(t.coordinates,n,0)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)wr(e[r],n,0)},Polygon:function(t,n){Mr(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)Mr(e[r],n)},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,i=e.length;++r<i;)br(e[r],n)}},U_=function(t,n){t&&R_.hasOwnProperty(t.type)?R_[t.type](t,n):br(t,n)},D_=Uv(),O_=Uv(),F_={point:xr,lineStart:xr,lineEnd:xr,polygonStart:function(){D_.reset(),F_.lineStart=Tr,F_.lineEnd=Sr},polygonEnd:function(){var t=+D_;O_.add(t<0?m_+t:t),this.lineStart=this.lineEnd=this.point=xr},sphere:function(){O_.add(m_)}},I_=function(t){return O_.reset(),U_(t,F_),2*O_},Y_=Uv(),B_={point:qr,lineStart:Dr,lineEnd:Or,polygonStart:function(){B_.point=Fr,B_.lineStart=Ir,B_.lineEnd=Yr,Y_.reset(),F_.polygonStart()},polygonEnd:function(){F_.polygonEnd(),B_.point=qr,B_.lineStart=Dr,B_.lineEnd=Or,D_<0?(Bv=-(Hv=180),jv=-(Xv=90)):Y_>v_?Xv=90:Y_<-v_&&(jv=-90),Jv[0]=Bv,Jv[1]=Hv}},j_=function(t){var n,e,r,i,o,u,a;if(Xv=Hv=-(Bv=jv=1/0),Gv=[],U_(t,B_),e=Gv.length){for(Gv.sort(jr),n=1,r=Gv[0],o=[r];n<e;++n)i=Gv[n],Hr(r,i[0])||Hr(r,i[1])?(Br(r[0],i[1])>Br(r[0],r[1])&&(r[1]=i[1]),Br(i[0],r[1])>Br(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(u=-1/0,e=o.length-1,n=0,r=o[e];n<=e;r=i,++n)i=o[n],(a=Br(r[1],i[0]))>u&&(u=a,Bv=i[0],Hv=r[1])}return Gv=Jv=null,Bv===1/0||jv===1/0?[[NaN,NaN],[NaN,NaN]]:[[Bv,jv],[Hv,Xv]]},H_={sphere:xr,point:Xr,lineStart:$r,lineEnd:Gr,polygonStart:function(){H_.lineStart=Jr,H_.lineEnd=Qr},polygonEnd:function(){H_.lineStart=$r,H_.lineEnd=Gr}},X_=function(t){Qv=Kv=t_=n_=e_=r_=i_=o_=u_=a_=c_=0,U_(t,H_);var n=u_,e=a_,r=c_,i=n*n+e*e+r*r;return i<1e-12&&(n=r_,e=i_,r=o_,Kv<v_&&(n=t_,e=n_,r=e_),(i=n*n+e*e+r*r)<1e-12)?[NaN,NaN]:[T_(e,n)*x_,yr(r/P_(i))*x_]},V_=function(t){return function(){return t}},$_=function(t,n){function e(e,r){return e=t(e,r),n(e[0],e[1])}return t.invert&&n.invert&&(e.invert=function(e,r){return(e=n.invert(e,r))&&t.invert(e[0],e[1])}),e};ni.invert=ni;var W_,Z_,G_,J_,Q_,K_,tg,ng,eg,rg,ig,og=function(t){function n(n){return n=t(n[0]*b_,n[1]*b_),n[0]*=x_,n[1]*=x_,n}return t=ei(t[0]*b_,t[1]*b_,t.length>2?t[2]*b_:0),n.invert=function(n){return n=t.invert(n[0]*b_,n[1]*b_),n[0]*=x_,n[1]*=x_,n},n},ug=function(){function t(t,n){e.push(t=r(t,n)),t[0]*=x_,t[1]*=x_}function n(){var t=i.apply(this,arguments),n=o.apply(this,arguments)*b_,c=u.apply(this,arguments)*b_;return e=[],r=ei(-t[0]*b_,-t[1]*b_,0).invert,ui(a,n,c,1),t={type:"Polygon",coordinates:[e]},e=r=null,t}var e,r,i=V_([0,0]),o=V_(90),u=V_(6),a={point:t};return n.center=function(t){return arguments.length?(i="function"==typeof t?t:V_([+t[0],+t[1]]),n):i},n.radius=function(t){return arguments.length?(o="function"==typeof t?t:V_(+t),n):o},n.precision=function(t){return arguments.length?(u="function"==typeof t?t:V_(+t),n):u},n},ag=function(){var t,n=[];return{point:function(n,e){t.push([n,e])},lineStart:function(){n.push(t=[])},lineEnd:xr,rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}},cg=function(t,n,e,r,i,o){var u,a=t[0],c=t[1],s=n[0],f=n[1],l=0,h=1,p=s-a,d=f-c;if(u=e-a,p||!(u>0)){if(u/=p,p<0){if(u<l)return;u<h&&(h=u)}else if(p>0){if(u>h)return;u>l&&(l=u)}if(u=i-a,p||!(u<0)){if(u/=p,p<0){if(u>h)return;u>l&&(l=u)}else if(p>0){if(u<l)return;u<h&&(h=u)}if(u=r-c,d||!(u>0)){if(u/=d,d<0){if(u<l)return;u<h&&(h=u)}else if(d>0){if(u>h)return;u>l&&(l=u)}if(u=o-c,d||!(u<0)){if(u/=d,d<0){if(u>h)return;u>l&&(l=u)}else if(d>0){if(u<l)return;u<h&&(h=u)}return l>0&&(t[0]=a+l*p,t[1]=c+l*d),h<1&&(n[0]=a+h*p,n[1]=c+h*d),!0}}}}},sg=function(t,n){return w_(t[0]-n[0])<v_&&w_(t[1]-n[1])<v_},fg=function(t,n,e,r,i){var o,u,a=[],c=[];if(t.forEach(function(t){if(!((n=t.length-1)<=0)){var n,e,r=t[0],u=t[n];if(sg(r,u)){for(i.lineStart(),o=0;o<n;++o)i.point((r=t[o])[0],r[1]);return void i.lineEnd()}a.push(e=new ci(r,t,null,!0)),c.push(e.o=new ci(r,null,e,!1)),a.push(e=new ci(u,t,null,!1)),c.push(e.o=new ci(u,null,e,!0))}}),a.length){for(c.sort(n),si(a),si(c),o=0,u=c.length;o<u;++o)c[o].e=e=!e;for(var s,f,l=a[0];;){for(var h=l,p=!0;h.v;)if((h=h.n)===l)return;s=h.z,i.lineStart();do{if(h.v=h.o.v=!0,h.e){if(p)for(o=0,u=s.length;o<u;++o)i.point((f=s[o])[0],f[1]);else r(h.x,h.n.x,1,i);h=h.n}else{if(p)for(s=h.p.z,o=s.length-1;o>=0;--o)i.point((f=s[o])[0],f[1]);else r(h.x,h.p.x,-1,i);h=h.p}h=h.o,s=h.z,p=!p}while(!h.v);i.lineEnd()}}},lg=1e9,hg=-lg,pg=function(){var t,n,e,r=0,i=0,o=960,u=500;return e={stream:function(e){return t&&n===e?t:t=fi(r,i,o,u)(n=e)},extent:function(a){return arguments.length?(r=+a[0][0],i=+a[0][1],o=+a[1][0],u=+a[1][1],t=n=null,e):[[r,i],[o,u]]}}},dg=Uv(),vg=function(t,n){var e=n[0],r=n[1],i=[C_(e),-S_(e),0],o=0,u=0;dg.reset();for(var a=0,c=t.length;a<c;++a)if(f=(s=t[a]).length)for(var s,f,l=s[f-1],h=l[0],p=l[1]/2+y_,d=C_(p),v=S_(p),_=0;_<f;++_,h=y,d=x,v=b,l=g){var g=s[_],y=g[0],m=g[1]/2+y_,x=C_(m),b=S_(m),w=y-h,M=w>=0?1:-1,T=M*w,S=T>__,N=d*x;if(dg.add(T_(N*M*C_(T),v*b+N*S_(T))),o+=S?w+M*m_:w,S^h>=e^y>=e){var k=zr(Ar(l),Ar(g));Rr(k);var E=zr(i,k);Rr(E);var A=(S^w>=0?-1:1)*yr(E[2]);(r>A||r===A&&(k[0]||k[1]))&&(u+=S^w>=0?1:-1)}}return(o<-v_||o<v_&&dg<-v_)^1&u},_g=Uv(),gg={sphere:xr,point:xr,lineStart:li,lineEnd:xr,polygonStart:xr,polygonEnd:xr},yg=function(t){return _g.reset(),U_(t,gg),+_g},mg=[null,null],xg={type:"LineString",coordinates:mg},bg=function(t,n){return mg[0]=t,mg[1]=n,yg(xg)},wg={Feature:function(t,n){return vi(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r<i;)if(vi(e[r].geometry,n))return!0;return!1}},Mg={Sphere:function(){return!0},Point:function(t,n){return _i(t.coordinates,n)},MultiPoint:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)if(_i(e[r],n))return!0;return!1},LineString:function(t,n){return gi(t.coordinates,n)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)if(gi(e[r],n))return!0;return!1},Polygon:function(t,n){return yi(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)if(yi(e[r],n))return!0;return!1},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,i=e.length;++r<i;)if(vi(e[r],n))return!0;return!1}},Tg=function(t,n){return(t&&wg.hasOwnProperty(t.type)?wg[t.type]:vi)(t,n)},Sg=function(t,n){var e=t[0]*b_,r=t[1]*b_,i=n[0]*b_,o=n[1]*b_,u=S_(r),a=C_(r),c=S_(o),s=C_(o),f=u*S_(e),l=u*C_(e),h=c*S_(i),p=c*C_(i),d=2*yr(P_(mr(o-r)+u*c*mr(i-e))),v=C_(d),_=d?function(t){var n=C_(t*=d)/v,e=C_(d-t)/v,r=e*f+n*h,i=e*l+n*p,o=e*a+n*s;return[T_(i,r)*x_,T_(o,P_(r*r+i*i))*x_]}:function(){return[e*x_,r*x_]};return _.distance=d,_},Ng=function(t){return t},kg=Uv(),Eg=Uv(),Ag={point:xr,lineStart:xr,lineEnd:xr,polygonStart:function(){Ag.lineStart=Si,Ag.lineEnd=Ei},polygonEnd:function(){Ag.lineStart=Ag.lineEnd=Ag.point=xr,kg.add(w_(Eg)),Eg.reset()},result:function(){var t=kg/2;return kg.reset(),t}},Cg=1/0,zg=Cg,Pg=-Cg,Lg=Pg,Rg={point:Ai,lineStart:xr,lineEnd:xr,polygonStart:xr,polygonEnd:xr,result:function(){var t=[[Cg,zg],[Pg,Lg]];return Pg=Lg=-(zg=Cg=1/0),t}},qg=0,Ug=0,Dg=0,Og=0,Fg=0,Ig=0,Yg=0,Bg=0,jg=0,Hg={point:Ci,lineStart:zi,lineEnd:Ri,polygonStart:function(){Hg.lineStart=qi,Hg.lineEnd=Ui},polygonEnd:function(){Hg.point=Ci,Hg.lineStart=zi,Hg.lineEnd=Ri},result:function(){var t=jg?[Yg/jg,Bg/jg]:Ig?[Og/Ig,Fg/Ig]:Dg?[qg/Dg,Ug/Dg]:[NaN,NaN];return qg=Ug=Dg=Og=Fg=Ig=Yg=Bg=jg=0,t}};Fi.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._context.moveTo(t,n),this._point=1;break;case 1:this._context.lineTo(t,n);break;default:this._context.moveTo(t+this._radius,n),this._context.arc(t,n,this._radius,0,m_)}},result:xr};var Xg,Vg,$g,Wg,Zg,Gg=Uv(),Jg={point:xr,lineStart:function(){Jg.point=Ii},lineEnd:function(){Xg&&Yi(Vg,$g),Jg.point=xr},polygonStart:function(){Xg=!0},polygonEnd:function(){Xg=null},result:function(){var t=+Gg;return Gg.reset(),t}};Bi.prototype={_circle:ji(4.5),pointRadius:function(t){return this._circle=ji(t),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._string.push("M",t,",",n),this._point=1;break;case 1:this._string.push("L",t,",",n);break;default:this._string.push("M",t,",",n,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}}};var Qg=function(t,n){function e(t){return t&&("function"==typeof o&&i.pointRadius(+o.apply(this,arguments)),U_(t,r(i))),i.result()}var r,i,o=4.5;return e.area=function(t){return U_(t,r(Ag)),Ag.result()},e.measure=function(t){return U_(t,r(Jg)),Jg.result()},e.bounds=function(t){return U_(t,r(Rg)),Rg.result()},e.centroid=function(t){return U_(t,r(Hg)),Hg.result()},e.projection=function(n){return arguments.length?(r=null==n?(t=null,Ng):(t=n).stream,e):t},e.context=function(t){return arguments.length?(i=null==t?(n=null,new Bi):new Fi(n=t),"function"!=typeof o&&i.pointRadius(o),e):n},e.pointRadius=function(t){return arguments.length?(o="function"==typeof t?t:(i.pointRadius(+t),+t),e):o},e.projection(t).context(n)},Kg=function(t,n,e,r){return function(i,o){function u(n,e){var r=i(n,e);t(n=r[0],e=r[1])&&o.point(n,e)}function a(t,n){var e=i(t,n);_.point(e[0],e[1])}function c(){b.point=a,_.lineStart()}function s(){b.point=u,_.lineEnd()}function f(t,n){v.push([t,n]);var e=i(t,n);m.point(e[0],e[1])}function l(){m.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),m.lineEnd();var t,n,e,r,i=m.clean(),u=y.result(),a=u.length;if(v.pop(),p.push(v),v=null,a)if(1&i){if(e=u[0],(n=e.length-1)>0){for(x||(o.polygonStart(),x=!0),o.lineStart(),t=0;t<n;++t)o.point((r=e[t])[0],r[1]);o.lineEnd()}}else a>1&&2&i&&u.push(u.pop().concat(u.shift())),d.push(u.filter(Hi))}var p,d,v,_=n(o),g=i.invert(r[0],r[1]),y=ag(),m=n(y),x=!1,b={point:u,lineStart:c,lineEnd:s,polygonStart:function(){b.point=f,b.lineStart=l,b.lineEnd=h,d=[],p=[]},polygonEnd:function(){b.point=u,b.lineStart=c,b.lineEnd=s,d=lf(d);var t=vg(p,g);d.length?(x||(o.polygonStart(),x=!0),fg(d,Xi,t,e,o)):t&&(x||(o.polygonStart(),x=!0),o.lineStart(),e(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),d=p=null},sphere:function(){o.polygonStart(),o.lineStart(),e(null,null,1,o),o.lineEnd(),o.polygonEnd()}};return b}},ty=Kg(function(){return!0},Vi,Wi,[-__,-g_]),ny=function(t,n){function e(e,r,i,o){ui(o,t,n,i,e,r)}function r(t,n){return S_(t)*S_(n)>a}function i(t){var n,e,i,a,f;return{lineStart:function(){a=i=!1,f=1},point:function(l,h){var p,d=[l,h],v=r(l,h),_=c?v?0:u(l,h):v?u(l+(l<0?__:-__),h):0;if(!n&&(a=i=v)&&t.lineStart(),v!==i&&(p=o(n,d),(sg(n,p)||sg(d,p))&&(d[0]+=v_,d[1]+=v_,v=r(d[0],d[1]))),v!==i)f=0,v?(t.lineStart(),p=o(d,n),t.point(p[0],p[1])):(p=o(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(s&&n&&c^v){var g;_&e||!(g=o(d,n,!0))||(f=0,c?(t.lineStart(),t.point(g[0][0],g[0][1]),t.point(g[1][0],g[1][1]),t.lineEnd()):(t.point(g[1][0],g[1][1]),t.lineEnd(),t.lineStart(),t.point(g[0][0],g[0][1])))}!v||n&&sg(n,d)||t.point(d[0],d[1]),n=d,i=v,e=_},lineEnd:function(){i&&t.lineEnd(),n=null},clean:function(){return f|(a&&i)<<1}}}function o(t,n,e){var r=Ar(t),i=Ar(n),o=[1,0,0],u=zr(r,i),c=Cr(u,u),s=u[0],f=c-s*s;if(!f)return!e&&t;var l=a*c/f,h=-a*s/f,p=zr(o,u),d=Lr(o,l);Pr(d,Lr(u,h));var v=p,_=Cr(d,v),g=Cr(v,v),y=_*_-g*(Cr(d,d)-1);if(!(y<0)){var m=P_(y),x=Lr(v,(-_-m)/g);if(Pr(x,d),x=Er(x),!e)return x;var b,w=t[0],M=n[0],T=t[1],S=n[1];M<w&&(b=w,w=M,M=b);var N=M-w,k=w_(N-__)<v_,E=k||N<v_;if(!k&&S<T&&(b=T,T=S,S=b),E?k?T+S>0^x[1]<(w_(x[0]-w)<v_?T:S):T<=x[1]&&x[1]<=S:N>__^(w<=x[0]&&x[0]<=M)){var A=Lr(v,(-_+m)/g);return Pr(A,d),[x,Er(A)]}}}function u(n,e){var r=c?t:__-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var a=S_(t),c=a>0,s=w_(a)>v_;return Kg(r,i,e,c?[0,-t]:[-__,t-__])},ey=function(t){return{stream:Zi(t)}};Gi.prototype={constructor:Gi,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var ry=16,iy=S_(30*b_),oy=function(t,n){return+n?to(t,n):Ki(t)},uy=Zi({point:function(t,n){this.stream.point(t*b_,n*b_)}}),ay=function(){return ro(oo).scale(155.424).center([0,33.6442])},cy=function(){return ay().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])},sy=function(){function t(t){var n=t[0],e=t[1];return a=null,i.point(n,e),a||(o.point(n,e),a)||(u.point(n,e),a)}function n(){return e=r=null,t}var e,r,i,o,u,a,c=cy(),s=ay().rotate([154,0]).center([-2,58.5]).parallels([55,65]),f=ay().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,n){a=[t,n]}};return t.invert=function(t){var n=c.scale(),e=c.translate(),r=(t[0]-e[0])/n,i=(t[1]-e[1])/n;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?f:c).invert(t)},t.stream=function(t){return e&&r===t?e:e=uo([c.stream(r=t),s.stream(t),f.stream(t)])},t.precision=function(t){return arguments.length?(c.precision(t),s.precision(t),f.precision(t),n()):c.precision()},t.scale=function(n){return arguments.length?(c.scale(n),s.scale(.35*n),f.scale(n),t.translate(c.translate())):c.scale()},t.translate=function(t){if(!arguments.length)return c.translate();var e=c.scale(),r=+t[0],a=+t[1];return i=c.translate(t).clipExtent([[r-.455*e,a-.238*e],[r+.455*e,a+.238*e]]).stream(l),o=s.translate([r-.307*e,a+.201*e]).clipExtent([[r-.425*e+v_,a+.12*e+v_],[r-.214*e-v_,a+.234*e-v_]]).stream(l),u=f.translate([r-.205*e,a+.212*e]).clipExtent([[r-.214*e+v_,a+.166*e+v_],[r-.115*e-v_,a+.234*e-v_]]).stream(l),n()},t.fitExtent=function(n,e){return Ji(t,n,e)},t.fitSize=function(n,e){return Qi(t,n,e)},t.scale(1070)},fy=ao(function(t){return P_(2/(1+t))});fy.invert=co(function(t){return 2*yr(t/2)});var ly=function(){return no(fy).scale(124.75).clipAngle(179.999)},hy=ao(function(t){return(t=gr(t))&&t/C_(t)});hy.invert=co(function(t){return t});var py=function(){return no(hy).scale(79.4188).clipAngle(179.999)};so.invert=function(t,n){return[t,2*M_(k_(n))-g_]};var dy=function(){return fo(so).scale(961/m_)},vy=function(){return ro(ho).scale(109.5).parallels([30,30])};po.invert=po;var _y=function(){return no(po).scale(152.63)},gy=function(){return ro(vo).scale(131.154).center([0,13.9389])};_o.invert=co(M_);var yy=function(){return no(_o).scale(144.049).clipAngle(60)},my=function(){function t(){return i=o=null,u}var n,e,r,i,o,u,a=1,c=0,s=0,f=1,l=1,h=Ng,p=null,d=Ng;return u={stream:function(t){return i&&o===t?i:i=h(d(o=t))},clipExtent:function(i){return arguments.length?(d=null==i?(p=n=e=r=null,Ng):fi(p=+i[0][0],n=+i[0][1],e=+i[1][0],r=+i[1][1]),t()):null==p?null:[[p,n],[e,r]]},scale:function(n){return arguments.length?(h=go((a=+n)*f,a*l,c,s),t()):a},translate:function(n){return arguments.length?(h=go(a*f,a*l,c=+n[0],s=+n[1]),t()):[c,s]},reflectX:function(n){return arguments.length?(h=go(a*(f=n?-1:1),a*l,c,s),t()):f<0},reflectY:function(n){return arguments.length?(h=go(a*f,a*(l=n?-1:1),c,s),t()):l<0},fitExtent:function(t,n){return Ji(u,t,n)},fitSize:function(t,n){return Qi(u,t,n)}}};yo.invert=co(yr);var xy=function(){return no(yo).scale(249.5).clipAngle(90+v_)};mo.invert=co(function(t){return 2*M_(t)});var by=function(){return no(mo).scale(250).clipAngle(142)};xo.invert=function(t,n){return[-n,2*M_(k_(t))-g_]};var wy=function(){var t=fo(xo),n=t.center,e=t.rotate;return t.center=function(t){return arguments.length?n([-t[1],t[0]]):(t=n(),[t[1],-t[0]])},t.rotate=function(t){return arguments.length?e([t[0],t[1],t.length>2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90]).scale(159.155)},My=function(){function t(t){var o,u=0;t.eachAfter(function(t){var e=t.children;e?(t.x=wo(e),t.y=To(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var a=No(t),c=ko(t),s=a.x-n(a,c)/2,f=c.x+n(c,a)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-s)/(f-s)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=bo,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t},Ty=function(){return this.eachAfter(Eo)},Sy=function(t){var n,e,r,i,o=this,u=[o];do{for(n=u.reverse(),u=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r<i;++r)u.push(e[r])}while(u.length);return this},Ny=function(t){for(var n,e,r=this,i=[r];r=i.pop();)if(t(r),n=r.children)for(e=n.length-1;e>=0;--e)i.push(n[e]);return this},ky=function(t){for(var n,e,r,i=this,o=[i],u=[];i=o.pop();)if(u.push(i),n=i.children)for(e=0,r=n.length;e<r;++e)o.push(n[e]);for(;i=u.pop();)t(i);return this},Ey=function(t){return this.eachAfter(function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e})},Ay=function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},Cy=function(t){for(var n=this,e=Ao(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},zy=function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},Py=function(){var t=[];return this.each(function(n){t.push(n)}),t},Ly=function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},Ry=function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n};qo.prototype=Co.prototype={constructor:qo,count:Ty,each:Sy,eachAfter:ky,eachBefore:Ny,sum:Ey,sort:Ay,path:Cy,ancestors:zy,descendants:Py,leaves:Ly,links:Ry,copy:zo};var qy=function(t){for(var n=(t=t.slice()).length,e=null,r=e;n;){var i=new Uo(t[n-1]);r=r?r.next=i:e=i,t[void 0]=t[--n]}return{head:e,tail:r}},Uy=function(t){return Oo(qy(t),[])},Dy=function(t){return Vo(t),t},Oy=function(t){return function(){return t}},Fy=function(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(Jo(n)).eachAfter(Qo(i,.5)).eachBefore(Ko(1)):t.eachBefore(Jo(Go)).eachAfter(Qo(Zo,1)).eachAfter(Qo(i,t.r/Math.min(e,r))).eachBefore(Ko(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=Zo;return t.radius=function(e){return arguments.length?(n=$o(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:Oy(+n),t):i},t},Iy=function(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)},Yy=function(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(r-n)/t.value;++a<c;)o=u[a],o.y0=e,o.y1=i,o.x0=n,o.x1=n+=o.value*s},By=function(){function t(t){var u=t.height+1;return t.x0=t.y0=i,t.x1=e,t.y1=r/u,t.eachBefore(n(r,u)),o&&t.eachBefore(Iy),t}function n(t,n){return function(e){e.children&&Yy(e,e.x0,t*(e.depth+1)/n,e.x1,t*(e.depth+2)/n);var r=e.x0,o=e.y0,u=e.x1-i,a=e.y1-i;u<r&&(r=u=(r+u)/2),a<o&&(o=a=(o+a)/2),e.x0=r,e.y0=o,e.x1=u,e.y1=a}}var e=1,r=1,i=0,o=!1;return t.round=function(n){return arguments.length?(o=!!n,t):o},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i=+n,t):i},t},jy="$",Hy={depth:-1},Xy={},Vy=function(){function t(t){var r,i,o,u,a,c,s,f=t.length,l=new Array(f),h={};for(i=0;i<f;++i)r=t[i],a=l[i]=new qo(r),null!=(c=n(r,i,t))&&(c+="")&&(s=jy+(a.id=c),h[s]=s in h?Xy:a);for(i=0;i<f;++i)if(a=l[i],null!=(c=e(t[i],i,t))&&(c+="")){if(!(u=h[jy+c]))throw new Error("missing: "+c);if(u===Xy)throw new Error("ambiguous: "+c);u.children?u.children.push(a):u.children=[a],a.parent=u}else{if(o)throw new Error("multiple roots");o=a}if(!o)throw new Error("no root");if(o.parent=Hy,o.eachBefore(function(t){t.depth=t.parent.depth+1,--f}).eachBefore(Ro),o.parent=null,f>0)throw new Error("cycle");return o}var n=tu,e=nu;return t.id=function(e){return arguments.length?(n=Wo(e),t):n},t.parentId=function(n){return arguments.length?(e=Wo(n),t):e},t};cu.prototype=Object.create(qo.prototype);var $y=function(){function t(t){var r=su(t);if(r.eachAfter(n),r.parent.m=-r.z,r.eachBefore(e),c)t.eachBefore(i);else{var s=t,f=t,l=t;t.eachBefore(function(t){t.x<s.x&&(s=t),t.x>f.x&&(f=t),t.depth>l.depth&&(l=t)});var h=s===f?1:o(s,f)/2,p=h-s.x,d=u/(f.x+h+p),v=a/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,i=t.i?e[t.i-1]:null;if(n){uu(t);var u=(n[0].z+n[n.length-1].z)/2;i?(t.z=i.z+o(t._,i._),t.m=t.z-u):t.z=u}else i&&(t.z=i.z+o(t._,i._));t.parent.A=r(t,i,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t,n,e){if(n){for(var r,i=t,u=t,a=n,c=i.parent.children[0],s=i.m,f=u.m,l=a.m,h=c.m;a=iu(a),i=ru(i),a&&i;)c=ru(c),u=iu(u),u.a=t,r=a.z+l-i.z-s+o(a._,i._),r>0&&(ou(au(a,t,e),t,r),s+=r,f+=r),l+=a.m,s+=i.m,h+=c.m,f+=u.m;a&&!iu(u)&&(u.t=a,u.m+=l-f),i&&!ru(c)&&(c.t=i,c.m+=s-h,e=t)}return e}function i(t){t.x*=u,t.y=t.depth*a}var o=eu,u=1,a=1,c=null;return t.separation=function(n){return arguments.length?(o=n,t):o},t.size=function(n){return arguments.length?(c=!1,u=+n[0],a=+n[1],t):c?null:[u,a]},t.nodeSize=function(n){return arguments.length?(c=!0,u=+n[0],a=+n[1],t):c?[u,a]:null},t},Wy=function(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(i-e)/t.value;++a<c;)o=u[a],o.x0=n,o.x1=r,o.y0=e,o.y1=e+=o.value*s},Zy=(1+Math.sqrt(5))/2,Gy=function t(n){function e(t,e,r,i,o){fu(n,t,e,r,i,o)}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}(Zy),Jy=function(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),u=[0],r&&t.eachBefore(Iy),t}function n(t){var n=u[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o<r&&(r=o=(r+o)/2),h<i&&(i=h=(i+h)/2),t.x0=r,t.y0=i,t.x1=o,t.y1=h,t.children&&(n=u[t.depth+1]=a(t)/2,r+=l(t)-n,i+=c(t)-n,o-=s(t)-n,h-=f(t)-n,o<r&&(r=o=(r+o)/2),h<i&&(i=h=(i+h)/2),e(t,r,i,o,h))}var e=Gy,r=!1,i=1,o=1,u=[0],a=Zo,c=Zo,s=Zo,f=Zo,l=Zo;return t.round=function(n){return arguments.length?(r=!!n,t):r},t.size=function(n){return arguments.length?(i=+n[0],o=+n[1],t):[i,o]},t.tile=function(n){return arguments.length?(e=Wo(n),t):e},t.padding=function(n){return arguments.length?t.paddingInner(n).paddingOuter(n):t.paddingInner()},t.paddingInner=function(n){return arguments.length?(a="function"==typeof n?n:Oy(+n),t):a},t.paddingOuter=function(n){return arguments.length?t.paddingTop(n).paddingRight(n).paddingBottom(n).paddingLeft(n):t.paddingTop()},t.paddingTop=function(n){return arguments.length?(c="function"==typeof n?n:Oy(+n),t):c},t.paddingRight=function(n){return arguments.length?(s="function"==typeof n?n:Oy(+n),t):s},t.paddingBottom=function(n){return arguments.length?(f="function"==typeof n?n:Oy(+n),t):f},t.paddingLeft=function(n){return arguments.length?(l="function"==typeof n?n:Oy(+n),t):l},t},Qy=function(t,n,e,r,i){function o(t,n,e,r,i,u,a){if(t>=n-1){var s=c[t];return s.x0=r,s.y0=i,s.x1=u,s.y1=a,void 0}for(var l=f[t],h=e/2+l,p=t+1,d=n-1;p<d;){var v=p+d>>>1;f[v]<h?p=v+1:d=v}h-f[p-1]<f[p]-h&&t+1<p&&--p;var _=f[p]-l,g=e-_;if(u-r>a-i){var y=(r*g+u*_)/e;o(t,p,_,r,i,y,a),o(p,n,g,y,i,u,a)}else{var m=(i*g+a*_)/e;o(t,p,_,r,i,u,m),o(p,n,g,r,m,u,a)}}var u,a,c=t.children,s=c.length,f=new Array(s+1);for(f[0]=a=u=0;u<s;++u)f[u+1]=a+=c[u].value;o(0,s,t.value,n,e,r,i) +},Ky=function(t,n,e,r,i){(1&t.depth?Wy:Yy)(t,n,e,r,i)},tm=function t(n){function e(t,e,r,i,o){if((u=t._squarify)&&u.ratio===n)for(var u,a,c,s,f,l=-1,h=u.length,p=t.value;++l<h;){for(a=u[l],c=a.children,s=a.value=0,f=c.length;s<f;++s)a.value+=c[s].value;a.dice?Yy(a,e,r,i,r+=(o-r)*a.value/p):Wy(a,e,r,e+=(i-e)*a.value/p,o),p-=a.value}else t._squarify=u=fu(n,t,e,r,i,o),u.ratio=n}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}(Zy),nm=function(t){for(var n,e=-1,r=t.length,i=t[r-1],o=0;++e<r;)n=i,i=t[e],o+=n[1]*i[0]-n[0]*i[1];return o/2},em=function(t){for(var n,e,r=-1,i=t.length,o=0,u=0,a=t[i-1],c=0;++r<i;)n=a,a=t[r],c+=e=n[0]*a[1]-a[0]*n[1],o+=(n[0]+a[0])*e,u+=(n[1]+a[1])*e;return c*=3,[o/c,u/c]},rm=function(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])},im=function(t){if((e=t.length)<3)return null;var n,e,r=new Array(e),i=new Array(e);for(n=0;n<e;++n)r[n]=[+t[n][0],+t[n][1],n];for(r.sort(lu),n=0;n<e;++n)i[n]=[r[n][0],-r[n][1]];var o=hu(r),u=hu(i),a=u[0]===o[0],c=u[u.length-1]===o[o.length-1],s=[];for(n=o.length-1;n>=0;--n)s.push(t[r[o[n]][2]]);for(n=+a;n<u.length-c;++n)s.push(t[r[u[n]][2]]);return s},om=function(t,n){for(var e,r,i=t.length,o=t[i-1],u=n[0],a=n[1],c=o[0],s=o[1],f=!1,l=0;l<i;++l)o=t[l],e=o[0],r=o[1],r>a!=s>a&&u<(c-e)*(a-r)/(s-r)+e&&(f=!f),c=e,s=r;return f},um=function(t){for(var n,e,r=-1,i=t.length,o=t[i-1],u=o[0],a=o[1],c=0;++r<i;)n=u,e=a,o=t[r],u=o[0],a=o[1],n-=u,e-=a,c+=Math.sqrt(n*n+e*e);return c},am=[].slice,cm={};pu.prototype=mu.prototype={constructor:pu,defer:function(t){if("function"!=typeof t||this._call)throw new Error;if(null!=this._error)return this;var n=am.call(arguments,1);return n.push(t),++this._waiting,this._tasks.push(n),du(this),this},abort:function(){return null==this._error&&gu(this,new Error("abort")),this},await:function(t){if("function"!=typeof t||this._call)throw new Error;return this._call=function(n,e){t.apply(null,[n].concat(e))},yu(this),this},awaitAll:function(t){if("function"!=typeof t||this._call)throw new Error;return this._call=t,yu(this),this}};var sm=function(t,n){return t=null==t?0:+t,n=null==n?1:+n,1===arguments.length?(n=t,t=0):n-=t,function(){return Math.random()*n+t}},fm=function(t,n){var e,r;return t=null==t?0:+t,n=null==n?1:+n,function(){var i;if(null!=e)i=e,e=null;else do{e=2*Math.random()-1,i=2*Math.random()-1,r=e*e+i*i}while(!r||r>1);return t+n*i*Math.sqrt(-2*Math.log(r)/r)}},lm=function(){var t=fm.apply(this,arguments);return function(){return Math.exp(t())}},hm=function(t){return function(){for(var n=0,e=0;e<t;++e)n+=Math.random();return n}},pm=function(t){var n=hm(t);return function(){return n()/t}},dm=function(t){return function(){return-Math.log(1-Math.random())/t}},vm=function(t,n){function e(t){var n,e=s.status;if(!e&&bu(s)||e>=200&&e<300||304===e){if(o)try{n=o.call(r,s)}catch(t){return void a.call("error",r,t)}else n=s;a.call("load",r,n)}else a.call("error",r,t)}var r,i,o,u,a=v("beforesend","progress","load","error"),c=Be(),s=new XMLHttpRequest,f=null,l=null,h=0;if("undefined"==typeof XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=s.ontimeout=e:s.onreadystatechange=function(t){s.readyState>3&&e(t)},s.onprogress=function(t){a.call("progress",r,t)},r={header:function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?c.get(t):(null==n?c.remove(t):c.set(t,n+""),r)},mimeType:function(t){return arguments.length?(i=null==t?null:t+"",r):i},responseType:function(t){return arguments.length?(u=t,r):u},timeout:function(t){return arguments.length?(h=+t,r):h},user:function(t){return arguments.length<1?f:(f=null==t?null:t+"",r)},password:function(t){return arguments.length<1?l:(l=null==t?null:t+"",r)},response:function(t){return o=t,r},get:function(t,n){return r.send("GET",t,n)},post:function(t,n){return r.send("POST",t,n)},send:function(n,e,o){return s.open(n,t,!0,f,l),null==i||c.has("accept")||c.set("accept",i+",*/*"),s.setRequestHeader&&c.each(function(t,n){s.setRequestHeader(n,t)}),null!=i&&s.overrideMimeType&&s.overrideMimeType(i),null!=u&&(s.responseType=u),h>0&&(s.timeout=h),null==o&&"function"==typeof e&&(o=e,e=null),null!=o&&1===o.length&&(o=xu(o)),null!=o&&r.on("error",o).on("load",function(t){o(null,t)}),a.call("beforesend",r,s),s.send(null==e?null:e),r},abort:function(){return s.abort(),r},on:function(){var t=a.on.apply(a,arguments);return t===a?r:t}},null!=n){if("function"!=typeof n)throw new Error("invalid callback: "+n);return r.get(n)}return r},_m=function(t,n){return function(e,r){var i=vm(e).mimeType(t).response(n);if(null!=r){if("function"!=typeof r)throw new Error("invalid callback: "+r);return i.get(r)}return i}},gm=_m("text/html",function(t){return document.createRange().createContextualFragment(t.responseText)}),ym=_m("application/json",function(t){return JSON.parse(t.responseText)}),mm=_m("text/plain",function(t){return t.responseText}),xm=_m("application/xml",function(t){var n=t.responseXML;if(!n)throw new Error("parse error");return n}),bm=function(t,n){return function(e,r,i){arguments.length<3&&(i=r,r=null);var o=vm(e).mimeType(t);return o.row=function(t){return arguments.length?o.response(wu(n,r=t)):r},o.row(r),i?o.get(i):o}},wm=bm("text/csv",Fd),Mm=bm("text/tab-separated-values",Hd),Tm=Array.prototype,Sm=Tm.map,Nm=Tm.slice,km={name:"implicit"},Em=function(t){return function(){return t}},Am=function(t){return+t},Cm=[0,1],zm=function(n,e,r){var o,u=n[0],a=n[n.length-1],c=i(u,a,null==e?10:e);switch(r=hr(null==r?",f":r),r.type){case"s":var s=Math.max(Math.abs(u),Math.abs(a));return null!=r.precision||isNaN(o=Rv(c,s))||(r.precision=o),t.formatPrefix(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(o=qv(c,Math.max(Math.abs(u),Math.abs(a))))||(r.precision=o-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(o=Lv(c))||(r.precision=o-2*("%"===r.type))}return t.format(r)},Pm=function(t,n){t=t.slice();var e,r=0,i=t.length-1,o=t[r],u=t[i];return u<o&&(e=r,r=i,i=e,e=o,o=u,u=e),t[r]=n.floor(o),t[i]=n.ceil(u),t},Lm=new Date,Rm=new Date,qm=Gu(function(){},function(t,n){t.setTime(+t+n)},function(t,n){return n-t});qm.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Gu(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):qm:null};var Um=qm.range,Dm=6e4,Om=6048e5,Fm=Gu(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),Im=Fm.range,Ym=Gu(function(t){t.setTime(Math.floor(t/Dm)*Dm)},function(t,n){t.setTime(+t+n*Dm)},function(t,n){return(n-t)/Dm},function(t){return t.getMinutes()}),Bm=Ym.range,jm=Gu(function(t){var n=t.getTimezoneOffset()*Dm%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),Hm=jm.range,Xm=Gu(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Dm)/864e5},function(t){return t.getDate()-1}),Vm=Xm.range,$m=Ju(0),Wm=Ju(1),Zm=Ju(2),Gm=Ju(3),Jm=Ju(4),Qm=Ju(5),Km=Ju(6),tx=$m.range,nx=Wm.range,ex=Zm.range,rx=Gm.range,ix=Jm.range,ox=Qm.range,ux=Km.range,ax=Gu(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),cx=ax.range,sx=Gu(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});sx.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Gu(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var fx=sx.range,lx=Gu(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*Dm)},function(t,n){return(n-t)/Dm},function(t){return t.getUTCMinutes()}),hx=lx.range,px=Gu(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()}),dx=px.range,vx=Gu(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),_x=vx.range,gx=Qu(0),yx=Qu(1),mx=Qu(2),xx=Qu(3),bx=Qu(4),wx=Qu(5),Mx=Qu(6),Tx=gx.range,Sx=yx.range,Nx=mx.range,kx=xx.range,Ex=bx.range,Ax=wx.range,Cx=Mx.range,zx=Gu(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Px=zx.range,Lx=Gu(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Lx.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Gu(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var Rx,qx=Lx.range,Ux={"-":"",_:" ",0:"0"},Dx=/^\s*\d+/,Ox=/^%/,Fx=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;Ga({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Ix=Date.prototype.toISOString?Ja:t.utcFormat("%Y-%m-%dT%H:%M:%S.%LZ"),Yx=+new Date("2000-01-01T00:00:00.000Z")?Qa:t.utcParse("%Y-%m-%dT%H:%M:%S.%LZ"),Bx=1e3,jx=60*Bx,Hx=60*jx,Xx=24*Hx,Vx=7*Xx,$x=30*Xx,Wx=365*Xx,Zx=function(){return nc(sx,ax,$m,Xm,jm,Ym,Fm,qm,t.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},Gx=function(){return nc(Lx,zx,gx,vx,px,lx,Fm,qm,t.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])},Jx=function(t){return t.match(/.{6}/g).map(function(t){return"#"+t})},Qx=Jx("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Kx=Jx("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),tb=Jx("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),nb=Jx("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),eb=Fh($t(300,.5,0),$t(-240,.5,1)),rb=Fh($t(-100,.75,.35),$t(80,1.5,.8)),ib=Fh($t(260,.75,.35),$t(80,1.5,.8)),ob=$t(),ub=function(t){(t<0||t>1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return ob.h=360*t-100,ob.s=1.5-1.5*n,ob.l=.8-.9*n,ob+""},ab=ec(Jx("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),cb=ec(Jx("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),sb=ec(Jx("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),fb=ec(Jx("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),lb=function(t){return function(){return t}},hb=Math.abs,pb=Math.atan2,db=Math.cos,vb=Math.max,_b=Math.min,gb=Math.sin,yb=Math.sqrt,mb=1e-12,xb=Math.PI,bb=xb/2,wb=2*xb,Mb=function(){function t(){var t,s,f=+n.apply(this,arguments),l=+e.apply(this,arguments),h=o.apply(this,arguments)-bb,p=u.apply(this,arguments)-bb,d=hb(p-h),v=p>h;if(c||(c=t=qe()),l<f&&(s=l,l=f,f=s),l>mb)if(d>wb-mb)c.moveTo(l*db(h),l*gb(h)),c.arc(0,0,l,h,p,!v),f>mb&&(c.moveTo(f*db(p),f*gb(p)),c.arc(0,0,f,p,h,v));else{var _,g,y=h,m=p,x=h,b=p,w=d,M=d,T=a.apply(this,arguments)/2,S=T>mb&&(i?+i.apply(this,arguments):yb(f*f+l*l)),N=_b(hb(l-f)/2,+r.apply(this,arguments)),k=N,E=N;if(S>mb){var A=oc(S/f*gb(T)),C=oc(S/l*gb(T));(w-=2*A)>mb?(A*=v?1:-1,x+=A,b-=A):(w=0,x=b=(h+p)/2),(M-=2*C)>mb?(C*=v?1:-1,y+=C,m-=C):(M=0,y=m=(h+p)/2)}var z=l*db(y),P=l*gb(y),L=f*db(b),R=f*gb(b);if(N>mb){var q=l*db(m),U=l*gb(m),D=f*db(x),O=f*gb(x);if(d<xb){var F=w>mb?lc(z,P,D,O,q,U,L,R):[L,R],I=z-F[0],Y=P-F[1],B=q-F[0],j=U-F[1],H=1/gb(ic((I*B+Y*j)/(yb(I*I+Y*Y)*yb(B*B+j*j)))/2),X=yb(F[0]*F[0]+F[1]*F[1]);k=_b(N,(f-X)/(H-1)),E=_b(N,(l-X)/(H+1))}}M>mb?E>mb?(_=hc(D,O,z,P,l,E,v),g=hc(q,U,L,R,l,E,v),c.moveTo(_.cx+_.x01,_.cy+_.y01),E<N?c.arc(_.cx,_.cy,E,pb(_.y01,_.x01),pb(g.y01,g.x01),!v):(c.arc(_.cx,_.cy,E,pb(_.y01,_.x01),pb(_.y11,_.x11),!v),c.arc(0,0,l,pb(_.cy+_.y11,_.cx+_.x11),pb(g.cy+g.y11,g.cx+g.x11),!v),c.arc(g.cx,g.cy,E,pb(g.y11,g.x11),pb(g.y01,g.x01),!v))):(c.moveTo(z,P),c.arc(0,0,l,y,m,!v)):c.moveTo(z,P),f>mb&&w>mb?k>mb?(_=hc(L,R,q,U,f,-k,v),g=hc(z,P,D,O,f,-k,v),c.lineTo(_.cx+_.x01,_.cy+_.y01),k<N?c.arc(_.cx,_.cy,k,pb(_.y01,_.x01),pb(g.y01,g.x01),!v):(c.arc(_.cx,_.cy,k,pb(_.y01,_.x01),pb(_.y11,_.x11),!v),c.arc(0,0,f,pb(_.cy+_.y11,_.cx+_.x11),pb(g.cy+g.y11,g.cx+g.x11),v),c.arc(g.cx,g.cy,k,pb(g.y11,g.x11),pb(g.y01,g.x01),!v))):c.arc(0,0,f,b,x,v):c.lineTo(L,R)}else c.moveTo(0,0);if(c.closePath(),t)return c=null,t+""||null}var n=uc,e=ac,r=lb(0),i=null,o=cc,u=sc,a=fc,c=null;return t.centroid=function(){var t=(+n.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+o.apply(this,arguments)+ +u.apply(this,arguments))/2-xb/2;return[db(r)*t,gb(r)*t]},t.innerRadius=function(e){return arguments.length?(n="function"==typeof e?e:lb(+e),t):n},t.outerRadius=function(n){return arguments.length?(e="function"==typeof n?n:lb(+n),t):e},t.cornerRadius=function(n){return arguments.length?(r="function"==typeof n?n:lb(+n),t):r},t.padRadius=function(n){return arguments.length?(i=null==n?null:"function"==typeof n?n:lb(+n),t):i},t.startAngle=function(n){return arguments.length?(o="function"==typeof n?n:lb(+n),t):o},t.endAngle=function(n){return arguments.length?(u="function"==typeof n?n:lb(+n),t):u},t.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:lb(+n),t):a},t.context=function(n){return arguments.length?(c=null==n?null:n,t):c},t};pc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var Tb=function(t){return new pc(t)},Sb=function(){function t(t){var a,c,s,f=t.length,l=!1;for(null==i&&(u=o(s=qe())),a=0;a<=f;++a)!(a<f&&r(c=t[a],a,t))===l&&((l=!l)?u.lineStart():u.lineEnd()),l&&u.point(+n(c,a,t),+e(c,a,t));if(s)return u=null,s+""||null}var n=dc,e=vc,r=lb(!0),i=null,o=Tb,u=null;return t.x=function(e){return arguments.length?(n="function"==typeof e?e:lb(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:lb(+n),t):e},t.defined=function(n){return arguments.length?(r="function"==typeof n?n:lb(!!n),t):r},t.curve=function(n){return arguments.length?(o=n,null!=i&&(u=o(i)),t):o},t.context=function(n){return arguments.length?(null==n?i=u=null:u=o(i=n),t):i},t},Nb=function(){function t(t){var n,f,l,h,p,d=t.length,v=!1,_=new Array(d),g=new Array(d);for(null==a&&(s=c(p=qe())),n=0;n<=d;++n){if(!(n<d&&u(h=t[n],n,t))===v)if(v=!v)f=n,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),l=n-1;l>=f;--l)s.point(_[l],g[l]);s.lineEnd(),s.areaEnd()}v&&(_[n]=+e(h,n,t),g[n]=+i(h,n,t),s.point(r?+r(h,n,t):_[n],o?+o(h,n,t):g[n]))}if(p)return s=null,p+""||null}function n(){return Sb().defined(u).curve(c).context(a)}var e=dc,r=null,i=lb(0),o=vc,u=lb(!0),a=null,c=Tb,s=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:lb(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:lb(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:lb(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:lb(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:lb(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:lb(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(u="function"==typeof n?n:lb(!!n),t):u},t.curve=function(n){return arguments.length?(c=n,null!=a&&(s=c(a)),t):c},t.context=function(n){return arguments.length?(null==n?a=s=null:s=c(a=n),t):a},t},kb=function(t,n){return n<t?-1:n>t?1:n>=t?0:NaN},Eb=function(t){return t},Ab=function(){function t(t){var a,c,s,f,l,h=t.length,p=0,d=new Array(h),v=new Array(h),_=+i.apply(this,arguments),g=Math.min(wb,Math.max(-wb,o.apply(this,arguments)-_)),y=Math.min(Math.abs(g)/h,u.apply(this,arguments)),m=y*(g<0?-1:1);for(a=0;a<h;++a)(l=v[d[a]=a]=+n(t[a],a,t))>0&&(p+=l);for(null!=e?d.sort(function(t,n){return e(v[t],v[n])}):null!=r&&d.sort(function(n,e){return r(t[n],t[e])}),a=0,s=p?(g-h*m)/p:0;a<h;++a,_=f)c=d[a],l=v[c],f=_+(l>0?l*s:0)+m,v[c]={data:t[c],index:a,value:l,startAngle:_,endAngle:f,padAngle:y};return v}var n=Eb,e=kb,r=null,i=lb(0),o=lb(wb),u=lb(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:lb(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:lb(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:lb(+n),t):o},t.padAngle=function(n){return arguments.length?(u="function"==typeof n?n:lb(+n),t):u},t},Cb=gc(Tb);_c.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var zb=function(){return yc(Sb().curve(Cb))},Pb=function(){var t=Nb().curve(Cb),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return yc(e())},delete t.lineX0,t.lineEndAngle=function(){return yc(r())},delete t.lineX1,t.lineInnerRadius=function(){return yc(i())},delete t.lineY0,t.lineOuterRadius=function(){return yc(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(gc(t)):n()._curve},t},Lb={draw:function(t,n){var e=Math.sqrt(n/xb);t.moveTo(e,0),t.arc(0,0,e,0,wb)}},Rb={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},qb=Math.sqrt(1/3),Ub=2*qb,Db={draw:function(t,n){var e=Math.sqrt(n/Ub),r=e*qb;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},Ob=Math.sin(xb/10)/Math.sin(7*xb/10),Fb=Math.sin(wb/10)*Ob,Ib=-Math.cos(wb/10)*Ob,Yb={draw:function(t,n){var e=Math.sqrt(.8908130915292852*n),r=Fb*e,i=Ib*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var u=wb*o/5,a=Math.cos(u),c=Math.sin(u);t.lineTo(c*e,-a*e),t.lineTo(a*r-c*i,c*r+a*i)}t.closePath()}},Bb={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},jb=Math.sqrt(3),Hb={draw:function(t,n){var e=-Math.sqrt(n/(3*jb));t.moveTo(0,2*e),t.lineTo(-jb*e,-e),t.lineTo(jb*e,-e),t.closePath()}},Xb=-.5,Vb=Math.sqrt(3)/2,$b=1/Math.sqrt(12),Wb=3*($b/2+1),Zb={draw:function(t,n){var e=Math.sqrt(n/Wb),r=e/2,i=e*$b,o=r,u=e*$b+e,a=-o,c=u;t.moveTo(r,i),t.lineTo(o,u),t.lineTo(a,c),t.lineTo(Xb*r-Vb*i,Vb*r+Xb*i),t.lineTo(Xb*o-Vb*u,Vb*o+Xb*u),t.lineTo(Xb*a-Vb*c,Vb*a+Xb*c),t.lineTo(Xb*r+Vb*i,Xb*i-Vb*r),t.lineTo(Xb*o+Vb*u,Xb*u-Vb*o),t.lineTo(Xb*a+Vb*c,Xb*c-Vb*a),t.closePath()}},Gb=[Lb,Rb,Db,Bb,Yb,Hb,Zb],Jb=function(){function t(){var t;if(r||(r=t=qe()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=lb(Lb),e=lb(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:lb(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:lb(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t},Qb=function(){};xc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:mc(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:mc(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var Kb=function(t){return new xc(t)};bc.prototype={areaStart:Qb,areaEnd:Qb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:mc(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var tw=function(t){return new bc(t)};wc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:mc(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var nw=function(t){return new wc(t)};Mc.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],u=t[e]-i,a=n[e]-o,c=-1;++c<=e;)r=c/e,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*u),this._beta*n[c]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var ew=function t(n){function e(t){return 1===n?new xc(t):new Mc(t,n)}return e.beta=function(n){return t(+n)},e}(.85);Sc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Tc(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Tc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var rw=function t(n){function e(t){return new Sc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Nc.prototype={areaStart:Qb,areaEnd:Qb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Tc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var iw=function t(n){function e(t){return new Nc(t,n)}return e.tension=function(n){return t(+n)},e}(0);kc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Tc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var ow=function t(n){function e(t){return new kc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Ac.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN, +this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Ec(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var uw=function t(n){function e(t){return n?new Ac(t,n):new Sc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Cc.prototype={areaStart:Qb,areaEnd:Qb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Ec(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var aw=function t(n){function e(t){return n?new Cc(t,n):new Nc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);zc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ec(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var cw=function t(n){function e(t){return n?new zc(t,n):new kc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Pc.prototype={areaStart:Qb,areaEnd:Qb,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}};var sw=function(t){return new Pc(t)};Dc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Uc(this,this._t0,qc(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,Uc(this,qc(this,e=Rc(this,t,n)),e);break;default:Uc(this,this._t0,e=Rc(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(Oc.prototype=Object.create(Dc.prototype)).point=function(t,n){Dc.prototype.point.call(this,n,t)},Fc.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},Bc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=jc(t),i=jc(n),o=0,u=1;u<e;++o,++u)this._context.bezierCurveTo(r[0][o],i[0][o],r[1][o],i[1][o],t[u],n[u]);(this._line||0!==this._line&&1===e)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var fw=function(t){return new Bc(t)};Hc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}};var lw=function(t){return new Hc(t,.5)},hw=Array.prototype.slice,pw=function(t,n){if((r=t.length)>1)for(var e,r,i=1,o=t[n[0]],u=o.length;i<r;++i){e=o,o=t[n[i]];for(var a=0;a<u;++a)o[a][1]+=o[a][0]=isNaN(e[a][1])?e[a][0]:e[a][1]}},dw=function(t){for(var n=t.length,e=new Array(n);--n>=0;)e[n]=n;return e},vw=function(){function t(t){var o,u,a=n.apply(this,arguments),c=t.length,s=a.length,f=new Array(s);for(o=0;o<s;++o){for(var l,h=a[o],p=f[o]=new Array(c),d=0;d<c;++d)p[d]=l=[0,+i(t[d],h,d,t)],l.data=t[d];p.key=h}for(o=0,u=e(f);o<s;++o)f[u[o]].index=o;return r(f,u),f}var n=lb([]),e=dw,r=pw,i=$c;return t.keys=function(e){return arguments.length?(n="function"==typeof e?e:lb(hw.call(e)),t):n},t.value=function(n){return arguments.length?(i="function"==typeof n?n:lb(+n),t):i},t.order=function(n){return arguments.length?(e=null==n?dw:"function"==typeof n?n:lb(hw.call(n)),t):e},t.offset=function(n){return arguments.length?(r=null==n?pw:n,t):r},t},_w=function(t,n){if((r=t.length)>0){for(var e,r,i,o=0,u=t[0].length;o<u;++o){for(i=e=0;e<r;++e)i+=t[e][o][1]||0;if(i)for(e=0;e<r;++e)t[e][o][1]/=i}pw(t,n)}},gw=function(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r<o;++r){for(var u=0,a=0;u<e;++u)a+=t[u][r][1]||0;i[r][1]+=i[r][0]=-a/2}pw(t,n)}},yw=function(t,n){if((i=t.length)>0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,u=1;u<r;++u){for(var a=0,c=0,s=0;a<i;++a){for(var f=t[n[a]],l=f[u][1]||0,h=f[u-1][1]||0,p=(l-h)/2,d=0;d<a;++d){var v=t[n[d]];p+=(v[u][1]||0)-(v[u-1][1]||0)}c+=l,s+=p*l}e[u-1][1]+=e[u-1][0]=o,c&&(o-=s/c)}e[u-1][1]+=e[u-1][0]=o,pw(t,n)}},mw=function(t){var n=t.map(Wc);return dw(t).sort(function(t,e){return n[t]-n[e]})},xw=function(t){return mw(t).reverse()},bw=function(t){var n,e,r=t.length,i=t.map(Wc),o=dw(t).sort(function(t,n){return i[n]-i[t]}),u=0,a=0,c=[],s=[];for(n=0;n<r;++n)e=o[n],u<a?(u+=i[e],c.push(e)):(a+=i[e],s.push(e));return s.reverse().concat(c)},ww=function(t){return dw(t).reverse()},Mw=function(t){return function(){return t}};Jc.prototype={constructor:Jc,insert:function(t,n){var e,r,i;if(t){if(n.P=t,n.N=t.N,t.N&&(t.N.P=n),t.N=n,t.R){for(t=t.R;t.L;)t=t.L;t.L=n}else t.R=n;e=t}else this._?(t=ns(this._),n.P=null,n.N=t,t.P=t.L=n,e=t):(n.P=n.N=null,this._=n,e=null);for(n.L=n.R=null,n.U=e,n.C=!0,t=n;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.R&&(Kc(this,e),t=e,e=t.U),e.C=!1,r.C=!0,ts(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.L&&(ts(this,e),t=e,e=t.U),e.C=!1,r.C=!0,Kc(this,r))),e=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var n,e,r,i=t.U,o=t.L,u=t.R;if(e=o?u?ns(u):o:u,i?i.L===t?i.L=e:i.R=e:this._=e,o&&u?(r=e.C,e.C=t.C,e.L=o,o.U=e,e!==u?(i=e.U,e.U=t.U,t=e.R,i.L=t,e.R=u,u.U=e):(e.U=i,i=e,t=e.R)):(r=t.C,t=e),t&&(t.U=i),!r){if(t&&t.C)return void(t.C=!1);do{if(t===this._)break;if(t===i.L){if(n=i.R,n.C&&(n.C=!1,i.C=!0,Kc(this,i),n=i.R),n.L&&n.L.C||n.R&&n.R.C){n.R&&n.R.C||(n.L.C=!1,n.C=!0,ts(this,n),n=i.R),n.C=i.C,i.C=n.R.C=!1,Kc(this,i),t=this._;break}}else if(n=i.L,n.C&&(n.C=!1,i.C=!0,ts(this,i),n=i.L),n.L&&n.L.C||n.R&&n.R.C){n.L&&n.L.C||(n.R.C=!1,n.C=!0,Kc(this,n),n=i.L),n.C=i.C,i.C=n.L.C=!1,ts(this,i),t=this._;break}n.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var Tw,Sw,Nw,kw,Ew,Aw=[],Cw=[],zw=1e-6,Pw=1e-12;Ns.prototype={constructor:Ns,polygons:function(){var t=this.edges;return this.cells.map(function(n){var e=n.halfedges.map(function(e){return fs(n,t[e])});return e.data=n.site.data,e})},triangles:function(){var t=[],n=this.edges;return this.cells.forEach(function(e,r){if(o=(i=e.halfedges).length)for(var i,o,u,a=e.site,c=-1,s=n[i[o-1]],f=s.left===a?s.right:s.left;++c<o;)u=f,s=n[i[c]],f=s.left===a?s.right:s.left,u&&f&&r<u.index&&r<f.index&&Ts(a,u,f)<0&&t.push([a.data,u.data,f.data])}),t},links:function(){return this.edges.filter(function(t){return t.right}).map(function(t){return{source:t.left.data,target:t.right.data}})},find:function(t,n,e){for(var r,i,o=this,u=o._found||0,a=o.cells.length;!(i=o.cells[u]);)if(++u>=a)return null;var c=t-i.site[0],s=n-i.site[1],f=c*c+s*s;do{i=o.cells[r=u],u=null,i.halfedges.forEach(function(e){var r=o.edges[e],a=r.left;if(a!==i.site&&a||(a=r.right)){var c=t-a[0],s=n-a[1],l=c*c+s*s;l<f&&(f=l,u=a.index)}})}while(null!==u);return o._found=r,null==e||f<=e*e?i.site:null}};var Lw=function(){function t(t){return new Ns(t.map(function(r,i){var o=[Math.round(n(r,i,t)/zw)*zw,Math.round(e(r,i,t)/zw)*zw];return o.index=i,o.data=r,o}),r)}var n=Zc,e=Gc,r=null;return t.polygons=function(n){return t(n).polygons()},t.links=function(n){return t(n).links()},t.triangles=function(n){return t(n).triangles()},t.x=function(e){return arguments.length?(n="function"==typeof e?e:Mw(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:Mw(+n),t):e},t.extent=function(n){return arguments.length?(r=null==n?null:[[+n[0][0],+n[0][1]],[+n[1][0],+n[1][1]]],t):r&&[[r[0][0],r[0][1]],[r[1][0],r[1][1]]]},t.size=function(n){return arguments.length?(r=null==n?null:[[0,0],[+n[0],+n[1]]],t):r&&[r[1][0]-r[0][0],r[1][1]-r[0][1]]},t},Rw=function(t){return function(){return t}};Es.prototype={constructor:Es,scale:function(t){return 1===t?this:new Es(this.k*t,this.x,this.y)},translate:function(t,n){return 0===t&0===n?this:new Es(this.k,this.x+this.k*t,this.y+this.k*n)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var qw=new Es(1,0,0);As.prototype=Es.prototype;var Uw=function(){t.event.preventDefault(),t.event.stopImmediatePropagation()},Dw=function(){function n(t){}function e(t,n){return n=Math.max(x,Math.min(b,n)),n===t.k?t:new Es(n,t.x,t.y)}function r(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new Es(t.k,r,i)}function i(t,n){var e=t.invertX(n[0][0])-w,r=t.invertX(n[1][0])-M,i=t.invertY(n[0][1])-T,o=t.invertY(n[1][1])-S;return t.translate(r>e?(e+r)/2:Math.min(0,e)||Math.max(0,r),o>i?(i+o)/2:Math.min(0,i)||Math.max(0,o))}function o(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function u(t,n,e){t.on("start.zoom",function(){a(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){a(this,arguments).end()}).tween("zoom",function(){var t=this,r=arguments,i=a(t,r),u=m.apply(t,r),c=e||o(u),s=Math.max(u[1][0]-u[0][0],u[1][1]-u[0][1]),f=t.__zoom,l="function"==typeof n?n.apply(t,r):n,h=k(f.invert(c).concat(s/f.k),l.invert(c).concat(s/l.k));return function(t){if(1===t)t=l;else{var n=h(t),e=s/n[2];t=new Es(e,c[0]-n[0]*e,c[1]-n[1]*e)}i.zoom(null,t)}})}function a(t,n){for(var e,r=0,i=E.length;r<i;++r)if((e=E[r]).that===t)return e;return new c(t,n)}function c(t,n){this.that=t,this.args=n,this.index=-1,this.active=0,this.extent=m.apply(t,n)}function s(){function n(){o.wheel=null,o.end()}if(y.apply(this,arguments)){var o=a(this,arguments),u=this.__zoom,c=Math.max(x,Math.min(b,u.k*Math.pow(2,-t.event.deltaY*(t.event.deltaMode?120:1)/500))),s=If(this);if(o.wheel)o.mouse[0][0]===s[0]&&o.mouse[0][1]===s[1]||(o.mouse[1]=u.invert(o.mouse[0]=s)),clearTimeout(o.wheel);else{if(u.k===c)return;o.mouse=[s,u.invert(s)],cp(this),o.start()}Uw(),o.wheel=setTimeout(n,P),o.zoom("mouse",i(r(e(u,c),o.mouse[0],o.mouse[1]),o.extent))}}function f(){function n(){Uw(),o.moved=!0,o.zoom("mouse",i(r(o.that.__zoom,o.mouse[0]=If(o.that),o.mouse[1]),o.extent))}function e(){u.on("mousemove.zoom mouseup.zoom",null),yt(t.event.view,o.moved),Uw(),o.end()}if(!g&&y.apply(this,arguments)){var o=a(this,arguments),u=wl(t.event.view).on("mousemove.zoom",n,!0).on("mouseup.zoom",e,!0),c=If(this);kl(t.event.view),Cs(),o.mouse=[c,this.__zoom.invert(c)],cp(this),o.start()}}function l(){if(y.apply(this,arguments)){var o=this.__zoom,a=If(this),c=o.invert(a),s=o.k*(t.event.shiftKey?.5:2),f=i(r(e(o,s),a,c),m.apply(this,arguments));Uw(),N>0?wl(this).transition().duration(N).call(u,f,a):wl(this).call(n.transform,f)}}function h(){if(y.apply(this,arguments)){var n,e,r,i,o=a(this,arguments),u=t.event.changedTouches,c=u.length;for(Cs(),e=0;e<c;++e)r=u[e],i=Tl(this,u,r.identifier),i=[i,this.__zoom.invert(i),r.identifier],o.touch0?o.touch1||(o.touch1=i):(o.touch0=i,n=!0);if(_&&(_=clearTimeout(_),!o.touch1))return o.end(),void((i=wl(this).on("dblclick.zoom"))&&i.apply(this,arguments));n&&(_=setTimeout(function(){_=null},z),cp(this),o.start())}}function p(){var n,o,u,c,s=a(this,arguments),f=t.event.changedTouches,l=f.length;for(Uw(),_&&(_=clearTimeout(_)),n=0;n<l;++n)o=f[n],u=Tl(this,f,o.identifier),s.touch0&&s.touch0[2]===o.identifier?s.touch0[0]=u:s.touch1&&s.touch1[2]===o.identifier&&(s.touch1[0]=u);if(o=s.that.__zoom,s.touch1){var h=s.touch0[0],p=s.touch0[1],d=s.touch1[0],v=s.touch1[1],g=(g=d[0]-h[0])*g+(g=d[1]-h[1])*g,y=(y=v[0]-p[0])*y+(y=v[1]-p[1])*y;o=e(o,Math.sqrt(g/y)),u=[(h[0]+d[0])/2,(h[1]+d[1])/2],c=[(p[0]+v[0])/2,(p[1]+v[1])/2]}else{if(!s.touch0)return;u=s.touch0[0],c=s.touch0[1]}s.zoom("touch",i(r(o,u,c),s.extent))}function d(){var n,e,r=a(this,arguments),i=t.event.changedTouches,o=i.length;for(Cs(),g&&clearTimeout(g),g=setTimeout(function(){g=null},z),n=0;n<o;++n)e=i[n],r.touch0&&r.touch0[2]===e.identifier?delete r.touch0:r.touch1&&r.touch1[2]===e.identifier&&delete r.touch1;r.touch1&&!r.touch0&&(r.touch0=r.touch1,delete r.touch1),r.touch0?r.touch0[1]=this.__zoom.invert(r.touch0[0]):r.end()}var _,g,y=zs,m=Ps,x=0,b=1/0,w=-b,M=b,T=w,S=M,N=250,k=Lh,E=[],C=v("start","zoom","end"),z=500,P=150;return n.transform=function(t,n){var e=t.selection?t.selection():t;e.property("__zoom",Ls),t!==e?u(t,n):e.interrupt().each(function(){a(this,arguments).start().zoom(null,"function"==typeof n?n.apply(this,arguments):n).end()})},n.scaleBy=function(t,e){n.scaleTo(t,function(){return this.__zoom.k*("function"==typeof e?e.apply(this,arguments):e)})},n.scaleTo=function(t,u){n.transform(t,function(){var t=m.apply(this,arguments),n=this.__zoom,a=o(t),c=n.invert(a);return i(r(e(n,"function"==typeof u?u.apply(this,arguments):u),a,c),t)})},n.translateBy=function(t,e,r){n.transform(t,function(){return i(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof r?r.apply(this,arguments):r),m.apply(this,arguments))})},c.prototype={start:function(){return 1==++this.active&&(this.index=E.push(this)-1,this.emit("start")),this},zoom:function(t,n){return this.mouse&&"mouse"!==t&&(this.mouse[1]=n.invert(this.mouse[0])),this.touch0&&"touch"!==t&&(this.touch0[1]=n.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=n.invert(this.touch1[0])),this.that.__zoom=n,this.emit("zoom"),this},end:function(){return 0==--this.active&&(E.splice(this.index,1),this.index=-1,this.emit("end")),this},emit:function(t){A(new ks(n,t,this.that.__zoom),C.apply,C,[t,this.that,this.args])}},n.filter=function(t){return arguments.length?(y="function"==typeof t?t:Rw(!!t),n):y},n.extent=function(t){return arguments.length?(m="function"==typeof t?t:Rw([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),n):m},n.scaleExtent=function(t){return arguments.length?(x=+t[0],b=+t[1],n):[x,b]},n.translateExtent=function(t){return arguments.length?(w=+t[0][0],M=+t[1][0],T=+t[0][1],S=+t[1][1],n):[[w,T],[M,S]]},n.duration=function(t){return arguments.length?(N=+t,n):N},n.interpolate=function(t){return arguments.length?(k=t,n):k},n.on=function(){var t=C.on.apply(C,arguments);return t===C?n:t},n};t.version="4.8.0",t.bisect=Ds,t.bisectRight=Ds,t.bisectLeft=Os,t.ascending=Rs,t.bisector=qs,t.cross=Is,t.descending=Ys,t.deviation=Hs,t.extent=Xs,t.histogram=rf,t.thresholdFreedmanDiaconis=uf,t.thresholdScott=af,t.thresholdSturges=ef,t.max=cf,t.mean=sf,t.median=ff,t.merge=lf,t.min=hf,t.pairs=Fs,t.permute=pf,t.quantile=of,t.range=Js,t.scan=df,t.shuffle=vf,t.sum=_f,t.ticks=nf,t.tickIncrement=r,t.tickStep=i,t.transpose=gf,t.variance=js,t.zip=yf,t.axisTop=l,t.axisRight=h,t.axisBottom=p,t.axisLeft=d,t.brush=yd,t.brushX=Ce,t.brushY=ze,t.brushSelection=Ae,t.chord=Sd,t.ribbon=zd,t.nest=Pd,t.set=We,t.map=Be,t.keys=Rd,t.values=qd,t.entries=Ud,t.color=St,t.rgb=At,t.hsl=Lt,t.lab=Dt,t.hcl=Ht,t.cubehelix=$t,t.dispatch=v,t.drag=Al,t.dragDisable=kl,t.dragEnable=yt,t.dsvFormat=Dd,t.csvParse=Fd,t.csvParseRows=Id,t.csvFormat=Yd,t.csvFormatRows=Bd,t.tsvParse=Hd,t.tsvParseRows=Xd,t.tsvFormat=Vd,t.tsvFormatRows=$d,t.easeLinear=re,t.easeQuad=ue,t.easeQuadIn=ie,t.easeQuadOut=oe,t.easeQuadInOut=ue,t.easeCubic=se,t.easeCubicIn=ae,t.easeCubicOut=ce,t.easeCubicInOut=se,t.easePoly=Lp,t.easePolyIn=zp,t.easePolyOut=Pp,t.easePolyInOut=Lp,t.easeSin=he,t.easeSinIn=fe,t.easeSinOut=le,t.easeSinInOut=he,t.easeExp=ve,t.easeExpIn=pe,t.easeExpOut=de,t.easeExpInOut=ve,t.easeCircle=ye,t.easeCircleIn=_e,t.easeCircleOut=ge,t.easeCircleInOut=ye,t.easeBounce=xe,t.easeBounceIn=me,t.easeBounceOut=xe,t.easeBounceInOut=be,t.easeBack=Wp,t.easeBackIn=Vp,t.easeBackOut=$p,t.easeBackInOut=Wp,t.easeElastic=Jp,t.easeElasticIn=Gp,t.easeElasticOut=Jp,t.easeElasticInOut=Qp,t.forceCenter=Wd,t.forceCollide=hv,t.forceLink=pv,t.forceManyBody=gv,t.forceSimulation=_v,t.forceX=yv,t.forceY=mv,t.formatDefaultLocale=dr,t.formatLocale=Pv,t.formatSpecifier=hr,t.precisionFixed=Lv,t.precisionPrefix=Rv,t.precisionRound=qv,t.geoArea=I_,t.geoBounds=j_,t.geoCentroid=X_,t.geoCircle=ug,t.geoClipExtent=pg,t.geoContains=Tg,t.geoDistance=bg,t.geoGraticule=Mi,t.geoGraticule10=Ti,t.geoInterpolate=Sg,t.geoLength=yg,t.geoPath=Qg,t.geoAlbers=cy,t.geoAlbersUsa=sy,t.geoAzimuthalEqualArea=ly,t.geoAzimuthalEqualAreaRaw=fy,t.geoAzimuthalEquidistant=py,t.geoAzimuthalEquidistantRaw=hy,t.geoConicConformal=vy,t.geoConicConformalRaw=ho,t.geoConicEqualArea=ay,t.geoConicEqualAreaRaw=oo,t.geoConicEquidistant=gy,t.geoConicEquidistantRaw=vo,t.geoEquirectangular=_y,t.geoEquirectangularRaw=po,t.geoGnomonic=yy,t.geoGnomonicRaw=_o,t.geoIdentity=my,t.geoProjection=no,t.geoProjectionMutator=eo,t.geoMercator=dy,t.geoMercatorRaw=so,t.geoOrthographic=xy,t.geoOrthographicRaw=yo,t.geoStereographic=by,t.geoStereographicRaw=mo,t.geoTransverseMercator=wy,t.geoTransverseMercatorRaw=xo,t.geoRotation=og,t.geoStream=U_,t.geoTransform=ey,t.cluster=My,t.hierarchy=Co,t.pack=Fy,t.packSiblings=Dy,t.packEnclose=Uy,t.partition=By,t.stratify=Vy,t.tree=$y,t.treemap=Jy,t.treemapBinary=Qy,t.treemapDice=Yy,t.treemapSlice=Wy,t.treemapSliceDice=Ky,t.treemapSquarify=Gy,t.treemapResquarify=tm,t.interpolate=Sh,t.interpolateArray=yh,t.interpolateBasis=hh,t.interpolateBasisClosed=ph,t.interpolateDate=mh,t.interpolateNumber=xh,t.interpolateObject=bh,t.interpolateRound=Nh,t.interpolateString=Th,t.interpolateTransformCss=Ch,t.interpolateTransformSvg=zh,t.interpolateZoom=Lh,t.interpolateRgb=vh,t.interpolateRgbBasis=_h,t.interpolateRgbBasisClosed=gh,t.interpolateHsl=Rh,t.interpolateHslLong=qh,t.interpolateLab=hn,t.interpolateHcl=Uh,t.interpolateHclLong=Dh,t.interpolateCubehelix=Oh,t.interpolateCubehelixLong=Fh,t.quantize=Ih,t.path=qe,t.polygonArea=nm,t.polygonCentroid=em;t.polygonHull=im,t.polygonContains=om,t.polygonLength=um,t.quadtree=rr,t.queue=mu,t.randomUniform=sm,t.randomNormal=fm,t.randomLogNormal=lm,t.randomBates=pm,t.randomIrwinHall=hm,t.randomExponential=dm,t.request=vm,t.html=gm,t.json=ym,t.text=mm,t.xml=xm,t.csv=wm,t.tsv=Mm,t.scaleBand=Tu,t.scalePoint=Nu,t.scaleIdentity=Uu,t.scaleLinear=qu,t.scaleLog=ju,t.scaleOrdinal=Mu,t.scaleImplicit=km,t.scalePow=Xu,t.scaleSqrt=Vu,t.scaleQuantile=$u,t.scaleQuantize=Wu,t.scaleThreshold=Zu,t.scaleTime=Zx,t.scaleUtc=Gx,t.schemeCategory10=Qx,t.schemeCategory20b=Kx,t.schemeCategory20c=tb,t.schemeCategory20=nb,t.interpolateCubehelixDefault=eb,t.interpolateRainbow=ub,t.interpolateWarm=rb,t.interpolateCool=ib,t.interpolateViridis=ab,t.interpolateMagma=cb,t.interpolateInferno=sb,t.interpolatePlasma=fb,t.scaleSequential=rc,t.creator=Cf,t.local=w,t.matcher=qf,t.mouse=If,t.namespace=Af,t.namespaces=Ef,t.select=wl,t.selectAll=Ml,t.selection=_t,t.selector=Yf,t.selectorAll=jf,t.touch=Tl,t.touches=Sl,t.window=cl,t.customEvent=A,t.arc=Mb,t.area=Nb,t.line=Sb,t.pie=Ab,t.radialArea=Pb,t.radialLine=zb,t.symbol=Jb,t.symbols=Gb,t.symbolCircle=Lb,t.symbolCross=Rb,t.symbolDiamond=Db,t.symbolSquare=Bb,t.symbolStar=Yb,t.symbolTriangle=Hb,t.symbolWye=Zb,t.curveBasisClosed=tw,t.curveBasisOpen=nw,t.curveBasis=Kb,t.curveBundle=ew,t.curveCardinalClosed=iw,t.curveCardinalOpen=ow,t.curveCardinal=rw,t.curveCatmullRomClosed=aw,t.curveCatmullRomOpen=cw,t.curveCatmullRom=uw,t.curveLinearClosed=sw,t.curveLinear=Tb,t.curveMonotoneX=Ic,t.curveMonotoneY=Yc,t.curveNatural=fw,t.curveStep=lw,t.curveStepAfter=Vc,t.curveStepBefore=Xc,t.stack=vw,t.stackOffsetExpand=_w,t.stackOffsetNone=pw,t.stackOffsetSilhouette=gw,t.stackOffsetWiggle=yw,t.stackOrderAscending=mw,t.stackOrderDescending=xw,t.stackOrderInsideOut=bw,t.stackOrderNone=dw,t.stackOrderReverse=ww,t.timeInterval=Gu,t.timeMillisecond=qm,t.timeMilliseconds=Um,t.utcMillisecond=qm,t.utcMilliseconds=Um,t.timeSecond=Fm,t.timeSeconds=Im,t.utcSecond=Fm,t.utcSeconds=Im,t.timeMinute=Ym,t.timeMinutes=Bm,t.timeHour=jm,t.timeHours=Hm,t.timeDay=Xm,t.timeDays=Vm,t.timeWeek=$m,t.timeWeeks=tx,t.timeSunday=$m,t.timeSundays=tx,t.timeMonday=Wm,t.timeMondays=nx,t.timeTuesday=Zm,t.timeTuesdays=ex,t.timeWednesday=Gm,t.timeWednesdays=rx,t.timeThursday=Jm,t.timeThursdays=ix,t.timeFriday=Qm,t.timeFridays=ox,t.timeSaturday=Km,t.timeSaturdays=ux,t.timeMonth=ax,t.timeMonths=cx,t.timeYear=sx,t.timeYears=fx,t.utcMinute=lx,t.utcMinutes=hx,t.utcHour=px,t.utcHours=dx,t.utcDay=vx,t.utcDays=_x,t.utcWeek=gx,t.utcWeeks=Tx,t.utcSunday=gx,t.utcSundays=Tx,t.utcMonday=yx,t.utcMondays=Sx,t.utcTuesday=mx,t.utcTuesdays=Nx,t.utcWednesday=xx,t.utcWednesdays=kx,t.utcThursday=bx,t.utcThursdays=Ex,t.utcFriday=wx,t.utcFridays=Ax,t.utcSaturday=Mx,t.utcSaturdays=Cx,t.utcMonth=zx,t.utcMonths=Px,t.utcYear=Lx,t.utcYears=qx,t.timeFormatDefaultLocale=Ga,t.timeFormatLocale=ea,t.isoFormat=Ix,t.isoParse=Yx,t.now=vn,t.timer=yn,t.timerFlush=mn,t.timeout=Gh,t.interval=Jh,t.transition=ne,t.active=ed,t.interrupt=cp,t.voronoi=Lw,t.zoom=Dw,t.zoomTransform=As,t.zoomIdentity=qw,Object.defineProperty(t,"__esModule",{value:!0})}); + +function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.dTree=t()}(this,function(){"use strict";var e=function(){function e(t,n,r){_classCallCheck(this,e),e.DEBUG_LEVEL=r.debug?1:0,this.root=t,this.siblings=n,this.opts=r,this.allNodes=this._flatten(this.root);var a=_.filter(this.allNodes,function(e){return!e.hidden});this.nodeSize=r.callbacks.nodeSize(a,r.nodeWidth,r.callbacks.textRenderer)}return _createClass(e,[{key:"create",value:function(){var e=this.opts,t=(this.allNodes,this.nodeSize),n=e.width+e.margin.left+e.margin.right,r=e.height+e.margin.top+e.margin.bottom,a=d3.zoom().scaleExtent([.1,10]).on("zoom",function(){i.attr("transform",d3.event.transform.translate(n/2,0))}),i=this.svg=d3.select(e.target).append("svg").attr("width",n).attr("height",r).call(a).append("g").attr("transform","translate("+n/2+",0)");this.tree=d3.tree().nodeSize([2*t[0],2.5*t[1]]),this.tree.separation(function(e,t){return e.data.hidden||t.data.hidden?.3:.6}),this._update(this.root)}},{key:"_update",value:function(e){var t=this.opts,n=(this.allNodes,this.nodeSize),r=this.tree(e),a=r.links();this.svg.selectAll(".link").data(a).enter().filter(function(e){return!e.target.data.noParent}).append("path").attr("class",t.styles.linage).attr("d",this._elbow);var i=this.svg.selectAll(".node").data(r.descendants()).enter();this._linkSiblings(),this.svg.selectAll(".sibling").data(this.siblings).enter().append("path").attr("class",t.styles.marriage).attr("d",_.bind(this._siblingLine,this)),i.append("foreignObject").filter(function(e){return!e.data.hidden}).attr("x",function(e){return e.x-e.cWidth/2+"px"}).attr("y",function(e){return e.y-e.cHeight/2+"px"}).attr("width",function(e){return e.cWidth+"px"}).attr("height",function(e){return e.cHeight+"px"}).attr("id",function(e){return e.id}).html(function(e){return t.callbacks.nodeRenderer(e.data.name,e.x,e.y,n[0],n[1],e.data.extra,e.data.id,e.data["class"],e.data.textClass,t.callbacks.textRenderer)}).on("click",function(e){e.data.hidden||t.callbacks.nodeClick(e.data.name,e.data.extra,e.data.id)})}},{key:"_flatten",value:function(e){function t(e){e.children&&e.children.forEach(t),e.id||(e.id=++r),n.push(e)}var n=[],r=0;return t(e),n}},{key:"_elbow",value:function(e,t){if(e.target.data.noParent)return"M0,0L0,0";var n=e.target.y+.5*(e.source.y-e.target.y),r=[{x:e.target.x,y:e.target.y},{x:e.target.x,y:n},{x:e.source.x,y:e.source.y}],a=d3.line().curve(d3.curveStepAfter).x(function(e){return e.x}).y(function(e){return e.y});return a(r)}},{key:"_linkSiblings",value:function(){var e=this.allNodes;_.forEach(this.siblings,function(t){var n=e.filter(function(e){return t.source.id==e.data.id}),r=e.filter(function(e){return t.target.id==e.data.id});t.source.x=n[0].x,t.source.y=n[0].y,t.target.x=r[0].x,t.target.y=r[0].y})}},{key:"_siblingLine",value:function(e,t){var n=e.target.y+.5*(e.source.y-e.target.y),r=this.nodeSize[0],a=this.nodeSize[1];e.number>0&&(n-=8*a/10);var i=[{x:e.source.x,y:e.source.y},{x:e.source.x+6*r/10,y:e.source.y},{x:e.source.x+6*r/10,y:n},{x:e.target.x-6*r/10,y:n},{x:e.target.x-6*r/10,y:e.target.y},{x:e.target.x,y:e.target.y}],s=d3.line().curve(d3.curveStepAfter).x(function(e){return e.x}).y(function(e){return e.y});return s(i)}}],[{key:"_nodeSize",value:function(e,t,n){var r=0,a=document.createElement("svg");return document.body.appendChild(a),_.map(e,function(e){var i=document.createElement("div");i.setAttribute("class",e.data["class"]),i.style.visibility="hidden",i.style.maxWidth=t+"px";var s=n(e.data.name,e.data.extra,e.data.textClass);i.innerHTML=s,a.appendChild(i);var o=16;a.removeChild(i),r=Math.max(r,o),e.cHeight=o,e.cWidth=t}),document.body.removeChild(a),[t,r]}},{key:"_nodeRenderer",value:function(e,t,n,r,a,i,s,o,d,c){var l="";return l+="<div ",l+='style="height:100%;width:100%;" ',l+='class="'+o+'" ',l+='id="node'+s+'">\n',l+=c(e,i,d),l+="</div>"}},{key:"_textRenderer",value:function(e,t,n){var r="";return r+="<p ",r+='align="center" ',r+='class="'+n+'">\n',r+=e,r+="</p>\n"}},{key:"_debug",value:function(t){e.DEBUG_LEVEL>0&&console.log(t)}}]),e}(),t={VERSION:"2.0.1",init:function(t){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],r=_.defaultsDeep(n||{},{target:"#graph",debug:!1,width:600,height:600,callbacks:{nodeClick:function(e,t,n){},nodeRenderer:function(t,n,r,a,i,s,o,d,c,l){return e._nodeRenderer(t,n,r,a,i,s,o,d,c,l)},nodeSize:function(t,n,r){return e._nodeSize(t,n,r)},nodeSorter:function(e,t,n,r){return 0},textRenderer:function(t,n,r){return e._textRenderer(t,n,r)}},margin:{top:0,right:0,bottom:0,left:0},nodeWidth:100,styles:{node:"node",linage:"linage",marriage:"marriage",text:"nodeText"}}),t=this._preprocess(t,r),a=new e(t.root,t.siblings,r);a.create()},_preprocess:function(e,n){var r=[],a=0,i={name:"",id:a++,hidden:!0,children:[]},s=function o(e,s){var d={name:e.name,id:a++,hidden:!1,children:[],extra:e.extra,textClass:e.textClass?e.textClass:n.styles.text,"class":e["class"]?e["class"]:n.styles.node};s==i&&(d.noParent=!0);for(var c=0;c<e.depthOffset;c++){var l={name:"",id:a++,hidden:!0,children:[],noParent:d.noParent};s.children.push(l),s=l}t._sortPersons(e.children,n),_.forEach(e.children,function(e){o(e,d)}),s.children.push(d),t._sortMarriages(e.marriages,n),_.forEach(e.marriages,function(e,i){var c={name:"",id:a++,hidden:!0,noParent:!0,children:[],extra:e.extra},l=e.spouse,u={name:l.name,id:a++,hidden:!1,noParent:!0,children:[],textClass:l.textClass?l.textClass:n.styles.text,"class":l["class"]?l["class"]:n.styles.node,extra:l.extra};s.children.push(c,u),t._sortPersons(e.children,n),_.forEach(e.children,function(e){o(e,c)}),r.push({source:{id:d.id},target:{id:u.id},number:i})})};return _.forEach(e,function(e){s(e,i)}),{root:d3.hierarchy(i),siblings:r}},_sortPersons:function(e,t){return void 0!=e&&e.sort(function(e,n){return t.callbacks.nodeSorter(e.name,e.extra,n.name,n.extra)}),e},_sortMarriages:function(e,t){return void 0!=e&&Array.isArray(e)&&e.sort(function(e,n){var r=e.spouse,a=n.spouse;return t.callbacks.nodeSorter(r.name,r.extra,a.name,a.extra)}),e}};return t}); +}).call(window,window) + +/*:: FamilyTreeJS [script]*/ + +var lastActiveSlave, lastSlaves, lastPC; + +window.updateFamilyTree = function(activeSlave = lastActiveSlave, slaves = lastSlaves, PC = lastPC) { + lastActiveSlave = activeSlave; + lastSlaves = slaves; + lastPC = PC; + var treeDepth = 0; + var numTreeNodes = 0; + + var graphElement = document.getElementById("graph"); + if(!graphElement) + return; + graphElement.innerHTML = ""; + + function getSlave(id, expectedGenes) { + if(id == -1) { + return {"slaveName":"YOU", "ID":id, "physicalAge":PC.physicalAge, "genes":PC.genes, father:PC.father, mother:PC.mother}; + } + if(id == 0) { + return {"slaveName":"-", "ID":id, "genes":expectedGenes}; + } + if(id == activeSlave.ID) { + return activeSlave; + } + for(var i = 0; i < slaves.length; ++i) { + if(slaves[i].ID == id) + return slaves[i]; + } + return {"slaveName":"-", "ID":id, "genes":expectedGenes}; + } + + function slaveInfo(slave, activeSlaveId, recursionProtectSlaveId = {}) { + numTreeNodes = 0; + treeDepth = 0; + if(recursionProtectSlaveId[slave.ID]) { + console.log("Recursion protection"); + return slaveInfo_(slave, activeSlaveId); + } + recursionProtectSlaveId[slave.ID] = true; + + if(typeof slave.father == "undefined" || typeof slave.mother == "undefined") + return slaveInfo_(slave, activeSlaveId); + + if(slave.father == -1 || slave.mother == -1) { + return slaveInfo(getSlave(-1), activeSlaveId, recursionProtectSlaveId); + } + if(slave.father != 0) { + return slaveInfo(getSlave(slave.father, "unknownXY"), activeSlaveId, recursionProtectSlaveId); + } + + if(slave.mother != 0) { + return slaveInfo(getSlave(slave.mother, "unknownXX"), activeSlaveId, recursionProtectSlaveId); + } + return slaveInfo_(slave, activeSlaveId); + } + function slaveInfo_(slave, activeSlaveId, slavesAdded={}, depth = 1) { + numTreeNodes += 1; + treeDepth = Math.max(treeDepth, depth); + var shouldAddChildren = false; + if(!slavesAdded[slave.ID]) { + shouldAddChildren = true; + slavesAdded[slave.ID] = true; + } + var data = { + "name": slave.slaveName + (slave.physicalAge?(" (" + slave.physicalAge + ")"):""), + "class" : slave.genes, + "textClass": (activeSlaveId == slave.ID)?"emphasis":"", + "marriages": [], + }; + + var spouseToChild = {}; + + function maybeAddSpouseToChild(child) { + if(child.ID == slave.ID) + return; + if (child.father == slave.ID) { + if(!spouseToChild[child.mother]) { + spouseToChild[child.mother] = [] + } + spouseToChild[child.mother].push(child); + } else if (child.mother == slave.ID) { + if(!spouseToChild[child.father]) { + spouseToChild[child.father] = [] + } + spouseToChild[child.father].push(child); + } + } + + if(activeSlave.ID != PC.ID) + maybeAddSpouseToChild(activeSlave); + maybeAddSpouseToChild(getSlave(-1)); + + for(var i = 0; i < slaves.length; ++i) { + var child = slaves[i]; + if(child.ID != activeSlave.ID) + maybeAddSpouseToChild(child); + } + + for(var key in spouseToChild) { + if(spouseToChild.hasOwnProperty(key)) { + var children = shouldAddChildren?spouseToChild[key]:[]; + var spouse = getSlave(key, (slaves.genes=="XX")?"unknownXY":(slaves.genes=="XY")?"unknownXX":"unknown"); + var spouseName; + if (spouse.ID != slave.ID){ + spouseName = spouse.slaveName + (spouse.physicalAge?(" (" + spouse.physicalAge + ")"):"") + } else { + spouseName = (spouse.ID==-1)?"(yourself)":"(themselves)"; + } + var marriage = { + "spouse": {"name": spouseName, "class": spouse.genes}, + "children": children.map(function(x) { return slaveInfo_(x, activeSlaveId, slavesAdded, depth+1)} ), + }; + data.marriages.push(marriage); + } + } + return data; + } + + if(activeSlave == PC || activeSlave == null) + activeSlave = getSlave(-1) + const treeData = [slaveInfo(activeSlave, activeSlave.ID)]; + console.log("Family tree is", treeData, 'and has:', numTreeNodes); + + var parentWidth = document.getElementById('editFamily').offsetWidth; + + console.log(parentWidth, document.getElementById('passages').offsetWidth); + if(!parentWidth) + parentWidth = document.body.offsetWidth - 483; + + console.log(parentWidth, Math.min(200 + 40*numTreeNodes,parentWidth-200) + 200); + + dTree.init(treeData, { + target: "#graph", + debug: true, + height: 50 + 50*treeDepth, /* very rough heuristics */ + width: Math.min(200 + 40*numTreeNodes, + parentWidth-200) + 200, + callbacks: { + nodeClick: function(name, extra) { + } + } + }); + +}; + +window.getHeroSlave = function(heroSlave, baseHeroSlave) { + var newSlave = clone(baseHeroSlave); + for (var attrname in heroSlave) { + newSlave[attrname] = heroSlave[attrname]; + }; + return newSlave; +} \ No newline at end of file diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index 27b60a9a61aa3752c303fc30851e8e491b1cb1a5..d852bbc6d463039daa6ff9298dd6a30e15a79aa5 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -347,7 +347,7 @@ slave's assignment "get milked" "please you" "stay confined" -"guard you" - obsolete? +"guard you" "recruit girls" - obsolete? "be your Head Girl" "work as a servant" diff --git a/src/SecExp/SecExpBackwardCompatibility.tw b/src/SecExp/SecExpBackwardCompatibility.tw index efa8b055192a146f732648dc86b3fadd34f2843c..75d6c0642e84100fac6f1de6d0bd967e24c2e560 100644 --- a/src/SecExp/SecExpBackwardCompatibility.tw +++ b/src/SecExp/SecExpBackwardCompatibility.tw @@ -182,6 +182,18 @@ <<if ndef $weaponsLaw || $wasToggledBefore == 1>> <<set $weaponsLaw = 3>> <</if>> +<<if ndef $soldierWages>> +<<set $soldierWages = 1>> +<</if>> +<<if ndef $militiaSoldierPrivilege>> +<<set $militiaSoldierPrivilege = 0>> +<</if>> +<<if ndef $slaveSoldierPrivilege>> +<<set $slaveSoldierPrivilege = 0>> +<</if>> +<<if ndef $mercSoldierPrivilege>> +<<set $mercSoldierPrivilege = 0>> +<</if>> /* buildings */ <<if ndef $secHQ>> @@ -194,7 +206,11 @@ <<set $secBarracksUpgrades ={ size: 0, luxury: 0, - training: 0}>> + training: 0, + loyaltyMod:0 }>> +<</if>> +<<if ndef $secBarracksUpgrades.loyaltyMod>> +<<set $secBarracksUpgrades.loyaltyMod = 0>> <</if>> <<if ndef $secHelots>> <<set $secHelots = 0>> @@ -282,7 +298,7 @@ <<set $fort = { reactor: 0, waterway: 0, - assistant:0}>> + assistant: 0}>> <</if>> <<if ndef $sentUnitCooldown>> <<set $sentUnitCooldown = 0>> @@ -296,6 +312,21 @@ <<if ndef $brainImplantProject>> <<set $brainImplantProject = 0>> <</if>> +<<if ndef $weapHelots>> +<<set $weapHelots = 0>> +<</if>> +<<if ndef $weapProductivity>> +<<set $weapProductivity = 1>> +<</if>> +<<if ndef $weapLab>> +<<set $weapLab = 1>> +<</if>> +<<if ndef $baseUpgradeTime>> +<<set $baseUpgradeTime = 10>> +<</if>> +<<if ndef $weapUpgrades>> +<<set $weapUpgrades = []>> +<</if>. /* events */ <<if ndef $smilingManProgress>> @@ -387,8 +418,39 @@ reactorTime: 0, assistantTime: 0, waterwayTime: 0 }>> +<<else>> + <<if ndef $garrison.penthouse>> + <<set $garrison.penthouse = 0>> + <</if>> + <<if ndef $garrison.reactor>> + <<set $garrison.reactor = 0>> + <</if>> + <<if ndef $garrison.assistant>> + <<set $garrison.assistant = 0>> + <</if>> + <<if ndef $garrison.waterway>> + <<set $garrison.waterway = 0>> + <</if>> + <<if ndef $garrison.reactorTime>> + <<set $garrison.reactorTime = 0>> + <</if>> + <<if ndef $garrison.assistantTime>> + <<set $garrison.assistantTime = 0>> + <</if>> + <<if ndef $garrison.waterwayTime>> + <<set $garrison.waterwayTime = 0>> + <</if>> +<</if>> +<<if ndef $rebellionsCount>> +<<set $rebellionsCount = 0>> +<</if>> +<<if ndef $PCrebWon>> +<<set $PCrebWon = 0>> <</if>> - +<<if ndef $PCrebLoss>> +<<set $PCrebLoss = 0>> +<</if>> + /* armed forces stats */ <<if ndef $targetUnit>> <<set $targetUnit = 0>> diff --git a/src/SecExp/attackReport.tw b/src/SecExp/attackReport.tw index 3ae15cf285245ebf58e809ede84d0603cd36489c..be604a803967596eed1f5f401b1543d4e07f01e7 100644 --- a/src/SecExp/attackReport.tw +++ b/src/SecExp/attackReport.tw @@ -11,6 +11,7 @@ <</if>> <<set $totalKills += $enemyLosses>> <<set $losses = Math.trunc($losses)>> +<<set _loot = 0>> /* result */ <<if $majorBattle == 0>> @@ -417,20 +418,26 @@ and some of their equipment, which once sold produced <<if $attackEquip == 0>> @@.yellowgreen;a small amount of cash.@@ - <<set $cash += 1000 * _majorBattleMod>> + <<set _loot += 1000 * _majorBattleMod>> <<elseif $attackEquip == 1>> @@.yellowgreen;a moderate amount of cash.@@ - <<set $cash += 5000 * _majorBattleMod>> + <<set _loot += 5000 * _majorBattleMod>> <<elseif $attackEquip == 2>> @@.yellowgreen;a good amount of cash.@@ - <<set $cash += 10000 * _majorBattleMod>> + <<set _loot += 10000 * _majorBattleMod>> <<elseif $attackEquip == 3>> @@.yellowgreen;a great amount of cash.@@ - <<set $cash += 15000 * _majorBattleMod>> + <<set _loot += 15000 * _majorBattleMod>> <<elseif $attackEquip == 4>> @@.yellowgreen;wealth worthy of the mightiest warlord.@@ - <<set $cash += 20000 * _majorBattleMod>> + <<set _loot += 20000 * _majorBattleMod>> <</if>> + <<if $mercSoldierPrivilege == 1 && $deployingMercs == 1>> + Part of the loot is distributed to your mercenaries. + <<set _captives = Math.trunc(_captives * 0.6)>> + <<set _loot = Math.trunc(_loot * 0.6)>> + <</if>> + <<set $cash += _loot>> <br> Damage to the infrastructure was @@.yellow;virtually non-existent@@, costing only pocket cash to bring the structure back to normal. The inhabitants as well reported little to no injuries, because of this the prosperity of the arcology did not suffer. <<set $cash -= 1000 * _majorBattleMod>> @@ -499,20 +506,25 @@ which once sold produced <<if $attackEquip == 0>> @@.yellowgreen;a bit of cash.@@ - <<set $cash += 500 * _majorBattleMod>> + <<set _loot += 500 * _majorBattleMod>> <<elseif $attackEquip == 1>> @@.yellowgreen;a small amount of cash.@@ - <<set $cash += 2500 * _majorBattleMod>> + <<set _loot += 2500 * _majorBattleMod>> <<elseif $attackEquip == 2>> @@.yellowgreen;a moderate amount of cash.@@ - <<set $cash += 5000 * _majorBattleMod>> + <<set _loot += 5000 * _majorBattleMod>> <<elseif $attackEquip == 3>> @@.yellowgreen;a good amount of cash.@@ - <<set $cash += 7500 * _majorBattleMod>> + <<set _loot += 7500 * _majorBattleMod>> <<elseif $attackEquip == 4>> @@.yellowgreen;a great amount of cash.@@ - <<set $cash += 10000 * _majorBattleMod>> + <<set _loot += 10000 * _majorBattleMod>> + <</if>> + <<if $mercSoldierPrivilege == 1 && $deployingMercs == 1>> + Part of the loot is distributed to your mercenaries. + <<set _loot = Math.trunc(_loot * 0.6)>> <</if>> + <<set $cash += _loot>> <br> Damage to the city was @@.red;limited@@, it won't take much to rebuild. Very few citizens or slaves were involved in the fight and even fewer met their end, safeguarding the prosperity of the arcology. <<set $cash -= 2000 * _majorBattleMod>> diff --git a/src/SecExp/edicts.tw b/src/SecExp/edicts.tw index 734211ec42b997c09a6fbf65149ee4f26918a779..d1a28303988647bb5e7a11f34fb94206e3b4c94f 100644 --- a/src/SecExp/edicts.tw +++ b/src/SecExp/edicts.tw @@ -80,6 +80,16 @@ <<if $hasFoughtOnce == 1>> <br><br>__Defense Force:__ + <<if $soldierWages == 0>> + <br>''Low wages for soldiers:'' wages for soldiers are set to a low amount compared to market standards. + [[Repeal|edicts][$soldierWages = 1]] + <<elseif $soldierWages == 1>> + <br>''Average wages for soldiers:'' wages for soldiers are set to to the market standards. + <<else>> + <br>''High wages for soldiers:'' wages for soldiers are set to a high amount compared to market standards. + [[Repeal|edicts][$soldierWages = 1]] + <</if>> + <<if $slavesOfficers == 1>> <br>''Slave Officers:'' your trusted slaves are allowed to lead the defense forces of the arcology. [[Repeal|edicts][$slavesOfficers = 0, $edictsAuthUpkeep -= 10]] @@ -127,6 +137,21 @@ <</if>> <</if>> + <<if $militiaSoldierPrivilege == 1>> + <br>''Special militia privileges:'' citizens joining the militia are exempt from rent payment. + [[Repeal|edicts][$militiaSoldierPrivilege = 0]] + <</if>> + + <<if $slaveSoldierPrivilege == 1>> + <br>''Special slaves privileges:'' Slaves into the army are allowed to have material possessions. + [[Repeal|edicts][$slaveSoldierPrivilege = 0, $edictsAuthUpkeep -= 10]] + <</if>> + + <<if $mercSoldierPrivilege == 1>> + <br>''Special mercenary privileges:'' Mercenaries under contract can claim part of the loot gained from battles. + [[Repeal|edicts][$mercSoldierPrivilege = 0]] + <</if>> + <<if $martialSchool == 1>> <br>''@@.lime;Slave martial schools:@@'' specialized schools are training slaves in martial arts and bodyguarding. [[Repeal|edicts][$martialSchool = 0, $edictsUpkeep -= 1000, $slaveBaseMorale -= 5]] @@ -350,6 +375,40 @@ <<if $hasFoughtOnce == 1 || $mercenaries > 0>> <br><br>__Defense Force__: + + <<if $soldierWages == 0>> + <br>''Average wages for soldiers:'' will set the wages paid to the soldiers of the arcology to an average amount. + <<if $authority >= 1000>> + [[Implement|edicts][$soldierWages += 1, $cash -=5000, $authority -= 1000]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will raise all units upkeep and loyalty to average levels.// + <<elseif $soldierWages == 1>> + <br>''Low wages for soldiers:'' will set the wages paid to the soldiers of the arcology to a low amount. + <<if $authority >= 1000>> + [[Implement|edicts][$soldierWages -= 1, $cash -=5000, $authority -= 1000]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will lower all units upkeep and loyalty to low levels.// + <br>''Average wages for soldiers:'' will set the wages paid to the soldiers of the arcology to a high amount. + <<if $authority >= 1000>> + [[Implement|edicts][$soldierWages += 1, $cash -=5000, $authority -= 1000]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will raise all units upkeep and loyalty to high levels.// + <<else>> + <br>''Average wages for soldiers:'' will set the wages paid to the soldiers of the arcology to an average amount. + <<if $authority >= 1000>> + [[Implement|edicts][$soldierWages -= 1, $cash -=5000, $authority -= 1000]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will lower all units upkeep and loyalty to average levels.// + <</if>> + <<if $slavesOfficers == 0>> <br>''Slave Officers:'' allow your trusted slaves to lead the defense forces of the arcology. <<if $authority >= 1000>> @@ -467,6 +526,36 @@ <</if>> <</if>> + <<if $militiaSoldierPrivilege == 0>> + <br>''Special militia privileges'' will give the privilege to citizens joining the militia of avoiding paying rent. + <<if $authority >= 1000>> + [[Implement|edicts][$militiaSoldierPrivilege = 1, $cash -=5000, $authority -= 1000]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will increase the loyalty of militia units, but will decrease rents.// + <</if>> + + <<if $slaveSoldierPrivilege == 0>> + <br>''Special slaves privileges'' will give the privilege to slaves drafted into the army of being able to have material possessions. + <<if $authority >= 1000>> + [[Implement|edicts][$slaveSoldierPrivilege = 1, $cash -=5000, $authority -= 1000, $edictsAuthUpkeep += 10]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will increase the loyalty of slave units, but will cost authority each week.// + <</if>> + + <<if $mercSoldierPrivilege == 0>> + <br>''Special mercenary privileges'' will give th privilege to mercenaries under contract to claim part of the loot gained from battles. + <<if $authority >= 1000>> + [[Implement|edicts][$mercSoldierPrivilege = 1, $cash -=5000, $authority -= 1000]] + <<else>> + <br>//Not enough Authority.// + <</if>> + <br> //Will increase the loyalty of mercenary units, but will cash and menial slaves gained from battles.// + <</if>> + <<if $arcologies[0].FSPhysicalIdealist >= 40>> <<if $martialSchool == 0>> <br>''@@.lime;Slave martial schools:@@'' specialized schools will be set up to train slaves in martial arts and bodyguarding. diff --git a/src/SecExp/riotControlCenter.tw b/src/SecExp/riotControlCenter.tw index 0de5bc3e7e00e5a5e7bcd1574f0cd797e50a3023..f666b6341426be46808afdf41a41cef56508b65d 100644 --- a/src/SecExp/riotControlCenter.tw +++ b/src/SecExp/riotControlCenter.tw @@ -1,5 +1,7 @@ :: riotControlCenter [nobr] +<<set $nextButton = "Back to Arcology Management", $nextLink = "Manage Arcology", $returnTo = "Manage Arcology">> + Riot Control Center <hr> @@ -123,8 +125,7 @@ The riot control center opens its guarded doors to you. The great chanber inside <<set $riotUpkeep += $10000>> <</link>> <br>//Will take weeks of work and will cost 10000 each, but once finished rebellions will progress a lot slower.// - <<else>> - <if $brainImplantProject < 5>> + <<elseif $brainImplantProject < 5>> <<link "Invest more resources in the brain implant project">> <<set $brainImplantProject += 1>> <<set $cash -= 50000 * $upgradeMultiplierArcology * $brainImplantProject>> diff --git a/src/SecExp/secBarracks.tw b/src/SecExp/secBarracks.tw index b8104a8c7ab832209498facfb5b8715795ab21c1..6786c2c81573e7073f731e91eda1f3e30aa889e1 100644 --- a/src/SecExp/secBarracks.tw +++ b/src/SecExp/secBarracks.tw @@ -32,6 +32,13 @@ While for many a sore sight in a free city, the barracks stand proud before you. <<else>> The training facility has been filled with specialized equipment and skilled trainers. <</if>> +<<if $secBarracksUpgrades.loyaltyMod == 0>> + The barracks lack an indocrination facility. +<<elseif $secBarracksUpgrades.loyaltyMod == 1>> + The barracks have been fitted with an indoctrination facility. +<<else>> + The barracks have been fitted with an advanced indoctrination facility. +<</if>> <br> <br> <<if $secBarracksUpgrades.size < 2>> @@ -102,6 +109,25 @@ While for many a sore sight in a free city, the barracks stand proud before you. <<else>> You have improved the training facility to the limit. <</if>> +<<if $secBarracksUpgrades.loyaltyMod == 0>> + <<link "Add an indoctrination facility to the barracks">> + <<set $secBarracksUpgrades.loyaltyMod += 1>> + <<set $cash -= 10000>> + <<set $secBarracksUpkeep += $upgradeUpkeep>> + <<goto "secBarracks">> + <</link>> + <br>//Costs ¤10000 and will raise minimum loyalty level of units by 1.// +<<elseif $secBarracksUpgrades.loyaltyMod == 1>> + <<link "Improve the indoctrination facility with advanced equipment and skilled personnel">> + <<set $secBarracksUpgrades.loyaltyMod += 1>> + <<set $cash -= 20000>> + <<set $secBarracksUpkeep += $upgradeUpkeep>> + <<goto "secBarracks">> + <</link>> + <br>//Costs ¤20000 and will raise minimum loyalty level of units by another 1 for a total of 2.// +<<else>> + You have improved the indocrination facility to the limit. +<</if>> <hr> __Units__ @@ -184,9 +210,11 @@ You are free to organize your menial slaves into fighting units. Currently you h maxTroops: $maxTroops, equip: 0, training: 0, - loyalty: 7, + loyalty: 3, + minLoyalty: 0, medics: 0, SF: 0, + commissars: 0, battlesFought: 0}>> <<set $slaveUnits.push(_newUnit)>> <<set $helots -= 30>> @@ -201,9 +229,11 @@ You are free to organize your menial slaves into fighting units. Currently you h maxTroops: $maxTroops, equip: 0, training: 0, - loyalty: 0, + loyalty: 3, + minLoyalty: 0, medics: 0, SF: 0, + commissars: 0, battlesFought: 0}>> <<set $slaveUnits.push(_newUnit)>> <<set $slavesEmployedManpower += _newUnit.troops>> @@ -341,9 +371,11 @@ __Militia__ maxTroops: $maxTroops, equip: 0, training: 0, - loyalty: 7, + loyalty: 3, + minLoyalty: 0, medics: 0, SF: 0, + commissars: 0, battlesFought: 0}>> <<set $militiaUnits.push(_newUnit)>> <<set $militiaFreeManpower -= 30>> @@ -358,9 +390,11 @@ __Militia__ maxTroops: $maxTroops, equip: 0, training: 0, - loyalty: 0, + loyalty: 3, + minLoyalty: 0, medics: 0, SF: 0, + commissars: 0, battlesFought: 0}>> <<set $militiaUnits.push(_newUnit)>> <<set $militiaEmployedManpower += _newUnit.troops>> @@ -389,7 +423,7 @@ __Militia__ <<set _elimUnit = $militiaUnits[_i]>> <<set _newMilitiaUnits = []>> <<for _y = 0; _y < _sL; _y++>> - <<if $slaveUnits[_y] != _elimUnit>> + <<if $militiaUnits[_y] != _elimUnit>> <<set _newMilitiaUnits.push($militiaUnits[_y])>> <</if>> <</for>> @@ -499,9 +533,11 @@ __Mercenaries__ maxTroops: $maxTroops, equip: 0, training: 0, - loyalty: 7, + loyalty: 3, + minLoyalty: 0, medics: 0, SF: 0, + commissars: 0, battlesFought: 0}>> <<set $mercUnits.push(_newUnit)>> <<set $mercFreeManpower -= 30>> @@ -516,9 +552,11 @@ __Mercenaries__ maxTroops: $maxTroops, equip: 0, training: 0, - loyalty: 0, + loyalty: 3, + minLoyalty: 0, medics: 0, SF: 0, + commissars: 0, battlesFought: 0}>> <<set $mercUnits.push(_newUnit)>> <<set $mercEmployedManpower += _newUnit.troops>> diff --git a/src/SecExp/secInit.tw b/src/SecExp/secInit.tw index 6148026ff702016e4b1749d6bec6fb9cf1bd5eae..96174c8afaa2da3d45dc2ced2de469e143484fdb 100644 --- a/src/SecExp/secInit.tw +++ b/src/SecExp/secInit.tw @@ -64,6 +64,10 @@ <<set $ronin = 0>> <<set $sunTzu = 0>> <<set $weaponsLaw = 3>> +<<set $soldierWages = 1>> +<<set $militiaSoldierPrivilege = 0>> +<<set $slaveSoldierPrivilege = 0>> +<<set $mercSoldierPrivilege = 0>> /* buildings */ <<set $upgradeUpkeep = 40>> @@ -74,7 +78,8 @@ <<set $secBarracksUpgrades ={ size: 0, luxury: 0, - training: 0}>> + training: 0, + loyaltyMod: 0}>> <<set $secHelots = 0>> <<set $reqHelots = 20>> <<set $secUpgrades = { @@ -120,6 +125,11 @@ <<set $advancedRiotEquip = 0>> <<set $brainImplant = -1>> <<set $brainImplantProject = 0>> +<<set $weapHelots = 0>> +<<set $weapProductivity = 1>> +<<set $weapLab = 1>> +<<set $baseUpgradeTime = 10>> +<<set $weapUpgrades = []>> /* events */ <<set $smilingManProgress = 0>> @@ -294,5 +304,4 @@ /* SFanon additons */ <<set $SFSupportLevel = 0>> -<<set $SFSupportUpkeep = 0>> -<<set $secUpgrades.coldstorage = 0>> \ No newline at end of file +<<set $SFSupportUpkeep = 0>> \ No newline at end of file diff --git a/src/SecExp/securityReport.tw b/src/SecExp/securityReport.tw index 6619ae3690825d225e9013c30fe97f1ad970d043..385d1bafd06049228b01f30842de0f18677def2f 100644 --- a/src/SecExp/securityReport.tw +++ b/src/SecExp/securityReport.tw @@ -384,76 +384,108 @@ <</if>> <</if>> - /* training */ - <<if $secBarracksUpgrades.training >= 1>> - <<if $secBarracksUpgrades.training == 1>> - <<set _sL = $slaveUnits.length>> - <<for _i = 0; _i < _sL; _i++>> - <<if $slaveUnits[_i].training < 100>> - <br>$slaveUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, slowing increasing their experience level. - <<set $slaveUnits[_i].training += random(2,4)>> - <</if>> - <</for>> - <<set _mL = $militiaUnits.length>> - <<for _i = 0; _i < _mL; _i++>> - <<if $militiaUnits[_i].training < 100>> - <br>$militiaUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, slowing increasing their experience level. - <<set $militiaUnits[_i].training += random(2,4)>> - <</if>> - <</for>> - <<set _meL = $mercUnits.length>> - <<for _i = 0; _i < _meL; _i++>> - <<if $mercUnits[_i].training < 100>> - <br>$mercUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, slowing increasing their experience level. - <<set $mercUnits[_i].training += random(2,4)>> - <</if>> - <</for>> - <<elseif $secBarracksUpgrades.training == 2>> - <<set _sL = $slaveUnits.length>> - <<for _i = 0; _i < _sL; _i++>> - <<if $slaveUnits[_i].training < 100>> - <br>$slaveUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, increasing their experience level. - <<set $slaveUnits[_i].training += random(3,5)>> - <</if>> - <</for>> - <<set _mL = $militiaUnits.length>> - <<for _i = 0; _i < _mL; _i++>> - <<if $militiaUnits[_i].training < 100>> - <br>$militiaUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, increasing their experience level. - <<set $militiaUnits[_i].training += random(3,5)>> - <</if>> - <</for>> - <<set _meL = $mercUnits.length>> - <<for _i = 0; _i < _meL; _i++>> - <<if $mercUnits[_i].training < 100>> - <br>$mercUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, increasing their experience level. - <<set $mercUnits[_i].training += random(4,6)>> - <</if>> - <</for>> - <<elseif $secBarracksUpgrades.training == 3>> - <<set _sL = $slaveUnits.length>> - <<for _i = 0; _i < _sL; _i++>> - <<if $slaveUnits[_i].training < 100>> - <br>$slaveUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, quickly increasing their experience level. - <<set $slaveUnits[_i].training += random(4,6)>> - <</if>> - <</for>> - <<set _mL = $militiaUnits.length>> - <<for _i = 0; _i < _mL; _i++>> - <<if $militiaUnits[_i].training < 100>> - <br>$militiaUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, quickly increasing their experience level. - <<set $militiaUnits[_i].training += random(4,6)>> - <</if>> - <</for>> - <<set _meL = $mercUnits.length>> - <<for _i = 0; _i < _meL; _i++>> - <<if $mercUnits[_i].training < 100>> - <br>$mercUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, quickly increasing their experience level. - <<set $mercUnits[_i].training += random(4,6)>> - <</if>> - <</for>> + /* loyalty and training */ + <<set _sL = $slaveUnits.length>> + <<for _i = 0; _i < _sL; _i++>> + <<if $slaveUnits[_i].minLoyalty < $secBarracksUpgrades.loyaltyMod + $slaveUnits[_i].commissars>> + <<set $slaveUnits[_i].minLoyalty = $secBarracksUpgrades.loyaltyMod + $slaveUnits[_i].commissars>> <</if>> - <</if>> + <<if $slaveUnits[_i].training < 100 && secBarracksUpgrades.training >= 1>> + <br>$slaveUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, slowing increasing their experience level. + <<set $slaveUnits[_i].training += random(2,4) * 1.5 * $secBarracksUpgrades.training>> + <</if>> + <<set _newLoyalty = $slaveUnits[_i].minLoyalty>> + <<if $soldierWages == 2>> + $slaveUnits[_i].platoonName greatly appreciate the generous wage given to them for their service as soldiers. Occasions to earn money for a slave are scarce after all. + <<set _newLoyalty++>> + <<elseif $soldierWages == 1>> + $slaveUnits[_i].platoonName appreciate the wage given to them for their service as soldiers, despite it being just adequate. Occasions to earn money for a slave are scarce after all. + <<set _newLoyalty += random(0,1)>> + <<else>> + $slaveUnits[_i].platoonName do not appreciate the low wage given to them for their service as soldiers, but occasions to earn money for a slave are scarce, so they're not too affected by it. + <<set _newLoyalty -= random(1)>> + <</if>> + <<if $slaveSoldierPrivilege == 1>> + Allowing them to hold material possessions earns you their devotion and loyalty. + <<set _newLoyalty += random(1,2)>> + <</if>> + <<if _newLoyalty > $slaveUnits[_i].loyalty>> + The loyalty of this unit @@.green;increased@@ this week. + <<elseif _newLoyalty == $slaveUnits[_i].loyalty>> + The loyalty of this unit @@.yellow;did not change@@ this week. + <<else>> + The loyalty of this unit @@.red;decreased@@ this week. + <</if>> + <<set $slaveUnits[_i].loyalty = Math.clamp(_newLoyalty,0,10)>> + <</for>> + <<set _mL = $militiaUnits.length>> + <<for _i = 0; _i < _mL; _i++>> + <<for _i = 0; _i < _sL; _i++>> + <<if $militiaUnits[_i].minLoyalty < $secBarracksUpgrades.loyaltyMod + $militiaUnits[_i].commissars>> + <<set $militiaUnits[_i].minLoyalty = $secBarracksUpgrades.loyaltyMod + $militiaUnits[_i].commissars>> + <</if>> + <<if $militiaUnits[_i].training < 100 && secBarracksUpgrades.training >= 1>> + <br>$militiaUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, slowing increasing their experience level. + <<set $militiaUnits[_i].training += random(2,4) * 1.5 * $secBarracksUpgrades.training>> + <</if>> + <<set _newLoyalty = $militiaUnits[_i].minLoyalty>> + <<if $soldierWages == 2>> + $militiaUnits[_i].platoonName greatly appreciate the generous wage given to them for their service as soldiers. They are proud to defend their homes while making a small fortune out of it. + <<set _newLoyalty += random(1,2)>> + <<elseif $soldierWages == 1>> + $militiaUnits[_i].platoonName appreciate the wage given to them for their service as soldiers, despite it being just adequate. They are proud to defend their homes, though at the cost of possible financial gains. + <<set _newLoyalty += random(0,1)>> + <<else>> + $militiaUnits[_i].platoonName do not appreciate the low wage given to them for their service as soldiers. Their sense of duty keeps them proud of their role as defenders of the arcology, but many do feel its financial weight. + <<set _newLoyalty -= random(1,2)>> + <</if>> + <<if $militiaSoldierPrivilege == 1>> + Allowing them to avoid rent payment for their military service earns you their happiness and loyalty. + <<set _newLoyalty += random(1,2)>> + <</if>> + <<if _newLoyalty > $militiaUnits[_i].loyalty>> + The loyalty of this unit @@.green;increased@@ this week. + <<elseif _newLoyalty == $militiaUnits[_i].loyalty>> + The loyalty of this unit @@.yellow;did not change@@ this week. + <<else>> + The loyalty of this unit @@.red;decreased@@ this week. + <</if>> + <<set $militiaUnits[_i].loyalty = Math.clamp(_newLoyalty,0,10)>> + <</for>> + <<set _meL = $mercUnits.length>> + <<for _i = 0; _i < _meL; _i++>> + <<for _i = 0; _i < _sL; _i++>> + <<if $mercUnits[_i].minLoyalty < $secBarracksUpgrades.loyaltyMod + $mercUnits[_i].commissars>> + <<set $mercUnits[_i].minLoyalty = $secBarracksUpgrades.loyaltyMod + $mercUnits[_i].commissars>> + <</if>> + <<if $mercUnits[_i].training < 100 && secBarracksUpgrades.training >= 1>> + <br>$mercUnits[_i].platoonName is able to make use of the training facilities to better prepare its soldiers, slowing increasing their experience level. + <<set $mercUnits[_i].training += random(2,4) * 1.5 * $secBarracksUpgrades.training>> + <</if>> + <<set _newLoyalty = $mercUnits[_i].minLoyalty>> + <<if $soldierWages == 2>> + $mercUnits[_i].platoonName greatly appreciate the generous wage given to them for their service. After all coin is the fastest way to reach their hearts. + <<set _newLoyalty++>> + <<elseif $soldierWages == 1>> + $mercUnits[_i].platoonName do not appreciate the barely adequate wage given to them for their service. Still their professionalism keeps them determined to finish their contract. + <<set _newLoyalty += random(-1,1)>> + <<else>> + $mercUnits[_i].platoonName do not appreciate the low wage given to them for their service.Their skill would be better served by a better contract and this world does not lack demand for guns for hire. + <<set _newLoyalty -= random(3)>> + <</if>> + <<if $mercSoldierPrivilege == 1>> + Allowing them to keep part of the loot gained from your enemies earns you their trust and loyalty. + <<set _newLoyalty += random(1,2)>> + <</if>> + <<if _newLoyalty > $mercUnits[_i].loyalty>> + The loyalty of this unit @@.green;increased@@ this week. + <<elseif _newLoyalty == $mercUnits[_i].loyalty>> + The loyalty of this unit @@.yellow;did not change@@ this week. + <<else>> + The loyalty of this unit @@.red;decreased@@ this week. + <</if>> + <<set $mercUnits[_i].loyalty = Math.clamp(_newLoyalty,0,10)>> + <</for>> <</if>> <br> diff --git a/src/SecExp/seeUnit.tw b/src/SecExp/seeUnit.tw index 7990182ed32ea0b8f3d66541f3454c6cb5a7c88c..a704d4f40bf5669532d7a7242a9d4c47179ec206 100644 --- a/src/SecExp/seeUnit.tw +++ b/src/SecExp/seeUnit.tw @@ -10,7 +10,7 @@ <<secBotsDescription>> <br><br> <<if $secBots.maxTroops < 80>> - <<link "Improve the digital control matrix">>| + <<link "Improve the digital control matrix">> <<set $secBots.maxTroops += 10>> <<set $cash -= 5000>> <<goto "seeUnit">> @@ -70,10 +70,32 @@ The unit is equipped with state of the art weaponry and equipment. <</if>> <br> + <<if $militiaUnits[$targetIndex].commissars == 0>> + <<link "Attach commissars to the unit">> + <<set $militiaUnits[$targetIndex].commissars = 1>> + <<set $cash -= $equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 1000>> + <<goto "seeUnit">> + <</link>> + Attach a small squad of commissars to the unit. + <br>//Costs <<print ($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000>> and will increase the minimum loyalty of the unit by 1.// + <<elseif $militiaUnits[$targetIndex].commissars < 2>> + <<link "Intensive loyalty training">> + <<set $militiaUnits[$targetIndex].commissars += 1>> + <<set $cash -= $equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 1000>> + <<goto "seeUnit">> + <</link>> + Provide special training for the officers and the commissars of the unit. + <br>//Costs <<print ($equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000>> and will increase the minimum loyalty of the unit by a further 1.// + <<elseif $militiaUnits[$targetIndex].commissars == 1>> + The unit has a commissar detachment, keeping under control the ambitions of the unit's officers. + <<else>> + The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers. + <</if>> + <br> <<if $militiaUnits[$targetIndex].medics == 0>> <<link "Attach trained medics to the unit">> <<set $militiaUnits[$targetIndex].medics = 1>> - <<set $cash -= $equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops) + 1000>> + <<set $cash -= $equipUpgradeCost * $militiaUnits[$targetIndex].maxTroops + 1000>> <<goto "seeUnit">> <</link>> Attach a small squad of trained medics to the unit. @@ -81,6 +103,7 @@ <<else>> The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers. <</if>> + <br> <<if $securityForceActive == 1>> <<if $militiaUnits[$targetIndex].SF == 0>> <<link "Attach Security Force advisors">> @@ -133,6 +156,28 @@ The unit is equipped with state of the art weaponry and equipment. <</if>> <br> + <<if $slaveUnits[$targetIndex].commissars == 0>> + <<link "Attach commissars to the unit">> + <<set $slaveUnits[$targetIndex].commissars = 1>> + <<set $cash -= $equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 1000>> + <<goto "seeUnit">> + <</link>> + Attach a small squad of commissars to the unit. + <br>//Costs <<print ($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 1000>> and will increase the minimum loyalty of the unit by 1.// + <<elseif $slaveUnits[$targetIndex].commissars < 2>> + <<link "Intensive loyalty training">> + <<set $slaveUnits[$targetIndex].commissars += 1>> + <<set $cash -= $equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops + 1000>> + <<goto "seeUnit">> + <</link>> + Provide special training for the officers and the commissars of the unit. + <br>//Costs <<print ($equipUpgradeCost * $slaveUnits[$targetIndex].maxTroops) + 1000>> and will increase the minimum loyalty of the unit by a further 1.// + <<elseif $slaveUnits[$targetIndex].commissars == 1>> + The unit has a commissar detachment, keeping under control the ambitions of the unit's officers. + <<else>> + The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers. + <</if>> + <br> <<if $slaveUnits[$targetIndex].medics == 0>> <<link "Attach trained medics to the unit">> <<set $slaveUnits[$targetIndex].medics = 1>> @@ -144,6 +189,7 @@ <<else>> The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers. <</if>> + <br> <<if $securityForceActive == 1>> <<if $slaveUnits[$targetIndex].SF == 0>> <<link "Attach Security Force advisors">> @@ -196,6 +242,28 @@ The unit is equipped with state of the art weaponry and equipment. <</if>> <br> + <<if $mercUnits[$targetIndex].commissars == 0>> + <<link "Attach commissars to the unit">> + <<set $mercUnits[$targetIndex].commissars = 1>> + <<set $cash -= $equipUpgradeCost * $mercUnits[$targetIndex].maxTroops + 1000>> + <<goto "seeUnit">> + <</link>> + Attach a small squad of commissars to the unit. + <br>//Costs <<print ($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 1000>> and will increase the minimum loyalty of the unit by 1.// + <<elseif $mercUnits[$targetIndex].commissars < 2>> + <<link "Intensive loyalty training">> + <<set $mercUnits[$targetIndex].commissars += 1>> + <<set $cash -= $equipUpgradeCost * $mercUnits[$targetIndex].maxTroops + 1000>> + <<goto "seeUnit">> + <</link>> + Provide special training for the officers and the commissars of the unit. + <br>//Costs <<print ($equipUpgradeCost * $mercUnits[$targetIndex].maxTroops) + 1000>> and will increase the minimum loyalty of the unit by a further 1.// + <<elseif $mercUnits[$targetIndex].commissars == 1>> + The unit has a commissar detachment, keeping under control the ambitions of the unit's officers. + <<else>> + The unit has a perfectly trained and loyal commissar detachment, keeping under control the ambitions of the unit's officers. + <</if>> + <br> <<if $mercUnits[$targetIndex].medics == 0>> <<link "Attach trained medics to the unit">> <<set $mercUnits[$targetIndex].medics = 1>> @@ -207,6 +275,7 @@ <<else>> The unit has a medic detachment following it into battle, decreasing the number of casualties the unit suffers. <</if>> + <br> <<if $securityForceActive == 1>> <<if $mercUnits[$targetIndex].SF == 0>> <<link "Attach Security Force advisors">> diff --git a/src/SecExp/unitsBattleReport.tw b/src/SecExp/unitsBattleReport.tw index a8f198c57783b635482aac863a92dbc66f693584..20f599db5b017172bfc4b8f5559c6c0aba4201df 100644 --- a/src/SecExp/unitsBattleReport.tw +++ b/src/SecExp/unitsBattleReport.tw @@ -53,7 +53,7 @@ <<set _lossesList.push(_assignedLosses)>> <</for>> <<if $losses > 0>> - <<set _lossesList[random(_lossesList.length] += $losses>> + <<set _lossesList[random(_lossesList.length)] += $losses>> <</if>> <<set _lossesList.shuffle()>> diff --git a/src/SecExp/weaponsManufactoring.tw b/src/SecExp/weaponsManufactoring.tw index ff62090a573810c6ed1fc8f383779014681c5131..91e31cddd69d57df104ee75ce152a9e61c2baca0 100644 --- a/src/SecExp/weaponsManufactoring.tw +++ b/src/SecExp/weaponsManufactoring.tw @@ -1 +1,69 @@ -:: weaponsManufactoring [nobr] \ No newline at end of file +:: weaponsManufactoring [nobr] + +This sector of the arcology has been dedicated to weapons manufactoring. These factories supply +<<if $militiaUnits.length > 0>> your militia and<</if>> +<<if $slaveUnits.length > 0>> your slave soldiers and<</if>> +<<if $mercenaries >0>> your mercenaries and<</if>> +many small old world nations as the advanced technology that free cities have available is hard to come by otherwise. +<br> +automation description +lab description +<br> +<<if $weapHelots> 0>>Assigned here are $weapHelots, working to produce as much equipment as possible<<else>>There are no assigned menial slaves here. The spaces is manned exclusively by low rank citizens.<</if>> +You own $helots free menial slaves. This manufactoring complex can house 500 at most, with <<print 500 - $weapHelots>> free slots. +<br> +<br> +<<if $weapProductivity < 5>> + <<link "Invest in automating the complex">> + <<set $weapProductivity++>> + <<set $cash -= 10000 * $weapProductivity>> + <<goto "weaponsManufactoring">> + <</link>> + //Will cost <<print 10000 * $weapProductivity>> and will increase the facility income as well as speed up upgrades// +<<else>> + You've automated the complex to the limit. +<</if>> +<br> +<<if $weapLab < 5>> + <<link "Invest in research and development">> + <<set $weapLab++>> + <<set $cash -= 10000 * $weapLab>> + <<goto "weaponsManufactoring">> + <</link>> + //Will cost <<print 10000 * $weapLab>> and will increase the facility income as well as unlock upgrades for our troops// +<<else>> + You have upgraded the research facilities of the complex to the limit. +<</if>> +<br> +<<set _time = $baseUpgradeTime / $weapProductivity>> +__Upgrades__: +<br> +/* Drones upgrades */ +<<if $secBotsBaseAttack == 7>> + <<link "Develop dynamic battle aware AI">> + <<set _ newUpgrade = { + unit: secBot, + type: attack, + time: _time, + value: 1}>> + <<set $weapUpgrades.push(_newUpgrade)>> + <</link>> + //Will take _time weeks to implement and will increase the base attack value of the security drones.// +<<elseif $weapLab >= 3 && $secBotsBaseDefense == 3>> + <<link "Develop adaptive armored frames">> + <<set _time = $baseUpgradeTime / $weapProductivity>> + <<set _ newUpgrade = { + unit: secBot, + type: defense, + time: _time, + value: 1}>> + <<set $weapUpgrades.push(_newUpgrade)>> + <</link>> + //Will take _time weeks to implement and will increase the base defense value of the security drones.// +<<elseif $secBotsBaseDefense == 3>> + Upgrade the research facility further to unlock more upgrades for the security drones. +<<else>> + You fully upgraded the security drones. +<</if>> +<br> +/* human troops upgrades upgrades */ \ No newline at end of file diff --git a/src/SecExp/widgets/miscSecExpWidgets.tw b/src/SecExp/widgets/miscSecExpWidgets.tw index 8ca26d3a44c1a4f7088ce48c475b7814b5e14e9a..fa3c2aab43c569b41c53b9284d8763e7dba48dbe 100644 --- a/src/SecExp/widgets/miscSecExpWidgets.tw +++ b/src/SecExp/widgets/miscSecExpWidgets.tw @@ -142,6 +142,10 @@ <<if $sellData == 1>> <<set _newAuthUpkeep += 10>> <</if>> + + <<if $slaveSoldierPrivilege == 1>> + <<set _newAuthUpkeep += 10>> + <</if>> <<if $weaponsLaw == 0>> <<set _newAuthUpkeep += 30>> @@ -204,7 +208,15 @@ <br>Set militia missing flag <<set $militiaUnits[_i].SF = 0>> <</if>> - <<if !Number.isInteger($militiaUnits[_i].troops)>> + <<if ndef $militiaUnits[_i].minLoyalty>> + <br>Set militia missing flag + <<set $militiaUnits[_i].minLoyalty = 0>> + <</if>> + <<if ndef $militiaUnits[_i].commissars>> + <br>Set militia missing flag + <<set $militiaUnits[_i].commissars = 0>> + <</if>> + <<if !isInt($militiaUnits[_i].troops)>> <<set $militiaUnits[_i].troops = $militiaUnits[_i].maxTroops>> <br>Fixed militia unit wrong troop count. <</if>> @@ -215,7 +227,15 @@ <br>Set slave missing flag <<set $slaveUnits[_i].SF = 0>> <</if>> - <<if !Number.isInteger($slaveUnits[_i].troops)>> + <<if ndef $slaveUnits[_i].minLoyalty>> + <br>Set slave missing flag + <<set $slaveUnits[_i].minLoyalty = 0>> + <</if>> + <<if ndef $slaveUnits[_i].commissars>> + <br>Set slave missing flag + <<set $slaveUnits[_i].commissars = 0>> + <</if>> + <<if !isInt($slaveUnits[_i].troops)>> <<set $slaveUnits[_i].troops = $slaveUnits[_i].maxTroops>> <br>Fixed slave unit wrong troop count. <</if>> @@ -226,7 +246,15 @@ <br>Set merc missing flag <<set $mercUnits[_i].SF = 0>> <</if>> - <<if !Number.isInteger($mercUnits[_i].troops)>> + <<if ndef $mercUnits[_i].minLoyalty>> + <br>Set merc missing flag + <<set $mercUnits[_i].minLoyalty = 0>> + <</if>> + <<if ndef $mercUnits[_i].commissars>> + <br>Set merc missing flag + <<set $mercUnits[_i].commissars = 0>> + <</if>> + <<if !isInt($mercUnits[_i].troops)>> <<set $mercUnits[_i].troops = $mercUnits[_i].maxTroops>> <br>Fixed merc unit wrong troop count. <</if>> @@ -234,37 +262,37 @@ <</widget>> <<widget "fixBrokenStats">> - <<if !Number.isInteger($totalKills)>> + <<if !isInt($totalKills)>> <<set $totalKills = 0>> <</if>> - <<if !Number.isInteger($mercTotalCasualties)>> + <<if !isInt($mercTotalCasualties)>> <<set $mercTotalCasualties = 0>> <</if>> - <<if !Number.isInteger($mercEmployedManpower)>> + <<if !isInt($mercEmployedManpower)>> <<set $mercEmployedManpower = 0>> <</if>> - <<if !Number.isInteger($mercTotalManpower)>> + <<if !isInt($mercTotalManpower)>> <<set $mercTotalManpower = 0>> <</if>> - <<if !Number.isInteger($slavesTotalCasualties)>> + <<if !isInt($slavesTotalCasualties)>> <<set $slavesTotalCasualties = 0>> <</if>> - <<if !Number.isInteger($slavesEmployedManpower)>> + <<if !isInt($slavesEmployedManpower)>> <<set $slavesEmployedManpower = 0>> <</if>> - <<if !Number.isInteger($militiaTotalCasualties)>> + <<if !isInt($militiaTotalCasualties)>> <<set $militiaTotalCasualties = 0>> <</if>> - <<if !Number.isInteger($militiaEmployedManpower)>> + <<if !isInt($militiaEmployedManpower)>> <<set $militiaEmployedManpower = 0>> <</if>> - <<if !Number.isInteger($militiaFreeManpower)>> + <<if !isInt($militiaFreeManpower)>> <<set $militiaFreeManpower = 0>> <</if>> - <<if !Number.isInteger($militiaTotalManpower)>> + <<if !isInt($militiaTotalManpower)>> <<set $militiaTotalManpower = 0>> <</if>> - <<if !Number.isInteger($battlesCount)>> + <<if !isInt($battlesCount)>> <<set $battlesCount = 0>> <</if>> <</widget>> \ No newline at end of file diff --git a/src/SecExp/widgets/unitsWidgets.tw b/src/SecExp/widgets/unitsWidgets.tw index e7fb0b991211d5e89e57469d9ae350334c4dfd86..d790d2b3e5bb1aefb58a074e0b697ae1c5ff381e 100644 --- a/src/SecExp/widgets/unitsWidgets.tw +++ b/src/SecExp/widgets/unitsWidgets.tw @@ -21,6 +21,13 @@ <<else>> They are consumed veterans, with a wealth of experience and perfectly trained. On the battlefield they are a well oiled war machine capable of facing pretty much anything. <</if>> + <<if $args[0].loyalty < 3>> + Their loyalty is low. Careful monitoring of their activities and relationships should be implemented. + <<elseif $args[0].loyalty < 6>> + Their loyalty is not as high as it can be, but they are not actively working against their arcology owner. + <<else>> + Their loyalty is high and strong. The likelyhood of this unit betraying the arcology is low to non-existent. + <</if>> <<if $args[0].medics == 1>> The unit has a dedicated squad of medics that will follow them in battle. <</if>> @@ -53,6 +60,13 @@ <<else>> They are consumed veterans, with a wealth of experience and perfectly trained. On the battlefield they are a well oiled war machine capable of facing pretty much anything. <</if>> + <<if $args[0].loyalty < 3>> + Their loyalty is low. Careful monitoring of their activities and relationships should be implemented. + <<elseif $args[0].loyalty < 6>> + Their loyalty is not as high as it can be, but they are not actively working against their arcology owner. + <<else>> + Their loyalty is high and strong. The likelyhood of this unit betraying the arcology is low to non-existent. + <</if>> <<if $args[0].medics == 1>> The unit has a dedicated squad of medics that will follow them in battle. <</if>> @@ -85,6 +99,13 @@ <<else>> They are consumed veterans, with a wealth of experience and perfectly trained. On the battlefield they are a well oiled war machine capable of facing pretty much anything. <</if>> + <<if $args[0].loyalty < 3>> + Their loyalty is low. Careful monitoring of their activities and relationships should be implemented. + <<elseif $args[0].loyalty < 6>> + Their loyalty is not as high as it can be, but they are not actively working against their arcology owner. + <<else>> + Their loyalty is high and strong. The likelyhood of this unit betraying the arcology is low to non-existent. + <</if>> <<if $args[0].medics == 1>> The unit has a dedicated squad of medics that will follow them in battle. <</if>> diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw index ea00bcbadf61858515f751ebc6e740d059c34232..771e01add524b9f176b81b94074b84d82633c431 100644 --- a/src/init/setupVars.tw +++ b/src/init/setupVars.tw @@ -4,8 +4,6 @@ * This passage is tagged as widget, so it will be loaded whenever any passage is loaded. The global setup object seems to reset itself to {} (empty object): until we figure out why, this is where we set properties for it. */ -<<set Config.history.maxStates = 10>> - /*** pregmod exclusive start ***/ diff --git a/src/js/economyJS.tw b/src/js/economyJS.tw index 1d73db88db3c37fdb0490f02371a0a3021c81d70..e55ede62243e3b7c2f97f6e2690fd15c095a4541 100644 --- a/src/js/economyJS.tw +++ b/src/js/economyJS.tw @@ -26,6 +26,8 @@ window.getCost = function(array) { + (State.variables.club * facilityCost) + (State.variables.dairy * facilityCost) + (State.variables.incubator * facilityCost * 10); + var secExpCost = 0; + var soldierMod = 0; //facility expenses costs += (0.1 * State.variables.brothelUpgradeDrugs * brothel * facilityCost) @@ -64,38 +66,50 @@ window.getCost = function(array) { //security expansion if(State.variables.secExp == 1) { if(State.variables.edictsUpkeep > 0) { - costs += State.variables.edictsUpkeep; + secExpCost += State.variables.edictsUpkeep; } if(State.variables.SFSupportUpkeep > 0) { - costs += State.variables.SFSupportUpkeep; + secExpCost += State.variables.SFSupportUpkeep; } if(State.variables.propHub > 0) { - costs += State.variables.propHubUpkeep; + secExpCost += State.variables.propHubUpkeep; } if(State.variables.secHQ > 0) { - costs += State.variables.secHQUpkeep + 20 * state.variables.secHelots; + secExpCost += State.variables.secHQUpkeep + 20 * state.variables.secHelots; } if(State.variables.secBarracks > 0) { - costs += State.variables.secBarracksUpkeep; + secExpCost += State.variables.secBarracksUpkeep; + } + if(State.variables.riotCenter > 0) { + secExpCost += State.variables.riotUpkeep; + } + if(State.variables.soldierWages == 0) { + soldierMod = 1; + } + else if(State.variables.soldierWages == 1) { + soldierMod = 1.5; + } + else { + soldierMod = 2; } if (State.variables.militiaUnits != null) { for (var i = 0; i < State.variables.militiaUnits.length; i++) { if( !(State.variables.militiaUnits[i] === null) ){ - costs += State.variables.militiaUnits[i].troops * State.variables.soldierUpkeep; + secExpCost += State.variables.militiaUnits[i].troops * State.variables.soldierUpkeep * soldierMod; } } } if (State.variables.slaveUnits != null) { for (var i = 0; i < State.variables.slaveUnits.length; i++) { if( !( State.variables.slaveUnits[i] === null) ){ - costs += State.variables.slaveUnits[i].troops * State.variables.soldierUpkeep * 0.5; + secExpCost += State.variables.slaveUnits[i].troops * State.variables.soldierUpkeep * 0.5 * soldierMod; } } } if (State.variables.mercUnits != null) { for (var i = 0; i < State.variables.mercUnits.length; i++) { if( !(State.variables.mercUnits[i] === null) ){ - costs += State.variables.mercUnits[i].troops * State.variables.soldierUpkeep * 1.5; + secExpCost += State.variables.mercUnits[i].troops * State.variables.soldierUpkeep * 1.5 * soldierMod; } } } diff --git a/src/js/storyJS.tw b/src/js/storyJS.tw index 5160a157a9fe864be16131550243d3018b2bfc4b..0440eda8d8e22cd79d9fa8a1f3eeecc5a4860fbb 100644 --- a/src/js/storyJS.tw +++ b/src/js/storyJS.tw @@ -155,9 +155,6 @@ Mousetrap.bind("shift+a", function () { Mousetrap.bind("shift+h", function () { $("#story-caption #propHub a.macro-link").trigger("click"); }); -Mousetrap.bind("shift+r", function () { - $("#story-caption #riotCenter a.macro-link").trigger("click"); -}); /** * BoobGenerator namespace. */ @@ -678,6 +675,166 @@ window.relationTargetWord = function(slave) { return slave.relation; }; +/* intended to condense the clothing/toy/etc availability checks into something less asinine */ +window.isItemAccessible = function(string) { + if (State.variables.cheatMode === 1){ + return true; + } else { + switch(string) { + case 'attractive lingerie for a pregnant woman': + if ((State.variables.arcologies[0].FSRepopulationFocus > 0) || (State.variables.clothesBoughtMaternityLingerie === 1)) { + return true; + } else { + return false; + } + break; + case 'a bunny outfit': + if ((State.variables.arcologies[0].FSGenderFundamentalist > 0) || (State.variables.clothesBoughtBunny === 1)) { + return true; + } else { + return false; + } + break; + case 'body oil': + if ((State.variables.arcologies[0].FSPhysicalIdealist > 0) || (State.variables.clothesBoughtOil === 1)) { + return true; + } else { + return false; + } + break; + case 'chains': + if ((State.variables.arcologies[0].FSDegradationist > 0) || (State.variables.clothesBoughtChains === 1)) { + return true; + } else { + return false; + } + break; + case 'a chattel habit': + if ((State.variables.arcologies[0].FSChattelReligionist > 0) || (State.variables.clothesBoughtHabit === 1)) { + return true; + } else { + return false; + } + break; + case 'conservative clothing': + if ((State.variables.arcologies[0].FSPaternalist > 0) || (State.variables.clothesBoughtConservative === 1)) { + return true; + } else { + return false; + } + break; + case 'harem gauze': + if ((State.variables.arcologies[0].FSArabianRevivalist > 0) || (State.variables.clothesBoughtHarem === 1)) { + return true; + } else { + return false; + } + break; + case 'a huipil': + if ((State.variables.arcologies[0].FSAztecRevivalist > 0) || (State.variables.clothesBoughtHuipil === 1)) { + return true; + } else { + return false; + } + break; + case 'a kimono': + if ((State.variables.arcologies[0].FSEdoRevivalist > 0) || (State.variables.clothesBoughtKimono === 1)) { + return true; + } else { + return false; + } + break; + case 'a maternity dress': + if ((State.variables.arcologies[0].FSRepopulationFocus > 0) || (State.variables.clothesBoughtMaternityDress === 1)) { + return true; + } else { + return false; + } + break; + case 'a slutty qipao': + if ((State.variables.arcologies[0].FSChineseRevivalist > 0) || (State.variables.clothesBoughtQipao === 1)) { + return true; + } else { + return false; + } + break; + case 'stretch pants and a crop-top': + if ((State.variables.arcologies[0].FSHedonisticDecadence > 0) || (State.variables.clothesBoughtLazyClothes === 1)) { + return true; + } else { + return false; + } + break; + case 'a toga': + if ((State.variables.arcologies[0].FSRomanRevivalist > 0) || (State.variables.clothesBoughtToga === 1)) { + return true; + } else { + return false; + } + break; + case 'Western clothing': + if ((State.variables.arcologies[0].FSPastoralist > 0) || (State.variables.clothesBoughtWestern === 1)) { + return true; + } else { + return false; + } + break; + case 'bowtie': + if ((State.variables.arcologies[0].FSGenderFundamentalist > 0) || (State.variables.clothesBoughtBunny === 1)) { + return true; + } else { + return false; + } + break; + case 'ancient Egyptian': + if ((State.variables.arcologies[0].FSEgyptianRevivalist > 0) || (State.variables.clothesBoughtEgypt === 1)) { + return true; + } else { + return false; + } + break; + case 'massive dildo gag': + if (State.variables.toysBoughtGags === 1) { + return true; + } else { + return false; + } + break; + case 'a small empathy belly': case 'a medium empathy belly': case 'a large empathy belly': case 'a huge empathy belly': + if ((State.variables.arcologies[0].FSRepopulationFocus > 0) || (State.variables.clothesBoughtBelly === 1)) { + return true; + } else { + return false; + } + break; + case 'long dildo': case 'long, large dildo': case 'long, huge dildo': + if (State.variables.toysBoughtDildos === 1) { + return true; + } else { + return false; + } + break; + case 'long plug': case 'long, large plug': case 'long, huge plug': + if (State.variables.toysBoughtButtPlugs === 1) { + return true; + } else { + return false; + } + break; + case 'tail': + if (State.variables.toysBoughtButtPlugTails === 1) { + return true; + } else { + return false; + } + break; + default: + return true; + break; + } + } +}; + window.ruleApplied = function(slave, ID) { if (!slave || !slave.currentRules) return null; diff --git a/src/js/utilJS.tw b/src/js/utilJS.tw index 5afa12b152ff47a082bf0d081b74c0198746446f..9a923d27edbf2a1a153db8e4abc344b82b3e132d 100644 --- a/src/js/utilJS.tw +++ b/src/js/utilJS.tw @@ -363,6 +363,15 @@ window.Categorizer.prototype.cat = function(val, def) { return result; }; +window.isInt = function(value) { + var x; + if (isNaN(value)) { + return false; + } + x = parseFloat(value); + return (x | 0) === x; +}; + /* Make everything waiting for this execute. Usage: diff --git a/src/pregmod/fSlaveSlaveDickConsummate.tw b/src/pregmod/fSlaveSlaveDickConsummate.tw index 1a7a3a7f6ce4fb0a157c59bc7879739f69d35ae1..aece01250a03a63e5a5513bcf57d8d42710f1eff 100644 --- a/src/pregmod/fSlaveSlaveDickConsummate.tw +++ b/src/pregmod/fSlaveSlaveDickConsummate.tw @@ -397,7 +397,7 @@ You take a look at the bound toy. <<set $activeSlave.penetrativeCount += 1, $penetrativeTotal += 1, $slaverapistx.vaginalCount += 1, $vaginalTotal += 1>> /% Friendship/lust? %/ -<<if ([2].includes($activeSlave.relationship) || $activeSlave.relationshipTarget == $slaverapistx.ID) && ([2].includes($slaverapistx.relationship) || $slaverapistx.relationshipTarget == $activeSlave.ID)>> +<<if ([2].includes($activeSlave.relationship) && $activeSlave.relationshipTarget == $slaverapistx.ID) && ([2].includes($slaverapistx.relationship) && $slaverapistx.relationshipTarget == $activeSlave.ID)>> You keep $activeSlave.slaveName's dick intimate with $slaverapistx.slaveName's pussy for awhile, something the two friends haven't been sharing with each other. In the end, you are certain they got closer, becoming @@.lightgreen;friends with benefits.@@ <<set $activeSlave.relationship++, $slaverapistx.relationship++>> <</if>> diff --git a/src/pregmod/fSlaveSlaveVagConsummate.tw b/src/pregmod/fSlaveSlaveVagConsummate.tw index 2be24363eed9d67cca17d4d39fd0e43b3ff108c5..b654b0a5eb7a7aa5b6bd519911e74aaf76799fde 100644 --- a/src/pregmod/fSlaveSlaveVagConsummate.tw +++ b/src/pregmod/fSlaveSlaveVagConsummate.tw @@ -4,25 +4,25 @@ <<ClearSummaryCache $slaverapistx>> <<if $slaverapistx.dick == 1>> - <<set $dicksize = "pathetic">> + <<set _dicksize = "pathetic">> <<elseif ($slaverapistx.dick == 2)>> - <<set $dicksize = "tiny">> + <<set _dicksize = "tiny">> <<elseif ($slaverapistx.dick == 3)>> - <<set $dicksize = "average">> + <<set _dicksize = "average">> <<elseif ($slaverapistx.dick == 4)>> - <<set $dicksize = "big">> + <<set _dicksize = "big">> <<elseif ($slaverapistx.dick == 5)>> - <<set $dicksize = "huge">> + <<set _dicksize = "huge">> <<elseif ($slaverapistx.dick == 6)>> - <<set $dicksize = "gigantic">> + <<set _dicksize = "gigantic">> <<elseif ($slaverapistx.dick == 7)>> - <<set $dicksize = "titanic">> + <<set _dicksize = "titanic">> <<elseif ($slaverapistx.dick == 8)>> - <<set $dicksize = "absurd">> + <<set _dicksize = "absurd">> <<elseif ($slaverapistx.dick == 9)>> - <<set $dicksize = "inhuman">> + <<set _dicksize = "inhuman">> <<else>> - <<set $dicksize = "obscene">> + <<set _dicksize = "obscene">> <</if>> You take a look at the slave you selected. @@ -30,11 +30,11 @@ You take a look at the slave you selected. <<if $activeSlave.mother == $slaverapistx.ID>> <<if ($slaverapistx.fetish == "perverted")>> - <<if ($slaverapistx.energy > 60)>> - $slaverapistx.slaveName is well aware that she is about to rape her own daughter, but despite that seems eager to do it. - <<else>> - $slaverapistx.slaveName is well aware that she is about to rape her own daughter, but despite that seems to feel some arousal at the thought. - <</if>> + <<if ($slaverapistx.energy > 60)>> + $slaverapistx.slaveName is well aware that she is about to rape her own daughter, but despite that seems eager to do it. + <<else>> + $slaverapistx.slaveName is well aware that she is about to rape her own daughter, but despite that seems to feel some arousal at the thought. + <</if>> <<else>> $slaverapistx.slaveName is well aware that she is about to rape her own daughter and is understandingly disturbed. <</if>> @@ -42,11 +42,11 @@ You take a look at the slave you selected. <<if $slaverapistx.mother == $activeSlave.ID>> <<if ($slaverapistx.fetish == "perverted")>> - <<if ($slaverapistx.energy > 60)>> - $slaverapistx.slaveName is well aware that she is about to rape her own mother, but despite that seems eager to do it. - <<else>> - $slaverapistx.slaveName is well aware that she is about to rape her own mother, but despite that seems to feel some arousal at the thought. - <</if>> + <<if ($slaverapistx.energy > 60)>> + $slaverapistx.slaveName is well aware that she is about to rape her own mother, but despite that seems eager to do it. + <<else>> + $slaverapistx.slaveName is well aware that she is about to rape her own mother, but despite that seems to feel some arousal at the thought. + <</if>> <<else>> $slaverapistx.slaveName is well aware that she is about to rape her own mother and is understandingly disturbed. <</if>> @@ -54,35 +54,32 @@ You take a look at the slave you selected. <<if (areSisters($activeSlave, $slaverapistx) > 0)>> <<if ($slaverapistx.fetish == "perverted")>> - <<if ($slaverapistx.energy > 60)>> - $slaverapistx.slaveName is looking down at her sisters helpless form and inviting pussy with a look of hunger. - <<else>> - $slaverapistx.slaveName seems paralyzed, looking down at her bound sister with disbelief, curiosity...and excitement? - <</if>> + <<if ($slaverapistx.energy > 60)>> + $slaverapistx.slaveName is looking down at her sister's helpless form and inviting pussy with a look of hunger. + <<else>> + $slaverapistx.slaveName seems paralyzed, looking down at her bound sister with disbelief, curiosity...and excitement? + <</if>> <<else>> $slaverapistx.slaveName looks with horror down at her bound sister, knowing what will soon happen. <</if>> <</if>> -<<set $activeSlave.penetrativeCount += 1>> -<<set $penetrativeTotal += 1>> - - +<<set $activeSlave.penetrativeCount++, $penetrativeTotal++>> <<if ($slaverapistx.fetish == "dom") && ($slaverapistx.fetishStrength > 20) && ($slaverapistx.devotion >= -20)>> - Since $slaverapistx.slaveName loves to dominate others it's not hard to get her <<if $slaverapistx.dick > 0>>$dicksize dick ready<<elseif ($slaverapistx.clit >= 4)>>massive clit ready<<else>>to don her strap-on<</if>> - <<set $slaverapistx.devotion += 4>> - <<if ($slaverapistx.attrXX > 65)>>With her high libido and love for girls, she becomes aroused indecently fast. - <<else>> - <<if $slaverapistx.dick > 0>>Her $dicksize member springs instantly to attention<<else>>She becomes wet and flushed<</if>> - at the prospect of forcing herself on another slave. - <</if>> + Since $slaverapistx.slaveName loves to dominate others it's not hard to get her <<if $slaverapistx.dick > 0>>_dicksize dick ready<<elseif ($slaverapistx.clit >= 4)>>massive clit ready<<else>>to don her strap-on<</if>> + <<if ($slaverapistx.attrXX > 65)>> + With her high libido and love for girls, she becomes aroused indecently fast. + <<else>> + <<if $slaverapistx.dick > 0>>Her _dicksize member springs instantly to attention<<else>>She becomes wet and flushed<</if>> + at the prospect of forcing herself on another slave. + <</if>> <<elseif ($slaverapistx.fetish == "sadist") && ($slaverapistx.fetishStrength > 20) && ($slaverapistx.devotion >= -20)>> - With the prospect of torturing another slave <<if $slaverapistx.dick > 0>>her $dicksize member springs instantly to attention<<elseif ($slaverapistx.clit >= 4)>>her clit becomes engroged<<else>>she becomes wet and flushed<</if>> + With the prospect of torturing another slave <<if $slaverapistx.dick > 0>>her _dicksize member springs instantly to attention<<elseif ($slaverapistx.clit >= 4)>>her clit becomes engroged<<else>>she becomes wet and flushed<</if>> <<elseif ($slaverapistx.attrXX > 65) && ($slaverapistx.devotion >= -20)>> - Since $slaverapistx.slaveName likes sticking her <<if $slaverapistx.dick > 0>>$dicksize penis<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> in girls, she doesn't take much convincing. + Since $slaverapistx.slaveName likes sticking her <<if $slaverapistx.dick > 0>>_dicksize penis<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> in girls, she doesn't take much convincing. <<elseif ($slaverapistx.devotion > 50)>> Since $slaverapistx.slaveName is devoted to you, she'll eagerly fuck anything you tell her to fuck. @@ -100,12 +97,11 @@ You take a look at the slave you selected. <<else>> <<if $slaverapistx.dick > 0>> - Since $slaverapistx.slaveName is unlikely to comply willingly, you simply restrain her and administer a massive dose of vasodilators, directly where they will do the most good. $slaverapistx.slaveName writhes with the pain of the injection, which is compounded as her $dicksize penis springs agonizingly erect. + Since $slaverapistx.slaveName is unlikely to comply willingly, you simply restrain her and administer a massive dose of vasodilators, directly where they will do the most good. $slaverapistx.slaveName writhes with the pain of the injection, which is compounded as her _dicksize penis springs agonizingly erect. <<else>> Since $slaverapistx.slaveName is unlikely to comply willingly, you tie her up, put a strap-on with a clit vibrator on her and administer strong aphrodisiacs. She writes with discomfort and confusion. <</if>> - <</if>> @@ -116,36 +112,36 @@ Next, you see to $activeSlave.slaveName. <<if $activeSlave.mother == $slaverapistx.ID>> <<if ($activeSlave.fetish == "perverted")>> <<if ($activeSlave.energy > 60)>> - $activeSlave.slaveName is looking up at her mother, fully naked, her <<if $slaverapistx.dick > 0>>$dicksize penis<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> standing firm despite her rapid breathing. She is flushed and her pussy moist. + $activeSlave.slaveName is looking up at her mother, fully naked, her <<if $slaverapistx.dick > 0>>_dicksize penis<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> standing firm despite her rapid breathing. She is flushed and her pussy moist. <<else>> - $activeSlave.slaveName seems paralyzed, looking at her mothers <<if $slaverapistx.dick > 0>>$dicksize member<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> with fascination and disbelief. + $activeSlave.slaveName seems paralyzed, looking at her mothers <<if $slaverapistx.dick > 0>>_dicksize member<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> with fascination and disbelief. <</if>> <<else>> - $activeSlave.slaveName looks with horror at her mothers <<if $slaverapistx.dick > 0>>$dicksize member<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>>, knowing what will soon happen. + $activeSlave.slaveName looks with horror at her mothers <<if $slaverapistx.dick > 0>>_dicksize member<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>>, knowing what will soon happen. <</if>> <</if>> <<if $slaverapistx.mother == $activeSlave.ID>> <<if ($activeSlave.fetish == "perverted")>> <<if ($activeSlave.energy > 60)>> - $activeSlave.slaveName is looking up at her daughter, fully naked, her <<if $slaverapistx.dick > 0>>$dicksize penis<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> standing firm despite her rapid breathing. She is flused and her pussy moist. + $activeSlave.slaveName is looking up at her daughter, fully naked, her <<if $slaverapistx.dick > 0>>_dicksize penis<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> standing firm despite her rapid breathing. She is flused and her pussy moist. <<else>> - $activeSlave.slaveName seems paralyzed, looking at her daughters <<if $slaverapistx.dick > 0>>$dicksize cock<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> swaying above her with disbelief, hesitation... and excitement? + $activeSlave.slaveName seems paralyzed, looking at her daughters <<if $slaverapistx.dick > 0>>_dicksize cock<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> swaying above her with disbelief, hesitation... and excitement? <</if>> <<else>> - $activeSlave.slaveName looks with horror at her daughters <<if $slaverapistx.dick > 0>>$dicksize dick<<elseif ($slaverapistx.clit >= 4)>>dick-clit<<else>>strap-on<</if>>, knowing what will soon happen. + $activeSlave.slaveName looks with horror at her daughters <<if $slaverapistx.dick > 0>>_dicksize dick<<elseif ($slaverapistx.clit >= 4)>>dick-clit<<else>>strap-on<</if>>, knowing what will soon happen. <</if>> <</if>> <<if (areSisters($activeSlave, $slaverapistx) > 0)>> <<if ($activeSlave.fetish == "perverted")>> <<if ($activeSlave.energy > 60)>> - $activeSlave.slaveName seems paralyzed with fear, but her nipples are already hard and her face flushed. Her eyes are fixed on the <<if $slaverapistx.dick > 0>>$dicksize dick<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> above her. + $activeSlave.slaveName seems paralyzed with fear, but her nipples are already hard and her face flushed. Her eyes are fixed on the <<if $slaverapistx.dick > 0>>_dicksize dick<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> above her. <<else>> - $activeSlave.slaveName seems paralyzed, looking at her sister <<if $slaverapistx.dick > 0>>$dicksize cock<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> above her with disbelief, curiosity...and excitement? + $activeSlave.slaveName seems paralyzed, looking at her sister <<if $slaverapistx.dick > 0>>_dicksize cock<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> above her with disbelief, curiosity...and excitement? <</if>> <<else>> - $activeSlave.slaveName looks with horror at her sister's <<if $slaverapistx.dick > 0>>$dicksize dick<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>>, knowing what will soon happen. + $activeSlave.slaveName looks with horror at her sister's <<if $slaverapistx.dick > 0>>_dicksize dick<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>>, knowing what will soon happen. <</if>> <</if>> @@ -156,15 +152,14 @@ Next, you see to $activeSlave.slaveName. <<if ($activeSlave.fetish == "submissive") && ($activeSlave.fetishStrength > 60) && ($activeSlave.fetishKnown == 1) && ($activeSlave.vagina == 0)>> She presents her virgin pussy to $slaverapistx.slaveName without protest. This act @@.lime; breaks in her pussy.@@ <<set $activeSlave.vagina = 1>> - <<set $activeSlave.devotion += 4>> - <<set $activeSlave.fetishStrength += 1>> + <<set $activeSlave.devotion += 4>> + <<set $activeSlave.fetishStrength += 1>> <<elseif ($activeSlave.fetish == "submissive") && ($activeSlave.fetishStrength > 60) && ($activeSlave.fetishKnown == 1) && ($activeSlave.fetishStrength > 60)>> - She smiles as she is tied and her pussy presented to $slaverapistx.slaveName. @@.hotpink;She enjoys@@ submitting to a dominant slave. - <<set $activeSlave.devotion += 4>> + She smiles as she is tied and her pussy presented to $slaverapistx.slaveName. She enjoys submitting to such a dominant slave. <<elseif ($activeSlave.devotion > 20) && ($activeSlave.vagina == 0) >> - She accepts your orders without comment and presents her virgin pussy to $slaverapistx.slaveName. She gasps in shock when she feels the <<if $slaverapistx.dick > 0>>$dicksize dick<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> enter her. @@.hotpink;She is broken to slavery@@ by this application of her body, which naturally @@.lime;will break in her pussy.@@ + She accepts your orders without comment and presents her virgin pussy to $slaverapistx.slaveName. She gasps in shock when she feels the <<if $slaverapistx.dick > 0>>_dicksize dick<<elseif ($slaverapistx.clit >= 4)>>massive clit<<else>>strap-on<</if>> enter her. @@.hotpink;She is broken to slavery@@ by this application of her body, which naturally @@.lime;will break in her pussy.@@ <<set $activeSlave.vagina = 1>> <<set $activeSlave.devotion += 10>> <<elseif ($activeSlave.devotion >= -20) && ($activeSlave.vagina == 0)>> @@ -202,56 +197,31 @@ Next, you see to $activeSlave.slaveName. <br><br> <<if ($activeSlave.devotion < -20) && ($slaverapistx.devotion < -20)>> - Since you have two restrained slaves, it's up to you to do all the work. $activeSlave.slaveName is tied up on the bed with her pussy available, so you maneuver $slaverapistx.slaveName's <<if $slaverapistx.dick > 0>>$dicksize dick<<else>>strap-on<</if>> into place. The two slaves make no further moves until you deal $slaverapistx.slaveName a terrific swat across the ass and promise to give her more of the same until she gets going. $slaverapistx.slaveName starts moving very slowly, barely prodding. After watching them mechanically go at it for a while, you use your leg to suddenly push her deep into $activeSlave.slaveName, fully hilting her in one motion. You occasionally prod them with an electrical jolt to keep them going at a faster pace. Both slaves @@.mediumorchid;resent@@ what you made them do and @@.gold;fear you@@ as a result. - <<set $activeSlave.devotion -= 5>> - <<set $slaverapistx.devotion -= 5>> - <<set $activeSlave.trust -= 5>> - <<set $slaverapistx.trust -= 5>> + Since you have two restrained slaves, it's up to you to do all the work. $activeSlave.slaveName is tied up on the bed with her pussy available, so you maneuver $slaverapistx.slaveName's <<if $slaverapistx.dick > 0>>_dicksize dick<<else>>strap-on<</if>> into place. The two slaves make no further moves until you deal $slaverapistx.slaveName a terrific swat across the ass and promise to give her more of the same until she gets going. $slaverapistx.slaveName starts moving very slowly, barely prodding. After watching them mechanically go at it for a while, you use your leg to suddenly push her deep into $activeSlave.slaveName, fully hilting her in one motion. You occasionally prod them with an electrical jolt to keep them going at a faster pace. Both slaves resent what you made them do and fear you'll make them do it again. <<elseif ($slaverapistx.devotion < -20)>> - Since your dick slave is restrained, you order $activeSlave.slaveName to present herself on the bed, and then maneuver $slaverapistx.slaveName's <<if $slaverapistx.dick > 0>>$dicksize dick<<else>>strap-on<</if>> into place. $activeSlave.slaveName does her best to hump herself against the unwilling cock until you deal $slaverapistx.slaveName a terrific swat across the ass and promise to give her more of the same until she gets going. She is still unenthusiastic, so you have her lie down and have $activeSlave.slaveName ride herself to orgasm. She @@.mediumorchid;resents@@ what you made her do and @@.gold;fears you@@ as a result.. Though $activeSlave.slaveName accepts the situation, she looks into $slaverapistx.slaveName's eyes with obvious apology. - <<set $slaverapistx.devotion -= 5>> - <<set $slaverapistx.trust -= 5>> + Since your dick slave is restrained, you order $activeSlave.slaveName to present herself on the bed, and then maneuver $slaverapistx.slaveName's <<if $slaverapistx.dick > 0>>_dicksize dick<<else>>strap-on<</if>> into place. $activeSlave.slaveName does her best to hump herself against the unwilling cock until you deal $slaverapistx.slaveName a terrific swat across the ass and promise to give her more of the same until she gets going. She is still unenthusiastic, so you have her lie down and have $activeSlave.slaveName ride herself to orgasm. She resents what you made her do and fears you'll force her to do it again. Though $activeSlave.slaveName accepts the situation, she looks into $slaverapistx.slaveName's eyes with obvious apology. <<elseif ($slaverapistx.fetish == "dom") && ($slaverapistx.fetishStrength > 20) && ($slaverapistx.devotion > 20)>> You arrange $activeSlave.slaveName on the bed with her pussy defenseless and available, and then tell the randy $slaverapistx.slaveName that it's all hers. The slave life has so affected $slaverapistx.slaveName that she is quite eager to rape another slave for her pleasure. She penetrates her immediately, fondling, pinching and licking while pistoning away, fully enjoying her dominant role, edging her poor toy again and again and making her beg for release. - <<set $slaverapistx.devotion += 4>> - <<set $slaverapistx.energy += 1>> - <<set $slaverapistx.trust += 2>> - <<if ($activeSlave.fetish == "dom")>> - <<if ($activeSlave.devotion < -20)>> - By the end of the day $activeSlave.slaveName's @@.lime;abused cunt@@ is <<if $slaverapistx.dick > 0>>$dripping with cum<<else>>overflowing with juices<</if>>, leaving her @@.gold;horrified@@ and @@.mediumorchid;disgusted at her lack of control@@. - <<set $activeSlave.trust -= 5>> - <<set $activeSlave.energy -= 1>> - <<set $activeSlave.devotion -= 3>> - <</else>> - By the end of the day $activeSlave.slaveName's @@.lime;abused cunt@@ is <<if $slaverapistx.dick > 0>>$dripping with cum<<else>>overflowing with juices<</if>>, leaving her @@.gold;annyoned@@ at her lack of control, but she still somewhat enjoyed herself. - <<set $activeSlave.energy += 1>> - <<set $activeSlave.devotion += 1>> - <</if>> - <<elseif ($activeSlave.fetish == "submissive")>> - <<if ($activeSlave.devotion < -20)>> - By the end of the day $activeSlave.slaveName's @@.lime;abused cunt@@ is <<if $slaverapistx.dick > 0>>$dripping with cum<<else>>overflowing with juices<</if>>, leaving the submissive slave @@.gold;horrified@@ that she found the experience @@.hotpink;sexually satisfying@@. - <<set $activeSlave.trust -= 1>> - <<set $activeSlave.energy += 2>> - <<set $activeSlave.devotion += 1>> - <</else>> - By the end of the day $activeSlave.slaveName's @@.lime;abused cunt@@ is <<if $slaverapistx.dick > 0>>$dripping with cum<<else>>overflowing with juices<</if>>. This sexual encounter is everything she dreamed of, leaving her @@.hotpink;utterly satisfied@@. - <<set $activeSlave.trust += 2>> - <<set $activeSlave.energy += 5>> - <<set $activeSlave.devotion += 2>> - <</if>> - <</if>> - $slaverapistx.slaveName is lying next to her on the bed in a state of obvious @@.hotpink;satiation@@ and @@.teal;bliss.@@ + <<if ($activeSlave.fetish == "dom")>> + <<if ($activeSlave.devotion < -20)>> + By the end of the day $activeSlave.slaveName's abused cunt is <<if $slaverapistx.dick > 0>>dripping with cum<<else>>overflowing with juices<</if>>, leaving her horrified and disgusted at her lack of control. + <<else>> + By the end of the day $activeSlave.slaveName's abused cunt is <<if $slaverapistx.dick > 0>>dripping with cum<<else>>overflowing with juices<</if>>, leaving her annyoned at her lack of control, but she still somewhat enjoyed herself. + <</if>> + <<elseif ($activeSlave.fetish == "submissive")>> + <<if ($activeSlave.devotion < -20)>> + By the end of the day $activeSlave.slaveName's abused cunt is <<if $slaverapistx.dick > 0>>dripping with cum<<else>>overflowing with juices<</if>>, leaving the submissive slave horrified that she found the experience sexually satisfying. + <<else>> + By the end of the day $activeSlave.slaveName's abused cunt is <<if $slaverapistx.dick > 0>>dripping with cum<<else>>overflowing with juices<</if>>. This sexual encounter is everything she dreamed of, leaving her utterly satisfied. + <</if>> + <</if>> + $slaverapistx.slaveName is lying next to her on the bed in a state of obvious satiation and bliss. <<elseif ($slaverapistx.energy > 95) && ($slaverapistx.devotion > 20) && ($activeSlave.devotion < -20)>> - You arrange $activeSlave.slaveName on the bed with her pussy defenseless and available, and then tell the randy $slaverapistx.slaveName that it's all hers. The slave life has so affected $slaverapistx.slaveName that she is quite eager to rape another slave, just for the perverted novelty of the act. Her high libido keeps her going for a long time, brining the helpless toy to one forced orgasm after another. By the end of the day $activeSlave.slaveName is lying on the bed @@.lime;all worn out@@, her cunt <<if $slaverapistx.dick > 0>>$dripping with cum<<else>>overflowing with juices<</if>>, to her @@.gold;horror@@ and @@.mediumorchid;resentment,@@ while $slaverapistx.slaveName is sleeping next to her in a state of obvious @@.hotpink;satiation and bliss.@@ - <<set $activeSlave.devotion -= 3>> - <<set $activeSlave.trust -= 3>> - <<set $activeSlave.energy += 3>> - <<set $slaverapistx.devotion += 3>> - <<set $slaverapistx.trust += 3>> + You arrange $activeSlave.slaveName on the bed with her pussy defenseless and available, and then tell the randy $slaverapistx.slaveName that it's all hers. The slave life has so affected $slaverapistx.slaveName that she is quite eager to rape another slave, just for the perverted novelty of the act. Her high libido keeps her going for a long time, brining the helpless toy to one forced orgasm after another. By the end of the day $activeSlave.slaveName is lying on the bed, all worn out, her cunt <<if $slaverapistx.dick > 0>>dripping with cum<<else>>overflowing with juices<</if>>, to her horror andresentment, while $slaverapistx.slaveName is sleeping next to her in a state of obvious satiation and bliss. <<elseif ($activeSlave.devotion <= 20) || ($slaverapistx.devotion <= 20)>> You order $activeSlave.slaveName onto the couch and tell $slaverapistx.slaveName to get on with it. They fuck mechanically, gazing with roiling emotions into each others' eyes. They do seem to come to some sort of a nonverbal understanding on the necessity of getting it done, and there is no real unhappiness in either of them when they finish and disentangle themselves. As they clean themselves and exit, you notice $slaverapistx.slaveName's looking a little more longingly at $activeSlave.slaveName. @@ -259,26 +229,15 @@ Next, you see to $activeSlave.slaveName. <<elseif ($activeSlave.devotion <= 50) || ($slaverapistx.devotion <= 50)>> You order $activeSlave.slaveName and $slaverapistx.slaveName to get on with it. They fuck mechanically at first, gazing with roiling emotions into each others' eyes. Eventually, they begin to enjoy the intimacy of the act, finding the shared pleasure between them comforting. They finish and resume life as slaves, the light of this intimacy diminishing, softening with $slaverapistx.slaveName's dick and dripping away with the contents of $activeSlave.slaveName's cum-filled pussy. - <<else>> - The two slaves happily and eagerly to the business sex. They take their time with foreplay, humping slowly and gazing into each others' eyes, exchanging kisses almost constantly. After a little while, $activeSlave.slaveName looks over $slaverapistx.slaveName's shoulder to where you're sitting, the invitation clear in her eyes. You come over and penetrate $slaverapistx.slaveName with your <<if $PC.dick > 0>>dick<<else>>strap-on<</if>>. With the double stimulus of penetrating a tight vagina and being penetrated, she comes indecently hard. The two of them collapse into an exhausted, @@.hotpink;happy@@ pile of slave flesh. - <<set $activeSlave.devotion += 4>> - <<set $slaverapistx.devotion += 8>> + The two slaves happily and eagerly to the business sex. They take their time with foreplay, humping slowly and gazing into each others' eyes, exchanging kisses almost constantly. After a little while, $activeSlave.slaveName looks over $slaverapistx.slaveName's shoulder to where you're sitting, the invitation clear in her eyes. You come over and penetrate $slaverapistx.slaveName with your <<if $PC.dick > 0>>dick<<else>>strap-on<</if>>. With the double stimulus of penetrating a tight vagina and being penetrated, she comes indecently hard. The two of them collapse into an exhausted, happy pile of slave flesh. <</if>> -Throughout the week, you keep $activeSlave.slaveName's pussy intimate with $slaverapistx.slaveName's cock. In the end, you are certain they got closer. - - <<if canImpreg($activeSlave, $slaverapistx)>> <<KnockMeUp $activeSlave 25 0 $slaverapistx.ID>> <</if>> - -<<for $i = 0; $i < $slaves.length; $i++>> - <<if $slaverapistx.ID == $slaves[$i].ID>> - <<set $slaves[$i] = $slaverapistx>> - <<break>> - <</if>> -<</for>> +<<set _ssvg = $slaves.findIndex(function(s) { return s.ID == $slaverapistx.ID; })>> +<<set $slaves[_ssvg] = $slaverapistx>> diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index 029ecd4a1e6352ac7f953230486b0bf9e8bec215..cfad906feeb6119f98cc7f481770f101d9ed2593 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -2411,7 +2411,21 @@ She's referring to the volume issue with her unnaturally massive dick. The thing With a mind as busy as yours, you sometimes wake up in the middle of the night for no reason that you can remember.<<if $PC.actualAge >= 50>> These incidents have become more common as you age; merely one of time's little mutilations.<</if>> Naturally, waking up in the middle of the night feels much different than it did back before you owned an arcology. Now you have your choice from a virtual buffet of sleeping girls if you don't feel like going back to sleep right away. <br><br> -The slave on your left is sleeping on her back, and is touching you lightly at the hip and shoulder. The slave on your right, though, is nestled in close, her shoulder under your arm and her head resting gently on your <<if $PC.boobs == 1>>bare breast<<else>>toned chest<</if>>. She's straddling your leg on that side, and as your waking consciousness coalesces, you become more and more aware <<if $activeSlave.belly >= 10000>>of the weight of her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>stomach<</if>> on your <<if $PC.belly >= 5000>>own gravid <</if>>middle and <</if>>that her mons is pressed against your thigh. She has one leg thrown over yours in her sleeping embrace, placing her own <<if $activeSlave.muscles > 30>>muscular<<elseif $activeSlave.weight > 10>>plush<<else>>feminine<</if>> thigh against your womanhood in turn. It's <<EventNameLink $activeSlave>>, and you feel yourself begin to grow wet as you gaze at her in the dim light and feel her slumbering heat. +The slave on your left is sleeping on her back, and is touching you lightly at the hip and shoulder. The slave on your right, though, is nestled in close, her shoulder under your arm and her head resting gently on your +<<if $PC.boobsBonus > 2>> + enormous <<if $PC.boobsImplant == 1>>firm<<else>>pillowy<</if>> breast. +<<elseif $PC.boobsBonus == 2>> + huge <<if $PC.boobsImplant == 1>>firm<<else>>pillowy<</if>> breast. +<<elseif $PC.boobsBonus == 1>> + big <<if $PC.boobsImplant == 1>>firm<<else>>soft<</if>> breast. +<<elseif $PC.boobs == 1>> + bare breast. +<<elseif $PC.title == 0>> + flat chest. +<<else>> + toned chest. +<</if>> +She's straddling your leg on that side, and as your waking consciousness coalesces, you become more and more aware <<if $activeSlave.belly >= 10000>>of the weight of her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>stomach<</if>> on your <<if $PC.belly >= 5000>>own gravid <</if>>middle and <</if>>that her mons is pressed against your thigh. She has one leg thrown over yours in her sleeping embrace, placing her own <<if $activeSlave.muscles > 30>>muscular<<elseif $activeSlave.weight > 10>>plush<<else>>feminine<</if>> thigh against your womanhood in turn. It's <<EventNameLink $activeSlave>>, and you feel yourself begin to grow wet as you gaze at her in the dim light and feel her slumbering heat. <<case "cow milking">> @@ -9646,7 +9660,7 @@ You tell her kindly that you understand, and that she'll be trained to address t Her <<if $activeSlave.dick > 6>>enormous <</if>>soft cock, flopping around as she <<if $activeSlave.belly >= 10000>>waddles<<else>>walks<</if>> hurriedly along, starts to twitch weakly and release little dribbles of cum. As she stumbles forward, each step releases another squirt. <<elseif $activeSlave.anus > 2>> As she stumbles a little with the orgasm, her <<if canDoAnal($activeSlave)>>naked anus is easily visible from behind her, and its lewd spasms attract attention<<else>>anus lewdly spasms under her chastity, and her odd motions attract attention<</if>>. - <<elseif canDovaginal($activeSlave)>> + <<elseif canDoVaginal($activeSlave)>> She focuses her attention on her pussy, awkwardly stumbling along as she tries to walk and finger herself at the same time. <<elseif canDoAnal($activeSlave)>> She focuses her attention on her asspussy, awkwardly stumbling along as she tries to walk and play with her own butt at the same time. @@ -13740,7 +13754,7 @@ You tell her kindly that you understand, and that she'll be trained to address t <<elseif $activeSlave.belly >= 5000>> <<if $activeSlave.bellyPreg >= 3000>> pregnancy swollen - <<eleeif $activeSlave.bellyImplant >= 3000>> + <<elseif $activeSlave.bellyImplant >= 3000>> implant swollen <<else>> <<print $activeSlave.inflationType>>-bloated @@ -13948,8 +13962,7 @@ You tell her kindly that you understand, and that she'll be trained to address t <<EventNameDelink $activeSlave>> <<replace "#result">> Archimedes might have his lever, but give you a place to set such information as this, and you can move a mountain of money. Before he knows what has beset him, your tenant is bustled out of $arcologies[0].name and replaced by a favored and hopefully more honest competitor, who @@.green;is well aware of the score here.@@ $activeSlave.slaveName, who made this possible, spends the day <<if $activeSlave.preg > 20>>having her pregnant belly moisturized, her tired feet rubbed, her cravings fulfilled, being<<else>>being<</if>> massaged, beautified, and pampered. You then take her out for a lovely meal, allowing her to wear clothing that's almost conservative by Free Cities standards, and take a nice walk around $arcologies[0].name's club, talking on light subjects. She's @@.hotpink;deeply touched@@ by an evening of affection without sex, and she @@.mediumaquamarine;trusts you@@ with all sorts of amusing whorehouse rumors. - <<set $activeSlave.devotion += 3>> - <<set $activeSlave.trust += 3>> + <<set $activeSlave.devotion += 3, $activeSlave.trust += 3>> <<set $cash -= 2000>> <<set $arcologies[0].prosperity += 1>> <</replace>> @@ -13961,10 +13974,10 @@ You tell her kindly that you understand, and that she'll be trained to address t <<EventNameDelink $activeSlave>> <<replace "#result">> Her eyes fly open as she feels someone groping her. - <<if $activeSlave.boobsImplant > 0>> + <<if Math.floor($activeSlave.boobsImplant/$activeSlave.boobs) >= .60>> You're mauling her fake boob, squeezing it and making the skin of her breast, which is already stretched rather taut by the implant, stretch a bit farther. <<elseif $activeSlave.boobs > 3000>> - You're hefting and massaging her mass of breastflesh, playing with her natural boob, making her huge soft udder bounce and jiggle. + You're hefting and massaging her mass of breastflesh, playing with her <<if Math.floor($activeSlave.boobsImplant/$activeSlave.boobs) < .60>>mostly <</if>>natural boob, making her huge soft udder bounce and jiggle. <<elseif $activeSlave.lactation > 0>> You're kneading and massaging her udder, and the milk begins to bead at the cow's nipple. <<elseif $activeSlave.boobs > 300>> @@ -13987,32 +14000,88 @@ You tell her kindly that you understand, and that she'll be trained to address t <<set $activeSlave.devotion += 4>> <</replace>> <</link>> -<<if $activeSlave.preg > 30>> -<<link "Rub her Belly">> +<<if $activeSlave.belly >= 5000 || $activeSlave.weight > 30>> +<br><<link "Rub her Belly">> <<EventNameDelink $activeSlave>> <<replace "#result">> - Her eyes fly open as soon as she feels someone touching her pregnancy. - <<if $activeSlave.weight > 10>> - You're massaging and teasing her huge, soft belly. - <<elseif $activeSlave.muscles > 5>> - You're massaging and teasing her taut belly and ruined abs. - <<else>> - You're massaging and teasing her taut belly. - <</if>> - Her face contorts with surprise and then outrage, but then she <<if !canSee($activeSlave)>>recognizes your familiar smell and <</if>>realizes whose hand it is that's taking liberties with her. <<if $activeSlave.intelligence > 1>>Though she's smart,<<elseif $activeSlave.intelligence > -1>>Though she's not dumb,<<else>>She's an idiot, and<</if>> in her drowsy state she can't figure out what to do. She settles for @@.hotpink;freezing submissively@@ and letting you do what you like. You test her compliance by - <<if $activeSlave.weight > 10>> - sinking your hands into her fat to get a good feel off the life growing within. - <<else>> - feeling for the life growing within her. - <</if>> - <<if $activeSlave.weight > 30>> - Though it takes some groping before you are met with a kick from her unborn child. - <<elseif $activeSlave.pregType < 3>> - It doesn't take long before you are met with a kick from her unborn child. + <<if $activeSlave.bellyPreg >= 5000>> + Her eyes fly open as soon as she feels someone touching her _belly, life-rounded, stomach. + <<if $activeSlave.weight > 10>> + You're massaging and teasing her huge, soft belly. + <<elseif $activeSlave.muscles > 5>> + You're massaging and teasing her taut belly and ruined abs. + <<else>> + You're massaging and teasing her taut belly. + <</if>> + Her face contorts with surprise and then outrage, but then she <<if !canSee($activeSlave)>>recognizes your familiar smell and <</if>>realizes whose hand it is that's taking liberties with her. <<if $activeSlave.intelligence > 1>>Though she's smart,<<elseif $activeSlave.intelligence > -1>>Though she's not dumb,<<else>>She's an idiot, and<</if>> in her drowsy state she can't figure out what to do. She settles for @@.hotpink;freezing submissively@@ and letting you do what you like. You test her compliance by + <<if $activeSlave.weight > 10>> + sinking your hands into her fat to get a good feel of the life growing within. + <<else>> + feeling for the life growing within her. + <</if>> + <<if $activeSlave.weight > 30>> + Though it takes some groping before you are met with a kick from her unborn child. + <<elseif $activeSlave.pregType < 3>> + It doesn't take long before you are met with a kick from her unborn child. + <<else>> + She is so full of children that your ministrations are met with a hail of motion. + <</if>> + <<if $activeSlave.pregSource == -1>>Smiling at how active your children are<<else>>Satisfied<</if>>, + <<elseif $activeSlave.bellyImplant >= 5000>> + Her eyes fly open as soon as she feels someone touching her _belly stomach. + <<if $activeSlave.weight > 10>> + You're massaging and teasing her huge, soft belly. + <<elseif $activeSlave.muscles > 5>> + You're massaging and teasing her taut belly and ruined abs. + <<else>> + You're massaging and teasing her taut belly. + <</if>> + Her face contorts with surprise and then outrage, but then she <<if !canSee($activeSlave)>>recognizes your familiar smell and <</if>>realizes whose hand it is that's taking liberties with her. <<if $activeSlave.intelligence > 1>>Though she's smart,<<elseif $activeSlave.intelligence > -1>>Though she's not dumb,<<else>>She's an idiot, and<</if>> in her drowsy state she can't figure out what to do. She settles for @@.hotpink;freezing submissively@@ and letting you do what you like. You test her compliance by + <<if $activeSlave.weight > 10>> + sinking your hands into her fat to get a good feel of the implant hidden within. + <<else>> + feeling up the implant within her. + <</if>> + <<if $activeSlave.weight > 30>> + Though it takes some groping before you locate the firm sphere. + <<elseif $activeSlave.belly < 10000>> + It doesn't take long for you to have a solid grip on the firm sphere. + <<else>> + It's so huge it's hard to miss, but that just gies you more room to poke and prod at. + <</if>> + Satisfied, + <<elseif $activeSlave.bellyFluid >= 5000>> + Her eyes fly open as soon as she feels someone touching her _belly, <<print $activeSlave.inflationType>>-filled stomach. + <<if $activeSlave.weight > 10>> + You're massaging and jiggling her huge, soft belly, enjoying the sounds it makes as you move it. + <<elseif $activeSlave.muscles > 5>> + You're massaging and jiggling her taut belly and stretched abs, enjoying the sounds it makes as you move it. + <<else>> + You're massaging and jiggling her taut belly, enjoying the sounds it makes as you move it. + <</if>> + Her face contorts with surprise and then outrage, but then she <<if !canSee($activeSlave)>>recognizes your familiar smell and <</if>>realizes whose hand it is that's taking liberties with her. <<if $activeSlave.intelligence > 1>>Though she's smart,<<elseif $activeSlave.intelligence > -1>>Though she's not dumb,<<else>>She's an idiot, and<</if>> in her drowsy state she can't figure out what to do. She settles for @@.hotpink;freezing submissively@@ and letting you do what you like. You test her compliance by + <<if $activeSlave.weight > 10>> + sinking your hands into her fat to get a good grip + <<else>> + wrapping your hands around the sloshing globe + <</if>> + and vigorously shaking. As her gut's groaning from the sudden shift of its contents dies down, you gently apply pressure to the bloated organ, careful to only cause her discomfort and not to discourge her contents. Satisfied, <<else>> - She is so full of children that your ministrations are met with a hail of motion. + Her eyes fly open as soon as she feels someone touching her + <<if $activeSlave.weight > 190>> + expansive belly. You're massaging and jiggling her obscene gut while teasing her many folds and struggling to find her belly button. + <<elseif $activeSlave.weight > 160>> + massive, soft belly. You're massaging and jiggling her obscene gut while teasing her many folds and hidden belly button. + <<elseif $activeSlave.weight > 130>> + huge, soft belly. You're massaging and jiggling her thick gut while teasing her folds and hidden belly button. + <<elseif $activeSlave.weight > 95>> + big soft belly. You're massaging and jiggling her gut while teasing her folds and hidden belly button. + <<else>> + chubby middle. You're massaging and jiggling her tiny gut. + <</if>> + Her face contorts with surprise and then outrage, but then she <<if !canSee($activeSlave)>>recognizes your familiar smell and <</if>>realizes whose hand it is that's taking liberties with her. <<if $activeSlave.intelligence > 1>>Though she's smart,<<elseif $activeSlave.intelligence > -1>>Though she's not dumb,<<else>>She's an idiot, and<</if>> in her drowsy state she can't figure out what to do. She settles for @@.hotpink;freezing submissively@@ and letting you do what you like. You test her compliance by roughly kneading her pliante flesh, testing how well it can be molded into pleasurable valleys and ravines. Satisfied, <</if>> - <<if $activeSlave.pregSource == -1>>Smiling at how active your children are<<else>>Satisfied<</if>>, you leave her to get back to sleep as best she can. + you leave her to get back to sleep as best she can. <<set $activeSlave.devotion += 4>> <</replace>> <</link>> @@ -14021,30 +14090,16 @@ You tell her kindly that you understand, and that she'll be trained to address t <br><<link "Cum on her face">> <<EventNameDelink $activeSlave>> <<replace "#result">> - You stand over her, quietly masturbating while watching her sleep. Several of her fellow slaves come and go as you do so, but if they're surprised by the sight, they have the presence of mind not to show it. You fancy yourself a bit of a marks<<if $PC.title == 1>>man<<else>>woman<</if>>, and you don't feel the need to bend over her to score good hits. Your load comes in three main jets: the first hits her on the nipple, the second tracks up her sternum and throat, and the third splashes full across her face as her eyes fly open<<if $PC.vagina == 1>>, each of these accompanied by some less directionally perfect girlcum<</if>>. She sputters with surprise and then outrage, but <<if !canSee($activeSlave)>>once she recognizes your taste and<<else>>then she<</if>> realizes who it is standing over her <<if canSee($activeSlave)>>and<<else>>does she<</if>> @@.gold;freezes in terror.@@ <<if $activeSlave.intelligence > 1>>She's quick, and she immediately realizes<<elseif $activeSlave.intelligence > -1>>She's not dumb, and she quickly realizes<<else>>She gradually manages to calculate<</if>> that doing anything other than thanking you would be phenomenally stupid. "Thank you, - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - <<Master>>," she lisps - <<else>> - <<Master>>," she mumbles - <</if>> - blearily. You leave her to @@.hotpink;puzzle over her own submissiveness,@@ covered in your cum. - <<set $activeSlave.devotion += 4>> - <<set $activeSlave.trust -= 2>> + You stand over her, quietly masturbating while watching her sleep. Several of her fellow slaves come and go as you do so, but if they're surprised by the sight, they have the presence of mind not to show it. You fancy yourself a bit of a marks<<if $PC.title == 1>>man<<else>>woman<</if>>, and you don't feel the need to bend over her to score good hits. Your load comes in three main jets: the first hits her on the nipple, the second tracks up her sternum and throat, and the third splashes full across her face as her eyes fly open<<if $PC.vagina == 1>>, each of these accompanied by some less directionally perfect girlcum<</if>>. She sputters with surprise and then outrage, but <<if !canSee($activeSlave)>>once she recognizes your taste and<<else>>then she<</if>> realizes who it is standing over her <<if canSee($activeSlave)>>and<<else>>does she<</if>> @@.gold;freezes in terror.@@ <<if $activeSlave.intelligence > 1>>She's quick, and she immediately realizes<<elseif $activeSlave.intelligence > -1>>She's not dumb, and she quickly realizes<<else>>She gradually manages to calculate<</if>> that doing anything other than thanking you would be phenomenally stupid. "Thank you, <<Master>>," she <<if SlaveStatsChecker.checkForLisp($activeSlave)>>lisps<<else>>mumbles<</if>> blearily. You leave her to @@.hotpink;puzzle over her own submissiveness,@@ covered in your cum. + <<set $activeSlave.devotion += 4, $activeSlave.trust -= 2>> <</replace>> <</link>> <<else>> <br><<link "Squirt on her face">> <<EventNameDelink $activeSlave>> <<replace "#result">> - You stand over her, quietly masturbating while watching her sleep. Several of her fellow slaves come and go as you do so, but if they're surprised by the sight, they have the presence of mind not to show it. You're on excellent terms with your cunt, and you know just what it takes to make yourself squirt. When you feel the heat building just right, you quickly straddle her face without touching her, angling yourself carefully and increasing the pace of your schlicking. In no time at all, a jet of femcum splashes onto her face and down across her chest. She sputters with surprise and then outrage, but then she <<if canSee($activeSlave)>>realizes whose pussy she's staring straight into<<else>>recognizes your flavor<</if>> and @@.gold;freezes in terror.@@ <<if $activeSlave.intelligence > 1>>She's quick, and she immediately realizes<<elseif $activeSlave.intelligence > -1>>She's not dumb, and she quickly realizes<<else>>She gradually manages to calculate<</if>> that doing anything other than thanking you would be phenomenally stupid. "Thank you, - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - <<Master>>," she lisps - <<else>> - <<Master>>," she mumbles - <</if>> - blearily. You leave her to @@.hotpink;puzzle over her own submissiveness,@@ covered in your pussyjuice. - <<set $activeSlave.devotion += 4>> - <<set $activeSlave.trust -= 2>> + You stand over her, quietly masturbating while watching her sleep. Several of her fellow slaves come and go as you do so, but if they're surprised by the sight, they have the presence of mind not to show it. You're on excellent terms with your cunt, and you know just what it takes to make yourself squirt. When you feel the heat building just right, you quickly straddle her face without touching her, angling yourself carefully and increasing the pace of your schlicking. In no time at all, a jet of femcum splashes onto her face and down across her chest. She sputters with surprise and then outrage, but then she <<if canSee($activeSlave)>>realizes whose pussy she's staring straight into<<else>>recognizes your flavor<</if>> and @@.gold;freezes in terror.@@ <<if $activeSlave.intelligence > 1>>She's quick, and she immediately realizes<<elseif $activeSlave.intelligence > -1>>She's not dumb, and she quickly realizes<<else>>She gradually manages to calculate<</if>> that doing anything other than thanking you would be phenomenally stupid. "Thank you, <<Master>>," she <<if SlaveStatsChecker.checkForLisp($activeSlave)>>lisps<<else>>mumbles<</if>> blearily. You leave her to @@.hotpink;puzzle over her own submissiveness,@@ covered in your pussyjuice. + <<set $activeSlave.devotion += 4, $activeSlave.trust -= 2>> <</replace>> <</link>> <</if>> @@ -14063,126 +14118,186 @@ You tell her kindly that you understand, and that she'll be trained to address t <<link "Let her eat">> <<EventNameDelink $activeSlave>> <<replace "#result">> - You tell her she's a good little succubus, and you're going to let her feed. She knows exactly what you mean, and <<if $activeSlave.preg > 20>>gently lowers herself<<else>>gets<</if>> to her knees quickly, pressing her $activeSlave.nipples nipples against your thighs and grasping your hips to give herself leverage for some very aggressive oral. After - <<if $PC.dick == 1>> - a couple of lush sucks at each of your balls<<if $PC.vagina == 1>> and some eager nuzzling of your pussylips<</if>>, she moves straight to a hard blowjob, deepthroating your cock and almost ramming her head against you.<<if $PC.vagina == 1>> She keeps her tongue stuck out, and whenever she gets you fully hilted, she manages to reach your pussylips with it.<</if>> She <<if $activeSlave.fetish == "cumslut">>doesn't have to pretend to be starving for your cum.<<else>>does a good job of acting like she's authentically starving for your cum.<</if>> She groans with satisfaction when you blow your load down her gullet, + You tell her she's a good little succubus, and you're going to let her feed. She knows exactly what you mean, and + <<if $activeSlave.belly >= 300000>> + leans onto her _belly stomach <<else>> - nuzzling her nose against your moist cunt, she starts to eat you out like she's starving, sparing no time for subtlety, lapping up your female juices with evident relish. You run your fingers through her $activeSlave.slaveName hair, telling her she'll have to survive on pussyjuice. She replies, but you hold her head hard against you as she does, turning whatever she says into an unintelligible, delectable mumbling into your womanhood. She groans with satisfaction when you stiffen with orgasm, giving her a final gush of girlcum, + <<if $activeSlave.belly >= 5000>>gently lowers herself<<else>>gets<</if>> to her knees <</if>> - and <<if $activeSlave.preg > 20>>hefts her gravid bulk up<<else>>gets to her feet<</if>> licking her lips and patting her <<if $activeSlave.preg > 10>>rounded <</if>>stomach. - <<if $activeSlave.preg > 10>> - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - "That wath thuch a big meal <<Master>>, look how full it made me!" She teases, pretending her gravid belly is filled with your fluids. + quickly, pressing her $activeSlave.nipples nipples against your thighs and grasping your hips to give herself leverage for some very aggressive oral. After + <<if $PC.dick == 1>> + a couple of lush sucks at each of your balls<<if $PC.vagina == 1>> and some eager nuzzling of your pussylips<</if>>, she moves straight to a hard blowjob, deepthroating your cock and almost ramming her head against you.<<if $PC.vagina == 1>> She keeps her tongue stuck out, and whenever she gets you fully hilted, she manages to reach your pussylips with it.<</if>> She <<if $activeSlave.fetish == "cumslut">>doesn't have to pretend to be starving for your cum.<<else>>does a good job of acting like she's authentically starving for your cum.<</if>> She groans with satisfaction when you blow your load down her gullet, <<else>> - "That was such a big meal <<Master>>, look how full it made me!" She teases, pretending her gravid belly is filled with your fluids. + nuzzling her nose against your moist cunt, she starts to eat you out like she's starving, sparing no time for subtlety, lapping up your female juices with evident relish. You run your fingers through her $activeSlave.slaveName hair, telling her she'll have to survive on pussyjuice. She replies, but you hold her head hard against you as she does, turning whatever she says into an unintelligible, delectable mumbling into your womanhood. She groans with satisfaction when you stiffen with orgasm, giving her a final gush of girlcum, <</if>> + and <<if $activeSlave.belly >= 5000>>hefts her <<if $activeSlave.bellyPreg >= 3000>>gravid<<else>>bloated<</if>> bulk up<<else>>gets to her feet<</if>> licking her lips and patting her _belly stomach. + <<if $activeSlave.belly >= 1500>> + "That wa<<s>> <<s>>uch a big meal <<Master>>, look how full it made me!" She teases, pretending her + <<if $activeSlave.bellyPreg >= 1500>> + gravid belly is filled with your fluids. + <<elseif $activeSlave.bellyImplant >= 1500>> + distended belly is filled with your fluids. + <<else>> + wobbling, <<print $activeSlave.inflationType>>-filled belly is filled with your fluids. + <</if>> + <<if $PC.balls >= 3>> + Seeing as she took the entirety of your inhuman load, there is some truth to her words. + <</if>> <</if>> She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part of a vampiric sex - <<set $activeSlave.trust += 4>> <<if ($activeSlave.fetish == "cumslut") && ($activeSlave.fetishStrength > 95)>> - demon, and it's a role the incorrigible cumslut @@.hotpink;loves.@@ - <<set $activeSlave.devotion += 2>> + demon, and it's a role the incorrigible cumslut @@.hotpink;loves.@@ + <<set $activeSlave.devotion += 2>> <<elseif ($activeSlave.fetish == "cumslut")>> - demon, and it's a role that @@.lightcoral;reinforces her oral fixation.@@ - <<set $activeSlave.fetishStrength += 4>> + demon, and it's a role that @@.lightcoral;reinforces her oral fixation.@@ + <<set $activeSlave.fetishStrength += 4>> <<elseif (($activeSlave.fetishStrength <= 95) || ($activeSlave.fetishKnown == 0)) && (random(0,1) == 0)>> - demon, and the role @@.lightcoral;focuses her attention on her mouth.@@ - <<set $activeSlave.fetishStrength = 10>> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.fetish = "cumslut">> + demon, and the role @@.lightcoral;focuses her attention on her mouth.@@ + <<set $activeSlave.fetishStrength = 10, $activeSlave.fetishKnown = 1, $activeSlave.fetish = "cumslut">> <<else>> - demon. + demon. <</if>> - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + <<set $activeSlave.trust += 4, $activeSlave.oralCount++>, $oralTotal++>> <</replace>> <</link>> -<<if ($activeSlave.vagina > 0) && ($PC.dick == 1)>> +<<if canDoVaginal($activeSlave) && ($PC.dick == 1)>> <br><<link "Feed her">> <<EventNameDelink $activeSlave>> <<replace "#result">> - You tell her she's a good little succubus, and you're going to feed her. <<if $activeSlave.boobs > 2000>>Reaching up under her breasts for the top edge of her outfit<<else>>Grabbing her outfit's top edge<</if>> and seizing her behind a knee with your other hand, you sling her across a convenient tabletop nearby. She spreads her legs for you, smiling with anticipation, her <<if $activeSlave.vaginaLube > 0>>cunt already soaking wet<<elseif $activeSlave.labia > 0>>prominent petals swollen with arousal<<elseif $activeSlave.clit > 0>>big bitch button stiff with arousal<<else>>cunt flushing with arousal<</if>>. She reaches down around her own ass and spreads her pussy for you, only releasing her fingertip grip on her labia when she feels you hilt yourself inside her <<if $activeSlave.vagina > 2>>cavernous<<elseif $activeSlave.vagina > 1>>comfortable<<else>>caressing<</if>> channel. You're here to rut, not make love, and you give it to her hard, forcing <<if $activeSlave.voice >= 3>>high squeals<<else>>animal grunts<</if>> out of her. She climaxes strongly, and the glorious feeling finishes you as well, bringing rope after rope of your cum jetting into her. She groans at the feeling, and as she <<if $activeSlave.preg > 20>>slowly <</if>>gets to her feet she uses a hand to transfer a taste of the mixture of your seed and <<if $PC.vagina == 1>>both of your<<else>>her<</if>> pussyjuice to her mouth. - <<if $activeSlave.preg > 10>> - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - "Oh <<Master>>! I'm thwelling tho fatht with impth for you!" She teases, cradling her pregnant belly and pretending it just grew that big. + You tell her she's a good little succubus, and you're going to feed her. + <<if $activeSlave.boobs > 2000>> + Reaching up under her breasts for the top edge of her outfit + <<else>> + Grabbing her outfit's top edge + <</if>> + and seizing her behind a knee with your other hand, you sling her across + <<if $activeSlave.belly >= 300000 || $activeSlave.weight > 190>> + an unfortunate nearby tabletop. Once the table finishes its creaking and promises to hold her weight, she + <<else>> + a convenient tabletop nearby. She + <</if>> + spreads her legs for you, smiling with anticipation, her + <<if $activeSlave.vaginaLube > 0>> + cunt already soaking wet. + <<elseif $activeSlave.labia > 0>> + prominent petals swollen with arousal. + <<elseif $activeSlave.clit > 0>> + big bitch button stiff with arousal. + <<else>> + cunt flushing with arousal. + <</if>> + She reaches down around her own ass and spreads her pussy for you, only releasing her fingertip grip on her labia when she feels you hilt yourself inside her + <<if $activeSlave.vagina > 2>> + cavernous + <<elseif $activeSlave.vagina > 1>> + comfortable + <<elseif $activeSlave.vagina > 0>> + caressing <<else>> - "Oh <<Master>>! I'm swelling so fast with imps for you!" She teases, cradling her pregnant belly and pretending it just grew that big. + needy <</if>> + channel. + <<VaginalVCheck>> + You're here to rut, not make love, and you give it to her hard, forcing <<if $activeSlave.voice >= 3>>high squeals<<else>>animal grunts<</if>> out of her. She climaxes strongly, and the glorious feeling finishes you as well, bringing rope after rope of your cum jetting into her. She groans at the feeling, and as she <<if $activeSlave.belly >= 5000 || $activeSlave.weight >= 190>>slowly <</if>>gets to her feet she uses a hand to transfer a taste of the mixture of your seed and <<if $PC.vagina == 1>>both of your<<else>>her<</if>> pussyjuice to her mouth. + <<if $activeSlave.belly >= 750000>> + "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you! There'<<s>> <<s>>o many in me... Oh god, it feel<<s>> like I'm going to bur<<s>>t! <<S>>o many... <<Master>> <<s>>ure i<<s>> potent! I hope <<if $PC.title == 1>>he<<else>><<s>>he<</if>> can handle them all!" She groans, cradling her _belly belly and pretending to be forced to the ground by her pregnancy growing ever larger. "<<Master>>! They won't <<s>>top! Oh... <<S>>o full... I can't <<s>>top con<<c>>eiving!" She roles onto her back and clutches her absurd stomach. "<<S>>o tight! <<S>>o full! <<S>>o Good! I need more! Oh, <<Master>>..." She may be getting a little too into the fantasy. + <<if $activeSlave.pregType >= 50>> + /* placeholder for accidental birthing */ + <</if>> + <<elseif $activeSlave.belly >= 600000>> + "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you! There'<<s>> <<s>>o many in me... Oh god, it feel<<s>> like I'm going to bur<<s>>t! <<S>>o many... <<Master>> <<s>>ure i<<s>> potent! I hope <<if $PC.title == 1>>he<<else>><<s>>he<</if>> can handle them all!" She teases, cradling her _belly belly and pretending to be forced to the ground by her pregnancy growing ever larger. + <<elseif $activeSlave.belly >= 450000>> + "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you! There'<<s>> <<s>>o many in me... Oh god, it feel<<s>> <<s>>o good! <<S>>o many... <<Master>> <<s>>ure i<<s>> potent! I hope <<if $PC.title == 1>>he<<else>><<s>>he<</if>> can handle them all!" She teases, cradling her _belly belly and pretending to be forced to the ground by her pregnancy growing ever larger. + <<elseif $activeSlave.belly >= 300000>> + "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you! There'<<s>> <<s>>o many in me... Oh god, it feel<<s>> <<s>>o good! I feel them moving! They're ready to come out <<Master>>!" She teases, cradling her _belly belly and pretending it just grew that huge. + <<elseif $activeSlave.belly >= 150000>> + "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you! There'<<s>> <<s>>o many in me, look how big I'm getting!" She teases, cradling her _belly belly and pretending it just rapidly became that large. + <<elseif $activeSlave.belly >= 5000>> + "Oh <<Master>>! I'm <<s>>welling <<s>>o fast with imp<<s>> for you!" She teases, cradling her _belly belly and pretending it just grew that big. + <<else>> + "Oh <<Master>>! I feel it! Your <<s>>eed is being devored by my eggs! I can't wait to <<s>>ee how happy they make you!" She teases, rubbing her belly and pretending to conceive. <</if>> -She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part of a sex demon whose hunger knows no + She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part of a sex demon whose hunger knows no <<set $activeSlave.trust += 4>> <<if ($activeSlave.fetish == "pregnancy") && ($activeSlave.fetishStrength > 95)>> - end, and it's a role the pregnancy fetishist @@.hotpink;loves.@@ - <<set $activeSlave.devotion += 2>> + end, and it's a role the pregnancy fetishist @@.hotpink;loves.@@ + <<set $activeSlave.devotion += 2>> <<elseif ($activeSlave.fetish == "pregnancy")>> - end, and it's a role that @@.lightcoral;reinforces her love of insemination.@@ - <<set $activeSlave.fetishStrength += 4>> + end, and it's a role that @@.lightcoral;reinforces her love of insemination.@@ + <<set $activeSlave.fetishStrength += 4>> <<elseif (($activeSlave.fetishStrength <= 95) || ($activeSlave.fetishKnown == 0)) && (random(0,1) == 0)>> - end, and the role @@.lightcoral;focuses her attention on insemination.@@ - <<set $activeSlave.fetishStrength = 10>> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.fetish = "pregnancy">> + end, and the role @@.lightcoral;focuses her attention on insemination.@@ + <<set $activeSlave.fetishStrength = 10, $activeSlave.fetishKnown = 1, $activeSlave.fetish = "pregnancy">> <<else>> - end. + end. <</if>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> <</replace>> <</link>> <</if>> -<<if ($activeSlave.vagina != 0) && ($activeSlave.anus > 0) && ($PC.dick == 1)>> +<<if canDoAnal($activeSlave)>> && ($activeSlave.anus > 0) && ($PC.dick == 1)>> <br><<link "Fuck her without feeding her">> <<EventNameDelink $activeSlave>> <<replace "#result">> You tell her she's a good little succubus. Thinking she understands, she - <<if $activeSlave.vagina > 0>> - turns and hugs the nearest wall, going up on tiptoe and cocking her hips to offer you her needy cunt. She moans as your dick <<if $activeSlave.vagina > 2>>enters her big cunt<<elseif $activeSlave.vagina > 1>>fills her wet cunt<<else>>slides slowly inside her tight cunt<</if>>. As you fuck her, you ask her how succubi feed. "W-well," she gasps, struggling to gather her wits, - <<else>> - gets down on her knees and starts to suck you off. She deepthroats you eagerly, stretching to tickle your balls with her tongue as she gets you all the way in, and then shifting a hand to roll them around as she sucks. As she blows you, you ask her how succubi feed. "Well," she gasps, popping your dickhead free of her mouth and replacing the sucking with a stroking hand, - <</if>> - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - "<<Master>>, they can eat a man'th ethenthe by thwallowing hith cum or getting him to ejaculate inthide their cuntth." + <<if $activeSlave.vagina > 0 && canDoVaginal($activeSlave)>> + turns and hugs the nearest wall, + <<if $activeSlave.belly >= 300000>> + sliding her _belly belly down it until it parts her legs. She shuffles onto it to offer you her needy cunt. + <<else>> + going up on tiptoe and cocking her hips to offer you her needy cunt. + <</if>> + She moans as your dick + <<if $activeSlave.vagina > 2>> + enters her big cunt. + <<elseif $activeSlave.vagina > 1>> + fills her wet cunt. + <<else>> + slides slowly inside her tight cunt. + <</if>> + As you fuck her, you ask her how succubi feed. "W-well," she gasps, struggling to gather her wits, <<else>> - "<<Master>>, they can eat a man's essence by swallowing his cum or getting him to ejaculate inside their pussies." + <<if $activeSlave.belly >= 300000>> + leans onto her _belly belly + <<else>> + gets down on her knees + <</if>> + and starts to suck you off. She deepthroats you eagerly, stretching to tickle your balls with her tongue as she gets you all the way in, and then shifting a hand to roll them around as she sucks. As she blows you, you ask her how succubi feed. "Well," she gasps, popping your dickhead free of her mouth and replacing the sucking with a stroking hand, <</if>> + "<<Master>>, they can eat a man'<<s>> e<<ss>>en<<c>>e by <<s>>wallowing hi<<s>> cum or getting him to ejaculate in<<s>>ide their pu<<ss>>ie<<s>>." <br><br> - You ask her whether she would like to feed off you. - <<if SlaveStatsChecker.checkForLisp($activeSlave)>> - "Oh yeth <<Master>>, pleathe. Pleathe feed me," + You ask her whether she would like to feed off you. "Oh ye<<s>> <<Master>>, plea<<s>>e. Plea<<s>>e feed me," she begs. Too bad, you tell her; she gets to go hungry. After all, succubi can't feed using their butts. + <<if $activeSlave.vagina > 0>> + You withdraw from her cunt and stuff your cock up her ass without pausing or softening your thrusting at all. <<else>> - "Oh <<Master>>, please. Please feed me," + You pull her to her feet by the hair, spin her around, shove her up against the wall, and stuff your cock up her ass. <</if>> - she begs. Too bad, you tell her; she gets to go hungry. After all, succubi can't feed using their butts. - <<if $activeSlave.vagina > 0>> - You withdraw from her cunt and stuff your cock up her ass without pausing or softening your thrusting at all. + <<if $activeSlave.anus > 2>> + It's not like her experienced butt can't take an assraping, but + <<elseif $activeSlave.anus > 1>> + Her practiced ass relaxes and accommodates your dick, but <<else>> - You pull her to her feet by the hair, spin her around, shove her up against the wall, and stuff your cock up her ass. + Her tight asshole spasms with pain as it stretches to accommodate you, and <</if>> - <<if $activeSlave.anus > 2>>It's not like her experienced butt can't take an assraping, but<<elseif $activeSlave.anus > 1>>Her practiced ass relaxes and accommodates your dick, but<<else>>Her tight asshole spasms with pain as it stretches to accommodate you, and<</if>> she whines at your sudden aggression, wiggling within your dominating grip. You fill her ass with cum as she struggles, still playing her part, begging you not to cum in her bottom, since succubi can't live on buttsex. + she whines at your sudden aggression, wiggling within your dominating grip. You fill her ass with cum as she struggles, still playing her part, begging you not to cum in her bottom, since succubi can't live on buttsex. <<set $activeSlave.trust += 4>> <<if ($activeSlave.fetish == "submissive") && ($activeSlave.fetishStrength > 95)>> - It's a role the submissive slut @@.hotpink;loves.@@ - <<set $activeSlave.devotion += 2>> + It's a role the submissive slut @@.hotpink;loves.@@ + <<set $activeSlave.devotion += 2>> <<elseif ($activeSlave.fetish == "submissive")>> - It's a role that @@.lightcoral;reinforces her submissive streak.@@ - <<set $activeSlave.fetishStrength += 4>> + It's a role that @@.lightcoral;reinforces her submissive streak.@@ + <<set $activeSlave.fetishStrength += 4>> <<elseif (($activeSlave.fetishStrength <= 95) || ($activeSlave.fetishKnown == 0)) && (random(0,1) == 0)>> - The role @@.lightcoral;focuses her attention on submission.@@ - <<set $activeSlave.fetishStrength = 10>> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.fetish = "submissive">> + The role @@.lightcoral;focuses her attention on submission.@@ + <<set $activeSlave.fetishStrength = 10, $activeSlave.fetishKnown = 1, $activeSlave.fetish = "submissive">> <<else>> - She @@.hotpink;plays the role well.@@ + She @@.hotpink;plays the role well.@@ <</if>> <<if $activeSlave.vagina > 0>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> <<else>> - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + <<set $activeSlave.oralCount++, $oralTotal++>> <</if>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + <<AnalVCheck>> <</replace>> <</link>> <</if>> @@ -14195,51 +14310,51 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part You ask $assistantName whether she's going anywhere with all this flirting. Her avatar looks at $activeSlave.slaveName. "Hear that, <<switch $assistantAppearance>> <<case "monstergirl">> - human?" she growls. "You're all mine!" - <br><br> - "Oh noo, I'm being <<if SlaveStatsChecker.checkForLisp($activeSlave)>>thacrifithed to a rape monthter,"<<else>>sacrificed to a rape monster,"<</if>> + human?" she growls. "You're all mine!" + <br><br> + "Oh noo, I'm being <<s>>acrifi<<c>>ed to a rape mon<<s>>ter," <<case "shemale">> - slut?" she says, smacking her lips. "You're all mine!" - <br><br> - "Oh noo, <<if SlaveStatsChecker.checkForLisp($activeSlave)>>there'th no way that thing will fit inthide<<else>>there's no way that thing will fit inside<</if>> me," + slut?" she says, smacking her lips. "You're all mine!" + <br><br> + "Oh noo, there'<<s>> no way that thing will fit in<<s>>ide me," <<case "amazon">> - slave?" she roars, rubbing her palms together powerfully. "You're my prize!" - <br><br> - "Oh noo, I've been captured by a horny amazon," + slave?" she roars, rubbing her palms together powerfully. "You're my prize!" + <br><br> + "Oh noo, I've been captured by a horny amazon," <<case "businesswoman">> - bitch?" she says icily, making a steeple with her fingers. "You'll satisfy me! Now!" - <br><br> - "Oh noo, I'm a <<s>>lave to a horny older woman'<<s>> lewd de<<s>>ire<<s>>," + bitch?" she says icily, making a steeple with her fingers. "You'll satisfy me! Now!" + <br><br> + "Oh noo, I'm a <<s>>lave to a horny older woman'<<s>> lewd de<<s>>ire<<s>>," <<case "fairy" "pregnant fairy">> - cutie?" she says, giggling devilishly. "You're aaaaaall miiiine!" - <br><br> - "Oh noo, I'm a <<s>>lave to a horny fairy'<<s>> lewd de<<s>>ire<<s>>," + cutie?" she says, giggling devilishly. "You're aaaaaall miiiine!" + <br><br> + "Oh noo, I'm a <<s>>lave to a horny fairy'<<s>> lewd de<<s>>ire<<s>>," <<case "schoolgirl">> - cutie?" she says eagerly, already reaching down to start schlicking away. "You get to be my FWB!" - <br><br> - "Oh noo, I have to <<s>>ati<<s>>fy a naughty little <<s>>choolgirl," + cutie?" she says eagerly, already reaching down to start schlicking away. "You get to be my FWB!" + <br><br> + "Oh noo, I have to <<s>>ati<<s>>fy a naughty little <<s>>choolgirl," <<case "goddess">> - girl?" she says beatifically. "When I'm through with you, you'll be as pregnant as I!" - <br><br> - "Oh noo, I'm about to be impregnated by a godde<<ss>>," + girl?" she says beatifically. "When I'm through with you, you'll be as pregnant as I!" + <br><br> + "Oh noo, I'm about to be impregnated by a godde<<ss>>," <<case "hypergoddess">> - girl?" she says beatifically. "When I'm through with you, you'll be struggling to move!" - <br><br> - "Oh noo, I'm about to be bur<<s>>t by a <<s>>lut godde<<ss>>," + girl?" she says beatifically. "When I'm through with you, you'll be struggling to move!" + <br><br> + "Oh noo, I'm about to be bur<<s>>t by a <<s>>lut godde<<ss>>," <<case "loli">> - girl?" she says cutely. "If you think I'm so cute, why don't you lick my pussy?" - <br><br> - "Oh noo, I'm about to be dominated by a loli," + girl?" she says cutely. "If you think I'm so cute, why don't you lick my pussy?" + <br><br> + "Oh noo, I'm about to be dominated by a loli," <<case "preggololi">> - girl?" she says cutely. "If you think I'm so cute, why don't you lick my pussy?" - <br><br> - "Oh noo, I'm about to be dominated by a <<s>>lutty loli," + girl?" she says cutely. "If you think I'm so cute, why don't you lick my pussy?" + <br><br> + "Oh noo, I'm about to be dominated by a <<s>>lutty loli," <<case "angel">> girl?" she says beatifically. "I'm going to show you divine skill!" <br><br> "Oh noo, I'm going to be taken to heaven," <<case "cherub">> - cutie?" she says cutely, already reaching down to start schlicking away. "You get to be my best friend for the evenging!" + cutie?" she says cutely, already reaching down to start schlicking away. "You get to be my best friend for the evening!" <br><br> "Oh noo, I'm going to get bapti<<s>>ed by a <<s>>quirting little angel," <<case "incubus">> @@ -14255,7 +14370,7 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part <br><br> "Oh noo, I'd better <<s>>tart licking if I don't want to <<s>>uffer," <<case "witch">> - sexy?" she says eagerly, hiking her dress to reveal a squirming cock. "For once a spell gone wrong is workign out!" + sexy?" she says eagerly, hiking her dress to reveal a squirming cock. "For once a spell gone wrong is working out!" <br><br> "Oh noo, I'm going to get violated by a terrible witch," <<case "ERROR_1606_APPEARANCE_FILE_CORRUPT">> @@ -14268,149 +14383,225 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part The next slave on the inspection enters and approaches you, sitting imperturbably behind your desk, but stops and stares when she notices what's going on in the corner of your office. A wall screen in the corner shows $assistantName's avatar <<switch $assistantAppearance>> <<case "monstergirl">> - with both her cocks up the asshole of an avatar of $activeSlave.slaveName. Below this, the slave herself is face-down<<if $activeSlave.preg > 20>>, her rear up in the air to give her pregnancy room<</if>>, with two fuckmachines pounding - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - her: one in the pussy, one in the ass. - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <<else>> - her ass. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> + with both her cocks up the asshole of an avatar of $activeSlave.slaveName. Below this, the slave herself is + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + with two fuckmachines pounding + <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> + her: one in the pussy, one in the ass. + <<set $activeSlave.vaginalCount++, $vaginalTotal++, $activeSlave.analCount++, $analTotal++>> + <<elseif canDoVaginal($activeSlave)>> + her pussy. + <<set $activeSlave.vaginalCount += 2, $vaginalTotal += 2>> + <<else>> + her ass. + <<set $activeSlave.analCount += 2, $analTotal += 2>> + <</if>> <<case "shemale">> - with her third leg inside - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - the pussy of an avatar of $activeSlave.slaveName. Below this, the slave herself is taking vaginal from a fuckmachine with an absurdly big dildo. - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - the ass of an avatar of $activeSlave.slaveName. Below this, the slave herself is taking anal from a fuckmachine with an absurdly big dildo. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> + with her third leg inside + <<if canDoVaginal($activeSlave)>> + the pussy of an avatar of $activeSlave.slaveName. Below this, the slave herself is taking vaginal from a fuckmachine with an absurdly big dildo. + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + the ass of an avatar of $activeSlave.slaveName. Below this, the slave herself is taking anal from a fuckmachine with an absurdly big dildo. + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> <<case "amazon">> - powerfully fucking an avatar of $activeSlave.slaveName with a beautiful carved bone and worked leather strap-on. - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - Below this, the slave herself is taking hard vaginal from a fuckmachine. - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - Below this, the slave herself is taking hard anal from a fuckmachine. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> + powerfully fucking an avatar of $activeSlave.slaveName with a beautiful carved bone and worked leather strap-on. + <<if canDoVaginal($activeSlave)>> + Below this, the slave herself is taking hard vaginal from a fuckmachine. + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + Below this, the slave herself is taking hard anal from a fuckmachine. + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> <<case "businesswoman" "schoolgirl" "loli" "preggololi" "angel" "cherub">> - being eaten out by an avatar of $activeSlave.slaveName, who is touching herself in turn. Below this, the slave herself is performing oral on a realistic fake pussy while masturbating. - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + being eaten out by an avatar of $activeSlave.slaveName, who is touching herself in turn. Below this, the slave herself is performing oral on a realistic fake pussy while masturbating. + <<set $activeSlave.oralCount++, $oralTotal++>> <<case "fairy">> <<if $activeSlave.height < 35>> <<if $activeSlave.dick > 0>>bouncing on $activeSlave.slaveName's lap and eagerly taking her cock, finally enjoying sex with someone her size. Below this, the slave herself is thrusting into a 'realistic' tiny fairy doll, bloated with cum.<<else>>legs tied to one another as they scissor enthusiastically, covered in sexual fluids from the waist down, Below this, the slave herself is grinding away between a 'realistic' tiny fairy doll's legs.<</if>> <<else>> - bouncing on $activeSlave.slaveName's <<if $activeSlave.dick > 0>>cock, distending her belly with each thrust<<else>>hard clit<</if>> while a vine is gently penetrating below her. Below this, the slave herself is thrusting into a 'realistic' tiny fairy doll pussy <<if $activeSlave.dick > 0>>bloated with cum<</if>> while a flexible dildo gently thrusts into her ass. It's an ejaculating model, and it's currently pumping a large volume of semen into her ass. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + bouncing on $activeSlave.slaveName's <<if $activeSlave.dick > 0>>cock, distending her belly with each thrust<<else>>hard clit<</if>> while a vine is gently penetrating below her. Below this, the slave herself is thrusting into a 'realistic' tiny fairy doll pussy <<if $activeSlave.dick > 0>>bloated with cum<</if>> while a flexible dildo gently thrusts into her + <<if canDoVaginal($activeSlave)>> + pussy. It's an ejaculating model, and it's currently pumping a large volume of semen into her cunt. + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + ass. It's an ejaculating model, and it's currently pumping a large volume of semen into her ass. + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> <</if>> <<case "pregnant fairy">> <<if $activeSlave.height < 35>> <<if $activeSlave.dick > 0>>lying on her back as $activeSlave.slaveName gently thrusts into her, legs locked around her waist. $activeSlave.slaveName enjoys running her hands over the fairy's pregnant belly as she leans in to suckle on the fairy's breasts. Below this, the slave herself is thrusting into a 'realistic' tiny fairy doll, the pregnant belly swelling a little larger with every ejaculation.<<else>>legs tied to one another as they scissor gently, covered in sexual fluids from the waist down. $activeSlave.slaveName enjoys rubbing and kissing the pregnant belly from time to time. Below this, the slave herself is grinding away between a 'realistic' tiny fairy doll's legs.<</if>> <<else>> cradling her belly as she's being eaten out by an avatar of $activeSlave.slaveName, who is being double penetrated by a couple of vines. Below this, the slave herself is performing oral on a 'realistic' tiny fairy doll pussy while being penetrated by two flexible dildos. They're an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> - <<if $activeSlave.vagina > 0>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + <<set $activeSlave.oralCount++, $oralTotal++>> + <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> + <<set $activeSlave.vaginalCount++, $vaginalTotal++, $activeSlave.analCount++, $analTotal++>> + <<elseif canDoVaginal($activeSlave)>> + <<set $activeSlave.vaginalCount += 2, $vaginalTotal += 2>> <<else>> - <<set $activeSlave.analCount += 2>> - <<set $analTotal += 2>> + <<set $activeSlave.analCount += 2, $analTotal += 2>> <</if>> <</if>> <<case "goddess">> - gently making love to an avatar of $activeSlave.slaveName, whose <<if $activeSlave.preg > 20>>pregnant belly is growing ever more full of children<<else>>belly is becoming distended<</if>>. Below this, the slave herself is taking a fuckmachine - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - in her cunt; - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - up her butt; - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> - it's an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. + gently making love to an avatar of $activeSlave.slaveName, whose + <<if $activeSlave.bellyPreg >= 1500>> + _belly pregnant belly is growing ever more full of children. + <<elseif $activeSlave.belly >= 1500>> + _belly belly is growing ever larger and kicks begin to dot its surface. + <<else>> + belly is becoming distended. + <</if>> + Below this, the slave herself + <<if isItemAccessible("a huge empathy belly") && $activeSlave.belly < 1500 && $activeSlave.weight <= 130>> + has a huge empathy belly hanging from her middle and is + <<else>> + is + <</if>> + taking a fuckmachine + <<if canDoVaginal($activeSlave)>> + in her cunt; + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + up her butt; + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> + it's an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. <<case "hypergoddess">> - gently making love to an avatar of $activeSlave.slaveName, whose <<if $activeSlave.preg > 20>>pregnant belly is growing taut and beginning to bulge from the amount of children growing within her<<else>>belly is becoming massively distended<</if>>. Below this, the slave herself is taking a fuckmachine - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - in her cunt; - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - up her butt; - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> - it's an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. + gently making love to an avatar of $activeSlave.slaveName, whose + <<if $activeSlave.bellyPreg >= 450000>> + _belly pregnant belly is rapidly ballooning with life and pushing her upwards from the sheer size of the squirming mass. + <<elseif $activeSlave.bellyPreg >= 1500>> + _belly pregnant belly is growing taut and beginning to bulge from the amount of children growing within her. + <<elseif $activeSlave.belly >= 1500>> + _belly belly is growing taut and beginning to bulge from the amount of children growing within her. + <<else>> + belly is becoming massively distended. + <</if>> + Below this, the slave herself + <<if isItemAccessible("a huge empathy belly") && $activeSlave.belly < 1500 && $activeSlave.weight <= 130>> + has a huge empathy belly hanging from her middle and is + <<else>> + is + <</if>> + taking a fuckmachine + <<if canDoVaginal($activeSlave)>> + in her cunt; + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + up her butt; + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> + it's an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. <<case "incubus">> - powerfully fucking an avatar of $activeSlave.slaveName with a dick sized to perfectly fill her. - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - Below this, the slave herself is taking hard vaginal from a fuckmachine; - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - Below this, the slave herself is taking hard anal from a fuckmachine; - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> - it's an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. + powerfully fucking an avatar of $activeSlave.slaveName with a dick sized to perfectly fill her. + <<if canDoVaginal($activeSlave)>> + Below this, the slave herself is taking hard vaginal from a fuckmachine; + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + Below this, the slave herself is taking hard anal from a fuckmachine; + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> + it's an ejaculating model, and it's filled her so completely that each thrust sends a gush of fake cum down her legs to join the puddle on the floor. <<case "succubus">> <<if canPenetrate($activeSlave)>> - riding $activeSlave.slaveName's dick. Below this, the slave herself humping a realistic fake pussy build into a finely crafted female lower body. - <<set $activeSlave.penetrativeCount += 1>> - <<set $penetrativeTotal += 1>> + riding $activeSlave.slaveName's dick. Below this, the slave herself humping a realistic fake pussy built into a finely crafted female lower body. + <<set $activeSlave.penetrativeCount++, $penetrativeTotal++>> <<else>> being eaten out by an avatar of $activeSlave.slaveName, who is touching herself in turn. Below this, the slave herself is performing oral on a realistic fake pussy while masturbating. - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + <<set $activeSlave.oralCount++, $oralTotal++>> <</if>> <<case "imp">> - being eaten out by an avatar of $activeSlave.slaveName, who is touching herself in turn while the imp yanks a chain connected to her nipples with one hand and smacks her with a riding crop with the other. Below this, the slave herself is performing oral on a realistic fake pussy while masturbating; a pair of clamps attached to her nipples randomly jerking and a whip lined wheel steadily slapping at her ass and back. - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + being eaten out by an avatar of $activeSlave.slaveName, who is touching herself in turn while the imp yanks a chain connected to her nipples with one hand and smacks her with a riding crop with the other. Below this, the slave herself is performing oral on a realistic fake pussy while masturbating; a pair of clamps attached to her nipples randomly jerking and a whip lined wheel steadily slapping at her ass and back. + <<set $activeSlave.oralCount++, $oralTotal++>> <<case "witch">> - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - with her prehensile cocks crammed into every available hole in an avatar of $activeSlave.slaveName. Below this, the slave herself is face-down<<if $activeSlave.preg > 20>>, her rear up in the air to give her pregnancy room<</if>>, with multiple vibrating dildos quivering in her ass and pussy. - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <<else>> - with her prehensile cocks crammed into the asshole of an avatar of $activeSlave.slaveName. Below this, the slave herself is face-down<<if $activeSlave.preg > 20>>, her rear up in the air to give her pregnancy room<</if>>, with multiple vibrating dildos quivering in her ass. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> + <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> + with her prehensile cocks crammed into every available hole in an avatar of $activeSlave.slaveName. Below this, the slave herself is + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + with multiple vibrating dildos quivering in her ass and pussy. + <<set $activeSlave.vaginalCount += 2, $vaginalTotal += 2, $activeSlave.analCount += 2, $analTotal += 2>> + <<elseif canDoVaginal($activeSlave)>> + with her prehensile cocks crammed into every available hole in an avatar of $activeSlave.slaveName. Below this, the slave herself is + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + with multiple vibrating dildos quivering in her pussy. + <<set $activeSlave.vaginalCount += 4, $vaginalTotal += 4>> + <<else>> + with her prehensile cocks crammed into the asshole of an avatar of $activeSlave.slaveName. Below this, the slave herself is + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + with multiple vibrating dildos quivering in her ass. + <<set $activeSlave.analCount += 4, $analTotal += 4>> + <</if>> <<case "ERROR_1606_APPEARANCE_FILE_CORRUPT">> with her tentacles crammed into every available hole in an avatar of $activeSlave.slaveName, rapidly pumping eggs into her quickly swelling body. - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - Below this, the slave herself is face-down<<if $activeSlave.preg > 20>>, her rear up in the air to give her pregnancy room<</if>>, while a fuckmachine powerfully fucks her mouth, ass and pussy. - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> - <<else>> - Below this, the slave herself is face-down<<if $activeSlave.preg > 20>>, her rear up in the air to give her pregnancy room<</if>>, with multiple vibrating dildos quivering in her ass. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> - <</if>> - At different intervals, an undulation moves down the dildo, forcing her to stretch wide to allow it to pass into her body. Each "egg" forces into her coincides with another blast from the ejaculating model and it's filled her so completely that each gush of fake cum flows down her legs to join the puddle on the floor. + <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> + Below this, the slave herself + <<if isItemAccessible("a huge empathy belly") && $activeSlave.belly < 1500 && $activeSlave.weight <= 130>> + has a huge empathy belly strapped to her middle and is + <</if>> + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + while a fuckmachine powerfully fucks her mouth, ass and pussy. + <<set $activeSlave.vaginalCount += 4, $vaginalTotal += 4, $activeSlave.analCount += 4, $analTotal += 4, $activeSlave.oralCount += 3, $oralTotal += 3>> + <<elseif canDoVaginal($activeSlave)>> + Below this, the slave herself + <<if isItemAccessible("a huge empathy belly") && $activeSlave.belly < 1500 && $activeSlave.weight <= 130>> + has a huge empathy belly strapped to her middle and is + <</if>> + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + with multiple vibrating dildos quivering in her pussy. + <<set $activeSlave.vaginalCount += 8, $vaginalTotal += 8, $activeSlave.oralCount += 3, $oralTotal += 3>> + <<else>> + Below this, the slave herself + <<if isItemAccessible("a huge empathy belly") && $activeSlave.belly < 1500 && $activeSlave.weight <= 130>> + has a huge empathy belly strapped to her middle and is + <</if>> + <<if $activeSlave.belly >= 5000>> + face-down, perched atop her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>>, + <<elseif $activeSlave.belly >= 5000>> + face-down, her rear up in the air to give her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> room, + <<else>> + face-down, + <</if>> + with multiple vibrating dildos quivering in her ass. + <<set $activeSlave.analCount += 8, $analTotal += 8, $activeSlave.oralCount += 3, $oralTotal += 3>> + <</if>> + At different intervals, an undulation moves down the dildo, forcing her to stretch wide to allow it to pass into her body. Each "egg" forces into her coincides with another blast from the ejaculating model and it's filled her so completely that each gush of fake cum flows down her legs to join the puddle on the floor. <</switch>> "@@.hotpink;Good girl,@@" $assistantName says. The new slave turns resolutely away from the arresting sight and gets on with the inspection, doing her best to ignore the lewd noises coming from that part of the room. <<set $activeSlave.devotion += 4>> @@ -14422,23 +14613,23 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part You tell $activeSlave.slaveName that she and your personal assistant really should get a room. She looks at $assistantName's avatar, and then back up at you. She gives you a mischievous look, and then bends down to whisper to the avatar behind her hand. <<switch $assistantAppearance>> <<case "monstergirl">> - "Why not," the monstergirl chuckles, + "Why not," the monstergirl chuckles, <<case "shemale">> - "Oh yeah, sure," the shemale giggles, + "Oh yeah, sure," the shemale giggles, <<case "amazon">> - "Fuck yes," the amazon exclaims, + "Fuck yes," the amazon exclaims, <<case "businesswoman">> - "Because you asked," the businesswoman says, + "Because you asked," the businesswoman says, <<case "fairy" "pregnant fairy">> - "Of course, cutie!" the fairy giggles, + "Of course, cutie!" the fairy giggles, <<case "schoolgirl">> - "Aw, hot! Of course," the schoolgirl giggles, + "Aw, hot! Of course," the schoolgirl giggles, <<case "goddess" "hypergoddess">> - "Oh, lovely," the goddess says beatifically, + "Oh, lovely," the goddess says beatifically, <<case "loli">> - "K-kay," the loli says naively, + "K-kay," the loli says naively, <<case "preggololi">> - "Okay," the loli says excitedly, + "Okay," the loli says excitedly, <<case "angel">> "What? But..." the angel says reluctantly, <<case "cherub">> @@ -14458,58 +14649,54 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part <br><br> Several minutes later, $assistantName's avatar reappears on your desk, <<if ($activeSlave.fetishKnown == 0) || ($activeSlave.fetish == "none")>> - making love to an avatar of $activeSlave.slaveName. + making love to an avatar of $activeSlave.slaveName. <<elseif $activeSlave.fetish == "buttslut">> - fucking an avatar of $activeSlave.slaveName up the ass. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar, which is a little overwhelmed, waves weakly. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + fucking an avatar of $activeSlave.slaveName up the ass. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar, which is a little overwhelmed, waves weakly. + <<if canDoAnal($activeSlave)>> + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> <<elseif $activeSlave.fetish == "cumslut">> - getting oral from an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves, since her mouth is full. - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + getting oral from an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves, since her mouth is full. + <<set $activeSlave.oralCount++, $oralTotal++>> <<elseif $activeSlave.fetish == "sadist">> - getting spanked by an avatar of $activeSlave.slaveName. "Oh, ah, e-excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>, ow," she says, and the slave's avatar waves. + getting spanked by an avatar of $activeSlave.slaveName. "Oh, ah, e-excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>, ow," she says, and the slave's avatar waves. <<elseif $activeSlave.fetish == "masochist">> - raining spanks on an avatar of $activeSlave.slaveName as it kisses and licks her lower legs. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves weakly, since her mouth is busy. - <<set $activeSlave.oralCount += 1>> - <<set $oralTotal += 1>> + raining spanks on an avatar of $activeSlave.slaveName as it kisses and licks her lower legs. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves weakly, since her mouth is busy. + <<set $activeSlave.oralCount++, $oralTotal++>> <<elseif $activeSlave.fetish == "dom">> - getting fucked by an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves cheerily. - <<set $activeSlave.penetrativeCount += 1>> - <<set $penetrativeTotal += 1>> + getting fucked by an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves cheerily. + <<set $activeSlave.penetrativeCount++, $penetrativeTotal++>> <<elseif $activeSlave.fetish == "submissive">> - along with a crowd of copies of herself. They're gangbanging an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves weakly. - <<set $activeSlave.oralCount += 5>> - <<set $oralTotal += 5>> - <<set $activeSlave.analCount += 5>> - <<set $analTotal += 5>> + along with a crowd of copies of herself. They're gangbanging an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar waves weakly. + <<set $activeSlave.oralCount += 5, $oralTotal += 5>> + <<if canDoAnal($activeSlave)>> + <<set $activeSlave.analCount += 5, $analTotal += 5>> + <</if>> + <<if canDoVaginal($activeSlave)>> + <<set $activeSlave.vaginalCount += 5, $vaginalTotal += 5>> + <</if>> <<elseif $activeSlave.fetish == "boobs">> - kissing and sucking the nipples of an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she breaks off to say, and the slave's avatar waves. - <<set $activeSlave.mammaryCount += 1>> - <<set $mammaryTotal += 1>> + kissing and sucking the nipples of an avatar of $activeSlave.slaveName. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she breaks off to say, and the slave's avatar waves. + <<set $activeSlave.mammaryCount++, $mammaryTotal++>> <<elseif $activeSlave.fetish == "pregnancy">> - <<switch $assistantAppearance>> - <<case "goddess" "hypergoddess" "incubus" "ERROR_1606_APPEARANCE_FILE_CORRUPT">> - fucking a heavily pregnant avatar of $activeSlave.slaveName, each thrust producing the lewd sound of a cum-filled hole being fucked. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, thrusting hard and swelling her partner's belly a bit more; the slave's avatar, which is a little overwhelmed and very full, waves weakly, before returning her hand to her overfilled middle. - <<default>> - fucking an avatar of $activeSlave.slaveName, each thrust producing the lewd sound of a cum-filled hole being fucked. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar, which is a little overwhelmed, waves weakly. - <</switch>> - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> + <<switch $assistantAppearance>> + <<case "goddess" "hypergoddess" "incubus" "ERROR_1606_APPEARANCE_FILE_CORRUPT">> + fucking a heavily pregnant avatar of $activeSlave.slaveName, each thrust producing the lewd sound of a cum-filled hole being fucked. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, thrusting hard and swelling her partner's belly a bit more; the slave's avatar, which is a little overwhelmed and very full, waves weakly, before returning her hand to her overfilled middle. + <<default>> + fucking an avatar of $activeSlave.slaveName, each thrust producing the lewd sound of a cum-filled hole being fucked. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and the slave's avatar, which is a little overwhelmed, waves weakly. + <</switch>> + <<if canDoVaginal($activeSlave)>> + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> <<else>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + <<set $activeSlave.analCount++, $analTotal++>> <</if>> <<else>> - making sweet love to an avatar of $activeSlave.slaveName, in the missionary position. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and then goes back to kissing the slave's delighted avatar. - <<if ($activeSlave.vagina > 0) && canDoVaginal($activeSlave)>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> + making sweet love to an avatar of $activeSlave.slaveName, in the missionary position. "Excellent idea, <<if $PC.title == 1>>Sir<<else>>Ma'am<</if>>," she says, and then goes back to kissing the slave's delighted avatar. + <<if canDoVaginal($activeSlave)>> + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<else>> + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> <</if>> $activeSlave.slaveName probably isn't thinking about how far this is from vanilla human sexuality at the moment. But if she took a moment to reflect, you muse, she might be surprised at what @@.mediumaquamarine;she's learned to be comfortable with.@@ <<set $activeSlave.trust += 4>> @@ -14521,14 +14708,79 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part <<link "Address her problem together">> <<EventNameDelink $activeSlave>> <<replace "#result">> - You step in and give her a quick kiss on the lips, telling her you'd be happy to. She was confident you would, but the tenderness makes her breath catch a little. You take her by her <<if $activeSlave.muscles > 30>>strong<<elseif $activeSlave.shoulders < 0>>pretty little<<elseif $activeSlave.shoulders > 1>>broad<<else>>feminine<</if>> shoulders and keep kissing her, steering her backwards into your office. She gets the idea and cooperates as best she can, giggling <<if $activeSlave.voice == 0>>mutely<<else>>cutely<</if>> into your mouth as her hot and increasingly horny body bumps against your own. + You step in and give her a quick kiss on the lips, telling her you'd be happy to. She was confident you would, but the tenderness makes her breath catch a little. You take her by her + <<if $activeSlave.weight > 130>> + fat + <<elseif $activeSlave.weight > 95>> + chubby + <<elseif $activeSlave.muscles > 30>> + strong + <<elseif $activeSlave.shoulders < 0>> + pretty little + <<elseif $activeSlave.shoulders > 1>> + broad + <<else>> + feminine + <</if>> + shoulders and keep kissing her, steering her backwards into your office. She gets the idea and cooperates as best she can, giggling <<if $activeSlave.voice == 0>>mutely<<else>>cutely<</if>> into your mouth as her hot and increasingly horny body bumps against your own. <br><br> - When her <<if $activeSlave.butt > 7>>titanic ass<<elseif $activeSlave.butt > 4>>big butt<<else>>cute rear<</if>> touches the edge of your desk, the <<if $activeSlave.height > 180>>tall $desc leans back<<elseif $activeSlave.height > 155>>$desc reclines<<else>>short $desc hops up<</if>> to lie across it, using a hand to lay her inhumanly big dick <<if $activeSlave.boobs > 5000>>in the warm canyon formed by her inhumanly big boobs<<elseif $activeSlave.preg > 10>>against the underside of her tautly pregnant belly<<elseif $activeSlave.muscles > 30>>across her ripped abs<<elseif $activeSlave.weight > 10>>across her plush stomach<<else>>up her stomach<</if>>. She spreads her legs as wide as they'll go, and reaches down to spread her buttocks even wider, offering you her <<if $activeSlave.vagina > -1>>her holes<<else>>her asshole<</if>>. She <<if $activeSlave.voice == 0>>tries to groan<<else>>groans<</if>> with anticipation of the coming relief as you slide <<if $PC.dick == 1>>your cock<<else>>a strap-on<</if>> past her <<if $activeSlave.vagina > -1>>pussylips and inside her womanhood<<else>>sphincter and inside her asspussy<</if>>. + When her + <<if $activeSlave.butt > 12>> + monumental ass + <<elseif $activeSlave.butt > 7>> + titanic ass + <<elseif $activeSlave.butt > 4>> + big butt + <<else>> + cute rear + <</if>> + touches the edge of your desk, the + <<if $activeSlave.height > 180>> + tall $desc leans back + <<elseif $activeSlave.height > 155>> + $desc reclines + <<else>> + short $desc hops up + <</if>> + to lie across it, using a hand to lay her inhumanly big dick + <<if $activeSlave.belly > 10000>> + onto her _belly <<if $activeSlave.bellyPreg > 0>>pregnant <</if>>belly. + <<elseif $activeSlave.weight > 160>> + across her gut. + <<elseif $activeSlave.boobs > 5000>> + in the warm canyon formed by her inhumanly big boobs. + <<elseif $activeSlave.weight > 95>> + across her soft belly. + <<elseif $activeSlave.belly > 1500>> + over her _belly <<if $activeSlave.bellyPreg > 0>>pregnant <</if>>belly. + <<elseif $activeSlave.muscles > 30>> + across her ripped abs. + <<elseif $activeSlave.weight > 10>> + across her plush stomach. + <<else>> + up her stomach. + <</if>> + She spreads her legs as wide as they'll go, and reaches down to spread her buttocks even wider, offering you her + <<if canDoVaginal($activeSlave) && canDoAnal($activeSlave)>> + her holes. + <<elseif canDoVaginal($activeSlave)>> + her pussy. + <<else>> + her asshole. + <</if>> + She <<if $activeSlave.voice == 0>>tries to groan<<else>>groans<</if>> with anticipation of the coming relief as you slide <<if $PC.dick == 1>>your cock<<else>>a strap-on<</if>> past her + <<if canDoVaginal($activeSlave)>> + pussylips and inside her womanhood. + <<VaginalVCheck>> + <<else>> + sphincter and inside her asspussy. + <<AnalVCheck>> + <</if>> <br><br> It doesn't take long. Her <<if $activeSlave.scrotum == 0>>invisible but overfull balls<<else>>balls tighten and<</if>> shoot cum into her soft python of a dick, but not a drop appears at its tip. Gasping at the mixed relief and discomfort, she lets her butt go and wriggles around to grab her dick around its base with both hands. She squeezes it from base to tip to bring out its contents. She's so huge that she's able to reach down with her lips and get her cockhead into her mouth, the meat filling it entirely. She sucks industriously, swallowing her own load. She was just trying to relieve the pressure, but the added stimulation brings her to climax again. Silenced by her own dickhead, she shudders deliciously and starts over, wringing more cum into her own mouth. You change angles, bringing the hard head of <<if $PC.dick == 1>>your own penis<<else>>your phallus<</if>> against her prostate and forcing an agonizing third climax. <br><br> She's so discombobulated by this that she goes limp, offering no resistance as you extract yourself, <<if $PC.dick == 1>>straddle her torso, and press your dick inside her mouth to climax there, adding your own ejaculate<<else>>slip out of the harness with the ease of long practice, and straddle her face so that your climax adds a good quantity of your pussyjuice<</if>> to everything she's already gotten down<<if $PC.vagina == 1>><<if $PC.dick == 1>> and leaving quite a lot of your pussyjuice on her chin<</if>><</if>>. When you finally release her, she slithers down to the floor, utterly spent. - <<if canTalk($activeSlave) == false>> + <<if !canTalk($activeSlave)>> She raises a shaky hand to @@.mediumaquamarine;gesture thanks.@@ <<elseif SlaveStatsChecker.checkForLisp($activeSlave)>> "@@.mediumaquamarine;Thank you,@@ <<Master>>," she lisps weakly. @@ -14536,13 +14788,6 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part "@@.mediumaquamarine;Thank you,@@ <<Master>>," she murmurs in a tiny voice. <</if>> <<set $activeSlave.trust += 4>> - <<if $activeSlave.vagina > -1>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<else>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> - <</if>> <</replace>> <</link>> <br><<link "Use her trouble to dominate her">> @@ -14550,22 +14795,57 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part <<replace "#result">> You step in and trace a <<if $PC.title == 1>>strong<<else>>feminine<</if>> hand across her lips before inserting two fingers into her mouth. She looks puzzled, but obediently begins to suck on your fingers. You use your other hand to explore her body, titillating the heavily aroused $desc until she's on the verge of orgasm. Without warning, you place an elastic band around the slave's dickhead. She writhes with discomfort, but knows better than to protest. It's tight, but not agonizingly so. She'll be able to cum, but not a drop will get out. Grabbing her by a nipple, you pull her down to her knees, enjoying the motion of her body as she wriggles with the discomfort of being tugged this way, the uncomfortable thing squeezing the tip of her cock, and the suspicion that this is going to be tough. <br><br> - Once she's in position, you <<if $activeSlave.butt > 7>>heft her ridiculous buttcheeks possessively<<elseif $activeSlave.butt > 4>>give her huge ass a possessive squeeze<<else>>run your hands across her bottom<</if>>, and then shove <<if $PC.dick == 1>>your cock<<else>>a strap-on<</if>> <<if $activeSlave.vagina > -1>>inside her cunt<<else>>up her butt<</if>>. Her cock is so long that it drags along the floor as you pound her<<if $activeSlave.boobs > 12000>>, her enormous tits serving as a cushion for her torso to rest against<<elseif $activeSlave.boobs > 7000>>, accompanied by the nipples that cap her absurd boobs<</if>>. + Once she's in position, you + <<if $activeSlave.butt > 12>> + sturggle to wrap you arms around her bountiful buttcheeks, + <<elseif $activeSlave.butt > 7>> + heft her ridiculous buttcheeks possessively, + <<elseif $activeSlave.butt > 4>> + give her huge ass a possessive squeeze, + <<else>> + run your hands across her bottom, + <</if>> + and then shove <<if $PC.dick == 1>>your cock<<else>>a strap-on<</if>> + <<if canDoVaginal($activeSlave)>> + inside her cunt. + <<VaginalVCheck>> + <<else>> + up her butt. + <<AnalVCheck>> + <</if>> + Her cock is so long that it drags along the floor as you pound + <<if $activeSlave.belly >= 300000>> + her against her _belly dome of a stomach. + <<elseif $activeSlave.boobs > 12000>> + her, her enormous tits serving as a cushion for her torso to rest against. + <<elseif $activeSlave.boobs > 7000>> + her, accompanied by the nipples that cap her absurd boobs. + <<else>> + her. + <</if>> <br><br> She's so pent up that she reaches her first climax quickly, filling her capped dick with cum. She <<if $activeSlave.voice == 0>>tries to moan<<else>>moans<</if>> at the combination of relief and pressure inside her dick, and then slumps a little when she feels the <<if $PC.dick == 1>>penis<<else>>hard phallus<</if>> inside her fuck her even harder, forcing her towards a second orgasm. And after that one, a third. And a fourth. <br><br> - When you finally climax yourself, you stand, leaving her writhing at your feet with her huge soft cock positively pressurized. Considering the situation, you kneel down at her side, deciding what to do. Stroking her in a mockery of reassurance, you grab her agonized member, producing a <<if $activeSlave.voice == 0>>gaping, silent scream<<else>>little shriek<</if>>. You maneuver the massive thing inside the slave's own well-fucked <<if $activeSlave.vagina > -1>>pussy<<else>>asshole<</if>>, and then slide fingers in alongside the monstrous thing as she <<if $activeSlave.voice == 0>>cries desperately<<else>>begs abjectly for mercy<</if>>. Popping the elastic off, you get to watch her face as she floods her own <<if $activeSlave.vagina > -1>>womanhood<<else>>bowels<</if>> with cum. The cum pressurization brought her almost to half-hardness, and as this effect diminishes, her dick slides out again, releasing a lewd torrent of cum. She cries with overstimulation, relief, pain, and humiliation, @@.hotpink;groveling below you@@ in utter subjugation. - <<set $activeSlave.devotion += 4>> - <<if $activeSlave.vagina > -1>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> - <<if canGetPregnant($activeSlave) && canBreed($activeSlave, $activeSlave) && $activeSlave.vasectomy != 1>> /* can't miss the opportunity to knock herself up */ - <<KnockMeUp $activeSlave 20 0 $activeSlave.ID>> + When you finally climax yourself, you stand, leaving her writhing at your feet with her huge soft cock positively pressurized. Considering the situation, you kneel down at her side, deciding what to do. Stroking her in a mockery of reassurance, you grab her agonized member, producing a <<if $activeSlave.voice == 0>>gaping, silent scream<<else>>little shriek<</if>>. + <<if $activeSlave.toyHole == "dick" && ($PC.preg == 0 || $PC.vagina == 0)>> + You maneuver the massive thing into your own <<if $PC.preg == 0 && $PC.vagina == 1>>pussy<<else>>asshole<</if>>, slide a finger in alongside the monstrous thing as she <<if $activeSlave.voice == 0>>moans with expectation<<else>>begs abjectly to unleash her<</if>>, and pop the elastic off. You get to watch her face as she floods your <<if $PC.preg == 0 && $PC.vagina == 1>>womanhood<<else>>bowels<</if>> with cum, your stomach taking on a distinctive swell as her pentup load empties into you. + <<set $activeSlave.penetrativeCount++, $penetrativeTotal++>> + <<if $PC.vagina == 1 && $PC.preg == 0 && $activeSlave.ballType == "human" && $activeSlave.vasectomy == 0>> + <<KnockMeUp $PC 50 0 $activeSlave.ID>> <</if>> <<else>> - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + You maneuver the massive thing inside the slave's own well-fucked <<if $activeSlave.vagina > -1>>pussy<<else>>asshole<</if>>, and then slide fingers in alongside the monstrous thing as she <<if $activeSlave.voice == 0>>cries desperately<<else>>begs abjectly for mercy<</if>>. Popping the elastic off, you get to watch her face as she floods her own <<if $activeSlave.vagina > -1>>womanhood<<else>>bowels<</if>> with cum. + <<if canDoVaginal($activeSlave)>> + <<set $activeSlave.vaginalCount++, $vaginalTotal++>> + <<if canGetPregnant($activeSlave) && canBreed($activeSlave, $activeSlave) && $activeSlave.vasectomy != 1>> /* can't miss the opportunity to knock herself up */ + <<KnockMeUp $activeSlave 20 0 $activeSlave.ID 1>> + <</if>> + <<else>> + <<set $activeSlave.analCount++, $analTotal++>> + <</if>> <</if>> + The cum pressurization brought her almost to half-hardness, and as this effect diminishes, her dick slides out again, releasing a lewd torrent of cum. She cries with overstimulation, relief, pain, and humiliation, @@.hotpink;groveling below you@@ in utter subjugation. + <<set $activeSlave.devotion += 4>> <</replace>> <</link>> @@ -14574,37 +14854,46 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part <<link "Make love to her">> <<EventNameDelink $activeSlave>> <<replace "#result">> - You crane your neck down and kiss her on the lips. She awakens slowly, gently, her $activeSlave.eyeColor eyes fluttering open, looking black in the nighttime gloom. She smiles into your mouth, and you feel her pulse quicken through the extensive contact down your bodies. You interlace your fingers between hers and turn, pressing her back down into the soft sheets. She opens herself for you, spreading her legs wide and embracing you with them, making sure to run her heels up the backs of your calves in a way that sends a shiver up your spine. Feeling this through your kissing mouths, she smiles into you, a pleased expression she maintains as you<<if $activeSlave.preg > 20>> shift into a position to better accommodate her pregnancy and<</if>> begin to gently press your womanhood against hers. + You crane your neck down and kiss her on the lips. She awakens slowly, gently, her $activeSlave.eyeColor eyes fluttering open, looking black in the nighttime gloom. She smiles into your mouth, and you feel her pulse quicken through the extensive contact down your bodies. You interlace your fingers between hers and turn, pressing her back down into the soft sheets. She opens herself for you, spreading her legs wide and embracing you with them, making sure to run her heels up the backs of your calves in a way that sends a shiver up your spine. Feeling this through your kissing mouths, she smiles into you, a pleased expression she maintains as you + <<if $activeSlave.belly >= 300000 && $PC.belly >= 5000>> + struggle to find a position to handle both your pregnancy and her <<if $activeSlave.bellyPreg >= 3000>>_belly gravid middle<<else>>_belly belly<</if>> and + <<elseif $activeSlave.belly >= 300000>> + struggle to find a position to handle her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>_belly belly<</if>> and + <<elseif $activeSlave.belly >= 5000 && $PC.belly >= 5000>> + shift into a position to better accommodate both your pregnancy and her <<if $activeSlave.bellyPreg >= 3000>>_belly gravid middle<<else>>_belly belly<</if>> and + <<elseif $PC.belly >= 5000>> + shift into a position to better accommodate your pregnancy and + <<elseif $activeSlave.belly >= 5000>> + shift into a position to better accommodate her <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>_belly belly<</if>> and + <</if>> + begin to gently press your womanhood against hers. <br><br> <<if ($activeSlave.fetishKnown == 0)>> - Knowing little about her sexual peccadilloes, but confident that she'll do her best to enjoy your lovemaking, you continue this shockingly intimate intercourse until she climaxes. + Knowing little about her sexual peccadilloes, but confident that she'll do her best to enjoy your lovemaking, you continue this shockingly intimate intercourse until she climaxes. <<elseif ($activeSlave.fetish == "none")>> - Knowing her to be quite endearingly vanilla, you continue this shockingly intimate intercourse until she climaxes, kissing her all the way through your soft missionary lovemaking. + Knowing her to be quite endearingly vanilla, you continue this shockingly intimate intercourse until she climaxes, kissing her all the way through your soft missionary lovemaking. <<elseif $activeSlave.fetish == "buttslut">> - Knowing her tastes and wanting the intimacy of mutual pleasure, you slide a hand around behind and under her so you can tease her ass. She gives her butt a little wiggle of thanks, and orgasms promptly. - <<set $activeSlave.analCount += 1>> - <<set $analTotal += 1>> + Knowing her tastes and wanting the intimacy of mutual pleasure, you slide a hand around behind and under her so you can tease her ass. She gives her butt a little wiggle of thanks, and orgasms promptly. + <<set $activeSlave.analCount++, $analTotal++>> <<elseif $activeSlave.fetish == "cumslut">> - Knowing her tastes and wanting the intimacy of mutual pleasure, you slide your tongue into her mouth, making your kisses so frankly sexual and penetrative that you're practically making oral love at the same time as you do it missionary style. + Knowing her tastes and wanting the intimacy of mutual pleasure, you slide your tongue into her mouth, making your kisses so frankly sexual and penetrative that you're practically making oral love at the same time as you do it missionary style. <<elseif $activeSlave.fetish == "sadist">> - You know her tastes, but by the act of this intimate missionary lovemaking, you wordlessly command her to join you for more conventional pleasures, if only for the moment. She complies with pleasure, climaxing with surprising speed; perhaps she appreciates the change. + You know her tastes, but by the act of this intimate missionary lovemaking, you wordlessly command her to join you for more conventional pleasures, if only for the moment. She complies with pleasure, climaxing with surprising speed; perhaps she appreciates the change. <<elseif $activeSlave.fetish == "masochist">> - Knowing her tastes and wanting the intimacy of mutual pleasure, you nip her lower lip in your teeth with each kiss, and rake your nails across her flanks just hard enough to hurt a little. She climaxes quickly to the mixed pain and missionary intimacy. + Knowing her tastes and wanting the intimacy of mutual pleasure, you nip her lower lip in your teeth with each kiss, and rake your nails across her flanks just hard enough to hurt a little. She climaxes quickly to the mixed pain and missionary intimacy. <<elseif $activeSlave.fetish == "dom">> - You know her tastes, but by the act of this intimate missionary lovemaking, you wordlessly command her to join you for more equal pleasures, if only for the moment. She complies with something like relief, climaxing with surprising speed; perhaps she appreciates a turn on the bottom. + You know her tastes, but by the act of this intimate missionary lovemaking, you wordlessly command her to join you for more equal pleasures, if only for the moment. She complies with something like relief, climaxing with surprising speed; perhaps she appreciates a turn on the bottom. <<elseif $activeSlave.fetish == "submissive">> - Being on the bottom for some missionary lovemaking is very much to her tastes, and she rises to the point of climax with almost indecent speed. You slow your pace to nothing more than a gentle pressure now and then, and keep her on the edge of orgasm for a long time. + Being on the bottom for some missionary lovemaking is very much to her tastes, and she rises to the point of climax with almost indecent speed. You slow your pace to nothing more than a gentle pressure now and then, and keep her on the edge of orgasm for a long time. <<elseif $activeSlave.fetish == "boobs">> - Knowing her tastes and wanting the intimacy of mutual pleasure, you make sure your nipples line up with hers as best you can. You note the buck of pleasure this produces each time you get it perfectly right as you make love to her. - <<elseif $activeSlave.fetish == "pregnancy" && $activeSlave.preg > 0>> - Being on the bottom for some missionary lovemaking is very much to her tastes, even though she is already pregnant. She builds to orgasm slowly, revelling in the feeling of being your woman. + Knowing her tastes and wanting the intimacy of mutual pleasure, you make sure your nipples line up with hers as best you can. You note the buck of pleasure this produces each time you get it perfectly right as you make love to her. + <<elseif $activeSlave.fetish == "pregnancy" && $activeSlave.pregKnown == 1>> + Being on the bottom for some missionary lovemaking is very much to her tastes, even though she is already pregnant. She builds to orgasm slowly, revelling in the feeling of being your woman. <<elseif $activeSlave.fetish == "pregnancy">> - Being on the bottom for some missionary lovemaking is very much to her tastes, even though the encounter isn't particularly likely to get her pregnant. She builds to orgasm slowly, revelling in the feeling of being your woman. + Being on the bottom for some missionary lovemaking is very much to her tastes, even though the encounter isn't particularly likely to get her pregnant. She builds to orgasm slowly, revelling in the feeling of being your woman. <</if>> As you made love to her, the gentle motions, feminine sighs, and delicate aroma of pleasure woke the other girls in bed with you, and they began their own intimacy with each other. As you go back to sleep, you're surrounded with something very like Sapphic paradise. $activeSlave.slaveName nestles up to you once more, embracing you with @@.mediumaquamarine;trust born of love.@@ - <<set $activeSlave.trust += 4>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> + <<set $activeSlave.trust += 4, $activeSlave.vaginalCount++, $vaginalTotal++>> <</replace>> <</link>> <br><<link "Fuck her">> @@ -14612,10 +14901,14 @@ She's obviously @@.mediumaquamarine;becoming more comfortable@@ playing the part <<replace "#result">> You feel your libido building, building, building within you, an endless cycle that mounts rapidly to an inevitable explosion. It comes, and you perform a catlike glide around until your head is at her feet. As you did, you infiltrated one of your legs between hers from its convenient starting point. She wakes suddenly to the feeling of being manhandled, and then comes fully awake to the shockingly intimate sensation of your pussies pressed together as closely as physically possible. <br><br> - Holding her upper thighs with your hands to pull her against you, you grind into her, fucking her about as comprehensively as it's possible for someone without a cock to fuck a woman. She's most definitely up for it, and you see her eyes fly wide in the gloom as the full weight of the pleasure crashes into her. It's not exactly a position for lovemaking, since your faces are about as far apart as they can possibly be during sex, but kissing be damned, you're here to fuck. Naturally, this evolution wakes everyone else up too, and before long, there's a regular lesbian orgy going on. When it's over, $activeSlave.slaveName finds herself returning exhaustedly to sleep, one of your arms curled <<if $activeSlave.preg > 20>>under her pregnancy<<else>>around her middle<</if>> to cup her pussy possessively. She finds that @@.hotpink;she doesn't mind.@@ She's your girl. - <<set $activeSlave.devotion += 4>> - <<set $activeSlave.vaginalCount += 1>> - <<set $vaginalTotal += 1>> + Holding her upper thighs with your hands to pull her against you, you grind into her, fucking her about as comprehensively as it's possible for someone without a cock to fuck a woman. She's most definitely up for it, and you see her eyes fly wide in the gloom as the full weight of the pleasure crashes into her. It's not exactly a position for lovemaking, since your faces are about as far apart as they can possibly be during sex, but kissing be damned, you're here to fuck. Naturally, this evolution wakes everyone else up too, and before long, there's a regular lesbian orgy going on. When it's over, $activeSlave.slaveName finds herself returning exhaustedly to sleep, one of your arms curled + <<if $activeSlave.belly >= 5000>> + under her _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> + <<else>> + around her middle + <</if>> + to cup her pussy possessively. She finds that @@.hotpink;she doesn't mind.@@ She's your girl. + <<set $activeSlave.devotion += 4, $activeSlave.vaginalCount++, $vaginalTotal++>> <</replace>> <</link>> diff --git a/src/uncategorized/arcmgmt.tw b/src/uncategorized/arcmgmt.tw index 22be24430f68add00a9e360880bc794e0c3b2113..2f2e604d9c02f2ff6c5a217a82109225af2acb3d 100644 --- a/src/uncategorized/arcmgmt.tw +++ b/src/uncategorized/arcmgmt.tw @@ -252,7 +252,11 @@ $ACitizens citizens and <<print $ASlaves+$helots+$slaves.length>> slaves now liv <</if>> <<if $discountMercenaries == 1>> Mercenaries willing to come to your arcology are given a discount on rent. - <<set $rentalMultiplier -= 0.1>> + <<set $rentalMultiplier -= 0.05>> +<</if>> +<<if $militiaSoldierPrivilege == 1>> + Citizens in the militia are exempt from rent payment. + <<set $rentalMultiplier -= 0.05>> <</if>> <<if $arcologies[0].FSArabianRevivalistLaw == 1>> <<set $rentalMultiplier += 0.1>> diff --git a/src/uncategorized/arcologyDescription.tw b/src/uncategorized/arcologyDescription.tw index 1ef5c8eec9b85369688b832c4bbb2460b8ed1353..134974741374e0b3366b0029429e7fcf13d0f2fc 100644 --- a/src/uncategorized/arcologyDescription.tw +++ b/src/uncategorized/arcologyDescription.tw @@ -1,7 +1,12 @@ :: Arcology Description [nobr] -__''$arcologies[0].name''__, your arcology, is located in a Free City in <<if $terrain == "oceanic">>the middle of the ocean<<else>>$continent<</if>>. It is a huge structure whose<<if $arcologyUpgrade.apron == 1>> solar-panelled<</if>> skin gleams in the sunshine<<if $arcologyUpgrade.hydro == 1>>, while verdant exterior hydroponics bays lend it an air of growth<</if>>.<<if $weatherCladding == 1>> Much of its beautiful exterior is now hidden behind dull panels of weather cladding<<if $arcologyUpgrade.spire == 1>>, though its highest point is capped by tall, elegant spire<</if>><<elseif $weatherCladding == 1>> The entirety of its once dull exterior has been retrofitted with breathtaking golden sheets in eye catching designs<<if $arcologyUpgrade.spire == 1>>, its highest point capped by a tall, magnificent spire<</if>>.<</if>> +__''$arcologies[0].name''__, your arcology, is located in a Free City in <<if $terrain == "oceanic">>the middle of the ocean<<else>>$continent<</if>>. It is a huge structure whose<<if $arcologyUpgrade.apron == 1>> solar-panelled<</if>> skin gleams in the sunshine<<if $arcologyUpgrade.hydro == 1>>, while verdant exterior hydroponics bays lend it an air of growth<</if>>. +<<if $weatherCladding == 1>> + Much of its beautiful exterior is now hidden behind dull panels of weather cladding<<if $arcologyUpgrade.spire == 1>>, though its highest point is capped by tall, elegant spire<</if>>. +<<elseif $weatherCladding == 1>> + The entirety of its once dull exterior has been retrofitted with breathtaking golden sheets in eye catching designs<<if $arcologyUpgrade.spire == 1>>, its highest point capped by a tall, magnificent spire<</if>>. +<</if>> Its<<if $weatherCladding == 2>> glorious<<elseif $weatherCladding > 0>> dull<<elseif $arcologyUpgrade.apron == 1>> shining<</if>> bulk <<if $terrain == "urban">> towers above the city around it; it is part of a cluster of arcologies that form a Free City in the midst of an old world urban area. diff --git a/src/uncategorized/costs.tw b/src/uncategorized/costs.tw index 8f2cb21e8a056f9d4f78eb48ee574b7ce12a6669..b8b70553e6b312a67118691047eb8780239b9b3c 100644 --- a/src/uncategorized/costs.tw +++ b/src/uncategorized/costs.tw @@ -45,6 +45,9 @@ <<if $secBarracks != 0>> <<set $costs += $secBarracksUpkeep>> <</if>> + <<if $riotCenter != 0>> + <<set $costs += $riotUpkeep>> + <</if>> <<set _mL = $militiaUnits.length>> <<for _i = 0; _i < _mL; _i++>> diff --git a/src/uncategorized/costsReport.tw b/src/uncategorized/costsReport.tw index 2fc5ad69d620b5361792817ddc2113cbe5e0581f..cafe9a01731e2e139e0a4d8e2260dd37eed74ce4 100644 --- a/src/uncategorized/costsReport.tw +++ b/src/uncategorized/costsReport.tw @@ -109,15 +109,25 @@ <<if $secBarracks != 0>> <br>__Barracks__ maintenance: ¤<<print $secBarracksUpkeep>> <</if>> - + <<if $riotCenter != 0>> + <br>__Riot Control Center__ maintenance: ¤<<print $riotUpkeep>> + <</if>> + + <<if $soldierWages == 0>> + <<set _soldierMod = 1>> + <<elseif $soldierWages == 0>> + <<set _soldierMod = 1.5>> + <<else>> + <<set _soldierMod = 2>> + <</if>> <<for _i = 0; _i < $militiaUnits.length; _i++>> - <br>__<<print $militiaUnits[_i].platoonName>>__ upkeep: ¤<<print $militiaUnits[_i].troops*$soldierUpkeep>> + <br>__<<print $militiaUnits[_i].platoonName>>__ upkeep: ¤<<print $militiaUnits[_i].troops*$soldierUpkeep * _soldierMod>> <</for>> <<for _i = 0; _i < $slaveUnits.length; _i++>> - <br>__<<print $slaveUnits[_i].platoonName>>__ upkeep: ¤<<print $slaveUnits[_i].troops*$soldierUpkeep*0.5>> + <br>__<<print $slaveUnits[_i].platoonName>>__ upkeep: ¤<<print $slaveUnits[_i].troops*$soldierUpkeep * 0.5 * _soldierMod>> <</for>> <<for _i = 0; _i < $mercUnits.length; _i++>> - <br>__<<print $mercUnits[_i].platoonName>>__ upkeep: ¤<<print $mercUnits[_i].troops*$soldierUpkeep*1.5>> + <br>__<<print $mercUnits[_i].platoonName>>__ upkeep: ¤<<print $mercUnits[_i].troops*$soldierUpkeep * 1.5 * _soldierMod>> <</for>> <</if>> diff --git a/src/uncategorized/manageArcology.tw b/src/uncategorized/manageArcology.tw index 2587820e2fbc4e5b54d5cbb10b4b88dbfe8f4833..2b13dd383404a1c3f65941610720eb6adf931d06 100644 --- a/src/uncategorized/manageArcology.tw +++ b/src/uncategorized/manageArcology.tw @@ -110,7 +110,7 @@ __Construction__ The [[security HQ|securityHQ]] is constantly working to protect your arcology. <</if>> - <<if $arcologyUpgrade.drones == 1 && $secBarracks == 0>> + <<if $secBarracks == 0>> <br> [[Set up the barracks|Manage Arcology][$cash -= Math.trunc(5000*$upgradeMultiplierArcology), $secBarracks = 1]] //Costs ¤<<print Math.trunc(5000*$upgradeMultiplierArcology)>>// @@ -125,7 +125,7 @@ __Construction__ [[Set up the riot control center|Manage Arcology][$cash -= Math.trunc(5000*$upgradeMultiplierArcology), $riotCenter = 1]] //Costs ¤<<print Math.trunc(5000*$upgradeMultiplierArcology)>>// <br>//Building specialized in the management and suppression of rebellions.// - <<else>> + <<elseif $rebellionsEnabled == 1>> <br> The [[Riot Control Center|riotControlCenter]] stands ready for action. <</if>> @@ -184,10 +184,14 @@ Your slaves have participated in approximately <<print $oralTotal+$vaginalTotal+ Your army counts <<print $militiaEmployedManpower + $slavesEmployedManpower + $mercEmployedManpower + $securityForcePersonnel>> total soldiers of which $securityForcePersonnel under the security force command and the rest under your direct control. <</if>> <<if $hasFoughtOnce == 1>> - Your troops were involved in <<print $battlesCount>> battles of which <<print $majorBattlesCount>> major engagements. You won <<print $PCvictories>> of them, while the enemy managed to gain the upper hand in the other <<print $PClosses>> kills. - During all battles you lost a total of <<print $militiaTotalCasualties + $slavesTotalCasualties + $mercTotalCasualties>> men, while scoring a total of <<print $totalKills>>. + Your troops were involved in <<print $battlesCount>> battles of which <<print $majorBattlesCount>> major engagements. You won <<print $PCvictories>> of them, while the enemy managed to gain the upper hand in the other <<print $PClosses>>. +<</if>> + +<<if $rebellionsCount >= 1>> + Your arcology was involved in <<print $rebellionsCount>> rebellions. You won <<print $PCrebWon>> of them, while the rebels defeated your forces in <<print $PCrebLoss>>. <</if>> +During all battles you lost a total of <<print $militiaTotalCasualties + $slavesTotalCasualties + $mercTotalCasualties>> men, while scoring a total of <<print $totalKills>>. <</if>> <br><br> diff --git a/src/uncategorized/nextWeek.tw b/src/uncategorized/nextWeek.tw index cdf77a5e3c3065bc59b64c8b51f9118e7fefbbe6..1ea48d808c16c5b53c6011a3fd5dbc040fcf1b6f 100644 --- a/src/uncategorized/nextWeek.tw +++ b/src/uncategorized/nextWeek.tw @@ -128,10 +128,6 @@ <</if>> <</if>> -<<if $sentUnitCooldown > 0>> - <<set $sentUnitCooldown-->> -<</if>> - <<if $week == $oldWeek>> <<set $week += 1, $day += 7>> <<switch $month>> @@ -194,6 +190,10 @@ <<set $foughtThisWeek = 0>> <</if>> +<<if $sentUnitCooldown > 0>> + <<set $sentUnitCooldown-->> +<</if>> + <<set _seed = random(1,10)>> <<if $week < 25>> <<if _seed > 4>> diff --git a/src/uncategorized/nonRandomEvent.tw b/src/uncategorized/nonRandomEvent.tw index e15beeca4246108df602aa7698db5cf0bf5b04f0..a40d844f32ddd72519bdfd969ec7406d9e1e64a2 100644 --- a/src/uncategorized/nonRandomEvent.tw +++ b/src/uncategorized/nonRandomEvent.tw @@ -4,8 +4,6 @@ <<if $plot>> -<<set _roll = random(25,35)>> - <<set _effectiveWeek = $week-$nationHate>> <<set $toSearch = $arcologies[0].name>> <<if (_effectiveWeek == 4) && ($toSearch.indexOf("Arcology ") != -1)>> diff --git a/src/uncategorized/randomIndividualEvent.tw b/src/uncategorized/randomIndividualEvent.tw index 9633dfc7a6c113452c077f50a423bfc6c96b84f3..54da4a1d1beb554141627309fbf57d38945c33ee 100644 --- a/src/uncategorized/randomIndividualEvent.tw +++ b/src/uncategorized/randomIndividualEvent.tw @@ -213,8 +213,10 @@ <</if>> <<elseif ($eventSlave.trust > 75)>> <<if ($eventSlave.energy > 60)>> + <<if (canDoAnal($eventSlave) && $eventSlave.anus > 0) || (canDoVaginal($eventSlave) && $eventSlave.vagina > 0)>> <<set $RESSevent.push("PA flirting")>> <</if>> + <</if>> <</if>> <</if>> <</if>> @@ -222,16 +224,12 @@ <</if>> <<if ($eventSlave.clothes == "a succubus outfit")>> -<<if ($eventSlave.anus != 0)>> -<<if ($eventSlave.vagina != 0)>> <<if ($eventSlave.devotion > 20)>> <<if ($eventSlave.trust > 20)>> <<set $RESSevent.push("sexy succubus")>> <</if>> <</if>> <</if>> -<</if>> -<</if>> <<if ($HeadGirl != 0)>> <<if ($eventSlave.devotion <= 50)>> @@ -737,14 +735,10 @@ <<if ($eventSlave.lactation > 0)>> <<if ($eventSlave.devotion > 20)>> <<if ($eventSlave.trust > 20)>> -<<if ($eventSlave.vagina != 0)>> -<<if ($eventSlave.anus != 0)>> <<set $RESSevent.push("cow milking")>> <</if>> <</if>> <</if>> -<</if>> -<</if>> <<if ($eventSlave.dietCum > 0)>> <<if ($eventSlave.devotion < 20)>> @@ -1117,8 +1111,8 @@ <<if ($eventSlave.energy > 60)>> <<if ($eventSlave.devotion > 50)>> <<if ($eventSlave.trust > 50)>> -<<if ($eventSlave.vagina != 0)>> -<<if ($eventSlave.anus != 0)>> +<<if canDoAnal($eventSlave) || canDoVaginal($eventSlave)>> +<<if ($eventSlave.belly < 100000)>> <<set $RESSevent.push("dick wringing")>> <</if>> <</if>> @@ -1352,7 +1346,7 @@ <<if ($eventSlave.whoreSkill >= 100)>> <<if ($eventSlave.trust > 50)>> -<<if ($eventSlave.assignment == "whore")>> +<<if ["whore", "work in the brothel"].includes($eventSlave.assignment)>> <<set $RESSevent.push("masterful whore")>> <</if>> <</if>> @@ -1455,37 +1449,57 @@ <</if>> <<if ($eventSlave.assignment == "please you")>> -<<if ($eventSlave.devotion > 20)>> -<<if ($eventSlave.trust > -20)>> -<<if ($eventSlave.anus > 0)>> -<<if canDoAnal($eventSlave) || canDoVaginal($eventSlave)>> - <<if ($eventSlave.vagina != 0)>> - <<if (!["chastity", "combined chastity"].includes($eventSlave.dickAccessory)) || ($eventSlave.dick == 0)>> - <<if ($corpIncorporated != 0)>> - <<set $RESSevent.push("shift sleep")>> - <</if>> - <<if ($eventSlave.releaseRules == "permissive") || $eventSlave.releaseRules == "masturbation">> - <<set $RESSevent.push("shift masturbation")>> - <</if>> - <<if ($eventSlave.entertainSkill >= 60)>> - <<set $RESSevent.push("shift doorframe")>> - <</if>> + <<if ($eventSlave.devotion > 20)>> + <<if ($eventSlave.trust > -20)>> + <<if canDoAnal($eventSlave) || canDoVaginal($eventSlave)>> + <<if (!["chastity", "combined chastity"].includes($eventSlave.dickAccessory)) || ($eventSlave.dick == 0)>> + <<if ($corpIncorporated != 0)>> + <<set $RESSevent.push("shift sleep")>> + <</if>> + <<if ($eventSlave.releaseRules == "permissive") || $eventSlave.releaseRules == "masturbation">> + <<set $RESSevent.push("shift masturbation")>> + <</if>> + <<if ($eventSlave.entertainSkill >= 60)>> + <<set $RESSevent.push("shift doorframe")>> + <</if>> + <</if>> + <<if canDoVaginal($eventSlave)>> + <<if ($PC.vagina == 1)>> + <<if ($eventSlave.dick == 0)>> + <<if ($fuckSlaves > 2)>> + <<set $RESSevent.push("fucktoy tribbing")>> + <</if>> + <</if>> + <</if>> + <</if>> <</if>> <</if>> - <<if canDoVaginal($eventSlave)>> - <<if ($PC.vagina == 1)>> - <<if ($eventSlave.dick == 0)>> - <<if ($fuckSlaves > 2)>> - <<set $RESSevent.push("fucktoy tribbing")>> <</if>> +<<elseif ["serve in the master suite", "be your Concubine"].includes($eventSlave.assignment)>> + <<if ($eventSlave.devotion > 20)>> + <<if ($eventSlave.trust > -20)>> + <<if canDoAnal($eventSlave) || canDoVaginal($eventSlave)>> + <<if (!["chastity", "combined chastity"].includes($eventSlave.dickAccessory)) || ($eventSlave.dick == 0)>> + <<if ($corpIncorporated != 0)>> + <<set $RESSevent.push("shift sleep")>> + <</if>> + <<if ($eventSlave.entertainSkill >= 60)>> + <<set $RESSevent.push("shift doorframe")>> + <</if>> + <</if>> + <<if canDoVaginal($eventSlave)>> + <<if ($PC.vagina == 1)>> + <<if ($eventSlave.dick == 0)>> + <<if ($fuckSlaves > 2)>> + <<set $RESSevent.push("fucktoy tribbing")>> + <</if>> + <</if>> + <</if>> + <</if>> <</if>> <</if>> <</if>> <</if>> -<</if>> -<</if>> -<</if>> -<</if>> <<if ($eventSlave.speechRules != "restrictive")>> <<if ($eventSlave.oralCount+$eventSlave.vaginalCount+$eventSlave.analCount > 900)>> @@ -1728,7 +1742,7 @@ <<if ($eventSlave.boobs < 500)>> <<if ($eventSlave.butt < 3)>> -<<if canDoAnal($activeSlave) || canDoVaginal($activeSlave)>> +<<if canDoAnal($eventSlave) || canDoVaginal($eventSlave)>> <<if ($eventSlave.devotion <= 50)>> <<if ($eventSlave.devotion > 20) && ($eventSlave.trust > -20)>> <<if ($eventSlave.weight <= 10)>> diff --git a/src/uncategorized/recETSWorkaround.tw b/src/uncategorized/recETSWorkaround.tw index 8944bd9beff5c75cc2d1690da69e37533ef95c46..5578f2ded80073bacd62d0c1b0ba836325cb6e76 100644 --- a/src/uncategorized/recETSWorkaround.tw +++ b/src/uncategorized/recETSWorkaround.tw @@ -345,6 +345,7 @@ You turn to the child clutching her mother's grotesque belly. <<set $activeSlave.preg = 0>> <<set $activeSlave.pregType = 0>> <<set $activeSlave.labor = 0>> + <<set $activeSlave.birthsTotal = 0>> <<set $activeSlave.anus = 0>> <<set $activeSlave.vaginalSkill = 0>> <<set $activeSlave.whoreSkill = 0>> diff --git a/src/uncategorized/rieEligibilityCheck.tw b/src/uncategorized/rieEligibilityCheck.tw index a9ab2ad44b295079351ce0e6c1023f7088b5889c..696deb559aa6f9cfee077f7ecd592f2dff719038 100644 --- a/src/uncategorized/rieEligibilityCheck.tw +++ b/src/uncategorized/rieEligibilityCheck.tw @@ -16,7 +16,7 @@ <<if $hostageRescued == 1>> <<goto "P hostage acquisition">> <<elseif $eligibleSlaves.length == 0>> - <<goto "next week">> + <<goto "Next Week">> <<else>> <<goto "Random Individual Event">> <</if>> diff --git a/src/uncategorized/saChoosesOwnClothes.tw b/src/uncategorized/saChoosesOwnClothes.tw index 82071f022d7eddac7b6d5197e7118091cbd7c8bb..48698378aa221d4a9f82aa28b5304583965a495b 100644 --- a/src/uncategorized/saChoosesOwnClothes.tw +++ b/src/uncategorized/saChoosesOwnClothes.tw @@ -148,7 +148,7 @@ straps on a fake pregnant belly to fit in with all the other pregnant girls, <<set $slaves[$i].bellyAccessory = "a large empathy belly">> <</if>> -<<elseif (!visibleBelly($slaves[$i])) && ($slaves[$i].fetish == "pregnancy") && ($clothesBoughtBelly == 1 || $cheatMode == 1 || $arcologies[0].FSRepopulationFocus != "unset") && $slaves[$i].sexualFlaw != "breeder" && $slaves[$i].weight <= 130>> +<<elseif (!visibleBelly($slaves[$i])) && ($slaves[$i].fetish == "pregnancy") && isItemAccessible("a small empathy belly") && $slaves[$i].sexualFlaw != "breeder" && $slaves[$i].weight <= 130>> <<if ($slaves[$i].fetishStrength <= 30)>> <<set _bellySeed = random(1,3)>> <<if _bellySeed == 1>> @@ -326,7 +326,7 @@ <<elseif ($slaves[$i].assignment == "take classes") || ($slaves[$i].assignment == "learn in the schoolroom")>> and wears a schoolgirl outfit, since it seems most appropriate. <<set $slaves[$i].clothes = "a schoolgirl outfit">> -<<elseif (($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")) && bigBelly($slaves[$i]) && ($clothesBoughtMaternityDress == 1 || $arcologies[0].FSRepopulationFocus != "unset")>> +<<elseif (($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")) && bigBelly($slaves[$i]) && isItemAccessible("a maternity dress")>> and wears pretty lingerie to show off $possessive merchandise and accentuate $possessive pregnancy while still looking a little classy. <<set $slaves[$i].clothes = "attractive lingerie for a pregnant woman">> <<elseif ($slaves[$i].assignment == "whore") || ($slaves[$i].assignment == "work in the brothel")>> @@ -345,10 +345,10 @@ <<if random(1,2) == 1>> and wears pretty lingerie to show off $possessive merchandise while giving $possessive big belly plenty of room to hang free. <<set $slaves[$i].clothes = "attractive lingerie">> - <<elseif ($clothesBoughtMaternityLingerie == 1 || $arcologies[0].FSRepopulationFocus != "unset") && $slaves[$i].energy > 90>> + <<elseif isItemAccessible("attractive lingerie for a pregnant woman") && $slaves[$i].energy > 90>> and wears pretty lingerie to show off $possessive merchandise and accentuate $possessive pregnancy while giving it plenty of room to hang free. <<set $slaves[$i].clothes = "attractive lingerie for a pregnant woman">> - <<elseif ($clothesBoughtMaternityDress == 1 || $arcologies[0].FSRepopulationFocus != "unset")>> + <<elseif isItemAccessible("a maternity dress")>> and wears a conservative dress with plenty of give for $possessive belly to stretch it. <<set $slaves[$i].clothes = "a maternity dress">> <<else>> diff --git a/src/uncategorized/saDevotion.tw b/src/uncategorized/saDevotion.tw index 208852d5b22ebef65e2e2cf79a1e4772dbbf5c56..5355ce1fa5a1740526ccb8d5f64f604c166761da 100644 --- a/src/uncategorized/saDevotion.tw +++ b/src/uncategorized/saDevotion.tw @@ -12,21 +12,21 @@ <<if $slaves[$i].origin == "You were acquainted with her before you were an arcology owner; your rival tried to use her to manipulate you, but you rescued her.">> <<if ($rivalryDuration <= 10 || $rivalryFS == "Racial Supremacism" || $rivalryFS == "Paternalism")>> You @@.mediumaquamarine;saved $slaves[$i].slaveName from a living nightmare@@ under your rival's rule. She @@.hotpink;tries her best to adapt to her savior's wishes@@. - <<set $slaves[$i].devotion += 2.0>> - <<set $slaves[$i].trust += 2.0>> + <<set $slaves[$i].devotion += 10>> + <<set $slaves[$i].trust += 10>> <<elseif $hostageGiveIn == 1>> Since you are @@.mediumaquamarine;indulging@@ $slaves[$i].slaveName's desires, she @@.hotpink;likes you more@@. - <<set $slaves[$i].devotion += 1>> - <<set $slaves[$i].trust += 1>> + <<set $slaves[$i].devotion += 5>> + <<set $slaves[$i].trust += 5>> <<elseif $rivalryDuration > 20 and $slaves[$i].devotion < 5>> <<if $personalAttention == $slaves[$i].ID>> You took everything from $slaves[$i].slaveName and @@.mediumorchid;she hates you for it@@. Since you won't give her what she wants, she @@.gold;refuses to trust you@@. Since you are putting such a personal touch into her care, she can't find it in her to rebel as strongly. - <<set $slaves[$i].devotion -= 1.0>> - <<set $slaves[$i].trust -= 1.0>> + <<set $slaves[$i].devotion -= 5>> + <<set $slaves[$i].trust -= 5>> <<else>> You took everything from $slaves[$i].slaveName and @@.mediumorchid;she hates you for it@@. Since you won't give her what she wants, she @@.gold;refuses to trust you at all@@. - <<set $slaves[$i].devotion -= 8.0>> - <<set $slaves[$i].trust -= 8.0>> + <<set $slaves[$i].devotion -= 25>> + <<set $slaves[$i].trust -= 25>> <</if>> <<elseif $rivalryDuration > 10 and $slaves[$i].devotion < 5>> <<if $personalAttention == $slaves[$i].ID>> @@ -35,8 +35,8 @@ <<set $slaves[$i].trust -= 3>> <<else>> She is @@.gold;horrified by you@@. Your rival taught her a great deal about slave life in your arcology and indulged her deepest fantasies. $slaves[$i].slaveName considers being your pet @@.mediumorchid;a fate worse than death@@. - <<set $slaves[$i].devotion -= 15.0>> - <<set $slaves[$i].trust -= 15.0>> + <<set $slaves[$i].devotion -= 15>> + <<set $slaves[$i].trust -= 15>> <</if>> <</if>> <</if>> @@ -111,62 +111,58 @@ <<if $slaves[$i].devotion <= 95>> -<<if $slaves[$i].devotion <= 20>> -<<if $slaves[$i].devotion >= -50>> -<<if $slaves[$i].trust > 20>> - $slaves[$i].slaveName does not like you and believes that you will not punish her severely, and her @@.mediumorchid;regard for you is severely reduced@@ by this lack of respect. - <<set $slaves[$i].trust -= 4>> -<<elseif $slaves[$i].trust >= -20>> - $slaves[$i].slaveName neither likes nor fears you, and her @@.mediumorchid;regard for you is reduced@@ by this lack of respect. - <<set $slaves[$i].trust -= 2>> -<</if>> -<</if>> +<<if $slaves[$i].devotion <= 20 && $slaves[$i].devotion >= -50>> + <<if $slaves[$i].trust > 20>> + $slaves[$i].slaveName does not like you and believes that you will not punish her severely, and her @@.mediumorchid;regard for you is severely reduced@@ by this lack of respect. + <<set $slaves[$i].trust -= 4>> + <<elseif $slaves[$i].trust >= -20>> + $slaves[$i].slaveName neither likes nor fears you, and her @@.mediumorchid;regard for you is reduced@@ by this lack of respect. + <<set $slaves[$i].trust -= 2>> + <</if>> <</if>> <<if $slaves[$i].intelligence != 0>> <<if $slaves[$i].intelligence >= 3>> <<if $personalAttention == $slaves[$i].ID>> - $slaves[$i].slaveName's @@.deepskyblue;brilliant mind@@ strongly resists slavery, but since you are giving her personal attention you are able to compensate for her genius. + $slaves[$i].slaveName's @@.deepskyblue;brilliant mind@@ strongly resists slavery, but since you are giving her personal attention you are able to compensate for her genius. <<else>> - <<if $slaves[$i].trust < -20>> - $slaves[$i].slaveName's @@.deepskyblue;brilliant mind@@ strongly resists slavery, but she fears you deeply enough that she consciously forces herself to obey out of self-preservation. - <<else>> - $slaves[$i].slaveName's @@.deepskyblue;brilliant mind@@ strongly @@.mediumorchid;resists@@ slavery and encourages her to @@.gold;fear you.@@ - <<set $slaves[$i].devotion -= 2>> - <<set $slaves[$i].trust -= 2>> - <</if>> + <<if $slaves[$i].trust < -20>> + $slaves[$i].slaveName's @@.deepskyblue;brilliant mind@@ strongly resists slavery, but she fears you deeply enough that she consciously forces herself to obey out of self-preservation. + <<else>> + $slaves[$i].slaveName's @@.deepskyblue;brilliant mind@@ strongly @@.mediumorchid;resists@@ slavery and encourages her to @@.gold;fear you.@@ + <<set $slaves[$i].devotion -= 2>> + <<set $slaves[$i].trust -= 2>> + <</if>> <</if>> <<elseif $slaves[$i].intelligence >= 2>> <<if $personalAttention == $slaves[$i].ID>> - $slaves[$i].slaveName's @@.deepskyblue;highly acute mind@@ naturally resists slavery, but since you are giving her personal attention you are able to compensate for her intelligence. + $slaves[$i].slaveName's @@.deepskyblue;highly acute mind@@ naturally resists slavery, but since you are giving her personal attention you are able to compensate for her intelligence. <<else>> - <<if $slaves[$i].trust < -20>> - $slaves[$i].slaveName's @@.deepskyblue;highly acute mind@@ naturally resists slavery, but she fears you deeply enough that she consciously forces herself to obey out of self-preservation. - <<else>> - $slaves[$i].slaveName's @@.deepskyblue;highly acute mind@@ naturally @@.mediumorchid;resists@@ slavery and encourages her to @@.gold;fear you.@@ - <<set $slaves[$i].devotion -= 2>> - <<set $slaves[$i].trust -= 2>> - <</if>> + <<if $slaves[$i].trust < -20>> + $slaves[$i].slaveName's @@.deepskyblue;highly acute mind@@ naturally resists slavery, but she fears you deeply enough that she consciously forces herself to obey out of self-preservation. + <<else>> + $slaves[$i].slaveName's @@.deepskyblue;highly acute mind@@ naturally @@.mediumorchid;resists@@ slavery and encourages her to @@.gold;fear you.@@ + <<set $slaves[$i].devotion -= 2>> + <<set $slaves[$i].trust -= 2>> + <</if>> <</if>> <<elseif $slaves[$i].intelligence >= 1>> <<if $personalAttention == $slaves[$i].ID>> - $slaves[$i].slaveName's @@.deepskyblue;intelligent mind@@ naturally resists slavery, but since you are giving her personal attention you are able to compensate for her cleverness. + $slaves[$i].slaveName's @@.deepskyblue;intelligent mind@@ naturally resists slavery, but since you are giving her personal attention you are able to compensate for her cleverness. <<else>> - <<if $slaves[$i].trust < -20>> - $slaves[$i].slaveName's @@.deepskyblue;intelligent mind@@ naturally resists slavery, but she fears you deeply enough that she consciously forces herself to obey out of self-preservation. - <<else>> - $slaves[$i].slaveName's @@.deepskyblue;intelligent mind@@ naturally @@.mediumorchid;resists@@ slavery. - <<set $slaves[$i].devotion -= 2>> - <</if>> + <<if $slaves[$i].trust < -20>> + $slaves[$i].slaveName's @@.deepskyblue;intelligent mind@@ naturally resists slavery, but she fears you deeply enough that she consciously forces herself to obey out of self-preservation. + <<else>> + $slaves[$i].slaveName's @@.deepskyblue;intelligent mind@@ naturally @@.mediumorchid;resists@@ slavery. + <<set $slaves[$i].devotion -= 2>> + <</if>> <</if>> <<elseif $slaves[$i].intelligence <= -3>> $slaves[$i].slaveName's @@.orangered;moronic mind@@ naturally @@.hotpink;accepts@@ slavery, and she's imbecile enough to instinctively @@.mediumaquamarine;trust you@@ to know what's best for her. - <<set $slaves[$i].devotion += 2>> - <<set $slaves[$i].trust += 2>> + <<set $slaves[$i].devotion += 2, $slaves[$i].trust += 2>> <<elseif $slaves[$i].intelligence <= -2>> $slaves[$i].slaveName's @@.orangered;idiotic mind@@ naturally @@.hotpink;accepts@@ slavery, and she's stupid enough to instinctively @@.mediumaquamarine;trust you@@ to know what's best. - <<set $slaves[$i].devotion += 1>> - <<set $slaves[$i].trust += 1>> + <<set $slaves[$i].devotion += 1, $slaves[$i].trust += 1>> <<elseif $slaves[$i].intelligence <= -1>> $slaves[$i].slaveName's @@.orangered;unintelligent mind@@ naturally @@.hotpink;accepts@@ slavery. <<set $slaves[$i].devotion += 1>> @@ -199,10 +195,10 @@ <</if>> <</if>> <<if $arcologies[0].FSChattelReligionistCreed == 1>> -<<if $nicaeaFocus == "slaves">> - The creed of $nicaeaName @@.hotpink;focuses on slaves@@ and is repeated constantly all around her. - <<set $slaves[$i].devotion += $nicaeaPower>> -<</if>> + <<if $nicaeaFocus == "slaves">> + The creed of $nicaeaName @@.hotpink;focuses on slaves@@ and is repeated constantly all around her. + <<set $slaves[$i].devotion += $nicaeaPower>> + <</if>> <</if>> /* INDENTURE MENTAL EFFECTS */ @@ -666,12 +662,12 @@ <<if $slaves[$i].origin == "Shortly after birth, she was sealed in an aging tank until she was of age. She knows nothing of the world outside of what the tank imprinted her with.">> The incubation facility conditioned her mind for total subservience to her owner; she can not resist her progress. <<elseif $arcologies[0].FSChattelReligionist >= random(1,100)>> - The natural resilience of her mind is overcome by the omnipresent combination of faith and servitude in $arcologies[0].name, and she does not resist her progress down the path towards total subservience. + The natural resilience of her mind is overcome by the omnipresent combination of faith and servitude in $arcologies[0].name, and she does not resist her progress down the path towards total subservience. <<elseif $personalAttention == $slaves[$i].ID>> - She gained so much regard for you this week that her natural reaction is to rebound a little, but since you're giving her personal attention, your charismatic presence prevents this. + She gained so much regard for you this week that her natural reaction is to rebound a little, but since you're giving her personal attention, your charismatic presence prevents this. <<elseif $slaves[$i].devotion < 95>> - So many things served to drive her into subservience this week that her mind @@.mediumorchid;rebounds a little.@@ - <<set $slaves[$i].devotion = ($slaves[$i].oldDevotion+5)>> + So many things served to drive her into subservience this week that her mind @@.mediumorchid;rebounds a little.@@ + <<set $slaves[$i].devotion = ($slaves[$i].oldDevotion+5)>> <</if>> <</if>> <<else>> @@ -701,12 +697,12 @@ <<if $slaves[$i].origin == "Shortly after birth, she was sealed in an aging tank until she was of age. She knows nothing of the world outside of what the tank imprinted her with.">> Any natural doubts she has are overcome by her condtioning in the incubation facilty; she can not resist trusting her owner. <<elseif $arcologies[0].FSChattelReligionist >= random(1,100)>> - Any natural doubts she harbors are overcome by her belief in Chattel Religionism, and she does not resist her progress down the path towards total trust in you. + Any natural doubts she harbors are overcome by her belief in Chattel Religionism, and she does not resist her progress down the path towards total trust in you. <<elseif $personalAttention == $slaves[$i].ID>> - She gained so much trust in you this week that her natural reaction is to doubt herself, but since you're giving her personal attention, she decides to trust her understanding of your will. + She gained so much trust in you this week that her natural reaction is to doubt herself, but since you're giving her personal attention, she decides to trust her understanding of your will. <<elseif $slaves[$i].trust < 95>> - She gained so much trust in you this week that she @@.gold;draws back a little@@ out of self-doubt. - <<set $slaves[$i].trust = ($slaves[$i].oldTrust+5)>> + She gained so much trust in you this week that she @@.gold;draws back a little@@ out of self-doubt. + <<set $slaves[$i].trust = ($slaves[$i].oldTrust+5)>> <</if>> <</if>> <<else>> @@ -728,7 +724,7 @@ <<set $slaves[$i].trust = 100>> <<else>> <<if ($slaves[$i].devotion > 100)>> - <<if ($slaves[$i].trust < 100) && ($slaves[$i].trust >= -20)>> + <<if ($slaves[$i].trust < 100) && ($slaves[$i].trust >= 20)>> <<set $slaves[$i].trust += Math.trunc(($slaves[$i].devotion-100)*5)/10>> <<elseif $slaves[$i].energy <= 50>> <<set $energyPlus += Math.trunc($slaves[$i].devotion-100)>> @@ -743,7 +739,7 @@ <<set $slaves[$i].devotion = -100>> <</if>> <<if ($slaves[$i].trust > 100)>> - <<if $slaves[$i].devotion <= 100>> + <<if $slaves[$i].devotion <= 100 && $slaves[$i].devotion >= 20>> <<set $slaves[$i].devotion += Math.trunc($slaves[$i].trust)>> <<elseif $slaves[$i].energy <= 50>> <<set $energyPlus += Math.trunc($slaves[$i].trust-100)>> diff --git a/src/uncategorized/scheduledEvent.tw b/src/uncategorized/scheduledEvent.tw index 6a1bcbf72b31777500bde80f8fc35ed96fe6306e..0123df98eb23de1803d5cf1b502359be32b5177e 100644 --- a/src/uncategorized/scheduledEvent.tw +++ b/src/uncategorized/scheduledEvent.tw @@ -97,11 +97,11 @@ <<if $rivalOwner == -1>> <<goto "P rival initiation">> <<elseif $slaveRebellion == 1>> - <<goto rebellionOptions>> + <<goto "rebellionOptions">> <<elseif $citizenRebellion == 1>> - <<goto rebellionOptions>> + <<goto "rebellionOptions">> <<elseif $attackThisWeek == 1>> - <<goto attackOptions>> + <<goto "attackOptions">> <<elseif $PC.labor == 1>> <<goto "SE Player Birth">> <<elseif ($independenceDay == 1) && (Math.trunc(($week-23)/52) == ($week-23)/52)>> diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw index e4f1f8ee5439b6d744b10d0089ed44000473e1ca..656cb07248a6d8218655d62d71d43e4976cc11af 100644 --- a/src/uncategorized/slaveInteract.tw +++ b/src/uncategorized/slaveInteract.tw @@ -621,46 +621,46 @@ | <<link "Suit (nice)">><<set $activeSlave.clothes = "nice business attire",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> | <<link "Suit (slutty)">><<set $activeSlave.clothes = "slutty business attire",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> - <<if ($arcologies[0].FSRepopulationFocus != "unset") || ($cheatMode == 1) || ($clothesBoughtMaternityLingerie == 1)>> + <<if isItemAccessible("attractive lingerie for a pregnant woman")>> | //FS// <<link "Attractive lingerie for a pregnant woman">><<set $activeSlave.clothes = "attractive lingerie for a pregnant woman",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSGenderFundamentalist != "unset") || ($cheatMode == 1) || ($clothesBoughtBunny == 1)>> + <<if isItemAccessible("a bunny outfit")>> | //FS// <<link "Bunny outfit">><<set $activeSlave.clothes = "a bunny outfit",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSPhysicalIdealist != "unset") || ($cheatMode == 1) || ($clothesBoughtOil == 1)>> + <<if isItemAccessible("body oil")>> | //FS// <<link "Body oil">><<set $activeSlave.clothes = "body oil",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSDegradationist != "unset") || ($cheatMode == 1) || ($clothesBoughtChains == 1)>> + <<if isItemAccessible("chains")>> | //FS// <<link "Chains">><<set $activeSlave.clothes = "chains",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSChattelReligionist != "unset") || ($cheatMode == 1) || ($clothesBoughtHabit == 1)>> + <<if isItemAccessible("a chattel habit")>> | //FS// <<link "Chattel habit">><<set $activeSlave.clothes = "a chattel habit",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSPaternalist != "unset") || ($cheatMode == 1) || ($clothesBoughtConservative == 1)>> + <<if isItemAccessible("conservative clothing")>> | //FS// <<link "Conservative clothing">><<set $activeSlave.clothes = "conservative clothing",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSArabianRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtHarem == 1)>> + <<if isItemAccessible("harem gauze")>> | //FS// <<link "Harem gauze">><<set $activeSlave.clothes = "harem gauze",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSAztecRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtHuipil == 1)>> + <<if isItemAccessible("a huipil")>> | //FS// <<link "Huipil">><<set $activeSlave.clothes = "a huipil",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSEdoRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtKimono == 1)>> + <<if isItemAccessible("a kimono")>> | //FS// <<link "Kimono">><<set $activeSlave.clothes = "a kimono",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSRepopulationFocus != "unset") || ($cheatMode == 1) || ($clothesBoughtMaternityDress == 1)>> + <<if isItemAccessible("a maternity dress")>> | //FS// <<link "Maternity dress">><<set $activeSlave.clothes = "a maternity dress",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSChineseRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtQipao == 1)>> + <<if isItemAccessible("a slutty qipao")>> | //FS// <<link "Slutty qipao">><<set $activeSlave.clothes = "a slutty qipao",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSHedonisticDecadence != "unset") || ($cheatMode == 1) || ($clothesBoughtLazyClothes == 1)>> + <<if isItemAccessible("stretch pants and a crop-top")>> | //FS// <<link "Stretch pants and a crop-top">><<set $activeSlave.clothes = "stretch pants and a crop-top",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSRomanRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtToga == 1)>> + <<if isItemAccessible("a toga")>> | //FS// <<link "Toga">><<set $activeSlave.clothes = "a toga",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSPastoralist != "unset") || ($cheatMode == 1) || ($clothesBoughtWestern == 1)>> + <<if isItemAccessible("Western clothing")>> | //FS// <<link "Western clothing">><<set $activeSlave.clothes = "Western clothing",$activeSlave.choosesOwnClothes = 0>><<replace "#clothes">>$activeSlave.clothes<</replace>><</link>> <</if>> @@ -684,10 +684,10 @@ | <<link "Nice retirement counter">><<set $activeSlave.collar = "nice retirement counter">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> <</if>> | <<link "Cowbell">><<set $activeSlave.collar = "leather with cowbell">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> - <<if ($arcologies[0].FSGenderFundamentalist != "unset") || ($cheatMode == 1) || ($clothesBoughtBunny == 1)>> + <<if isItemAccessible("bowtie")>> | //FS// <<link "Bowtie collar">><<set $activeSlave.collar = "bowtie">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSEgyptianRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtEgypt == 1)>> + <<if isItemAccessible("ancient Egyptian")>> | //FS// <<link "Ancient Egyptian">><<set $activeSlave.collar = "ancient Egyptian">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> <</if>> <br> //Harsh:// @@ -701,7 +701,7 @@ <</if>> | <<link "Shock punishment">><<set $activeSlave.collar = "shock punishment">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> | <<link "Dildo gag">><<set $activeSlave.collar = "dildo gag">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> - <<if $toysBoughtGags == 1 && $activeSlave.oralSkill > 50>> + <<if isItemAccessible("massive dildo gag") && $activeSlave.oralSkill > 50>> | <<link "Massive dildo gag">><<set $activeSlave.collar = "massive dildo gag">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> <</if>> | <<link "Ball gag">><<set $activeSlave.collar = "ball gag">><<replace "#collar">>$activeSlave.collar<</replace>><</link>> @@ -723,7 +723,7 @@ <<if $activeSlave.breedingMark != 1>> | <<link "Extreme corset">><<set $activeSlave.bellyAccessory = "an extreme corset">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>> <</if>> - <<if ($arcologies[0].FSRepopulationFocus != "unset") || ($cheatMode == 1) || ($clothesBoughtBelly == 1)>> + <<if isItemAccessible("a small empathy belly")>> /* works for all of them */ <<if $activeSlave.belly < 1500 && $activeSlave.inflation == 0 && $activeSlave.weight < 130>> | <<link "1st Trimester belly">><<set $activeSlave.bellyAccessory = "a small empathy belly">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>> | <<link "2nd Trimester belly">><<set $activeSlave.bellyAccessory = "a medium empathy belly">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>> @@ -737,24 +737,20 @@ <br>Anal accessory: ''<span id="buttplug">$activeSlave.buttplug</span>.'' <<link "None">><<set $activeSlave.buttplug = "none", $activeSlave.buttplugAttachment = "none">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>> | <<link "Normal">><<set $activeSlave.buttplug = "plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>> - <<if $toysBoughtButtPlugs == 1>> - <<if $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long plug") && $activeSlave.breedingMark != 1>> | <<link "Long">><<set $activeSlave.buttplug = "long plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>> <</if>> - <</if>> | <<link "Large">><<set $activeSlave.buttplug = "large plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>> - <<if $toysBoughtButtPlugs == 1>> - <<if $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long, large plug") && $activeSlave.breedingMark != 1>> | <<link "Long and large">><<set $activeSlave.buttplug = "long, large plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>> <</if>> - <</if>> <<if $activeSlave.anus >= 2>>| <<link "Huge">><<set $activeSlave.buttplug = "huge plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>><</if>> - <<if $toysBoughtButtPlugs == 1>> + <<if isItemAccessible("long, huge plug")>> <<if $activeSlave.breedingMark != 1 && $activeSlave.anus >= 2>> | <<link "Long and huge">><<set $activeSlave.buttplug = "long, huge plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>> <</if>> <</if>> - <<if $toysBoughtButtPlugTails == 1 && $activeSlave.buttplug != "none">> + <<if isItemAccessible("tail") && $activeSlave.buttplug != "none">> Anal accessory attachment: ''<span id="buttplugAttach">$activeSlave.buttplugAttachment</span>.'' <<link "None">><<set $activeSlave.buttplugAttachment = "none">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>> <<if $toysBoughtButtPlugTails == 1>> | <<link "Tail">><<set $activeSlave.buttplugAttachment = "tail">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>><</if>> @@ -763,23 +759,17 @@ <br>Vaginal accessory: ''<span id="vaginalAccessory">$activeSlave.vaginalAccessory</span>.'' <<link "None">><<set $activeSlave.vaginalAccessory = "none">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><<SlaveInteractImpreg>><<SlaveInteractFertility>><<SlaveInteractSexOption>><<SlaveInteractAnalSexOption>><<SlaveInteractGropeOption>><<SlaveInteractDickGropeOption>><<SlaveInteractAnalGropeOption>><</link>> | <<link "Dildo">><<set $activeSlave.vaginalAccessory = "dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>> - <<if $toysBoughtDildos == 1>> - <<if $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long dildo") && $activeSlave.breedingMark != 1>> | <<link "Long dildo">><<set $activeSlave.vaginalAccessory = "long dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>> <</if>> - <</if>> | <<link "Large dildo">><<set $activeSlave.vaginalAccessory = "large dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>> - <<if $toysBoughtDildos == 1>> - <<if $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long, large dildo") && $activeSlave.breedingMark != 1>> | <<link "Large and long dildo">><<set $activeSlave.vaginalAccessory = "long, large dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>> <</if>> - <</if>> <<if $activeSlave.vagina >= 2>>| <<link "Huge dildo">><<set $activeSlave.vaginalAccessory = "huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>><</if>> - <<if $toysBoughtDildos == 1>> - <<if $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long, huge dildo") && $activeSlave.breedingMark != 1>> <<if $activeSlave.vagina >= 2>>| <<link "Huge and long dildo">><<set $activeSlave.vaginalAccessory = "long, huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>><</if>> <</if>> - <</if>> | <<link "Chastity belt">><<set $activeSlave.vaginalAccessory = "chastity belt",$activeSlave.choosesOwnChastity = 0>><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><<SlaveInteractImpreg>><<SlaveInteractFertility>><<SlaveInteractSexOption>><<SlaveInteractAnalSexOption>><<SlaveInteractGropeOption>><<SlaveInteractDickGropeOption>><<SlaveInteractAnalGropeOption>><</link>> | <<link "Anal chastity belt">><<set $activeSlave.vaginalAccessory = "anal chastity",$activeSlave.choosesOwnChastity = 0>><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><<SlaveInteractSexOption>><<SlaveInteractAnalSexOption>><<SlaveInteractGropeOption>><<SlaveInteractDickGropeOption>><<SlaveInteractAnalGropeOption>><</link>> | <<link "Combined chastity belt">><<set $activeSlave.vaginalAccessory = "combined chastity",$activeSlave.choosesOwnChastity = 0>><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><<SlaveInteractImpreg>><<SlaveInteractFertility>><<SlaveInteractSexOption>><<SlaveInteractAnalSexOption>><<SlaveInteractGropeOption>><<SlaveInteractDickGropeOption>><<SlaveInteractAnalGropeOption>><</link>> diff --git a/src/uncategorized/storyCaption.tw b/src/uncategorized/storyCaption.tw index dadea53450e7676c4731f8540030573cb52588c9..ba454ff6d755f34ac97752711e742c403f83b7b1 100644 --- a/src/uncategorized/storyCaption.tw +++ b/src/uncategorized/storyCaption.tw @@ -433,7 +433,7 @@ <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ <</if>> <<if $riotCenter == 1>> - <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotCenter">><</link>></span> @@.cyan;[Shift+R]@@ + <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotControlCenter">><</link>></span> @@.cyan;[Shift+R]@@ <</if>> <</if>> <<if $cyberMod != 0 && $researchLab.built == "true">> @@ -470,7 +470,7 @@ <br><span id="secBarracks"><<link "Manage Military">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "secBarracks">><</link>></span> @@.cyan;[Shift+A]@@ <</if>> <<if $riotCenter == 1>> - <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotCenter">><</link>></span> @@.cyan;[Shift+R]@@ + <br><span id="riotCenter"><<link "Manage Rebels">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "riotControlCenter">><</link>></span> @@.cyan;[Shift+R]@@ <</if>> <</if>> <<if $cyberMod != 0 && $researchLab.built == "true">> diff --git a/src/uncategorized/wardrobeUse.tw b/src/uncategorized/wardrobeUse.tw index cd74f8d8bccbe685357a300f0a086a8841021aa4..21d1678737048df7c9c35a0e364dd2023e9cf5ef 100644 --- a/src/uncategorized/wardrobeUse.tw +++ b/src/uncategorized/wardrobeUse.tw @@ -170,98 +170,98 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> -<<if ($arcologies[0].FSRepopulationFocus != "unset") || ($cheatMode == 1) || ($clothesBoughtMaternityLingerie == 1)>> +<<if isItemAccessible("attractive lingerie for a pregnant woman")>> | //FS// <<link "Attractive lingerie for a pregnant woman">> <<set $activeSlave.clothes = "attractive lingerie for a pregnant woman",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSGenderFundamentalist != "unset") || ($cheatMode == 1) || ($clothesBoughtBunny == 1)>> +<<if isItemAccessible("a bunny outfit")>> | //FS// <<link "Bunny outfit">> <<set $activeSlave.clothes = "a bunny outfit",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSPhysicalIdealist != "unset") || ($cheatMode == 1) || ($clothesBoughtOil == 1)>> +<<if isItemAccessible("body oil")>> | //FS// <<link "Body oil">> <<set $activeSlave.clothes = "body oil",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSDegradationist != "unset") || ($cheatMode == 1) || ($clothesBoughtChains == 1)>> +<<if isItemAccessible("chains")>> | //FS// <<link "Chains">> <<set $activeSlave.clothes = "chains",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSChattelReligionist != "unset") || ($cheatMode == 1) || ($clothesBoughtHabit == 1)>> +<<if isItemAccessible("a chattel habit")>> | //FS// <<link "Chattel habit">> <<set $activeSlave.clothes = "a chattel habit",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSPaternalist != "unset") || ($cheatMode == 1) || ($clothesBoughtConservative == 1)>> +<<if isItemAccessible("conservative clothing")>> | //FS// <<link "Conservative clothing">> <<set $activeSlave.clothes = "conservative clothing",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSArabianRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtHarem == 1)>> +<<if isItemAccessible("harem gauze")>> | //FS// <<link "Harem gauze">> <<set $activeSlave.clothes = "harem gauze",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSAztecRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtHuipil == 1)>> +<<if isItemAccessible("a huipil")>> | //FS// <<link "Huipil">> <<set $activeSlave.clothes = "a huipil",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSEdoRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtKimono == 1)>> +<<if isItemAccessible("a kimono")>> | //FS// <<link "Kimono">> <<set $activeSlave.clothes = "a kimono",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSRepopulationFocus != "unset") || ($cheatMode == 1) || ($clothesBoughtMaternityDress == 1)>> +<<if isItemAccessible("a maternity dress")>> | //FS// <<link "Maternity dress">> <<set $activeSlave.clothes = "a maternity dress",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSChineseRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtQipao == 1)>> +<<if isItemAccessible("a slutty qipao")>> | //FS// <<link "Slutty qipao">> <<set $activeSlave.clothes = "a slutty qipao",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSHedonisticDecadence != "unset") || ($cheatMode == 1) || ($clothesBoughtLazyClothes == 1)>> +<<if isItemAccessible("stretch pants and a crop-top")>> | //FS// <<link "Stretch pants and a crop-top">> <<set $activeSlave.clothes = "stretch pants and a crop-top",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSRomanRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtToga == 1)>> +<<if isItemAccessible("a toga")>> | //FS// <<link "Toga">> <<set $activeSlave.clothes = "a toga",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> <<replace "#clothingDescription">><br>//<<ClothingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSPastoralist != "unset") || ($cheatMode == 1) || ($clothesBoughtWestern == 1)>> +<<if isItemAccessible("Western clothing")>> | //FS// <<link "Western clothing">> <<set $activeSlave.clothes = "Western clothing",$activeSlave.choosesOwnClothes = 0>> <<replace "#clothes">>$activeSlave.clothes<</replace>> @@ -376,14 +376,14 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#collar">>$activeSlave.collar<</replace>> <<replace "#collarDescription">><br>//<<collarDescription>>//<</replace>> <</link>> -<<if ($arcologies[0].FSGenderFundamentalist != "unset") || ($cheatMode == 1) || ($clothesBoughtBunny == 1)>> +<<if isItemAccessible("bowtie")>> | //FS// <<link "Bowtie collar">> <<set $activeSlave.collar = "bowtie">> <<replace "#collar">>$activeSlave.collar<</replace>> <<replace "#collarDescription">><br>//<<collarDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSEgyptianRevivalist != "unset") || ($cheatMode == 1) || ($clothesBoughtEgypt == 1)>> +<<if isItemAccessible("ancient Egyptian")>> | //FS// <<link "Ancient Egyptian">> <<set $activeSlave.collar = "ancient Egyptian">> <<replace "#collar">>$activeSlave.collar<</replace>> @@ -425,7 +425,7 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#collar">>$activeSlave.collar<</replace>> <<replace "#collarDescription">><br>//<<collarDescription>>//<</replace>> <</link>> -<<if $toysBoughtGags == 1 && $activeSlave.oralSkill > 0>> +<<if isItemAccessible("massive dildo gag") && $activeSlave.oralSkill > 50>> | <<link "Massive dildo gag">> <<set $activeSlave.collar = "massive dildo gag">> <<replace "#collar">>$activeSlave.collar<</replace>> @@ -531,7 +531,7 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#bellyAccessoryDescription">><br>//<<clothingCorsetDescription>><<CorsetPiercingDescription>>//<</replace>> <</link>> <</if>> -<<if ($arcologies[0].FSRepopulationFocus != "unset") || ($cheatMode == 1) || ($clothesBoughtBelly == 1)>> +<<if isItemAccessible("a small empathy belly")>> /* works for all of them */ <<if $activeSlave.belly < 1500 && $activeSlave.inflation == 0 && $activeSlave.weight < 130>> | <<link "1st Trimester belly">> <<set $activeSlave.bellyAccessory = "a small empathy belly">> @@ -581,7 +581,7 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#vaginalAccessoryDescription">>//<<vaginalAccessoryDescription>>//<</replace>> <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> <</link>> - <<if $toysBoughtDildos == 1 && $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long dildo") && $activeSlave.breedingMark != 1>> | <<link "Long dildo">> <<set $activeSlave.vaginalAccessory = "long dildo">> <<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>> @@ -595,7 +595,7 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#vaginalAccessoryDescription">>//<<vaginalAccessoryDescription>>//<</replace>> <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> <</link>> - <<if $toysBoughtDildos == 1 && $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long, large dildo") && $activeSlave.breedingMark != 1>> | <<link "Large and long dildo">> <<set $activeSlave.vaginalAccessory = "long, large dildo">> <<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>> @@ -610,7 +610,7 @@ Clothes: ''<span id="clothes">$activeSlave.clothes</span>.'' <<replace "#vaginalAccessoryDescription">>//<<vaginalAccessoryDescription>>//<</replace>> <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> <</link>> - <<if $toysBoughtDildos == 1 && $activeSlave.breedingMark != 1>> + <<if isItemAccessible("long, huge dildo") && $activeSlave.breedingMark != 1>> | <<link "Huge and long dildo">> <<set $activeSlave.vaginalAccessory = "long, huge dildo">> <<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>> @@ -685,7 +685,7 @@ Anal accessory: ''<span id="buttplug">$activeSlave.buttplug</span>.'' <<replace "#buttplug">>$activeSlave.buttplug<</replace>> <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> <</link>> -<<if $toysBoughtButtPlugs == 1 && $activeSlave.breedingMark != 1>> +<<if isItemAccessible("long plug") && $activeSlave.breedingMark != 1>> | <<link "Long">> <<set $activeSlave.buttplug = "long plug">> <<replace "#buttplug">>$activeSlave.buttplug<</replace>> @@ -697,7 +697,7 @@ Anal accessory: ''<span id="buttplug">$activeSlave.buttplug</span>.'' <<replace "#buttplug">>$activeSlave.buttplug<</replace>> <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> <</link>> -<<if $toysBoughtButtPlugs == 1 && $activeSlave.breedingMark != 1>> +<<if isItemAccessible("long, large plug") && $activeSlave.breedingMark != 1>> | <<link "Long and large">> <<set $activeSlave.buttplug = "long, large plug">> <<replace "#buttplug">>$activeSlave.buttplug<</replace>> @@ -709,7 +709,7 @@ Anal accessory: ''<span id="buttplug">$activeSlave.buttplug</span>.'' <<replace "#buttplug">>$activeSlave.buttplug<</replace>> <<replace "#buttplugDescription">>//<<buttplugDescription>>//<</replace>> <</link>><</if>> -<<if $toysBoughtButtPlugs == 1>> +<<if isItemAccessible("long, huge plug")>> <<if $activeSlave.breedingMark != 1 && $activeSlave.anus >= 2>> | <<link "Long and huge">> <<set $activeSlave.buttplug = "long, huge plug">> @@ -718,7 +718,7 @@ Anal accessory: ''<span id="buttplug">$activeSlave.buttplug</span>.'' <</link>> <</if>> <</if>> -<<if $toysBoughtButtPlugTails == 1 && $activeSlave.buttplug != "none">> +<<if isItemAccessible("tail") && $activeSlave.buttplug != "none">> Anal accessory attachment: ''<span id="buttplugAttach">$activeSlave.buttplugAttachment</span>.'' <<link "None">><<set $activeSlave.buttplugAttachment = "none">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>> <<if $toysBoughtButtPlugTails == 1>> | <<link "Tail">><<set $activeSlave.buttplugAttachment = "tail">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>><</if>>