From 5546eed46ce9be3a0bfbb23ad82f1ec6c2ee8757 Mon Sep 17 00:00:00 2001 From: Bentley Davis <10065854+NonPolynomialTim@users.noreply.github.com> Date: Fri, 31 Jul 2026 03:43:20 -0400 Subject: [PATCH] fix(coop): base-defense use-after-free on dangling temp_ufo Reported as "save crashes on month end". A coop (SEPARATE) base defense stashes the attacking retaliation UFO in the file-scope global `temp_ufo`, then DEFERS the battle across a host<->client handshake. The UFO is freed during that window, so GeoscapeState::startCoopMission dereferenced a dangling pointer -> access violation. The null-only guard `if (temp_ufo && ...)` cannot catch a freed-but-non-null pointer; the two field crash variants (memchr string-copy of getAlienRace / memmove struct-copy of getCraftStats) match a use-after-free with heap reuse. Snapshot the fields startCoopMission needs (coop flag, lon/lat, damage %, missionCustomDeploy, alienRace) at arm time in handleBaseDefense and read the snapshot; never dereference the UFO after the deferral. The one-shot `pending` flag also fixes the original's never-reset pointer. Host-side only (the client receives the streamed battle). SHARED path (immediate startCoopMission) reads the fresh snapshot unchanged. Regression test tools/coop_test/test_coop_basedef_temp_ufo_uaf.py (sanitized generic fixture, no player data): RED before this change, GREEN after; test_shared_base_defense.py still green. Co-Authored-By: Claude Opus 4.8 --- src/Geoscape/GeoscapeState.cpp | 53 +- .../fixtures/coop_basedef_retaliation.sav | 3726 +++++++++++++++++ .../test_coop_basedef_temp_ufo_uaf.py | 129 + 3 files changed, 3897 insertions(+), 11 deletions(-) create mode 100644 tools/coop_test/fixtures/coop_basedef_retaliation.sav create mode 100644 tools/coop_test/test_coop_basedef_temp_ufo_uaf.py diff --git a/src/Geoscape/GeoscapeState.cpp b/src/Geoscape/GeoscapeState.cpp index 3e0ed772b..ec8d99564 100644 --- a/src/Geoscape/GeoscapeState.cpp +++ b/src/Geoscape/GeoscapeState.cpp @@ -165,8 +165,27 @@ static std::vector sharedAlertSoldierIds(const std::vector& v) { std::vector o; for (auto* s : v) if (s) o.push_back(s->getId()); return o; } -// coop -Ufo* temp_ufo = 0; +// coop: base-defense parameters captured when an attacking UFO arms a coop base +// defense (handleBaseDefense). The coop battle start is DEFERRED across a +// host<->client handshake, during which the attacking Ufo is freed (confirmed: +// the armed UFO is deleted before startCoopMission runs). Holding a raw Ufo* +// across that gap was a use-after-free ("save crashes on month end"), so we +// snapshot exactly the fields the deferred startCoopMission needs and never +// dereference the (possibly freed) UFO later. +namespace +{ +struct CoopBaseDefense +{ + bool pending = false; // a coop base defense is armed, not yet consumed + bool coop = false; // ufo->getCoop() at arm time + double lon = 0.0; + double lat = 0.0; + int damagePercentage = 0; + std::string missionCustomDeploy; + std::string alienRace; +}; +CoopBaseDefense g_coopBaseDefense; +} /** * Initializes all the elements in the Geoscape screen. @@ -564,21 +583,24 @@ GeoscapeState::~GeoscapeState() void GeoscapeState::startCoopMission() { - - // coop - if (temp_ufo && temp_ufo->getCoop() == false && _game->getSavedGame() && _game->getSavedGame()->getSelectedBase()) + // coop: consume the base-defense snapshot captured at arm time. NEVER + // dereference the attacking UFO here - it has been freed during the deferred + // host<->client handshake (see CoopBaseDefense above). + if (g_coopBaseDefense.pending && g_coopBaseDefense.coop == false + && _game->getSavedGame() && _game->getSavedGame()->getSelectedBase()) { + g_coopBaseDefense.pending = false; // one-shot; never re-fire on a stale snapshot // Get the shade and texture for the globe at the location of the base, using the ufo position int texture, shade; - double baseLon = temp_ufo->getLongitude(); - double baseLat = temp_ufo->getLatitude(); + double baseLon = g_coopBaseDefense.lon; + double baseLat = g_coopBaseDefense.lat; _globe->getPolygonTextureAndShade(baseLon, baseLat, &texture, &shade); int ufoDamagePercentage = 0; if (_game->getMod()->getLessAliensDuringBaseDefense()) { - ufoDamagePercentage = temp_ufo->getDamagePercentage(); + ufoDamagePercentage = g_coopBaseDefense.damagePercentage; } SavedBattleGame* bgame = new SavedBattleGame(_game->getMod(), _game->getLanguage()); @@ -586,8 +608,8 @@ void GeoscapeState::startCoopMission() bgame->setMissionType("STR_BASE_DEFENSE"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setBase(_game->getSavedGame()->getSelectedBase()); - bgen.setAlienCustomDeploy(_game->getMod()->getDeployment(temp_ufo->getCraftStats().missionCustomDeploy)); - bgen.setAlienRace(temp_ufo->getAlienRace()); + bgen.setAlienCustomDeploy(_game->getMod()->getDeployment(g_coopBaseDefense.missionCustomDeploy)); + bgen.setAlienRace(g_coopBaseDefense.alienRace); bgen.setWorldShade(shade); Texture* globeTexture = _game->getMod()->getGlobe()->getTexture(texture); bgen.setWorldTexture(globeTexture, globeTexture); @@ -6006,7 +6028,16 @@ void GeoscapeState::handleBaseDefense(Base *base, Ufo *ufo) _game->getCoopMod()->setGeoscapeState(this); _game->getCoopMod()->_isMainCampaignBaseDefense = true; - temp_ufo = ufo; + // coop: snapshot the attacking UFO's parameters NOW. The coop base + // defense is started later in startCoopMission(), by when this Ufo + // has been freed - so capture the fields, never keep the pointer. + g_coopBaseDefense.pending = true; + g_coopBaseDefense.coop = ufo->getCoop(); + g_coopBaseDefense.lon = ufo->getLongitude(); + g_coopBaseDefense.lat = ufo->getLatitude(); + g_coopBaseDefense.damagePercentage = ufo->getDamagePercentage(); + g_coopBaseDefense.missionCustomDeploy = ufo->getCraftStats().missionCustomDeploy; + g_coopBaseDefense.alienRace = ufo->getAlienRace(); // PRD-J09 GAP-1: SHARED base defense. The garrison is the single shared // world's roster, and the HOST (the only machine whose sim reaches this diff --git a/tools/coop_test/fixtures/coop_basedef_retaliation.sav b/tools/coop_test/fixtures/coop_basedef_retaliation.sav new file mode 100644 index 000000000..431658244 --- /dev/null +++ b/tools/coop_test/fixtures/coop_basedef_retaliation.sav @@ -0,0 +1,3726 @@ +name: coop-basedef-retaliation +version: Extended 2.0.0 +engine: Extended +build: " (v2.0.0)" +saveSchema: 2 +time: {second: 55,minute: 58,hour: 23,weekday: 1,day: 28,month: 3,year: 1999} +mods: + - 'xcom1 ver: 8.4.1' +coop: true +coopPlayers: + - HostPlayer + - ClientPlayer +coopCampaignType: 0 +--- +difficulty: 0 +end: 0 +saveID: 20260730023610 +coop_gamemode: 1 +coop_save_owner_player_id: 1 +no_bases: false +coopClientSaves: + - key: host_20260730023610_ClientPlayer.data + blob: bmFtZTogX2F1dG9nZW9fLmFzYXYKdmVyc2lvbjogRXh0ZW5kZWQgMi4wLjAKZW5naW5lOiBFeHRlbmRlZApidWlsZDogIiAodjIuMC4wKSIKc2F2ZVNjaGVtYTogMgp0aW1lOiB7c2Vjb25kOiA1NSxtaW51dGU6IDU4LGhvdXI6IDIzLHdlZWtkYXk6IDEsZGF5OiAyOCxtb250aDogMyx5ZWFyOiAxOTk5fQptb2RzOgogIC0gJ3hjb20xIHZlcjogOC40LjEnCmNvb3A6IHRydWUKY29vcFBsYXllcnM6CiAgLSBIb3N0UGxheWVyCiAgLSBDbGllbnRQbGF5ZXIKY29vcENhbXBhaWduVHlwZTogMAotLS0KZGlmZmljdWx0eTogMAplbmQ6IDAKc2F2ZUlEOiAyMDI2MDczMDAyMzYxMApjb29wX2dhbWVtb2RlOiAxCmNvb3Bfc2F2ZV9vd25lcl9wbGF5ZXJfaWQ6IDEKbm9fYmFzZXM6IGZhbHNlCm1vbnRoc1Bhc3NlZDogMgpkYXlzUGFzc2VkOiA4Nwp2ZWhpY2xlc0xvc3Q6IDAKZ3JhcGhSZWdpb25Ub2dnbGVzOiAnJwpncmFwaENvdW50cnlUb2dnbGVzOiAnJwpncmFwaEZpbmFuY2VUb2dnbGVzOiAnJwpybmc6IDY4MDcwNDU5MzcyNjM0NTkzNjUKZnVuZHM6CiAgLSAxOTUyMDEKICAtIC04MDE2OTQKICAtIDU3ODE2Cm1haW50ZW5hbmNlOgogIC0gNTc5OTAwMAogIC0gNzE1OTAwMAogIC0gMAp1c2VyTm90ZXM6IFtdCmdlb3NjYXBlRGVidWdMb2c6CiAgLSAnbW9udGg6IDIgc2NyaXB0OiByZWN1cnJpbmdUZXJyb3IgaWQ6IDEgdHlwZTogU1RSX0FMSUVOX1RFUlJPUiByYWNlOiBTVFJfU0VDVE9JRCByZWdpb246IFNUUl9OT1JUSF9BTUVSSUNBIHRhcmdldFpvbmU6IDMgdGFyZ2V0QXJlYTogNCcKICAtICdtb250aDogMiBzY3JpcHQ6IHJlY29uIGlkOiAyIHR5cGU6IFNUUl9BTElFTl9IQVJWRVNUIHJhY2U6IFNUUl9TRUNUT0lEIHJlZ2lvbjogU1RSX0VVUk9QRSB0YXJnZXRab25lOiAtMSB0YXJnZXRBcmVhOiAtMScKICAtICdtb250aDogMiBzY3JpcHQ6IHJlY3VycmluZ1RlcnJvciBpZDogMyB0eXBlOiBTVFJfQUxJRU5fVEVSUk9SIHJhY2U6IFNUUl9GTE9BVEVSIHJlZ2lvbjogU1RSX1NPVVRIX0VBU1RfQVNJQSB0YXJnZXRab25lOiAzIHRhcmdldEFyZWE6IDMnCiAgLSAnbW9udGg6IDIgc2NyaXB0OiByZWNvbiBpZDogNCB0eXBlOiBTVFJfQUxJRU5fUkVTRUFSQ0ggcmFjZTogU1RSX1NFQ1RPSUQgcmVnaW9uOiBTVFJfQVJDVElDIHRhcmdldFpvbmU6IC0xIHRhcmdldEFyZWE6IC0xJwpyZXNlYXJjaFNjb3JlczoKICAtIDMwCiAgLSAxMTEKICAtIDI0MAppbmNvbWVzOgogIC0gNjAxNDY3NgogIC0gNjI5MjcyMAogIC0gNzY5OTAwMApleHBlbmRpdHVyZXM6CiAgLSA2MDAzNDc1CiAgLSA2MDA3NjE1CiAgLSA3OTM3NDkwCndhcm5lZDogZmFsc2UKdG9nZ2xlUGVyc29uYWxMaWdodDogdHJ1ZQp0b2dnbGVOaWdodFZpc2lvbjogZmFsc2UKdG9nZ2xlQnJpZ2h0bmVzczogMApnbG9iZUxvbjogMC41NDU3NDg2MTIxMjY5OTkzCmdsb2JlTGF0OiAtMC44NjE0NDA1NzA1Mjc4MDMyCmdsb2JlWm9vbTogMAppZHM6CiAgQUxJRU5fTUlTU0lPTlM6IDYKICBTVFJfQUxJRU5fQkFTRTogNwogIFNUUl9JTlRFUkNFUFRPUjogMwogIFNUUl9TS1lSQU5HRVI6IDIKICBTVFJfU09MRElFUjogMjQKICBTVFJfVEVSUk9SX1NJVEU6IDIKICBTVFJfVUZPOiAxMgogIFNUUl9XQVlfUE9JTlQ6IDIKY291bnRyaWVzOgogIC0gdHlwZTogU1RSX1VTQQogICAgZnVuZGluZzoKICAgICAgLSA1OTgwMDAKICAgICAgLSA1OTgwMDAKICAgICAgLSA1OTgwMDAKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMQogICAgICAtIDEwMAogICAgICAtIDAKICAtIHR5cGU6IFNUUl9SVVNTSUEKICAgIGZ1bmRpbmc6CiAgICAgIC0gNDEwMDAwCiAgICAgIC0gNDEwMDAwCiAgICAgIC0gNDc1MDAwCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDEwMAogICAgICAtIC0yNTAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMTIKICAgICAgLSAzCiAgICAgIC0gMTE2CiAgLSB0eXBlOiBTVFJfVUsKICAgIGZ1bmRpbmc6CiAgICAgIC0gMjY1MDAwCiAgICAgIC0gMjY1MDAwCiAgICAgIC0gMjc4MDAwCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDEyMwogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMgogICAgICAtIDQKICAgICAgLSA4CiAgLSB0eXBlOiBTVFJfRlJBTkNFCiAgICBmdW5kaW5nOgogICAgICAtIDU3ODAwMAogICAgICAtIDU3ODAwMAogICAgICAtIDU3ODAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMjA5CiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDIKICAgICAgLSAyCiAgICAgIC0gNgogIC0gdHlwZTogU1RSX0dFUk1BTlkKICAgIGZ1bmRpbmc6CiAgICAgIC0gMjU1MDAwCiAgICAgIC0gMjU1MDAwCiAgICAgIC0gMjU1MDAwCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSA1ODEKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMzEKICAgICAgLSAzCiAgICAgIC0gMzcKICAtIHR5cGU6IFNUUl9JVEFMWQogICAgZnVuZGluZzoKICAgICAgLSAyMDMwMDAKICAgICAgLSAyMDMwMDAKICAgICAgLSAyMDMwMDAKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMQogICAgICAtIDEKICAgICAgLSA1MgogIC0gdHlwZTogU1RSX1NQQUlOCiAgICBmdW5kaW5nOgogICAgICAtIDI1NDAwMAogICAgICAtIDI1NDAwMAogICAgICAtIDI1NDAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAxCiAgICAgIC0gMwogICAgICAtIDU0CiAgLSB0eXBlOiBTVFJfQ0hJTkEKICAgIGZ1bmRpbmc6CiAgICAgIC0gNDYzMDAwCiAgICAgIC0gNDYzMDAwCiAgICAgIC0gNDYzMDAwCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDEKICAgICAgLSAxCiAgICAgIC0gMwogIC0gdHlwZTogU1RSX0pBUEFOCiAgICBmdW5kaW5nOgogICAgICAtIDYwNzAwMAogICAgICAtIDYwNzAwMAogICAgICAtIDYwNzAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAtIHR5cGU6IFNUUl9JTkRJQQogICAgZnVuZGluZzoKICAgICAgLSAyMjUwMDAKICAgICAgLSAyMjUwMDAKICAgICAgLSAyMjUwMDAKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgLSB0eXBlOiBTVFJfQlJBWklMCiAgICBmdW5kaW5nOgogICAgICAtIDM0MDAwMAogICAgICAtIDM0MDAwMAogICAgICAtIDM0MDAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAxCiAgICAgIC0gMAogICAgICAtIDE4CiAgLSB0eXBlOiBTVFJfQVVTVFJBTElBCiAgICBmdW5kaW5nOgogICAgICAtIDQxODAwMAogICAgICAtIDQxODAwMAogICAgICAtIDQxODAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAxCiAgICAgIC0gNAogICAgICAtIDcKICAtIHR5cGU6IFNUUl9OSUdFUklBCiAgICBmdW5kaW5nOgogICAgICAtIDMxMDAwMAogICAgICAtIDI5MjAwMAogICAgICAtIDI5MjAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIC03OQogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDEyCiAgICAgIC0gMAogICAgICAtIDExCiAgLSB0eXBlOiBTVFJfU09VVEhfQUZSSUNBCiAgICBmdW5kaW5nOgogICAgICAtIDM3ODAwMAogICAgICAtIDM3ODAwMAogICAgICAtIDM3ODAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAtIHR5cGU6IFNUUl9FR1lQVAogICAgZnVuZGluZzoKICAgICAgLSAyNTUwMDAKICAgICAgLSAyNTUwMDAKICAgICAgLSAyNTUwMDAKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDE0MwogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAzCiAgICAgIC0gMAogICAgICAtIDE2CiAgLSB0eXBlOiBTVFJfQ0FOQURBCiAgICBmdW5kaW5nOgogICAgICAtIDQ0MjAwMAogICAgICAtIDQ0MjAwMAogICAgICAtIDQ0MjAwMAogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAzCiAgICAgIC0gNwogICAgICAtIDAKcmVnaW9uczoKICAtIHR5cGU6IFNUUl9OT1JUSF9BTUVSSUNBCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDQKICAgICAgLSAxMTkxCiAgICAgIC0gMQogIC0gdHlwZTogU1RSX0FSQ1RJQwogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAzCiAgICAgIC0gNgogICAgICAtIDMKICAtIHR5cGU6IFNUUl9BTlRBUkNUSUNBCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDYKICAgICAgLSAxCiAgICAgIC0gMTAKICAtIHR5cGU6IFNUUl9TT1VUSF9BTUVSSUNBCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDIKICAgICAgLSAwCiAgICAgIC0gOTIKICAtIHR5cGU6IFNUUl9FVVJPUEUKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAyNjUKICAgICAgLSAyMjMKICAgICAgLSAxMDcyCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDk0CiAgICAgIC0gMjkKICAgICAgLSAzNjYKICAtIHR5cGU6IFNUUl9OT1JUSF9BRlJJQ0EKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAtMQogICAgICAtIDAKICAgICAgLSAxNDMKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMTM0CiAgICAgIC0gMAogICAgICAtIDIyOQogIC0gdHlwZTogU1RSX1NPVVRIRVJOX0FGUklDQQogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSA0CiAgICAgIC0gMAogICAgICAtIDgKICAtIHR5cGU6IFNUUl9DRU5UUkFMX0FTSUEKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gNgogICAgICAtIDEKICAgICAgLSA3CiAgLSB0eXBlOiBTVFJfU09VVEhfRUFTVF9BU0lBCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDEKICAgICAgLSAwCiAgICAgIC0gMgogIC0gdHlwZTogU1RSX1NJQkVSSUEKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMAogICAgICAtIDEKICAgICAgLSAzCiAgLSB0eXBlOiBTVFJfQVVTVFJBTEFTSUEKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMgogICAgICAtIDYKICAgICAgLSAxMAogIC0gdHlwZTogU1RSX1BBQ0lGSUMKICAgIGFjdGl2aXR5WGNvbToKICAgICAgLSAwCiAgICAgIC0gMAogICAgICAtIDAKICAgIGFjdGl2aXR5QWxpZW46CiAgICAgIC0gMgogICAgICAtIDI0CiAgICAgIC0gNwogIC0gdHlwZTogU1RSX05PUlRIX0FUTEFOVElDCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDMKICAgICAgLSAzCiAgICAgIC0gNgogIC0gdHlwZTogU1RSX1NPVVRIX0FUTEFOVElDCiAgICBhY3Rpdml0eVhjb206CiAgICAgIC0gMAogICAgICAtIDAKICAgICAgLSAwCiAgICBhY3Rpdml0eUFsaWVuOgogICAgICAtIDYKICAgICAgLSAwCiAgICAgIC0gMwogIC0gdHlwZTogU1RSX0lORElBTl9PQ0VBTgogICAgYWN0aXZpdHlYY29tOgogICAgICAtIDAKICAgICAgLSAwCiAgICAgIC0gMAogICAgYWN0aXZpdHlBbGllbjoKICAgICAgLSAxCiAgICAgIC0gMAogICAgICAtIDMKYmFzZXM6CiAgLSBsb246IDIuNDMxMDA2MzAyMjA5Mjg0NwogICAgbGF0OiAtMC42MjU4NzM0MzE5MTc2NzUKICAgIG5hbWU6IEFyZWEgMQogICAgZmFjaWxpdGllczoKICAgICAgLSB0eXBlOiBTVFJfQUNDRVNTX0xJRlQKICAgICAgICB4OiAyCiAgICAgICAgeTogMgogICAgICAtIHR5cGU6IFNUUl9IQU5HQVIKICAgICAgICB4OiAyCiAgICAgICAgeTogMAogICAgICAtIHR5cGU6IFNUUl9IQU5HQVIKICAgICAgICB4OiAwCiAgICAgICAgeTogNAogICAgICAtIHR5cGU6IFNUUl9IQU5HQVIKICAgICAgICB4OiA0CiAgICAgICAgeTogNAogICAgICAtIHR5cGU6IFNUUl9MSVZJTkdfUVVBUlRFUlMKICAgICAgICB4OiAzCiAgICAgICAgeTogMgogICAgICAtIHR5cGU6IFNUUl9HRU5FUkFMX1NUT1JFUwogICAgICAgIHg6IDIKICAgICAgICB5OiAzCiAgICAgIC0gdHlwZTogU1RSX1dPUktTSE9QCiAgICAgICAgeDogNAogICAgICAgIHk6IDMKICAgICAgLSB0eXBlOiBTVFJfU01BTExfUkFEQVJfU1lTVEVNCiAgICAgICAgeDogMQogICAgICAgIHk6IDMKICAgICAgLSB0eXBlOiBTVFJfTElWSU5HX1FVQVJURVJTCiAgICAgICAgeDogNAogICAgICAgIHk6IDIKICAgICAgLSB0eXBlOiBTVFJfTEFCT1JBVE9SWQogICAgICAgIHg6IDMKICAgICAgICB5OiA0CiAgICAgIC0gdHlwZTogU1RSX0dFTkVSQUxfU1RPUkVTCiAgICAgICAgeDogMgogICAgICAgIHk6IDQKICAgICAgLSB0eXBlOiBTVFJfR0VORVJBTF9TVE9SRVMKICAgICAgICB4OiAyCiAgICAgICAgeTogNQogICAgICAtIHR5cGU6IFNUUl9NSVNTSUxFX0RFRkVOU0VTCiAgICAgICAgeDogMQogICAgICAgIHk6IDIKICAgICAgLSB0eXBlOiBTVFJfQUxJRU5fQ09OVEFJTk1FTlQKICAgICAgICB4OiAzCiAgICAgICAgeTogNQogICAgc29sZGllcnM6CiAgICAgIC0gdHlwZTogU1RSX1NPTERJRVIKICAgICAgICBpZDogMgogICAgICAgIG5hbWU6IFBhdHJpY2lhIE1mdW55aQogICAgICAgIGNvb3BiYXNlOiAtMQogICAgICAgIGNvb3A6IDAKICAgICAgICBjb29wY3JhZnQ6IC0xCiAgICAgICAgY29vcGNyYWZ0dHlwZTogJycKICAgICAgICBjb29wbmFtZTogUGF0cmljaWEgTWZ1bnlpCiAgICAgICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICAgICAgbmF0aW9uYWxpdHk6IDcKICAgICAgICBpbml0aWFsU3RhdHM6CiAgICAgICAgICB0dTogNjAKICAgICAgICAgIHN0YW1pbmE6IDU0CiAgICAgICAgICBoZWFsdGg6IDM4CiAgICAgICAgICBicmF2ZXJ5OiAyMAogICAgICAgICAgcmVhY3Rpb25zOiAzMgogICAgICAgICAgZmlyaW5nOiA0OQogICAgICAgICAgdGhyb3dpbmc6IDUwCiAgICAgICAgICBzdHJlbmd0aDogMzUKICAgICAgICAgIHBzaVN0cmVuZ3RoOiAxOAogICAgICAgICAgcHNpU2tpbGw6IDAKICAgICAgICAgIG1lbGVlOiAyMgogICAgICAgICAgbWFuYTogMAogICAgICAgIGN1cnJlbnRTdGF0czoKICAgICAgICAgIHR1OiA2MQogICAgICAgICAgc3RhbWluYTogNTgKICAgICAgICAgIGhlYWx0aDogMzkKICAgICAgICAgIGJyYXZlcnk6IDIwCiAgICAgICAgICByZWFjdGlvbnM6IDMyCiAgICAgICAgICBmaXJpbmc6IDUyCiAgICAgICAgICB0aHJvd2luZzogNTAKICAgICAgICAgIHN0cmVuZ3RoOiAzOQogICAgICAgICAgcHNpU3RyZW5ndGg6IDE4CiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDIyCiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgcmFuazogMQogICAgICAgIGNyYWZ0OgogICAgICAgICAgbG9uOiAyLjQzMTAwNjMwMjIwOTI4NDcKICAgICAgICAgIGxhdDogLTAuNjI1ODczNDMxOTE3Njc1CiAgICAgICAgICB0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgICBpZDogMQogICAgICAgIGdlbmRlcjogMQogICAgICAgIGxvb2s6IDMKICAgICAgICBsb29rVmFyaWFudDogNjEKICAgICAgICBtaXNzaW9uczogMQogICAgICAgIGtpbGxzOiAxCiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX1BFUlNPTkFMX0FSTU9SX1VDCiAgICAgICAgaW1wcm92ZW1lbnQ6IDAKICAgICAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgICAgIGVxdWlwbWVudExheW91dDoKICAgICAgICAgIC0ge2l0ZW1UeXBlOiBTVFJfUklGTEUsc2xvdDogU1RSX1JJR0hUX0hBTkQsYW1tb0l0ZW06IFNUUl9SSUZMRV9DTElQLGFtbW9JdGVtU2xvdHM6IFtTVFJfUklGTEVfQ0xJUF19CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX1JJRkxFX0NMSVAsc2xvdDogU1RSX0JFTFR9CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX0dSRU5BREUsc2xvdDogU1RSX0xFRlRfSEFORH0KICAgICAgICBkaWFyeToKICAgICAgICAgIGtpbGxMaXN0OgogICAgICAgICAgICAtIHt0eXBlOiBTVFJfU0VDVE9JRF9OQVZJR0FUT1IscmFuazogU1RSX0xJVkVfTkFWSUdBVE9SLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX1JJRkxFLHdlYXBvbkFtbW86IFNUUl9SSUZMRV9DTElQLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogNDUsc2lkZTogMCxib2R5cGFydDogMSxpZDogMTAwMDAwNX0KICAgICAgICAgIG1pc3Npb25JZExpc3Q6IFswXQogICAgICAgICAgbW9udGhzU2VydmljZTogMgogICAgICAgICAgc2hvdHNGaXJlZENvdW50ZXJUb3RhbDogMjAKICAgICAgICAgIHNob3RzTGFuZGVkQ291bnRlclRvdGFsOiA0CiAgICAgICAgICBzdGF0R2FpblRvdGFsOiAxMwogICAgICAtIHR5cGU6IFNUUl9TT0xESUVSCiAgICAgICAgaWQ6IDMKICAgICAgICBuYW1lOiBBbGVzc2lvIERlIFNpbW9uZQogICAgICAgIGNvb3BiYXNlOiAtMQogICAgICAgIGNvb3A6IDAKICAgICAgICBjb29wY3JhZnQ6IC0xCiAgICAgICAgY29vcGNyYWZ0dHlwZTogJycKICAgICAgICBjb29wbmFtZTogQWxlc3NpbyBEZSBTaW1vbmUKICAgICAgICBvd25lcnBsYXllcmlkOiA5OTkKICAgICAgICBuYXRpb25hbGl0eTogMTkKICAgICAgICBpbml0aWFsU3RhdHM6CiAgICAgICAgICB0dTogNTkKICAgICAgICAgIHN0YW1pbmE6IDY0CiAgICAgICAgICBoZWFsdGg6IDM4CiAgICAgICAgICBicmF2ZXJ5OiA2MAogICAgICAgICAgcmVhY3Rpb25zOiA1MwogICAgICAgICAgZmlyaW5nOiA0NAogICAgICAgICAgdGhyb3dpbmc6IDU4CiAgICAgICAgICBzdHJlbmd0aDogMzUKICAgICAgICAgIHBzaVN0cmVuZ3RoOiA3MgogICAgICAgICAgcHNpU2tpbGw6IDAKICAgICAgICAgIG1lbGVlOiAzMQogICAgICAgICAgbWFuYTogMAogICAgICAgIGN1cnJlbnRTdGF0czoKICAgICAgICAgIHR1OiA2MQogICAgICAgICAgc3RhbWluYTogNjYKICAgICAgICAgIGhlYWx0aDogNDEKICAgICAgICAgIGJyYXZlcnk6IDYwCiAgICAgICAgICByZWFjdGlvbnM6IDUzCiAgICAgICAgICBmaXJpbmc6IDQ4CiAgICAgICAgICB0aHJvd2luZzogNTgKICAgICAgICAgIHN0cmVuZ3RoOiAzOQogICAgICAgICAgcHNpU3RyZW5ndGg6IDcyCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDMxCiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgcmFuazogMgogICAgICAgIGNyYWZ0OgogICAgICAgICAgbG9uOiAyLjQzMTAwNjMwMjIwOTI4NDcKICAgICAgICAgIGxhdDogLTAuNjI1ODczNDMxOTE3Njc1CiAgICAgICAgICB0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgICBpZDogMQogICAgICAgIGdlbmRlcjogMAogICAgICAgIGxvb2s6IDAKICAgICAgICBsb29rVmFyaWFudDogMzkKICAgICAgICBtaXNzaW9uczogMQogICAgICAgIGtpbGxzOiAyCiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX1BFUlNPTkFMX0FSTU9SX1VDCiAgICAgICAgaW1wcm92ZW1lbnQ6IDAKICAgICAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgICAgIGVxdWlwbWVudExheW91dDoKICAgICAgICAgIC0ge2l0ZW1UeXBlOiBTVFJfUklGTEUsc2xvdDogU1RSX1JJR0hUX0hBTkQsYW1tb0l0ZW06IFNUUl9SSUZMRV9DTElQLGFtbW9JdGVtU2xvdHM6IFtTVFJfUklGTEVfQ0xJUF19CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX1JJRkxFX0NMSVAsc2xvdDogU1RSX0JFTFR9CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX0dSRU5BREUsc2xvdDogU1RSX0xFRlRfSEFORH0KICAgICAgICBkaWFyeToKICAgICAgICAgIGtpbGxMaXN0OgogICAgICAgICAgICAtIHt0eXBlOiBTVFJfQ1lCRVJESVNDX1RFUlJPUklTVCxyYW5rOiBTVFJfTElWRV9URVJST1JJU1QscmFjZTogU1RSX0NZQkVSRElTQyx3ZWFwb246IFNUUl9HUkVOQURFLHdlYXBvbkFtbW86IFNUUl9HUkVOQURFLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogMzYsc2lkZTogMCxib2R5cGFydDogMSxpZDogMTAwMDAxMH0KICAgICAgICAgICAgLSB7dHlwZTogU1RSX1NFQ1RPSURfTUVESUMscmFuazogU1RSX0xJVkVfTUVESUMscmFjZTogU1RSX1NFQ1RPSUQsd2VhcG9uOiBTVFJfUklGTEUsd2VhcG9uQW1tbzogU1RSX1JJRkxFX0NMSVAsc3RhdHVzOiA2LGZhY3Rpb246IDEsbWlzc2lvbjogMCx0dXJuOiA0MixzaWRlOiAyLGJvZHlwYXJ0OiAyLGlkOiAxMDAwMDA2fQogICAgICAgICAgbWlzc2lvbklkTGlzdDogWzBdCiAgICAgICAgICBtb250aHNTZXJ2aWNlOiAyCiAgICAgICAgICBzaG90QXRDb3VudGVyVG90YWw6IDEKICAgICAgICAgIHNob3RzRmlyZWRDb3VudGVyVG90YWw6IDM1CiAgICAgICAgICBzaG90c0xhbmRlZENvdW50ZXJUb3RhbDogMgogICAgICAgICAgc3RhdEdhaW5Ub3RhbDogMTUKICAgICAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgICAgIGlkOiA2CiAgICAgICAgbmFtZTogRGFtaWFuIENyb3NzZXR0CiAgICAgICAgY29vcGJhc2U6IC0xCiAgICAgICAgY29vcDogMAogICAgICAgIGNvb3BjcmFmdDogLTEKICAgICAgICBjb29wY3JhZnR0eXBlOiAnJwogICAgICAgIGNvb3BuYW1lOiBEYW1pYW4gQ3Jvc3NldHQKICAgICAgICBvd25lcnBsYXllcmlkOiA5OTkKICAgICAgICBuYXRpb25hbGl0eTogMAogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1OQogICAgICAgICAgc3RhbWluYTogNjIKICAgICAgICAgIGhlYWx0aDogMzYKICAgICAgICAgIGJyYXZlcnk6IDQwCiAgICAgICAgICByZWFjdGlvbnM6IDM2CiAgICAgICAgICBmaXJpbmc6IDUwCiAgICAgICAgICB0aHJvd2luZzogNzAKICAgICAgICAgIHN0cmVuZ3RoOiAyNAogICAgICAgICAgcHNpU3RyZW5ndGg6IDIKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjkKICAgICAgICAgIG1hbmE6IDAKICAgICAgICBjdXJyZW50U3RhdHM6CiAgICAgICAgICB0dTogNjAKICAgICAgICAgIHN0YW1pbmE6IDYyCiAgICAgICAgICBoZWFsdGg6IDM4CiAgICAgICAgICBicmF2ZXJ5OiA0MAogICAgICAgICAgcmVhY3Rpb25zOiAzNgogICAgICAgICAgZmlyaW5nOiA1MQogICAgICAgICAgdGhyb3dpbmc6IDcwCiAgICAgICAgICBzdHJlbmd0aDogMjcKICAgICAgICAgIHBzaVN0cmVuZ3RoOiAyCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDI5CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgcmFuazogMQogICAgICAgIGNyYWZ0OgogICAgICAgICAgbG9uOiAyLjQzMTAwNjMwMjIwOTI4NDcKICAgICAgICAgIGxhdDogLTAuNjI1ODczNDMxOTE3Njc1CiAgICAgICAgICB0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgICBpZDogMQogICAgICAgIGdlbmRlcjogMAogICAgICAgIGxvb2s6IDIKICAgICAgICBsb29rVmFyaWFudDogNDUKICAgICAgICBtaXNzaW9uczogMQogICAgICAgIGtpbGxzOiAxCiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX1BFUlNPTkFMX0FSTU9SX1VDCiAgICAgICAgaW1wcm92ZW1lbnQ6IDAKICAgICAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgICAgIGVxdWlwbWVudExheW91dDoKICAgICAgICAgIC0ge2l0ZW1UeXBlOiBTVFJfUklGTEUsc2xvdDogU1RSX1JJR0hUX0hBTkQsYW1tb0l0ZW06IFNUUl9SSUZMRV9DTElQLGFtbW9JdGVtU2xvdHM6IFtTVFJfUklGTEVfQ0xJUF19CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX1JJRkxFX0NMSVAsc2xvdDogU1RSX0JFTFR9CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX0dSRU5BREUsc2xvdDogU1RSX0xFRlRfSEFORH0KICAgICAgICBkaWFyeToKICAgICAgICAgIGtpbGxMaXN0OgogICAgICAgICAgICAtIHt0eXBlOiBTVFJfU0VDVE9JRF9TT0xESUVSLHJhbms6IFNUUl9MSVZFX1NPTERJRVIscmFjZTogU1RSX1NFQ1RPSUQsd2VhcG9uOiBTVFJfUklGTEUsd2VhcG9uQW1tbzogU1RSX1JJRkxFX0NMSVAsc3RhdHVzOiA2LGZhY3Rpb246IDEsbWlzc2lvbjogMCx0dXJuOiAxMixzaWRlOiAwLGJvZHlwYXJ0OiAxLGlkOiAxMDAwMDAxfQogICAgICAgICAgbWlzc2lvbklkTGlzdDogWzBdCiAgICAgICAgICBtb250aHNTZXJ2aWNlOiAyCiAgICAgICAgICBsb3dBY2N1cmFjeUhpdENvdW50ZXJUb3RhbDogMQogICAgICAgICAgc2hvdHNGaXJlZENvdW50ZXJUb3RhbDogNgogICAgICAgICAgc2hvdHNMYW5kZWRDb3VudGVyVG90YWw6IDEKICAgICAgICAgIHN0YXRHYWluVG90YWw6IDcKICAgICAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgICAgIGlkOiA3CiAgICAgICAgbmFtZTogSmVubyBNaW5kc3plbnR5CiAgICAgICAgY29vcGJhc2U6IC0xCiAgICAgICAgY29vcDogMAogICAgICAgIGNvb3BjcmFmdDogLTEKICAgICAgICBjb29wY3JhZnR0eXBlOiAnJwogICAgICAgIGNvb3BuYW1lOiBKZW5vIE1pbmRzemVudHkKICAgICAgICBvd25lcnBsYXllcmlkOiA5OTkKICAgICAgICBuYXRpb25hbGl0eTogMTcKICAgICAgICBpbml0aWFsU3RhdHM6CiAgICAgICAgICB0dTogNTIKICAgICAgICAgIHN0YW1pbmE6IDYzCiAgICAgICAgICBoZWFsdGg6IDI2CiAgICAgICAgICBicmF2ZXJ5OiA0MAogICAgICAgICAgcmVhY3Rpb25zOiAzMgogICAgICAgICAgZmlyaW5nOiA1NQogICAgICAgICAgdGhyb3dpbmc6IDU3CiAgICAgICAgICBzdHJlbmd0aDogMzMKICAgICAgICAgIHBzaVN0cmVuZ3RoOiAxNgogICAgICAgICAgcHNpU2tpbGw6IDAKICAgICAgICAgIG1lbGVlOiAyNAogICAgICAgICAgbWFuYTogMAogICAgICAgIGN1cnJlbnRTdGF0czoKICAgICAgICAgIHR1OiA1MgogICAgICAgICAgc3RhbWluYTogNjMKICAgICAgICAgIGhlYWx0aDogMjgKICAgICAgICAgIGJyYXZlcnk6IDQwCiAgICAgICAgICByZWFjdGlvbnM6IDMyCiAgICAgICAgICBmaXJpbmc6IDU1CiAgICAgICAgICB0aHJvd2luZzogNTcKICAgICAgICAgIHN0cmVuZ3RoOiAzNQogICAgICAgICAgcHNpU3RyZW5ndGg6IDE2CiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDI0CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgcmFuazogMQogICAgICAgIGNyYWZ0OgogICAgICAgICAgbG9uOiAyLjQzMTAwNjMwMjIwOTI4NDcKICAgICAgICAgIGxhdDogLTAuNjI1ODczNDMxOTE3Njc1CiAgICAgICAgICB0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgICBpZDogMQogICAgICAgIGdlbmRlcjogMAogICAgICAgIGxvb2s6IDAKICAgICAgICBsb29rVmFyaWFudDogMjYKICAgICAgICBtaXNzaW9uczogMQogICAgICAgIGtpbGxzOiAwCiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX05PTkVfVUMKICAgICAgICBpbXByb3ZlbWVudDogMAogICAgICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICAgICAgZXF1aXBtZW50TGF5b3V0OgogICAgICAgICAgLSB7aXRlbVR5cGU6IFNUUl9SSUZMRV9DTElQLHNsb3Q6IFNUUl9CRUxUfQogICAgICAgICAgLSB7aXRlbVR5cGU6IFNUUl9HUkVOQURFLHNsb3Q6IFNUUl9MRUZUX0hBTkR9CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX0hFQVZZX0NBTk5PTixzbG90OiBTVFJfUklHSFRfSEFORCxhbW1vSXRlbTogU1RSX0hDX0lfQU1NTyxhbW1vSXRlbVNsb3RzOiBbU1RSX0hDX0lfQU1NT119CiAgICAgICAgICAtIHtpdGVtVHlwZTogU1RSX0hDX0hFX0FNTU8sc2xvdDogU1RSX0JBQ0tfUEFDS30KICAgICAgICBkaWFyeToKICAgICAgICAgIG1pc3Npb25JZExpc3Q6IFswXQogICAgICAgICAgbW9udGhzU2VydmljZTogMgogICAgICAgICAgc2hvdEF0Q291bnRlclRvdGFsOiAxCiAgICAgICAgICBzaG90c0ZpcmVkQ291bnRlclRvdGFsOiAzCiAgICAgICAgICBzdGF0R2FpblRvdGFsOiA0CiAgICAgIC0gdHlwZTogU1RSX1NPTERJRVIKICAgICAgICBpZDogMjEKICAgICAgICBuYW1lOiBUb21taSBZbGl0YWxvCiAgICAgICAgY29vcGJhc2U6IC0xCiAgICAgICAgY29vcDogMAogICAgICAgIGNvb3BjcmFmdDogLTEKICAgICAgICBjb29wY3JhZnR0eXBlOiAnJwogICAgICAgIGNvb3BuYW1lOiBUb21taSBZbGl0YWxvCiAgICAgICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICAgICAgbmF0aW9uYWxpdHk6IDEyCiAgICAgICAgaW5pdGlhbFN0YXRzOgogICAgICAgICAgdHU6IDUxCiAgICAgICAgICBzdGFtaW5hOiA0MwogICAgICAgICAgaGVhbHRoOiAzNgogICAgICAgICAgYnJhdmVyeTogMjAKICAgICAgICAgIHJlYWN0aW9uczogNTAKICAgICAgICAgIGZpcmluZzogNzAKICAgICAgICAgIHRocm93aW5nOiA2OQogICAgICAgICAgc3RyZW5ndGg6IDI4CiAgICAgICAgICBwc2lTdHJlbmd0aDogOTcKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjYKICAgICAgICAgIG1hbmE6IDAKICAgICAgICBjdXJyZW50U3RhdHM6CiAgICAgICAgICB0dTogNTEKICAgICAgICAgIHN0YW1pbmE6IDQzCiAgICAgICAgICBoZWFsdGg6IDM2CiAgICAgICAgICBicmF2ZXJ5OiAyMAogICAgICAgICAgcmVhY3Rpb25zOiA1MAogICAgICAgICAgZmlyaW5nOiA3MAogICAgICAgICAgdGhyb3dpbmc6IDY5CiAgICAgICAgICBzdHJlbmd0aDogMjgKICAgICAgICAgIHBzaVN0cmVuZ3RoOiA5NwogICAgICAgICAgcHNpU2tpbGw6IDAKICAgICAgICAgIG1lbGVlOiAyNgogICAgICAgICAgbWFuYTogMAogICAgICAgIHJhbms6IDAKICAgICAgICBnZW5kZXI6IDAKICAgICAgICBsb29rOiAxCiAgICAgICAgbG9va1ZhcmlhbnQ6IDcKICAgICAgICBtaXNzaW9uczogMAogICAgICAgIGtpbGxzOiAwCiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX05PTkVfVUMKICAgICAgICBpbXByb3ZlbWVudDogMAogICAgICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICAgIC0gdHlwZTogU1RSX1NPTERJRVIKICAgICAgICBpZDogMjIKICAgICAgICBuYW1lOiBLYXRzdW8gTWl5YW1vdG8KICAgICAgICBjb29wYmFzZTogLTEKICAgICAgICBjb29wOiAwCiAgICAgICAgY29vcGNyYWZ0OiAtMQogICAgICAgIGNvb3BjcmFmdHR5cGU6ICcnCiAgICAgICAgY29vcG5hbWU6IEthdHN1byBNaXlhbW90bwogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAyMAogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1NAogICAgICAgICAgc3RhbWluYTogNTgKICAgICAgICAgIGhlYWx0aDogMzYKICAgICAgICAgIGJyYXZlcnk6IDUwCiAgICAgICAgICByZWFjdGlvbnM6IDU4CiAgICAgICAgICBmaXJpbmc6IDQwCiAgICAgICAgICB0aHJvd2luZzogNjAKICAgICAgICAgIHN0cmVuZ3RoOiAzOAogICAgICAgICAgcHNpU3RyZW5ndGg6IDQKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogNDAKICAgICAgICAgIG1hbmE6IDAKICAgICAgICBjdXJyZW50U3RhdHM6CiAgICAgICAgICB0dTogNTQKICAgICAgICAgIHN0YW1pbmE6IDU4CiAgICAgICAgICBoZWFsdGg6IDM2CiAgICAgICAgICBicmF2ZXJ5OiA1MAogICAgICAgICAgcmVhY3Rpb25zOiA1OAogICAgICAgICAgZmlyaW5nOiA0MAogICAgICAgICAgdGhyb3dpbmc6IDYwCiAgICAgICAgICBzdHJlbmd0aDogMzgKICAgICAgICAgIHBzaVN0cmVuZ3RoOiA0CiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDQwCiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgcmFuazogMAogICAgICAgIGdlbmRlcjogMAogICAgICAgIGxvb2s6IDIKICAgICAgICBsb29rVmFyaWFudDogNDkKICAgICAgICBtaXNzaW9uczogMAogICAgICAgIGtpbGxzOiAwCiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX05PTkVfVUMKICAgICAgICBpbXByb3ZlbWVudDogMAogICAgICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICAgIC0gdHlwZTogU1RSX1NPTERJRVIKICAgICAgICBpZDogMjMKICAgICAgICBuYW1lOiBBbm5pa2EgTGluZGdyZW4KICAgICAgICBjb29wYmFzZTogLTEKICAgICAgICBjb29wOiAwCiAgICAgICAgY29vcGNyYWZ0OiAtMQogICAgICAgIGNvb3BjcmFmdHR5cGU6ICcnCiAgICAgICAgY29vcG5hbWU6IEFubmlrYSBMaW5kZ3JlbgogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAzMgogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1MgogICAgICAgICAgc3RhbWluYTogNDcKICAgICAgICAgIGhlYWx0aDogNDAKICAgICAgICAgIGJyYXZlcnk6IDEwCiAgICAgICAgICByZWFjdGlvbnM6IDQ4CiAgICAgICAgICBmaXJpbmc6IDU3CiAgICAgICAgICB0aHJvd2luZzogNzQKICAgICAgICAgIHN0cmVuZ3RoOiAyMAogICAgICAgICAgcHNpU3RyZW5ndGg6IDkxCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDI3CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDUyCiAgICAgICAgICBzdGFtaW5hOiA0NwogICAgICAgICAgaGVhbHRoOiA0MAogICAgICAgICAgYnJhdmVyeTogMTAKICAgICAgICAgIHJlYWN0aW9uczogNDgKICAgICAgICAgIGZpcmluZzogNTcKICAgICAgICAgIHRocm93aW5nOiA3NAogICAgICAgICAgc3RyZW5ndGg6IDIwCiAgICAgICAgICBwc2lTdHJlbmd0aDogOTEKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjcKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiAwCiAgICAgICAgZ2VuZGVyOiAxCiAgICAgICAgbG9vazogMgogICAgICAgIGxvb2tWYXJpYW50OiAxMAogICAgICAgIG1pc3Npb25zOiAwCiAgICAgICAga2lsbHM6IDAKICAgICAgICBzdHVuczogMAogICAgICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgICAgIGltcHJvdmVtZW50OiAwCiAgICAgICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgICAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgICAgIGlkOiA5CiAgICAgICAgbmFtZTogQW5kZXJzIE5vcmJlcmcKICAgICAgICBjb29wYmFzZTogNzg3MzUKICAgICAgICBjb29wOiAwCiAgICAgICAgY29vcGNyYWZ0OiAxCiAgICAgICAgY29vcGNyYWZ0dHlwZTogU1RSX1NLWVJBTkdFUgogICAgICAgIGNvb3BuYW1lOiBBbmRlcnMgTm9yYmVyZwogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAzMgogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA2MAogICAgICAgICAgc3RhbWluYTogNjIKICAgICAgICAgIGhlYWx0aDogNDUKICAgICAgICAgIGJyYXZlcnk6IDYwCiAgICAgICAgICByZWFjdGlvbnM6IDQ3CiAgICAgICAgICBmaXJpbmc6IDYyCiAgICAgICAgICB0aHJvd2luZzogNjEKICAgICAgICAgIHN0cmVuZ3RoOiAzNwogICAgICAgICAgcHNpU3RyZW5ndGg6IDk3CiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDIzCiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDYwCiAgICAgICAgICBzdGFtaW5hOiA2MgogICAgICAgICAgaGVhbHRoOiA0NQogICAgICAgICAgYnJhdmVyeTogNjAKICAgICAgICAgIHJlYWN0aW9uczogNDcKICAgICAgICAgIGZpcmluZzogNjIKICAgICAgICAgIHRocm93aW5nOiA2MQogICAgICAgICAgc3RyZW5ndGg6IDM3CiAgICAgICAgICBwc2lTdHJlbmd0aDogOTcKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjMKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiA0CiAgICAgICAgZ2VuZGVyOiAwCiAgICAgICAgbG9vazogMwogICAgICAgIGxvb2tWYXJpYW50OiAyCiAgICAgICAgbWlzc2lvbnM6IDkKICAgICAgICBraWxsczogMzg0CiAgICAgICAgc3R1bnM6IDAKICAgICAgICBhcm1vcjogU1RSX1BFUlNPTkFMX0FSTU9SX1VDCiAgICAgICAgaW1wcm92ZW1lbnQ6IDAKICAgICAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgICAgIGRpYXJ5OgogICAgICAgICAgbW9udGhzU2VydmljZTogMgogICAgICAtIHR5cGU6IFNUUl9TT0xESUVSCiAgICAgICAgaWQ6IDEzCiAgICAgICAgbmFtZTogUGV0cmEgTXVlbGxlcgogICAgICAgIGNvb3BiYXNlOiA3ODczNQogICAgICAgIGNvb3A6IDAKICAgICAgICBjb29wY3JhZnQ6IDEKICAgICAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgY29vcG5hbWU6IFBldHJhIE11ZWxsZXIKICAgICAgICBvd25lcnBsYXllcmlkOiA5OTkKICAgICAgICBuYXRpb25hbGl0eTogMTQKICAgICAgICBpbml0aWFsU3RhdHM6CiAgICAgICAgICB0dTogNTgKICAgICAgICAgIHN0YW1pbmE6IDU5CiAgICAgICAgICBoZWFsdGg6IDQ0CiAgICAgICAgICBicmF2ZXJ5OiAxMAogICAgICAgICAgcmVhY3Rpb25zOiA1NAogICAgICAgICAgZmlyaW5nOiA1OAogICAgICAgICAgdGhyb3dpbmc6IDc5CiAgICAgICAgICBzdHJlbmd0aDogNDcKICAgICAgICAgIHBzaVN0cmVuZ3RoOiA2MgogICAgICAgICAgcHNpU2tpbGw6IDAKICAgICAgICAgIG1lbGVlOiAzNwogICAgICAgICAgbWFuYTogMAogICAgICAgIGN1cnJlbnRTdGF0czoKICAgICAgICAgIHR1OiA1OAogICAgICAgICAgc3RhbWluYTogNTkKICAgICAgICAgIGhlYWx0aDogNDQKICAgICAgICAgIGJyYXZlcnk6IDEwCiAgICAgICAgICByZWFjdGlvbnM6IDU0CiAgICAgICAgICBmaXJpbmc6IDU4CiAgICAgICAgICB0aHJvd2luZzogNzkKICAgICAgICAgIHN0cmVuZ3RoOiA0NwogICAgICAgICAgcHNpU3RyZW5ndGg6IDYyCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDM3CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgcmFuazogMgogICAgICAgIGdlbmRlcjogMQogICAgICAgIGxvb2s6IDAKICAgICAgICBsb29rVmFyaWFudDogNTYKICAgICAgICBtaXNzaW9uczogOQogICAgICAgIGtpbGxzOiA2NAogICAgICAgIHN0dW5zOiAwCiAgICAgICAgYXJtb3I6IFNUUl9QRVJTT05BTF9BUk1PUl9VQwogICAgICAgIGltcHJvdmVtZW50OiAwCiAgICAgICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgICAgICBkaWFyeToKICAgICAgICAgIG1vbnRoc1NlcnZpY2U6IDIKICAgICAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgICAgIGlkOiAxNAogICAgICAgIG5hbWU6IEppLWhvb24gR3dvbgogICAgICAgIGNvb3BiYXNlOiA3ODczNQogICAgICAgIGNvb3A6IDAKICAgICAgICBjb29wY3JhZnQ6IDEKICAgICAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgY29vcG5hbWU6IEppLWhvb24gR3dvbgogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAyMgogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA2NgogICAgICAgICAgc3RhbWluYTogNTEKICAgICAgICAgIGhlYWx0aDogNDYKICAgICAgICAgIGJyYXZlcnk6IDIwCiAgICAgICAgICByZWFjdGlvbnM6IDMyCiAgICAgICAgICBmaXJpbmc6IDUzCiAgICAgICAgICB0aHJvd2luZzogNzIKICAgICAgICAgIHN0cmVuZ3RoOiA1MgogICAgICAgICAgcHNpU3RyZW5ndGg6IDYwCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDMwCiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDY2CiAgICAgICAgICBzdGFtaW5hOiA1MQogICAgICAgICAgaGVhbHRoOiA0NgogICAgICAgICAgYnJhdmVyeTogMjAKICAgICAgICAgIHJlYWN0aW9uczogMzIKICAgICAgICAgIGZpcmluZzogNTMKICAgICAgICAgIHRocm93aW5nOiA3MgogICAgICAgICAgc3RyZW5ndGg6IDUyCiAgICAgICAgICBwc2lTdHJlbmd0aDogNjAKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMzAKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiAzCiAgICAgICAgZ2VuZGVyOiAwCiAgICAgICAgbG9vazogMgogICAgICAgIGxvb2tWYXJpYW50OiA1NAogICAgICAgIG1pc3Npb25zOiA5CiAgICAgICAga2lsbHM6IDMyMAogICAgICAgIHN0dW5zOiA2NAogICAgICAgIGFybW9yOiBTVFJfUEVSU09OQUxfQVJNT1JfVUMKICAgICAgICBpbXByb3ZlbWVudDogMAogICAgICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICAgICAgZGlhcnk6CiAgICAgICAgICBtb250aHNTZXJ2aWNlOiAyCiAgICAgIC0gdHlwZTogU1RSX1NPTERJRVIKICAgICAgICBpZDogMTYKICAgICAgICBuYW1lOiBBbmRyZXMgR2FyY2lhCiAgICAgICAgY29vcGJhc2U6IDc4NzM1CiAgICAgICAgY29vcDogMAogICAgICAgIGNvb3BjcmFmdDogMQogICAgICAgIGNvb3BjcmFmdHR5cGU6IFNUUl9TS1lSQU5HRVIKICAgICAgICBjb29wbmFtZTogQW5kcmVzIEdhcmNpYQogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAzMQogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1NwogICAgICAgICAgc3RhbWluYTogNTIKICAgICAgICAgIGhlYWx0aDogMjcKICAgICAgICAgIGJyYXZlcnk6IDIwCiAgICAgICAgICByZWFjdGlvbnM6IDQyCiAgICAgICAgICBmaXJpbmc6IDQxCiAgICAgICAgICB0aHJvd2luZzogNzcKICAgICAgICAgIHN0cmVuZ3RoOiAyNgogICAgICAgICAgcHNpU3RyZW5ndGg6IDMxCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDI5CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDU3CiAgICAgICAgICBzdGFtaW5hOiA1MgogICAgICAgICAgaGVhbHRoOiAyNwogICAgICAgICAgYnJhdmVyeTogMjAKICAgICAgICAgIHJlYWN0aW9uczogNDIKICAgICAgICAgIGZpcmluZzogNDEKICAgICAgICAgIHRocm93aW5nOiA3NwogICAgICAgICAgc3RyZW5ndGg6IDI2CiAgICAgICAgICBwc2lTdHJlbmd0aDogMzEKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjkKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiAxCiAgICAgICAgZ2VuZGVyOiAwCiAgICAgICAgbG9vazogMQogICAgICAgIGxvb2tWYXJpYW50OiA4CiAgICAgICAgbWlzc2lvbnM6IDIKICAgICAgICBraWxsczogMQogICAgICAgIHN0dW5zOiAwCiAgICAgICAgYXJtb3I6IFNUUl9OT05FX1VDCiAgICAgICAgaW1wcm92ZW1lbnQ6IDAKICAgICAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgICAtIHR5cGU6IFNUUl9TT0xESUVSCiAgICAgICAgaWQ6IDE3CiAgICAgICAgbmFtZTogTGlvbmVsIExhY3JvaXgKICAgICAgICBjb29wYmFzZTogNzg3MzUKICAgICAgICBjb29wOiAwCiAgICAgICAgY29vcGNyYWZ0OiAxCiAgICAgICAgY29vcGNyYWZ0dHlwZTogU1RSX1NLWVJBTkdFUgogICAgICAgIGNvb3BuYW1lOiBMaW9uZWwgTGFjcm9peAogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAxMwogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1NQogICAgICAgICAgc3RhbWluYTogNTMKICAgICAgICAgIGhlYWx0aDogMzUKICAgICAgICAgIGJyYXZlcnk6IDEwCiAgICAgICAgICByZWFjdGlvbnM6IDM1CiAgICAgICAgICBmaXJpbmc6IDU1CiAgICAgICAgICB0aHJvd2luZzogNzIKICAgICAgICAgIHN0cmVuZ3RoOiAzMwogICAgICAgICAgcHNpU3RyZW5ndGg6IDMwCiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDI3CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDU1CiAgICAgICAgICBzdGFtaW5hOiA1MwogICAgICAgICAgaGVhbHRoOiAzNQogICAgICAgICAgYnJhdmVyeTogMTAKICAgICAgICAgIHJlYWN0aW9uczogMzUKICAgICAgICAgIGZpcmluZzogNTUKICAgICAgICAgIHRocm93aW5nOiA3MgogICAgICAgICAgc3RyZW5ndGg6IDMzCiAgICAgICAgICBwc2lTdHJlbmd0aDogMzAKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjcKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiAxCiAgICAgICAgZ2VuZGVyOiAwCiAgICAgICAgbG9vazogMQogICAgICAgIGxvb2tWYXJpYW50OiAyNQogICAgICAgIG1pc3Npb25zOiAyCiAgICAgICAga2lsbHM6IDEKICAgICAgICBzdHVuczogMAogICAgICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgICAgIGltcHJvdmVtZW50OiAwCiAgICAgICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgICAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgICAgIGlkOiAxOAogICAgICAgIG5hbWU6IE1pdSBJa2VkYQogICAgICAgIGNvb3BiYXNlOiA3ODczNQogICAgICAgIGNvb3A6IDAKICAgICAgICBjb29wY3JhZnQ6IDEKICAgICAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgY29vcG5hbWU6IE1pdSBJa2VkYQogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAyMAogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1OAogICAgICAgICAgc3RhbWluYTogNDkKICAgICAgICAgIGhlYWx0aDogMjYKICAgICAgICAgIGJyYXZlcnk6IDUwCiAgICAgICAgICByZWFjdGlvbnM6IDM4CiAgICAgICAgICBmaXJpbmc6IDQxCiAgICAgICAgICB0aHJvd2luZzogNjcKICAgICAgICAgIHN0cmVuZ3RoOiA0MAogICAgICAgICAgcHNpU3RyZW5ndGg6IDI2CiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDI3CiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDU4CiAgICAgICAgICBzdGFtaW5hOiA0OQogICAgICAgICAgaGVhbHRoOiAyNgogICAgICAgICAgYnJhdmVyeTogNTAKICAgICAgICAgIHJlYWN0aW9uczogMzgKICAgICAgICAgIGZpcmluZzogNDEKICAgICAgICAgIHRocm93aW5nOiA2NwogICAgICAgICAgc3RyZW5ndGg6IDQwCiAgICAgICAgICBwc2lTdHJlbmd0aDogMjYKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjcKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiAwCiAgICAgICAgZ2VuZGVyOiAxCiAgICAgICAgbG9vazogMgogICAgICAgIGxvb2tWYXJpYW50OiAzOAogICAgICAgIG1pc3Npb25zOiAyCiAgICAgICAga2lsbHM6IDAKICAgICAgICBzdHVuczogMAogICAgICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgICAgIGltcHJvdmVtZW50OiAwCiAgICAgICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgICAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgICAgIGlkOiAxOQogICAgICAgIG5hbWU6IEhhcmkgS2FoaXdhaQogICAgICAgIGNvb3BiYXNlOiA3ODczNQogICAgICAgIGNvb3A6IDAKICAgICAgICBjb29wY3JhZnQ6IDEKICAgICAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgY29vcG5hbWU6IEhhcmkgS2FoaXdhaQogICAgICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgICAgIG5hdGlvbmFsaXR5OiAyNgogICAgICAgIGluaXRpYWxTdGF0czoKICAgICAgICAgIHR1OiA1MAogICAgICAgICAgc3RhbWluYTogNDYKICAgICAgICAgIGhlYWx0aDogMzAKICAgICAgICAgIGJyYXZlcnk6IDYwCiAgICAgICAgICByZWFjdGlvbnM6IDQ5CiAgICAgICAgICBmaXJpbmc6IDY4CiAgICAgICAgICB0aHJvd2luZzogNTIKICAgICAgICAgIHN0cmVuZ3RoOiAyNwogICAgICAgICAgcHNpU3RyZW5ndGg6IDE1CiAgICAgICAgICBwc2lTa2lsbDogMAogICAgICAgICAgbWVsZWU6IDIwCiAgICAgICAgICBtYW5hOiAwCiAgICAgICAgY3VycmVudFN0YXRzOgogICAgICAgICAgdHU6IDUwCiAgICAgICAgICBzdGFtaW5hOiA0NgogICAgICAgICAgaGVhbHRoOiAzMAogICAgICAgICAgYnJhdmVyeTogNjAKICAgICAgICAgIHJlYWN0aW9uczogNDkKICAgICAgICAgIGZpcmluZzogNjgKICAgICAgICAgIHRocm93aW5nOiA1MgogICAgICAgICAgc3RyZW5ndGg6IDI3CiAgICAgICAgICBwc2lTdHJlbmd0aDogMTUKICAgICAgICAgIHBzaVNraWxsOiAwCiAgICAgICAgICBtZWxlZTogMjAKICAgICAgICAgIG1hbmE6IDAKICAgICAgICByYW5rOiAxCiAgICAgICAgZ2VuZGVyOiAwCiAgICAgICAgbG9vazogMwogICAgICAgIGxvb2tWYXJpYW50OiAyMQogICAgICAgIG1pc3Npb25zOiAyCiAgICAgICAga2lsbHM6IDIKICAgICAgICBzdHVuczogMAogICAgICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgICAgIGltcHJvdmVtZW50OiAwCiAgICAgICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgIGNvb3BiYXNlaWQ6IDQ0ODQwCiAgICBjcmFmdHM6CiAgICAgIC0gbG9uOiAyLjQzMTAwNjMwMjIwOTI4NDcKICAgICAgICBsYXQ6IC0wLjYyNTg3MzQzMTkxNzY3NQogICAgICAgIGlkOiAxCiAgICAgICAgc3BlZWRMb246IDAKICAgICAgICBzcGVlZExhdDogMAogICAgICAgIHNwZWVkUmFkaWFuOiAwCiAgICAgICAgc3BlZWQ6IDAKICAgICAgICB0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICAgICAgZnVlbDogMTUwMAogICAgICAgIGRhbWFnZTogMAogICAgICAgIHNoaWVsZDogMAogICAgICAgIGNvb3BJdGVtczoKICAgICAgICAgIC0ge2lkOiAwLG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxLG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAyLG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAzLG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA0LG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA1LG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA2LG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA3LG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA4LG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA5LG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxMCxuYW1lOiBTVFJfUklGTEUsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTEsbmFtZTogU1RSX1JJRkxFLG93bmVyOiB0cnVlfQogICAgICAgICAgLSB7aWQ6IDEyLG5hbWU6IFNUUl9SSUZMRSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxMyxuYW1lOiBTVFJfUklGTEUsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTEsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTIsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTMsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTQsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTUsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTYsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTcsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTgsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMTksbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjAsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjEsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjIsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjMsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjQsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjUsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjYsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjcsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjgsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMjksbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMzAsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMzEsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMzIsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMzMsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMzQsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMzUsbmFtZTogU1RSX1JJRkxFX0NMSVAsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMCxuYW1lOiBTVFJfTUVESV9LSVQsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMSxuYW1lOiBTVFJfTUVESV9LSVQsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMixuYW1lOiBTVFJfTUVESV9LSVQsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMyxuYW1lOiBTVFJfTUVESV9LSVQsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMCxuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxLG5hbWU6IFNUUl9HUkVOQURFLG93bmVyOiB0cnVlfQogICAgICAgICAgLSB7aWQ6IDIsbmFtZTogU1RSX0dSRU5BREUsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogMyxuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA0LG5hbWU6IFNUUl9HUkVOQURFLG93bmVyOiB0cnVlfQogICAgICAgICAgLSB7aWQ6IDUsbmFtZTogU1RSX0dSRU5BREUsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogNixuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiA3LG5hbWU6IFNUUl9HUkVOQURFLG93bmVyOiB0cnVlfQogICAgICAgICAgLSB7aWQ6IDgsbmFtZTogU1RSX0dSRU5BREUsb3duZXI6IHRydWV9CiAgICAgICAgICAtIHtpZDogOSxuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxMCxuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxMSxuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICAgIC0ge2lkOiAxMixuYW1lOiBTVFJfR1JFTkFERSxvd25lcjogdHJ1ZX0KICAgICAgICBpdGVtczoKICAgICAgICAgIFNUUl9BQ19BUF9BTU1POiA1CiAgICAgICAgICBTVFJfQVVUT19DQU5OT046IDEKICAgICAgICAgIFNUUl9HUkVOQURFOiAxMAogICAgICAgICAgU1RSX0hDX0FQX0FNTU86IDQKICAgICAgICAgIFNUUl9IQ19IRV9BTU1POiA0CiAgICAgICAgICBTVFJfSENfSV9BTU1POiAzCiAgICAgICAgICBTVFJfSEVBVllfQ0FOTk9OOiAyCiAgICAgICAgICBTVFJfTUVESV9LSVQ6IDMKICAgICAgICAgIFNUUl9SSUZMRTogMTQKICAgICAgICAgIFNUUl9SSUZMRV9DTElQOiAzMAogICAgICAgIHN0YXR1czogU1RSX1JFQURZCiAgICAgICAgbG9uQXV0bzogMAogICAgICAgIGxhdEF1dG86IDAKICAgICAgLSBsb246IDIuNDMxMDA2MzAyMjA5Mjg0NwogICAgICAgIGxhdDogLTAuNjI1ODczNDMxOTE3Njc1CiAgICAgICAgaWQ6IDEKICAgICAgICBzcGVlZExvbjogMAogICAgICAgIHNwZWVkTGF0OiAwCiAgICAgICAgc3BlZWRSYWRpYW46IDAKICAgICAgICBzcGVlZDogMAogICAgICAgIHR5cGU6IFNUUl9JTlRFUkNFUFRPUgogICAgICAgIGZ1ZWw6IDEwMDAKICAgICAgICBkYW1hZ2U6IDAKICAgICAgICBzaGllbGQ6IDAKICAgICAgICB3ZWFwb25zOgogICAgICAgICAgLSB0eXBlOiBTVFJfU1RJTkdSQVkKICAgICAgICAgICAgYW1tbzogNgogICAgICAgICAgLSB0eXBlOiBTVFJfQ0FOTk9OX1VDCiAgICAgICAgICAgIGFtbW86IDIwMAogICAgICAgIGl0ZW1zOiB7fQogICAgICAgIHN0YXR1czogU1RSX1JFQURZCiAgICAgICAgbG9uQXV0bzogMAogICAgICAgIGxhdEF1dG86IDAKICAgICAgLSBsb246IDIuNDMxMDA2MzAyMjA5Mjg0NwogICAgICAgIGxhdDogLTAuNjI1ODczNDMxOTE3Njc1CiAgICAgICAgaWQ6IDIKICAgICAgICBzcGVlZExvbjogMAogICAgICAgIHNwZWVkTGF0OiAwCiAgICAgICAgc3BlZWRSYWRpYW46IDAKICAgICAgICBzcGVlZDogMAogICAgICAgIHR5cGU6IFNUUl9JTlRFUkNFUFRPUgogICAgICAgIGZ1ZWw6IDEwMDAKICAgICAgICBkYW1hZ2U6IDAKICAgICAgICBzaGllbGQ6IDAKICAgICAgICB3ZWFwb25zOgogICAgICAgICAgLSB0eXBlOiBTVFJfU1RJTkdSQVkKICAgICAgICAgICAgYW1tbzogNgogICAgICAgICAgLSB0eXBlOiBTVFJfQ0FOTk9OX1VDCiAgICAgICAgICAgIGFtbW86IDIwMAogICAgICAgIGl0ZW1zOiB7fQogICAgICAgIHN0YXR1czogU1RSX1JFQURZCiAgICAgICAgbG9uQXV0bzogMAogICAgICAgIGxhdEF1dG86IDAKICAgIGl0ZW1zOgogICAgICBTVFJfQUNfQVBfQU1NTzogMQogICAgICBTVFJfQUxJRU5fQUxMT1lTOiAxMjUKICAgICAgU1RSX0FMSUVOX0VOVEVSVEFJTk1FTlQ6IDcKICAgICAgU1RSX0FMSUVOX0dSRU5BREU6IDUKICAgICAgU1RSX0FWQUxBTkNIRV9NSVNTSUxFUzogNQogICAgICBTVFJfQ0FOTk9OX1JPVU5EU19YNTA6IDEKICAgICAgU1RSX0NZQkVSRElTQ19DT1JQU0U6IDEKICAgICAgU1RSX0VMRVJJVU1fMTE1OiAyMDUKICAgICAgU1RSX0ZMT0FURVJfQ09SUFNFOiAxCiAgICAgIFNUUl9HUkVOQURFOiAzCiAgICAgIFNUUl9IQ19BUF9BTU1POiAxCiAgICAgIFNUUl9IQ19IRV9BTU1POiAyCiAgICAgIFNUUl9IQ19JX0FNTU86IDEKICAgICAgU1RSX0hFQVZZX1BMQVNNQTogMwogICAgICBTVFJfSEVBVllfUExBU01BX0NMSVA6IDUKICAgICAgU1RSX1BMQVNNQV9QSVNUT0w6IDIKICAgICAgU1RSX1BMQVNNQV9QSVNUT0xfQ0xJUDogMwogICAgICBTVFJfUExBU01BX1JJRkxFOiAzCiAgICAgIFNUUl9QTEFTTUFfUklGTEVfQ0xJUDogNQogICAgICBTVFJfUklGTEU6IDEKICAgICAgU1RSX1JJRkxFX0NMSVA6IDEwCiAgICAgIFNUUl9TRUNUT0lEX0NPUlBTRTogMTAKICAgICAgU1RSX1NNQUxMX0xBVU5DSEVSOiAyCiAgICAgIFNUUl9TVElOR1JBWV9NSVNTSUxFUzogMjAKICAgICAgU1RSX1NUVU5fQk9NQjogNgogICAgICBTVFJfVUZPX05BVklHQVRJT046IDkKICAgICAgU1RSX1VGT19QT1dFUl9TT1VSQ0U6IDUKICAgIHNjaWVudGlzdHM6IDAKICAgIGVuZ2luZWVyczogMAogICAgcmVzZWFyY2g6CiAgICAgIC0gcHJvamVjdDogU1RSX1BPV0VSX1NVSVQKICAgICAgICBhc3NpZ25lZDogNTAKICAgICAgICBzcGVudDogMAogICAgICAgIGNvc3Q6IDEzNwogICAgcHJvZHVjdGlvbnM6CiAgICAgIC0gaXRlbTogU1RSX01FRElfS0lUCiAgICAgICAgYXNzaWduZWQ6IDEwCiAgICAgICAgc3BlbnQ6IDM2MTAKICAgICAgICBhbW91bnQ6IDc3CiAgICAgICAgaW5maW5pdGU6IHRydWUKICAgICAgICBzZWxsOiB0cnVlCiAgICAgIC0gaXRlbTogU1RSX1BMQVNNQV9SSUZMRQogICAgICAgIGFzc2lnbmVkOiAwCiAgICAgICAgc3BlbnQ6IDAKICAgICAgICBhbW91bnQ6IDkKICAgICAgICBpbmZpbml0ZTogZmFsc2UKICAgICAgLSBpdGVtOiBTVFJfUEVSU09OQUxfQVJNT1IKICAgICAgICBhc3NpZ25lZDogMTAKICAgICAgICBzcGVudDogNDEwCiAgICAgICAgYW1vdW50OiAxMgogICAgICAgIGluZmluaXRlOiBmYWxzZQphbGllbkJhc2VzOiBbXQphbGllbk1pc3Npb25zOiBbXQpkaXNjb3ZlcmVkOgogIC0gU1RSX0FMSUVOX0FMTE9ZUwogIC0gU1RSX0VMRVJJVU1fMTE1CiAgLSBTVFJfRkxPQVRFUl9BVVRPUFNZCiAgLSBTVFJfRkxPQVRFUl9DT1JQU0UKICAtIFNUUl9MQVNFUl9XRUFQT05TCiAgLSBTVFJfTUVESV9LSVQKICAtIFNUUl9QRVJTT05BTF9BUk1PUgogIC0gU1RSX1BMQVNNQV9DQU5OT05fREVQMgogIC0gU1RSX1BMQVNNQV9SSUZMRQogIC0gU1RSX1BMQVNNQV9SSUZMRV9DTElQCiAgLSBTVFJfU0VDVE9JRF9DT1JQU0UKICAtIFNUUl9VRk9fTkFWSUdBVElPTgogIC0gU1RSX1VGT19QT1dFUl9TT1VSQ0UKcmVzZWFyY2hEaWFyeToKICAtIHtkYXRlOiBbMTk5OSwxLDE0XSxuYW1lOiBTVFJfTUVESV9LSVQsc291cmNlVHlwZTogMCxzb3VyY2VOYW1lOiBBcmVhIDF9CiAgLSB7ZGF0ZTogWzE5OTksMiw0XSxuYW1lOiBTVFJfQUxJRU5fQUxMT1lTLHNvdXJjZVR5cGU6IDAsc291cmNlTmFtZTogQXJlYSAxfQogIC0ge2RhdGU6IFsxOTk5LDIsMTFdLG5hbWU6IFNUUl9QRVJTT05BTF9BUk1PUixzb3VyY2VUeXBlOiAwLHNvdXJjZU5hbWU6IEFyZWEgMX0KICAtIHtkYXRlOiBbMTk5OSwyLDIzXSxuYW1lOiBTVFJfVUZPX05BVklHQVRJT04sc291cmNlVHlwZTogMCxzb3VyY2VOYW1lOiBBcmVhIDF9CiAgLSB7ZGF0ZTogWzE5OTksMiwyN10sbmFtZTogU1RSX1BMQVNNQV9DQU5OT05fREVQMixzb3VyY2VUeXBlOiAyLHNvdXJjZU5hbWU6IFNUUl9QTEFTTUFfUklGTEVfQ0xJUH0KICAtIHtkYXRlOiBbMTk5OSwzLDNdLG5hbWU6IFNUUl9FTEVSSVVNXzExNSxzb3VyY2VUeXBlOiAwLHNvdXJjZU5hbWU6IEFyZWEgMX0KICAtIHtkYXRlOiBbMTk5OSwzLDI1XSxuYW1lOiBTVFJfVUZPX1BPV0VSX1NPVVJDRSxzb3VyY2VUeXBlOiAwLHNvdXJjZU5hbWU6IEFyZWEgMX0KICAtIHtkYXRlOiBbMTk5OSwzLDI4XSxuYW1lOiBTVFJfRkxPQVRFUl9DT1JQU0Usc291cmNlVHlwZTogMCxzb3VyY2VOYW1lOiBBcmVhIDF9CiAgLSB7ZGF0ZTogWzE5OTksMywyOF0sbmFtZTogU1RSX0ZMT0FURVJfQVVUT1BTWSxzb3VyY2VUeXBlOiAwLHNvdXJjZU5hbWU6IEFyZWEgMX0KcG9wcGVkUmVzZWFyY2g6CiAgLSBTVFJfVUZPX0NPTlNUUlVDVElPTgogIC0gU1RSX1BPV0VSX1NVSVQKZ2VuZXJhdGVkRXZlbnRzOiB7fQp1Zm9wZWRpYVJ1bGVTdGF0dXM6CiAgU1RSX0FDQ0VTU19MSUZUOiAwCiAgU1RSX0FMSUVOX0FMTE9ZUzogMAogIFNUUl9BTElFTl9DT05UQUlOTUVOVDogMAogIFNUUl9BVVRPX0NBTk5PTjogMAogIFNUUl9BVkFMQU5DSEU6IDAKICBTVFJfQ0FOTk9OX1VDOiAwCiAgU1RSX0VMRUNUUk9fRkxBUkU6IDAKICBTVFJfRUxFUklVTV8xMTU6IDAKICBTVFJfRkxPQVRFUl9BVVRPUFNZOiAxCiAgU1RSX0dFTkVSQUxfU1RPUkVTOiAwCiAgU1RSX0dSRU5BREU6IDAKICBTVFJfSEFOR0FSOiAwCiAgU1RSX0hFQVZZX0NBTk5PTjogMAogIFNUUl9ISUdIX0VYUExPU0lWRTogMAogIFNUUl9JTlRFUkNFUFRPUjogMAogIFNUUl9MQUJPUkFUT1JZOiAwCiAgU1RSX0xBUkdFX1JBREFSX1NZU1RFTTogMAogIFNUUl9MSVZJTkdfUVVBUlRFUlM6IDAKICBTVFJfTUVESV9LSVQ6IDEKICBTVFJfTUlTU0lMRV9ERUZFTlNFUzogMAogIFNUUl9QRVJTT05BTF9BUk1PUl9VQzogMAogIFNUUl9QSVNUT0w6IDAKICBTVFJfUExBU01BX1JJRkxFOiAwCiAgU1RSX1BMQVNNQV9SSUZMRV9DTElQOiAwCiAgU1RSX1BST1hJTUlUWV9HUkVOQURFOiAwCiAgU1RSX1JJRkxFOiAwCiAgU1RSX1JPQ0tFVF9MQVVOQ0hFUjogMAogIFNUUl9TRUNUT0lEX0FVVE9QU1k6IDAKICBTVFJfU0tZUkFOR0VSOiAwCiAgU1RSX1NNQUxMX1JBREFSX1NZU1RFTTogMAogIFNUUl9TTU9LRV9HUkVOQURFOiAwCiAgU1RSX1NUSU5HUkFZOiAwCiAgU1RSX1NUVU5fUk9EOiAwCiAgU1RSX1RBTktfQ0FOTk9OOiAwCiAgU1RSX1RBTktfUk9DS0VUX0xBVU5DSEVSOiAwCiAgU1RSX1VGT19OQVZJR0FUSU9OOiAwCiAgU1RSX1VGT19QT1dFUl9TT1VSQ0U6IDEKICBTVFJfV09SS1NIT1A6IDAKbWFudWZhY3R1cmVSdWxlU3RhdHVzOgogIFNUUl9BTElFTl9BTExPWVM6IDEKICBTVFJfTUVESV9LSVQ6IDEKICBTVFJfUEVSU09OQUxfQVJNT1I6IDEKICBTVFJfUExBU01BX1JJRkxFOiAxCiAgU1RSX1BMQVNNQV9SSUZMRV9DTElQOiAwCiAgU1RSX1VGT19OQVZJR0FUSU9OOiAxCiAgU1RSX1VGT19QT1dFUl9TT1VSQ0U6IDAKcmVzZWFyY2hSdWxlU3RhdHVzOgogIFNUUl9BTElFTl9BTExPWVM6IDEKICBTVFJfQUxJRU5fR1JFTkFERTogMQogIFNUUl9FTEVSSVVNXzExNTogMQogIFNUUl9GTE9BVEVSX0NPUlBTRTogMQogIFNUUl9NRURJX0tJVDogMQogIFNUUl9QRVJTT05BTF9BUk1PUjogMQogIFNUUl9QT1dFUl9TVUlUOiAxCiAgU1RSX1VGT19OQVZJR0FUSU9OOiAxCiAgU1RSX1VGT19QT1dFUl9TT1VSQ0U6IDEKbW9udGhseVB1cmNoYXNlTGltaXRMb2c6IHt9CmhpZGRlblB1cmNoYXNlSXRlbXM6IHt9CmN1c3RvbVJ1bGVDcmFmdERlcGxveW1lbnRzOiB7fQphbGllblN0cmF0ZWd5OgogIHJlZ2lvbnM6CiAgICBTVFJfQU5UQVJDVElDQTogNAogICAgU1RSX0FSQ1RJQzogNAogICAgU1RSX0FVU1RSQUxBU0lBOiAxMAogICAgU1RSX0NFTlRSQUxfQVNJQTogMTIKICAgIFNUUl9FVVJPUEU6IDE2CiAgICBTVFJfTk9SVEhfQUZSSUNBOiAxMgogICAgU1RSX05PUlRIX0FNRVJJQ0E6IDE4CiAgICBTVFJfUEFDSUZJQzogNQogICAgU1RSX1NJQkVSSUE6IDEwCiAgICBTVFJfU09VVEhFUk5fQUZSSUNBOiA4CiAgICBTVFJfU09VVEhfQU1FUklDQTogMTAKICAgIFNUUl9TT1VUSF9FQVNUX0FTSUE6IDE1CiAgcG9zc2libGVNaXNzaW9uczoKICAgIC0gcmVnaW9uOiBTVFJfQU5UQVJDVElDQQogICAgICBtaXNzaW9uczoKICAgICAgICBTVFJfQUxJRU5fQkFTRTogMzUKICAgICAgICBTVFJfQUxJRU5fUkVTRUFSQ0g6IDI1CiAgICAtIHJlZ2lvbjogU1RSX0FSQ1RJQwogICAgICBtaXNzaW9uczoKICAgICAgICBTVFJfQUxJRU5fQkFTRTogMzUKICAgIC0gcmVnaW9uOiBTVFJfQVVTVFJBTEFTSUEKICAgICAgbWlzc2lvbnM6CiAgICAgICAgU1RSX0FMSUVOX0FCRFVDVElPTjogNAogICAgICAgIFNUUl9BTElFTl9CQVNFOiAxNgogICAgICAgIFNUUl9BTElFTl9IQVJWRVNUOiAxMQogICAgICAgIFNUUl9BTElFTl9JTkZJTFRSQVRJT046IDgKICAgICAgICBTVFJfQUxJRU5fUkVTRUFSQ0g6IDE1CiAgICAtIHJlZ2lvbjogU1RSX0NFTlRSQUxfQVNJQQogICAgICBtaXNzaW9uczoKICAgICAgICBTVFJfQUxJRU5fQUJEVUNUSU9OOiA2CiAgICAgICAgU1RSX0FMSUVOX0JBU0U6IDgKICAgICAgICBTVFJfQUxJRU5fSEFSVkVTVDogNQogICAgICAgIFNUUl9BTElFTl9JTkZJTFRSQVRJT046IDEwCiAgICAgICAgU1RSX0FMSUVOX1JFU0VBUkNIOiA1CiAgICAtIHJlZ2lvbjogU1RSX0VVUk9QRQogICAgICBtaXNzaW9uczoKICAgICAgICBTVFJfQUxJRU5fQUJEVUNUSU9OOiAxNQogICAgICAgIFNUUl9BTElFTl9CQVNFOiA2CiAgICAgICAgU1RSX0FMSUVOX0lORklMVFJBVElPTjogMjAKICAgICAgICBTVFJfQUxJRU5fUkVTRUFSQ0g6IDEwCiAgICAtIHJlZ2lvbjogU1RSX0lORElBTl9PQ0VBTgogICAgICBtaXNzaW9uczogfgogICAgLSByZWdpb246IFNUUl9OT1JUSF9BRlJJQ0EKICAgICAgbWlzc2lvbnM6CiAgICAgICAgU1RSX0FMSUVOX0FCRFVDVElPTjogOAogICAgICAgIFNUUl9BTElFTl9CQVNFOiAxOQogICAgICAgIFNUUl9BTElFTl9IQVJWRVNUOiA4CiAgICAgICAgU1RSX0FMSUVOX0lORklMVFJBVElPTjogOAogICAgICAgIFNUUl9BTElFTl9SRVNFQVJDSDogOAogICAgLSByZWdpb246IFNUUl9OT1JUSF9BTUVSSUNBCiAgICAgIG1pc3Npb25zOgogICAgICAgIFNUUl9BTElFTl9BQkRVQ1RJT046IDIwCiAgICAgICAgU1RSX0FMSUVOX0JBU0U6IDIwCiAgICAgICAgU1RSX0FMSUVOX0hBUlZFU1Q6IDE3CiAgICAgICAgU1RSX0FMSUVOX0lORklMVFJBVElPTjogMjAKICAgICAgICBTVFJfQUxJRU5fUkVTRUFSQ0g6IDE0CiAgICAtIHJlZ2lvbjogU1RSX05PUlRIX0FUTEFOVElDCiAgICAgIG1pc3Npb25zOiB+CiAgICAtIHJlZ2lvbjogU1RSX1BBQ0lGSUMKICAgICAgbWlzc2lvbnM6CiAgICAgICAgU1RSX0FMSUVOX0JBU0U6IDI3CiAgICAgICAgU1RSX0FMSUVOX1JFU0VBUkNIOiAxNQogICAgLSByZWdpb246IFNUUl9TSUJFUklBCiAgICAgIG1pc3Npb25zOgogICAgICAgIFNUUl9BTElFTl9BQkRVQ1RJT046IDQKICAgICAgICBTVFJfQUxJRU5fQkFTRTogOQogICAgICAgIFNUUl9BTElFTl9SRVNFQVJDSDogNgogICAgLSByZWdpb246IFNUUl9TT1VUSEVSTl9BRlJJQ0EKICAgICAgbWlzc2lvbnM6CiAgICAgICAgU1RSX0FMSUVOX0FCRFVDVElPTjogOAogICAgICAgIFNUUl9BTElFTl9CQVNFOiA5CiAgICAgICAgU1RSX0FMSUVOX0hBUlZFU1Q6IDgKICAgICAgICBTVFJfQUxJRU5fSU5GSUxUUkFUSU9OOiA4CiAgICAgICAgU1RSX0FMSUVOX1JFU0VBUkNIOiA3CiAgICAtIHJlZ2lvbjogU1RSX1NPVVRIX0FNRVJJQ0EKICAgICAgbWlzc2lvbnM6CiAgICAgICAgU1RSX0FMSUVOX0FCRFVDVElPTjogMTIKICAgICAgICBTVFJfQUxJRU5fQkFTRTogMjIKICAgICAgICBTVFJfQUxJRU5fSEFSVkVTVDogMjQKICAgICAgICBTVFJfQUxJRU5fSU5GSUxUUkFUSU9OOiAxOAogICAgICAgIFNUUl9BTElFTl9SRVNFQVJDSDogMTAKICAgIC0gcmVnaW9uOiBTVFJfU09VVEhfQVRMQU5USUMKICAgICAgbWlzc2lvbnM6IH4KICAgIC0gcmVnaW9uOiBTVFJfU09VVEhfRUFTVF9BU0lBCiAgICAgIG1pc3Npb25zOgogICAgICAgIFNUUl9BTElFTl9BQkRVQ1RJT046IDIxCiAgICAgICAgU1RSX0FMSUVOX0JBU0U6IDgKICAgICAgICBTVFJfQUxJRU5fSEFSVkVTVDogMTMKICAgICAgICBTVFJfQUxJRU5fSU5GSUxUUkFUSU9OOiAxMwogICAgICAgIFNUUl9BTElFTl9SRVNFQVJDSDogOAogIG1pc3Npb25Mb2NhdGlvbnM6IHt9CiAgbWlzc2lvbnNSdW46IHt9CmRlYWRTb2xkaWVyczoKICAtIHR5cGU6IFNUUl9TT0xESUVSCiAgICBpZDogMjEKICAgIG5hbWU6IFByYXZvc2xhdiBDZXJtYWsKICAgIGNvb3BiYXNlOiA0NDg0MAogICAgY29vcDogMQogICAgY29vcGNyYWZ0OiAxCiAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICBjb29wbmFtZTogUHJhdm9zbGF2IENlcm1hawogICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICBuYXRpb25hbGl0eTogOAogICAgaW5pdGlhbFN0YXRzOgogICAgICB0dTogNTkKICAgICAgc3RhbWluYTogNTEKICAgICAgaGVhbHRoOiAzNwogICAgICBicmF2ZXJ5OiAyMAogICAgICByZWFjdGlvbnM6IDQ5CiAgICAgIGZpcmluZzogNTQKICAgICAgdGhyb3dpbmc6IDU1CiAgICAgIHN0cmVuZ3RoOiAzMAogICAgICBwc2lTdHJlbmd0aDogNjQKICAgICAgcHNpU2tpbGw6IDAKICAgICAgbWVsZWU6IDI5CiAgICAgIG1hbmE6IDAKICAgIGN1cnJlbnRTdGF0czoKICAgICAgdHU6IDU5CiAgICAgIHN0YW1pbmE6IDUxCiAgICAgIGhlYWx0aDogMzcKICAgICAgYnJhdmVyeTogMjAKICAgICAgcmVhY3Rpb25zOiA0OQogICAgICBmaXJpbmc6IDU0CiAgICAgIHRocm93aW5nOiA1NQogICAgICBzdHJlbmd0aDogMzAKICAgICAgcHNpU3RyZW5ndGg6IDY0CiAgICAgIHBzaVNraWxsOiAwCiAgICAgIG1lbGVlOiAyOQogICAgICBtYW5hOiAwCiAgICByYW5rOiAwCiAgICBnZW5kZXI6IDAKICAgIGxvb2s6IDEKICAgIGxvb2tWYXJpYW50OiA0CiAgICBtaXNzaW9uczogMQogICAga2lsbHM6IDMKICAgIHN0dW5zOiAwCiAgICBhcm1vcjogU1RSX05PTkVfVUMKICAgIGltcHJvdmVtZW50OiAwCiAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgZGVhdGg6CiAgICAgIHRpbWU6IHtzZWNvbmQ6IDQ1LG1pbnV0ZTogNDIsaG91cjogMTMsd2Vla2RheTogNSxkYXk6IDE4LG1vbnRoOiAzLHllYXI6IDE5OTl9CiAgICAgIGNhdXNlOiB7bmFtZTogUHJhdm9zbGF2IENlcm1hayxyYW5rOiBTVFJfUk9PS0lFLHJhY2U6IFNUUl9GUklFTkRMWSx3ZWFwb246IFNUUl9DWUJFUkRJU0NfQ09SUFNFLHdlYXBvbkFtbW86IFNUUl9DWUJFUkRJU0NfQ09SUFNFLHN0YXR1czogNixmYWN0aW9uOiAwLG1pc3Npb246IDAsdHVybjogMjQsc2lkZTogMCxib2R5cGFydDogMSxpZDogMjF9CiAgICBkaWFyeToKICAgICAga2lsbExpc3Q6CiAgICAgICAgLSB7dHlwZTogU1RSX0NZQkVSRElTQ19URVJST1JJU1QscmFuazogU1RSX0xJVkVfVEVSUk9SSVNULHJhY2U6IFNUUl9DWUJFUkRJU0Msd2VhcG9uOiBTVFJfUklGTEUsd2VhcG9uQW1tbzogU1RSX1JJRkxFX0NMSVAsc3RhdHVzOiA2LGZhY3Rpb246IDEsbWlzc2lvbjogMCx0dXJuOiAyNCxzaWRlOiAzLGJvZHlwYXJ0OiAxLGlkOiAxMDAwMDEzfQogICAgICAgIC0ge25hbWU6IFByYXZvc2xhdiBDZXJtYWsscmFuazogU1RSX1JPT0tJRSxyYWNlOiBTVFJfRlJJRU5ETFksd2VhcG9uOiBTVFJfQ1lCRVJESVNDX0NPUlBTRSx3ZWFwb25BbW1vOiBTVFJfQ1lCRVJESVNDX0NPUlBTRSxzdGF0dXM6IDYsZmFjdGlvbjogMCxtaXNzaW9uOiAwLHR1cm46IDI0LHNpZGU6IDAsYm9keXBhcnQ6IDEsaWQ6IDIxfQogICAgICAgIC0ge25hbWU6IFJ1YmVuIE1hcnRpbixyYW5rOiBTVFJfUk9PS0lFLHJhY2U6IFNUUl9GUklFTkRMWSx3ZWFwb246IFNUUl9DWUJFUkRJU0NfQ09SUFNFLHdlYXBvbkFtbW86IFNUUl9DWUJFUkRJU0NfQ09SUFNFLHN0YXR1czogNixmYWN0aW9uOiAwLG1pc3Npb246IDAsdHVybjogMjQsc2lkZTogMCxib2R5cGFydDogMSxpZDogMjV9CiAgICAgIG1pc3Npb25JZExpc3Q6IFswXQogICAgICBtb250aHNTZXJ2aWNlOiAyCiAgICAgIHNob3RBdENvdW50ZXJUb3RhbDogNgogICAgICBoaXRDb3VudGVyVG90YWw6IDEKICAgICAgbG93QWNjdXJhY3lIaXRDb3VudGVyVG90YWw6IDIKICAgICAgc2hvdHNGaXJlZENvdW50ZXJUb3RhbDogMTEKICAgICAgc2hvdHNMYW5kZWRDb3VudGVyVG90YWw6IDMKICAgICAga2lsbGVkSW5BY3Rpb246IDEKICAgICAgd291bmRzSGVhbGVkVG90YWw6IDExCiAgICAgIHdob2xlTWVkaWtpdFRvdGFsOiAyCiAgICAgIG1hcnR5cktpbGxzVG90YWw6IDEKICAgIGNvcnBzZVJlY292ZXJlZDogdHJ1ZQogIC0gdHlwZTogU1RSX1NPTERJRVIKICAgIGlkOiAyNQogICAgbmFtZTogUnViZW4gTWFydGluCiAgICBjb29wYmFzZTogNDQ4NDAKICAgIGNvb3A6IDEKICAgIGNvb3BjcmFmdDogMQogICAgY29vcGNyYWZ0dHlwZTogU1RSX1NLWVJBTkdFUgogICAgY29vcG5hbWU6IFJ1YmVuIE1hcnRpbgogICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICBuYXRpb25hbGl0eTogMwogICAgaW5pdGlhbFN0YXRzOgogICAgICB0dTogNTUKICAgICAgc3RhbWluYTogNjQKICAgICAgaGVhbHRoOiAyNgogICAgICBicmF2ZXJ5OiA0MAogICAgICByZWFjdGlvbnM6IDU5CiAgICAgIGZpcmluZzogNDIKICAgICAgdGhyb3dpbmc6IDc1CiAgICAgIHN0cmVuZ3RoOiAzOQogICAgICBwc2lTdHJlbmd0aDogNTYKICAgICAgcHNpU2tpbGw6IDAKICAgICAgbWVsZWU6IDM5CiAgICAgIG1hbmE6IDAKICAgIGN1cnJlbnRTdGF0czoKICAgICAgdHU6IDU1CiAgICAgIHN0YW1pbmE6IDY0CiAgICAgIGhlYWx0aDogMjYKICAgICAgYnJhdmVyeTogNDAKICAgICAgcmVhY3Rpb25zOiA1OQogICAgICBmaXJpbmc6IDQyCiAgICAgIHRocm93aW5nOiA3NQogICAgICBzdHJlbmd0aDogMzkKICAgICAgcHNpU3RyZW5ndGg6IDU2CiAgICAgIHBzaVNraWxsOiAwCiAgICAgIG1lbGVlOiAzOQogICAgICBtYW5hOiAwCiAgICByYW5rOiAwCiAgICBnZW5kZXI6IDAKICAgIGxvb2s6IDAKICAgIGxvb2tWYXJpYW50OiAzMQogICAgbWlzc2lvbnM6IDEKICAgIGtpbGxzOiAwCiAgICBzdHVuczogMAogICAgYXJtb3I6IFNUUl9OT05FX1VDCiAgICBpbXByb3ZlbWVudDogMAogICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgIGRlYXRoOgogICAgICB0aW1lOiB7c2Vjb25kOiA0NSxtaW51dGU6IDQyLGhvdXI6IDEzLHdlZWtkYXk6IDUsZGF5OiAxOCxtb250aDogMyx5ZWFyOiAxOTk5fQogICAgICBjYXVzZToge25hbWU6IFByYXZvc2xhdiBDZXJtYWsscmFuazogU1RSX1JPT0tJRSxyYWNlOiBTVFJfRlJJRU5ETFksd2VhcG9uOiBTVFJfQ1lCRVJESVNDX0NPUlBTRSx3ZWFwb25BbW1vOiBTVFJfQ1lCRVJESVNDX0NPUlBTRSxzdGF0dXM6IDYsZmFjdGlvbjogMCxtaXNzaW9uOiAwLHR1cm46IDI0LHNpZGU6IDAsYm9keXBhcnQ6IDEsaWQ6IDI1fQogICAgZGlhcnk6CiAgICAgIG1pc3Npb25JZExpc3Q6IFswXQogICAgICBtb250aHNTZXJ2aWNlOiAyCiAgICAgIHNob3RzRmlyZWRDb3VudGVyVG90YWw6IDEyCiAgICAgIHNob3RzTGFuZGVkQ291bnRlclRvdGFsOiA1CiAgICAgIGtpbGxlZEluQWN0aW9uOiAxCiAgICBjb3Jwc2VSZWNvdmVyZWQ6IHRydWUKICAtIHR5cGU6IFNUUl9TT0xESUVSCiAgICBpZDogNAogICAgbmFtZTogTWFyaW8gSmVzdXMKICAgIGNvb3BiYXNlOiAtMQogICAgY29vcDogMAogICAgY29vcGNyYWZ0OiAtMQogICAgY29vcGNyYWZ0dHlwZTogJycKICAgIGNvb3BuYW1lOiBNYXJpbyBKZXN1cwogICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICBuYXRpb25hbGl0eTogMjcKICAgIGluaXRpYWxTdGF0czoKICAgICAgdHU6IDYwCiAgICAgIHN0YW1pbmE6IDQ5CiAgICAgIGhlYWx0aDogMzcKICAgICAgYnJhdmVyeTogMjAKICAgICAgcmVhY3Rpb25zOiAzNgogICAgICBmaXJpbmc6IDQ0CiAgICAgIHRocm93aW5nOiA3OAogICAgICBzdHJlbmd0aDogMzAKICAgICAgcHNpU3RyZW5ndGg6IDY1CiAgICAgIHBzaVNraWxsOiAwCiAgICAgIG1lbGVlOiAzNgogICAgICBtYW5hOiAwCiAgICBjdXJyZW50U3RhdHM6CiAgICAgIHR1OiA2MAogICAgICBzdGFtaW5hOiA0OQogICAgICBoZWFsdGg6IDM3CiAgICAgIGJyYXZlcnk6IDIwCiAgICAgIHJlYWN0aW9uczogMzYKICAgICAgZmlyaW5nOiA0NAogICAgICB0aHJvd2luZzogNzgKICAgICAgc3RyZW5ndGg6IDMwCiAgICAgIHBzaVN0cmVuZ3RoOiA2NQogICAgICBwc2lTa2lsbDogMAogICAgICBtZWxlZTogMzYKICAgICAgbWFuYTogMAogICAgcmFuazogMAogICAgZ2VuZGVyOiAwCiAgICBsb29rOiAzCiAgICBsb29rVmFyaWFudDogNTYKICAgIG1pc3Npb25zOiAxCiAgICBraWxsczogMgogICAgc3R1bnM6IDAKICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgaW1wcm92ZW1lbnQ6IDAKICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICBkZWF0aDoKICAgICAgdGltZToge3NlY29uZDogNDUsbWludXRlOiA0Mixob3VyOiAxMyx3ZWVrZGF5OiA1LGRheTogMTgsbW9udGg6IDMseWVhcjogMTk5OX0KICAgICAgY2F1c2U6IHt0eXBlOiBTVFJfQ1lCRVJESVNDX1RFUlJPUklTVCxyYW5rOiBTVFJfTElWRV9URVJST1JJU1QscmFjZTogU1RSX0NZQkVSRElTQyx3ZWFwb246IENZQkVSRElTQ19XRUFQT04sd2VhcG9uQW1tbzogQ1lCRVJESVNDX1dFQVBPTixzdGF0dXM6IDYsZmFjdGlvbjogMSxtaXNzaW9uOiAwLHR1cm46IDI3LHNpZGU6IDAsYm9keXBhcnQ6IDEsaWQ6IDR9CiAgICBkaWFyeToKICAgICAga2lsbExpc3Q6CiAgICAgICAgLSB7dHlwZTogU1RSX1NFQ1RPSURfU09MRElFUixyYW5rOiBTVFJfTElWRV9TT0xESUVSLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX1JJRkxFLHdlYXBvbkFtbW86IFNUUl9SSUZMRV9DTElQLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogNixzaWRlOiAwLGJvZHlwYXJ0OiAxLGlkOiAxMDAwMDA0fQogICAgICAgIC0ge3R5cGU6IFNUUl9TRUNUT0lEX1NPTERJRVIscmFuazogU1RSX0xJVkVfU09MRElFUixyYWNlOiBTVFJfU0VDVE9JRCx3ZWFwb246IFNUUl9SSUZMRSx3ZWFwb25BbW1vOiBTVFJfUklGTEVfQ0xJUCxzdGF0dXM6IDYsZmFjdGlvbjogMSxtaXNzaW9uOiAwLHR1cm46IDYsc2lkZTogMSxib2R5cGFydDogMyxpZDogMTAwMDAwMn0KICAgICAgbWlzc2lvbklkTGlzdDogWzBdCiAgICAgIG1vbnRoc1NlcnZpY2U6IDIKICAgICAgc2hvdEF0Q291bnRlclRvdGFsOiAyCiAgICAgIGhpdENvdW50ZXJUb3RhbDogMQogICAgICBzaG90c0ZpcmVkQ291bnRlclRvdGFsOiAxOQogICAgICBzaG90c0xhbmRlZENvdW50ZXJUb3RhbDogNgogICAgICBraWxsZWRJbkFjdGlvbjogMQogIC0gdHlwZTogU1RSX1NPTERJRVIKICAgIGlkOiAyNAogICAgbmFtZTogRW5yaXF1ZSBGZXJuYW5kZXoKICAgIGNvb3BiYXNlOiA0NDg0MAogICAgY29vcDogMQogICAgY29vcGNyYWZ0OiAxCiAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICBjb29wbmFtZTogRW5yaXF1ZSBGZXJuYW5kZXoKICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgbmF0aW9uYWxpdHk6IDMxCiAgICBpbml0aWFsU3RhdHM6CiAgICAgIHR1OiA1OQogICAgICBzdGFtaW5hOiA1MQogICAgICBoZWFsdGg6IDM5CiAgICAgIGJyYXZlcnk6IDMwCiAgICAgIHJlYWN0aW9uczogNTQKICAgICAgZmlyaW5nOiA0NwogICAgICB0aHJvd2luZzogNjgKICAgICAgc3RyZW5ndGg6IDMxCiAgICAgIHBzaVN0cmVuZ3RoOiA2MgogICAgICBwc2lTa2lsbDogMAogICAgICBtZWxlZTogMzEKICAgICAgbWFuYTogMAogICAgY3VycmVudFN0YXRzOgogICAgICB0dTogNTkKICAgICAgc3RhbWluYTogNTEKICAgICAgaGVhbHRoOiAzOQogICAgICBicmF2ZXJ5OiAzMAogICAgICByZWFjdGlvbnM6IDU0CiAgICAgIGZpcmluZzogNDcKICAgICAgdGhyb3dpbmc6IDY4CiAgICAgIHN0cmVuZ3RoOiAzMQogICAgICBwc2lTdHJlbmd0aDogNjIKICAgICAgcHNpU2tpbGw6IDAKICAgICAgbWVsZWU6IDMxCiAgICAgIG1hbmE6IDAKICAgIHJhbms6IDAKICAgIGdlbmRlcjogMAogICAgbG9vazogMQogICAgbG9va1ZhcmlhbnQ6IDYxCiAgICBtaXNzaW9uczogMQogICAga2lsbHM6IDAKICAgIHN0dW5zOiAwCiAgICBhcm1vcjogU1RSX05PTkVfVUMKICAgIGltcHJvdmVtZW50OiAwCiAgICBwc2lTdHJJbXByb3ZlbWVudDogMAogICAgZGVhdGg6CiAgICAgIHRpbWU6IHtzZWNvbmQ6IDQ1LG1pbnV0ZTogNDIsaG91cjogMTMsd2Vla2RheTogNSxkYXk6IDE4LG1vbnRoOiAzLHllYXI6IDE5OTl9CiAgICAgIGNhdXNlOiB7dHlwZTogU1RSX1NFQ1RPSURfRU5HSU5FRVIscmFuazogU1RSX0xJVkVfRU5HSU5FRVIscmFjZTogU1RSX1NFQ1RPSUQsd2VhcG9uOiBTVFJfUExBU01BX1JJRkxFLHdlYXBvbkFtbW86IFNUUl9QTEFTTUFfUklGTEVfQ0xJUCxzdGF0dXM6IDYsZmFjdGlvbjogMSxtaXNzaW9uOiAwLHR1cm46IDI4LHNpZGU6IDAsYm9keXBhcnQ6IDEsaWQ6IDI0fQogICAgZGlhcnk6CiAgICAgIG1pc3Npb25JZExpc3Q6IFswXQogICAgICBtb250aHNTZXJ2aWNlOiAyCiAgICAgIHNob3RBdENvdW50ZXJUb3RhbDogMQogICAgICBoaXRDb3VudGVyVG90YWw6IDEKICAgICAgbG93QWNjdXJhY3lIaXRDb3VudGVyVG90YWw6IDIKICAgICAgc2hvdHNGaXJlZENvdW50ZXJUb3RhbDogMwogICAgICBzaG90c0xhbmRlZENvdW50ZXJUb3RhbDogMgogICAgICBraWxsZWRJbkFjdGlvbjogMQogICAgY29ycHNlUmVjb3ZlcmVkOiB0cnVlCiAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgaWQ6IDEKICAgIG5hbWU6IFRob21hcyBGaXR6cGF0cmljawogICAgY29vcGJhc2U6IC0xCiAgICBjb29wOiAwCiAgICBjb29wY3JhZnQ6IC0xCiAgICBjb29wY3JhZnR0eXBlOiAnJwogICAgY29vcG5hbWU6IEthdGhsZWVuIENsYXJrZQogICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICBuYXRpb25hbGl0eTogMTgKICAgIGluaXRpYWxTdGF0czoKICAgICAgdHU6IDU1CiAgICAgIHN0YW1pbmE6IDY4CiAgICAgIGhlYWx0aDogNDAKICAgICAgYnJhdmVyeTogMjAKICAgICAgcmVhY3Rpb25zOiA1MgogICAgICBmaXJpbmc6IDU4CiAgICAgIHRocm93aW5nOiA2MAogICAgICBzdHJlbmd0aDogMjUKICAgICAgcHNpU3RyZW5ndGg6IDE5CiAgICAgIHBzaVNraWxsOiAwCiAgICAgIG1lbGVlOiAyNwogICAgICBtYW5hOiAwCiAgICBjdXJyZW50U3RhdHM6CiAgICAgIHR1OiA1NQogICAgICBzdGFtaW5hOiA2OAogICAgICBoZWFsdGg6IDQwCiAgICAgIGJyYXZlcnk6IDIwCiAgICAgIHJlYWN0aW9uczogNTIKICAgICAgZmlyaW5nOiA1OAogICAgICB0aHJvd2luZzogNjAKICAgICAgc3RyZW5ndGg6IDI1CiAgICAgIHBzaVN0cmVuZ3RoOiAxOQogICAgICBwc2lTa2lsbDogMAogICAgICBtZWxlZTogMjcKICAgICAgbWFuYTogMAogICAgcmFuazogMgogICAgZ2VuZGVyOiAxCiAgICBsb29rOiAwCiAgICBsb29rVmFyaWFudDogMzYKICAgIG1pc3Npb25zOiAyCiAgICBraWxsczogMwogICAgc3R1bnM6IDAKICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgaW1wcm92ZW1lbnQ6IDAKICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICBkZWF0aDoKICAgICAgdGltZToge3NlY29uZDogNDUsbWludXRlOiA0Mixob3VyOiAxMyx3ZWVrZGF5OiA1LGRheTogMTgsbW9udGg6IDMseWVhcjogMTk5OX0KICAgICAgY2F1c2U6IHt0eXBlOiBTVFJfQ1lCRVJESVNDX1RFUlJPUklTVCxyYW5rOiBTVFJfTElWRV9URVJST1JJU1QscmFjZTogU1RSX0NZQkVSRElTQyx3ZWFwb246IENZQkVSRElTQ19XRUFQT04sd2VhcG9uQW1tbzogQ1lCRVJESVNDX1dFQVBPTixzdGF0dXM6IDYsZmFjdGlvbjogMSxtaXNzaW9uOiAwLHR1cm46IDM0LHNpZGU6IDAsYm9keXBhcnQ6IDEsaWQ6IDF9CiAgICBkaWFyeToKICAgICAga2lsbExpc3Q6CiAgICAgICAgLSB7dHlwZTogU1RSX1NFQ1RPSURfU09MRElFUixyYW5rOiBTVFJfTElWRV9TT0xESUVSLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX1JJRkxFLHdlYXBvbkFtbW86IFNUUl9SSUZMRV9DTElQLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogNixzaWRlOiAyLGJvZHlwYXJ0OiAwLGlkOiAxMDAwMDAzfQogICAgICBtaXNzaW9uSWRMaXN0OiBbMF0KICAgICAgbW9udGhzU2VydmljZTogMgogICAgICBzaG90QXRDb3VudGVyVG90YWw6IDYKICAgICAgaGl0Q291bnRlclRvdGFsOiAxCiAgICAgIGxvd0FjY3VyYWN5SGl0Q291bnRlclRvdGFsOiAyCiAgICAgIHNob3RzRmlyZWRDb3VudGVyVG90YWw6IDI2CiAgICAgIHNob3RzTGFuZGVkQ291bnRlclRvdGFsOiA3CiAgICAgIGtpbGxlZEluQWN0aW9uOiAxCiAgICAgIGJlc3RPZlJhbms6IDMxOQogICAgICBiZXN0U29sZGllcjogMzE5CiAgICBjb3Jwc2VSZWNvdmVyZWQ6IHRydWUKICAtIHR5cGU6IFNUUl9TT0xESUVSCiAgICBpZDogMjAKICAgIG5hbWU6IExpbmRhIE5lbWNvdmEKICAgIGNvb3BiYXNlOiA0NDg0MAogICAgY29vcDogMQogICAgY29vcGNyYWZ0OiAxCiAgICBjb29wY3JhZnR0eXBlOiBTVFJfU0tZUkFOR0VSCiAgICBjb29wbmFtZTogTGluZGEgTmVtY292YQogICAgb3duZXJwbGF5ZXJpZDogOTk5CiAgICBuYXRpb25hbGl0eTogMzAKICAgIGluaXRpYWxTdGF0czoKICAgICAgdHU6IDU1CiAgICAgIHN0YW1pbmE6IDYwCiAgICAgIGhlYWx0aDogMzYKICAgICAgYnJhdmVyeTogNjAKICAgICAgcmVhY3Rpb25zOiA1NAogICAgICBmaXJpbmc6IDQyCiAgICAgIHRocm93aW5nOiA2NwogICAgICBzdHJlbmd0aDogNDAKICAgICAgcHNpU3RyZW5ndGg6IDcwCiAgICAgIHBzaVNraWxsOiAwCiAgICAgIG1lbGVlOiAzNQogICAgICBtYW5hOiAwCiAgICBjdXJyZW50U3RhdHM6CiAgICAgIHR1OiA1NQogICAgICBzdGFtaW5hOiA2MAogICAgICBoZWFsdGg6IDM2CiAgICAgIGJyYXZlcnk6IDYwCiAgICAgIHJlYWN0aW9uczogNTQKICAgICAgZmlyaW5nOiA0MgogICAgICB0aHJvd2luZzogNjcKICAgICAgc3RyZW5ndGg6IDQwCiAgICAgIHBzaVN0cmVuZ3RoOiA3MAogICAgICBwc2lTa2lsbDogMAogICAgICBtZWxlZTogMzUKICAgICAgbWFuYTogMAogICAgcmFuazogMAogICAgZ2VuZGVyOiAxCiAgICBsb29rOiAxCiAgICBsb29rVmFyaWFudDogNwogICAgbWlzc2lvbnM6IDEKICAgIGtpbGxzOiAyCiAgICBzdHVuczogMAogICAgYXJtb3I6IFNUUl9OT05FX1VDCiAgICBpbXByb3ZlbWVudDogMAogICAgcHNpU3RySW1wcm92ZW1lbnQ6IDAKICAgIGRlYXRoOgogICAgICB0aW1lOiB7c2Vjb25kOiA0NSxtaW51dGU6IDQyLGhvdXI6IDEzLHdlZWtkYXk6IDUsZGF5OiAxOCxtb250aDogMyx5ZWFyOiAxOTk5fQogICAgICBjYXVzZToge3R5cGU6IFNUUl9TRUNUT0lEX05BVklHQVRPUixyYW5rOiBTVFJfTElWRV9OQVZJR0FUT1IscmFjZTogU1RSX1NFQ1RPSUQsd2VhcG9uOiBTVFJfSEVBVllfUExBU01BLHdlYXBvbkFtbW86IFNUUl9IRUFWWV9QTEFTTUFfQ0xJUCxzdGF0dXM6IDYsZmFjdGlvbjogMSxtaXNzaW9uOiAwLHR1cm46IDQzLHNpZGU6IDEsYm9keXBhcnQ6IDMsaWQ6IDIwfQogICAgZGlhcnk6CiAgICAgIGtpbGxMaXN0OgogICAgICAgIC0ge25hbWU6IFRoaWVycnkgRGlzaGkscmFuazogU1RSX1JPT0tJRSxyYWNlOiBTVFJfRlJJRU5ETFksd2VhcG9uOiBTVFJfUklGTEUsd2VhcG9uQW1tbzogU1RSX1JJRkxFX0NMSVAsc3RhdHVzOiA3LGZhY3Rpb246IDAsbWlzc2lvbjogMCx0dXJuOiAxMixzaWRlOiAzLGJvZHlwYXJ0OiAxLGlkOiAyMn0KICAgICAgICAtIHt0eXBlOiBTVFJfU0VDVE9JRF9FTkdJTkVFUixyYW5rOiBTVFJfTElWRV9FTkdJTkVFUixyYWNlOiBTVFJfU0VDVE9JRCx3ZWFwb246IFNUUl9QTEFTTUFfUklGTEUsd2VhcG9uQW1tbzogU1RSX1BMQVNNQV9SSUZMRV9DTElQLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogMzMsc2lkZTogMyxib2R5cGFydDogMSxpZDogMTAwMDAwOH0KICAgICAgICAtIHt0eXBlOiBTVFJfU0VDVE9JRF9MRUFERVIscmFuazogU1RSX0xJVkVfTEVBREVSLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX1BMQVNNQV9SSUZMRSx3ZWFwb25BbW1vOiBTVFJfUExBU01BX1JJRkxFX0NMSVAsc3RhdHVzOiA2LGZhY3Rpb246IDEsbWlzc2lvbjogMCx0dXJuOiA0MixzaWRlOiAxLGJvZHlwYXJ0OiAzLGlkOiAxMDAwMDA5fQogICAgICBtaXNzaW9uSWRMaXN0OiBbMF0KICAgICAgdG90YWxTaG90RnJpZW5kbHlDb3VudGVyOiAyCiAgICAgIG1vbnRoc1NlcnZpY2U6IDIKICAgICAgc2hvdEF0Q291bnRlclRvdGFsOiAxCiAgICAgIGhpdENvdW50ZXJUb3RhbDogMQogICAgICBzaG90c0ZpcmVkQ291bnRlclRvdGFsOiAxMwogICAgICBzaG90c0xhbmRlZENvdW50ZXJUb3RhbDogMgogICAgICBraWxsZWRJbkFjdGlvbjogMQogICAgY29ycHNlUmVjb3ZlcmVkOiB0cnVlCiAgLSB0eXBlOiBTVFJfU09MRElFUgogICAgaWQ6IDUKICAgIG5hbWU6IE1pcm9zbGF2IEF0YW5hc292CiAgICBjb29wYmFzZTogLTEKICAgIGNvb3A6IDAKICAgIGNvb3BjcmFmdDogLTEKICAgIGNvb3BjcmFmdHR5cGU6ICcnCiAgICBjb29wbmFtZTogTWlyb3NsYXYgQXRhbmFzb3YKICAgIG93bmVycGxheWVyaWQ6IDk5OQogICAgbmF0aW9uYWxpdHk6IDUKICAgIGluaXRpYWxTdGF0czoKICAgICAgdHU6IDU5CiAgICAgIHN0YW1pbmE6IDYzCiAgICAgIGhlYWx0aDogMjkKICAgICAgYnJhdmVyeTogNTAKICAgICAgcmVhY3Rpb25zOiA1NAogICAgICBmaXJpbmc6IDQ5CiAgICAgIHRocm93aW5nOiA1NgogICAgICBzdHJlbmd0aDogMjIKICAgICAgcHNpU3RyZW5ndGg6IDY5CiAgICAgIHBzaVNraWxsOiAwCiAgICAgIG1lbGVlOiAzNwogICAgICBtYW5hOiAwCiAgICBjdXJyZW50U3RhdHM6CiAgICAgIHR1OiA1OQogICAgICBzdGFtaW5hOiA2MwogICAgICBoZWFsdGg6IDI5CiAgICAgIGJyYXZlcnk6IDUwCiAgICAgIHJlYWN0aW9uczogNTQKICAgICAgZmlyaW5nOiA0OQogICAgICB0aHJvd2luZzogNTYKICAgICAgc3RyZW5ndGg6IDIyCiAgICAgIHBzaVN0cmVuZ3RoOiA2OQogICAgICBwc2lTa2lsbDogMAogICAgICBtZWxlZTogMzcKICAgICAgbWFuYTogMAogICAgcmFuazogMAogICAgZ2VuZGVyOiAwCiAgICBsb29rOiAxCiAgICBsb29rVmFyaWFudDogNTAKICAgIG1pc3Npb25zOiAxCiAgICBraWxsczogMwogICAgc3R1bnM6IDAKICAgIGFybW9yOiBTVFJfTk9ORV9VQwogICAgaW1wcm92ZW1lbnQ6IDAKICAgIHBzaVN0ckltcHJvdmVtZW50OiAwCiAgICBkZWF0aDoKICAgICAgdGltZToge3NlY29uZDogNDUsbWludXRlOiA0Mixob3VyOiAxMyx3ZWVrZGF5OiA1LGRheTogMTgsbW9udGg6IDMseWVhcjogMTk5OX0KICAgICAgY2F1c2U6IHt0eXBlOiBTVFJfU0VDVE9JRF9OQVZJR0FUT1IscmFuazogU1RSX0xJVkVfTkFWSUdBVE9SLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX0hFQVZZX1BMQVNNQSx3ZWFwb25BbW1vOiBTVFJfSEVBVllfUExBU01BX0NMSVAsc3RhdHVzOiA2LGZhY3Rpb246IDEsbWlzc2lvbjogMCx0dXJuOiA0NSxzaWRlOiAwLGJvZHlwYXJ0OiAxLGlkOiA1fQogICAgZGlhcnk6CiAgICAgIGtpbGxMaXN0OgogICAgICAgIC0ge3R5cGU6IFNUUl9TRUNUT0lEX01FRElDLHJhbms6IFNUUl9MSVZFX01FRElDLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX1JJRkxFLHdlYXBvbkFtbW86IFNUUl9SSUZMRV9DTElQLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogMTgsc2lkZTogMixib2R5cGFydDogMixpZDogMTAwMDAwN30KICAgICAgICAtIHt0eXBlOiBTVFJfQ1lCRVJESVNDX1RFUlJPUklTVCxyYW5rOiBTVFJfTElWRV9URVJST1JJU1QscmFjZTogU1RSX0NZQkVSRElTQyx3ZWFwb246IFNUUl9SSUZMRSx3ZWFwb25BbW1vOiBTVFJfUklGTEVfQ0xJUCxzdGF0dXM6IDYsZmFjdGlvbjogMSxtaXNzaW9uOiAwLHR1cm46IDI3LHNpZGU6IDAsYm9keXBhcnQ6IDEsaWQ6IDEwMDAwMTF9CiAgICAgICAgLSB7dHlwZTogU1RSX1NFQ1RPSURfU09MRElFUixyYW5rOiBTVFJfTElWRV9TT0xESUVSLHJhY2U6IFNUUl9TRUNUT0lELHdlYXBvbjogU1RSX1JJRkxFLHdlYXBvbkFtbW86IFNUUl9SSUZMRV9DTElQLHN0YXR1czogNixmYWN0aW9uOiAxLG1pc3Npb246IDAsdHVybjogMzMsc2lkZTogMSxib2R5cGFydDogNSxpZDogMTAwMDAwMH0KICAgICAgbWlzc2lvbklkTGlzdDogWzBdCiAgICAgIG1vbnRoc1NlcnZpY2U6IDIKICAgICAgc2hvdEF0Q291bnRlclRvdGFsOiAxCiAgICAgIGhpdENvdW50ZXJUb3RhbDogMQogICAgICBsb3dBY2N1cmFjeUhpdENvdW50ZXJUb3RhbDogMgogICAgICBzaG90c0ZpcmVkQ291bnRlclRvdGFsOiAyNgogICAgICBzaG90c0xhbmRlZENvdW50ZXJUb3RhbDogNgogICAgICBraWxsZWRJbkFjdGlvbjogMQogICAgY29ycHNlUmVjb3ZlcmVkOiB0cnVlCm1pc3Npb25TdGF0aXN0aWNzOgogIC0gaWQ6IDAKICAgIG1hcmtlck5hbWU6IFNUUl9XQVlfUE9JTlRfCiAgICBtYXJrZXJJZDogMQogICAgdGltZToge3NlY29uZDogNDUsbWludXRlOiA0Mixob3VyOiAxMyx3ZWVrZGF5OiA1LGRheTogMTgsbW9udGg6IDMseWVhcjogMTk5OX0KICAgIHJlZ2lvbjogU1RSX0VVUk9QRQogICAgY291bnRyeTogU1RSX1VOS05PV04KICAgIHR5cGU6IFNUUl9VRk9fR1JPVU5EX0FTU0FVTFQKICAgIHVmbzogTk9fVUZPCiAgICBzdWNjZXNzOiB0cnVlCiAgICBzY29yZTogMzE5CiAgICByYXRpbmc6IFNUUl9SQVRJTkdfR09PRAogICAgYWxpZW5SYWNlOiBTVFJfVU5LTk9XTgogICAgZGF5bGlnaHQ6IDAKICAgIGluanVyeUxpc3Q6CiAgICAgIDIyOiAyMgogICAgICAyMzogMTAKICAgIGxvb3RWYWx1ZTogMQpvcHRpb25zOgogIGRpc3BsYXlXaWR0aDogMjU2MAogIGRpc3BsYXlIZWlnaHQ6IDE0NDAKICBmdWxsc2NyZWVuOiB0cnVlCiAgYXN5bmNCbGl0OiB0cnVlCiAga2V5Ym9hcmRNb2RlOiAxCiAgbWF4RnJhbWVTa2lwOiAwCiAgdHJhY2VBSTogZmFsc2UKICB2ZXJib3NlTG9nZ2luZzogZmFsc2UKICBTdGVyZW9Tb3VuZDogdHJ1ZQogIGdlb3NjYXBlU2NhbGU6IDQKICBiYXR0bGVzY2FwZVNjYWxlOiA0CiAgdXNlU2NhbGVGaWx0ZXI6IGZhbHNlCiAgdXNlSFFYRmlsdGVyOiBmYWxzZQogIHVzZVhCUlpGaWx0ZXI6IHRydWUKICB1c2VPcGVuR0w6IGZhbHNlCiAgY2hlY2tPcGVuR0xFcnJvcnM6IGZhbHNlCiAgdXNlT3BlbkdMU2hhZGVyOiBTaGFkZXJzL1Jhdy5PcGVuR0wuc2hhZGVyCiAgdXNlT3BlbkdMU21vb3RoaW5nOiB0cnVlCiAgZGVidWc6IGZhbHNlCiAgZGVidWdVaTogZmFsc2UKICBzb3VuZFZvbHVtZTogODQKICBtdXNpY1ZvbHVtZTogODQKICB1aVZvbHVtZTogNDIKICBsYW5ndWFnZTogZW4tR0IKICBiYXR0bGVTY3JvbGxTcGVlZDogOAogIGJhdHRsZUVkZ2VTY3JvbGw6IDIKICBiYXR0bGVEcmFnU2Nyb2xsQnV0dG9uOiAwCiAgZHJhZ1Njcm9sbFRpbWVUb2xlcmFuY2U6IDMwMAogIGRyYWdTY3JvbGxQaXhlbFRvbGVyYW5jZTogMTAKICBiYXR0bGVGaXJlU3BlZWQ6IDYKICBiYXR0bGVYY29tU3BlZWQ6IDMwCiAgYmF0dGxlQWxpZW5TcGVlZDogMzAKICBiYXR0bGVOZXdQcmV2aWV3UGF0aDogNwogIGZwc0NvdW50ZXI6IGZhbHNlCiAgZ2xvYmVEZXRhaWw6IHRydWUKICBnbG9iZVJhZGFyTGluZXM6IHRydWUKICBnbG9iZUZsaWdodFBhdGhzOiB0cnVlCiAgZ2xvYmVBbGxSYWRhcnNPbkJhc2VCdWlsZDogdHJ1ZQogIGF1ZGlvU2FtcGxlUmF0ZTogMjIwNTAKICBhdWRpb0JpdERlcHRoOiAxNgogIGF1ZGlvQ2h1bmtTaXplOiAxMDI0CiAgcGF1c2VNb2RlOiAwCiAgYmF0dGxlTm90aWZ5RGVhdGg6IGZhbHNlCiAgc2hvd0Z1bmRzT25HZW9zY2FwZTogZmFsc2UKICBhbGxvd1Jlc2l6ZTogZmFsc2UKICB3aW5kb3dlZE1vZGVQb3NpdGlvblg6IDAKICB3aW5kb3dlZE1vZGVQb3NpdGlvblk6IDAKICBib3JkZXJsZXNzOiBmYWxzZQogIGNhcHR1cmVNb3VzZTogdHJ1ZQogIGJhdHRsZVRvb2x0aXBzOiB0cnVlCiAga2VlcEFzcGVjdFJhdGlvOiB0cnVlCiAgbm9uU3F1YXJlUGl4ZWxSYXRpbzogZmFsc2UKICBjdXJzb3JJbkJsYWNrQmFuZHNJbkZ1bGxzY3JlZW46IGZhbHNlCiAgY3Vyc29ySW5CbGFja0JhbmRzSW5XaW5kb3c6IHRydWUKICBjdXJzb3JJbkJsYWNrQmFuZHNJbkJvcmRlcmxlc3NXaW5kb3c6IGZhbHNlCiAgc2F2ZU9yZGVyOiAzCiAgZ2VvQ2xvY2tTcGVlZDogODAKICBkb2dmaWdodFNwZWVkOiAzMAogIGdlb1Njcm9sbFNwZWVkOiAyMAogIGdlb0RyYWdTY3JvbGxCdXR0b246IDIKICBwcmVmZXJyZWRNdXNpYzogMAogIHByZWZlcnJlZFNvdW5kOiAwCiAgcHJlZmVycmVkVmlkZW86IDAKICB3b3Jkd3JhcDogMAogIG11c2ljQWx3YXlzTG9vcDogZmFsc2UKICB0b3VjaEVuYWJsZWQ6IGZhbHNlCiAgcm9vdFdpbmRvd2VkTW9kZTogZmFsc2UKICBiYWNrZ3JvdW5kTXV0ZTogZmFsc2UKICBzb2xkaWVyRGlhcmllczogdHJ1ZQogIHBsYXlJbnRybzogdHJ1ZQogIGF1dG9zYXZlOiB0cnVlCiAgYXV0b3NhdmVGcmVxdWVuY3k6IDUKICBuZXdTZWVkT25Mb2FkOiBmYWxzZQogIGxhenlMb2FkUmVzb3VyY2VzOiB0cnVlCiAgbW91c2V3aGVlbFNwZWVkOiAzCiAgY2hhbmdlVmFsdWVCeU1vdXNlV2hlZWw6IDAKICBtYXhpbWl6ZUluZm9TY3JlZW5zOiBmYWxzZQogIEZQUzogNjAKICBGUFNJbmFjdGl2ZTogMzAKICB2U3luY0Zvck9wZW5HTDogdHJ1ZQogIGdlb0RyYWdTY3JvbGxJbnZlcnQ6IGZhbHNlCiAgYWdncmVzc2l2ZVJldGFsaWF0aW9uOiBmYWxzZQogIGN1c3RvbUluaXRpYWxCYXNlOiBmYWxzZQogIGFsbG93QnVpbGRpbmdRdWV1ZTogZmFsc2UKICBjcmFmdExhdW5jaEFsd2F5czogZmFsc2UKICBzdG9yYWdlTGltaXRzRW5mb3JjZWQ6IGZhbHNlCiAgY2FuU2VsbExpdmVBbGllbnM6IGZhbHNlCiAgYW55dGltZVBzaVRyYWluaW5nOiBmYWxzZQogIGdsb2JlU2Vhc29uczogZmFsc2UKICBnbG9iZVN1cmZhY2VDYWNoZTogdHJ1ZQogIHBzaVN0cmVuZ3RoRXZhbDogZmFsc2UKICBjYW5UcmFuc2ZlckNyYWZ0c1doaWxlQWlyYm9ybmU6IGZhbHNlCiAgcmV0YWluQ29ycHNlczogZmFsc2UKICBmaWVsZFByb21vdGlvbnM6IGZhbHNlCiAgYmF0dGxlRHJhZ1Njcm9sbEludmVydDogZmFsc2UKICBzbmVha3lBSTogZmFsc2UKICBiYXR0bGVVRk9FeHRlbmRlckFjY3VyYWN5OiBmYWxzZQogIHNob3dNb3JlU3RhdHNJbkludmVudG9yeVZpZXc6IGZhbHNlCiAgYmF0dGxlSGFpckJsZWFjaDogdHJ1ZQogIGJhdHRsZUluc3RhbnRHcmVuYWRlOiBmYWxzZQogIGluY2x1ZGVQcmltZVN0YXRlSW5TYXZlZExheW91dDogZmFsc2UKICBiYXR0bGVFeHBsb3Npb25IZWlnaHQ6IDAKICBiYXR0bGVBdXRvRW5kOiBmYWxzZQogIGJhdHRsZVNtb290aENhbWVyYTogZmFsc2UKICBkaXNhYmxlQXV0b0VxdWlwOiBmYWxzZQogIGJhdHRsZUNvbmZpcm1GaXJlTW9kZTogZmFsc2UKICB3ZWFwb25TZWxmRGVzdHJ1Y3Rpb246IGZhbHNlCiAgYWxsb3dQc2lvbmljQ2FwdHVyZTogZmFsc2UKICBhbGxvd1BzaVN0cmVuZ3RoSW1wcm92ZW1lbnQ6IGZhbHNlCiAgc3RyYWZlOiBmYWxzZQogIGZvcmNlRmlyZTogdHJ1ZQogIHNraXBOZXh0VHVyblNjcmVlbjogZmFsc2UKICBub0FsaWVuUGFuaWNNZXNzYWdlczogZmFsc2UKICBhbGllbkJsZWVkaW5nOiBmYWxzZQogIGtleU9rOiAxMwogIGtleUNhbmNlbDogMjcKICBrZXlTY3JlZW5zaG90OiAyOTMKICBrZXlGcHM6IDI4OAogIGtleVF1aWNrU2F2ZTogMjg2CiAga2V5UXVpY2tMb2FkOiAyOTAKICBrZXlHZW9MZWZ0OiAyNzYKICBrZXlHZW9SaWdodDogMjc1CiAga2V5R2VvVXA6IDI3MwogIGtleUdlb0Rvd246IDI3NAogIGtleUdlb1pvb21JbjogNDMKICBrZXlHZW9ab29tT3V0OiA0NQogIGtleUdlb1NwZWVkMTogNDkKICBrZXlHZW9TcGVlZDI6IDUwCiAga2V5R2VvU3BlZWQzOiA1MQogIGtleUdlb1NwZWVkNDogNTIKICBrZXlHZW9TcGVlZDU6IDUzCiAga2V5R2VvU3BlZWQ2OiA1NAogIGtleUdlb0ludGVyY2VwdDogMTA1CiAga2V5R2VvQmFzZXM6IDk4CiAga2V5R2VvR3JhcGhzOiAxMDMKICBrZXlHZW9VZm9wZWRpYTogMTE3CiAga2V5R2VvT3B0aW9uczogMjcKICBrZXlHZW9GdW5kaW5nOiAxMDIKICBrZXlHZW9Ub2dnbGVEZXRhaWw6IDkKICBrZXlHZW9Ub2dnbGVSYWRhcjogMTE0CiAga2V5QmFzZVNlbGVjdDE6IDQ5CiAga2V5QmFzZVNlbGVjdDI6IDUwCiAga2V5QmFzZVNlbGVjdDM6IDUxCiAga2V5QmFzZVNlbGVjdDQ6IDUyCiAga2V5QmFzZVNlbGVjdDU6IDUzCiAga2V5QmFzZVNlbGVjdDY6IDU0CiAga2V5QmFzZVNlbGVjdDc6IDU1CiAga2V5QmFzZVNlbGVjdDg6IDU2CiAga2V5QmF0dGxlTGVmdDogMjc2CiAga2V5QmF0dGxlUmlnaHQ6IDI3NQogIGtleUJhdHRsZVVwOiAyNzMKICBrZXlCYXR0bGVEb3duOiAyNzQKICBrZXlCYXR0bGVMZXZlbFVwOiAyODAKICBrZXlCYXR0bGVMZXZlbERvd246IDI4MQogIGtleUJhdHRsZUNlbnRlclVuaXQ6IDI3OAogIGtleUJhdHRsZVByZXZVbml0OiAwCiAga2V5QmF0dGxlTmV4dFVuaXQ6IDkKICBrZXlCYXR0bGVEZXNlbGVjdFVuaXQ6IDkyCiAga2V5QmF0dGxlVXNlTGVmdEhhbmQ6IDExMwogIGtleUJhdHRsZVVzZVJpZ2h0SGFuZDogMTAxCiAga2V5QmF0dGxlSW52ZW50b3J5OiAxMDUKICBrZXlCYXR0bGVNYXA6IDEwOQogIGtleUJhdHRsZU9wdGlvbnM6IDI3CiAga2V5QmF0dGxlRW5kVHVybjogOAogIGtleUJhdHRsZUFib3J0OiA5NwogIGtleUJhdHRsZVN0YXRzOiAxMTUKICBrZXlCYXR0bGVLbmVlbDogMTA3CiAga2V5QmF0dGxlUmVsb2FkOiAxMTQKICBrZXlCYXR0bGVQZXJzb25hbExpZ2h0aW5nOiAxMDgKICBrZXlCYXR0bGVSZXNlcnZlTm9uZTogMjgyCiAga2V5QmF0dGxlUmVzZXJ2ZVNuYXA6IDI4MwogIGtleUJhdHRsZVJlc2VydmVBaW1lZDogMjg0CiAga2V5QmF0dGxlUmVzZXJ2ZUF1dG86IDI4NQogIGtleUJhdHRsZVJlc2VydmVLbmVlbDogMTA2CiAga2V5QmF0dGxlWmVyb1RVczogMTI3CiAga2V5QmF0dGxlQ2VudGVyRW5lbXkxOiA0OQogIGtleUJhdHRsZUNlbnRlckVuZW15MjogNTAKICBrZXlCYXR0bGVDZW50ZXJFbmVteTM6IDUxCiAga2V5QmF0dGxlQ2VudGVyRW5lbXk0OiA1MgogIGtleUJhdHRsZUNlbnRlckVuZW15NTogNTMKICBrZXlCYXR0bGVDZW50ZXJFbmVteTY6IDU0CiAga2V5QmF0dGxlQ2VudGVyRW5lbXk3OiA1NQogIGtleUJhdHRsZUNlbnRlckVuZW15ODogNTYKICBrZXlCYXR0bGVDZW50ZXJFbmVteTk6IDU3CiAga2V5QmF0dGxlQ2VudGVyRW5lbXkxMDogNDgKICBrZXlCYXR0bGVWb3hlbFZpZXc6IDI5MQogIGtleUludkNyZWF0ZVRlbXBsYXRlOiA5OQogIGtleUludkFwcGx5VGVtcGxhdGU6IDExOAogIGtleUludkNsZWFyOiAxMjAKICBrZXlJbnZBdXRvRXF1aXA6IDEyMgogIG94Y2VNb2RWYWxpZGF0aW9uTGV2ZWw6IDIKICBveGNlUmF3U2NyZWVuU2hvdHM6IGZhbHNlCiAgb3hjZUZpcnN0UGVyc29uVmlld0Zpc2hleWVQcm9qZWN0aW9uOiBmYWxzZQogIG94Y2VUaHVtYkJ1dHRvbnM6IHRydWUKICBveGNlVGhyb3R0bGVNb3VzZU1vdmVFdmVudDogMAogIG94Y2VEaXNhYmxlVGhpbmtpbmdQcm9ncmVzc0JhcjogZmFsc2UKICBveGNlRW1iZWRkZWRPbmx5OiBmYWxzZQogIG94Y2VMaXN0VkZTQ29udGVudHM6IGZhbHNlCiAgb3hjZUVuYWJsZVBhbGV0dGVGbGlja2VyRml4OiBmYWxzZQogIG94Y2VSZWNvbW1lbmRlZE9wdGlvbnNXZXJlU2V0OiBmYWxzZQogIHBhc3N3b3JkOiBzZWNyZXQKICBveGNlU3RhcnRVcFRleHRNb2RlOiAwCiAgb3hjZUdlb3NjYXBlRGVidWdMb2dNYXhFbnRyaWVzOiAxMDAwCiAgb3hjZUdlb1Nsb3dkb3duRmFjdG9yOiAxCiAgb3hjZUdlb1Nob3dTY29yZUluc3RlYWRPZkZ1bmRzOiBmYWxzZQogIG94Y2VHZW9FbmFibGVUcmFpbmluZ0luZGljYXRvcjogZmFsc2UKICBveGNlR2VvU3VwcHJlc3NSZWR1bmRhbnRIS0FsZXJ0OiB0cnVlCiAgb3hjZUdlb1N1cHByZXNzTGFuZGluZ1dpdGhvdXRFcXVpcG1lbnQ6IGZhbHNlCiAgb3hjZUdlb0dvVG9OZWFyZXN0QmFzZTogZmFsc2UKICBveGNlR2VvU29ydENyYWZ0QnlEaXN0YW5jZVRvVGFyZ2V0OiBmYWxzZQogIG94Y2VCYXNlSW5mb0RlZmVuc2VTY2FsZU11bHRpcGxpZXI6IDEwMAogIG94Y2VCYXNlU29sZGllclRyYW5zZm9ybWF0aW9uU2hvd09ubHlFbGlnaWJsZTogZmFsc2UKICBveGNlQmFzZUZpbHRlclJlc2VhcmNoYWJsZTogZmFsc2UKICBveGNlQmFzZU1hbnVmYWN0dXJlRmFsbGJhY2tCdXR0b246IGZhbHNlCiAgb3hjZUJhc2VNYW51ZmFjdHVyZUluZmluaXR5QnV0dG9uOiBmYWxzZQogIG94Y2VCYXNlVG91Y2hCdXR0b25zOiBmYWxzZQogIG94Y2VEaXNhYmxlQWxpZW5JbnZlbnRvcnk6IGZhbHNlCiAgb3hjZURpc2FibGVIaXRMb2c6IGZhbHNlCiAgb3hjZURpc2FibGVJbnZlbnRvcnlUdUNvc3Q6IGZhbHNlCiAgb3hjZURpc2FibGVQcm9kdWN0aW9uRGVwZW5kZW5jeVRyZWU6IGZhbHNlCiAgb3hjZURpc2FibGVTdGF0c0Zvck5lcmRzOiBmYWxzZQogIG94Y2VEaXNhYmxlVGVjaFRyZWVWaWV3ZXI6IGZhbHNlCiAgb3hjZVRvZ2dsZVBlcnNvbmFsTGlnaHRUeXBlOiAxCiAgb3hjZVRvZ2dsZU5pZ2h0VmlzaW9uVHlwZTogMQogIG94Y2VUb2dnbGVCcmlnaHRuZXNzVHlwZTogMAogIG94Y2VTaG93QnVybmluZ0FzV291bmRlZDogZmFsc2UKICBveGNlRGlzYWJsZUluZm9PblRocm93Q3Vyc29yOiBmYWxzZQogIG94Y2VTd2FwRG9udFJlc2VsZWN0QWN0aW9uczogZmFsc2UKICBveGNlRW5hYmxlVW5pdFJlc3BvbnNlU291bmRzOiB0cnVlCiAgb3hjZUhpZGRlbk1vdmVtZW50QmFja2dyb3VuZENoYW5nZUZyZXF1ZW5jeTogMQogIG94Y2VJbnZlbnRvcnlTaG93VW5pdFNsb3Q6IGZhbHNlCiAgb3hjZVJlcGxhY2VOb3Rlc0xpbms6IGZhbHNlCiAgb3hjZUludmVudG9yeVNwbGl0U2Nyb2xsQnV0dG9uOiBmYWxzZQogIG94Y2VJbnZlbnRvcnlEcm9wSXRlbU92ZXJQYXBlcmRvbGw6IGZhbHNlCiAgb3hjZU1heEVxdWlwbWVudExheW91dFRlbXBsYXRlczogMjAKICBveGNlVXBkYXRlQ2hlY2s6IGZhbHNlCiAgYXV0b3NhdmVTbG90czogMQogIG94Y2VHZW9BdXRvc2F2ZUZyZXF1ZW5jeTogMAogIG94Y2VHZW9BdXRvc2F2ZVNsb3RzOiAxCiAgb3hjZUxpbmtzOiBmYWxzZQogIG94Y2VMaW5rc0Rpc2FibGVUZXh0RWRpdDogZmFsc2UKICBveGNlRmF0RmluZ2VyTGlua3M6IGZhbHNlCiAgb3hjZUJhdHRsZVRvdWNoQnV0dG9uc0VuYWJsZWQ6IGZhbHNlCiAgb3hjZVF1aWNrU2VhcmNoQnV0dG9uOiBmYWxzZQogIG94Y2VIaWdobGlnaHROZXdUb3BpY3M6IHRydWUKICBveGNlUGVkaWFTaG93Q2xpcFNpemU6IGZhbHNlCiAgb3hjZUludGVyY2VwdFRhYmxlU2l6ZTogOAogIG94Y2VFbmFibGVTbGFja2luZ0luZGljYXRvcjogdHJ1ZQogIG94Y2VJbnRlcmNlcHRHdWlNYWludGVuYW5jZVRpbWU6IDIKICBveGNlU2hvd0VUQU1vZGU6IDAKICBveGNlVWZvTGFuZGluZ0FsZXJ0OiBmYWxzZQogIG94Y2VSZW1lbWJlckRpc2FibGVkQ3JhZnRXZWFwb25zOiBmYWxzZQogIG94Y2VHZW9zY2FwZUV2ZW50c0luc3RhbnREZWxpdmVyeTogdHJ1ZQogIG94Y2VTaG93QmFzZU5hbWVJblBvcHVwczogZmFsc2UKICBveGNlQWx0ZXJuYXRlQ3JhZnRFcXVpcG1lbnRNYW5hZ2VtZW50OiBmYWxzZQogIG94Y2VCYXNlSW5mb1NjYWxlRW5hYmxlZDogZmFsc2UKICBveGNlUmVzZWFyY2hTY3JvbGxTcGVlZDogMQogIG94Y2VSZXNlYXJjaFNjcm9sbFNwZWVkV2l0aEN0cmw6IDEwCiAgb3hjZU1hbnVmYWN0dXJlRmlsdGVyU3VwcGxpZXNPSzogZmFsc2UKICBveGNlTWFudWZhY3R1cmVTY3JvbGxTcGVlZDogMQogIG94Y2VNYW51ZmFjdHVyZVNjcm9sbFNwZWVkV2l0aEN0cmw6IDEwCiAgb3hjZVBlcnNvbmFsTGF5b3V0SW5jbHVkaW5nQXJtb3I6IHRydWUKICBveGNlTWFudWFsUHJvbW90aW9uczogZmFsc2UKICBveGNlV291bmRlZERlZmVuZEJhc2VJZjogMTAwCiAgb3hjZVBsYXlCcmllZmluZ011c2ljRHVyaW5nRXF1aXBtZW50OiBmYWxzZQogIG94Y2VOaWdodFZpc2lvbkNvbG9yOiA1CiAgb3hjZUF1dG9OaWdodFZpc2lvblRocmVzaG9sZDogMTUKICBveGNlU2hvd0FjY3VyYWN5T25Dcm9zc2hhaXI6IDEKICBveGNlUmVhY3Rpb25GaXJlVGhyZXNob2xkOiAwCiAgb3hjZUF1dG9TZWxsOiBmYWxzZQogIG94Y2VBdXRvbWF0aWNQcm9tb3Rpb25zOiB0cnVlCiAgb3hjZUVuYWJsZU9mZkNlbnRyZVNob290aW5nOiBmYWxzZQogIG94Y2VVbmlmb3JtU2hvb3RpbmdTcHJlYWQ6IGZhbHNlCiAgb3hjZUNyYXNoZWRPckxhbmRlZDogMAogIGtleVRvZ2dsZVF1aWNrU2VhcmNoOiAxMTMKICBrZXlJbnN0YVNhdmU6IDI4NwogIGtleUdlb1Vmb1RyYWNrZXI6IDExNgogIGtleUdlb1RlY2hUcmVlVmlld2VyOiAxMTMKICBrZXlHZW9HbG9iYWxQcm9kdWN0aW9uOiAxMTIKICBrZXlHZW9HbG9iYWxSZXNlYXJjaDogOTkKICBrZXlHZW9HbG9iYWxBbGllbkNvbnRhaW5tZW50OiAxMDYKICBrZXlHZW9EYWlseVBpbG90RXhwZXJpZW5jZTogMTAxCiAga2V5R3JhcGhzWm9vbUluOiAyNzAKICBrZXlHcmFwaHNab29tT3V0OiAyNjkKICBrZXlCYXNlc2NhcGVCdWlsZE5ld0Jhc2U6IDExMAogIGtleUJhc2VzY2FwZUJhc2VJbmZvcm1hdGlvbjogMTA1CiAga2V5QmFzZXNjYXBlU29sZGllcnM6IDExNQogIGtleUJhc2VzY2FwZUVxdWlwQ3JhZnQ6IDEwMQogIGtleUJhc2VzY2FwZUJ1aWxkRmFjaWxpdGllczogMTAyCiAga2V5QmFzZXNjYXBlUmVzZWFyY2g6IDExNAogIGtleUJhc2VzY2FwZU1hbnVmYWN0dXJlOiAxMDkKICBrZXlCYXNlc2NhcGVUcmFuc2ZlcjogMTE2CiAga2V5QmFzZXNjYXBlUHVyY2hhc2U6IDExMgogIGtleUJhc2VzY2FwZVNlbGw6IDEwOAogIGtleVJlbW92ZVNvbGRpZXJzRnJvbVRyYWluaW5nOiAxMjAKICBrZXlBZGRTb2xkaWVyc1RvVHJhaW5pbmc6IDEyMgogIGtleUNyYWZ0TG9hZG91dFNhdmU6IDI4NgogIGtleUNyYWZ0TG9hZG91dExvYWQ6IDI5MAogIGtleVJlbW92ZVNvbGRpZXJzRnJvbUFsbENyYWZ0czogMTIwCiAga2V5UmVtb3ZlU29sZGllcnNGcm9tQ3JhZnQ6IDEyMgogIGtleVJlbW92ZUVxdWlwbWVudEZyb21DcmFmdDogMTIwCiAga2V5UmVtb3ZlQXJtb3JGcm9tQWxsQ3JhZnRzOiAxMjAKICBrZXlSZW1vdmVBcm1vckZyb21DcmFmdDogMTIyCiAga2V5SW52ZW50b3J5U2F2ZTogMjg2CiAga2V5SW52ZW50b3J5TG9hZDogMjkwCiAga2V5SW52U2F2ZVBlcnNvbmFsRXF1aXBtZW50OiAxMTUKICBrZXlJbnZMb2FkUGVyc29uYWxFcXVpcG1lbnQ6IDEwOAogIGtleUludlNob3dQZXJzb25hbEVxdWlwbWVudDogMTEyCiAga2V5SW52ZW50b3J5QXJtb3I6IDk3CiAga2V5SW52ZW50b3J5QXZhdGFyOiAxMDkKICBrZXlJbnZlbnRvcnlEaWFyeUxpZ2h0OiAxMDAKICBrZXlTZWxsQWxsOiAxMjAKICBrZXlTZWxsQWxsQnV0T25lOiAxMjIKICBrZXlUcmFuc2ZlckFsbDogMTIwCiAga2V5TWFya0FsbEFzU2VlbjogMTIwCiAga2V5QmF0dGxlVW5pdFVwOiAwCiAga2V5QmF0dGxlVW5pdERvd246IDAKICBrZXlCYXR0bGVTaG93TGF5ZXJzOiAwCiAga2V5QmF0dGxlVXNlU3BlY2lhbDogMTE5CiAga2V5QmF0dGxlQWN0aW9uSXRlbTE6IDQ5CiAga2V5QmF0dGxlQWN0aW9uSXRlbTI6IDUwCiAga2V5QmF0dGxlQWN0aW9uSXRlbTM6IDUxCiAga2V5QmF0dGxlQWN0aW9uSXRlbTQ6IDUyCiAga2V5QmF0dGxlQWN0aW9uSXRlbTU6IDUzCiAga2V5TmlnaHRWaXNpb25Ub2dnbGU6IDMwMgogIGtleU5pZ2h0VmlzaW9uSG9sZDogMzIKICBrZXlTZWxlY3RNdXNpY1RyYWNrOiAyNzkKICBFbmFibGVUaW1lU3luYzogdHJ1ZQogIEVuYWJsZUhvc3RPbmx5VGltZVNwZWVkOiBmYWxzZQogIEVuYWJsZVJlc2VhcmNoU3luYzogdHJ1ZQogIFVuYmFsYW5jZWRDcmFmdFNvbGRpZXJzTGltaXQ6IGZhbHNlCiAgRW5hYmxlUmVhY3Rpb25GaXJlUHZwOiB0cnVlCiAgRW5hYmxlT3RoZXJQbGF5ZXJGb290c3RlcHM6IHRydWUKICBFbmFibGVYY29tRXF1aXBtZW50QWxpZW5zUFZQOiB0cnVlCiAgZGVidWdNb2RlOiB0cnVlCiAgbG9nSW5mb1RvRmlsZTogZmFsc2UKICBsb2dQYWNrZXRNZXNzYWdlczogZmFsc2UKICBFbmFibGVIb3RzZWF0RGVidWdNb2RlOiBmYWxzZQogIGtleUNoYXQ6IDI1NwogIGdpdmVVbml0OiAyNTg= +monthsPassed: 2 +daysPassed: 87 +vehiclesLost: 0 +graphRegionToggles: '' +graphCountryToggles: '' +graphFinanceToggles: '' +rng: 6807045937263459365 +funds: + - 1082685 + - 255030 + - 95875 +maintenance: + - 4919000 + - 6944000 + - 0 +userNotes: [] +geoscapeDebugLog: + - 'month: 0 script: gameStart id: 1 type: STR_ALIEN_RESEARCH race: STR_SECTOID region: STR_EUROPE targetZone: -1 targetArea: -1' + - 'month: 0 script: recurringTerror id: 2 type: STR_ALIEN_TERROR race: STR_FLOATER region: STR_NORTH_AFRICA targetZone: 3 targetArea: 0' + - 'gameTime: 1999-01-01 14:00:00 ufoId: 1 ufoType: STR_SMALL_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P0 missionId: 1 missionType: STR_ALIEN_RESEARCH' + - 'gameTime: 1999-01-01 14:30:00 ufoId: 2 ufoType: STR_MEDIUM_SCOUT race: STR_FLOATER region: STR_NORTH_AFRICA trajectory: P1 missionId: 2 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-01-09 16:00:00 ufoId: 3 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P2 missionId: 1 missionType: STR_ALIEN_RESEARCH' + - 'gameTime: 1999-01-10 01:00:00 ufoId: 4 ufoType: STR_LARGE_SCOUT race: STR_FLOATER region: STR_NORTH_AFRICA trajectory: P1 missionId: 2 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-01-17 08:00:00 ufoId: 5 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P4 missionId: 1 missionType: STR_ALIEN_RESEARCH' + - 'gameTime: 1999-01-21 00:30:00 ufoId: 6 ufoType: STR_TERROR_SHIP race: STR_FLOATER region: STR_NORTH_AFRICA trajectory: P0 missionId: 2 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-01-25 19:00:00 ufoId: 7 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P4 missionId: 1 missionType: STR_ALIEN_RESEARCH' + - 'gameTime: 1999-01-28 10:00:00 ufoId: 8 ufoType: STR_TERROR_SHIP race: STR_FLOATER region: STR_NORTH_AFRICA trajectory: P7 missionId: 2 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-01-28 13:51:35 siteId: 1 siteType: STR_TERROR_SITE race: STR_FLOATER region: STR_NORTH_AFRICA city: STR_LAGOS deployment: STR_TERROR_MISSION missionId: 2 missionType: STR_ALIEN_TERROR' + - 'month: 1 script: recurringTerror id: 3 type: STR_ALIEN_TERROR race: STR_SECTOID region: STR_NORTH_AMERICA targetZone: 3 targetArea: 4' + - 'month: 1 script: recon id: 4 type: STR_ALIEN_INFILTRATION race: STR_SECTOID region: STR_EUROPE targetZone: -1 targetArea: -1' + - 'gameTime: 1999-02-01 02:00:00 ufoId: 9 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_NORTH_AMERICA trajectory: P1 missionId: 3 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-02-06 17:00:00 ufoId: 10 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_NORTH_AMERICA trajectory: P1 missionId: 3 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-02-15 14:30:00 ufoId: 11 ufoType: STR_SMALL_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P0 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-02-16 15:00:00 ufoId: 12 ufoType: STR_TERROR_SHIP race: STR_SECTOID region: STR_NORTH_AMERICA trajectory: P0 missionId: 3 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-02-22 18:30:00 ufoId: 13 ufoType: STR_TERROR_SHIP race: STR_SECTOID region: STR_NORTH_AMERICA trajectory: P7 missionId: 3 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-02-22 21:56:40 siteId: 2 siteType: STR_TERROR_SITE race: STR_SECTOID region: STR_NORTH_AMERICA city: STR_HAVANA deployment: STR_TERROR_MISSION missionId: 3 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-02-25 19:00:00 ufoId: 14 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P1 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-02-28 02:00:00 ufoId: 15 ufoType: STR_SMALL_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P8 missionId: 5 missionType: STR_ALIEN_RETALIATION' + - 'month: 2 script: recurringTerror id: 6 type: STR_ALIEN_TERROR race: STR_SECTOID region: STR_NORTH_AFRICA targetZone: 3 targetArea: 1' + - 'month: 2 script: recon id: 7 type: STR_ALIEN_INFILTRATION race: STR_SECTOID region: STR_SOUTH_AMERICA targetZone: -1 targetArea: -1' + - 'gameTime: 1999-03-01 02:00:00 ufoId: 16 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_NORTH_AFRICA trajectory: P1 missionId: 6 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-03-03 03:30:00 ufoId: 17 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P8 missionId: 5 missionType: STR_ALIEN_RETALIATION' + - 'gameTime: 1999-03-08 06:30:00 ufoId: 18 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_NORTH_AFRICA trajectory: P1 missionId: 6 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-03-08 11:30:00 ufoId: 19 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P8 missionId: 5 missionType: STR_ALIEN_RETALIATION' + - 'gameTime: 1999-03-09 17:30:00 ufoId: 20 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P6 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-14 17:00:00 ufoId: 21 ufoType: STR_SMALL_SCOUT race: STR_SECTOID region: STR_SOUTH_AMERICA trajectory: P0 missionId: 7 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-17 10:30:00 ufoId: 22 ufoType: STR_TERROR_SHIP race: STR_SECTOID region: STR_NORTH_AFRICA trajectory: P0 missionId: 6 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-03-18 02:00:00 ufoId: 23 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P7 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-18 02:30:00 ufoId: 24 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P7 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-18 03:00:00 ufoId: 25 ufoType: STR_TERROR_SHIP race: STR_SECTOID region: STR_EUROPE trajectory: P7 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-18 04:30:00 ufoId: 26 ufoType: STR_SUPPLY_SHIP race: STR_SECTOID region: STR_EUROPE trajectory: P7 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-19 15:30:00 ufoId: 27 ufoType: STR_LARGE_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P8 missionId: 5 missionType: STR_ALIEN_RETALIATION' + - 'gameTime: 1999-03-20 10:30:00 ufoId: 28 ufoType: STR_BATTLESHIP race: STR_SECTOID region: STR_EUROPE trajectory: P7 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-20 11:00:00 ufoId: 29 ufoType: STR_BATTLESHIP race: STR_SECTOID region: STR_EUROPE trajectory: P7 missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-20 11:00:00 baseId: 1 baseType: STR_ALIEN_BASE race: STR_SECTOID region: STR_EUROPE deployment: STR_ALIEN_BASE_ASSAULT missionId: 4 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-21 12:30:00 ufoId: 30 ufoType: STR_TERROR_SHIP race: STR_SECTOID region: STR_NORTH_AFRICA trajectory: P7 missionId: 6 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-03-21 16:43:10 siteId: 3 siteType: STR_TERROR_SITE race: STR_SECTOID region: STR_NORTH_AFRICA city: STR_CAIRO deployment: STR_TERROR_MISSION missionId: 6 missionType: STR_ALIEN_TERROR' + - 'gameTime: 1999-03-26 02:30:00 ufoId: 31 ufoType: STR_MEDIUM_SCOUT race: STR_SECTOID region: STR_SOUTH_AMERICA trajectory: P1 missionId: 7 missionType: STR_ALIEN_INFILTRATION' + - 'gameTime: 1999-03-26 16:30:00 ufoId: 32 ufoType: STR_SMALL_SCOUT race: STR_SECTOID region: STR_EUROPE trajectory: P0 missionId: 4 missionType: STR_ALIEN_INFILTRATION' +researchScores: + - 60 + - 571 + - 237 +incomes: + - 6001000 + - 7217000 + - 8070500 +expenditures: + - 6000315 + - 6001655 + - 9190655 +warned: false +togglePersonalLight: true +toggleNightVision: false +toggleBrightness: 0 +globeLon: 0.370247664155669 +globeLat: -0.864975046213319 +globeZoom: 1 +ids: + ALIEN_MISSIONS: 8 + STR_ALIEN_BASE: 2 + STR_CRASH_SITE: 6 + STR_INTERCEPTOR: 3 + STR_LANDING_SITE: 14 + STR_SKYRANGER: 2 + STR_SOLDIER: 35 + STR_TERROR_SITE: 4 + STR_UFO: 17 + STR_UFO_UNIQUE: 33 +countries: + - type: STR_USA + funding: + - 598000 + - 598000 + - 598000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 100 + - 0 + - type: STR_RUSSIA + funding: + - 410000 + - 410000 + - 475000 + activityXcom: + - 0 + - 100 + - -250 + activityAlien: + - 12 + - 3 + - 116 + - type: STR_UK + funding: + - 265000 + - 265000 + - 278000 + activityXcom: + - 0 + - 123 + - 0 + activityAlien: + - 2 + - 4 + - 8 + newPact: true + - type: STR_FRANCE + funding: + - 578000 + - 578000 + - 578000 + activityXcom: + - 0 + - 0 + - 209 + activityAlien: + - 2 + - 2 + - 6 + - type: STR_GERMANY + funding: + - 255000 + - 255000 + - 255000 + activityXcom: + - 0 + - 0 + - 581 + activityAlien: + - 31 + - 3 + - 37 + - type: STR_ITALY + funding: + - 203000 + - 203000 + - 203000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 1 + - 52 + - type: STR_SPAIN + funding: + - 254000 + - 254000 + - 254000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 3 + - 54 + - type: STR_CHINA + funding: + - 463000 + - 463000 + - 463000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 1 + - 3 + - type: STR_JAPAN + funding: + - 607000 + - 607000 + - 607000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 0 + - 0 + - 0 + - type: STR_INDIA + funding: + - 225000 + - 225000 + - 225000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 0 + - 0 + - 0 + - type: STR_BRAZIL + funding: + - 340000 + - 340000 + - 340000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 0 + - 18 + - type: STR_AUSTRALIA + funding: + - 418000 + - 418000 + - 418000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 4 + - 7 + - type: STR_NIGERIA + funding: + - 310000 + - 292000 + - 292000 + activityXcom: + - -79 + - 0 + - 0 + activityAlien: + - 12 + - 0 + - 11 + - type: STR_SOUTH_AFRICA + funding: + - 378000 + - 378000 + - 378000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 0 + - 0 + - 0 + - type: STR_EGYPT + funding: + - 255000 + - 255000 + - 255000 + activityXcom: + - 0 + - 0 + - 143 + activityAlien: + - 3 + - 0 + - 16 + - type: STR_CANADA + funding: + - 442000 + - 442000 + - 442000 + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 3 + - 7 + - 0 +regions: + - type: STR_NORTH_AMERICA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 4 + - 1191 + - 1 + - type: STR_ARCTIC + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 3 + - 6 + - 3 + - type: STR_ANTARCTICA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 6 + - 1 + - 10 + - type: STR_SOUTH_AMERICA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 2 + - 0 + - 92 + - type: STR_EUROPE + activityXcom: + - 265 + - 223 + - 1072 + activityAlien: + - 94 + - 29 + - 366 + - type: STR_NORTH_AFRICA + activityXcom: + - -1 + - 0 + - 143 + activityAlien: + - 134 + - 0 + - 229 + - type: STR_SOUTHERN_AFRICA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 4 + - 0 + - 8 + - type: STR_CENTRAL_ASIA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 6 + - 1 + - 7 + - type: STR_SOUTH_EAST_ASIA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 0 + - 2 + - type: STR_SIBERIA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 0 + - 1 + - 3 + - type: STR_AUSTRALASIA + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 2 + - 6 + - 10 + - type: STR_PACIFIC + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 2 + - 24 + - 7 + - type: STR_NORTH_ATLANTIC + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 3 + - 3 + - 6 + - type: STR_SOUTH_ATLANTIC + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 6 + - 0 + - 3 + - type: STR_INDIAN_OCEAN + activityXcom: + - 0 + - 0 + - 0 + activityAlien: + - 1 + - 0 + - 3 +bases: + - lon: 0.15906423482800125 + lat: -0.9724244388735832 + name: Blacksite-1 + facilities: + - type: STR_ACCESS_LIFT + x: 2 + y: 2 + - type: STR_HANGAR + x: 2 + y: 0 + - type: STR_HANGAR + x: 0 + y: 4 + - type: STR_HANGAR + x: 4 + y: 4 + - type: STR_LIVING_QUARTERS + x: 3 + y: 2 + - type: STR_GENERAL_STORES + x: 2 + y: 3 + - type: STR_LABORATORY + x: 3 + y: 3 + - type: STR_WORKSHOP + x: 4 + y: 3 + - type: STR_SMALL_RADAR_SYSTEM + x: 1 + y: 3 + - type: STR_LIVING_QUARTERS + x: 4 + y: 0 + - type: STR_LIVING_QUARTERS + x: 4 + y: 1 + - type: STR_LIVING_QUARTERS + x: 1 + y: 0 + - type: STR_LIVING_QUARTERS + x: 1 + y: 1 + - type: STR_LABORATORY + x: 2 + y: 4 + - type: STR_GENERAL_STORES + x: 3 + y: 4 + - type: STR_ALIEN_CONTAINMENT + x: 4 + y: 2 + - type: STR_GENERAL_STORES + x: 3 + y: 5 + - type: STR_GENERAL_STORES + x: 2 + y: 5 + soldiers: + - type: STR_SOLDIER + id: 18 + name: Shamim Koinange + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Shamim Koinange + ownerplayerid: 999 + nationality: 21 + initialStats: + tu: 52 + stamina: 56 + health: 34 + bravery: 60 + reactions: 48 + firing: 63 + throwing: 63 + strength: 23 + psiStrength: 75 + psiSkill: 0 + melee: 37 + mana: 0 + currentStats: + tu: 63 + stamina: 66 + health: 39 + bravery: 60 + reactions: 49 + firing: 68 + throwing: 63 + strength: 34 + psiStrength: 75 + psiSkill: 0 + melee: 37 + mana: 0 + rank: 3 + craft: + lon: 0.15906423482800125 + lat: -0.9724244388735832 + type: STR_SKYRANGER + id: 1 + gender: 1 + look: 3 + lookVariant: 60 + missions: 6 + kills: 10 + stuns: 1 + armor: STR_PERSONAL_ARMOR_UC + improvement: 0 + psiStrImprovement: 0 + equipmentLayout: + - {itemType: STR_SMOKE_GRENADE,slot: STR_BELT,slotX: 1} + - {itemType: STR_GRENADE,slot: STR_LEFT_HAND} + - {itemType: STR_HEAVY_PLASMA_CLIP,slot: STR_BELT} + - {itemType: STR_HEAVY_PLASMA,slot: STR_RIGHT_HAND,ammoItem: STR_HEAVY_PLASMA_CLIP,ammoItemSlots: [STR_HEAVY_PLASMA_CLIP]} + diary: + killList: + - {type: STR_REAPER_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_REAPER,weapon: STR_GRENADE,weaponAmmo: STR_GRENADE,status: 6,faction: 1,mission: 3,turn: 906,side: 4,bodypart: 1,id: 1000012} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 924,side: 1,bodypart: 5,id: 1000000} + - {type: STR_FLOATER_MEDIC,rank: STR_LIVE_MEDIC,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 927,side: 0,bodypart: 1,id: 1000006} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 7,faction: 1,mission: 3,turn: 930,side: 0,bodypart: 1,id: 1000004} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 936,side: 1,bodypart: 3,id: 1000004} + - {type: STR_FLOATER_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 937,side: 0,bodypart: 1,id: 1000007} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 942,side: 1,bodypart: 3,id: 1000003} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 4,turn: 1215,side: 0,bodypart: 1,id: 1000001} + - {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 5,turn: 1506,side: 0,bodypart: 1,id: 1000003} + - {type: STR_CYBERDISC_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_CYBERDISC,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 3306,side: 2,bodypart: 2,id: 1000010} + - {type: FEMALE_CIVILIAN,rank: STR_CIVILIAN,race: STR_CIVILIAN,weapon: STR_CYBERDISC_CORPSE,weaponAmmo: STR_CYBERDISC_CORPSE,status: 6,faction: 2,mission: 11,turn: 3306,side: 0,bodypart: 1,id: 1000019} + missionIdList: [2,3,4,5,11,12] + daysWoundedTotal: 17 + monthsService: 2 + shotAtCounterTotal: 4 + hitCounterTotal: 1 + shotsFiredCounterTotal: 41 + shotsLandedCounterTotal: 12 + timesWoundedTotal: 1 + woundsHealedTotal: 3 + statGainTotal: 43 + - type: STR_SOLDIER + id: 21 + name: Harun Sunay + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Harun Sunay + ownerplayerid: 999 + nationality: 33 + initialStats: + tu: 60 + stamina: 62 + health: 32 + bravery: 50 + reactions: 33 + firing: 58 + throwing: 74 + strength: 33 + psiStrength: 51 + psiSkill: 0 + melee: 34 + mana: 0 + currentStats: + tu: 65 + stamina: 72 + health: 42 + bravery: 50 + reactions: 33 + firing: 60 + throwing: 74 + strength: 51 + psiStrength: 51 + psiSkill: 0 + melee: 34 + mana: 0 + rank: 3 + craft: + lon: 0.15906423482800125 + lat: -0.9724244388735832 + type: STR_SKYRANGER + id: 1 + gender: 0 + look: 1 + lookVariant: 37 + missions: 8 + kills: 9 + stuns: 0 + armor: STR_PERSONAL_ARMOR_UC + improvement: 0 + psiStrImprovement: 0 + equipmentLayout: + - {itemType: STR_PROXIMITY_GRENADE,slot: STR_BELT,slotX: 2} + - {itemType: STR_SMOKE_GRENADE,slot: STR_BELT} + - {itemType: STR_GRENADE,slot: STR_BELT,slotX: 1} + - {itemType: STR_MEDI_KIT,slot: STR_LEFT_HAND} + - {itemType: STR_HEAVY_PLASMA_CLIP,slot: STR_BELT,slotX: 3} + - {itemType: STR_HEAVY_PLASMA,slot: STR_RIGHT_HAND,ammoItem: STR_HEAVY_PLASMA_CLIP,ammoItemSlots: [STR_HEAVY_PLASMA_CLIP]} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 4,turn: 1209,side: 3,bodypart: 1,id: 1000003} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 4,turn: 1212,side: 0,bodypart: 1,id: 1000000} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 5,turn: 1506,side: 0,bodypart: 1,id: 1000001} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 6,turn: 1803,side: 3,bodypart: 1,id: 1000001} + - {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 7,turn: 2106,side: 2,bodypart: 2,id: 1000003} + - {type: STR_SECTOID_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 3303,side: 2,bodypart: 2,id: 1000008} + - {type: STR_SECTOID_LEADER,rank: STR_LIVE_LEADER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 3306,side: 0,bodypart: 1,id: 1000009} + - {type: STR_SECTOID_MEDIC,rank: STR_LIVE_MEDIC,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 3312,side: 1,bodypart: 3,id: 1000006} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 12,turn: 3609,side: 3,bodypart: 1,id: 1000000} + missionIdList: [4,5,6,7,8,10,11,12] + monthsService: 2 + shotsFiredCounterTotal: 26 + shotsLandedCounterTotal: 9 + allAliensKilledTotal: 1 + woundsHealedTotal: 9 + statGainTotal: 45 + revivedUnitTotal: 1 + revivedSoldierTotal: 1 + wholeMedikitTotal: 2 + - type: STR_SOLDIER + id: 24 + name: Lucas Figueroa + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Lucas Figueroa + ownerplayerid: 999 + nationality: 2 + initialStats: + tu: 53 + stamina: 57 + health: 39 + bravery: 20 + reactions: 34 + firing: 42 + throwing: 60 + strength: 22 + psiStrength: 43 + psiSkill: 0 + melee: 20 + mana: 0 + currentStats: + tu: 61 + stamina: 61 + health: 46 + bravery: 20 + reactions: 34 + firing: 44 + throwing: 60 + strength: 34 + psiStrength: 43 + psiSkill: 0 + melee: 21 + mana: 0 + rank: 2 + gender: 0 + look: 1 + lookVariant: 14 + missions: 7 + kills: 3 + stuns: 1 + recovery: 3 + armor: STR_PERSONAL_ARMOR_UC + improvement: 0 + psiStrImprovement: 0 + equipmentLayout: + - {itemType: STR_SMOKE_GRENADE,slot: STR_BELT} + - {itemType: STR_GRENADE,slot: STR_LEFT_HAND} + - {itemType: STR_HEAVY_PLASMA_CLIP,slot: STR_BELT,slotX: 1} + - {itemType: STR_HEAVY_PLASMA,slot: STR_RIGHT_HAND,ammoItem: STR_HEAVY_PLASMA_CLIP,ammoItemSlots: [STR_HEAVY_PLASMA_CLIP]} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_STUN_ROD,weaponAmmo: STR_STUN_ROD,status: 7,faction: 1,mission: 5,turn: 1506,side: 3,bodypart: 1,id: 1000000} + - {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 8,turn: 2415,side: 3,bodypart: 1,id: 1000002} + - {type: STR_SECTOID_LEADER,rank: STR_LIVE_LEADER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3039,side: 3,bodypart: 1,id: 1000010} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 3309,side: 0,bodypart: 1,id: 1000001} + missionIdList: [4,5,6,7,8,10,11] + daysWoundedTotal: 10 + totalShotByFriendlyCounter: 1 + monthsService: 1 + shotAtCounterTotal: 6 + hitCounterTotal: 1 + shotsFiredCounterTotal: 17 + shotsLandedCounterTotal: 3 + timesWoundedTotal: 1 + allAliensKilledTotal: 1 + statGainTotal: 34 + - type: STR_SOLDIER + id: 26 + name: Dimitra Hagiorgis + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Dimitra Hagiorgis + ownerplayerid: 999 + nationality: 15 + initialStats: + tu: 60 + stamina: 40 + health: 33 + bravery: 40 + reactions: 46 + firing: 44 + throwing: 50 + strength: 35 + psiStrength: 41 + psiSkill: 0 + melee: 20 + mana: 0 + currentStats: + tu: 60 + stamina: 41 + health: 35 + bravery: 40 + reactions: 46 + firing: 45 + throwing: 50 + strength: 40 + psiStrength: 41 + psiSkill: 0 + melee: 20 + mana: 0 + rank: 2 + gender: 1 + look: 1 + lookVariant: 4 + missions: 6 + kills: 1 + stuns: 1 + recovery: 21 + armor: STR_PERSONAL_ARMOR_UC + improvement: 0 + psiStrImprovement: 0 + equipmentLayout: + - {itemType: STR_ROCKET_LAUNCHER,slot: STR_RIGHT_HAND,ammoItem: STR_LARGE_ROCKET,ammoItemSlots: [STR_LARGE_ROCKET]} + - {itemType: STR_INCENDIARY_ROCKET,slot: STR_BACK_PACK,slotX: 2} + - {itemType: STR_LARGE_ROCKET,slot: STR_BACK_PACK} + - {itemType: STR_SMALL_ROCKET,slot: STR_BACK_PACK,slotX: 1} + - {itemType: STR_GRENADE,slot: STR_BELT} + - {itemType: STR_HIGH_EXPLOSIVE,slot: STR_LEFT_HAND} + - {itemType: STR_HIGH_EXPLOSIVE,slot: STR_RIGHT_LEG} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_ROCKET_LAUNCHER,weaponAmmo: STR_LARGE_ROCKET,status: 7,faction: 1,mission: 7,turn: 2103,side: 1,bodypart: 3,id: 1000001} + - {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_ROCKET_LAUNCHER,weaponAmmo: STR_LARGE_ROCKET,status: 6,faction: 1,mission: 7,turn: 2103,side: 4,bodypart: 1,id: 1000004} + missionIdList: [4,5,6,7,8,10] + daysWoundedTotal: 29 + monthsService: 1 + shotsFiredCounterTotal: 6 + timesWoundedTotal: 1 + statGainTotal: 9 + - type: STR_SOLDIER + id: 10 + name: Thierry Dishi + coopbase: 44840 + coop: 0 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Thierry Dishi + ownerplayerid: 999 + nationality: 7 + initialStats: + tu: 52 + stamina: 64 + health: 33 + bravery: 10 + reactions: 52 + firing: 60 + throwing: 56 + strength: 37 + psiStrength: 20 + psiSkill: 0 + melee: 31 + mana: 0 + currentStats: + tu: 52 + stamina: 64 + health: 33 + bravery: 10 + reactions: 52 + firing: 60 + throwing: 56 + strength: 37 + psiStrength: 20 + psiSkill: 0 + melee: 31 + mana: 0 + rank: 1 + gender: 0 + look: 3 + lookVariant: 11 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + diary: + monthsService: 2 + - type: STR_SOLDIER + id: 11 + name: Tui Haukamau + coopbase: 44840 + coop: 0 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Tui Haukamau + ownerplayerid: 999 + nationality: 26 + initialStats: + tu: 55 + stamina: 57 + health: 26 + bravery: 50 + reactions: 37 + firing: 43 + throwing: 59 + strength: 38 + psiStrength: 50 + psiSkill: 0 + melee: 33 + mana: 0 + currentStats: + tu: 55 + stamina: 57 + health: 26 + bravery: 50 + reactions: 37 + firing: 43 + throwing: 59 + strength: 38 + psiStrength: 50 + psiSkill: 0 + melee: 33 + mana: 0 + rank: 1 + gender: 0 + look: 2 + lookVariant: 7 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + diary: + monthsService: 2 + - type: STR_SOLDIER + id: 14 + name: Goh Lee + coopbase: 44840 + coop: 0 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Goh Lee + ownerplayerid: 999 + nationality: 6 + initialStats: + tu: 60 + stamina: 44 + health: 34 + bravery: 40 + reactions: 43 + firing: 46 + throwing: 56 + strength: 41 + psiStrength: 68 + psiSkill: 0 + melee: 23 + mana: 0 + currentStats: + tu: 60 + stamina: 44 + health: 34 + bravery: 40 + reactions: 43 + firing: 46 + throwing: 56 + strength: 41 + psiStrength: 68 + psiSkill: 0 + melee: 23 + mana: 0 + rank: 1 + gender: 0 + look: 2 + lookVariant: 50 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + diary: + monthsService: 2 + - type: STR_SOLDIER + id: 30 + name: Tudor Sabau + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Tudor Sabau + ownerplayerid: 999 + nationality: 28 + initialStats: + tu: 52 + stamina: 57 + health: 40 + bravery: 20 + reactions: 53 + firing: 48 + throwing: 51 + strength: 38 + psiStrength: 16 + psiSkill: 0 + melee: 32 + mana: 0 + currentStats: + tu: 56 + stamina: 61 + health: 42 + bravery: 20 + reactions: 53 + firing: 48 + throwing: 51 + strength: 38 + psiStrength: 16 + psiSkill: 0 + melee: 32 + mana: 0 + rank: 1 + craft: + lon: 0.15906423482800125 + lat: -0.9724244388735832 + type: STR_SKYRANGER + id: 1 + gender: 0 + look: 0 + lookVariant: 24 + missions: 2 + kills: 3 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + equipmentLayout: + - {itemType: STR_PROXIMITY_GRENADE,slot: STR_BELT} + - {itemType: STR_SMOKE_GRENADE,slot: STR_BELT,slotX: 1} + - {itemType: STR_GRENADE,slot: STR_LEFT_HAND} + - {itemType: STR_ELECTRO_FLARE,slot: STR_BELT,slotX: 3} + - {itemType: STR_HEAVY_PLASMA,slot: STR_RIGHT_HAND,ammoItem: STR_HEAVY_PLASMA_CLIP,ammoItemSlots: [STR_HEAVY_PLASMA_CLIP]} + - {itemType: STR_HEAVY_PLASMA_CLIP,slot: STR_BELT,slotY: 1} + diary: + killList: + - {name: Abu Wasem,rank: STR_ROOKIE,race: STR_FRIENDLY,weapon: STR_HEAVY_CANNON,weaponAmmo: STR_HC_AP_AMMO,status: 6,faction: 0,mission: 11,turn: 3304,side: 2,bodypart: 2,id: 32} + - {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_HEAVY_CANNON,weaponAmmo: STR_HC_AP_AMMO,status: 6,faction: 1,mission: 11,turn: 3309,side: 2,bodypart: 2,id: 1000005} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_CANNON,weaponAmmo: STR_HC_AP_AMMO,status: 6,faction: 1,mission: 11,turn: 3309,side: 0,bodypart: 1,id: 1000002} + missionIdList: [11,12] + totalShotFriendlyCounter: 2 + shotsFiredCounterTotal: 6 + shotsLandedCounterTotal: 4 + statGainTotal: 10 + - type: STR_SOLDIER + id: 31 + name: Dilara Zorlu + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Dilara Zorlu + ownerplayerid: 999 + nationality: 33 + initialStats: + tu: 53 + stamina: 46 + health: 31 + bravery: 30 + reactions: 32 + firing: 56 + throwing: 55 + strength: 26 + psiStrength: 76 + psiSkill: 0 + melee: 32 + mana: 0 + currentStats: + tu: 53 + stamina: 46 + health: 31 + bravery: 30 + reactions: 32 + firing: 56 + throwing: 55 + strength: 26 + psiStrength: 76 + psiSkill: 0 + melee: 32 + mana: 0 + rank: 0 + craft: + lon: 0.15906423482800125 + lat: -0.9724244388735832 + type: STR_SKYRANGER + id: 1 + gender: 1 + look: 0 + lookVariant: 6 + missions: 2 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + equipmentLayout: + - {itemType: STR_ROCKET_LAUNCHER,slot: STR_RIGHT_HAND,ammoItem: STR_SMALL_ROCKET,ammoItemSlots: [STR_SMALL_ROCKET]} + - {itemType: STR_INCENDIARY_ROCKET,slot: STR_BACK_PACK} + - {itemType: STR_LARGE_ROCKET,slot: STR_BACK_PACK,slotX: 1} + - {itemType: STR_SMALL_ROCKET,slot: STR_BACK_PACK,slotX: 2} + - {itemType: STR_GRENADE,slot: STR_LEFT_HAND} + diary: + missionIdList: [11,12] + coopbaseid: 78735 + crafts: + - lon: 0.15906423482800125 + lat: -0.9724244388735832 + id: 1 + speedLon: 0 + speedLat: 0 + speedRadian: 0 + speed: 0 + type: STR_SKYRANGER + fuel: 1500 + damage: 0 + shield: 0 + coopItems: + - {id: 0,name: STR_RIFLE,owner: true} + - {id: 1,name: STR_RIFLE,owner: true} + - {id: 2,name: STR_RIFLE,owner: true} + - {id: 3,name: STR_RIFLE,owner: true} + - {id: 4,name: STR_RIFLE,owner: true} + - {id: 5,name: STR_RIFLE,owner: true} + - {id: 0,name: STR_HEAVY_CANNON,owner: true} + - {id: 1,name: STR_HC_AP_AMMO,owner: true} + - {id: 3,name: STR_RIFLE_CLIP,owner: true} + - {id: 4,name: STR_RIFLE_CLIP,owner: true} + - {id: 5,name: STR_RIFLE_CLIP,owner: true} + - {id: 6,name: STR_RIFLE_CLIP,owner: true} + - {id: 7,name: STR_RIFLE_CLIP,owner: true} + - {id: 8,name: STR_RIFLE_CLIP,owner: true} + - {id: 0,name: STR_HC_HE_AMMO,owner: true} + - {id: 0,name: STR_GRENADE,owner: true} + - {id: 1,name: STR_GRENADE,owner: true} + - {id: 2,name: STR_GRENADE,owner: true} + - {id: 3,name: STR_GRENADE,owner: true} + - {id: 4,name: STR_GRENADE,owner: true} + - {id: 5,name: STR_GRENADE,owner: true} + - {id: 0,name: STR_PISTOL,owner: true} + - {id: 1,name: STR_PISTOL,owner: true} + - {id: 2,name: STR_PISTOL,owner: true} + - {id: 3,name: STR_PISTOL_CLIP,owner: true} + - {id: 4,name: STR_PISTOL_CLIP,owner: true} + - {id: 9,name: STR_RIFLE_CLIP,owner: true} + - {id: 10,name: STR_RIFLE_CLIP,owner: true} + - {id: 11,name: STR_RIFLE_CLIP,owner: true} + - {id: 6,name: STR_GRENADE,owner: true} + - {id: 7,name: STR_GRENADE,owner: true} + - {id: 6,name: STR_RIFLE,owner: true} + - {id: 7,name: STR_RIFLE,owner: true} + - {id: 1,name: STR_HEAVY_CANNON,owner: true} + - {id: 0,name: STR_ROCKET_LAUNCHER,owner: true} + - {id: 0,name: STR_AUTO_CANNON,owner: true} + - {id: 0,name: STR_PISTOL_CLIP,owner: true} + - {id: 1,name: STR_PISTOL_CLIP,owner: true} + - {id: 0,name: STR_HC_AP_AMMO,owner: true} + - {id: 3,name: STR_HC_AP_AMMO,owner: true} + - {id: 12,name: STR_RIFLE_CLIP,owner: true} + - {id: 13,name: STR_RIFLE_CLIP,owner: true} + - {id: 14,name: STR_RIFLE_CLIP,owner: true} + - {id: 15,name: STR_RIFLE_CLIP,owner: true} + - {id: 1,name: STR_HC_HE_AMMO,owner: true} + - {id: 1,name: STR_AC_AP_AMMO,owner: true} + - {id: 1,name: STR_SMALL_ROCKET,owner: true} + - {id: 2,name: STR_PISTOL_CLIP,owner: true} + - {id: 2,name: STR_AC_AP_AMMO,owner: true} + - {id: 2,name: STR_SMALL_ROCKET,owner: true} + - {id: 0,name: STR_SMOKE_GRENADE,owner: true} + - {id: 1,name: STR_SMOKE_GRENADE,owner: true} + - {id: 2,name: STR_SMOKE_GRENADE,owner: true} + - {id: 3,name: STR_SMOKE_GRENADE,owner: true} + - {id: 4,name: STR_SMOKE_GRENADE,owner: true} + - {id: 8,name: STR_GRENADE,owner: true} + - {id: 9,name: STR_GRENADE,owner: true} + - {id: 10,name: STR_GRENADE,owner: true} + - {id: 11,name: STR_GRENADE,owner: true} + - {id: 2,name: STR_HC_AP_AMMO,owner: true} + - {id: 4,name: STR_HC_AP_AMMO,owner: true} + - {id: 1,name: STR_ROCKET_LAUNCHER,owner: true} + - {id: 2,name: STR_ROCKET_LAUNCHER,owner: true} + - {id: 0,name: STR_STUN_ROD,owner: true} + - {id: 0,name: STR_LARGE_ROCKET,owner: true} + - {id: 1,name: STR_LARGE_ROCKET,owner: true} + - {id: 0,name: STR_INCENDIARY_ROCKET,owner: true} + - {id: 1,name: STR_INCENDIARY_ROCKET,owner: true} + - {id: 5,name: STR_SMOKE_GRENADE,owner: true} + - {id: 0,name: STR_PROXIMITY_GRENADE,owner: true} + - {id: 1,name: STR_PROXIMITY_GRENADE,owner: true} + - {id: 0,name: STR_HIGH_EXPLOSIVE,owner: true} + - {id: 1,name: STR_HIGH_EXPLOSIVE,owner: true} + - {id: 0,name: STR_MEDI_KIT,owner: true} + - {id: 0,name: STR_ELECTRO_FLARE,owner: true} + - {id: 1,name: STR_ELECTRO_FLARE,owner: true} + - {id: 1,name: STR_AUTO_CANNON,owner: true} + - {id: 1,name: STR_PLASMA_RIFLE,owner: true} + - {id: 2,name: STR_PLASMA_RIFLE,owner: true} + - {id: 3,name: STR_PLASMA_RIFLE,owner: true} + - {id: 4,name: STR_PLASMA_RIFLE,owner: true} + - {id: 5,name: STR_PLASMA_RIFLE,owner: true} + - {id: 6,name: STR_PLASMA_RIFLE,owner: true} + - {id: 3,name: STR_AC_AP_AMMO,owner: true} + - {id: 0,name: STR_AC_HE_AMMO,owner: true} + - {id: 1,name: STR_AC_HE_AMMO,owner: true} + - {id: 0,name: STR_AC_I_AMMO,owner: true} + - {id: 1,name: STR_AC_I_AMMO,owner: true} + - {id: 9,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 4,name: STR_AC_AP_AMMO,owner: true} + - {id: 2,name: STR_AC_HE_AMMO,owner: true} + - {id: 12,name: STR_GRENADE,owner: true} + - {id: 0,name: STR_HEAVY_PLASMA,owner: true} + - {id: 1,name: STR_HEAVY_PLASMA,owner: true} + - {id: 2,name: STR_HEAVY_PLASMA,owner: true} + - {id: 6,name: STR_HEAVY_PLASMA_CLIP,owner: true} + - {id: 7,name: STR_HEAVY_PLASMA_CLIP,owner: true} + - {id: 8,name: STR_HEAVY_PLASMA_CLIP,owner: true} + - {id: 9,name: STR_HEAVY_PLASMA_CLIP,owner: true} + - {id: 10,name: STR_HEAVY_PLASMA_CLIP,owner: true} + - {id: 11,name: STR_HEAVY_PLASMA_CLIP,owner: true} + - {id: 1,name: STR_STUN_ROD,owner: true} + - {id: 20,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 21,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 22,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 23,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 24,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 25,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 0,name: STR_PLASMA_RIFLE,owner: true} + - {id: 26,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 27,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 28,name: STR_PLASMA_RIFLE_CLIP,owner: true} + - {id: 29,name: STR_PLASMA_RIFLE_CLIP,owner: true} + items: + STR_AC_AP_AMMO: 5 + STR_AC_HE_AMMO: 1 + STR_AC_I_AMMO: 2 + STR_AUTO_CANNON: 2 + STR_ELECTRO_FLARE: 2 + STR_GRENADE: 19 + STR_HEAVY_CANNON: 2 + STR_HEAVY_PLASMA: 7 + STR_HEAVY_PLASMA_CLIP: 17 + STR_HIGH_EXPLOSIVE: 2 + STR_INCENDIARY_ROCKET: 1 + STR_LARGE_ROCKET: 1 + STR_MEDI_KIT: 1 + STR_PLASMA_RIFLE: 20 + STR_PLASMA_RIFLE_CLIP: 32 + STR_PROXIMITY_GRENADE: 2 + STR_ROCKET_LAUNCHER: 1 + STR_SMALL_ROCKET: 2 + STR_SMOKE_GRENADE: 6 + STR_STUN_ROD: 2 + status: STR_READY + lonAuto: 0 + latAuto: 0 + - lon: 0.15906423482800125 + lat: -0.9724244388735832 + id: 1 + speedLon: 0 + speedLat: 0 + speedRadian: 0 + speed: 0 + type: STR_INTERCEPTOR + fuel: 1000 + damage: 0 + shield: 0 + weapons: + - type: STR_STINGRAY + ammo: 6 + - type: STR_CANNON_UC + ammo: 200 + items: {} + status: STR_READY + lonAuto: 0 + latAuto: 0 + items: + STR_AC_AP_AMMO: 1 + STR_AC_HE_AMMO: 3 + STR_ALIEN_ALLOYS: 233 + STR_ALIEN_ENTERTAINMENT: 24 + STR_ALIEN_GRENADE: 10 + STR_AVALANCHE_MISSILES: 7 + STR_BLASTER_BOMB: 4 + STR_BLASTER_LAUNCHER: 1 + STR_CANNON: 2 + STR_CANNON_ROUNDS_X50: 7 + STR_CYBERDISC_CORPSE: 2 + STR_ELERIUM_115: 335 + STR_FLOATER_CORPSE: 13 + STR_HC_AP_AMMO: 2 + STR_HEAVY_PLASMA: 4 + STR_HEAVY_PLASMA_CLIP: 19 + STR_INCENDIARY_ROCKET: 1 + STR_LARGE_ROCKET: 2 + STR_MIND_PROBE: 7 + STR_PISTOL: 5 + STR_PISTOL_CLIP: 12 + STR_PLASMA_PISTOL: 38 + STR_PLASMA_PISTOL_CLIP: 55 + STR_PLASMA_RIFLE: 5 + STR_PLASMA_RIFLE_CLIP: 8 + STR_REAPER_CORPSE: 4 + STR_RIFLE: 7 + STR_RIFLE_CLIP: 9 + STR_ROCKET_LAUNCHER: 2 + STR_SECTOID_CORPSE: 57 + STR_SMALL_LAUNCHER: 2 + STR_SMALL_ROCKET: 1 + STR_STINGRAY_LAUNCHER: 2 + STR_STINGRAY_MISSILES: 4 + STR_STUN_BOMB: 3 + STR_UFO_NAVIGATION: 12 + STR_UFO_POWER_SOURCE: 6 + scientists: 0 + engineers: 15 + research: + - project: STR_CYBERDISC_CORPSE + assigned: 37 + spent: 148 + cost: 221 + productions: + - item: STR_MEDI_KIT + assigned: 15 + spent: 9905 + amount: 35 + infinite: false + sell: true + retaliationTarget: true +alienBases: + - lon: 0.4192239865781414 + lat: -0.9025343705741942 + id: 1 + pactCountry: STR_UK + race: STR_SECTOID + deployment: STR_ALIEN_BASE_ASSAULT + startMonth: 2 + minutesSinceLastHuntMissionGeneration: 60 + genMissionCount: 0 +alienMissions: + - type: STR_ALIEN_INFILTRATION + region: STR_EUROPE + race: STR_SECTOID + nextWave: 1 + nextUfoCounter: 0 + spawnCountdown: 30990 + liveUfos: 0 + uniqueID: 4 + missionSiteZone: -1 + - type: STR_ALIEN_RETALIATION + region: STR_EUROPE + race: STR_SECTOID + nextWave: 2 + nextUfoCounter: 1 + spawnCountdown: 330 + liveUfos: 0 + uniqueID: 5 + missionSiteZone: -1 + - type: STR_ALIEN_INFILTRATION + region: STR_SOUTH_AMERICA + race: STR_SECTOID + nextWave: 2 + nextUfoCounter: 0 + spawnCountdown: 11250 + liveUfos: 0 + uniqueID: 7 + missionSiteZone: -1 +discovered: + - STR_ALIEN_ALLOYS + - STR_ELERIUM_115 + - STR_FLOATER_AUTOPSY + - STR_FLOATER_CORPSE + - STR_HEAVY_PLASMA + - STR_HEAVY_PLASMA_CLIP + - STR_LASER_WEAPONS + - STR_MEDI_KIT + - STR_PERSONAL_ARMOR + - STR_PLASMA_CANNON_DEP1 + - STR_PLASMA_CANNON_DEP2 + - STR_PLASMA_RIFLE + - STR_PLASMA_RIFLE_CLIP + - STR_SECTOID_AUTOPSY + - STR_SECTOID_CORPSE + - STR_UFO_NAVIGATION + - STR_UFO_POWER_SOURCE +researchDiary: + - {date: [1999,1,5],name: STR_LASER_WEAPONS,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,1,24],name: STR_HEAVY_PLASMA,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,2,13],name: STR_PLASMA_RIFLE,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,2,28],name: STR_PLASMA_RIFLE_CLIP,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,2,28],name: STR_PLASMA_CANNON_DEP2,sourceType: 2,sourceName: STR_PLASMA_RIFLE_CLIP} + - {date: [1999,3,11],name: STR_HEAVY_PLASMA_CLIP,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,3,11],name: STR_PLASMA_CANNON_DEP1,sourceType: 2,sourceName: STR_HEAVY_PLASMA_CLIP} + - {date: [1999,3,17],name: STR_FLOATER_CORPSE,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,3,17],name: STR_FLOATER_AUTOPSY,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,3,24],name: STR_SECTOID_CORPSE,sourceType: 0,sourceName: Blacksite-1} + - {date: [1999,3,24],name: STR_SECTOID_AUTOPSY,sourceType: 0,sourceName: Blacksite-1} +poppedResearch: + - STR_LASER_PISTOL + - STR_PLASMA_CANNON +generatedEvents: {} +ufopediaRuleStatus: + STR_ACCESS_LIFT: 0 + STR_ALIEN_ALLOYS: 0 + STR_ALIEN_CONTAINMENT: 0 + STR_AUTO_CANNON: 0 + STR_AVALANCHE: 0 + STR_CANNON_UC: 0 + STR_ELECTRO_FLARE: 0 + STR_ELERIUM_115: 1 + STR_FLOATER_AUTOPSY: 1 + STR_GENERAL_STORES: 0 + STR_GRENADE: 0 + STR_HANGAR: 0 + STR_HEAVY_CANNON: 0 + STR_HEAVY_PLASMA: 0 + STR_HEAVY_PLASMA_CLIP: 0 + STR_HIGH_EXPLOSIVE: 0 + STR_INTERCEPTOR: 0 + STR_LABORATORY: 0 + STR_LARGE_RADAR_SYSTEM: 0 + STR_LIVING_QUARTERS: 0 + STR_MEDI_KIT: 1 + STR_MISSILE_DEFENSES: 0 + STR_PERSONAL_ARMOR_UC: 0 + STR_PISTOL: 0 + STR_PLASMA_RIFLE: 1 + STR_PLASMA_RIFLE_CLIP: 1 + STR_PROXIMITY_GRENADE: 0 + STR_RIFLE: 0 + STR_ROCKET_LAUNCHER: 0 + STR_SECTOID_AUTOPSY: 1 + STR_SKYRANGER: 0 + STR_SMALL_RADAR_SYSTEM: 0 + STR_SMOKE_GRENADE: 0 + STR_STINGRAY: 0 + STR_STUN_ROD: 0 + STR_TANK_CANNON: 0 + STR_TANK_ROCKET_LAUNCHER: 0 + STR_UFO_NAVIGATION: 0 + STR_UFO_POWER_SOURCE: 1 + STR_WORKSHOP: 0 +manufactureRuleStatus: + STR_ALIEN_ALLOYS: 1 + STR_HEAVY_PLASMA: 0 + STR_HEAVY_PLASMA_CLIP: 1 + STR_MEDI_KIT: 1 + STR_PERSONAL_ARMOR: 1 + STR_PLASMA_RIFLE: 1 + STR_PLASMA_RIFLE_CLIP: 1 + STR_UFO_NAVIGATION: 1 +researchRuleStatus: + STR_CYBERDISC_CORPSE: 1 + STR_FLOATER_CORPSE: 1 + STR_HEAVY_PLASMA: 1 + STR_HEAVY_PLASMA_CLIP: 1 + STR_LASER_WEAPONS: 1 + STR_PLASMA_RIFLE: 1 + STR_PLASMA_RIFLE_CLIP: 1 + STR_SECTOID_CORPSE: 1 +monthlyPurchaseLimitLog: {} +hiddenPurchaseItems: {} +customRuleCraftDeployments: {} +alienStrategy: + regions: + STR_ANTARCTICA: 4 + STR_ARCTIC: 4 + STR_AUSTRALASIA: 10 + STR_CENTRAL_ASIA: 12 + STR_EUROPE: 16 + STR_NORTH_AFRICA: 12 + STR_NORTH_AMERICA: 18 + STR_PACIFIC: 5 + STR_SIBERIA: 10 + STR_SOUTHERN_AFRICA: 8 + STR_SOUTH_AMERICA: 10 + STR_SOUTH_EAST_ASIA: 15 + possibleMissions: + - region: STR_ANTARCTICA + missions: + STR_ALIEN_BASE: 35 + STR_ALIEN_RESEARCH: 25 + - region: STR_ARCTIC + missions: + STR_ALIEN_BASE: 35 + STR_ALIEN_RESEARCH: 25 + - region: STR_AUSTRALASIA + missions: + STR_ALIEN_ABDUCTION: 4 + STR_ALIEN_BASE: 16 + STR_ALIEN_HARVEST: 11 + STR_ALIEN_INFILTRATION: 8 + STR_ALIEN_RESEARCH: 15 + - region: STR_CENTRAL_ASIA + missions: + STR_ALIEN_ABDUCTION: 6 + STR_ALIEN_BASE: 8 + STR_ALIEN_HARVEST: 5 + STR_ALIEN_INFILTRATION: 10 + STR_ALIEN_RESEARCH: 5 + - region: STR_EUROPE + missions: + STR_ALIEN_ABDUCTION: 15 + STR_ALIEN_BASE: 6 + STR_ALIEN_HARVEST: 10 + - region: STR_INDIAN_OCEAN + missions: ~ + - region: STR_NORTH_AFRICA + missions: + STR_ALIEN_ABDUCTION: 8 + STR_ALIEN_BASE: 19 + STR_ALIEN_HARVEST: 8 + STR_ALIEN_INFILTRATION: 8 + STR_ALIEN_RESEARCH: 8 + - region: STR_NORTH_AMERICA + missions: + STR_ALIEN_ABDUCTION: 20 + STR_ALIEN_BASE: 20 + STR_ALIEN_HARVEST: 17 + STR_ALIEN_INFILTRATION: 20 + STR_ALIEN_RESEARCH: 14 + - region: STR_NORTH_ATLANTIC + missions: ~ + - region: STR_PACIFIC + missions: + STR_ALIEN_BASE: 27 + STR_ALIEN_RESEARCH: 15 + - region: STR_SIBERIA + missions: + STR_ALIEN_ABDUCTION: 4 + STR_ALIEN_BASE: 9 + STR_ALIEN_RESEARCH: 6 + - region: STR_SOUTHERN_AFRICA + missions: + STR_ALIEN_ABDUCTION: 8 + STR_ALIEN_BASE: 9 + STR_ALIEN_HARVEST: 8 + STR_ALIEN_INFILTRATION: 8 + STR_ALIEN_RESEARCH: 7 + - region: STR_SOUTH_AMERICA + missions: + STR_ALIEN_ABDUCTION: 12 + STR_ALIEN_BASE: 22 + STR_ALIEN_HARVEST: 24 + STR_ALIEN_RESEARCH: 10 + - region: STR_SOUTH_ATLANTIC + missions: ~ + - region: STR_SOUTH_EAST_ASIA + missions: + STR_ALIEN_ABDUCTION: 21 + STR_ALIEN_BASE: 8 + STR_ALIEN_HARVEST: 13 + STR_ALIEN_INFILTRATION: 13 + STR_ALIEN_RESEARCH: 8 + missionLocations: {} + missionsRun: {} +deadSoldiers: + - type: STR_SOLDIER + id: 8 + name: Parfaite Mukendi + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Parfaite Mukendi + ownerplayerid: 999 + nationality: 7 + initialStats: + tu: 56 + stamina: 69 + health: 35 + bravery: 30 + reactions: 59 + firing: 63 + throwing: 54 + strength: 38 + psiStrength: 58 + psiSkill: 0 + melee: 34 + mana: 0 + currentStats: + tu: 56 + stamina: 69 + health: 35 + bravery: 30 + reactions: 59 + firing: 63 + throwing: 54 + strength: 38 + psiStrength: 58 + psiSkill: 0 + melee: 34 + mana: 0 + rank: 0 + gender: 1 + look: 3 + lookVariant: 18 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 40,hour: 21,weekday: 6,day: 1,month: 1,year: 1999} + cause: {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 0,turn: 7,side: 2,bodypart: 2,id: 8} + diary: + missionIdList: [0] + shotAtCounterTotal: 3 + hitCounterTotal: 1 + shotsFiredCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 6 + name: Wing Ai + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Wing Ai + ownerplayerid: 999 + nationality: 6 + initialStats: + tu: 53 + stamina: 47 + health: 38 + bravery: 50 + reactions: 45 + firing: 49 + throwing: 77 + strength: 38 + psiStrength: 64 + psiSkill: 0 + melee: 24 + mana: 0 + currentStats: + tu: 53 + stamina: 47 + health: 38 + bravery: 50 + reactions: 45 + firing: 49 + throwing: 77 + strength: 38 + psiStrength: 64 + psiSkill: 0 + melee: 24 + mana: 0 + rank: 0 + gender: 1 + look: 2 + lookVariant: 30 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 40,hour: 21,weekday: 6,day: 1,month: 1,year: 1999} + cause: {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 0,turn: 13,side: 0,bodypart: 1,id: 6} + diary: + missionIdList: [0] + hitCounterTotal: 1 + shotsFiredCounterTotal: 3 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 7 + name: Ji-young Sang + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Ji-young Sang + ownerplayerid: 999 + nationality: 22 + initialStats: + tu: 58 + stamina: 69 + health: 26 + bravery: 30 + reactions: 35 + firing: 64 + throwing: 50 + strength: 39 + psiStrength: 27 + psiSkill: 0 + melee: 21 + mana: 0 + currentStats: + tu: 58 + stamina: 69 + health: 26 + bravery: 30 + reactions: 35 + firing: 64 + throwing: 50 + strength: 39 + psiStrength: 27 + psiSkill: 0 + melee: 21 + mana: 0 + rank: 0 + gender: 1 + look: 2 + lookVariant: 3 + missions: 1 + kills: 2 + stuns: 1 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 40,hour: 21,weekday: 6,day: 1,month: 1,year: 1999} + cause: {type: STR_FLOATER_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 0,turn: 18,side: 0,bodypart: 1,id: 7} + diary: + killList: + - {type: STR_FLOATER_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 7,faction: 1,mission: 0,turn: 6,side: 0,bodypart: 1,id: 1000003} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 0,turn: 12,side: 3,bodypart: 1,id: 1000000} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 0,turn: 15,side: 0,bodypart: 1,id: 1000001} + missionIdList: [0] + shotAtCounterTotal: 7 + hitCounterTotal: 1 + shotsFiredCounterTotal: 20 + shotsLandedCounterTotal: 6 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 4 + name: Nicu Cojocaru + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Nicu Cojocaru + ownerplayerid: 999 + nationality: 28 + initialStats: + tu: 59 + stamina: 40 + health: 36 + bravery: 10 + reactions: 44 + firing: 70 + throwing: 59 + strength: 38 + psiStrength: 16 + psiSkill: 0 + melee: 30 + mana: 0 + currentStats: + tu: 59 + stamina: 40 + health: 36 + bravery: 10 + reactions: 44 + firing: 70 + throwing: 59 + strength: 38 + psiStrength: 16 + psiSkill: 0 + melee: 30 + mana: 0 + rank: 0 + gender: 0 + look: 0 + lookVariant: 22 + missions: 1 + kills: 0 + stuns: 1 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 40,hour: 21,weekday: 6,day: 1,month: 1,year: 1999} + cause: {type: STR_FLOATER_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 0,turn: 19,side: 0,bodypart: 1,id: 4} + diary: + killList: + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 7,faction: 1,mission: 0,turn: 12,side: 0,bodypart: 1,id: 1000002} + missionIdList: [0] + shotAtCounterTotal: 2 + hitCounterTotal: 1 + shotsFiredCounterTotal: 2 + shotsLandedCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 3 + name: Fadil Abdullah + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Fadil Abdullah + ownerplayerid: 999 + nationality: 1 + initialStats: + tu: 54 + stamina: 42 + health: 26 + bravery: 60 + reactions: 36 + firing: 42 + throwing: 53 + strength: 24 + psiStrength: 40 + psiSkill: 0 + melee: 37 + mana: 0 + currentStats: + tu: 55 + stamina: 42 + health: 29 + bravery: 60 + reactions: 36 + firing: 43 + throwing: 53 + strength: 29 + psiStrength: 40 + psiSkill: 0 + melee: 37 + mana: 0 + rank: 2 + gender: 0 + look: 2 + lookVariant: 29 + missions: 2 + kills: 1 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 11,hour: 14,weekday: 1,day: 17,month: 1,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 1,turn: 3,side: 3,bodypart: 1,id: 3} + diary: + killList: + - {type: STR_FLOATER_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 0,turn: 24,side: 1,bodypart: 3,id: 1000003} + missionIdList: [0,1] + shotAtCounterTotal: 1 + hitCounterTotal: 1 + shotsFiredCounterTotal: 6 + shotsLandedCounterTotal: 1 + killedInAction: 1 + statGainTotal: 10 + bestOfRank: 270 + bestSoldier: 270 + corpseRecovered: true + - type: STR_SOLDIER + id: 16 + name: Olawale Obrutse + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Olawale Obrutse + ownerplayerid: 999 + nationality: 23 + initialStats: + tu: 56 + stamina: 68 + health: 35 + bravery: 50 + reactions: 53 + firing: 47 + throwing: 51 + strength: 29 + psiStrength: 97 + psiSkill: 0 + melee: 32 + mana: 0 + currentStats: + tu: 56 + stamina: 68 + health: 35 + bravery: 50 + reactions: 53 + firing: 47 + throwing: 51 + strength: 29 + psiStrength: 97 + psiSkill: 0 + melee: 32 + mana: 0 + rank: 0 + gender: 0 + look: 3 + lookVariant: 56 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 42,hour: 5,weekday: 3,day: 26,month: 1,year: 1999} + cause: {type: STR_SECTOID_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_SECTOID,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 2,turn: 3,side: 0,bodypart: 1,id: 16} + diary: + missionIdList: [2] + shotAtCounterTotal: 2 + hitCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 19 + name: Fehmi Durukan + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Fehmi Durukan + ownerplayerid: 999 + nationality: 33 + initialStats: + tu: 51 + stamina: 42 + health: 33 + bravery: 60 + reactions: 60 + firing: 59 + throwing: 67 + strength: 32 + psiStrength: 11 + psiSkill: 0 + melee: 25 + mana: 0 + currentStats: + tu: 51 + stamina: 42 + health: 33 + bravery: 60 + reactions: 60 + firing: 59 + throwing: 67 + strength: 32 + psiStrength: 11 + psiSkill: 0 + melee: 25 + mana: 0 + rank: 0 + gender: 0 + look: 3 + lookVariant: 46 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 42,hour: 5,weekday: 3,day: 26,month: 1,year: 1999} + cause: {name: Thomas Fitzpatrick,rank: STR_CAPTAIN,race: STR_FRIENDLY,weapon: STR_GRENADE,weaponAmmo: STR_GRENADE,status: 6,faction: 0,mission: 2,turn: 6,side: 4,bodypart: 1,id: 19} + diary: + missionIdList: [2] + unconciousTotal: 1 + shotAtCounterTotal: 2 + hitCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 17 + name: Kristian Orthe + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Kristian Orthe + ownerplayerid: 999 + nationality: 24 + initialStats: + tu: 60 + stamina: 50 + health: 26 + bravery: 10 + reactions: 38 + firing: 47 + throwing: 69 + strength: 32 + psiStrength: 54 + psiSkill: 0 + melee: 22 + mana: 0 + currentStats: + tu: 60 + stamina: 50 + health: 26 + bravery: 10 + reactions: 38 + firing: 47 + throwing: 69 + strength: 32 + psiStrength: 54 + psiSkill: 0 + melee: 22 + mana: 0 + rank: 0 + gender: 0 + look: 2 + lookVariant: 15 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 42,hour: 5,weekday: 3,day: 26,month: 1,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 2,turn: 10,side: 0,bodypart: 1,id: 17} + diary: + missionIdList: [2] + shotAtCounterTotal: 2 + hitCounterTotal: 1 + shotsFiredCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 2 + name: Thomas Fitzpatrick + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Thomas Fitzpatrick + ownerplayerid: 999 + nationality: 18 + initialStats: + tu: 51 + stamina: 67 + health: 38 + bravery: 20 + reactions: 52 + firing: 58 + throwing: 60 + strength: 23 + psiStrength: 19 + psiSkill: 0 + melee: 27 + mana: 0 + currentStats: + tu: 56 + stamina: 70 + health: 44 + bravery: 20 + reactions: 52 + firing: 60 + throwing: 60 + strength: 30 + psiStrength: 19 + psiSkill: 0 + melee: 27 + mana: 0 + rank: 3 + gender: 0 + look: 1 + lookVariant: 3 + missions: 3 + kills: 6 + stuns: 1 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 35,minute: 42,hour: 5,weekday: 3,day: 26,month: 1,year: 1999} + cause: {name: Thomas Fitzpatrick,rank: STR_CAPTAIN,race: STR_FRIENDLY,weapon: STR_GRENADE,weaponAmmo: STR_GRENADE,status: 6,faction: 0,mission: 2,turn: 21,side: 0,bodypart: 1,id: 2} + diary: + killList: + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 0,turn: 15,side: 3,bodypart: 1,id: 1000002} + - {type: STR_FLOATER_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_FLOATER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 0,turn: 21,side: 1,bodypart: 5,id: 1000004} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 1,turn: 306,side: 0,bodypart: 1,id: 1000001} + - {type: STR_SECTOID_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 7,faction: 1,mission: 1,turn: 327,side: 0,bodypart: 1,id: 1000006} + - {type: STR_SECTOID_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 1,turn: 330,side: 1,bodypart: 3,id: 1000006} + - {name: Fehmi Durukan,rank: STR_ROOKIE,race: STR_FRIENDLY,weapon: STR_GRENADE,weaponAmmo: STR_GRENADE,status: 6,faction: 0,mission: 2,turn: 606,side: 4,bodypart: 1,id: 19} + - {name: Thomas Fitzpatrick,rank: STR_CAPTAIN,race: STR_FRIENDLY,weapon: STR_GRENADE,weaponAmmo: STR_GRENADE,status: 6,faction: 0,mission: 2,turn: 621,side: 0,bodypart: 1,id: 2} + missionIdList: [0,1,2] + shotsFiredCounterTotal: 20 + shotsLandedCounterTotal: 6 + killedInAction: 1 + statGainTotal: 23 + bestOfRank: 343 + bestSoldier: 343 + corpseRecovered: true + - type: STR_SOLDIER + id: 20 + name: Angel Culasso + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Angel Culasso + ownerplayerid: 999 + nationality: 2 + initialStats: + tu: 50 + stamina: 59 + health: 28 + bravery: 20 + reactions: 31 + firing: 43 + throwing: 76 + strength: 32 + psiStrength: 42 + psiSkill: 0 + melee: 31 + mana: 0 + currentStats: + tu: 52 + stamina: 63 + health: 31 + bravery: 20 + reactions: 31 + firing: 43 + throwing: 76 + strength: 33 + psiStrength: 42 + psiSkill: 0 + melee: 31 + mana: 0 + rank: 1 + gender: 0 + look: 1 + lookVariant: 13 + missions: 2 + kills: 2 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + cause: {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 3,turn: 12,side: 1,bodypart: 3,id: 20} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 2,turn: 615,side: 0,bodypart: 1,id: 1000000} + - {type: STR_REAPER_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_REAPER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 906,side: 3,bodypart: 1,id: 1000011} + missionIdList: [2,3] + shotAtCounterTotal: 5 + hitCounterTotal: 1 + shotsFiredCounterTotal: 33 + shotsLandedCounterTotal: 5 + killedInAction: 1 + statGainTotal: 10 + bestOfRank: 343 + corpseRecovered: true + - type: STR_SOLDIER + id: 27 + name: Oscar Miranda + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Oscar Miranda + ownerplayerid: 999 + nationality: 31 + initialStats: + tu: 55 + stamina: 43 + health: 25 + bravery: 20 + reactions: 30 + firing: 63 + throwing: 57 + strength: 36 + psiStrength: 79 + psiSkill: 0 + melee: 33 + mana: 0 + currentStats: + tu: 55 + stamina: 43 + health: 25 + bravery: 20 + reactions: 30 + firing: 63 + throwing: 57 + strength: 36 + psiStrength: 79 + psiSkill: 0 + melee: 33 + mana: 0 + rank: 0 + gender: 0 + look: 1 + lookVariant: 52 + missions: 4 + kills: 2 + stuns: 1 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + cause: {type: STR_FLOATER_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 3,turn: 16,side: 2,bodypart: 2,id: 27} + diary: + killList: + - {type: STR_FLOATER_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_FLOATER,weapon: STR_ROCKET_LAUNCHER,weaponAmmo: STR_SMALL_ROCKET,status: 7,faction: 1,mission: 3,turn: 909,side: 4,bodypart: 1,id: 1000007} + missionIdList: [3] + shotAtCounterTotal: 1 + hitCounterTotal: 1 + shotsFiredCounterTotal: 3 + shotsLandedCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 5 + name: Sara Larsson + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Sara Larsson + ownerplayerid: 999 + nationality: 32 + initialStats: + tu: 54 + stamina: 65 + health: 27 + bravery: 30 + reactions: 30 + firing: 56 + throwing: 60 + strength: 27 + psiStrength: 56 + psiSkill: 0 + melee: 40 + mana: 0 + currentStats: + tu: 57 + stamina: 68 + health: 29 + bravery: 30 + reactions: 30 + firing: 57 + throwing: 60 + strength: 31 + psiStrength: 56 + psiSkill: 0 + melee: 40 + mana: 0 + rank: 2 + gender: 1 + look: 2 + lookVariant: 35 + missions: 4 + kills: 1 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + cause: {type: STR_FLOATER_LEADER,rank: STR_LIVE_LEADER,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 3,turn: 21,side: 0,bodypart: 1,id: 5} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 1,turn: 306,side: 1,bodypart: 3,id: 1000002} + missionIdList: [0,1,2,3] + shotAtCounterTotal: 2 + hitCounterTotal: 1 + shotsFiredCounterTotal: 29 + shotsLandedCounterTotal: 3 + killedInAction: 1 + statGainTotal: 13 + bestOfRank: 343 + bestSoldier: 343 + corpseRecovered: true + - type: STR_SOLDIER + id: 23 + name: Hayri Kocaman + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Hayri Kocaman + ownerplayerid: 999 + nationality: 33 + initialStats: + tu: 66 + stamina: 75 + health: 44 + bravery: 10 + reactions: 30 + firing: 55 + throwing: 77 + strength: 34 + psiStrength: 7 + psiSkill: 0 + melee: 22 + mana: 0 + currentStats: + tu: 66 + stamina: 75 + health: 44 + bravery: 10 + reactions: 30 + firing: 55 + throwing: 77 + strength: 34 + psiStrength: 7 + psiSkill: 0 + melee: 22 + mana: 0 + rank: 2 + gender: 0 + look: 0 + lookVariant: 32 + missions: 4 + kills: 2 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + cause: {type: STR_FLOATER_MEDIC,rank: STR_LIVE_MEDIC,race: STR_FLOATER,weapon: STR_ALIEN_GRENADE,weaponAmmo: STR_ALIEN_GRENADE,status: 6,faction: 1,mission: 3,turn: 22,side: 1,bodypart: 3,id: 23} + diary: + killList: + - {type: MALE_CIVILIAN,rank: STR_CIVILIAN,race: STR_CIVILIAN,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 2,mission: 3,turn: 915,side: 2,bodypart: 2,id: 1000015} + missionIdList: [3] + shotAtCounterTotal: 1 + lowAccuracyHitCounterTotal: 5 + shotsFiredCounterTotal: 37 + shotsLandedCounterTotal: 9 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 25 + name: Mojmir Toma + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Mojmir Toma + ownerplayerid: 999 + nationality: 30 + initialStats: + tu: 59 + stamina: 58 + health: 30 + bravery: 30 + reactions: 46 + firing: 59 + throwing: 75 + strength: 37 + psiStrength: 2 + psiSkill: 0 + melee: 35 + mana: 0 + currentStats: + tu: 59 + stamina: 58 + health: 30 + bravery: 30 + reactions: 46 + firing: 59 + throwing: 75 + strength: 37 + psiStrength: 2 + psiSkill: 0 + melee: 35 + mana: 0 + rank: 2 + gender: 0 + look: 0 + lookVariant: 28 + missions: 4 + kills: 2 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + cause: {type: STR_FLOATER_MEDIC,rank: STR_LIVE_MEDIC,race: STR_FLOATER,weapon: STR_ALIEN_GRENADE,weaponAmmo: STR_ALIEN_GRENADE,status: 6,faction: 1,mission: 3,turn: 22,side: 4,bodypart: 1,id: 25} + diary: + killList: + - {type: STR_REAPER_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_REAPER,weapon: STR_RIFLE,weaponAmmo: STR_RIFLE_CLIP,status: 6,faction: 1,mission: 3,turn: 912,side: 0,bodypart: 1,id: 1000010} + missionIdList: [3] + lowAccuracyHitCounterTotal: 3 + shotsFiredCounterTotal: 30 + shotsLandedCounterTotal: 3 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 26 + name: Baldur Aamodt + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Baldur Aamodt + ownerplayerid: 999 + nationality: 24 + initialStats: + tu: 61 + stamina: 62 + health: 42 + bravery: 10 + reactions: 54 + firing: 49 + throwing: 52 + strength: 39 + psiStrength: 88 + psiSkill: 0 + melee: 20 + mana: 0 + currentStats: + tu: 61 + stamina: 62 + health: 42 + bravery: 10 + reactions: 54 + firing: 49 + throwing: 52 + strength: 39 + psiStrength: 88 + psiSkill: 0 + melee: 20 + mana: 0 + rank: 2 + gender: 0 + look: 0 + lookVariant: 33 + missions: 3 + kills: 6 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + cause: {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 3,turn: 25,side: 0,bodypart: 1,id: 26} + diary: + killList: + - {type: MALE_CIVILIAN,rank: STR_CIVILIAN,race: STR_CIVILIAN,weapon: STR_AUTO_CANNON,weaponAmmo: STR_AC_AP_AMMO,status: 6,faction: 2,mission: 3,turn: 903,side: 2,bodypart: 0,id: 1000022} + - {type: STR_FLOATER_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_FLOATER,weapon: STR_AUTO_CANNON,weaponAmmo: STR_AC_AP_AMMO,status: 6,faction: 1,mission: 3,turn: 918,side: 0,bodypart: 1,id: 1000001} + missionIdList: [3] + shotAtCounterTotal: 2 + hitCounterTotal: 1 + lowAccuracyHitCounterTotal: 2 + shotsFiredCounterTotal: 27 + shotsLandedCounterTotal: 3 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 25 + name: Luis Ramos + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Luis Ramos + ownerplayerid: 999 + nationality: 31 + initialStats: + tu: 60 + stamina: 57 + health: 34 + bravery: 10 + reactions: 51 + firing: 69 + throwing: 50 + strength: 39 + psiStrength: 91 + psiSkill: 0 + melee: 24 + mana: 0 + currentStats: + tu: 60 + stamina: 57 + health: 34 + bravery: 10 + reactions: 51 + firing: 69 + throwing: 50 + strength: 39 + psiStrength: 91 + psiSkill: 0 + melee: 24 + mana: 0 + rank: 0 + gender: 0 + look: 1 + lookVariant: 25 + missions: 0 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 10,minute: 53,hour: 0,weekday: 6,day: 26,month: 2,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 4,turn: 6,side: 1,bodypart: 3,id: 25} + diary: + missionIdList: [4] + shotAtCounterTotal: 1 + hitCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 22 + name: Eden Meta + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Eden Meta + ownerplayerid: 999 + nationality: 7 + initialStats: + tu: 53 + stamina: 63 + health: 36 + bravery: 30 + reactions: 40 + firing: 60 + throwing: 80 + strength: 38 + psiStrength: 63 + psiSkill: 0 + melee: 35 + mana: 0 + currentStats: + tu: 55 + stamina: 63 + health: 37 + bravery: 30 + reactions: 40 + firing: 61 + throwing: 80 + strength: 42 + psiStrength: 63 + psiSkill: 0 + melee: 35 + mana: 0 + rank: 2 + gender: 0 + look: 3 + lookVariant: 42 + missions: 2 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 5,minute: 20,hour: 8,weekday: 4,day: 3,month: 3,year: 1999} + cause: {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 5,turn: 7,side: 0,bodypart: 1,id: 22} + diary: + missionIdList: [4,5] + monthsService: 2 + shotAtCounterTotal: 3 + hitCounterTotal: 1 + shotsFiredCounterTotal: 6 + shotsLandedCounterTotal: 1 + killedInAction: 1 + statGainTotal: 8 + bestOfRank: 343 + bestSoldier: 343 + corpseRecovered: true + - type: STR_SOLDIER + id: 23 + name: Zsuzska Eotvos + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Zsuzska Eotvos + ownerplayerid: 999 + nationality: 17 + initialStats: + tu: 58 + stamina: 64 + health: 32 + bravery: 40 + reactions: 48 + firing: 43 + throwing: 80 + strength: 36 + psiStrength: 27 + psiSkill: 0 + melee: 33 + mana: 0 + currentStats: + tu: 58 + stamina: 64 + health: 32 + bravery: 40 + reactions: 48 + firing: 43 + throwing: 80 + strength: 36 + psiStrength: 27 + psiSkill: 0 + melee: 33 + mana: 0 + rank: 0 + gender: 1 + look: 1 + lookVariant: 25 + missions: 3 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 59,hour: 6,weekday: 4,day: 10,month: 3,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 7,turn: 3,side: 0,bodypart: 5,id: 23} + diary: + missionIdList: [4,5,6,7] + monthsService: 1 + shotAtCounterTotal: 3 + hitCounterTotal: 1 + shotsFiredCounterTotal: 2 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 29 + name: Jolana Polakova + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Jolana Polakova + ownerplayerid: 999 + nationality: 8 + initialStats: + tu: 60 + stamina: 49 + health: 35 + bravery: 30 + reactions: 54 + firing: 69 + throwing: 66 + strength: 30 + psiStrength: 24 + psiSkill: 0 + melee: 30 + mana: 0 + currentStats: + tu: 60 + stamina: 51 + health: 38 + bravery: 30 + reactions: 54 + firing: 69 + throwing: 66 + strength: 33 + psiStrength: 24 + psiSkill: 0 + melee: 30 + mana: 0 + rank: 2 + gender: 1 + look: 1 + lookVariant: 63 + missions: 2 + kills: 1 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 50,minute: 59,hour: 6,weekday: 4,day: 10,month: 3,year: 1999} + cause: {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 7,turn: 4,side: 0,bodypart: 1,id: 29} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 6,turn: 1806,side: 0,bodypart: 1,id: 1000000} + missionIdList: [6,7] + monthsService: 1 + shotAtCounterTotal: 2 + hitCounterTotal: 2 + shotsFiredCounterTotal: 1 + shotsLandedCounterTotal: 1 + killedInAction: 1 + statGainTotal: 8 + bestOfRank: 343 + bestSoldier: 343 + corpseRecovered: true + - type: STR_SOLDIER + id: 35 + name: Hari Kahiwai + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Hari Kahiwai + ownerplayerid: 999 + nationality: 26 + initialStats: + tu: 50 + stamina: 46 + health: 27 + bravery: 60 + reactions: 49 + firing: 67 + throwing: 52 + strength: 27 + psiStrength: 15 + psiSkill: 0 + melee: 20 + mana: 0 + currentStats: + tu: 50 + stamina: 46 + health: 27 + bravery: 60 + reactions: 49 + firing: 67 + throwing: 52 + strength: 27 + psiStrength: 15 + psiSkill: 0 + melee: 20 + mana: 0 + rank: 0 + gender: 0 + look: 3 + lookVariant: 21 + missions: 2 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 55,hour: 21,weekday: 7,day: 20,month: 3,year: 1999} + cause: {type: STR_CYBERDISC_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_CYBERDISC,weapon: CYBERDISC_WEAPON,weaponAmmo: CYBERDISC_WEAPON,status: 6,faction: 1,mission: 10,turn: 10,side: 0,bodypart: 4,id: 35} + diary: + missionIdList: [10] + hitCounterTotal: 1 + shotsFiredCounterTotal: 7 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 27 + name: Richard Vaskovic + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Richard Vaskovic + ownerplayerid: 999 + nationality: 30 + initialStats: + tu: 58 + stamina: 66 + health: 36 + bravery: 40 + reactions: 52 + firing: 60 + throwing: 72 + strength: 32 + psiStrength: 59 + psiSkill: 0 + melee: 38 + mana: 0 + currentStats: + tu: 58 + stamina: 69 + health: 39 + bravery: 40 + reactions: 52 + firing: 61 + throwing: 72 + strength: 33 + psiStrength: 59 + psiSkill: 0 + melee: 38 + mana: 0 + rank: 2 + gender: 0 + look: 0 + lookVariant: 10 + missions: 3 + kills: 1 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 55,hour: 21,weekday: 7,day: 20,month: 3,year: 1999} + cause: {name: Richard Vaskovic,rank: STR_SERGEANT,race: STR_FRIENDLY,weapon: STR_CYBERDISC_CORPSE,weaponAmmo: STR_CYBERDISC_CORPSE,status: 6,faction: 0,mission: 10,turn: 21,side: 0,bodypart: 1,id: 27} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 7,turn: 2106,side: 0,bodypart: 0,id: 1000000} + - {type: STR_CYBERDISC_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_CYBERDISC,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3021,side: 3,bodypart: 1,id: 1000013} + - {name: Richard Vaskovic,rank: STR_SERGEANT,race: STR_FRIENDLY,weapon: STR_CYBERDISC_CORPSE,weaponAmmo: STR_CYBERDISC_CORPSE,status: 6,faction: 0,mission: 10,turn: 3021,side: 0,bodypart: 1,id: 27} + missionIdList: [6,7,8,10] + monthsService: 1 + shotsFiredCounterTotal: 8 + shotsLandedCounterTotal: 2 + killedInAction: 1 + statGainTotal: 8 + bestOfRank: 811 + bestSoldier: 811 + martyrKillsTotal: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 30 + name: Petra Mueller + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Petra Mueller + ownerplayerid: 999 + nationality: 14 + initialStats: + tu: 58 + stamina: 59 + health: 44 + bravery: 10 + reactions: 54 + firing: 58 + throwing: 79 + strength: 47 + psiStrength: 62 + psiSkill: 0 + melee: 37 + mana: 0 + currentStats: + tu: 58 + stamina: 59 + health: 44 + bravery: 10 + reactions: 54 + firing: 58 + throwing: 79 + strength: 47 + psiStrength: 62 + psiSkill: 0 + melee: 37 + mana: 0 + rank: 2 + gender: 1 + look: 0 + lookVariant: 56 + missions: 9 + kills: 36 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 55,hour: 21,weekday: 7,day: 20,month: 3,year: 1999} + cause: {type: STR_SECTOID_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 10,turn: 31,side: 1,bodypart: 3,id: 30} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3009,side: 2,bodypart: 2,id: 1000003} + - {type: STR_CYBERDISC_TERRORIST,rank: STR_LIVE_TERRORIST,race: STR_CYBERDISC,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3012,side: 2,bodypart: 2,id: 1000012} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3024,side: 0,bodypart: 1,id: 1000001} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3024,side: 0,bodypart: 1,id: 1000000} + missionIdList: [10] + monthsService: 2 + shotAtCounterTotal: 2 + hitCounterTotal: 1 + shotsFiredCounterTotal: 16 + shotsLandedCounterTotal: 4 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 33 + name: Lionel Lacroix + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Lionel Lacroix + ownerplayerid: 999 + nationality: 13 + initialStats: + tu: 55 + stamina: 53 + health: 31 + bravery: 10 + reactions: 35 + firing: 55 + throwing: 72 + strength: 27 + psiStrength: 30 + psiSkill: 0 + melee: 27 + mana: 0 + currentStats: + tu: 55 + stamina: 53 + health: 31 + bravery: 10 + reactions: 35 + firing: 55 + throwing: 72 + strength: 27 + psiStrength: 30 + psiSkill: 0 + melee: 27 + mana: 0 + rank: 0 + gender: 0 + look: 1 + lookVariant: 25 + missions: 3 + kills: 2 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 55,hour: 21,weekday: 7,day: 20,month: 3,year: 1999} + cause: {type: STR_SECTOID_NAVIGATOR,rank: STR_LIVE_NAVIGATOR,race: STR_SECTOID,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 10,turn: 37,side: 0,bodypart: 1,id: 33} + diary: + killList: + - {type: STR_SECTOID_ENGINEER,rank: STR_LIVE_ENGINEER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 10,turn: 3031,side: 3,bodypart: 1,id: 1000009} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 10,turn: 3036,side: 2,bodypart: 2,id: 1000002} + missionIdList: [10] + unconciousTotal: 1 + shotAtCounterTotal: 1 + hitCounterTotal: 2 + shotsFiredCounterTotal: 4 + shotsLandedCounterTotal: 2 + killedInAction: 1 + postMortemKills: 2 + corpseRecovered: true + - type: STR_SOLDIER + id: 32 + name: Andres Garcia + coopbase: 78735 + coop: 1 + coopcraft: 1 + coopcrafttype: STR_SKYRANGER + coopname: Andres Garcia + ownerplayerid: 999 + nationality: 31 + initialStats: + tu: 56 + stamina: 50 + health: 26 + bravery: 20 + reactions: 42 + firing: 41 + throwing: 77 + strength: 23 + psiStrength: 31 + psiSkill: 0 + melee: 29 + mana: 0 + currentStats: + tu: 56 + stamina: 50 + health: 26 + bravery: 20 + reactions: 42 + firing: 41 + throwing: 77 + strength: 23 + psiStrength: 31 + psiSkill: 0 + melee: 29 + mana: 0 + rank: 0 + gender: 0 + look: 1 + lookVariant: 8 + missions: 3 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 55,hour: 21,weekday: 7,day: 20,month: 3,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_PISTOL,weaponAmmo: STR_PLASMA_PISTOL_CLIP,status: 6,faction: 1,mission: 10,turn: 55,side: 2,bodypart: 2,id: 32} + diary: + missionIdList: [10] + shotAtCounterTotal: 1 + hitCounterTotal: 1 + shotsFiredCounterTotal: 10 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 28 + name: Mia Eklund + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Mia Eklund + ownerplayerid: 999 + nationality: 32 + initialStats: + tu: 52 + stamina: 41 + health: 37 + bravery: 60 + reactions: 41 + firing: 64 + throwing: 51 + strength: 32 + psiStrength: 36 + psiSkill: 0 + melee: 36 + mana: 0 + currentStats: + tu: 55 + stamina: 46 + health: 42 + bravery: 60 + reactions: 41 + firing: 64 + throwing: 51 + strength: 42 + psiStrength: 36 + psiSkill: 0 + melee: 36 + mana: 0 + rank: 2 + gender: 1 + look: 3 + lookVariant: 0 + missions: 5 + kills: 4 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 12,hour: 19,weekday: 1,day: 21,month: 3,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 4,side: 0,bodypart: 1,id: 28} + diary: + killList: + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_PLASMA_RIFLE,weaponAmmo: STR_PLASMA_RIFLE_CLIP,status: 6,faction: 1,mission: 7,turn: 2103,side: 2,bodypart: 2,id: 1000002} + - {type: STR_SECTOID_MEDIC,rank: STR_LIVE_MEDIC,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3066,side: 0,bodypart: 5,id: 1000008} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 10,turn: 3069,side: 0,bodypart: 1,id: 1000005} + - {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 11,turn: 3303,side: 3,bodypart: 1,id: 1000000} + missionIdList: [6,7,8,10,11] + monthsService: 1 + shotAtCounterTotal: 3 + hitCounterTotal: 1 + shotsFiredCounterTotal: 10 + shotsLandedCounterTotal: 4 + killedInAction: 1 + statGainTotal: 23 + bestOfRank: 954 + bestSoldier: 954 + corpseRecovered: true + - type: STR_SOLDIER + id: 32 + name: Abu Wasem + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Abu Wasem + ownerplayerid: 999 + nationality: 1 + initialStats: + tu: 58 + stamina: 58 + health: 37 + bravery: 30 + reactions: 38 + firing: 64 + throwing: 59 + strength: 37 + psiStrength: 47 + psiSkill: 0 + melee: 39 + mana: 0 + currentStats: + tu: 58 + stamina: 58 + health: 37 + bravery: 30 + reactions: 38 + firing: 64 + throwing: 59 + strength: 37 + psiStrength: 47 + psiSkill: 0 + melee: 39 + mana: 0 + rank: 0 + gender: 0 + look: 2 + lookVariant: 31 + missions: 0 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 30,minute: 12,hour: 19,weekday: 1,day: 21,month: 3,year: 1999} + cause: {name: Tudor Sabau,rank: STR_ROOKIE,race: STR_FRIENDLY,weapon: STR_HEAVY_CANNON,weaponAmmo: STR_HC_AP_AMMO,status: 6,faction: 0,mission: 11,turn: 4,side: 2,bodypart: 2,id: 32} + diary: + missionIdList: [11] + totalShotByFriendlyCounter: 1 + shotAtCounterTotal: 1 + hitCounterTotal: 1 + shotsFiredCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 34 + name: Viola Fontana + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Viola Fontana + ownerplayerid: 999 + nationality: 19 + initialStats: + tu: 54 + stamina: 50 + health: 29 + bravery: 10 + reactions: 45 + firing: 51 + throwing: 58 + strength: 30 + psiStrength: 50 + psiSkill: 0 + melee: 27 + mana: 0 + currentStats: + tu: 54 + stamina: 50 + health: 29 + bravery: 10 + reactions: 45 + firing: 51 + throwing: 58 + strength: 30 + psiStrength: 50 + psiSkill: 0 + melee: 27 + mana: 0 + rank: 0 + gender: 1 + look: 0 + lookVariant: 3 + missions: 1 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 45,minute: 45,hour: 21,weekday: 6,day: 26,month: 3,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 12,turn: 7,side: 0,bodypart: 1,id: 34} + diary: + missionIdList: [12] + shotAtCounterTotal: 1 + hitCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true + - type: STR_SOLDIER + id: 33 + name: Engin Kayahan + coopbase: -1 + coop: 0 + coopcraft: -1 + coopcrafttype: '' + coopname: Engin Kayahan + ownerplayerid: 999 + nationality: 33 + initialStats: + tu: 58 + stamina: 49 + health: 38 + bravery: 50 + reactions: 52 + firing: 66 + throwing: 60 + strength: 39 + psiStrength: 97 + psiSkill: 0 + melee: 29 + mana: 0 + currentStats: + tu: 58 + stamina: 49 + health: 38 + bravery: 50 + reactions: 52 + firing: 66 + throwing: 60 + strength: 39 + psiStrength: 97 + psiSkill: 0 + melee: 29 + mana: 0 + rank: 0 + gender: 0 + look: 1 + lookVariant: 59 + missions: 0 + kills: 0 + stuns: 0 + armor: STR_NONE_UC + improvement: 0 + psiStrImprovement: 0 + death: + time: {second: 45,minute: 45,hour: 21,weekday: 6,day: 26,month: 3,year: 1999} + cause: {type: STR_SECTOID_SOLDIER,rank: STR_LIVE_SOLDIER,race: STR_SECTOID,weapon: STR_HEAVY_PLASMA,weaponAmmo: STR_HEAVY_PLASMA_CLIP,status: 6,faction: 1,mission: 12,turn: 7,side: 3,bodypart: 1,id: 33} + diary: + missionIdList: [12] + shotAtCounterTotal: 1 + hitCounterTotal: 1 + killedInAction: 1 + corpseRecovered: true +missionStatistics: + - id: 0 + markerName: STR_LANDING_SITE_ + markerId: 1 + time: {second: 35,minute: 40,hour: 21,weekday: 6,day: 1,month: 1,year: 1999} + region: STR_NORTH_AFRICA + country: STR_UNKNOWN + type: STR_UFO_GROUND_ASSAULT + ufo: STR_MEDIUM_SCOUT + success: true + score: 78 + rating: STR_RATING_OK + alienRace: STR_FLOATER + daylight: 15 + lootValue: 1 + - id: 1 + markerName: STR_LANDING_SITE_ + markerId: 2 + time: {second: 50,minute: 11,hour: 14,weekday: 1,day: 17,month: 1,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_GROUND_ASSAULT + ufo: STR_LARGE_SCOUT + success: true + score: 192 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 0 + injuryList: + 27: 21 + lootValue: 1 + - id: 2 + markerName: STR_LANDING_SITE_ + markerId: 3 + time: {second: 35,minute: 42,hour: 5,weekday: 3,day: 26,month: 1,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_GROUND_ASSAULT + ufo: STR_LARGE_SCOUT + success: true + score: 73 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 13 + lootValue: 1 + - id: 3 + markerName: STR_TERROR_SITE + markerId: 1 + time: {second: 50,minute: 50,hour: 17,weekday: 5,day: 28,month: 1,year: 1999} + region: STR_NORTH_AFRICA + country: STR_NIGERIA + type: STR_TERROR_MISSION + ufo: NO_UFO + success: true + score: -79 + rating: STR_RATING_POOR + alienRace: STR_FLOATER + daylight: 8 + injuryList: + 24: 33 + lootValue: 1 + - id: 4 + markerName: STR_CRASH_SITE_ + markerId: 1 + time: {second: 10,minute: 53,hour: 0,weekday: 6,day: 26,month: 2,year: 1999} + region: STR_EUROPE + country: STR_UK + type: STR_UFO_CRASH_RECOVERY + ufo: STR_MEDIUM_SCOUT + success: true + score: 48 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 15 + lootValue: 1 + - id: 5 + markerName: STR_CRASH_SITE_ + markerId: 2 + time: {second: 5,minute: 20,hour: 8,weekday: 4,day: 3,month: 3,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_CRASH_RECOVERY + ufo: STR_MEDIUM_SCOUT + success: true + score: 84 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 2 + injuryList: + 18: 17 + lootValue: 1 + - id: 6 + markerName: STR_CRASH_SITE_ + markerId: 3 + time: {second: 25,minute: 7,hour: 17,weekday: 2,day: 8,month: 3,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_CRASH_RECOVERY + ufo: STR_MEDIUM_SCOUT + success: true + score: 71 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 0 + lootValue: 1 + - id: 7 + markerName: STR_LANDING_SITE_ + markerId: 7 + time: {second: 50,minute: 59,hour: 6,weekday: 4,day: 10,month: 3,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_GROUND_ASSAULT + ufo: STR_MEDIUM_SCOUT + success: true + score: 75 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 0 + lootValue: 1 + - id: 8 + markerName: STR_CRASH_SITE_ + markerId: 4 + time: {second: 5,minute: 35,hour: 6,weekday: 5,day: 18,month: 3,year: 1999} + region: STR_EUROPE + country: STR_FRANCE + type: STR_UFO_CRASH_RECOVERY + ufo: STR_LARGE_SCOUT + success: true + score: 84 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 2 + lootValue: 1 + - id: 0 + markerName: STR_WAY_POINT_ + markerId: 1 + time: {second: 45,minute: 42,hour: 13,weekday: 5,day: 18,month: 3,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_GROUND_ASSAULT + ufo: NO_UFO + success: true + score: 319 + rating: STR_RATING_GOOD + alienRace: STR_UNKNOWN + daylight: 0 + injuryList: + 22: 22 + 23: 10 + lootValue: 1 + - id: 10 + markerName: STR_LANDING_SITE_ + markerId: 12 + time: {second: 30,minute: 55,hour: 21,weekday: 7,day: 20,month: 3,year: 1999} + region: STR_EUROPE + country: STR_GERMANY + type: STR_UFO_GROUND_ASSAULT + ufo: STR_BATTLESHIP + success: true + score: 581 + rating: STR_RATING_EXCELLENT + alienRace: STR_SECTOID + daylight: 15 + injuryList: + 26: 29 + lootValue: 1 + - id: 11 + markerName: STR_TERROR_SITE + markerId: 3 + time: {second: 30,minute: 12,hour: 19,weekday: 1,day: 21,month: 3,year: 1999} + region: STR_NORTH_AFRICA + country: STR_EGYPT + type: STR_TERROR_MISSION + ufo: NO_UFO + success: true + score: 143 + rating: STR_RATING_OK + alienRace: STR_SECTOID + daylight: 15 + injuryList: + 24: 10 + lootValue: 1 + - id: 12 + markerName: STR_CRASH_SITE_ + markerId: 5 + time: {second: 45,minute: 45,hour: 21,weekday: 6,day: 26,month: 3,year: 1999} + region: STR_EUROPE + country: STR_UNKNOWN + type: STR_UFO_CRASH_RECOVERY + ufo: STR_SMALL_SCOUT + success: true + score: -23 + rating: STR_RATING_POOR + alienRace: STR_SECTOID + daylight: 15 + lootValue: 1 +options: + displayWidth: 1920 + displayHeight: 1040 + fullscreen: false + asyncBlit: true + keyboardMode: 1 + maxFrameSkip: 0 + traceAI: false + verboseLogging: false + StereoSound: true + geoscapeScale: 4 + battlescapeScale: 4 + useScaleFilter: false + useHQXFilter: false + useXBRZFilter: false + useOpenGL: false + checkOpenGLErrors: false + useOpenGLShader: Shaders/5xbr_squared.opengl.shader + useOpenGLSmoothing: true + debug: false + debugUi: false + soundVolume: 84 + musicVolume: 84 + uiVolume: 42 + language: en-US + battleScrollSpeed: 8 + battleEdgeScroll: 2 + battleDragScrollButton: 0 + dragScrollTimeTolerance: 300 + dragScrollPixelTolerance: 10 + battleFireSpeed: 6 + battleXcomSpeed: 21 + battleAlienSpeed: 30 + battleNewPreviewPath: 7 + fpsCounter: false + globeDetail: true + globeRadarLines: true + globeFlightPaths: true + globeAllRadarsOnBaseBuild: true + audioSampleRate: 22050 + audioBitDepth: 16 + audioChunkSize: 1024 + pauseMode: 0 + battleNotifyDeath: true + showFundsOnGeoscape: true + allowResize: false + windowedModePositionX: 0 + windowedModePositionY: 0 + borderless: false + captureMouse: false + battleTooltips: true + keepAspectRatio: true + nonSquarePixelRatio: false + cursorInBlackBandsInFullscreen: false + cursorInBlackBandsInWindow: true + cursorInBlackBandsInBorderlessWindow: false + saveOrder: 3 + geoClockSpeed: 80 + dogfightSpeed: 30 + geoScrollSpeed: 20 + geoDragScrollButton: 2 + preferredMusic: 0 + preferredSound: 0 + preferredVideo: 0 + wordwrap: 0 + musicAlwaysLoop: false + touchEnabled: false + rootWindowedMode: false + backgroundMute: false + soldierDiaries: true + playIntro: true + autosave: true + autosaveFrequency: 5 + newSeedOnLoad: false + lazyLoadResources: true + mousewheelSpeed: 3 + changeValueByMouseWheel: 0 + maximizeInfoScreens: false + FPS: 60 + FPSInactive: 30 + vSyncForOpenGL: true + geoDragScrollInvert: false + aggressiveRetaliation: false + customInitialBase: false + allowBuildingQueue: false + craftLaunchAlways: false + storageLimitsEnforced: false + canSellLiveAliens: false + anytimePsiTraining: false + globeSeasons: false + globeSurfaceCache: true + psiStrengthEval: false + canTransferCraftsWhileAirborne: false + retainCorpses: false + fieldPromotions: false + battleDragScrollInvert: false + sneakyAI: false + battleUFOExtenderAccuracy: false + showMoreStatsInInventoryView: false + battleHairBleach: true + battleInstantGrenade: false + includePrimeStateInSavedLayout: false + battleExplosionHeight: 0 + battleAutoEnd: false + battleSmoothCamera: false + disableAutoEquip: false + battleConfirmFireMode: false + weaponSelfDestruction: false + allowPsionicCapture: false + allowPsiStrengthImprovement: false + strafe: false + forceFire: true + skipNextTurnScreen: false + noAlienPanicMessages: false + alienBleeding: false + keyOk: 13 + keyCancel: 27 + keyScreenshot: 293 + keyFps: 288 + keyQuickSave: 286 + keyQuickLoad: 290 + keyGeoLeft: 276 + keyGeoRight: 275 + keyGeoUp: 273 + keyGeoDown: 274 + keyGeoZoomIn: 43 + keyGeoZoomOut: 45 + keyGeoSpeed1: 49 + keyGeoSpeed2: 50 + keyGeoSpeed3: 51 + keyGeoSpeed4: 52 + keyGeoSpeed5: 53 + keyGeoSpeed6: 54 + keyGeoIntercept: 105 + keyGeoBases: 98 + keyGeoGraphs: 103 + keyGeoUfopedia: 117 + keyGeoOptions: 27 + keyGeoFunding: 102 + keyGeoToggleDetail: 9 + keyGeoToggleRadar: 114 + keyBaseSelect1: 49 + keyBaseSelect2: 50 + keyBaseSelect3: 51 + keyBaseSelect4: 52 + keyBaseSelect5: 53 + keyBaseSelect6: 54 + keyBaseSelect7: 55 + keyBaseSelect8: 56 + keyBattleLeft: 276 + keyBattleRight: 275 + keyBattleUp: 273 + keyBattleDown: 274 + keyBattleLevelUp: 280 + keyBattleLevelDown: 281 + keyBattleCenterUnit: 278 + keyBattlePrevUnit: 0 + keyBattleNextUnit: 9 + keyBattleDeselectUnit: 92 + keyBattleUseLeftHand: 113 + keyBattleUseRightHand: 101 + keyBattleInventory: 105 + keyBattleMap: 109 + keyBattleOptions: 27 + keyBattleEndTurn: 8 + keyBattleAbort: 97 + keyBattleStats: 115 + keyBattleKneel: 107 + keyBattleReload: 114 + keyBattlePersonalLighting: 108 + keyBattleReserveNone: 282 + keyBattleReserveSnap: 283 + keyBattleReserveAimed: 284 + keyBattleReserveAuto: 285 + keyBattleReserveKneel: 106 + keyBattleZeroTUs: 127 + keyBattleCenterEnemy1: 49 + keyBattleCenterEnemy2: 50 + keyBattleCenterEnemy3: 51 + keyBattleCenterEnemy4: 52 + keyBattleCenterEnemy5: 53 + keyBattleCenterEnemy6: 54 + keyBattleCenterEnemy7: 55 + keyBattleCenterEnemy8: 56 + keyBattleCenterEnemy9: 57 + keyBattleCenterEnemy10: 48 + keyBattleVoxelView: 291 + keyInvCreateTemplate: 99 + keyInvApplyTemplate: 118 + keyInvClear: 120 + keyInvAutoEquip: 122 + oxceModValidationLevel: 2 + oxceRawScreenShots: false + oxceFirstPersonViewFisheyeProjection: false + oxceThumbButtons: true + oxceThrottleMouseMoveEvent: 0 + oxceDisableThinkingProgressBar: false + oxceEmbeddedOnly: false + oxceListVFSContents: false + oxceEnablePaletteFlickerFix: false + oxceRecommendedOptionsWereSet: false + password: secret + oxceStartUpTextMode: 0 + oxceGeoscapeDebugLogMaxEntries: 1000 + oxceGeoSlowdownFactor: 1 + oxceGeoShowScoreInsteadOfFunds: false + oxceGeoEnableTrainingIndicator: false + oxceGeoSuppressRedundantHKAlert: true + oxceGeoSuppressLandingWithoutEquipment: false + oxceGeoGoToNearestBase: false + oxceGeoSortCraftByDistanceToTarget: false + oxceBaseInfoDefenseScaleMultiplier: 100 + oxceBaseSoldierTransformationShowOnlyEligible: false + oxceBaseFilterResearchable: false + oxceBaseManufactureFallbackButton: false + oxceBaseManufactureInfinityButton: false + oxceBaseTouchButtons: false + oxceDisableAlienInventory: false + oxceDisableHitLog: false + oxceDisableInventoryTuCost: false + oxceDisableProductionDependencyTree: false + oxceDisableStatsForNerds: false + oxceDisableTechTreeViewer: false + oxceTogglePersonalLightType: 1 + oxceToggleNightVisionType: 1 + oxceToggleBrightnessType: 0 + oxceShowBurningAsWounded: false + oxceDisableInfoOnThrowCursor: false + oxceSwapDontReselectActions: false + oxceEnableUnitResponseSounds: true + oxceHiddenMovementBackgroundChangeFrequency: 1 + oxceInventoryShowUnitSlot: false + oxceReplaceNotesLink: false + oxceInventorySplitScrollButton: false + oxceInventoryDropItemOverPaperdoll: false + oxceMaxEquipmentLayoutTemplates: 20 + oxceUpdateCheck: false + autosaveSlots: 1 + oxceGeoAutosaveFrequency: 0 + oxceGeoAutosaveSlots: 1 + oxceLinks: false + oxceLinksDisableTextEdit: false + oxceFatFingerLinks: false + oxceBattleTouchButtonsEnabled: false + oxceQuickSearchButton: false + oxceHighlightNewTopics: true + oxcePediaShowClipSize: false + oxceInterceptTableSize: 8 + oxceEnableSlackingIndicator: true + oxceInterceptGuiMaintenanceTime: 2 + oxceShowETAMode: 0 + oxceUfoLandingAlert: false + oxceRememberDisabledCraftWeapons: false + oxceGeoscapeEventsInstantDelivery: true + oxceShowBaseNameInPopups: false + oxceAlternateCraftEquipmentManagement: false + oxceBaseInfoScaleEnabled: false + oxceResearchScrollSpeed: 1 + oxceResearchScrollSpeedWithCtrl: 10 + oxceManufactureFilterSuppliesOK: false + oxceManufactureScrollSpeed: 1 + oxceManufactureScrollSpeedWithCtrl: 10 + oxcePersonalLayoutIncludingArmor: true + oxceManualPromotions: false + oxceWoundedDefendBaseIf: 100 + oxcePlayBriefingMusicDuringEquipment: false + oxceNightVisionColor: 5 + oxceAutoNightVisionThreshold: 15 + oxceShowAccuracyOnCrosshair: 1 + oxceReactionFireThreshold: 0 + oxceAutoSell: false + oxceAutomaticPromotions: true + oxceEnableOffCentreShooting: false + oxceUniformShootingSpread: false + oxceCrashedOrLanded: 0 + keyToggleQuickSearch: 113 + keyInstaSave: 287 + keyGeoUfoTracker: 116 + keyGeoTechTreeViewer: 113 + keyGeoGlobalProduction: 112 + keyGeoGlobalResearch: 99 + keyGeoGlobalAlienContainment: 106 + keyGeoDailyPilotExperience: 101 + keyGraphsZoomIn: 270 + keyGraphsZoomOut: 269 + keyBasescapeBuildNewBase: 110 + keyBasescapeBaseInformation: 105 + keyBasescapeSoldiers: 115 + keyBasescapeEquipCraft: 101 + keyBasescapeBuildFacilities: 102 + keyBasescapeResearch: 114 + keyBasescapeManufacture: 109 + keyBasescapeTransfer: 116 + keyBasescapePurchase: 112 + keyBasescapeSell: 108 + keyRemoveSoldiersFromTraining: 120 + keyAddSoldiersToTraining: 122 + keyCraftLoadoutSave: 286 + keyCraftLoadoutLoad: 290 + keyRemoveSoldiersFromAllCrafts: 120 + keyRemoveSoldiersFromCraft: 122 + keyRemoveEquipmentFromCraft: 120 + keyRemoveArmorFromAllCrafts: 120 + keyRemoveArmorFromCraft: 122 + keyInventorySave: 286 + keyInventoryLoad: 290 + keyInvSavePersonalEquipment: 115 + keyInvLoadPersonalEquipment: 108 + keyInvShowPersonalEquipment: 112 + keyInventoryArmor: 97 + keyInventoryAvatar: 109 + keyInventoryDiaryLight: 100 + keySellAll: 120 + keySellAllButOne: 122 + keyTransferAll: 120 + keyMarkAllAsSeen: 120 + keyBattleUnitUp: 0 + keyBattleUnitDown: 0 + keyBattleShowLayers: 0 + keyBattleUseSpecial: 119 + keyBattleActionItem1: 49 + keyBattleActionItem2: 50 + keyBattleActionItem3: 51 + keyBattleActionItem4: 52 + keyBattleActionItem5: 53 + keyNightVisionToggle: 302 + keyNightVisionHold: 32 + keySelectMusicTrack: 279 + EnableTimeSync: true + EnableHostOnlyTimeSpeed: false + EnableResearchSync: true + UnbalancedCraftSoldiersLimit: false + EnableReactionFirePvp: true + EnableOtherPlayerFootsteps: true + EnableXcomEquipmentAliensPVP: true + debugMode: true + logInfoToFile: false + logPacketMessages: false + EnableHotseatDebugMode: false + keyChat: 257 + giveUnit: 258 diff --git a/tools/coop_test/test_coop_basedef_temp_ufo_uaf.py b/tools/coop_test/test_coop_basedef_temp_ufo_uaf.py new file mode 100644 index 000000000..691d66bc5 --- /dev/null +++ b/tools/coop_test/test_coop_basedef_temp_ufo_uaf.py @@ -0,0 +1,129 @@ +"""Regression test: coop base-defense must not crash on a dangling `temp_ufo`. + +Bug (reported as "save crashes on month end"): GeoscapeState::handleBaseDefense +stashes the attacking retaliation UFO in the file-scope global `temp_ufo` and +DEFERS the coop base-defense through a host<->client handshake. The UFO is freed +during that window (retaliation cleanup / despawn), so GeoscapeState:: +startCoopMission dereferences a dangling pointer -> access violation. See +GeoscapeState.cpp:169 / :6009 / :565 and .agents/repro/coop-basedef-uaf/. + +Scenario: host resumes the fixture coop save (a retaliation is inbound to a base), +the registered client joins, then time advances until the base defense fires. + + * PASS (exit 0): base-defense flow reaches the briefing/battle on both machines + with NO process crash -> the `temp_ufo` read is safe. + * FAIL (exit 2): a game process crashes (the UAF) -> bug present. + * FAIL (exit 3): the base defense never fired within the budget -> fixture/flow + regressed; the test proved nothing (do not treat as green). + +RED before the fix (crashes ~every run, verified), GREEN after. +""" +import glob +import os +import sys +import time + +HERE = os.path.dirname(os.path.abspath(__file__)) +FIXTURE = "coop_basedef_retaliation.sav" +FIXTURE_PATH = os.path.join(HERE, "fixtures", FIXTURE) + +os.environ.setdefault("SDL_VIDEODRIVER", "dummy") +os.environ.setdefault("SDL_AUDIODRIVER", "dummy") +sys.path.insert(0, HERE) +import harness # noqa: E402 +import session # noqa: E402 +import geo # noqa: E402 +from harness import GameClient, make_user_dir # noqa: E402 + +PORT = "47934" +RELEASE_DIR = os.path.dirname(harness.EXE) +BATTLE_STATES = ("BriefingState", "BattlescapeState") + + +def crash_logs(): + hits = [] + for root in (harness.TEST_ROOT, RELEASE_DIR): + hits += glob.glob(os.path.join(root, "**", "crash_*.log"), recursive=True) + return set(hits) + + +def in_battle(gc): + """Interest: fires once the base-defense flow leaves the geoscape.""" + return any(s in geo.top_state(gc) for s in BATTLE_STATES) or None + + +def main(): + assert os.path.isfile(harness.EXE), "no exe (set OXC_TEST_EXE): " + harness.EXE + assert os.path.isfile(FIXTURE_PATH), "missing fixture: " + FIXTURE_PATH + host_dir = make_user_dir("bduaf_host", saves=[FIXTURE_PATH]) + client_dir = make_user_dir("bduaf_client") + pre = crash_logs() + + host = GameClient("host", 48831, host_dir) + client = GameClient("client", 48832, client_dir) + host.spawn(); host.connect() + client.spawn(); client.connect() + + battle_reached = False + note = None + try: + host.ok({"cmd": "load_save_menu", "file": FIXTURE}) + host.wait_for("host window", lambda: session._has_state(host, "HostMenu")) + host.ok({"cmd": "host_tcp", "server": "TestSrv", "port": PORT, "player": "HostPlayer"}) + host.wait_for("resume lobby", lambda: session._has_state(host, "LobbyMenu")) + + client.ok({"cmd": "join_tcp", "ip": "127.0.0.1", "port": PORT, "player": "ClientPlayer"}) + client.wait_for("client lobby", lambda: session._has_state(client, "LobbyMenu")) + + host.wait_for("resume accepted", + lambda: host.cmd({"cmd": "lobby_resume_campaign"}).get("ok") or None, + timeout=60, interval=2.0) + host.wait_for("client world ack", + lambda: host.cmd({"cmd": "get_coop"}).get("resumeAck") or None, + timeout=120) + host.ok({"cmd": "coop_dialog_back"}) + time.sleep(2.0) + geo.drain_popups(host); geo.drain_popups(client) + + # Advance until the base defense fires (interest) or the budget elapses. + res = geo.skip_ingame_time( + host, client, minutes=12 * 24 * 60, + interest=lambda gc: in_battle(gc), + dismiss=True, real_timeout=180, stuck_timeout=None) + battle_reached = res.get("hit") is not None or in_battle(host) or in_battle(client) + except (ConnectionError, OSError) as e: + note = f"{type(e).__name__}: {e}" # socket dropped mid-command == a crash + except Exception as e: + note = f"{type(e).__name__}: {e}" + + time.sleep(1.5) + new_logs = sorted(crash_logs() - pre) + rc_host, rc_client = host.proc.poll(), client.proc.poll() + crashed = (rc_host is not None) or (rc_client is not None) or bool(new_logs) + + print("==== RESULT ====") + print("battle_reached:", bool(battle_reached), "| crashed:", crashed, + "| host rc:", rc_host, "client rc:", rc_client, "| note:", note) + if new_logs: + print("crash logs:", [os.path.basename(x) for x in new_logs]) + with open(new_logs[0], "r", errors="replace") as f: + sys.stdout.write(f.read()) + + for gc in (host, client): + try: + gc.shutdown() + except Exception: + pass + + if crashed: + print("FAIL: coop base-defense crashed (temp_ufo use-after-free)") + sys.exit(2) + if not battle_reached: + print("INCONCLUSIVE: base defense never fired within budget") + sys.exit(3) + print("PASS: coop base-defense reached the battle with no crash") + sys.exit(0) + + +if __name__ == "__main__": + main()