{"ctor":"BitburnerSaveObject","data":{"PlayerSave":"{\"ctor\":\"PlayerObject\",\"data\":{\"hp\":{\"current\":10,\"max\":10},\"skills\":{\"hacking\":971,\"strength\":2,\"defense\":3,\"dexterity\":2,\"agility\":1,\"charisma\":2,\"intelligence\":0},\"exp\":{\"hacking\":18016243.473873075,\"strength\":0,\"defense\":0,\"dexterity\":0,\"agility\":0,\"charisma\":0,\"intelligence\":0},\"mults\":{\"hacking_chance\":1.9013363051154817,\"hacking_speed\":1.8918404690899213,\"hacking_money\":3.177056239311913,\"hacking_grow\":1.9026567488992172,\"hacking\":2.901930693334414,\"strength\":2.6340684456840586,\"defense\":3.206692020832767,\"dexterity\":2.668727241022007,\"agility\":1.5982316690753424,\"charisma\":2.1653207962728533,\"hacking_exp\":5.36365248779338,\"strength_exp\":2.310586355863209,\"defense_exp\":2.310586355863209,\"dexterity_exp\":2.310586355863209,\"agility_exp\":2.310586355863209,\"charisma_exp\":2.07509909642815,\"company_rep\":2.739130807285159,\"faction_rep\":2.075099096428151,\"crime_money\":1.8044339968940444,\"crime_success\":2.050493178288687,\"hacknet_node_money\":3.838942955835226,\"hacknet_node_purchase_cost\":0.5025852045073843,\"hacknet_node_ram_cost\":0.6569741235390641,\"hacknet_node_core_cost\":0.6569741235390641,\"hacknet_node_level_cost\":0.5584280050082047,\"work_money\":2.9752985176586395,\"bladeburner_max_stamina\":1,\"bladeburner_stamina_gain\":1,\"bladeburner_analysis\":1,\"bladeburner_success_chance\":1},\"augmentations\":[{\"level\":1,\"name\":\"Hacknet Node NIC Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Core Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node Kernel Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node CPU Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Cache Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Neurotrainer II\"},{\"level\":1,\"name\":\"CashRoot Starter Kit\"},{\"level\":1,\"name\":\"BitWire\"},{\"level\":27,\"name\":\"NeuroFlux Governor\"},{\"level\":1,\"name\":\"Neural-Retention Enhancement\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen I\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen II\"},{\"level\":1,\"name\":\"Embedded Netburner Module\"},{\"level\":1,\"name\":\"Artificial Synaptic Potentiation\"},{\"level\":1,\"name\":\"DataJack\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen III\"},{\"level\":1,\"name\":\"CRTX42-AA Gene Modification\"},{\"level\":1,\"name\":\"Synaptic Enhancement Implant\"},{\"level\":1,\"name\":\"Neurotrainer I\"},{\"level\":1,\"name\":\"Embedded Netburner Module Core Implant\"},{\"level\":1,\"name\":\"Neuralstimulator\"},{\"level\":1,\"name\":\"Enhanced Myelin Sheathing\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen IV\"},{\"level\":1,\"name\":\"The Black Hand\"},{\"level\":1,\"name\":\"PCMatrix\"},{\"level\":1,\"name\":\"Speech Processor Implant\"},{\"level\":1,\"name\":\"Wired Reflexes\"},{\"level\":1,\"name\":\"Neuroreceptor Management Implant\"},{\"level\":1,\"name\":\"Neuregen Gene Modification\"},{\"level\":1,\"name\":\"Nanofiber Weave\"},{\"level\":1,\"name\":\"Social Negotiation Assistant (S.N.A)\"},{\"level\":1,\"name\":\"Nuoptimal Nootropic Injector Implant\"},{\"level\":1,\"name\":\"ADR-V1 Pheromone Gene\"},{\"level\":1,\"name\":\"Speech Enhancement\"},{\"level\":1,\"name\":\"NutriGen Implant\"},{\"level\":1,\"name\":\"INFRARET Enhancement\"},{\"level\":1,\"name\":\"Combat Rib I\"},{\"level\":1,\"name\":\"Augmented Targeting I\"},{\"level\":1,\"name\":\"Combat Rib II\"},{\"level\":1,\"name\":\"DermaForce Particle Barrier\"},{\"level\":1,\"name\":\"Augmented Targeting II\"}],\"queuedAugmentations\":[],\"city\":\"Ishima\",\"bitNodeN\":1,\"corporation\":null,\"gang\":null,\"bladeburner\":null,\"currentServer\":\"home\",\"factions\":[\"BitRunners\"],\"factionInvitations\":[\"Netburners\",\"CyberSec\",\"NiteSec\",\"The Black Hand\",\"Aevum\",\"Sector-12\",\"Volhaven\",\"Tian Di Hui\",\"New Tokyo\",\"Ishima\"],\"hacknetNodes\":[{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43724.79999992515,\"ram\":64,\"totalMoneyGenerated\":1288340217.2229536,\"name\":\"hacknet-node-0\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43723.79999992516,\"ram\":64,\"totalMoneyGenerated\":1286625488.5657687,\"name\":\"hacknet-node-1\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43722.79999992518,\"ram\":64,\"totalMoneyGenerated\":1285308465.770705,\"name\":\"hacknet-node-2\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43721.79999992519,\"ram\":64,\"totalMoneyGenerated\":1283494280.3346565,\"name\":\"hacknet-node-3\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43720.799999925206,\"ram\":64,\"totalMoneyGenerated\":1282453481.6433332,\"name\":\"hacknet-node-4\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43719.79999992522,\"ram\":64,\"totalMoneyGenerated\":1281445825.8835967,\"name\":\"hacknet-node-5\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43718.799999925235,\"ram\":64,\"totalMoneyGenerated\":1279985184.6290956,\"name\":\"hacknet-node-6\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":43717.79999992525,\"ram\":64,\"totalMoneyGenerated\":1279206625.2969444,\"name\":\"hacknet-node-7\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":42843.399999937974,\"ram\":64,\"totalMoneyGenerated\":1278030456.2499452,\"name\":\"hacknet-node-8\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":42201.399999947316,\"ram\":64,\"totalMoneyGenerated\":1276777166.1665263,\"name\":\"hacknet-node-9\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":41739.19999995404,\"ram\":64,\"totalMoneyGenerated\":1275493043.745046,\"name\":\"hacknet-node-10\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":41473.799999957904,\"ram\":64,\"totalMoneyGenerated\":1274519701.106896,\"name\":\"hacknet-node-11\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":41257.79999996105,\"ram\":64,\"totalMoneyGenerated\":1273613156.6095881,\"name\":\"hacknet-node-12\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":39345.59999998887,\"ram\":64,\"totalMoneyGenerated\":1270230469.6653788,\"name\":\"hacknet-node-13\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":37581.400000014546,\"ram\":64,\"totalMoneyGenerated\":1264287834.9863603,\"name\":\"hacknet-node-14\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":36979.20000002331,\"ram\":64,\"totalMoneyGenerated\":1257629444.5989857,\"name\":\"hacknet-node-15\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":36688.00000002755,\"ram\":64,\"totalMoneyGenerated\":1251103089.0444057,\"name\":\"hacknet-node-16\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":36087.40000003629,\"ram\":64,\"totalMoneyGenerated\":1236590660.4813437,\"name\":\"hacknet-node-17\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":35532.80000004436,\"ram\":64,\"totalMoneyGenerated\":1221943285.8512013,\"name\":\"hacknet-node-18\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":34014.40000006645,\"ram\":64,\"totalMoneyGenerated\":1178926150.0283577,\"name\":\"hacknet-node-19\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":32297.800000082327,\"ram\":64,\"totalMoneyGenerated\":1125891718.6236389,\"name\":\"hacknet-node-20\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":28452.80000006834,\"ram\":64,\"totalMoneyGenerated\":998151041.2031584,\"name\":\"hacknet-node-21\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":27041.000000063203,\"ram\":64,\"totalMoneyGenerated\":948570114.5107349,\"name\":\"hacknet-node-22\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":35208.13289777716,\"onlineTimeSeconds\":24734.40000005481,\"ram\":64,\"totalMoneyGenerated\":867361800.5326726,\"name\":\"hacknet-node-23\"}}],\"has4SData\":false,\"has4SDataTixApi\":false,\"hashManager\":{\"ctor\":\"HashManager\",\"data\":{\"capacity\":0,\"hashes\":0,\"upgrades\":{\"Sell for Money\":0,\"Sell for Corporation Funds\":0,\"Reduce Minimum Security\":0,\"Increase Maximum Money\":0,\"Improve Studying\":0,\"Improve Gym Training\":0,\"Exchange for Corporation Research\":0,\"Exchange for Bladeburner Rank\":0,\"Exchange for Bladeburner SP\":0,\"Generate Coding Contract\":0,\"Company Favor\":0}}},\"hasTixApiAccess\":false,\"hasWseAccount\":true,\"jobs\":{},\"karma\":-30.300000000000008,\"numPeopleKilled\":0,\"location\":\"Travel Agency\",\"money\":35955956614.7684,\"moneySourceA\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-8301568,\"codingcontract\":0,\"corporation\":0,\"crime\":0,\"gang\":0,\"hacking\":14960202703.564949,\"hacknet\":29265978701.857586,\"hacknet_expenses\":-7903523222.888864,\"hospitalization\":0,\"infiltration\":0,\"sleeves\":0,\"stock\":0,\"total\":35954956614.768425,\"work\":0,\"servers\":-44000000,\"other\":-315400000,\"augmentations\":0}},\"moneySourceB\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-180784240,\"codingcontract\":0,\"corporation\":0,\"crime\":24717636.172864918,\"gang\":0,\"hacking\":54845151768.57913,\"hacknet\":219500292383.8611,\"hacknet_expenses\":-84307005899.00201,\"hospitalization\":-3678000,\"infiltration\":0,\"sleeves\":0,\"stock\":-200000000,\"total\":95394862536.1112,\"work\":6256069.41311641,\"servers\":-396000000,\"other\":-1562199973.8107805,\"augmentations\":-92331887259.27863}},\"playtimeSinceLastAug\":45080200,\"playtimeSinceLastBitnode\":516730600,\"lastAugReset\":1693737435816,\"lastNodeReset\":1693265783929,\"purchasedServers\":[\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"scriptProdSinceLastAug\":14960202703.564949,\"sleeves\":[],\"sleevesFromCovenant\":0,\"sourceFiles\":{\"ctor\":\"JSONMap\",\"data\":[[1,1]]},\"exploits\":[\"N00dles\",\"UndocumentedFunctionCall\",\"Bypass\",\"Unclickable\",\"RealityAlteration\",\"INeedARainbow\"],\"achievements\":[{\"ID\":\"NS2\",\"unlockedOn\":1662595895471},{\"ID\":\"FIRST_HACKNET_NODE\",\"unlockedOn\":1662596015477},{\"ID\":\"FROZE\",\"unlockedOn\":1662606229026},{\"ID\":\"BRUTESSH.EXE\",\"unlockedOn\":1662608449026},{\"ID\":\"FTPCRACK.EXE\",\"unlockedOn\":1662632539212},{\"ID\":\"CYBERSEC\",\"unlockedOn\":1662654522875},{\"ID\":\"WORKOUT\",\"unlockedOn\":1662654762877},{\"ID\":\"HACKNET_NODE_10M\",\"unlockedOn\":1662699713290},{\"ID\":\"INSTALL_1\",\"unlockedOn\":1662736673277},{\"ID\":\"NITESEC\",\"unlockedOn\":1662820759873},{\"ID\":\"TOR\",\"unlockedOn\":1662827397785},{\"ID\":\"HOSPITALIZED\",\"unlockedOn\":1662832140786},{\"ID\":\"RELAYSMTP.EXE\",\"unlockedOn\":1662845880787},{\"ID\":\"HTTPWORM.EXE\",\"unlockedOn\":1662845880789},{\"ID\":\"TRAVEL\",\"unlockedOn\":1662862621580},{\"ID\":\"MAX_HACKNET_NODE\",\"unlockedOn\":1662949451779},{\"ID\":\"SQLINJECT.EXE\",\"unlockedOn\":1662949691784},{\"ID\":\"THE_BLACK_HAND\",\"unlockedOn\":1662965892986},{\"ID\":\"FORMULAS.EXE\",\"unlockedOn\":1663053707392},{\"ID\":\"BITRUNNERS\",\"unlockedOn\":1663226317042},{\"ID\":\"DONATION\",\"unlockedOn\":1663453433269},{\"ID\":\"DRAIN_SERVER\",\"unlockedOn\":1663459433299},{\"ID\":\"REPUTATION_10M\",\"unlockedOn\":1664194330396},{\"ID\":\"DAEDALUS\",\"unlockedOn\":1664194510488},{\"ID\":\"SF1.1\",\"unlockedOn\":1693265834474},{\"ID\":\"N00DLES\",\"unlockedOn\":1693405977626},{\"ID\":\"UNDOCUMENTEDFUNCTIONCALL\",\"unlockedOn\":1693571157628},{\"ID\":\"BYPASS\",\"unlockedOn\":1693571277636},{\"ID\":\"UNCLICKABLE\",\"unlockedOn\":1693781222084},{\"ID\":\"REALITYALTERATION\",\"unlockedOn\":1693781368207},{\"ID\":\"RAINBOW\",\"unlockedOn\":1693781668091}],\"terminalCommandHistory\":[\"buy -l\",\"backdoor1CSEC \",\"connect harakiri-sushi; connect CSEC; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor2NiteSec \",\"connect hong-fang-tea; connect zer0; connect omega-net; connect avmnite-02h; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor3BlackHand \",\"connect hong-fang-tea; connect max-hardware; connect neo-net; connect netlink; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"connect hong-fang-tea; connect max-hardware; connect neo-net; connect netlink; connect I.I.I.I; connect lexo-corp; connect galactic-cyber; connect omnia; connect zeus-med; connect nova-med; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"startAll \",\"./start-hack-course.js \",\"cat start-hack-course.js \",\"./start-hack-course.js \",\"startAll \",\"buy-all \",\"backdoor1CSEC \",\"connect foodnstuff; connect CSEC; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor2NiteSec \",\"connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor3BlackHand \",\"connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"home\",\"./start-hack-course.js \",\"buy-all \",\"buy -l\",\"backdoor3BlackHand \",\"connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy-all \",\"backdoor4BitRunners \",\"connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy-all \",\"scan-analyze \",\"home\",\"./scan-network.js \",\"nano scan\",\"nano scan.txt \",\"./alter-reality.js \",\"ls\"],\"lastUpdate\":1693782515884,\"lastSave\":1693782515228,\"totalPlaytime\":31187348600,\"currentWork\":{\"ctor\":\"FactionWork\",\"data\":{\"type\":\"FACTION\",\"singularity\":false,\"cyclesWorked\":184420,\"factionWorkType\":\"hacking\",\"factionName\":\"BitRunners\"}},\"focus\":false,\"entropy\":0,\"identifier\":\"38aadbdb6216\"}}","AllServersSave":"{\"home\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"home\",\"httpPortOpen\":true,\"ip\":\"75.8.0.0\",\"isConnectedTo\":true,\"maxRam\":32,\"messages\":[\"hackers-starting-handbook.lit\",\"j0.msg\",\"j1.msg\",\"csec-test.msg\",\"j2.msg\",\"nitesec-test.msg\",\"j3.msg\",\"j4.msg\",\"19dfj3l1nd.msg\"],\"organizationName\":\"Home PC\",\"programs\":[\"NUKE.exe\",\"b1t_flum3.exe\",\"BruteSSH.exe\",\"DeepscanV1.exe\",\"AutoLink.exe\",\"fl1ght.exe\",\"FTPCrack.exe\",\"ServerProfiler.exe\",\"relaySMTP.exe\",\"HTTPWorm.exe\",\"SQLInject.exe\",\"DeepscanV2.exe\"],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"home\"}}],[\"run-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    let host = ns.args[0];\\n    let remote = ns.args[1];\\n    let script = 'simple-hack.js';\\n\\n    if (!ns.serverExists(host)) {\\n        ns.print(`Host '${host}'' doesn't exist!`);\\n        return 1;\\n    }\\n\\n    if (!ns.serverExists(remote)) {\\n        ns.print(`Remote '${remote}'' doesn't exist!`);\\n        return 2;\\n    }\\n\\n    if (!ns.fileExists(script, host)) {\\n        if (!ns.fileExists(script, 'home')) {\\n            ns.print(`Script '${script}' doesn't exist!`);\\n            return 3;\\n        }\\n\\n        ns.scp(script, host, 'home');\\n    }\\n\\n    let serverMaxRam = ns.getServerMaxRam(host);\\n    let serverUsedRam = ns.getServerUsedRam(host);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, host);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    if(maxThreads == 0)\\n    {\\n        ns.print(`Not enough ram to run '${script}', ${scriptRam}/${serverFreeRam}!`)\\n    }\\n\\n    ns.scriptKill(script, host);\\n\\n    if (!ns.exec(script, host, maxThreads, remote)) {\\n        ns.tprint(`Exec error running script '${script} on '${host}!`);\\n    }\\n\\n    \\n}\\n\",\"filename\":\"run-simple-hack.js\",\"server\":\"home\"}}],[\"auto-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    /**\\n     * @constant\\n     * @default\\n     */\\n    const EXPLOITS = [\\n        'BruteSSH.exe',\\n        'FTPCrack.exe',\\n        'relaySMTP.exe',\\n        'HTTPWorm.exe',\\n        'SQLInject.exe'\\n    ];\\n\\n    /** @function maxPortsToHack\\n     * Calculate how many ports you're able to open\\n     * @returns {number} number of ports you're able to open\\n     */\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        EXPLOITS.forEach(exploit => {\\n            if (ns.fileExists(exploit)) ++maxPorts;\\n        });\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n\\n    /** @function analyzeServer\\n     * Analyze server requirements\\n     * @param {string} server \\n     * @returns {object} object containing server information\\n     */\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts)\\n        };\\n    }\\n\\n    /** @function runHack\\n     * Recursively scan, try to nuke and hack servers in the network\\n     * @param {string} server server to nuke and hack\\n     * @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running\\n     */\\n    async function runNuke(server) {\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            ns.print(`\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n            for (let i = 0; i < maxPortsToHack(); ++i) {\\n                switch (EXPLOITS[i]) {\\n                    case 'BruteSSH.exe':\\n                        ns.brutessh(server);\\n                        break;\\n\\n                    case 'FTPCrack.exe':\\n                        ns.ftpcrack(server);\\n                        break;\\n\\n                    case 'relaySMTP.exe':\\n                        ns.relaysmtp(server);\\n                        break;\\n\\n                    case 'HTTPWorm.exe':\\n                        ns.httpworm(server);\\n                        break;\\n\\n                    case 'SQLInject.exe':\\n                        ns.sqlinject(server);\\n                        break;\\n\\n                }\\n            }\\n            ns.nuke(server);\\n        }\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            if (!ns.fileExists(script, 'home')) {\\n                ns.print(`ERROR Script '${script}' doesn't exist!`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await runNuke(nextServer);\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) {\\n                    let hackExitCode = await runHack(nextServer);\\n\\n                    // if (hackExitCode == 0) {\\n                    //     ns.print('INFO ' + `\\\"Hack already running on ${nextServer}\\\"`);\\n                    // } else if (hackExitCode == -6) {\\n                    //     ns.print('ERROR ' + `\\\"No root access to ${nextServer}!\\\"`);\\n                    // } else if (hackExitCode == -4) {\\n                    //     ns.print('WARN ' + `\\\"Not enough RAM to run script on ${nextServer}!\\\"`);\\n                    // } else {\\n                    //     if (hackExitCode < 0) {\\n                    //         ns.print('ERROR ' + `\\\"Hack exec ERROR on '${nextServer}': ${hackExitCode}!\\\"`);\\n                    //     } else {\\n                    //         ns.print('INFO ' + `\\\"Hack started on '${nextServer}'\\\"`);\\n                    //     }\\n                    // }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n        await ns.sleep(10);\\n    }\\n\\n    ns.write('nuke-log.js', '', 'w');\\n    if (!ns.scriptRunning('simple-hack.js', 'n00dles')) ns.write('hack-log.js', '', 'w');\\n    ns.tprint(`TERMINAL = \\\"Running scan\\\"`);\\n\\n    while (true) {\\n        ns.print(`INFO Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(60000);\\n    }\\n}\\n\",\"filename\":\"auto-nuke.js\",\"server\":\"home\"}}],[\"hacknet-bot.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    const nodeCostThreshold = ns.args.length > 0 ? ns.args[0] : 0.2;\\n    const upgradeCostThreshold = ns.args.length > 1 ? ns.args[1] : 0.1;\\n    const upgradeCount = ns.args.length > 2 ? ns.args[2] : 1;\\n    const helperBuyThreshold = ns.args.length > 3 ? ns.args[3] : 0.2;\\n    const nodeCap = 24;\\n    const levelCap = 200;\\n    const ramCap = 64;\\n    const coreCap = 16;\\n    const serverRAM = 32;\\n    ns.tprint(`Bot started {nodeCostThreshold: ${nodeCostThreshold}, upgradeCostThreshold: ${upgradeCostThreshold}, upgradeCount: ${upgradeCount}}`);\\n\\n    \\n\\n    while (true) {\\n        let currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n\\n        let nodePurchaseCost = ns.hacknet.getPurchaseNodeCost();\\n        let nodeCount = ns.hacknet.numNodes();\\n\\n        if (nodeCount < nodeCap && nodePurchaseCost / Math.abs(currentMoney) < nodeCostThreshold) {\\n            ns.hacknet.purchaseNode();\\n            currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            ++nodeCount;\\n        }\\n\\n        for (let index = 0; index < nodeCount; ++index) {\\n            let nodeStats = ns.hacknet.getNodeStats(index);\\n\\n            if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeLevel(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeRam(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeCore(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n        }\\n\\n        let serverCost = ns.getPurchasedServerCost(serverRAM);\\n\\n        if (serverCost < currentMoney * helperBuyThreshold) {\\n            let newServer = ns.purchaseServer('home', serverRAM);\\n            if (newServer != '') {\\n                ns.tprint(`Bought a server`);\\n                ns.scp('grow-helper.js', newServer);\\n                ns.scp('constants.js', newServer);\\n                let execExitCode = ns.exec('grow-helper.js', newServer, 10, 20);\\n                ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n            }\\n        }\\n\\n\\n\\n\\n        // let logFiles = ['hack-log.js', 'nuke-log.js'];\\n\\n        // for (let index = 0; index < logFiles.length; index++) {\\n        //     const logFile = logFiles[index];\\n        //     let portData = ns.readPort(index + 1);\\n        //     if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');\\n        // }\\n\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"hacknet-bot.js\",\"server\":\"home\"}}],[\"kill-all-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) ns.scriptKill('simple-hack.js', nextServer);\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    scanServer('home');\\n}\\n\",\"filename\":\"kill-all-simple-hack.js\",\"server\":\"home\"}}],[\"kill-hacknet.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    ns.scriptKill('hacknet-bot.js', 'home');\\n}\",\"filename\":\"kill-hacknet.js\",\"server\":\"home\"}}],[\"hack-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"hack-log.js\",\"server\":\"home\"}}],[\"kill-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    ns.scriptKill('auto-nuke.js', 'home');\\n}\",\"filename\":\"kill-nuke.js\",\"server\":\"home\"}}],[\"nuke-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"nuke-log.js\",\"server\":\"home\"}}],[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home\"}}],[\"buy-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.get\\n    if(ns.getPurchasedServerCost(16)\\n}\",\"filename\":\"buy-server.js\",\"server\":\"home\"}}],[\"buy-grow-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.getServerMoneyAvailable('home');\\n\\n    if (serverCost < 0.1 * currentMoney) {\\n        let newServer = ns.purchaseServer('home', 16);\\n        if (newServer != '') {\\n            ns.tprint(`Bought a server`);\\n            ns.scp('grow-helper.js', newServer);\\n            let execExitCode = ns.exec('grow-helper.js', newServer, 5, 20);\\n            ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n        }\\n    }\\n}\",\"filename\":\"buy-grow-server.js\",\"server\":\"home\"}}],[\"start-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    let script = 'grow-helper.js';\\n\\n\\n    let serverMaxRam = ns.getServerMaxRam(`home`);\\n    let serverUsedRam = ns.getServerUsedRam(`home`);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, `home`);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    ns.scp(script, `home`, 'home');\\n    ns.exec(script, `home`, maxThreads);\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        let serverMaxRam = ns.getServerMaxRam(`home-${server}`);\\n        let serverUsedRam = ns.getServerUsedRam(`home-${server}`);\\n        let serverFreeRam = serverMaxRam - serverUsedRam;\\n        let scriptRam = ns.getScriptRam(script, `home-${server}`);\\n        let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n        ns.scp(script, `home-${server}`, 'home');\\n        ns.exec(script, `home-${server}`, maxThreads);\\n    }\\n}\",\"filename\":\"start-grow-helpers.js\",\"server\":\"home\"}}],[\"backdoor-command.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    backdoorCommand = 'run BruteSSH.exe; ';\\n    backdoorCommand += 'run FTPCrack.exe; ';\\n    backdoorCommand += 'run relaySMTP.exe; ';\\n    backdoorCommand += 'run HTTPWorm.exe; ';\\n    backdoorCommand += 'run SQLInject.exe; ';\\n    backdoorCommand += 'run NUKE.exe; ';\\n    backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-command.js\",\"server\":\"home\"}}],[\"download-all-lit.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let litFiles = ns.ls(nextServer, 'lit');\\n                ns.tprint(`Download from '${nextServer}': ${litFiles}`);\\n                if (ns.args[0] && litFiles.length) {\\n                    ns.scp(litFiles, 'home', nextServer);\\n                }\\n\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    scanServer('home');\\n}\",\"filename\":\"download-all-lit.js\",\"server\":\"home\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home\"}}],[\"auto-nuke-v2.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\n\\n\\n/**\\n * loop\\n *  get all servers\\n *  nuke if possible\\n *      send scripts hack, grow weaken\\n *  buy grow servers\\n *  start helpers if not running include home //remove from hacknet\\n *      grow if needed\\n *      weaken if needed\\n *      hack if no grow or weaken\\n *  do simple hack\\n *      check if money available\\n *      check threads\\n *      run hack \\n *      run grow to recover\\n *      run weaken if security too high\\n *  buy hack tools\\n */\\n\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        await writeLog('ANALYZE', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess) {\\n            if (serverStatus.nukeAvailable) {\\n                await writeLog('NUKE', `\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n                for (let i = 0; i < maxPortsToHack(); ++i) {\\n                    switch (EXPLOITS[i]) {\\n                        case 'BruteSSH.exe':\\n                            ns.brutessh(server);\\n                            break;\\n\\n                        case 'FTPCrack.exe':\\n                            ns.ftpcrack(server);\\n                            break;\\n\\n                        case 'relaySMTP.exe':\\n                            ns.relaysmtp(server);\\n                            break;\\n\\n                        case 'HTTPWorm.exe':\\n                            ns.httpworm(server);\\n                            break;\\n\\n                        case 'SQLInject.exe':\\n                            ns.sqlinject(server);\\n                            break;\\n\\n                    }\\n                }\\n                ns.nuke(server);\\n            }\\n        }\\n\\n        serverStatus = analyzeServer(server);\\n\\n        if (serverStatus.rootAccess) {\\n            if (!ns.fileExists(script, 'home')) {\\n                await writeLog('ERROR', `\\\"Script '${script}' doesn't exist!\\\"`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n        let result = [];\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                result.concat(scanServer(nextServer, currentServer));\\n            }\\n        }\\n\\n        return [currentServer].concat(result);\\n    }\\n\\n    while (true) {\\n        let network = scanServer('home');\\n\\n        await ns.sleep(100);\\n    }\\n}\",\"filename\":\"auto-nuke-v2.js\",\"server\":\"home\"}}],[\"grow.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    await ns.grow(ns.args.length > 0 ? ns.args[0] : '');\\n}\",\"filename\":\"grow.js\",\"server\":\"home\"}}],[\"hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    await ns.hack(ns.args.length > 0 ? ns.args[0] : '');\\n}\",\"filename\":\"hack.js\",\"server\":\"home\"}}],[\"weaken.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    await ns.weaken(ns.args.length > 0 ? ns.args[0] : '')\\n}\",\"filename\":\"weaken.js\",\"server\":\"home\"}}],[\"kill-all-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        ns.scriptKill('grow-helper.js', `home-${server}`);\\n    }\\n}\\n\\n\\n\\n\\n\",\"filename\":\"kill-all-grow-helpers.js\",\"server\":\"home\"}}],[\"scan-network.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n        ns.tprint(`${'┃  '.repeat(scanLevel)}┣${currentServer}: ${nextConnectString}`);\\n        ns.write('scan.txt', `${'┃  '.repeat(scanLevel)}┣━${currentServer}: ${nextConnectString}`+'\\\\n', 'a');\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, nextConnectString, scanLevel+1);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    ns.write('scan.txt', ``, 'w');\\n    scanServer('home');\\n}\\n\",\"filename\":\"scan-network.js\",\"server\":\"home\"}}],[\"connect-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // backdoorCommand = 'run BruteSSH.exe; ';\\n    // backdoorCommand += 'run FTPCrack.exe; ';\\n    // backdoorCommand += 'run relaySMTP.exe; ';\\n    // backdoorCommand += 'run HTTPWorm.exe; ';\\n    // backdoorCommand += 'run SQLInject.exe; ';\\n    // backdoorCommand += 'run NUKE.exe; ';\\n    // backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    // terminalInput.value = backdoorCommand;\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"connect-server.js\",\"server\":\"home\"}}],[\"backdoor-all.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    async function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n\\n        let backdoorCommand = nextConnectString;\\n        backdoorCommand += 'run BruteSSH.exe; ';\\n        backdoorCommand += 'run FTPCrack.exe; ';\\n        backdoorCommand += 'run relaySMTP.exe; ';\\n        backdoorCommand += 'run HTTPWorm.exe; ';\\n        backdoorCommand += 'run SQLInject.exe; ';\\n        backdoorCommand += 'run NUKE.exe; ';\\n        backdoorCommand += 'backdoor';\\n\\n        terminalInput.value = backdoorCommand;\\n        terminalInput[handler].onChange({ target: terminalInput });\\n        terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n        await ns.sleep(60000)\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await scanServer(nextServer, currentServer, nextConnectString, scanLevel + 1);\\n            }\\n        }\\n    }\\n    \\n    await scanServer('home');\\n    terminalInput.value = 'home';\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-all.js\",\"server\":\"home\"}}],[\"test.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    // const handler = Object.keys(terminalInput)[1];\\n\\n    // terminalInput.value = \\\"COMMAND\\\";\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n    doc.querySelector('#root > div.MuiBox-root.css-1ik4laa > div.MuiDrawer-root.MuiDrawer-docked.css-v3syqg > div > ul > div:nth-child(8) > div > div > div:nth-child(2)').click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.MuiBox-root.css-1ik4laa > div.jss1.MuiBox-root.css-0 > div > p:nth-child(16) > span\\\").click(); // Travel\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"body > div.jss19.MuiModal-root.css-8ndowl > div.jss20 > div > button\\\").click(); // Aevum\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"body > div.jss19.MuiModal-root.css-8ndowl > div.jss20 > button\\\").click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.MuiBox-root.css-1ik4laa > div.jss1.MuiBox-root.css-0 > p:nth-child(9) > span:nth-child(1)\\\").click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.MuiBox-root.css-1ik4laa > div.jss1.MuiBox-root.css-0 > div > button:nth-child(4)\\\").click();\\n    await ns.sleep(100);\\n    doc.querySelector(\\\"#root > div.jss1.MuiBox-root.css-0 > div > div.MuiPaper-root.MuiPaper-elevation.MuiPaper-rounded.MuiPaper-elevation1.css-6vzjud > div.MuiBox-root.css-lqt4hu > button:nth-child(2)\\\").click();\\n}\",\"filename\":\"test.js\",\"server\":\"home\"}}],[\"document-bypass.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    terminalInput.value = \\\"COMMAND\\\";\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"document-bypass.js\",\"server\":\"home\"}}],[\"auto-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\n\\n\\n/**\\n * remove write log ✓\\n * loop\\n *  get all servers\\n *  nuke if possible\\n *      send scripts hack, grow weaken\\n *  backdoor factions\\n *  buy grow servers\\n *  start helpers if not running include home //remove from hacknet\\n *      grow if needed\\n *      weaken if needed\\n *      hack if no grow or weaken\\n *  do simple hack\\n *      check if money available\\n *      check threads\\n *      run hack \\n *      run grow to recover\\n *      run weaken if security too high\\n *  buy hack tools\\n */\\n\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}.${month}.${day}_${hour}:${minute}:${second}`;\\n        ns.print(`${type}_${timestamp} = ${obj};`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${type}_${timestamp} = ${obj};`);\\n    }\\n\\n    async function runNuke(server) {\\n        let serverStatus = analyzeServer(server);\\n        await writeLog('ANALYZE', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess) {\\n            if (serverStatus.nukeAvailable) {\\n                await writeLog('NUKE', `\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n                for (let i = 0; i < maxPortsToHack(); ++i) { // TODO: change to try/catch\\n                    switch (EXPLOITS[i]) {\\n                        case 'BruteSSH.exe':\\n                            ns.brutessh(server);\\n                            break;\\n\\n                        case 'FTPCrack.exe':\\n                            ns.ftpcrack(server);\\n                            break;\\n\\n                        case 'relaySMTP.exe':\\n                            ns.relaysmtp(server);\\n                            break;\\n\\n                        case 'HTTPWorm.exe':\\n                            ns.httpworm(server);\\n                            break;\\n\\n                        case 'SQLInject.exe':\\n                            ns.sqlinject(server);\\n                            break;\\n\\n                    }\\n                }\\n                ns.nuke(server);\\n            }\\n            // TODO: if faction > backdoor\\n        }\\n    }\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n\\n        if (serverStatus.rootAccess) {\\n            if (!ns.fileExists(script, 'home')) {\\n                await writeLog('ERROR', `\\\"Script '${script}' doesn't exist!\\\"`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n        let result = [];\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                result.concat(scanServer(nextServer, currentServer));\\n            }\\n        }\\n\\n        return [currentServer].concat(result);\\n    }\\n\\n    while (true) {\\n        let network = scanServer('home');\\n\\n        await ns.sleep(100);\\n    }\\n}\",\"filename\":\"auto-hack.js\",\"server\":\"home\"}}],[\"start-hack-course.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    // const handler = Object.keys(terminalInput)[1];\\n\\n    // terminalInput.value = \\\"COMMAND\\\";\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // const terminalButton = doc.querySelector();\\n    let terminal;\\n    let city;\\n    let travel;\\n    for (const elem of doc.querySelectorAll('div.MuiDrawer-root.MuiDrawer-docked p')) {\\n        if (elem.textContent == 'Terminal') {\\n            terminal = elem;\\n        }\\n        if (elem.textContent == 'City') {\\n            city = elem;\\n        }\\n        if (elem.textContent == 'Travel') {\\n            travel = elem;\\n        }\\n    }\\n\\n\\n    travel.click(); await ns.sleep(100);\\n\\n    for (const aevum of doc.querySelectorAll('div#root span')) {\\n        if (aevum.textContent == 'A') {\\n            aevum.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const travelConfirm of doc.querySelectorAll('div[role=\\\"presentation\\\"] p')) {\\n        if (travelConfirm.textContent == 'Travel') {\\n            travelConfirm.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    const closeButton = doc.querySelector('div[role=\\\"presentation\\\"] button');\\n    if(!closeButton == undefined) closeButton.click();\\n\\n    city.click(); await ns.sleep(100);\\n\\n    for (const uni of doc.querySelectorAll('div#root span')) {\\n        if (uni.textContent == 'U') {\\n            uni.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const course of doc.querySelectorAll('div#root button')) {\\n        if (course.textContent == 'Take Algorithms course ($-1.280k / sec)') {\\n            course.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const closeCourse of doc.querySelectorAll('div#root button')) {\\n        if (closeCourse.textContent == 'Do something else simultaneously') {\\n            closeCourse.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n    await ns.sleep(1000);\\n    console.log(terminal)\\n    terminal.click(); await ns.sleep(100);\\n}\",\"filename\":\"start-hack-course.js\",\"server\":\"home\"}}],[\"alter-reality.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    ns.alterReality();\\n    ns.rainbow('noodles');\\n    ns.DevMenuRoot();\\n}\",\"filename\":\"alter-reality.js\",\"server\":\"home\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"foodnstuff\",\"sigma-cosmetics\",\"joesguns\",\"hong-fang-tea\",\"harakiri-sushi\",\"iron-gym\",\"darkweb\",\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[[\"INFO.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"INFO.txt\",\"text\":\"{server: \\\"the-hub\\\", status: {\\\"rootAccess\\\":true,\\\"requiredHacking\\\":313,\\\"requiredPorts\\\":2,\\\"nukeAvailable\\\":false}}\"}}],[\"scan.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"scan.txt\",\"text\":\"┣━home: connect home; \\n┃  ┣━n00dles: connect home; connect n00dles; \\n┃  ┃  ┣━max-hardware: connect home; connect n00dles; connect max-hardware; \\n┃  ┃  ┃  ┣━phantasy: connect home; connect n00dles; connect max-hardware; connect phantasy; \\n┃  ┃  ┃  ┃  ┣━avmnite-02h: connect home; connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; \\n┃  ┃  ┃  ┃  ┃  ┣━I.I.I.I: connect home; connect n00dles; connect max-hardware; connect phantasy; connect avmnite-02h; connect I.I.I.I; \\n┃  ┣━foodnstuff: connect home; connect foodnstuff; \\n┃  ┃  ┣━nectar-net: connect home; connect foodnstuff; connect nectar-net; \\n┃  ┃  ┃  ┣━omega-net: connect home; connect foodnstuff; connect nectar-net; connect omega-net; \\n┃  ┃  ┃  ┃  ┣━computek: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect computek; \\n┃  ┃  ┃  ┃  ┣━johnson-ortho: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; \\n┃  ┃  ┃  ┃  ┃  ┣━zb-institute: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect zb-institute; \\n┃  ┃  ┃  ┃  ┃  ┣━catalyst: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━rho-construction: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; connect rho-construction; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━aerocorp: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; connect rho-construction; connect aerocorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━aevum-police: connect home; connect foodnstuff; connect nectar-net; connect omega-net; connect johnson-ortho; connect catalyst; connect aevum-police; \\n┃  ┃  ┣━CSEC: connect home; connect foodnstuff; connect CSEC; \\n┃  ┃  ┃  ┣━neo-net: connect home; connect foodnstuff; connect CSEC; connect neo-net; \\n┃  ┃  ┃  ┃  ┣━the-hub: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect the-hub; \\n┃  ┃  ┃  ┃  ┃  ┣━rothman-uni: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect the-hub; connect rothman-uni; \\n┃  ┃  ┃  ┃  ┣━netlink: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; \\n┃  ┃  ┃  ┃  ┃  ┣━summit-uni: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━alpha-ent: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━snap-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnia: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━univ-energy: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━taiyang-digital: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━titan-labs: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect titan-labs; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━applied-energetics: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━helios: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━.: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━clarkinc: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect clarkinc; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━ecorp: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect clarkinc; connect ecorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━megacorp: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect clarkinc; connect megacorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━powerhouse-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect helios; connect .; connect powerhouse-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━vitalife: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect omnia; connect univ-energy; connect taiyang-digital; connect applied-energetics; connect vitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━unitalife: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect netlink; connect summit-uni; connect alpha-ent; connect snap-fitness; connect unitalife; \\n┃  ┃  ┃  ┃  ┣━crush-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; \\n┃  ┃  ┃  ┃  ┃  ┣━syscore: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━lexo-corp: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect lexo-corp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━global-pharm: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect lexo-corp; connect global-pharm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━millenium-fitness: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━galactic-cyber: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━deltaone: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━defcomm: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect defcomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━icarus: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━infocomm: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━run4theh111z: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumtech: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnitek: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━b-and-a: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; connect b-and-a; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumassets: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; connect b-and-a; connect fulcrumassets; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━blade: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect infocomm; connect run4theh111z; connect fulcrumtech; connect omnitek; connect blade; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zb-def: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect icarus; connect zb-def; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━solaris: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nova-med: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━microdyne: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━stormtech: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━4sigma: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect 4sigma; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nwo: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect 4sigma; connect nwo; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━The-Cave: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect 4sigma; connect nwo; connect The-Cave; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━kuai-gong: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect solaris; connect nova-med; connect microdyne; connect stormtech; connect kuai-gong; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zeus-med: connect home; connect foodnstuff; connect CSEC; connect neo-net; connect crush-fitness; connect syscore; connect millenium-fitness; connect galactic-cyber; connect deltaone; connect zeus-med; \\n┃  ┃  ┃  ┣━silver-helix: connect home; connect foodnstuff; connect CSEC; connect silver-helix; \\n┃  ┣━sigma-cosmetics: connect home; connect sigma-cosmetics; \\n┃  ┣━joesguns: connect home; connect joesguns; \\n┃  ┣━hong-fang-tea: connect home; connect hong-fang-tea; \\n┃  ┣━harakiri-sushi: connect home; connect harakiri-sushi; \\n┃  ┣━iron-gym: connect home; connect iron-gym; \\n┃  ┃  ┣━zer0: connect home; connect iron-gym; connect zer0; \\n┃  ┣━darkweb: connect home; connect darkweb; \\n┃  ┣━home-0: connect home; connect home-0; \\n┃  ┣━home-1: connect home; connect home-1; \\n┃  ┣━home-2: connect home; connect home-2; \\n┃  ┣━home-3: connect home; connect home-3; \\n┃  ┣━home-4: connect home; connect home-4; \\n┃  ┣━home-5: connect home; connect home-5; \\n┃  ┣━home-6: connect home; connect home-6; \\n┃  ┣━home-7: connect home; connect home-7; \\n┃  ┣━home-8: connect home; connect home-8; \\n┃  ┣━home-9: connect home; connect home-9; \\n┃  ┣━home-10: connect home; connect home-10; \\n┃  ┣━home-11: connect home; connect home-11; \\n┃  ┣━home-12: connect home; connect home-12; \\n┃  ┣━home-13: connect home; connect home-13; \\n┃  ┣━home-14: connect home; connect home-14; \\n┃  ┣━home-15: connect home; connect home-15; \\n┃  ┣━home-16: connect home; connect home-16; \\n┃  ┣━home-17: connect home; connect home-17; \\n┃  ┣━home-18: connect home; connect home-18; \\n┃  ┣━home-19: connect home; connect home-19; \\n┃  ┣━home-20: connect home; connect home-20; \\n┃  ┣━home-21: connect home; connect home-21; \\n┃  ┣━home-22: connect home; connect home-22; \\n┃  ┣━home-23: connect home; connect home-23; \\n┃  ┣━home-24: connect home; connect home-24; \\n\"}}]]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.016,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"hacknet-bot.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":43724.80999992515,\"ramUsage\":10.1,\"server\":\"home\",\"scriptKey\":\"hacknet-bot.js*[]\",\"title\":\"hacknet-bot.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"auto-nuke.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":43724.80999992515,\"ramUsage\":5.6,\"server\":\"home\",\"scriptKey\":\"auto-nuke.js*[]\",\"title\":\"auto-nuke.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,3,0],\"foodnstuff\":[0,0,57,0],\"nectar-net\":[0,0,57,0],\"neo-net\":[0,0,57,0],\"sigma-cosmetics\":[0,0,54,0],\"joesguns\":[0,0,51,0],\"hong-fang-tea\":[0,0,54,0],\"harakiri-sushi\":[0,0,48,0],\"iron-gym\":[0,0,54,0],\"zer0\":[0,0,54,0],\"max-hardware\":[0,0,51,0],\"phantasy\":[0,0,18,0],\"omega-net\":[0,0,18,0],\"the-hub\":[0,0,18,0],\"silver-helix\":[0,0,15,0],\"rothman-uni\":[0,0,9,0],\"netlink\":[0,0,9,0],\"summit-uni\":[0,0,9,0],\"alpha-ent\":[0,0,9,0],\"lexo-corp\":[0,0,9,0],\"millenium-fitness\":[0,0,6,0],\"catalyst\":[0,0,6,0],\"rho-construction\":[0,0,6,0],\"aevum-police\":[0,0,6,0],\"univ-energy\":[0,0,6,0],\"titan-labs\":[0,0,6,0],\"helios\":[0,0,6,0],\"vitalife\":[0,0,6,0],\"unitalife\":[0,0,6,0],\"global-pharm\":[0,0,3,0],\"solaris\":[0,0,3,0],\"microdyne\":[0,0,3,0],\"zb-institute\":[0,0,3,0],\"omnia\":[0,0,3,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":43286.28467223893,\"onlineMoneyMade\":0,\"onlineRunningTime\":43724.80999992515,\"ramUsage\":3.15,\"server\":\"home\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":3,\"temporary\":false}}]}},\"ecorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-294820.cct\",\"type\":\"Array Jumping Game II\",\"data\":[2,1,2,3,4,1,3,0,5,7,3,3,7,2,2,5,4,4,5,2,1,6,2],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"ecorp\",\"httpPortOpen\":false,\"ip\":\"26.6.1.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"ECorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"clarkinc\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":34045414705,\"moneyMax\":851135367625,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1167,\"serverGrowth\":99,\"runningScripts\":[]}},\"megacorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-268758.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[156,105,120,21,2,53,64,70,22,53,58,93,166,170,158,12,193,134,1,119,142,193,197,81,86,26,79,158,97,92,64,163,157,74,13,24,147,113,185,195,87,165,24,19,57,45,58,115,126],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"megacorp\",\"httpPortOpen\":false,\"ip\":\"45.6.6.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"MegaCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"clarkinc\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":41153639395,\"moneyMax\":1028840984875,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1176,\"serverGrowth\":99,\"runningScripts\":[]}},\"b-and-a\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"b-and-a\",\"httpPortOpen\":true,\"ip\":\"7.5.8.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Bachman & Associates\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"b-and-a\"}}]]},\"serversOnNetwork\":[\"omnitek\",\"fulcrumassets\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":75,\"hackDifficulty\":75,\"minDifficulty\":25,\"moneyAvailable\":28341748670,\"moneyMax\":708543716750,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":905,\"serverGrowth\":64,\"runningScripts\":[]}},\"blade\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-894433-BitRunners.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"0110000010010000\",\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"blade\",\"httpPortOpen\":false,\"ip\":\"5.3.2.1\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Blade Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"omnitek\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":95,\"hackDifficulty\":95,\"minDifficulty\":32,\"moneyAvailable\":32687291668,\"moneyMax\":817182291700,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":995,\"serverGrowth\":58,\"runningScripts\":[]}},\"nwo\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"nwo\",\"httpPortOpen\":false,\"ip\":\"80.9.9.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"NWO\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"4sigma\",\"The-Cave\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":37505261330,\"moneyMax\":937631533250,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1059,\"serverGrowth\":67,\"runningScripts\":[]}},\"clarkinc\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-526937.cct\",\"type\":\"Array Jumping Game II\",\"data\":[1,4,2,4,2,2,4,2,2,0,2,4,6,1,3,1,5,2],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"clarkinc\",\"httpPortOpen\":false,\"ip\":\"81.3.2.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"beyond-man.lit\",\"cost-of-immortality.lit\"],\"organizationName\":\"Clarke Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\".\",\"ecorp\",\"megacorp\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":62,\"hackDifficulty\":62,\"minDifficulty\":21,\"moneyAvailable\":17773669619,\"moneyMax\":444341740475,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1144,\"serverGrowth\":52,\"runningScripts\":[]}},\"omnitek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"omnitek\",\"httpPortOpen\":false,\"ip\":\"63.7.0.0\",\"isConnectedTo\":false,\"maxRam\":256,\"messages\":[\"coded-intelligence.lit\",\"history-of-synthoids.lit\"],\"organizationName\":\"OmniTek Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"fulcrumtech\",\"b-and-a\",\"blade\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":96,\"hackDifficulty\":96,\"minDifficulty\":32,\"moneyAvailable\":15246252527,\"moneyMax\":381156313175,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1027,\"serverGrowth\":95,\"runningScripts\":[]}},\"4sigma\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"4sigma\",\"httpPortOpen\":false,\"ip\":\"19.6.2.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Four Sigma\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"stormtech\",\"nwo\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":70,\"minDifficulty\":23,\"moneyAvailable\":16601720225,\"moneyMax\":415043005625,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":979,\"serverGrowth\":85,\"runningScripts\":[]}},\"kuai-gong\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"kuai-gong\",\"httpPortOpen\":false,\"ip\":\"88.4.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"KuaiGong International\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"stormtech\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":27700644813,\"moneyMax\":692516120325,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1106,\"serverGrowth\":90,\"runningScripts\":[]}},\"fulcrumtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"fulcrumtech\",\"httpPortOpen\":false,\"ip\":\"40.0.3.9\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"run4theh111z\",\"omnitek\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":89,\"hackDifficulty\":89,\"minDifficulty\":30,\"moneyAvailable\":1619507444,\"moneyMax\":40487686100,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1197,\"serverGrowth\":82,\"runningScripts\":[]}},\"fulcrumassets\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-272247.cct\",\"type\":\"Unique Paths in a Grid II\",\"data\":[[0,1,1,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,0,0,1],[0,0,0,0],[0,1,0,1],[0,0,1,0],[0,1,0,0]],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"fulcrumassets\",\"httpPortOpen\":false,\"ip\":\"60.5.9.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"b-and-a\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":99,\"minDifficulty\":33,\"moneyAvailable\":1000000,\"moneyMax\":25000000,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1178,\"serverGrowth\":1,\"runningScripts\":[]}},\"stormtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"stormtech\",\"httpPortOpen\":true,\"ip\":\"97.5.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Storm Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"stormtech\"}}]]},\"serversOnNetwork\":[\"microdyne\",\"4sigma\",\"kuai-gong\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":78,\"minDifficulty\":26,\"moneyAvailable\":1030468207,\"moneyMax\":25761705175,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":967,\"serverGrowth\":75,\"runningScripts\":[]}},\"defcomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"defcomm\",\"httpPortOpen\":true,\"ip\":\"46.7.1.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DefComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"defcomm\"}}]]},\"serversOnNetwork\":[\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":91,\"minDifficulty\":30,\"moneyAvailable\":896099037,\"moneyMax\":22402475925,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":879,\"serverGrowth\":57,\"runningScripts\":[]}},\"infocomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"infocomm\",\"httpPortOpen\":true,\"ip\":\"51.7.1.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"InfoComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"infocomm\"}}]]},\"serversOnNetwork\":[\"icarus\",\"run4theh111z\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":81,\"hackDifficulty\":81,\"minDifficulty\":27,\"moneyAvailable\":764732521,\"moneyMax\":19118313025,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":948,\"serverGrowth\":63,\"runningScripts\":[]}},\"helios\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"helios\",\"httpPortOpen\":true,\"ip\":\"64.3.9.4\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Helios Labs\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"helios\"}}]]},\"serversOnNetwork\":[\"applied-energetics\",\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":72.41600000000018,\"minDifficulty\":30,\"moneyAvailable\":1043146005.4379622,\"moneyMax\":18740000650,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":880,\"serverGrowth\":72,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"helios\"],\"dataMap\":{\"helios\":[0,0,318,424]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":120588.85342206343,\"onlineMoneyMade\":0,\"onlineRunningTime\":25547.41000005777,\"ramUsage\":2.4,\"server\":\"helios\",\"scriptKey\":\"simple-hack.js*[\\\"helios\\\"]\",\"title\":\"simple-hack.js helios\",\"threads\":53,\"temporary\":false}}]}},\"vitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"vitalife\",\"httpPortOpen\":true,\"ip\":\"40.3.3.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"VitaLife\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"vitalife\"}}]]},\"serversOnNetwork\":[\"applied-energetics\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":75.8580000000002,\"minDifficulty\":27,\"moneyAvailable\":975797287.5554743,\"moneyMax\":19113653875,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":826,\"serverGrowth\":78,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"vitalife\"],\"dataMap\":{\"vitalife\":[0,0,91,117]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":30122.27237144763,\"onlineMoneyMade\":0,\"onlineRunningTime\":26770.81000006222,\"ramUsage\":2.4,\"server\":\"vitalife\",\"scriptKey\":\"simple-hack.js*[\\\"vitalife\\\"]\",\"title\":\"simple-hack.js vitalife\",\"threads\":13,\"temporary\":false}}]}},\"icarus\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"icarus\",\"httpPortOpen\":true,\"ip\":\"58.6.2.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Icarus Microsystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"icarus\"}}]]},\"serversOnNetwork\":[\"deltaone\",\"infocomm\",\"zb-def\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":91,\"hackDifficulty\":91,\"minDifficulty\":30,\"moneyAvailable\":936874236,\"moneyMax\":23421855900,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":852,\"serverGrowth\":87,\"runningScripts\":[]}},\"univ-energy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-646882.cct\",\"type\":\"Find Largest Prime Factor\",\"data\":308546037,\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"univ-energy\",\"httpPortOpen\":true,\"ip\":\"53.4.4.0\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Universal Energy\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"univ-energy\"}}]]},\"serversOnNetwork\":[\"omnia\",\"taiyang-digital\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":84.33200000000032,\"minDifficulty\":28,\"moneyAvailable\":1558169909.5394835,\"moneyMax\":29008487450,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":856,\"serverGrowth\":86,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"univ-energy\"],\"dataMap\":{\"univ-energy\":[0,0,42,54]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":14674.953206602688,\"onlineMoneyMade\":0,\"onlineRunningTime\":29092.210000070667,\"ramUsage\":2.4,\"server\":\"univ-energy\",\"scriptKey\":\"simple-hack.js*[\\\"univ-energy\\\"]\",\"title\":\"simple-hack.js univ-energy\",\"threads\":6,\"temporary\":false}}]}},\"titan-labs\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"titan-labs\",\"httpPortOpen\":true,\"ip\":\"94.9.8.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"coded-intelligence.lit\"],\"organizationName\":\"Titan Laboratories\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"titan-labs\"}}]]},\"serversOnNetwork\":[\"taiyang-digital\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":72.53600000000024,\"minDifficulty\":25,\"moneyAvailable\":1025643179.4349511,\"moneyMax\":21253995400,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":807,\"serverGrowth\":63,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"titan-labs\"],\"dataMap\":{\"titan-labs\":[0,0,48,60]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":14597.716610778463,\"onlineMoneyMade\":0,\"onlineRunningTime\":26770.81000006222,\"ramUsage\":2.4,\"server\":\"titan-labs\",\"scriptKey\":\"simple-hack.js*[\\\"titan-labs\\\"]\",\"title\":\"simple-hack.js titan-labs\",\"threads\":6,\"temporary\":false}}]}},\"microdyne\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"microdyne\",\"httpPortOpen\":true,\"ip\":\"73.8.5.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"Microdyne Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"microdyne\"}}]]},\"serversOnNetwork\":[\"nova-med\",\"stormtech\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":71,\"hackDifficulty\":65.27800000000015,\"minDifficulty\":24,\"moneyAvailable\":663136345.3114793,\"moneyMax\":13041170850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":807,\"serverGrowth\":80,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"microdyne\"],\"dataMap\":{\"microdyne\":[0,0,104,143]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":32193.178596984653,\"onlineMoneyMade\":0,\"onlineRunningTime\":26770.41000006222,\"ramUsage\":2.4,\"server\":\"microdyne\",\"scriptKey\":\"simple-hack.js*[\\\"microdyne\\\"]\",\"title\":\"simple-hack.js microdyne\",\"threads\":13,\"temporary\":false}}]}},\"taiyang-digital\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"taiyang-digital\",\"httpPortOpen\":true,\"ip\":\"3.5.5.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"A-Green-Tomorrow.lit\",\"brighter-than-the-sun.lit\"],\"organizationName\":\"Taiyang Digital\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"taiyang-digital\"}}]]},\"serversOnNetwork\":[\"univ-energy\",\"titan-labs\",\"applied-energetics\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":74,\"minDifficulty\":25,\"moneyAvailable\":835971834,\"moneyMax\":20899295850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":935,\"serverGrowth\":71,\"runningScripts\":[]}},\"galactic-cyber\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"galactic-cyber\",\"httpPortOpen\":true,\"ip\":\"42.2.5.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Galactic Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"galactic-cyber\"}}]]},\"serversOnNetwork\":[\"millenium-fitness\",\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":58,\"hackDifficulty\":58,\"minDifficulty\":19,\"moneyAvailable\":768392949,\"moneyMax\":19209823725,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":856,\"serverGrowth\":83,\"runningScripts\":[]}},\"aerocorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aerocorp\",\"httpPortOpen\":true,\"ip\":\"60.4.0.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"AeroCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aerocorp\"}}]]},\"serversOnNetwork\":[\"rho-construction\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":86,\"hackDifficulty\":86,\"minDifficulty\":29,\"moneyAvailable\":1158295716,\"moneyMax\":28957392900,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":925,\"serverGrowth\":55,\"runningScripts\":[]}},\"omnia\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omnia\",\"httpPortOpen\":true,\"ip\":\"40.5.8.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"history-of-synthoids.lit\"],\"organizationName\":\"Omnia Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omnia\"}}]]},\"serversOnNetwork\":[\"snap-fitness\",\"univ-energy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":78.81200000000028,\"minDifficulty\":29,\"moneyAvailable\":1222433645.3111567,\"moneyMax\":23658142075,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":885,\"serverGrowth\":67,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omnia\"],\"dataMap\":{\"omnia\":[0,0,130,208]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":52755.81313943812,\"onlineMoneyMade\":0,\"onlineRunningTime\":24691.010000054655,\"ramUsage\":2.4,\"server\":\"omnia\",\"scriptKey\":\"simple-hack.js*[\\\"omnia\\\"]\",\"title\":\"simple-hack.js omnia\",\"threads\":26,\"temporary\":false}}]}},\"zb-def\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-def\",\"httpPortOpen\":true,\"ip\":\"44.3.3.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"ZB Defense Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-def\"}}]]},\"serversOnNetwork\":[\"icarus\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":64,\"hackDifficulty\":64,\"minDifficulty\":21,\"moneyAvailable\":1073071576,\"moneyMax\":26826789400,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":799,\"serverGrowth\":67,\"runningScripts\":[]}},\"applied-energetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-339774.cct\",\"type\":\"Total Ways to Sum\",\"data\":84,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"applied-energetics\",\"httpPortOpen\":true,\"ip\":\"69.6.2.3\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Applied Energetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"applied-energetics\"}}]]},\"serversOnNetwork\":[\"taiyang-digital\",\"helios\",\"vitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":80,\"minDifficulty\":27,\"moneyAvailable\":882835538,\"moneyMax\":22070888450,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":785,\"serverGrowth\":75,\"runningScripts\":[]}},\"solaris\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-629410.cct\",\"type\":\"Algorithmic Stock Trader II\",\"data\":[163,77,22,171,181,87,149,32,85,126],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"solaris\",\"httpPortOpen\":true,\"ip\":\"74.6.6.7\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"A-Green-Tomorrow.lit\",\"the-failed-frontier.lit\"],\"organizationName\":\"Solaris Space Systems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"solaris\"}}]]},\"serversOnNetwork\":[\"deltaone\",\"nova-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":62.94800000000018,\"minDifficulty\":25,\"moneyAvailable\":1135778497.4767392,\"moneyMax\":20551529175,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":802,\"serverGrowth\":79,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"solaris\"],\"dataMap\":{\"solaris\":[0,0,234,260]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":66771.0370900422,\"onlineMoneyMade\":0,\"onlineRunningTime\":26770.41000006222,\"ramUsage\":2.4,\"server\":\"solaris\",\"scriptKey\":\"simple-hack.js*[\\\"solaris\\\"]\",\"title\":\"simple-hack.js solaris\",\"threads\":26,\"temporary\":false}}]}},\"deltaone\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-544509-BitRunners.cct\",\"type\":\"Shortest Path in a Grid\",\"data\":[[0,0,0,0,0,0],[0,0,1,0,0,1],[0,0,0,0,0,1],[0,0,0,1,1,0],[0,1,1,1,0,0],[1,0,0,1,0,0],[1,0,0,0,0,0],[0,1,0,0,0,0]],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"deltaone\",\"httpPortOpen\":true,\"ip\":\"53.8.4.3\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DeltaOne\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"deltaone\"}}]]},\"serversOnNetwork\":[\"galactic-cyber\",\"defcomm\",\"icarus\",\"solaris\",\"zeus-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":76,\"minDifficulty\":25,\"moneyAvailable\":1554189488,\"moneyMax\":38854737200,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":811,\"serverGrowth\":51,\"runningScripts\":[]}},\"global-pharm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"global-pharm\",\"httpPortOpen\":true,\"ip\":\"5.4.0.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"Global Pharmaceuticals\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"global-pharm\"}}]]},\"serversOnNetwork\":[\"lexo-corp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":71.01000000000026,\"minDifficulty\":25,\"moneyAvailable\":2403221838.7007713,\"moneyMax\":41650931600,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":841,\"serverGrowth\":88,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"global-pharm\"],\"dataMap\":{\"global-pharm\":[0,0,117,143]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":35979.38088811798,\"onlineMoneyMade\":0,\"onlineRunningTime\":31046.610000077777,\"ramUsage\":2.4,\"server\":\"global-pharm\",\"scriptKey\":\"simple-hack.js*[\\\"global-pharm\\\"]\",\"title\":\"simple-hack.js global-pharm\",\"threads\":13,\"temporary\":false}}]}},\"nova-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nova-med\",\"httpPortOpen\":true,\"ip\":\"44.1.3.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Nova Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nova-med\"}}]]},\"serversOnNetwork\":[\"solaris\",\"microdyne\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":71,\"hackDifficulty\":71,\"minDifficulty\":24,\"moneyAvailable\":1181511993,\"moneyMax\":29537799825,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":816,\"serverGrowth\":74,\"runningScripts\":[]}},\"zeus-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zeus-med\",\"httpPortOpen\":true,\"ip\":\"58.1.9.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Zeus Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zeus-med\"}}]]},\"serversOnNetwork\":[\"deltaone\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":79,\"minDifficulty\":26,\"moneyAvailable\":1320495434,\"moneyMax\":33012385850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":813,\"serverGrowth\":77,\"runningScripts\":[]}},\"unitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-332850.cct\",\"type\":\"Sanitize Parentheses in Expression\",\"data\":\"()a((()())(\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-340174.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":35083323758,\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-745294.cct\",\"type\":\"Proper 2-Coloring of a Graph\",\"data\":[11,[[2,8],[6,10],[4,9],[5,6],[6,8],[3,4],[2,10],[4,8],[4,10],[2,5],[0,6],[1,3],[4,7]]],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"unitalife\",\"httpPortOpen\":true,\"ip\":\"95.2.4.9\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"UnitaLife Group\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"unitalife\"}}]]},\"serversOnNetwork\":[\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":64.16400000000034,\"minDifficulty\":26,\"moneyAvailable\":1597858368.5441468,\"moneyMax\":26049271350,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":813,\"serverGrowth\":70,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"unitalife\"],\"dataMap\":{\"unitalife\":[0,0,260,338]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":84677.05455529159,\"onlineMoneyMade\":0,\"onlineRunningTime\":33856.610000068256,\"ramUsage\":2.4,\"server\":\"unitalife\",\"scriptKey\":\"simple-hack.js*[\\\"unitalife\\\"]\",\"title\":\"simple-hack.js unitalife\",\"threads\":26,\"temporary\":false}}]}},\"lexo-corp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"lexo-corp\",\"httpPortOpen\":true,\"ip\":\"42.3.3.3\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"LexoCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"lexo-corp\"}}]]},\"serversOnNetwork\":[\"syscore\",\"global-pharm\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":45.202000000000076,\"minDifficulty\":22,\"moneyAvailable\":2636683450.418555,\"moneyMax\":19169089575,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":714,\"serverGrowth\":60,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"lexo-corp\"],\"dataMap\":{\"lexo-corp\":[925045087.9573784,212,1643,583]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":302218.3517075226,\"onlineMoneyMade\":925045087.9573784,\"onlineRunningTime\":36849.2100000252,\"ramUsage\":2.4,\"server\":\"lexo-corp\",\"scriptKey\":\"simple-hack.js*[\\\"lexo-corp\\\"]\",\"title\":\"simple-hack.js lexo-corp\",\"threads\":53,\"temporary\":false}}]}},\"rho-construction\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rho-construction\",\"httpPortOpen\":false,\"ip\":\"98.2.8.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Rho Construction\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rho-construction\"}}]]},\"serversOnNetwork\":[\"catalyst\",\"aerocorp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":37.76199999999998,\"minDifficulty\":18,\"moneyAvailable\":967065494.8577578,\"moneyMax\":12535729300,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":501,\"serverGrowth\":52,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rho-construction\"],\"dataMap\":{\"rho-construction\":[0,0,377,429]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":84300.52615064858,\"onlineMoneyMade\":0,\"onlineRunningTime\":37093.810000021644,\"ramUsage\":2.4,\"server\":\"rho-construction\",\"scriptKey\":\"simple-hack.js*[\\\"rho-construction\\\"]\",\"title\":\"simple-hack.js rho-construction\",\"threads\":13,\"temporary\":false}}]}},\"alpha-ent\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"alpha-ent\",\"httpPortOpen\":true,\"ip\":\"44.5.0.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"Alpha Enterprises\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"alpha-ent\"}}]]},\"serversOnNetwork\":[\"summit-uni\",\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":47.825999999999965,\"minDifficulty\":20,\"moneyAvailable\":1133572230.4357073,\"moneyMax\":15936993000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":593,\"serverGrowth\":54,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"alpha-ent\"],\"dataMap\":{\"alpha-ent\":[0,0,260,325]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":65892.4708125416,\"onlineMoneyMade\":0,\"onlineRunningTime\":36849.4100000252,\"ramUsage\":2.4,\"server\":\"alpha-ent\",\"scriptKey\":\"simple-hack.js*[\\\"alpha-ent\\\"]\",\"title\":\"simple-hack.js alpha-ent\",\"threads\":13,\"temporary\":false}}]}},\"aevum-police\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-623370.cct\",\"type\":\"Compression III: LZ Compression\",\"data\":\"1OULEEEEJEQskMSbskMSbskb4Jn1MQ0n1MQ0n1Q06kyJyJyJZEGFZEGFZEd6wFnZeAqZeAqO26RFnrECAnrZnrZnrD1s\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aevum-police\",\"httpPortOpen\":true,\"ip\":\"40.4.0.4\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Aevum Police Headquarters\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aevum-police\"}}]]},\"serversOnNetwork\":[\"catalyst\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":75.6120000000005,\"minDifficulty\":27,\"moneyAvailable\":393897573.0371466,\"moneyMax\":7463955200,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":435,\"serverGrowth\":49,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"aevum-police\"],\"dataMap\":{\"aevum-police\":[0,0,102,150]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":36494.29152694615,\"onlineMoneyMade\":0,\"onlineRunningTime\":36849.4100000252,\"ramUsage\":2.4,\"server\":\"aevum-police\",\"scriptKey\":\"simple-hack.js*[\\\"aevum-police\\\"]\",\"title\":\"simple-hack.js aevum-police\",\"threads\":6,\"temporary\":false}}]}},\"rothman-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rothman-uni\",\"httpPortOpen\":false,\"ip\":\"33.8.3.0\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"tensions-in-tech-race.lit\"],\"organizationName\":\"Rothman University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rothman-uni\"}}]]},\"serversOnNetwork\":[\"the-hub\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":50,\"hackDifficulty\":35.22800000000026,\"minDifficulty\":17,\"moneyAvailable\":662384339.0648646,\"moneyMax\":6164385575,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":426,\"serverGrowth\":45,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rothman-uni\"],\"dataMap\":{\"rothman-uni\":[1859176405.2961907,530,4558,742]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":562861.6920690377,\"onlineMoneyMade\":1859176405.2961907,\"onlineRunningTime\":37093.810000021644,\"ramUsage\":2.4,\"server\":\"rothman-uni\",\"scriptKey\":\"simple-hack.js*[\\\"rothman-uni\\\"]\",\"title\":\"simple-hack.js rothman-uni\",\"threads\":53,\"temporary\":false}}]}},\"zb-institute\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-institute\",\"httpPortOpen\":true,\"ip\":\"10.0.3.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"ZB Institute of Technology\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-institute\"}}]]},\"serversOnNetwork\":[\"johnson-ortho\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":66,\"hackDifficulty\":50.012000000000036,\"minDifficulty\":22,\"moneyAvailable\":1663444909.4959283,\"moneyMax\":26468824150,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":764,\"serverGrowth\":82,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zb-institute\"],\"dataMap\":{\"zb-institute\":[0,0,260,364]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":76309.75667433396,\"onlineMoneyMade\":0,\"onlineRunningTime\":26771.010000062222,\"ramUsage\":2.4,\"server\":\"zb-institute\",\"scriptKey\":\"simple-hack.js*[\\\"zb-institute\\\"]\",\"title\":\"simple-hack.js zb-institute\",\"threads\":26,\"temporary\":false}}]}},\"summit-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"summit-uni\",\"httpPortOpen\":false,\"ip\":\"91.6.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"synthetic-muscles.lit\"],\"organizationName\":\"Summit University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"summit-uni\"}}]]},\"serversOnNetwork\":[\"netlink\",\"alpha-ent\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":41.63799999999998,\"minDifficulty\":20,\"moneyAvailable\":550514718.5705072,\"moneyMax\":8348653850,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":462,\"serverGrowth\":41,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"summit-uni\"],\"dataMap\":{\"summit-uni\":[0,0,338,455]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":89320.90487922302,\"onlineMoneyMade\":0,\"onlineRunningTime\":37093.810000021644,\"ramUsage\":2.4,\"server\":\"summit-uni\",\"scriptKey\":\"simple-hack.js*[\\\"summit-uni\\\"]\",\"title\":\"simple-hack.js summit-uni\",\"threads\":13,\"temporary\":false}}]}},\"syscore\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"syscore\",\"httpPortOpen\":true,\"ip\":\"49.6.3.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"SysCore Securities\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"syscore\"}}]]},\"serversOnNetwork\":[\"crush-fitness\",\"lexo-corp\",\"millenium-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":70,\"minDifficulty\":23,\"moneyAvailable\":588773619,\"moneyMax\":14719340475,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":573,\"serverGrowth\":61,\"runningScripts\":[]}},\"catalyst\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"catalyst\",\"httpPortOpen\":false,\"ip\":\"86.9.0.3\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"tensions-in-tech-race.lit\"],\"organizationName\":\"Catalyst Ventures\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"catalyst\"}}]]},\"serversOnNetwork\":[\"johnson-ortho\",\"rho-construction\",\"aevum-police\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":61.832000000000384,\"minDifficulty\":22,\"moneyAvailable\":506725078.40165883,\"moneyMax\":9618635800,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":442,\"serverGrowth\":39,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"catalyst\"],\"dataMap\":{\"catalyst\":[0,0,132,168]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":37170.11174040814,\"onlineMoneyMade\":0,\"onlineRunningTime\":37093.810000021644,\"ramUsage\":2.4,\"server\":\"catalyst\",\"scriptKey\":\"simple-hack.js*[\\\"catalyst\\\"]\",\"title\":\"simple-hack.js catalyst\",\"threads\":6,\"temporary\":false}}]}},\"the-hub\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-518965-BitRunners.cct\",\"type\":\"Find All Valid Math Expressions\",\"data\":[\"64632134\",-66],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"the-hub\",\"httpPortOpen\":false,\"ip\":\"93.6.0.7\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[],\"organizationName\":\"The Hub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"the-hub\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"rothman-uni\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":35,\"hackDifficulty\":27.802000000000078,\"minDifficulty\":12,\"moneyAvailable\":399900019.65905815,\"moneyMax\":3901005475,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":297,\"serverGrowth\":49,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"the-hub\"],\"dataMap\":{\"the-hub\":[39524248.856208906,15,255,240]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":36928.74737845742,\"onlineMoneyMade\":39524248.856208906,\"onlineRunningTime\":40076.809999978235,\"ramUsage\":2.4,\"server\":\"the-hub\",\"scriptKey\":\"simple-hack.js*[\\\"the-hub\\\"]\",\"title\":\"simple-hack.js the-hub\",\"threads\":3,\"temporary\":false}}]}},\"computek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"computek\",\"httpPortOpen\":false,\"ip\":\"66.6.0.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"CompuTek\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"computek\"}}]]},\"serversOnNetwork\":[\"omega-net\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":59,\"hackDifficulty\":59,\"minDifficulty\":20,\"moneyAvailable\":236632086,\"moneyMax\":5915802150,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":372,\"serverGrowth\":59,\"runningScripts\":[]}},\"netlink\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-377336.cct\",\"type\":\"Algorithmic Stock Trader III\",\"data\":[110,9,51,183,112,169,186,88,188,197,41,138,171,104,192,71,64,112,104,185,162,122,160,40,66,112,29,19,56],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"netlink\",\"httpPortOpen\":false,\"ip\":\"60.9.0.8\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"NetLink Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"netlink\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":51.25000000000032,\"minDifficulty\":26,\"moneyAvailable\":680323939.9997485,\"moneyMax\":6875000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":375,\"serverGrowth\":64,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"netlink\"],\"dataMap\":{\"netlink\":[1100624789.8086026,371,2968,848]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":594757.1879529493,\"onlineMoneyMade\":1100624789.8086026,\"onlineRunningTime\":37093.810000021644,\"ramUsage\":2.4,\"server\":\"netlink\",\"scriptKey\":\"simple-hack.js*[\\\"netlink\\\"]\",\"title\":\"simple-hack.js netlink\",\"threads\":53,\"temporary\":false}}]}},\"johnson-ortho\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"johnson-ortho\",\"httpPortOpen\":false,\"ip\":\"26.8.1.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Johnson Orthopedics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"johnson-ortho\"}}]]},\"serversOnNetwork\":[\"omega-net\",\"zb-institute\",\"catalyst\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":65,\"minDifficulty\":22,\"moneyAvailable\":74774335,\"moneyMax\":1869358375,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":288,\"serverGrowth\":39,\"runningScripts\":[]}},\"n00dles\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"n00dles\",\"httpPortOpen\":false,\"ip\":\"76.2.6.3\",\"isConnectedTo\":false,\"maxRam\":4,\"messages\":[],\"organizationName\":\"Noodle Bar\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"n00dles\"}}]]},\"serversOnNetwork\":[\"home\",\"max-hardware\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.9959999999996385,\"minDifficulty\":1,\"moneyAvailable\":1660933.0204895795,\"moneyMax\":1750000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":1,\"serverGrowth\":3000,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"n00dles\"],\"dataMap\":{\"n00dles\":[404210412.1434966,18750,2096,898]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":384869.95699226676,\"onlineMoneyMade\":404210412.1434966,\"onlineRunningTime\":43724.80999992515,\"ramUsage\":2.4,\"server\":\"n00dles\",\"scriptKey\":\"simple-hack.js*[\\\"n00dles\\\"]\",\"title\":\"simple-hack.js n00dles\",\"threads\":1,\"temporary\":false}}]}},\"foodnstuff\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"foodnstuff\",\"httpPortOpen\":false,\"ip\":\"23.1.2.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"FoodNStuff\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"foodnstuff\"}}]]},\"serversOnNetwork\":[\"home\",\"nectar-net\",\"CSEC\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":87.07200000000574,\"minDifficulty\":3,\"moneyAvailable\":5266788.683033667,\"moneyMax\":50000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":1,\"serverGrowth\":5,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"foodnstuff\"],\"dataMap\":{\"foodnstuff\":[13452383.496846125,564,40734,1818]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1395279.1035647767,\"onlineMoneyMade\":13452383.496846125,\"onlineRunningTime\":43724.60999992515,\"ramUsage\":2.4,\"server\":\"foodnstuff\",\"scriptKey\":\"simple-hack.js*[\\\"foodnstuff\\\"]\",\"title\":\"simple-hack.js foodnstuff\",\"threads\":6,\"temporary\":false}}]}},\"sigma-cosmetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"sigma-cosmetics\",\"httpPortOpen\":false,\"ip\":\"18.8.6.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Sigma Cosmetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"sigma-cosmetics\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":73.18400000000294,\"minDifficulty\":3,\"moneyAvailable\":6318413.094451302,\"moneyMax\":57500000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":5,\"serverGrowth\":10,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"sigma-cosmetics\"],\"dataMap\":{\"sigma-cosmetics\":[34016234.91827175,636,27204,996]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":929445.884999728,\"onlineMoneyMade\":34016234.91827175,\"onlineRunningTime\":43724.00999992516,\"ramUsage\":2.4,\"server\":\"sigma-cosmetics\",\"scriptKey\":\"simple-hack.js*[\\\"sigma-cosmetics\\\"]\",\"title\":\"simple-hack.js sigma-cosmetics\",\"threads\":6,\"temporary\":false}}]}},\"joesguns\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"joesguns\",\"httpPortOpen\":false,\"ip\":\"76.0.4.4\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Joe's Guns\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"joesguns\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.335999999995128,\"minDifficulty\":5,\"moneyAvailable\":53788166.95284502,\"moneyMax\":62500000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":10,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"joesguns\"],\"dataMap\":{\"joesguns\":[876458502.4484564,2718,32724,2844]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1540145.9936072764,\"onlineMoneyMade\":876458502.4484564,\"onlineRunningTime\":43724.00999992516,\"ramUsage\":2.4,\"server\":\"joesguns\",\"scriptKey\":\"simple-hack.js*[\\\"joesguns\\\"]\",\"title\":\"simple-hack.js joesguns\",\"threads\":6,\"temporary\":false}}]}},\"zer0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"zer0\",\"httpPortOpen\":false,\"ip\":\"0.6.7.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"ZER0 Nightclub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zer0\"}}]]},\"serversOnNetwork\":[\"iron-gym\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":16.117999999999636,\"minDifficulty\":8,\"moneyAvailable\":32298260.941851858,\"moneyMax\":187500000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":75,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zer0\"],\"dataMap\":{\"zer0\":[545988833.8972583,1833,14664,1482]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1012547.6348194185,\"onlineMoneyMade\":545988833.8972583,\"onlineRunningTime\":43663.209999926046,\"ramUsage\":2.4,\"server\":\"zer0\",\"scriptKey\":\"simple-hack.js*[\\\"zer0\\\"]\",\"title\":\"simple-hack.js zer0\",\"threads\":13,\"temporary\":false}}]}},\"nectar-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"nectar-net\",\"httpPortOpen\":false,\"ip\":\"44.7.1.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Nectar Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nectar-net\"}}]]},\"serversOnNetwork\":[\"foodnstuff\",\"omega-net\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":17.97999999999821,\"minDifficulty\":7,\"moneyAvailable\":11369308.408552714,\"moneyMax\":68750000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":20,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"nectar-net\"],\"dataMap\":{\"nectar-net\":[156803023.0351416,1572,19632,1752]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1108152.0585881367,\"onlineMoneyMade\":156803023.0351416,\"onlineRunningTime\":43724.60999992515,\"ramUsage\":2.4,\"server\":\"nectar-net\",\"scriptKey\":\"simple-hack.js*[\\\"nectar-net\\\"]\",\"title\":\"simple-hack.js nectar-net\",\"threads\":6,\"temporary\":false}}]}},\"neo-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-346900.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"eeeeegggIcqTLLLLnnFFXEEEEEEEEEEEMMMMFFFFFFwwoouOOOOOggD8ttttttt77777W22zUUbccx66\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"neo-net\",\"httpPortOpen\":false,\"ip\":\"64.7.9.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"Neo Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"neo-net\"}}]]},\"serversOnNetwork\":[\"CSEC\",\"the-hub\",\"netlink\",\"crush-fitness\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":35.381999999999586,\"minDifficulty\":8,\"moneyAvailable\":16714912.75372241,\"moneyMax\":125000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":50,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"neo-net\"],\"dataMap\":{\"neo-net\":[139855147.54549435,936,15938,1183]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1016940.4662069216,\"onlineMoneyMade\":139855147.54549435,\"onlineRunningTime\":43724.60999992515,\"ramUsage\":2.4,\"server\":\"neo-net\",\"scriptKey\":\"simple-hack.js*[\\\"neo-net\\\"]\",\"title\":\"simple-hack.js neo-net\",\"threads\":13,\"temporary\":false}}]}},\"silver-helix\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-199712.cct\",\"type\":\"Total Ways to Sum\",\"data\":75,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"silver-helix\",\"httpPortOpen\":false,\"ip\":\"0.8.5.2\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"new-triads.lit\"],\"organizationName\":\"Silver Helix\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"silver-helix\"}}]]},\"serversOnNetwork\":[\"CSEC\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":26.08399999999956,\"minDifficulty\":10,\"moneyAvailable\":159743395.8328927,\"moneyMax\":1125000000,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":150,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"silver-helix\"],\"dataMap\":{\"silver-helix\":[995881412.1440308,806,11258,1066]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":845097.0859767206,\"onlineMoneyMade\":995881412.1440308,\"onlineRunningTime\":40076.209999978244,\"ramUsage\":2.4,\"server\":\"silver-helix\",\"scriptKey\":\"simple-hack.js*[\\\"silver-helix\\\"]\",\"title\":\"simple-hack.js silver-helix\",\"threads\":26,\"temporary\":false}}]}},\"hong-fang-tea\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"hong-fang-tea\",\"httpPortOpen\":false,\"ip\":\"95.4.2.8\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"brighter-than-the-sun.lit\"],\"organizationName\":\"HongFang Teahouse\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"hong-fang-tea\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.419999999997062,\"minDifficulty\":5,\"moneyAvailable\":15211793.744903412,\"moneyMax\":75000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":30,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"hong-fang-tea\"],\"dataMap\":{\"hong-fang-tea\":[228565686.55500427,1746,19458,1776]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":924425.5062711376,\"onlineMoneyMade\":228565686.55500427,\"onlineRunningTime\":43724.00999992516,\"ramUsage\":2.4,\"server\":\"hong-fang-tea\",\"scriptKey\":\"simple-hack.js*[\\\"hong-fang-tea\\\"]\",\"title\":\"simple-hack.js hong-fang-tea\",\"threads\":6,\"temporary\":false}}]}},\"harakiri-sushi\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"harakiri-sushi\",\"httpPortOpen\":false,\"ip\":\"95.4.3.2\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"HaraKiri Sushi Bar Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"harakiri-sushi\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.279999999997727,\"minDifficulty\":5,\"moneyAvailable\":94289612.78280665,\"moneyMax\":100000000,\"numOpenPortsRequired\":0,\"openPortCount\":1,\"requiredHackingSkill\":40,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"harakiri-sushi\"],\"dataMap\":{\"harakiri-sushi\":[2256414596.7219934,2832,15936,1500]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":815328.8146694384,\"onlineMoneyMade\":2256414596.7219934,\"onlineRunningTime\":43724.00999992516,\"ramUsage\":2.4,\"server\":\"harakiri-sushi\",\"scriptKey\":\"simple-hack.js*[\\\"harakiri-sushi\\\"]\",\"title\":\"simple-hack.js harakiri-sushi\",\"threads\":6,\"temporary\":false}}]}},\"phantasy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"phantasy\",\"httpPortOpen\":false,\"ip\":\"22.0.0.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Phantasy Club\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"phantasy\"}}]]},\"serversOnNetwork\":[\"max-hardware\",\"avmnite-02h\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":14.595999999999512,\"minDifficulty\":7,\"moneyAvailable\":120436228.23441167,\"moneyMax\":600000000,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":100,\"serverGrowth\":35,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"phantasy\"],\"dataMap\":{\"phantasy\":[1479936313.927449,1521,12103,1209]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":716031.5161629355,\"onlineMoneyMade\":1479936313.927449,\"onlineRunningTime\":40077.00999997823,\"ramUsage\":2.4,\"server\":\"phantasy\",\"scriptKey\":\"simple-hack.js*[\\\"phantasy\\\"]\",\"title\":\"simple-hack.js phantasy\",\"threads\":13,\"temporary\":false}}]}},\"max-hardware\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"max-hardware\",\"httpPortOpen\":false,\"ip\":\"97.1.3.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Max Hardware Store\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"max-hardware\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"phantasy\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.60999999999931,\"minDifficulty\":5,\"moneyAvailable\":250000000,\"moneyMax\":250000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":80,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"max-hardware\"],\"dataMap\":{\"max-hardware\":[2501319234.821575,2457,20930,1716]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":1009828.2630080417,\"onlineMoneyMade\":2501319234.821575,\"onlineRunningTime\":43663.80999992604,\"ramUsage\":2.4,\"server\":\"max-hardware\",\"scriptKey\":\"simple-hack.js*[\\\"max-hardware\\\"]\",\"title\":\"simple-hack.js max-hardware\",\"threads\":13,\"temporary\":false}}]}},\"omega-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-203096.cct\",\"type\":\"Encryption II: Vigenère Cipher\",\"data\":[\"EMAILFLASHMOUSEFRAMELINUX\",\"COMMAND\"],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omega-net\",\"httpPortOpen\":false,\"ip\":\"21.1.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-new-god.lit\"],\"organizationName\":\"Omega Software\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omega-net\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"computek\",\"johnson-ortho\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":35,\"hackDifficulty\":24.477999999999877,\"minDifficulty\":12,\"moneyAvailable\":182465726.66359207,\"moneyMax\":1550185350,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":210,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omega-net\"],\"dataMap\":{\"omega-net\":[489792180.80179596,351,3406,572]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":313459.89686537546,\"onlineMoneyMade\":489792180.80179596,\"onlineRunningTime\":40077.00999997823,\"ramUsage\":2.4,\"server\":\"omega-net\",\"scriptKey\":\"simple-hack.js*[\\\"omega-net\\\"]\",\"title\":\"simple-hack.js omega-net\",\"threads\":13,\"temporary\":false}}]}},\"crush-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"crush-fitness\",\"httpPortOpen\":false,\"ip\":\"56.1.2.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Crush Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"crush-fitness\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"syscore\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":45,\"hackDifficulty\":45,\"minDifficulty\":15,\"moneyAvailable\":43600021,\"moneyMax\":1090000525,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":262,\"serverGrowth\":31,\"runningScripts\":[]}},\"iron-gym\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"iron-gym\",\"httpPortOpen\":false,\"ip\":\"76.1.0.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Iron Gym Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"iron-gym\"}}]]},\"serversOnNetwork\":[\"home\",\"zer0\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":33.62399999999978,\"minDifficulty\":10,\"moneyAvailable\":54486186.44022677,\"moneyMax\":500000000,\"numOpenPortsRequired\":1,\"openPortCount\":1,\"requiredHackingSkill\":100,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"iron-gym\"],\"dataMap\":{\"iron-gym\":[153688494.32520363,325,7982,637]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":575670.0942098858,\"onlineMoneyMade\":153688494.32520363,\"onlineRunningTime\":43663.209999926046,\"ramUsage\":2.4,\"server\":\"iron-gym\",\"scriptKey\":\"simple-hack.js*[\\\"iron-gym\\\"]\",\"title\":\"simple-hack.js iron-gym\",\"threads\":13,\"temporary\":false}}]}},\"millenium-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-115154.cct\",\"type\":\"Subarray with Maximum Sum\",\"data\":[-9,2,-3,10,-10,5,9,-4,-1,-2,3,-4,-4,4,3,-3,-4,-2,4,8,-9,-8,-4,-2,6,-9,-6,8,-6,-8,-2,2,9,-3,-6,1,-6],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"millenium-fitness\",\"httpPortOpen\":false,\"ip\":\"43.2.8.0\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"Millenium Fitness Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"millenium-fitness\"}}]]},\"serversOnNetwork\":[\"syscore\",\"galactic-cyber\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":49,\"hackDifficulty\":34.064000000000114,\"minDifficulty\":16,\"moneyAvailable\":670929769.2618666,\"moneyMax\":6250000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":500,\"serverGrowth\":27,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"millenium-fitness\"],\"dataMap\":{\"millenium-fitness\":[759449714.8644992,265,4240,689]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":494358.8656819985,\"onlineMoneyMade\":759449714.8644992,\"onlineRunningTime\":37093.61000002165,\"ramUsage\":2.4,\"server\":\"millenium-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"millenium-fitness\\\"]\",\"title\":\"simple-hack.js millenium-fitness\",\"threads\":53,\"temporary\":false}}]}},\"powerhouse-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"powerhouse-fitness\",\"httpPortOpen\":false,\"ip\":\"46.8.4.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Powerhouse Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\".\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":55,\"minDifficulty\":18,\"moneyAvailable\":900000000,\"moneyMax\":22500000000,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":978,\"serverGrowth\":57,\"runningScripts\":[]}},\"snap-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"snap-fitness\",\"httpPortOpen\":true,\"ip\":\"16.2.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Snap Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"snap-fitness\"}}]]},\"serversOnNetwork\":[\"alpha-ent\",\"omnia\",\"unitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":41,\"hackDifficulty\":41,\"minDifficulty\":14,\"moneyAvailable\":450000000,\"moneyMax\":11250000000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":744,\"serverGrowth\":50,\"runningScripts\":[]}},\"run4theh111z\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"run4theh111z\",\"httpPortOpen\":true,\"ip\":\"60.3.1.6\",\"isConnectedTo\":false,\"maxRam\":256,\"messages\":[\"simulated-reality.lit\",\"the-new-god.lit\"],\"organizationName\":\"The Runners\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"infocomm\",\"fulcrumtech\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":506,\"serverGrowth\":1,\"runningScripts\":[]}},\"I.I.I.I\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"I.I.I.I\",\"httpPortOpen\":false,\"ip\":\"40.2.6.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"I.I.I.I\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"avmnite-02h\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":362,\"serverGrowth\":1,\"runningScripts\":[]}},\"avmnite-02h\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"avmnite-02h\",\"httpPortOpen\":false,\"ip\":\"95.5.8.0\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"NiteSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"phantasy\",\"I.I.I.I\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":2,\"openPortCount\":2,\"requiredHackingSkill\":207,\"serverGrowth\":1,\"runningScripts\":[]}},\".\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\".\",\"httpPortOpen\":true,\"ip\":\"81.1.6.0\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\".\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\".\"}}]]},\"serversOnNetwork\":[\"helios\",\"clarkinc\",\"powerhouse-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":546,\"serverGrowth\":1,\"runningScripts\":[]}},\"CSEC\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"CSEC\",\"httpPortOpen\":false,\"ip\":\"55.3.4.4\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"CyberSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"foodnstuff\",\"neo-net\",\"silver-helix\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":1,\"openPortCount\":2,\"requiredHackingSkill\":56,\"serverGrowth\":1,\"runningScripts\":[]}},\"The-Cave\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"The-Cave\",\"httpPortOpen\":true,\"ip\":\"52.2.4.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"alpha-omega.lit\"],\"organizationName\":\"Helios\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"The-Cave\"}}]]},\"serversOnNetwork\":[\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":925,\"serverGrowth\":1,\"runningScripts\":[]}},\"w0r1d_d43m0n\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"w0r1d_d43m0n\",\"httpPortOpen\":false,\"ip\":\"66.1.4.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"w0r1d_d43m0n\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":3000,\"serverGrowth\":1,\"runningScripts\":[]}},\"darkweb\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"darkweb\",\"httpPortOpen\":true,\"ip\":\"95.6.7.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"darkweb\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[]}},\"home-0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-0\",\"httpPortOpen\":false,\"ip\":\"75.8.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-0\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-0\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37861.21000001048,\"ramUsage\":3.15,\"server\":\"home-0\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-1\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-1\",\"httpPortOpen\":false,\"ip\":\"96.0.3.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-1\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-1\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37854.21000001058,\"ramUsage\":3.15,\"server\":\"home-1\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-2\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-2\",\"httpPortOpen\":false,\"ip\":\"20.7.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-2\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-2\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37842.21000001075,\"ramUsage\":3.15,\"server\":\"home-2\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-3\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-3\",\"httpPortOpen\":false,\"ip\":\"75.6.6.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-3\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-3\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37816.010000011134,\"ramUsage\":3.15,\"server\":\"home-3\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-4\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-4\",\"httpPortOpen\":false,\"ip\":\"87.9.7.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-4\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-4\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37813.01000001118,\"ramUsage\":3.15,\"server\":\"home-4\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-5\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-5\",\"httpPortOpen\":false,\"ip\":\"6.7.8.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-5\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-5\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37806.01000001128,\"ramUsage\":3.15,\"server\":\"home-5\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-6\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-6\",\"httpPortOpen\":false,\"ip\":\"56.6.5.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-6\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-6\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37800.810000011355,\"ramUsage\":3.15,\"server\":\"home-6\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-7\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-7\",\"httpPortOpen\":false,\"ip\":\"71.5.7.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-7\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-7\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37798.810000011385,\"ramUsage\":3.15,\"server\":\"home-7\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-8\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-8\",\"httpPortOpen\":false,\"ip\":\"45.0.0.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-8\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-8\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71942.67081877259,\"onlineMoneyMade\":0,\"onlineRunningTime\":37780.81000001165,\"ramUsage\":3.15,\"server\":\"home-8\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-9\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-9\",\"httpPortOpen\":false,\"ip\":\"91.3.4.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-9\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-9\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":72023.12560608948,\"onlineMoneyMade\":0,\"onlineRunningTime\":37767.41000001184,\"ramUsage\":3.15,\"server\":\"home-9\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-10\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-10\",\"httpPortOpen\":false,\"ip\":\"17.6.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-10\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-10\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,30,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71942.67081877259,\"onlineMoneyMade\":0,\"onlineRunningTime\":37747.210000012135,\"ramUsage\":3.15,\"server\":\"home-10\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-11\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-11\",\"httpPortOpen\":false,\"ip\":\"68.4.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-11\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-11\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71540.39688218808,\"onlineMoneyMade\":0,\"onlineRunningTime\":37731.21000001237,\"ramUsage\":3.15,\"server\":\"home-11\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-12\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-12\",\"httpPortOpen\":false,\"ip\":\"73.2.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-12\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-12\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71540.39688218808,\"onlineMoneyMade\":0,\"onlineRunningTime\":37715.2100000126,\"ramUsage\":3.15,\"server\":\"home-12\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-13\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-13\",\"httpPortOpen\":false,\"ip\":\"45.6.8.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-13\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-13\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"zb-institute\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,10,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71717.39741428527,\"onlineMoneyMade\":0,\"onlineRunningTime\":37705.01000001275,\"ramUsage\":3.15,\"server\":\"home-13\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-14\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-14\",\"httpPortOpen\":false,\"ip\":\"98.3.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-14\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-14\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"zb-institute\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,10,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71717.39741428527,\"onlineMoneyMade\":0,\"onlineRunningTime\":37699.01000001284,\"ramUsage\":3.15,\"server\":\"home-14\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-15\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-15\",\"httpPortOpen\":false,\"ip\":\"61.7.3.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-15\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-15\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"zb-institute\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,10,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71717.39741428527,\"onlineMoneyMade\":0,\"onlineRunningTime\":37678.01000001314,\"ramUsage\":3.15,\"server\":\"home-15\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-16\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-16\",\"httpPortOpen\":false,\"ip\":\"45.0.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-16\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-16\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,40,0],\"foodnstuff\":[0,0,40,0],\"nectar-net\":[0,0,40,0],\"omega-net\":[0,0,40,0],\"neo-net\":[0,0,40,0],\"the-hub\":[0,0,40,0],\"silver-helix\":[0,0,30,0],\"sigma-cosmetics\":[0,0,30,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,30,0],\"harakiri-sushi\":[0,0,10,0],\"iron-gym\":[0,0,30,0],\"zer0\":[0,0,30,0],\"catalyst\":[0,0,30,0],\"rho-construction\":[0,0,30,0],\"aevum-police\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"unitalife\":[0,0,20,0],\"lexo-corp\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"millenium-fitness\":[0,0,20,0],\"zb-institute\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,10,0],\"titan-labs\":[0,0,10,0],\"helios\":[0,0,10,0],\"vitalife\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":71717.39741428527,\"onlineMoneyMade\":0,\"onlineRunningTime\":37665.81000001332,\"ramUsage\":3.15,\"server\":\"home-16\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-17\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-17\",\"httpPortOpen\":false,\"ip\":\"54.7.4.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-17\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-17\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37649.81000001355,\"ramUsage\":3.15,\"server\":\"home-17\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-18\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-18\",\"httpPortOpen\":false,\"ip\":\"34.9.3.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-18\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-18\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37625.610000013905,\"ramUsage\":3.15,\"server\":\"home-18\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-19\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-19\",\"httpPortOpen\":false,\"ip\":\"92.1.9.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-19\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-19\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37617.61000001402,\"ramUsage\":3.15,\"server\":\"home-19\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-20\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-20\",\"httpPortOpen\":false,\"ip\":\"71.7.1.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-20\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-20\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37615.61000001405,\"ramUsage\":3.15,\"server\":\"home-20\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-21\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-21\",\"httpPortOpen\":false,\"ip\":\"9.3.3.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-21\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-21\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37598.6100000143,\"ramUsage\":3.15,\"server\":\"home-21\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-22\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-22\",\"httpPortOpen\":false,\"ip\":\"80.7.7.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-22\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-22\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37587.41000001446,\"ramUsage\":3.15,\"server\":\"home-22\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-23\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-23\",\"httpPortOpen\":false,\"ip\":\"32.8.2.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-23\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-23\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37581.41000001455,\"ramUsage\":3.15,\"server\":\"home-23\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}},\"home-24\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-24\",\"httpPortOpen\":false,\"ip\":\"22.7.1.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (ns.scriptRunning('simple-hack.js', nextServer)) {\\n                    let maxMoney = ns.getServerMaxMoney(nextServer);\\n                    let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n\\n                    if (currentMoney < 0.2 * maxMoney) {\\n                        await ns.grow(nextServer);\\n                    }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-24\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-24\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[20],\"dataMap\":{\"max-hardware\":[0,0,20,0],\"phantasy\":[0,0,30,0],\"foodnstuff\":[0,0,30,0],\"nectar-net\":[0,0,30,0],\"omega-net\":[0,0,30,0],\"neo-net\":[0,0,30,0],\"the-hub\":[0,0,30,0],\"rothman-uni\":[0,0,30,0],\"netlink\":[0,0,30,0],\"summit-uni\":[0,0,30,0],\"alpha-ent\":[0,0,30,0],\"lexo-corp\":[0,0,30,0],\"millenium-fitness\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"sigma-cosmetics\":[0,0,20,0],\"joesguns\":[0,0,10,0],\"hong-fang-tea\":[0,0,20,0],\"iron-gym\":[0,0,20,0],\"zer0\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"aevum-police\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"helios\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"global-pharm\":[0,0,10,0],\"solaris\":[0,0,10,0],\"microdyne\":[0,0,10,0],\"zb-institute\":[0,0,10,0],\"omnia\":[0,0,10,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":64701.73996025152,\"onlineMoneyMade\":0,\"onlineRunningTime\":37548.21000001503,\"ramUsage\":3.15,\"server\":\"home-24\",\"scriptKey\":\"grow-helper.js*[20]\",\"title\":\"grow-helper.js 20\",\"threads\":10,\"temporary\":false}}]}}}","CompaniesSave":"{\"ECorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.0886,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Fulcrum Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Storm Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DefComm\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Helios Labs\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"VitaLife\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Icarus Microsystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Universal Energy\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Galactic Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"AeroCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omnia Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.6406,\"playerReputation\":0}},\"Solaris Space Systems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DeltaOne\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Global Pharmaceuticals\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Nova Medical\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Central Intelligence Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"National Security Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Watchdog Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"LexoCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Rho Construction\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Alpha Enterprises\":{\"ctor\":\"Company\",\"data\":{\"favor\":37.815,\"playerReputation\":0}},\"Aevum Police Headquarters\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"SysCore Securities\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"CompuTek\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NetLink Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Carmichael Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"FoodNStuff\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Joe's Guns\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omega Software\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Noodle Bar\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}}}","FactionsSave":"{\"Illuminati\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Daedalus\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Covenant\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"ECorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Fulcrum Secret Technologies\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"BitRunners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":48.3427,\"isBanned\":false,\"isMember\":true,\"playerReputation\":525238.3438796137}},\"The Black Hand\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":133.83,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"NiteSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":142.4626,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Aevum\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":107.3609,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Chongqing\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":78.838,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Ishima\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":21.9587,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"New Tokyo\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":20.0596,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Sector-12\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":111.1884,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Volhaven\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":30.7334,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Speakers for the Dead\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Dark Army\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Syndicate\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Silhouette\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tetrads\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Slum Snakes\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Netburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":91.4609,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tian Di Hui\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":72.583,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"CyberSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":91.5419,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Bladeburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Church of the Machine God\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Shadows of Anarchy\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}}}","AliasesSave":"{\"kill-nuke\":\"home; run kill-nuke.js\",\"kill-hack\":\"home; run kill-all-simple-hack.js\",\"hacknet\":\"home; run hacknet-bot.js\",\"kill-bot\":\"home; run kill-hacknet.js\",\"nuke\":\"home; run auto-nuke.js\",\"flight\":\"home; run fl1ght.exe\",\"start-grow-helpers\":\"home; run start-grow-helpers.js\",\"backdoor-server\":\"home; run backdoor-command.js\",\"darkweb\":\"connect darkweb; buy -l\",\"buy-all\":\"buy FTPCrack.exe; buy relaySMTP.exe; buy HTTPWorm.exe; buy SQLInject.exe; buy ServerProfiler.exe; buy DeepscanV1.exe; buy DeepscanV2.exe; buy AutoLink.exe\"}","GlobalAliasesSave":"{\"killAll\":\"home; ./kill-all-simple-hack.js; ./kill-all-grow-helpers.js; ./kill-hacknet.js; ./kill-nuke.js;\",\"connectServer\":\"connect home; ./connect-server.js\",\"backdoor1CSEC\":\"connect home; ./backdoor-command.js CSEC\",\"backdoor2NiteSec\":\"connect home; ./backdoor-command.js avmnite-02h\",\"backdoor3BlackHand\":\"connect home; ./backdoor-command.js I.I.I.I\",\"backdoor4BitRunners\":\"connect home; ./backdoor-command.js run4theh111z\",\"buy1FTP\":\"buy FTPCrack.exe\",\"buy2SMTP\":\"buy relaySMTP.exe\",\"buy3HTTP\":\"buy HTTPWorm.exe\",\"buy4SQL\":\"buy SQLInject.exe\",\"startNew\":\"home; ./start-hack-course.js; ./hacknet-bot.js; ./auto-nuke.js; ./start-grow-helpers.js;\",\"startAll\":\"home; ./hacknet-bot.js; ./auto-nuke.js; ./start-grow-helpers.js;\"}","StockMarketSave":"{\"ECorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"ECorp\",\"symbol\":\"ECP\",\"price\":7361.367150328662,\"lastPrice\":7390.043904839081,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.5,\"b\":false,\"otlkMag\":22.45331219309159,\"otlkMagForecast\":30.94934426318566,\"cap\":18736460,\"spreadPerc\":0.5,\"shareTxForMovement\":61775,\"shareTxUntilMovement\":61775,\"totalShares\":133900000,\"maxShares\":26800000}},\"MegaCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"MegaCorp\",\"symbol\":\"MGCP\",\"price\":15233.85253940528,\"lastPrice\":15177.0939784287,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.48,\"b\":true,\"otlkMag\":19.901975476407937,\"otlkMagForecast\":69.1840540163331,\"cap\":343905733,\"spreadPerc\":0.3,\"shareTxForMovement\":63915,\"shareTxUntilMovement\":63915,\"totalShares\":78500000,\"maxShares\":15700000}},\"Blade Industries\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Blade Industries\",\"symbol\":\"BLD\",\"price\":9636.09565958548,\"lastPrice\":9577.148237614529,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.79,\"b\":false,\"otlkMag\":13.141784304035825,\"otlkMagForecast\":37.09758184178594,\"cap\":234809330,\"spreadPerc\":0.2,\"shareTxForMovement\":63070,\"shareTxUntilMovement\":63070,\"totalShares\":103300000,\"maxShares\":20700000}},\"Clarke Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Clarke Incorporated\",\"symbol\":\"CLRK\",\"price\":5313.3103469303005,\"lastPrice\":5286.538013119036,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.65,\"b\":false,\"otlkMag\":12.591635686194554,\"otlkMagForecast\":36.48856743068022,\"cap\":233220540,\"spreadPerc\":0.3,\"shareTxForMovement\":84478,\"shareTxUntilMovement\":84478,\"totalShares\":144700000,\"maxShares\":28900000}},\"OmniTek Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"OmniTek Incorporated\",\"symbol\":\"OMTK\",\"price\":15698.252077650828,\"lastPrice\":15623.997452534724,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.61,\"b\":false,\"otlkMag\":14.043712506763523,\"otlkMagForecast\":37.548900033687204,\"cap\":755589720,\"spreadPerc\":0.4,\"shareTxForMovement\":85386,\"shareTxUntilMovement\":85386,\"totalShares\":51400000,\"maxShares\":10300000}},\"Four Sigma\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Four Sigma\",\"symbol\":\"FSIG\",\"price\":25274.969409524034,\"lastPrice\":25489.6133595548,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.09,\"b\":true,\"otlkMag\":13.952496560953364,\"otlkMagForecast\":65.38011294851334,\"cap\":301444974,\"spreadPerc\":0.4,\"shareTxForMovement\":53889,\"shareTxUntilMovement\":53889,\"totalShares\":31900000,\"maxShares\":6400000}},\"KuaiGong International\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"KuaiGong International\",\"symbol\":\"KGI\",\"price\":19088.682215290788,\"lastPrice\":19212.122113719546,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.83,\"b\":false,\"otlkMag\":10.532325803138706,\"otlkMagForecast\":37.75429280868328,\"cap\":55170046,\"spreadPerc\":0.4,\"shareTxForMovement\":34228,\"shareTxUntilMovement\":34228,\"totalShares\":101700000,\"maxShares\":20300000}},\"Fulcrum Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Fulcrum Technologies\",\"symbol\":\"FLCM\",\"price\":632212.2382819407,\"lastPrice\":626211.185486308,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.23,\"b\":true,\"otlkMag\":27.559650819278133,\"otlkMagForecast\":75.78828771030992,\"cap\":575644863,\"spreadPerc\":1,\"shareTxForMovement\":50055,\"shareTxUntilMovement\":50055,\"totalShares\":60500000,\"maxShares\":12100000}},\"Storm Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Storm Technologies\",\"symbol\":\"STM\",\"price\":23948.023289140154,\"lastPrice\":23792.312944840865,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.84,\"b\":false,\"otlkMag\":4.260348688971588,\"otlkMagForecast\":44.89953121620685,\"cap\":397827276,\"spreadPerc\":0.3,\"shareTxForMovement\":92905,\"shareTxUntilMovement\":92905,\"totalShares\":50600000,\"maxShares\":10100000}},\"DefComm\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"DefComm\",\"symbol\":\"DCOMM\",\"price\":11919.190432038477,\"lastPrice\":11860.052233484224,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.64,\"b\":false,\"otlkMag\":10.008175359641413,\"otlkMagForecast\":42.32625025254897,\"cap\":375285478,\"spreadPerc\":0.8,\"shareTxForMovement\":96786,\"shareTxUntilMovement\":96786,\"totalShares\":57500000,\"maxShares\":11500000}},\"Helios Labs\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Helios Labs\",\"symbol\":\"HLS\",\"price\":6435.636879235595,\"lastPrice\":6405.195540831344,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.61,\"b\":false,\"otlkMag\":11.272495601505472,\"otlkMagForecast\":37.41492439307115,\"cap\":274070007,\"spreadPerc\":0.5,\"shareTxForMovement\":47592,\"shareTxUntilMovement\":47592,\"totalShares\":60200000,\"maxShares\":12000000}},\"VitaLife\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"VitaLife\",\"symbol\":\"VITA\",\"price\":10497.24464908047,\"lastPrice\":10560.219559664713,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.77,\"b\":false,\"otlkMag\":7.967260626063871,\"otlkMagForecast\":42.79671775349861,\"cap\":164415870,\"spreadPerc\":0.5,\"shareTxForMovement\":45297,\"shareTxUntilMovement\":45297,\"totalShares\":109400000,\"maxShares\":21900000}},\"Icarus Microsystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Icarus Microsystems\",\"symbol\":\"ICRS\",\"price\":14169.901793796054,\"lastPrice\":14103.970113394102,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.6,\"b\":false,\"otlkMag\":7.457640329377241,\"otlkMagForecast\":43.94771316697097,\"cap\":255268106,\"spreadPerc\":0.4,\"shareTxForMovement\":89294,\"shareTxUntilMovement\":89294,\"totalShares\":63900000,\"maxShares\":12800000}},\"Universal Energy\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Universal Energy\",\"symbol\":\"UNV\",\"price\":8501.167618100495,\"lastPrice\":8467.5220374986,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.51,\"b\":false,\"otlkMag\":10.06798271181849,\"otlkMagForecast\":40.54211209838466,\"cap\":347524257,\"spreadPerc\":0.5,\"shareTxForMovement\":107864,\"shareTxUntilMovement\":107864,\"totalShares\":39200000,\"maxShares\":7800000}},\"AeroCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"AeroCorp\",\"symbol\":\"AERO\",\"price\":9318.543940761298,\"lastPrice\":9361.379218231023,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.59,\"b\":true,\"otlkMag\":6.768228449779695,\"otlkMagForecast\":56.64590148102782,\"cap\":197459562,\"spreadPerc\":0.5,\"shareTxForMovement\":78610,\"shareTxUntilMovement\":78610,\"totalShares\":42900000,\"maxShares\":8600000}},\"Omnia Cybersystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omnia Cybersystems\",\"symbol\":\"OMN\",\"price\":18675.787177013335,\"lastPrice\":18574.48556650828,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.7,\"b\":false,\"otlkMag\":3.6231161857779437,\"otlkMagForecast\":47.686544667693376,\"cap\":299100303,\"spreadPerc\":0.6,\"shareTxForMovement\":115850,\"shareTxUntilMovement\":115850,\"totalShares\":49200000,\"maxShares\":9800000}},\"Solaris Space Systems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Solaris Space Systems\",\"symbol\":\"SLRS\",\"price\":31474.46021418808,\"lastPrice\":31670.637983991594,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.8,\"b\":false,\"otlkMag\":6.847999620666824,\"otlkMagForecast\":42.33108022251872,\"cap\":398790983,\"spreadPerc\":0.4,\"shareTxForMovement\":91980,\"shareTxUntilMovement\":91980,\"totalShares\":26600000,\"maxShares\":5300000}},\"Global Pharmaceuticals\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Global Pharmaceuticals\",\"symbol\":\"GPH\",\"price\":13953.72303537313,\"lastPrice\":14022.213823441909,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.63,\"b\":true,\"otlkMag\":13.171033347018218,\"otlkMagForecast\":61.03776249289517,\"cap\":521703441,\"spreadPerc\":0.7,\"shareTxForMovement\":72896,\"shareTxUntilMovement\":72896,\"totalShares\":32000000,\"maxShares\":6400000}},\"Nova Medical\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Nova Medical\",\"symbol\":\"NVMD\",\"price\":14840.851916299425,\"lastPrice\":14750.065150453209,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.79,\"b\":true,\"otlkMag\":6.516467733553814,\"otlkMagForecast\":57.153155201479386,\"cap\":165044848,\"spreadPerc\":0.4,\"shareTxForMovement\":80363,\"shareTxUntilMovement\":80363,\"totalShares\":38600000,\"maxShares\":7700000}},\"Watchdog Security\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Watchdog Security\",\"symbol\":\"WDS\",\"price\":6974.092390554104,\"lastPrice\":6837.711890543133,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.56,\"b\":true,\"otlkMag\":8.03086340676698,\"otlkMagForecast\":56.4490506492207,\"cap\":76950501,\"spreadPerc\":1.2,\"shareTxForMovement\":22505,\"shareTxUntilMovement\":22505,\"totalShares\":53400000,\"maxShares\":10700000}},\"LexoCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"LexoCorp\",\"symbol\":\"LXO\",\"price\":2729.045379179958,\"lastPrice\":2754.56025850768,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.2,\"b\":true,\"otlkMag\":1.4197067581429161,\"otlkMagForecast\":48.09749461508425,\"cap\":102211030,\"spreadPerc\":1,\"shareTxForMovement\":100028,\"shareTxUntilMovement\":100028,\"totalShares\":37900000,\"maxShares\":7600000}},\"Rho Construction\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Rho Construction\",\"symbol\":\"RHOC\",\"price\":4955.60461818295,\"lastPrice\":4981.08712211506,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.66,\"b\":false,\"otlkMag\":5.739999547594719,\"otlkMagForecast\":47.57423073988006,\"cap\":90021819,\"spreadPerc\":0.3,\"shareTxForMovement\":63461,\"shareTxUntilMovement\":63461,\"totalShares\":41400000,\"maxShares\":8300000}},\"Alpha Enterprises\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Alpha Enterprises\",\"symbol\":\"APHE\",\"price\":24344.5655122113,\"lastPrice\":24695.458970453452,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.85,\"b\":false,\"otlkMag\":7.320719763543683,\"otlkMagForecast\":42.62407564156857,\"cap\":117033185,\"spreadPerc\":0.8,\"shareTxForMovement\":51271,\"shareTxUntilMovement\":51271,\"totalShares\":38000000,\"maxShares\":7600000}},\"SysCore Securities\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"SysCore Securities\",\"symbol\":\"SYSC\",\"price\":20251.61368239766,\"lastPrice\":20013.048970346303,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.53,\"b\":true,\"otlkMag\":5.826765534719156,\"otlkMagForecast\":54.63362988754069,\"cap\":85835760,\"spreadPerc\":1,\"shareTxForMovement\":82651,\"shareTxUntilMovement\":82651,\"totalShares\":27000000,\"maxShares\":5400000}},\"CompuTek\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"CompuTek\",\"symbol\":\"CTK\",\"price\":2279.187800052473,\"lastPrice\":2294.4592431455408,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.86,\"b\":false,\"otlkMag\":6.766467900610406,\"otlkMagForecast\":43.422189871498354,\"cap\":12811284,\"spreadPerc\":1,\"shareTxForMovement\":101287,\"shareTxUntilMovement\":101287,\"totalShares\":83400000,\"maxShares\":16700000}},\"NetLink Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"NetLink Technologies\",\"symbol\":\"NTLK\",\"price\":52036.17528436622,\"lastPrice\":53471.36774851438,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":3.54,\"b\":true,\"otlkMag\":15.948490515853052,\"otlkMagForecast\":65.94572300515175,\"cap\":8103993,\"spreadPerc\":2,\"shareTxForMovement\":45873,\"shareTxUntilMovement\":45873,\"totalShares\":33600000,\"maxShares\":6700000}},\"Omega Software\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omega Software\",\"symbol\":\"OMGA\",\"price\":2276.442906493969,\"lastPrice\":2294.533734709559,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.02,\"b\":true,\"otlkMag\":6.883653615165783,\"otlkMagForecast\":55.204496716161096,\"cap\":43814853,\"spreadPerc\":0.9,\"shareTxForMovement\":63411,\"shareTxUntilMovement\":63411,\"totalShares\":9600000,\"maxShares\":1900000}},\"FoodNStuff\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"FoodNStuff\",\"symbol\":\"FNS\",\"price\":2803.2503061067837,\"lastPrice\":2786.5333774127434,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.77,\"b\":true,\"otlkMag\":5.296415522157889,\"otlkMagForecast\":54.37091584801741,\"cap\":72001718,\"spreadPerc\":0.9,\"shareTxForMovement\":103631,\"shareTxUntilMovement\":103631,\"totalShares\":10700000,\"maxShares\":2100000}},\"Sigma Cosmetics\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Sigma Cosmetics\",\"symbol\":\"SGC\",\"price\":2214.9051996296116,\"lastPrice\":2244.7592156245814,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.73,\"b\":false,\"otlkMag\":5.969077556822463,\"otlkMagForecast\":43.71280482180689,\"cap\":21526541,\"spreadPerc\":0.7,\"shareTxForMovement\":21188,\"shareTxUntilMovement\":21188,\"totalShares\":19500000,\"maxShares\":3900000}},\"Joe's Guns\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Joe's Guns\",\"symbol\":\"JGN\",\"price\":691.8535666070483,\"lastPrice\":709.9111864793673,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":3.35,\"b\":true,\"otlkMag\":6.600992379251612,\"otlkMagForecast\":50.880012597011536,\"cap\":19167490,\"spreadPerc\":0.8,\"shareTxForMovement\":36762,\"shareTxUntilMovement\":36762,\"totalShares\":44400000,\"maxShares\":8900000}},\"Catalyst Ventures\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Catalyst Ventures\",\"symbol\":\"CTYS\",\"price\":9598.385895920832,\"lastPrice\":9715.046526655227,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.56,\"b\":true,\"otlkMag\":17.336085182493502,\"otlkMagForecast\":70.40720113239037,\"cap\":14801756,\"spreadPerc\":1.4,\"shareTxForMovement\":45209,\"shareTxUntilMovement\":45209,\"totalShares\":164200000,\"maxShares\":32800000}},\"Microdyne Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Microdyne Technologies\",\"symbol\":\"MDYN\",\"price\":14374.053046128376,\"lastPrice\":14455.806031120783,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.73,\"b\":false,\"otlkMag\":7.901435871991503,\"otlkMagForecast\":40.9229427925083,\"cap\":248013313,\"spreadPerc\":0.7,\"shareTxForMovement\":143532,\"shareTxUntilMovement\":143532,\"totalShares\":20500000,\"maxShares\":4100000}},\"Titan Laboratories\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Titan Laboratories\",\"symbol\":\"TITN\",\"price\":22506.614224879035,\"lastPrice\":22601.304513901698,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.54,\"b\":false,\"otlkMag\":12.213267865356308,\"otlkMagForecast\":37.81698358934085,\"cap\":169799583,\"spreadPerc\":0.8,\"shareTxForMovement\":126225,\"shareTxUntilMovement\":126225,\"totalShares\":22400000,\"maxShares\":4500000}},\"Orders\":{\"ECP\":[],\"MGCP\":[],\"BLD\":[],\"CLRK\":[],\"OMTK\":[],\"FSIG\":[],\"KGI\":[],\"FLCM\":[],\"STM\":[],\"DCOMM\":[],\"HLS\":[],\"VITA\":[],\"ICRS\":[],\"UNV\":[],\"AERO\":[],\"OMN\":[],\"SLRS\":[],\"GPH\":[],\"NVMD\":[],\"WDS\":[],\"LXO\":[],\"RHOC\":[],\"APHE\":[],\"SYSC\":[],\"CTK\":[],\"NTLK\":[],\"OMGA\":[],\"FNS\":[],\"SGC\":[],\"JGN\":[],\"CTYS\":[],\"MDYN\":[],\"TITN\":[]},\"storedCycles\":11,\"lastUpdate\":1693782513686,\"ticksUntilCycle\":62}","SettingsSave":"{\"ActiveScriptsServerPageSize\":100,\"ActiveScriptsScriptPageSize\":10,\"AutoexecScript\":\"\",\"AutosaveInterval\":60,\"CodeInstructionRunTime\":20,\"DisableASCIIArt\":false,\"DisableHotkeys\":false,\"DisableTextEffects\":false,\"DisableOverviewProgressBars\":false,\"EnableBashHotkeys\":false,\"EnableHistorySearch\":false,\"TimestampsFormat\":\"\",\"Locale\":\"en\",\"MaxRecentScriptsCapacity\":50,\"MaxLogCapacity\":50,\"MaxPortCapacity\":50,\"MaxTerminalCapacity\":500,\"RemoteFileApiPort\":0,\"SaveGameOnFileSave\":true,\"SuppressBuyAugmentationConfirmation\":false,\"SuppressFactionInvites\":false,\"SuppressMessages\":false,\"SuppressTravelConfirmation\":false,\"SuppressBladeburnerPopup\":false,\"SuppressTIXPopup\":false,\"SuppressSavedGameToast\":false,\"SuppressAutosaveDisabledWarnings\":false,\"UseIEC60027_2\":true,\"ShowMiddleNullTimeUnit\":false,\"ExcludeRunningScriptsFromSave\":false,\"IsSidebarOpened\":true,\"theme\":{\"primarylight\":\"#28CF28\",\"primary\":\"#21A821\",\"primarydark\":\"#177317\",\"successlight\":\"#1CFF1C\",\"success\":\"#16CA16\",\"successdark\":\"#0D910D\",\"errorlight\":\"#FF3B3B\",\"error\":\"#C32D2D\",\"errordark\":\"#8E2121\",\"secondarylight\":\"#B3B3B3\",\"secondary\":\"#838383\",\"secondarydark\":\"#676767\",\"warninglight\":\"#FFFF3A\",\"warning\":\"#C3C32A\",\"warningdark\":\"#8C8C1E\",\"infolight\":\"#64CBFF\",\"info\":\"#3399CC\",\"infodark\":\"#246D91\",\"welllight\":\"#404040\",\"well\":\"#1C1C1C\",\"white\":\"#C3C3C3\",\"black\":\"#0A0B0B\",\"hp\":\"#C62E2E\",\"money\":\"#D6BB27\",\"hack\":\"#ADFF2F\",\"combat\":\"#E8EDCD\",\"cha\":\"#8B5FAF\",\"int\":\"#537CC8\",\"rep\":\"#E8EDCD\",\"disabled\":\"#5AB5A5\",\"backgroundprimary\":\"#0C0D0E\",\"backgroundsecondary\":\"#121415\",\"button\":\"#252829\"},\"styles\":{\"lineHeight\":1.5,\"fontFamily\":\"Lucida Console, Lucida Sans Unicode, Fira Mono, Consolas, Courier New, Courier, monospace, Times New Roman\"},\"overview\":{\"x\":-17,\"y\":1169,\"opened\":false},\"EditorTheme\":{\"common\":{\"accent\":\"B5CEA8\",\"bg\":\"1E1E1E\",\"fg\":\"D4D4D4\"},\"syntax\":{\"tag\":\"569CD6\",\"entity\":\"569CD6\",\"string\":\"CE9178\",\"regexp\":\"646695\",\"markup\":\"569CD6\",\"keyword\":\"569CD6\",\"comment\":\"6A9955\",\"constant\":\"569CD6\",\"error\":\"F44747\"},\"ui\":{\"line\":\"1E1E1E\",\"panel\":{\"bg\":\"252526\",\"selected\":\"252526\",\"border\":\"1E1E1E\"},\"selection\":{\"bg\":\"ADD6FF26\"}},\"base\":\"vs-dark\",\"inherit\":true},\"OwnedAugmentationsOrder\":0,\"PurchaseAugmentationsOrder\":0,\"MonacoTheme\":\"monokai\",\"MonacoInsertSpaces\":true,\"MonacoTabSize\":2,\"MonacoDetectIndentation\":false,\"MonacoFontFamily\":\"Lucida Console\",\"MonacoFontSize\":15,\"MonacoFontLigatures\":false,\"MonacoVim\":false,\"MonacoWordWrap\":\"off\",\"MonacoCursorStyle\":\"line\",\"MonacoCursorBlinking\":\"blink\",\"hideTrailingDecimalZeros\":false,\"hideThousandsSeparator\":false,\"useEngineeringNotation\":false,\"disableSuffixes\":false}","VersionSave":"34","AllGangsSave":"","LastExportBonus":"1693736923116","StaneksGiftSave":"{\"ctor\":\"StaneksGift\",\"data\":{\"fragments\":[],\"isBonusCharging\":false,\"storedCycles\":0}}"}}