@shipload/sdk 1.0.0-next.51 → 1.0.0-next.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/shipload.d.ts +471 -158
  2. package/lib/shipload.js +2320 -485
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +2290 -484
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +123 -8
  7. package/lib/testing.js +450 -19
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +451 -20
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/capabilities/crafting.ts +10 -1
  13. package/src/capabilities/gathering.ts +1 -1
  14. package/src/capabilities/hauling.ts +0 -5
  15. package/src/capabilities/modules.ts +6 -0
  16. package/src/capabilities/movement.ts +1 -1
  17. package/src/contracts/server.ts +293 -13
  18. package/src/data/capabilities.ts +18 -2
  19. package/src/data/capability-formulas.ts +5 -0
  20. package/src/data/entities.json +235 -20
  21. package/src/data/item-ids.ts +10 -0
  22. package/src/data/items.json +61 -0
  23. package/src/data/kind-registry.json +53 -1
  24. package/src/data/kind-registry.ts +5 -0
  25. package/src/data/metadata.ts +74 -5
  26. package/src/data/recipes-runtime.ts +1 -0
  27. package/src/data/recipes.json +895 -119
  28. package/src/derivation/capabilities.test.ts +105 -4
  29. package/src/derivation/capabilities.ts +162 -57
  30. package/src/derivation/capability-mappings.ts +2 -0
  31. package/src/derivation/crafting.ts +2 -0
  32. package/src/derivation/recipe-usage.test.ts +10 -7
  33. package/src/derivation/rollups.ts +16 -0
  34. package/src/derivation/stat-scaling.ts +12 -0
  35. package/src/entities/makers.ts +10 -1
  36. package/src/index-module.ts +29 -3
  37. package/src/managers/actions.ts +77 -46
  38. package/src/managers/construction-types.ts +2 -2
  39. package/src/managers/construction.ts +15 -15
  40. package/src/managers/plot.ts +1 -1
  41. package/src/nft/buildImmutableData.ts +55 -9
  42. package/src/nft/description.ts +99 -36
  43. package/src/planner/planner.test.ts +50 -41
  44. package/src/resolution/resolve-item.test.ts +1 -1
  45. package/src/resolution/resolve-item.ts +26 -11
  46. package/src/scheduling/availability.ts +7 -6
  47. package/src/scheduling/cancel.test.ts +40 -6
  48. package/src/scheduling/cancel.ts +21 -29
  49. package/src/scheduling/jobs.ts +71 -0
  50. package/src/scheduling/lanes.ts +29 -0
  51. package/src/scheduling/projection.ts +42 -25
  52. package/src/scheduling/task-cargo.ts +1 -1
  53. package/src/testing/projection-parity.ts +2 -2
  54. package/src/travel/reach.ts +4 -6
  55. package/src/travel/route-planner.ts +60 -49
  56. package/src/travel/route-simulator.ts +3 -7
  57. package/src/travel/travel.ts +14 -5
  58. package/src/types/capabilities.ts +9 -3
  59. package/src/types.ts +5 -3
  60. package/src/managers/flatten-gather-plan.test.ts +0 -80
package/lib/shipload.js CHANGED
@@ -448,7 +448,7 @@ var platform = /*#__PURE__*/Object.freeze({
448
448
  Contract: Contract$1
449
449
  });
450
450
 
451
- const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjBAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQlidWlsZHBsb3QAAgpidWlsZGVyX2lkBnVpbnQ2NAdwbG90X2lkBnVpbnQ2NAZjYW5jZWwAAwJpZAZ1aW50NjQIbGFuZV9rZXkFdWludDgFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8JY2xhaW1fcm93AAEFb3duZXIEbmFtZQljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8FY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAWBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAMAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQdpdGVtX2lkBnVpbnQxNgRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdBWxhbmVzBmxhbmVbXQVob2xkcwZob2xkW10OZW50aXR5X3NlcV9yb3cAAQduZXh0X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2DGdlbmVzaXNmbGVldAABCGVudGl0aWVzDGVudGl0eV9yb3dbXQpnZXRjbHVzdGVyAAEGaHViX2lkBnVpbnQ2NAlnZXRjb25maWcAAApnZXRkZXBvc2l0AAIFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQLZ2V0ZGlzdGFuY2UABAJheAVpbnQ2NAJheQVpbnQ2NAJieAVpbnQ2NAJieQVpbnQ2NAtnZXRlbGlnaWJsZQACBmNvb3Jkcwtjb29yZGluYXRlcwdzdHJhdHVtBnVpbnQxNglnZXRlbnRjbHMAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAEJZW50aXR5X2lkBnVpbnQ2NAxnZXRmb290cHJpbnQAAQdpdGVtX2lkBnVpbnQxNgtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAAC2dldGl0ZW10eXBlAAEHaXRlbV9pZAZ1aW50MTYMZ2V0aXRlbXR5cGVzAAALZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtnZXR3b3JtaG9sZQACAXgFaW50NjQBeQVpbnQ2NAlncmlkX2NlbGwAAgJneARpbnQ4Amd5BGludDgMZ3JvdXB0cmFuc2l0AAUIZW50aXRpZXMMZW50aXR5X3JlZltdAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMABAhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MzIQY2FwYWNpdHlfYnlfdGllchFoYXVsZXJfdGllcl9jYXBbXQ9oYXVsZXJfdGllcl9jYXAAAgR0aWVyBXVpbnQ4CGNhcGFjaXR5BXVpbnQ4BGhvbGQABQJpZAZ1aW50NjQEa2luZAV1aW50OAtjb3VudGVycGFydAplbnRpdHlfcmVmBXVudGlsCnRpbWVfcG9pbnQNaW5jb21pbmdfbWFzcwZ1aW50MzILaW1wb3J0Y2FyZ28AAQNyb3cJY2FyZ29fcm93DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQAQBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10MbG9hZGVyX2xhbmVzDWxvYWRlcl9sYW5lW10IbGF1bmNoZXIPbGF1bmNoZXJfc3RhdHM/BHRpZXIFdWludDgIcmVjaGFyZ2UAAQJpZAZ1aW50NjQMcmVjaXBlX2lucHV0AAIHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAgOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdD3NvdXJjZV9zdWJjbGFzcwd1aW50MTY/DnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DHJlbW92ZW9yYWNsZQABCW9yYWNsZV9pZARuYW1lBnJlbmFtZQACAmlkBnVpbnQ2NARuYW1lBnN0cmluZwtyZXNlcnZlX3JvdwAFAmlkBnVpbnQ2NAhjb29yZF9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQGdWludDMyFG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CnJlc29sdmVhbGwAAQVvd25lcgRuYW1lEnJlc29sdmVhbGxfcmVzdWx0cwACB3NjYW5uZWQGdWludDMyCHJlc29sdmVkBnVpbnQzMg1yZXNvdXJjZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyCGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgOcmVzb3VyY2Vfc3RhdHMAAwVzdGF0MQZ1aW50MTYFc3RhdDIGdWludDE2BXN0YXQzBnVpbnQxNhByZXNvdXJjZXNfcmVzdWx0AAEJcmVzb3VyY2VzD3Jlc291cmNlX2luZm9bXQZyZXZlYWwAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGcmV2ZWFsC2NoZWNrc3VtMjU2CnJldmVhbF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBnJldmVhbAtjaGVja3N1bTI1NghybW1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4CnRhcmdldF9yZWYKY2FyZ29fcmVmPwhybW5mdGNmZwABB2l0ZW1faWQGdWludDE2DnJvdXRlX3dheXBvaW50AAIBeAVpbnQ2NAF5BWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwlzZXRjb29yZHMAAwllbnRpdHlfaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAlzZXRuZnRjZmcAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDHNldHRocmVzaG9sZAABCXRocmVzaG9sZAV1aW50OAtzZXR3cmFwY29zdAADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjQKc2V0d3JhcGZlZQACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUIc2xvdF9kZWYAAwR0eXBlBXVpbnQ4Cm91dHB1dF9wY3QGdWludDE2CG1heF90aWVyBXVpbnQ4EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAMHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2CXN0b3djYXJnbwAFBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NApzdG93ZW50aXR5AAMFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAMHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlCnN3YXBtb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZghzd2FwdGlsZQAFBmh1Yl9pZAZ1aW50NjQEYV9neARpbnQ4BGFfZ3kEaW50OARiX2d4BGludDgEYl9neQRpbnQ4BHRhc2sACgR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPwRob2xkB3VpbnQ2ND8OdGFyZ2V0X2l0ZW1faWQHdWludDE2Pwp0YXNrX2V2ZW50AAoKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BnVpbnQzMgR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MzI/CGxhbmVfa2V5BXVpbnQ4DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXRF0ZW1wbGF0ZV9tZXRhX3JvdwADB2l0ZW1faWQGdWludDE2BGtpbmQEbmFtZQ1kaXNwbGF5X2xhYmVsBnN0cmluZwd0cmFuc2l0AAUCaWQGdWludDY0AmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0BnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAt0cmF2ZWxyb3V0ZQADCGVudGl0aWVzDGVudGl0eV9yZWZbXQl3YXlwb2ludHMQcm91dGVfd2F5cG9pbnRbXQhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwAFAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcWc3RyYXR1bV9yZW1haW5pbmdfdHlwZRFzdHJhdHVtX3JlbWFpbmluZxVuZnRfaXRlbV9wYXlsb2FkX3R5cGUQbmZ0X2l0ZW1fcGF5bG9hZAh1bmRlcGxveQACB2hvc3RfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQGdW5sb2FkAAMCaWQGdWludDY0BXRvX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10HdXBncmFkZQAFCmJ1aWxkZXJfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQOdGFyZ2V0X2l0ZW1faWQGdWludDE2BmlucHV0cwxjYXJnb19pdGVtW10Ec2xvdAZ1aW50OD8Ed2FycAADAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAANd29ybWhvbGVfaW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwtpc193b3JtaG9sZQRib29sC2Rlc3RpbmF0aW9uC2Nvb3JkaW5hdGVzDndyYXBjb25maWdfcm93AAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQx3cmFwY29zdF9yb3cAAwlpdGVtX3R5cGUFdWludDgEdGllcgV1aW50OAZhbW91bnQGdWludDY0YgAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABQEZlLUzIJYWRkb3JhY2xlAAAAAACANFU8BWJsZW5k/AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBuZXcgYmxlbmRlZCBzdGF0cy4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAyDTWFJ0+CWJ1aWxkcGxvdAAAAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAMg0VulMRAljbGFpbXBsb3QAcFW+JmPpTEQMY2xhaW1zdGFydGVyAAAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLgAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24ukJWKCzuspmIMZ2VuZXNpc2ZsZWV0qQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2VuZXNpc2ZsZWV0CnN1bW1hcnk6ICdNaW50IHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbXBsYWNlIHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0OiBhIGNhbGxlci1zdXBwbGllZCBzZXQgb2YgZW50aXRpZXMgKHNoaXBzLCBzdHJ1Y3R1cmVzLCBhbmQgY29udGFpbmVycykgd3JpdHRlbiB0byB0aGUgd29ybGQgYXMtaXMuIFZhbGlkIG9ubHkgZHVyaW5nIHRoZSBwcmUtZ2VuZXNpcyB3aW5kb3csIGJlZm9yZSBlcG9jaCAxIGlzIGZpbmFsaXplZC4gVGhlIHN1cHBsaWVkIGVudGl0eSBpZHMgYXJlIGhvbm9yZWQgYW5kIHRoZSBpZCBzZXF1ZW5jZSBpcyBhZHZhbmNlZCBwYXN0IHRoZW07IGlkIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBHZW5lc2lzIE5leHVzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAMBVGeuIsmIKZ2V0Y2x1c3RlcgAAAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBAdphWlbJiCmdldGRlcG9zaXQAABSaJmOXsmILZ2V0ZGlzdGFuY2UAAFQ8jrmosmILZ2V0ZWxpZ2libGXIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbGlnaWJsZQpzdW1tYXJ5OiAnR2V0IGVsaWdpYmxlIHJlc291cmNlIGl0ZW0gSURzIGF0IGEgbG9jYXRpb24gYW5kIHN0cmF0dW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlc291cmNlIGl0ZW0gSURzIGVsaWdpYmxlIHRvIGJlIGdhdGhlcmVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgc3RyYXR1bSBkZXB0aC4gSXRlbXMgYXJlIGdhdGVkIGJ5IGJvdGggdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgcHJvZmlsZSBhbmQgdGhlIGRlcHRoIHRocmVzaG9sZCBmb3IgZWFjaCB0aWVyLgAAwBHlqbJiCWdldGVudGNsc4wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGNscwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChPcmJpdGFsVmVzc2VsLCBQbGFuZXRhcnlTdHJ1Y3R1cmUpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBlbnRpdHkgY2xhc3MgaWRlbnRpZmllcnMuALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMukKe7NVO6smIMZ2V0Zm9vdHByaW50AABMNkmq7LJiC2dldGl0ZW1kYXRhqAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuAABOTqrssmIKZ2V0aXRlbWlkc4YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1pZHMKc3VtbWFyeTogJ0dldCBpdGVtIGlkIHRvIG5hbWUgbWFwcGluZ3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIG1hcHBpbmcgb2YgaXRlbSBpZCBjb25zdGFudHMgdG8gdGhlaXIgY2Fub25pY2FsIHN0cmluZyBuYW1lcy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byByZXNvbHZlIG51bWVyaWMgaXRlbSBpZHMgdG8gaHVtYW4tcmVhZGFibGUgaWRlbnRpZmllcnMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgBU9Vmq7LJiC2dldGl0ZW10eXBlAIBV9Vmq7LJiDGdldGl0ZW10eXBlc4gDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW10eXBlcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gdHlwZSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGl0ZW0gdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChyZXNvdXJjZSwgY29tcG9uZW50LCBtb2R1bGUsIGVudGl0eSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGl0ZW0gdHlwZSBpZGVudGlmaWVycy4ATFYyTQezYgtnZXRraW5kbWV0YfgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGtpbmRtZXRhCnN1bW1hcnk6ICdHZXQgZW50aXR5IGtpbmQgbWV0YWRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBlbnRpdHkga2luZCByZWdpc3RyeSBhbmQgdGVtcGxhdGUgcmVnaXN0cnksIGluY2x1ZGluZyBlYWNoIGtpbmQncyBjbGFzc2lmaWNhdGlvbiwgY2FwYWJpbGl0eSBmbGFncywgWi1jb29yZGluYXRlLCBhbmQgZGVmYXVsdCBsYWJlbCwgcGx1cyB0aGUgbWFwcGluZyBvZiBlbnRpdHkgaXRlbSBpZHMgdG8ga2luZHMgd2l0aCBkaXNwbGF5IGxhYmVscy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBpbnRlcnByZXQgZW50aXR5IGtpbmRzIGFuZCBjYXBhYmlsaXRpZXMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnnKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBhbmQgZmxpZ2h0IHRpbWUuAIDC5uQ1s2IKZ2V0bmZ0YmFzZQAAAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS6gssn40VuzYgxnZXRwcm9qc3RhdGXLAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwcm9qc3RhdGUKc3VtbWFyeTogJ0dldCBwcm9qZWN0ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcHJvamVjdGVkIHN0YXRlIG9mIGFuIGVudGl0eSBhZnRlciBhcHBseWluZyB0aGUgbmV4dCB0YXNrX2NvdW50IHNjaGVkdWxlZCB0YXNrcyAob3IgYWxsIHRhc2tzIGlmIHRhc2tfY291bnQgaXMgb21pdHRlZCkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcHJldmlldyB0aGUgcmVzdWx0IG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlIHdpdGhvdXQgcmVzb2x2aW5nIG9uLWNoYWluLgAAUNUhdbNiCWdldHJlY2lwZaYDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4AAFbVIXWzYgpnZXRyZWNpcGVzrAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLgAAzgZhdbNiCmdldHJlc2NhdHOeAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNjYXRzCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiByZXNvdXJjZSBjYXRlZ29yeSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChvcmUsIGdhcywgcmVnb2xpdGgsIGJpb21hc3MsIGNyeXN0YWwpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSByZXNvdXJjZSBzdWJ0eXBlIGlkZW50aWZpZXJzLgCw2ldhdbNiC2dldHJlc2VydmVz/AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzZXJ2ZXMKc3VtbWFyeTogJ0dldCBjdXJyZW50IHJlc2VydmUgbW9kaWZpY2F0aW9ucyBhdCBhIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBjaGFpbidzIG1vZGlmaWNhdGlvbnMgdG8gZGVyaXZlZCByZXNlcnZlcyBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBmb3IgdGhlIGN1cnJlbnQgZXBvY2ggYXMgYSBsaXN0IG9mIHtzdHJhdHVtLCByZW1haW5pbmd9IHBhaXJzLiBTdHJhdGEgbm90IHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIHVzZSB0aGVpciBkZXJpdmVkIGluaXRpYWwgcmVzZXJ2ZS4gQ29tcG9zZSB3aXRoIFNESyBkZXJpdmF0aW9uIHRvIGdldCB0aGUgZnVsbCBwZXItbG9jYXRpb24gc3RyYXRhIHZpZXcugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzhwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwDgs8tT5UurdAxpbXBvcnRlbnRpdHkAAKqml+VLq3QLaW1wb3J0Z3JvdXAAcJU3seZLq3QMaW1wb3J0cGxheWVyALqvwurmS6t0DWltcG9ydHJlc2VydmUAAFQ2GedLq3QLaW1wb3J0c3RhdGUAAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAA0NLWJBmxhdW5jaAAAAAAAAJAMjQRsb2FkAAAAACq6rDaVCG1vdmV0aWxlAAAAiFcz6fKaCW5mdGltZ3VybLIDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5mdGltZ3VybApzdW1tYXJ5OiAnR2V0IE5GVCBpbWFnZSBVUkwgZm9yIGEgY2FyZ28gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGltYWdlIFVSTCB0aGUgY29udHJhY3QgZW1pdHMgZm9yIGEgZ2l2ZW4gY2FyZ28gaXRlbSwgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBsb2NhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBmZXRjaCB0aGUgY2Fub25pY2FsIGFydHdvcmsgZm9yIGFuIGl0ZW0gb3IgcGFja2VkIGVudGl0eS4AAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAGXXIIVMrApwbGFjZWNhcmdvyQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VjYXJnbwpzdW1tYXJ5OiAnUmVzdG9yZSBORlQgY2FyZ28gb250byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzdG9yZXMgdGhlIGNhcmdvIHJlY29yZGVkIGluIGFuIHVud3JhcHBlZCBORlQgb250byBhIGhvc3QgZW50aXR5LiBWYWxpZGF0ZXMgaG9zdCBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCByZW1haW5pbmcgY2FwYWNpdHksIGRlc2VyaWFsaXplcyB0aGUgTkZUJ3MgaXRlbSBkYXRhLCBhbmQgYXBwZW5kcyBhbiB1bndyYXAgdGFzayB0byBkZWxpdmVyIHRoZSBjYXJnbyB0byB0aGUgaG9zdC4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AfHZ5KoVMrAtwbGFjZWVudGl0ecAELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBsYWNlZW50aXR5CnN1bW1hcnk6ICdNYXRlcmlhbGl6ZSBhIHBhY2tlZC1lbnRpdHkgTkZUIGFzIGEgbGl2ZSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBFbXBsYWNlcyBhIGxpdmUgb3JiaXRhbCB2ZXNzZWwgKHNoaXAgb3IgY29udGFpbmVyKSBmcm9tIGl0cyBwYWNrZWQtZW50aXR5IE5GVCBkYXRhIGF0IHRoZSByZWNvcmRlZCB3cmFwIG9yaWdpbiwgdGhlbiBxdWV1ZXMgdHJhdmVsIGFuZCByZWNoYXJnZSB0YXNrcyB0byBkZWxpdmVyIGl0IHRvIHRoZSB0YXJnZXQgbmV4dXMgYXQgZnVsbCBlbmVyZ3kuIFRoZSBwbGF0Zm9ybSBjb250cmFjdCBjcmVkaXRzIHRoZSBkZXBvc2l0IHJlZnVuZCBhbmQgYnVybnMgdGhlIGFzc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLuCzy1M1fJe6DHJlZnJzaGVudGl0ebgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlZnJzaGVudGl0eQpzdW1tYXJ5OiAnUmVmcmVzaCBkZXJpdmVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGRlcml2ZWQgZmllbGRzIG9uIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGNhcmdvIGFuZCBtb2R1bGVzLCByZWZyZXNoaW5nIGNhcGFiaWxpdHkgc3RhdHMgYW5kIGNhcmdvIG1hc3MuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBVc2VkIHRvIHJlY29uY2lsZSBkZXJpdmVkIHN0YXRlIGFmdGVyIGRhdGEgbWlncmF0aW9ucyBvciBjb250cmFjdCB1cGdyYWRlcy6gIjKXqk2lugxyZW1vdmVvcmFjbGUAAAAAAChpproGcmVuYW1lAAAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAECMRu1IsboKcmVzb2x2ZWFsbAAAAAAARKO2ugZyZXZlYWwAAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAMDpUoqywglzZXRjb29yZHMAAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LpAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAoOwaxGnGCXN0b3djYXJnb9UFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3djYXJnbwpzdW1tYXJ5OiAnUmVzZXJ2ZSBhIGNhcmdvIHN0YWNrIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGFuZCBjb25zdW1lcyBhIGNhcmdvIHN0YWNrIG9uIGEgbGl2ZSBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBWYWxpZGF0ZXMgZW50aXR5IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHByZXNlbmNlIGF0IHRoZSBuZXh1cywgYW5kIGNvbmZpcm1zIHRoZSB0YXJnZXQgY2FyZ28gc3RhY2sgaXMgYXZhaWxhYmxlIGFuZCBub3QgcmVzZXJ2ZWQgYnkgYSBwZW5kaW5nIHRhc2suIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIE5GVCdzIGltbXV0YWJsZSBkYXRhLCBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QgYmVmb3JlIGNvbnN1bWluZyB0aGUgY2FyZ28uIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgM8uT8VpxgpzdG93ZW50aXR5mQUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2VudGl0eQpzdW1tYXJ5OiAnUmVzZXJ2ZSBhbiBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYSB3aG9sZSBlbnRpdHkgKHNoaXAsIGNvbnRhaW5lciwgb3IgcGxhbmV0YXJ5IHN0cnVjdHVyZSkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvIGFuZCBubyBzY2hlZHVsZWQgdGFza3MuIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIGVudGl0eSBORlQncyBpbW11dGFibGUgZGF0YSwgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QsIGFuZCBlcmFzZXMgdGhlIGVudGl0eSBmcm9tIHRoZSB3b3JsZC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAijpRWQ3HCnN3YXBtb2R1bGUAAAAAKrpcDccIc3dhcHRpbGUAAAAAIDs8zc0HdHJhbnNpdAAAAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAFTW9Ea1zc0LdHJhdmVscm91dGUAAAAAnsaq0tQIdW5kZXBsb3nnBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bmRlcGxveQpzdW1tYXJ5OiAnUGFjayBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGEgaG9zdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUGFjayBhbiBlbnRpdHkgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28gYXMgYSBwYWNrZWQtZW50aXR5IGl0ZW0uIEhvc3QgYW5kIHRhcmdldCBtdXN0IHNoYXJlIHRoZSBzYW1lIG93bmVyIGFuZCBjb29yZGluYXRlcywgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMgYW5kIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHBhY2tlZCBtYXNzLCBhbmQgdGhlIHRhcmdldCBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnby4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBhbmQgc2NoZWR1bGVzIHVuZGVwbG95IHRhc2tzIG9uIGJvdGggZW50aXRpZXM7IG9uIHJlc29sdXRpb24gdGhlIHRhcmdldCBpcyBlcmFzZWQgYW5kIHRoZSBwYWNrZWQgZW50aXR5IGlzIGFkZGVkIHRvIHRoZSBob3N0J3MgY2FyZ28uIEludmVyc2Ugb2YgZGVwbG95LgAAAAAkQ+PUBnVubG9hZAAAAABAJXNZ1Qd1cGdyYWRlAAAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tEgAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAAABg6UxEA2k2NAAACWNsYWltX3JvdwAAAOCqjHVEA2k2NAAAC2NsdXN0ZXJfcm93AAAAAGQnJUUDaTY0AAAKY29tbWl0X3JvdwAAAAD47PJUA2k2NAAACmVudGl0eV9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAALAK++zyVANpNjQAAA5lbnRpdHlfc2VxX3JvdwAAAACAhmhVA2k2NAAACWVwb2NoX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABza1JUzeUDaTY0AAAOd3JhcGNvbmZpZ19yb3cAAAAZU1TN5QNpNjQAAAx3cmFwY29zdF9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAQAAAyDTWFJ0+DHRhc2tfcmVzdWx0cwAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAADINFbpTEQMdGFza19yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAMBVGeuIsmILY2x1c3Rlcl9yb3cAAGBuTYqyYgtnYW1lX2NvbmZpZwBAdphWlbJiDmV4dGVuZGVkX2Fzc2V0ABSaJmOXsmIGdWludDY0AFQ8jrmosmIIdWludDE2W10AAMAR5amyYgtlbnVtX3Jlc3VsdACwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mb5CnuzVTurJiEGZvb3RwcmludF9yZXN1bHQATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAE5OquyyYg9pdGVtX2lkc19yZXN1bHQAAABYquyyYgppdGVtc19pbmZvAFT1WarssmIFdWludDiAVfVZquyyYgtlbnVtX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQBUpE1eyrNiDXdvcm1ob2xlX2luZm+QHZ7m5qrpZQx0YXNrX3Jlc3VsdHMAotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAADQ0tYkMdGFza19yZXN1bHRzAAAAAACQDI0MdGFza19yZXN1bHRzAAAAKrqsNpUMdGFza19yZXN1bHRzAACIVzPp8poGc3RyaW5nAABl1yCFTKwMdGFza19yZXN1bHRzAHx2eSqFTKwMdGFza19yZXN1bHRzAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAECMRu1IsboScmVzb2x2ZWFsbF9yZXN1bHRzAACg7BrEacYMdGFza19yZXN1bHRzAIDPLk/FacYMdGFza19yZXN1bHRzAAAAKrpcDccMdGFza19yZXN1bHRzAAAAIDs8zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRzAFTW9Ea1zc0MdGFza19yZXN1bHRzAAAAnsaq0tQMdGFza19yZXN1bHRzAAAAACRD49QMdGFza19yZXN1bHRzAAAAQCVzWdUMdGFza19yZXN1bHRzAAAAAABQr+EMdGFza19yZXN1bHRz');
451
+ const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjWAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8IY291cGxpbmcAAwtjb3VudGVycGFydAplbnRpdHlfcmVmBGhvbGQGdWludDY0BGtpbmQFdWludDgFY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIY3JhZnRqb2IABgdzaGlwX2lkBnVpbnQ2NAt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OAlyZWNpcGVfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZpbnB1dHMMY2FyZ29faXRlbVtdCWRlbGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQ1idWlsZGVyX2xhbmVzDmJ1aWxkZXJfbGFuZVtdDGxvYWRlcl9sYW5lcw1sb2FkZXJfbGFuZVtdCGxhdW5jaGVyD2xhdW5jaGVyX3N0YXRzPwVsYW5lcwZsYW5lW10FaG9sZHMGaG9sZFtdDWVudGl0eV9sYXlvdXQAAw5lbnRpdHlfaXRlbV9pZAZ1aW50MTYFc2xvdHMKc2xvdF9kZWZbXQ1iYXNlX2h1bGxtYXNzBnVpbnQzMhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAAQhlbnRpdGllcw9lbnRpdHlfbGF5b3V0W10KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAplbnRpdHlfcm93AAwCaWQGdWludDY0BW93bmVyBG5hbWUEa2luZARuYW1lB2l0ZW1faWQGdWludDE2BG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kHdWludDMyPwljYXJnb21hc3MGdWludDMyB21vZHVsZXMObW9kdWxlX2VudHJ5W10FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ5lbnRpdHlfc2VxX3JvdwABB25leHRfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAZ1aW50MzIQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2CmdhdGhlcnBsYW4ABglzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIIcmVjaGFyZ2UEYm9vbAVzbG90cwVieXRlcwxnZW5lc2lzZmxlZXQAAQhlbnRpdGllcwxlbnRpdHlfcm93W10KZ2V0Y2x1c3RlcgABBmh1Yl9pZAZ1aW50NjQJZ2V0Y29uZmlnAAAKZ2V0ZGVwb3NpdAACBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0C2dldGRpc3RhbmNlAAQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYJZ2V0ZW50Y2xzAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMZ2V0Zm9vdHByaW50AAEHaXRlbV9pZAZ1aW50MTYLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAtnZXRpdGVtdHlwZQABB2l0ZW1faWQGdWludDE2DGdldGl0ZW10eXBlcwAAB2dldGpvYnMAAQt3b3Jrc2hvcF9pZAZ1aW50NjQLZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAApnZXRzZXJ2aWNlAAELd29ya3Nob3BfaWQGdWludDY0CGdldHNsb3RzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dldHdvcm1ob2xlAAIBeAVpbnQ2NAF5BWludDY0CWdyaWRfY2VsbAACAmd4BGludDgCZ3kEaW50OAxncm91cHRyYW5zaXQABQhlbnRpdGllcwxlbnRpdHlfcmVmW10CYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwAECGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQzMhBjYXBhY2l0eV9ieV90aWVyEWhhdWxlcl90aWVyX2NhcFtdD2hhdWxlcl90aWVyX2NhcAACBHRpZXIFdWludDgIY2FwYWNpdHkFdWludDgEaG9sZAAFAmlkBnVpbnQ2NARraW5kBXVpbnQ4C2NvdW50ZXJwYXJ0CmVudGl0eV9yZWYFdW50aWwKdGltZV9wb2ludA1pbmNvbWluZ19tYXNzBnVpbnQzMgtpbXBvcnRjYXJnbwABA3JvdwljYXJnb19yb3cKaW1wb3J0Y2VsbAAEBHJvb3QGdWludDY0Amd4BGludDgCZ3kEaW50OAllbnRpdHlfaWQGdWludDY0DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdC2pvYl9yZWNlaXB0AAMGam9iX2lkBnVpbnQ2NAlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludAdqb2Jfcm93AAwCaWQGdWludDY0CHdvcmtzaG9wBnVpbnQ2NAZzb2NrZXQFdWludDgFb3duZXIEbmFtZQdzaGlwX2lkBnVpbnQ2NAZjb29yZHMLY29vcmRpbmF0ZXMJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzILZW5lcmd5X3BhaWQGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQtqb2JzX3Jlc3VsdAABBGpvYnMJam9iX3Jvd1tdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1pZ3JhdGV0YXNrcwABBWJhdGNoBnVpbnQzMgdtaWdzd2FwAAEFYmF0Y2gGdWludDMyDG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQARBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8EdGllcgV1aW50OAhyZWNoYXJnZQABAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAgdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UACA5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10Pc291cmNlX3N1YmNsYXNzB3VpbnQxNj8OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdDHJlZnJzaGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMcmVtb3Zlb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUGcmVuYW1lAAICaWQGdWludDY0BG5hbWUGc3RyaW5nC3Jlc2VydmVfcm93AAUCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUHcmVzb2x2ZQACAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAZ1aW50MzIUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8KcmVzb2x2ZWFsbAABBW93bmVyBG5hbWUScmVzb2x2ZWFsbF9yZXN1bHRzAAIHc2Nhbm5lZAZ1aW50MzIIcmVzb2x2ZWQGdWludDMyDXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdBnJldmVhbAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZyZXZlYWwLY2hlY2tzdW0yNTYKcmV2ZWFsX3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGcmV2ZWFsC2NoZWNrc3VtMjU2CHJtbW9kdWxlAAMJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgKdGFyZ2V0X3JlZgpjYXJnb19yZWY/CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYOcm91dGVfd2F5cG9pbnQAAgF4BWludDY0AXkFaW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nC3NlcnZpY2Vfcm93AAIGZW50aXR5BnVpbnQ2NAdzb2NrZXRzEHNlcnZpY2Vfc29ja2V0W10Oc2VydmljZV9zb2NrZXQAAQRvcGVuBGJvb2wIc2V0Y2l2aWMAAQdhY2NvdW50BG5hbWUJc2V0Y29vcmRzAAMJZW50aXR5X2lkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQlzZXRzb2NrZXQAAwt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OARvcGVuBGJvb2wMc2V0dGhyZXNob2xkAAEJdGhyZXNob2xkBXVpbnQ4C3NldHdyYXBjb3N0AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NApzZXR3cmFwZmVlAAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQdzaHV0dGxlAAQHY2FycmllcgZ1aW50NjQHZnJvbV9pZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQhzbG90X2RlZgADBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYIbWF4X3RpZXIFdWludDgSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cAAwdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYJc3Rvd2NhcmdvAAUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CnN0b3dlbnRpdHkAAwVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAFB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgtyZXNlcnZlX21heAZ1aW50MzIRc3RyYXR1bV9yZW1haW5pbmcAAwdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUKc3dhcG1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4Cm1vZHVsZV9yZWYJY2FyZ29fcmVmCHN3YXB0aWxlAAUGaHViX2lkBnVpbnQ2NARhX2d4BGludDgEYV9neQRpbnQ4BGJfZ3gEaW50OARiX2d5BGludDgEdGFzawAKBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQljb3VwbGluZ3MKY291cGxpbmdbXQdzdWJqZWN0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPw50YXJnZXRfaXRlbV9pZAd1aW50MTY/CnRhc2tfZXZlbnQACgpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgGdWludDMyBHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQzMj8IbGFuZV9rZXkFdWludDgMdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdEXRlbXBsYXRlX21ldGFfcm93AAMHaXRlbV9pZAZ1aW50MTYEa2luZARuYW1lDWRpc3BsYXlfbGFiZWwGc3RyaW5nB3RyYW5zaXQABQJpZAZ1aW50NjQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQGdHJhdmVsAAQCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCnRyYXZlbHBsYW4AAwhlbnRpdGllcwxlbnRpdHlfcmVmW10Jd2F5cG9pbnRzEHJvdXRlX3dheXBvaW50W10IcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABQJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcVbmZ0X2l0ZW1fcGF5bG9hZF90eXBlEG5mdF9pdGVtX3BheWxvYWQIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BnVubG9hZAADAmlkBnVpbnQ2NAV0b19pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdB3VwZ3JhZGUABQpidWlsZGVyX2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0DnRhcmdldF9pdGVtX2lkBnVpbnQxNgZpbnB1dHMMY2FyZ29faXRlbVtdBHNsb3QGdWludDg/BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADXdvcm1ob2xlX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMLaXNfd29ybWhvbGUEYm9vbAtkZXN0aW5hdGlvbgtjb29yZGluYXRlcw53cmFwY29uZmlnX3JvdwACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUMd3JhcGNvc3Rfcm93AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NG8AAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAUBGZS1MyCWFkZG9yYWNsZQAAAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAMg01hSdPglidWlsZHBsb3QAAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAAA49EWFpkEJY2FuY2Vsam9iAAAAAIc+6UxECGNsYWltam9iAAAAyDRW6UxECWNsYWltcGxvdABwVb4mY+lMRAxjbGFpbXN0YXJ0ZXIAAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMuAAAAh768zEUIY3JhZnRqb2IAAADw2eWpokoJZGVsZW50aXR5AAAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAMA0sV7VsmEKZ2F0aGVycGxhbgCQlYoLO6ymYgxnZW5lc2lzZmxlZXSpBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZW5lc2lzZmxlZXQKc3VtbWFyeTogJ01pbnQgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVtcGxhY2UgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQ6IGEgY2FsbGVyLXN1cHBsaWVkIHNldCBvZiBlbnRpdGllcyAoc2hpcHMsIHN0cnVjdHVyZXMsIGFuZCBjb250YWluZXJzKSB3cml0dGVuIHRvIHRoZSB3b3JsZCBhcy1pcy4gVmFsaWQgb25seSBkdXJpbmcgdGhlIHByZS1nZW5lc2lzIHdpbmRvdywgYmVmb3JlIGVwb2NoIDEgaXMgZmluYWxpemVkLiBUaGUgc3VwcGxpZWQgZW50aXR5IGlkcyBhcmUgaG9ub3JlZCBhbmQgdGhlIGlkIHNlcXVlbmNlIGlzIGFkdmFuY2VkIHBhc3QgdGhlbTsgaWQgMCBpcyByZXNlcnZlZCBmb3IgdGhlIEdlbmVzaXMgTmV4dXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AwFUZ64iyYgpnZXRjbHVzdGVyAAAAYG5NirJiCWdldGNvbmZpZ8oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGNvbmZpZwpzdW1tYXJ5OiAnR2V0IGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgZ2FtZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBkZWZhdWx0IGVudGl0eSBzdGF0cyBmb3Igd2FyZWhvdXNlcyBhbmQgY29udGFpbmVycywgYW5kIHRoZSBmdWxsIGl0ZW0gZGVmaW5pdGlvbnMgdGFibGUuAEB2mFaVsmIKZ2V0ZGVwb3NpdAAAFJomY5eyYgtnZXRkaXN0YW5jZQAAVDyOuaiyYgtnZXRlbGlnaWJsZcgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVsaWdpYmxlCnN1bW1hcnk6ICdHZXQgZWxpZ2libGUgcmVzb3VyY2UgaXRlbSBJRHMgYXQgYSBsb2NhdGlvbiBhbmQgc3RyYXR1bScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVzb3VyY2UgaXRlbSBJRHMgZWxpZ2libGUgdG8gYmUgZ2F0aGVyZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBzdHJhdHVtIGRlcHRoLiBJdGVtcyBhcmUgZ2F0ZWQgYnkgYm90aCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBwcm9maWxlIGFuZCB0aGUgZGVwdGggdGhyZXNob2xkIGZvciBlYWNoIHRpZXIuAADAEeWpsmIJZ2V0ZW50Y2xzjAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50Y2xzCnN1bW1hcnk6ICdHZXQgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKE9yYml0YWxWZXNzZWwsIFBsYW5ldGFyeVN0cnVjdHVyZSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGVudGl0eSBjbGFzcyBpZGVudGlmaWVycy4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy6Qp7s1U7qyYgxnZXRmb290cHJpbnQAAEw2SarssmILZ2V0aXRlbWRhdGGoAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtZGF0YQpzdW1tYXJ5OiAnR2V0IGZ1bGwgaXRlbSBjYXRhbG9nJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY29tcGxldGUgaXRlbSBjYXRhbG9nIGFzIHRoZSBjb250cmFjdCBzZWVzIGl0LCBpbmNsdWRpbmcgdHlwZSwgc3VidHlwZSwgdGllciwgbWFzcywgYW5kIG90aGVyIHN0YXRpYyBtZXRhZGF0YS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgY2xpZW50cyB0byBtaXJyb3IgdGhlIGNvbnRyYWN0J3MgaXRlbSBkZWZpbml0aW9ucy4AAE5OquyyYgpnZXRpdGVtaWRzhgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWlkcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gaWQgdG8gbmFtZSBtYXBwaW5ncycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgbWFwcGluZyBvZiBpdGVtIGlkIGNvbnN0YW50cyB0byB0aGVpciBjYW5vbmljYWwgc3RyaW5nIG5hbWVzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHJlc29sdmUgbnVtZXJpYyBpdGVtIGlkcyB0byBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVycy4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuAFT1WarssmILZ2V0aXRlbXR5cGUAgFX1WarssmIMZ2V0aXRlbXR5cGVziAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXR5cGVzCnN1bW1hcnk6ICdHZXQgaXRlbSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgaXRlbSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKHJlc291cmNlLCBjb21wb25lbnQsIG1vZHVsZSwgZW50aXR5KS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgaXRlbSB0eXBlIGlkZW50aWZpZXJzLgAAAAAf+rJiB2dldGpvYnMAAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgCAQm5fhbNiCmdldHNlcnZpY2UAAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwAAQIwK5UurdAppbXBvcnRjZWxsAOCzy1PlS6t0DGltcG9ydGVudGl0eQAAqqaX5UurdAtpbXBvcnRncm91cABwlTex5kurdAxpbXBvcnRwbGF5ZXIAuq/C6uZLq3QNaW1wb3J0cmVzZXJ2ZQAAVDYZ50urdAtpbXBvcnRzdGF0ZQAAAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAADQ0tYkGbGF1bmNoAAAAAAAAkAyNBGxvYWQAgCE2WWVzmZMMbWlncmF0ZXRhc2tzAAAAAKAajpmTB21pZ3N3YXAAAAAAKrqsNpUIbW92ZXRpbGUAAACIVzPp8poJbmZ0aW1ndXJssgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbmZ0aW1ndXJsCnN1bW1hcnk6ICdHZXQgTkZUIGltYWdlIFVSTCBmb3IgYSBjYXJnbyBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgaW1hZ2UgVVJMIHRoZSBjb250cmFjdCBlbWl0cyBmb3IgYSBnaXZlbiBjYXJnbyBpdGVtLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIGxvY2F0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGZldGNoIHRoZSBjYW5vbmljYWwgYXJ0d29yayBmb3IgYW4gaXRlbSBvciBwYWNrZWQgZW50aXR5LgAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAZdcghUysCnBsYWNlY2FyZ2/JBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWNhcmdvCnN1bW1hcnk6ICdSZXN0b3JlIE5GVCBjYXJnbyBvbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXN0b3JlcyB0aGUgY2FyZ28gcmVjb3JkZWQgaW4gYW4gdW53cmFwcGVkIE5GVCBvbnRvIGEgaG9zdCBlbnRpdHkuIFZhbGlkYXRlcyBob3N0IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHJlbWFpbmluZyBjYXBhY2l0eSwgZGVzZXJpYWxpemVzIHRoZSBORlQncyBpdGVtIGRhdGEsIGFuZCBhcHBlbmRzIGFuIHVud3JhcCB0YXNrIHRvIGRlbGl2ZXIgdGhlIGNhcmdvIHRvIHRoZSBob3N0LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgB8dnkqhUysC3BsYWNlZW50aXR5wAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VlbnRpdHkKc3VtbWFyeTogJ01hdGVyaWFsaXplIGEgcGFja2VkLWVudGl0eSBORlQgYXMgYSBsaXZlIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIEVtcGxhY2VzIGEgbGl2ZSBvcmJpdGFsIHZlc3NlbCAoc2hpcCBvciBjb250YWluZXIpIGZyb20gaXRzIHBhY2tlZC1lbnRpdHkgTkZUIGRhdGEgYXQgdGhlIHJlY29yZGVkIHdyYXAgb3JpZ2luLCB0aGVuIHF1ZXVlcyB0cmF2ZWwgYW5kIHJlY2hhcmdlIHRhc2tzIHRvIGRlbGl2ZXIgaXQgdG8gdGhlIHRhcmdldCBuZXh1cyBhdCBmdWxsIGVuZXJneS4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUu4LPLUzV8l7oMcmVmcnNoZW50aXR5uAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVmcnNoZW50aXR5CnN1bW1hcnk6ICdSZWZyZXNoIGRlcml2ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgZGVyaXZlZCBmaWVsZHMgb24gYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgY2FyZ28gYW5kIG1vZHVsZXMsIHJlZnJlc2hpbmcgY2FwYWJpbGl0eSBzdGF0cyBhbmQgY2FyZ28gbWFzcy4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFVzZWQgdG8gcmVjb25jaWxlIGRlcml2ZWQgc3RhdGUgYWZ0ZXIgZGF0YSBtaWdyYXRpb25zIG9yIGNvbnRyYWN0IHVwZ3JhZGVzLqAiMpeqTaW6DHJlbW92ZW9yYWNsZQAAAAAAKGmmugZyZW5hbWUAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AQIxG7UixugpyZXNvbHZlYWxsAAAAAABEo7a6BnJldmVhbAAAAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAMhth7LCCHNldGNpdmljAAAAwOlSirLCCXNldGNvb3JkcwAAAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAADICiKKs8IJc2V0c29ja2V0AJAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAAEDFnHXDB3NodXR0bGUAAACg7BrEacYJc3Rvd2Nhcmdv1QUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2NhcmdvCnN1bW1hcnk6ICdSZXNlcnZlIGEgY2FyZ28gc3RhY2sgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYW5kIGNvbnN1bWVzIGEgY2FyZ28gc3RhY2sgb24gYSBsaXZlIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFZhbGlkYXRlcyBlbnRpdHkgb3duZXJzaGlwLCBsb2FkZXJzLCBhbmQgcHJlc2VuY2UgYXQgdGhlIG5leHVzLCBhbmQgY29uZmlybXMgdGhlIHRhcmdldCBjYXJnbyBzdGFjayBpcyBhdmFpbGFibGUgYW5kIG5vdCByZXNlcnZlZCBieSBhIHBlbmRpbmcgdGFzay4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIGFuZCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCBiZWZvcmUgY29uc3VtaW5nIHRoZSBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAzy5PxWnGCnN0b3dlbnRpdHmZBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93ZW50aXR5CnN1bW1hcnk6ICdSZXNlcnZlIGFuIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhIHdob2xlIGVudGl0eSAoc2hpcCwgY29udGFpbmVyLCBvciBwbGFuZXRhcnkgc3RydWN0dXJlKSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28gYW5kIG5vIHNjaGVkdWxlZCB0YXNrcy4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgZW50aXR5IE5GVCdzIGltbXV0YWJsZSBkYXRhLCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCwgYW5kIGVyYXNlcyB0aGUgZW50aXR5IGZyb20gdGhlIHdvcmxkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAICKOlFZDccKc3dhcG1vZHVsZQAAAAAqulwNxwhzd2FwdGlsZQAAAAAgOzzNzQd0cmFuc2l0AAAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AwDSxRrXNzQp0cmF2ZWxwbGFuAAAAAJ7GqtLUCHVuZGVwbG955wQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW5kZXBsb3kKc3VtbWFyeTogJ1BhY2sgYSBkZXBsb3llZCBlbnRpdHkgaW50byBhIGhvc3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClBhY2sgYW4gZW50aXR5IGludG8gYSBob3N0IGVudGl0eSdzIGNhcmdvIGFzIGEgcGFja2VkLWVudGl0eSBpdGVtLiBIb3N0IGFuZCB0YXJnZXQgbXVzdCBzaGFyZSB0aGUgc2FtZSBvd25lciBhbmQgY29vcmRpbmF0ZXMsIHRoZSBob3N0IG11c3QgaGF2ZSBsb2FkZXJzIGFuZCBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSBwYWNrZWQgbWFzcywgYW5kIHRoZSB0YXJnZXQgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28uIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgYW5kIHNjaGVkdWxlcyB1bmRlcGxveSB0YXNrcyBvbiBib3RoIGVudGl0aWVzOyBvbiByZXNvbHV0aW9uIHRoZSB0YXJnZXQgaXMgZXJhc2VkIGFuZCB0aGUgcGFja2VkIGVudGl0eSBpcyBhZGRlZCB0byB0aGUgaG9zdCdzIGNhcmdvLiBJbnZlcnNlIG9mIGRlcGxveS4AAAAAJEPj1AZ1bmxvYWQAAAAAQCVzWdUHdXBncmFkZQAAAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLRYAAAAAAMquQQNpNjQAAAljYXJnb19yb3cAmFuTIuS2QwNpNjQAAA9jaXZpY2NvbmZpZ19yb3cAAAAAYOlMRANpNjQAAAljbGFpbV9yb3cAAADgqox1RANpNjQAAAtjbHVzdGVyX3JvdwAAAABkJyVFA2k2NAAACmNvbW1pdF9yb3cAAAAA+OzyVANpNjQAAAplbnRpdHlfcm93AABzEvjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAsAr77PJUA2k2NAAADmVudGl0eV9zZXFfcm93AAAAAICGaFUDaTY0AAAJZXBvY2hfcm93AAAAAACAD30DaTY0AAAHam9iX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAQCG3r8IDaTY0AAALc2VydmljZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAHNrUlTN5QNpNjQAAA53cmFwY29uZmlnX3JvdwAAABlTVM3lA2k2NAAADHdyYXBjb3N0X3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAABFAADINNYUnT4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAMg0VulMRAx0YXNrX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAACHvrzMRQtqb2JfcmVjZWlwdAAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDANLFe1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQAAAAAH/qyYgtqb2JzX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIBCbl+Fs2ILc2VydmljZV9yb3cAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAFSkTV7Ks2INd29ybWhvbGVfaW5mb5AdnubmqullDHRhc2tfcmVzdWx0cwCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAAAANDS1iQx0YXNrX3Jlc3VsdHMAAAAAAJAMjQx0YXNrX3Jlc3VsdHMAAAAquqw2lQx0YXNrX3Jlc3VsdHMAAIhXM+nymgZzdHJpbmcAAGXXIIVMrAx0YXNrX3Jlc3VsdHMAfHZ5KoVMrAx0YXNrX3Jlc3VsdHMAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAQIxG7UixuhJyZXNvbHZlYWxsX3Jlc3VsdHMAAABAxZx1wwx0YXNrX3Jlc3VsdHMAAKDsGsRpxgx0YXNrX3Jlc3VsdHMAgM8uT8Vpxgx0YXNrX3Jlc3VsdHMAAAAqulwNxwx0YXNrX3Jlc3VsdHMAAAAgOzzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAwDSxRrXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAJEPj1Ax0YXNrX3Jlc3VsdHMAAABAJXNZ1Qx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHM=');
452
452
  const abi = antelope.ABI.from(abiBlob);
453
453
  exports.ServerTypes = void 0;
454
454
  (function (Types) {
@@ -569,6 +569,24 @@ exports.ServerTypes = void 0;
569
569
  antelope.Struct.type('blend')
570
570
  ], blend);
571
571
  Types.blend = blend;
572
+ let builder_lane = class builder_lane extends antelope.Struct {
573
+ };
574
+ tslib.__decorate([
575
+ antelope.Struct.field(antelope.UInt8)
576
+ ], builder_lane.prototype, "slot_index", void 0);
577
+ tslib.__decorate([
578
+ antelope.Struct.field(antelope.UInt16)
579
+ ], builder_lane.prototype, "speed", void 0);
580
+ tslib.__decorate([
581
+ antelope.Struct.field(antelope.UInt32)
582
+ ], builder_lane.prototype, "drain", void 0);
583
+ tslib.__decorate([
584
+ antelope.Struct.field(antelope.UInt16)
585
+ ], builder_lane.prototype, "output_pct", void 0);
586
+ builder_lane = tslib.__decorate([
587
+ antelope.Struct.type('builder_lane')
588
+ ], builder_lane);
589
+ Types.builder_lane = builder_lane;
572
590
  let buildplot = class buildplot extends antelope.Struct {
573
591
  };
574
592
  tslib.__decorate([
@@ -632,6 +650,18 @@ exports.ServerTypes = void 0;
632
650
  antelope.Struct.type('cancel_results')
633
651
  ], cancel_results);
634
652
  Types.cancel_results = cancel_results;
653
+ let canceljob = class canceljob extends antelope.Struct {
654
+ };
655
+ tslib.__decorate([
656
+ antelope.Struct.field(antelope.UInt64)
657
+ ], canceljob.prototype, "job_id", void 0);
658
+ tslib.__decorate([
659
+ antelope.Struct.field(antelope.UInt64)
660
+ ], canceljob.prototype, "ship_id", void 0);
661
+ canceljob = tslib.__decorate([
662
+ antelope.Struct.type('canceljob')
663
+ ], canceljob);
664
+ Types.canceljob = canceljob;
635
665
  let cargo_row = class cargo_row extends antelope.Struct {
636
666
  };
637
667
  tslib.__decorate([
@@ -683,6 +713,15 @@ exports.ServerTypes = void 0;
683
713
  antelope.Struct.type('cargo_view')
684
714
  ], cargo_view);
685
715
  Types.cargo_view = cargo_view;
716
+ let civicconfig_row = class civicconfig_row extends antelope.Struct {
717
+ };
718
+ tslib.__decorate([
719
+ antelope.Struct.field(antelope.Name)
720
+ ], civicconfig_row.prototype, "civic_owner", void 0);
721
+ civicconfig_row = tslib.__decorate([
722
+ antelope.Struct.type('civicconfig_row')
723
+ ], civicconfig_row);
724
+ Types.civicconfig_row = civicconfig_row;
686
725
  let claim_row = class claim_row extends antelope.Struct {
687
726
  };
688
727
  tslib.__decorate([
@@ -692,6 +731,18 @@ exports.ServerTypes = void 0;
692
731
  antelope.Struct.type('claim_row')
693
732
  ], claim_row);
694
733
  Types.claim_row = claim_row;
734
+ let claimjob = class claimjob extends antelope.Struct {
735
+ };
736
+ tslib.__decorate([
737
+ antelope.Struct.field(antelope.UInt64)
738
+ ], claimjob.prototype, "job_id", void 0);
739
+ tslib.__decorate([
740
+ antelope.Struct.field(antelope.UInt64)
741
+ ], claimjob.prototype, "ship_id", void 0);
742
+ claimjob = tslib.__decorate([
743
+ antelope.Struct.type('claimjob')
744
+ ], claimjob);
745
+ Types.claimjob = claimjob;
695
746
  let cluster_slot = class cluster_slot extends antelope.Struct {
696
747
  };
697
748
  tslib.__decorate([
@@ -890,6 +941,21 @@ exports.ServerTypes = void 0;
890
941
  antelope.Struct.type('coordinates')
891
942
  ], coordinates);
892
943
  Types.coordinates = coordinates;
944
+ let coupling = class coupling extends antelope.Struct {
945
+ };
946
+ tslib.__decorate([
947
+ antelope.Struct.field(entity_ref)
948
+ ], coupling.prototype, "counterpart", void 0);
949
+ tslib.__decorate([
950
+ antelope.Struct.field(antelope.UInt64)
951
+ ], coupling.prototype, "hold", void 0);
952
+ tslib.__decorate([
953
+ antelope.Struct.field(antelope.UInt8)
954
+ ], coupling.prototype, "kind", void 0);
955
+ coupling = tslib.__decorate([
956
+ antelope.Struct.type('coupling')
957
+ ], coupling);
958
+ Types.coupling = coupling;
893
959
  let craft = class craft extends antelope.Struct {
894
960
  };
895
961
  tslib.__decorate([
@@ -932,6 +998,39 @@ exports.ServerTypes = void 0;
932
998
  antelope.Struct.type('crafter_lane')
933
999
  ], crafter_lane);
934
1000
  Types.crafter_lane = crafter_lane;
1001
+ let craftjob = class craftjob extends antelope.Struct {
1002
+ };
1003
+ tslib.__decorate([
1004
+ antelope.Struct.field(antelope.UInt64)
1005
+ ], craftjob.prototype, "ship_id", void 0);
1006
+ tslib.__decorate([
1007
+ antelope.Struct.field(antelope.UInt64)
1008
+ ], craftjob.prototype, "workshop_id", void 0);
1009
+ tslib.__decorate([
1010
+ antelope.Struct.field(antelope.UInt8)
1011
+ ], craftjob.prototype, "slot", void 0);
1012
+ tslib.__decorate([
1013
+ antelope.Struct.field(antelope.UInt16)
1014
+ ], craftjob.prototype, "recipe_id", void 0);
1015
+ tslib.__decorate([
1016
+ antelope.Struct.field(antelope.UInt32)
1017
+ ], craftjob.prototype, "quantity", void 0);
1018
+ tslib.__decorate([
1019
+ antelope.Struct.field(cargo_item, { array: true })
1020
+ ], craftjob.prototype, "inputs", void 0);
1021
+ craftjob = tslib.__decorate([
1022
+ antelope.Struct.type('craftjob')
1023
+ ], craftjob);
1024
+ Types.craftjob = craftjob;
1025
+ let delentity = class delentity extends antelope.Struct {
1026
+ };
1027
+ tslib.__decorate([
1028
+ antelope.Struct.field(antelope.UInt64)
1029
+ ], delentity.prototype, "entity_id", void 0);
1030
+ delentity = tslib.__decorate([
1031
+ antelope.Struct.type('delentity')
1032
+ ], delentity);
1033
+ Types.delentity = delentity;
935
1034
  let demolish = class demolish extends antelope.Struct {
936
1035
  };
937
1036
  tslib.__decorate([
@@ -1129,18 +1228,18 @@ exports.ServerTypes = void 0;
1129
1228
  tslib.__decorate([
1130
1229
  antelope.Struct.field(cargo_item, { array: true })
1131
1230
  ], task.prototype, "cargo", void 0);
1231
+ tslib.__decorate([
1232
+ antelope.Struct.field(coupling, { array: true })
1233
+ ], task.prototype, "couplings", void 0);
1132
1234
  tslib.__decorate([
1133
1235
  antelope.Struct.field(entity_ref, { optional: true })
1134
- ], task.prototype, "entitytarget", void 0);
1236
+ ], task.prototype, "subject", void 0);
1135
1237
  tslib.__decorate([
1136
1238
  antelope.Struct.field(antelope.UInt64, { optional: true })
1137
1239
  ], task.prototype, "entitygroup", void 0);
1138
1240
  tslib.__decorate([
1139
1241
  antelope.Struct.field(antelope.UInt32, { optional: true })
1140
1242
  ], task.prototype, "energy_cost", void 0);
1141
- tslib.__decorate([
1142
- antelope.Struct.field(antelope.UInt64, { optional: true })
1143
- ], task.prototype, "hold", void 0);
1144
1243
  tslib.__decorate([
1145
1244
  antelope.Struct.field(antelope.UInt16, { optional: true })
1146
1245
  ], task.prototype, "target_item_id", void 0);
@@ -1249,6 +1348,9 @@ exports.ServerTypes = void 0;
1249
1348
  tslib.__decorate([
1250
1349
  antelope.Struct.field(crafter_lane, { array: true })
1251
1350
  ], entity_info.prototype, "crafter_lanes", void 0);
1351
+ tslib.__decorate([
1352
+ antelope.Struct.field(builder_lane, { array: true })
1353
+ ], entity_info.prototype, "builder_lanes", void 0);
1252
1354
  tslib.__decorate([
1253
1355
  antelope.Struct.field(loader_lane, { array: true })
1254
1356
  ], entity_info.prototype, "loader_lanes", void 0);
@@ -1288,6 +1390,9 @@ exports.ServerTypes = void 0;
1288
1390
  tslib.__decorate([
1289
1391
  antelope.Struct.field(slot_def, { array: true })
1290
1392
  ], entity_layout.prototype, "slots", void 0);
1393
+ tslib.__decorate([
1394
+ antelope.Struct.field(antelope.UInt32)
1395
+ ], entity_layout.prototype, "base_hullmass", void 0);
1291
1396
  entity_layout = tslib.__decorate([
1292
1397
  antelope.Struct.type('entity_layout')
1293
1398
  ], entity_layout);
@@ -1391,7 +1496,7 @@ exports.ServerTypes = void 0;
1391
1496
  antelope.Struct.field(antelope.Name)
1392
1497
  ], entity_task_info.prototype, "entity_type", void 0);
1393
1498
  tslib.__decorate([
1394
- antelope.Struct.field(antelope.UInt8)
1499
+ antelope.Struct.field(antelope.UInt32)
1395
1500
  ], entity_task_info.prototype, "task_count", void 0);
1396
1501
  tslib.__decorate([
1397
1502
  antelope.Struct.field(antelope.TimePoint)
@@ -1511,6 +1616,30 @@ exports.ServerTypes = void 0;
1511
1616
  antelope.Struct.type('gather')
1512
1617
  ], gather);
1513
1618
  Types.gather = gather;
1619
+ let gatherplan = class gatherplan extends antelope.Struct {
1620
+ };
1621
+ tslib.__decorate([
1622
+ antelope.Struct.field(antelope.UInt64)
1623
+ ], gatherplan.prototype, "source_id", void 0);
1624
+ tslib.__decorate([
1625
+ antelope.Struct.field(antelope.UInt64)
1626
+ ], gatherplan.prototype, "destination_id", void 0);
1627
+ tslib.__decorate([
1628
+ antelope.Struct.field(antelope.UInt16)
1629
+ ], gatherplan.prototype, "stratum", void 0);
1630
+ tslib.__decorate([
1631
+ antelope.Struct.field(antelope.UInt32)
1632
+ ], gatherplan.prototype, "quantity", void 0);
1633
+ tslib.__decorate([
1634
+ antelope.Struct.field('bool')
1635
+ ], gatherplan.prototype, "recharge", void 0);
1636
+ tslib.__decorate([
1637
+ antelope.Struct.field(antelope.Bytes)
1638
+ ], gatherplan.prototype, "slots", void 0);
1639
+ gatherplan = tslib.__decorate([
1640
+ antelope.Struct.type('gatherplan')
1641
+ ], gatherplan);
1642
+ Types.gatherplan = gatherplan;
1514
1643
  let genesisfleet = class genesisfleet extends antelope.Struct {
1515
1644
  };
1516
1645
  tslib.__decorate([
@@ -1646,6 +1775,15 @@ exports.ServerTypes = void 0;
1646
1775
  antelope.Struct.type('getitemtypes')
1647
1776
  ], getitemtypes);
1648
1777
  Types.getitemtypes = getitemtypes;
1778
+ let getjobs = class getjobs extends antelope.Struct {
1779
+ };
1780
+ tslib.__decorate([
1781
+ antelope.Struct.field(antelope.UInt64)
1782
+ ], getjobs.prototype, "workshop_id", void 0);
1783
+ getjobs = tslib.__decorate([
1784
+ antelope.Struct.type('getjobs')
1785
+ ], getjobs);
1786
+ Types.getjobs = getjobs;
1649
1787
  let getkindmeta = class getkindmeta extends antelope.Struct {
1650
1788
  };
1651
1789
  getkindmeta = tslib.__decorate([
@@ -1778,6 +1916,15 @@ exports.ServerTypes = void 0;
1778
1916
  antelope.Struct.type('getresources')
1779
1917
  ], getresources);
1780
1918
  Types.getresources = getresources;
1919
+ let getservice = class getservice extends antelope.Struct {
1920
+ };
1921
+ tslib.__decorate([
1922
+ antelope.Struct.field(antelope.UInt64)
1923
+ ], getservice.prototype, "workshop_id", void 0);
1924
+ getservice = tslib.__decorate([
1925
+ antelope.Struct.type('getservice')
1926
+ ], getservice);
1927
+ Types.getservice = getservice;
1781
1928
  let getslots = class getslots extends antelope.Struct {
1782
1929
  };
1783
1930
  getslots = tslib.__decorate([
@@ -1889,6 +2036,24 @@ exports.ServerTypes = void 0;
1889
2036
  antelope.Struct.type('importcargo')
1890
2037
  ], importcargo);
1891
2038
  Types.importcargo = importcargo;
2039
+ let importcell = class importcell extends antelope.Struct {
2040
+ };
2041
+ tslib.__decorate([
2042
+ antelope.Struct.field(antelope.UInt64)
2043
+ ], importcell.prototype, "root", void 0);
2044
+ tslib.__decorate([
2045
+ antelope.Struct.field(antelope.Int8)
2046
+ ], importcell.prototype, "gx", void 0);
2047
+ tslib.__decorate([
2048
+ antelope.Struct.field(antelope.Int8)
2049
+ ], importcell.prototype, "gy", void 0);
2050
+ tslib.__decorate([
2051
+ antelope.Struct.field(antelope.UInt64)
2052
+ ], importcell.prototype, "entity_id", void 0);
2053
+ importcell = tslib.__decorate([
2054
+ antelope.Struct.type('importcell')
2055
+ ], importcell);
2056
+ Types.importcell = importcell;
1892
2057
  let importentity = class importentity extends antelope.Struct {
1893
2058
  };
1894
2059
  tslib.__decorate([
@@ -2099,6 +2264,72 @@ exports.ServerTypes = void 0;
2099
2264
  antelope.Struct.type('items_info')
2100
2265
  ], items_info);
2101
2266
  Types.items_info = items_info;
2267
+ let job_receipt = class job_receipt extends antelope.Struct {
2268
+ };
2269
+ tslib.__decorate([
2270
+ antelope.Struct.field(antelope.UInt64)
2271
+ ], job_receipt.prototype, "job_id", void 0);
2272
+ tslib.__decorate([
2273
+ antelope.Struct.field(antelope.TimePoint)
2274
+ ], job_receipt.prototype, "starts_at", void 0);
2275
+ tslib.__decorate([
2276
+ antelope.Struct.field(antelope.TimePoint)
2277
+ ], job_receipt.prototype, "completes_at", void 0);
2278
+ job_receipt = tslib.__decorate([
2279
+ antelope.Struct.type('job_receipt')
2280
+ ], job_receipt);
2281
+ Types.job_receipt = job_receipt;
2282
+ let job_row = class job_row extends antelope.Struct {
2283
+ };
2284
+ tslib.__decorate([
2285
+ antelope.Struct.field(antelope.UInt64)
2286
+ ], job_row.prototype, "id", void 0);
2287
+ tslib.__decorate([
2288
+ antelope.Struct.field(antelope.UInt64)
2289
+ ], job_row.prototype, "workshop", void 0);
2290
+ tslib.__decorate([
2291
+ antelope.Struct.field(antelope.UInt8)
2292
+ ], job_row.prototype, "socket", void 0);
2293
+ tslib.__decorate([
2294
+ antelope.Struct.field(antelope.Name)
2295
+ ], job_row.prototype, "owner", void 0);
2296
+ tslib.__decorate([
2297
+ antelope.Struct.field(antelope.UInt64)
2298
+ ], job_row.prototype, "ship_id", void 0);
2299
+ tslib.__decorate([
2300
+ antelope.Struct.field(coordinates)
2301
+ ], job_row.prototype, "coords", void 0);
2302
+ tslib.__decorate([
2303
+ antelope.Struct.field(antelope.TimePoint)
2304
+ ], job_row.prototype, "starts_at", void 0);
2305
+ tslib.__decorate([
2306
+ antelope.Struct.field(antelope.TimePoint)
2307
+ ], job_row.prototype, "completes_at", void 0);
2308
+ tslib.__decorate([
2309
+ antelope.Struct.field(antelope.UInt16)
2310
+ ], job_row.prototype, "recipe_id", void 0);
2311
+ tslib.__decorate([
2312
+ antelope.Struct.field(antelope.UInt32)
2313
+ ], job_row.prototype, "quantity", void 0);
2314
+ tslib.__decorate([
2315
+ antelope.Struct.field(antelope.UInt32)
2316
+ ], job_row.prototype, "energy_paid", void 0);
2317
+ tslib.__decorate([
2318
+ antelope.Struct.field(cargo_item, { array: true })
2319
+ ], job_row.prototype, "cargo", void 0);
2320
+ job_row = tslib.__decorate([
2321
+ antelope.Struct.type('job_row')
2322
+ ], job_row);
2323
+ Types.job_row = job_row;
2324
+ let jobs_result = class jobs_result extends antelope.Struct {
2325
+ };
2326
+ tslib.__decorate([
2327
+ antelope.Struct.field(job_row, { array: true })
2328
+ ], jobs_result.prototype, "jobs", void 0);
2329
+ jobs_result = tslib.__decorate([
2330
+ antelope.Struct.type('jobs_result')
2331
+ ], jobs_result);
2332
+ Types.jobs_result = jobs_result;
2102
2333
  let join = class join extends antelope.Struct {
2103
2334
  };
2104
2335
  tslib.__decorate([
@@ -2234,6 +2465,24 @@ exports.ServerTypes = void 0;
2234
2465
  antelope.Struct.type('location_info')
2235
2466
  ], location_info);
2236
2467
  Types.location_info = location_info;
2468
+ let migratetasks = class migratetasks extends antelope.Struct {
2469
+ };
2470
+ tslib.__decorate([
2471
+ antelope.Struct.field(antelope.UInt32)
2472
+ ], migratetasks.prototype, "batch", void 0);
2473
+ migratetasks = tslib.__decorate([
2474
+ antelope.Struct.type('migratetasks')
2475
+ ], migratetasks);
2476
+ Types.migratetasks = migratetasks;
2477
+ let migswap = class migswap extends antelope.Struct {
2478
+ };
2479
+ tslib.__decorate([
2480
+ antelope.Struct.field(antelope.UInt32)
2481
+ ], migswap.prototype, "batch", void 0);
2482
+ migswap = tslib.__decorate([
2483
+ antelope.Struct.type('migswap')
2484
+ ], migswap);
2485
+ Types.migswap = migswap;
2237
2486
  let module_info = class module_info extends antelope.Struct {
2238
2487
  };
2239
2488
  tslib.__decorate([
@@ -2587,6 +2836,9 @@ exports.ServerTypes = void 0;
2587
2836
  tslib.__decorate([
2588
2837
  antelope.Struct.field(crafter_lane, { array: true })
2589
2838
  ], projected_state.prototype, "crafter_lanes", void 0);
2839
+ tslib.__decorate([
2840
+ antelope.Struct.field(builder_lane, { array: true })
2841
+ ], projected_state.prototype, "builder_lanes", void 0);
2590
2842
  tslib.__decorate([
2591
2843
  antelope.Struct.field(loader_lane, { array: true })
2592
2844
  ], projected_state.prototype, "loader_lanes", void 0);
@@ -2807,6 +3059,36 @@ exports.ServerTypes = void 0;
2807
3059
  antelope.Struct.type('route_waypoint')
2808
3060
  ], route_waypoint);
2809
3061
  Types.route_waypoint = route_waypoint;
3062
+ let service_socket = class service_socket extends antelope.Struct {
3063
+ };
3064
+ tslib.__decorate([
3065
+ antelope.Struct.field('bool')
3066
+ ], service_socket.prototype, "open", void 0);
3067
+ service_socket = tslib.__decorate([
3068
+ antelope.Struct.type('service_socket')
3069
+ ], service_socket);
3070
+ Types.service_socket = service_socket;
3071
+ let service_row = class service_row extends antelope.Struct {
3072
+ };
3073
+ tslib.__decorate([
3074
+ antelope.Struct.field(antelope.UInt64)
3075
+ ], service_row.prototype, "entity", void 0);
3076
+ tslib.__decorate([
3077
+ antelope.Struct.field(service_socket, { array: true })
3078
+ ], service_row.prototype, "sockets", void 0);
3079
+ service_row = tslib.__decorate([
3080
+ antelope.Struct.type('service_row')
3081
+ ], service_row);
3082
+ Types.service_row = service_row;
3083
+ let setcivic = class setcivic extends antelope.Struct {
3084
+ };
3085
+ tslib.__decorate([
3086
+ antelope.Struct.field(antelope.Name)
3087
+ ], setcivic.prototype, "account", void 0);
3088
+ setcivic = tslib.__decorate([
3089
+ antelope.Struct.type('setcivic')
3090
+ ], setcivic);
3091
+ Types.setcivic = setcivic;
2810
3092
  let setcoords = class setcoords extends antelope.Struct {
2811
3093
  };
2812
3094
  tslib.__decorate([
@@ -2837,6 +3119,21 @@ exports.ServerTypes = void 0;
2837
3119
  antelope.Struct.type('setnftcfg')
2838
3120
  ], setnftcfg);
2839
3121
  Types.setnftcfg = setnftcfg;
3122
+ let setsocket = class setsocket extends antelope.Struct {
3123
+ };
3124
+ tslib.__decorate([
3125
+ antelope.Struct.field(antelope.UInt64)
3126
+ ], setsocket.prototype, "workshop_id", void 0);
3127
+ tslib.__decorate([
3128
+ antelope.Struct.field(antelope.UInt8)
3129
+ ], setsocket.prototype, "slot", void 0);
3130
+ tslib.__decorate([
3131
+ antelope.Struct.field('bool')
3132
+ ], setsocket.prototype, "open", void 0);
3133
+ setsocket = tslib.__decorate([
3134
+ antelope.Struct.type('setsocket')
3135
+ ], setsocket);
3136
+ Types.setsocket = setsocket;
2840
3137
  let setthreshold = class setthreshold extends antelope.Struct {
2841
3138
  };
2842
3139
  tslib.__decorate([
@@ -2873,6 +3170,24 @@ exports.ServerTypes = void 0;
2873
3170
  antelope.Struct.type('setwrapfee')
2874
3171
  ], setwrapfee);
2875
3172
  Types.setwrapfee = setwrapfee;
3173
+ let shuttle = class shuttle extends antelope.Struct {
3174
+ };
3175
+ tslib.__decorate([
3176
+ antelope.Struct.field(antelope.UInt64)
3177
+ ], shuttle.prototype, "carrier", void 0);
3178
+ tslib.__decorate([
3179
+ antelope.Struct.field(antelope.UInt64)
3180
+ ], shuttle.prototype, "from_id", void 0);
3181
+ tslib.__decorate([
3182
+ antelope.Struct.field(antelope.UInt64)
3183
+ ], shuttle.prototype, "to_id", void 0);
3184
+ tslib.__decorate([
3185
+ antelope.Struct.field(cargo_item, { array: true })
3186
+ ], shuttle.prototype, "items", void 0);
3187
+ shuttle = tslib.__decorate([
3188
+ antelope.Struct.type('shuttle')
3189
+ ], shuttle);
3190
+ Types.shuttle = shuttle;
2876
3191
  let stowcargo = class stowcargo extends antelope.Struct {
2877
3192
  };
2878
3193
  tslib.__decorate([
@@ -3041,21 +3356,21 @@ exports.ServerTypes = void 0;
3041
3356
  antelope.Struct.type('travel')
3042
3357
  ], travel);
3043
3358
  Types.travel = travel;
3044
- let travelroute = class travelroute extends antelope.Struct {
3359
+ let travelplan = class travelplan extends antelope.Struct {
3045
3360
  };
3046
3361
  tslib.__decorate([
3047
3362
  antelope.Struct.field(entity_ref, { array: true })
3048
- ], travelroute.prototype, "entities", void 0);
3363
+ ], travelplan.prototype, "entities", void 0);
3049
3364
  tslib.__decorate([
3050
3365
  antelope.Struct.field(route_waypoint, { array: true })
3051
- ], travelroute.prototype, "waypoints", void 0);
3366
+ ], travelplan.prototype, "waypoints", void 0);
3052
3367
  tslib.__decorate([
3053
3368
  antelope.Struct.field('bool')
3054
- ], travelroute.prototype, "recharge", void 0);
3055
- travelroute = tslib.__decorate([
3056
- antelope.Struct.type('travelroute')
3057
- ], travelroute);
3058
- Types.travelroute = travelroute;
3369
+ ], travelplan.prototype, "recharge", void 0);
3370
+ travelplan = tslib.__decorate([
3371
+ antelope.Struct.type('travelplan')
3372
+ ], travelplan);
3373
+ Types.travelplan = travelplan;
3059
3374
  let types_row = class types_row extends antelope.Struct {
3060
3375
  };
3061
3376
  tslib.__decorate([
@@ -3191,19 +3506,23 @@ exports.ServerTypes = void 0;
3191
3506
  })(exports.ServerTypes || (exports.ServerTypes = {}));
3192
3507
  const TableMap = {
3193
3508
  cargo: exports.ServerTypes.cargo_row,
3509
+ civicconfig: exports.ServerTypes.civicconfig_row,
3194
3510
  claims: exports.ServerTypes.claim_row,
3195
3511
  cluster: exports.ServerTypes.cluster_row,
3196
3512
  commit: exports.ServerTypes.commit_row,
3197
3513
  entity: exports.ServerTypes.entity_row,
3514
+ 'entity.mig': exports.ServerTypes.entity_row,
3198
3515
  entitygroup: exports.ServerTypes.entitygroup_row,
3199
3516
  entityseq: exports.ServerTypes.entity_seq_row,
3200
3517
  epoch: exports.ServerTypes.epoch_row,
3518
+ jobs: exports.ServerTypes.job_row,
3201
3519
  nftconfig: exports.ServerTypes.nftconfig_row,
3202
3520
  oraclecfg: exports.ServerTypes.oracle_config_row,
3203
3521
  oracles: exports.ServerTypes.oracle_row,
3204
3522
  player: exports.ServerTypes.player_row,
3205
3523
  reserve: exports.ServerTypes.reserve_row,
3206
3524
  reveal: exports.ServerTypes.reveal_row,
3525
+ service: exports.ServerTypes.service_row,
3207
3526
  state: exports.ServerTypes.state_row,
3208
3527
  types: exports.ServerTypes.types_row,
3209
3528
  wrapconfig: exports.ServerTypes.wrapconfig_row,
@@ -3324,7 +3643,7 @@ const INSUFFICIENT_BALANCE = 'Insufficient balance.';
3324
3643
  const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
3325
3644
  const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
3326
3645
 
3327
- const PRECISION$1 = 10000;
3646
+ const PRECISION = 10000;
3328
3647
  const CRAFT_ENERGY_DIVISOR = 150000;
3329
3648
  const PLANETARY_STRUCTURE_Z = 0;
3330
3649
  const CONTAINER_Z = 300;
@@ -3346,15 +3665,15 @@ exports.TaskType = void 0;
3346
3665
  TaskType[TaskType["GATHER"] = 5] = "GATHER";
3347
3666
  TaskType[TaskType["WARP"] = 6] = "WARP";
3348
3667
  TaskType[TaskType["CRAFT"] = 7] = "CRAFT";
3349
- TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
3350
3668
  TaskType[TaskType["TRANSIT"] = 9] = "TRANSIT";
3351
3669
  TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
3352
3670
  TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
3671
+ TaskType[TaskType["LAUNCH"] = 12] = "LAUNCH";
3353
3672
  TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
3354
- TaskType[TaskType["CLAIMPLOT"] = 14] = "CLAIMPLOT";
3355
3673
  TaskType[TaskType["BUILDPLOT"] = 15] = "BUILDPLOT";
3356
3674
  TaskType[TaskType["CHARGE"] = 16] = "CHARGE";
3357
3675
  TaskType[TaskType["UPGRADE"] = 17] = "UPGRADE";
3676
+ TaskType[TaskType["SHUTTLE"] = 18] = "SHUTTLE";
3358
3677
  })(exports.TaskType || (exports.TaskType = {}));
3359
3678
  exports.HoldKind = void 0;
3360
3679
  (function (HoldKind) {
@@ -3362,6 +3681,7 @@ exports.HoldKind = void 0;
3362
3681
  HoldKind[HoldKind["PUSH"] = 2] = "PUSH";
3363
3682
  HoldKind[HoldKind["GATHER"] = 3] = "GATHER";
3364
3683
  HoldKind[HoldKind["BUILD"] = 4] = "BUILD";
3684
+ HoldKind[HoldKind["FLIGHT"] = 5] = "FLIGHT";
3365
3685
  HoldKind[HoldKind["UPGRADE"] = 6] = "UPGRADE";
3366
3686
  })(exports.HoldKind || (exports.HoldKind = {}));
3367
3687
  exports.LocationType = void 0;
@@ -3496,6 +3816,7 @@ const ITEM_HAULER_T1 = 10106;
3496
3816
  const ITEM_WARP_T1 = 10107;
3497
3817
  const ITEM_BATTERY_T1 = 10108;
3498
3818
  const ITEM_LAUNCHER_T1 = 10109;
3819
+ const ITEM_BUILDER_T1 = 10110;
3499
3820
  const ITEM_CONTAINER_T1_PACKED = 10200;
3500
3821
  const ITEM_SHIP_T1_PACKED = 10201;
3501
3822
  const ITEM_WAREHOUSE_T1_PACKED = 10202;
@@ -3504,6 +3825,15 @@ const ITEM_FACTORY_T1_PACKED = 10204;
3504
3825
  const ITEM_MASS_DRIVER_T1_PACKED = 10205;
3505
3826
  const ITEM_MASS_CATCHER_T1_PACKED = 10206;
3506
3827
  const ITEM_HUB_T1_PACKED = 10207;
3828
+ const ITEM_WORKSHOP_T1_PACKED = 10208;
3829
+ const ITEM_ROUSTABOUT_T1_PACKED = 10210;
3830
+ const ITEM_PROSPECTOR_T1_PACKED = 10211;
3831
+ const ITEM_TENDER_T1_PACKED = 10212;
3832
+ const ITEM_WRIGHT_T1_PACKED = 10213;
3833
+ const ITEM_TUG_T1_PACKED = 10214;
3834
+ const ITEM_PORTER_T1_PACKED = 10215;
3835
+ const ITEM_WRANGLER_T1_PACKED = 10216;
3836
+ const ITEM_DREDGER_T1_PACKED = 10217;
3507
3837
  const ITEM_PLATE_T2 = 20001;
3508
3838
  const ITEM_FRAME_T2 = 20002;
3509
3839
  const ITEM_PLASMA_CELL_T2 = 20003;
@@ -4307,16 +4637,16 @@ var recipes = [
4307
4637
  ]
4308
4638
  },
4309
4639
  {
4310
- outputItemId: 10200,
4311
- outputMass: 1900000,
4640
+ outputItemId: 10110,
4641
+ outputMass: 960000,
4312
4642
  inputs: [
4313
4643
  {
4314
- itemId: 10001,
4315
- quantity: 600
4644
+ itemId: 10006,
4645
+ quantity: 300
4316
4646
  },
4317
4647
  {
4318
4648
  itemId: 10008,
4319
- quantity: 600
4649
+ quantity: 300
4320
4650
  }
4321
4651
  ],
4322
4652
  statSlots: [
@@ -4324,20 +4654,8 @@ var recipes = [
4324
4654
  sources: [
4325
4655
  {
4326
4656
  inputIndex: 0,
4327
- statIndex: 0
4328
- }
4329
- ]
4330
- },
4331
- {
4332
- sources: [
4333
- {
4334
- inputIndex: 0,
4335
- statIndex: 1
4336
- }
4337
- ]
4338
- },
4339
- {
4340
- sources: [
4657
+ statIndex: 2
4658
+ },
4341
4659
  {
4342
4660
  inputIndex: 1,
4343
4661
  statIndex: 0
@@ -4354,31 +4672,21 @@ var recipes = [
4354
4672
  }
4355
4673
  ],
4356
4674
  blendWeights: [
4675
+ 1,
4676
+ 1
4357
4677
  ]
4358
4678
  },
4359
4679
  {
4360
- outputItemId: 10201,
4361
- outputMass: 2400000,
4680
+ outputItemId: 10200,
4681
+ outputMass: 1900000,
4362
4682
  inputs: [
4363
4683
  {
4364
4684
  itemId: 10001,
4365
- quantity: 300
4685
+ quantity: 600
4366
4686
  },
4367
4687
  {
4368
4688
  itemId: 10008,
4369
- quantity: 300
4370
- },
4371
- {
4372
- itemId: 10007,
4373
- quantity: 300
4374
- },
4375
- {
4376
- itemId: 10003,
4377
- quantity: 300
4378
- },
4379
- {
4380
- itemId: 10006,
4381
- quantity: 300
4689
+ quantity: 600
4382
4690
  }
4383
4691
  ],
4384
4692
  statSlots: [
@@ -4400,10 +4708,18 @@ var recipes = [
4400
4708
  },
4401
4709
  {
4402
4710
  sources: [
4711
+ {
4712
+ inputIndex: 1,
4713
+ statIndex: 0
4714
+ }
4403
4715
  ]
4404
4716
  },
4405
4717
  {
4406
4718
  sources: [
4719
+ {
4720
+ inputIndex: 1,
4721
+ statIndex: 1
4722
+ }
4407
4723
  ]
4408
4724
  }
4409
4725
  ],
@@ -4575,12 +4891,28 @@ var recipes = [
4575
4891
  ]
4576
4892
  },
4577
4893
  {
4578
- outputItemId: 20001,
4579
- outputMass: 4800,
4894
+ outputItemId: 10210,
4895
+ outputMass: 1600000,
4580
4896
  inputs: [
4581
4897
  {
4582
- itemId: 102,
4583
- quantity: 12
4898
+ itemId: 10001,
4899
+ quantity: 200
4900
+ },
4901
+ {
4902
+ itemId: 10008,
4903
+ quantity: 200
4904
+ },
4905
+ {
4906
+ itemId: 10007,
4907
+ quantity: 200
4908
+ },
4909
+ {
4910
+ itemId: 10003,
4911
+ quantity: 200
4912
+ },
4913
+ {
4914
+ itemId: 10006,
4915
+ quantity: 200
4584
4916
  }
4585
4917
  ],
4586
4918
  statSlots: [
@@ -4595,55 +4927,774 @@ var recipes = [
4595
4927
  {
4596
4928
  sources: [
4597
4929
  {
4598
- inputIndex: 0,
4599
- statIndex: 2
4930
+ inputIndex: 1,
4931
+ statIndex: 0
4600
4932
  }
4601
4933
  ]
4602
4934
  },
4603
4935
  {
4604
4936
  sources: [
4605
4937
  {
4606
- inputIndex: 0,
4607
- statIndex: 1
4938
+ inputIndex: 2,
4939
+ statIndex: 0
4608
4940
  }
4609
4941
  ]
4610
- }
4611
- ],
4612
- blendWeights: [
4613
- ]
4614
- },
4615
- {
4616
- outputItemId: 20002,
4617
- outputMass: 4800,
4618
- inputs: [
4619
- {
4620
- itemId: 402,
4621
- quantity: 6
4622
4942
  },
4623
- {
4624
- itemId: 502,
4625
- quantity: 6
4626
- }
4627
- ],
4628
- statSlots: [
4629
4943
  {
4630
4944
  sources: [
4631
4945
  {
4632
- inputIndex: 0,
4633
- statIndex: 1
4946
+ inputIndex: 3,
4947
+ statIndex: 0
4634
4948
  }
4635
4949
  ]
4636
4950
  },
4637
4951
  {
4638
4952
  sources: [
4639
4953
  {
4640
- inputIndex: 0,
4954
+ inputIndex: 4,
4641
4955
  statIndex: 0
4642
4956
  }
4643
4957
  ]
4644
- },
4645
- {
4646
- sources: [
4958
+ }
4959
+ ],
4960
+ blendWeights: [
4961
+ ]
4962
+ },
4963
+ {
4964
+ outputItemId: 10211,
4965
+ outputMass: 2400000,
4966
+ inputs: [
4967
+ {
4968
+ itemId: 10005,
4969
+ quantity: 100
4970
+ },
4971
+ {
4972
+ itemId: 10002,
4973
+ quantity: 100
4974
+ },
4975
+ {
4976
+ itemId: 10010,
4977
+ quantity: 100
4978
+ },
4979
+ {
4980
+ itemId: 10009,
4981
+ quantity: 100
4982
+ },
4983
+ {
4984
+ itemId: 10004,
4985
+ quantity: 100
4986
+ },
4987
+ {
4988
+ itemId: 10210,
4989
+ quantity: 1
4990
+ }
4991
+ ],
4992
+ statSlots: [
4993
+ {
4994
+ sources: [
4995
+ {
4996
+ inputIndex: 0,
4997
+ statIndex: 0
4998
+ },
4999
+ {
5000
+ inputIndex: 5,
5001
+ statIndex: 0
5002
+ }
5003
+ ]
5004
+ },
5005
+ {
5006
+ sources: [
5007
+ {
5008
+ inputIndex: 1,
5009
+ statIndex: 0
5010
+ },
5011
+ {
5012
+ inputIndex: 5,
5013
+ statIndex: 1
5014
+ }
5015
+ ]
5016
+ },
5017
+ {
5018
+ sources: [
5019
+ {
5020
+ inputIndex: 2,
5021
+ statIndex: 0
5022
+ },
5023
+ {
5024
+ inputIndex: 5,
5025
+ statIndex: 2
5026
+ }
5027
+ ]
5028
+ },
5029
+ {
5030
+ sources: [
5031
+ {
5032
+ inputIndex: 3,
5033
+ statIndex: 0
5034
+ },
5035
+ {
5036
+ inputIndex: 5,
5037
+ statIndex: 3
5038
+ }
5039
+ ]
5040
+ },
5041
+ {
5042
+ sources: [
5043
+ {
5044
+ inputIndex: 4,
5045
+ statIndex: 0
5046
+ },
5047
+ {
5048
+ inputIndex: 5,
5049
+ statIndex: 4
5050
+ }
5051
+ ]
5052
+ }
5053
+ ],
5054
+ blendWeights: [
5055
+ ],
5056
+ sourceSubclass: 10210
5057
+ },
5058
+ {
5059
+ outputItemId: 10212,
5060
+ outputMass: 2400000,
5061
+ inputs: [
5062
+ {
5063
+ itemId: 10005,
5064
+ quantity: 100
5065
+ },
5066
+ {
5067
+ itemId: 10002,
5068
+ quantity: 100
5069
+ },
5070
+ {
5071
+ itemId: 10010,
5072
+ quantity: 100
5073
+ },
5074
+ {
5075
+ itemId: 10009,
5076
+ quantity: 100
5077
+ },
5078
+ {
5079
+ itemId: 10004,
5080
+ quantity: 100
5081
+ },
5082
+ {
5083
+ itemId: 10210,
5084
+ quantity: 1
5085
+ }
5086
+ ],
5087
+ statSlots: [
5088
+ {
5089
+ sources: [
5090
+ {
5091
+ inputIndex: 0,
5092
+ statIndex: 0
5093
+ },
5094
+ {
5095
+ inputIndex: 5,
5096
+ statIndex: 0
5097
+ }
5098
+ ]
5099
+ },
5100
+ {
5101
+ sources: [
5102
+ {
5103
+ inputIndex: 1,
5104
+ statIndex: 0
5105
+ },
5106
+ {
5107
+ inputIndex: 5,
5108
+ statIndex: 1
5109
+ }
5110
+ ]
5111
+ },
5112
+ {
5113
+ sources: [
5114
+ {
5115
+ inputIndex: 2,
5116
+ statIndex: 0
5117
+ },
5118
+ {
5119
+ inputIndex: 5,
5120
+ statIndex: 2
5121
+ }
5122
+ ]
5123
+ },
5124
+ {
5125
+ sources: [
5126
+ {
5127
+ inputIndex: 3,
5128
+ statIndex: 0
5129
+ },
5130
+ {
5131
+ inputIndex: 5,
5132
+ statIndex: 3
5133
+ }
5134
+ ]
5135
+ },
5136
+ {
5137
+ sources: [
5138
+ {
5139
+ inputIndex: 4,
5140
+ statIndex: 0
5141
+ },
5142
+ {
5143
+ inputIndex: 5,
5144
+ statIndex: 4
5145
+ }
5146
+ ]
5147
+ }
5148
+ ],
5149
+ blendWeights: [
5150
+ ],
5151
+ sourceSubclass: 10210
5152
+ },
5153
+ {
5154
+ outputItemId: 10213,
5155
+ outputMass: 2400000,
5156
+ inputs: [
5157
+ {
5158
+ itemId: 10005,
5159
+ quantity: 100
5160
+ },
5161
+ {
5162
+ itemId: 10002,
5163
+ quantity: 100
5164
+ },
5165
+ {
5166
+ itemId: 10010,
5167
+ quantity: 100
5168
+ },
5169
+ {
5170
+ itemId: 10009,
5171
+ quantity: 100
5172
+ },
5173
+ {
5174
+ itemId: 10004,
5175
+ quantity: 100
5176
+ },
5177
+ {
5178
+ itemId: 10210,
5179
+ quantity: 1
5180
+ }
5181
+ ],
5182
+ statSlots: [
5183
+ {
5184
+ sources: [
5185
+ {
5186
+ inputIndex: 0,
5187
+ statIndex: 0
5188
+ },
5189
+ {
5190
+ inputIndex: 5,
5191
+ statIndex: 0
5192
+ }
5193
+ ]
5194
+ },
5195
+ {
5196
+ sources: [
5197
+ {
5198
+ inputIndex: 1,
5199
+ statIndex: 0
5200
+ },
5201
+ {
5202
+ inputIndex: 5,
5203
+ statIndex: 1
5204
+ }
5205
+ ]
5206
+ },
5207
+ {
5208
+ sources: [
5209
+ {
5210
+ inputIndex: 2,
5211
+ statIndex: 0
5212
+ },
5213
+ {
5214
+ inputIndex: 5,
5215
+ statIndex: 2
5216
+ }
5217
+ ]
5218
+ },
5219
+ {
5220
+ sources: [
5221
+ {
5222
+ inputIndex: 3,
5223
+ statIndex: 0
5224
+ },
5225
+ {
5226
+ inputIndex: 5,
5227
+ statIndex: 3
5228
+ }
5229
+ ]
5230
+ },
5231
+ {
5232
+ sources: [
5233
+ {
5234
+ inputIndex: 4,
5235
+ statIndex: 0
5236
+ },
5237
+ {
5238
+ inputIndex: 5,
5239
+ statIndex: 4
5240
+ }
5241
+ ]
5242
+ }
5243
+ ],
5244
+ blendWeights: [
5245
+ ],
5246
+ sourceSubclass: 10210
5247
+ },
5248
+ {
5249
+ outputItemId: 10214,
5250
+ outputMass: 2400000,
5251
+ inputs: [
5252
+ {
5253
+ itemId: 10005,
5254
+ quantity: 100
5255
+ },
5256
+ {
5257
+ itemId: 10002,
5258
+ quantity: 100
5259
+ },
5260
+ {
5261
+ itemId: 10010,
5262
+ quantity: 100
5263
+ },
5264
+ {
5265
+ itemId: 10009,
5266
+ quantity: 100
5267
+ },
5268
+ {
5269
+ itemId: 10004,
5270
+ quantity: 100
5271
+ },
5272
+ {
5273
+ itemId: 10210,
5274
+ quantity: 1
5275
+ }
5276
+ ],
5277
+ statSlots: [
5278
+ {
5279
+ sources: [
5280
+ {
5281
+ inputIndex: 0,
5282
+ statIndex: 0
5283
+ },
5284
+ {
5285
+ inputIndex: 5,
5286
+ statIndex: 0
5287
+ }
5288
+ ]
5289
+ },
5290
+ {
5291
+ sources: [
5292
+ {
5293
+ inputIndex: 1,
5294
+ statIndex: 0
5295
+ },
5296
+ {
5297
+ inputIndex: 5,
5298
+ statIndex: 1
5299
+ }
5300
+ ]
5301
+ },
5302
+ {
5303
+ sources: [
5304
+ {
5305
+ inputIndex: 2,
5306
+ statIndex: 0
5307
+ },
5308
+ {
5309
+ inputIndex: 5,
5310
+ statIndex: 2
5311
+ }
5312
+ ]
5313
+ },
5314
+ {
5315
+ sources: [
5316
+ {
5317
+ inputIndex: 3,
5318
+ statIndex: 0
5319
+ },
5320
+ {
5321
+ inputIndex: 5,
5322
+ statIndex: 3
5323
+ }
5324
+ ]
5325
+ },
5326
+ {
5327
+ sources: [
5328
+ {
5329
+ inputIndex: 4,
5330
+ statIndex: 0
5331
+ },
5332
+ {
5333
+ inputIndex: 5,
5334
+ statIndex: 4
5335
+ }
5336
+ ]
5337
+ }
5338
+ ],
5339
+ blendWeights: [
5340
+ ],
5341
+ sourceSubclass: 10210
5342
+ },
5343
+ {
5344
+ outputItemId: 10215,
5345
+ outputMass: 2400000,
5346
+ inputs: [
5347
+ {
5348
+ itemId: 10005,
5349
+ quantity: 100
5350
+ },
5351
+ {
5352
+ itemId: 10002,
5353
+ quantity: 100
5354
+ },
5355
+ {
5356
+ itemId: 10010,
5357
+ quantity: 100
5358
+ },
5359
+ {
5360
+ itemId: 10009,
5361
+ quantity: 100
5362
+ },
5363
+ {
5364
+ itemId: 10004,
5365
+ quantity: 100
5366
+ },
5367
+ {
5368
+ itemId: 10210,
5369
+ quantity: 1
5370
+ }
5371
+ ],
5372
+ statSlots: [
5373
+ {
5374
+ sources: [
5375
+ {
5376
+ inputIndex: 0,
5377
+ statIndex: 0
5378
+ },
5379
+ {
5380
+ inputIndex: 5,
5381
+ statIndex: 0
5382
+ }
5383
+ ]
5384
+ },
5385
+ {
5386
+ sources: [
5387
+ {
5388
+ inputIndex: 1,
5389
+ statIndex: 0
5390
+ },
5391
+ {
5392
+ inputIndex: 5,
5393
+ statIndex: 1
5394
+ }
5395
+ ]
5396
+ },
5397
+ {
5398
+ sources: [
5399
+ {
5400
+ inputIndex: 2,
5401
+ statIndex: 0
5402
+ },
5403
+ {
5404
+ inputIndex: 5,
5405
+ statIndex: 2
5406
+ }
5407
+ ]
5408
+ },
5409
+ {
5410
+ sources: [
5411
+ {
5412
+ inputIndex: 3,
5413
+ statIndex: 0
5414
+ },
5415
+ {
5416
+ inputIndex: 5,
5417
+ statIndex: 3
5418
+ }
5419
+ ]
5420
+ },
5421
+ {
5422
+ sources: [
5423
+ {
5424
+ inputIndex: 4,
5425
+ statIndex: 0
5426
+ },
5427
+ {
5428
+ inputIndex: 5,
5429
+ statIndex: 4
5430
+ }
5431
+ ]
5432
+ }
5433
+ ],
5434
+ blendWeights: [
5435
+ ],
5436
+ sourceSubclass: 10210
5437
+ },
5438
+ {
5439
+ outputItemId: 10216,
5440
+ outputMass: 3600000,
5441
+ inputs: [
5442
+ {
5443
+ itemId: 10005,
5444
+ quantity: 150
5445
+ },
5446
+ {
5447
+ itemId: 10002,
5448
+ quantity: 150
5449
+ },
5450
+ {
5451
+ itemId: 10010,
5452
+ quantity: 150
5453
+ },
5454
+ {
5455
+ itemId: 10009,
5456
+ quantity: 150
5457
+ },
5458
+ {
5459
+ itemId: 10004,
5460
+ quantity: 150
5461
+ },
5462
+ {
5463
+ itemId: 10211,
5464
+ quantity: 1
5465
+ }
5466
+ ],
5467
+ statSlots: [
5468
+ {
5469
+ sources: [
5470
+ {
5471
+ inputIndex: 0,
5472
+ statIndex: 0
5473
+ },
5474
+ {
5475
+ inputIndex: 5,
5476
+ statIndex: 0
5477
+ }
5478
+ ]
5479
+ },
5480
+ {
5481
+ sources: [
5482
+ {
5483
+ inputIndex: 1,
5484
+ statIndex: 0
5485
+ },
5486
+ {
5487
+ inputIndex: 5,
5488
+ statIndex: 1
5489
+ }
5490
+ ]
5491
+ },
5492
+ {
5493
+ sources: [
5494
+ {
5495
+ inputIndex: 2,
5496
+ statIndex: 0
5497
+ },
5498
+ {
5499
+ inputIndex: 5,
5500
+ statIndex: 2
5501
+ }
5502
+ ]
5503
+ },
5504
+ {
5505
+ sources: [
5506
+ {
5507
+ inputIndex: 3,
5508
+ statIndex: 0
5509
+ },
5510
+ {
5511
+ inputIndex: 5,
5512
+ statIndex: 3
5513
+ }
5514
+ ]
5515
+ },
5516
+ {
5517
+ sources: [
5518
+ {
5519
+ inputIndex: 4,
5520
+ statIndex: 0
5521
+ },
5522
+ {
5523
+ inputIndex: 5,
5524
+ statIndex: 4
5525
+ }
5526
+ ]
5527
+ }
5528
+ ],
5529
+ blendWeights: [
5530
+ ],
5531
+ sourceSubclass: 10211
5532
+ },
5533
+ {
5534
+ outputItemId: 10217,
5535
+ outputMass: 3600000,
5536
+ inputs: [
5537
+ {
5538
+ itemId: 10005,
5539
+ quantity: 150
5540
+ },
5541
+ {
5542
+ itemId: 10002,
5543
+ quantity: 150
5544
+ },
5545
+ {
5546
+ itemId: 10010,
5547
+ quantity: 150
5548
+ },
5549
+ {
5550
+ itemId: 10009,
5551
+ quantity: 150
5552
+ },
5553
+ {
5554
+ itemId: 10004,
5555
+ quantity: 150
5556
+ },
5557
+ {
5558
+ itemId: 10211,
5559
+ quantity: 1
5560
+ }
5561
+ ],
5562
+ statSlots: [
5563
+ {
5564
+ sources: [
5565
+ {
5566
+ inputIndex: 0,
5567
+ statIndex: 0
5568
+ },
5569
+ {
5570
+ inputIndex: 5,
5571
+ statIndex: 0
5572
+ }
5573
+ ]
5574
+ },
5575
+ {
5576
+ sources: [
5577
+ {
5578
+ inputIndex: 1,
5579
+ statIndex: 0
5580
+ },
5581
+ {
5582
+ inputIndex: 5,
5583
+ statIndex: 1
5584
+ }
5585
+ ]
5586
+ },
5587
+ {
5588
+ sources: [
5589
+ {
5590
+ inputIndex: 2,
5591
+ statIndex: 0
5592
+ },
5593
+ {
5594
+ inputIndex: 5,
5595
+ statIndex: 2
5596
+ }
5597
+ ]
5598
+ },
5599
+ {
5600
+ sources: [
5601
+ {
5602
+ inputIndex: 3,
5603
+ statIndex: 0
5604
+ },
5605
+ {
5606
+ inputIndex: 5,
5607
+ statIndex: 3
5608
+ }
5609
+ ]
5610
+ },
5611
+ {
5612
+ sources: [
5613
+ {
5614
+ inputIndex: 4,
5615
+ statIndex: 0
5616
+ },
5617
+ {
5618
+ inputIndex: 5,
5619
+ statIndex: 4
5620
+ }
5621
+ ]
5622
+ }
5623
+ ],
5624
+ blendWeights: [
5625
+ ],
5626
+ sourceSubclass: 10211
5627
+ },
5628
+ {
5629
+ outputItemId: 20001,
5630
+ outputMass: 4800,
5631
+ inputs: [
5632
+ {
5633
+ itemId: 102,
5634
+ quantity: 12
5635
+ }
5636
+ ],
5637
+ statSlots: [
5638
+ {
5639
+ sources: [
5640
+ {
5641
+ inputIndex: 0,
5642
+ statIndex: 0
5643
+ }
5644
+ ]
5645
+ },
5646
+ {
5647
+ sources: [
5648
+ {
5649
+ inputIndex: 0,
5650
+ statIndex: 2
5651
+ }
5652
+ ]
5653
+ },
5654
+ {
5655
+ sources: [
5656
+ {
5657
+ inputIndex: 0,
5658
+ statIndex: 1
5659
+ }
5660
+ ]
5661
+ }
5662
+ ],
5663
+ blendWeights: [
5664
+ ]
5665
+ },
5666
+ {
5667
+ outputItemId: 20002,
5668
+ outputMass: 4800,
5669
+ inputs: [
5670
+ {
5671
+ itemId: 402,
5672
+ quantity: 6
5673
+ },
5674
+ {
5675
+ itemId: 502,
5676
+ quantity: 6
5677
+ }
5678
+ ],
5679
+ statSlots: [
5680
+ {
5681
+ sources: [
5682
+ {
5683
+ inputIndex: 0,
5684
+ statIndex: 1
5685
+ }
5686
+ ]
5687
+ },
5688
+ {
5689
+ sources: [
5690
+ {
5691
+ inputIndex: 0,
5692
+ statIndex: 0
5693
+ }
5694
+ ]
5695
+ },
5696
+ {
5697
+ sources: [
4647
5698
  {
4648
5699
  inputIndex: 0,
4649
5700
  statIndex: 2
@@ -5174,27 +6225,27 @@ var recipes = [
5174
6225
  outputMass: 3840000,
5175
6226
  inputs: [
5176
6227
  {
5177
- itemId: 20001,
5178
- quantity: 300
6228
+ itemId: 20005,
6229
+ quantity: 150
5179
6230
  },
5180
6231
  {
5181
- itemId: 20008,
5182
- quantity: 300
6232
+ itemId: 20002,
6233
+ quantity: 150
5183
6234
  },
5184
6235
  {
5185
- itemId: 20007,
5186
- quantity: 300
6236
+ itemId: 20010,
6237
+ quantity: 150
5187
6238
  },
5188
6239
  {
5189
- itemId: 20003,
5190
- quantity: 300
6240
+ itemId: 20009,
6241
+ quantity: 150
5191
6242
  },
5192
6243
  {
5193
- itemId: 20006,
5194
- quantity: 300
6244
+ itemId: 20004,
6245
+ quantity: 150
5195
6246
  },
5196
6247
  {
5197
- itemId: 10201,
6248
+ itemId: 10211,
5198
6249
  quantity: 1
5199
6250
  }
5200
6251
  ],
@@ -5214,8 +6265,8 @@ var recipes = [
5214
6265
  {
5215
6266
  sources: [
5216
6267
  {
5217
- inputIndex: 0,
5218
- statIndex: 1
6268
+ inputIndex: 1,
6269
+ statIndex: 0
5219
6270
  },
5220
6271
  {
5221
6272
  inputIndex: 5,
@@ -5225,207 +6276,484 @@ var recipes = [
5225
6276
  },
5226
6277
  {
5227
6278
  sources: [
6279
+ {
6280
+ inputIndex: 2,
6281
+ statIndex: 0
6282
+ },
6283
+ {
6284
+ inputIndex: 5,
6285
+ statIndex: 2
6286
+ }
6287
+ ]
6288
+ },
6289
+ {
6290
+ sources: [
6291
+ {
6292
+ inputIndex: 3,
6293
+ statIndex: 0
6294
+ },
6295
+ {
6296
+ inputIndex: 5,
6297
+ statIndex: 3
6298
+ }
5228
6299
  ]
5229
6300
  },
5230
6301
  {
5231
6302
  sources: [
6303
+ {
6304
+ inputIndex: 4,
6305
+ statIndex: 0
6306
+ },
6307
+ {
6308
+ inputIndex: 5,
6309
+ statIndex: 4
6310
+ }
5232
6311
  ]
5233
6312
  }
5234
6313
  ],
5235
6314
  blendWeights: [
5236
6315
  ],
5237
- sourceSubclass: 10201
6316
+ sourceSubclass: 10211
5238
6317
  },
5239
6318
  {
5240
6319
  outputItemId: 20211,
5241
6320
  outputMass: 3840000,
5242
6321
  inputs: [
5243
6322
  {
5244
- itemId: 20001,
5245
- quantity: 300
6323
+ itemId: 20005,
6324
+ quantity: 150
5246
6325
  },
5247
6326
  {
5248
6327
  itemId: 20002,
5249
- quantity: 300
6328
+ quantity: 150
5250
6329
  },
5251
6330
  {
5252
- itemId: 20008,
5253
- quantity: 300
6331
+ itemId: 20010,
6332
+ quantity: 150
5254
6333
  },
5255
6334
  {
5256
- itemId: 20010,
5257
- quantity: 300
6335
+ itemId: 20009,
6336
+ quantity: 150
6337
+ },
6338
+ {
6339
+ itemId: 20004,
6340
+ quantity: 150
6341
+ },
6342
+ {
6343
+ itemId: 10214,
6344
+ quantity: 1
6345
+ }
6346
+ ],
6347
+ statSlots: [
6348
+ {
6349
+ sources: [
6350
+ {
6351
+ inputIndex: 0,
6352
+ statIndex: 0
6353
+ },
6354
+ {
6355
+ inputIndex: 5,
6356
+ statIndex: 0
6357
+ }
6358
+ ]
6359
+ },
6360
+ {
6361
+ sources: [
6362
+ {
6363
+ inputIndex: 1,
6364
+ statIndex: 0
6365
+ },
6366
+ {
6367
+ inputIndex: 5,
6368
+ statIndex: 1
6369
+ }
6370
+ ]
6371
+ },
6372
+ {
6373
+ sources: [
6374
+ {
6375
+ inputIndex: 2,
6376
+ statIndex: 0
6377
+ },
6378
+ {
6379
+ inputIndex: 5,
6380
+ statIndex: 2
6381
+ }
6382
+ ]
6383
+ },
6384
+ {
6385
+ sources: [
6386
+ {
6387
+ inputIndex: 3,
6388
+ statIndex: 0
6389
+ },
6390
+ {
6391
+ inputIndex: 5,
6392
+ statIndex: 3
6393
+ }
6394
+ ]
6395
+ },
6396
+ {
6397
+ sources: [
6398
+ {
6399
+ inputIndex: 4,
6400
+ statIndex: 0
6401
+ },
6402
+ {
6403
+ inputIndex: 5,
6404
+ statIndex: 4
6405
+ }
6406
+ ]
6407
+ }
6408
+ ],
6409
+ blendWeights: [
6410
+ ],
6411
+ sourceSubclass: 10214
6412
+ }
6413
+ ];
6414
+
6415
+ var entities = [
6416
+ {
6417
+ entityItemId: 10200,
6418
+ slots: [
6419
+ ],
6420
+ baseHullmass: 100000
6421
+ },
6422
+ {
6423
+ entityItemId: 10201,
6424
+ slots: [
6425
+ {
6426
+ type: "any",
6427
+ outputPct: 80,
6428
+ maxTier: 1
6429
+ },
6430
+ {
6431
+ type: "any",
6432
+ outputPct: 80,
6433
+ maxTier: 1
6434
+ },
6435
+ {
6436
+ type: "any",
6437
+ outputPct: 80,
6438
+ maxTier: 1
6439
+ },
6440
+ {
6441
+ type: "any",
6442
+ outputPct: 80,
6443
+ maxTier: 1
6444
+ },
6445
+ {
6446
+ type: "any",
6447
+ outputPct: 80,
6448
+ maxTier: 1
6449
+ }
6450
+ ],
6451
+ baseHullmass: 4000000
6452
+ },
6453
+ {
6454
+ entityItemId: 10202,
6455
+ slots: [
6456
+ {
6457
+ type: "loader",
6458
+ outputPct: 100,
6459
+ maxTier: 1
6460
+ },
6461
+ {
6462
+ type: "storage",
6463
+ outputPct: 100,
6464
+ maxTier: 1
6465
+ },
6466
+ {
6467
+ type: "storage",
6468
+ outputPct: 100,
6469
+ maxTier: 1
6470
+ },
6471
+ {
6472
+ type: "storage",
6473
+ outputPct: 100,
6474
+ maxTier: 1
6475
+ },
6476
+ {
6477
+ type: "storage",
6478
+ outputPct: 100,
6479
+ maxTier: 1
6480
+ }
6481
+ ],
6482
+ baseHullmass: 100000
6483
+ },
6484
+ {
6485
+ entityItemId: 10203,
6486
+ slots: [
6487
+ {
6488
+ type: "generator",
6489
+ outputPct: 200,
6490
+ maxTier: 1
6491
+ },
6492
+ {
6493
+ type: "gatherer",
6494
+ outputPct: 200,
6495
+ maxTier: 1
6496
+ }
6497
+ ],
6498
+ baseHullmass: 100000
6499
+ },
6500
+ {
6501
+ entityItemId: 10204,
6502
+ slots: [
6503
+ {
6504
+ type: "generator",
6505
+ outputPct: 200,
6506
+ maxTier: 1
6507
+ },
6508
+ {
6509
+ type: "crafter",
6510
+ outputPct: 200,
6511
+ maxTier: 1
6512
+ }
6513
+ ],
6514
+ baseHullmass: 100000
6515
+ },
6516
+ {
6517
+ entityItemId: 10205,
6518
+ slots: [
6519
+ {
6520
+ type: "generator",
6521
+ outputPct: 200,
6522
+ maxTier: 1
6523
+ },
6524
+ {
6525
+ type: "launcher",
6526
+ outputPct: 200,
6527
+ maxTier: 1
6528
+ }
6529
+ ],
6530
+ baseHullmass: 100000
6531
+ },
6532
+ {
6533
+ entityItemId: 10206,
6534
+ slots: [
6535
+ {
6536
+ type: "storage",
6537
+ outputPct: 100,
6538
+ maxTier: 1
5258
6539
  },
5259
6540
  {
5260
- itemId: 20004,
5261
- quantity: 300
6541
+ type: "storage",
6542
+ outputPct: 100,
6543
+ maxTier: 1
5262
6544
  },
5263
6545
  {
5264
- itemId: 10201,
5265
- quantity: 1
6546
+ type: "storage",
6547
+ outputPct: 100,
6548
+ maxTier: 1
5266
6549
  }
5267
6550
  ],
5268
- statSlots: [
6551
+ baseHullmass: 100000
6552
+ },
6553
+ {
6554
+ entityItemId: 10207,
6555
+ slots: [
6556
+ ],
6557
+ baseHullmass: 100000
6558
+ },
6559
+ {
6560
+ entityItemId: 10208,
6561
+ slots: [
5269
6562
  {
5270
- sources: [
5271
- {
5272
- inputIndex: 0,
5273
- statIndex: 0
5274
- },
5275
- {
5276
- inputIndex: 5,
5277
- statIndex: 0
5278
- }
5279
- ]
6563
+ type: "crafter",
6564
+ outputPct: 75,
6565
+ maxTier: 1
5280
6566
  },
5281
6567
  {
5282
- sources: [
5283
- {
5284
- inputIndex: 0,
5285
- statIndex: 1
5286
- },
5287
- {
5288
- inputIndex: 5,
5289
- statIndex: 1
5290
- }
5291
- ]
6568
+ type: "crafter",
6569
+ outputPct: 75,
6570
+ maxTier: 1
5292
6571
  },
5293
6572
  {
5294
- sources: [
5295
- ]
6573
+ type: "crafter",
6574
+ outputPct: 75,
6575
+ maxTier: 1
5296
6576
  },
5297
6577
  {
5298
- sources: [
5299
- ]
6578
+ type: "crafter",
6579
+ outputPct: 75,
6580
+ maxTier: 1
6581
+ },
6582
+ {
6583
+ type: "crafter",
6584
+ outputPct: 75,
6585
+ maxTier: 1
5300
6586
  }
5301
6587
  ],
5302
- blendWeights: [
5303
- ],
5304
- sourceSubclass: 10201
5305
- }
5306
- ];
5307
-
5308
- var entities = [
5309
- {
5310
- entityItemId: 10200,
5311
- slots: [
5312
- ]
6588
+ baseHullmass: 100000
5313
6589
  },
5314
6590
  {
5315
- entityItemId: 10201,
6591
+ entityItemId: 10210,
5316
6592
  slots: [
5317
6593
  {
5318
- type: "any",
6594
+ type: "generator",
5319
6595
  outputPct: 80,
5320
6596
  maxTier: 1
5321
6597
  },
5322
6598
  {
5323
- type: "any",
6599
+ type: "engine",
5324
6600
  outputPct: 80,
5325
6601
  maxTier: 1
5326
6602
  },
5327
6603
  {
5328
6604
  type: "any",
5329
- outputPct: 80,
6605
+ outputPct: 60,
6606
+ maxTier: 1
6607
+ }
6608
+ ],
6609
+ baseHullmass: 3200000
6610
+ },
6611
+ {
6612
+ entityItemId: 10211,
6613
+ slots: [
6614
+ {
6615
+ type: "generator",
6616
+ outputPct: 85,
5330
6617
  maxTier: 1
5331
6618
  },
5332
6619
  {
5333
- type: "any",
5334
- outputPct: 80,
6620
+ type: "engine",
6621
+ outputPct: 85,
5335
6622
  maxTier: 1
5336
6623
  },
5337
6624
  {
5338
- type: "any",
5339
- outputPct: 80,
6625
+ type: "gatherer",
6626
+ outputPct: 100,
5340
6627
  maxTier: 1
5341
6628
  }
5342
- ]
6629
+ ],
6630
+ baseHullmass: 3600000
5343
6631
  },
5344
6632
  {
5345
- entityItemId: 10202,
6633
+ entityItemId: 10212,
5346
6634
  slots: [
5347
6635
  {
5348
- type: "loader",
5349
- outputPct: 100,
6636
+ type: "generator",
6637
+ outputPct: 85,
5350
6638
  maxTier: 1
5351
6639
  },
5352
6640
  {
5353
- type: "storage",
5354
- outputPct: 100,
6641
+ type: "engine",
6642
+ outputPct: 85,
5355
6643
  maxTier: 1
5356
6644
  },
5357
6645
  {
5358
- type: "storage",
6646
+ type: "loader",
5359
6647
  outputPct: 100,
5360
6648
  maxTier: 1
6649
+ }
6650
+ ],
6651
+ baseHullmass: 3600000
6652
+ },
6653
+ {
6654
+ entityItemId: 10213,
6655
+ slots: [
6656
+ {
6657
+ type: "generator",
6658
+ outputPct: 85,
6659
+ maxTier: 1
5361
6660
  },
5362
6661
  {
5363
- type: "storage",
5364
- outputPct: 100,
6662
+ type: "engine",
6663
+ outputPct: 85,
5365
6664
  maxTier: 1
5366
6665
  },
5367
6666
  {
5368
- type: "storage",
6667
+ type: "builder",
5369
6668
  outputPct: 100,
5370
6669
  maxTier: 1
5371
6670
  }
5372
- ]
6671
+ ],
6672
+ baseHullmass: 4400000
5373
6673
  },
5374
6674
  {
5375
- entityItemId: 10203,
6675
+ entityItemId: 10214,
5376
6676
  slots: [
5377
6677
  {
5378
6678
  type: "generator",
5379
- outputPct: 200,
6679
+ outputPct: 85,
5380
6680
  maxTier: 1
5381
6681
  },
5382
6682
  {
5383
- type: "gatherer",
5384
- outputPct: 200,
6683
+ type: "engine",
6684
+ outputPct: 85,
6685
+ maxTier: 1
6686
+ },
6687
+ {
6688
+ type: "hauler",
6689
+ outputPct: 100,
5385
6690
  maxTier: 1
5386
6691
  }
5387
- ]
6692
+ ],
6693
+ baseHullmass: 4400000
5388
6694
  },
5389
6695
  {
5390
- entityItemId: 10204,
6696
+ entityItemId: 10215,
5391
6697
  slots: [
5392
6698
  {
5393
6699
  type: "generator",
5394
- outputPct: 200,
6700
+ outputPct: 85,
5395
6701
  maxTier: 1
5396
6702
  },
5397
6703
  {
5398
- type: "crafter",
5399
- outputPct: 200,
6704
+ type: "engine",
6705
+ outputPct: 85,
6706
+ maxTier: 1
6707
+ },
6708
+ {
6709
+ type: "storage",
6710
+ outputPct: 100,
5400
6711
  maxTier: 1
5401
6712
  }
5402
- ]
6713
+ ],
6714
+ baseHullmass: 5000000
5403
6715
  },
5404
6716
  {
5405
- entityItemId: 10205,
6717
+ entityItemId: 10216,
5406
6718
  slots: [
5407
6719
  {
5408
6720
  type: "generator",
5409
- outputPct: 200,
6721
+ outputPct: 90,
5410
6722
  maxTier: 1
5411
6723
  },
5412
6724
  {
5413
- type: "launcher",
5414
- outputPct: 200,
6725
+ type: "engine",
6726
+ outputPct: 90,
6727
+ maxTier: 1
6728
+ },
6729
+ {
6730
+ type: "gatherer",
6731
+ outputPct: 100,
6732
+ maxTier: 1
6733
+ },
6734
+ {
6735
+ type: "gatherer",
6736
+ outputPct: 100,
5415
6737
  maxTier: 1
5416
6738
  }
5417
- ]
6739
+ ],
6740
+ baseHullmass: 4000000
5418
6741
  },
5419
6742
  {
5420
- entityItemId: 10206,
6743
+ entityItemId: 10217,
5421
6744
  slots: [
5422
6745
  {
5423
- type: "storage",
5424
- outputPct: 100,
6746
+ type: "generator",
6747
+ outputPct: 90,
5425
6748
  maxTier: 1
5426
6749
  },
5427
6750
  {
5428
- type: "storage",
6751
+ type: "engine",
6752
+ outputPct: 90,
6753
+ maxTier: 1
6754
+ },
6755
+ {
6756
+ type: "gatherer",
5429
6757
  outputPct: 100,
5430
6758
  maxTier: 1
5431
6759
  },
@@ -5434,23 +6762,20 @@ var entities = [
5434
6762
  outputPct: 100,
5435
6763
  maxTier: 1
5436
6764
  }
5437
- ]
5438
- },
5439
- {
5440
- entityItemId: 10207,
5441
- slots: [
5442
- ]
6765
+ ],
6766
+ baseHullmass: 4800000
5443
6767
  },
5444
6768
  {
5445
6769
  entityItemId: 20200,
5446
6770
  slots: [
5447
- ]
6771
+ ],
6772
+ baseHullmass: 100000
5448
6773
  },
5449
6774
  {
5450
6775
  entityItemId: 20210,
5451
6776
  slots: [
5452
6777
  {
5453
- type: "engine",
6778
+ type: "generator",
5454
6779
  outputPct: 100,
5455
6780
  maxTier: 2
5456
6781
  },
@@ -5460,7 +6785,7 @@ var entities = [
5460
6785
  maxTier: 2
5461
6786
  },
5462
6787
  {
5463
- type: "gatherer",
6788
+ type: "engine",
5464
6789
  outputPct: 100,
5465
6790
  maxTier: 2
5466
6791
  },
@@ -5468,24 +6793,20 @@ var entities = [
5468
6793
  type: "gatherer",
5469
6794
  outputPct: 100,
5470
6795
  maxTier: 2
5471
- },
5472
- {
5473
- type: "any",
5474
- outputPct: 80,
5475
- maxTier: 1
5476
6796
  }
5477
- ]
6797
+ ],
6798
+ baseHullmass: 5760000
5478
6799
  },
5479
6800
  {
5480
6801
  entityItemId: 20211,
5481
6802
  slots: [
5482
6803
  {
5483
- type: "engine",
6804
+ type: "generator",
5484
6805
  outputPct: 100,
5485
6806
  maxTier: 2
5486
6807
  },
5487
6808
  {
5488
- type: "generator",
6809
+ type: "engine",
5489
6810
  outputPct: 100,
5490
6811
  maxTier: 2
5491
6812
  },
@@ -5499,7 +6820,8 @@ var entities = [
5499
6820
  outputPct: 100,
5500
6821
  maxTier: 2
5501
6822
  }
5502
- ]
6823
+ ],
6824
+ baseHullmass: 7040000
5503
6825
  }
5504
6826
  ];
5505
6827
 
@@ -6024,6 +7346,13 @@ var items = [
6024
7346
  tier: 1,
6025
7347
  subtype: "launcher"
6026
7348
  },
7349
+ {
7350
+ id: 10110,
7351
+ mass: 960000,
7352
+ type: "module",
7353
+ tier: 1,
7354
+ subtype: "builder"
7355
+ },
6027
7356
  {
6028
7357
  id: 10200,
6029
7358
  mass: 1900000,
@@ -6072,6 +7401,60 @@ var items = [
6072
7401
  type: "entity",
6073
7402
  tier: 1
6074
7403
  },
7404
+ {
7405
+ id: 10208,
7406
+ mass: 1900000,
7407
+ type: "entity",
7408
+ tier: 1
7409
+ },
7410
+ {
7411
+ id: 10210,
7412
+ mass: 1600000,
7413
+ type: "entity",
7414
+ tier: 1
7415
+ },
7416
+ {
7417
+ id: 10211,
7418
+ mass: 2400000,
7419
+ type: "entity",
7420
+ tier: 1
7421
+ },
7422
+ {
7423
+ id: 10212,
7424
+ mass: 2400000,
7425
+ type: "entity",
7426
+ tier: 1
7427
+ },
7428
+ {
7429
+ id: 10213,
7430
+ mass: 2400000,
7431
+ type: "entity",
7432
+ tier: 1
7433
+ },
7434
+ {
7435
+ id: 10214,
7436
+ mass: 2400000,
7437
+ type: "entity",
7438
+ tier: 1
7439
+ },
7440
+ {
7441
+ id: 10215,
7442
+ mass: 2400000,
7443
+ type: "entity",
7444
+ tier: 1
7445
+ },
7446
+ {
7447
+ id: 10216,
7448
+ mass: 3600000,
7449
+ type: "entity",
7450
+ tier: 1
7451
+ },
7452
+ {
7453
+ id: 10217,
7454
+ mass: 3600000,
7455
+ type: "entity",
7456
+ tier: 1
7457
+ },
6075
7458
  {
6076
7459
  id: 20001,
6077
7460
  mass: 4800,
@@ -6335,7 +7718,7 @@ const itemMetadata = {
6335
7718
  },
6336
7719
  10106: {
6337
7720
  name: 'Tractor Beam',
6338
- description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
7721
+ description: 'Projects a haul beam to lock onto and transport containers through group travel.',
6339
7722
  color: '#4ADBFF',
6340
7723
  },
6341
7724
  10107: {
@@ -6353,13 +7736,18 @@ const itemMetadata = {
6353
7736
  description: 'Accelerates and launches cargo payloads toward a remote mass catcher.',
6354
7737
  color: '#E86344',
6355
7738
  },
7739
+ 10110: {
7740
+ name: 'Assembly Arm',
7741
+ description: 'Heavy manipulator arms for on-site construction work. Claims build sites, builds them out, and upgrades ships in place.',
7742
+ color: '#FFB347',
7743
+ },
6356
7744
  10200: {
6357
7745
  name: 'Container',
6358
7746
  description: 'Passive floating cargo storage in space. Towed by ships.',
6359
7747
  color: '#7B8D9E',
6360
7748
  },
6361
7749
  10201: {
6362
- name: 'Roustabout',
7750
+ name: 'Ship',
6363
7751
  description: 'General-purpose vessel with 5 module slots.',
6364
7752
  color: '#4AE898',
6365
7753
  },
@@ -6393,6 +7781,51 @@ const itemMetadata = {
6393
7781
  description: 'Orbital command structure. Anchors a player station cluster.',
6394
7782
  color: '#A0B8D0',
6395
7783
  },
7784
+ 10208: {
7785
+ name: 'Workshop',
7786
+ description: 'A station workshop with five independent workers. Visiting ships bring materials and power, and the workshop does the crafting.',
7787
+ color: '#B877FF',
7788
+ },
7789
+ 10210: {
7790
+ name: 'Roustabout',
7791
+ description: 'A basic starter ship. One engine, one power core, and one open slot to fit as you like.',
7792
+ color: '#4AE898',
7793
+ },
7794
+ 10211: {
7795
+ name: 'Prospector',
7796
+ description: 'A light gathering ship. One engine, one power core, one gathering rig.',
7797
+ color: '#4AE898',
7798
+ },
7799
+ 10212: {
7800
+ name: 'Tender',
7801
+ description: 'A logistics ship with a shuttle bay for moving cargo between ships and stations.',
7802
+ color: '#4AE898',
7803
+ },
7804
+ 10213: {
7805
+ name: 'Wright',
7806
+ description: 'A construction ship with an assembly arm for building structures and upgrading ships.',
7807
+ color: '#4AE898',
7808
+ },
7809
+ 10214: {
7810
+ name: 'Tug',
7811
+ description: 'A logistics ship with a tractor beam for towing containers from place to place.',
7812
+ color: '#4AE898',
7813
+ },
7814
+ 10215: {
7815
+ name: 'Porter',
7816
+ description: 'A cargo ship built around a large storage hold. The extra mass makes it slower than a Roustabout.',
7817
+ color: '#4AE898',
7818
+ },
7819
+ 10216: {
7820
+ name: 'Wrangler',
7821
+ description: 'A heavy gathering ship with two gathering rigs, so it mines faster.',
7822
+ color: '#4AE898',
7823
+ },
7824
+ 10217: {
7825
+ name: 'Dredger',
7826
+ description: 'A gathering ship with its own storage hold, so it can keep mining before it has to offload.',
7827
+ color: '#4AE898',
7828
+ },
6396
7829
  20001: {
6397
7830
  name: 'Plate',
6398
7831
  description: 'Advanced structural plating reinforced with tier 2 ore.',
@@ -6464,13 +7897,21 @@ const itemMetadata = {
6464
7897
  color: '#4AE898',
6465
7898
  },
6466
7899
  20211: {
6467
- name: 'Hauler',
7900
+ name: 'Tug',
6468
7901
  description: 'Advanced towing vessel with tiered engine, generator, and tractor beam slots.',
6469
7902
  color: '#4AE898',
6470
7903
  },
6471
7904
  };
6472
7905
  const entityMetadata = {
6473
7906
  10201: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Shuttle Bay', 'Cargo Hold'] },
7907
+ 10210: { moduleSlotLabels: ['Power Core', 'Engine', 'Utility Bay'] },
7908
+ 10211: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay'] },
7909
+ 10212: { moduleSlotLabels: ['Power Core', 'Engine', 'Shuttle Bay'] },
7910
+ 10213: { moduleSlotLabels: ['Power Core', 'Engine', 'Assembly Arm'] },
7911
+ 10214: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam'] },
7912
+ 10215: { moduleSlotLabels: ['Power Core', 'Engine', 'Cargo Hold'] },
7913
+ 10216: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Limpet Bay'] },
7914
+ 10217: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
6474
7915
  10202: {
6475
7916
  moduleSlotLabels: ['Shuttle Bay', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold'],
6476
7917
  },
@@ -6478,8 +7919,11 @@ const entityMetadata = {
6478
7919
  10204: { moduleSlotLabels: ['Power Core', 'Fabricator'] },
6479
7920
  10205: { moduleSlotLabels: ['Power Core', 'Drive Coil'] },
6480
7921
  10206: { moduleSlotLabels: ['Cargo Hold', 'Cargo Hold', 'Cargo Hold'] },
6481
- 20210: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Limpet Bay', 'Flex Slot'] },
6482
- 20211: { moduleSlotLabels: ['Engine', 'Power Core', 'Tractor Beam', 'Tractor Beam'] },
7922
+ 10208: {
7923
+ moduleSlotLabels: ['Fabricator', 'Fabricator', 'Fabricator', 'Fabricator', 'Fabricator'],
7924
+ },
7925
+ 20210: { moduleSlotLabels: ['Power Core', 'Power Core', 'Engine', 'Limpet Bay'] },
7926
+ 20211: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam', 'Tractor Beam'] },
6483
7927
  };
6484
7928
  for (const item of items) {
6485
7929
  if (!itemMetadata[item.id]) {
@@ -9370,14 +10814,61 @@ var kinds = [
9370
10814
  capabilityFlags: 4,
9371
10815
  zCoord: 0,
9372
10816
  defaultLabel: "Station Hub"
10817
+ },
10818
+ {
10819
+ kind: "workshop",
10820
+ classification: "OrbitalStructure",
10821
+ capabilityFlags: 20,
10822
+ zCoord: 0,
10823
+ defaultLabel: "Workshop"
9373
10824
  }
9374
10825
  ];
9375
10826
  var templates = [
9376
10827
  {
9377
10828
  itemId: 10201,
9378
10829
  kind: "ship",
10830
+ displayLabel: "Ship"
10831
+ },
10832
+ {
10833
+ itemId: 10210,
10834
+ kind: "ship",
9379
10835
  displayLabel: "Roustabout"
9380
10836
  },
10837
+ {
10838
+ itemId: 10211,
10839
+ kind: "ship",
10840
+ displayLabel: "Prospector"
10841
+ },
10842
+ {
10843
+ itemId: 10212,
10844
+ kind: "ship",
10845
+ displayLabel: "Tender"
10846
+ },
10847
+ {
10848
+ itemId: 10213,
10849
+ kind: "ship",
10850
+ displayLabel: "Wright"
10851
+ },
10852
+ {
10853
+ itemId: 10214,
10854
+ kind: "ship",
10855
+ displayLabel: "Tug"
10856
+ },
10857
+ {
10858
+ itemId: 10215,
10859
+ kind: "ship",
10860
+ displayLabel: "Porter"
10861
+ },
10862
+ {
10863
+ itemId: 10216,
10864
+ kind: "ship",
10865
+ displayLabel: "Wrangler"
10866
+ },
10867
+ {
10868
+ itemId: 10217,
10869
+ kind: "ship",
10870
+ displayLabel: "Dredger"
10871
+ },
9381
10872
  {
9382
10873
  itemId: 10202,
9383
10874
  kind: "warehouse",
@@ -9418,6 +10909,11 @@ var templates = [
9418
10909
  kind: "hub",
9419
10910
  displayLabel: ""
9420
10911
  },
10912
+ {
10913
+ itemId: 10208,
10914
+ kind: "workshop",
10915
+ displayLabel: ""
10916
+ },
9421
10917
  {
9422
10918
  itemId: 20210,
9423
10919
  kind: "ship",
@@ -9426,7 +10922,7 @@ var templates = [
9426
10922
  {
9427
10923
  itemId: 20211,
9428
10924
  kind: "ship",
9429
- displayLabel: "Hauler"
10925
+ displayLabel: "Tug"
9430
10926
  }
9431
10927
  ];
9432
10928
  var kindRegistryJson = {
@@ -9510,6 +11006,7 @@ const ENTITY_SHIP = antelope.Name.from('ship');
9510
11006
  const ENTITY_WAREHOUSE = antelope.Name.from('warehouse');
9511
11007
  const ENTITY_EXTRACTOR = antelope.Name.from('extractor');
9512
11008
  const ENTITY_FACTORY = antelope.Name.from('factory');
11009
+ const ENTITY_WORKSHOP = antelope.Name.from('workshop');
9513
11010
  const ENTITY_CONTAINER = antelope.Name.from('container');
9514
11011
  const ENTITY_NEXUS = antelope.Name.from('nexus');
9515
11012
  const ENTITY_PLOT = antelope.Name.from('plot');
@@ -9528,6 +11025,9 @@ function isExtractor(entity) {
9528
11025
  function isFactory(entity) {
9529
11026
  return entity.type?.equals(ENTITY_FACTORY) ?? false;
9530
11027
  }
11028
+ function isWorkshop(entity) {
11029
+ return entity.type?.equals(ENTITY_WORKSHOP) ?? false;
11030
+ }
9531
11031
  function isContainer(entity) {
9532
11032
  return entity.type?.equals(ENTITY_CONTAINER) ?? false;
9533
11033
  }
@@ -10009,7 +11509,7 @@ function distanceBetweenCoordinates(origin, destination) {
10009
11509
  function distanceBetweenPoints(x1, y1, x2, y2) {
10010
11510
  const x = (x1 - x2) ** 2;
10011
11511
  const y = (y1 - y2) ** 2;
10012
- return antelope.UInt64.from(Math.sqrt(x + y) * PRECISION$1);
11512
+ return antelope.UInt64.from(Math.sqrt(x + y) * PRECISION);
10013
11513
  }
10014
11514
  function lerp$1(origin, destination, time) {
10015
11515
  return {
@@ -10055,9 +11555,9 @@ function getInterpolatedPosition(entity, taskIndex, taskProgress) {
10055
11555
  function rotation(origin, destination) {
10056
11556
  return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
10057
11557
  }
10058
- function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION$1) {
11558
+ function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION) {
10059
11559
  const nearbySystems = [];
10060
- const max = antelope.UInt64.from(maxDistance / PRECISION$1);
11560
+ const max = antelope.UInt64.from(maxDistance / PRECISION);
10061
11561
  const xMin = antelope.Int64.from(origin.x).subtracting(max);
10062
11562
  const xMax = antelope.Int64.from(origin.x).adding(max);
10063
11563
  const yMin = antelope.Int64.from(origin.y).subtracting(max);
@@ -10089,14 +11589,22 @@ function calc_rechargetime(capacity, energy, recharge) {
10089
11589
  function calc_ship_rechargetime(ship) {
10090
11590
  if (!ship.generator)
10091
11591
  return antelope.UInt32.from(0);
10092
- return calc_rechargetime(ship.generator.capacity, ship.energy ?? antelope.UInt16.from(0), ship.generator.recharge);
11592
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? antelope.UInt32.from(0), ship.generator.recharge);
10093
11593
  }
10094
11594
  function calc_flighttime(distance, acceleration) {
10095
11595
  return antelope.UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
10096
11596
  }
11597
+ function calc_travel_flighttime(distance, acceleration) {
11598
+ const cruiseTransitionDistance = 2 * PRECISION;
11599
+ if (Number(distance) <= cruiseTransitionDistance) {
11600
+ return calc_flighttime(distance, acceleration);
11601
+ }
11602
+ const cruiseVelocity = Math.sqrt(acceleration * cruiseTransitionDistance);
11603
+ return antelope.UInt32.from(Number(distance) / cruiseVelocity + cruiseVelocity / acceleration);
11604
+ }
10097
11605
  function calc_transit_duration(ax, ay, bx, by) {
10098
11606
  const distance = distanceBetweenPoints(ax, ay, bx, by);
10099
- return antelope.UInt32.from(Math.floor(distance.toNumber() / (PRECISION$1 * WH.TRANSIT_SPEED)));
11607
+ return antelope.UInt32.from(Math.floor(distance.toNumber() / (PRECISION * WH.TRANSIT_SPEED)));
10100
11608
  }
10101
11609
  function shipLoaderLane(ship) {
10102
11610
  const lanes = ship.loader_lanes ?? [];
@@ -10120,14 +11628,14 @@ function calc_loader_acceleration(ship, mass) {
10120
11628
  }
10121
11629
  function calc_ship_flighttime(ship, mass, distance) {
10122
11630
  const acceleration = calc_ship_acceleration(ship, mass);
10123
- return calc_flighttime(distance, acceleration);
11631
+ return calc_travel_flighttime(distance, acceleration);
10124
11632
  }
10125
11633
  function calc_ship_acceleration(ship, mass) {
10126
11634
  const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
10127
11635
  return calc_acceleration(thrust, Number(mass));
10128
11636
  }
10129
11637
  function calc_acceleration(thrust, mass) {
10130
- return (thrust / mass) * PRECISION$1;
11638
+ return (thrust / mass) * PRECISION;
10131
11639
  }
10132
11640
  function calc_ship_mass(ship, cargos) {
10133
11641
  const mass = antelope.UInt64.from(0);
@@ -10153,10 +11661,10 @@ function calc_group_flighttime(totalThrust, haulCount, pooledHaulCap, weightedHa
10153
11661
  effectiveThrust = Math.trunc((totalThrust * 1000) / penaltyMilli);
10154
11662
  }
10155
11663
  const acceleration = calc_acceleration(effectiveThrust, totalMass);
10156
- return calc_flighttime(distance, acceleration);
11664
+ return calc_travel_flighttime(distance, acceleration);
10157
11665
  }
10158
11666
  function calc_energyusage(distance, drain) {
10159
- return antelope.UInt64.from(distance).dividing(PRECISION$1).multiplying(drain);
11667
+ return antelope.UInt64.from(distance).multiplying(drain).dividing(PRECISION);
10160
11668
  }
10161
11669
  function calculateTransferTime(ship, cargos, quantities) {
10162
11670
  let mass = antelope.UInt64.from(0);
@@ -10256,7 +11764,7 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
10256
11764
  function hasEnergyForDistance(ship, distance) {
10257
11765
  if (!ship.engines)
10258
11766
  return false;
10259
- const energyNeeded = antelope.UInt64.from(distance).dividing(PRECISION$1).multiplying(ship.engines.drain);
11767
+ const energyNeeded = antelope.UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
10260
11768
  return antelope.UInt64.from(ship.energy ?? 0).gte(energyNeeded);
10261
11769
  }
10262
11770
  function toNum$1(v) {
@@ -10963,6 +12471,8 @@ function getItemStatKeys(itemId) {
10963
12471
  return [];
10964
12472
  return getStatDefinitions(item.category).map((d) => d.key);
10965
12473
  }
12474
+ if (itemId === ITEM_SHIP_T1_PACKED)
12475
+ return ['strength', 'density', '', ''];
10966
12476
  const recipe = getRecipe(itemId);
10967
12477
  if (!recipe)
10968
12478
  return [];
@@ -11773,6 +13283,7 @@ const MODULE_LAUNCHER = 7;
11773
13283
  const MODULE_STORAGE = 8;
11774
13284
  const MODULE_HAULER = 9;
11775
13285
  const MODULE_BATTERY = 10;
13286
+ const MODULE_BUILDER = 12;
11776
13287
  function moduleAccepts(slotType, moduleType) {
11777
13288
  return slotType === MODULE_ANY || slotType === moduleType;
11778
13289
  }
@@ -11789,6 +13300,8 @@ function getModuleCapabilityType(itemId) {
11789
13300
  return MODULE_LOADER;
11790
13301
  case ITEM_CRAFTER_T1:
11791
13302
  return MODULE_CRAFTER;
13303
+ case ITEM_BUILDER_T1:
13304
+ return MODULE_BUILDER;
11792
13305
  case ITEM_STORAGE_T1:
11793
13306
  return MODULE_STORAGE;
11794
13307
  case ITEM_HAULER_T1:
@@ -11823,6 +13336,8 @@ function moduleSlotTypeToCode(slotType) {
11823
13336
  return MODULE_WARP;
11824
13337
  case 'crafter':
11825
13338
  return MODULE_CRAFTER;
13339
+ case 'builder':
13340
+ return MODULE_BUILDER;
11826
13341
  case 'launcher':
11827
13342
  return MODULE_LAUNCHER;
11828
13343
  case 'storage':
@@ -13466,7 +14981,7 @@ const UINT32_MAX = 4294967295;
13466
14981
  const UINT32_MAX_BIGINT = 4294967295n;
13467
14982
  const UINT32_MOD = 4294967296n;
13468
14983
  const UINT64_MAX = 18446744073709551615n;
13469
- const PRECISION_BIGINT = BigInt(PRECISION$1);
14984
+ const PRECISION_BIGINT = BigInt(PRECISION);
13470
14985
  function toNumber(value) {
13471
14986
  if (typeof value === 'number')
13472
14987
  return Math.trunc(value);
@@ -13515,7 +15030,7 @@ function calcDistance(origin, destination) {
13515
15030
  const b = Coordinates.from(destination);
13516
15031
  const dx = toNumber(a.x) - toNumber(b.x);
13517
15032
  const dy = toNumber(a.y) - toNumber(b.y);
13518
- return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION$1));
15033
+ return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION));
13519
15034
  }
13520
15035
  function calcCargoItemMassUint32(item) {
13521
15036
  let mass = toUint32(BigInt(getItem(item.item_id).mass) * toUint32(toBigInt(item.quantity)));
@@ -13585,10 +15100,10 @@ class ActionsManager extends BaseManager {
13585
15100
  recharge,
13586
15101
  });
13587
15102
  }
13588
- travelroute(entities, waypoints, recharge = true) {
15103
+ travelplan(entities, waypoints, recharge = true) {
13589
15104
  const entityRefs = this.entityRefs(entities);
13590
15105
  const wps = waypoints.map((w) => exports.ServerTypes.route_waypoint.from({ x: antelope.Int64.from(w.x), y: antelope.Int64.from(w.y) }));
13591
- return this.server.action('travelroute', {
15106
+ return this.server.action('travelplan', {
13592
15107
  entities: entityRefs,
13593
15108
  waypoints: wps,
13594
15109
  recharge,
@@ -13675,6 +15190,14 @@ class ActionsManager extends BaseManager {
13675
15190
  items,
13676
15191
  });
13677
15192
  }
15193
+ shuttle(carrierId, fromId, toId, items) {
15194
+ return this.server.action('shuttle', {
15195
+ carrier: antelope.UInt64.from(carrierId),
15196
+ from_id: antelope.UInt64.from(fromId),
15197
+ to_id: antelope.UInt64.from(toId),
15198
+ items,
15199
+ });
15200
+ }
13678
15201
  launch(launcherId, catcherId, items) {
13679
15202
  return this.server.action('launch', {
13680
15203
  launcher_id: antelope.UInt64.from(launcherId),
@@ -13723,26 +15246,16 @@ class ActionsManager extends BaseManager {
13723
15246
  }
13724
15247
  return this.server.action('gather', params);
13725
15248
  }
13726
- bundleGather(gathers) {
13727
- const actions = gathers.map(({ sourceId, destinationId, stratum, quantity, slot }) => this.gather(sourceId, destinationId, stratum, quantity, slot));
13728
- return antelope.Transaction.from({
13729
- expiration: 0,
13730
- ref_block_num: 0,
13731
- ref_block_prefix: 0,
13732
- actions,
15249
+ gatherplan(sourceId, destinationId, stratum, quantity, recharge = true, slots = []) {
15250
+ return this.server.action('gatherplan', {
15251
+ source_id: antelope.UInt64.from(sourceId),
15252
+ destination_id: antelope.UInt64.from(destinationId),
15253
+ stratum: antelope.UInt16.from(stratum),
15254
+ quantity: antelope.UInt32.from(quantity),
15255
+ recharge,
15256
+ slots: antelope.Bytes.from(slots),
13733
15257
  });
13734
15258
  }
13735
- flattenGatherPlan(plan, ctx) {
13736
- const actions = [];
13737
- for (const cycle of plan.cycles) {
13738
- if (cycle.rechargeBefore)
13739
- actions.push(this.recharge(ctx.sourceId));
13740
- for (const limpet of cycle.limpets) {
13741
- actions.push(this.gather(ctx.sourceId, ctx.destinationId, ctx.stratum, limpet.quantity, limpet.slot));
13742
- }
13743
- }
13744
- return actions;
13745
- }
13746
15259
  warp(entityId, destination) {
13747
15260
  const x = antelope.Int64.from(destination.x);
13748
15261
  const y = antelope.Int64.from(destination.y);
@@ -13767,6 +15280,39 @@ class ActionsManager extends BaseManager {
13767
15280
  }
13768
15281
  return this.server.action('craft', params);
13769
15282
  }
15283
+ craftjob(shipId, workshopId, slot, recipeId, quantity, inputs) {
15284
+ const params = {
15285
+ ship_id: antelope.UInt64.from(shipId),
15286
+ workshop_id: antelope.UInt64.from(workshopId),
15287
+ slot: antelope.UInt8.from(slot),
15288
+ recipe_id: antelope.UInt16.from(recipeId),
15289
+ quantity: antelope.UInt32.from(quantity),
15290
+ inputs,
15291
+ };
15292
+ return this.server.action('craftjob', params);
15293
+ }
15294
+ claimjob(jobId, shipId) {
15295
+ const params = {
15296
+ job_id: antelope.UInt64.from(jobId),
15297
+ ship_id: antelope.UInt64.from(shipId),
15298
+ };
15299
+ return this.server.action('claimjob', params);
15300
+ }
15301
+ canceljob(jobId, shipId) {
15302
+ const params = {
15303
+ job_id: antelope.UInt64.from(jobId),
15304
+ ship_id: antelope.UInt64.from(shipId),
15305
+ };
15306
+ return this.server.action('canceljob', params);
15307
+ }
15308
+ setsocket(workshopId, slot, open) {
15309
+ const params = {
15310
+ workshop_id: antelope.UInt64.from(workshopId),
15311
+ slot: antelope.UInt8.from(slot),
15312
+ open,
15313
+ };
15314
+ return this.server.action('setsocket', params);
15315
+ }
13770
15316
  blend(entityId, inputs) {
13771
15317
  return this.server.action('blend', {
13772
15318
  id: antelope.UInt64.from(entityId),
@@ -14681,6 +16227,15 @@ class Shipload {
14681
16227
  }
14682
16228
  }
14683
16229
 
16230
+ const MODULE_STAT_SCALING_ANCHOR = 213;
16231
+ const MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = 40;
16232
+ function computeEffectiveModuleStat(stat) {
16233
+ if (stat <= MODULE_STAT_SCALING_ANCHOR)
16234
+ return stat;
16235
+ return (MODULE_STAT_SCALING_ANCHOR +
16236
+ Math.floor(((stat - MODULE_STAT_SCALING_ANCHOR) * MODULE_STAT_SCALING_POST_ANCHOR_PERCENT) / 100));
16237
+ }
16238
+
14684
16239
  const U16_MAX = 65535;
14685
16240
  function packedModulesToInstalled(entries) {
14686
16241
  const installed = [];
@@ -14712,13 +16267,27 @@ function getSlotAmp(layout, slotIndex) {
14712
16267
  function idiv(a, b) {
14713
16268
  return Math.floor(a / b);
14714
16269
  }
14715
- function computeBaseHullmass$1(stats) {
16270
+ function toWholeEnergy$1(milli) {
16271
+ return idiv(milli + 500, 1000);
16272
+ }
16273
+ function isShipHull$1(itemId) {
16274
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16275
+ }
16276
+ function sumPackedShipChannels(stats) {
16277
+ let sum = 0;
16278
+ for (let slot = 0; slot < 5; slot++)
16279
+ sum += decodeStat(stats, slot);
16280
+ return sum;
16281
+ }
16282
+ function computeBaseHullmass$1(itemId, stats) {
16283
+ if (isShipHull$1(itemId)) {
16284
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumPackedShipChannels(stats))) / 10000);
16285
+ }
14716
16286
  const density = decodeStat(stats, 1);
14717
- return 100000 - 75 * density;
16287
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - density)) / 2000);
14718
16288
  }
14719
16289
  function computeBaseCapacityShip(stats) {
14720
- const s = decodeStat(stats, 0) + decodeStat(stats, 2);
14721
- return Math.floor(5000000 * 6 ** (s / 1998));
16290
+ return Math.floor(5000000 * 6 ** (sumPackedShipChannels(stats) / 4995));
14722
16291
  }
14723
16292
  function computeBaseCapacityContainer(stats) {
14724
16293
  const s = decodeStat(stats, 0) + decodeStat(stats, 2);
@@ -14730,35 +16299,57 @@ function computeBaseCapacityWarehouse(stats) {
14730
16299
  }
14731
16300
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
14732
16301
  const computeEngineDrain = (thm) => 2 * Math.max(30, 50 - idiv(thm, 70));
14733
- const ENGINE_DRAIN_BASE = 118;
16302
+ const ENGINE_DRAIN_BASE = 156;
14734
16303
  const ENGINE_DRAIN_REF_THRUST = 775;
14735
16304
  const ENGINE_DRAIN_REF_THM = 500;
14736
16305
  const computeTravelDrain = (totalThrust, avgThm) => {
14737
16306
  if (totalThrust <= 0)
14738
16307
  return 0;
14739
- const num = ENGINE_DRAIN_BASE * ENGINE_DRAIN_REF_THRUST * computeEngineDrain(avgThm);
14740
- const den = totalThrust * computeEngineDrain(ENGINE_DRAIN_REF_THM);
14741
- return idiv(num, den);
16308
+ const thermalFactor = computeEngineDrain(avgThm) / computeEngineDrain(ENGINE_DRAIN_REF_THM);
16309
+ const thrustFactor = Math.sqrt(ENGINE_DRAIN_REF_THRUST / totalThrust);
16310
+ return Math.floor(ENGINE_DRAIN_BASE * 1000 * thermalFactor * thrustFactor);
14742
16311
  };
14743
- const computeGeneratorCap = (com) => 1300 + idiv(com, 2);
14744
- const computeGeneratorRech = (fin) => 2 * (1 + idiv(fin * 3, 1000));
16312
+ const computeGeneratorCap = (com) => 1300000 + com * 500;
16313
+ const computeGeneratorRech = (fin) => 2000 + fin * 6;
14745
16314
  const computeGathererYield = (str) => 200 + str;
14746
- const computeGathererDrain = (con) => 2 * Math.max(250, 1250 - idiv(con * 25, 20));
16315
+ const computeGathererDrain = (con) => 2 * Math.max(250000, 1250000 - con * 1250);
14747
16316
  const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
14748
16317
  const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
14749
16318
  const computeLoaderThrust = (pla) => 1 + idiv(pla * pla, 10000);
14750
16319
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
14751
- const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
16320
+ const computeCrafterDrain = (fin) => Math.max(5000, 30000 - idiv(fin * 1000, 33));
16321
+ const computeBuilderSpeed = (resonance) => 100 + idiv(resonance * 4, 5);
16322
+ const computeBuilderDrain = (fineness) => Math.max(5000, 30000 - idiv(fineness * 1000, 33));
14752
16323
  const computeHaulerCapacity = (fin, tier) => Math.max(tier, tier + idiv(fin, 400));
14753
16324
  const computeHaulerEfficiency = (con) => 2000 + con * 6;
14754
- const computeHaulerDrain$1 = (com) => Math.max(3, 15 - idiv(com, 80));
16325
+ const supportDrainTierPercent = (tier) => {
16326
+ const clampedTier = Math.min(10, Math.max(1, Math.trunc(tier)));
16327
+ return Math.max(50, 110 - clampedTier * 10);
16328
+ };
16329
+ const computeT1LogisticsDrain = (stat) => Math.max(3000, 15000 - Math.min(12000, idiv(stat * 1000, 80)));
16330
+ const computeHaulerDrain = (conductivity, tier) => idiv(computeT1LogisticsDrain(conductivity) * supportDrainTierPercent(tier), 100);
16331
+ const computeCargoBayDrain = (cohesion, tier) => idiv(computeT1LogisticsDrain(cohesion) * 3 * supportDrainTierPercent(tier), 400);
14755
16332
  const computeWarpRange = (stat) => 100 + stat * 3;
14756
- const computeCargoBayCapacity = (strength, density, hardness, cohesion) => 10000000 + idiv((strength + density + hardness + cohesion) * 50000000, 3996);
14757
- const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500 + idiv((volatility + thermal + plasticity + insulation) * 7500, 3996);
16333
+ const computeCargoBayCapacity = (strength, density, hardness) => 10000000 + idiv((strength + density + hardness) * 50000000, 2997);
16334
+ const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500000 + idiv((volatility + thermal + plasticity + insulation) * 7500000, 3996);
14758
16335
  function entityDisplayName(itemId) {
14759
16336
  switch (itemId) {
14760
16337
  case ITEM_SHIP_T1_PACKED:
16338
+ return 'Ship';
16339
+ case ITEM_ROUSTABOUT_T1_PACKED:
14761
16340
  return 'Roustabout';
16341
+ case ITEM_PROSPECTOR_T1_PACKED:
16342
+ return 'Prospector';
16343
+ case ITEM_TENDER_T1_PACKED:
16344
+ return 'Tender';
16345
+ case ITEM_TUG_T1_PACKED:
16346
+ return 'Tug';
16347
+ case ITEM_PORTER_T1_PACKED:
16348
+ return 'Porter';
16349
+ case ITEM_WRANGLER_T1_PACKED:
16350
+ return 'Wrangler';
16351
+ case ITEM_DREDGER_T1_PACKED:
16352
+ return 'Dredger';
14762
16353
  case ITEM_WAREHOUSE_T1_PACKED:
14763
16354
  return 'Warehouse';
14764
16355
  case ITEM_EXTRACTOR_T1_PACKED:
@@ -14772,7 +16363,7 @@ function entityDisplayName(itemId) {
14772
16363
  case ITEM_PROSPECTOR_T2_PACKED:
14773
16364
  return 'Prospector';
14774
16365
  case ITEM_HAULER_SHIP_T2_PACKED:
14775
- return 'Hauler';
16366
+ return 'Tug';
14776
16367
  default:
14777
16368
  return 'Entity';
14778
16369
  }
@@ -14790,6 +16381,8 @@ function moduleDisplayName(itemId) {
14790
16381
  return 'Shuttle Bay';
14791
16382
  case ITEM_CRAFTER_T1:
14792
16383
  return 'Fabricator';
16384
+ case ITEM_BUILDER_T1:
16385
+ return 'Assembly Arm';
14793
16386
  case ITEM_STORAGE_T1:
14794
16387
  return 'Cargo Hold';
14795
16388
  case ITEM_HAULER_T1:
@@ -14815,15 +16408,15 @@ function formatModuleLine(slot, itemId, stats) {
14815
16408
  const subtype = getModuleCapabilityType(itemId);
14816
16409
  switch (subtype) {
14817
16410
  case MODULE_ENGINE: {
14818
- const vol = decodeStat(stats, 0);
14819
- const thm = decodeStat(stats, 1);
16411
+ const vol = computeEffectiveModuleStat(decodeStat(stats, 0));
16412
+ const thm = computeEffectiveModuleStat(decodeStat(stats, 1));
14820
16413
  out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
14821
16414
  break;
14822
16415
  }
14823
16416
  case MODULE_GENERATOR: {
14824
- const res = decodeStat(stats, 0);
14825
- const ref = decodeStat(stats, 1);
14826
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
16417
+ const res = computeEffectiveModuleStat(decodeStat(stats, 0));
16418
+ const ref = computeEffectiveModuleStat(decodeStat(stats, 1));
16419
+ out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref))}`;
14827
16420
  break;
14828
16421
  }
14829
16422
  case MODULE_GATHERER: {
@@ -14831,7 +16424,7 @@ function formatModuleLine(slot, itemId, stats) {
14831
16424
  const tol = decodeStat(stats, 1);
14832
16425
  const con = decodeStat(stats, 2);
14833
16426
  const tier = getItem(itemId).tier;
14834
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${computeGathererDrain(con)}`;
16427
+ out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
14835
16428
  break;
14836
16429
  }
14837
16430
  case MODULE_LOADER: {
@@ -14843,23 +16436,30 @@ function formatModuleLine(slot, itemId, stats) {
14843
16436
  case MODULE_CRAFTER: {
14844
16437
  const rea = decodeStat(stats, 0);
14845
16438
  const con = decodeStat(stats, 1);
14846
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(con)}`;
16439
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16440
+ break;
16441
+ }
16442
+ case MODULE_BUILDER: {
16443
+ const res = decodeStat(stats, 0);
16444
+ const fin = decodeStat(stats, 1);
16445
+ out += ` Speed ${computeBuilderSpeed(res)} Drain ${toWholeEnergy$1(computeBuilderDrain(fin))}`;
14847
16446
  break;
14848
16447
  }
14849
16448
  case MODULE_STORAGE: {
14850
16449
  const str = decodeStat(stats, 0);
14851
16450
  const den = decodeStat(stats, 1);
14852
16451
  const hrd = decodeStat(stats, 2);
14853
- const com = decodeStat(stats, 3);
14854
- out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd, com)}`;
16452
+ const coh = decodeStat(stats, 3);
16453
+ const tier = getItem(itemId).tier;
16454
+ out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd)} Drain ${toWholeEnergy$1(computeCargoBayDrain(coh, tier))}`;
14855
16455
  break;
14856
16456
  }
14857
16457
  case MODULE_HAULER: {
14858
16458
  const res = decodeStat(stats, 0);
14859
16459
  const pla = decodeStat(stats, 1);
14860
- const ref = decodeStat(stats, 2);
16460
+ const con = decodeStat(stats, 2);
14861
16461
  const tier = getItem(itemId).tier;
14862
- out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${computeHaulerDrain$1(ref)}`;
16462
+ out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${toWholeEnergy$1(computeHaulerDrain(con, tier))}`;
14863
16463
  break;
14864
16464
  }
14865
16465
  case MODULE_WARP: {
@@ -14872,18 +16472,16 @@ function formatModuleLine(slot, itemId, stats) {
14872
16472
  const thm = decodeStat(stats, 1);
14873
16473
  const pla = decodeStat(stats, 2);
14874
16474
  const ins = decodeStat(stats, 3);
14875
- out += ` Energy Capacity ${computeBatteryBankCapacity(vol, thm, pla, ins)}`;
16475
+ out += ` Energy Capacity ${toWholeEnergy$1(computeBatteryBankCapacity(vol, thm, pla, ins))}`;
14876
16476
  break;
14877
16477
  }
14878
16478
  }
14879
16479
  return out;
14880
16480
  }
14881
16481
  function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14882
- const hullMass = computeBaseHullmass$1(hullStats);
16482
+ const hullMass = computeBaseHullmass$1(itemId, hullStats);
14883
16483
  let baseCapacity = 0;
14884
- if (itemId === ITEM_SHIP_T1_PACKED ||
14885
- itemId === ITEM_PROSPECTOR_T2_PACKED ||
14886
- itemId === ITEM_HAULER_SHIP_T2_PACKED) {
16484
+ if (isShipHull$1(itemId)) {
14887
16485
  baseCapacity = computeBaseCapacityShip(hullStats);
14888
16486
  }
14889
16487
  else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
@@ -14908,31 +16506,45 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14908
16506
  return out;
14909
16507
  }
14910
16508
 
14911
- function computeBaseHullmass(stats) {
14912
- return 100000 - 75 * stats.density;
16509
+ const DEFAULT_BASE_HULLMASS = 100000;
16510
+ function getBaseHullmassFor(itemId) {
16511
+ return getEntityLayout(itemId)?.baseHullmass ?? DEFAULT_BASE_HULLMASS;
14913
16512
  }
14914
- function computeShipHullCapabilities(stats) {
14915
- const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
14916
- const exponent = statSum / 1998.0;
16513
+ function isShipHull(itemId) {
16514
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16515
+ }
16516
+ function sumHullStats(stats) {
16517
+ return Object.values(stats).reduce((sum, value) => sum + value, 0);
16518
+ }
16519
+ function computeBaseHullmass(itemId, stats) {
16520
+ if (isShipHull(itemId)) {
16521
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumHullStats(stats))) / 10000);
16522
+ }
16523
+ const lightness = stats.density ?? stats.hardness ?? 0;
16524
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - lightness)) / 2000);
16525
+ }
16526
+ function computeShipHullCapabilities(stats, itemId = ITEM_SHIP_T1_PACKED) {
16527
+ const statSum = sumHullStats(stats);
16528
+ const exponent = statSum / 4995.0;
14917
16529
  return {
14918
- hullmass: computeBaseHullmass(stats),
16530
+ hullmass: computeBaseHullmass(itemId, stats),
14919
16531
  capacity: Math.floor(5000000 * 6 ** exponent),
14920
16532
  };
14921
16533
  }
14922
16534
  function computeEngineCapabilities(stats) {
14923
- const vol = stats.volatility;
14924
- const thm = stats.thermal;
16535
+ const vol = computeEffectiveModuleStat(stats.volatility);
16536
+ const thm = computeEffectiveModuleStat(stats.thermal);
14925
16537
  return {
14926
16538
  thrust: 400 + Math.floor((vol * 3) / 4),
14927
16539
  drain: 2 * Math.max(30, 50 - Math.floor(thm / 70)),
14928
16540
  };
14929
16541
  }
14930
16542
  function computeGeneratorCapabilities(stats) {
14931
- const res = stats.resonance;
14932
- const ref = stats.reflectivity;
16543
+ const res = computeEffectiveModuleStat(stats.resonance);
16544
+ const ref = computeEffectiveModuleStat(stats.reflectivity);
14933
16545
  return {
14934
- capacity: 1300 + Math.floor(res / 2),
14935
- recharge: 2 * (1 + Math.floor((ref * 3) / 1000)),
16546
+ capacity: 1300000 + res * 500,
16547
+ recharge: 2000 + ref * 6,
14936
16548
  };
14937
16549
  }
14938
16550
  const GATHERER_DEPTH_TABLE = [
@@ -14958,11 +16570,11 @@ function gathererDepthForTier(tol, tier) {
14958
16570
  function computeGathererCapabilities(stats, tier) {
14959
16571
  const str = stats.strength;
14960
16572
  const con = stats.saturation;
14961
- const hrd = stats.hardness;
16573
+ const tol = stats.tolerance ?? stats.hardness;
14962
16574
  return {
14963
16575
  yield: 200 + str,
14964
- drain: 2 * Math.max(250, 1250 - Math.floor((con * 25) / 20)),
14965
- depth: gathererDepthForTier(hrd, tier),
16576
+ drain: 2 * Math.max(250000, 1250000 - con * 1250),
16577
+ depth: gathererDepthForTier(tol, tier),
14966
16578
  };
14967
16579
  }
14968
16580
  function computeLoaderCapabilities(stats) {
@@ -14979,7 +16591,15 @@ function computeCrafterCapabilities(stats) {
14979
16591
  const con = stats.conductivity;
14980
16592
  return {
14981
16593
  speed: 100 + Math.floor((fin * 4) / 5),
14982
- drain: Math.max(5, 30 - Math.floor(con / 33)),
16594
+ drain: Math.max(5000, 30000 - Math.floor((con * 1000) / 33)),
16595
+ };
16596
+ }
16597
+ function computeBuilderCapabilities(stats) {
16598
+ const resonance = stats.resonance;
16599
+ const fineness = stats.fineness;
16600
+ return {
16601
+ speed: 100 + Math.floor((resonance * 4) / 5),
16602
+ drain: Math.max(5000, 30000 - Math.floor((fineness * 1000) / 33)),
14983
16603
  };
14984
16604
  }
14985
16605
  function computeHaulerCapabilities(stats, tier) {
@@ -14989,7 +16609,7 @@ function computeHaulerCapabilities(stats, tier) {
14989
16609
  return {
14990
16610
  capacity: computeHaulerCapacity(resonance, tier),
14991
16611
  efficiency: 2000 + plasticity * 6,
14992
- drain: Math.max(3, 15 - Math.floor(conductivity / 80)),
16612
+ drain: computeHaulerDrain(conductivity, tier),
14993
16613
  };
14994
16614
  }
14995
16615
  function computeLauncherCapabilities(stats, amp = 100) {
@@ -14999,13 +16619,11 @@ function computeLauncherCapabilities(stats, amp = 100) {
14999
16619
  drain: stats.drain,
15000
16620
  };
15001
16621
  }
15002
- function computeStorageCapabilities(stats) {
15003
- const strength = stats.strength ?? 0;
15004
- const density = stats.density ?? 0;
15005
- const hardness = stats.hardness ?? 0;
15006
- const cohesion = stats.cohesion ?? 0;
15007
- const statSum = strength + density + hardness + cohesion;
15008
- return { capacity: 10000000 + Math.floor((statSum * 50000000) / 3996) };
16622
+ function computeStorageCapabilities(stats, tier) {
16623
+ return {
16624
+ capacity: computeCargoBayCapacity(stats.strength ?? 0, stats.density ?? 0, stats.hardness ?? 0),
16625
+ drain: computeCargoBayDrain(stats.cohesion ?? 0, tier),
16626
+ };
15009
16627
  }
15010
16628
  function computeBatteryCapabilities(stats) {
15011
16629
  const volatility = stats.volatility ?? 0;
@@ -15013,7 +16631,7 @@ function computeBatteryCapabilities(stats) {
15013
16631
  const plasticity = stats.plasticity ?? 0;
15014
16632
  const insulation = stats.insulation ?? 0;
15015
16633
  const statSum = volatility + thermal + plasticity + insulation;
15016
- return { capacity: 2500 + Math.floor((statSum * 7500) / 3996) };
16634
+ return { capacity: 2500000 + Math.floor((statSum * 7500000) / 3996) };
15017
16635
  }
15018
16636
  const CAPACITY_TIER_TABLE = [1.0, 1.4, 1.8, 2.2, 2.6, 3.0, 3.4, 3.8, 4.2, 4.6];
15019
16637
  function capacityTierMultiplier(tier) {
@@ -15025,25 +16643,25 @@ function applyCapacityTier(baseCapacity, tier) {
15025
16643
  }
15026
16644
  function computeBaseCapacity(itemId, stats) {
15027
16645
  let base;
15028
- switch (itemId) {
15029
- case ITEM_SHIP_T1_PACKED:
15030
- case ITEM_PROSPECTOR_T2_PACKED:
15031
- case ITEM_HAULER_SHIP_T2_PACKED:
15032
- base = computeShipHullCapabilities(stats).capacity;
15033
- break;
15034
- case ITEM_EXTRACTOR_T1_PACKED:
15035
- case ITEM_FACTORY_T1_PACKED:
15036
- case ITEM_MASS_DRIVER_T1_PACKED:
15037
- case ITEM_MASS_CATCHER_T1_PACKED:
15038
- case ITEM_CONTAINER_T1_PACKED:
15039
- case ITEM_CONTAINER_T2_PACKED:
15040
- base = computeContainerCapabilities(stats).capacity;
15041
- break;
15042
- case ITEM_WAREHOUSE_T1_PACKED:
15043
- base = computeWarehouseHullCapabilities(stats).capacity;
15044
- break;
15045
- default:
15046
- return 0;
16646
+ if (isShipHull(itemId)) {
16647
+ base = computeShipHullCapabilities(stats, itemId).capacity;
16648
+ }
16649
+ else {
16650
+ switch (itemId) {
16651
+ case ITEM_EXTRACTOR_T1_PACKED:
16652
+ case ITEM_FACTORY_T1_PACKED:
16653
+ case ITEM_MASS_DRIVER_T1_PACKED:
16654
+ case ITEM_MASS_CATCHER_T1_PACKED:
16655
+ case ITEM_CONTAINER_T1_PACKED:
16656
+ case ITEM_CONTAINER_T2_PACKED:
16657
+ base = computeContainerCapabilities(stats).capacity;
16658
+ break;
16659
+ case ITEM_WAREHOUSE_T1_PACKED:
16660
+ base = computeWarehouseHullCapabilities(stats).capacity;
16661
+ break;
16662
+ default:
16663
+ return 0;
16664
+ }
15047
16665
  }
15048
16666
  return applyCapacityTier(base, getItem(itemId).tier);
15049
16667
  }
@@ -15055,7 +16673,7 @@ function computeWarehouseHullCapabilities(stats) {
15055
16673
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15056
16674
  const exponent = statSum / 1998.0;
15057
16675
  return {
15058
- hullmass: computeBaseHullmass(stats),
16676
+ hullmass: computeBaseHullmass(ITEM_WAREHOUSE_T1_PACKED, stats),
15059
16677
  capacity: Math.floor(100000000 * 6 ** exponent),
15060
16678
  };
15061
16679
  }
@@ -15076,11 +16694,15 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15076
16694
  let maxGathDepth = 0;
15077
16695
  let hasGatherer = false;
15078
16696
  let totalStorageCapacity = 0;
16697
+ let totalCargoHoldDrain = 0;
15079
16698
  const baseCapacity = computeBaseCapacity(itemId, stats);
15080
16699
  let installedModuleMass = 0;
15081
16700
  let totalCrafterSpeed = 0;
15082
16701
  let totalCrafterDrain = 0;
15083
16702
  let hasCrafter = false;
16703
+ let totalBuilderSpeed = 0;
16704
+ let totalBuilderDrain = 0;
16705
+ let hasBuilder = false;
15084
16706
  let totalHaulerCapacity = 0;
15085
16707
  let weightedHaulerEffNum = 0n;
15086
16708
  let totalHaulerDrain = 0;
@@ -15095,6 +16717,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15095
16717
  let totalBatteryCapacity = 0;
15096
16718
  const gathererLanes = [];
15097
16719
  const crafterLanes = [];
16720
+ const builderLanes = [];
15098
16721
  const loaderLanes = [];
15099
16722
  for (const mod of modules) {
15100
16723
  const item = getItem(mod.itemId);
@@ -15106,19 +16729,23 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15106
16729
  hasEngine = true;
15107
16730
  const caps = computeEngineCapabilities(decodedStats);
15108
16731
  totalThrust += applySlotMultiplier(caps.thrust, amp);
15109
- totalEngineThm += decodedStats.thermal ?? 0;
16732
+ totalEngineThm += computeEffectiveModuleStat(decodedStats.thermal ?? 0);
15110
16733
  engineCount += 1;
15111
16734
  }
15112
16735
  else if (modType === MODULE_GENERATOR) {
15113
16736
  hasGenerator = true;
15114
16737
  const caps = computeGeneratorCapabilities(decodedStats);
15115
- totalGenCapacity += applySlotMultiplier(caps.capacity, amp);
15116
- totalGenRecharge += applySlotMultiplier(caps.recharge, amp);
16738
+ totalGenCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16739
+ totalGenRecharge += applySlotMultiplierUint32(caps.recharge, amp);
15117
16740
  }
15118
16741
  else if (modType === MODULE_GATHERER) {
15119
16742
  hasGatherer = true;
15120
16743
  const tier = item.tier;
15121
- const caps = computeGathererCapabilities(decodedStats, tier);
16744
+ const caps = computeGathererCapabilities({
16745
+ strength: decodeStat(mod.stats, 0),
16746
+ tolerance: decodeStat(mod.stats, 1),
16747
+ saturation: decodeStat(mod.stats, 2),
16748
+ }, tier);
15122
16749
  const scaledYield = applySlotMultiplier(caps.yield, amp);
15123
16750
  totalGathYield += scaledYield;
15124
16751
  totalGathDrain += caps.drain;
@@ -15146,8 +16773,9 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15146
16773
  });
15147
16774
  }
15148
16775
  else if (modType === MODULE_STORAGE) {
15149
- const caps = computeStorageCapabilities(decodedStats);
16776
+ const caps = computeStorageCapabilities(decodedStats, item.tier);
15150
16777
  totalStorageCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16778
+ totalCargoHoldDrain += caps.drain;
15151
16779
  }
15152
16780
  else if (modType === MODULE_CRAFTER) {
15153
16781
  hasCrafter = true;
@@ -15162,6 +16790,19 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15162
16790
  outputPct: amp,
15163
16791
  });
15164
16792
  }
16793
+ else if (modType === MODULE_BUILDER) {
16794
+ hasBuilder = true;
16795
+ const caps = computeBuilderCapabilities(decodedStats);
16796
+ const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16797
+ totalBuilderSpeed += scaledSpeed;
16798
+ totalBuilderDrain += caps.drain;
16799
+ builderLanes.push({
16800
+ slotIndex: mod.slotIndex,
16801
+ speed: scaledSpeed,
16802
+ drain: caps.drain,
16803
+ outputPct: amp,
16804
+ });
16805
+ }
15165
16806
  else if (modType === MODULE_HAULER) {
15166
16807
  hasHauler = true;
15167
16808
  const caps = computeHaulerCapabilities(decodedStats, item.tier);
@@ -15196,12 +16837,20 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15196
16837
  totalGenCapacity += totalBatteryCapacity;
15197
16838
  }
15198
16839
  const result = {
15199
- hullmass: computeBaseHullmass(stats) + installedModuleMass,
16840
+ hullmass: computeBaseHullmass(itemId, stats) + installedModuleMass,
15200
16841
  capacity: clampUint32(baseCapacity + totalStorageCapacity),
15201
16842
  };
15202
16843
  if (hasEngine) {
15203
16844
  const avgThm = engineCount > 0 ? Math.trunc(totalEngineThm / engineCount) : 0;
15204
- result.engines = { thrust: totalThrust, drain: computeTravelDrain(totalThrust, avgThm) };
16845
+ const engineDrain = computeTravelDrain(totalThrust, avgThm);
16846
+ const totalDrain = clampUint32(engineDrain + totalCargoHoldDrain + totalHaulerDrain);
16847
+ result.engines = { thrust: totalThrust, drain: totalDrain };
16848
+ result.travelDrain = {
16849
+ engine: engineDrain,
16850
+ cargoHolds: totalCargoHoldDrain,
16851
+ tractorBeams: totalHaulerDrain,
16852
+ total: totalDrain,
16853
+ };
15205
16854
  }
15206
16855
  if (hasGenerator) {
15207
16856
  result.generator = {
@@ -15229,6 +16878,10 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15229
16878
  result.crafter = { speed: clampUint16(totalCrafterSpeed), drain: totalCrafterDrain };
15230
16879
  result.crafterLanes = crafterLanes;
15231
16880
  }
16881
+ if (hasBuilder) {
16882
+ result.builder = { speed: clampUint16(totalBuilderSpeed), drain: totalBuilderDrain };
16883
+ result.builderLanes = builderLanes;
16884
+ }
15232
16885
  if (hasHauler) {
15233
16886
  const efficiency = totalHaulerCapacity > 0 ? Number(weightedHaulerEffNum / BigInt(totalHaulerCapacity)) : 0;
15234
16887
  result.hauler = {
@@ -15256,7 +16909,7 @@ function computeContainerCapabilities(stats) {
15256
16909
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15257
16910
  const exponent = statSum / 1998.0;
15258
16911
  return {
15259
- hullmass: computeBaseHullmass(stats),
16912
+ hullmass: computeBaseHullmass(ITEM_CONTAINER_T1_PACKED, stats),
15260
16913
  capacity: Math.floor(22000000 * 6 ** exponent),
15261
16914
  };
15262
16915
  }
@@ -15322,7 +16975,7 @@ function makeEntity(packedItemId, state) {
15322
16975
  holds: [],
15323
16976
  };
15324
16977
  if (state.energy !== undefined)
15325
- info.energy = antelope.UInt16.from(state.energy);
16978
+ info.energy = antelope.UInt32.from(state.energy);
15326
16979
  if (kind === 'container') {
15327
16980
  info.modules = [];
15328
16981
  if (state.hullmass !== undefined)
@@ -15382,6 +17035,12 @@ function makeEntity(packedItemId, state) {
15382
17035
  drain: l.drain,
15383
17036
  output_pct: l.outputPct,
15384
17037
  }));
17038
+ info.builder_lanes = (caps.builderLanes ?? []).map((l) => exports.ServerTypes.builder_lane.from({
17039
+ slot_index: l.slotIndex,
17040
+ speed: l.speed,
17041
+ drain: l.drain,
17042
+ output_pct: l.outputPct,
17043
+ }));
15385
17044
  info.loader_lanes = (caps.loaderLanes ?? []).map((l) => exports.ServerTypes.loader_lane.from({
15386
17045
  slot_index: l.slotIndex,
15387
17046
  mass: l.mass,
@@ -15393,6 +17052,8 @@ function makeEntity(packedItemId, state) {
15393
17052
  info.gatherer_lanes = [];
15394
17053
  if (!info.crafter_lanes)
15395
17054
  info.crafter_lanes = [];
17055
+ if (!info.builder_lanes)
17056
+ info.builder_lanes = [];
15396
17057
  if (!info.loader_lanes)
15397
17058
  info.loader_lanes = [];
15398
17059
  const entityInfo = exports.ServerTypes.entity_info.from(info);
@@ -15408,7 +17069,13 @@ function calc_craft_duration(speed, totalInputMass) {
15408
17069
  }
15409
17070
  function calc_craft_energy(drain, totalInputMass) {
15410
17071
  const raw = Math.floor((totalInputMass * drain) / CRAFT_ENERGY_DIVISOR);
15411
- return antelope.UInt32.from(Math.min(Math.max(raw + 1, 1), 4294967295));
17072
+ return antelope.UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295));
17073
+ }
17074
+ function calc_build_duration(speed, totalInputMass) {
17075
+ return calc_craft_duration(speed, totalInputMass);
17076
+ }
17077
+ function calc_build_energy(drain, totalInputMass) {
17078
+ return calc_craft_energy(drain, totalInputMass);
15412
17079
  }
15413
17080
 
15414
17081
  class PlotManager extends BaseManager {
@@ -15471,7 +17138,7 @@ class PlotManager extends BaseManager {
15471
17138
  recipe,
15472
17139
  progress,
15473
17140
  finalizeAction: antelope.Name.from('buildplot'),
15474
- finalizerCapability: 'crafter',
17141
+ finalizerCapability: 'builder',
15475
17142
  activeTask,
15476
17143
  scheduledBuild,
15477
17144
  };
@@ -15519,16 +17186,16 @@ class ConstructionManager extends BaseManager {
15519
17186
  continue;
15520
17187
  if (!coordsEqual(entity.coordinates, target.coordinates))
15521
17188
  continue;
15522
- const crafterLanes = entity.crafter_lanes ?? [];
15523
- if (crafterLanes.length === 0)
17189
+ const builderLanes = entity.builder_lanes ?? [];
17190
+ if (builderLanes.length === 0)
15524
17191
  continue;
15525
- const speed = crafterLanes.reduce((s, l) => s + Number(l.speed), 0);
17192
+ const speed = builderLanes.reduce((s, l) => s + Number(l.speed), 0);
15526
17193
  out.push({
15527
17194
  entityId: entity.id,
15528
17195
  entityType: entity.type,
15529
17196
  name: entity.entity_name,
15530
- capability: 'crafter',
15531
- crafterSpeed: speed,
17197
+ capability: 'builder',
17198
+ builderSpeed: speed,
15532
17199
  estimatedDuration: this.estimateFinalizeDuration(target, speed),
15533
17200
  });
15534
17201
  }
@@ -15550,12 +17217,12 @@ class ConstructionManager extends BaseManager {
15550
17217
  cumulativeSec += task.duration.toNumber();
15551
17218
  if (!isPushTask(task))
15552
17219
  continue;
15553
- if (!task.entitytarget)
17220
+ if (task.couplings.length === 0)
15554
17221
  continue;
15555
17222
  const projectedEndMs = startedMs + cumulativeSec * 1000;
15556
17223
  if (projectedEndMs < nowMs)
15557
17224
  continue;
15558
- const targetIdStr = task.entitytarget.entity_id.toString();
17225
+ const targetIdStr = task.couplings[0].counterpart.entity_id.toString();
15559
17226
  const etaSeconds = Math.max(0, Math.round((projectedEndMs - nowMs) / 1000));
15560
17227
  let perTarget = buckets.get(targetIdStr);
15561
17228
  if (!perTarget) {
@@ -15680,8 +17347,8 @@ class ConstructionManager extends BaseManager {
15680
17347
  return [];
15681
17348
  return reservationsOf(source);
15682
17349
  }
15683
- estimateFinalizeDuration(target, crafterSpeed) {
15684
- return calc_craft_duration(crafterSpeed, target.progress.massRequired);
17350
+ estimateFinalizeDuration(target, builderSpeed) {
17351
+ return calc_build_duration(builderSpeed, target.progress.massRequired);
15685
17352
  }
15686
17353
  static isConstructionKind(kind) {
15687
17354
  return CONSTRUCTION_KINDS.has(kind);
@@ -15774,18 +17441,18 @@ function isPushTask(task) {
15774
17441
  }
15775
17442
  function isBuildOfPlot(task, plotId) {
15776
17443
  return (task.type.toNumber() === exports.TaskType.BUILDPLOT &&
15777
- task.entitytarget !== undefined &&
15778
- task.entitytarget.entity_id.equals(plotId));
17444
+ task.couplings.length > 0 &&
17445
+ task.couplings[0].counterpart.entity_id.equals(plotId));
15779
17446
  }
15780
17447
  function reservationsOf(source) {
15781
17448
  const out = new Map();
15782
17449
  for (const task of getTasks(source)) {
15783
17450
  if (!isPushTask(task))
15784
17451
  continue;
15785
- if (!task.entitytarget)
17452
+ if (task.couplings.length === 0)
15786
17453
  continue;
15787
- const targetType = task.entitytarget.entity_type;
15788
- const targetId = task.entitytarget.entity_id;
17454
+ const targetType = task.couplings[0].counterpart.entity_type;
17455
+ const targetId = task.couplings[0].counterpart.entity_id;
15789
17456
  for (const c of task.cargo) {
15790
17457
  const itemId = c.item_id.toNumber();
15791
17458
  const quantity = c.quantity.toNumber();
@@ -15874,11 +17541,23 @@ function planRoute(params) {
15874
17541
  return { ok: false, reason: 'empty-destination' };
15875
17542
  }
15876
17543
  const straightLine = dist(origin, dest);
15877
- const heuristic = (c) => Math.ceil(dist(c, dest) / perLegReach);
17544
+ if (straightLine <= perLegReach) {
17545
+ const directCost = params.legCost?.({
17546
+ from: origin,
17547
+ to: dest,
17548
+ distance: straightLine,
17549
+ isDestination: true,
17550
+ });
17551
+ if (directCost !== null) {
17552
+ return { ok: true, waypoints: [dest], legs: 1, totalDistance: straightLine };
17553
+ }
17554
+ }
17555
+ const heuristic = (c) => params.heuristicCost?.(c, dest) ??
17556
+ (params.legCost ? 0 : Math.ceil(dist(c, dest) / perLegReach));
15878
17557
  const gScore = new Map([[key(origin), 0]]);
15879
17558
  const cameFrom = new Map();
15880
17559
  const frontier = [
15881
- { coord: origin, g: 0, f: heuristic(origin), remaining: straightLine },
17560
+ { coord: origin, legs: 0, cost: 0, f: heuristic(origin), remaining: straightLine },
15882
17561
  ];
15883
17562
  let furthest = origin;
15884
17563
  let furthestRemaining = dist(origin, dest);
@@ -15894,6 +17573,8 @@ function planRoute(params) {
15894
17573
  }
15895
17574
  }
15896
17575
  const current = frontier.splice(bestIdx, 1)[0];
17576
+ if (current.cost !== gScore.get(key(current.coord)))
17577
+ continue;
15897
17578
  if (sameCoord(current.coord, dest)) {
15898
17579
  return reconstruct(cameFrom, origin, dest);
15899
17580
  }
@@ -15907,20 +17588,33 @@ function planRoute(params) {
15907
17588
  const inCorridor = dist(origin, n.coord) + dist(n.coord, dest) <= straightLine + corridorSlack;
15908
17589
  if (!inCorridor)
15909
17590
  continue;
15910
- const tentativeG = current.g + 1;
15911
- if (tentativeG > maxLegs) {
17591
+ const tentativeLegs = current.legs + 1;
17592
+ if (tentativeLegs > maxLegs) {
15912
17593
  cappedByMaxLegs = true;
15913
17594
  continue;
15914
17595
  }
17596
+ const evaluatedCost = params.legCost?.({
17597
+ from: current.coord,
17598
+ to: n.coord,
17599
+ distance: n.dist,
17600
+ isDestination: sameCoord(n.coord, dest),
17601
+ });
17602
+ if (evaluatedCost === null)
17603
+ continue;
17604
+ const legCost = evaluatedCost ?? 1;
17605
+ if (!(legCost >= 0) || !Number.isFinite(legCost))
17606
+ continue;
15915
17607
  const nk = key(n.coord);
15916
- if (tentativeG < (gScore.get(nk) ?? Infinity)) {
15917
- gScore.set(nk, tentativeG);
17608
+ const nextCost = current.cost + legCost;
17609
+ if (nextCost < (gScore.get(nk) ?? Infinity)) {
17610
+ gScore.set(nk, nextCost);
15918
17611
  cameFrom.set(nk, current.coord);
15919
17612
  const remaining = dist(n.coord, dest);
15920
17613
  frontier.push({
15921
17614
  coord: n.coord,
15922
- g: tentativeG,
15923
- f: tentativeG + Math.ceil(remaining / perLegReach),
17615
+ legs: tentativeLegs,
17616
+ cost: nextCost,
17617
+ f: nextCost + heuristic(n.coord),
15924
17618
  remaining,
15925
17619
  });
15926
17620
  }
@@ -15970,47 +17664,22 @@ function reconstruct(cameFrom, origin, dest) {
15970
17664
  const waypoints = path.slice(1);
15971
17665
  return { ok: true, waypoints, legs: waypoints.length, totalDistance };
15972
17666
  }
15973
- let scanProvider = null;
15974
- const graphCache = new Map();
15975
- function setScanProvider(provider) {
15976
- scanProvider = provider;
15977
- graphCache.clear();
15978
- }
15979
- function sdkSystemGraph(seed) {
17667
+ const graphCache = new WeakMap();
17668
+ function sdkSystemGraph(seed, scan) {
15980
17669
  const s = antelope.Checksum256.from(seed);
15981
17670
  const seedHex = s.toString();
15982
- const cached = graphCache.get(seedHex);
17671
+ let bySeed = graphCache.get(scan);
17672
+ if (!bySeed) {
17673
+ bySeed = new Map();
17674
+ graphCache.set(scan, bySeed);
17675
+ }
17676
+ const cached = bySeed.get(seedHex);
15983
17677
  if (cached)
15984
17678
  return cached;
15985
- const graph = scanProvider ? wasmSystemGraph(s, seedHex, scanProvider) : jsSystemGraph(s);
15986
- graphCache.set(seedHex, graph);
17679
+ const graph = wasmSystemGraph(s, seedHex, scan);
17680
+ bySeed.set(seedHex, graph);
15987
17681
  return graph;
15988
17682
  }
15989
- function jsSystemGraph(s) {
15990
- return {
15991
- hasSystem: (c) => hasSystem(s, { x: c.x, y: c.y }) || wormholeAt(s, c.x, c.y) !== null,
15992
- nearby: (c, reachTiles) => {
15993
- const seen = new Set([`${c.x},${c.y}`]);
15994
- const out = [];
15995
- for (const d of findNearbyPlanets(s, { x: c.x, y: c.y }, reachTiles * PRECISION$1)) {
15996
- const coord = { x: Number(d.destination.x), y: Number(d.destination.y) };
15997
- const k = `${coord.x},${coord.y}`;
15998
- if (seen.has(k))
15999
- continue;
16000
- seen.add(k);
16001
- out.push({ coord, dist: Number(d.distance) / PRECISION$1 });
16002
- }
16003
- for (const coord of nearbyWormholes(s, c.x, c.y, reachTiles)) {
16004
- const k = `${coord.x},${coord.y}`;
16005
- if (seen.has(k))
16006
- continue;
16007
- seen.add(k);
16008
- out.push({ coord, dist: Math.hypot(coord.x - c.x, coord.y - c.y) });
16009
- }
16010
- return out;
16011
- },
16012
- };
16013
- }
16014
17683
  const SCAN_BUCKET = 48;
16015
17684
  function wasmSystemGraph(s, seedHex, scan) {
16016
17685
  const bucketCache = new Map();
@@ -16063,21 +17732,20 @@ function wasmSystemGraph(s, seedHex, scan) {
16063
17732
  };
16064
17733
  }
16065
17734
 
16066
- function computePerLegReach(s, haulCount = 0) {
17735
+ function computePerLegReach(s) {
16067
17736
  const capacity = s.generator?.capacity;
16068
17737
  const drain = s.engines?.drain;
16069
17738
  if (capacity === undefined || drain === undefined || drain === 0n) {
16070
17739
  throw new Error('entity has no usable engine/generator (cannot compute per-leg reach)');
16071
17740
  }
16072
- const haulDrain = s.hauler && haulCount > 0 ? s.hauler.drain * BigInt(haulCount) : 0n;
16073
- return Number(capacity) / Number(drain + haulDrain);
17741
+ return Number(capacity) / Number(drain);
16074
17742
  }
16075
- function computeGroupPerLegReach(participants, haulCount) {
17743
+ function computeGroupPerLegReach(participants) {
16076
17744
  const movers = participants.filter((p) => p.engines !== undefined && p.engines.drain !== 0n);
16077
17745
  if (movers.length === 0) {
16078
17746
  throw new Error('group has no moving entity (cannot compute per-leg reach)');
16079
17747
  }
16080
- return Math.min(...movers.map((p) => computePerLegReach(p, haulCount)));
17748
+ return Math.min(...movers.map(computePerLegReach));
16081
17749
  }
16082
17750
 
16083
17751
  function simulateRoute(movers, waypoints, origin, recharge) {
@@ -16106,17 +17774,13 @@ function simulateRoute(movers, waypoints, origin, recharge) {
16106
17774
  for (const to of waypoints) {
16107
17775
  const distance = distanceBetweenPoints(from.x, from.y, to.x, to.y);
16108
17776
  const distanceNum = Number(distance);
16109
- const distanceCells = Math.trunc(distanceNum / PRECISION$1);
17777
+ const distanceCells = distanceNum / PRECISION;
16110
17778
  const energyCostByMover = {};
16111
17779
  for (const m of movers) {
16112
17780
  if (!m.hasMovement || !m.engines)
16113
17781
  continue;
16114
17782
  const key = String(m.ref.entityId);
16115
- let cost = Number(calc_energyusage(distance, m.engines.drain));
16116
- if (m.hauler) {
16117
- cost += Math.trunc(distanceCells) * m.hauler.drain * haulCount;
16118
- }
16119
- energyCostByMover[key] = cost;
17783
+ energyCostByMover[key] = Number(calc_energyusage(distance, m.engines.drain));
16120
17784
  }
16121
17785
  let rechargeBefore = false;
16122
17786
  let rechargeSeconds = 0;
@@ -16237,6 +17901,23 @@ function resolveLaneCrafter(modules, entityItemId, laneKey) {
16237
17901
  const drain = computeCrafterDrain(fin);
16238
17902
  return { slotIndex: idx, speed, drain, outputPct: amp };
16239
17903
  }
17904
+ function resolveLaneBuilder(modules, entityItemId, laneKey) {
17905
+ const idx = laneKey - 1;
17906
+ const installed = idx >= 0 && idx < modules.length ? modules[idx].installed : undefined;
17907
+ if (!installed)
17908
+ throw new Error('builder lane has no module');
17909
+ const item = getItem(Number(installed.item_id.value ?? installed.item_id));
17910
+ if (item.moduleType !== 'builder')
17911
+ throw new Error('lane module is not a builder');
17912
+ const stats = BigInt(installed.stats.toString());
17913
+ const res = decodeStat(stats, 0);
17914
+ const fin = decodeStat(stats, 1);
17915
+ const layout = getEntityLayout(entityItemId)?.slots ?? [];
17916
+ const amp = getSlotAmp(layout, idx);
17917
+ const speed = applySlotMultiplier(computeBuilderSpeed(res), amp);
17918
+ const drain = computeBuilderDrain(fin);
17919
+ return { slotIndex: idx, speed, drain, outputPct: amp };
17920
+ }
16240
17921
  function resolveLaneLoader(modules, entityItemId, laneKey) {
16241
17922
  if (laneKey === LANE_MOBILITY) {
16242
17923
  return { slotIndex: -1, thrust: 0, mass: 0, outputPct: 0, valid: false };
@@ -16544,6 +18225,10 @@ function recomputeCaps(entity) {
16544
18225
  hullStats.strength = decodeStat(entity.stats, 0);
16545
18226
  if (hullStats.hardness === undefined)
16546
18227
  hullStats.hardness = decodeStat(entity.stats, 2);
18228
+ if (itemId === ITEM_SHIP_T1_PACKED) {
18229
+ hullStats.__legacyShipChannel3 = decodeStat(entity.stats, 3);
18230
+ hullStats.__legacyShipChannel4 = decodeStat(entity.stats, 4);
18231
+ }
16547
18232
  const layout = getEntityLayout(itemId)?.slots ?? [];
16548
18233
  const installed = toInstalledModules(entity.modules);
16549
18234
  const caps = computeEntityCapabilities(hullStats, itemId, installed, layout);
@@ -16566,6 +18251,12 @@ function recomputeCaps(entity) {
16566
18251
  drain: l.drain,
16567
18252
  output_pct: l.outputPct,
16568
18253
  });
18254
+ const toBuilderLane = (l) => exports.ServerTypes.builder_lane.from({
18255
+ slot_index: l.slotIndex,
18256
+ speed: l.speed,
18257
+ drain: l.drain,
18258
+ output_pct: l.outputPct,
18259
+ });
16569
18260
  return {
16570
18261
  hullmass: antelope.UInt32.from(caps.hullmass),
16571
18262
  capacity: antelope.UInt32.from(caps.capacity),
@@ -16576,6 +18267,7 @@ function recomputeCaps(entity) {
16576
18267
  loaderLanes: (caps.loaderLanes ?? []).map(toLoaderLane),
16577
18268
  gathererLanes: (caps.gathererLanes ?? []).map(toGathererLane),
16578
18269
  crafterLanes: (caps.crafterLanes ?? []).map(toCrafterLane),
18270
+ builderLanes: (caps.builderLanes ?? []).map(toBuilderLane),
16579
18271
  hauler: caps.hauler
16580
18272
  ? exports.ServerTypes.hauler_stats.from({
16581
18273
  capacity: caps.hauler.capacity,
@@ -16612,6 +18304,7 @@ function createProjectedEntity(entity) {
16612
18304
  const loaderLanes = entity.loader_lanes ?? caps?.loaderLanes ?? [];
16613
18305
  const gathererLanes = entity.gatherer_lanes ?? caps?.gathererLanes ?? [];
16614
18306
  const crafterLanes = entity.crafter_lanes ?? caps?.crafterLanes ?? [];
18307
+ const builderLanes = entity.builder_lanes ?? caps?.builderLanes ?? [];
16615
18308
  const engines = entity.engines ?? caps?.engines;
16616
18309
  const generator = entity.generator ?? caps?.generator;
16617
18310
  const hauler = entity.hauler ?? caps?.hauler;
@@ -16620,7 +18313,7 @@ function createProjectedEntity(entity) {
16620
18313
  const cargo = entity.cargo.map(cargoItemToStack);
16621
18314
  const projected = {
16622
18315
  location: Coordinates.from(entity.coordinates),
16623
- energy: antelope.UInt16.from(entity.energy ?? 0),
18316
+ energy: antelope.UInt32.from(entity.energy ?? 0),
16624
18317
  cargo,
16625
18318
  shipMass,
16626
18319
  capacity: capacity ? antelope.UInt64.from(capacity) : undefined,
@@ -16631,6 +18324,7 @@ function createProjectedEntity(entity) {
16631
18324
  loaderLanes,
16632
18325
  gathererLanes,
16633
18326
  crafterLanes,
18327
+ builderLanes,
16634
18328
  get cargoMass() {
16635
18329
  return calcStacksMass(this.cargo);
16636
18330
  },
@@ -16676,13 +18370,13 @@ function applyRechargeTask(projected, _task, options) {
16676
18370
  if (!projected.generator)
16677
18371
  return;
16678
18372
  if (options.complete) {
16679
- projected.energy = antelope.UInt16.from(projected.generator.capacity);
18373
+ projected.energy = antelope.UInt32.from(projected.generator.capacity);
16680
18374
  }
16681
18375
  else if (options.progress !== undefined) {
16682
18376
  const capacity = Number(projected.generator.capacity);
16683
18377
  const currentEnergy = Number(projected.energy);
16684
18378
  const rechargeAmount = (capacity - currentEnergy) * options.progress;
16685
- projected.energy = antelope.UInt16.from(Math.min(capacity, currentEnergy + rechargeAmount));
18379
+ projected.energy = antelope.UInt32.from(Math.min(capacity, currentEnergy + rechargeAmount));
16686
18380
  }
16687
18381
  }
16688
18382
  function applyFlightTask(projected, task, options) {
@@ -16701,8 +18395,8 @@ function applyFlightTask(projected, task, options) {
16701
18395
  });
16702
18396
  const partialEnergy = antelope.UInt64.from(Math.floor(Number(task.energy_cost ?? 0) * options.progress));
16703
18397
  projected.energy = projected.energy.gt(partialEnergy)
16704
- ? antelope.UInt16.from(projected.energy.subtracting(partialEnergy))
16705
- : antelope.UInt16.from(0);
18398
+ ? antelope.UInt32.from(projected.energy.subtracting(partialEnergy))
18399
+ : antelope.UInt32.from(0);
16706
18400
  }
16707
18401
  }
16708
18402
  function addCargoItem(projected, item) {
@@ -16724,16 +18418,16 @@ function applyRemoveCargoTask(projected, task) {
16724
18418
  function applyEnergyCost(projected, task) {
16725
18419
  if (!task.energy_cost)
16726
18420
  return;
16727
- const energyCost = antelope.UInt16.from(task.energy_cost);
18421
+ const energyCost = antelope.UInt32.from(task.energy_cost);
16728
18422
  projected.energy = projected.energy.gt(energyCost)
16729
- ? antelope.UInt16.from(projected.energy.subtracting(energyCost))
16730
- : antelope.UInt16.from(0);
18423
+ ? antelope.UInt32.from(projected.energy.subtracting(energyCost))
18424
+ : antelope.UInt32.from(0);
16731
18425
  }
16732
18426
  function applyGatherTask(projected, task, options) {
16733
18427
  if (!options.complete)
16734
18428
  return;
16735
18429
  applyEnergyCost(projected, task);
16736
- if (!task.entitytarget) {
18430
+ if (task.couplings.length === 0) {
16737
18431
  applyAddCargoTask(projected, task);
16738
18432
  }
16739
18433
  }
@@ -16744,12 +18438,8 @@ function applyCraftTask(projected, task) {
16744
18438
  for (let i = 0; i < task.cargo.length - 1; i++) {
16745
18439
  removeCargoItem(projected, task.cargo[i]);
16746
18440
  }
16747
- addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16748
- }
16749
- function applyDeployTask(projected, task) {
16750
- applyEnergyCost(projected, task);
16751
- if (task.cargo.length > 0) {
16752
- removeCargoItem(projected, task.cargo[0]);
18441
+ if (task.couplings.length === 0) {
18442
+ addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16753
18443
  }
16754
18444
  }
16755
18445
  function applyTask(projected, task) {
@@ -16775,9 +18465,6 @@ function applyTask(projected, task) {
16775
18465
  case exports.TaskType.CRAFT:
16776
18466
  applyCraftTask(projected, task);
16777
18467
  break;
16778
- case exports.TaskType.DEPLOY:
16779
- applyDeployTask(projected, task);
16780
- break;
16781
18468
  case exports.TaskType.UNDEPLOY:
16782
18469
  case exports.TaskType.DEMOLISH:
16783
18470
  break;
@@ -16915,10 +18602,6 @@ function projectEntityAt(entity, now) {
16915
18602
  if (taskComplete)
16916
18603
  applyCraftTask(projected, task);
16917
18604
  break;
16918
- case exports.TaskType.DEPLOY:
16919
- if (taskComplete)
16920
- applyDeployTask(projected, task);
16921
- break;
16922
18605
  case exports.TaskType.UNDEPLOY:
16923
18606
  case exports.TaskType.DEMOLISH:
16924
18607
  break;
@@ -16945,7 +18628,7 @@ function taskCargoChanges(task) {
16945
18628
  case exports.TaskType.UNWRAP:
16946
18629
  return items.map((i) => toChange(i, 'in'));
16947
18630
  case exports.TaskType.GATHER:
16948
- return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
18631
+ return task.couplings.length > 0 ? [] : items.map((i) => toChange(i, 'in'));
16949
18632
  case exports.TaskType.UNLOAD:
16950
18633
  return items.map((i) => toChange(i, 'out'));
16951
18634
  case exports.TaskType.CRAFT:
@@ -16958,6 +18641,49 @@ function taskCargoChanges(task) {
16958
18641
  }
16959
18642
  }
16960
18643
 
18644
+ const JOB_QUEUE_CAP = 25;
18645
+ function activeOn(jobs, socket, now) {
18646
+ return jobs
18647
+ .filter((j) => j.socket === socket && j.completesAt > now)
18648
+ .sort((a, b) => a.startsAt.getTime() - b.startsAt.getTime());
18649
+ }
18650
+ function jobsToLanes(jobs, socketCount, now) {
18651
+ const lanes = [];
18652
+ for (let socket = 0; socket < socketCount; socket++) {
18653
+ const entries = [];
18654
+ let cursor = null;
18655
+ for (const j of activeOn(jobs, socket, now)) {
18656
+ if (cursor && j.startsAt > cursor) {
18657
+ entries.push({ kind: 'idle', startsAt: cursor, completesAt: j.startsAt });
18658
+ }
18659
+ entries.push({ kind: 'job', startsAt: j.startsAt, completesAt: j.completesAt, job: j });
18660
+ cursor = j.completesAt;
18661
+ }
18662
+ lanes.push({ socket, entries });
18663
+ }
18664
+ return lanes;
18665
+ }
18666
+ function socketTail(jobs, socket, now) {
18667
+ const active = activeOn(jobs, socket, now);
18668
+ const last = active[active.length - 1];
18669
+ return last && last.completesAt > now ? last.completesAt : now;
18670
+ }
18671
+ function pickFabricator(jobs, sockets, durationBySocketMinutes, now) {
18672
+ let best = null;
18673
+ for (let slot = 0; slot < sockets.length; slot++) {
18674
+ if (!sockets[slot].open)
18675
+ continue;
18676
+ if (activeOn(jobs, slot, now).length >= JOB_QUEUE_CAP)
18677
+ continue;
18678
+ const startsAt = socketTail(jobs, slot, now);
18679
+ const completesAt = new Date(startsAt.getTime() + durationBySocketMinutes[slot] * 60000);
18680
+ if (!best || completesAt < best.completesAt) {
18681
+ best = { slot, startsAt, completesAt };
18682
+ }
18683
+ }
18684
+ return best;
18685
+ }
18686
+
16961
18687
  function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
16962
18688
  const ids = [];
16963
18689
  const seen = new Set();
@@ -16992,15 +18718,16 @@ function taskCargoEffect(task) {
16992
18718
  case exports.TaskType.UNLOAD:
16993
18719
  return { added: [], removed: task.cargo };
16994
18720
  case exports.TaskType.GATHER:
16995
- return task.entitytarget ? { added: [], removed: [] } : { added: task.cargo, removed: [] };
18721
+ return task.couplings.length > 0
18722
+ ? { added: [], removed: [] }
18723
+ : { added: task.cargo, removed: [] };
16996
18724
  case exports.TaskType.CRAFT:
16997
18725
  if (task.cargo.length === 0)
16998
18726
  return { added: [], removed: [] };
16999
- return { added: [task.cargo[task.cargo.length - 1]], removed: task.cargo.slice(0, -1) };
17000
- case exports.TaskType.DEPLOY:
17001
- return task.cargo.length > 0
17002
- ? { added: [], removed: [task.cargo[0]] }
17003
- : { added: [], removed: [] };
18727
+ return {
18728
+ added: task.couplings.length === 0 ? [task.cargo[task.cargo.length - 1]] : [],
18729
+ removed: task.cargo.slice(0, -1),
18730
+ };
17004
18731
  default:
17005
18732
  return { added: [], removed: [] };
17006
18733
  }
@@ -17178,31 +18905,24 @@ function cancelEligibility(entity, laneKey, fromTaskIndex, input) {
17178
18905
  effects.abandonsRunning = true;
17179
18906
  if (t.energy_cost)
17180
18907
  energyForfeited += t.energy_cost.toNumber();
17181
- if (t.type.equals(exports.TaskType.BUILDPLOT) && t.entitytarget)
17182
- effects.keepsPlotDeposits = { plot: t.entitytarget };
17183
- if (t.hold && t.entitytarget) {
17184
- const counterpart = input.counterparts?.get(t.entitytarget.entity_id.toString());
17185
- const hold = (counterpart?.holds ?? []).find((h) => h.id.equals(t.hold)) ??
17186
- (entity.holds ?? []).find((h) => h.id.equals(t.hold));
17187
- if (hold) {
17188
- const kind = hold.kind.toNumber();
17189
- effects.releasedHolds.push({ counterpart: t.entitytarget, kind });
17190
- if (kind === 1 ) {
17191
- effects.refunds.push({ giver: t.entitytarget, cargo: t.cargo });
17192
- const giver = counterpart;
17193
- if (giver) {
17194
- const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
17195
- const cap = giver.capacity
17196
- ? giver.capacity.toNumber()
17197
- : Number.MAX_SAFE_INTEGER;
17198
- if (giver.cargomass.toNumber() + returned > cap) {
17199
- return {
17200
- ok: false,
17201
- blockedReason: exports.CancelBlockReason.WOULD_OVERFILL,
17202
- range,
17203
- effects: { ...EMPTY_EFFECTS },
17204
- };
17205
- }
18908
+ if (t.type.equals(exports.TaskType.BUILDPLOT) && t.couplings.length > 0)
18909
+ effects.keepsPlotDeposits = { plot: t.couplings[0].counterpart };
18910
+ for (const c of t.couplings) {
18911
+ const kind = c.kind.toNumber();
18912
+ effects.releasedHolds.push({ counterpart: c.counterpart, kind });
18913
+ if (kind === exports.HoldKind.PULL) {
18914
+ effects.refunds.push({ giver: c.counterpart, cargo: t.cargo });
18915
+ const giver = input.counterparts?.get(c.counterpart.entity_id.toString());
18916
+ if (giver) {
18917
+ const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
18918
+ const cap = giver.capacity ? giver.capacity.toNumber() : Number.MAX_SAFE_INTEGER;
18919
+ if (giver.cargomass.toNumber() + returned > cap) {
18920
+ return {
18921
+ ok: false,
18922
+ blockedReason: exports.CancelBlockReason.WOULD_OVERFILL,
18923
+ range,
18924
+ effects: { ...EMPTY_EFFECTS },
18925
+ };
17206
18926
  }
17207
18927
  }
17208
18928
  }
@@ -17235,7 +18955,7 @@ function derivedLoaders(lanes) {
17235
18955
  function acceleration(thrust, mass) {
17236
18956
  if (mass <= 0)
17237
18957
  return 0;
17238
- return (thrust / mass) * PRECISION$1;
18958
+ return (thrust / mass) * PRECISION;
17239
18959
  }
17240
18960
  function flightTime(distance, accel) {
17241
18961
  if (accel <= 0 || distance <= 0)
@@ -17245,7 +18965,7 @@ function flightTime(distance, accel) {
17245
18965
  function distance2d(ax, ay, bx, by) {
17246
18966
  const dx = ax - bx;
17247
18967
  const dy = ay - by;
17248
- return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION$1);
18968
+ return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION);
17249
18969
  }
17250
18970
  function unwrapTransitDuration(itemMass, origin, dest) {
17251
18971
  if (itemMass <= 0)
@@ -17410,10 +19130,10 @@ function hasGatherer(e) {
17410
19130
  function maxTravelDistance(entity) {
17411
19131
  return antelope.UInt32.from(entity.generator.capacity)
17412
19132
  .dividing(entity.engines.drain)
17413
- .multiplying(PRECISION$1);
19133
+ .multiplying(PRECISION);
17414
19134
  }
17415
19135
  function calcEnergyUsage(entity, distance) {
17416
- return distance.dividing(PRECISION$1).multiplying(entity.engines.drain);
19136
+ return distance.multiplying(entity.engines.drain).dividing(PRECISION);
17417
19137
  }
17418
19138
  function energyPercent(entity) {
17419
19139
  return (Number(entity.energy) / Number(entity.generator.capacity)) * 100;
@@ -17448,13 +19168,12 @@ function calc_gather_rate(gatherer, itemMass, stratum, richness) {
17448
19168
  function calc_gather_energy(gatherer, duration) {
17449
19169
  if (duration <= 0)
17450
19170
  return antelope.UInt32.from(0);
17451
- const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION$1);
17452
- return antelope.UInt32.from(Math.min(Math.max(raw, 1), 4294967295));
19171
+ const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION);
19172
+ return antelope.UInt32.from(Math.min(Math.max(raw, 1000), 4294967295));
17453
19173
  }
17454
19174
 
17455
19175
  const BASE_HAUL_PENALTY_MILLI = 300;
17456
19176
  const HAULER_EFFICIENCY_DENOM = 10000;
17457
- const PRECISION = 10000;
17458
19177
  function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17459
19178
  if (haulCount === 0)
17460
19179
  return totalThrust;
@@ -17463,9 +19182,6 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17463
19182
  HAULER_EFFICIENCY_DENOM);
17464
19183
  return Math.floor((totalThrust * 1000) / penaltyMilli);
17465
19184
  }
17466
- function computeHaulerDrain(distance, drain, haulCount) {
17467
- return Math.floor(distance / PRECISION) * drain * haulCount;
17468
- }
17469
19185
 
17470
19186
  const categoryColors = {
17471
19187
  ore: '#C26D3F',
@@ -17612,6 +19328,7 @@ const capabilityNames = [
17612
19328
  'Gathering',
17613
19329
  'Warp',
17614
19330
  'Crafting',
19331
+ 'Build',
17615
19332
  'Launch',
17616
19333
  'Hauling',
17617
19334
  ];
@@ -17622,8 +19339,17 @@ const capabilityAttributes = [
17622
19339
  attribute: 'capacity',
17623
19340
  description: 'Cargo capacity added by hulls and installed Cargo Hold modules',
17624
19341
  },
19342
+ {
19343
+ capability: 'Storage',
19344
+ attribute: 'drain',
19345
+ description: 'Fixed normal-travel drain contributed by an installed Cargo Hold',
19346
+ },
17625
19347
  { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
17626
- { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
19348
+ {
19349
+ capability: 'Movement',
19350
+ attribute: 'drain',
19351
+ description: 'Total installed energy consumed per tile of normal travel',
19352
+ },
17627
19353
  {
17628
19354
  capability: 'Energy',
17629
19355
  attribute: 'capacity',
@@ -17648,6 +19374,12 @@ const capabilityAttributes = [
17648
19374
  description: 'Energy consumed per second while crafting',
17649
19375
  },
17650
19376
  { capability: 'Crafting', attribute: 'quality', description: 'Modifier on output quality' },
19377
+ { capability: 'Build', attribute: 'speed', description: 'Build progress per second' },
19378
+ {
19379
+ capability: 'Build',
19380
+ attribute: 'drain',
19381
+ description: 'Energy consumed per second while building',
19382
+ },
17651
19383
  { capability: 'Launch', attribute: 'range', description: 'Maximum launch distance' },
17652
19384
  { capability: 'Launch', attribute: 'capacity', description: 'Maximum mass per launch' },
17653
19385
  { capability: 'Launch', attribute: 'drain', description: 'Energy consumed per launch' },
@@ -17664,7 +19396,7 @@ const capabilityAttributes = [
17664
19396
  {
17665
19397
  capability: 'Hauling',
17666
19398
  attribute: 'drain',
17667
- description: 'Energy consumed per target during haul-beam operation',
19399
+ description: 'Fixed normal-travel drain contributed by an installed Tractor Beam',
17668
19400
  },
17669
19401
  ];
17670
19402
  const invertedAttributes = new Set(['drain', 'mass']);
@@ -17705,6 +19437,10 @@ const SLOT_FORMULAS = {
17705
19437
  0: { capability: 'Crafting', attribute: 'speed' },
17706
19438
  1: { capability: 'Crafting', attribute: 'drain' },
17707
19439
  },
19440
+ builder: {
19441
+ 0: { capability: 'Build', attribute: 'speed' },
19442
+ 1: { capability: 'Build', attribute: 'drain' },
19443
+ },
17708
19444
  storage: {
17709
19445
  0: { capability: 'Storage', attribute: 'capacity' },
17710
19446
  1: { capability: 'Storage', attribute: 'capacity' },
@@ -17738,6 +19474,7 @@ const KIND_TO_ITEM_ID = {
17738
19474
  gatherer: ITEM_GATHERER_T1,
17739
19475
  loader: ITEM_LOADER_T1,
17740
19476
  crafter: ITEM_CRAFTER_T1,
19477
+ builder: ITEM_BUILDER_T1,
17741
19478
  storage: ITEM_STORAGE_T1,
17742
19479
  hauler: ITEM_HAULER_T1,
17743
19480
  warp: ITEM_WARP_T1,
@@ -18030,6 +19767,20 @@ function rollupCrafter(lanes) {
18030
19767
  drain: antelope.UInt32.from(totalDrain),
18031
19768
  };
18032
19769
  }
19770
+ function rollupBuilder(lanes) {
19771
+ if (lanes.length === 0)
19772
+ return undefined;
19773
+ let totalSpeed = 0;
19774
+ let totalDrain = 0;
19775
+ for (const l of lanes) {
19776
+ totalSpeed += Number(l.speed);
19777
+ totalDrain += Number(l.drain);
19778
+ }
19779
+ return {
19780
+ speed: antelope.UInt16.from(Math.min(totalSpeed, 65535)),
19781
+ drain: antelope.UInt32.from(totalDrain),
19782
+ };
19783
+ }
18033
19784
  function rollupLoaders(lanes) {
18034
19785
  if (lanes.length === 0)
18035
19786
  return undefined;
@@ -18133,8 +19884,8 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18133
19884
  return {
18134
19885
  capability: 'Generator',
18135
19886
  attributes: [
18136
- { label: 'Capacity', value: caps.capacity },
18137
- { label: 'Recharge', value: caps.recharge },
19887
+ { label: 'Capacity', value: toWholeEnergy$1(caps.capacity) },
19888
+ { label: 'Recharge', value: toWholeEnergy$1(caps.recharge) },
18138
19889
  ],
18139
19890
  };
18140
19891
  }
@@ -18144,7 +19895,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18144
19895
  capability: 'Gatherer',
18145
19896
  attributes: [
18146
19897
  { label: 'Yield', value: caps.yield },
18147
- { label: 'Drain', value: caps.drain },
19898
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18148
19899
  { label: 'Depth', value: caps.depth },
18149
19900
  ],
18150
19901
  };
@@ -18166,7 +19917,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18166
19917
  capability: 'Crafting',
18167
19918
  attributes: [
18168
19919
  { label: 'Speed', value: caps.speed },
18169
- { label: 'Drain', value: caps.drain },
19920
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18170
19921
  ],
18171
19922
  };
18172
19923
  }
@@ -18177,12 +19928,12 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18177
19928
  attributes: [
18178
19929
  { label: 'Capacity', value: caps.capacity },
18179
19930
  { label: 'Efficiency', value: caps.efficiency },
18180
- { label: 'Drain', value: caps.drain },
19931
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18181
19932
  ],
18182
19933
  };
18183
19934
  }
18184
19935
  case MODULE_STORAGE: {
18185
- const caps = computeStorageCapabilities(stats);
19936
+ const caps = computeStorageCapabilities(stats, tier);
18186
19937
  return {
18187
19938
  capability: 'Storage',
18188
19939
  attributes: [
@@ -18190,6 +19941,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18190
19941
  label: 'Cargo Capacity',
18191
19942
  value: applySlotMultiplierUint32(caps.capacity, outputPct),
18192
19943
  },
19944
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18193
19945
  ],
18194
19946
  };
18195
19947
  }
@@ -18200,7 +19952,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18200
19952
  attributes: [
18201
19953
  {
18202
19954
  label: 'Energy Capacity',
18203
- value: applySlotMultiplierUint32(caps.capacity, outputPct),
19955
+ value: toWholeEnergy$1(applySlotMultiplierUint32(caps.capacity, outputPct)),
18204
19956
  },
18205
19957
  ],
18206
19958
  };
@@ -18242,10 +19994,19 @@ function resolveModule(id, stats) {
18242
19994
  attributes,
18243
19995
  };
18244
19996
  }
18245
- function hullCapsForEntity(itemId, decoded) {
19997
+ function hullCapsForEntity(itemId, decoded, packedStats) {
19998
+ const hullStats = getPackedEntityType(itemId)?.equals(ENTITY_SHIP)
19999
+ ? {
20000
+ strength: decodeStat(packedStats, 0),
20001
+ hardness: decodeStat(packedStats, 1),
20002
+ plasticity: decodeStat(packedStats, 2),
20003
+ volatility: decodeStat(packedStats, 3),
20004
+ conductivity: decodeStat(packedStats, 4),
20005
+ }
20006
+ : decoded;
18246
20007
  return {
18247
- hullmass: computeBaseHullmass(decoded),
18248
- capacity: computeBaseCapacity(itemId, decoded),
20008
+ hullmass: computeBaseHullmass(itemId, hullStats),
20009
+ capacity: computeBaseCapacity(itemId, hullStats),
18249
20010
  };
18250
20011
  }
18251
20012
  function resolveEntity(id, stats, modules) {
@@ -18262,7 +20023,7 @@ function resolveEntity(id, stats, modules) {
18262
20023
  decoded.density = decodeStat(bigStats, 1);
18263
20024
  if (decoded.hardness === undefined)
18264
20025
  decoded.hardness = decodeStat(bigStats, 2);
18265
- const hullCaps = hullCapsForEntity(id, decoded);
20026
+ const hullCaps = hullCapsForEntity(id, decoded, bigStats);
18266
20027
  attributes = [
18267
20028
  {
18268
20029
  capability: 'Hull',
@@ -18498,6 +20259,9 @@ function moduleSlotsForImmutable(modules) {
18498
20259
  }));
18499
20260
  }
18500
20261
  const IMAGE_HOST_URL = 'https://item.shiploadgame.com/item';
20262
+ function toWholeEnergy(milli) {
20263
+ return Math.floor((milli + 500) / 1000);
20264
+ }
18501
20265
  function bytesToBase64Url(bytes) {
18502
20266
  let binary = '';
18503
20267
  for (let i = 0; i < bytes.byteLength; i++)
@@ -18563,8 +20327,14 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18563
20327
  const thm = decodeStat(stats, 1);
18564
20328
  base.push({ first: 'volatility', second: ['uint16', vol] });
18565
20329
  base.push({ first: 'thermal', second: ['uint16', thm] });
18566
- base.push({ first: 'thrust', second: ['uint32', computeEngineThrust(vol)] });
18567
- base.push({ first: 'drain', second: ['uint16', computeEngineDrain(thm)] });
20330
+ base.push({
20331
+ first: 'thrust',
20332
+ second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol))],
20333
+ });
20334
+ base.push({
20335
+ first: 'drain',
20336
+ second: ['uint16', computeEngineDrain(computeEffectiveModuleStat(thm))],
20337
+ });
18568
20338
  break;
18569
20339
  }
18570
20340
  case MODULE_GENERATOR: {
@@ -18572,8 +20342,20 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18572
20342
  const ref = decodeStat(stats, 1);
18573
20343
  base.push({ first: 'resonance', second: ['uint16', res] });
18574
20344
  base.push({ first: 'reflectivity', second: ['uint16', ref] });
18575
- base.push({ first: 'capacity', second: ['uint16', computeGeneratorCap(res)] });
18576
- base.push({ first: 'recharge', second: ['uint16', computeGeneratorRech(ref)] });
20345
+ base.push({
20346
+ first: 'capacity',
20347
+ second: [
20348
+ 'uint16',
20349
+ toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res))),
20350
+ ],
20351
+ });
20352
+ base.push({
20353
+ first: 'recharge',
20354
+ second: [
20355
+ 'uint16',
20356
+ toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref))),
20357
+ ],
20358
+ });
18577
20359
  break;
18578
20360
  }
18579
20361
  case MODULE_GATHERER: {
@@ -18584,7 +20366,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18584
20366
  base.push({ first: 'hardness', second: ['uint16', hrd] });
18585
20367
  base.push({ first: 'saturation', second: ['uint16', sat] });
18586
20368
  base.push({ first: 'yield', second: ['uint16', computeGathererYield(str)] });
18587
- base.push({ first: 'drain', second: ['uint16', computeGathererDrain(sat)] });
20369
+ base.push({
20370
+ first: 'drain',
20371
+ second: ['uint16', toWholeEnergy(computeGathererDrain(sat))],
20372
+ });
18588
20373
  base.push({ first: 'depth', second: ['uint16', computeGathererDepth(hrd, item.tier)] });
18589
20374
  break;
18590
20375
  }
@@ -18609,7 +20394,16 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18609
20394
  base.push({ first: 'fineness', second: ['uint16', fin] });
18610
20395
  base.push({ first: 'conductivity', second: ['uint16', con] });
18611
20396
  base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin)] });
18612
- base.push({ first: 'drain', second: ['uint16', computeCrafterDrain(con)] });
20397
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeCrafterDrain(con))] });
20398
+ break;
20399
+ }
20400
+ case MODULE_BUILDER: {
20401
+ const res = decodeStat(stats, 0);
20402
+ const fin = decodeStat(stats, 1);
20403
+ base.push({ first: 'resonance', second: ['uint16', res] });
20404
+ base.push({ first: 'fineness', second: ['uint16', fin] });
20405
+ base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(res)] });
20406
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeBuilderDrain(fin))] });
18613
20407
  break;
18614
20408
  }
18615
20409
  case MODULE_STORAGE: {
@@ -18623,7 +20417,11 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18623
20417
  base.push({ first: 'cohesion', second: ['uint16', com] });
18624
20418
  base.push({
18625
20419
  first: 'capacity',
18626
- second: ['uint32', computeCargoBayCapacity(str, den, hrd, com)],
20420
+ second: ['uint32', computeCargoBayCapacity(str, den, hrd)],
20421
+ });
20422
+ base.push({
20423
+ first: 'drain',
20424
+ second: ['uint16', toWholeEnergy(computeCargoBayDrain(com, item.tier))],
18627
20425
  });
18628
20426
  break;
18629
20427
  }
@@ -18638,7 +20436,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18638
20436
  base.push({ first: 'insulation', second: ['uint16', ins] });
18639
20437
  base.push({
18640
20438
  first: 'capacity',
18641
- second: ['uint32', computeBatteryBankCapacity(vol, thm, pla, ins)],
20439
+ second: ['uint32', toWholeEnergy(computeBatteryBankCapacity(vol, thm, pla, ins))],
18642
20440
  });
18643
20441
  break;
18644
20442
  }
@@ -18651,7 +20449,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18651
20449
  base.push({ first: 'conductivity', second: ['uint16', con] });
18652
20450
  base.push({ first: 'capacity', second: ['uint8', computeHaulerCapacity(res, item.tier)] });
18653
20451
  base.push({ first: 'efficiency', second: ['uint16', computeHaulerEfficiency(pla)] });
18654
- base.push({ first: 'drain', second: ['uint16', computeHaulerDrain$1(con)] });
20452
+ base.push({
20453
+ first: 'drain',
20454
+ second: ['uint16', toWholeEnergy(computeHaulerDrain(con, item.tier))],
20455
+ });
18655
20456
  break;
18656
20457
  }
18657
20458
  }
@@ -18704,6 +20505,7 @@ var index = /*#__PURE__*/Object.freeze({
18704
20505
  deserializeModule: deserializeModule,
18705
20506
  deserializeEntity: deserializeEntity,
18706
20507
  deserializeAsset: deserializeAsset,
20508
+ toWholeEnergy: toWholeEnergy$1,
18707
20509
  computeBaseHullmass: computeBaseHullmass$1,
18708
20510
  computeBaseCapacityShip: computeBaseCapacityShip,
18709
20511
  computeBaseCapacityContainer: computeBaseCapacityContainer,
@@ -18723,9 +20525,13 @@ var index = /*#__PURE__*/Object.freeze({
18723
20525
  computeLoaderThrust: computeLoaderThrust,
18724
20526
  computeCrafterSpeed: computeCrafterSpeed,
18725
20527
  computeCrafterDrain: computeCrafterDrain,
20528
+ computeBuilderSpeed: computeBuilderSpeed,
20529
+ computeBuilderDrain: computeBuilderDrain,
18726
20530
  computeHaulerCapacity: computeHaulerCapacity,
18727
20531
  computeHaulerEfficiency: computeHaulerEfficiency,
18728
- computeHaulerDrain: computeHaulerDrain$1,
20532
+ supportDrainTierPercent: supportDrainTierPercent,
20533
+ computeHaulerDrain: computeHaulerDrain,
20534
+ computeCargoBayDrain: computeCargoBayDrain,
18729
20535
  computeWarpRange: computeWarpRange,
18730
20536
  computeCargoBayCapacity: computeCargoBayCapacity,
18731
20537
  computeBatteryBankCapacity: computeBatteryBankCapacity,
@@ -19002,6 +20808,7 @@ exports.CRAFT_NOT_ENOUGH_ENERGY = CRAFT_NOT_ENOUGH_ENERGY;
19002
20808
  exports.ClusterManager = ClusterManager;
19003
20809
  exports.ConstructionManager = ConstructionManager;
19004
20810
  exports.Coordinates = Coordinates;
20811
+ exports.DEFAULT_BASE_HULLMASS = DEFAULT_BASE_HULLMASS;
19005
20812
  exports.DEPLOY_ENTITY_HAS_SCHEDULE = DEPLOY_ENTITY_HAS_SCHEDULE;
19006
20813
  exports.DEPTH_THRESHOLD_T1 = DEPTH_THRESHOLD_T1;
19007
20814
  exports.DEPTH_THRESHOLD_T2 = DEPTH_THRESHOLD_T2;
@@ -19029,6 +20836,7 @@ exports.ENTITY_NOT_ENOUGH_ENERGY_CAPACITY = ENTITY_NOT_ENOUGH_ENERGY_CAPACITY;
19029
20836
  exports.ENTITY_NO_CRAFTER = ENTITY_NO_CRAFTER;
19030
20837
  exports.ENTITY_SHIP = ENTITY_SHIP;
19031
20838
  exports.ENTITY_WAREHOUSE = ENTITY_WAREHOUSE;
20839
+ exports.ENTITY_WORKSHOP = ENTITY_WORKSHOP;
19032
20840
  exports.EPOCH_NON_ZERO = EPOCH_NON_ZERO;
19033
20841
  exports.EPOCH_NOT_READY = EPOCH_NOT_READY;
19034
20842
  exports.ERROR_SYSTEM_ALREADY_INITIALIZED = ERROR_SYSTEM_ALREADY_INITIALIZED;
@@ -19072,6 +20880,7 @@ exports.ITEM_BIOMASS_T6 = ITEM_BIOMASS_T6;
19072
20880
  exports.ITEM_BIOMASS_T7 = ITEM_BIOMASS_T7;
19073
20881
  exports.ITEM_BIOMASS_T8 = ITEM_BIOMASS_T8;
19074
20882
  exports.ITEM_BIOMASS_T9 = ITEM_BIOMASS_T9;
20883
+ exports.ITEM_BUILDER_T1 = ITEM_BUILDER_T1;
19075
20884
  exports.ITEM_CERAMIC = ITEM_CERAMIC;
19076
20885
  exports.ITEM_CERAMIC_T2 = ITEM_CERAMIC_T2;
19077
20886
  exports.ITEM_CONTAINER_T1_PACKED = ITEM_CONTAINER_T1_PACKED;
@@ -19088,6 +20897,7 @@ exports.ITEM_CRYSTAL_T7 = ITEM_CRYSTAL_T7;
19088
20897
  exports.ITEM_CRYSTAL_T8 = ITEM_CRYSTAL_T8;
19089
20898
  exports.ITEM_CRYSTAL_T9 = ITEM_CRYSTAL_T9;
19090
20899
  exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
20900
+ exports.ITEM_DREDGER_T1_PACKED = ITEM_DREDGER_T1_PACKED;
19091
20901
  exports.ITEM_ENGINE_T1 = ITEM_ENGINE_T1;
19092
20902
  exports.ITEM_EXTRACTOR_T1_PACKED = ITEM_EXTRACTOR_T1_PACKED;
19093
20903
  exports.ITEM_FACTORY_T1_PACKED = ITEM_FACTORY_T1_PACKED;
@@ -19133,6 +20943,8 @@ exports.ITEM_PLATE = ITEM_PLATE;
19133
20943
  exports.ITEM_PLATE_T2 = ITEM_PLATE_T2;
19134
20944
  exports.ITEM_POLYMER = ITEM_POLYMER;
19135
20945
  exports.ITEM_POLYMER_T2 = ITEM_POLYMER_T2;
20946
+ exports.ITEM_PORTER_T1_PACKED = ITEM_PORTER_T1_PACKED;
20947
+ exports.ITEM_PROSPECTOR_T1_PACKED = ITEM_PROSPECTOR_T1_PACKED;
19136
20948
  exports.ITEM_PROSPECTOR_T2_PACKED = ITEM_PROSPECTOR_T2_PACKED;
19137
20949
  exports.ITEM_REACTOR = ITEM_REACTOR;
19138
20950
  exports.ITEM_REACTOR_T2 = ITEM_REACTOR_T2;
@@ -19150,17 +20962,24 @@ exports.ITEM_RESIN = ITEM_RESIN;
19150
20962
  exports.ITEM_RESIN_T2 = ITEM_RESIN_T2;
19151
20963
  exports.ITEM_RESONATOR = ITEM_RESONATOR;
19152
20964
  exports.ITEM_RESONATOR_T2 = ITEM_RESONATOR_T2;
20965
+ exports.ITEM_ROUSTABOUT_T1_PACKED = ITEM_ROUSTABOUT_T1_PACKED;
19153
20966
  exports.ITEM_SENSOR = ITEM_SENSOR;
19154
20967
  exports.ITEM_SENSOR_T2 = ITEM_SENSOR_T2;
19155
20968
  exports.ITEM_SHIP_T1_PACKED = ITEM_SHIP_T1_PACKED;
19156
20969
  exports.ITEM_STORAGE_T1 = ITEM_STORAGE_T1;
20970
+ exports.ITEM_TENDER_T1_PACKED = ITEM_TENDER_T1_PACKED;
20971
+ exports.ITEM_TUG_T1_PACKED = ITEM_TUG_T1_PACKED;
19157
20972
  exports.ITEM_TYPE_COMPONENT = ITEM_TYPE_COMPONENT;
19158
20973
  exports.ITEM_TYPE_ENTITY = ITEM_TYPE_ENTITY;
19159
20974
  exports.ITEM_TYPE_MODULE = ITEM_TYPE_MODULE;
19160
20975
  exports.ITEM_TYPE_RESOURCE = ITEM_TYPE_RESOURCE;
19161
20976
  exports.ITEM_WAREHOUSE_T1_PACKED = ITEM_WAREHOUSE_T1_PACKED;
19162
20977
  exports.ITEM_WARP_T1 = ITEM_WARP_T1;
20978
+ exports.ITEM_WORKSHOP_T1_PACKED = ITEM_WORKSHOP_T1_PACKED;
20979
+ exports.ITEM_WRANGLER_T1_PACKED = ITEM_WRANGLER_T1_PACKED;
20980
+ exports.ITEM_WRIGHT_T1_PACKED = ITEM_WRIGHT_T1_PACKED;
19163
20981
  exports.InventoryAccessor = InventoryAccessor;
20982
+ exports.JOB_QUEUE_CAP = JOB_QUEUE_CAP;
19164
20983
  exports.LANE_BARRIER = LANE_BARRIER;
19165
20984
  exports.LANE_MOBILITY = LANE_MOBILITY;
19166
20985
  exports.LOCAL_HALF = LOCAL_HALF;
@@ -19177,6 +20996,7 @@ exports.MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL = MIN_TRANSFER_DISTANCE_ORBITAL_VES
19177
20996
  exports.MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE = MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE;
19178
20997
  exports.MODULE_ANY = MODULE_ANY;
19179
20998
  exports.MODULE_BATTERY = MODULE_BATTERY;
20999
+ exports.MODULE_BUILDER = MODULE_BUILDER;
19180
21000
  exports.MODULE_CARGO_NOT_FOUND = MODULE_CARGO_NOT_FOUND;
19181
21001
  exports.MODULE_CRAFTER = MODULE_CRAFTER;
19182
21002
  exports.MODULE_ENGINE = MODULE_ENGINE;
@@ -19190,6 +21010,8 @@ exports.MODULE_NOT_MODULE = MODULE_NOT_MODULE;
19190
21010
  exports.MODULE_SLOT_EMPTY = MODULE_SLOT_EMPTY;
19191
21011
  exports.MODULE_SLOT_INVALID = MODULE_SLOT_INVALID;
19192
21012
  exports.MODULE_SLOT_OCCUPIED = MODULE_SLOT_OCCUPIED;
21013
+ exports.MODULE_STAT_SCALING_ANCHOR = MODULE_STAT_SCALING_ANCHOR;
21014
+ exports.MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = MODULE_STAT_SCALING_POST_ANCHOR_PERCENT;
19193
21015
  exports.MODULE_STORAGE = MODULE_STORAGE;
19194
21016
  exports.MODULE_TIER_PREFIXES = MODULE_TIER_PREFIXES;
19195
21017
  exports.MODULE_TYPE_MISMATCH = MODULE_TYPE_MISMATCH;
@@ -19207,7 +21029,7 @@ exports.PLANET_SUBTYPE_TERRESTRIAL = PLANET_SUBTYPE_TERRESTRIAL;
19207
21029
  exports.PLAYER_ALREADY_JOINED = PLAYER_ALREADY_JOINED;
19208
21030
  exports.PLAYER_NOT_FOUND = PLAYER_NOT_FOUND;
19209
21031
  exports.PLAYER_NOT_JOINED = PLAYER_NOT_JOINED;
19210
- exports.PRECISION = PRECISION$1;
21032
+ exports.PRECISION = PRECISION;
19211
21033
  exports.PlatformContract = platform;
19212
21034
  exports.Player = Player;
19213
21035
  exports.PlayersManager = PlayersManager;
@@ -19286,6 +21108,8 @@ exports.calcCargoMass = calcCargoMass;
19286
21108
  exports.calcEnergyUsage = calcEnergyUsage;
19287
21109
  exports.calcStacksMass = calcStacksMass;
19288
21110
  exports.calc_acceleration = calc_acceleration;
21111
+ exports.calc_build_duration = calc_build_duration;
21112
+ exports.calc_build_energy = calc_build_energy;
19289
21113
  exports.calc_craft_duration = calc_craft_duration;
19290
21114
  exports.calc_craft_energy = calc_craft_energy;
19291
21115
  exports.calc_energyusage = calc_energyusage;
@@ -19305,6 +21129,7 @@ exports.calc_ship_mass = calc_ship_mass;
19305
21129
  exports.calc_ship_rechargetime = calc_ship_rechargetime;
19306
21130
  exports.calc_transfer_duration = calc_transfer_duration;
19307
21131
  exports.calc_transit_duration = calc_transit_duration;
21132
+ exports.calc_travel_flighttime = calc_travel_flighttime;
19308
21133
  exports.calculateFlightTime = calculateFlightTime;
19309
21134
  exports.calculateLoadTimeBreakdown = calculateLoadTimeBreakdown;
19310
21135
  exports.calculateRefuelingTime = calculateRefuelingTime;
@@ -19336,16 +21161,21 @@ exports.compareByStars = compareByStars;
19336
21161
  exports.componentIcon = componentIcon;
19337
21162
  exports.composeIdleResolve = composeIdleResolve;
19338
21163
  exports.computeBaseCapacity = computeBaseCapacity;
21164
+ exports.computeBaseCapacityContainer = computeBaseCapacityContainer;
19339
21165
  exports.computeBaseCapacityShip = computeBaseCapacityShip;
19340
21166
  exports.computeBaseCapacityWarehouse = computeBaseCapacityWarehouse;
19341
21167
  exports.computeBaseHullmass = computeBaseHullmass$1;
19342
21168
  exports.computeBatteryCapabilities = computeBatteryCapabilities;
21169
+ exports.computeBuilderCapabilities = computeBuilderCapabilities;
21170
+ exports.computeBuilderDrain = computeBuilderDrain;
21171
+ exports.computeBuilderSpeed = computeBuilderSpeed;
19343
21172
  exports.computeComponentStats = computeComponentStats;
19344
21173
  exports.computeContainerCapabilities = computeContainerCapabilities;
19345
21174
  exports.computeCraftedOutputStats = computeCraftedOutputStats;
19346
21175
  exports.computeCrafterCapabilities = computeCrafterCapabilities;
19347
21176
  exports.computeCrafterDrain = computeCrafterDrain;
19348
21177
  exports.computeCrafterSpeed = computeCrafterSpeed;
21178
+ exports.computeEffectiveModuleStat = computeEffectiveModuleStat;
19349
21179
  exports.computeEngineCapabilities = computeEngineCapabilities;
19350
21180
  exports.computeEngineDrain = computeEngineDrain;
19351
21181
  exports.computeEngineThrust = computeEngineThrust;
@@ -19363,7 +21193,6 @@ exports.computeGroupPerLegReach = computeGroupPerLegReach;
19363
21193
  exports.computeHaulPenalty = computeHaulPenalty;
19364
21194
  exports.computeHaulerCapabilities = computeHaulerCapabilities;
19365
21195
  exports.computeHaulerCapacity = computeHaulerCapacity;
19366
- exports.computeHaulerDrain = computeHaulerDrain;
19367
21196
  exports.computeHaulerEfficiency = computeHaulerEfficiency;
19368
21197
  exports.computeInputMass = computeInputMass;
19369
21198
  exports.computeLauncherCapabilities = computeLauncherCapabilities;
@@ -19441,6 +21270,7 @@ exports.formatTier = formatTier;
19441
21270
  exports.gatherEnergyCost = gatherEnergyCost;
19442
21271
  exports.gathererDepthForTier = gathererDepthForTier;
19443
21272
  exports.getAllRecipes = getAllRecipes;
21273
+ exports.getBaseHullmassFor = getBaseHullmassFor;
19444
21274
  exports.getCapabilityAttributeRows = getCapabilityAttributeRows;
19445
21275
  exports.getCapabilityAttributes = getCapabilityAttributes;
19446
21276
  exports.getCategoryInfo = getCategoryInfo;
@@ -19519,12 +21349,14 @@ exports.isShip = isShip;
19519
21349
  exports.isSubscriptionsDebugEnabled = isSubscriptionsDebugEnabled;
19520
21350
  exports.isValidWormholePair = isValidWormholePair;
19521
21351
  exports.isWarehouse = isWarehouse;
21352
+ exports.isWorkshop = isWorkshop;
19522
21353
  exports.itemAbbreviations = itemAbbreviations;
19523
21354
  exports.itemCategory = itemCategory;
19524
21355
  exports.itemIds = itemIds;
19525
21356
  exports.itemOffset = itemOffset;
19526
21357
  exports.itemTier = itemTier;
19527
21358
  exports.itemTypeCode = itemTypeCode;
21359
+ exports.jobsToLanes = jobsToLanes;
19528
21360
  exports.kindCan = kindCan;
19529
21361
  exports.laneKeyForModule = laneKeyForModule;
19530
21362
  exports.lerp = lerp$1;
@@ -19543,6 +21375,7 @@ exports.needsRecharge = needsRecharge;
19543
21375
  exports.normalizeDisplayName = normalizeDisplayName;
19544
21376
  exports.parseWireEntity = parseWireEntity;
19545
21377
  exports.partnerRegion = partnerRegion;
21378
+ exports.pickFabricator = pickFabricator;
19546
21379
  exports.planParallelTransfer = planParallelTransfer;
19547
21380
  exports.planRoute = planRoute;
19548
21381
  exports.projectEntity = projectEntity;
@@ -19558,6 +21391,7 @@ exports.removeFromStacks = removeFromStacks;
19558
21391
  exports.renderDescription = renderDescription;
19559
21392
  exports.resolveItem = resolveItem;
19560
21393
  exports.resolveItemCategory = resolveItemCategory;
21394
+ exports.resolveLaneBuilder = resolveLaneBuilder;
19561
21395
  exports.resolveLaneCrafter = resolveLaneCrafter;
19562
21396
  exports.resolveLaneGatherer = resolveLaneGatherer;
19563
21397
  exports.resolveLaneLoader = resolveLaneLoader;
@@ -19565,6 +21399,7 @@ exports.resolveLockedAmount = resolveLockedAmount;
19565
21399
  exports.resolveStats = resolveStats;
19566
21400
  exports.rollTier = rollTier;
19567
21401
  exports.rollWithinTier = rollWithinTier;
21402
+ exports.rollupBuilder = rollupBuilder;
19568
21403
  exports.rollupCrafter = rollupCrafter;
19569
21404
  exports.rollupGatherer = rollupGatherer;
19570
21405
  exports.rollupLoaders = rollupLoaders;
@@ -19572,10 +21407,10 @@ exports.rotation = rotation;
19572
21407
  exports.schedule = schedule;
19573
21408
  exports.sdkSystemGraph = sdkSystemGraph;
19574
21409
  exports.selectGatherLane = selectGatherLane;
19575
- exports.setScanProvider = setScanProvider;
19576
21410
  exports.setSubscriptionsDebug = setSubscriptionsDebug;
19577
21411
  exports.simulateRoute = simulateRoute;
19578
21412
  exports.slotAcceptsModule = slotAcceptsModule;
21413
+ exports.socketTail = socketTail;
19579
21414
  exports.sourceLabelForOutput = sourceLabelForOutput;
19580
21415
  exports.splitCost = splitCost;
19581
21416
  exports.stackKey = stackKey;